Initial commit

EBO <eric.bouhana@softalys.com> committé le 2026-04-17 15:11

4b68c7154a33d0c3754b9cc54686673f03137d93

263 fichiers modifiés +50896 -0
A .github/workflows/build-docs.yml
+72 -0
@@ -0,0 +1,72 @@
1 +# CI de build, lint et validation pour la documentation gitrust
2 +# Déclenchée sur chaque push et pull request vers main
3 +
4 +name: Build documentation
5 +
6 +on:
7 + push:
8 + branches: [main]
9 + pull_request:
10 + branches: [main]
11 +
12 +jobs:
13 + build:
14 + name: Build, lint et validation
15 + runs-on: ubuntu-latest
16 +
17 + steps:
18 + - name: Checkout du dépôt
19 + uses: actions/checkout@v4
20 +
21 + - name: Installer Rust (stable)
22 + uses: dtolnay/rust-toolchain@stable
23 +
24 + - name: Mettre en cache le registre Cargo
25 + uses: actions/cache@v4
26 + with:
27 + path: |
28 + ~/.cargo/registry
29 + ~/.cargo/git
30 + ~/.cargo/bin
31 + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
32 + restore-keys: |
33 + ${{ runner.os }}-cargo-
34 +
35 + - name: Installer mdbook
36 + run: |
37 + cargo install mdbook --locked --version "^0.4"
38 +
39 + - name: Installer mdbook-mermaid
40 + run: |
41 + cargo install mdbook-mermaid --locked
42 +
43 + - name: Construire la documentation (FR)
44 + run: mdbook build
45 +
46 + - name: Installer Node.js
47 + uses: actions/setup-node@v4
48 + with:
49 + node-version: '20'
50 +
51 + - name: Installer markdownlint-cli2
52 + run: npm install -g markdownlint-cli2
53 +
54 + - name: Linter les fichiers Markdown
55 + run: markdownlint-cli2 "**/*.md" "#node_modules" "#book"
56 +
57 + - name: Installer mermaid-cli
58 + run: npm install -g @mermaid-js/mermaid-cli
59 +
60 + - name: Valider les diagrammes Mermaid
61 + run: |
62 + shopt -s nullglob
63 + mmd_files=(diagrams/*.mmd)
64 + if [ ${#mmd_files[@]} -eq 0 ]; then
65 + echo "Aucun fichier .mmd trouvé dans diagrams/ — étape ignorée."
66 + exit 0
67 + fi
68 + for f in "${mmd_files[@]}"; do
69 + echo "Validation de $f..."
70 + mmdc -i "$f" -o /tmp/out.svg
71 + echo " OK"
72 + done
A .markdownlint.yaml
+50 -0
@@ -0,0 +1,50 @@
1 +# Configuration markdownlint pour la documentation gitrust
2 +# Référence : https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md
3 +
4 +# Longueur de ligne maximale : 120 caractères
5 +# Les blocs de code, tableaux et URLs sont exclus
6 +MD013:
7 + line_length: 120
8 + code_blocks: false
9 + tables: false
10 + headings: false
11 +
12 +# Autoriser certaines balises HTML utiles pour la mise en forme
13 +# <details> et <summary> sont utilisés pour les sections repliables
14 +MD033:
15 + allowed_elements:
16 + - details
17 + - summary
18 + - br
19 + - kbd
20 + - sup
21 + - sub
22 +
23 +# Désactivé : mdBook injecte le titre depuis SUMMARY.md,
24 +# la première ligne d'un fichier source n'a pas besoin d'être un H1
25 +MD041: false
26 +
27 +# Interdit les espaces en fin de ligne (conservé actif)
28 +MD009: true
29 +
30 +# Interdit les lignes vides multiples consécutives
31 +MD012:
32 + maximum: 1
33 +
34 +# Impose des titres cohérents (pas de saut H1 → H3)
35 +MD001: true
36 +
37 +# Cohérence du style des listes non ordonnées (tiret)
38 +MD004:
39 + style: dash
40 +
41 +# Cohérence des blocs de code délimités (backticks)
42 +MD046:
43 + style: fenced
44 +
45 +# Espace requis après le marqueur de liste
46 +MD030:
47 + ul_single: 1
48 + ol_single: 1
49 + ul_multi: 1
50 + ol_multi: 1
A .omc/sessions/0d1f2ab7-88e8-40e3-a660-1224d3d46c76.json
+8 -0
@@ -0,0 +1,8 @@
1 +{
2 + "session_id": "0d1f2ab7-88e8-40e3-a660-1224d3d46c76",
3 + "ended_at": "2026-04-17T14:16:59.018Z",
4 + "reason": "other",
5 + "agents_spawned": 2,
6 + "agents_completed": 2,
7 + "modes_used": []
8 +}
8 < \ No newline at end of file
A .omc/sessions/3ee3ef93-1bf2-409a-9b40-4a3f9aab2717.json
+8 -0
@@ -0,0 +1,8 @@
1 +{
2 + "session_id": "3ee3ef93-1bf2-409a-9b40-4a3f9aab2717",
3 + "ended_at": "2026-04-17T13:07:22.927Z",
4 + "reason": "other",
5 + "agents_spawned": 0,
6 + "agents_completed": 0,
7 + "modes_used": []
8 +}
8 < \ No newline at end of file
A .omc/state/agent-replay-3ee3ef93-1bf2-409a-9b40-4a3f9aab2717.jsonl
+8 -0
@@ -0,0 +1,8 @@
1 +{"t":0,"agent":"aee036e","agent_type":"executor","event":"agent_start","parent_mode":"none"}
2 +{"t":0,"agent":"a91af61","agent_type":"executor","event":"agent_start","parent_mode":"none"}
3 +{"t":0,"agent":"ae05933","agent_type":"executor","event":"agent_start","parent_mode":"none"}
4 +{"t":0,"agent":"a700cb9","agent_type":"executor","event":"agent_start","parent_mode":"none"}
5 +{"t":0,"agent":"aee036e","agent_type":"executor","event":"agent_stop","success":true,"duration_ms":241879}
6 +{"t":0,"agent":"a700cb9","agent_type":"executor","event":"agent_stop","success":true,"duration_ms":210730}
7 +{"t":0,"agent":"ae05933","agent_type":"executor","event":"agent_stop","success":true,"duration_ms":332456}
8 +{"t":0,"agent":"a91af61","agent_type":"executor","event":"agent_stop","success":true,"duration_ms":838029}
A .omc/state/idle-notif-cooldown.json
+3 -0
@@ -0,0 +1,3 @@
1 +{
2 + "lastSentAt": "2026-04-17T14:47:54.516Z"
3 +}
3 < \ No newline at end of file
A .omc/state/mission-state.json
+143 -0
@@ -0,0 +1,143 @@
1 +{
2 + "updatedAt": "2026-04-17T14:32:10.805Z",
3 + "missions": [
4 + {
5 + "id": "session:3ee3ef93-1bf2-409a-9b40-4a3f9aab2717:none",
6 + "source": "session",
7 + "name": "none",
8 + "objective": "Session mission",
9 + "createdAt": "2026-04-17T13:11:34.572Z",
10 + "updatedAt": "2026-04-17T14:32:10.805Z",
11 + "status": "done",
12 + "workerCount": 6,
13 + "taskCounts": {
14 + "total": 6,
15 + "pending": 0,
16 + "blocked": 0,
17 + "inProgress": 0,
18 + "completed": 6,
19 + "failed": 0
20 + },
21 + "agents": [
22 + {
23 + "name": "Explore:a94b24f",
24 + "role": "Explore",
25 + "ownership": "a94b24f27cc830119",
26 + "status": "done",
27 + "currentStep": null,
28 + "latestUpdate": "completed",
29 + "completedSummary": null,
30 + "updatedAt": "2026-04-17T13:13:55.288Z"
31 + },
32 + {
33 + "name": "Explore:a60004d",
34 + "role": "Explore",
35 + "ownership": "a60004d7c1c5aa264",
36 + "status": "done",
37 + "currentStep": null,
38 + "latestUpdate": "completed",
39 + "completedSummary": null,
40 + "updatedAt": "2026-04-17T13:32:18.096Z"
41 + },
42 + {
43 + "name": "executor:aee036e",
44 + "role": "executor",
45 + "ownership": "aee036e624c83de9b",
46 + "status": "done",
47 + "currentStep": null,
48 + "latestUpdate": "completed",
49 + "completedSummary": null,
50 + "updatedAt": "2026-04-17T14:21:49.414Z"
51 + },
52 + {
53 + "name": "executor:a91af61",
54 + "role": "executor",
55 + "ownership": "a91af616306bfc605",
56 + "status": "done",
57 + "currentStep": null,
58 + "latestUpdate": "completed",
59 + "completedSummary": null,
60 + "updatedAt": "2026-04-17T14:32:10.805Z"
61 + },
62 + {
63 + "name": "executor:ae05933",
64 + "role": "executor",
65 + "ownership": "ae05933e0e3918607",
66 + "status": "done",
67 + "currentStep": null,
68 + "latestUpdate": "completed",
69 + "completedSummary": null,
70 + "updatedAt": "2026-04-17T14:24:13.852Z"
71 + },
72 + {
73 + "name": "executor:a700cb9",
74 + "role": "executor",
75 + "ownership": "a700cb975b07f9b00",
76 + "status": "done",
77 + "currentStep": null,
78 + "latestUpdate": "completed",
79 + "completedSummary": null,
80 + "updatedAt": "2026-04-17T14:22:38.798Z"
81 + }
82 + ],
83 + "timeline": [
84 + {
85 + "id": "session-start:a91af616306bfc605:2026-04-17T14:18:12.776Z",
86 + "at": "2026-04-17T14:18:12.776Z",
87 + "kind": "update",
88 + "agent": "executor:a91af61",
89 + "detail": "started executor:a91af61",
90 + "sourceKey": "session-start:a91af616306bfc605"
91 + },
92 + {
93 + "id": "session-start:ae05933e0e3918607:2026-04-17T14:18:41.396Z",
94 + "at": "2026-04-17T14:18:41.396Z",
95 + "kind": "update",
96 + "agent": "executor:ae05933",
97 + "detail": "started executor:ae05933",
98 + "sourceKey": "session-start:ae05933e0e3918607"
99 + },
100 + {
101 + "id": "session-start:a700cb975b07f9b00:2026-04-17T14:19:08.068Z",
102 + "at": "2026-04-17T14:19:08.068Z",
103 + "kind": "update",
104 + "agent": "executor:a700cb9",
105 + "detail": "started executor:a700cb9",
106 + "sourceKey": "session-start:a700cb975b07f9b00"
107 + },
108 + {
109 + "id": "session-stop:aee036e624c83de9b:2026-04-17T14:21:49.414Z",
110 + "at": "2026-04-17T14:21:49.414Z",
111 + "kind": "completion",
112 + "agent": "executor:aee036e",
113 + "detail": "completed",
114 + "sourceKey": "session-stop:aee036e624c83de9b"
115 + },
116 + {
117 + "id": "session-stop:a700cb975b07f9b00:2026-04-17T14:22:38.798Z",
118 + "at": "2026-04-17T14:22:38.798Z",
119 + "kind": "completion",
120 + "agent": "executor:a700cb9",
121 + "detail": "completed",
122 + "sourceKey": "session-stop:a700cb975b07f9b00"
123 + },
124 + {
125 + "id": "session-stop:ae05933e0e3918607:2026-04-17T14:24:13.852Z",
126 + "at": "2026-04-17T14:24:13.852Z",
127 + "kind": "completion",
128 + "agent": "executor:ae05933",
129 + "detail": "completed",
130 + "sourceKey": "session-stop:ae05933e0e3918607"
131 + },
132 + {
133 + "id": "session-stop:a91af616306bfc605:2026-04-17T14:32:10.805Z",
134 + "at": "2026-04-17T14:32:10.805Z",
135 + "kind": "completion",
136 + "agent": "executor:a91af61",
137 + "detail": "completed",
138 + "sourceKey": "session-stop:a91af616306bfc605"
139 + }
140 + ]
141 + }
142 + ]
143 +}
143 < \ No newline at end of file
A .omc/state/skill-sessions.json
+16 -0
@@ -0,0 +1,16 @@
1 +{
2 + "sessions": {
3 + "3ee3ef93-1bf2-409a-9b40-4a3f9aab2717": {
4 + "injectedPaths": [
5 + "/home/monsieurb/.claude/skills/omc-learned/diataxis/SKILL.md"
6 + ],
7 + "timestamp": 1776433438621
8 + },
9 + "0d1f2ab7-88e8-40e3-a660-1224d3d46c76": {
10 + "injectedPaths": [
11 + "/home/monsieurb/.claude/skills/omc-learned/diataxis/SKILL.md"
12 + ],
13 + "timestamp": 1776433510254
14 + }
15 + }
16 +}
16 < \ No newline at end of file
A .omc/state/subagent-tracking.json
+44 -0
@@ -0,0 +1,44 @@
1 +{
2 + "agents": [
3 + {
4 + "agent_id": "aee036e624c83de9b",
5 + "agent_type": "oh-my-claudecode:executor",
6 + "started_at": "2026-04-17T14:17:47.535Z",
7 + "parent_mode": "none",
8 + "status": "completed",
9 + "completed_at": "2026-04-17T14:21:49.414Z",
10 + "duration_ms": 241879
11 + },
12 + {
13 + "agent_id": "a91af616306bfc605",
14 + "agent_type": "oh-my-claudecode:executor",
15 + "started_at": "2026-04-17T14:18:12.776Z",
16 + "parent_mode": "none",
17 + "status": "completed",
18 + "completed_at": "2026-04-17T14:32:10.805Z",
19 + "duration_ms": 838029
20 + },
21 + {
22 + "agent_id": "ae05933e0e3918607",
23 + "agent_type": "oh-my-claudecode:executor",
24 + "started_at": "2026-04-17T14:18:41.396Z",
25 + "parent_mode": "none",
26 + "status": "completed",
27 + "completed_at": "2026-04-17T14:24:13.852Z",
28 + "duration_ms": 332456
29 + },
30 + {
31 + "agent_id": "a700cb975b07f9b00",
32 + "agent_type": "oh-my-claudecode:executor",
33 + "started_at": "2026-04-17T14:19:08.068Z",
34 + "parent_mode": "none",
35 + "status": "completed",
36 + "completed_at": "2026-04-17T14:22:38.798Z",
37 + "duration_ms": 210730
38 + }
39 + ],
40 + "total_spawned": 4,
41 + "total_completed": 4,
42 + "total_failed": 0,
43 + "last_updated": "2026-04-17T14:32:10.906Z"
44 +}
44 < \ No newline at end of file
A .plans/001-scaffold-initial.md
+582 -0
@@ -0,0 +1,582 @@
1 +# Plan — Documentation officielle gitrust (girust_doc)
2 +
3 +## Contexte
4 +
5 +Le dépôt `/home/monsieurb/Documents/devel/girust_doc` est actuellement vide (3 dossiers `administration_manual/`, `user_manual/`, `template/` + un README de 9 lignes). Il doit héberger la documentation officielle publique de la plateforme **gitrust** (forge Git self-hosted en Rust, similaire à Gitea, déployée sur `demo.gitrust.eu`).
6 +
7 +La plateforme cible (explorée dans `/home/monsieurb/Documents/devel/gitrust`) est un **monorepo Rust à 6 crates** (rustwarden-core, gitrust-core, gitrust-git, gitrust-web, gitrust-ssh, gitrust-hooks), fournit un serveur HTTP (:4000) + SSH (:2222), PostgreSQL, CI Dagger intégrée, SBOM + Dependency-Track, i18n (6 langues : fr, en, de, es, pt, it), et vise l'auto-hébergement pour équipes de 3-20 personnes avec conformité ANSSI PA-074.
8 +
9 +Cette documentation doit être :
10 +- **Multilingue** : fr, en, de, es, pt, it (aligné avec les langues de l'UI gitrust)
11 +- **Structurée selon Diátaxis** : Tutorials / How-to / Reference / Explanation
12 +- **Publiée via mdBook** (natif Rust, cohérent avec la stack), Markdown brut lisible sans build
13 +- **Riche en diagrammes Mermaid** et en exemples réutilisables (configs, CI, code)
14 +
15 +## Objectif
16 +
17 +Scaffolder un dépôt documentaire complet, prêt à être rempli de contenu, avec :
18 +1. Une structure mdBook multilingue (6 langues) sur base FR → EN → autres
19 +2. **Quatre manuels** organisés selon Diátaxis :
20 + - `user_manual/` — utilisateurs finaux
21 + - `administration_manual/` — ops / self-hosters
22 + - `developer_manual/` — contributeurs core + utilisateurs API (**nouveau**)
23 + - `template/` — exemples copiables (hors Diátaxis par nature)
24 +3. Une bibliothèque de templates de configuration réutilisables
25 +4. Les outils d'automatisation (CI de build, lint Markdown, validation Mermaid)
26 +5. **Réutilisation maximale du contenu existant de `gitrust/docs/`** — 9 fichiers publiables quasi tels quels, 8 fichiers à extraire partiellement (voir § Manuel développeur)
27 +
28 +## Objectifs par manuel
29 +
30 +Chaque manuel a un public distinct, un objectif propre, et un périmètre explicitement délimité. Le respect strict de ces périmètres garantit qu'un lecteur trouve ce qu'il cherche sans traverser du contenu qui ne le concerne pas.
31 +
32 +### `user_manual/` — Manuel utilisateur
33 +
34 +- **Public** : utilisateurs finaux de gitrust (développeurs qui *utilisent* la forge : push/pull, code review, issues, notifications).
35 +- **Objectif** : rendre autonome quelqu'un qui se connecte à une instance gitrust existante pour collaborer sur du code.
36 +- **Couvre** : inscription, 2FA, gestion des clés SSH, création/clonage/push de dépôts, pull requests et stratégies de merge, issues et labels hiérarchiques, équipes et permissions, notifications, personal access tokens, usage de la CI intégrée (`.gitrust-ci.yml`), lecture du SBOM.
37 +- **Ne couvre pas** : l'installation de la plateforme, l'administration multi-utilisateurs, le code source gitrust, l'API programmatique avancée.
38 +- **Prérequis lecteur** : savoir utiliser Git en ligne de commande.
39 +
40 +### `administration_manual/` — Manuel d'administration
41 +
42 +- **Public** : ops et self-hosters qui déploient, configurent et maintiennent une instance gitrust en production.
43 +- **Objectif** : installer, exploiter et superviser une instance, depuis le premier démarrage jusqu'à la mise à jour et la restauration après incident.
44 +- **Couvre** : installation Docker / systemd, reverse-proxy TLS (Nginx/Caddy/Traefik), configuration SMTP et OAuth, CI runner distant, intégration Dependency-Track et Syft (SBOM), durcissement Fail2ban, tuning rate limiting, forçage 2FA global, sauvegarde/restauration (PostgreSQL + dépôts bare + clés SSH), procédure de mise à jour, dépannage SSH/CI, administration via `/admin`, conformité ANSSI PA-074.
45 +- **Ne couvre pas** : l'utilisation quotidienne par un développeur, la contribution au code source, le développement de clients API.
46 +- **Prérequis lecteur** : administration Linux, notions de réseau et TLS.
47 +
48 +### `developer_manual/` — Manuel développeur
49 +
50 +- **Public** : double — (a) contributeurs au code gitrust (core ou via fork rustwarden), (b) développeurs externes qui construisent des intégrations sur l'API publique.
51 +- **Objectif** : fournir tout le nécessaire pour comprendre l'architecture, contribuer du code conforme aux standards du projet, ou bâtir un client qui parle à l'API gitrust.
52 +- **Couvre** : architecture des 6 crates (rustwarden-core, gitrust-core, gitrust-git, gitrust-web, gitrust-ssh, gitrust-hooks), schéma de la base de données et ERD, modèle RBAC 4 niveaux, diagrammes de séquence (auth SSH, push, merge PR, import repo), patrons de contribution (ajouter une route, un service, une migration, un worker async), stratégie de tests unitaires et E2E (Playwright), règles QA et gates ANSSI, workflow de PR et contribution upstream rustwarden, référence complète de l'API REST v1 (auth, pagination, codes erreur, exemples de clients), fonctionnement interne de features (2FA, labels hiérarchiques, CI Dagger Easy vs Power Mode, décisions UI HTMX).
53 +- **Ne couvre pas** : l'installation d'une instance de production, l'usage utilisateur de la forge.
54 +- **Prérequis lecteur** : Rust (pour contribuer) ou un langage client (pour l'API) ; familiarité avec HTTP, Git, PostgreSQL.
55 +
56 +### `template/` — Bibliothèque d'exemples copiables
57 +
58 +- **Public** : tous les profils précédents, chaque fois qu'ils cherchent un point de départ prêt à l'emploi pour une config ou un script.
59 +- **Objectif** : fournir des fichiers **standalone, copiables tels quels**, couvrant les cas d'usage concrets rencontrés par les 3 autres manuels. Un fichier = un cas d'usage, nom explicite, commentaires internes suffisants, mais **pas de prose explicative autour**.
60 +- **Couvre** : fichiers `.env` par profil (dev local, production mono-machine, production CI-heavy, tests E2E), variantes `docker-compose.yml` (minimal, production avec Redis+SMTP, avec CI runner), reverse-proxy (Nginx TLS, Caddyfile, Traefik dynamique), unit systemd avec hardening AppArmor/seccomp + timer de sauvegarde, `.gitrust-ci.yml` par langage (Rust, Go, Python, Node) + squelette Dagger Power Mode, scripts de backup/restore, clients API d'exemple (Python, Rust, curl+PAT), scripts de migration depuis Gitea et Forgejo, alternative Podman Quadlet.
61 +- **Particularité** : **hors cadre Diátaxis** par nature — c'est un atelier, pas un texte pédagogique. L'unique fichier de prose est `template/index.md` qui sert de catalogue. Les manuels Diátaxis pointent vers ces templates depuis leurs how-to (ex. `administration_manual/how-to/configurer-smtp.md` → « copiez `template/env/production-mono-machine.env` puis... »).
62 +- **Ne couvre pas** : toute explication pédagogique (cela appartient aux 3 manuels).
63 +
64 +### Relations entre les 4 parties
65 +
66 +```mermaid
67 +graph LR
68 + U[user_manual] --> API[developer_manual/reference/api]
69 + U --> T[template/api-clients/]
70 + A[admin_manual] --> T
71 + D[developer_manual] --> T
72 + T -. référencé depuis .-> U
73 + T -. référencé depuis .-> A
74 + T -. référencé depuis .-> D
75 +```
76 +
77 +- Chaque manuel narratif (U/A/D) est lisible seul.
78 +- `template/` est la boîte à outils commune — les trois manuels y pointent depuis leurs how-to sans jamais dupliquer le contenu du template dans la prose.
79 +- Pas de dépendance circulaire : `template/` ne pointe jamais vers les manuels ; `user_manual` ne référence jamais `administration_manual` (publics distincts).
80 +
81 +## Principes directeurs
82 +
83 +- **FR comme langue source** (aligné avec le projet gitrust french-first) ; les autres langues sont des traductions dérivées via `mdbook-i18n-helpers` (patterns `po/xx.po`) — le même workflow que `rust-lang/book`.
84 +- **Diátaxis par manuel** : chaque manuel (user / admin) contient ses propres `tutorials/`, `how-to/`, `reference/`, `explanation/`.
85 +- **Les templates** sont du code/config copiable, pas de la prose : un fichier = un cas d'usage.
86 +- **Mermaid partout où une séquence, un flux ou une topologie clarifie plus que 10 lignes de texte.**
87 +- **Documentation autonome** : la doc est **déconnectée** des sources gitrust. Tout exemple (config, extrait de code, schéma, diagramme) est **copié** dans la doc, jamais référencé par lien local ni par chemin relatif sortant de `girust_doc/`. Un lecteur sur `demo.gitrust.eu` doit pouvoir tout trouver sans checkout du repo. Seule exception : lien HTTP vers le dépôt public (pour pointer vers le code de référence), mais le contenu reste dans la doc. Quand gitrust évolue, sync manuelle documentée dans `CONTRIBUTING.md`.
88 +- **Exigence pédagogique** : Diátaxis répond à « où placer le contenu », la pédagogie répond à « comment le contenu fait apprendre ». Les deux s'appliquent ensemble dans `tutorials/` et `explanation/` (voir § Principes pédagogiques).
89 +
90 +## Principes pédagogiques (tutorials + explanation)
91 +
92 +Les tutoriels et explanations doivent construire une **compétence** chez le lecteur, pas seulement l'informer. Quatre leviers sont imposés :
93 +
94 +### 1. Objectifs d'apprentissage mesurables (Bloom)
95 +
96 +Chaque tutoriel déclare en tête ses objectifs en **verbes observables** (lister, exécuter, configurer, diagnostiquer, comparer, concevoir). Interdits : *comprendre, maîtriser, savoir, connaître, se familiariser avec*.
97 +
98 +```markdown
99 +## Objectifs
100 +À la fin de ce tutoriel, vous saurez :
101 +- O1. [verbe Bloom] [objet concret]
102 +- O2. [verbe Bloom] [objet concret]
103 +- O3. [verbe Bloom] [objet concret]
104 +```
105 +
106 +Tutoriels débutants : Bloom niveaux 1-3 (mémoriser, comprendre, appliquer). Explanations : Bloom 2, 4, 5 (comprendre, analyser, évaluer).
107 +
108 +### 2. Charge cognitive maîtrisée (Sweller)
109 +
110 +- **≤ 3 concepts nouveaux** par tutoriel débutant.
111 +- **≤ 7 étapes séquentielles** sans checkpoint récapitulatif.
112 +- Texte et code **côte-à-côte** (pas de bloc de code sans annotation adjacente).
113 +- Jargon défini **à sa première apparition**.
114 +- Digressions/options/alternatives déportées en `reference/` (charge extrinsèque).
115 +
116 +### 3. Scaffolding — étayage dégressif entre tutoriels
117 +
118 +Le niveau d'aide recule d'exactement **un cran** entre deux tutoriels consécutifs :
119 +
120 +| Niveau | Nature | Position dans le parcours |
121 +|---|---|---|
122 +| 1 | Copier-coller intégral (100 % fourni) | Tutoriel 01-02 |
123 +| 2 | Compléter un trou (80 % fourni) | Tutoriel 03-04 |
124 +| 3 | Combiner des recettes existantes (50 %) | Tutoriel capstone |
125 +| 4 | Résoudre avec recettes dispo (20 %) | How-to (post-parcours) |
126 +
127 +Sauter deux crans = décrochage garanti.
128 +
129 +### 4. Feedback formatif — checkpoints observables
130 +
131 +Aucun apprenant n'avance **plus de 2 étapes sans feedback observable** :
132 +- Sortie console attendue affichée **verbatim**
133 +- Capture d'écran UI (ou description textuelle du résultat visible)
134 +- Commande de vérification (« pour confirmer, exécutez `git status` — vous devriez voir… »)
135 +- Section « **Et si ça ne marche pas** » avec les **3 erreurs les plus probables** et leur correction
136 +
137 +### 5. Ancrage mental avant la pratique
138 +
139 +Chaque tutoriel et explanation **commence** par installer le modèle mental **avant** toute commande :
140 +- Une analogie avec le connu
141 +- Un schéma Mermaid des acteurs et flux
142 +- Un contre-exemple le cas échéant
143 +- Un exemple prototype mémorable
144 +
145 +## Parcours d'apprentissage par persona
146 +
147 +Chaque manuel est un **parcours** explicite, pas un sac de tutoriels isolés.
148 +
149 +### user_manual — parcours utilisateur (≈ 90 min)
150 +
151 +```mermaid
152 +graph LR
153 + A[Compte créé] --> B[01-premier-pas<br/>20 min]
154 + B --> C[02-cloner-pousser<br/>25 min]
155 + C --> D[03-collaborer<br/>25 min]
156 + D --> E[04-automatiser-ci<br/>20 min]
157 + E --> F[Utilisateur autonome]
158 +```
159 +
160 +- **État initial** : a un compte gitrust, Git installé
161 +- **État final** : pousse du code, ouvre et review des PR, configure une CI
162 +- **Scaffolding** : 01 = copier-coller intégral → 04 = compose à partir de recettes
163 +
164 +### administration_manual — parcours admin (≈ 3 h)
165 +
166 +```mermaid
167 +graph LR
168 + A[VM prête<br/>Docker installé] --> B[01-installation-docker<br/>30 min]
169 + B --> C[02-installation-systemd<br/>45 min]
170 + C --> D[03-premier-demarrage<br/>20 min]
171 + D --> E[04-mise-en-production<br/>90 min]
172 + E --> F[Admin opérationnel]
173 +```
174 +
175 +- **État initial** : Linux admin, DNS prêt, TLS compris
176 +- **État final** : instance prod qui tourne, sauvegardée, monitorée
177 +
178 +### developer_manual — parcours contributeur (≈ 4 h)
179 +
180 +```mermaid
181 +graph LR
182 + A[Utilisateur autonome] --> B[01-getting-started<br/>45 min]
183 + B --> C[02-premiere-contribution<br/>90 min]
184 + C --> D[03-creer-un-worker-async<br/>capstone 120 min]
185 + D --> E[Core contributor]
186 +```
187 +
188 +- **État initial** : Rust ≥ 3 mois, connaît Git/HTTP/PostgreSQL
189 +- **État final** : capable d'ajouter une feature gitrust de A à Z avec tests
190 +- **Capstone** : tuto 03 (worker async) consolide sans guide pas-à-pas
191 +
192 +### Checkpoints de parcours
193 +
194 +Entre deux tutoriels, l'`index.md` du manuel affiche un encart : « Vous devriez maintenant savoir faire X avant de passer au suivant — si ce n'est pas le cas, relisez le tutoriel précédent ».
195 +
196 +## Templates pédagogiques imposés
197 +
198 +### Template tutoriel (augmente Diátaxis)
199 +
200 +```markdown
201 +# [Titre promettant une expérience concrète]
202 +
203 +## Objectifs
204 +À la fin de ce tutoriel, vous saurez :
205 +- O1. [verbe Bloom 1-3] [objet concret]
206 +- O2. [verbe Bloom 1-3] [objet concret]
207 +- O3. [verbe Bloom 1-3] [objet concret]
208 +
209 +## Pré-requis
210 +- **Technique** : [outils/versions installés]
211 +- **Pédagogique** : tutoriel [précédent] complété
212 +- **Temps estimé** : ~N minutes
213 +
214 +## Vue d'ensemble
215 +[1 paragraphe + 1 schéma Mermaid qui installe le modèle mental]
216 +
217 +## Étape 1 : [action à l'impératif]
218 +[1-2 phrases de contexte]
219 +
220 +```bash
221 +[commande exacte]
222 +```
223 +
224 +Sortie attendue :
225 +```
226 +[sortie verbatim]
227 +```
228 +
229 +**Checkpoint** : [vérification observable par l'apprenant]
230 +
231 +## Étape 2 : …
232 +## Étape N : …
233 +
234 +## Récapitulatif
235 +- ✓ O1 accompli en [faisant X]
236 +- ✓ O2 accompli en [faisant Y]
237 +- ✓ O3 accompli en [faisant Z]
238 +
239 +## Et si ça ne marche pas
240 +
241 +| Symptôme | Cause probable | Correction |
242 +|---|---|---|
243 +| `erreur 1` | … | … |
244 +| `erreur 2` | … | … |
245 +| `erreur 3` | … | … |
246 +
247 +## Prochaine étape
248 +→ [tutoriel suivant dans le parcours]
249 +```
250 +
251 +### Template explanation
252 +
253 +```markdown
254 +# Comprendre [concept]
255 +
256 +## Ce que vous allez comprendre
257 +- [objectif Bloom niveau 2, 4 ou 5]
258 +
259 +## Le problème concret
260 +[Situation réelle observable]
261 +
262 +## L'analogie
263 +[Rapport au connu : « c'est comme… »]
264 +
265 +## Le modèle
266 +[Schéma Mermaid + 2-3 paragraphes]
267 +
268 +## Alternatives et compromis
269 +[Ce qui aurait pu être choisi, pourquoi pas ici]
270 +
271 +## Vérifier votre compréhension
272 +1. [Question ouverte Bloom 2]
273 +2. [Question ouverte Bloom 4]
274 +
275 +## Pour aller plus loin
276 +- [Reference des détails techniques]
277 +- [How-to qui applique ce concept]
278 +```
279 +
280 +## Arborescence cible
281 +
282 +```
283 +girust_doc/
284 +├── README.md # Présentation + lien vers demo.gitrust.eu
285 +├── book.toml # Config mdBook globale (FR source)
286 +├── theme/ # Thème custom gitrust (logo, couleurs)
287 +├── po/ # Traductions gettext (mdbook-i18n-helpers)
288 +│ ├── en.po # Anglais (prioritaire)
289 +│ ├── de.po es.po pt.po it.po # Autres langues (stubs initiaux)
290 +├── src/ # Source mdBook (FR, canonique)
291 +│ ├── SUMMARY.md # Sommaire global avec 3 manuels
292 +│ ├── introduction.md # Qu'est-ce que gitrust, philosophie, roadmap
293 +│ ├── user_manual/ # → monté depuis ../user_manual/
294 +│ ├── administration_manual/ # → monté depuis ../administration_manual/
295 +│ └── template/ # → monté depuis ../template/
296 +├── user_manual/ # MANUEL UTILISATEUR (Diátaxis)
297 +│ ├── index.md
298 +│ ├── tutorials/ # Apprentissage guidé pas-à-pas
299 +│ │ ├── 01-premier-pas.md # Inscription, 2FA, premier dépôt
300 +│ │ ├── 02-cloner-pousser.md # SSH keys + git clone/push
301 +│ │ ├── 03-collaborer.md # Équipes, issues, pull requests
302 +│ │ └── 04-automatiser-ci.md # Premier .gitrust-ci.yml
303 +│ ├── how-to/ # Recettes orientées tâche
304 +│ │ ├── gerer-cles-ssh.md
305 +│ │ ├── configurer-2fa.md
306 +│ │ ├── creer-personal-access-token.md
307 +│ │ ├── gerer-equipes-permissions.md
308 +│ │ ├── ouvrir-pull-request.md
309 +│ │ ├── fusionner-strategies.md # ff / squash / merge commit
310 +│ │ ├── utiliser-labels-issues.md
311 +│ │ ├── importer-depot-externe.md
312 +│ │ └── consulter-sbom.md
313 +│ ├── reference/
314 +│ │ ├── modele-permissions.md # 4 rôles (Reader/Dev/Maint/Owner)
315 +│ │ ├── api-rest-v1.md # Lien Swagger + auth flow + pagination
316 +│ │ ├── .gitrust-ci-yml-schema.md # Schéma YAML complet Easy Mode
317 +│ │ ├── markdown-et-syntaxe.md # Syntaxe supportée dans README/issues
318 +│ │ └── notifications.md # SSE + email + préférences
319 +│ └── explanation/
320 +│ ├── modele-collaboration.md # Philosophie code review gitrust
321 +│ ├── securite-utilisateur.md # Pourquoi 2FA, hash PAT, audit log
322 +│ └── cycle-vie-pull-request.md # Avec diagramme Mermaid
323 +├── developer_manual/ # MANUEL DÉVELOPPEUR (Diátaxis) — NOUVEAU
324 +│ ├── index.md
325 +│ ├── tutorials/
326 +│ │ ├── 01-getting-started.md # ← gitrust/docs/GETTING_STARTED.md (as-is)
327 +│ │ ├── 02-premiere-contribution.md # Clone, build, test, première PR
328 +│ │ └── 03-creer-un-worker-async.md # TDD pas-à-pas (adapté de plans/import-async-worker.md)
329 +│ ├── how-to/
330 +│ │ ├── contribuer-workflow-pr.md # Workflow Git + review + QA
331 +│ │ ├── lancer-tests-unitaires.md # ← gitrust/docs/TESTING.md (section unitaires)
332 +│ │ ├── lancer-tests-e2e.md # ← gitrust/docs/TESTS_E2E.md (section playwright)
333 +│ │ ├── ajouter-route-web.md # Patron rustwarden → axum handler
334 +│ │ ├── ajouter-service-metier.md # Patron service + injection + tests
335 +│ │ ├── ajouter-migration-db.md # SeaORM, ordre, rollback
336 +│ │ ├── implementer-webhooks.md # ← extrait GUIDE_DEVELOPPEMENT_PHASE5.md (LOT 5.1)
337 +│ │ ├── implementer-endpoint-api.md # ← extrait GUIDE_DEVELOPPEMENT_PHASE5.md (LOT 5.2)
338 +│ │ ├── importer-depot-externe-code.md # ← gitrust/docs/IMPORT_FLOW.md
339 +│ │ ├── contribuer-a-rustwarden.md # ← gitrust/docs/UPSTREAM_RUSTWARDEN.md
340 +│ │ └── passer-la-qa-avant-merge.md # Checklist pre-merge (extrait QA_RULES.md)
341 +│ ├── reference/
342 +│ │ ├── architecture-crates.md # ← gitrust/docs/ARCHITECTURE.md (as-is)
343 +│ │ ├── services-api-interne.md # ← gitrust/docs/SERVICES_REFERENCE.md (à compléter)
344 +│ │ ├── schema-base-donnees.md # ← gitrust/docs/DATABASE.md (ERD + tables)
345 +│ │ ├── regles-qa-anssi.md # ← gitrust/docs/QA_RULES.md (gates, lints, ANSSI)
346 +│ │ ├── api-rest-v1.md # Swagger link + auth + pagination + errors
347 +│ │ ├── git-hooks-post-receive.md # Référence des hooks exposés
348 +│ │ └── rustwarden-core-api.md # Helpers, extracteurs, middleware rustwarden
349 +│ └── explanation/
350 +│ ├── vue-ensemble-architecture.md # ← gitrust/docs/ARCHITECTURE.md (partie narrative)
351 +│ ├── flux-requetes.md # ← gitrust/docs/SEQUENCES.md (diagrammes Mermaid)
352 +│ ├── modele-permissions-rbac.md # 4 rôles × teams × repo scope
353 +│ ├── 2fa-fonctionnement.md # ← extrait CHANGELOG_2FA_EMAIL_LOGIN.md
354 +│ ├── hierarchie-labels.md # ← extrait REALISE_LOT12.md
355 +│ ├── ci-dagger-easy-vs-power.md # ← extrait DAGGER_CI_ANALYSIS.md
356 +│ ├── decisions-ui-htmx.md # ← extrait PLAN_UI_TRANSFORMATION.md
357 +│ └── patron-worker-async.md # ← extrait plans/import-async-worker.md
358 +├── administration_manual/ # MANUEL D'ADMINISTRATION (Diátaxis)
359 +│ ├── index.md
360 +│ ├── tutorials/
361 +│ │ ├── 01-installation-docker.md # Stack docker-compose complète
362 +│ │ ├── 02-installation-systemd.md # Binaire natif + service
363 +│ │ ├── 03-premier-demarrage.md # Admin bootstrap, SSH host key, migrations
364 +│ │ └── 04-mise-en-production-192-168.md # ← plans/deploiement-local-192-168-1-57.md (as-is, généralisé)
365 +│ ├── how-to/
366 +│ │ ├── sauvegarder-restaurer.md # pg_dump + repos bare + SSH keys
367 +│ │ ├── mettre-a-jour.md # Upgrade checklist (migrations auto)
368 +│ │ ├── configurer-smtp.md
369 +│ │ ├── configurer-oauth.md # Google/GitHub providers via rustwarden
370 +│ │ ├── configurer-ci-runner-remote.md # ← gitrust/docs/CI_REMOTE_RUNNER.md
371 +│ │ ├── integrer-dependency-track.md # ← gitrust/docs/CI_AND_DEPENDENCY_TRACKER.md
372 +│ │ ├── durcir-avec-fail2ban.md # ← gitrust/docs/FAIL2BAN_DEPLOYMENT.md (as-is)
373 +│ │ ├── tuner-rate-limiting.md
374 +│ │ ├── forcer-2fa-globalement.md # ← extrait CHANGELOG_FORCE_2FA.md
375 +│ │ ├── depanner-ssh.md # Keys, ports, fingerprints
376 +│ │ ├── depanner-ci.md
377 +│ │ ├── gerer-utilisateurs-admin.md # Panel /admin
378 +│ │ └── auditer-instance.md # Logs journalctl, audit log, métriques
379 +│ ├── reference/
380 +│ │ ├── variables-environnement.md # Index thématique du .env (lien vers .env.example)
381 +│ │ ├── parametres-dynamiques.md # Table app_settings, /admin/settings
382 +│ │ ├── schema-base-de-donnees.md # Résumé + lien vers ../gitrust/docs/DATABASE.md
383 +│ │ ├── ports-et-services.md # 4000 HTTP, 2222 SSH, 5432 PG
384 +│ │ └── conformite-anssi-pa074.md # Checklist QA_RULES appliquée
385 +│ └── explanation/
386 +│ ├── architecture-globale.md # Diagramme composants + flux requête
387 +│ ├── modele-deploiement.md # Mono-machine vs HA, limites
388 +│ ├── ci-dagger.md # Pourquoi Dagger, Easy vs Power Mode
389 +│ └── strategie-sauvegarde.md # Rationale 3-2-1 adapté gitrust
390 +├── template/ # EXEMPLES RÉUTILISABLES (code/config pur)
391 +│ ├── index.md # Index des templates avec cas d'usage
392 +│ ├── env/
393 +│ │ ├── dev-local.env
394 +│ │ ├── production-mono-machine.env
395 +│ │ ├── production-ci-heavy.env
396 +│ │ └── tests-e2e.env
397 +│ ├── docker/
398 +│ │ ├── docker-compose.minimal.yml
399 +│ │ ├── docker-compose.production.yml # + Redis sessions + SMTP
400 +│ │ ├── docker-compose.with-ci-runner.yml
401 +│ │ └── podman-quadlet.container # Alternative Docker
402 +│ ├── reverse-proxy/
403 +│ │ ├── nginx-tls.conf
404 +│ │ ├── caddy-Caddyfile
405 +│ │ └── traefik-dynamic.yml
406 +│ ├── systemd/
407 +│ │ ├── gitrust.service # + hardening AppArmor/seccomp
408 +│ │ └── gitrust-backup.timer
409 +│ ├── ci/
410 +│ │ ├── rust.gitrust-ci.yml
411 +│ │ ├── go.gitrust-ci.yml
412 +│ │ ├── python.gitrust-ci.yml
413 +│ │ ├── node.gitrust-ci.yml
414 +│ │ └── dagger-power-mode/ # Squelette .dagger/
415 +│ │ ├── dagger.json
416 +│ │ └── main.go
417 +│ ├── backup/
418 +│ │ ├── backup.sh # pg_dump + rsync repos
419 +│ │ └── restore.sh
420 +│ ├── api-clients/
421 +│ │ ├── python-create-repo.py
422 +│ │ ├── rust-list-repos.rs
423 +│ │ └── curl-pat-auth.sh
424 +│ └── migration/
425 +│ ├── from-gitea.sh # Import en masse via worker
426 +│ └── from-forgejo.sh
427 +├── diagrams/ # Sources Mermaid partagées
428 +│ ├── architecture-globale.mmd
429 +│ ├── flux-auth-ssh.mmd # (adapté de gitrust/docs/SEQUENCES.md)
430 +│ ├── cycle-vie-pr.mmd
431 +│ ├── pipeline-ci-dagger.mmd
432 +│ └── topologie-deploiement.mmd
433 +├── .github/workflows/ # Ou .gitrust-ci.yml si hébergé sur gitrust
434 +│ └── build-docs.yml # mdBook build + lint + deploy demo.gitrust.eu
435 +├── .markdownlint.yaml # Règles lint (longueur ligne, headings, etc.)
436 +├── CONTRIBUTING.md # Workflow traduction po, conventions FR
437 +├── CLAUDE.md # Directives projet pour Claude Code (voir § Directives projet)
438 +└── .plans/ # Plans de travail (tous plans futurs ici, pas dans ~/.claude/plans/)
439 + └── 001-scaffold-initial.md # Copie/déplacement du présent plan
440 +```
441 +
442 +## Directives projet (CLAUDE.md local)
443 +
444 +Un fichier `CLAUDE.md` est créé à la racine de `girust_doc/` avec au minimum :
445 +
446 +- **Plans de travail** : tout plan (issu de `/plan`, `ExitPlanMode`, autopilot, etc.) doit être écrit dans `./.plans/` à la racine du projet, jamais dans `~/.claude/plans/`. Numérotation séquentielle `NNN-slug.md`. Les plans restent versionnés avec le dépôt.
447 +- **Langue canonique** : FR pour les sources, EN prioritaire en traduction.
448 +- **Diátaxis strict** : aucun nouveau fichier de contenu hors des 4 dossiers `tutorials/`, `how-to/`, `reference/`, `explanation/` de chaque manuel.
449 +- **Templates = code pur** : pas de prose dans `template/` (sauf `index.md`).
450 +- **Mermaid centralisé** : sources `.mmd` dans `diagrams/`, référencées depuis les `.md` via include mdBook.
451 +
452 +Ce plan lui-même est copié vers `./.plans/001-scaffold-initial.md` dans le premier commit.
453 +
454 +## Fichiers critiques à créer en priorité (ordre d'exécution)
455 +
456 +1. **`CLAUDE.md`** racine + **`.plans/001-scaffold-initial.md`** (copie de ce plan) — avant tout le reste, pour verrouiller la convention.
457 +2. **`book.toml`** — config mdBook avec `[preprocessor.gettext]`, `[output.html]` thème, `[preprocessor.mermaid]`.
458 +3. **`src/SUMMARY.md`** — squelette complet de l'arborescence ci-dessus (placeholders).
459 +4. **`README.md`** racine — présentation du dépôt doc (pas de la plateforme), comment contribuer.
460 +5. **`CONTRIBUTING.md`** — workflow `po/*.po` pour traduction, conventions nommage, règles Mermaid.
461 +6. **4 `index.md`** — `user_manual/`, `administration_manual/`, `developer_manual/`, `template/` avec carte de navigation Diátaxis.
462 +7. **Import en bloc des fichiers "or"** de `gitrust/docs/` (13 fichiers) vers les destinations listées dans le mapping — copie + ajustement d'en-tête + vérification Diátaxis.
463 +8. **4 tutoriels phares** (1 par manuel) pour prouver que le scaffold fonctionne bout en bout :
464 + - `user_manual/tutorials/01-premier-pas.md`
465 + - `administration_manual/tutorials/01-installation-docker.md`
466 + - `developer_manual/tutorials/01-getting-started.md` (import direct)
467 + - `template/env/dev-local.env` + `template/docker/docker-compose.minimal.yml`
468 +9. **`diagrams/architecture-globale.mmd`** + `flux-requetes.mmd` (extraits des Mermaid existants dans `docs/SEQUENCES.md`).
469 +10. **`.markdownlint.yaml`** + **`.github/workflows/build-docs.yml`** — CI de build + lint dès le début.
470 +
471 +## Mapping gitrust/docs → girust_doc (basé sur audit complet, 44 fichiers)
472 +
473 +> **Rappel** : `girust_doc` est autonome. Toutes les flèches `←` ci-dessous signifient **copier le contenu** dans le fichier cible, pas un lien. Une fois copié, la doc ne dépend plus du dépôt source.
474 +
475 +### Fichiers "or" — publiables tels quels (copier + adapter en-tête + Diátaxis)
476 +
477 +| Source (gitrust/) | Destination (girust_doc/) | Manuel | Mode |
478 +|---|---|---|---|
479 +| `docs/GETTING_STARTED.md` | `developer_manual/tutorials/01-getting-started.md` | dev | tutorial |
480 +| `docs/ARCHITECTURE.md` | `developer_manual/reference/architecture-crates.md` + `developer_manual/explanation/vue-ensemble-architecture.md` (scindé) | dev | reference + explanation |
481 +| `docs/SEQUENCES.md` | `developer_manual/explanation/flux-requetes.md` + sources `.mmd` dans `diagrams/` | dev | explanation |
482 +| `docs/TESTING.md` | `developer_manual/how-to/lancer-tests-unitaires.md` | dev | how-to |
483 +| `docs/TESTS_E2E.md` | `developer_manual/how-to/lancer-tests-e2e.md` | dev | how-to |
484 +| `docs/QA_RULES.md` | `developer_manual/reference/regles-qa-anssi.md` | dev | reference |
485 +| `docs/SETTINGS.md` | `administration_manual/reference/parametres-dynamiques.md` | admin | reference |
486 +| `docs/CI_AND_DEPENDENCY_TRACKER.md` | `administration_manual/how-to/integrer-dependency-track.md` | admin | how-to |
487 +| `docs/CI_REMOTE_RUNNER.md` | `administration_manual/how-to/configurer-ci-runner-remote.md` | admin | how-to |
488 +| `docs/FAIL2BAN_DEPLOYMENT.md` | `administration_manual/how-to/durcir-avec-fail2ban.md` | admin | how-to |
489 +| `docs/plans/deploiement-local-192-168-1-57.md` | `administration_manual/tutorials/04-mise-en-production-192-168.md` (généralisé) | admin | tutorial |
490 +| `docs/UPSTREAM_RUSTWARDEN.md` | `developer_manual/how-to/contribuer-a-rustwarden.md` | dev | how-to |
491 +| `docs/IMPORT_FLOW.md` | `developer_manual/how-to/importer-depot-externe-code.md` | dev | how-to |
492 +
493 +### Fichiers "mine" — extraits partiels à recomposer
494 +
495 +| Source | Extraits à publier | Destination | Mode |
496 +|---|---|---|---|
497 +| `docs/DATABASE.md` | ERD + tables publiques (pas le SQL interne brut) | `developer_manual/reference/schema-base-donnees.md` | reference |
498 +| `docs/SERVICES_REFERENCE.md` | Structure + signatures — à **compléter** (inachevé à 100 lignes) | `developer_manual/reference/services-api-interne.md` | reference |
499 +| `docs/CHANGELOG_2FA_EMAIL_LOGIN.md` | Transformer "changelog" en doc conceptuelle | `developer_manual/explanation/2fa-fonctionnement.md` | explanation |
500 +| `docs/CHANGELOG_FORCE_2FA.md` | Feature flag + impact admin uniquement | `administration_manual/how-to/forcer-2fa-globalement.md` | how-to |
501 +| `docs/DAGGER_CI_ANALYSIS.md` | Comparaison Easy vs Power Mode | `developer_manual/explanation/ci-dagger-easy-vs-power.md` | explanation |
502 +| `docs/PLAN_UI_TRANSFORMATION.md` | Décisions design (DaisyUI, HTMX) — pas la roadmap | `developer_manual/explanation/decisions-ui-htmx.md` | explanation |
503 +| `docs/GUIDE_DEVELOPPEMENT_PHASE5.md` | Diviser en deux : LOT 5.1 webhooks + LOT 5.2 API | `developer_manual/how-to/implementer-webhooks.md` + `implementer-endpoint-api.md` | how-to |
504 +| `docs/plans/import-async-worker.md` | Patron TDD + worker + SSE (généraliser hors contexte import) | `developer_manual/explanation/patron-worker-async.md` + `tutorials/03-creer-un-worker-async.md` | explanation + tutorial |
505 +| `docs/plans/import-repository-externe.md` | Démarche TDD MVP (généraliser) | Fusionné avec précédent | — |
506 +| `docs/REALISE_LOT1.md` | Patron navigation arbre de fichiers | `developer_manual/how-to/ajouter-route-web.md` (exemple illustratif) | how-to |
507 +| `docs/REALISE_LOT12.md` | Hiérarchie 2-niveaux des labels | `developer_manual/explanation/hierarchie-labels.md` | explanation |
508 +
509 +### Fichiers à ignorer (obsolètes, internes, ou confidentiels)
510 +
511 +| Fichier | Raison |
512 +|---|---|
513 +| `ARCHITECTURE.md` racine (pas `docs/`) | Généré par wizard rustwarden, obsolète — `docs/ARCHITECTURE.md` fait foi |
514 +| `DEVELOPER.md` racine | Générique rustwarden, remplacé par le nouveau manuel dev |
515 +| `docs/MIGRATION_GUIDE.md` | V1→V2 obsolète (daté 2026-03-26) |
516 +| `docs/LOTS_RESTANTS.md` | TODO interne obsolète |
517 +| `docs/ORDONNANCEMENT.md` | Planification interne des lots |
518 +| `docs/evaluations.md` | Notes internes produit (49K tokens), pas pour publication |
519 +| `docs/eval-credentials.local.md` | **Confidentiel — secrets**, ne jamais publier |
520 +| `docs/Update_rustwarden_db_getter.md` + `project_rustwarden_db_getter.md` | Notes tech debt internes |
521 +| `docs/REALISE_LOT2-11, 13-14, LOT_SSH` | Rétros sprints sans valeur pédagogique publique |
522 +
523 +### Autres fichiers existants (hors `docs/`) à copier dans la doc
524 +
525 +| Fichier source | Contenu copié dans la doc |
526 +|---|---|
527 +| `.env.example` | **Contenu complet copié** dans `administration_manual/reference/variables-environnement.md` (avec annotations et regroupement thématique) |
528 +| `deployment/gitrust.service`, `nginx-gitrust.conf` | **Contenu copié** dans `template/systemd/gitrust.service` et `template/reverse-proxy/nginx-tls.conf` — fichiers standalone |
529 +| `static/api-docs/openapi.yaml` | **Copie embarquée** dans `developer_manual/reference/openapi.yaml` + page `api-rest-v1.md` qui documente l'auth, la pagination, les codes erreur et intègre un rendu Swagger UI local (ou équivalent statique) |
530 +
531 +## Stratégie multilingue (les 6 langues)
532 +
533 +- **FR** : langue source, canonique, tous les fichiers `.md` dans `src/` et sous-dossiers.
534 +- **EN** : traduction prioritaire, via `po/en.po` généré par `mdbook-xgettext`.
535 +- **DE / ES / PT / IT** : fichiers `po/*.po` créés vides au scaffold, traduction progressive.
536 +- Build mdBook produit 6 sites statiques (`book/fr/`, `book/en/`, ...) déployés sous `demo.gitrust.eu/docs/{lang}/`.
537 +- Une page d'accueil statique avec sélecteur de langue redirige selon `Accept-Language`.
538 +- **Hors-scope de ce plan** : traduire effectivement le contenu — seul le scaffold bilingue (FR + EN squelette) est livré ; les autres langues restent en stubs jusqu'à ce que la matière FR soit stable.
539 +
540 +## Scope de ce chantier (itération 1)
541 +
542 +**Inclus** :
543 +- Toute l'arborescence de dossiers et fichiers index (vides ou avec TODO) listée ci-dessus — **incluant `developer_manual/`**
544 +- `book.toml` fonctionnel, build local `mdbook serve` opérationnel
545 +- **Import en bloc des 13 fichiers "or"** depuis `gitrust/docs/` vers leurs destinations (copie + ajustement d'en-tête + placement Diátaxis correct)
546 +- 4 tutoriels phares rédigés (un par manuel : user, admin, dev, template) — **respectant le template pédagogique** : objectifs Bloom, prérequis explicites, modèle mental avant pratique, checkpoints observables toutes les 2 étapes max, sortie verbatim, section « Et si ça ne marche pas » avec 3 erreurs top, récap qui reprend chaque objectif, lien vers la suite du parcours
547 +- 4 templates critiques rédigés (env dev, docker-compose minimal, nginx TLS, systemd)
548 +- Diagrammes Mermaid architecture globale + flux-requetes (extraits de `docs/SEQUENCES.md`)
549 +- CI de build + lint Markdown
550 +- `README.md` + `CONTRIBUTING.md`
551 +- Pipeline de traduction `po/` en place (en.po généré, autres stubs vides)
552 +
553 +**Exclus** (itérations ultérieures) :
554 +- Extraction fine des 8 fichiers "mine" (recomposition manuelle nécessaire)
555 +- Complétion de `SERVICES_REFERENCE.md` (inachevé à 100 lignes — nécessite lecture du code)
556 +- Rédaction exhaustive des how-to et reference hors import (placeholders `TODO` listés)
557 +- Traduction réelle des langues autres que FR
558 +- Captures d'écran UI (nécessitent instance démo déployée)
559 +- Documentation API interactive au-delà du lien Swagger existant
560 +- Nettoyage du dépôt source `gitrust/docs/` (suppression des fichiers obsolètes identifiés — hors périmètre de ce dépôt doc)
561 +
562 +## Vérification
563 +
564 +1. **Build local** : `mdbook build` dans `/home/monsieurb/Documents/devel/girust_doc` produit `book/` sans erreur et sans warning de lien cassé.
565 +2. **Serveur de dev** : `mdbook serve --open` affiche le sommaire, les **4 manuels** (user / admin / dev / template), les 4 tutoriels phares rédigés avec diagrammes Mermaid rendus correctement, et les 13 fichiers importés depuis `gitrust/docs/` accessibles via la navigation.
566 +3. **Lint Markdown** : `markdownlint-cli2 "**/*.md"` passe sans erreur.
567 +4. **Validation Mermaid** : chaque fichier `.mmd` dans `diagrams/` est parsable via `mermaid-cli` (`mmdc -i x.mmd -o x.svg`).
568 +5. **Sommaire** : chaque entrée de `src/SUMMARY.md` pointe vers un fichier qui existe (pas de lien mort).
569 +6. **Templates copiables** : `cp template/env/dev-local.env ../gitrust/.env && cd ../gitrust && cargo run` doit démarrer l'instance sans modification (validation du contrat avec `gitrust/.env.example`).
570 +7. **i18n** : `mdbook build` avec `MDBOOK_BOOK__LANGUAGE=en` produit `book/en/` avec fichiers traduits pour les pages où `po/en.po` contient des entrées, et fallback FR pour le reste.
571 +8. **CI GitHub/gitrust** : le workflow de build passe sur une PR factice ajoutant un `.md` incorrect (doit échouer) et sur un `.md` valide (doit passer).
572 +9. **Audit pédagogique des 4 tutoriels phares** : chacun coche toute la checklist :
573 + - [ ] Objectifs Bloom observables déclarés (`O1..On`)
574 + - [ ] Prérequis technique + pédagogique + temps estimé explicites
575 + - [ ] Modèle mental / schéma Mermaid **avant** la première commande
576 + - [ ] ≤ 3 concepts nouveaux dans la page
577 + - [ ] ≤ 2 étapes consécutives sans checkpoint observable
578 + - [ ] Sortie verbatim à chaque commande
579 + - [ ] Section « Et si ça ne marche pas » avec ≥ 3 erreurs top
580 + - [ ] Récap reprend explicitement chaque `Oi`
581 + - [ ] Lien vers la prochaine étape du parcours
582 +10. **Audit de parcours** : chaque manuel (user, admin, dev) a dans son `index.md` un diagramme Mermaid du parcours complet avec temps, scaffolding dégressif d'exactement 1 cran entre tutoriels, pas de saut > 1 niveau Bloom.
A CLAUDE.md
+81 -0
@@ -0,0 +1,81 @@
1 +# CLAUDE.md
2 +
3 +Directives projet pour Claude Code lorsqu'il intervient dans `girust_doc/`.
4 +
5 +## Mission du dépôt
6 +
7 +Documentation officielle publique de la plateforme **gitrust** (forge Git self-hosted en Rust). Publiée sur `https://demo.gitrust.eu`. Source : dépôt gitrust voisin `/home/monsieurb/Documents/devel/gitrust`.
8 +
9 +## Conventions inviolables
10 +
11 +### Plans de travail
12 +
13 +Tout plan issu de `/plan`, `ExitPlanMode`, `autopilot` ou tout autre workflow doit être écrit dans `./.plans/` à la racine du projet, **jamais** dans `~/.claude/plans/`. Numérotation séquentielle `NNN-slug.md`. Les plans sont versionnés avec le dépôt pour rester visibles par l'équipe.
14 +
15 +### Langue canonique
16 +
17 +- **Source** : français (FR) — tous les `.md` dans `src/` et sous-dossiers de contenu.
18 +- **Traductions** : via `mdbook-i18n-helpers` dans `po/{en,de,es,pt,it}.po`. Aligné avec les 6 langues de l'UI gitrust.
19 +- Ne jamais traduire manuellement en éditant un fichier `.md` non-FR : tout passe par `po/`.
20 +
21 +### Framework documentaire : Diátaxis strict
22 +
23 +Chaque manuel (`user_manual/`, `administration_manual/`) possède exactement quatre dossiers :
24 +
25 +- `tutorials/` — apprentissage guidé pas-à-pas (quand l'utilisateur apprend)
26 +- `how-to/` — recettes orientées tâche (quand l'utilisateur veut résoudre un problème précis)
27 +- `reference/` — description technique exhaustive (quand l'utilisateur cherche une information)
28 +- `explanation/` — contexte, rationale, concepts (quand l'utilisateur veut comprendre)
29 +
30 +Aucun fichier de contenu hors de ces quatre dossiers. Interdit : `guides/`, `docs/`, `misc/`, etc.
31 +
32 +### Templates = code pur
33 +
34 +Le dossier `template/` contient uniquement des fichiers copiables (configs, scripts, exemples de code). Pas de prose explicative sauf dans `template/index.md`. Tout contexte narratif va dans un `how-to/` qui référence le template.
35 +
36 +### Mermaid
37 +
38 +Sources Mermaid dans `diagrams/*.mmd`. Les `.md` incluent les diagrammes via un bloc de code Mermaid ou une directive d'inclusion mdBook. Ne jamais dupliquer un diagramme dans plusieurs fichiers : un fichier `.mmd` = une source de vérité.
39 +
40 +### Documentation autonome (déconnectée des sources)
41 +
42 +**Ce dépôt est autosuffisant.** Un lecteur sur `demo.gitrust.eu` n'a pas accès au code de `gitrust/`. Tout exemple (config, extrait de code, schéma SQL, diagramme) doit être **copié** dans la doc, pas référencé par lien local.
43 +
44 +- `.env.example` de gitrust → son contenu est copié dans `administration_manual/reference/variables-environnement.md`
45 +- Diagrammes Mermaid de `gitrust/docs/SEQUENCES.md` → copiés dans `diagrams/*.mmd`
46 +- Modèles de données, patrons de code, recettes d'installation → intégrés dans les pages correspondantes
47 +- **Pas de liens `file://`** ni de chemins relatifs sortant de `girust_doc/`
48 +- **Seule exception admise** : lien HTTP vers le dépôt public `demo.gitrust.eu/gitrust/gitrust` pour pointer vers le "code de référence", mais le contenu pertinent reste présent dans la doc
49 +- Conséquence : quand gitrust évolue, un travail de synchronisation manuel est nécessaire (documenté dans `CONTRIBUTING.md`)
50 +
51 +## Build et vérification
52 +
53 +```bash
54 +mdbook build # produit book/ (FR)
55 +mdbook serve --open # serveur de dev
56 +MDBOOK_BOOK__LANGUAGE=en mdbook build # produit book/en/
57 +markdownlint-cli2 "**/*.md" # lint
58 +mmdc -i diagrams/x.mmd -o /tmp/x.svg # validation Mermaid individuelle
59 +```
60 +
61 +CI : `.github/workflows/build-docs.yml` enchaîne build + lint + validation Mermaid sur chaque PR.
62 +
63 +## Structure imposée
64 +
65 +```
66 +girust_doc/
67 +├── CLAUDE.md # ce fichier
68 +├── .plans/ # plans de travail versionnés
69 +├── book.toml # config mdBook
70 +├── src/SUMMARY.md # sommaire mdBook
71 +├── user_manual/ # Diátaxis × 4
72 +├── administration_manual/ # Diátaxis × 4
73 +├── template/ # code/config copiables
74 +├── diagrams/ # sources Mermaid
75 +├── po/ # traductions gettext
76 +└── theme/ # thème mdBook custom
77 +```
78 +
79 +## Projet source (gitrust)
80 +
81 +Tous les liens vers le code ou la config gitrust pointent vers `/home/monsieurb/Documents/devel/gitrust` en local et vers `https://demo.gitrust.eu/gitrust/gitrust` une fois publié. Toujours vérifier que le lien existe encore avant de le référencer dans une page publiée.
A CONTRIBUTING.md
+142 -0
@@ -0,0 +1,142 @@
1 +# Contribuer à la documentation gitrust
2 +
3 +Bienvenue ! Ce guide explique comment ajouter du contenu, traduire des pages et soumettre une pull request.
4 +
5 +---
6 +
7 +## 1. Choisir le bon type de contenu (Diátaxis)
8 +
9 +Avant de créer un fichier, posez-vous la question : *qu'est-ce que le lecteur veut faire ?*
10 +
11 +| Type | Le lecteur veut… | Dossier cible |
12 +|---|---|---|
13 +| **Tutoriel** | Apprendre pas-à-pas, être guidé | `{manuel}/tutorials/` |
14 +| **Guide pratique** | Accomplir une tâche précise | `{manuel}/how-to/` |
15 +| **Référence** | Trouver une information technique | `{manuel}/reference/` |
16 +| **Explication** | Comprendre le pourquoi, le contexte | `{manuel}/explanation/` |
17 +
18 +Consultez [CLAUDE.md](CLAUDE.md) pour les règles Diátaxis strictes appliquées à ce dépôt. Aucun fichier de contenu ne doit exister hors des quatre dossiers ci-dessus (dans chaque manuel).
19 +
20 +---
21 +
22 +## 2. Ajouter une page
23 +
24 +1. Créez le fichier Markdown dans le bon dossier selon Diátaxis.
25 +2. Ajoutez une entrée dans `src/SUMMARY.md` à la bonne position hiérarchique.
26 +3. Rédigez en français (langue source canonique).
27 +4. Respectez la checklist pédagogique ci-dessous pour les tutoriels.
28 +
29 +### Checklist pédagogique pour les tutoriels
30 +
31 +Chaque tutoriel doit cocher toutes ces cases avant d'être fusionné :
32 +
33 +- [ ] Objectifs Bloom observables déclarés en tête (`O1..On`) avec des verbes d'action (lister, exécuter, configurer, diagnostiquer, comparer, concevoir) — interdits : *comprendre, maîtriser, savoir, connaître, se familiariser avec*
34 +- [ ] Prérequis explicites : technique (outils/versions), pédagogique (tutoriel précédent complété), temps estimé
35 +- [ ] Modèle mental ou schéma Mermaid installé **avant** la première commande
36 +- [ ] Pas plus de 3 concepts nouveaux dans la page
37 +- [ ] Pas plus de 2 étapes consécutives sans checkpoint observable
38 +- [ ] Sortie console attendue affichée verbatim après chaque commande
39 +- [ ] Section « Et si ça ne marche pas » avec au moins 3 erreurs fréquentes et leur correction
40 +- [ ] Récapitulatif qui reprend explicitement chaque objectif (`Oi`)
41 +- [ ] Lien vers la prochaine étape du parcours
42 +
43 +---
44 +
45 +## 3. Workflow de traduction
46 +
47 +La documentation source est en **français**. Les traductions passent exclusivement par les fichiers `po/`.
48 +
49 +### Générer les chaînes à traduire
50 +
51 +```bash
52 +# Installer mdbook-i18n-helpers
53 +cargo install mdbook-i18n-helpers
54 +
55 +# Extraire les chaînes françaises vers po/en.po
56 +mdbook-xgettext
57 +```
58 +
59 +### Modifier une traduction existante
60 +
61 +Éditez le fichier `po/{lang}.po` correspondant à la langue cible.
62 +
63 +Priorité des langues : `en` (anglais, prioritaire) > `de`, `es`, `pt`, `it` (stubs initiaux).
64 +
65 +### Ajouter une nouvelle entrée de traduction
66 +
67 +```po
68 +#: src/introduction.md:3
69 +msgid "Phrase en français"
70 +msgstr "Translated phrase"
71 +```
72 +
73 +Ne jamais modifier un fichier `.md` pour le traduire : tout passe par `po/`.
74 +
75 +### Construire une version traduite
76 +
77 +```bash
78 +MDBOOK_BOOK__LANGUAGE=en mdbook build
79 +# Résultat dans book/en/
80 +```
81 +
82 +---
83 +
84 +## 4. Conventions Mermaid
85 +
86 +- Les sources Mermaid sont des fichiers `.mmd` dans `diagrams/`.
87 +- **Un fichier `.mmd` = une source de vérité.** Ne jamais dupliquer un diagramme dans plusieurs pages `.md`.
88 +- Dans les pages `.md`, insérer le diagramme via un bloc de code Mermaid :
89 +
90 + ````markdown
91 + ```mermaid
92 + graph LR
93 + A --> B
94 + ```
95 + ````
96 +
97 +- Pour les diagrammes partagés entre plusieurs pages, inclure le contenu du `.mmd` (copie explicite acceptable, mais documenter la source dans un commentaire).
98 +- Valider tout `.mmd` avant de soumettre :
99 +
100 + ```bash
101 + mmdc -i diagrams/mon-diagramme.mmd -o /tmp/test.svg
102 + ```
103 +
104 +---
105 +
106 +## 5. Règles Markdown
107 +
108 +Ce dépôt utilise [markdownlint-cli2](https://github.com/DavidAnson/markdownlint-cli2) avec la configuration `.markdownlint.yaml`.
109 +
110 +Règles notables :
111 +
112 +- Longueur de ligne max : **120 caractères** (MD013)
113 +- HTML autorisé : `<details>`, `<summary>` (MD033)
114 +- La première ligne d'un fichier n'a pas besoin d'être un H1 (MD041 désactivé, car mdBook injecte le titre)
115 +- Les titres suivent une hiérarchie stricte sans saut de niveau (MD001)
116 +
117 +Lancer le lint localement :
118 +
119 +```bash
120 +markdownlint-cli2 "**/*.md"
121 +```
122 +
123 +---
124 +
125 +## 6. Synchronisation avec le dépôt source gitrust
126 +
127 +Ce dépôt est **autonome** : tout contenu issu de `gitrust/docs/` a été copié ici et ne dépend plus du dépôt source. Quand gitrust évolue (nouvelles variables d'environnement, nouveaux endpoints API, changements d'architecture), une synchronisation manuelle est nécessaire :
128 +
129 +1. Comparer les fichiers sources dans `gitrust/docs/` avec leurs copies dans ce dépôt.
130 +2. Mettre à jour les pages concernées.
131 +3. Documenter le changement dans le message de commit (`sync: mise à jour depuis gitrust vX.Y`).
132 +
133 +---
134 +
135 +## 7. Workflow de pull request
136 +
137 +1. Créez une branche depuis `main` : `git checkout -b doc/ma-contribution`
138 +2. Faites vos modifications, lancez `mdbook build` et `markdownlint-cli2 "**/*.md"` localement.
139 +3. Ouvrez une PR sur [demo.gitrust.eu/gitrust/girust_doc](https://demo.gitrust.eu/gitrust/girust_doc).
140 +4. La CI vérifie : build mdBook, lint Markdown, validation des `.mmd`.
141 +5. Un relecteur vérifie la checklist pédagogique (pour les tutoriels) et la cohérence Diátaxis.
142 +6. Fusion en squash merge après approbation.
A README.md
+72 -0
@@ -0,0 +1,72 @@
1 +# girust_doc — Documentation officielle gitrust
2 +
3 +Ce dépôt contient les sources de la documentation officielle de la plateforme [gitrust](https://demo.gitrust.eu), forge Git self-hosted en Rust.
4 +
5 +La documentation publiée est accessible sur **[demo.gitrust.eu](https://demo.gitrust.eu)**.
6 +
7 +---
8 +
9 +## Pour les contributeurs à la documentation
10 +
11 +### Prérequis
12 +
13 +- [mdBook](https://rust-lang.github.io/mdBook/guide/installation.html) — `cargo install mdbook`
14 +- [mdbook-mermaid](https://github.com/badboy/mdbook-mermaid) — `cargo install mdbook-mermaid`
15 +- [markdownlint-cli2](https://github.com/DavidAnson/markdownlint-cli2) — `npm install -g markdownlint-cli2`
16 +- [mermaid-cli](https://github.com/mermaid-js/mermaid-cli) — `npm install -g @mermaid-js/mermaid-cli` (pour valider les `.mmd`)
17 +
18 +### Construire la documentation
19 +
20 +```bash
21 +# Construire la version française (source canonique)
22 +mdbook build
23 +
24 +# Lancer le serveur de développement avec rechargement automatique
25 +mdbook serve --open
26 +
27 +# Construire une version traduite (ex. anglais)
28 +MDBOOK_BOOK__LANGUAGE=en mdbook build
29 +```
30 +
31 +Le résultat est produit dans `book/`.
32 +
33 +### Vérifier la qualité
34 +
35 +```bash
36 +# Lint Markdown
37 +markdownlint-cli2 "**/*.md"
38 +
39 +# Valider un diagramme Mermaid
40 +mmdc -i diagrams/architecture-globale.mmd -o /tmp/out.svg
41 +```
42 +
43 +### Contribuer
44 +
45 +Consultez [CONTRIBUTING.md](CONTRIBUTING.md) pour :
46 +
47 +- Choisir le bon type de contenu (Diátaxis)
48 +- Ajouter une nouvelle page
49 +- Proposer une traduction
50 +- Respecter les conventions Mermaid et Markdown
51 +- Soumettre une pull request
52 +
53 +### Structure du dépôt
54 +
55 +```
56 +girust_doc/
57 +├── book.toml # Configuration mdBook
58 +├── src/SUMMARY.md # Table des matières
59 +├── src/introduction.md # Page d'accueil
60 +├── user_manual/ # Manuel utilisateur (Diátaxis)
61 +├── administration_manual/ # Manuel d'administration (Diátaxis)
62 +├── developer_manual/ # Manuel développeur (Diátaxis)
63 +├── template/ # Configs et scripts copiables
64 +├── diagrams/ # Sources Mermaid (.mmd)
65 +├── po/ # Traductions gettext
66 +├── theme/ # Thème mdBook custom
67 +└── .github/workflows/ # CI de build et lint
68 +```
69 +
70 +---
71 +
72 +Documentation publiée sous licence [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).
A administration_manual/explanation/architecture-globale.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Architecture globale
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/explanation/ci-dagger.md
+11 -0
@@ -0,0 +1,11 @@
1 +# CI Dagger : Easy Mode vs Power Mode
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/explanation/index.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Explication
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/explanation/modele-deploiement.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Modèle de déploiement
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/explanation/strategie-sauvegarde.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Stratégie de sauvegarde
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/how-to/auditer-instance.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Auditer une instance
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/how-to/configurer-ci-runner-remote.md
+275 -0
@@ -0,0 +1,275 @@
1 +# Configurer le runner CI distant
2 +
3 +Guide d'usage du script qui provisionne une machine distante pour exécuter les pipelines CI/CD de gitrust via SSH + rsync + Dagger.
4 +
5 +---
6 +
7 +## 1. Rôle du script
8 +
9 +`deployment/setup-remote-ci.sh` (disponible dans le dépôt source gitrust) prépare **un serveur de build distant** utilisé par le worker CI de gitrust. Il automatise 6 étapes :
10 +
11 +1. Vérifie la connectivité SSH vers le runner
12 +2. Installe **Docker** (`curl https://get.docker.com | sh`) s'il est absent
13 +3. Installe **Dagger CLI** (`curl https://dl.dagger.io/dagger/install.sh | sh`) s'il est absent
14 +4. Crée le répertoire de travail distant (`CI_REMOTE_PATH`)
15 +5. Synchronise le module `deployment/ci-engine/` (mode CI Easy) via `rsync -az --delete`
16 +6. Smoke test : affiche `docker --version` et `dagger version`
17 +
18 +Le script est **idempotent** : rejoue sans dommage, skip ce qui existe déjà.
19 +
20 +---
21 +
22 +## 2. Quand l'utiliser
23 +
24 +| Scénario | Besoin de `setup-remote-ci.sh` ? |
25 +|---|---|
26 +| Dev local, CI sur la même machine que gitrust (`CI_REMOTE_HOST=localhost`) | **Non** — Docker et Dagger déjà installés localement, le `ci-engine/` est lu depuis `deployment/ci-engine/` directement |
27 +| Prod on-premise, un seul serveur (gitrust + CI colocalisés) | **Non** — idem, un simple `curl get.docker.com \| sh` suffit sur le serveur gitrust |
28 +| Prod avec **runner CI dédié** (machine séparée) | **OUI** — c'est le cas cible de ce script |
29 +| Prod avec plusieurs instances gitrust partageant un runner | **OUI** — le runner est provisionné une fois, chaque instance pointe dessus |
30 +| CI dans Kubernetes / Nomad / runner managé cloud | **Non** — ce script est pensé pour une VM Debian/Ubuntu classique |
31 +
32 +---
33 +
34 +## 3. Architecture cible
35 +
36 +```
37 ++---------------------+ SSH + rsync +-----------------------+
38 +| Gitrust (web+SSH) |---------------------------| CI Runner (distant) |
39 +| <your-server-ip> | CI_REMOTE_HOST/USER/KEY | <ci-runner-ip> |
40 +| | | |
41 +| Worker CI Tokio | push .gitrust-ci.yml | /opt/gitrust-ci/ |
42 +| (dans gitrust.bin) | + code source checkout | ├── ci-engine/ |
43 +| | | └── workspaces/ |
44 +| | dagger call ... | |
45 +| | | Docker + Dagger CLI |
46 ++---------------------+ +-----------------------+
47 +```
48 +
49 +Le worker CI de gitrust (tâche Tokio dans le binaire principal) ne fait **pas tourner** Docker localement — il délègue au runner via SSH. Cela permet d'isoler les workloads CPU/RAM gourmands (builds Rust, Node, Docker) du process web de gitrust.
50 +
51 +---
52 +
53 +## 4. Pré-requis
54 +
55 +### Sur la machine d'exécution (là où on lance le script)
56 +
57 +| Outil | Rôle |
58 +|---|---|
59 +| `bash` ≥ 4 | Interpréteur |
60 +| `ssh`, `rsync` | Transport et synchro |
61 +| `ssh-agent` chargé **ou** `CI_REMOTE_SSH_KEY` défini | Auth SSH sans mot de passe interactif (`BatchMode=yes`) |
62 +| Fichier `.env` avec les variables CI_REMOTE_* | Config (voir section 5) |
63 +
64 +### Sur le runner distant
65 +
66 +| Pré-requis | Pourquoi |
67 +|---|---|
68 +| OS Linux récent (Debian 12+, Ubuntu 22.04+) | Docker install script compatible |
69 +| User avec `sudo` passwordless **ou** droits `docker` | `get.docker.com` fait `sudo` en interne |
70 +| Clé SSH publique du user local dans `~/.ssh/authorized_keys` | Auth SSH non-interactive |
71 +| Réseau sortant autorisé vers `get.docker.com` et `dl.dagger.io` | Installation des binaires |
72 +| Au minimum ~5 Go libres dans `CI_REMOTE_PATH` | Images Docker + workspaces |
73 +
74 +---
75 +
76 +## 5. Variables d'environnement attendues (le `.env`)
77 +
78 +Le script **source un fichier `.env`** dont le chemin est passé en argument, ou par défaut `../.env` (relatif au script, donc `<racine_projet>/.env`).
79 +
80 +### Tableau des variables
81 +
82 +| Variable | Obligatoire | Défaut | Description |
83 +|---|---|---|---|
84 +| `CI_REMOTE_HOST` | **OUI** | — | Hostname ou IP du runner (ex: `ci-runner.internal`) |
85 +| `CI_REMOTE_USER` | non | `$(whoami)` (user courant) | Compte SSH sur le runner |
86 +| `CI_REMOTE_SSH_PORT` | non | `22` | Port SSH du runner |
87 +| `CI_REMOTE_PATH` | non | `/opt/gitrust-ci` | Répertoire de travail distant (créé par le script) |
88 +| `CI_REMOTE_SSH_KEY` | non | — (ssh-agent) | Chemin d'une clé privée SSH spécifique |
89 +
90 +Ces variables sont les **mêmes** que celles lues par gitrust au runtime. Centraliser dans `.env` évite les divergences entre le provisionnement et le runtime.
91 +
92 +### Exemple minimal de `.env` (runner dédié)
93 +
94 +```bash
95 +# --- CI runner distant ---
96 +CI_REMOTE_HOST=<ci-runner-ip>
97 +CI_REMOTE_USER=ci-runner
98 +CI_REMOTE_SSH_PORT=22
99 +CI_REMOTE_PATH=/opt/gitrust-ci
100 +CI_REMOTE_SSH_KEY=/home/gitrust/.ssh/ci_runner_ed25519
101 +```
102 +
103 +### Exemple `.env` complet coexistant avec config gitrust
104 +
105 +```bash
106 +DATABASE_URL=postgres://...
107 +JWT_SECRET=...
108 +# ... (voir .env.example pour le reste)
109 +
110 +# --- CI/CD (lu par gitrust ET par setup-remote-ci.sh) ---
111 +CI_ENABLED=true
112 +CI_MAX_CONCURRENT=4
113 +CI_REMOTE_HOST=ci-runner.internal
114 +CI_REMOTE_USER=ci-runner
115 +CI_REMOTE_PATH=/opt/gitrust-ci
116 +CI_REMOTE_SSH_KEY=/opt/gitrust/data/ci_runner_key
117 +```
118 +
119 +### Cas « runner local » (pas besoin du script)
120 +
121 +```bash
122 +CI_REMOTE_HOST=localhost
123 +# Les autres CI_REMOTE_* sont ignorés
124 +```
125 +
126 +Dans ce cas, installer Docker et Dagger directement sur la machine gitrust, copier `deployment/ci-engine/` vers `CI_ENGINE_PATH` (défaut `/opt/gitrust/ci-engine`) et passer à la suite. **Ne pas exécuter `setup-remote-ci.sh`** avec `CI_REMOTE_HOST=localhost`.
127 +
128 +---
129 +
130 +## 6. Usage
131 +
132 +### Depuis la racine du projet (par défaut)
133 +
134 +```bash
135 +cd /chemin/vers/gitrust
136 +
137 +# .env a la racine (défaut) :
138 +./deployment/setup-remote-ci.sh
139 +```
140 +
141 +### Avec un `.env` explicite
142 +
143 +```bash
144 +./deployment/setup-remote-ci.sh /chemin/vers/mon.env
145 +# Utile si vous avez .env.production, .env.staging, etc.
146 +./deployment/setup-remote-ci.sh .env.production
147 +```
148 +
149 +### Sortie attendue
150 +
151 +```
152 +==> Configuration :
153 + Serveur : ci-runner@<ci-runner-ip>
154 + Port SSH : 22
155 + Chemin : /opt/gitrust-ci
156 +
157 +==> [1/6] Vérification de la connectivité SSH...
158 +SSH OK
159 + OK
160 +==> [2/6] Vérification de Docker...
161 + Docker déjà installé
162 +==> [3/6] Vérification de Dagger CLI...
163 + Installation de Dagger CLI...
164 + Dagger installé
165 +==> [4/6] Création du répertoire distant...
166 + /opt/gitrust-ci créé
167 +==> [5/6] Synchronisation du ci-engine...
168 +sending incremental file list
169 +ci-engine/
170 +ci-engine/profiles/
171 +...
172 + ci-engine synchronisé vers /opt/gitrust-ci/ci-engine/
173 +==> [6/6] Smoke test...
174 + Versions distantes :
175 +Docker version 28.0.1, build abcd123
176 +dagger v0.19.2 (linux/amd64)
177 +
178 +==> Setup terminé. Le serveur ci-runner@<ci-runner-ip> est prêt pour l'exécution CI.
179 + Pensez à configurer CI_EXECUTION_MODE=remote dans votre .env
180 +```
181 +
182 +---
183 +
184 +## 7. Ce qui se retrouve sur le runner
185 +
186 +Après exécution réussie :
187 +
188 +```
189 +/opt/gitrust-ci/ <- CI_REMOTE_PATH
190 +└── ci-engine/ <- synchronisé depuis deployment/ci-engine/
191 + ├── README.md
192 + └── profiles/ <- templates par stack (Python, Node, Rust, ...)
193 +```
194 +
195 +Plus, installés globalement :
196 +- `/usr/bin/docker` (ou équivalent) + socket `/var/run/docker.sock`
197 +- `/usr/local/bin/dagger`
198 +
199 +Les **workspaces de pipelines** (checkouts temporaires) sont créés par le worker CI de gitrust au moment de l'exécution sous `CI_WORKSPACE_PATH` (défaut `/tmp/gitrust-ci`) — **pas par ce script**.
200 +
201 +---
202 +
203 +## 8. Vérifications post-setup
204 +
205 +### Depuis la machine gitrust
206 +
207 +```bash
208 +# Source le .env
209 +set -a; source .env.production; set +a
210 +
211 +# 1. SSH direct (doit passer sans prompt)
212 +ssh -p ${CI_REMOTE_SSH_PORT:-22} \
213 + ${CI_REMOTE_SSH_KEY:+-i $CI_REMOTE_SSH_KEY} \
214 + $CI_REMOTE_USER@$CI_REMOTE_HOST 'docker info && dagger version'
215 +
216 +# 2. Rsync round-trip (lecture/écriture sur CI_REMOTE_PATH)
217 +echo "test" | ssh $CI_REMOTE_USER@$CI_REMOTE_HOST \
218 + "cat > $CI_REMOTE_PATH/.gitrust-test && cat $CI_REMOTE_PATH/.gitrust-test && rm $CI_REMOTE_PATH/.gitrust-test"
219 +# Attendu : "test"
220 +```
221 +
222 +### Pipeline de test via gitrust
223 +
224 +Pousser un dépôt avec un `.gitrust-ci.yml` minimal :
225 +
226 +```yaml
227 +# .gitrust-ci.yml
228 +version: 1
229 +pipeline:
230 + - name: smoke
231 + image: alpine:3
232 + run: echo "CI runner OK"
233 +```
234 +
235 +Puis dans l'UI gitrust : onglet `Pipelines` → la pipeline doit passer au statut `success`.
236 +
237 +---
238 +
239 +## 9. Mise à jour après modification du `ci-engine/`
240 +
241 +Le `ci-engine/` synchronisé n'est pas « live-linké » : rejouer le script après modification côté source.
242 +
243 +```bash
244 +# Modifier deployment/ci-engine/profiles/*.py ou similaire
245 +./deployment/setup-remote-ci.sh
246 +# Les étapes 2-3 sont skip (déjà installés), seule l'étape 5 refait le rsync
247 +```
248 +
249 +`rsync -az --delete` **supprime** les fichiers côté runner qui n'existent plus localement — garantit la cohérence.
250 +
251 +---
252 +
253 +## 10. Dépannage
254 +
255 +| Symptôme | Cause probable | Fix |
256 +|---|---|---|
257 +| `ERREUR: fichier .env introuvable` | `.env` absent ou chemin incorrect | `cp .env.example .env && $EDITOR .env` ou passer le chemin : `./setup-remote-ci.sh /path/to/.env` |
258 +| `ERREUR: CI_REMOTE_HOST non défini` | Variable commentée ou absente | Décommenter `CI_REMOTE_HOST=...` dans le `.env` |
259 +| `ERREUR: impossible de se connecter` | SSH bloqué, mauvais user, clé non autorisée | Tester manuellement : `ssh -v -p X user@host` ; vérifier `~/.ssh/authorized_keys` sur le runner |
260 +| `Permission denied (publickey)` | `BatchMode=yes` interdit les prompts, clé non chargée | `ssh-add ~/.ssh/ci_runner_ed25519` ou définir `CI_REMOTE_SSH_KEY=/path/to/key` |
261 +| `sudo: a password is required` pendant l'install Docker | User sans `NOPASSWD` sudo | Ajouter le user au `sudoers` : `ci-runner ALL=(ALL) NOPASSWD:ALL` (runner uniquement) |
262 +| `curl: (7) Failed to connect to get.docker.com` | Réseau sortant du runner bloqué | Whitelist `get.docker.com` et `dl.dagger.io`, ou pré-installer Docker + Dagger manuellement |
263 +| `ATTENTION: ... ci-engine introuvable` | Lancé hors du repo gitrust | `cd` dans la racine du projet avant de lancer |
264 +| Pipeline reste `queued` indéfiniment | Worker CI ne trouve pas le runner | Vérifier `CI_EXECUTION_MODE=remote` dans `.env` gitrust + logs : `journalctl -u gitrust \| grep -i 'ci\|dagger'` |
265 +| `dagger: command not found` au smoke test | `$PATH` du user SSH ne contient pas `/usr/local/bin` | `echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc` sur le runner, ou `CI_DAGGER_BIN=/usr/local/bin/dagger` côté gitrust |
266 +
267 +---
268 +
269 +## 11. Sécurité
270 +
271 +- Le runner CI exécute du **code arbitraire** venant des dépôts hébergés. **Ne jamais** le colocaliser avec des secrets sensibles (PG prod, clés de prod).
272 +- Isoler réseau : bloquer l'accès sortant du runner vers le LAN privé (seul l'accès Internet pour `docker pull` est nécessaire).
273 +- Limiter `sudo NOPASSWD` au strict minimum sur le runner (idéalement : juste pour les commandes `docker` et `apt`).
274 +- Rotation régulière de la clé SSH `CI_REMOTE_SSH_KEY`. La révoquer dans `~/.ssh/authorized_keys` côté runner en cas de suspicion.
275 +- Le runner ne doit **pas** pouvoir se connecter en SSH à la machine gitrust (unidirectionnel).
A administration_manual/how-to/configurer-oauth.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Configurer OAuth
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/how-to/configurer-smtp.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Configurer SMTP
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/how-to/depanner-ci.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Dépanner la CI
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/how-to/depanner-ssh.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Dépanner SSH
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/how-to/durcir-avec-fail2ban.md
+571 -0
@@ -0,0 +1,571 @@
1 +# Durcir l'instance avec Fail2ban
2 +
3 +Configuration complète pour protéger un déploiement gitrust exposant :
4 +
5 +- **sshd système** sur `:2022` (admin)
6 +- **Nginx** en reverse proxy HTTPS `:443` + redirect `:80` + `stream :22 → :2222`
7 +- **Gitrust** (web `127.0.0.1:4000`, SSH russh `127.0.0.1:2222`)
8 +- **Dagger** CI runner (local, pas d'exposition réseau directe)
9 +- **Dependency-Track** API `:8081` + UI `:8080` (si exposés)
10 +- **PostgreSQL** `127.0.0.1:5432` (défensif au cas où le bind fuit)
11 +
12 +---
13 +
14 +## 1. Installation
15 +
16 +```bash
17 +sudo apt install -y fail2ban
18 +sudo systemctl enable --now fail2ban
19 +fail2ban-client --version
20 +```
21 +
22 +Vérifier que `ufw` est actif (fournit `banaction = ufw` dans la config) :
23 +
24 +```bash
25 +sudo ufw status
26 +```
27 +
28 +---
29 +
30 +## 2. Fichier principal `/etc/fail2ban/jail.local`
31 +
32 +À placer via :
33 +```bash
34 +sudo tee /etc/fail2ban/jail.local <<'EOF'
35 +[Le contenu ci-dessous]
36 +EOF
37 +```
38 +
39 +```ini
40 +# =============================================================================
41 +# Défauts globaux
42 +# =============================================================================
43 +[DEFAULT]
44 +backend = systemd
45 +bantime = 1h
46 +findtime = 10m
47 +maxretry = 5
48 +
49 +# LAN privé et loopback jamais bannis
50 +ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
51 +
52 +# UFW
53 +banaction = ufw
54 +banaction_allports = ufw
55 +
56 +# Notifications (optionnel — nécessite un relay SMTP local)
57 +# destemail = contact@gitrust.eu
58 +# sender = fail2ban@votre-serveur.example.com
59 +# action = %(action_mwl)s
60 +
61 +# =============================================================================
62 +# 1) sshd admin système — port 2022
63 +# =============================================================================
64 +[sshd]
65 +enabled = true
66 +port = 2022
67 +filter = sshd
68 +backend = %(sshd_backend)s
69 +logpath = %(sshd_log)s
70 +maxretry = 3
71 +findtime = 10m
72 +bantime = 1h
73 +
74 +# =============================================================================
75 +# 2) Nginx — 401/403 auth basic (si un jour activé sur /admin, /metrics, etc.)
76 +# =============================================================================
77 +[nginx-http-auth]
78 +enabled = true
79 +port = http,https
80 +filter = nginx-http-auth
81 +logpath = /var/log/nginx/gitrust.error.log
82 +maxretry = 5
83 +
84 +# =============================================================================
85 +# 3) Nginx — scanners d'URL (wp-admin, .env, phpmyadmin, config.php, etc.)
86 +# =============================================================================
87 +[nginx-botsearch]
88 +enabled = true
89 +port = http,https
90 +filter = nginx-botsearch
91 +logpath = /var/log/nginx/gitrust.access.log
92 +maxretry = 2
93 +findtime = 10m
94 +bantime = 24h
95 +
96 +# =============================================================================
97 +# 4) Nginx — bad user-agents (scanners agressifs, masscan, nikto, etc.)
98 +# =============================================================================
99 +[nginx-badbots]
100 +enabled = true
101 +port = http,https
102 +filter = nginx-badbots
103 +logpath = /var/log/nginx/gitrust.access.log
104 +maxretry = 2
105 +bantime = 24h
106 +
107 +# =============================================================================
108 +# 5) Nginx — dépassement limit_req (voir section 4 — zones HTTPS)
109 +# =============================================================================
110 +[nginx-limit-req]
111 +enabled = true
112 +port = http,https
113 +filter = nginx-limit-req
114 +logpath = /var/log/nginx/gitrust.error.log
115 +maxretry = 10
116 +findtime = 5m
117 +bantime = 1h
118 +
119 +# =============================================================================
120 +# 6) Gitrust — brute force login (formulaire + API JWT)
121 +# =============================================================================
122 +[gitrust-login]
123 +enabled = true
124 +port = http,https
125 +filter = gitrust-login
126 +logpath = /var/log/nginx/gitrust.access.log
127 +maxretry = 5
128 +findtime = 10m
129 +bantime = 1h
130 +
131 +# =============================================================================
132 +# 7) Gitrust — abus API (tokens personnels leaked, scrapers)
133 +# =============================================================================
134 +[gitrust-api-abuse]
135 +enabled = true
136 +port = http,https
137 +filter = gitrust-api-abuse
138 +logpath = /var/log/nginx/gitrust.access.log
139 +maxretry = 30
140 +findtime = 1m
141 +bantime = 2h
142 +
143 +# =============================================================================
144 +# 8) Gitrust SSH (russh) — brute force clé publique
145 +# =============================================================================
146 +[gitrust-ssh]
147 +enabled = true
148 +port = 22,2222
149 +filter = gitrust-ssh
150 +backend = systemd
151 +journalmatch = _SYSTEMD_UNIT=gitrust.service
152 +maxretry = 5
153 +findtime = 10m
154 +bantime = 1h
155 +
156 +# =============================================================================
157 +# 9) Gitrust import worker — tokens invalides sur clone de dépôts externes
158 +# =============================================================================
159 +[gitrust-import]
160 +enabled = true
161 +port = http,https
162 +filter = gitrust-import
163 +backend = systemd
164 +journalmatch = _SYSTEMD_UNIT=gitrust.service
165 +maxretry = 3
166 +findtime = 5m
167 +bantime = 30m
168 +
169 +# =============================================================================
170 +# 10) Dependency-Track UI — brute force login (port 8080)
171 +# =============================================================================
172 +# Activer UNIQUEMENT si DTrack est exposé publiquement.
173 +# Si DTrack est sur réseau privé/loopback, laisser enabled=false.
174 +[dtrack-login]
175 +enabled = false
176 +port = 8080,http,https
177 +filter = dtrack-login
178 +logpath = /var/log/nginx/dtrack.access.log
179 +maxretry = 5
180 +findtime = 10m
181 +bantime = 2h
182 +
183 +# =============================================================================
184 +# 11) Dependency-Track API — abus clé API (port 8081)
185 +# =============================================================================
186 +[dtrack-api]
187 +enabled = false
188 +port = 8081,http,https
189 +filter = dtrack-api
190 +logpath = /var/log/nginx/dtrack.access.log
191 +maxretry = 10
192 +findtime = 5m
193 +bantime = 1h
194 +
195 +# =============================================================================
196 +# 12) PostgreSQL — tentatives de connexion invalides (défensif)
197 +# =============================================================================
198 +# PG doit binder 127.0.0.1 uniquement. Ce jail protège si la config fuit.
199 +[postgresql]
200 +enabled = true
201 +port = 5432
202 +filter = postgresql
203 +backend = systemd
204 +journalmatch = _SYSTEMD_UNIT=postgresql.service + _SYSTEMD_UNIT=docker.service
205 +maxretry = 5
206 +findtime = 10m
207 +bantime = 1h
208 +
209 +# =============================================================================
210 +# 13) Récidive — ban long pour IPs bannies 3x en 24h, tous jails confondus
211 +# =============================================================================
212 +[recidive]
213 +enabled = true
214 +logpath = /var/log/fail2ban.log
215 +banaction = %(banaction_allports)s
216 +bantime = 1w
217 +findtime = 1d
218 +maxretry = 3
219 +```
220 +
221 +---
222 +
223 +## 3. Filtres personnalisés
224 +
225 +À placer dans `/etc/fail2ban/filter.d/` (un fichier par jail custom).
226 +
227 +### 3.1 `gitrust-login.conf`
228 +
229 +```bash
230 +sudo tee /etc/fail2ban/filter.d/gitrust-login.conf <<'EOF'
231 +[Definition]
232 +# POST sur /login ou endpoints JWT avec code 4xx (401/403/422/429)
233 +failregex = ^<HOST> .* "POST /(login|api/v1/auth/login|api/v1/auth/refresh|api/v1/auth/2fa)[^"]*" (401|403|422|429) .*$
234 +ignoreregex =
235 +EOF
236 +```
237 +
238 +### 3.2 `gitrust-api-abuse.conf`
239 +
240 +```bash
241 +sudo tee /etc/fail2ban/filter.d/gitrust-api-abuse.conf <<'EOF'
242 +[Definition]
243 +# Abus API : 401/403 répétés sur /api/v1/* (hors auth déjà couvert par gitrust-login)
244 +failregex = ^<HOST> .* "(GET|POST|PUT|DELETE|PATCH) /api/v1/(?!auth/)[^"]*" (401|403) .*$
245 +ignoreregex =
246 +EOF
247 +```
248 +
249 +### 3.3 `gitrust-ssh.conf`
250 +
251 +```bash
252 +sudo tee /etc/fail2ban/filter.d/gitrust-ssh.conf <<'EOF'
253 +[Definition]
254 +# russh / gitrust-ssh : échecs d'authentification
255 +# Regex à raffiner après observation des logs réels via :
256 +# sudo fail2ban-regex <(journalctl -u gitrust --no-pager -n 2000) \
257 +# /etc/fail2ban/filter.d/gitrust-ssh.conf
258 +failregex = ^.*ssh.*auth(entication)? (failed|failure).*from <HOST>.*$
259 + ^.*[Rr]ejected.*(public[_ ]?key|password).*from <HOST>.*$
260 + ^.*no matching (ssh|public) key.*from <HOST>.*$
261 + ^.*unknown user.*from <HOST>.*$
262 + ^.*gitrust.*auth.*refused.*<HOST>.*$
263 +ignoreregex =
264 +EOF
265 +```
266 +
267 +### 3.4 `gitrust-import.conf`
268 +
269 +```bash
270 +sudo tee /etc/fail2ban/filter.d/gitrust-import.conf <<'EOF'
271 +[Definition]
272 +# Import worker : tokens OAuth/GitHub invalides sur clone de dépôts externes
273 +failregex = ^.*import.*authentication failed.*from <HOST>.*$
274 + ^.*import.*invalid (token|credentials).*from <HOST>.*$
275 + ^.*import.*clone failed.*401.*from <HOST>.*$
276 +ignoreregex =
277 +EOF
278 +```
279 +
280 +### 3.5 `dtrack-login.conf` (si DTrack exposé)
281 +
282 +```bash
283 +sudo tee /etc/fail2ban/filter.d/dtrack-login.conf <<'EOF'
284 +[Definition]
285 +# Dependency-Track : brute force du POST /api/v1/user/login
286 +failregex = ^<HOST> .* "POST /api/v1/user/login[^"]*" (401|403) .*$
287 + ^<HOST> .* "POST /api/v1/user/forceChangePassword[^"]*" (401|403) .*$
288 +ignoreregex =
289 +EOF
290 +```
291 +
292 +### 3.6 `dtrack-api.conf` (si DTrack exposé)
293 +
294 +```bash
295 +sudo tee /etc/fail2ban/filter.d/dtrack-api.conf <<'EOF'
296 +[Definition]
297 +# Dependency-Track API : abus de clé API ou requêtes non authentifiées
298 +failregex = ^<HOST> .* "[^"]+ /api/v1/[^"]*" 401 .*$
299 + ^<HOST> .* "[^"]+ /api/v1/[^"]*" 403 .*$
300 +ignoreregex =
301 +EOF
302 +```
303 +
304 +### 3.7 `postgresql.conf` (créer si absent)
305 +
306 +```bash
307 +if [ ! -f /etc/fail2ban/filter.d/postgresql.conf ]; then
308 +sudo tee /etc/fail2ban/filter.d/postgresql.conf <<'EOF'
309 +[Definition]
310 +failregex = ^.*authentication failed for user.*host=<HOST>.*$
311 + ^.*FATAL:.*password authentication failed.*<HOST>.*$
312 + ^.*no pg_hba\.conf entry for host "<HOST>".*$
313 +ignoreregex =
314 +EOF
315 +fi
316 +```
317 +
318 +### 3.8 `nginx-limit-req.conf` (créer si absent sur votre distro)
319 +
320 +```bash
321 +if [ ! -f /etc/fail2ban/filter.d/nginx-limit-req.conf ]; then
322 +sudo tee /etc/fail2ban/filter.d/nginx-limit-req.conf <<'EOF'
323 +[Definition]
324 +failregex = ^.*limiting requests, excess: .* by zone .*, client: <HOST>.*$
325 +ignoreregex =
326 +EOF
327 +fi
328 +```
329 +
330 +### 3.9 `nginx-badbots.conf` — OBLIGATOIRE (pas fourni par Debian/Ubuntu)
331 +
332 +Le paquet `fail2ban` Debian/Ubuntu fournit `apache-badbots.conf` mais PAS `nginx-badbots.conf`. Sans ce filter, `fail2ban-client reload` affiche :
333 +
334 +```
335 +Found no accessible config files for 'filter.d/nginx-badbots' under /etc/fail2ban
336 +```
337 +
338 +Le filter ci-dessous réutilise la liste de bad user-agents de `apache-badbots` avec un `failregex` adapté au format `combined` de nginx :
339 +
340 +```bash
341 +sudo tee /etc/fail2ban/filter.d/nginx-badbots.conf <<'EOF'
342 +[Definition]
343 +badbotscustom = EmailCollector|WebEMailExtrac|TrackBack/1\.02|sogou music spider
344 +badbots = Atomic_Email_Hunter/4\.0|atSpider/1\.0|autoemailspider|bwh3_user_agent|China Local Browse 2\.6|ContactBot/0\.2|ContentSmartz|DataCha0s/2\.0|DBrowse 1\.4b|DBrowse 1\.4d|Demo Bot DOT 16b|Demo Bot Z 16b|DSurf15a 01|DSurf15a 71|DSurf15a 81|DSurf15a VA|EBrowse 1\.4b|Educate Search VxB|EmailSiphon|EmailSpider|EmailWolf 1\.00|ExtractorPro|Franklin Locator 1\.8|Full Web Bot 0416B|Guestbook Auto Submitter|ISC Systems iRc Search 2\.1|LMQueueBot/0\.2|LWP\:\:Simple/5\.803|Microsoft URL Control - 6\.00\.8xxx|Missigua Locator 1\.9|Mozilla/4\.0 efp@gmx\.net|Nsauditor/1\.x|PBrowse 1\.4b|PEval 1\.4b|Poirot|psycheclone|sogou spider|sohu agent|VadixBot|WebVulnCrawl\.unknown/1\.0 libwww-perl/5\.803|Wells Search II|WEP Search 00
345 +
346 +failregex = ^<HOST> -.*"(GET|POST|HEAD).*HTTP.*"(?:%(badbots)s|%(badbotscustom)s)"$
347 +ignoreregex =
348 +
349 +datepattern = ^[^\[]*\[({DATE})
350 + {^LN-BEG}
351 +EOF
352 +```
353 +
354 +**Alternative** : si vous ne voulez pas maintenir la liste, simplement désactiver le jail (`enabled = false` dans le `[nginx-badbots]`) — la combinaison `nginx-botsearch` + `nginx-limit-req` + `gitrust-api-abuse` couvre déjà l'essentiel.
355 +
356 +---
357 +
358 +## 4. Rate limiting côté Nginx (requis par `nginx-limit-req`)
359 +
360 +### 4.1 Déclarer les zones globales
361 +
362 +```bash
363 +sudo tee /etc/nginx/conf.d/gitrust-limit.conf <<'EOF'
364 +# Zones de rate limiting gitrust
365 +limit_req_zone $binary_remote_addr zone=gitrust_login:10m rate=1r/s;
366 +limit_req_zone $binary_remote_addr zone=gitrust_api:10m rate=10r/s;
367 +limit_req_zone $binary_remote_addr zone=gitrust_git:10m rate=30r/s;
368 +EOF
369 +```
370 +
371 +### 4.2 Ajouter les `location` dans `/etc/nginx/sites-available/gitrust`
372 +
373 +Dans le bloc `server { listen 443 ssl; ... }`, **avant** `location /` finale :
374 +
375 +```nginx
376 +# Protection brute force login (1 req/s par IP, burst 5)
377 +location ~ ^/(login|api/v1/auth/) {
378 + limit_req zone=gitrust_login burst=5 nodelay;
379 + proxy_pass http://gitrust_backend;
380 + proxy_set_header Host $host;
381 + proxy_set_header X-Real-IP $remote_addr;
382 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
383 + proxy_set_header X-Forwarded-Proto $scheme;
384 +}
385 +
386 +# Protection API (10 req/s par IP, burst 20)
387 +location ^~ /api/v1/ {
388 + limit_req zone=gitrust_api burst=20 nodelay;
389 + proxy_pass http://gitrust_backend;
390 + proxy_set_header Host $host;
391 + proxy_set_header X-Real-IP $remote_addr;
392 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
393 + proxy_set_header X-Forwarded-Proto $scheme;
394 +}
395 +
396 +# Protection Git smart HTTP (30 req/s — clone/push légitime peut être verbeux)
397 +location ~ ^/[^/]+/[^/]+\.git/ {
398 + limit_req zone=gitrust_git burst=50 nodelay;
399 + proxy_pass http://gitrust_backend;
400 + proxy_http_version 1.1;
401 + proxy_set_header Host $host;
402 + proxy_set_header X-Real-IP $remote_addr;
403 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
404 + proxy_set_header X-Forwarded-Proto $scheme;
405 + proxy_buffering off;
406 + proxy_request_buffering off;
407 + client_max_body_size 2G;
408 +}
409 +```
410 +
411 +### 4.3 Reload
412 +
413 +```bash
414 +sudo nginx -t && sudo systemctl reload nginx
415 +```
416 +
417 +---
418 +
419 +## 5. Démarrage et validation
420 +
421 +```bash
422 +sudo systemctl restart fail2ban
423 +
424 +# Liste des jails actifs
425 +sudo fail2ban-client status
426 +# Attendu :
427 +# sshd, nginx-http-auth, nginx-botsearch, nginx-badbots, nginx-limit-req,
428 +# gitrust-login, gitrust-api-abuse, gitrust-ssh, gitrust-import,
429 +# postgresql, recidive
430 +# (+ dtrack-login, dtrack-api si activées)
431 +
432 +# Stats par jail
433 +sudo fail2ban-client status gitrust-login
434 +sudo fail2ban-client status sshd
435 +```
436 +
437 +### Valider chaque filtre custom
438 +
439 +```bash
440 +# 1. gitrust-login contre l'access log nginx
441 +sudo fail2ban-regex /var/log/nginx/gitrust.access.log \
442 + /etc/fail2ban/filter.d/gitrust-login.conf
443 +
444 +# 2. gitrust-api-abuse
445 +sudo fail2ban-regex /var/log/nginx/gitrust.access.log \
446 + /etc/fail2ban/filter.d/gitrust-api-abuse.conf
447 +
448 +# 3. gitrust-ssh contre journald
449 +journalctl -u gitrust --no-pager -n 5000 > /tmp/gitrust.log
450 +sudo fail2ban-regex /tmp/gitrust.log \
451 + /etc/fail2ban/filter.d/gitrust-ssh.conf
452 +rm /tmp/gitrust.log
453 +
454 +# 4. postgresql
455 +journalctl -u docker --no-pager -n 5000 | grep -i postgres > /tmp/pg.log
456 +sudo fail2ban-regex /tmp/pg.log \
457 + /etc/fail2ban/filter.d/postgresql.conf
458 +```
459 +
460 +`0 failregex found` = regex à ajuster après observation des logs réels de chaque service.
461 +
462 +### Test de bannissement
463 +
464 +```bash
465 +# Depuis un host HORS LAN (sinon ignoreip s'applique)
466 +for i in $(seq 1 10); do
467 + curl -sk -o /dev/null -w "%{http_code}\n" \
468 + -X POST https://<votre-domaine>/login \
469 + -d 'username=admin&password=wrong'
470 +done
471 +
472 +# Vérifier le ban
473 +ssh gitrust-host 'sudo fail2ban-client status gitrust-login'
474 +# Currently banned : 1 — Banned IP list : <IP test>
475 +
476 +# Débannir manuellement
477 +ssh gitrust-host 'sudo fail2ban-client unban <IP>'
478 +```
479 +
480 +---
481 +
482 +## 6. Monitoring
483 +
484 +```bash
485 +# Logs fail2ban temps réel
486 +sudo tail -f /var/log/fail2ban.log
487 +
488 +# Toutes les IPs bannies, tous jails confondus
489 +sudo fail2ban-client banned
490 +
491 +# Stats détaillées d'un jail
492 +sudo fail2ban-client status gitrust-ssh
493 +# Currently failed : 2
494 +# Total failed : 47
495 +# Currently banned : 1
496 +# Total banned : 12
497 +# Banned IP list : 203.0.113.42
498 +
499 +sudo grep "Ban " /var/log/fail2ban.log | tail -20
500 +```
501 +
502 +---
503 +
504 +## 7. Matrice récapitulative
505 +
506 +| # | Jail | Port(s) | Source logs | Max retry | Ban time | Surface protégée |
507 +|---|------|---------|-------------|-----------|----------|------------------|
508 +| 1 | `sshd` | 2022 | journald sshd | 3 | 1h | SSH admin |
509 +| 2 | `nginx-http-auth` | 80,443 | nginx error | 5 | 1h | Basic auth (admin futur) |
510 +| 3 | `nginx-botsearch` | 80,443 | nginx access | 2 | 24h | Scanners WP/PHP |
511 +| 4 | `nginx-badbots` | 80,443 | nginx access | 2 | 24h | User-agents malveillants |
512 +| 5 | `nginx-limit-req` | 80,443 | nginx error | 10 | 1h | Flood global |
513 +| 6 | `gitrust-login` | 80,443 | nginx access | 5 | 1h | Brute force login UI + API |
514 +| 7 | `gitrust-api-abuse` | 80,443 | nginx access | 30 | 2h | Scrapers API (tokens fuités) |
515 +| 8 | `gitrust-ssh` | 22,2222 | journald gitrust | 5 | 1h | Brute force clé SSH Git |
516 +| 9 | `gitrust-import` | 80,443 | journald gitrust | 3 | 30m | Brute force PAT/OAuth import |
517 +| 10 | `dtrack-login` | 8080 | nginx access | 5 | 2h | Brute force UI Dep-Track |
518 +| 11 | `dtrack-api` | 8081 | nginx access | 10 | 1h | Abus clé API Dep-Track |
519 +| 12 | `postgresql` | 5432 | journald | 5 | 1h | Défense en profondeur PG |
520 +| 13 | `recidive` | all | fail2ban.log | 3 | 1w | Méta-ban 3×/24h |
521 +
522 +**Ordre de déclenchement typique** : brute force → jail spécifique (ban 1h) → si récidive 3x → recidive (ban 1 semaine, tous ports).
523 +
524 +---
525 +
526 +## 8. Notes spécifiques à la stack gitrust
527 +
528 +### 8.1 Dagger (CI)
529 +
530 +Dagger s'exécute **localement** sur la machine gitrust (ou un runner distant — voir `administration_manual/how-to/configurer-ci-runner-remote.md`). **Aucun port réseau ouvert** → pas de jail dédié.
531 +
532 +### 8.2 Dependency-Track
533 +
534 +Si DTrack est déployé sur le même serveur et **exposé**, activer les jails 10 et 11 en mettant `enabled = true` et en pointant `logpath` vers les logs nginx du vhost DTrack.
535 +
536 +Si DTrack est **interne** (VPN, réseau privé), laisser `enabled = false` — le firewall suffit.
537 +
538 +Config DTrack recommandée :
539 +- Bind sur `127.0.0.1` via `dtrack.url.base=http://127.0.0.1:8080`
540 +
541 +### 8.3 PostgreSQL
542 +
543 +Le jail `postgresql` est **défensif**. PG doit rester bindé sur `127.0.0.1:5432` via Docker. Vérifier :
544 +
545 +```bash
546 +sudo ss -tlnp | grep 5432
547 +# Attendu : 127.0.0.1:5432 — PAS 0.0.0.0:5432
548 +```
549 +
550 +### 8.4 Notifications
551 +
552 +Pour recevoir un mail à chaque ban :
553 +
554 +1. Installer un relay SMTP local : `sudo apt install msmtp-mta`
555 +2. Configurer `/etc/msmtprc` avec un compte SMTP
556 +3. Décommenter dans `[DEFAULT]` :
557 + ```ini
558 + destemail = contact@gitrust.eu
559 + sender = fail2ban@votre-serveur.example.com
560 + action = %(action_mwl)s
561 + ```
562 +4. `sudo systemctl restart fail2ban`
563 +
564 +---
565 +
566 +## 9. Limites et évolutions
567 +
568 +- **IPv6** : toutes les regex utilisent `<HOST>` qui matche IPv4 ET IPv6. Vérifier que UFW est configuré pour v6 également.
569 +- **CDN/Cloudflare devant** : si un CDN est ajouté, `$remote_addr` côté Nginx sera l'IP du CDN — il faut récupérer la vraie IP via `X-Forwarded-For` et propager au logging Nginx. Changer `failregex` en conséquence. Sinon les jails banniront le CDN.
570 +- **Docker/Podman** : si gitrust passe en conteneur, les logs de `gitrust.service` deviennent `docker.service` ou `podman.service` → mettre à jour `journalmatch` dans les jails 8 et 9.
571 +- **GeoIP** : pour bloquer des pays entiers en amont, ajouter `geo $blocked_country` dans Nginx (module `ngx_http_geoip2_module`) — complémentaire à fail2ban.
A administration_manual/how-to/forcer-2fa-globalement.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Forcer le 2FA sur toute l'instance
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/how-to/gerer-utilisateurs-admin.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Gérer les utilisateurs (panel /admin)
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/how-to/index.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Guides pratiques
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/how-to/integrer-dependency-track.md
+351 -0
@@ -0,0 +1,351 @@
1 +# Intégrer la CI et Dependency-Track
2 +
3 +Ce document explique comment activer et configurer les deux fonctionnalités de qualité/sécurité de gitrust :
4 +
5 +1. **La CI intégrée** (Dagger) qui exécute les builds/tests/lints à chaque push.
6 +2. **Le dependency tracker** (Syft + Dependency-Track) qui scanne les composants du code à chaque push et détecte les vulnérabilités connues.
7 +
8 +Ces deux systèmes sont **indépendants** : on peut activer l'un sans l'autre.
9 +
10 +---
11 +
12 +## 1. Architecture générale
13 +
14 +```mermaid
15 +flowchart TB
16 + subgraph Client
17 + Dev[Développeur]
18 + end
19 + subgraph Gitrust[Instance Gitrust]
20 + HTTP[:4000 HTTP/Git]
21 + SSH[:2222 SSH/Git]
22 + Worker[CiWorker<br/>tokio task]
23 + Sbom[SbomService<br/>tokio spawn]
24 + DB[(PostgreSQL)]
25 + end
26 + subgraph Builder[Serveur de build]
27 + Docker[Docker/Podman]
28 + Dagger[Dagger CLI]
29 + CiEngine[/opt/gitrust-ci/ci-engine/]
30 + end
31 + subgraph Security[Stack sécurité optionnelle]
32 + Syft[syft]
33 + Dtrack[Dependency-Track]
34 + end
35 +
36 + Dev -->|git push| HTTP
37 + Dev -->|git push| SSH
38 + HTTP --> Worker
39 + SSH --> Worker
40 + HTTP --> Sbom
41 + SSH --> Sbom
42 + Worker -->|SSH + rsync| Builder
43 + Builder -->|logs streamés| Worker
44 + Worker --> DB
45 + Sbom -->|scan workspace| Syft
46 + Sbom -->|PUT BOM| Dtrack
47 + Dtrack -->|findings| Sbom
48 + Sbom --> DB
49 +```
50 +
51 +Trois composants fonctionnent en parallèle :
52 +
53 +- **CiWorker** : tâche Tokio qui consomme des `CiTask` depuis un channel `mpsc`, limitée par un `Semaphore` à `CI_MAX_CONCURRENT` pipelines simultanés.
54 +- **SbomService** : exécuté dans un `tokio::spawn` après chaque push, totalement découplé du CI.
55 +- **Serveur de build** : machine distante (ou `localhost`) qui exécute Docker + Dagger. Gitrust y envoie le workspace par rsync et lance Dagger par SSH.
56 +
57 +---
58 +
59 +## 2. Mettre en place la CI
60 +
61 +### 2.1 Pré-requis serveur de build
62 +
63 +Le serveur de build peut être **la même machine que Gitrust** (`CI_REMOTE_HOST=localhost`) ou une machine dédiée. Il doit disposer de :
64 +
65 +| Outil | Rôle |
66 +|-------|------|
67 +| Docker ou Podman | Containers Dagger |
68 +| Dagger CLI | Moteur d'exécution |
69 +| SSH (accès sortant depuis Gitrust) | Transport |
70 +| rsync | Copie du workspace |
71 +| git, tar | Extraction du tree du commit |
72 +
73 +Installation automatique recommandée :
74 +
75 +```bash
76 +# Depuis la machine Gitrust (l'utilisateur doit pouvoir SSH vers le builder)
77 +./deployment/setup-remote-ci.sh .env
78 +```
79 +
80 +Le script exécute :
81 +
82 +1. Vérification de la connectivité SSH
83 +2. Installation de Docker si absent
84 +3. Installation de Dagger CLI si absent
85 +4. Création du répertoire de travail distant
86 +5. Synchronisation du `ci-engine`
87 +6. Smoke test (versions)
88 +
89 +### 2.2 Configuration Gitrust (fichier .env)
90 +
91 +Ajouter au `.env` de Gitrust :
92 +
93 +```env
94 +# Activer globalement le CI
95 +CI_ENABLED=true
96 +
97 +# Chemin du ci-engine sur le serveur de build
98 +CI_ENGINE_PATH=/opt/gitrust-ci/ci-engine
99 +
100 +# Limite de parallélisme
101 +CI_MAX_CONCURRENT=4
102 +CI_DEFAULT_TIMEOUT=3600
103 +CI_WORKSPACE_PATH=/tmp/gitrust-ci
104 +
105 +# Serveur de build (mettre localhost pour "même machine")
106 +CI_REMOTE_HOST=builder.example.com
107 +CI_REMOTE_USER=ci-runner
108 +CI_REMOTE_PATH=/opt/gitrust-ci
109 +CI_REMOTE_SSH_PORT=22
110 +# CI_REMOTE_SSH_KEY=/home/gitrust/.ssh/id_ed25519 # si pas ssh-agent
111 +```
112 +
113 +Redémarrer Gitrust : `systemctl restart gitrust` (ou `cargo run --release`).
114 +
115 +### 2.3 Activer la CI sur un dépôt
116 +
117 +Dans l'interface web : aller sur le dépôt → **Settings** → **CI**.
118 +
119 +- Cocher **CI enabled** (requis — par défaut `false`)
120 +- Cocher **Trigger on push** (active l'exécution à chaque push)
121 +- Optionnel : **Auto-cancel** (annule les pipelines en cours quand un nouveau démarre)
122 +- Optionnel : **Allowed branches** (ex. `main,develop` — vide = toutes)
123 +
124 +### 2.4 Choisir le mode : Easy ou Power
125 +
126 +```mermaid
127 +flowchart LR
128 + Push[Commit<br/>poussé] --> Tree{Arbre du<br/>commit contient ?}
129 + Tree -->|.dagger/| Power[Mode Power<br/>dagger call -m .dagger/ ci]
130 + Tree -->|.gitrust-ci.yml| Easy[Mode Easy<br/>dagger call -m ci-engine test-pr]
131 + Tree -->|rien| None[Pas de pipeline]
132 + Power --> Run[Exécution<br/>distante SSH]
133 + Easy --> Run
134 +```
135 +
136 +#### Mode Easy (recommandé pour commencer)
137 +
138 +Créer `.gitrust-ci.yml` à la racine du dépôt :
139 +
140 +```yaml
141 +# Raccourci : charge un profil pré-configuré (rust | python | node)
142 +language: rust
143 +
144 +build:
145 + command: "cargo build --release"
146 +
147 +checks:
148 + lint: "cargo clippy -- -D warnings"
149 + format: "cargo fmt -- --check"
150 +
151 +tests:
152 + command: "cargo test --release"
153 +```
154 +
155 +Les profils disponibles se trouvent dans `deployment/ci-engine/profiles/` (rust.yaml, python.yaml, node.yaml) dans le dépôt source.
156 +
157 +#### Mode Power
158 +
159 +Pour les utilisateurs avancés, créer un module Dagger complet dans `.dagger/` :
160 +
161 +```
162 +.dagger/
163 +├── dagger.json
164 +├── src/
165 +│ └── main.py # ou Go/TypeScript
166 +```
167 +
168 +La fonction `ci` du module est appelée directement :
169 +
170 +```bash
171 +dagger call -m .dagger/ ci
172 +```
173 +
174 +Avantage : accès au Daggerverse, composition, tests de pipeline. Voir la [documentation Dagger](https://docs.dagger.io/).
175 +
176 +### 2.5 Suivi d'un pipeline
177 +
178 +Après un `git push`, une entrée apparaît dans l'onglet **CI** du dépôt :
179 +
180 +```mermaid
181 +stateDiagram-v2
182 + [*] --> Pending: create_pipeline
183 + Pending --> Running: worker picks CiTask
184 + Running --> Success: exit 0
185 + Running --> Failure: exit != 0
186 + Running --> Cancelled: timeout / auto_cancel / manuel
187 + Success --> [*]
188 + Failure --> [*]
189 + Cancelled --> [*]
190 +```
191 +
192 +Les logs stdout/stderr sont streamés ligne par ligne dans la table `ci_logs` et visibles en direct dans l'UI. En cas d'échec, une notification est envoyée au propriétaire du dépôt.
193 +
194 +---
195 +
196 +## 3. Mettre en place le Dependency Tracker
197 +
198 +Cette partie est totalement indépendante de la CI. Elle scanne le code poussé et produit un SBOM CycloneDX, puis (optionnellement) l'envoie à Dependency-Track pour une analyse de vulnérabilités.
199 +
200 +### 3.1 Installer Syft
201 +
202 +Sur la machine Gitrust (le scan se fait localement, pas sur le builder) :
203 +
204 +```bash
205 +# Installation officielle
206 +curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh \
207 + | sh -s -- -b /usr/local/bin
208 +
209 +# Vérification
210 +syft --version
211 +```
212 +
213 +Dans `.env` :
214 +
215 +```env
216 +CI_SBOM_ENABLED=true
217 +CI_SYFT_BIN=/usr/local/bin/syft # optionnel, défaut: syft dans PATH
218 +```
219 +
220 +À ce stade : à chaque push, un SBOM CycloneDX est généré et stocké (sans upload externe). Visible dans l'onglet **Security** du dépôt : nombre de composants, sha256 du BOM.
221 +
222 +### 3.2 Déployer Dependency-Track
223 +
224 +Dependency-Track est une application Java qui stocke les SBOM et corrèle avec les bases CVE/OSV/NVD. Déploiement Docker recommandé :
225 +
226 +```bash
227 +mkdir -p /opt/dtrack && cd /opt/dtrack
228 +curl -L -o docker-compose.yml \
229 + https://dependencytrack.org/docker-compose.yml
230 +docker compose up -d
231 +```
232 +
233 +L'API est disponible sur `http://localhost:8081` et l'UI sur `http://localhost:8080`.
234 +Login initial : `admin` / `admin` (à changer immédiatement).
235 +
236 +### 3.3 Créer une clé API
237 +
238 +Dans Dependency-Track → **Administration** → **Access Management** → **Teams** :
239 +
240 +1. Créer (ou réutiliser) une équipe `gitrust`.
241 +2. Lui attribuer les permissions :
242 + - `BOM_UPLOAD`
243 + - `PROJECT_CREATION_UPLOAD`
244 + - `VIEW_PORTFOLIO`
245 + - `VIEW_VULNERABILITY`
246 +3. Générer une API key et la copier.
247 +
248 +### 3.4 Configurer Gitrust
249 +
250 +Ajouter au `.env` :
251 +
252 +```env
253 +CI_DTRACK_ENABLED=true
254 +CI_DTRACK_URL=http://localhost:8081
255 +CI_DTRACK_API_KEY=odt_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
256 +```
257 +
258 +Redémarrer Gitrust. À chaque push :
259 +
260 +```mermaid
261 +sequenceDiagram
262 + participant Push as post-receive
263 + participant Sbom as SbomService
264 + participant Git as git archive
265 + participant Syft
266 + participant Dtrack as Dependency-Track
267 + participant DB as sbom_reports
268 +
269 + Push->>Sbom: process_push(sha, ref)
270 + Sbom->>DB: upsert status=pending
271 + Sbom->>Git: archive sha | tar -x tmpdir
272 + Sbom->>Syft: scan dir:tmpdir -o cyclonedx-json
273 + Syft-->>Sbom: BOM bytes
274 + Sbom->>DB: update sha256
275 + Sbom->>Dtrack: PUT /api/v1/bom (base64)
276 + Dtrack-->>Sbom: token
277 + loop max 30s
278 + Sbom->>Dtrack: GET /api/v1/bom/token/{token}
279 + Dtrack-->>Sbom: processing ?
280 + end
281 + Sbom->>Dtrack: GET /api/v1/finding/project/{uuid}
282 + Dtrack-->>Sbom: findings[]
283 + Sbom->>DB: update status=success<br/>+ critical/high/medium/low
284 +```
285 +
286 +### 3.5 Lire les résultats
287 +
288 +Onglet **Security** du dépôt → encart SBOM :
289 +
290 +- Nombre de composants détectés
291 +- Compteurs par sévérité : Critical / High / Medium / Low
292 +- Lien direct vers le projet dans Dependency-Track (si l'UUID est résolu)
293 +- Hash sha256 du BOM (traçabilité)
294 +
295 +Si Dependency-Track met plus de 30s à analyser, le status reste `processing` — un sweeper ultérieur ira rechercher les findings.
296 +
297 +---
298 +
299 +## 4. Débogage
300 +
301 +### Problèmes CI courants
302 +
303 +| Symptôme | Cause probable | Vérifier |
304 +|----------|----------------|----------|
305 +| Pipeline reste `pending` | Worker non démarré, ou channel saturé | Logs `CI worker started`, `CI_MAX_CONCURRENT` |
306 +| `Échec rsync vers le serveur de build` | SSH bloqué, clé absente | `ssh -p ${CI_REMOTE_SSH_PORT} ${CI_REMOTE_USER}@${CI_REMOTE_HOST}` manuel |
307 +| `dagger: command not found` | Dagger non installé sur le builder | Relancer `setup-remote-ci.sh` |
308 +| Status `Cancelled` inattendu | Timeout (`CI_DEFAULT_TIMEOUT`) ou auto-cancel | Augmenter le timeout, vérifier pipelines concurrents |
309 +
310 +### Problèmes SBOM courants
311 +
312 +| Symptôme | Cause probable | Vérifier |
313 +|----------|----------------|----------|
314 +| `SBOM generation disabled` | `CI_SBOM_ENABLED=false` | `.env` |
315 +| `syft spawn failed` | Binaire introuvable | `which syft`, `CI_SYFT_BIN` |
316 +| `invalid commit sha` | SHA non hex 40 chars | Rare, signale un bug |
317 +| `Dtrack upload 401` | API key invalide ou permissions manquantes | Régénérer, vérifier les 4 permissions |
318 +| Status `processing` indéfiniment | Dtrack surchargé, analyse lente | Attendre, ou relancer un push |
319 +
320 +### Logs utiles
321 +
322 +```bash
323 +# Logs Gitrust (systemd)
324 +journalctl -u gitrust -f | grep -E "CI|SBOM|sbom|pipeline"
325 +
326 +# Vérifier un pipeline en DB
327 +psql $DATABASE_URL -c "SELECT id, status, commit_sha, created_at FROM ci_pipelines ORDER BY created_at DESC LIMIT 10;"
328 +
329 +# Vérifier un SBOM
330 +psql $DATABASE_URL -c "SELECT commit_sha, status, components_count, critical_count, high_count FROM sbom_reports ORDER BY created_at DESC LIMIT 10;"
331 +```
332 +
333 +---
334 +
335 +## 5. Checklist récapitulative
336 +
337 +**CI :**
338 +- [ ] Docker + Dagger installés sur le serveur de build (`setup-remote-ci.sh`)
339 +- [ ] `CI_ENABLED=true` et `CI_REMOTE_*` dans `.env`
340 +- [ ] Gitrust redémarré
341 +- [ ] CI activée dans Settings → CI pour chaque dépôt
342 +- [ ] Fichier `.gitrust-ci.yml` (Easy) ou `.dagger/` (Power) commité
343 +- [ ] Push → pipeline visible dans l'onglet CI
344 +
345 +**Dependency Tracker :**
346 +- [ ] Syft installé sur la machine Gitrust
347 +- [ ] `CI_SBOM_ENABLED=true` dans `.env`
348 +- [ ] (Optionnel) Dependency-Track déployé + API key créée avec les 4 permissions
349 +- [ ] (Optionnel) `CI_DTRACK_ENABLED=true`, `CI_DTRACK_URL`, `CI_DTRACK_API_KEY` dans `.env`
350 +- [ ] Gitrust redémarré
351 +- [ ] Push → SBOM visible dans l'onglet Security
A administration_manual/how-to/mettre-a-jour.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Mettre à jour gitrust
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/how-to/sauvegarder-restaurer.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Sauvegarder et restaurer
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/how-to/tuner-rate-limiting.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Régler le rate limiting
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/index.md
+74 -0
@@ -0,0 +1,74 @@
1 +# Manuel d'administration
2 +
3 +Ce manuel s'adresse aux opérateurs et self-hosters qui déploient, configurent et maintiennent une instance gitrust en production. Il couvre l'intégralité du cycle de vie d'une instance : premier démarrage, mise en production, sauvegarde, mise à jour et dépannage. Il suppose des connaissances en administration Linux, en réseau et en TLS — il n'explique pas ces prérequis.
4 +
5 +## Parcours d'apprentissage
6 +
7 +Le parcours administrateur est structuré en 4 tutoriels qui représentent environ 3 heures au total. L'étayage est dégressif : le premier tutoriel fournit tout clé en main, le dernier demande de composer soi-même à partir des recettes disponibles.
8 +
9 +```mermaid
10 +graph LR
11 + A[VM prête<br/>Docker installé] --> B[01-installation-docker<br/>30 min]
12 + B --> C[02-installation-systemd<br/>45 min]
13 + C --> D[03-premier-demarrage<br/>20 min]
14 + D --> E[04-mise-en-production<br/>90 min]
15 + E --> F[Admin opérationnel]
16 +```
17 +
18 +> **Checkpoint de parcours** : avant de passer au tutoriel 02, vous devez avoir une instance gitrust accessible sur `http://localhost:4000` avec un compte administrateur fonctionnel. Si ce n'est pas le cas, relisez le tutoriel 01.
19 +
20 +> **Checkpoint de parcours** : avant le tutoriel 04, vous devez avoir une instance démarrée avec une configuration SMTP et un reverse-proxy TLS opérationnel. Si ce n'est pas le cas, relisez le tutoriel 03.
21 +
22 +---
23 +
24 +## Tutoriels — apprendre en faisant
25 +
26 +Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suivez-les dans l'ordre — chacun suppose le précédent complété.
27 +
28 +- [01 — Installation Docker : stack docker-compose complète](tutorials/01-installation-docker.md) — ~30 min
29 +- [02 — Installation systemd : binaire natif + service](tutorials/02-installation-systemd.md) — ~45 min
30 +- [03 — Premier démarrage : admin bootstrap, migrations](tutorials/03-premier-demarrage.md) — ~20 min
31 +- [04 — Mise en production](tutorials/04-mise-en-production-192-168.md) — ~90 min
32 +
33 +---
34 +
35 +## How-to — recettes pour les tâches courantes
36 +
37 +Les how-to répondent à « comment faire X » sans explication de fond. Consultez-les dans n'importe quel ordre selon votre besoin.
38 +
39 +- [Sauvegarder et restaurer](how-to/sauvegarder-restaurer.md)
40 +- [Mettre à jour l'instance](how-to/mettre-a-jour.md)
41 +- [Configurer SMTP](how-to/configurer-smtp.md)
42 +- [Configurer OAuth (Google, GitHub)](how-to/configurer-oauth.md)
43 +- [Configurer un CI runner distant](how-to/configurer-ci-runner-remote.md)
44 +- [Intégrer Dependency-Track (SBOM)](how-to/integrer-dependency-track.md)
45 +- [Durcir avec Fail2ban](how-to/durcir-avec-fail2ban.md)
46 +- [Tuner le rate limiting](how-to/tuner-rate-limiting.md)
47 +- [Forcer la 2FA globalement](how-to/forcer-2fa-globalement.md)
48 +- [Dépanner SSH](how-to/depanner-ssh.md)
49 +- [Dépanner la CI](how-to/depanner-ci.md)
50 +- [Gérer les utilisateurs depuis /admin](how-to/gerer-utilisateurs-admin.md)
51 +- [Auditer l'instance](how-to/auditer-instance.md)
52 +
53 +---
54 +
55 +## Référence — informations techniques exactes
56 +
57 +La référence documente de façon exhaustive les paramètres, schémas et comportements. Elle est destinée à la consultation ponctuelle.
58 +
59 +- [Variables d'environnement (.env)](reference/variables-environnement.md)
60 +- [Paramètres dynamiques (app_settings)](reference/parametres-dynamiques.md)
61 +- [Schéma de base de données](reference/schema-base-de-donnees.md)
62 +- [Ports et services (4000 HTTP, 2222 SSH, 5432 PG)](reference/ports-et-services.md)
63 +- [Conformité ANSSI PA-074](reference/conformite-anssi-pa074.md)
64 +
65 +---
66 +
67 +## Explication — comprendre le pourquoi
68 +
69 +Les explanations construisent les modèles mentaux nécessaires pour prendre de bonnes décisions d'exploitation. Lisez-les quand vous voulez comprendre les choix d'architecture, pas seulement les appliquer.
70 +
71 +- [Architecture globale de gitrust](explanation/architecture-globale.md)
72 +- [Modèle de déploiement : mono-machine vs HA](explanation/modele-deploiement.md)
73 +- [CI Dagger : pourquoi et comment](explanation/ci-dagger.md)
74 +- [Stratégie de sauvegarde 3-2-1 adaptée gitrust](explanation/strategie-sauvegarde.md)
A administration_manual/reference/conformite-anssi-pa074.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Conformité ANSSI PA-074
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/reference/index.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Référence
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/reference/parametres-dynamiques.md
+296 -0
@@ -0,0 +1,296 @@
1 +# Paramètres dynamiques
2 +
3 +Ce document explique comment fonctionne la configuration de la plateforme, les deux mécanismes en jeu, leur précédence, et les pièges à connaître.
4 +
5 +---
6 +
7 +## Vue d'ensemble : deux systèmes distincts
8 +
9 +Gitrust utilise **deux systèmes de configuration** indépendants :
10 +
11 +| Système | Source | Modifiable à chaud | Visible dans l'UI admin |
12 +|---------|--------|:------------------:|:-----------------------:|
13 +| **Configuration statique** | Fichier `.env` + variables d'environnement | Non (restart requis) | Non |
14 +| **Configuration dynamique** | Table `app_settings` (PostgreSQL) | Oui (effet immédiat) | Oui (`/admin/settings`) |
15 +
16 +Il existe un **cas hybride** pour OAuth (DB prioritaire, `.env` en fallback).
17 +
18 +---
19 +
20 +## 1. Configuration statique (`.env`)
21 +
22 +### Principe
23 +
24 +Les variables d'environnement sont chargées **une seule fois au démarrage** par `dotenvy::dotenv()` et stockées dans des structs Rust immuables. Elles ne sont jamais relues après le boot.
25 +
26 +### Fichiers de référence
27 +
28 +| Fichier | Rôle |
29 +|---------|------|
30 +| `.env.example` | Template documenté avec toutes les variables |
31 +| `.env` | Configuration locale (gitignore) |
32 +| `.env.production` | Configuration de déploiement |
33 +| `.env.test` | Configuration de tests |
34 +
35 +### Structs de chargement
36 +
37 +| Struct | Variables concernées |
38 +|--------|---------------------|
39 +| `GitrustConfig` | `GIT_REPOS_BASE_PATH`, `SSH_PORT`, `SSH_LISTEN_ADDR`, `SSH_HOST_KEY_PATH`, `CI_*`, `IMPORT_*` |
40 +| `AppConfig` | `APP_NAME`, `APP_THEME`, `APP_DEBUG` |
41 +| `AuthConfig` | `JWT_SECRET`, `JWT_EXPIRATION_MINUTES`, `SESSION_*`, `RATE_LIMIT_*`, `COOKIE_*` |
42 +| `EmailConfig` | `SMTP_*`, `EMAIL_*`, `IMAP_*` |
43 +
44 +### Comportement
45 +
46 +- Chargées dans `RustwardenApp::build()` au démarrage
47 +- Stockées dans des `Arc<Config>` partagés via l'état axum
48 +- **Modifier le `.env` sans redémarrer n'a aucun effet**
49 +- **Ces variables ne sont PAS affichées dans l'interface admin**
50 +
51 +### Liste des variables statiques (non exhaustive)
52 +
53 +```
54 +DATABASE_URL, SERVER_HOST, SERVER_PORT, RUST_LOG,
55 +SSH_HOST_KEY_PATH, SSH_PORT, SSH_LISTEN_ADDR, SSH_PUBLIC_HOST,
56 +JWT_SECRET, JWT_EXPIRATION_MINUTES, JWT_ISSUER,
57 +REFRESH_TOKEN_EXPIRATION_DAYS, REMEMBER_ME_EXPIRATION_DAYS,
58 +SESSION_TIMEOUT_MINUTES, SESSION_BACKEND,
59 +RATE_LIMIT_LOGIN_PER_MINUTE, RATE_LIMIT_REFRESH_PER_MINUTE,
60 +RATE_LIMIT_GENERAL_PER_MINUTE,
61 +APP_DEBUG, COOKIE_SECURE, COOKIE_SAME_SITE,
62 +ADMIN_USERNAME, ADMIN_EMAIL, ADMIN_PASSWORD,
63 +SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, SMTP_FROM,
64 +EMAIL_BASE_URL, EMAIL_QUEUE_*,
65 +APP_NAME, APP_THEME, DEFAULT_LOCALE,
66 +GIT_REPOS_BASE_PATH,
67 +CI_ENABLED, CI_MAX_CONCURRENT, CI_REMOTE_HOST, CI_WORKSPACE_PATH
68 +```
69 +
70 +---
71 +
72 +## 2. Configuration dynamique (table `app_settings`)
73 +
74 +### Principe
75 +
76 +Les réglages dynamiques sont stockés en base PostgreSQL dans la table `app_settings` et lus **à chaque requête** via `AppSettingsService`. Ils sont modifiables à chaud par un administrateur depuis l'interface `/admin/settings`.
77 +
78 +### Schéma de la table
79 +
80 +```sql
81 +CREATE TABLE app_settings (
82 + id UUID PRIMARY KEY,
83 + key VARCHAR(100) UNIQUE NOT NULL,
84 + value TEXT NOT NULL,
85 + description TEXT,
86 + updated_by UUID REFERENCES users(id) ON DELETE SET NULL,
87 + updated_at TIMESTAMPTZ NOT NULL
88 +);
89 +```
90 +
91 +### Initialisation au démarrage
92 +
93 +Au boot, `AppSettingsService::initialize_default_settings()` crée les réglages par défaut **uniquement s'ils n'existent pas encore en base** :
94 +
95 +```rust
96 +let existing = Self::get_setting(db, key).await?;
97 +if existing.is_none() {
98 + // ... insert valeur par défaut
99 +}
100 +```
101 +
102 +**Conséquence critique** : une fois qu'un réglage existe en base (créé au premier démarrage ou modifié via l'UI), il n'est **jamais écrasé** par un redémarrage ultérieur.
103 +
104 +### Liste des réglages dynamiques et leurs valeurs par défaut
105 +
106 +| Clé | Défaut | Description |
107 +|-----|--------|-------------|
108 +| `app_domain` | `env::var("APP_DOMAIN")` ou `"localhost"` | Domaine de l'application |
109 +| `allow_registration` | `false` | Autoriser l'inscription publique |
110 +| `validation_email_required` | `true` | Exiger la validation email |
111 +| `audit_log_level` | `INFO` | Niveau de log d'audit |
112 +| `audit_log_actions` | `["create","update","delete","reset_password"]` | Actions auditées |
113 +| `password_min_length` | `8` | Longueur minimum mot de passe |
114 +| `password_require_uppercase` | `false` | Exiger des majuscules |
115 +| `password_require_lowercase` | `false` | Exiger des minuscules |
116 +| `password_require_digits` | `false` | Exiger des chiffres |
117 +| `password_require_special` | `false` | Exiger des caractères spéciaux |
118 +| `password_change_require_email` | `true` | Confirmation email pour changement mdp |
119 +| `password_expiration_enabled` | `false` | Activer l'expiration des mots de passe |
120 +| `password_expiration_days` | `0` | Durée d'expiration (jours) |
121 +| `password_expiration_alert_enabled` | `false` | Alerte email avant expiration |
122 +| `password_expiration_alert_days_before` | `7` | Jours avant expiration pour alerter |
123 +| `oauth_enabled` | `false` | Activer OAuth/SSO |
124 +| `oauth_google_enabled` | `false` | Activer Google OAuth |
125 +| `oauth_github_enabled` | `false` | Activer GitHub OAuth |
126 +| `oauth_discord_enabled` | `false` | Activer Discord OAuth |
127 +| `oauth_microsoft_enabled` | `false` | Activer Microsoft OAuth |
128 +| `oauth_redirect_base_url` | `""` | URL de base pour les callbacks OAuth |
129 +| `oauth_auto_register` | `true` | Créer un compte auto au premier login OAuth |
130 +| `oauth_link_existing_account` | `true` | Lier un compte OAuth à un utilisateur existant |
131 +| `oauth_{provider}_client_id` | `""` | Client ID du provider OAuth |
132 +| `oauth_{provider}_client_secret` | `""` | Client secret (chiffré AES-256-GCM en base) |
133 +| `oauth_microsoft_tenant` | `""` | Tenant Azure AD |
134 +
135 +---
136 +
137 +## 3. Cas hybride : OAuth
138 +
139 +OAuth est le **seul sous-système** qui combine les deux sources. La logique dans `OAuthConfig::load()` :
140 +
141 +```
142 +Pour chaque réglage OAuth :
143 + 1. Chercher dans app_settings (DB)
144 + → si trouvé et non vide : utiliser cette valeur
145 + 2. Sinon : fallback sur la variable d'environnement
146 + → si absente : utiliser la valeur par défaut codée en dur
147 +```
148 +
149 +**Important** : `OAuthConfig::load()` est appelé au démarrage. Le résultat est stocké dans un `Arc` et n'est pas relu dynamiquement. Donc :
150 +
151 +- Modifier un réglage OAuth **via l'UI admin** nécessite un **redémarrage** pour que `OAuthConfig` soit rechargé
152 +- Le `.env` n'est qu'un fallback si la DB n'a pas de valeur
153 +
154 +---
155 +
156 +## 4. Précédence et comportement au redémarrage
157 +
158 +### Réglages statiques (`.env` uniquement)
159 +
160 +| Action | Effet immédiat | Après restart |
161 +|--------|:-:|:-:|
162 +| Modifier `.env` | Non | Oui |
163 +
164 +### Réglages dynamiques (DB uniquement)
165 +
166 +| Action | Effet immédiat | Après restart |
167 +|--------|:-:|:-:|
168 +| Modifier via UI admin | Oui | Oui (valeur en DB persiste) |
169 +| Modifier le `.env` | Aucun effet | Aucun effet |
170 +
171 +### Réglages hybrides (OAuth)
172 +
173 +| Action | Effet immédiat | Après restart |
174 +|--------|:-:|:-:|
175 +| Modifier via UI admin | Non (OAuthConfig est en Arc) | Oui (DB prime sur .env) |
176 +| Modifier `.env` | Non | Seulement si aucune valeur en DB |
177 +
178 +---
179 +
180 +## 5. Piège principal : les variables `.env` fantômes
181 +
182 +Certaines variables présentes dans `.env.example` donnent l'**illusion** de configurer des réglages qui sont en réalité gérés par la base de données :
183 +
184 +| Variable `.env` | Réglage DB correspondant | La variable `.env` est-elle lue ? |
185 +|-----------------|--------------------------|:-:|
186 +| `ALLOW_REGISTRATION=true` | `allow_registration` | **Non** — valeur par défaut codée en dur (`"false"`) |
187 +| `EMAIL_VALIDATION_REQUIRED=true` | `validation_email_required` | **Non** — valeur par défaut codée en dur (`"true"`) |
188 +| `OAUTH_ENABLED=true` | `oauth_enabled` | Oui, mais **seulement en fallback** si la DB n'a pas de valeur |
189 +
190 +Pour `ALLOW_REGISTRATION` et `EMAIL_VALIDATION_REQUIRED` :
191 +
192 +- La variable `.env` est documentée dans `.env.example` mais **n'est jamais consultée** par `initialize_default_settings()`
193 +- La valeur initiale est **codée en dur** dans le service
194 +- Seule la valeur en base de données (modifiable via `/admin/settings`) fait foi
195 +
196 +Pour `app_domain`, c'est le seul réglage dynamique qui lit le `.env` comme seed initial.
197 +
198 +---
199 +
200 +## 6. Diagramme de décision
201 +
202 +```
203 + ┌─────────────────────────────┐
204 + │ Quel type de réglage ? │
205 + └──────────┬──────────────────-┘
206 + │
207 + ┌────────────────┼────────────────┐
208 + ▼ ▼ ▼
209 + Infrastructure Fonctionnel OAuth
210 + (port, JWT, SMTP) (inscription, (providers,
211 + mots de passe) secrets)
212 + │ │ │
213 + ▼ ▼ ▼
214 + .env seul DB seule DB + fallback .env
215 + │ │ │
216 + ▼ ▼ ▼
217 + Restart requis Effet immédiat Restart requis
218 + via /admin/ (OAuthConfig en Arc)
219 + settings
220 +```
221 +
222 +---
223 +
224 +## 7. Guide pour les administrateurs
225 +
226 +### Modifier un réglage d'infrastructure
227 +
228 +Éditer `.env` (ou `.env.production`) puis redémarrer le service :
229 +
230 +```bash
231 +# Éditer
232 +vim .env
233 +
234 +# Redémarrer
235 +systemctl restart gitrust # production
236 +# ou Ctrl+C + cargo run # dev
237 +```
238 +
239 +### Modifier un réglage fonctionnel
240 +
241 +Se connecter en tant qu'administrateur, aller dans `/admin/settings`, modifier la valeur, et cliquer "Save". L'effet est **immédiat**, aucun redémarrage nécessaire.
242 +
243 +### Modifier un réglage OAuth
244 +
245 +Via `/admin/settings`, modifier les valeurs OAuth puis **redémarrer le service** (la config OAuth est chargée en mémoire au boot et n'est pas relue dynamiquement).
246 +
247 +### Vérifier la valeur effective d'un réglage
248 +
249 +Pour les réglages dynamiques, interroger la base directement :
250 +
251 +```sql
252 +SELECT key, value, updated_at, updated_by
253 +FROM app_settings
254 +WHERE key = 'allow_registration';
255 +```
256 +
257 +Pour les réglages statiques, vérifier les logs au démarrage (`RUST_LOG=debug`).
258 +
259 +---
260 +
261 +## 8. Guide pour les développeurs
262 +
263 +### Ajouter un nouveau réglage dynamique
264 +
265 +1. Ajouter le tuple `(clé, valeur_défaut, description)` dans `AppSettingsService::initialize_default_settings()` :
266 + ```rust
267 + ("ma_nouvelle_cle", "valeur_par_defaut", Some("Description pour l'UI admin")),
268 + ```
269 +
270 +2. Lire la valeur dans le code via le service :
271 + ```rust
272 + // Boolean avec défaut
273 + let enabled = AppSettingsService::get_bool(&db, "ma_nouvelle_cle", false).await?;
274 +
275 + // String
276 + let val = AppSettingsService::get_setting(&db, "ma_nouvelle_cle").await?;
277 + ```
278 +
279 +3. La valeur apparaîtra automatiquement dans `/admin/settings`.
280 +
281 +### Ajouter un nouveau réglage statique
282 +
283 +1. Ajouter la variable dans `.env.example` avec documentation complète
284 +2. Lire la variable dans le struct `Config` correspondant via `env::var()`
285 +3. La valeur ne sera **pas** visible dans l'interface admin
286 +
287 +### Ajouter un réglage hybride (DB + fallback .env)
288 +
289 +Suivre le pattern OAuth dans `crates/rustwarden-core/src/config/oauth.rs` :
290 +
291 +```rust
292 +let ma_valeur = match db_val("ma_cle").await {
293 + Some(v) => v,
294 + None => env::var("MA_CLE").unwrap_or_else(|_| "defaut".to_string()),
295 +};
296 +```
A administration_manual/reference/ports-et-services.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Ports et services
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/reference/schema-base-de-donnees.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Schéma de la base de données
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/reference/variables-environnement.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Variables d'environnement
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/tutorials/01-installation-docker.md
+312 -0
@@ -0,0 +1,312 @@
1 +# Installation Docker : démarrez gitrust en 30 minutes avec docker-compose
2 +
3 +## Objectifs
4 +
5 +À la fin de ce tutoriel, vous saurez :
6 +
7 +- **O1. Déployer** la stack gitrust minimale (application + PostgreSQL) avec docker-compose
8 +- **O2. Vérifier** que les trois services démarrent correctement et sont en bonne santé
9 +- **O3. Créer** le premier compte administrateur et accéder à l'interface web
10 +
11 +## Pré-requis
12 +
13 +- **Technique** : une VM ou machine Linux (Debian 12 / Ubuntu 22.04 ou supérieur), Docker Engine ≥ 24 installé (`docker --version` répond), Docker Compose plugin installé (`docker compose version` répond), ports 4000 et 2222 libres sur la machine
14 +- **Pédagogique** : aucun tutoriel gitrust préalable requis — c'est le point de départ du parcours administrateur
15 +- **Temps estimé** : ~30 minutes
16 +
17 +## Vue d'ensemble
18 +
19 +Avant de lancer la moindre commande, comprenons ce que docker-compose va orchestrer et pourquoi.
20 +
21 +gitrust est composé de **trois services principaux** dans sa configuration minimale. Pensez-y comme trois pièces d'un appartement qui s'appellent entre elles via un réseau interne :
22 +
23 +```mermaid
24 +graph TB
25 + subgraph internet ["Internet / votre navigateur"]
26 + B[Navigateur :4000]
27 + S[Client git/SSH :2222]
28 + end
29 +
30 + subgraph docker ["Réseau Docker gitrust_net"]
31 + A["gitrust-app<br/>(Rust, port 4000 + 2222)<br/>Lit la config depuis .env"]
32 + P["postgres<br/>(PostgreSQL 16, port 5432)<br/>Stocke comptes, dépôts, issues"]
33 + R["redis (optionnel)<br/>(Redis 7, port 6379)<br/>Sessions web + cache"]
34 + end
35 +
36 + B -->|HTTP| A
37 + S -->|SSH| A
38 + A -->|SQL| P
39 + A -.->|sessions| R
40 +```
41 +
42 +**gitrust-app** est le cœur : serveur HTTP (`:4000`) + serveur SSH (`:2222`) compilé en Rust. Il lit sa configuration depuis un fichier `.env` et écrit les dépôts Git bare sur un volume Docker. **PostgreSQL** stocke toutes les données relationnelles (comptes, organisations, dépôts, issues, PRs). **Redis** est optionnel dans la configuration minimale — il gère les sessions web et le cache quand il est présent.
43 +
44 +Dans ce tutoriel, nous utilisons la stack **minimale** (app + PostgreSQL) suffisante pour évaluer gitrust et démarrer une petite instance. La stack production avec Redis et SMTP se trouve dans [`template/docker/docker-compose.production.yml`](../../template/docker/docker-compose.production.yml).
45 +
46 +---
47 +
48 +## Étape 1 : Créez le répertoire de travail et le fichier de configuration
49 +
50 +Créez un répertoire dédié à votre instance gitrust et positionnez-vous dedans :
51 +
52 +```bash
53 +mkdir -p /opt/gitrust && cd /opt/gitrust
54 +```
55 +
56 +Créez le fichier de configuration `.env` avec les valeurs minimales. **Changez impérativement** les valeurs marquées `CHANGE_ME` :
57 +
58 +```bash
59 +cat > .env << 'EOF'
60 +# === gitrust — configuration minimale ===
61 +# Changez toutes les valeurs CHANGE_ME avant de démarrer
62 +
63 +# Clé secrète de l'application (générez avec : openssl rand -hex 32)
64 +SECRET_KEY=CHANGE_ME_openssl_rand_hex_32
65 +
66 +# URL publique de l'instance (sans slash final)
67 +APP_URL=http://localhost:4000
68 +
69 +# Base de données PostgreSQL
70 +DATABASE_URL=postgres://gitrust:CHANGE_ME_db_password@postgres:5432/gitrust
71 +POSTGRES_USER=gitrust
72 +POSTGRES_PASSWORD=CHANGE_ME_db_password
73 +POSTGRES_DB=gitrust
74 +
75 +# Serveur SSH (port exposé à l'extérieur)
76 +SSH_PORT=2222
77 +
78 +# Mode de l'application
79 +RUST_LOG=info
80 +APP_ENV=production
81 +EOF
82 +```
83 +
84 +Générez maintenant une clé secrète robuste et remplacez la valeur dans `.env` :
85 +
86 +```bash
87 +SECRET=$(openssl rand -hex 32)
88 +sed -i "s/CHANGE_ME_openssl_rand_hex_32/$SECRET/" .env
89 +```
90 +
91 +Choisissez également un mot de passe pour PostgreSQL et remplacez les deux occurrences :
92 +
93 +```bash
94 +DB_PASS=$(openssl rand -hex 16)
95 +sed -i "s/CHANGE_ME_db_password/$DB_PASS/g" .env
96 +```
97 +
98 +Sortie attendue (vérification) :
99 +```bash
100 +grep SECRET_KEY .env
101 +# → SECRET_KEY=4a7f2c9e1b8d3f6a0e5c2b9d7f4a1e8c3b6d9f2a5e8c1b4d7f0a3e6c9b2d5f8a
102 +```
103 +
104 +**Checkpoint** : exécutez `grep CHANGE_ME .env` — la commande doit ne rien retourner. Si elle retourne des lignes, ces valeurs n'ont pas été remplacées et le démarrage échouera.
105 +
106 +---
107 +
108 +## Étape 2 : Créez le fichier docker-compose.yml
109 +
110 +Créez le fichier `docker-compose.yml` suivant dans `/opt/gitrust/`. Ce contenu correspond à la stack minimale gitrust — il est reproduit ici intégralement pour que vous puissiez démarrer sans dépendance externe :
111 +
112 +```bash
113 +cat > docker-compose.yml << 'EOF'
114 +# docker-compose.minimal.yml — Stack gitrust minimale (app + PostgreSQL)
115 +# Cas d'usage : évaluation, développement, petite instance (<10 utilisateurs)
116 +# Pour la production : utilisez docker-compose.production.yml (+ Redis + SMTP)
117 +#
118 +# Usage :
119 +# docker compose up -d
120 +# docker compose logs -f gitrust
121 +# docker compose down
122 +
123 +version: "3.9"
124 +
125 +services:
126 + # ── Base de données ───────────────────────────────────────────────────────
127 + postgres:
128 + image: postgres:16-alpine
129 + container_name: gitrust_postgres
130 + restart: unless-stopped
131 + environment:
132 + POSTGRES_USER: ${POSTGRES_USER}
133 + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
134 + POSTGRES_DB: ${POSTGRES_DB}
135 + volumes:
136 + # Données persistantes — ne supprimez pas ce volume sans sauvegarde
137 + - postgres_data:/var/lib/postgresql/data
138 + healthcheck:
139 + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
140 + interval: 10s
141 + timeout: 5s
142 + retries: 5
143 + networks:
144 + - gitrust_net
145 +
146 + # ── Application gitrust ───────────────────────────────────────────────────
147 + gitrust:
148 + image: ghcr.io/gitrust/gitrust:latest
149 + container_name: gitrust_app
150 + restart: unless-stopped
151 + depends_on:
152 + postgres:
153 + condition: service_healthy
154 + env_file:
155 + # Lit toutes les variables depuis .env — ne commitez jamais ce fichier
156 + - .env
157 + ports:
158 + # Interface web — exposée sur toutes les interfaces de la machine hôte
159 + - "4000:4000"
160 + # Serveur SSH Git — exposé sur le port configuré dans .env
161 + - "${SSH_PORT:-2222}:2222"
162 + volumes:
163 + # Dépôts Git bare — données critiques, sauvegardez ce volume
164 + - git_repos:/var/lib/gitrust/repositories
165 + # Clés SSH du serveur — générées au premier démarrage, persistez-les
166 + - ssh_host_keys:/etc/gitrust/ssh
167 + healthcheck:
168 + test: ["CMD", "curl", "-f", "http://localhost:4000/health"]
169 + interval: 30s
170 + timeout: 10s
171 + retries: 3
172 + start_period: 30s
173 + networks:
174 + - gitrust_net
175 +
176 +volumes:
177 + # postgres_data : données relationnelles (comptes, dépôts, issues, PRs)
178 + postgres_data:
179 + # git_repos : dépôts Git bare (le contenu réel des commits)
180 + git_repos:
181 + # ssh_host_keys : clés SSH hôte (fingerprint de votre serveur)
182 + ssh_host_keys:
183 +
184 +networks:
185 + gitrust_net:
186 + driver: bridge
187 +EOF
188 +```
189 +
190 +**Checkpoint** : vérifiez que les deux fichiers sont présents dans `/opt/gitrust/` :
191 +
192 +```bash
193 +ls -la /opt/gitrust/
194 +```
195 +
196 +Sortie attendue :
197 +```
198 +total 16
199 +drwxr-xr-x 2 root root 4096 avr 17 10:00 .
200 +drwxr-xr-x 8 root root 4096 avr 17 09:55 ..
201 +-rw------- 1 root root 612 avr 17 10:00 .env
202 +-rw-r--r-- 1 root root 2048 avr 17 10:00 docker-compose.yml
203 +```
204 +
205 +---
206 +
207 +## Étape 3 : Démarrez la stack et suivez les logs
208 +
209 +Démarrez tous les services en arrière-plan :
210 +
211 +```bash
212 +docker compose up -d
213 +```
214 +
215 +Sortie attendue :
216 +```
217 +[+] Running 4/4
218 + ✔ Network gitrust_gitrust_net Created 0.1s
219 + ✔ Volume "gitrust_postgres_data" Created 0.0s
220 + ✔ Container gitrust_postgres Started 0.8s
221 + ✔ Container gitrust_app Started 1.2s
222 +```
223 +
224 +Suivez les logs de l'application pour observer le démarrage (les migrations s'exécutent automatiquement) :
225 +
226 +```bash
227 +docker compose logs -f gitrust
228 +```
229 +
230 +Sortie attendue (les 15-20 premières secondes) :
231 +```
232 +gitrust_app | 2026-04-17T10:00:15Z INFO gitrust > Starting gitrust v0.9.0
233 +gitrust_app | 2026-04-17T10:00:15Z INFO gitrust > Connecting to database...
234 +gitrust_app | 2026-04-17T10:00:16Z INFO gitrust > Running database migrations...
235 +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > Applied 42 migrations successfully
236 +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > Generating SSH host keys...
237 +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > SSH host key fingerprint: SHA256:xxxxxxxxxxxxxxxxxxxx
238 +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > HTTP server listening on 0.0.0.0:4000
239 +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > SSH server listening on 0.0.0.0:2222
240 +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust > gitrust is ready
241 +```
242 +
243 +Appuyez sur **Ctrl+C** pour quitter le suivi des logs (les containers continuent de tourner).
244 +
245 +**Checkpoint** : vérifiez l'état de santé des services :
246 +
247 +```bash
248 +docker compose ps
249 +```
250 +
251 +Sortie attendue :
252 +```
253 +NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
254 +gitrust_app ghcr.io/gitrust/gitrust:latest "/usr/local/bin/gitr…" gitrust 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:4000->4000/tcp, 0.0.0.0:2222->2222/tcp
255 +gitrust_postgres postgres:16-alpine "docker-entrypoint.s…" postgres 2 minutes ago Up 2 minutes (healthy) 5432/tcp
256 +```
257 +
258 +Les deux containers doivent afficher `(healthy)`. Si l'un affiche `(starting)`, attendez 30 secondes et relancez la commande. S'il affiche `(unhealthy)`, consultez les logs avec `docker compose logs gitrust` ou `docker compose logs postgres`.
259 +
260 +---
261 +
262 +## Étape 4 : Créez le premier compte administrateur
263 +
264 +Ouvrez votre navigateur et rendez-vous sur `http://localhost:4000`.
265 +
266 +Vous devriez voir la page d'accueil gitrust avec un formulaire d'inscription. Comme l'instance est vierge, **le premier compte créé devient automatiquement administrateur**.
267 +
268 +Remplissez le formulaire :
269 +- **Pseudo** : votre identifiant administrateur (ex. `admin`)
270 +- **E-mail** : votre adresse e-mail
271 +- **Mot de passe** : choisissez un mot de passe robuste (≥ 12 caractères)
272 +
273 +Cliquez sur **Créer mon compte**.
274 +
275 +Sortie attendue dans les logs (visible avec `docker compose logs -f gitrust`) :
276 +```
277 +gitrust_app | 2026-04-17T10:05:00Z INFO gitrust::auth > New user registered: admin (id=1)
278 +gitrust_app | 2026-04-17T10:05:00Z INFO gitrust::admin > First user promoted to administrator: admin
279 +```
280 +
281 +**Checkpoint final** : connectez-vous avec vos identifiants. Après la connexion, vérifiez que le menu en haut à droite affiche un lien **Administration** (ou naviguez vers `http://localhost:4000/admin`). Cette page n'est accessible qu'aux administrateurs — sa présence confirme que votre compte a bien le rôle admin.
282 +
283 +L'URL de votre instance est `http://localhost:4000` et votre compte administrateur est opérationnel.
284 +
285 +---
286 +
287 +## Récapitulatif
288 +
289 +- ✓ **O1 accompli** : la stack docker-compose est déployée — `docker compose ps` affiche deux containers `(healthy)`
290 +- ✓ **O2 accompli** : les trois services (app, PostgreSQL, réseau interne) démarrent correctement — les logs montrent « gitrust is ready » et les migrations sont appliquées
291 +- ✓ **O3 accompli** : le premier compte administrateur est créé et la page `/admin` est accessible
292 +
293 +---
294 +
295 +## Et si ça ne marche pas
296 +
297 +| Symptôme | Cause probable | Correction |
298 +|----------|----------------|------------|
299 +| `Error: port 4000 is already in use` au démarrage | Un autre service occupe le port 4000 sur la machine hôte | Identifiez le service avec `ss -tlnp \| grep 4000` ou `lsof -i :4000`. Arrêtez-le ou changez le port dans `docker-compose.yml` : remplacez `"4000:4000"` par `"4001:4000"` et accédez sur `:4001` |
300 +| Le container `gitrust_app` affiche `(unhealthy)` ou redémarre en boucle | La variable `DATABASE_URL` est incorrecte ou `SECRET_KEY` contient des caractères spéciaux non échappés | Vérifiez avec `docker compose logs gitrust \| grep ERROR`. Assurez-vous que `SECRET_KEY` est bien une chaîne hexadécimale sans guillemets. Rechargez avec `docker compose down && docker compose up -d` |
301 +| La page `http://localhost:4000` affiche « Connection refused » | Le container n'est pas encore en `(healthy)` ou le port n'est pas exposé | Attendez 30 secondes et rechargez. Si le problème persiste, vérifiez que votre pare-feu local (`ufw status`) autorise le port 4000 |
302 +| `FATAL: password authentication failed for user "gitrust"` dans les logs postgres | Le mot de passe dans `DATABASE_URL` ne correspond pas à `POSTGRES_PASSWORD` | Supprimez le volume PostgreSQL (`docker compose down -v`) et relancez — **attention : supprime toutes les données** |
303 +
304 +---
305 +
306 +## Prochaine étape
307 +
308 +→ [02 — Installation systemd : binaire natif + service](02-installation-systemd.md) : découvrez l'installation sans Docker pour un déploiement production avec hardening AppArmor (~45 min)
309 +
310 +Ou si vous souhaitez rendre cette instance accessible depuis Internet :
311 +
312 +→ [04 — Mise en production](04-mise-en-production-192-168.md) : reverse-proxy TLS, SMTP, sauvegarde automatique (~90 min)
A administration_manual/tutorials/02-installation-systemd.md
+11 -0
@@ -0,0 +1,11 @@
1 +# 02 — Installation avec systemd
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/tutorials/03-premier-demarrage.md
+11 -0
@@ -0,0 +1,11 @@
1 +# 03 — Premier démarrage
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A administration_manual/tutorials/04-mise-en-production-192-168.md
+582 -0
@@ -0,0 +1,582 @@
1 +# Mise en production sur une machine Linux avec HTTPS Let's Encrypt
2 +
3 +## Contexte
4 +
5 +Procédure de référence pour déployer une instance gitrust sur une machine Linux à IP fixe, avec patte externe routée et HTTPS via Let's Encrypt. Reproductible et testée en conditions réelles.
6 +
7 +Adaptez les valeurs suivantes à votre environnement :
8 +
9 +| Placeholder | Remplacez par |
10 +|---|---|
11 +| `<your-server-ip>` | L'IP fixe de votre serveur (ex: `192.168.1.57` sur un LAN, ou une IP publique) |
12 +| `<your-domain>` | Votre FQDN principal (ex: `gitrust.example.com`) |
13 +| `<acme-email>` | L'email pour Let's Encrypt (ex: `contact@example.com`) |
14 +| `<admin-user>` | L'utilisateur SSH admin sur le serveur cible |
15 +
16 +### Les trois services gitrust
17 +
18 +| # | Service | Bind interne | Exposition publique | Variable |
19 +|---|---------|--------------|---------------------|----------|
20 +| 1 | Web HTTP (UI SSR + API) | `127.0.0.1:4000` | `:443` HTTPS via Nginx | `SERVER_PORT` |
21 +| 2 | SSH Git (russh) | `127.0.0.1:2222` | `:22` via Nginx stream | `SSH_PORT` |
22 +| 3 | Worker CI/CD (Dagger) | tâche Tokio in-process | — (déclenché par push) | `CI_ENABLED` |
23 +
24 +PostgreSQL = dépendance, conteneur Docker bind loopback `127.0.0.1:5432`.
25 +
26 +### Topologie réseau
27 +
28 +```
29 +Internet
30 + |
31 + v
32 +<your-server-ip> (patte externe)
33 + |
34 + +-- :22 Nginx stream --> 127.0.0.1:2222 (gitrust SSH)
35 + +-- :80 Nginx HTTP --> 301 HTTPS (sauf /.well-known/acme-challenge)
36 + +-- :443 Nginx HTTPS --> 127.0.0.1:4000 (gitrust HTTP)
37 + +-- :2022 sshd système (accès admin, déplacé depuis :22)
38 +
39 + Loopback uniquement :
40 + +-- 127.0.0.1:4000 gitrust web
41 + +-- 127.0.0.1:2222 gitrust SSH
42 + +-- 127.0.0.1:5432 postgres docker
43 +```
44 +
45 +### Risque critique — ordre d'exécution
46 +
47 +Le déplacement de `sshd` système de `:22` vers `:2022` **doit** être fait avant la configuration `nginx stream`, et **doit** être validé depuis une **deuxième session SSH** avant fermeture de la première. Sinon : lockout total (besoin d'accès console physique).
48 +
49 +---
50 +
51 +## Pré-requis
52 +
53 +### Poste de build (machine locale avec le code source)
54 +
55 +```bash
56 +rustup show && command -v rsync envsubst npx
57 +# Installer si besoin : sudo apt install rsync gettext-base
58 +```
59 +
60 +### Cible `<your-server-ip>`
61 +
62 +- Debian/Ubuntu récent
63 +- Accès SSH avec `sudo`
64 +- Docker + plugin compose (`docker compose version`)
65 +- Snap ou apt pour `certbot` + plugin nginx
66 +- DNS `<your-domain>` → IP publique de la patte externe (vérifier `dig +short <your-domain>`)
67 +- Module `stream` Nginx disponible (paquet `libnginx-mod-stream` sur Debian)
68 +
69 +---
70 +
71 +## Phase 0 — Générer `.env.production` (poste de build, une seule fois)
72 +
73 +```bash
74 +JWT=$(openssl rand -hex 64)
75 +ADMIN_PWD=$(openssl rand -base64 24)
76 +PG_PWD=$(openssl rand -base64 24)
77 +
78 +cat > .env.production <<EOF
79 +# ---- Base de données ----
80 +DATABASE_URL=postgres://gitrust:${PG_PWD}@127.0.0.1:5432/gitrust
81 +
82 +# ---- Serveur HTTP (derrière Nginx HTTPS) ----
83 +SERVER_HOST=127.0.0.1
84 +SERVER_PORT=4000
85 +
86 +# ---- Serveur SSH (derrière nginx stream :22) ----
87 +SSH_PORT=2222
88 +SSH_LISTEN_ADDR=127.0.0.1
89 +SSH_PUBLIC_HOST=<your-domain>
90 +SSH_HOST_KEY_PATH=/opt/gitrust/data/ssh_host_ed25519_key
91 +
92 +# ---- Chemins (réécrits par deploy.sh) ----
93 +GIT_REPOS_BASE_PATH=/opt/gitrust/data/repos
94 +STATIC_FILES_PATH=/opt/gitrust/static
95 +
96 +# ---- Sécurité — HTTPS actif ----
97 +JWT_SECRET=${JWT}
98 +JWT_EXPIRATION_MINUTES=15
99 +REFRESH_TOKEN_EXPIRATION_DAYS=7
100 +COOKIE_SECURE=true # HTTPS via Nginx
101 +COOKIE_SAME_SITE=Lax
102 +APP_DEBUG=false
103 +RUST_LOG=info
104 +
105 +# ---- Admin initial ----
106 +ADMIN_USERNAME=admin
107 +ADMIN_EMAIL=<acme-email>
108 +ADMIN_PASSWORD=${ADMIN_PWD}
109 +
110 +# ---- Inscription & UI ----
111 +ALLOW_REGISTRATION=false
112 +APP_NAME=Gitrust
113 +DEFAULT_LOCALE=fr
114 +
115 +# ---- Email ----
116 +EMAIL_VALIDATION_REQUIRED=false
117 +EMAIL_BASE_URL=https://<your-domain>
118 +
119 +# ---- CI/CD Dagger (worker 3) ----
120 +CI_ENABLED=true
121 +CI_MAX_CONCURRENT=4
122 +CI_DEFAULT_TIMEOUT=3600
123 +CI_WORKSPACE_PATH=/tmp/gitrust-ci
124 +CI_REMOTE_HOST=localhost
125 +
126 +# ---- Worker import ----
127 +IMPORT_MAX_CONCURRENT=2
128 +IMPORT_TIMEOUT_SECS=1800
129 +DB_WORKER_POOL_SIZE=4
130 +EOF
131 +
132 +chmod 600 .env.production
133 +echo "ADMIN_PASSWORD = ${ADMIN_PWD}"
134 +echo "POSTGRES_PASSWORD = ${PG_PWD}"
135 +```
136 +
137 +> **Critique** : noter `ADMIN_PASSWORD` et `POSTGRES_PASSWORD` dans un gestionnaire de mots de passe.
138 +
139 +---
140 +
141 +## Phase 1 — Préparer la cible : déplacer sshd système sur :2022
142 +
143 +**À faire en gardant deux sessions SSH simultanées**.
144 +
145 +### 1.pre. Diagnostic de l'état initial
146 +
147 +#### 1.pre.1 — Trouver le port SSH ouvert depuis le poste de build
148 +
149 +```bash
150 +# Depuis votre poste (sans être connecté) :
151 +for p in 22 2022 2222 2200 22022; do
152 + timeout 3 bash -c "echo >/dev/tcp/<your-server-ip>/$p" 2>/dev/null \
153 + && echo "Port $p : OUVERT" \
154 + || echo "Port $p : fermé/filtré"
155 +done
156 +```
157 +
158 +#### 1.pre.2 — Se connecter sur le port détecté
159 +
160 +```bash
161 +# Cas le plus probable : sshd est sur :22 par défaut
162 +ssh <admin-user>@<your-server-ip>
163 +```
164 +
165 +#### 1.pre.3 — Une fois connecté, vérifier l'état sshd actuel
166 +
167 +```bash
168 +# Sur quel(s) port(s) sshd écoute-t-il ?
169 +sudo ss -tlnp | grep sshd
170 +
171 +# Contenu de la config
172 +sudo grep -riE '^[[:space:]]*Port[[:space:]]+[0-9]+' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/ 2>/dev/null
173 +
174 +# Statut du service
175 +sudo systemctl status ssh --no-pager
176 +```
177 +
178 +### 1a. Session 1 : modifier la config sshd
179 +
180 +```bash
181 +ssh <admin-user>@<your-server-ip>
182 +
183 +# Éditer /etc/ssh/sshd_config
184 +sudo tee /etc/ssh/sshd_config.d/99-gitrust.conf <<'EOF'
185 +Port 2022
186 +EOF
187 +
188 +# Vérifier la syntaxe
189 +sudo sshd -t
190 +
191 +# Si OK, reload (ne déconnecte pas la session courante)
192 +sudo systemctl reload ssh
193 +sudo ss -tlnp | grep -E ':22\b|:2022\b'
194 +# Attendu : sshd écoute sur 22 ET 2022
195 +```
196 +
197 +### 1b. Session 2 : valider le nouveau port
198 +
199 +Depuis le poste de build, **dans un autre terminal** :
200 +
201 +```bash
202 +ssh -p 2022 <admin-user>@<your-server-ip> 'echo "OK port 2022"'
203 +# Doit afficher : OK port 2022
204 +```
205 +
206 +### 1c. (Plus tard, après Phase 5) Fermer le port 22 du sshd système
207 +
208 +Une fois `nginx stream :22` actif et testé :
209 +
210 +```bash
211 +ssh -p 2022 <admin-user>@<your-server-ip>
212 +sudo sed -i 's/^Port 22$/# Port 22 (déplacé vers 2022, :22 utilisé par nginx stream)/' /etc/ssh/sshd_config
213 +sudo systemctl restart ssh
214 +```
215 +
216 +### 1d. Firewall
217 +
218 +```bash
219 +ssh -p 2022 <admin-user>@<your-server-ip> bash <<'EOF'
220 +sudo ufw allow 80/tcp comment 'HTTP ACME + redirect'
221 +sudo ufw allow 443/tcp comment 'HTTPS Gitrust'
222 +sudo ufw allow 22/tcp comment 'SSH Git via nginx stream'
223 +sudo ufw allow 2022/tcp comment 'SSH admin système'
224 +sudo ufw status numbered
225 +EOF
226 +```
227 +
228 +> Mettre à jour `~/.ssh/config` côté poste dev :
229 +> ```
230 +> Host gitrust-host
231 +> HostName <your-server-ip>
232 +> User <admin-user>
233 +> Port 2022
234 +> ```
235 +> Le reste du plan utilise `ssh gitrust-host`.
236 +
237 +---
238 +
239 +## Phase 2 — PostgreSQL (Docker, loopback)
240 +
241 +```bash
242 +scp -P 2022 database/docker-compose.yml <admin-user>@<your-server-ip>:/tmp/pg-compose.yml
243 +
244 +ssh gitrust-host bash <<EOF
245 +sudo mkdir -p /opt/gitrust/database
246 +sudo mv /tmp/pg-compose.yml /opt/gitrust/database/docker-compose.yml
247 +echo 'POSTGRES_PASSWORD=${PG_PWD}' | sudo tee /opt/gitrust/database/.env >/dev/null
248 +sudo chmod 600 /opt/gitrust/database/.env
249 +cd /opt/gitrust/database && sudo docker compose up -d
250 +sudo docker compose ps
251 +EOF
252 +```
253 +
254 +Remplacer `${PG_PWD}` par la valeur réelle. Vérifier que le port n'est pas exposé publiquement :
255 +
256 +```bash
257 +ssh gitrust-host 'sudo ss -tlnp | grep 5432'
258 +# Attendu : 127.0.0.1:5432 — PAS 0.0.0.0
259 +```
260 +
261 +---
262 +
263 +## Phase 3 — Build + déploiement gitrust via `deploy.sh`
264 +
265 +### 3a. Préparer `deployment/deploy.conf`
266 +
267 +```bash
268 +cp deployment/deploy.conf.example deployment/deploy.conf
269 +# Éditer DEPLOY_TARGET=gitrust-host, DEPLOY_REMOTE_PATH=/opt/gitrust, DEPLOY_FQDN_INITIAL=<your-domain>
270 +$EDITOR deployment/deploy.conf
271 +chmod 600 deployment/deploy.conf
272 +```
273 +
274 +### 3b. Validation du build seul (optionnel)
275 +
276 +```bash
277 +BUILD_ONLY=1 ./deployment/deploy.sh
278 +```
279 +
280 +### 3c. Déploiement
281 +
282 +```bash
283 +# Sans argument : utilise DEPLOY_TARGET du deploy.conf (gitrust-host via ~/.ssh/config, port 2022)
284 +./deployment/deploy.sh
285 +```
286 +
287 +Ce que fait `deploy.sh` : `cargo build --release`, `tailwindcss --minify`, adapte `gitrust.service` + `.env`, rsync, crée user `gitrust`, installe systemd, restart.
288 +
289 +À la fin : gitrust écoute sur `127.0.0.1:4000` (HTTP) et `127.0.0.1:2222` (SSH).
290 +
291 +```bash
292 +ssh gitrust-host 'sudo systemctl status gitrust --no-pager && sudo ss -tlnp | grep -E "4000|2222"'
293 +# Attendu : 127.0.0.1:4000 et 127.0.0.1:2222 (PAS 0.0.0.0)
294 +```
295 +
296 +---
297 +
298 +## Phase 4 — Nginx HTTP + Let's Encrypt
299 +
300 +### 4a. Installer nginx + certbot
301 +
302 +```bash
303 +ssh gitrust-host bash <<'EOF'
304 +sudo apt update
305 +sudo apt install -y nginx libnginx-mod-stream certbot python3-certbot-nginx
306 +sudo systemctl enable --now nginx
307 +EOF
308 +```
309 +
310 +### 4b. Déployer la conf Nginx
311 +
312 +```bash
313 +scp -P 2022 deployment/nginx-gitrust.conf <admin-user>@<your-server-ip>:/tmp/gitrust-nginx.conf
314 +
315 +ssh gitrust-host bash <<EOF
316 +sudo sed -i 's/gitrust.nuage.ebii/<your-domain>/g' /tmp/gitrust-nginx.conf
317 +sudo mv /tmp/gitrust-nginx.conf /etc/nginx/sites-available/gitrust
318 +sudo ln -sf /etc/nginx/sites-available/gitrust /etc/nginx/sites-enabled/gitrust
319 +sudo rm -f /etc/nginx/sites-enabled/default
320 +sudo mkdir -p /var/www/html/.well-known/acme-challenge
321 +sudo nginx -t && sudo systemctl reload nginx
322 +EOF
323 +```
324 +
325 +### 4c. Émettre le certificat Let's Encrypt
326 +
327 +```bash
328 +ssh gitrust-host 'sudo certbot --nginx \
329 + -d <your-domain> \
330 + --email <acme-email> \
331 + --agree-tos \
332 + --no-eff-email \
333 + --redirect'
334 +```
335 +
336 +### 4d. Vérifier le renouvellement automatique
337 +
338 +```bash
339 +ssh gitrust-host 'sudo systemctl list-timers | grep certbot'
340 +ssh gitrust-host 'sudo certbot renew --dry-run'
341 +```
342 +
343 +### 4e. Test HTTPS
344 +
345 +```bash
346 +curl -I https://<your-domain>/
347 +# Attendu : HTTP/2 200 (ou 302 vers /login)
348 +
349 +# Vérifier HSTS
350 +curl -sI https://<your-domain>/ | grep -i strict-transport
351 +```
352 +
353 +---
354 +
355 +## Phase 5 — Exposer SSH Git sur :22 via Nginx stream
356 +
357 +### 5a. Ajouter le bloc stream
358 +
359 +```bash
360 +ssh gitrust-host bash <<'EOF'
361 +sudo nginx -V 2>&1 | grep -o with-stream
362 +
363 +sudo tee -a /etc/nginx/nginx.conf <<'NGINX'
364 +
365 +# --- Gitrust SSH (proxy :22 -> :2222) -----------------------------------------
366 +stream {
367 + upstream gitrust_ssh {
368 + server 127.0.0.1:2222;
369 + }
370 + server {
371 + listen 22;
372 + listen [::]:22;
373 + proxy_pass gitrust_ssh;
374 + proxy_timeout 1h;
375 + proxy_connect_timeout 30s;
376 + error_log /var/log/nginx/gitrust-ssh.log;
377 + }
378 +}
379 +NGINX
380 +
381 +sudo nginx -t && sudo systemctl restart nginx
382 +sudo ss -tlnp | grep -E ':22\b|:2222\b'
383 +# Attendu : nginx :22, gitrust :2222 (loopback)
384 +EOF
385 +```
386 +
387 +### 5b. Désactiver sshd système sur :22 (Phase 1c)
388 +
389 +```bash
390 +ssh -p 2022 <admin-user>@<your-server-ip> bash <<'EOF'
391 +sudo sed -i 's/^Port 22$/# Port 22 déplacé/' /etc/ssh/sshd_config 2>/dev/null || true
392 +sudo systemctl restart ssh
393 +sudo ss -tlnp | grep -E ':22\b|:2022\b'
394 +# Attendu : nginx :22, sshd :2022 — plus de sshd:22
395 +EOF
396 +```
397 +
398 +### 5c. Test clone Git
399 +
400 +```bash
401 +# Dans l'UI gitrust : Settings -> SSH keys -> coller ~/.ssh/id_ed25519.pub
402 +# Créer un repo test admin/test-deploy via UI
403 +
404 +git clone git@<your-domain>:admin/test-deploy.git /tmp/test-deploy
405 +cd /tmp/test-deploy
406 +echo "# test" > README.md
407 +git -c user.email=<acme-email> -c user.name=admin add . && \
408 + git -c user.email=<acme-email> -c user.name=admin commit -m "test deploy" && \
409 + git push origin main
410 +```
411 +
412 +---
413 +
414 +## Phase 6 — Vérifications globales
415 +
416 +```bash
417 +# Service systemd
418 +ssh gitrust-host 'sudo systemctl status gitrust --no-pager'
419 +
420 +# Logs (recherche d'erreurs)
421 +ssh gitrust-host 'sudo journalctl -u gitrust -n 100 --no-pager | grep -iE "error|warn|fail"'
422 +
423 +# Ports d'écoute (vue d'ensemble)
424 +ssh gitrust-host 'sudo ss -tlnp'
425 +# Attendu :
426 +# :22 nginx
427 +# :80 nginx
428 +# :443 nginx
429 +# :2022 sshd système
430 +# 127.0.0.1:2222 gitrust
431 +# 127.0.0.1:4000 gitrust
432 +# 127.0.0.1:5432 docker-proxy
433 +
434 +# Renouvellement TLS automatique
435 +ssh gitrust-host 'sudo systemctl status certbot.timer --no-pager'
436 +
437 +# Test E2E
438 +curl -I https://<your-domain>/login
439 +ssh -T git@<your-domain> || true # Banner SSH russh attendu
440 +```
441 +
442 +---
443 +
444 +## Phase 7 — Durcissement : Fail2ban
445 +
446 +Voir `administration_manual/how-to/durcir-avec-fail2ban.md` pour la configuration complète.
447 +
448 +### 7a. Installation
449 +
450 +```bash
451 +ssh gitrust-host bash <<'EOF'
452 +sudo apt install -y fail2ban
453 +sudo systemctl enable --now fail2ban
454 +EOF
455 +```
456 +
457 +### 7b. Configuration minimale rapide
458 +
459 +```bash
460 +ssh gitrust-host sudo tee /etc/fail2ban/jail.local <<'EOF'
461 +[DEFAULT]
462 +backend = systemd
463 +bantime = 1h
464 +findtime = 10m
465 +maxretry = 5
466 +ignoreip = 127.0.0.1/8 ::1
467 +banaction = ufw
468 +banaction_allports = ufw
469 +
470 +[sshd]
471 +enabled = true
472 +port = 2022
473 +filter = sshd
474 +backend = %(sshd_backend)s
475 +logpath = %(sshd_log)s
476 +maxretry = 3
477 +
478 +[nginx-http-auth]
479 +enabled = true
480 +port = http,https
481 +filter = nginx-http-auth
482 +logpath = /var/log/nginx/gitrust.error.log
483 +
484 +[gitrust-login]
485 +enabled = true
486 +port = http,https
487 +filter = gitrust-login
488 +logpath = /var/log/nginx/gitrust.access.log
489 +maxretry = 5
490 +
491 +[gitrust-ssh]
492 +enabled = true
493 +port = 22,2222
494 +filter = gitrust-ssh
495 +backend = systemd
496 +journalmatch = _SYSTEMD_UNIT=gitrust.service
497 +maxretry = 5
498 +
499 +[recidive]
500 +enabled = true
501 +logpath = /var/log/fail2ban.log
502 +banaction = %(banaction_allports)s
503 +bantime = 1w
504 +findtime = 1d
505 +maxretry = 3
506 +EOF
507 +```
508 +
509 +Créer les filtres gitrust-login et gitrust-ssh, puis :
510 +
511 +```bash
512 +ssh gitrust-host 'sudo systemctl restart fail2ban && sudo fail2ban-client status'
513 +```
514 +
515 +---
516 +
517 +## Phase 8 — Mise à jour vers un nouveau domaine (quand DNS prêt)
518 +
519 +### 8a. Ajouter le SAN au certificat existant
520 +
521 +```bash
522 +ssh gitrust-host 'sudo certbot --nginx --expand \
523 + -d <your-domain> \
524 + -d <new-domain> \
525 + --email <acme-email> \
526 + --agree-tos --no-eff-email'
527 +```
528 +
529 +### 8b. Mettre à jour la conf Nginx
530 +
531 +```bash
532 +ssh gitrust-host bash <<EOF
533 +sudo sed -i 's/server_name <your-domain>;/server_name <your-domain> <new-domain>;/g' /etc/nginx/sites-available/gitrust
534 +sudo nginx -t && sudo systemctl reload nginx
535 +EOF
536 +```
537 +
538 +### 8c. Mettre à jour `.env.production` et redéployer
539 +
540 +```bash
541 +sed -i 's|SSH_PUBLIC_HOST=.*|SSH_PUBLIC_HOST=<new-domain>|' .env.production
542 +sed -i 's|EMAIL_BASE_URL=.*|EMAIL_BASE_URL=https://<new-domain>|' .env.production
543 +./deployment/deploy.sh gitrust-host
544 +```
545 +
546 +---
547 +
548 +## Phase 9 — Mises à jour ultérieures
549 +
550 +```bash
551 +git pull
552 +SKIP_ENV=1 SKIP_DB=1 ./deployment/deploy.sh
553 +```
554 +
555 +---
556 +
557 +## Dépannage
558 +
559 +| Symptôme | Diagnostic | Fix |
560 +|---|---|---|
561 +| Lockout SSH après reload sshd | — | Console physique / KVM IPMI |
562 +| Cert Let's Encrypt échoue (`Connection refused`) | `dig +short <your-domain>` ≠ IP publique | Corriger DNS, ou vérifier que :80 traverse bien le NAT |
563 +| Cert échoue (`unauthorized`) | Nginx `:80` ne répond pas sur `/.well-known/acme-challenge/` | `curl http://<your-domain>/.well-known/acme-challenge/test` doit ne pas rediriger en 301 |
564 +| Login boucle sur `/login` malgré HTTPS | `grep COOKIE_SECURE /opt/gitrust/.env` | Doit être `true` ; vérifier que Nginx forward bien `X-Forwarded-Proto https` |
565 +| Push SSH `Connection closed` | `journalctl -u gitrust \| grep ssh` | Vérifier que gitrust écoute bien `127.0.0.1:2222` et que nginx stream forward |
566 +| `nginx -t` : `unknown directive "stream"` | Module non chargé | `sudo apt install libnginx-mod-stream` puis `systemctl restart nginx` |
567 +| Mixed content HTTPS | Templates qui hardcodent `http://` | Vérifier `EMAIL_BASE_URL=https://...` et headers `X-Forwarded-Proto` |
568 +| Push gros repo timeout | Logs nginx `client intended to send too large body` | Augmenter `client_max_body_size 2G` (déjà fait pour `.git/`) |
569 +
570 +---
571 +
572 +## Récapitulatif des ports
573 +
574 +| Port | Process | Exposition | Rôle |
575 +|------|---------|------------|------|
576 +| 22 | nginx (stream) | Public | SSH Git → forward vers :2222 |
577 +| 80 | nginx | Public | ACME challenge + redirect HTTPS |
578 +| 443 | nginx | Public | HTTPS → forward vers :4000 |
579 +| 2022 | sshd système | Public | Admin SSH (à restreindre par firewall si possible) |
580 +| 2222 | gitrust | Loopback | Backend SSH russh |
581 +| 4000 | gitrust | Loopback | Backend HTTP axum |
582 +| 5432 | docker-proxy | Loopback | PostgreSQL |
A administration_manual/tutorials/index.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Tutoriels
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A book.toml
+24 -0
@@ -0,0 +1,24 @@
1 +[book]
2 +title = "Documentation gitrust"
3 +description = "Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust"
4 +authors = ["L'équipe gitrust"]
5 +language = "fr"
6 +# multilingual = true # à activer en même temps que [preprocessor.gettext] (voir plus bas)
7 +src = "src"
8 +
9 +[output.html]
10 +default-theme = "light"
11 +preferred-dark-theme = "navy"
12 +# Lien vers le dépôt de la documentation sur l'instance de démo
13 +# TODO : remplacer par l'URL définitive une fois le dépôt public créé
14 +edit-url-template = "https://demo.gitrust.eu/gitrust/girust_doc/edit/main/{path}"
15 +additional-js = ["theme/mermaid.min.js", "theme/mermaid-init.js"]
16 +
17 +[preprocessor.mermaid]
18 +command = "mdbook-mermaid"
19 +
20 +# Traduction gettext via mdbook-i18n-helpers
21 +# Désactivé tant que le binaire mdbook-xgettext n'est pas installé.
22 +# Pour activer : `cargo install mdbook-i18n-helpers` puis décommenter le bloc suivant.
23 +# [preprocessor.gettext]
24 +# after = ["links"]
A book/.nojekyll
+1 -0
@@ -0,0 +1 @@
1 +This file makes sure that Github Pages doesn't process mdBook's output.
A book/.omc/state/idle-notif-cooldown.json
+3 -0
@@ -0,0 +1,3 @@
1 +{
2 + "lastSentAt": "2026-04-17T14:23:23.237Z"
3 +}
3 < \ No newline at end of file
A book/404.html
+227 -0
@@ -0,0 +1,227 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Page not found - Documentation gitrust</title>
7 + <base href="/">
8 +
9 +
10 + <!-- Custom HTML head -->
11 +
12 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
13 + <meta name="viewport" content="width=device-width, initial-scale=1">
14 + <meta name="theme-color" content="#ffffff">
15 +
16 + <link rel="icon" href="favicon-de23e50b.svg">
17 + <link rel="shortcut icon" href="favicon-8114d1fc.png">
18 + <link rel="stylesheet" href="css/variables-8adf115d.css">
19 + <link rel="stylesheet" href="css/general-2459343d.css">
20 + <link rel="stylesheet" href="css/chrome-ae938929.css">
21 + <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
22 +
23 + <!-- Fonts -->
24 + <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
25 +
26 + <!-- Highlight.js Stylesheets -->
27 + <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
28 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
29 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
30 +
31 + <!-- Custom theme stylesheets -->
32 +
33 +
34 + <!-- Provide site root and default themes to javascript -->
35 + <script>
36 + const path_to_root = "";
37 + const default_light_theme = "light";
38 + const default_dark_theme = "navy";
39 + window.path_to_searchindex_js = "searchindex-2e4a517d.js";
40 + </script>
41 + <!-- Start loading toc.js asap -->
42 + <script src="toc-84dd2703.js"></script>
43 + </head>
44 + <body>
45 + <div id="mdbook-help-container">
46 + <div id="mdbook-help-popup">
47 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
48 + <div>
49 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
50 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
51 + <p>Press <kbd>?</kbd> to show this help</p>
52 + <p>Press <kbd>Esc</kbd> to hide this help</p>
53 + </div>
54 + </div>
55 + </div>
56 + <div id="mdbook-body-container">
57 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
58 + <script>
59 + try {
60 + let theme = localStorage.getItem('mdbook-theme');
61 + let sidebar = localStorage.getItem('mdbook-sidebar');
62 +
63 + if (theme.startsWith('"') && theme.endsWith('"')) {
64 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
65 + }
66 +
67 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
68 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
69 + }
70 + } catch (e) { }
71 + </script>
72 +
73 + <!-- Set the theme before any content is loaded, prevents flash -->
74 + <script>
75 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
76 + let theme;
77 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
78 + if (theme === null || theme === undefined) { theme = default_theme; }
79 + const html = document.documentElement;
80 + html.classList.remove('light')
81 + html.classList.add(theme);
82 + html.classList.add("js");
83 + </script>
84 +
85 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
86 +
87 + <!-- Hide / unhide sidebar before it is displayed -->
88 + <script>
89 + let sidebar = null;
90 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
91 + if (document.body.clientWidth >= 1080) {
92 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
93 + sidebar = sidebar || 'visible';
94 + } else {
95 + sidebar = 'hidden';
96 + sidebar_toggle.checked = false;
97 + }
98 + if (sidebar === 'visible') {
99 + sidebar_toggle.checked = true;
100 + } else {
101 + html.classList.remove('sidebar-visible');
102 + }
103 + </script>
104 +
105 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
106 + <!-- populated by js -->
107 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
108 + <noscript>
109 + <iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
110 + </noscript>
111 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
112 + <div class="sidebar-resize-indicator"></div>
113 + </div>
114 + </nav>
115 +
116 + <div id="mdbook-page-wrapper" class="page-wrapper">
117 +
118 + <div class="page">
119 + <div id="mdbook-menu-bar-hover-placeholder"></div>
120 + <div id="mdbook-menu-bar" class="menu-bar sticky">
121 + <div class="left-buttons">
122 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
123 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
124 + </label>
125 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
126 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
127 + </button>
128 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
134 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
135 + </ul>
136 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
137 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
138 + </button>
139 + </div>
140 +
141 + <h1 class="menu-title">Documentation gitrust</h1>
142 +
143 + <div class="right-buttons">
144 + <a href="print.html" title="Print this book" aria-label="Print this book">
145 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
146 + </a>
147 +
148 + </div>
149 + </div>
150 +
151 + <div id="mdbook-search-wrapper" class="hidden">
152 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
153 + <div class="search-wrapper">
154 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
155 + <div class="spinner-wrapper">
156 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
157 + </div>
158 + </div>
159 + </form>
160 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
161 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
162 + <ul id="mdbook-searchresults">
163 + </ul>
164 + </div>
165 + </div>
166 +
167 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
168 + <script>
169 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
170 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
171 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
172 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
173 + });
174 + </script>
175 +
176 + <div id="mdbook-content" class="content">
177 + <main>
178 + <h1 id="document-not-found-404"><a class="header" href="#document-not-found-404">Document not found (404)</a></h1>
179 +<p>This URL is invalid, sorry. Please use the navigation bar or search to continue.</p>
180 +
181 + </main>
182 +
183 + <nav class="nav-wrapper" aria-label="Page navigation">
184 + <!-- Mobile navigation buttons -->
185 +
186 +
187 + <div style="clear: both"></div>
188 + </nav>
189 + </div>
190 + </div>
191 +
192 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
193 +
194 + </nav>
195 +
196 + </div>
197 +
198 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
199 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
200 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
201 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
202 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
203 +
204 +
205 +
206 + <script>
207 + window.playground_copyable = true;
208 + </script>
209 +
210 +
211 + <script src="elasticlunr-ef4e11c1.min.js"></script>
212 + <script src="mark-09e88c2c.min.js"></script>
213 + <script src="searcher-c2a407aa.js"></script>
214 +
215 + <script src="clipboard-1626706a.min.js"></script>
216 + <script src="highlight-abc7f01d.js"></script>
217 + <script src="book-a0b12cfe.js"></script>
218 +
219 + <!-- Custom JS scripts -->
220 + <script src="theme/mermaid-eefea253.min.js"></script>
221 + <script src="theme/mermaid-init-ccf746f1.js"></script>
222 +
223 +
224 +
225 + </div>
226 + </body>
227 +</html>
A book/administration_manual/explanation/architecture-globale.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Architecture globale - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/explanation/architecture-globale.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="architecture-globale"><a class="header" href="#architecture-globale">Architecture globale</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/explanation/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/explanation/modele-deploiement.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/explanation/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/explanation/modele-deploiement.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/explanation/ci-dagger.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>CI Dagger : Easy Mode vs Power Mode - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/explanation/ci-dagger.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="ci-dagger--easy-mode-vs-power-mode"><a class="header" href="#ci-dagger--easy-mode-vs-power-mode">CI Dagger : Easy Mode vs Power Mode</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/explanation/modele-deploiement.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/explanation/strategie-sauvegarde.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/explanation/modele-deploiement.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/explanation/strategie-sauvegarde.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/explanation/index.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Explication - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/explanation/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="explication"><a class="header" href="#explication">Explication</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/reference/conformite-anssi-pa074.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/explanation/architecture-globale.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/reference/conformite-anssi-pa074.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/explanation/architecture-globale.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/explanation/modele-deploiement.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Modèle de déploiement - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/explanation/modele-deploiement.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="modèle-de-déploiement"><a class="header" href="#modèle-de-déploiement">Modèle de déploiement</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/explanation/architecture-globale.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/explanation/ci-dagger.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/explanation/architecture-globale.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/explanation/ci-dagger.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/explanation/strategie-sauvegarde.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Stratégie de sauvegarde - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/explanation/strategie-sauvegarde.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="stratégie-de-sauvegarde"><a class="header" href="#stratégie-de-sauvegarde">Stratégie de sauvegarde</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/explanation/ci-dagger.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/explanation/ci-dagger.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/how-to/auditer-instance.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Auditer une instance - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/auditer-instance.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="auditer-une-instance"><a class="header" href="#auditer-une-instance">Auditer une instance</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/how-to/gerer-utilisateurs-admin.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/reference/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/how-to/gerer-utilisateurs-admin.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/reference/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/how-to/configurer-ci-runner-remote.html
+479 -0
@@ -0,0 +1,479 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Configurer un runner CI distant - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/configurer-ci-runner-remote.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="configurer-le-runner-ci-distant"><a class="header" href="#configurer-le-runner-ci-distant">Configurer le runner CI distant</a></h1>
181 +<p>Guide d’usage du script qui provisionne une machine distante pour exécuter les pipelines CI/CD de gitrust via SSH + rsync + Dagger.</p>
182 +<hr>
183 +<h2 id="1-rôle-du-script"><a class="header" href="#1-rôle-du-script">1. Rôle du script</a></h2>
184 +<p><code>deployment/setup-remote-ci.sh</code> (disponible dans le dépôt source gitrust) prépare <strong>un serveur de build distant</strong> utilisé par le worker CI de gitrust. Il automatise 6 étapes :</p>
185 +<ol>
186 +<li>Vérifie la connectivité SSH vers le runner</li>
187 +<li>Installe <strong>Docker</strong> (<code>curl https://get.docker.com | sh</code>) s’il est absent</li>
188 +<li>Installe <strong>Dagger CLI</strong> (<code>curl https://dl.dagger.io/dagger/install.sh | sh</code>) s’il est absent</li>
189 +<li>Crée le répertoire de travail distant (<code>CI_REMOTE_PATH</code>)</li>
190 +<li>Synchronise le module <code>deployment/ci-engine/</code> (mode CI Easy) via <code>rsync -az --delete</code></li>
191 +<li>Smoke test : affiche <code>docker --version</code> et <code>dagger version</code></li>
192 +</ol>
193 +<p>Le script est <strong>idempotent</strong> : rejoue sans dommage, skip ce qui existe déjà.</p>
194 +<hr>
195 +<h2 id="2-quand-lutiliser"><a class="header" href="#2-quand-lutiliser">2. Quand l’utiliser</a></h2>
196 +<div class="table-wrapper">
197 +<table>
198 +<thead>
199 +<tr><th>Scénario</th><th>Besoin de <code>setup-remote-ci.sh</code> ?</th></tr>
200 +</thead>
201 +<tbody>
202 +<tr><td>Dev local, CI sur la même machine que gitrust (<code>CI_REMOTE_HOST=localhost</code>)</td><td><strong>Non</strong> — Docker et Dagger déjà installés localement, le <code>ci-engine/</code> est lu depuis <code>deployment/ci-engine/</code> directement</td></tr>
203 +<tr><td>Prod on-premise, un seul serveur (gitrust + CI colocalisés)</td><td><strong>Non</strong> — idem, un simple <code>curl get.docker.com | sh</code> suffit sur le serveur gitrust</td></tr>
204 +<tr><td>Prod avec <strong>runner CI dédié</strong> (machine séparée)</td><td><strong>OUI</strong> — c’est le cas cible de ce script</td></tr>
205 +<tr><td>Prod avec plusieurs instances gitrust partageant un runner</td><td><strong>OUI</strong> — le runner est provisionné une fois, chaque instance pointe dessus</td></tr>
206 +<tr><td>CI dans Kubernetes / Nomad / runner managé cloud</td><td><strong>Non</strong> — ce script est pensé pour une VM Debian/Ubuntu classique</td></tr>
207 +</tbody>
208 +</table>
209 +</div>
210 +<hr>
211 +<h2 id="3-architecture-cible"><a class="header" href="#3-architecture-cible">3. Architecture cible</a></h2>
212 +<pre><code>+---------------------+ SSH + rsync +-----------------------+
213 +| Gitrust (web+SSH) |---------------------------| CI Runner (distant) |
214 +| &lt;your-server-ip&gt; | CI_REMOTE_HOST/USER/KEY | &lt;ci-runner-ip&gt; |
215 +| | | |
216 +| Worker CI Tokio | push .gitrust-ci.yml | /opt/gitrust-ci/ |
217 +| (dans gitrust.bin) | + code source checkout | ├── ci-engine/ |
218 +| | | └── workspaces/ |
219 +| | dagger call ... | |
220 +| | | Docker + Dagger CLI |
221 ++---------------------+ +-----------------------+
222 +</code></pre>
223 +<p>Le worker CI de gitrust (tâche Tokio dans le binaire principal) ne fait <strong>pas tourner</strong> Docker localement — il délègue au runner via SSH. Cela permet d’isoler les workloads CPU/RAM gourmands (builds Rust, Node, Docker) du process web de gitrust.</p>
224 +<hr>
225 +<h2 id="4-pré-requis"><a class="header" href="#4-pré-requis">4. Pré-requis</a></h2>
226 +<h3 id="sur-la-machine-dexécution-là-où-on-lance-le-script"><a class="header" href="#sur-la-machine-dexécution-là-où-on-lance-le-script">Sur la machine d’exécution (là où on lance le script)</a></h3>
227 +<div class="table-wrapper">
228 +<table>
229 +<thead>
230 +<tr><th>Outil</th><th>Rôle</th></tr>
231 +</thead>
232 +<tbody>
233 +<tr><td><code>bash</code> ≥ 4</td><td>Interpréteur</td></tr>
234 +<tr><td><code>ssh</code>, <code>rsync</code></td><td>Transport et synchro</td></tr>
235 +<tr><td><code>ssh-agent</code> chargé <strong>ou</strong> <code>CI_REMOTE_SSH_KEY</code> défini</td><td>Auth SSH sans mot de passe interactif (<code>BatchMode=yes</code>)</td></tr>
236 +<tr><td>Fichier <code>.env</code> avec les variables CI_REMOTE_*</td><td>Config (voir section 5)</td></tr>
237 +</tbody>
238 +</table>
239 +</div>
240 +<h3 id="sur-le-runner-distant"><a class="header" href="#sur-le-runner-distant">Sur le runner distant</a></h3>
241 +<div class="table-wrapper">
242 +<table>
243 +<thead>
244 +<tr><th>Pré-requis</th><th>Pourquoi</th></tr>
245 +</thead>
246 +<tbody>
247 +<tr><td>OS Linux récent (Debian 12+, Ubuntu 22.04+)</td><td>Docker install script compatible</td></tr>
248 +<tr><td>User avec <code>sudo</code> passwordless <strong>ou</strong> droits <code>docker</code></td><td><code>get.docker.com</code> fait <code>sudo</code> en interne</td></tr>
249 +<tr><td>Clé SSH publique du user local dans <code>~/.ssh/authorized_keys</code></td><td>Auth SSH non-interactive</td></tr>
250 +<tr><td>Réseau sortant autorisé vers <code>get.docker.com</code> et <code>dl.dagger.io</code></td><td>Installation des binaires</td></tr>
251 +<tr><td>Au minimum ~5 Go libres dans <code>CI_REMOTE_PATH</code></td><td>Images Docker + workspaces</td></tr>
252 +</tbody>
253 +</table>
254 +</div>
255 +<hr>
256 +<h2 id="5-variables-denvironnement-attendues-le-env"><a class="header" href="#5-variables-denvironnement-attendues-le-env">5. Variables d’environnement attendues (le <code>.env</code>)</a></h2>
257 +<p>Le script <strong>source un fichier <code>.env</code></strong> dont le chemin est passé en argument, ou par défaut <code>../.env</code> (relatif au script, donc <code>&lt;racine_projet&gt;/.env</code>).</p>
258 +<h3 id="tableau-des-variables"><a class="header" href="#tableau-des-variables">Tableau des variables</a></h3>
259 +<div class="table-wrapper">
260 +<table>
261 +<thead>
262 +<tr><th>Variable</th><th>Obligatoire</th><th>Défaut</th><th>Description</th></tr>
263 +</thead>
264 +<tbody>
265 +<tr><td><code>CI_REMOTE_HOST</code></td><td><strong>OUI</strong></td><td>—</td><td>Hostname ou IP du runner (ex: <code>ci-runner.internal</code>)</td></tr>
266 +<tr><td><code>CI_REMOTE_USER</code></td><td>non</td><td><code>$(whoami)</code> (user courant)</td><td>Compte SSH sur le runner</td></tr>
267 +<tr><td><code>CI_REMOTE_SSH_PORT</code></td><td>non</td><td><code>22</code></td><td>Port SSH du runner</td></tr>
268 +<tr><td><code>CI_REMOTE_PATH</code></td><td>non</td><td><code>/opt/gitrust-ci</code></td><td>Répertoire de travail distant (créé par le script)</td></tr>
269 +<tr><td><code>CI_REMOTE_SSH_KEY</code></td><td>non</td><td>— (ssh-agent)</td><td>Chemin d’une clé privée SSH spécifique</td></tr>
270 +</tbody>
271 +</table>
272 +</div>
273 +<p>Ces variables sont les <strong>mêmes</strong> que celles lues par gitrust au runtime. Centraliser dans <code>.env</code> évite les divergences entre le provisionnement et le runtime.</p>
274 +<h3 id="exemple-minimal-de-env-runner-dédié"><a class="header" href="#exemple-minimal-de-env-runner-dédié">Exemple minimal de <code>.env</code> (runner dédié)</a></h3>
275 +<pre><code class="language-bash"># --- CI runner distant ---
276 +CI_REMOTE_HOST=&lt;ci-runner-ip&gt;
277 +CI_REMOTE_USER=ci-runner
278 +CI_REMOTE_SSH_PORT=22
279 +CI_REMOTE_PATH=/opt/gitrust-ci
280 +CI_REMOTE_SSH_KEY=/home/gitrust/.ssh/ci_runner_ed25519
281 +</code></pre>
282 +<h3 id="exemple-env-complet-coexistant-avec-config-gitrust"><a class="header" href="#exemple-env-complet-coexistant-avec-config-gitrust">Exemple <code>.env</code> complet coexistant avec config gitrust</a></h3>
283 +<pre><code class="language-bash">DATABASE_URL=postgres://...
284 +JWT_SECRET=...
285 +# ... (voir .env.example pour le reste)
286 +
287 +# --- CI/CD (lu par gitrust ET par setup-remote-ci.sh) ---
288 +CI_ENABLED=true
289 +CI_MAX_CONCURRENT=4
290 +CI_REMOTE_HOST=ci-runner.internal
291 +CI_REMOTE_USER=ci-runner
292 +CI_REMOTE_PATH=/opt/gitrust-ci
293 +CI_REMOTE_SSH_KEY=/opt/gitrust/data/ci_runner_key
294 +</code></pre>
295 +<h3 id="cas--runner-local--pas-besoin-du-script"><a class="header" href="#cas--runner-local--pas-besoin-du-script">Cas « runner local » (pas besoin du script)</a></h3>
296 +<pre><code class="language-bash">CI_REMOTE_HOST=localhost
297 +# Les autres CI_REMOTE_* sont ignorés
298 +</code></pre>
299 +<p>Dans ce cas, installer Docker et Dagger directement sur la machine gitrust, copier <code>deployment/ci-engine/</code> vers <code>CI_ENGINE_PATH</code> (défaut <code>/opt/gitrust/ci-engine</code>) et passer à la suite. <strong>Ne pas exécuter <code>setup-remote-ci.sh</code></strong> avec <code>CI_REMOTE_HOST=localhost</code>.</p>
300 +<hr>
301 +<h2 id="6-usage"><a class="header" href="#6-usage">6. Usage</a></h2>
302 +<h3 id="depuis-la-racine-du-projet-par-défaut"><a class="header" href="#depuis-la-racine-du-projet-par-défaut">Depuis la racine du projet (par défaut)</a></h3>
303 +<pre><code class="language-bash">cd /chemin/vers/gitrust
304 +
305 +# .env a la racine (défaut) :
306 +./deployment/setup-remote-ci.sh
307 +</code></pre>
308 +<h3 id="avec-un-env-explicite"><a class="header" href="#avec-un-env-explicite">Avec un <code>.env</code> explicite</a></h3>
309 +<pre><code class="language-bash">./deployment/setup-remote-ci.sh /chemin/vers/mon.env
310 +# Utile si vous avez .env.production, .env.staging, etc.
311 +./deployment/setup-remote-ci.sh .env.production
312 +</code></pre>
313 +<h3 id="sortie-attendue"><a class="header" href="#sortie-attendue">Sortie attendue</a></h3>
314 +<pre><code>==&gt; Configuration :
315 + Serveur : ci-runner@&lt;ci-runner-ip&gt;
316 + Port SSH : 22
317 + Chemin : /opt/gitrust-ci
318 +
319 +==&gt; [1/6] Vérification de la connectivité SSH...
320 +SSH OK
321 + OK
322 +==&gt; [2/6] Vérification de Docker...
323 + Docker déjà installé
324 +==&gt; [3/6] Vérification de Dagger CLI...
325 + Installation de Dagger CLI...
326 + Dagger installé
327 +==&gt; [4/6] Création du répertoire distant...
328 + /opt/gitrust-ci créé
329 +==&gt; [5/6] Synchronisation du ci-engine...
330 +sending incremental file list
331 +ci-engine/
332 +ci-engine/profiles/
333 +...
334 + ci-engine synchronisé vers /opt/gitrust-ci/ci-engine/
335 +==&gt; [6/6] Smoke test...
336 + Versions distantes :
337 +Docker version 28.0.1, build abcd123
338 +dagger v0.19.2 (linux/amd64)
339 +
340 +==&gt; Setup terminé. Le serveur ci-runner@&lt;ci-runner-ip&gt; est prêt pour l'exécution CI.
341 + Pensez à configurer CI_EXECUTION_MODE=remote dans votre .env
342 +</code></pre>
343 +<hr>
344 +<h2 id="7-ce-qui-se-retrouve-sur-le-runner"><a class="header" href="#7-ce-qui-se-retrouve-sur-le-runner">7. Ce qui se retrouve sur le runner</a></h2>
345 +<p>Après exécution réussie :</p>
346 +<pre><code>/opt/gitrust-ci/ &lt;- CI_REMOTE_PATH
347 +└── ci-engine/ &lt;- synchronisé depuis deployment/ci-engine/
348 + ├── README.md
349 + └── profiles/ &lt;- templates par stack (Python, Node, Rust, ...)
350 +</code></pre>
351 +<p>Plus, installés globalement :</p>
352 +<ul>
353 +<li><code>/usr/bin/docker</code> (ou équivalent) + socket <code>/var/run/docker.sock</code></li>
354 +<li><code>/usr/local/bin/dagger</code></li>
355 +</ul>
356 +<p>Les <strong>workspaces de pipelines</strong> (checkouts temporaires) sont créés par le worker CI de gitrust au moment de l’exécution sous <code>CI_WORKSPACE_PATH</code> (défaut <code>/tmp/gitrust-ci</code>) — <strong>pas par ce script</strong>.</p>
357 +<hr>
358 +<h2 id="8-vérifications-post-setup"><a class="header" href="#8-vérifications-post-setup">8. Vérifications post-setup</a></h2>
359 +<h3 id="depuis-la-machine-gitrust"><a class="header" href="#depuis-la-machine-gitrust">Depuis la machine gitrust</a></h3>
360 +<pre><code class="language-bash"># Source le .env
361 +set -a; source .env.production; set +a
362 +
363 +# 1. SSH direct (doit passer sans prompt)
364 +ssh -p ${CI_REMOTE_SSH_PORT:-22} \
365 + ${CI_REMOTE_SSH_KEY:+-i $CI_REMOTE_SSH_KEY} \
366 + $CI_REMOTE_USER@$CI_REMOTE_HOST 'docker info &amp;&amp; dagger version'
367 +
368 +# 2. Rsync round-trip (lecture/écriture sur CI_REMOTE_PATH)
369 +echo "test" | ssh $CI_REMOTE_USER@$CI_REMOTE_HOST \
370 + "cat &gt; $CI_REMOTE_PATH/.gitrust-test &amp;&amp; cat $CI_REMOTE_PATH/.gitrust-test &amp;&amp; rm $CI_REMOTE_PATH/.gitrust-test"
371 +# Attendu : "test"
372 +</code></pre>
373 +<h3 id="pipeline-de-test-via-gitrust"><a class="header" href="#pipeline-de-test-via-gitrust">Pipeline de test via gitrust</a></h3>
374 +<p>Pousser un dépôt avec un <code>.gitrust-ci.yml</code> minimal :</p>
375 +<pre><code class="language-yaml"># .gitrust-ci.yml
376 +version: 1
377 +pipeline:
378 + - name: smoke
379 + image: alpine:3
380 + run: echo "CI runner OK"
381 +</code></pre>
382 +<p>Puis dans l’UI gitrust : onglet <code>Pipelines</code> → la pipeline doit passer au statut <code>success</code>.</p>
383 +<hr>
384 +<h2 id="9-mise-à-jour-après-modification-du-ci-engine"><a class="header" href="#9-mise-à-jour-après-modification-du-ci-engine">9. Mise à jour après modification du <code>ci-engine/</code></a></h2>
385 +<p>Le <code>ci-engine/</code> synchronisé n’est pas « live-linké » : rejouer le script après modification côté source.</p>
386 +<pre><code class="language-bash"># Modifier deployment/ci-engine/profiles/*.py ou similaire
387 +./deployment/setup-remote-ci.sh
388 +# Les étapes 2-3 sont skip (déjà installés), seule l'étape 5 refait le rsync
389 +</code></pre>
390 +<p><code>rsync -az --delete</code> <strong>supprime</strong> les fichiers côté runner qui n’existent plus localement — garantit la cohérence.</p>
391 +<hr>
392 +<h2 id="10-dépannage"><a class="header" href="#10-dépannage">10. Dépannage</a></h2>
393 +<div class="table-wrapper">
394 +<table>
395 +<thead>
396 +<tr><th>Symptôme</th><th>Cause probable</th><th>Fix</th></tr>
397 +</thead>
398 +<tbody>
399 +<tr><td><code>ERREUR: fichier .env introuvable</code></td><td><code>.env</code> absent ou chemin incorrect</td><td><code>cp .env.example .env &amp;&amp; $EDITOR .env</code> ou passer le chemin : <code>./setup-remote-ci.sh /path/to/.env</code></td></tr>
400 +<tr><td><code>ERREUR: CI_REMOTE_HOST non défini</code></td><td>Variable commentée ou absente</td><td>Décommenter <code>CI_REMOTE_HOST=...</code> dans le <code>.env</code></td></tr>
401 +<tr><td><code>ERREUR: impossible de se connecter</code></td><td>SSH bloqué, mauvais user, clé non autorisée</td><td>Tester manuellement : <code>ssh -v -p X user@host</code> ; vérifier <code>~/.ssh/authorized_keys</code> sur le runner</td></tr>
402 +<tr><td><code>Permission denied (publickey)</code></td><td><code>BatchMode=yes</code> interdit les prompts, clé non chargée</td><td><code>ssh-add ~/.ssh/ci_runner_ed25519</code> ou définir <code>CI_REMOTE_SSH_KEY=/path/to/key</code></td></tr>
403 +<tr><td><code>sudo: a password is required</code> pendant l’install Docker</td><td>User sans <code>NOPASSWD</code> sudo</td><td>Ajouter le user au <code>sudoers</code> : <code>ci-runner ALL=(ALL) NOPASSWD:ALL</code> (runner uniquement)</td></tr>
404 +<tr><td><code>curl: (7) Failed to connect to get.docker.com</code></td><td>Réseau sortant du runner bloqué</td><td>Whitelist <code>get.docker.com</code> et <code>dl.dagger.io</code>, ou pré-installer Docker + Dagger manuellement</td></tr>
405 +<tr><td><code>ATTENTION: ... ci-engine introuvable</code></td><td>Lancé hors du repo gitrust</td><td><code>cd</code> dans la racine du projet avant de lancer</td></tr>
406 +<tr><td>Pipeline reste <code>queued</code> indéfiniment</td><td>Worker CI ne trouve pas le runner</td><td>Vérifier <code>CI_EXECUTION_MODE=remote</code> dans <code>.env</code> gitrust + logs : <code>journalctl -u gitrust | grep -i 'ci|dagger'</code></td></tr>
407 +<tr><td><code>dagger: command not found</code> au smoke test</td><td><code>$PATH</code> du user SSH ne contient pas <code>/usr/local/bin</code></td><td><code>echo 'export PATH=$PATH:/usr/local/bin' &gt;&gt; ~/.bashrc</code> sur le runner, ou <code>CI_DAGGER_BIN=/usr/local/bin/dagger</code> côté gitrust</td></tr>
408 +</tbody>
409 +</table>
410 +</div>
411 +<hr>
412 +<h2 id="11-sécurité"><a class="header" href="#11-sécurité">11. Sécurité</a></h2>
413 +<ul>
414 +<li>Le runner CI exécute du <strong>code arbitraire</strong> venant des dépôts hébergés. <strong>Ne jamais</strong> le colocaliser avec des secrets sensibles (PG prod, clés de prod).</li>
415 +<li>Isoler réseau : bloquer l’accès sortant du runner vers le LAN privé (seul l’accès Internet pour <code>docker pull</code> est nécessaire).</li>
416 +<li>Limiter <code>sudo NOPASSWD</code> au strict minimum sur le runner (idéalement : juste pour les commandes <code>docker</code> et <code>apt</code>).</li>
417 +<li>Rotation régulière de la clé SSH <code>CI_REMOTE_SSH_KEY</code>. La révoquer dans <code>~/.ssh/authorized_keys</code> côté runner en cas de suspicion.</li>
418 +<li>Le runner ne doit <strong>pas</strong> pouvoir se connecter en SSH à la machine gitrust (unidirectionnel).</li>
419 +</ul>
420 +
421 + </main>
422 +
423 + <nav class="nav-wrapper" aria-label="Page navigation">
424 + <!-- Mobile navigation buttons -->
425 + <a rel="prev" href="../../administration_manual/how-to/configurer-oauth.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
426 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
427 + </a>
428 +
429 + <a rel="next prefetch" href="../../administration_manual/how-to/integrer-dependency-track.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
430 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
431 + </a>
432 +
433 + <div style="clear: both"></div>
434 + </nav>
435 + </div>
436 + </div>
437 +
438 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
439 + <a rel="prev" href="../../administration_manual/how-to/configurer-oauth.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
440 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
441 + </a>
442 +
443 + <a rel="next prefetch" href="../../administration_manual/how-to/integrer-dependency-track.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
444 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
445 + </a>
446 + </nav>
447 +
448 + </div>
449 +
450 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
451 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
452 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
453 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
454 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
455 +
456 +
457 +
458 + <script>
459 + window.playground_copyable = true;
460 + </script>
461 +
462 +
463 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
464 + <script src="../../mark-09e88c2c.min.js"></script>
465 + <script src="../../searcher-c2a407aa.js"></script>
466 +
467 + <script src="../../clipboard-1626706a.min.js"></script>
468 + <script src="../../highlight-abc7f01d.js"></script>
469 + <script src="../../book-a0b12cfe.js"></script>
470 +
471 + <!-- Custom JS scripts -->
472 + <script src="../../theme/mermaid-eefea253.min.js"></script>
473 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
474 +
475 +
476 +
477 + </div>
478 + </body>
479 +</html>
A book/administration_manual/how-to/configurer-oauth.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Configurer OAuth - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/configurer-oauth.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="configurer-oauth"><a class="header" href="#configurer-oauth">Configurer OAuth</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/how-to/configurer-smtp.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/how-to/configurer-ci-runner-remote.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/how-to/configurer-smtp.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/how-to/configurer-ci-runner-remote.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/how-to/configurer-smtp.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Configurer SMTP - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/configurer-smtp.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="configurer-smtp"><a class="header" href="#configurer-smtp">Configurer SMTP</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/how-to/mettre-a-jour.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/how-to/configurer-oauth.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/how-to/mettre-a-jour.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/how-to/configurer-oauth.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/how-to/depanner-ci.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Dépanner la CI - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/depanner-ci.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="dépanner-la-ci"><a class="header" href="#dépanner-la-ci">Dépanner la CI</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/how-to/depanner-ssh.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/how-to/gerer-utilisateurs-admin.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/how-to/depanner-ssh.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/how-to/gerer-utilisateurs-admin.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/how-to/depanner-ssh.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Dépanner SSH - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/depanner-ssh.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="dépanner-ssh"><a class="header" href="#dépanner-ssh">Dépanner SSH</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/how-to/forcer-2fa-globalement.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/how-to/depanner-ci.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/how-to/forcer-2fa-globalement.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/how-to/depanner-ci.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/how-to/durcir-avec-fail2ban.html
+726 -0
@@ -0,0 +1,726 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Durcir avec Fail2ban - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/durcir-avec-fail2ban.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="durcir-linstance-avec-fail2ban"><a class="header" href="#durcir-linstance-avec-fail2ban">Durcir l’instance avec Fail2ban</a></h1>
181 +<p>Configuration complète pour protéger un déploiement gitrust exposant :</p>
182 +<ul>
183 +<li><strong>sshd système</strong> sur <code>:2022</code> (admin)</li>
184 +<li><strong>Nginx</strong> en reverse proxy HTTPS <code>:443</code> + redirect <code>:80</code> + <code>stream :22 → :2222</code></li>
185 +<li><strong>Gitrust</strong> (web <code>127.0.0.1:4000</code>, SSH russh <code>127.0.0.1:2222</code>)</li>
186 +<li><strong>Dagger</strong> CI runner (local, pas d’exposition réseau directe)</li>
187 +<li><strong>Dependency-Track</strong> API <code>:8081</code> + UI <code>:8080</code> (si exposés)</li>
188 +<li><strong>PostgreSQL</strong> <code>127.0.0.1:5432</code> (défensif au cas où le bind fuit)</li>
189 +</ul>
190 +<hr>
191 +<h2 id="1-installation"><a class="header" href="#1-installation">1. Installation</a></h2>
192 +<pre><code class="language-bash">sudo apt install -y fail2ban
193 +sudo systemctl enable --now fail2ban
194 +fail2ban-client --version
195 +</code></pre>
196 +<p>Vérifier que <code>ufw</code> est actif (fournit <code>banaction = ufw</code> dans la config) :</p>
197 +<pre><code class="language-bash">sudo ufw status
198 +</code></pre>
199 +<hr>
200 +<h2 id="2-fichier-principal-etcfail2banjaillocal"><a class="header" href="#2-fichier-principal-etcfail2banjaillocal">2. Fichier principal <code>/etc/fail2ban/jail.local</code></a></h2>
201 +<p>À placer via :</p>
202 +<pre><code class="language-bash">sudo tee /etc/fail2ban/jail.local &lt;&lt;'EOF'
203 +[Le contenu ci-dessous]
204 +EOF
205 +</code></pre>
206 +<pre><code class="language-ini"># =============================================================================
207 +# Défauts globaux
208 +# =============================================================================
209 +[DEFAULT]
210 +backend = systemd
211 +bantime = 1h
212 +findtime = 10m
213 +maxretry = 5
214 +
215 +# LAN privé et loopback jamais bannis
216 +ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
217 +
218 +# UFW
219 +banaction = ufw
220 +banaction_allports = ufw
221 +
222 +# Notifications (optionnel — nécessite un relay SMTP local)
223 +# destemail = contact@gitrust.eu
224 +# sender = fail2ban@votre-serveur.example.com
225 +# action = %(action_mwl)s
226 +
227 +# =============================================================================
228 +# 1) sshd admin système — port 2022
229 +# =============================================================================
230 +[sshd]
231 +enabled = true
232 +port = 2022
233 +filter = sshd
234 +backend = %(sshd_backend)s
235 +logpath = %(sshd_log)s
236 +maxretry = 3
237 +findtime = 10m
238 +bantime = 1h
239 +
240 +# =============================================================================
241 +# 2) Nginx — 401/403 auth basic (si un jour activé sur /admin, /metrics, etc.)
242 +# =============================================================================
243 +[nginx-http-auth]
244 +enabled = true
245 +port = http,https
246 +filter = nginx-http-auth
247 +logpath = /var/log/nginx/gitrust.error.log
248 +maxretry = 5
249 +
250 +# =============================================================================
251 +# 3) Nginx — scanners d'URL (wp-admin, .env, phpmyadmin, config.php, etc.)
252 +# =============================================================================
253 +[nginx-botsearch]
254 +enabled = true
255 +port = http,https
256 +filter = nginx-botsearch
257 +logpath = /var/log/nginx/gitrust.access.log
258 +maxretry = 2
259 +findtime = 10m
260 +bantime = 24h
261 +
262 +# =============================================================================
263 +# 4) Nginx — bad user-agents (scanners agressifs, masscan, nikto, etc.)
264 +# =============================================================================
265 +[nginx-badbots]
266 +enabled = true
267 +port = http,https
268 +filter = nginx-badbots
269 +logpath = /var/log/nginx/gitrust.access.log
270 +maxretry = 2
271 +bantime = 24h
272 +
273 +# =============================================================================
274 +# 5) Nginx — dépassement limit_req (voir section 4 — zones HTTPS)
275 +# =============================================================================
276 +[nginx-limit-req]
277 +enabled = true
278 +port = http,https
279 +filter = nginx-limit-req
280 +logpath = /var/log/nginx/gitrust.error.log
281 +maxretry = 10
282 +findtime = 5m
283 +bantime = 1h
284 +
285 +# =============================================================================
286 +# 6) Gitrust — brute force login (formulaire + API JWT)
287 +# =============================================================================
288 +[gitrust-login]
289 +enabled = true
290 +port = http,https
291 +filter = gitrust-login
292 +logpath = /var/log/nginx/gitrust.access.log
293 +maxretry = 5
294 +findtime = 10m
295 +bantime = 1h
296 +
297 +# =============================================================================
298 +# 7) Gitrust — abus API (tokens personnels leaked, scrapers)
299 +# =============================================================================
300 +[gitrust-api-abuse]
301 +enabled = true
302 +port = http,https
303 +filter = gitrust-api-abuse
304 +logpath = /var/log/nginx/gitrust.access.log
305 +maxretry = 30
306 +findtime = 1m
307 +bantime = 2h
308 +
309 +# =============================================================================
310 +# 8) Gitrust SSH (russh) — brute force clé publique
311 +# =============================================================================
312 +[gitrust-ssh]
313 +enabled = true
314 +port = 22,2222
315 +filter = gitrust-ssh
316 +backend = systemd
317 +journalmatch = _SYSTEMD_UNIT=gitrust.service
318 +maxretry = 5
319 +findtime = 10m
320 +bantime = 1h
321 +
322 +# =============================================================================
323 +# 9) Gitrust import worker — tokens invalides sur clone de dépôts externes
324 +# =============================================================================
325 +[gitrust-import]
326 +enabled = true
327 +port = http,https
328 +filter = gitrust-import
329 +backend = systemd
330 +journalmatch = _SYSTEMD_UNIT=gitrust.service
331 +maxretry = 3
332 +findtime = 5m
333 +bantime = 30m
334 +
335 +# =============================================================================
336 +# 10) Dependency-Track UI — brute force login (port 8080)
337 +# =============================================================================
338 +# Activer UNIQUEMENT si DTrack est exposé publiquement.
339 +# Si DTrack est sur réseau privé/loopback, laisser enabled=false.
340 +[dtrack-login]
341 +enabled = false
342 +port = 8080,http,https
343 +filter = dtrack-login
344 +logpath = /var/log/nginx/dtrack.access.log
345 +maxretry = 5
346 +findtime = 10m
347 +bantime = 2h
348 +
349 +# =============================================================================
350 +# 11) Dependency-Track API — abus clé API (port 8081)
351 +# =============================================================================
352 +[dtrack-api]
353 +enabled = false
354 +port = 8081,http,https
355 +filter = dtrack-api
356 +logpath = /var/log/nginx/dtrack.access.log
357 +maxretry = 10
358 +findtime = 5m
359 +bantime = 1h
360 +
361 +# =============================================================================
362 +# 12) PostgreSQL — tentatives de connexion invalides (défensif)
363 +# =============================================================================
364 +# PG doit binder 127.0.0.1 uniquement. Ce jail protège si la config fuit.
365 +[postgresql]
366 +enabled = true
367 +port = 5432
368 +filter = postgresql
369 +backend = systemd
370 +journalmatch = _SYSTEMD_UNIT=postgresql.service + _SYSTEMD_UNIT=docker.service
371 +maxretry = 5
372 +findtime = 10m
373 +bantime = 1h
374 +
375 +# =============================================================================
376 +# 13) Récidive — ban long pour IPs bannies 3x en 24h, tous jails confondus
377 +# =============================================================================
378 +[recidive]
379 +enabled = true
380 +logpath = /var/log/fail2ban.log
381 +banaction = %(banaction_allports)s
382 +bantime = 1w
383 +findtime = 1d
384 +maxretry = 3
385 +</code></pre>
386 +<hr>
387 +<h2 id="3-filtres-personnalisés"><a class="header" href="#3-filtres-personnalisés">3. Filtres personnalisés</a></h2>
388 +<p>À placer dans <code>/etc/fail2ban/filter.d/</code> (un fichier par jail custom).</p>
389 +<h3 id="31-gitrust-loginconf"><a class="header" href="#31-gitrust-loginconf">3.1 <code>gitrust-login.conf</code></a></h3>
390 +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/gitrust-login.conf &lt;&lt;'EOF'
391 +[Definition]
392 +# POST sur /login ou endpoints JWT avec code 4xx (401/403/422/429)
393 +failregex = ^&lt;HOST&gt; .* "POST /(login|api/v1/auth/login|api/v1/auth/refresh|api/v1/auth/2fa)[^"]*" (401|403|422|429) .*$
394 +ignoreregex =
395 +EOF
396 +</code></pre>
397 +<h3 id="32-gitrust-api-abuseconf"><a class="header" href="#32-gitrust-api-abuseconf">3.2 <code>gitrust-api-abuse.conf</code></a></h3>
398 +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/gitrust-api-abuse.conf &lt;&lt;'EOF'
399 +[Definition]
400 +# Abus API : 401/403 répétés sur /api/v1/* (hors auth déjà couvert par gitrust-login)
401 +failregex = ^&lt;HOST&gt; .* "(GET|POST|PUT|DELETE|PATCH) /api/v1/(?!auth/)[^"]*" (401|403) .*$
402 +ignoreregex =
403 +EOF
404 +</code></pre>
405 +<h3 id="33-gitrust-sshconf"><a class="header" href="#33-gitrust-sshconf">3.3 <code>gitrust-ssh.conf</code></a></h3>
406 +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/gitrust-ssh.conf &lt;&lt;'EOF'
407 +[Definition]
408 +# russh / gitrust-ssh : échecs d'authentification
409 +# Regex à raffiner après observation des logs réels via :
410 +# sudo fail2ban-regex &lt;(journalctl -u gitrust --no-pager -n 2000) \
411 +# /etc/fail2ban/filter.d/gitrust-ssh.conf
412 +failregex = ^.*ssh.*auth(entication)? (failed|failure).*from &lt;HOST&gt;.*$
413 + ^.*[Rr]ejected.*(public[_ ]?key|password).*from &lt;HOST&gt;.*$
414 + ^.*no matching (ssh|public) key.*from &lt;HOST&gt;.*$
415 + ^.*unknown user.*from &lt;HOST&gt;.*$
416 + ^.*gitrust.*auth.*refused.*&lt;HOST&gt;.*$
417 +ignoreregex =
418 +EOF
419 +</code></pre>
420 +<h3 id="34-gitrust-importconf"><a class="header" href="#34-gitrust-importconf">3.4 <code>gitrust-import.conf</code></a></h3>
421 +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/gitrust-import.conf &lt;&lt;'EOF'
422 +[Definition]
423 +# Import worker : tokens OAuth/GitHub invalides sur clone de dépôts externes
424 +failregex = ^.*import.*authentication failed.*from &lt;HOST&gt;.*$
425 + ^.*import.*invalid (token|credentials).*from &lt;HOST&gt;.*$
426 + ^.*import.*clone failed.*401.*from &lt;HOST&gt;.*$
427 +ignoreregex =
428 +EOF
429 +</code></pre>
430 +<h3 id="35-dtrack-loginconf-si-dtrack-exposé"><a class="header" href="#35-dtrack-loginconf-si-dtrack-exposé">3.5 <code>dtrack-login.conf</code> (si DTrack exposé)</a></h3>
431 +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/dtrack-login.conf &lt;&lt;'EOF'
432 +[Definition]
433 +# Dependency-Track : brute force du POST /api/v1/user/login
434 +failregex = ^&lt;HOST&gt; .* "POST /api/v1/user/login[^"]*" (401|403) .*$
435 + ^&lt;HOST&gt; .* "POST /api/v1/user/forceChangePassword[^"]*" (401|403) .*$
436 +ignoreregex =
437 +EOF
438 +</code></pre>
439 +<h3 id="36-dtrack-apiconf-si-dtrack-exposé"><a class="header" href="#36-dtrack-apiconf-si-dtrack-exposé">3.6 <code>dtrack-api.conf</code> (si DTrack exposé)</a></h3>
440 +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/dtrack-api.conf &lt;&lt;'EOF'
441 +[Definition]
442 +# Dependency-Track API : abus de clé API ou requêtes non authentifiées
443 +failregex = ^&lt;HOST&gt; .* "[^"]+ /api/v1/[^"]*" 401 .*$
444 + ^&lt;HOST&gt; .* "[^"]+ /api/v1/[^"]*" 403 .*$
445 +ignoreregex =
446 +EOF
447 +</code></pre>
448 +<h3 id="37-postgresqlconf-créer-si-absent"><a class="header" href="#37-postgresqlconf-créer-si-absent">3.7 <code>postgresql.conf</code> (créer si absent)</a></h3>
449 +<pre><code class="language-bash">if [ ! -f /etc/fail2ban/filter.d/postgresql.conf ]; then
450 +sudo tee /etc/fail2ban/filter.d/postgresql.conf &lt;&lt;'EOF'
451 +[Definition]
452 +failregex = ^.*authentication failed for user.*host=&lt;HOST&gt;.*$
453 + ^.*FATAL:.*password authentication failed.*&lt;HOST&gt;.*$
454 + ^.*no pg_hba\.conf entry for host "&lt;HOST&gt;".*$
455 +ignoreregex =
456 +EOF
457 +fi
458 +</code></pre>
459 +<h3 id="38-nginx-limit-reqconf-créer-si-absent-sur-votre-distro"><a class="header" href="#38-nginx-limit-reqconf-créer-si-absent-sur-votre-distro">3.8 <code>nginx-limit-req.conf</code> (créer si absent sur votre distro)</a></h3>
460 +<pre><code class="language-bash">if [ ! -f /etc/fail2ban/filter.d/nginx-limit-req.conf ]; then
461 +sudo tee /etc/fail2ban/filter.d/nginx-limit-req.conf &lt;&lt;'EOF'
462 +[Definition]
463 +failregex = ^.*limiting requests, excess: .* by zone .*, client: &lt;HOST&gt;.*$
464 +ignoreregex =
465 +EOF
466 +fi
467 +</code></pre>
468 +<h3 id="39-nginx-badbotsconf--obligatoire-pas-fourni-par-debianubuntu"><a class="header" href="#39-nginx-badbotsconf--obligatoire-pas-fourni-par-debianubuntu">3.9 <code>nginx-badbots.conf</code> — OBLIGATOIRE (pas fourni par Debian/Ubuntu)</a></h3>
469 +<p>Le paquet <code>fail2ban</code> Debian/Ubuntu fournit <code>apache-badbots.conf</code> mais PAS <code>nginx-badbots.conf</code>. Sans ce filter, <code>fail2ban-client reload</code> affiche :</p>
470 +<pre><code>Found no accessible config files for 'filter.d/nginx-badbots' under /etc/fail2ban
471 +</code></pre>
472 +<p>Le filter ci-dessous réutilise la liste de bad user-agents de <code>apache-badbots</code> avec un <code>failregex</code> adapté au format <code>combined</code> de nginx :</p>
473 +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/nginx-badbots.conf &lt;&lt;'EOF'
474 +[Definition]
475 +badbotscustom = EmailCollector|WebEMailExtrac|TrackBack/1\.02|sogou music spider
476 +badbots = Atomic_Email_Hunter/4\.0|atSpider/1\.0|autoemailspider|bwh3_user_agent|China Local Browse 2\.6|ContactBot/0\.2|ContentSmartz|DataCha0s/2\.0|DBrowse 1\.4b|DBrowse 1\.4d|Demo Bot DOT 16b|Demo Bot Z 16b|DSurf15a 01|DSurf15a 71|DSurf15a 81|DSurf15a VA|EBrowse 1\.4b|Educate Search VxB|EmailSiphon|EmailSpider|EmailWolf 1\.00|ExtractorPro|Franklin Locator 1\.8|Full Web Bot 0416B|Guestbook Auto Submitter|ISC Systems iRc Search 2\.1|LMQueueBot/0\.2|LWP\:\:Simple/5\.803|Microsoft URL Control - 6\.00\.8xxx|Missigua Locator 1\.9|Mozilla/4\.0 efp@gmx\.net|Nsauditor/1\.x|PBrowse 1\.4b|PEval 1\.4b|Poirot|psycheclone|sogou spider|sohu agent|VadixBot|WebVulnCrawl\.unknown/1\.0 libwww-perl/5\.803|Wells Search II|WEP Search 00
477 +
478 +failregex = ^&lt;HOST&gt; -.*"(GET|POST|HEAD).*HTTP.*"(?:%(badbots)s|%(badbotscustom)s)"$
479 +ignoreregex =
480 +
481 +datepattern = ^[^\[]*\[({DATE})
482 + {^LN-BEG}
483 +EOF
484 +</code></pre>
485 +<p><strong>Alternative</strong> : si vous ne voulez pas maintenir la liste, simplement désactiver le jail (<code>enabled = false</code> dans le <code>[nginx-badbots]</code>) — la combinaison <code>nginx-botsearch</code> + <code>nginx-limit-req</code> + <code>gitrust-api-abuse</code> couvre déjà l’essentiel.</p>
486 +<hr>
487 +<h2 id="4-rate-limiting-côté-nginx-requis-par-nginx-limit-req"><a class="header" href="#4-rate-limiting-côté-nginx-requis-par-nginx-limit-req">4. Rate limiting côté Nginx (requis par <code>nginx-limit-req</code>)</a></h2>
488 +<h3 id="41-déclarer-les-zones-globales"><a class="header" href="#41-déclarer-les-zones-globales">4.1 Déclarer les zones globales</a></h3>
489 +<pre><code class="language-bash">sudo tee /etc/nginx/conf.d/gitrust-limit.conf &lt;&lt;'EOF'
490 +# Zones de rate limiting gitrust
491 +limit_req_zone $binary_remote_addr zone=gitrust_login:10m rate=1r/s;
492 +limit_req_zone $binary_remote_addr zone=gitrust_api:10m rate=10r/s;
493 +limit_req_zone $binary_remote_addr zone=gitrust_git:10m rate=30r/s;
494 +EOF
495 +</code></pre>
496 +<h3 id="42-ajouter-les-location-dans-etcnginxsites-availablegitrust"><a class="header" href="#42-ajouter-les-location-dans-etcnginxsites-availablegitrust">4.2 Ajouter les <code>location</code> dans <code>/etc/nginx/sites-available/gitrust</code></a></h3>
497 +<p>Dans le bloc <code>server { listen 443 ssl; ... }</code>, <strong>avant</strong> <code>location /</code> finale :</p>
498 +<pre><code class="language-nginx"># Protection brute force login (1 req/s par IP, burst 5)
499 +location ~ ^/(login|api/v1/auth/) {
500 + limit_req zone=gitrust_login burst=5 nodelay;
501 + proxy_pass http://gitrust_backend;
502 + proxy_set_header Host $host;
503 + proxy_set_header X-Real-IP $remote_addr;
504 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
505 + proxy_set_header X-Forwarded-Proto $scheme;
506 +}
507 +
508 +# Protection API (10 req/s par IP, burst 20)
509 +location ^~ /api/v1/ {
510 + limit_req zone=gitrust_api burst=20 nodelay;
511 + proxy_pass http://gitrust_backend;
512 + proxy_set_header Host $host;
513 + proxy_set_header X-Real-IP $remote_addr;
514 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
515 + proxy_set_header X-Forwarded-Proto $scheme;
516 +}
517 +
518 +# Protection Git smart HTTP (30 req/s — clone/push légitime peut être verbeux)
519 +location ~ ^/[^/]+/[^/]+\.git/ {
520 + limit_req zone=gitrust_git burst=50 nodelay;
521 + proxy_pass http://gitrust_backend;
522 + proxy_http_version 1.1;
523 + proxy_set_header Host $host;
524 + proxy_set_header X-Real-IP $remote_addr;
525 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
526 + proxy_set_header X-Forwarded-Proto $scheme;
527 + proxy_buffering off;
528 + proxy_request_buffering off;
529 + client_max_body_size 2G;
530 +}
531 +</code></pre>
532 +<h3 id="43-reload"><a class="header" href="#43-reload">4.3 Reload</a></h3>
533 +<pre><code class="language-bash">sudo nginx -t &amp;&amp; sudo systemctl reload nginx
534 +</code></pre>
535 +<hr>
536 +<h2 id="5-démarrage-et-validation"><a class="header" href="#5-démarrage-et-validation">5. Démarrage et validation</a></h2>
537 +<pre><code class="language-bash">sudo systemctl restart fail2ban
538 +
539 +# Liste des jails actifs
540 +sudo fail2ban-client status
541 +# Attendu :
542 +# sshd, nginx-http-auth, nginx-botsearch, nginx-badbots, nginx-limit-req,
543 +# gitrust-login, gitrust-api-abuse, gitrust-ssh, gitrust-import,
544 +# postgresql, recidive
545 +# (+ dtrack-login, dtrack-api si activées)
546 +
547 +# Stats par jail
548 +sudo fail2ban-client status gitrust-login
549 +sudo fail2ban-client status sshd
550 +</code></pre>
551 +<h3 id="valider-chaque-filtre-custom"><a class="header" href="#valider-chaque-filtre-custom">Valider chaque filtre custom</a></h3>
552 +<pre><code class="language-bash"># 1. gitrust-login contre l'access log nginx
553 +sudo fail2ban-regex /var/log/nginx/gitrust.access.log \
554 + /etc/fail2ban/filter.d/gitrust-login.conf
555 +
556 +# 2. gitrust-api-abuse
557 +sudo fail2ban-regex /var/log/nginx/gitrust.access.log \
558 + /etc/fail2ban/filter.d/gitrust-api-abuse.conf
559 +
560 +# 3. gitrust-ssh contre journald
561 +journalctl -u gitrust --no-pager -n 5000 &gt; /tmp/gitrust.log
562 +sudo fail2ban-regex /tmp/gitrust.log \
563 + /etc/fail2ban/filter.d/gitrust-ssh.conf
564 +rm /tmp/gitrust.log
565 +
566 +# 4. postgresql
567 +journalctl -u docker --no-pager -n 5000 | grep -i postgres &gt; /tmp/pg.log
568 +sudo fail2ban-regex /tmp/pg.log \
569 + /etc/fail2ban/filter.d/postgresql.conf
570 +</code></pre>
571 +<p><code>0 failregex found</code> = regex à ajuster après observation des logs réels de chaque service.</p>
572 +<h3 id="test-de-bannissement"><a class="header" href="#test-de-bannissement">Test de bannissement</a></h3>
573 +<pre><code class="language-bash"># Depuis un host HORS LAN (sinon ignoreip s'applique)
574 +for i in $(seq 1 10); do
575 + curl -sk -o /dev/null -w "%{http_code}\n" \
576 + -X POST https://&lt;votre-domaine&gt;/login \
577 + -d 'username=admin&amp;password=wrong'
578 +done
579 +
580 +# Vérifier le ban
581 +ssh gitrust-host 'sudo fail2ban-client status gitrust-login'
582 +# Currently banned : 1 — Banned IP list : &lt;IP test&gt;
583 +
584 +# Débannir manuellement
585 +ssh gitrust-host 'sudo fail2ban-client unban &lt;IP&gt;'
586 +</code></pre>
587 +<hr>
588 +<h2 id="6-monitoring"><a class="header" href="#6-monitoring">6. Monitoring</a></h2>
589 +<pre><code class="language-bash"># Logs fail2ban temps réel
590 +sudo tail -f /var/log/fail2ban.log
591 +
592 +# Toutes les IPs bannies, tous jails confondus
593 +sudo fail2ban-client banned
594 +
595 +# Stats détaillées d'un jail
596 +sudo fail2ban-client status gitrust-ssh
597 +# Currently failed : 2
598 +# Total failed : 47
599 +# Currently banned : 1
600 +# Total banned : 12
601 +# Banned IP list : 203.0.113.42
602 +
603 +sudo grep "Ban " /var/log/fail2ban.log | tail -20
604 +</code></pre>
605 +<hr>
606 +<h2 id="7-matrice-récapitulative"><a class="header" href="#7-matrice-récapitulative">7. Matrice récapitulative</a></h2>
607 +<div class="table-wrapper">
608 +<table>
609 +<thead>
610 +<tr><th>#</th><th>Jail</th><th>Port(s)</th><th>Source logs</th><th>Max retry</th><th>Ban time</th><th>Surface protégée</th></tr>
611 +</thead>
612 +<tbody>
613 +<tr><td>1</td><td><code>sshd</code></td><td>2022</td><td>journald sshd</td><td>3</td><td>1h</td><td>SSH admin</td></tr>
614 +<tr><td>2</td><td><code>nginx-http-auth</code></td><td>80,443</td><td>nginx error</td><td>5</td><td>1h</td><td>Basic auth (admin futur)</td></tr>
615 +<tr><td>3</td><td><code>nginx-botsearch</code></td><td>80,443</td><td>nginx access</td><td>2</td><td>24h</td><td>Scanners WP/PHP</td></tr>
616 +<tr><td>4</td><td><code>nginx-badbots</code></td><td>80,443</td><td>nginx access</td><td>2</td><td>24h</td><td>User-agents malveillants</td></tr>
617 +<tr><td>5</td><td><code>nginx-limit-req</code></td><td>80,443</td><td>nginx error</td><td>10</td><td>1h</td><td>Flood global</td></tr>
618 +<tr><td>6</td><td><code>gitrust-login</code></td><td>80,443</td><td>nginx access</td><td>5</td><td>1h</td><td>Brute force login UI + API</td></tr>
619 +<tr><td>7</td><td><code>gitrust-api-abuse</code></td><td>80,443</td><td>nginx access</td><td>30</td><td>2h</td><td>Scrapers API (tokens fuités)</td></tr>
620 +<tr><td>8</td><td><code>gitrust-ssh</code></td><td>22,2222</td><td>journald gitrust</td><td>5</td><td>1h</td><td>Brute force clé SSH Git</td></tr>
621 +<tr><td>9</td><td><code>gitrust-import</code></td><td>80,443</td><td>journald gitrust</td><td>3</td><td>30m</td><td>Brute force PAT/OAuth import</td></tr>
622 +<tr><td>10</td><td><code>dtrack-login</code></td><td>8080</td><td>nginx access</td><td>5</td><td>2h</td><td>Brute force UI Dep-Track</td></tr>
623 +<tr><td>11</td><td><code>dtrack-api</code></td><td>8081</td><td>nginx access</td><td>10</td><td>1h</td><td>Abus clé API Dep-Track</td></tr>
624 +<tr><td>12</td><td><code>postgresql</code></td><td>5432</td><td>journald</td><td>5</td><td>1h</td><td>Défense en profondeur PG</td></tr>
625 +<tr><td>13</td><td><code>recidive</code></td><td>all</td><td>fail2ban.log</td><td>3</td><td>1w</td><td>Méta-ban 3×/24h</td></tr>
626 +</tbody>
627 +</table>
628 +</div>
629 +<p><strong>Ordre de déclenchement typique</strong> : brute force → jail spécifique (ban 1h) → si récidive 3x → recidive (ban 1 semaine, tous ports).</p>
630 +<hr>
631 +<h2 id="8-notes-spécifiques-à-la-stack-gitrust"><a class="header" href="#8-notes-spécifiques-à-la-stack-gitrust">8. Notes spécifiques à la stack gitrust</a></h2>
632 +<h3 id="81-dagger-ci"><a class="header" href="#81-dagger-ci">8.1 Dagger (CI)</a></h3>
633 +<p>Dagger s’exécute <strong>localement</strong> sur la machine gitrust (ou un runner distant — voir <code>administration_manual/how-to/configurer-ci-runner-remote.md</code>). <strong>Aucun port réseau ouvert</strong> → pas de jail dédié.</p>
634 +<h3 id="82-dependency-track"><a class="header" href="#82-dependency-track">8.2 Dependency-Track</a></h3>
635 +<p>Si DTrack est déployé sur le même serveur et <strong>exposé</strong>, activer les jails 10 et 11 en mettant <code>enabled = true</code> et en pointant <code>logpath</code> vers les logs nginx du vhost DTrack.</p>
636 +<p>Si DTrack est <strong>interne</strong> (VPN, réseau privé), laisser <code>enabled = false</code> — le firewall suffit.</p>
637 +<p>Config DTrack recommandée :</p>
638 +<ul>
639 +<li>Bind sur <code>127.0.0.1</code> via <code>dtrack.url.base=http://127.0.0.1:8080</code></li>
640 +</ul>
641 +<h3 id="83-postgresql"><a class="header" href="#83-postgresql">8.3 PostgreSQL</a></h3>
642 +<p>Le jail <code>postgresql</code> est <strong>défensif</strong>. PG doit rester bindé sur <code>127.0.0.1:5432</code> via Docker. Vérifier :</p>
643 +<pre><code class="language-bash">sudo ss -tlnp | grep 5432
644 +# Attendu : 127.0.0.1:5432 — PAS 0.0.0.0:5432
645 +</code></pre>
646 +<h3 id="84-notifications"><a class="header" href="#84-notifications">8.4 Notifications</a></h3>
647 +<p>Pour recevoir un mail à chaque ban :</p>
648 +<ol>
649 +<li>Installer un relay SMTP local : <code>sudo apt install msmtp-mta</code></li>
650 +<li>Configurer <code>/etc/msmtprc</code> avec un compte SMTP</li>
651 +<li>Décommenter dans <code>[DEFAULT]</code> :
652 +<pre><code class="language-ini">destemail = contact@gitrust.eu
653 +sender = fail2ban@votre-serveur.example.com
654 +action = %(action_mwl)s
655 +</code></pre>
656 +</li>
657 +<li><code>sudo systemctl restart fail2ban</code></li>
658 +</ol>
659 +<hr>
660 +<h2 id="9-limites-et-évolutions"><a class="header" href="#9-limites-et-évolutions">9. Limites et évolutions</a></h2>
661 +<ul>
662 +<li><strong>IPv6</strong> : toutes les regex utilisent <code>&lt;HOST&gt;</code> qui matche IPv4 ET IPv6. Vérifier que UFW est configuré pour v6 également.</li>
663 +<li><strong>CDN/Cloudflare devant</strong> : si un CDN est ajouté, <code>$remote_addr</code> côté Nginx sera l’IP du CDN — il faut récupérer la vraie IP via <code>X-Forwarded-For</code> et propager au logging Nginx. Changer <code>failregex</code> en conséquence. Sinon les jails banniront le CDN.</li>
664 +<li><strong>Docker/Podman</strong> : si gitrust passe en conteneur, les logs de <code>gitrust.service</code> deviennent <code>docker.service</code> ou <code>podman.service</code> → mettre à jour <code>journalmatch</code> dans les jails 8 et 9.</li>
665 +<li><strong>GeoIP</strong> : pour bloquer des pays entiers en amont, ajouter <code>geo $blocked_country</code> dans Nginx (module <code>ngx_http_geoip2_module</code>) — complémentaire à fail2ban.</li>
666 +</ul>
667 +
668 + </main>
669 +
670 + <nav class="nav-wrapper" aria-label="Page navigation">
671 + <!-- Mobile navigation buttons -->
672 + <a rel="prev" href="../../administration_manual/how-to/integrer-dependency-track.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
673 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
674 + </a>
675 +
676 + <a rel="next prefetch" href="../../administration_manual/how-to/tuner-rate-limiting.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
677 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
678 + </a>
679 +
680 + <div style="clear: both"></div>
681 + </nav>
682 + </div>
683 + </div>
684 +
685 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
686 + <a rel="prev" href="../../administration_manual/how-to/integrer-dependency-track.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
687 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
688 + </a>
689 +
690 + <a rel="next prefetch" href="../../administration_manual/how-to/tuner-rate-limiting.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
691 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
692 + </a>
693 + </nav>
694 +
695 + </div>
696 +
697 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
698 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
699 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
700 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
701 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
702 +
703 +
704 +
705 + <script>
706 + window.playground_copyable = true;
707 + </script>
708 +
709 +
710 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
711 + <script src="../../mark-09e88c2c.min.js"></script>
712 + <script src="../../searcher-c2a407aa.js"></script>
713 +
714 + <script src="../../clipboard-1626706a.min.js"></script>
715 + <script src="../../highlight-abc7f01d.js"></script>
716 + <script src="../../book-a0b12cfe.js"></script>
717 +
718 + <!-- Custom JS scripts -->
719 + <script src="../../theme/mermaid-eefea253.min.js"></script>
720 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
721 +
722 +
723 +
724 + </div>
725 + </body>
726 +</html>
A book/administration_manual/how-to/forcer-2fa-globalement.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Forcer le 2FA sur toute l&#x27;instance - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/forcer-2fa-globalement.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="forcer-le-2fa-sur-toute-linstance"><a class="header" href="#forcer-le-2fa-sur-toute-linstance">Forcer le 2FA sur toute l’instance</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/how-to/tuner-rate-limiting.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/how-to/depanner-ssh.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/how-to/tuner-rate-limiting.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/how-to/depanner-ssh.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/how-to/gerer-utilisateurs-admin.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Gérer les utilisateurs (panel /admin) - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/gerer-utilisateurs-admin.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="gérer-les-utilisateurs-panel-admin"><a class="header" href="#gérer-les-utilisateurs-panel-admin">Gérer les utilisateurs (panel /admin)</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/how-to/depanner-ci.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/how-to/auditer-instance.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/how-to/depanner-ci.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/how-to/auditer-instance.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/how-to/index.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Guides pratiques - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="guides-pratiques"><a class="header" href="#guides-pratiques">Guides pratiques</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/tutorials/04-mise-en-production-192-168.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/how-to/sauvegarder-restaurer.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/tutorials/04-mise-en-production-192-168.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/how-to/sauvegarder-restaurer.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/how-to/integrer-dependency-track.html
+543 -0
@@ -0,0 +1,543 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Intégrer Dependency-Track (SBOM) - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/integrer-dependency-track.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="intégrer-la-ci-et-dependency-track"><a class="header" href="#intégrer-la-ci-et-dependency-track">Intégrer la CI et Dependency-Track</a></h1>
181 +<p>Ce document explique comment activer et configurer les deux fonctionnalités de qualité/sécurité de gitrust :</p>
182 +<ol>
183 +<li><strong>La CI intégrée</strong> (Dagger) qui exécute les builds/tests/lints à chaque push.</li>
184 +<li><strong>Le dependency tracker</strong> (Syft + Dependency-Track) qui scanne les composants du code à chaque push et détecte les vulnérabilités connues.</li>
185 +</ol>
186 +<p>Ces deux systèmes sont <strong>indépendants</strong> : on peut activer l’un sans l’autre.</p>
187 +<hr>
188 +<h2 id="1-architecture-générale"><a class="header" href="#1-architecture-générale">1. Architecture générale</a></h2>
189 +<pre class="mermaid">flowchart TB
190 + subgraph Client
191 + Dev[Développeur]
192 + end
193 + subgraph Gitrust[Instance Gitrust]
194 + HTTP[:4000 HTTP/Git]
195 + SSH[:2222 SSH/Git]
196 + Worker[CiWorker&lt;br/&gt;tokio task]
197 + Sbom[SbomService&lt;br/&gt;tokio spawn]
198 + DB[(PostgreSQL)]
199 + end
200 + subgraph Builder[Serveur de build]
201 + Docker[Docker/Podman]
202 + Dagger[Dagger CLI]
203 + CiEngine[/opt/gitrust-ci/ci-engine/]
204 + end
205 + subgraph Security[Stack sécurité optionnelle]
206 + Syft[syft]
207 + Dtrack[Dependency-Track]
208 + end
209 +
210 + Dev --&gt;|git push| HTTP
211 + Dev --&gt;|git push| SSH
212 + HTTP --&gt; Worker
213 + SSH --&gt; Worker
214 + HTTP --&gt; Sbom
215 + SSH --&gt; Sbom
216 + Worker --&gt;|SSH + rsync| Builder
217 + Builder --&gt;|logs streamés| Worker
218 + Worker --&gt; DB
219 + Sbom --&gt;|scan workspace| Syft
220 + Sbom --&gt;|PUT BOM| Dtrack
221 + Dtrack --&gt;|findings| Sbom
222 + Sbom --&gt; DB
223 +</pre>
224 +
225 +<p>Trois composants fonctionnent en parallèle :</p>
226 +<ul>
227 +<li><strong>CiWorker</strong> : tâche Tokio qui consomme des <code>CiTask</code> depuis un channel <code>mpsc</code>, limitée par un <code>Semaphore</code> à <code>CI_MAX_CONCURRENT</code> pipelines simultanés.</li>
228 +<li><strong>SbomService</strong> : exécuté dans un <code>tokio::spawn</code> après chaque push, totalement découplé du CI.</li>
229 +<li><strong>Serveur de build</strong> : machine distante (ou <code>localhost</code>) qui exécute Docker + Dagger. Gitrust y envoie le workspace par rsync et lance Dagger par SSH.</li>
230 +</ul>
231 +<hr>
232 +<h2 id="2-mettre-en-place-la-ci"><a class="header" href="#2-mettre-en-place-la-ci">2. Mettre en place la CI</a></h2>
233 +<h3 id="21-pré-requis-serveur-de-build"><a class="header" href="#21-pré-requis-serveur-de-build">2.1 Pré-requis serveur de build</a></h3>
234 +<p>Le serveur de build peut être <strong>la même machine que Gitrust</strong> (<code>CI_REMOTE_HOST=localhost</code>) ou une machine dédiée. Il doit disposer de :</p>
235 +<div class="table-wrapper">
236 +<table>
237 +<thead>
238 +<tr><th>Outil</th><th>Rôle</th></tr>
239 +</thead>
240 +<tbody>
241 +<tr><td>Docker ou Podman</td><td>Containers Dagger</td></tr>
242 +<tr><td>Dagger CLI</td><td>Moteur d’exécution</td></tr>
243 +<tr><td>SSH (accès sortant depuis Gitrust)</td><td>Transport</td></tr>
244 +<tr><td>rsync</td><td>Copie du workspace</td></tr>
245 +<tr><td>git, tar</td><td>Extraction du tree du commit</td></tr>
246 +</tbody>
247 +</table>
248 +</div>
249 +<p>Installation automatique recommandée :</p>
250 +<pre><code class="language-bash"># Depuis la machine Gitrust (l'utilisateur doit pouvoir SSH vers le builder)
251 +./deployment/setup-remote-ci.sh .env
252 +</code></pre>
253 +<p>Le script exécute :</p>
254 +<ol>
255 +<li>Vérification de la connectivité SSH</li>
256 +<li>Installation de Docker si absent</li>
257 +<li>Installation de Dagger CLI si absent</li>
258 +<li>Création du répertoire de travail distant</li>
259 +<li>Synchronisation du <code>ci-engine</code></li>
260 +<li>Smoke test (versions)</li>
261 +</ol>
262 +<h3 id="22-configuration-gitrust-fichier-env"><a class="header" href="#22-configuration-gitrust-fichier-env">2.2 Configuration Gitrust (fichier .env)</a></h3>
263 +<p>Ajouter au <code>.env</code> de Gitrust :</p>
264 +<pre><code class="language-env"># Activer globalement le CI
265 +CI_ENABLED=true
266 +
267 +# Chemin du ci-engine sur le serveur de build
268 +CI_ENGINE_PATH=/opt/gitrust-ci/ci-engine
269 +
270 +# Limite de parallélisme
271 +CI_MAX_CONCURRENT=4
272 +CI_DEFAULT_TIMEOUT=3600
273 +CI_WORKSPACE_PATH=/tmp/gitrust-ci
274 +
275 +# Serveur de build (mettre localhost pour "même machine")
276 +CI_REMOTE_HOST=builder.example.com
277 +CI_REMOTE_USER=ci-runner
278 +CI_REMOTE_PATH=/opt/gitrust-ci
279 +CI_REMOTE_SSH_PORT=22
280 +# CI_REMOTE_SSH_KEY=/home/gitrust/.ssh/id_ed25519 # si pas ssh-agent
281 +</code></pre>
282 +<p>Redémarrer Gitrust : <code>systemctl restart gitrust</code> (ou <code>cargo run --release</code>).</p>
283 +<h3 id="23-activer-la-ci-sur-un-dépôt"><a class="header" href="#23-activer-la-ci-sur-un-dépôt">2.3 Activer la CI sur un dépôt</a></h3>
284 +<p>Dans l’interface web : aller sur le dépôt → <strong>Settings</strong> → <strong>CI</strong>.</p>
285 +<ul>
286 +<li>Cocher <strong>CI enabled</strong> (requis — par défaut <code>false</code>)</li>
287 +<li>Cocher <strong>Trigger on push</strong> (active l’exécution à chaque push)</li>
288 +<li>Optionnel : <strong>Auto-cancel</strong> (annule les pipelines en cours quand un nouveau démarre)</li>
289 +<li>Optionnel : <strong>Allowed branches</strong> (ex. <code>main,develop</code> — vide = toutes)</li>
290 +</ul>
291 +<h3 id="24-choisir-le-mode--easy-ou-power"><a class="header" href="#24-choisir-le-mode--easy-ou-power">2.4 Choisir le mode : Easy ou Power</a></h3>
292 +<pre class="mermaid">flowchart LR
293 + Push[Commit&lt;br/&gt;poussé] --&gt; Tree{Arbre du&lt;br/&gt;commit contient ?}
294 + Tree --&gt;|.dagger/| Power[Mode Power&lt;br/&gt;dagger call -m .dagger/ ci]
295 + Tree --&gt;|.gitrust-ci.yml| Easy[Mode Easy&lt;br/&gt;dagger call -m ci-engine test-pr]
296 + Tree --&gt;|rien| None[Pas de pipeline]
297 + Power --&gt; Run[Exécution&lt;br/&gt;distante SSH]
298 + Easy --&gt; Run
299 +</pre>
300 +
301 +<h4 id="mode-easy-recommandé-pour-commencer"><a class="header" href="#mode-easy-recommandé-pour-commencer">Mode Easy (recommandé pour commencer)</a></h4>
302 +<p>Créer <code>.gitrust-ci.yml</code> à la racine du dépôt :</p>
303 +<pre><code class="language-yaml"># Raccourci : charge un profil pré-configuré (rust | python | node)
304 +language: rust
305 +
306 +build:
307 + command: "cargo build --release"
308 +
309 +checks:
310 + lint: "cargo clippy -- -D warnings"
311 + format: "cargo fmt -- --check"
312 +
313 +tests:
314 + command: "cargo test --release"
315 +</code></pre>
316 +<p>Les profils disponibles se trouvent dans <code>deployment/ci-engine/profiles/</code> (rust.yaml, python.yaml, node.yaml) dans le dépôt source.</p>
317 +<h4 id="mode-power"><a class="header" href="#mode-power">Mode Power</a></h4>
318 +<p>Pour les utilisateurs avancés, créer un module Dagger complet dans <code>.dagger/</code> :</p>
319 +<pre><code>.dagger/
320 +├── dagger.json
321 +├── src/
322 +│ └── main.py # ou Go/TypeScript
323 +</code></pre>
324 +<p>La fonction <code>ci</code> du module est appelée directement :</p>
325 +<pre><code class="language-bash">dagger call -m .dagger/ ci
326 +</code></pre>
327 +<p>Avantage : accès au Daggerverse, composition, tests de pipeline. Voir la <a href="https://docs.dagger.io/">documentation Dagger</a>.</p>
328 +<h3 id="25-suivi-dun-pipeline"><a class="header" href="#25-suivi-dun-pipeline">2.5 Suivi d’un pipeline</a></h3>
329 +<p>Après un <code>git push</code>, une entrée apparaît dans l’onglet <strong>CI</strong> du dépôt :</p>
330 +<pre class="mermaid">stateDiagram-v2
331 + [*] --&gt; Pending: create_pipeline
332 + Pending --&gt; Running: worker picks CiTask
333 + Running --&gt; Success: exit 0
334 + Running --&gt; Failure: exit != 0
335 + Running --&gt; Cancelled: timeout / auto_cancel / manuel
336 + Success --&gt; [*]
337 + Failure --&gt; [*]
338 + Cancelled --&gt; [*]
339 +</pre>
340 +
341 +<p>Les logs stdout/stderr sont streamés ligne par ligne dans la table <code>ci_logs</code> et visibles en direct dans l’UI. En cas d’échec, une notification est envoyée au propriétaire du dépôt.</p>
342 +<hr>
343 +<h2 id="3-mettre-en-place-le-dependency-tracker"><a class="header" href="#3-mettre-en-place-le-dependency-tracker">3. Mettre en place le Dependency Tracker</a></h2>
344 +<p>Cette partie est totalement indépendante de la CI. Elle scanne le code poussé et produit un SBOM CycloneDX, puis (optionnellement) l’envoie à Dependency-Track pour une analyse de vulnérabilités.</p>
345 +<h3 id="31-installer-syft"><a class="header" href="#31-installer-syft">3.1 Installer Syft</a></h3>
346 +<p>Sur la machine Gitrust (le scan se fait localement, pas sur le builder) :</p>
347 +<pre><code class="language-bash"># Installation officielle
348 +curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh \
349 + | sh -s -- -b /usr/local/bin
350 +
351 +# Vérification
352 +syft --version
353 +</code></pre>
354 +<p>Dans <code>.env</code> :</p>
355 +<pre><code class="language-env">CI_SBOM_ENABLED=true
356 +CI_SYFT_BIN=/usr/local/bin/syft # optionnel, défaut: syft dans PATH
357 +</code></pre>
358 +<p>À ce stade : à chaque push, un SBOM CycloneDX est généré et stocké (sans upload externe). Visible dans l’onglet <strong>Security</strong> du dépôt : nombre de composants, sha256 du BOM.</p>
359 +<h3 id="32-déployer-dependency-track"><a class="header" href="#32-déployer-dependency-track">3.2 Déployer Dependency-Track</a></h3>
360 +<p>Dependency-Track est une application Java qui stocke les SBOM et corrèle avec les bases CVE/OSV/NVD. Déploiement Docker recommandé :</p>
361 +<pre><code class="language-bash">mkdir -p /opt/dtrack &amp;&amp; cd /opt/dtrack
362 +curl -L -o docker-compose.yml \
363 + https://dependencytrack.org/docker-compose.yml
364 +docker compose up -d
365 +</code></pre>
366 +<p>L’API est disponible sur <code>http://localhost:8081</code> et l’UI sur <code>http://localhost:8080</code>.
367 +Login initial : <code>admin</code> / <code>admin</code> (à changer immédiatement).</p>
368 +<h3 id="33-créer-une-clé-api"><a class="header" href="#33-créer-une-clé-api">3.3 Créer une clé API</a></h3>
369 +<p>Dans Dependency-Track → <strong>Administration</strong> → <strong>Access Management</strong> → <strong>Teams</strong> :</p>
370 +<ol>
371 +<li>Créer (ou réutiliser) une équipe <code>gitrust</code>.</li>
372 +<li>Lui attribuer les permissions :
373 +<ul>
374 +<li><code>BOM_UPLOAD</code></li>
375 +<li><code>PROJECT_CREATION_UPLOAD</code></li>
376 +<li><code>VIEW_PORTFOLIO</code></li>
377 +<li><code>VIEW_VULNERABILITY</code></li>
378 +</ul>
379 +</li>
380 +<li>Générer une API key et la copier.</li>
381 +</ol>
382 +<h3 id="34-configurer-gitrust"><a class="header" href="#34-configurer-gitrust">3.4 Configurer Gitrust</a></h3>
383 +<p>Ajouter au <code>.env</code> :</p>
384 +<pre><code class="language-env">CI_DTRACK_ENABLED=true
385 +CI_DTRACK_URL=http://localhost:8081
386 +CI_DTRACK_API_KEY=odt_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
387 +</code></pre>
388 +<p>Redémarrer Gitrust. À chaque push :</p>
389 +<pre class="mermaid">sequenceDiagram
390 + participant Push as post-receive
391 + participant Sbom as SbomService
392 + participant Git as git archive
393 + participant Syft
394 + participant Dtrack as Dependency-Track
395 + participant DB as sbom_reports
396 +
397 + Push-&gt;&gt;Sbom: process_push(sha, ref)
398 + Sbom-&gt;&gt;DB: upsert status=pending
399 + Sbom-&gt;&gt;Git: archive sha | tar -x tmpdir
400 + Sbom-&gt;&gt;Syft: scan dir:tmpdir -o cyclonedx-json
401 + Syft--&gt;&gt;Sbom: BOM bytes
402 + Sbom-&gt;&gt;DB: update sha256
403 + Sbom-&gt;&gt;Dtrack: PUT /api/v1/bom (base64)
404 + Dtrack--&gt;&gt;Sbom: token
405 + loop max 30s
406 + Sbom-&gt;&gt;Dtrack: GET /api/v1/bom/token/{token}
407 + Dtrack--&gt;&gt;Sbom: processing ?
408 + end
409 + Sbom-&gt;&gt;Dtrack: GET /api/v1/finding/project/{uuid}
410 + Dtrack--&gt;&gt;Sbom: findings[]
411 + Sbom-&gt;&gt;DB: update status=success&lt;br/&gt;+ critical/high/medium/low
412 +</pre>
413 +
414 +<h3 id="35-lire-les-résultats"><a class="header" href="#35-lire-les-résultats">3.5 Lire les résultats</a></h3>
415 +<p>Onglet <strong>Security</strong> du dépôt → encart SBOM :</p>
416 +<ul>
417 +<li>Nombre de composants détectés</li>
418 +<li>Compteurs par sévérité : Critical / High / Medium / Low</li>
419 +<li>Lien direct vers le projet dans Dependency-Track (si l’UUID est résolu)</li>
420 +<li>Hash sha256 du BOM (traçabilité)</li>
421 +</ul>
422 +<p>Si Dependency-Track met plus de 30s à analyser, le status reste <code>processing</code> — un sweeper ultérieur ira rechercher les findings.</p>
423 +<hr>
424 +<h2 id="4-débogage"><a class="header" href="#4-débogage">4. Débogage</a></h2>
425 +<h3 id="problèmes-ci-courants"><a class="header" href="#problèmes-ci-courants">Problèmes CI courants</a></h3>
426 +<div class="table-wrapper">
427 +<table>
428 +<thead>
429 +<tr><th>Symptôme</th><th>Cause probable</th><th>Vérifier</th></tr>
430 +</thead>
431 +<tbody>
432 +<tr><td>Pipeline reste <code>pending</code></td><td>Worker non démarré, ou channel saturé</td><td>Logs <code>CI worker started</code>, <code>CI_MAX_CONCURRENT</code></td></tr>
433 +<tr><td><code>Échec rsync vers le serveur de build</code></td><td>SSH bloqué, clé absente</td><td><code>ssh -p ${CI_REMOTE_SSH_PORT} ${CI_REMOTE_USER}@${CI_REMOTE_HOST}</code> manuel</td></tr>
434 +<tr><td><code>dagger: command not found</code></td><td>Dagger non installé sur le builder</td><td>Relancer <code>setup-remote-ci.sh</code></td></tr>
435 +<tr><td>Status <code>Cancelled</code> inattendu</td><td>Timeout (<code>CI_DEFAULT_TIMEOUT</code>) ou auto-cancel</td><td>Augmenter le timeout, vérifier pipelines concurrents</td></tr>
436 +</tbody>
437 +</table>
438 +</div>
439 +<h3 id="problèmes-sbom-courants"><a class="header" href="#problèmes-sbom-courants">Problèmes SBOM courants</a></h3>
440 +<div class="table-wrapper">
441 +<table>
442 +<thead>
443 +<tr><th>Symptôme</th><th>Cause probable</th><th>Vérifier</th></tr>
444 +</thead>
445 +<tbody>
446 +<tr><td><code>SBOM generation disabled</code></td><td><code>CI_SBOM_ENABLED=false</code></td><td><code>.env</code></td></tr>
447 +<tr><td><code>syft spawn failed</code></td><td>Binaire introuvable</td><td><code>which syft</code>, <code>CI_SYFT_BIN</code></td></tr>
448 +<tr><td><code>invalid commit sha</code></td><td>SHA non hex 40 chars</td><td>Rare, signale un bug</td></tr>
449 +<tr><td><code>Dtrack upload 401</code></td><td>API key invalide ou permissions manquantes</td><td>Régénérer, vérifier les 4 permissions</td></tr>
450 +<tr><td>Status <code>processing</code> indéfiniment</td><td>Dtrack surchargé, analyse lente</td><td>Attendre, ou relancer un push</td></tr>
451 +</tbody>
452 +</table>
453 +</div>
454 +<h3 id="logs-utiles"><a class="header" href="#logs-utiles">Logs utiles</a></h3>
455 +<pre><code class="language-bash"># Logs Gitrust (systemd)
456 +journalctl -u gitrust -f | grep -E "CI|SBOM|sbom|pipeline"
457 +
458 +# Vérifier un pipeline en DB
459 +psql $DATABASE_URL -c "SELECT id, status, commit_sha, created_at FROM ci_pipelines ORDER BY created_at DESC LIMIT 10;"
460 +
461 +# Vérifier un SBOM
462 +psql $DATABASE_URL -c "SELECT commit_sha, status, components_count, critical_count, high_count FROM sbom_reports ORDER BY created_at DESC LIMIT 10;"
463 +</code></pre>
464 +<hr>
465 +<h2 id="5-checklist-récapitulative"><a class="header" href="#5-checklist-récapitulative">5. Checklist récapitulative</a></h2>
466 +<p><strong>CI :</strong></p>
467 +<ul>
468 +<li><input disabled="" type="checkbox"> Docker + Dagger installés sur le serveur de build (<code>setup-remote-ci.sh</code>)</li>
469 +<li><input disabled="" type="checkbox"> <code>CI_ENABLED=true</code> et <code>CI_REMOTE_*</code> dans <code>.env</code></li>
470 +<li><input disabled="" type="checkbox"> Gitrust redémarré</li>
471 +<li><input disabled="" type="checkbox"> CI activée dans Settings → CI pour chaque dépôt</li>
472 +<li><input disabled="" type="checkbox"> Fichier <code>.gitrust-ci.yml</code> (Easy) ou <code>.dagger/</code> (Power) commité</li>
473 +<li><input disabled="" type="checkbox"> Push → pipeline visible dans l’onglet CI</li>
474 +</ul>
475 +<p><strong>Dependency Tracker :</strong></p>
476 +<ul>
477 +<li><input disabled="" type="checkbox"> Syft installé sur la machine Gitrust</li>
478 +<li><input disabled="" type="checkbox"> <code>CI_SBOM_ENABLED=true</code> dans <code>.env</code></li>
479 +<li><input disabled="" type="checkbox"> (Optionnel) Dependency-Track déployé + API key créée avec les 4 permissions</li>
480 +<li><input disabled="" type="checkbox"> (Optionnel) <code>CI_DTRACK_ENABLED=true</code>, <code>CI_DTRACK_URL</code>, <code>CI_DTRACK_API_KEY</code> dans <code>.env</code></li>
481 +<li><input disabled="" type="checkbox"> Gitrust redémarré</li>
482 +<li><input disabled="" type="checkbox"> Push → SBOM visible dans l’onglet Security</li>
483 +</ul>
484 +
485 + </main>
486 +
487 + <nav class="nav-wrapper" aria-label="Page navigation">
488 + <!-- Mobile navigation buttons -->
489 + <a rel="prev" href="../../administration_manual/how-to/configurer-ci-runner-remote.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
490 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
491 + </a>
492 +
493 + <a rel="next prefetch" href="../../administration_manual/how-to/durcir-avec-fail2ban.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
494 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
495 + </a>
496 +
497 + <div style="clear: both"></div>
498 + </nav>
499 + </div>
500 + </div>
501 +
502 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
503 + <a rel="prev" href="../../administration_manual/how-to/configurer-ci-runner-remote.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
504 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
505 + </a>
506 +
507 + <a rel="next prefetch" href="../../administration_manual/how-to/durcir-avec-fail2ban.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
508 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
509 + </a>
510 + </nav>
511 +
512 + </div>
513 +
514 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
515 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
516 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
517 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
518 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
519 +
520 +
521 +
522 + <script>
523 + window.playground_copyable = true;
524 + </script>
525 +
526 +
527 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
528 + <script src="../../mark-09e88c2c.min.js"></script>
529 + <script src="../../searcher-c2a407aa.js"></script>
530 +
531 + <script src="../../clipboard-1626706a.min.js"></script>
532 + <script src="../../highlight-abc7f01d.js"></script>
533 + <script src="../../book-a0b12cfe.js"></script>
534 +
535 + <!-- Custom JS scripts -->
536 + <script src="../../theme/mermaid-eefea253.min.js"></script>
537 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
538 +
539 +
540 +
541 + </div>
542 + </body>
543 +</html>
A book/administration_manual/how-to/mettre-a-jour.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Mettre à jour gitrust - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/mettre-a-jour.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="mettre-à-jour-gitrust"><a class="header" href="#mettre-à-jour-gitrust">Mettre à jour gitrust</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/how-to/sauvegarder-restaurer.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/how-to/configurer-smtp.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/how-to/sauvegarder-restaurer.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/how-to/configurer-smtp.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/how-to/sauvegarder-restaurer.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Sauvegarder et restaurer - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/sauvegarder-restaurer.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="sauvegarder-et-restaurer"><a class="header" href="#sauvegarder-et-restaurer">Sauvegarder et restaurer</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/how-to/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/how-to/mettre-a-jour.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/how-to/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/how-to/mettre-a-jour.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/how-to/tuner-rate-limiting.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Régler le rate limiting - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/how-to/tuner-rate-limiting.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="régler-le-rate-limiting"><a class="header" href="#régler-le-rate-limiting">Régler le rate limiting</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/how-to/durcir-avec-fail2ban.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/how-to/forcer-2fa-globalement.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/how-to/durcir-avec-fail2ban.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/how-to/forcer-2fa-globalement.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/index.html
+303 -0
@@ -0,0 +1,303 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Vue d&#x27;ensemble - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="manuel-dadministration"><a class="header" href="#manuel-dadministration">Manuel d’administration</a></h1>
181 +<p>Ce manuel s’adresse aux opérateurs et self-hosters qui déploient, configurent et maintiennent une instance gitrust en production. Il couvre l’intégralité du cycle de vie d’une instance : premier démarrage, mise en production, sauvegarde, mise à jour et dépannage. Il suppose des connaissances en administration Linux, en réseau et en TLS — il n’explique pas ces prérequis.</p>
182 +<h2 id="parcours-dapprentissage"><a class="header" href="#parcours-dapprentissage">Parcours d’apprentissage</a></h2>
183 +<p>Le parcours administrateur est structuré en 4 tutoriels qui représentent environ 3 heures au total. L’étayage est dégressif : le premier tutoriel fournit tout clé en main, le dernier demande de composer soi-même à partir des recettes disponibles.</p>
184 +<pre class="mermaid">graph LR
185 + A[VM prête&lt;br/&gt;Docker installé] --&gt; B[01-installation-docker&lt;br/&gt;30 min]
186 + B --&gt; C[02-installation-systemd&lt;br/&gt;45 min]
187 + C --&gt; D[03-premier-demarrage&lt;br/&gt;20 min]
188 + D --&gt; E[04-mise-en-production&lt;br/&gt;90 min]
189 + E --&gt; F[Admin opérationnel]
190 +</pre>
191 +
192 +<blockquote>
193 +<p><strong>Checkpoint de parcours</strong> : avant de passer au tutoriel 02, vous devez avoir une instance gitrust accessible sur <code>http://localhost:4000</code> avec un compte administrateur fonctionnel. Si ce n’est pas le cas, relisez le tutoriel 01.</p>
194 +</blockquote>
195 +<blockquote>
196 +<p><strong>Checkpoint de parcours</strong> : avant le tutoriel 04, vous devez avoir une instance démarrée avec une configuration SMTP et un reverse-proxy TLS opérationnel. Si ce n’est pas le cas, relisez le tutoriel 03.</p>
197 +</blockquote>
198 +<hr>
199 +<h2 id="tutoriels--apprendre-en-faisant"><a class="header" href="#tutoriels--apprendre-en-faisant">Tutoriels — apprendre en faisant</a></h2>
200 +<p>Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suivez-les dans l’ordre — chacun suppose le précédent complété.</p>
201 +<ul>
202 +<li><a href="tutorials/01-installation-docker.html">01 — Installation Docker : stack docker-compose complète</a> — ~30 min</li>
203 +<li><a href="tutorials/02-installation-systemd.html">02 — Installation systemd : binaire natif + service</a> — ~45 min</li>
204 +<li><a href="tutorials/03-premier-demarrage.html">03 — Premier démarrage : admin bootstrap, migrations</a> — ~20 min</li>
205 +<li><a href="tutorials/04-mise-en-production-192-168.html">04 — Mise en production</a> — ~90 min</li>
206 +</ul>
207 +<hr>
208 +<h2 id="how-to--recettes-pour-les-tâches-courantes"><a class="header" href="#how-to--recettes-pour-les-tâches-courantes">How-to — recettes pour les tâches courantes</a></h2>
209 +<p>Les how-to répondent à « comment faire X » sans explication de fond. Consultez-les dans n’importe quel ordre selon votre besoin.</p>
210 +<ul>
211 +<li><a href="how-to/sauvegarder-restaurer.html">Sauvegarder et restaurer</a></li>
212 +<li><a href="how-to/mettre-a-jour.html">Mettre à jour l’instance</a></li>
213 +<li><a href="how-to/configurer-smtp.html">Configurer SMTP</a></li>
214 +<li><a href="how-to/configurer-oauth.html">Configurer OAuth (Google, GitHub)</a></li>
215 +<li><a href="how-to/configurer-ci-runner-remote.html">Configurer un CI runner distant</a></li>
216 +<li><a href="how-to/integrer-dependency-track.html">Intégrer Dependency-Track (SBOM)</a></li>
217 +<li><a href="how-to/durcir-avec-fail2ban.html">Durcir avec Fail2ban</a></li>
218 +<li><a href="how-to/tuner-rate-limiting.html">Tuner le rate limiting</a></li>
219 +<li><a href="how-to/forcer-2fa-globalement.html">Forcer la 2FA globalement</a></li>
220 +<li><a href="how-to/depanner-ssh.html">Dépanner SSH</a></li>
221 +<li><a href="how-to/depanner-ci.html">Dépanner la CI</a></li>
222 +<li><a href="how-to/gerer-utilisateurs-admin.html">Gérer les utilisateurs depuis /admin</a></li>
223 +<li><a href="how-to/auditer-instance.html">Auditer l’instance</a></li>
224 +</ul>
225 +<hr>
226 +<h2 id="référence--informations-techniques-exactes"><a class="header" href="#référence--informations-techniques-exactes">Référence — informations techniques exactes</a></h2>
227 +<p>La référence documente de façon exhaustive les paramètres, schémas et comportements. Elle est destinée à la consultation ponctuelle.</p>
228 +<ul>
229 +<li><a href="reference/variables-environnement.html">Variables d’environnement (.env)</a></li>
230 +<li><a href="reference/parametres-dynamiques.html">Paramètres dynamiques (app_settings)</a></li>
231 +<li><a href="reference/schema-base-de-donnees.html">Schéma de base de données</a></li>
232 +<li><a href="reference/ports-et-services.html">Ports et services (4000 HTTP, 2222 SSH, 5432 PG)</a></li>
233 +<li><a href="reference/conformite-anssi-pa074.html">Conformité ANSSI PA-074</a></li>
234 +</ul>
235 +<hr>
236 +<h2 id="explication--comprendre-le-pourquoi"><a class="header" href="#explication--comprendre-le-pourquoi">Explication — comprendre le pourquoi</a></h2>
237 +<p>Les explanations construisent les modèles mentaux nécessaires pour prendre de bonnes décisions d’exploitation. Lisez-les quand vous voulez comprendre les choix d’architecture, pas seulement les appliquer.</p>
238 +<ul>
239 +<li><a href="explanation/architecture-globale.html">Architecture globale de gitrust</a></li>
240 +<li><a href="explanation/modele-deploiement.html">Modèle de déploiement : mono-machine vs HA</a></li>
241 +<li><a href="explanation/ci-dagger.html">CI Dagger : pourquoi et comment</a></li>
242 +<li><a href="explanation/strategie-sauvegarde.html">Stratégie de sauvegarde 3-2-1 adaptée gitrust</a></li>
243 +</ul>
244 +
245 + </main>
246 +
247 + <nav class="nav-wrapper" aria-label="Page navigation">
248 + <!-- Mobile navigation buttons -->
249 + <a rel="prev" href="../user_manual/explanation/cycle-vie-pull-request.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
250 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
251 + </a>
252 +
253 + <a rel="next prefetch" href="../administration_manual/tutorials/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
254 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
255 + </a>
256 +
257 + <div style="clear: both"></div>
258 + </nav>
259 + </div>
260 + </div>
261 +
262 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
263 + <a rel="prev" href="../user_manual/explanation/cycle-vie-pull-request.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
264 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
265 + </a>
266 +
267 + <a rel="next prefetch" href="../administration_manual/tutorials/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
268 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
269 + </a>
270 + </nav>
271 +
272 + </div>
273 +
274 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
275 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
276 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
277 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
278 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
279 +
280 +
281 +
282 + <script>
283 + window.playground_copyable = true;
284 + </script>
285 +
286 +
287 + <script src="../elasticlunr-ef4e11c1.min.js"></script>
288 + <script src="../mark-09e88c2c.min.js"></script>
289 + <script src="../searcher-c2a407aa.js"></script>
290 +
291 + <script src="../clipboard-1626706a.min.js"></script>
292 + <script src="../highlight-abc7f01d.js"></script>
293 + <script src="../book-a0b12cfe.js"></script>
294 +
295 + <!-- Custom JS scripts -->
296 + <script src="../theme/mermaid-eefea253.min.js"></script>
297 + <script src="../theme/mermaid-init-ccf746f1.js"></script>
298 +
299 +
300 +
301 + </div>
302 + </body>
303 +</html>
A book/administration_manual/reference/conformite-anssi-pa074.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Conformité ANSSI PA-074 - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/reference/conformite-anssi-pa074.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="conformité-anssi-pa-074"><a class="header" href="#conformité-anssi-pa-074">Conformité ANSSI PA-074</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/reference/ports-et-services.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/explanation/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/reference/ports-et-services.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/explanation/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/reference/index.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Référence - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/reference/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="référence"><a class="header" href="#référence">Référence</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/how-to/auditer-instance.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/reference/variables-environnement.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/how-to/auditer-instance.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/reference/variables-environnement.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/reference/parametres-dynamiques.html
+527 -0
@@ -0,0 +1,527 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Paramètres dynamiques - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/reference/parametres-dynamiques.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="paramètres-dynamiques"><a class="header" href="#paramètres-dynamiques">Paramètres dynamiques</a></h1>
181 +<p>Ce document explique comment fonctionne la configuration de la plateforme, les deux mécanismes en jeu, leur précédence, et les pièges à connaître.</p>
182 +<hr>
183 +<h2 id="vue-densemble--deux-systèmes-distincts"><a class="header" href="#vue-densemble--deux-systèmes-distincts">Vue d’ensemble : deux systèmes distincts</a></h2>
184 +<p>Gitrust utilise <strong>deux systèmes de configuration</strong> indépendants :</p>
185 +<div class="table-wrapper">
186 +<table>
187 +<thead>
188 +<tr><th>Système</th><th>Source</th><th style="text-align: center">Modifiable à chaud</th><th style="text-align: center">Visible dans l’UI admin</th></tr>
189 +</thead>
190 +<tbody>
191 +<tr><td><strong>Configuration statique</strong></td><td>Fichier <code>.env</code> + variables d’environnement</td><td style="text-align: center">Non (restart requis)</td><td style="text-align: center">Non</td></tr>
192 +<tr><td><strong>Configuration dynamique</strong></td><td>Table <code>app_settings</code> (PostgreSQL)</td><td style="text-align: center">Oui (effet immédiat)</td><td style="text-align: center">Oui (<code>/admin/settings</code>)</td></tr>
193 +</tbody>
194 +</table>
195 +</div>
196 +<p>Il existe un <strong>cas hybride</strong> pour OAuth (DB prioritaire, <code>.env</code> en fallback).</p>
197 +<hr>
198 +<h2 id="1-configuration-statique-env"><a class="header" href="#1-configuration-statique-env">1. Configuration statique (<code>.env</code>)</a></h2>
199 +<h3 id="principe"><a class="header" href="#principe">Principe</a></h3>
200 +<p>Les variables d’environnement sont chargées <strong>une seule fois au démarrage</strong> par <code>dotenvy::dotenv()</code> et stockées dans des structs Rust immuables. Elles ne sont jamais relues après le boot.</p>
201 +<h3 id="fichiers-de-référence"><a class="header" href="#fichiers-de-référence">Fichiers de référence</a></h3>
202 +<div class="table-wrapper">
203 +<table>
204 +<thead>
205 +<tr><th>Fichier</th><th>Rôle</th></tr>
206 +</thead>
207 +<tbody>
208 +<tr><td><code>.env.example</code></td><td>Template documenté avec toutes les variables</td></tr>
209 +<tr><td><code>.env</code></td><td>Configuration locale (gitignore)</td></tr>
210 +<tr><td><code>.env.production</code></td><td>Configuration de déploiement</td></tr>
211 +<tr><td><code>.env.test</code></td><td>Configuration de tests</td></tr>
212 +</tbody>
213 +</table>
214 +</div>
215 +<h3 id="structs-de-chargement"><a class="header" href="#structs-de-chargement">Structs de chargement</a></h3>
216 +<div class="table-wrapper">
217 +<table>
218 +<thead>
219 +<tr><th>Struct</th><th>Variables concernées</th></tr>
220 +</thead>
221 +<tbody>
222 +<tr><td><code>GitrustConfig</code></td><td><code>GIT_REPOS_BASE_PATH</code>, <code>SSH_PORT</code>, <code>SSH_LISTEN_ADDR</code>, <code>SSH_HOST_KEY_PATH</code>, <code>CI_*</code>, <code>IMPORT_*</code></td></tr>
223 +<tr><td><code>AppConfig</code></td><td><code>APP_NAME</code>, <code>APP_THEME</code>, <code>APP_DEBUG</code></td></tr>
224 +<tr><td><code>AuthConfig</code></td><td><code>JWT_SECRET</code>, <code>JWT_EXPIRATION_MINUTES</code>, <code>SESSION_*</code>, <code>RATE_LIMIT_*</code>, <code>COOKIE_*</code></td></tr>
225 +<tr><td><code>EmailConfig</code></td><td><code>SMTP_*</code>, <code>EMAIL_*</code>, <code>IMAP_*</code></td></tr>
226 +</tbody>
227 +</table>
228 +</div>
229 +<h3 id="comportement"><a class="header" href="#comportement">Comportement</a></h3>
230 +<ul>
231 +<li>Chargées dans <code>RustwardenApp::build()</code> au démarrage</li>
232 +<li>Stockées dans des <code>Arc&lt;Config&gt;</code> partagés via l’état axum</li>
233 +<li><strong>Modifier le <code>.env</code> sans redémarrer n’a aucun effet</strong></li>
234 +<li><strong>Ces variables ne sont PAS affichées dans l’interface admin</strong></li>
235 +</ul>
236 +<h3 id="liste-des-variables-statiques-non-exhaustive"><a class="header" href="#liste-des-variables-statiques-non-exhaustive">Liste des variables statiques (non exhaustive)</a></h3>
237 +<pre><code>DATABASE_URL, SERVER_HOST, SERVER_PORT, RUST_LOG,
238 +SSH_HOST_KEY_PATH, SSH_PORT, SSH_LISTEN_ADDR, SSH_PUBLIC_HOST,
239 +JWT_SECRET, JWT_EXPIRATION_MINUTES, JWT_ISSUER,
240 +REFRESH_TOKEN_EXPIRATION_DAYS, REMEMBER_ME_EXPIRATION_DAYS,
241 +SESSION_TIMEOUT_MINUTES, SESSION_BACKEND,
242 +RATE_LIMIT_LOGIN_PER_MINUTE, RATE_LIMIT_REFRESH_PER_MINUTE,
243 +RATE_LIMIT_GENERAL_PER_MINUTE,
244 +APP_DEBUG, COOKIE_SECURE, COOKIE_SAME_SITE,
245 +ADMIN_USERNAME, ADMIN_EMAIL, ADMIN_PASSWORD,
246 +SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, SMTP_FROM,
247 +EMAIL_BASE_URL, EMAIL_QUEUE_*,
248 +APP_NAME, APP_THEME, DEFAULT_LOCALE,
249 +GIT_REPOS_BASE_PATH,
250 +CI_ENABLED, CI_MAX_CONCURRENT, CI_REMOTE_HOST, CI_WORKSPACE_PATH
251 +</code></pre>
252 +<hr>
253 +<h2 id="2-configuration-dynamique-table-app_settings"><a class="header" href="#2-configuration-dynamique-table-app_settings">2. Configuration dynamique (table <code>app_settings</code>)</a></h2>
254 +<h3 id="principe-1"><a class="header" href="#principe-1">Principe</a></h3>
255 +<p>Les réglages dynamiques sont stockés en base PostgreSQL dans la table <code>app_settings</code> et lus <strong>à chaque requête</strong> via <code>AppSettingsService</code>. Ils sont modifiables à chaud par un administrateur depuis l’interface <code>/admin/settings</code>.</p>
256 +<h3 id="schéma-de-la-table"><a class="header" href="#schéma-de-la-table">Schéma de la table</a></h3>
257 +<pre><code class="language-sql">CREATE TABLE app_settings (
258 + id UUID PRIMARY KEY,
259 + key VARCHAR(100) UNIQUE NOT NULL,
260 + value TEXT NOT NULL,
261 + description TEXT,
262 + updated_by UUID REFERENCES users(id) ON DELETE SET NULL,
263 + updated_at TIMESTAMPTZ NOT NULL
264 +);
265 +</code></pre>
266 +<h3 id="initialisation-au-démarrage"><a class="header" href="#initialisation-au-démarrage">Initialisation au démarrage</a></h3>
267 +<p>Au boot, <code>AppSettingsService::initialize_default_settings()</code> crée les réglages par défaut <strong>uniquement s’ils n’existent pas encore en base</strong> :</p>
268 +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
269 +</span><span class="boring">fn main() {
270 +</span>let existing = Self::get_setting(db, key).await?;
271 +if existing.is_none() {
272 + // ... insert valeur par défaut
273 +}
274 +<span class="boring">}</span></code></pre>
275 +<p><strong>Conséquence critique</strong> : une fois qu’un réglage existe en base (créé au premier démarrage ou modifié via l’UI), il n’est <strong>jamais écrasé</strong> par un redémarrage ultérieur.</p>
276 +<h3 id="liste-des-réglages-dynamiques-et-leurs-valeurs-par-défaut"><a class="header" href="#liste-des-réglages-dynamiques-et-leurs-valeurs-par-défaut">Liste des réglages dynamiques et leurs valeurs par défaut</a></h3>
277 +<div class="table-wrapper">
278 +<table>
279 +<thead>
280 +<tr><th>Clé</th><th>Défaut</th><th>Description</th></tr>
281 +</thead>
282 +<tbody>
283 +<tr><td><code>app_domain</code></td><td><code>env::var("APP_DOMAIN")</code> ou <code>"localhost"</code></td><td>Domaine de l’application</td></tr>
284 +<tr><td><code>allow_registration</code></td><td><code>false</code></td><td>Autoriser l’inscription publique</td></tr>
285 +<tr><td><code>validation_email_required</code></td><td><code>true</code></td><td>Exiger la validation email</td></tr>
286 +<tr><td><code>audit_log_level</code></td><td><code>INFO</code></td><td>Niveau de log d’audit</td></tr>
287 +<tr><td><code>audit_log_actions</code></td><td><code>["create","update","delete","reset_password"]</code></td><td>Actions auditées</td></tr>
288 +<tr><td><code>password_min_length</code></td><td><code>8</code></td><td>Longueur minimum mot de passe</td></tr>
289 +<tr><td><code>password_require_uppercase</code></td><td><code>false</code></td><td>Exiger des majuscules</td></tr>
290 +<tr><td><code>password_require_lowercase</code></td><td><code>false</code></td><td>Exiger des minuscules</td></tr>
291 +<tr><td><code>password_require_digits</code></td><td><code>false</code></td><td>Exiger des chiffres</td></tr>
292 +<tr><td><code>password_require_special</code></td><td><code>false</code></td><td>Exiger des caractères spéciaux</td></tr>
293 +<tr><td><code>password_change_require_email</code></td><td><code>true</code></td><td>Confirmation email pour changement mdp</td></tr>
294 +<tr><td><code>password_expiration_enabled</code></td><td><code>false</code></td><td>Activer l’expiration des mots de passe</td></tr>
295 +<tr><td><code>password_expiration_days</code></td><td><code>0</code></td><td>Durée d’expiration (jours)</td></tr>
296 +<tr><td><code>password_expiration_alert_enabled</code></td><td><code>false</code></td><td>Alerte email avant expiration</td></tr>
297 +<tr><td><code>password_expiration_alert_days_before</code></td><td><code>7</code></td><td>Jours avant expiration pour alerter</td></tr>
298 +<tr><td><code>oauth_enabled</code></td><td><code>false</code></td><td>Activer OAuth/SSO</td></tr>
299 +<tr><td><code>oauth_google_enabled</code></td><td><code>false</code></td><td>Activer Google OAuth</td></tr>
300 +<tr><td><code>oauth_github_enabled</code></td><td><code>false</code></td><td>Activer GitHub OAuth</td></tr>
301 +<tr><td><code>oauth_discord_enabled</code></td><td><code>false</code></td><td>Activer Discord OAuth</td></tr>
302 +<tr><td><code>oauth_microsoft_enabled</code></td><td><code>false</code></td><td>Activer Microsoft OAuth</td></tr>
303 +<tr><td><code>oauth_redirect_base_url</code></td><td><code>""</code></td><td>URL de base pour les callbacks OAuth</td></tr>
304 +<tr><td><code>oauth_auto_register</code></td><td><code>true</code></td><td>Créer un compte auto au premier login OAuth</td></tr>
305 +<tr><td><code>oauth_link_existing_account</code></td><td><code>true</code></td><td>Lier un compte OAuth à un utilisateur existant</td></tr>
306 +<tr><td><code>oauth_{provider}_client_id</code></td><td><code>""</code></td><td>Client ID du provider OAuth</td></tr>
307 +<tr><td><code>oauth_{provider}_client_secret</code></td><td><code>""</code></td><td>Client secret (chiffré AES-256-GCM en base)</td></tr>
308 +<tr><td><code>oauth_microsoft_tenant</code></td><td><code>""</code></td><td>Tenant Azure AD</td></tr>
309 +</tbody>
310 +</table>
311 +</div>
312 +<hr>
313 +<h2 id="3-cas-hybride--oauth"><a class="header" href="#3-cas-hybride--oauth">3. Cas hybride : OAuth</a></h2>
314 +<p>OAuth est le <strong>seul sous-système</strong> qui combine les deux sources. La logique dans <code>OAuthConfig::load()</code> :</p>
315 +<pre><code>Pour chaque réglage OAuth :
316 + 1. Chercher dans app_settings (DB)
317 + → si trouvé et non vide : utiliser cette valeur
318 + 2. Sinon : fallback sur la variable d'environnement
319 + → si absente : utiliser la valeur par défaut codée en dur
320 +</code></pre>
321 +<p><strong>Important</strong> : <code>OAuthConfig::load()</code> est appelé au démarrage. Le résultat est stocké dans un <code>Arc</code> et n’est pas relu dynamiquement. Donc :</p>
322 +<ul>
323 +<li>Modifier un réglage OAuth <strong>via l’UI admin</strong> nécessite un <strong>redémarrage</strong> pour que <code>OAuthConfig</code> soit rechargé</li>
324 +<li>Le <code>.env</code> n’est qu’un fallback si la DB n’a pas de valeur</li>
325 +</ul>
326 +<hr>
327 +<h2 id="4-précédence-et-comportement-au-redémarrage"><a class="header" href="#4-précédence-et-comportement-au-redémarrage">4. Précédence et comportement au redémarrage</a></h2>
328 +<h3 id="réglages-statiques-env-uniquement"><a class="header" href="#réglages-statiques-env-uniquement">Réglages statiques (<code>.env</code> uniquement)</a></h3>
329 +<div class="table-wrapper">
330 +<table>
331 +<thead>
332 +<tr><th>Action</th><th style="text-align: center">Effet immédiat</th><th style="text-align: center">Après restart</th></tr>
333 +</thead>
334 +<tbody>
335 +<tr><td>Modifier <code>.env</code></td><td style="text-align: center">Non</td><td style="text-align: center">Oui</td></tr>
336 +</tbody>
337 +</table>
338 +</div>
339 +<h3 id="réglages-dynamiques-db-uniquement"><a class="header" href="#réglages-dynamiques-db-uniquement">Réglages dynamiques (DB uniquement)</a></h3>
340 +<div class="table-wrapper">
341 +<table>
342 +<thead>
343 +<tr><th>Action</th><th style="text-align: center">Effet immédiat</th><th style="text-align: center">Après restart</th></tr>
344 +</thead>
345 +<tbody>
346 +<tr><td>Modifier via UI admin</td><td style="text-align: center">Oui</td><td style="text-align: center">Oui (valeur en DB persiste)</td></tr>
347 +<tr><td>Modifier le <code>.env</code></td><td style="text-align: center">Aucun effet</td><td style="text-align: center">Aucun effet</td></tr>
348 +</tbody>
349 +</table>
350 +</div>
351 +<h3 id="réglages-hybrides-oauth"><a class="header" href="#réglages-hybrides-oauth">Réglages hybrides (OAuth)</a></h3>
352 +<div class="table-wrapper">
353 +<table>
354 +<thead>
355 +<tr><th>Action</th><th style="text-align: center">Effet immédiat</th><th style="text-align: center">Après restart</th></tr>
356 +</thead>
357 +<tbody>
358 +<tr><td>Modifier via UI admin</td><td style="text-align: center">Non (OAuthConfig est en Arc)</td><td style="text-align: center">Oui (DB prime sur .env)</td></tr>
359 +<tr><td>Modifier <code>.env</code></td><td style="text-align: center">Non</td><td style="text-align: center">Seulement si aucune valeur en DB</td></tr>
360 +</tbody>
361 +</table>
362 +</div>
363 +<hr>
364 +<h2 id="5-piège-principal--les-variables-env-fantômes"><a class="header" href="#5-piège-principal--les-variables-env-fantômes">5. Piège principal : les variables <code>.env</code> fantômes</a></h2>
365 +<p>Certaines variables présentes dans <code>.env.example</code> donnent l’<strong>illusion</strong> de configurer des réglages qui sont en réalité gérés par la base de données :</p>
366 +<div class="table-wrapper">
367 +<table>
368 +<thead>
369 +<tr><th>Variable <code>.env</code></th><th>Réglage DB correspondant</th><th style="text-align: center">La variable <code>.env</code> est-elle lue ?</th></tr>
370 +</thead>
371 +<tbody>
372 +<tr><td><code>ALLOW_REGISTRATION=true</code></td><td><code>allow_registration</code></td><td style="text-align: center"><strong>Non</strong> — valeur par défaut codée en dur (<code>"false"</code>)</td></tr>
373 +<tr><td><code>EMAIL_VALIDATION_REQUIRED=true</code></td><td><code>validation_email_required</code></td><td style="text-align: center"><strong>Non</strong> — valeur par défaut codée en dur (<code>"true"</code>)</td></tr>
374 +<tr><td><code>OAUTH_ENABLED=true</code></td><td><code>oauth_enabled</code></td><td style="text-align: center">Oui, mais <strong>seulement en fallback</strong> si la DB n’a pas de valeur</td></tr>
375 +</tbody>
376 +</table>
377 +</div>
378 +<p>Pour <code>ALLOW_REGISTRATION</code> et <code>EMAIL_VALIDATION_REQUIRED</code> :</p>
379 +<ul>
380 +<li>La variable <code>.env</code> est documentée dans <code>.env.example</code> mais <strong>n’est jamais consultée</strong> par <code>initialize_default_settings()</code></li>
381 +<li>La valeur initiale est <strong>codée en dur</strong> dans le service</li>
382 +<li>Seule la valeur en base de données (modifiable via <code>/admin/settings</code>) fait foi</li>
383 +</ul>
384 +<p>Pour <code>app_domain</code>, c’est le seul réglage dynamique qui lit le <code>.env</code> comme seed initial.</p>
385 +<hr>
386 +<h2 id="6-diagramme-de-décision"><a class="header" href="#6-diagramme-de-décision">6. Diagramme de décision</a></h2>
387 +<pre><code> ┌─────────────────────────────┐
388 + │ Quel type de réglage ? │
389 + └──────────┬──────────────────-┘
390 + │
391 + ┌────────────────┼────────────────┐
392 + ▼ ▼ ▼
393 + Infrastructure Fonctionnel OAuth
394 + (port, JWT, SMTP) (inscription, (providers,
395 + mots de passe) secrets)
396 + │ │ │
397 + ▼ ▼ ▼
398 + .env seul DB seule DB + fallback .env
399 + │ │ │
400 + ▼ ▼ ▼
401 + Restart requis Effet immédiat Restart requis
402 + via /admin/ (OAuthConfig en Arc)
403 + settings
404 +</code></pre>
405 +<hr>
406 +<h2 id="7-guide-pour-les-administrateurs"><a class="header" href="#7-guide-pour-les-administrateurs">7. Guide pour les administrateurs</a></h2>
407 +<h3 id="modifier-un-réglage-dinfrastructure"><a class="header" href="#modifier-un-réglage-dinfrastructure">Modifier un réglage d’infrastructure</a></h3>
408 +<p>Éditer <code>.env</code> (ou <code>.env.production</code>) puis redémarrer le service :</p>
409 +<pre><code class="language-bash"># Éditer
410 +vim .env
411 +
412 +# Redémarrer
413 +systemctl restart gitrust # production
414 +# ou Ctrl+C + cargo run # dev
415 +</code></pre>
416 +<h3 id="modifier-un-réglage-fonctionnel"><a class="header" href="#modifier-un-réglage-fonctionnel">Modifier un réglage fonctionnel</a></h3>
417 +<p>Se connecter en tant qu’administrateur, aller dans <code>/admin/settings</code>, modifier la valeur, et cliquer “Save”. L’effet est <strong>immédiat</strong>, aucun redémarrage nécessaire.</p>
418 +<h3 id="modifier-un-réglage-oauth"><a class="header" href="#modifier-un-réglage-oauth">Modifier un réglage OAuth</a></h3>
419 +<p>Via <code>/admin/settings</code>, modifier les valeurs OAuth puis <strong>redémarrer le service</strong> (la config OAuth est chargée en mémoire au boot et n’est pas relue dynamiquement).</p>
420 +<h3 id="vérifier-la-valeur-effective-dun-réglage"><a class="header" href="#vérifier-la-valeur-effective-dun-réglage">Vérifier la valeur effective d’un réglage</a></h3>
421 +<p>Pour les réglages dynamiques, interroger la base directement :</p>
422 +<pre><code class="language-sql">SELECT key, value, updated_at, updated_by
423 +FROM app_settings
424 +WHERE key = 'allow_registration';
425 +</code></pre>
426 +<p>Pour les réglages statiques, vérifier les logs au démarrage (<code>RUST_LOG=debug</code>).</p>
427 +<hr>
428 +<h2 id="8-guide-pour-les-développeurs"><a class="header" href="#8-guide-pour-les-développeurs">8. Guide pour les développeurs</a></h2>
429 +<h3 id="ajouter-un-nouveau-réglage-dynamique"><a class="header" href="#ajouter-un-nouveau-réglage-dynamique">Ajouter un nouveau réglage dynamique</a></h3>
430 +<ol>
431 +<li>
432 +<p>Ajouter le tuple <code>(clé, valeur_défaut, description)</code> dans <code>AppSettingsService::initialize_default_settings()</code> :</p>
433 +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
434 +</span><span class="boring">fn main() {
435 +</span>("ma_nouvelle_cle", "valeur_par_defaut", Some("Description pour l'UI admin")),
436 +<span class="boring">}</span></code></pre>
437 +</li>
438 +<li>
439 +<p>Lire la valeur dans le code via le service :</p>
440 +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
441 +</span><span class="boring">fn main() {
442 +</span>// Boolean avec défaut
443 +let enabled = AppSettingsService::get_bool(&amp;db, "ma_nouvelle_cle", false).await?;
444 +
445 +// String
446 +let val = AppSettingsService::get_setting(&amp;db, "ma_nouvelle_cle").await?;
447 +<span class="boring">}</span></code></pre>
448 +</li>
449 +<li>
450 +<p>La valeur apparaîtra automatiquement dans <code>/admin/settings</code>.</p>
451 +</li>
452 +</ol>
453 +<h3 id="ajouter-un-nouveau-réglage-statique"><a class="header" href="#ajouter-un-nouveau-réglage-statique">Ajouter un nouveau réglage statique</a></h3>
454 +<ol>
455 +<li>Ajouter la variable dans <code>.env.example</code> avec documentation complète</li>
456 +<li>Lire la variable dans le struct <code>Config</code> correspondant via <code>env::var()</code></li>
457 +<li>La valeur ne sera <strong>pas</strong> visible dans l’interface admin</li>
458 +</ol>
459 +<h3 id="ajouter-un-réglage-hybride-db--fallback-env"><a class="header" href="#ajouter-un-réglage-hybride-db--fallback-env">Ajouter un réglage hybride (DB + fallback .env)</a></h3>
460 +<p>Suivre le pattern OAuth dans <code>crates/rustwarden-core/src/config/oauth.rs</code> :</p>
461 +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
462 +</span><span class="boring">fn main() {
463 +</span>let ma_valeur = match db_val("ma_cle").await {
464 + Some(v) =&gt; v,
465 + None =&gt; env::var("MA_CLE").unwrap_or_else(|_| "defaut".to_string()),
466 +};
467 +<span class="boring">}</span></code></pre>
468 +
469 + </main>
470 +
471 + <nav class="nav-wrapper" aria-label="Page navigation">
472 + <!-- Mobile navigation buttons -->
473 + <a rel="prev" href="../../administration_manual/reference/variables-environnement.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
474 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
475 + </a>
476 +
477 + <a rel="next prefetch" href="../../administration_manual/reference/schema-base-de-donnees.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
478 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
479 + </a>
480 +
481 + <div style="clear: both"></div>
482 + </nav>
483 + </div>
484 + </div>
485 +
486 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
487 + <a rel="prev" href="../../administration_manual/reference/variables-environnement.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
488 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
489 + </a>
490 +
491 + <a rel="next prefetch" href="../../administration_manual/reference/schema-base-de-donnees.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
492 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
493 + </a>
494 + </nav>
495 +
496 + </div>
497 +
498 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
499 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
500 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
501 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
502 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
503 +
504 +
505 +
506 + <script>
507 + window.playground_copyable = true;
508 + </script>
509 +
510 +
511 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
512 + <script src="../../mark-09e88c2c.min.js"></script>
513 + <script src="../../searcher-c2a407aa.js"></script>
514 +
515 + <script src="../../clipboard-1626706a.min.js"></script>
516 + <script src="../../highlight-abc7f01d.js"></script>
517 + <script src="../../book-a0b12cfe.js"></script>
518 +
519 + <!-- Custom JS scripts -->
520 + <script src="../../theme/mermaid-eefea253.min.js"></script>
521 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
522 +
523 +
524 +
525 + </div>
526 + </body>
527 +</html>
A book/administration_manual/reference/ports-et-services.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Ports et services - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/reference/ports-et-services.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="ports-et-services"><a class="header" href="#ports-et-services">Ports et services</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/reference/schema-base-de-donnees.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/reference/conformite-anssi-pa074.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/reference/schema-base-de-donnees.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/reference/conformite-anssi-pa074.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/reference/schema-base-de-donnees.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Schéma de la base de données - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/reference/schema-base-de-donnees.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="schéma-de-la-base-de-données"><a class="header" href="#schéma-de-la-base-de-données">Schéma de la base de données</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/reference/parametres-dynamiques.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/reference/ports-et-services.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/reference/parametres-dynamiques.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/reference/ports-et-services.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/reference/variables-environnement.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Variables d&#x27;environnement - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/reference/variables-environnement.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="variables-denvironnement"><a class="header" href="#variables-denvironnement">Variables d’environnement</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/reference/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/reference/parametres-dynamiques.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/reference/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/reference/parametres-dynamiques.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/tutorials/01-installation-docker.html
+488 -0
@@ -0,0 +1,488 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>01 — Installation avec Docker - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/tutorials/01-installation-docker.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="installation-docker--démarrez-gitrust-en-30-minutes-avec-docker-compose"><a class="header" href="#installation-docker--démarrez-gitrust-en-30-minutes-avec-docker-compose">Installation Docker : démarrez gitrust en 30 minutes avec docker-compose</a></h1>
181 +<h2 id="objectifs"><a class="header" href="#objectifs">Objectifs</a></h2>
182 +<p>À la fin de ce tutoriel, vous saurez :</p>
183 +<ul>
184 +<li><strong>O1. Déployer</strong> la stack gitrust minimale (application + PostgreSQL) avec docker-compose</li>
185 +<li><strong>O2. Vérifier</strong> que les trois services démarrent correctement et sont en bonne santé</li>
186 +<li><strong>O3. Créer</strong> le premier compte administrateur et accéder à l’interface web</li>
187 +</ul>
188 +<h2 id="pré-requis"><a class="header" href="#pré-requis">Pré-requis</a></h2>
189 +<ul>
190 +<li><strong>Technique</strong> : une VM ou machine Linux (Debian 12 / Ubuntu 22.04 ou supérieur), Docker Engine ≥ 24 installé (<code>docker --version</code> répond), Docker Compose plugin installé (<code>docker compose version</code> répond), ports 4000 et 2222 libres sur la machine</li>
191 +<li><strong>Pédagogique</strong> : aucun tutoriel gitrust préalable requis — c’est le point de départ du parcours administrateur</li>
192 +<li><strong>Temps estimé</strong> : ~30 minutes</li>
193 +</ul>
194 +<h2 id="vue-densemble"><a class="header" href="#vue-densemble">Vue d’ensemble</a></h2>
195 +<p>Avant de lancer la moindre commande, comprenons ce que docker-compose va orchestrer et pourquoi.</p>
196 +<p>gitrust est composé de <strong>trois services principaux</strong> dans sa configuration minimale. Pensez-y comme trois pièces d’un appartement qui s’appellent entre elles via un réseau interne :</p>
197 +<pre class="mermaid">graph TB
198 + subgraph internet ["Internet / votre navigateur"]
199 + B[Navigateur :4000]
200 + S[Client git/SSH :2222]
201 + end
202 +
203 + subgraph docker ["Réseau Docker gitrust_net"]
204 + A["gitrust-app&lt;br/&gt;(Rust, port 4000 + 2222)&lt;br/&gt;Lit la config depuis .env"]
205 + P["postgres&lt;br/&gt;(PostgreSQL 16, port 5432)&lt;br/&gt;Stocke comptes, dépôts, issues"]
206 + R["redis (optionnel)&lt;br/&gt;(Redis 7, port 6379)&lt;br/&gt;Sessions web + cache"]
207 + end
208 +
209 + B --&gt;|HTTP| A
210 + S --&gt;|SSH| A
211 + A --&gt;|SQL| P
212 + A -.-&gt;|sessions| R
213 +</pre>
214 +
215 +<p><strong>gitrust-app</strong> est le cœur : serveur HTTP (<code>:4000</code>) + serveur SSH (<code>:2222</code>) compilé en Rust. Il lit sa configuration depuis un fichier <code>.env</code> et écrit les dépôts Git bare sur un volume Docker. <strong>PostgreSQL</strong> stocke toutes les données relationnelles (comptes, organisations, dépôts, issues, PRs). <strong>Redis</strong> est optionnel dans la configuration minimale — il gère les sessions web et le cache quand il est présent.</p>
216 +<p>Dans ce tutoriel, nous utilisons la stack <strong>minimale</strong> (app + PostgreSQL) suffisante pour évaluer gitrust et démarrer une petite instance. La stack production avec Redis et SMTP se trouve dans <a href="../../template/docker/docker-compose.production.yml"><code>template/docker/docker-compose.production.yml</code></a>.</p>
217 +<hr>
218 +<h2 id="étape-1--créez-le-répertoire-de-travail-et-le-fichier-de-configuration"><a class="header" href="#étape-1--créez-le-répertoire-de-travail-et-le-fichier-de-configuration">Étape 1 : Créez le répertoire de travail et le fichier de configuration</a></h2>
219 +<p>Créez un répertoire dédié à votre instance gitrust et positionnez-vous dedans :</p>
220 +<pre><code class="language-bash">mkdir -p /opt/gitrust &amp;&amp; cd /opt/gitrust
221 +</code></pre>
222 +<p>Créez le fichier de configuration <code>.env</code> avec les valeurs minimales. <strong>Changez impérativement</strong> les valeurs marquées <code>CHANGE_ME</code> :</p>
223 +<pre><code class="language-bash">cat &gt; .env &lt;&lt; 'EOF'
224 +# === gitrust — configuration minimale ===
225 +# Changez toutes les valeurs CHANGE_ME avant de démarrer
226 +
227 +# Clé secrète de l'application (générez avec : openssl rand -hex 32)
228 +SECRET_KEY=CHANGE_ME_openssl_rand_hex_32
229 +
230 +# URL publique de l'instance (sans slash final)
231 +APP_URL=http://localhost:4000
232 +
233 +# Base de données PostgreSQL
234 +DATABASE_URL=postgres://gitrust:CHANGE_ME_db_password@postgres:5432/gitrust
235 +POSTGRES_USER=gitrust
236 +POSTGRES_PASSWORD=CHANGE_ME_db_password
237 +POSTGRES_DB=gitrust
238 +
239 +# Serveur SSH (port exposé à l'extérieur)
240 +SSH_PORT=2222
241 +
242 +# Mode de l'application
243 +RUST_LOG=info
244 +APP_ENV=production
245 +EOF
246 +</code></pre>
247 +<p>Générez maintenant une clé secrète robuste et remplacez la valeur dans <code>.env</code> :</p>
248 +<pre><code class="language-bash">SECRET=$(openssl rand -hex 32)
249 +sed -i "s/CHANGE_ME_openssl_rand_hex_32/$SECRET/" .env
250 +</code></pre>
251 +<p>Choisissez également un mot de passe pour PostgreSQL et remplacez les deux occurrences :</p>
252 +<pre><code class="language-bash">DB_PASS=$(openssl rand -hex 16)
253 +sed -i "s/CHANGE_ME_db_password/$DB_PASS/g" .env
254 +</code></pre>
255 +<p>Sortie attendue (vérification) :</p>
256 +<pre><code class="language-bash">grep SECRET_KEY .env
257 +# → SECRET_KEY=4a7f2c9e1b8d3f6a0e5c2b9d7f4a1e8c3b6d9f2a5e8c1b4d7f0a3e6c9b2d5f8a
258 +</code></pre>
259 +<p><strong>Checkpoint</strong> : exécutez <code>grep CHANGE_ME .env</code> — la commande doit ne rien retourner. Si elle retourne des lignes, ces valeurs n’ont pas été remplacées et le démarrage échouera.</p>
260 +<hr>
261 +<h2 id="étape-2--créez-le-fichier-docker-composeyml"><a class="header" href="#étape-2--créez-le-fichier-docker-composeyml">Étape 2 : Créez le fichier docker-compose.yml</a></h2>
262 +<p>Créez le fichier <code>docker-compose.yml</code> suivant dans <code>/opt/gitrust/</code>. Ce contenu correspond à la stack minimale gitrust — il est reproduit ici intégralement pour que vous puissiez démarrer sans dépendance externe :</p>
263 +<pre><code class="language-bash">cat &gt; docker-compose.yml &lt;&lt; 'EOF'
264 +# docker-compose.minimal.yml — Stack gitrust minimale (app + PostgreSQL)
265 +# Cas d'usage : évaluation, développement, petite instance (&lt;10 utilisateurs)
266 +# Pour la production : utilisez docker-compose.production.yml (+ Redis + SMTP)
267 +#
268 +# Usage :
269 +# docker compose up -d
270 +# docker compose logs -f gitrust
271 +# docker compose down
272 +
273 +version: "3.9"
274 +
275 +services:
276 + # ── Base de données ───────────────────────────────────────────────────────
277 + postgres:
278 + image: postgres:16-alpine
279 + container_name: gitrust_postgres
280 + restart: unless-stopped
281 + environment:
282 + POSTGRES_USER: ${POSTGRES_USER}
283 + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
284 + POSTGRES_DB: ${POSTGRES_DB}
285 + volumes:
286 + # Données persistantes — ne supprimez pas ce volume sans sauvegarde
287 + - postgres_data:/var/lib/postgresql/data
288 + healthcheck:
289 + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
290 + interval: 10s
291 + timeout: 5s
292 + retries: 5
293 + networks:
294 + - gitrust_net
295 +
296 + # ── Application gitrust ───────────────────────────────────────────────────
297 + gitrust:
298 + image: ghcr.io/gitrust/gitrust:latest
299 + container_name: gitrust_app
300 + restart: unless-stopped
301 + depends_on:
302 + postgres:
303 + condition: service_healthy
304 + env_file:
305 + # Lit toutes les variables depuis .env — ne commitez jamais ce fichier
306 + - .env
307 + ports:
308 + # Interface web — exposée sur toutes les interfaces de la machine hôte
309 + - "4000:4000"
310 + # Serveur SSH Git — exposé sur le port configuré dans .env
311 + - "${SSH_PORT:-2222}:2222"
312 + volumes:
313 + # Dépôts Git bare — données critiques, sauvegardez ce volume
314 + - git_repos:/var/lib/gitrust/repositories
315 + # Clés SSH du serveur — générées au premier démarrage, persistez-les
316 + - ssh_host_keys:/etc/gitrust/ssh
317 + healthcheck:
318 + test: ["CMD", "curl", "-f", "http://localhost:4000/health"]
319 + interval: 30s
320 + timeout: 10s
321 + retries: 3
322 + start_period: 30s
323 + networks:
324 + - gitrust_net
325 +
326 +volumes:
327 + # postgres_data : données relationnelles (comptes, dépôts, issues, PRs)
328 + postgres_data:
329 + # git_repos : dépôts Git bare (le contenu réel des commits)
330 + git_repos:
331 + # ssh_host_keys : clés SSH hôte (fingerprint de votre serveur)
332 + ssh_host_keys:
333 +
334 +networks:
335 + gitrust_net:
336 + driver: bridge
337 +EOF
338 +</code></pre>
339 +<p><strong>Checkpoint</strong> : vérifiez que les deux fichiers sont présents dans <code>/opt/gitrust/</code> :</p>
340 +<pre><code class="language-bash">ls -la /opt/gitrust/
341 +</code></pre>
342 +<p>Sortie attendue :</p>
343 +<pre><code>total 16
344 +drwxr-xr-x 2 root root 4096 avr 17 10:00 .
345 +drwxr-xr-x 8 root root 4096 avr 17 09:55 ..
346 +-rw------- 1 root root 612 avr 17 10:00 .env
347 +-rw-r--r-- 1 root root 2048 avr 17 10:00 docker-compose.yml
348 +</code></pre>
349 +<hr>
350 +<h2 id="étape-3--démarrez-la-stack-et-suivez-les-logs"><a class="header" href="#étape-3--démarrez-la-stack-et-suivez-les-logs">Étape 3 : Démarrez la stack et suivez les logs</a></h2>
351 +<p>Démarrez tous les services en arrière-plan :</p>
352 +<pre><code class="language-bash">docker compose up -d
353 +</code></pre>
354 +<p>Sortie attendue :</p>
355 +<pre><code>[+] Running 4/4
356 + ✔ Network gitrust_gitrust_net Created 0.1s
357 + ✔ Volume "gitrust_postgres_data" Created 0.0s
358 + ✔ Container gitrust_postgres Started 0.8s
359 + ✔ Container gitrust_app Started 1.2s
360 +</code></pre>
361 +<p>Suivez les logs de l’application pour observer le démarrage (les migrations s’exécutent automatiquement) :</p>
362 +<pre><code class="language-bash">docker compose logs -f gitrust
363 +</code></pre>
364 +<p>Sortie attendue (les 15-20 premières secondes) :</p>
365 +<pre><code>gitrust_app | 2026-04-17T10:00:15Z INFO gitrust &gt; Starting gitrust v0.9.0
366 +gitrust_app | 2026-04-17T10:00:15Z INFO gitrust &gt; Connecting to database...
367 +gitrust_app | 2026-04-17T10:00:16Z INFO gitrust &gt; Running database migrations...
368 +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust &gt; Applied 42 migrations successfully
369 +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust &gt; Generating SSH host keys...
370 +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust &gt; SSH host key fingerprint: SHA256:xxxxxxxxxxxxxxxxxxxx
371 +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust &gt; HTTP server listening on 0.0.0.0:4000
372 +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust &gt; SSH server listening on 0.0.0.0:2222
373 +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust &gt; gitrust is ready
374 +</code></pre>
375 +<p>Appuyez sur <strong>Ctrl+C</strong> pour quitter le suivi des logs (les containers continuent de tourner).</p>
376 +<p><strong>Checkpoint</strong> : vérifiez l’état de santé des services :</p>
377 +<pre><code class="language-bash">docker compose ps
378 +</code></pre>
379 +<p>Sortie attendue :</p>
380 +<pre><code>NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
381 +gitrust_app ghcr.io/gitrust/gitrust:latest "/usr/local/bin/gitr…" gitrust 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:4000-&gt;4000/tcp, 0.0.0.0:2222-&gt;2222/tcp
382 +gitrust_postgres postgres:16-alpine "docker-entrypoint.s…" postgres 2 minutes ago Up 2 minutes (healthy) 5432/tcp
383 +</code></pre>
384 +<p>Les deux containers doivent afficher <code>(healthy)</code>. Si l’un affiche <code>(starting)</code>, attendez 30 secondes et relancez la commande. S’il affiche <code>(unhealthy)</code>, consultez les logs avec <code>docker compose logs gitrust</code> ou <code>docker compose logs postgres</code>.</p>
385 +<hr>
386 +<h2 id="étape-4--créez-le-premier-compte-administrateur"><a class="header" href="#étape-4--créez-le-premier-compte-administrateur">Étape 4 : Créez le premier compte administrateur</a></h2>
387 +<p>Ouvrez votre navigateur et rendez-vous sur <code>http://localhost:4000</code>.</p>
388 +<p>Vous devriez voir la page d’accueil gitrust avec un formulaire d’inscription. Comme l’instance est vierge, <strong>le premier compte créé devient automatiquement administrateur</strong>.</p>
389 +<p>Remplissez le formulaire :</p>
390 +<ul>
391 +<li><strong>Pseudo</strong> : votre identifiant administrateur (ex. <code>admin</code>)</li>
392 +<li><strong>E-mail</strong> : votre adresse e-mail</li>
393 +<li><strong>Mot de passe</strong> : choisissez un mot de passe robuste (≥ 12 caractères)</li>
394 +</ul>
395 +<p>Cliquez sur <strong>Créer mon compte</strong>.</p>
396 +<p>Sortie attendue dans les logs (visible avec <code>docker compose logs -f gitrust</code>) :</p>
397 +<pre><code>gitrust_app | 2026-04-17T10:05:00Z INFO gitrust::auth &gt; New user registered: admin (id=1)
398 +gitrust_app | 2026-04-17T10:05:00Z INFO gitrust::admin &gt; First user promoted to administrator: admin
399 +</code></pre>
400 +<p><strong>Checkpoint final</strong> : connectez-vous avec vos identifiants. Après la connexion, vérifiez que le menu en haut à droite affiche un lien <strong>Administration</strong> (ou naviguez vers <code>http://localhost:4000/admin</code>). Cette page n’est accessible qu’aux administrateurs — sa présence confirme que votre compte a bien le rôle admin.</p>
401 +<p>L’URL de votre instance est <code>http://localhost:4000</code> et votre compte administrateur est opérationnel.</p>
402 +<hr>
403 +<h2 id="récapitulatif"><a class="header" href="#récapitulatif">Récapitulatif</a></h2>
404 +<ul>
405 +<li>✓ <strong>O1 accompli</strong> : la stack docker-compose est déployée — <code>docker compose ps</code> affiche deux containers <code>(healthy)</code></li>
406 +<li>✓ <strong>O2 accompli</strong> : les trois services (app, PostgreSQL, réseau interne) démarrent correctement — les logs montrent « gitrust is ready » et les migrations sont appliquées</li>
407 +<li>✓ <strong>O3 accompli</strong> : le premier compte administrateur est créé et la page <code>/admin</code> est accessible</li>
408 +</ul>
409 +<hr>
410 +<h2 id="et-si-ça-ne-marche-pas"><a class="header" href="#et-si-ça-ne-marche-pas">Et si ça ne marche pas</a></h2>
411 +<div class="table-wrapper">
412 +<table>
413 +<thead>
414 +<tr><th>Symptôme</th><th>Cause probable</th><th>Correction</th></tr>
415 +</thead>
416 +<tbody>
417 +<tr><td><code>Error: port 4000 is already in use</code> au démarrage</td><td>Un autre service occupe le port 4000 sur la machine hôte</td><td>Identifiez le service avec <code>ss -tlnp | grep 4000</code> ou <code>lsof -i :4000</code>. Arrêtez-le ou changez le port dans <code>docker-compose.yml</code> : remplacez <code>"4000:4000"</code> par <code>"4001:4000"</code> et accédez sur <code>:4001</code></td></tr>
418 +<tr><td>Le container <code>gitrust_app</code> affiche <code>(unhealthy)</code> ou redémarre en boucle</td><td>La variable <code>DATABASE_URL</code> est incorrecte ou <code>SECRET_KEY</code> contient des caractères spéciaux non échappés</td><td>Vérifiez avec <code>docker compose logs gitrust | grep ERROR</code>. Assurez-vous que <code>SECRET_KEY</code> est bien une chaîne hexadécimale sans guillemets. Rechargez avec <code>docker compose down &amp;&amp; docker compose up -d</code></td></tr>
419 +<tr><td>La page <code>http://localhost:4000</code> affiche « Connection refused »</td><td>Le container n’est pas encore en <code>(healthy)</code> ou le port n’est pas exposé</td><td>Attendez 30 secondes et rechargez. Si le problème persiste, vérifiez que votre pare-feu local (<code>ufw status</code>) autorise le port 4000</td></tr>
420 +<tr><td><code>FATAL: password authentication failed for user "gitrust"</code> dans les logs postgres</td><td>Le mot de passe dans <code>DATABASE_URL</code> ne correspond pas à <code>POSTGRES_PASSWORD</code></td><td>Supprimez le volume PostgreSQL (<code>docker compose down -v</code>) et relancez — <strong>attention : supprime toutes les données</strong></td></tr>
421 +</tbody>
422 +</table>
423 +</div>
424 +<hr>
425 +<h2 id="prochaine-étape"><a class="header" href="#prochaine-étape">Prochaine étape</a></h2>
426 +<p>→ <a href="02-installation-systemd.html">02 — Installation systemd : binaire natif + service</a> : découvrez l’installation sans Docker pour un déploiement production avec hardening AppArmor (~45 min)</p>
427 +<p>Ou si vous souhaitez rendre cette instance accessible depuis Internet :</p>
428 +<p>→ <a href="04-mise-en-production-192-168.html">04 — Mise en production</a> : reverse-proxy TLS, SMTP, sauvegarde automatique (~90 min)</p>
429 +
430 + </main>
431 +
432 + <nav class="nav-wrapper" aria-label="Page navigation">
433 + <!-- Mobile navigation buttons -->
434 + <a rel="prev" href="../../administration_manual/tutorials/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
435 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
436 + </a>
437 +
438 + <a rel="next prefetch" href="../../administration_manual/tutorials/02-installation-systemd.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
439 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
440 + </a>
441 +
442 + <div style="clear: both"></div>
443 + </nav>
444 + </div>
445 + </div>
446 +
447 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
448 + <a rel="prev" href="../../administration_manual/tutorials/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
449 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
450 + </a>
451 +
452 + <a rel="next prefetch" href="../../administration_manual/tutorials/02-installation-systemd.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
453 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
454 + </a>
455 + </nav>
456 +
457 + </div>
458 +
459 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
460 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
461 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
462 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
463 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
464 +
465 +
466 +
467 + <script>
468 + window.playground_copyable = true;
469 + </script>
470 +
471 +
472 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
473 + <script src="../../mark-09e88c2c.min.js"></script>
474 + <script src="../../searcher-c2a407aa.js"></script>
475 +
476 + <script src="../../clipboard-1626706a.min.js"></script>
477 + <script src="../../highlight-abc7f01d.js"></script>
478 + <script src="../../book-a0b12cfe.js"></script>
479 +
480 + <!-- Custom JS scripts -->
481 + <script src="../../theme/mermaid-eefea253.min.js"></script>
482 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
483 +
484 +
485 +
486 + </div>
487 + </body>
488 +</html>
A book/administration_manual/tutorials/02-installation-systemd.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>02 — Installation avec systemd - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/tutorials/02-installation-systemd.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="02--installation-avec-systemd"><a class="header" href="#02--installation-avec-systemd">02 — Installation avec systemd</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/tutorials/01-installation-docker.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/tutorials/03-premier-demarrage.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/tutorials/01-installation-docker.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/tutorials/03-premier-demarrage.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/tutorials/03-premier-demarrage.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>03 — Premier démarrage - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/tutorials/03-premier-demarrage.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="03--premier-démarrage"><a class="header" href="#03--premier-démarrage">03 — Premier démarrage</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/tutorials/02-installation-systemd.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/tutorials/04-mise-en-production-192-168.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/tutorials/02-installation-systemd.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/tutorials/04-mise-en-production-192-168.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/administration_manual/tutorials/04-mise-en-production-192-168.html
+715 -0
@@ -0,0 +1,715 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>04 — Mise en production (réseau local) - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/tutorials/04-mise-en-production-192-168.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="mise-en-production-sur-une-machine-linux-avec-https-lets-encrypt"><a class="header" href="#mise-en-production-sur-une-machine-linux-avec-https-lets-encrypt">Mise en production sur une machine Linux avec HTTPS Let’s Encrypt</a></h1>
181 +<h2 id="contexte"><a class="header" href="#contexte">Contexte</a></h2>
182 +<p>Procédure de référence pour déployer une instance gitrust sur une machine Linux à IP fixe, avec patte externe routée et HTTPS via Let’s Encrypt. Reproductible et testée en conditions réelles.</p>
183 +<p>Adaptez les valeurs suivantes à votre environnement :</p>
184 +<div class="table-wrapper">
185 +<table>
186 +<thead>
187 +<tr><th>Placeholder</th><th>Remplacez par</th></tr>
188 +</thead>
189 +<tbody>
190 +<tr><td><code>&lt;your-server-ip&gt;</code></td><td>L’IP fixe de votre serveur (ex: <code>192.168.1.57</code> sur un LAN, ou une IP publique)</td></tr>
191 +<tr><td><code>&lt;your-domain&gt;</code></td><td>Votre FQDN principal (ex: <code>gitrust.example.com</code>)</td></tr>
192 +<tr><td><code>&lt;acme-email&gt;</code></td><td>L’email pour Let’s Encrypt (ex: <code>contact@example.com</code>)</td></tr>
193 +<tr><td><code>&lt;admin-user&gt;</code></td><td>L’utilisateur SSH admin sur le serveur cible</td></tr>
194 +</tbody>
195 +</table>
196 +</div>
197 +<h3 id="les-trois-services-gitrust"><a class="header" href="#les-trois-services-gitrust">Les trois services gitrust</a></h3>
198 +<div class="table-wrapper">
199 +<table>
200 +<thead>
201 +<tr><th>#</th><th>Service</th><th>Bind interne</th><th>Exposition publique</th><th>Variable</th></tr>
202 +</thead>
203 +<tbody>
204 +<tr><td>1</td><td>Web HTTP (UI SSR + API)</td><td><code>127.0.0.1:4000</code></td><td><code>:443</code> HTTPS via Nginx</td><td><code>SERVER_PORT</code></td></tr>
205 +<tr><td>2</td><td>SSH Git (russh)</td><td><code>127.0.0.1:2222</code></td><td><code>:22</code> via Nginx stream</td><td><code>SSH_PORT</code></td></tr>
206 +<tr><td>3</td><td>Worker CI/CD (Dagger)</td><td>tâche Tokio in-process</td><td>— (déclenché par push)</td><td><code>CI_ENABLED</code></td></tr>
207 +</tbody>
208 +</table>
209 +</div>
210 +<p>PostgreSQL = dépendance, conteneur Docker bind loopback <code>127.0.0.1:5432</code>.</p>
211 +<h3 id="topologie-réseau"><a class="header" href="#topologie-réseau">Topologie réseau</a></h3>
212 +<pre><code>Internet
213 + |
214 + v
215 +&lt;your-server-ip&gt; (patte externe)
216 + |
217 + +-- :22 Nginx stream --&gt; 127.0.0.1:2222 (gitrust SSH)
218 + +-- :80 Nginx HTTP --&gt; 301 HTTPS (sauf /.well-known/acme-challenge)
219 + +-- :443 Nginx HTTPS --&gt; 127.0.0.1:4000 (gitrust HTTP)
220 + +-- :2022 sshd système (accès admin, déplacé depuis :22)
221 +
222 + Loopback uniquement :
223 + +-- 127.0.0.1:4000 gitrust web
224 + +-- 127.0.0.1:2222 gitrust SSH
225 + +-- 127.0.0.1:5432 postgres docker
226 +</code></pre>
227 +<h3 id="risque-critique--ordre-dexécution"><a class="header" href="#risque-critique--ordre-dexécution">Risque critique — ordre d’exécution</a></h3>
228 +<p>Le déplacement de <code>sshd</code> système de <code>:22</code> vers <code>:2022</code> <strong>doit</strong> être fait avant la configuration <code>nginx stream</code>, et <strong>doit</strong> être validé depuis une <strong>deuxième session SSH</strong> avant fermeture de la première. Sinon : lockout total (besoin d’accès console physique).</p>
229 +<hr>
230 +<h2 id="pré-requis"><a class="header" href="#pré-requis">Pré-requis</a></h2>
231 +<h3 id="poste-de-build-machine-locale-avec-le-code-source"><a class="header" href="#poste-de-build-machine-locale-avec-le-code-source">Poste de build (machine locale avec le code source)</a></h3>
232 +<pre><code class="language-bash">rustup show &amp;&amp; command -v rsync envsubst npx
233 +# Installer si besoin : sudo apt install rsync gettext-base
234 +</code></pre>
235 +<h3 id="cible-your-server-ip"><a class="header" href="#cible-your-server-ip">Cible <code>&lt;your-server-ip&gt;</code></a></h3>
236 +<ul>
237 +<li>Debian/Ubuntu récent</li>
238 +<li>Accès SSH avec <code>sudo</code></li>
239 +<li>Docker + plugin compose (<code>docker compose version</code>)</li>
240 +<li>Snap ou apt pour <code>certbot</code> + plugin nginx</li>
241 +<li>DNS <code>&lt;your-domain&gt;</code> → IP publique de la patte externe (vérifier <code>dig +short &lt;your-domain&gt;</code>)</li>
242 +<li>Module <code>stream</code> Nginx disponible (paquet <code>libnginx-mod-stream</code> sur Debian)</li>
243 +</ul>
244 +<hr>
245 +<h2 id="phase-0--générer-envproduction-poste-de-build-une-seule-fois"><a class="header" href="#phase-0--générer-envproduction-poste-de-build-une-seule-fois">Phase 0 — Générer <code>.env.production</code> (poste de build, une seule fois)</a></h2>
246 +<pre><code class="language-bash">JWT=$(openssl rand -hex 64)
247 +ADMIN_PWD=$(openssl rand -base64 24)
248 +PG_PWD=$(openssl rand -base64 24)
249 +
250 +cat &gt; .env.production &lt;&lt;EOF
251 +# ---- Base de données ----
252 +DATABASE_URL=postgres://gitrust:${PG_PWD}@127.0.0.1:5432/gitrust
253 +
254 +# ---- Serveur HTTP (derrière Nginx HTTPS) ----
255 +SERVER_HOST=127.0.0.1
256 +SERVER_PORT=4000
257 +
258 +# ---- Serveur SSH (derrière nginx stream :22) ----
259 +SSH_PORT=2222
260 +SSH_LISTEN_ADDR=127.0.0.1
261 +SSH_PUBLIC_HOST=&lt;your-domain&gt;
262 +SSH_HOST_KEY_PATH=/opt/gitrust/data/ssh_host_ed25519_key
263 +
264 +# ---- Chemins (réécrits par deploy.sh) ----
265 +GIT_REPOS_BASE_PATH=/opt/gitrust/data/repos
266 +STATIC_FILES_PATH=/opt/gitrust/static
267 +
268 +# ---- Sécurité — HTTPS actif ----
269 +JWT_SECRET=${JWT}
270 +JWT_EXPIRATION_MINUTES=15
271 +REFRESH_TOKEN_EXPIRATION_DAYS=7
272 +COOKIE_SECURE=true # HTTPS via Nginx
273 +COOKIE_SAME_SITE=Lax
274 +APP_DEBUG=false
275 +RUST_LOG=info
276 +
277 +# ---- Admin initial ----
278 +ADMIN_USERNAME=admin
279 +ADMIN_EMAIL=&lt;acme-email&gt;
280 +ADMIN_PASSWORD=${ADMIN_PWD}
281 +
282 +# ---- Inscription &amp; UI ----
283 +ALLOW_REGISTRATION=false
284 +APP_NAME=Gitrust
285 +DEFAULT_LOCALE=fr
286 +
287 +# ---- Email ----
288 +EMAIL_VALIDATION_REQUIRED=false
289 +EMAIL_BASE_URL=https://&lt;your-domain&gt;
290 +
291 +# ---- CI/CD Dagger (worker 3) ----
292 +CI_ENABLED=true
293 +CI_MAX_CONCURRENT=4
294 +CI_DEFAULT_TIMEOUT=3600
295 +CI_WORKSPACE_PATH=/tmp/gitrust-ci
296 +CI_REMOTE_HOST=localhost
297 +
298 +# ---- Worker import ----
299 +IMPORT_MAX_CONCURRENT=2
300 +IMPORT_TIMEOUT_SECS=1800
301 +DB_WORKER_POOL_SIZE=4
302 +EOF
303 +
304 +chmod 600 .env.production
305 +echo "ADMIN_PASSWORD = ${ADMIN_PWD}"
306 +echo "POSTGRES_PASSWORD = ${PG_PWD}"
307 +</code></pre>
308 +<blockquote>
309 +<p><strong>Critique</strong> : noter <code>ADMIN_PASSWORD</code> et <code>POSTGRES_PASSWORD</code> dans un gestionnaire de mots de passe.</p>
310 +</blockquote>
311 +<hr>
312 +<h2 id="phase-1--préparer-la-cible--déplacer-sshd-système-sur-2022"><a class="header" href="#phase-1--préparer-la-cible--déplacer-sshd-système-sur-2022">Phase 1 — Préparer la cible : déplacer sshd système sur :2022</a></h2>
313 +<p><strong>À faire en gardant deux sessions SSH simultanées</strong>.</p>
314 +<h3 id="1pre-diagnostic-de-létat-initial"><a class="header" href="#1pre-diagnostic-de-létat-initial">1.pre. Diagnostic de l’état initial</a></h3>
315 +<h4 id="1pre1--trouver-le-port-ssh-ouvert-depuis-le-poste-de-build"><a class="header" href="#1pre1--trouver-le-port-ssh-ouvert-depuis-le-poste-de-build">1.pre.1 — Trouver le port SSH ouvert depuis le poste de build</a></h4>
316 +<pre><code class="language-bash"># Depuis votre poste (sans être connecté) :
317 +for p in 22 2022 2222 2200 22022; do
318 + timeout 3 bash -c "echo &gt;/dev/tcp/&lt;your-server-ip&gt;/$p" 2&gt;/dev/null \
319 + &amp;&amp; echo "Port $p : OUVERT" \
320 + || echo "Port $p : fermé/filtré"
321 +done
322 +</code></pre>
323 +<h4 id="1pre2--se-connecter-sur-le-port-détecté"><a class="header" href="#1pre2--se-connecter-sur-le-port-détecté">1.pre.2 — Se connecter sur le port détecté</a></h4>
324 +<pre><code class="language-bash"># Cas le plus probable : sshd est sur :22 par défaut
325 +ssh &lt;admin-user&gt;@&lt;your-server-ip&gt;
326 +</code></pre>
327 +<h4 id="1pre3--une-fois-connecté-vérifier-létat-sshd-actuel"><a class="header" href="#1pre3--une-fois-connecté-vérifier-létat-sshd-actuel">1.pre.3 — Une fois connecté, vérifier l’état sshd actuel</a></h4>
328 +<pre><code class="language-bash"># Sur quel(s) port(s) sshd écoute-t-il ?
329 +sudo ss -tlnp | grep sshd
330 +
331 +# Contenu de la config
332 +sudo grep -riE '^[[:space:]]*Port[[:space:]]+[0-9]+' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/ 2&gt;/dev/null
333 +
334 +# Statut du service
335 +sudo systemctl status ssh --no-pager
336 +</code></pre>
337 +<h3 id="1a-session-1--modifier-la-config-sshd"><a class="header" href="#1a-session-1--modifier-la-config-sshd">1a. Session 1 : modifier la config sshd</a></h3>
338 +<pre><code class="language-bash">ssh &lt;admin-user&gt;@&lt;your-server-ip&gt;
339 +
340 +# Éditer /etc/ssh/sshd_config
341 +sudo tee /etc/ssh/sshd_config.d/99-gitrust.conf &lt;&lt;'EOF'
342 +Port 2022
343 +EOF
344 +
345 +# Vérifier la syntaxe
346 +sudo sshd -t
347 +
348 +# Si OK, reload (ne déconnecte pas la session courante)
349 +sudo systemctl reload ssh
350 +sudo ss -tlnp | grep -E ':22\b|:2022\b'
351 +# Attendu : sshd écoute sur 22 ET 2022
352 +</code></pre>
353 +<h3 id="1b-session-2--valider-le-nouveau-port"><a class="header" href="#1b-session-2--valider-le-nouveau-port">1b. Session 2 : valider le nouveau port</a></h3>
354 +<p>Depuis le poste de build, <strong>dans un autre terminal</strong> :</p>
355 +<pre><code class="language-bash">ssh -p 2022 &lt;admin-user&gt;@&lt;your-server-ip&gt; 'echo "OK port 2022"'
356 +# Doit afficher : OK port 2022
357 +</code></pre>
358 +<h3 id="1c-plus-tard-après-phase-5-fermer-le-port-22-du-sshd-système"><a class="header" href="#1c-plus-tard-après-phase-5-fermer-le-port-22-du-sshd-système">1c. (Plus tard, après Phase 5) Fermer le port 22 du sshd système</a></h3>
359 +<p>Une fois <code>nginx stream :22</code> actif et testé :</p>
360 +<pre><code class="language-bash">ssh -p 2022 &lt;admin-user&gt;@&lt;your-server-ip&gt;
361 +sudo sed -i 's/^Port 22$/# Port 22 (déplacé vers 2022, :22 utilisé par nginx stream)/' /etc/ssh/sshd_config
362 +sudo systemctl restart ssh
363 +</code></pre>
364 +<h3 id="1d-firewall"><a class="header" href="#1d-firewall">1d. Firewall</a></h3>
365 +<pre><code class="language-bash">ssh -p 2022 &lt;admin-user&gt;@&lt;your-server-ip&gt; bash &lt;&lt;'EOF'
366 +sudo ufw allow 80/tcp comment 'HTTP ACME + redirect'
367 +sudo ufw allow 443/tcp comment 'HTTPS Gitrust'
368 +sudo ufw allow 22/tcp comment 'SSH Git via nginx stream'
369 +sudo ufw allow 2022/tcp comment 'SSH admin système'
370 +sudo ufw status numbered
371 +EOF
372 +</code></pre>
373 +<blockquote>
374 +<p>Mettre à jour <code>~/.ssh/config</code> côté poste dev :</p>
375 +<pre><code>Host gitrust-host
376 + HostName &lt;your-server-ip&gt;
377 + User &lt;admin-user&gt;
378 + Port 2022
379 +</code></pre>
380 +<p>Le reste du plan utilise <code>ssh gitrust-host</code>.</p>
381 +</blockquote>
382 +<hr>
383 +<h2 id="phase-2--postgresql-docker-loopback"><a class="header" href="#phase-2--postgresql-docker-loopback">Phase 2 — PostgreSQL (Docker, loopback)</a></h2>
384 +<pre><code class="language-bash">scp -P 2022 database/docker-compose.yml &lt;admin-user&gt;@&lt;your-server-ip&gt;:/tmp/pg-compose.yml
385 +
386 +ssh gitrust-host bash &lt;&lt;EOF
387 +sudo mkdir -p /opt/gitrust/database
388 +sudo mv /tmp/pg-compose.yml /opt/gitrust/database/docker-compose.yml
389 +echo 'POSTGRES_PASSWORD=${PG_PWD}' | sudo tee /opt/gitrust/database/.env &gt;/dev/null
390 +sudo chmod 600 /opt/gitrust/database/.env
391 +cd /opt/gitrust/database &amp;&amp; sudo docker compose up -d
392 +sudo docker compose ps
393 +EOF
394 +</code></pre>
395 +<p>Remplacer <code>${PG_PWD}</code> par la valeur réelle. Vérifier que le port n’est pas exposé publiquement :</p>
396 +<pre><code class="language-bash">ssh gitrust-host 'sudo ss -tlnp | grep 5432'
397 +# Attendu : 127.0.0.1:5432 — PAS 0.0.0.0
398 +</code></pre>
399 +<hr>
400 +<h2 id="phase-3--build--déploiement-gitrust-via-deploysh"><a class="header" href="#phase-3--build--déploiement-gitrust-via-deploysh">Phase 3 — Build + déploiement gitrust via <code>deploy.sh</code></a></h2>
401 +<h3 id="3a-préparer-deploymentdeployconf"><a class="header" href="#3a-préparer-deploymentdeployconf">3a. Préparer <code>deployment/deploy.conf</code></a></h3>
402 +<pre><code class="language-bash">cp deployment/deploy.conf.example deployment/deploy.conf
403 +# Éditer DEPLOY_TARGET=gitrust-host, DEPLOY_REMOTE_PATH=/opt/gitrust, DEPLOY_FQDN_INITIAL=&lt;your-domain&gt;
404 +$EDITOR deployment/deploy.conf
405 +chmod 600 deployment/deploy.conf
406 +</code></pre>
407 +<h3 id="3b-validation-du-build-seul-optionnel"><a class="header" href="#3b-validation-du-build-seul-optionnel">3b. Validation du build seul (optionnel)</a></h3>
408 +<pre><code class="language-bash">BUILD_ONLY=1 ./deployment/deploy.sh
409 +</code></pre>
410 +<h3 id="3c-déploiement"><a class="header" href="#3c-déploiement">3c. Déploiement</a></h3>
411 +<pre><code class="language-bash"># Sans argument : utilise DEPLOY_TARGET du deploy.conf (gitrust-host via ~/.ssh/config, port 2022)
412 +./deployment/deploy.sh
413 +</code></pre>
414 +<p>Ce que fait <code>deploy.sh</code> : <code>cargo build --release</code>, <code>tailwindcss --minify</code>, adapte <code>gitrust.service</code> + <code>.env</code>, rsync, crée user <code>gitrust</code>, installe systemd, restart.</p>
415 +<p>À la fin : gitrust écoute sur <code>127.0.0.1:4000</code> (HTTP) et <code>127.0.0.1:2222</code> (SSH).</p>
416 +<pre><code class="language-bash">ssh gitrust-host 'sudo systemctl status gitrust --no-pager &amp;&amp; sudo ss -tlnp | grep -E "4000|2222"'
417 +# Attendu : 127.0.0.1:4000 et 127.0.0.1:2222 (PAS 0.0.0.0)
418 +</code></pre>
419 +<hr>
420 +<h2 id="phase-4--nginx-http--lets-encrypt"><a class="header" href="#phase-4--nginx-http--lets-encrypt">Phase 4 — Nginx HTTP + Let’s Encrypt</a></h2>
421 +<h3 id="4a-installer-nginx--certbot"><a class="header" href="#4a-installer-nginx--certbot">4a. Installer nginx + certbot</a></h3>
422 +<pre><code class="language-bash">ssh gitrust-host bash &lt;&lt;'EOF'
423 +sudo apt update
424 +sudo apt install -y nginx libnginx-mod-stream certbot python3-certbot-nginx
425 +sudo systemctl enable --now nginx
426 +EOF
427 +</code></pre>
428 +<h3 id="4b-déployer-la-conf-nginx"><a class="header" href="#4b-déployer-la-conf-nginx">4b. Déployer la conf Nginx</a></h3>
429 +<pre><code class="language-bash">scp -P 2022 deployment/nginx-gitrust.conf &lt;admin-user&gt;@&lt;your-server-ip&gt;:/tmp/gitrust-nginx.conf
430 +
431 +ssh gitrust-host bash &lt;&lt;EOF
432 +sudo sed -i 's/gitrust.nuage.ebii/&lt;your-domain&gt;/g' /tmp/gitrust-nginx.conf
433 +sudo mv /tmp/gitrust-nginx.conf /etc/nginx/sites-available/gitrust
434 +sudo ln -sf /etc/nginx/sites-available/gitrust /etc/nginx/sites-enabled/gitrust
435 +sudo rm -f /etc/nginx/sites-enabled/default
436 +sudo mkdir -p /var/www/html/.well-known/acme-challenge
437 +sudo nginx -t &amp;&amp; sudo systemctl reload nginx
438 +EOF
439 +</code></pre>
440 +<h3 id="4c-émettre-le-certificat-lets-encrypt"><a class="header" href="#4c-émettre-le-certificat-lets-encrypt">4c. Émettre le certificat Let’s Encrypt</a></h3>
441 +<pre><code class="language-bash">ssh gitrust-host 'sudo certbot --nginx \
442 + -d &lt;your-domain&gt; \
443 + --email &lt;acme-email&gt; \
444 + --agree-tos \
445 + --no-eff-email \
446 + --redirect'
447 +</code></pre>
448 +<h3 id="4d-vérifier-le-renouvellement-automatique"><a class="header" href="#4d-vérifier-le-renouvellement-automatique">4d. Vérifier le renouvellement automatique</a></h3>
449 +<pre><code class="language-bash">ssh gitrust-host 'sudo systemctl list-timers | grep certbot'
450 +ssh gitrust-host 'sudo certbot renew --dry-run'
451 +</code></pre>
452 +<h3 id="4e-test-https"><a class="header" href="#4e-test-https">4e. Test HTTPS</a></h3>
453 +<pre><code class="language-bash">curl -I https://&lt;your-domain&gt;/
454 +# Attendu : HTTP/2 200 (ou 302 vers /login)
455 +
456 +# Vérifier HSTS
457 +curl -sI https://&lt;your-domain&gt;/ | grep -i strict-transport
458 +</code></pre>
459 +<hr>
460 +<h2 id="phase-5--exposer-ssh-git-sur-22-via-nginx-stream"><a class="header" href="#phase-5--exposer-ssh-git-sur-22-via-nginx-stream">Phase 5 — Exposer SSH Git sur :22 via Nginx stream</a></h2>
461 +<h3 id="5a-ajouter-le-bloc-stream"><a class="header" href="#5a-ajouter-le-bloc-stream">5a. Ajouter le bloc stream</a></h3>
462 +<pre><code class="language-bash">ssh gitrust-host bash &lt;&lt;'EOF'
463 +sudo nginx -V 2&gt;&amp;1 | grep -o with-stream
464 +
465 +sudo tee -a /etc/nginx/nginx.conf &lt;&lt;'NGINX'
466 +
467 +# --- Gitrust SSH (proxy :22 -&gt; :2222) -----------------------------------------
468 +stream {
469 + upstream gitrust_ssh {
470 + server 127.0.0.1:2222;
471 + }
472 + server {
473 + listen 22;
474 + listen [::]:22;
475 + proxy_pass gitrust_ssh;
476 + proxy_timeout 1h;
477 + proxy_connect_timeout 30s;
478 + error_log /var/log/nginx/gitrust-ssh.log;
479 + }
480 +}
481 +NGINX
482 +
483 +sudo nginx -t &amp;&amp; sudo systemctl restart nginx
484 +sudo ss -tlnp | grep -E ':22\b|:2222\b'
485 +# Attendu : nginx :22, gitrust :2222 (loopback)
486 +EOF
487 +</code></pre>
488 +<h3 id="5b-désactiver-sshd-système-sur-22-phase-1c"><a class="header" href="#5b-désactiver-sshd-système-sur-22-phase-1c">5b. Désactiver sshd système sur :22 (Phase 1c)</a></h3>
489 +<pre><code class="language-bash">ssh -p 2022 &lt;admin-user&gt;@&lt;your-server-ip&gt; bash &lt;&lt;'EOF'
490 +sudo sed -i 's/^Port 22$/# Port 22 déplacé/' /etc/ssh/sshd_config 2&gt;/dev/null || true
491 +sudo systemctl restart ssh
492 +sudo ss -tlnp | grep -E ':22\b|:2022\b'
493 +# Attendu : nginx :22, sshd :2022 — plus de sshd:22
494 +EOF
495 +</code></pre>
496 +<h3 id="5c-test-clone-git"><a class="header" href="#5c-test-clone-git">5c. Test clone Git</a></h3>
497 +<pre><code class="language-bash"># Dans l'UI gitrust : Settings -&gt; SSH keys -&gt; coller ~/.ssh/id_ed25519.pub
498 +# Créer un repo test admin/test-deploy via UI
499 +
500 +git clone git@&lt;your-domain&gt;:admin/test-deploy.git /tmp/test-deploy
501 +cd /tmp/test-deploy
502 +echo "# test" &gt; README.md
503 +git -c user.email=&lt;acme-email&gt; -c user.name=admin add . &amp;&amp; \
504 + git -c user.email=&lt;acme-email&gt; -c user.name=admin commit -m "test deploy" &amp;&amp; \
505 + git push origin main
506 +</code></pre>
507 +<hr>
508 +<h2 id="phase-6--vérifications-globales"><a class="header" href="#phase-6--vérifications-globales">Phase 6 — Vérifications globales</a></h2>
509 +<pre><code class="language-bash"># Service systemd
510 +ssh gitrust-host 'sudo systemctl status gitrust --no-pager'
511 +
512 +# Logs (recherche d'erreurs)
513 +ssh gitrust-host 'sudo journalctl -u gitrust -n 100 --no-pager | grep -iE "error|warn|fail"'
514 +
515 +# Ports d'écoute (vue d'ensemble)
516 +ssh gitrust-host 'sudo ss -tlnp'
517 +# Attendu :
518 +# :22 nginx
519 +# :80 nginx
520 +# :443 nginx
521 +# :2022 sshd système
522 +# 127.0.0.1:2222 gitrust
523 +# 127.0.0.1:4000 gitrust
524 +# 127.0.0.1:5432 docker-proxy
525 +
526 +# Renouvellement TLS automatique
527 +ssh gitrust-host 'sudo systemctl status certbot.timer --no-pager'
528 +
529 +# Test E2E
530 +curl -I https://&lt;your-domain&gt;/login
531 +ssh -T git@&lt;your-domain&gt; || true # Banner SSH russh attendu
532 +</code></pre>
533 +<hr>
534 +<h2 id="phase-7--durcissement--fail2ban"><a class="header" href="#phase-7--durcissement--fail2ban">Phase 7 — Durcissement : Fail2ban</a></h2>
535 +<p>Voir <code>administration_manual/how-to/durcir-avec-fail2ban.md</code> pour la configuration complète.</p>
536 +<h3 id="7a-installation"><a class="header" href="#7a-installation">7a. Installation</a></h3>
537 +<pre><code class="language-bash">ssh gitrust-host bash &lt;&lt;'EOF'
538 +sudo apt install -y fail2ban
539 +sudo systemctl enable --now fail2ban
540 +EOF
541 +</code></pre>
542 +<h3 id="7b-configuration-minimale-rapide"><a class="header" href="#7b-configuration-minimale-rapide">7b. Configuration minimale rapide</a></h3>
543 +<pre><code class="language-bash">ssh gitrust-host sudo tee /etc/fail2ban/jail.local &lt;&lt;'EOF'
544 +[DEFAULT]
545 +backend = systemd
546 +bantime = 1h
547 +findtime = 10m
548 +maxretry = 5
549 +ignoreip = 127.0.0.1/8 ::1
550 +banaction = ufw
551 +banaction_allports = ufw
552 +
553 +[sshd]
554 +enabled = true
555 +port = 2022
556 +filter = sshd
557 +backend = %(sshd_backend)s
558 +logpath = %(sshd_log)s
559 +maxretry = 3
560 +
561 +[nginx-http-auth]
562 +enabled = true
563 +port = http,https
564 +filter = nginx-http-auth
565 +logpath = /var/log/nginx/gitrust.error.log
566 +
567 +[gitrust-login]
568 +enabled = true
569 +port = http,https
570 +filter = gitrust-login
571 +logpath = /var/log/nginx/gitrust.access.log
572 +maxretry = 5
573 +
574 +[gitrust-ssh]
575 +enabled = true
576 +port = 22,2222
577 +filter = gitrust-ssh
578 +backend = systemd
579 +journalmatch = _SYSTEMD_UNIT=gitrust.service
580 +maxretry = 5
581 +
582 +[recidive]
583 +enabled = true
584 +logpath = /var/log/fail2ban.log
585 +banaction = %(banaction_allports)s
586 +bantime = 1w
587 +findtime = 1d
588 +maxretry = 3
589 +EOF
590 +</code></pre>
591 +<p>Créer les filtres gitrust-login et gitrust-ssh, puis :</p>
592 +<pre><code class="language-bash">ssh gitrust-host 'sudo systemctl restart fail2ban &amp;&amp; sudo fail2ban-client status'
593 +</code></pre>
594 +<hr>
595 +<h2 id="phase-8--mise-à-jour-vers-un-nouveau-domaine-quand-dns-prêt"><a class="header" href="#phase-8--mise-à-jour-vers-un-nouveau-domaine-quand-dns-prêt">Phase 8 — Mise à jour vers un nouveau domaine (quand DNS prêt)</a></h2>
596 +<h3 id="8a-ajouter-le-san-au-certificat-existant"><a class="header" href="#8a-ajouter-le-san-au-certificat-existant">8a. Ajouter le SAN au certificat existant</a></h3>
597 +<pre><code class="language-bash">ssh gitrust-host 'sudo certbot --nginx --expand \
598 + -d &lt;your-domain&gt; \
599 + -d &lt;new-domain&gt; \
600 + --email &lt;acme-email&gt; \
601 + --agree-tos --no-eff-email'
602 +</code></pre>
603 +<h3 id="8b-mettre-à-jour-la-conf-nginx"><a class="header" href="#8b-mettre-à-jour-la-conf-nginx">8b. Mettre à jour la conf Nginx</a></h3>
604 +<pre><code class="language-bash">ssh gitrust-host bash &lt;&lt;EOF
605 +sudo sed -i 's/server_name &lt;your-domain&gt;;/server_name &lt;your-domain&gt; &lt;new-domain&gt;;/g' /etc/nginx/sites-available/gitrust
606 +sudo nginx -t &amp;&amp; sudo systemctl reload nginx
607 +EOF
608 +</code></pre>
609 +<h3 id="8c-mettre-à-jour-envproduction-et-redéployer"><a class="header" href="#8c-mettre-à-jour-envproduction-et-redéployer">8c. Mettre à jour <code>.env.production</code> et redéployer</a></h3>
610 +<pre><code class="language-bash">sed -i 's|SSH_PUBLIC_HOST=.*|SSH_PUBLIC_HOST=&lt;new-domain&gt;|' .env.production
611 +sed -i 's|EMAIL_BASE_URL=.*|EMAIL_BASE_URL=https://&lt;new-domain&gt;|' .env.production
612 +./deployment/deploy.sh gitrust-host
613 +</code></pre>
614 +<hr>
615 +<h2 id="phase-9--mises-à-jour-ultérieures"><a class="header" href="#phase-9--mises-à-jour-ultérieures">Phase 9 — Mises à jour ultérieures</a></h2>
616 +<pre><code class="language-bash">git pull
617 +SKIP_ENV=1 SKIP_DB=1 ./deployment/deploy.sh
618 +</code></pre>
619 +<hr>
620 +<h2 id="dépannage"><a class="header" href="#dépannage">Dépannage</a></h2>
621 +<div class="table-wrapper">
622 +<table>
623 +<thead>
624 +<tr><th>Symptôme</th><th>Diagnostic</th><th>Fix</th></tr>
625 +</thead>
626 +<tbody>
627 +<tr><td>Lockout SSH après reload sshd</td><td>—</td><td>Console physique / KVM IPMI</td></tr>
628 +<tr><td>Cert Let’s Encrypt échoue (<code>Connection refused</code>)</td><td><code>dig +short &lt;your-domain&gt;</code> ≠ IP publique</td><td>Corriger DNS, ou vérifier que :80 traverse bien le NAT</td></tr>
629 +<tr><td>Cert échoue (<code>unauthorized</code>)</td><td>Nginx <code>:80</code> ne répond pas sur <code>/.well-known/acme-challenge/</code></td><td><code>curl http://&lt;your-domain&gt;/.well-known/acme-challenge/test</code> doit ne pas rediriger en 301</td></tr>
630 +<tr><td>Login boucle sur <code>/login</code> malgré HTTPS</td><td><code>grep COOKIE_SECURE /opt/gitrust/.env</code></td><td>Doit être <code>true</code> ; vérifier que Nginx forward bien <code>X-Forwarded-Proto https</code></td></tr>
631 +<tr><td>Push SSH <code>Connection closed</code></td><td><code>journalctl -u gitrust | grep ssh</code></td><td>Vérifier que gitrust écoute bien <code>127.0.0.1:2222</code> et que nginx stream forward</td></tr>
632 +<tr><td><code>nginx -t</code> : <code>unknown directive "stream"</code></td><td>Module non chargé</td><td><code>sudo apt install libnginx-mod-stream</code> puis <code>systemctl restart nginx</code></td></tr>
633 +<tr><td>Mixed content HTTPS</td><td>Templates qui hardcodent <code>http://</code></td><td>Vérifier <code>EMAIL_BASE_URL=https://...</code> et headers <code>X-Forwarded-Proto</code></td></tr>
634 +<tr><td>Push gros repo timeout</td><td>Logs nginx <code>client intended to send too large body</code></td><td>Augmenter <code>client_max_body_size 2G</code> (déjà fait pour <code>.git/</code>)</td></tr>
635 +</tbody>
636 +</table>
637 +</div>
638 +<hr>
639 +<h2 id="récapitulatif-des-ports"><a class="header" href="#récapitulatif-des-ports">Récapitulatif des ports</a></h2>
640 +<div class="table-wrapper">
641 +<table>
642 +<thead>
643 +<tr><th>Port</th><th>Process</th><th>Exposition</th><th>Rôle</th></tr>
644 +</thead>
645 +<tbody>
646 +<tr><td>22</td><td>nginx (stream)</td><td>Public</td><td>SSH Git → forward vers :2222</td></tr>
647 +<tr><td>80</td><td>nginx</td><td>Public</td><td>ACME challenge + redirect HTTPS</td></tr>
648 +<tr><td>443</td><td>nginx</td><td>Public</td><td>HTTPS → forward vers :4000</td></tr>
649 +<tr><td>2022</td><td>sshd système</td><td>Public</td><td>Admin SSH (à restreindre par firewall si possible)</td></tr>
650 +<tr><td>2222</td><td>gitrust</td><td>Loopback</td><td>Backend SSH russh</td></tr>
651 +<tr><td>4000</td><td>gitrust</td><td>Loopback</td><td>Backend HTTP axum</td></tr>
652 +<tr><td>5432</td><td>docker-proxy</td><td>Loopback</td><td>PostgreSQL</td></tr>
653 +</tbody>
654 +</table>
655 +</div>
656 +
657 + </main>
658 +
659 + <nav class="nav-wrapper" aria-label="Page navigation">
660 + <!-- Mobile navigation buttons -->
661 + <a rel="prev" href="../../administration_manual/tutorials/03-premier-demarrage.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
662 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
663 + </a>
664 +
665 + <a rel="next prefetch" href="../../administration_manual/how-to/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
666 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
667 + </a>
668 +
669 + <div style="clear: both"></div>
670 + </nav>
671 + </div>
672 + </div>
673 +
674 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
675 + <a rel="prev" href="../../administration_manual/tutorials/03-premier-demarrage.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
676 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
677 + </a>
678 +
679 + <a rel="next prefetch" href="../../administration_manual/how-to/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
680 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
681 + </a>
682 + </nav>
683 +
684 + </div>
685 +
686 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
687 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
688 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
689 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
690 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
691 +
692 +
693 +
694 + <script>
695 + window.playground_copyable = true;
696 + </script>
697 +
698 +
699 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
700 + <script src="../../mark-09e88c2c.min.js"></script>
701 + <script src="../../searcher-c2a407aa.js"></script>
702 +
703 + <script src="../../clipboard-1626706a.min.js"></script>
704 + <script src="../../highlight-abc7f01d.js"></script>
705 + <script src="../../book-a0b12cfe.js"></script>
706 +
707 + <!-- Custom JS scripts -->
708 + <script src="../../theme/mermaid-eefea253.min.js"></script>
709 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
710 +
711 +
712 +
713 + </div>
714 + </body>
715 +</html>
A book/administration_manual/tutorials/index.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Tutoriels - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/administration_manual/tutorials/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="tutoriels"><a class="header" href="#tutoriels">Tutoriels</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../administration_manual/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/tutorials/01-installation-docker.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../administration_manual/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/tutorials/01-installation-docker.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/ayu-highlight-3fdfc3ac.css
+77 -0
@@ -0,0 +1,77 @@
1 +/*
2 +Based off of the Ayu theme
3 +Original by Dempfi (https://github.com/dempfi/ayu)
4 +*/
5 +
6 +.hljs {
7 + display: block;
8 + overflow-x: auto;
9 + background: #191f26;
10 + color: #e6e1cf;
11 +}
12 +
13 +.hljs-comment,
14 +.hljs-quote {
15 + color: #5c6773;
16 +}
17 +
18 +.hljs-variable,
19 +.hljs-template-variable,
20 +.hljs-attribute,
21 +.hljs-attr,
22 +.hljs-regexp,
23 +.hljs-link,
24 +.hljs-selector-id,
25 +.hljs-selector-class {
26 + color: #ff7733;
27 +}
28 +
29 +.hljs-number,
30 +.hljs-meta,
31 +.hljs-builtin-name,
32 +.hljs-literal,
33 +.hljs-type,
34 +.hljs-params {
35 + color: #ffee99;
36 +}
37 +
38 +.hljs-string,
39 +.hljs-bullet {
40 + color: #b8cc52;
41 +}
42 +
43 +.hljs-title,
44 +.hljs-built_in,
45 +.hljs-section {
46 + color: #ffb454;
47 +}
48 +
49 +.hljs-keyword,
50 +.hljs-selector-tag,
51 +.hljs-symbol {
52 + color: #ff7733;
53 +}
54 +
55 +.hljs-name {
56 + color: #36a3d9;
57 +}
58 +
59 +.hljs-tag {
60 + color: #00568d;
61 +}
62 +
63 +.hljs-emphasis {
64 + font-style: italic;
65 +}
66 +
67 +.hljs-strong {
68 + font-weight: bold;
69 +}
70 +
71 +.hljs-addition {
72 + color: #91b362;
73 +}
74 +
75 +.hljs-deletion {
76 + color: #d96c75;
77 +}
A book/book-a0b12cfe.js
+843 -0
@@ -0,0 +1,843 @@
1 +'use strict';
2 +
3 +/* global default_theme, default_dark_theme, default_light_theme, hljs, ClipboardJS */
4 +
5 +// Fix back button cache problem
6 +window.onunload = function() { };
7 +
8 +// Global variable, shared between modules
9 +function playground_text(playground, hidden = true) {
10 + const code_block = playground.querySelector('code');
11 +
12 + if (window.ace && code_block.classList.contains('editable')) {
13 + const editor = window.ace.edit(code_block);
14 + return editor.getValue();
15 + } else if (hidden) {
16 + return code_block.textContent;
17 + } else {
18 + return code_block.innerText;
19 + }
20 +}
21 +
22 +(function codeSnippets() {
23 + function fetch_with_timeout(url, options, timeout = 6000) {
24 + return Promise.race([
25 + fetch(url, options),
26 + new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout)),
27 + ]);
28 + }
29 +
30 + const playgrounds = Array.from(document.querySelectorAll('.playground'));
31 + if (playgrounds.length > 0) {
32 + fetch_with_timeout('https://play.rust-lang.org/meta/crates', {
33 + headers: {
34 + 'Content-Type': 'application/json',
35 + },
36 + method: 'POST',
37 + mode: 'cors',
38 + })
39 + .then(response => response.json())
40 + .then(response => {
41 + // get list of crates available in the rust playground
42 + const playground_crates = response.crates.map(item => item['id']);
43 + playgrounds.forEach(block => handle_crate_list_update(block, playground_crates));
44 + });
45 + }
46 +
47 + function handle_crate_list_update(playground_block, playground_crates) {
48 + // update the play buttons after receiving the response
49 + update_play_button(playground_block, playground_crates);
50 +
51 + // and install on change listener to dynamically update ACE editors
52 + if (window.ace) {
53 + const code_block = playground_block.querySelector('code');
54 + if (code_block.classList.contains('editable')) {
55 + const editor = window.ace.edit(code_block);
56 + editor.addEventListener('change', () => {
57 + update_play_button(playground_block, playground_crates);
58 + });
59 + // add Ctrl-Enter command to execute rust code
60 + editor.commands.addCommand({
61 + name: 'run',
62 + bindKey: {
63 + win: 'Ctrl-Enter',
64 + mac: 'Ctrl-Enter',
65 + },
66 + exec: _editor => run_rust_code(playground_block),
67 + });
68 + }
69 + }
70 + }
71 +
72 + // updates the visibility of play button based on `no_run` class and
73 + // used crates vs ones available on https://play.rust-lang.org
74 + function update_play_button(pre_block, playground_crates) {
75 + const play_button = pre_block.querySelector('.play-button');
76 +
77 + // skip if code is `no_run`
78 + if (pre_block.querySelector('code').classList.contains('no_run')) {
79 + play_button.classList.add('hidden');
80 + return;
81 + }
82 +
83 + // get list of `extern crate`'s from snippet
84 + const txt = playground_text(pre_block);
85 + const re = /extern\s+crate\s+([a-zA-Z_0-9]+)\s*;/g;
86 + const snippet_crates = [];
87 + let item;
88 + while (item = re.exec(txt)) {
89 + snippet_crates.push(item[1]);
90 + }
91 +
92 + // check if all used crates are available on play.rust-lang.org
93 + const all_available = snippet_crates.every(function(elem) {
94 + return playground_crates.indexOf(elem) > -1;
95 + });
96 +
97 + if (all_available) {
98 + play_button.classList.remove('hidden');
99 + play_button.hidden = false;
100 + } else {
101 + play_button.classList.add('hidden');
102 + }
103 + }
104 +
105 + function run_rust_code(code_block) {
106 + let result_block = code_block.querySelector('.result');
107 + if (!result_block) {
108 + result_block = document.createElement('code');
109 + result_block.className = 'result hljs language-bash';
110 +
111 + code_block.append(result_block);
112 + }
113 +
114 + const text = playground_text(code_block);
115 + const classes = code_block.querySelector('code').classList;
116 + let edition = '2015';
117 + classes.forEach(className => {
118 + if (className.startsWith('edition')) {
119 + edition = className.slice(7);
120 + }
121 + });
122 + const params = {
123 + version: 'stable',
124 + optimize: '0',
125 + code: text,
126 + edition: edition,
127 + };
128 +
129 + if (text.indexOf('#![feature') !== -1) {
130 + params.version = 'nightly';
131 + }
132 +
133 + result_block.innerText = 'Running...';
134 +
135 + fetch_with_timeout('https://play.rust-lang.org/evaluate.json', {
136 + headers: {
137 + 'Content-Type': 'application/json',
138 + },
139 + method: 'POST',
140 + mode: 'cors',
141 + body: JSON.stringify(params),
142 + })
143 + .then(response => response.json())
144 + .then(response => {
145 + if (response.result.trim() === '') {
146 + result_block.innerText = 'No output';
147 + result_block.classList.add('result-no-output');
148 + } else {
149 + result_block.innerText = response.result;
150 + result_block.classList.remove('result-no-output');
151 + }
152 + })
153 + .catch(error => result_block.innerText = 'Playground Communication: ' + error.message);
154 + }
155 +
156 + // Syntax highlighting Configuration
157 + hljs.configure({
158 + tabReplace: ' ', // 4 spaces
159 + languages: [], // Languages used for auto-detection
160 + });
161 +
162 + const code_nodes = Array
163 + .from(document.querySelectorAll('code'))
164 + // Don't highlight `inline code` blocks in headers.
165 + .filter(function(node) {
166 + return !node.parentElement.classList.contains('header');
167 + });
168 +
169 + if (window.ace) {
170 + // language-rust class needs to be removed for editable
171 + // blocks or highlightjs will capture events
172 + code_nodes
173 + .filter(function(node) {
174 + return node.classList.contains('editable');
175 + })
176 + .forEach(function(block) {
177 + block.classList.remove('language-rust');
178 + });
179 +
180 + code_nodes
181 + .filter(function(node) {
182 + return !node.classList.contains('editable');
183 + })
184 + .forEach(function(block) {
185 + hljs.highlightBlock(block);
186 + });
187 + } else {
188 + code_nodes.forEach(function(block) {
189 + hljs.highlightBlock(block);
190 + });
191 + }
192 +
193 + // Adding the hljs class gives code blocks the color css
194 + // even if highlighting doesn't apply
195 + code_nodes.forEach(function(block) {
196 + block.classList.add('hljs');
197 + });
198 +
199 + Array.from(document.querySelectorAll('code.hljs')).forEach(function(block) {
200 +
201 + const lines = Array.from(block.querySelectorAll('.boring'));
202 + // If no lines were hidden, return
203 + if (!lines.length) {
204 + return;
205 + }
206 + block.classList.add('hide-boring');
207 +
208 + const buttons = document.createElement('div');
209 + buttons.className = 'buttons';
210 + buttons.innerHTML = '<button title="Show hidden lines" \
211 +aria-label="Show hidden lines"></button>';
212 + buttons.firstChild.innerHTML = document.getElementById('fa-eye').innerHTML;
213 +
214 + // add expand button
215 + const pre_block = block.parentNode;
216 + pre_block.insertBefore(buttons, pre_block.firstChild);
217 +
218 + buttons.firstChild.addEventListener('click', function(e) {
219 + if (this.title === 'Show hidden lines') {
220 + this.innerHTML = document.getElementById('fa-eye-slash').innerHTML;
221 + this.title = 'Hide lines';
222 + this.setAttribute('aria-label', e.target.title);
223 +
224 + block.classList.remove('hide-boring');
225 + } else if (this.title === 'Hide lines') {
226 + this.innerHTML = document.getElementById('fa-eye').innerHTML;
227 + this.title = 'Show hidden lines';
228 + this.setAttribute('aria-label', e.target.title);
229 +
230 + block.classList.add('hide-boring');
231 + }
232 + });
233 + });
234 +
235 + if (window.playground_copyable) {
236 + Array.from(document.querySelectorAll('pre code')).forEach(function(block) {
237 + const pre_block = block.parentNode;
238 + if (!pre_block.classList.contains('playground')) {
239 + let buttons = pre_block.querySelector('.buttons');
240 + if (!buttons) {
241 + buttons = document.createElement('div');
242 + buttons.className = 'buttons';
243 + pre_block.insertBefore(buttons, pre_block.firstChild);
244 + }
245 +
246 + const clipButton = document.createElement('button');
247 + clipButton.className = 'clip-button';
248 + clipButton.title = 'Copy to clipboard';
249 + clipButton.setAttribute('aria-label', clipButton.title);
250 + clipButton.innerHTML = '<i class="tooltiptext"></i>';
251 +
252 + buttons.insertBefore(clipButton, buttons.firstChild);
253 + }
254 + });
255 + }
256 +
257 + // Process playground code blocks
258 + Array.from(document.querySelectorAll('.playground')).forEach(function(pre_block) {
259 + // Add play button
260 + let buttons = pre_block.querySelector('.buttons');
261 + if (!buttons) {
262 + buttons = document.createElement('div');
263 + buttons.className = 'buttons';
264 + pre_block.insertBefore(buttons, pre_block.firstChild);
265 + }
266 +
267 + const runCodeButton = document.createElement('button');
268 + runCodeButton.className = 'play-button';
269 + runCodeButton.hidden = true;
270 + runCodeButton.title = 'Run this code';
271 + runCodeButton.setAttribute('aria-label', runCodeButton.title);
272 + runCodeButton.innerHTML = document.getElementById('fa-play').innerHTML;
273 +
274 + buttons.insertBefore(runCodeButton, buttons.firstChild);
275 + runCodeButton.addEventListener('click', () => {
276 + run_rust_code(pre_block);
277 + });
278 +
279 + if (window.playground_copyable) {
280 + const copyCodeClipboardButton = document.createElement('button');
281 + copyCodeClipboardButton.className = 'clip-button';
282 + copyCodeClipboardButton.innerHTML = '<i class="tooltiptext"></i>';
283 + copyCodeClipboardButton.title = 'Copy to clipboard';
284 + copyCodeClipboardButton.setAttribute('aria-label', copyCodeClipboardButton.title);
285 +
286 + buttons.insertBefore(copyCodeClipboardButton, buttons.firstChild);
287 + }
288 +
289 + const code_block = pre_block.querySelector('code');
290 + if (window.ace && code_block.classList.contains('editable')) {
291 + const undoChangesButton = document.createElement('button');
292 + undoChangesButton.className = 'reset-button';
293 + undoChangesButton.title = 'Undo changes';
294 + undoChangesButton.setAttribute('aria-label', undoChangesButton.title);
295 + undoChangesButton.innerHTML +=
296 + document.getElementById('fa-clock-rotate-left').innerHTML;
297 +
298 + buttons.insertBefore(undoChangesButton, buttons.firstChild);
299 +
300 + undoChangesButton.addEventListener('click', function() {
301 + const editor = window.ace.edit(code_block);
302 + editor.setValue(editor.originalCode);
303 + editor.clearSelection();
304 + });
305 + }
306 + });
307 +})();
308 +
309 +(function themes() {
310 + const html = document.querySelector('html');
311 + const themeToggleButton = document.getElementById('mdbook-theme-toggle');
312 + const themePopup = document.getElementById('mdbook-theme-list');
313 + const themeColorMetaTag = document.querySelector('meta[name="theme-color"]');
314 + const themeIds = [];
315 + themePopup.querySelectorAll('button.theme').forEach(function(el) {
316 + themeIds.push(el.id);
317 + });
318 + const stylesheets = {
319 + ayuHighlight: document.querySelector('#mdbook-ayu-highlight-css'),
320 + tomorrowNight: document.querySelector('#mdbook-tomorrow-night-css'),
321 + highlight: document.querySelector('#mdbook-highlight-css'),
322 + };
323 +
324 + function showThemes() {
325 + themePopup.style.display = 'block';
326 + themeToggleButton.setAttribute('aria-expanded', true);
327 + themePopup.querySelector('button#mdbook-theme-' + get_theme()).focus();
328 + }
329 +
330 + function updateThemeSelected() {
331 + themePopup.querySelectorAll('.theme-selected').forEach(function(el) {
332 + el.classList.remove('theme-selected');
333 + });
334 + const selected = get_saved_theme() ?? 'default_theme';
335 + let element = themePopup.querySelector('button#mdbook-theme-' + selected);
336 + if (element === null) {
337 + // Fall back in case there is no "Default" item.
338 + element = themePopup.querySelector('button#mdbook-theme-' + get_theme());
339 + }
340 + element.classList.add('theme-selected');
341 + }
342 +
343 + function hideThemes() {
344 + themePopup.style.display = 'none';
345 + themeToggleButton.setAttribute('aria-expanded', false);
346 + themeToggleButton.focus();
347 + }
348 +
349 + function get_saved_theme() {
350 + let theme = null;
351 + try {
352 + theme = localStorage.getItem('mdbook-theme');
353 + } catch {
354 + // ignore error.
355 + }
356 + return theme;
357 + }
358 +
359 + function delete_saved_theme() {
360 + localStorage.removeItem('mdbook-theme');
361 + }
362 +
363 + function get_theme() {
364 + const theme = get_saved_theme();
365 + if (theme === null || theme === undefined || !themeIds.includes('mdbook-theme-' + theme)) {
366 + if (typeof default_dark_theme === 'undefined') {
367 + // A customized index.hbs might not define this, so fall back to
368 + // old behavior of determining the default on page load.
369 + return default_theme;
370 + }
371 + return window.matchMedia('(prefers-color-scheme: dark)').matches
372 + ? default_dark_theme
373 + : default_light_theme;
374 + } else {
375 + return theme;
376 + }
377 + }
378 +
379 + let previousTheme = default_theme;
380 + function set_theme(theme, store = true) {
381 + let ace_theme;
382 +
383 + if (theme === 'coal' || theme === 'navy') {
384 + stylesheets.ayuHighlight.disabled = true;
385 + stylesheets.tomorrowNight.disabled = false;
386 + stylesheets.highlight.disabled = true;
387 +
388 + ace_theme = 'ace/theme/tomorrow_night';
389 + } else if (theme === 'ayu') {
390 + stylesheets.ayuHighlight.disabled = false;
391 + stylesheets.tomorrowNight.disabled = true;
392 + stylesheets.highlight.disabled = true;
393 + ace_theme = 'ace/theme/tomorrow_night';
394 + } else {
395 + stylesheets.ayuHighlight.disabled = true;
396 + stylesheets.tomorrowNight.disabled = true;
397 + stylesheets.highlight.disabled = false;
398 + ace_theme = 'ace/theme/dawn';
399 + }
400 +
401 + setTimeout(function() {
402 + themeColorMetaTag.content = getComputedStyle(document.documentElement).backgroundColor;
403 + }, 1);
404 +
405 + if (window.ace && window.editors) {
406 + window.editors.forEach(function(editor) {
407 + editor.setTheme(ace_theme);
408 + });
409 + }
410 +
411 + if (store) {
412 + try {
413 + localStorage.setItem('mdbook-theme', theme);
414 + } catch {
415 + // ignore error.
416 + }
417 + }
418 +
419 + html.classList.remove(previousTheme);
420 + html.classList.add(theme);
421 + previousTheme = theme;
422 + updateThemeSelected();
423 + }
424 +
425 + const query = window.matchMedia('(prefers-color-scheme: dark)');
426 + query.onchange = function() {
427 + set_theme(get_theme(), false);
428 + };
429 +
430 + // Set theme.
431 + set_theme(get_theme(), false);
432 +
433 + themeToggleButton.addEventListener('click', function() {
434 + if (themePopup.style.display === 'block') {
435 + hideThemes();
436 + } else {
437 + showThemes();
438 + }
439 + });
440 +
441 + themePopup.addEventListener('click', function(e) {
442 + let theme;
443 + if (e.target.className === 'theme') {
444 + theme = e.target.id;
445 + } else if (e.target.parentElement.className === 'theme') {
446 + theme = e.target.parentElement.id;
447 + } else {
448 + return;
449 + }
450 + theme = theme.replace(/^mdbook-theme-/, '');
451 +
452 + if (theme === 'default_theme' || theme === null) {
453 + delete_saved_theme();
454 + set_theme(get_theme(), false);
455 + } else {
456 + set_theme(theme);
457 + }
458 + });
459 +
460 + themePopup.addEventListener('focusout', function(e) {
461 + // e.relatedTarget is null in Safari and Firefox on macOS (see workaround below)
462 + if (!!e.relatedTarget &&
463 + !themeToggleButton.contains(e.relatedTarget) &&
464 + !themePopup.contains(e.relatedTarget)
465 + ) {
466 + hideThemes();
467 + }
468 + });
469 +
470 + // Should not be needed, but it works around an issue on macOS & iOS:
471 + // https://github.com/rust-lang/mdBook/issues/628
472 + document.addEventListener('click', function(e) {
473 + if (themePopup.style.display === 'block' &&
474 + !themeToggleButton.contains(e.target) &&
475 + !themePopup.contains(e.target)
476 + ) {
477 + hideThemes();
478 + }
479 + });
480 +
481 + document.addEventListener('keydown', function(e) {
482 + if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {
483 + return;
484 + }
485 + if (!themePopup.contains(e.target)) {
486 + return;
487 + }
488 +
489 + let li;
490 + switch (e.key) {
491 + case 'Escape':
492 + e.preventDefault();
493 + hideThemes();
494 + break;
495 + case 'ArrowUp':
496 + e.preventDefault();
497 + li = document.activeElement.parentElement;
498 + if (li && li.previousElementSibling) {
499 + li.previousElementSibling.querySelector('button').focus();
500 + }
501 + break;
502 + case 'ArrowDown':
503 + e.preventDefault();
504 + li = document.activeElement.parentElement;
505 + if (li && li.nextElementSibling) {
506 + li.nextElementSibling.querySelector('button').focus();
507 + }
508 + break;
509 + case 'Home':
510 + e.preventDefault();
511 + themePopup.querySelector('li:first-child button').focus();
512 + break;
513 + case 'End':
514 + e.preventDefault();
515 + themePopup.querySelector('li:last-child button').focus();
516 + break;
517 + }
518 + });
519 +})();
520 +
521 +(function sidebar() {
522 + const sidebar = document.getElementById('mdbook-sidebar');
523 + const sidebarLinks = document.querySelectorAll('#mdbook-sidebar a');
524 + const sidebarToggleButton = document.getElementById('mdbook-sidebar-toggle');
525 + const sidebarResizeHandle = document.getElementById('mdbook-sidebar-resize-handle');
526 + const sidebarCheckbox = document.getElementById('mdbook-sidebar-toggle-anchor');
527 + let firstContact = null;
528 +
529 +
530 + /* Because we cannot change the `display` using only CSS after/before the transition, we
531 + need JS to do it. We change the display to prevent the browsers search to find text inside
532 + the collapsed sidebar. */
533 + if (!document.documentElement.classList.contains('sidebar-visible')) {
534 + sidebar.style.display = 'none';
535 + }
536 + sidebar.addEventListener('transitionend', () => {
537 + /* We only change the display to "none" if we're collapsing the sidebar. */
538 + if (!sidebarCheckbox.checked) {
539 + sidebar.style.display = 'none';
540 + }
541 + });
542 + sidebarToggleButton.addEventListener('click', () => {
543 + /* To allow the sidebar expansion animation, we first need to put back the display. */
544 + if (!sidebarCheckbox.checked) {
545 + sidebar.style.display = '';
546 + // Workaround for Safari skipping the animation when changing
547 + // `display` and a transform in the same event loop. This forces a
548 + // reflow after updating the display.
549 + sidebar.offsetHeight;
550 + }
551 + });
552 +
553 + function showSidebar() {
554 + document.documentElement.classList.add('sidebar-visible');
555 + Array.from(sidebarLinks).forEach(function(link) {
556 + link.setAttribute('tabIndex', 0);
557 + });
558 + sidebarToggleButton.setAttribute('aria-expanded', true);
559 + sidebar.setAttribute('aria-hidden', false);
560 + try {
561 + localStorage.setItem('mdbook-sidebar', 'visible');
562 + } catch {
563 + // Ignore error.
564 + }
565 + }
566 +
567 + function hideSidebar() {
568 + document.documentElement.classList.remove('sidebar-visible');
569 + Array.from(sidebarLinks).forEach(function(link) {
570 + link.setAttribute('tabIndex', -1);
571 + });
572 + sidebarToggleButton.setAttribute('aria-expanded', false);
573 + sidebar.setAttribute('aria-hidden', true);
574 + try {
575 + localStorage.setItem('mdbook-sidebar', 'hidden');
576 + } catch {
577 + // Ignore error.
578 + }
579 + }
580 +
581 + // Toggle sidebar
582 + sidebarCheckbox.addEventListener('change', function sidebarToggle() {
583 + if (sidebarCheckbox.checked) {
584 + const current_width = parseInt(
585 + document.documentElement.style.getPropertyValue('--sidebar-target-width'), 10);
586 + if (current_width < 150) {
587 + document.documentElement.style.setProperty('--sidebar-target-width', '150px');
588 + }
589 + showSidebar();
590 + } else {
591 + hideSidebar();
592 + }
593 + });
594 +
595 + sidebarResizeHandle.addEventListener('mousedown', initResize, false);
596 +
597 + function initResize() {
598 + window.addEventListener('mousemove', resize, false);
599 + window.addEventListener('mouseup', stopResize, false);
600 + document.documentElement.classList.add('sidebar-resizing');
601 + }
602 + function resize(e) {
603 + let pos = e.clientX - sidebar.offsetLeft;
604 + if (pos < 20) {
605 + hideSidebar();
606 + } else {
607 + if (!document.documentElement.classList.contains('sidebar-visible')) {
608 + showSidebar();
609 + }
610 + pos = Math.min(pos, window.innerWidth - 100);
611 + document.documentElement.style.setProperty('--sidebar-target-width', pos + 'px');
612 + }
613 + }
614 + //on mouseup remove windows functions mousemove & mouseup
615 + function stopResize() {
616 + document.documentElement.classList.remove('sidebar-resizing');
617 + window.removeEventListener('mousemove', resize, false);
618 + window.removeEventListener('mouseup', stopResize, false);
619 + }
620 +
621 + document.addEventListener('touchstart', function(e) {
622 + firstContact = {
623 + x: e.touches[0].clientX,
624 + time: Date.now(),
625 + };
626 + }, { passive: true });
627 +
628 + document.addEventListener('touchmove', function(e) {
629 + if (!firstContact) {
630 + return;
631 + }
632 +
633 + const curX = e.touches[0].clientX;
634 + const xDiff = curX - firstContact.x,
635 + tDiff = Date.now() - firstContact.time;
636 +
637 + if (tDiff < 250 && Math.abs(xDiff) >= 150) {
638 + if (xDiff >= 0 && firstContact.x < Math.min(document.body.clientWidth * 0.25, 300)) {
639 + showSidebar();
640 + } else if (xDiff < 0 && curX < 300) {
641 + hideSidebar();
642 + }
643 +
644 + firstContact = null;
645 + }
646 + }, { passive: true });
647 +})();
648 +
649 +(function chapterNavigation() {
650 + document.addEventListener('keydown', function(e) {
651 + if (e.altKey || e.ctrlKey || e.metaKey) {
652 + return;
653 + }
654 + if (window.search && window.search.hasFocus()) {
655 + return;
656 + }
657 + const html = document.querySelector('html');
658 +
659 + function next() {
660 + const nextButton = document.querySelector('.nav-chapters.next');
661 + if (nextButton) {
662 + window.location.href = nextButton.href;
663 + }
664 + }
665 + function prev() {
666 + const previousButton = document.querySelector('.nav-chapters.previous');
667 + if (previousButton) {
668 + window.location.href = previousButton.href;
669 + }
670 + }
671 + function showHelp() {
672 + const container = document.getElementById('mdbook-help-container');
673 + const overlay = document.getElementById('mdbook-help-popup');
674 + container.style.display = 'flex';
675 +
676 + // Clicking outside the popup will dismiss it.
677 + const mouseHandler = event => {
678 + if (overlay.contains(event.target)) {
679 + return;
680 + }
681 + if (event.button !== 0) {
682 + return;
683 + }
684 + event.preventDefault();
685 + event.stopPropagation();
686 + document.removeEventListener('mousedown', mouseHandler);
687 + hideHelp();
688 + };
689 +
690 + // Pressing esc will dismiss the popup.
691 + const escapeKeyHandler = event => {
692 + if (event.key === 'Escape') {
693 + event.preventDefault();
694 + event.stopPropagation();
695 + document.removeEventListener('keydown', escapeKeyHandler, true);
696 + hideHelp();
697 + }
698 + };
699 + document.addEventListener('keydown', escapeKeyHandler, true);
700 + document.getElementById('mdbook-help-container')
701 + .addEventListener('mousedown', mouseHandler);
702 + }
703 + function hideHelp() {
704 + document.getElementById('mdbook-help-container').style.display = 'none';
705 + }
706 +
707 + // Usually needs the Shift key to be pressed
708 + switch (e.key) {
709 + case '?':
710 + e.preventDefault();
711 + showHelp();
712 + break;
713 + }
714 +
715 + // Rest of the keys are only active when the Shift key is not pressed
716 + if (e.shiftKey) {
717 + return;
718 + }
719 +
720 + switch (e.key) {
721 + case 'ArrowRight':
722 + e.preventDefault();
723 + if (html.dir === 'rtl') {
724 + prev();
725 + } else {
726 + next();
727 + }
728 + break;
729 + case 'ArrowLeft':
730 + e.preventDefault();
731 + if (html.dir === 'rtl') {
732 + next();
733 + } else {
734 + prev();
735 + }
736 + break;
737 + }
738 + });
739 +})();
740 +
741 +(function clipboard() {
742 + const clipButtons = document.querySelectorAll('.clip-button');
743 +
744 + function hideTooltip(elem) {
745 + elem.firstChild.innerText = '';
746 + elem.className = 'clip-button';
747 + }
748 +
749 + function showTooltip(elem, msg) {
750 + elem.firstChild.innerText = msg;
751 + elem.className = 'clip-button tooltipped';
752 + }
753 +
754 + const clipboardSnippets = new ClipboardJS('.clip-button', {
755 + text: function(trigger) {
756 + hideTooltip(trigger);
757 + const playground = trigger.closest('pre');
758 + return playground_text(playground, false);
759 + },
760 + });
761 +
762 + Array.from(clipButtons).forEach(function(clipButton) {
763 + clipButton.addEventListener('mouseout', function(e) {
764 + hideTooltip(e.currentTarget);
765 + });
766 + });
767 +
768 + clipboardSnippets.on('success', function(e) {
769 + e.clearSelection();
770 + showTooltip(e.trigger, 'Copied!');
771 + });
772 +
773 + clipboardSnippets.on('error', function(e) {
774 + showTooltip(e.trigger, 'Clipboard error!');
775 + });
776 +})();
777 +
778 +(function scrollToTop() {
779 + const menuTitle = document.querySelector('.menu-title');
780 +
781 + menuTitle.addEventListener('click', function() {
782 + document.scrollingElement.scrollTo({ top: 0, behavior: 'smooth' });
783 + });
784 +})();
785 +
786 +(function controllMenu() {
787 + const menu = document.getElementById('mdbook-menu-bar');
788 +
789 + (function controllPosition() {
790 + let scrollTop = document.scrollingElement.scrollTop;
791 + let prevScrollTop = scrollTop;
792 + const minMenuY = -menu.clientHeight - 50;
793 + // When the script loads, the page can be at any scroll (e.g. if you refresh it).
794 + menu.style.top = scrollTop + 'px';
795 + // Same as parseInt(menu.style.top.slice(0, -2), but faster
796 + let topCache = menu.style.top.slice(0, -2);
797 + menu.classList.remove('sticky');
798 + let stickyCache = false; // Same as menu.classList.contains('sticky'), but faster
799 + document.addEventListener('scroll', function() {
800 + scrollTop = Math.max(document.scrollingElement.scrollTop, 0);
801 + // `null` means that it doesn't need to be updated
802 + let nextSticky = null;
803 + let nextTop = null;
804 + const scrollDown = scrollTop > prevScrollTop;
805 + const menuPosAbsoluteY = topCache - scrollTop;
806 + if (scrollDown) {
807 + nextSticky = false;
808 + if (menuPosAbsoluteY > 0) {
809 + nextTop = prevScrollTop;
810 + }
811 + } else {
812 + if (menuPosAbsoluteY > 0) {
813 + nextSticky = true;
814 + } else if (menuPosAbsoluteY < minMenuY) {
815 + nextTop = prevScrollTop + minMenuY;
816 + }
817 + }
818 + if (nextSticky === true && stickyCache === false) {
819 + menu.classList.add('sticky');
820 + stickyCache = true;
821 + } else if (nextSticky === false && stickyCache === true) {
822 + menu.classList.remove('sticky');
823 + stickyCache = false;
824 + }
825 + if (nextTop !== null) {
826 + menu.style.top = nextTop + 'px';
827 + topCache = nextTop;
828 + }
829 + prevScrollTop = scrollTop;
830 + }, { passive: true });
831 + })();
832 + (function controllBorder() {
833 + function updateBorder() {
834 + if (menu.offsetTop === 0) {
835 + menu.classList.remove('bordered');
836 + } else {
837 + menu.classList.add('bordered');
838 + }
839 + }
840 + updateBorder();
841 + document.addEventListener('scroll', updateBorder, { passive: true });
842 + })();
843 +})();
A book/clipboard-1626706a.min.js
+7 -0
@@ -0,0 +1,7 @@
1 +/*!
2 + * clipboard.js v2.0.4
3 + * https://zenorocha.github.io/clipboard.js
4 + *
5 + * Licensed MIT © Zeno Rocha
6 + */
7 +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}return function(t,e,n){return e&&o(t.prototype,e),n&&o(t,n),t}}(),a=o(n(1)),c=o(n(3)),u=o(n(4));function o(t){return t&&t.__esModule?t:{default:t}}var l=function(t){function o(t,e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,o);var n=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(o.__proto__||Object.getPrototypeOf(o)).call(this));return n.resolveOptions(e),n.listenClick(t),n}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(o,c.default),i(o,[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===r(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,u.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new a.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return s("action",t)}},{key:"defaultTarget",value:function(t){var e=s("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return s("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),o}();function s(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}t.exports=l},function(t,e,n){"use strict";var o,r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}return function(t,e,n){return e&&o(t.prototype,e),n&&o(t,n),t}}(),a=n(2),c=(o=a)&&o.__esModule?o:{default:o};var u=function(){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),this.resolveOptions(t),this.initSelection()}return i(e,[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,c.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,c.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),e}();t.exports=u},function(t,e){t.exports=function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var o=window.getSelection(),r=document.createRange();r.selectNodeContents(t),o.removeAllRanges(),o.addRange(r),e=o.toString()}return e}},function(t,e){function n(){}n.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var o=this;function r(){o.off(t,r),e.apply(n,arguments)}return r._=e,this.on(t,r,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,r=n.length;o<r;o++)n[o].fn.apply(n[o].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),o=n[t],r=[];if(o&&e)for(var i=0,a=o.length;i<a;i++)o[i].fn!==e&&o[i].fn._!==e&&r.push(o[i]);return r.length?n[t]=r:delete n[t],this}},t.exports=n},function(t,e,n){var d=n(5),h=n(6);t.exports=function(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!d.string(e))throw new TypeError("Second argument must be a String");if(!d.fn(n))throw new TypeError("Third argument must be a Function");if(d.node(t))return s=e,f=n,(l=t).addEventListener(s,f),{destroy:function(){l.removeEventListener(s,f)}};if(d.nodeList(t))return a=t,c=e,u=n,Array.prototype.forEach.call(a,function(t){t.addEventListener(c,u)}),{destroy:function(){Array.prototype.forEach.call(a,function(t){t.removeEventListener(c,u)})}};if(d.string(t))return o=t,r=e,i=n,h(document.body,o,r,i);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList");var o,r,i,a,c,u,l,s,f}},function(t,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return"string"==typeof t||t instanceof String},n.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},function(t,e,n){var a=n(7);function i(t,e,n,o,r){var i=function(e,n,t,o){return function(t){t.delegateTarget=a(t.target,n),t.delegateTarget&&o.call(e,t)}}.apply(this,arguments);return t.addEventListener(n,i,r),{destroy:function(){t.removeEventListener(n,i,r)}}}t.exports=function(t,e,n,o,r){return"function"==typeof t.addEventListener?i.apply(null,arguments):"function"==typeof n?i.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return i(t,e,n,o,r)}))}},function(t,e){if("undefined"!=typeof Element&&!Element.prototype.matches){var n=Element.prototype;n.matches=n.matchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector||n.webkitMatchesSelector}t.exports=function(t,e){for(;t&&9!==t.nodeType;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}}])});
7 < \ No newline at end of file
A book/css/chrome-ae938929.css
+756 -0
@@ -0,0 +1,756 @@
1 +/* CSS for UI elements (a.k.a. chrome) */
2 +
3 +html {
4 + scrollbar-color: var(--scrollbar) transparent;
5 +}
6 +#mdbook-searchresults a,
7 +.content a:link,
8 +a:visited,
9 +a > .hljs {
10 + color: var(--links);
11 +}
12 +
13 +/*
14 + mdbook-body-container is necessary because mobile browsers don't seem to like
15 + overflow-x on the body tag when there is a <meta name="viewport"> tag.
16 +*/
17 +#mdbook-body-container {
18 + /*
19 + This is used when the sidebar pushes the body content off the side of
20 + the screen on small screens. Without it, dragging on mobile Safari
21 + will want to reposition the viewport in a weird way.
22 + */
23 + overflow-x: clip;
24 +}
25 +
26 +/* Menu Bar */
27 +
28 +#mdbook-menu-bar,
29 +#mdbook-menu-bar-hover-placeholder {
30 + z-index: 101;
31 + margin: auto calc(0px - var(--page-padding));
32 +}
33 +#mdbook-menu-bar {
34 + position: relative;
35 + display: flex;
36 + flex-wrap: wrap;
37 + background-color: var(--bg);
38 + border-block-end-color: var(--bg);
39 + border-block-end-width: 1px;
40 + border-block-end-style: solid;
41 +}
42 +#mdbook-menu-bar.sticky,
43 +#mdbook-menu-bar-hover-placeholder:hover + #mdbook-menu-bar,
44 +#mdbook-menu-bar:hover,
45 +html.sidebar-visible #mdbook-menu-bar {
46 + position: -webkit-sticky;
47 + position: sticky;
48 + top: 0 !important;
49 +}
50 +#mdbook-menu-bar-hover-placeholder {
51 + position: sticky;
52 + position: -webkit-sticky;
53 + top: 0;
54 + height: var(--menu-bar-height);
55 +}
56 +#mdbook-menu-bar.bordered {
57 + border-block-end-color: var(--table-border-color);
58 +}
59 +#mdbook-menu-bar .fa-svg, #mdbook-menu-bar .icon-button {
60 + position: relative;
61 + padding: 0 8px;
62 + z-index: 10;
63 + line-height: var(--menu-bar-height);
64 + cursor: pointer;
65 + transition: color 0.5s;
66 +}
67 +@media only screen and (max-width: 420px) {
68 + #mdbook-menu-bar .fa-svg, #mdbook-menu-bar .icon-button {
69 + padding: 0 5px;
70 + }
71 +}
72 +
73 +.icon-button {
74 + border: none;
75 + background: none;
76 + padding: 0;
77 + color: inherit;
78 +}
79 +.icon-button .fa-svg {
80 + margin: 0;
81 +}
82 +
83 +.right-buttons {
84 + margin: 0 15px;
85 +}
86 +.right-buttons a {
87 + text-decoration: none;
88 +}
89 +
90 +.left-buttons {
91 + display: flex;
92 + margin: 0 5px;
93 +}
94 +html:not(.js) .left-buttons button {
95 + display: none;
96 +}
97 +
98 +.menu-title {
99 + display: inline-block;
100 + font-weight: 200;
101 + font-size: 2.4rem;
102 + line-height: var(--menu-bar-height);
103 + text-align: center;
104 + margin: 0;
105 + flex: 1;
106 + white-space: nowrap;
107 + overflow: hidden;
108 + text-overflow: ellipsis;
109 +}
110 +.menu-title {
111 + cursor: pointer;
112 +}
113 +
114 +.menu-bar,
115 +.menu-bar:visited,
116 +.nav-chapters,
117 +.nav-chapters:visited,
118 +.mobile-nav-chapters,
119 +.mobile-nav-chapters:visited,
120 +.menu-bar .icon-button,
121 +.menu-bar a .fa-svg {
122 + color: var(--icons);
123 +}
124 +
125 +.menu-bar .fa-svg:hover,
126 +.menu-bar .icon-button:hover,
127 +.nav-chapters:hover,
128 +.mobile-nav-chapters .fa-svg:hover {
129 + color: var(--icons-hover);
130 +}
131 +
132 +/* Nav Icons */
133 +
134 +.nav-chapters {
135 + font-size: 2.5em;
136 + text-align: center;
137 + text-decoration: none;
138 +
139 + position: fixed;
140 + top: 0;
141 + bottom: 0;
142 + margin: 0;
143 + max-width: 150px;
144 + min-width: 90px;
145 +
146 + display: flex;
147 + justify-content: center;
148 + align-content: center;
149 + flex-direction: column;
150 +
151 + transition: color 0.5s, background-color 0.5s;
152 +}
153 +
154 +.nav-chapters:hover {
155 + text-decoration: none;
156 + background-color: var(--theme-hover);
157 + transition: background-color 0.15s, color 0.15s;
158 +}
159 +
160 +.nav-wrapper {
161 + margin-block-start: 50px;
162 + display: none;
163 +}
164 +
165 +.mobile-nav-chapters {
166 + font-size: 2.5em;
167 + text-align: center;
168 + text-decoration: none;
169 + width: 90px;
170 + border-radius: 5px;
171 + background-color: var(--sidebar-bg);
172 +}
173 +
174 +/* Only Firefox supports flow-relative values */
175 +.previous { float: left; }
176 +[dir=rtl] .previous { float: right; }
177 +
178 +/* Only Firefox supports flow-relative values */
179 +.next {
180 + float: right;
181 + right: var(--page-padding);
182 +}
183 +[dir=rtl] .next {
184 + float: left;
185 + right: unset;
186 + left: var(--page-padding);
187 +}
188 +
189 +@media only screen and (max-width: 1080px) {
190 + .nav-wide-wrapper { display: none; }
191 + .nav-wrapper { display: block; }
192 +}
193 +
194 +/* sidebar-visible */
195 +@media only screen and (max-width: 1380px) {
196 + #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wide-wrapper { display: none; }
197 + #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wrapper { display: block; }
198 +}
199 +
200 +/* Inline code */
201 +
202 +:not(pre) > .hljs {
203 + display: inline;
204 + padding: 0.1em 0.3em;
205 + border-radius: 3px;
206 +}
207 +
208 +:not(pre):not(a) > .hljs {
209 + color: var(--inline-code-color);
210 + overflow-x: initial;
211 +}
212 +
213 +a:hover > .hljs {
214 + text-decoration: underline;
215 +}
216 +
217 +pre {
218 + position: relative;
219 +}
220 +pre > .buttons {
221 + position: absolute;
222 + z-index: 100;
223 + right: 0px;
224 + top: 2px;
225 + margin: 0px;
226 + padding: 2px 0px;
227 +
228 + color: var(--sidebar-fg);
229 + cursor: pointer;
230 + visibility: hidden;
231 + opacity: 0;
232 + transition: visibility 0.1s linear, opacity 0.1s linear;
233 +}
234 +pre:hover > .buttons {
235 + visibility: visible;
236 + opacity: 1
237 +}
238 +pre > .buttons :hover {
239 + color: var(--sidebar-active);
240 + border-color: var(--icons-hover);
241 + background-color: var(--theme-hover);
242 +}
243 +pre > .buttons button {
244 + cursor: inherit;
245 + margin: 0px 5px;
246 + padding: 2px 3px 0px 4px;
247 + font-size: 23px;
248 +
249 + border-style: solid;
250 + border-width: 1px;
251 + border-radius: 4px;
252 + border-color: var(--icons);
253 + background-color: var(--theme-popup-bg);
254 + transition: 100ms;
255 + transition-property: color,border-color,background-color;
256 + color: var(--icons);
257 +}
258 +
259 +pre > .buttons button.clip-button {
260 + padding: 2px 4px 0px 6px;
261 +}
262 +pre > .buttons button.clip-button::before {
263 + /* clipboard image from octicons (https://github.com/primer/octicons/tree/v2.0.0) MIT license
264 + */
265 + content: url('data:image/svg+xml,<svg width="21" height="20" viewBox="0 0 24 25" \
266 +xmlns="http://www.w3.org/2000/svg" aria-label="Copy to clipboard">\
267 +<path d="M18 20h2v3c0 1-1 2-2 2H2c-.998 0-2-1-2-2V5c0-.911.755-1.667 1.667-1.667h5A3.323 3.323 0 \
268 +0110 0a3.323 3.323 0 013.333 3.333h5C19.245 3.333 20 4.09 20 5v8.333h-2V9H2v14h16v-3zM3 \
269 +7h14c0-.911-.793-1.667-1.75-1.667H13.5c-.957 0-1.75-.755-1.75-1.666C11.75 2.755 10.957 2 10 \
270 +2s-1.75.755-1.75 1.667c0 .911-.793 1.666-1.75 1.666H4.75C3.793 5.333 3 6.09 3 7z"/>\
271 +<path d="M4 19h6v2H4zM12 11H4v2h8zM4 17h4v-2H4zM15 15v-3l-4.5 4.5L15 21v-3l8.027-.032L23 15z"/>\
272 +</svg>');
273 + filter: var(--copy-button-filter);
274 +}
275 +pre > .buttons button.clip-button:hover::before {
276 + filter: var(--copy-button-filter-hover);
277 +}
278 +
279 +@media (pointer: coarse) {
280 + pre > .buttons button {
281 + /* On mobile, make it easier to tap buttons. */
282 + padding: 0.3rem 1rem;
283 + }
284 +
285 + .sidebar-resize-indicator {
286 + /* Hide resize indicator on devices with limited accuracy */
287 + display: none;
288 + }
289 +}
290 +pre > code {
291 + display: block;
292 + padding: 1rem;
293 +}
294 +
295 +/* FIXME: ACE editors overlap their buttons because ACE does absolute
296 + positioning within the code block which breaks padding. The only solution I
297 + can think of is to move the padding to the outer pre tag (or insert a div
298 + wrapper), but that would require fixing a whole bunch of CSS rules.
299 +*/
300 +.hljs.ace_editor {
301 + padding: 0rem 0rem;
302 +}
303 +
304 +pre > .result {
305 + margin-block-start: 10px;
306 +}
307 +
308 +/* Search */
309 +
310 +#mdbook-searchresults a {
311 + text-decoration: none;
312 +}
313 +
314 +mark {
315 + border-radius: 2px;
316 + padding-block-start: 0;
317 + padding-block-end: 1px;
318 + padding-inline-start: 3px;
319 + padding-inline-end: 3px;
320 + margin-block-start: 0;
321 + margin-block-end: -1px;
322 + margin-inline-start: -3px;
323 + margin-inline-end: -3px;
324 + background-color: var(--search-mark-bg);
325 + transition: background-color 300ms linear;
326 + cursor: pointer;
327 +}
328 +
329 +mark.fade-out {
330 + background-color: rgba(0,0,0,0) !important;
331 + cursor: auto;
332 +}
333 +
334 +.searchbar-outer {
335 + margin-inline-start: auto;
336 + margin-inline-end: auto;
337 + max-width: var(--content-max-width);
338 +}
339 +
340 +#mdbook-searchbar-outer.searching #mdbook-searchbar {
341 + padding-right: 30px;
342 +}
343 +#mdbook-searchbar-outer .spinner-wrapper {
344 + display: none;
345 +}
346 +#mdbook-searchbar-outer.searching .spinner-wrapper {
347 + display: block;
348 +}
349 +
350 +.search-wrapper {
351 + position: relative;
352 +}
353 +
354 +.spinner-wrapper {
355 + --spinner-margin: 2px;
356 + position: absolute;
357 + margin-block-start: calc(var(--searchbar-margin-block-start) + var(--spinner-margin));
358 + right: var(--spinner-margin);
359 + top: 0;
360 + bottom: var(--spinner-margin);
361 + padding: 6px;
362 + background-color: var(--bg);
363 +}
364 +
365 +#fa-spin {
366 + animation: rotating 2s linear infinite;
367 + display: inline-block;
368 +}
369 +
370 +@keyframes rotating {
371 + from {
372 + transform: rotate(0deg);
373 + }
374 + to {
375 + transform: rotate(360deg);
376 + }
377 +}
378 +
379 +#mdbook-searchbar {
380 + width: 100%;
381 + margin-block-start: var(--searchbar-margin-block-start);
382 + margin-block-end: 0;
383 + margin-inline-start: auto;
384 + margin-inline-end: auto;
385 + padding: 10px 16px;
386 + transition: box-shadow 300ms ease-in-out;
387 + border: 1px solid var(--searchbar-border-color);
388 + border-radius: 3px;
389 + background-color: var(--searchbar-bg);
390 + color: var(--searchbar-fg);
391 +}
392 +#mdbook-searchbar:focus,
393 +#mdbook-searchbar.active {
394 + box-shadow: 0 0 3px var(--searchbar-shadow-color);
395 +}
396 +
397 +.searchresults-header {
398 + font-weight: bold;
399 + font-size: 1em;
400 + padding-block-start: 18px;
401 + padding-block-end: 0;
402 + padding-inline-start: 5px;
403 + padding-inline-end: 0;
404 + color: var(--searchresults-header-fg);
405 +}
406 +
407 +.searchresults-outer {
408 + margin-inline-start: auto;
409 + margin-inline-end: auto;
410 + max-width: var(--content-max-width);
411 + border-block-end: 1px dashed var(--searchresults-border-color);
412 +}
413 +
414 +ul#mdbook-searchresults {
415 + list-style: none;
416 + padding-inline-start: 20px;
417 +}
418 +ul#mdbook-searchresults li {
419 + margin: 10px 0px;
420 + padding: 2px;
421 + border-radius: 2px;
422 +}
423 +ul#mdbook-searchresults li.focus {
424 + background-color: var(--searchresults-li-bg);
425 +}
426 +ul#mdbook-searchresults span.teaser {
427 + display: block;
428 + clear: both;
429 + margin-block-start: 5px;
430 + margin-block-end: 0;
431 + margin-inline-start: 20px;
432 + margin-inline-end: 0;
433 + font-size: 0.8em;
434 +}
435 +ul#mdbook-searchresults span.teaser em {
436 + font-weight: bold;
437 + font-style: normal;
438 +}
439 +
440 +/* Sidebar */
441 +
442 +.sidebar {
443 + position: fixed;
444 + left: 0;
445 + top: 0;
446 + bottom: 0;
447 + width: var(--sidebar-width);
448 + font-size: 0.875em;
449 + box-sizing: border-box;
450 + -webkit-overflow-scrolling: touch;
451 + overscroll-behavior-y: contain;
452 + background-color: var(--sidebar-bg);
453 + color: var(--sidebar-fg);
454 +}
455 +.sidebar-iframe-inner {
456 + --padding: 10px;
457 +
458 + background-color: var(--sidebar-bg);
459 + padding: var(--padding);
460 + margin: 0;
461 + font-size: 1.4rem;
462 + color: var(--sidebar-fg);
463 + min-height: calc(100vh - var(--padding) * 2);
464 +}
465 +.sidebar-iframe-outer {
466 + border: none;
467 + height: 100%;
468 + position: absolute;
469 + top: 0;
470 + bottom: 0;
471 + left: 0;
472 + right: 0;
473 +}
474 +[dir=rtl] .sidebar { left: unset; right: 0; }
475 +.sidebar-resizing {
476 + -moz-user-select: none;
477 + -webkit-user-select: none;
478 + -ms-user-select: none;
479 + user-select: none;
480 +}
481 +html:not(.sidebar-resizing) .sidebar {
482 + transition: transform 0.3s; /* Animation: slide away */
483 +}
484 +.sidebar code {
485 + line-height: 2em;
486 +}
487 +.sidebar .sidebar-scrollbox {
488 + overflow-y: auto;
489 + position: absolute;
490 + top: 0;
491 + bottom: 0;
492 + left: 0;
493 + right: 0;
494 + padding: 10px 10px;
495 +}
496 +.sidebar .sidebar-resize-handle {
497 + position: absolute;
498 + cursor: col-resize;
499 + width: 0;
500 + right: calc(var(--sidebar-resize-indicator-width) * -1);
501 + top: 0;
502 + bottom: 0;
503 + display: flex;
504 + align-items: center;
505 +}
506 +
507 +.sidebar-resize-handle .sidebar-resize-indicator {
508 + width: 100%;
509 + height: 16px;
510 + color: var(--icons);
511 + margin-inline-start: var(--sidebar-resize-indicator-space);
512 + display: flex;
513 + align-items: center;
514 + justify-content: flex-start;
515 +}
516 +.sidebar-resize-handle .sidebar-resize-indicator::before {
517 + content: "";
518 + width: 2px;
519 + height: 12px;
520 + border-left: dotted 2px currentColor;
521 +}
522 +.sidebar-resize-handle .sidebar-resize-indicator::after {
523 + content: "";
524 + width: 2px;
525 + height: 16px;
526 + border-left: dotted 2px currentColor;
527 +}
528 +
529 +[dir=rtl] .sidebar .sidebar-resize-handle {
530 + left: calc(var(--sidebar-resize-indicator-width) * -1);
531 + right: unset;
532 +}
533 +.js .sidebar .sidebar-resize-handle {
534 + cursor: col-resize;
535 + width: calc(var(--sidebar-resize-indicator-width) - var(--sidebar-resize-indicator-space));
536 +}
537 +
538 +html:not(.js) .sidebar-resize-handle {
539 + display: none;
540 +}
541 +
542 +/* sidebar-hidden */
543 +#mdbook-sidebar-toggle-anchor:not(:checked) ~ .sidebar {
544 + transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width)));
545 +}
546 +[dir=rtl] #mdbook-sidebar-toggle-anchor:not(:checked) ~ .sidebar {
547 + transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width)));
548 +}
549 +.sidebar::-webkit-scrollbar {
550 + background: var(--sidebar-bg);
551 +}
552 +.sidebar::-webkit-scrollbar-thumb {
553 + background: var(--scrollbar);
554 +}
555 +
556 +/* sidebar-visible */
557 +#mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper {
558 + transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width)));
559 +}
560 +[dir=rtl] #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper {
561 + transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width)));
562 +}
563 +@media only screen and (min-width: 620px) {
564 + #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper {
565 + transform: none;
566 + margin-inline-start: calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width));
567 + }
568 + [dir=rtl] #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper {
569 + transform: none;
570 + }
571 +}
572 +
573 +.chapter {
574 + list-style: none outside none;
575 + padding-inline-start: 0;
576 + line-height: 2.2em;
577 +}
578 +
579 +.chapter li {
580 + color: var(--sidebar-non-existant);
581 +}
582 +
583 +/* This is a span wrapping the chapter link and the fold chevron. */
584 +.chapter-link-wrapper {
585 + /* Used to position the chevron to the right, allowing the text to wrap before it. */
586 + display: flex;
587 +}
588 +
589 +.chapter li a {
590 + /* Remove underlines. */
591 + text-decoration: none;
592 + color: var(--sidebar-fg);
593 +}
594 +
595 +.chapter li a:hover {
596 + color: var(--sidebar-active);
597 +}
598 +
599 +.chapter li a.active {
600 + color: var(--sidebar-active);
601 +}
602 +
603 +/* This is the toggle chevron. */
604 +.chapter-fold-toggle {
605 + cursor: pointer;
606 + /* Positions the chevron to the side. */
607 + margin-inline-start: auto;
608 + padding: 0 10px;
609 + user-select: none;
610 + opacity: 0.68;
611 +}
612 +
613 +.chapter-fold-toggle div {
614 + transition: transform 0.5s;
615 +}
616 +
617 +/* collapse the section */
618 +.chapter li:not(.expanded) > ol {
619 + display: none;
620 +}
621 +
622 +.chapter li.chapter-item {
623 + line-height: 1.5em;
624 + margin-block-start: 0.6em;
625 +}
626 +
627 +/* When expanded, rotate the chevron to point down. */
628 +.chapter li.expanded > span > .chapter-fold-toggle div {
629 + transform: rotate(90deg);
630 +}
631 +
632 +.chapter a.current-header {
633 + color: var(--sidebar-active);
634 +}
635 +
636 +.on-this-page {
637 + margin-left: 22px;
638 + border-inline-start: 4px solid var(--sidebar-header-border-color);
639 + padding-left: 8px;
640 +}
641 +
642 +.on-this-page > ol {
643 + padding-left: 0;
644 +}
645 +
646 +/* Horizontal line in chapter list. */
647 +.spacer {
648 + width: 100%;
649 + height: 3px;
650 + margin: 5px 0px;
651 +}
652 +.chapter .spacer {
653 + background-color: var(--sidebar-spacer);
654 +}
655 +
656 +/* On touch devices, add more vertical spacing to make it easier to tap links. */
657 +@media (-moz-touch-enabled: 1), (pointer: coarse) {
658 + .chapter li a { padding: 5px 0; }
659 + .spacer { margin: 10px 0; }
660 +}
661 +
662 +.section {
663 + list-style: none outside none;
664 + padding-inline-start: 20px;
665 + line-height: 1.9em;
666 +}
667 +
668 +/* Theme Menu Popup */
669 +
670 +.theme-popup {
671 + position: absolute;
672 + left: 10px;
673 + top: var(--menu-bar-height);
674 + z-index: 1000;
675 + border-radius: 4px;
676 + font-size: 0.7em;
677 + color: var(--fg);
678 + background: var(--theme-popup-bg);
679 + border: 1px solid var(--theme-popup-border);
680 + margin: 0;
681 + padding: 0;
682 + list-style: none;
683 + display: none;
684 + /* Don't let the children's background extend past the rounded corners. */
685 + overflow: hidden;
686 +}
687 +[dir=rtl] .theme-popup { left: unset; right: 10px; }
688 +.theme-popup .default {
689 + color: var(--icons);
690 +}
691 +.theme-popup .theme {
692 + width: 100%;
693 + border: 0;
694 + margin: 0;
695 + padding: 2px 20px;
696 + line-height: 25px;
697 + white-space: nowrap;
698 + text-align: start;
699 + cursor: pointer;
700 + color: inherit;
701 + background: inherit;
702 + font-size: inherit;
703 +}
704 +.theme-popup .theme:hover {
705 + background-color: var(--theme-hover);
706 +}
707 +
708 +.theme-selected::before {
709 + display: inline-block;
710 + content: "✓";
711 + margin-inline-start: -14px;
712 + width: 14px;
713 +}
714 +
715 +/* The container for the help popup that covers the whole window. */
716 +#mdbook-help-container {
717 + /* Position and size for the whole window. */
718 + position: fixed;
719 + top: 0;
720 + left: 0;
721 + right: 0;
722 + bottom: 0;
723 + /* This uses flex layout (which is set in book.js), and centers the popup
724 + in the window.*/
725 + display: none;
726 + align-items: center;
727 + justify-content: center;
728 + z-index: 1000;
729 + /* Dim out the book while the popup is visible. */
730 + background: var(--overlay-bg);
731 +}
732 +
733 +/* The popup help box. */
734 +#mdbook-help-popup {
735 + box-shadow: 0 4px 24px rgba(0,0,0,0.15);
736 + min-width: 300px;
737 + max-width: 500px;
738 + width: 100%;
739 + box-sizing: border-box;
740 + display: flex;
741 + flex-direction: column;
742 + align-items: center;
743 + background-color: var(--bg);
744 + color: var(--fg);
745 + border-width: 1px;
746 + border-color: var(--theme-popup-border);
747 + border-style: solid;
748 + border-radius: 8px;
749 + padding: 10px;
750 +}
751 +
752 +.mdbook-help-title {
753 + text-align: center;
754 + /* mdbook's margin for h2 is way too large. */
755 + margin: 10px;
756 +}
A book/css/general-2459343d.css
+408 -0
@@ -0,0 +1,408 @@
1 +/* Base styles and content styles */
2 +
3 +:root {
4 + /* Browser default font-size is 16px, this way 1 rem = 10px */
5 + font-size: 62.5%;
6 + color-scheme: var(--color-scheme);
7 +}
8 +
9 +html {
10 + font-family: "Open Sans", sans-serif;
11 + color: var(--fg);
12 + background-color: var(--bg);
13 + text-size-adjust: none;
14 + -webkit-text-size-adjust: none;
15 +}
16 +
17 +body {
18 + margin: 0;
19 + font-size: 1.6rem;
20 + overflow-x: hidden;
21 +}
22 +
23 +code {
24 + font-family: var(--mono-font) !important;
25 + font-size: var(--code-font-size);
26 + direction: ltr !important;
27 +}
28 +
29 +/* make long words/inline code not x overflow */
30 +main {
31 + overflow-wrap: break-word;
32 +}
33 +
34 +/* make wide tables scroll if they overflow */
35 +.table-wrapper {
36 + overflow-x: auto;
37 +}
38 +
39 +/* Don't change font size in headers. */
40 +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
41 + font-size: unset;
42 +}
43 +
44 +.left { float: left; }
45 +.right { float: right; }
46 +.boring { opacity: 0.6; }
47 +.hide-boring .boring { display: none; }
48 +.hidden { display: none !important; }
49 +
50 +h2, h3 { margin-block-start: 2.5em; }
51 +h4, h5 { margin-block-start: 2em; }
52 +
53 +.header + .header h3,
54 +.header + .header h4,
55 +.header + .header h5 {
56 + margin-block-start: 1em;
57 +}
58 +
59 +h1:target::before,
60 +h2:target::before,
61 +h3:target::before,
62 +h4:target::before,
63 +h5:target::before,
64 +h6:target::before,
65 +dt:target::before {
66 + display: inline-block;
67 + content: "»";
68 + margin-inline-start: -30px;
69 + width: 30px;
70 +}
71 +
72 +/* This is broken on Safari as of version 14, but is fixed
73 + in Safari Technology Preview 117 which I think will be Safari 14.2.
74 + https://bugs.webkit.org/show_bug.cgi?id=218076
75 +*/
76 +:target {
77 + /* Safari does not support logical properties */
78 + scroll-margin-top: calc(var(--menu-bar-height) + 0.5em);
79 +}
80 +
81 +.page {
82 + outline: 0;
83 + padding: 0 var(--page-padding);
84 + margin-block-start: calc(0px - var(--menu-bar-height)); /* Compensate for the #mdbook-menu-bar-hover-placeholder */
85 +}
86 +.page-wrapper {
87 + box-sizing: border-box;
88 + background-color: var(--bg);
89 +}
90 +html:not(.js) .page-wrapper,
91 +.js:not(.sidebar-resizing) .page-wrapper {
92 + transition: margin-left 0.3s ease, transform 0.3s ease; /* Animation: slide away */
93 +}
94 +[dir=rtl]:not(.js) .page-wrapper,
95 +[dir=rtl].js:not(.sidebar-resizing) .page-wrapper {
96 + transition: margin-right 0.3s ease, transform 0.3s ease; /* Animation: slide away */
97 +}
98 +
99 +.content {
100 + overflow-y: auto;
101 + padding: 0 5px 50px 5px;
102 +}
103 +.content main {
104 + margin-inline-start: auto;
105 + margin-inline-end: auto;
106 + max-width: var(--content-max-width);
107 +}
108 +.content p { line-height: 1.45em; }
109 +.content ol { line-height: 1.45em; }
110 +.content ul { line-height: 1.45em; }
111 +.content a { text-decoration: none; }
112 +.content a:hover { text-decoration: underline; }
113 +.content img, .content video { max-width: 100%; }
114 +.content .header:link,
115 +.content .header:visited {
116 + color: var(--fg);
117 +}
118 +.content .header:link,
119 +.content .header:visited:hover {
120 + text-decoration: none;
121 +}
122 +
123 +table {
124 + margin: 0 auto;
125 + border-collapse: collapse;
126 +}
127 +table td {
128 + padding: 3px 20px;
129 + border: 1px var(--table-border-color) solid;
130 +}
131 +table thead {
132 + background: var(--table-header-bg);
133 +}
134 +table thead td {
135 + font-weight: 700;
136 + border: none;
137 +}
138 +table thead th {
139 + padding: 3px 20px;
140 +}
141 +table thead tr {
142 + border: 1px var(--table-header-bg) solid;
143 +}
144 +/* Alternate background colors for rows */
145 +table tbody tr:nth-child(2n) {
146 + background: var(--table-alternate-bg);
147 +}
148 +
149 +
150 +blockquote {
151 + margin: 20px 0;
152 + padding: 0 20px;
153 + color: var(--fg);
154 + background-color: var(--quote-bg);
155 + border-block-start: .1em solid var(--quote-border);
156 + border-block-end: .1em solid var(--quote-border);
157 +}
158 +
159 +/* TODO: Remove .warning in a future version of mdbook, it is replaced by
160 +blockquote tags. */
161 +.warning {
162 + margin: 20px;
163 + padding: 0 20px;
164 + border-inline-start: 2px solid var(--warning-border);
165 +}
166 +
167 +.warning:before {
168 + position: absolute;
169 + width: 3rem;
170 + height: 3rem;
171 + margin-inline-start: calc(-1.5rem - 21px);
172 + content: "ⓘ";
173 + text-align: center;
174 + background-color: var(--bg);
175 + color: var(--warning-border);
176 + font-weight: bold;
177 + font-size: 2rem;
178 +}
179 +
180 +blockquote .warning:before {
181 + background-color: var(--quote-bg);
182 +}
183 +
184 +kbd {
185 + background-color: var(--table-border-color);
186 + border-radius: 4px;
187 + border: solid 1px var(--theme-popup-border);
188 + box-shadow: inset 0 -1px 0 var(--theme-hover);
189 + display: inline-block;
190 + font-size: var(--code-font-size);
191 + font-family: var(--mono-font);
192 + line-height: 10px;
193 + padding: 4px 5px;
194 + vertical-align: middle;
195 +}
196 +
197 +sup {
198 + /* Set the line-height for superscript and footnote references so that there
199 + isn't an awkward space appearing above lines that contain the footnote.
200 +
201 + See https://github.com/rust-lang/mdBook/pull/2443#discussion_r1813773583
202 + for an explanation.
203 + */
204 + line-height: 0;
205 +}
206 +
207 +.footnote-definition {
208 + font-size: 0.9em;
209 +}
210 +/* The default spacing for a list is a little too large. */
211 +.footnote-definition ul,
212 +.footnote-definition ol {
213 + padding-left: 20px;
214 +}
215 +.footnote-definition > li {
216 + /* Required to position the ::before target */
217 + position: relative;
218 +}
219 +.footnote-definition > li:target {
220 + scroll-margin-top: 50vh;
221 +}
222 +.footnote-reference:target {
223 + scroll-margin-top: 50vh;
224 +}
225 +/* Draws a border around the footnote (including the marker) when it is selected.
226 + TODO: If there are multiple linkbacks, highlight which one you just came
227 + from so you know which one to click.
228 +*/
229 +.footnote-definition > li:target::before {
230 + border: 2px solid var(--footnote-highlight);
231 + border-radius: 6px;
232 + position: absolute;
233 + top: -8px;
234 + right: -8px;
235 + bottom: -8px;
236 + left: -32px;
237 + pointer-events: none;
238 + content: "";
239 +}
240 +/* Pulses the footnote reference so you can quickly see where you left off reading.
241 + This could use some improvement.
242 +*/
243 +@media not (prefers-reduced-motion) {
244 + .footnote-reference:target {
245 + animation: fn-highlight 0.8s;
246 + border-radius: 2px;
247 + }
248 +
249 + @keyframes fn-highlight {
250 + from {
251 + background-color: var(--footnote-highlight);
252 + }
253 + }
254 +}
255 +
256 +.tooltiptext {
257 + position: absolute;
258 + visibility: hidden;
259 + color: #fff;
260 + background-color: #333;
261 + transform: translateX(-50%); /* Center by moving tooltip 50% of its width left */
262 + left: -8px; /* Half of the width of the icon */
263 + top: -35px;
264 + font-size: 0.8em;
265 + text-align: center;
266 + border-radius: 6px;
267 + padding: 5px 8px;
268 + margin: 5px;
269 + z-index: 1000;
270 +}
271 +.tooltipped .tooltiptext {
272 + visibility: visible;
273 +}
274 +
275 +.chapter li.part-title {
276 + color: var(--sidebar-fg);
277 + margin: 5px 0px;
278 + font-weight: bold;
279 +}
280 +
281 +.result-no-output {
282 + font-style: italic;
283 +}
284 +
285 +.fa-svg svg {
286 + width: 1em;
287 + height: 1em;
288 + fill: currentColor;
289 + margin-bottom: -0.1em;
290 +}
291 +
292 +dt {
293 + font-weight: bold;
294 + margin-top: 0.5em;
295 + margin-bottom: 0.1em;
296 +}
297 +
298 +/* This uses a CSS counter to add numbers to definitions, but only if there is
299 + more than one definition. */
300 +dl, dt {
301 + counter-reset: dd-counter;
302 +}
303 +
304 +/* When there is more than one definition, increment the counter. The first
305 +selector selects the first definition, and the second one selects definitions
306 +2 and beyond.*/
307 +dd:has(+ dd), dd + dd {
308 + counter-increment: dd-counter;
309 + /* Use flex display to help with positioning the numbers when there is a p
310 + tag inside the definition. */
311 + display: flex;
312 + align-items: flex-start;
313 +}
314 +
315 +/* Shows the counter for definitions. The first selector selects the first
316 +definition, and the second one selections definitions 2 and beyond.*/
317 +dd:has(+ dd)::before, dd + dd::before {
318 + content: counter(dd-counter) ". ";
319 + font-weight: 600;
320 + display: inline-block;
321 + margin-right: 0.5em;
322 +}
323 +
324 +dd > p {
325 + /* For loose definitions that have a p tag inside, don't add a bunch of
326 + space before the definition. */
327 + margin-top: 0;
328 +}
329 +
330 +/* Remove some excess space from the bottom. */
331 +.blockquote-tag p:last-child {
332 + margin-bottom: 2px;
333 +}
334 +
335 +.blockquote-tag {
336 + /* Add some padding to make the vertical bar a little taller than the text.*/
337 + padding: 2px 0px 2px 20px;
338 + /* Add a solid color bar on the left side. */
339 + border-inline-start-style: solid;
340 + border-inline-start-width: 4px;
341 + /* Disable the background color from normal blockquotes . */
342 + background-color: inherit;
343 + /* Disable border blocks from blockquotes. */
344 + border-block-start: none;
345 + border-block-end: none;
346 +}
347 +
348 +.blockquote-tag-title svg {
349 + fill: currentColor;
350 + /* Add space between the icon and the title. */
351 + margin-right: 8px;
352 +}
353 +
354 +.blockquote-tag-note {
355 + border-inline-start-color: var(--blockquote-note-color);
356 +}
357 +
358 +.blockquote-tag-tip {
359 + border-inline-start-color: var(--blockquote-tip-color);
360 +}
361 +
362 +.blockquote-tag-important {
363 + border-inline-start-color: var(--blockquote-important-color);
364 +}
365 +
366 +.blockquote-tag-warning {
367 + border-inline-start-color: var(--blockquote-warning-color);
368 +}
369 +
370 +.blockquote-tag-caution {
371 + border-inline-start-color: var(--blockquote-caution-color);
372 +}
373 +
374 +.blockquote-tag-note .blockquote-tag-title {
375 + color: var(--blockquote-note-color);
376 +}
377 +
378 +.blockquote-tag-tip .blockquote-tag-title {
379 + color: var(--blockquote-tip-color);
380 +}
381 +
382 +.blockquote-tag-important .blockquote-tag-title {
383 + color: var(--blockquote-important-color);
384 +}
385 +
386 +.blockquote-tag-warning .blockquote-tag-title {
387 + color: var(--blockquote-warning-color);
388 +}
389 +
390 +.blockquote-tag-caution .blockquote-tag-title {
391 + color: var(--blockquote-caution-color);
392 +}
393 +
394 +.blockquote-tag-title {
395 + /* Slightly increase the weight for more emphasis. */
396 + font-weight: 600;
397 + /* Vertically center the icon with the text. */
398 + display: flex;
399 + align-items: center;
400 + /* Remove default large margins for a more compact display. */
401 + margin: 2px 0 8px 0;
402 +}
403 +
404 +.blockquote-tag-title .fa-svg {
405 + fill: currentColor;
406 + /* Add some space between the icon and the text. */
407 + margin-right: 8px;
408 +}
A book/css/print-9e4910d8.css
+50 -0
@@ -0,0 +1,50 @@
1 +
2 +#mdbook-sidebar,
3 +#mdbook-menu-bar,
4 +.nav-chapters,
5 +.mobile-nav-chapters {
6 + display: none;
7 +}
8 +
9 +#mdbook-page-wrapper.page-wrapper {
10 + transform: none !important;
11 + margin-inline-start: 0px;
12 + overflow-y: initial;
13 +}
14 +
15 +#mdbook-content {
16 + max-width: none;
17 + margin: 0;
18 + padding: 0;
19 +}
20 +
21 +.page {
22 + overflow-y: initial;
23 +}
24 +
25 +code {
26 + direction: ltr !important;
27 +}
28 +
29 +pre > .buttons {
30 + z-index: 2;
31 +}
32 +
33 +a, a:visited, a:active, a:hover {
34 + color: #4183c4;
35 + text-decoration: none;
36 +}
37 +
38 +h1, h2, h3, h4, h5, h6 {
39 + page-break-inside: avoid;
40 + page-break-after: avoid;
41 +}
42 +
43 +pre, code {
44 + page-break-inside: avoid;
45 + white-space: pre-wrap;
46 +}
47 +
48 +.fa {
49 + display: none !important;
50 +}
A book/css/variables-8adf115d.css
+383 -0
@@ -0,0 +1,383 @@
1 +
2 +/* Globals */
3 +
4 +:root {
5 + --sidebar-target-width: 300px;
6 + --sidebar-width: min(var(--sidebar-target-width), 80vw);
7 + --sidebar-resize-indicator-width: 8px;
8 + --sidebar-resize-indicator-space: 2px;
9 + --page-padding: 15px;
10 + --content-max-width: 750px;
11 + --menu-bar-height: 50px;
12 + --mono-font: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace, monospace;
13 + --code-font-size: 0.875em; /* please adjust the ace font size accordingly in editor.js */
14 + --searchbar-margin-block-start: 5px;
15 +}
16 +
17 +/* Themes */
18 +
19 +.ayu {
20 + --bg: hsl(210, 25%, 8%);
21 + --fg: #c5c5c5;
22 +
23 + --sidebar-bg: #14191f;
24 + --sidebar-fg: #c8c9db;
25 + --sidebar-non-existant: #5c6773;
26 + --sidebar-active: #ffb454;
27 + --sidebar-spacer: #2d334f;
28 +
29 + --scrollbar: var(--sidebar-fg);
30 +
31 + --icons: #737480;
32 + --icons-hover: #b7b9cc;
33 +
34 + --links: #0096cf;
35 +
36 + --inline-code-color: #ffb454;
37 +
38 + --theme-popup-bg: #14191f;
39 + --theme-popup-border: #5c6773;
40 + --theme-hover: #191f26;
41 +
42 + --quote-bg: hsl(226, 15%, 17%);
43 + --quote-border: hsl(226, 15%, 22%);
44 +
45 + --warning-border: #ff8e00;
46 +
47 + --table-border-color: hsl(210, 25%, 13%);
48 + --table-header-bg: hsl(210, 25%, 28%);
49 + --table-alternate-bg: hsl(210, 25%, 11%);
50 +
51 + --searchbar-border-color: #848484;
52 + --searchbar-bg: #424242;
53 + --searchbar-fg: #fff;
54 + --searchbar-shadow-color: #d4c89f;
55 + --searchresults-header-fg: #666;
56 + --searchresults-border-color: #888;
57 + --searchresults-li-bg: #252932;
58 + --search-mark-bg: #e3b171;
59 +
60 + --color-scheme: dark;
61 +
62 + /* Same as `--icons` */
63 + --copy-button-filter: invert(45%) sepia(6%) saturate(621%) hue-rotate(198deg) brightness(99%) contrast(85%);
64 + /* Same as `--sidebar-active` */
65 + --copy-button-filter-hover: invert(68%) sepia(55%) saturate(531%) hue-rotate(341deg) brightness(104%) contrast(101%);
66 +
67 + --footnote-highlight: #2668a6;
68 +
69 + --overlay-bg: rgba(33, 40, 48, 0.4);
70 +
71 + --blockquote-note-color: #74b9ff;
72 + --blockquote-tip-color: #09ca09;
73 + --blockquote-important-color: #d3abff;
74 + --blockquote-warning-color: #f0b72f;
75 + --blockquote-caution-color: #f21424;
76 +
77 + --sidebar-header-border-color: #c18639;
78 +}
79 +
80 +.coal {
81 + --bg: hsl(200, 7%, 8%);
82 + --fg: #98a3ad;
83 +
84 + --sidebar-bg: #292c2f;
85 + --sidebar-fg: #a1adb8;
86 + --sidebar-non-existant: #505254;
87 + --sidebar-active: #3473ad;
88 + --sidebar-spacer: #393939;
89 +
90 + --scrollbar: var(--sidebar-fg);
91 +
92 + --icons: #43484d;
93 + --icons-hover: #b3c0cc;
94 +
95 + --links: #2b79a2;
96 +
97 + --inline-code-color: #c5c8c6;
98 +
99 + --theme-popup-bg: #141617;
100 + --theme-popup-border: #43484d;
101 + --theme-hover: #1f2124;
102 +
103 + --quote-bg: hsl(234, 21%, 18%);
104 + --quote-border: hsl(234, 21%, 23%);
105 +
106 + --warning-border: #ff8e00;
107 +
108 + --table-border-color: hsl(200, 7%, 13%);
109 + --table-header-bg: hsl(200, 7%, 28%);
110 + --table-alternate-bg: hsl(200, 7%, 11%);
111 +
112 + --searchbar-border-color: #aaa;
113 + --searchbar-bg: #b7b7b7;
114 + --searchbar-fg: #000;
115 + --searchbar-shadow-color: #aaa;
116 + --searchresults-header-fg: #666;
117 + --searchresults-border-color: #98a3ad;
118 + --searchresults-li-bg: #2b2b2f;
119 + --search-mark-bg: #355c7d;
120 +
121 + --color-scheme: dark;
122 +
123 + /* Same as `--icons` */
124 + --copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%);
125 + /* Same as `--sidebar-active` */
126 + --copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%);
127 +
128 + --footnote-highlight: #4079ae;
129 +
130 + --overlay-bg: rgba(33, 40, 48, 0.4);
131 +
132 + --blockquote-note-color: #4493f8;
133 + --blockquote-tip-color: #08ae08;
134 + --blockquote-important-color: #ab7df8;
135 + --blockquote-warning-color: #d29922;
136 + --blockquote-caution-color: #d91b29;
137 +
138 + --sidebar-header-border-color: #3473ad;
139 +}
140 +
141 +.light, html:not(.js) {
142 + --bg: hsl(0, 0%, 100%);
143 + --fg: hsl(0, 0%, 0%);
144 +
145 + --sidebar-bg: #fafafa;
146 + --sidebar-fg: hsl(0, 0%, 0%);
147 + --sidebar-non-existant: #aaaaaa;
148 + --sidebar-active: #1f1fff;
149 + --sidebar-spacer: #f4f4f4;
150 +
151 + --scrollbar: #8F8F8F;
152 +
153 + --icons: #747474;
154 + --icons-hover: #000000;
155 +
156 + --links: #20609f;
157 +
158 + --inline-code-color: #301900;
159 +
160 + --theme-popup-bg: #fafafa;
161 + --theme-popup-border: #cccccc;
162 + --theme-hover: #e6e6e6;
163 +
164 + --quote-bg: hsl(197, 37%, 96%);
165 + --quote-border: hsl(197, 37%, 91%);
166 +
167 + --warning-border: #ff8e00;
168 +
169 + --table-border-color: hsl(0, 0%, 95%);
170 + --table-header-bg: hsl(0, 0%, 80%);
171 + --table-alternate-bg: hsl(0, 0%, 97%);
172 +
173 + --searchbar-border-color: #aaa;
174 + --searchbar-bg: #fafafa;
175 + --searchbar-fg: #000;
176 + --searchbar-shadow-color: #aaa;
177 + --searchresults-header-fg: #666;
178 + --searchresults-border-color: #888;
179 + --searchresults-li-bg: #e4f2fe;
180 + --search-mark-bg: #a2cff5;
181 +
182 + --color-scheme: light;
183 +
184 + /* Same as `--icons` */
185 + --copy-button-filter: invert(45.49%);
186 + /* Same as `--sidebar-active` */
187 + --copy-button-filter-hover: invert(14%) sepia(93%) saturate(4250%) hue-rotate(243deg) brightness(99%) contrast(130%);
188 +
189 + --footnote-highlight: #7e7eff;
190 +
191 + --overlay-bg: rgba(200, 200, 205, 0.4);
192 +
193 + --blockquote-note-color: #0969da;
194 + --blockquote-tip-color: #008000;
195 + --blockquote-important-color: #8250df;
196 + --blockquote-warning-color: #9a6700;
197 + --blockquote-caution-color: #b52731;
198 +
199 + --sidebar-header-border-color: #6e6edb;
200 +}
201 +
202 +.navy {
203 + --bg: hsl(226, 23%, 11%);
204 + --fg: #bcbdd0;
205 +
206 + --sidebar-bg: #282d3f;
207 + --sidebar-fg: #c8c9db;
208 + --sidebar-non-existant: #505274;
209 + --sidebar-active: #2b79a2;
210 + --sidebar-spacer: #2d334f;
211 +
212 + --scrollbar: var(--sidebar-fg);
213 +
214 + --icons: #737480;
215 + --icons-hover: #b7b9cc;
216 +
217 + --links: #2b79a2;
218 +
219 + --inline-code-color: #c5c8c6;
220 +
221 + --theme-popup-bg: #161923;
222 + --theme-popup-border: #737480;
223 + --theme-hover: #282e40;
224 +
225 + --quote-bg: hsl(226, 15%, 17%);
226 + --quote-border: hsl(226, 15%, 22%);
227 +
228 + --warning-border: #ff8e00;
229 +
230 + --table-border-color: hsl(226, 23%, 16%);
231 + --table-header-bg: hsl(226, 23%, 31%);
232 + --table-alternate-bg: hsl(226, 23%, 14%);
233 +
234 + --searchbar-border-color: #aaa;
235 + --searchbar-bg: #aeaec6;
236 + --searchbar-fg: #000;
237 + --searchbar-shadow-color: #aaa;
238 + --searchresults-header-fg: #5f5f71;
239 + --searchresults-border-color: #5c5c68;
240 + --searchresults-li-bg: #242430;
241 + --search-mark-bg: #a2cff5;
242 +
243 + --color-scheme: dark;
244 +
245 + /* Same as `--icons` */
246 + --copy-button-filter: invert(51%) sepia(10%) saturate(393%) hue-rotate(198deg) brightness(86%) contrast(87%);
247 + /* Same as `--sidebar-active` */
248 + --copy-button-filter-hover: invert(46%) sepia(20%) saturate(1537%) hue-rotate(156deg) brightness(85%) contrast(90%);
249 +
250 + --footnote-highlight: #4079ae;
251 +
252 + --overlay-bg: rgba(33, 40, 48, 0.4);
253 +
254 + --blockquote-note-color: #4493f8;
255 + --blockquote-tip-color: #09ca09;
256 + --blockquote-important-color: #ab7df8;
257 + --blockquote-warning-color: #d29922;
258 + --blockquote-caution-color: #f21424;
259 +
260 + --sidebar-header-border-color: #2f6ab5;
261 +}
262 +
263 +.rust {
264 + --bg: hsl(60, 9%, 87%);
265 + --fg: #262625;
266 +
267 + --sidebar-bg: #3b2e2a;
268 + --sidebar-fg: #c8c9db;
269 + --sidebar-non-existant: #505254;
270 + --sidebar-active: #e69f67;
271 + --sidebar-spacer: #45373a;
272 +
273 + --scrollbar: var(--sidebar-fg);
274 +
275 + --icons: #737480;
276 + --icons-hover: #262625;
277 +
278 + --links: #2b79a2;
279 +
280 + --inline-code-color: #6e6b5e;
281 +
282 + --theme-popup-bg: #e1e1db;
283 + --theme-popup-border: #b38f6b;
284 + --theme-hover: #99908a;
285 +
286 + --quote-bg: hsl(60, 5%, 75%);
287 + --quote-border: hsl(60, 5%, 70%);
288 +
289 + --warning-border: #ff8e00;
290 +
291 + --table-border-color: hsl(60, 9%, 82%);
292 + --table-header-bg: #b3a497;
293 + --table-alternate-bg: hsl(60, 9%, 84%);
294 +
295 + --searchbar-border-color: #aaa;
296 + --searchbar-bg: #fafafa;
297 + --searchbar-fg: #000;
298 + --searchbar-shadow-color: #aaa;
299 + --searchresults-header-fg: #666;
300 + --searchresults-border-color: #888;
301 + --searchresults-li-bg: #dec2a2;
302 + --search-mark-bg: #e69f67;
303 +
304 + /* Same as `--icons` */
305 + --copy-button-filter: invert(51%) sepia(10%) saturate(393%) hue-rotate(198deg) brightness(86%) contrast(87%);
306 + /* Same as `--sidebar-active` */
307 + --copy-button-filter-hover: invert(77%) sepia(16%) saturate(1798%) hue-rotate(328deg) brightness(98%) contrast(83%);
308 +
309 + --footnote-highlight: #d3a17a;
310 +
311 + --overlay-bg: rgba(150, 150, 150, 0.25);
312 +
313 + --blockquote-note-color: #023b95;
314 + --blockquote-tip-color: #007700;
315 + --blockquote-important-color: #8250df;
316 + --blockquote-warning-color: #603700;
317 + --blockquote-caution-color: #aa1721;
318 +
319 + --sidebar-header-border-color: #8c391f;
320 +}
321 +
322 +@media (prefers-color-scheme: dark) {
323 + html:not(.js) {
324 + --bg: hsl(200, 7%, 8%);
325 + --fg: #98a3ad;
326 +
327 + --sidebar-bg: #292c2f;
328 + --sidebar-fg: #a1adb8;
329 + --sidebar-non-existant: #505254;
330 + --sidebar-active: #3473ad;
331 + --sidebar-spacer: #393939;
332 +
333 + --scrollbar: var(--sidebar-fg);
334 +
335 + --icons: #43484d;
336 + --icons-hover: #b3c0cc;
337 +
338 + --links: #2b79a2;
339 +
340 + --inline-code-color: #c5c8c6;
341 +
342 + --theme-popup-bg: #141617;
343 + --theme-popup-border: #43484d;
344 + --theme-hover: #1f2124;
345 +
346 + --quote-bg: hsl(234, 21%, 18%);
347 + --quote-border: hsl(234, 21%, 23%);
348 +
349 + --warning-border: #ff8e00;
350 +
351 + --table-border-color: hsl(200, 7%, 13%);
352 + --table-header-bg: hsl(200, 7%, 28%);
353 + --table-alternate-bg: hsl(200, 7%, 11%);
354 +
355 + --searchbar-border-color: #aaa;
356 + --searchbar-bg: #b7b7b7;
357 + --searchbar-fg: #000;
358 + --searchbar-shadow-color: #aaa;
359 + --searchresults-header-fg: #666;
360 + --searchresults-border-color: #98a3ad;
361 + --searchresults-li-bg: #2b2b2f;
362 + --search-mark-bg: #355c7d;
363 +
364 + --color-scheme: dark;
365 +
366 + /* Same as `--icons` */
367 + --copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%);
368 + /* Same as `--sidebar-active` */
369 + --copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%);
370 +
371 + --footnote-highlight: #4079ae;
372 +
373 + --overlay-bg: rgba(33, 40, 48, 0.4);
374 +
375 + --blockquote-note-color: #4493f8;
376 + --blockquote-tip-color: #08ae08;
377 + --blockquote-important-color: #ab7df8;
378 + --blockquote-warning-color: #d29922;
379 + --blockquote-caution-color: #d91b29;
380 +
381 + --sidebar-header-border-color: #3473ad;
382 + }
383 +}
A book/developer_manual/explanation/2fa-fonctionnement.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Fonctionnement du 2FA - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/explanation/2fa-fonctionnement.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="fonctionnement-du-2fa"><a class="header" href="#fonctionnement-du-2fa">Fonctionnement du 2FA</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/explanation/modele-permissions-rbac.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/explanation/hierarchie-labels.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/explanation/modele-permissions-rbac.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/explanation/hierarchie-labels.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/explanation/ci-dagger-easy-vs-power.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>CI Dagger : Easy Mode vs Power Mode - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/explanation/ci-dagger-easy-vs-power.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="ci-dagger--easy-mode-vs-power-mode"><a class="header" href="#ci-dagger--easy-mode-vs-power-mode">CI Dagger : Easy Mode vs Power Mode</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/explanation/hierarchie-labels.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/explanation/decisions-ui-htmx.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/explanation/hierarchie-labels.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/explanation/decisions-ui-htmx.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/explanation/decisions-ui-htmx.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Décisions UI (HTMX, DaisyUI) - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/explanation/decisions-ui-htmx.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="décisions-ui-htmx-daisyui"><a class="header" href="#décisions-ui-htmx-daisyui">Décisions UI (HTMX, DaisyUI)</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/explanation/ci-dagger-easy-vs-power.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/explanation/patron-worker-async.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/explanation/ci-dagger-easy-vs-power.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/explanation/patron-worker-async.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/explanation/flux-requetes.html
+498 -0
@@ -0,0 +1,498 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Flux de requêtes - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/explanation/flux-requetes.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="flux-de-requêtes"><a class="header" href="#flux-de-requêtes">Flux de requêtes</a></h1>
181 +<p>Diagrammes de séquence couvrant les opérations principales de gitrust : création de dépôt, clone et push SSH, enregistrement de clé SSH, résolution des permissions, navigation web, inscription utilisateur.</p>
182 +<h2 id="1-création-dun-dépôt-web"><a class="header" href="#1-création-dun-dépôt-web">1. Création d’un dépôt (Web)</a></h2>
183 +<pre class="mermaid">sequenceDiagram
184 + actor User as Utilisateur
185 + participant Web as gitrust-web
186 + participant RepoSvc as RepositoryService
187 + participant ResSvc as ResourceService
188 + participant DB as PostgreSQL
189 + participant Git as gitrust-git
190 + participant FS as Système de fichiers
191 +
192 + User-&gt;&gt;Web: POST /new {name, description}
193 + Web-&gt;&gt;Web: Extraire user_id (session JWT)
194 +
195 + Web-&gt;&gt;RepoSvc: create(db, owner_id, username, base_path, input)
196 + RepoSvc-&gt;&gt;RepoSvc: RepoSlug::from_name(input.name)
197 + RepoSvc-&gt;&gt;DB: SELECT ... WHERE owner_id AND slug
198 + DB--&gt;&gt;RepoSvc: None (pas de doublon)
199 +
200 + RepoSvc-&gt;&gt;RepoSvc: compute_disk_path(base, owner, slug)
201 + Note over RepoSvc: Validation anti path-traversal
202 +
203 + RepoSvc-&gt;&gt;ResSvc: register(db, "repository", repo_id, owner_id)
204 + ResSvc-&gt;&gt;DB: INSERT INTO resources
205 + DB--&gt;&gt;ResSvc: Ok
206 +
207 + RepoSvc-&gt;&gt;DB: INSERT INTO repositories
208 + DB--&gt;&gt;RepoSvc: repository::Model
209 +
210 + RepoSvc--&gt;&gt;Web: RepositoryOutput
211 +
212 + Web-&gt;&gt;Git: BareRepo::init(disk_path)
213 + Git-&gt;&gt;FS: git init --bare
214 + FS--&gt;&gt;Git: Ok
215 + Git--&gt;&gt;Web: Ok
216 +
217 + Web--&gt;&gt;User: 302 Redirect /{owner}/{slug}
218 +</pre>
219 +
220 +<h2 id="2-clone-ssh-git-clone"><a class="header" href="#2-clone-ssh-git-clone">2. Clone SSH (git clone)</a></h2>
221 +<pre class="mermaid">sequenceDiagram
222 + actor Dev as Développeur
223 + participant Client as Git CLI
224 + participant SSH as gitrust-ssh
225 + participant Auth as SshKeyService
226 + participant Access as AccessService
227 + participant Git as gitrust-git
228 + participant DB as PostgreSQL
229 + participant FS as Bare repo (.git)
230 +
231 + Dev-&gt;&gt;Client: git clone ssh://git@host:2222/alice/my-repo.git
232 + Client-&gt;&gt;SSH: Connexion TCP :2222
233 + SSH--&gt;&gt;Client: Banner SSH + échange clés
234 +
235 + Client-&gt;&gt;SSH: Auth publickey (signature)
236 + SSH-&gt;&gt;Auth: find_by_fingerprint(db, fingerprint)
237 + Auth-&gt;&gt;DB: SELECT FROM ssh_keys WHERE fingerprint = ?
238 + DB--&gt;&gt;Auth: ssh_key::Model {user_id, ...}
239 + Auth--&gt;&gt;SSH: user_id
240 +
241 + SSH-&gt;&gt;Auth: update_last_used(db, key_id)
242 + Auth-&gt;&gt;DB: UPDATE ssh_keys SET last_used_at = now()
243 +
244 + SSH--&gt;&gt;Client: Auth OK
245 +
246 + Client-&gt;&gt;SSH: exec "git-upload-pack 'alice/my-repo.git'"
247 + SSH-&gt;&gt;SSH: CommandHandler::parse("git-upload-pack alice/my-repo.git")
248 + Note over SSH: Extraction owner=alice, repo=my-repo
249 +
250 + SSH-&gt;&gt;Access: effective_role(db, user_id, repo_id)
251 + Access-&gt;&gt;DB: Check ownership + shares + teams
252 + DB--&gt;&gt;Access: Role::Developer
253 + Access--&gt;&gt;SSH: can_read = true
254 +
255 + SSH-&gt;&gt;Git: pack_protocol::advertise_refs(repo_path)
256 + Git-&gt;&gt;FS: Lecture refs
257 + FS--&gt;&gt;Git: refs/heads/main, ...
258 + Git--&gt;&gt;SSH: advertise output
259 +
260 + SSH--&gt;&gt;Client: refs advertisement
261 + Client-&gt;&gt;SSH: want/have negotiation
262 +
263 + SSH-&gt;&gt;Git: pack_protocol::serve_pack(repo_path, wants, haves)
264 + Git-&gt;&gt;FS: Pack objects
265 + FS--&gt;&gt;Git: pack data
266 + Git--&gt;&gt;SSH: pack stream
267 +
268 + SSH--&gt;&gt;Client: pack data
269 + Client--&gt;&gt;Dev: Dépôt cloné avec succès
270 +</pre>
271 +
272 +<h2 id="3-push-ssh-git-push"><a class="header" href="#3-push-ssh-git-push">3. Push SSH (git push)</a></h2>
273 +<pre class="mermaid">sequenceDiagram
274 + actor Dev as Développeur
275 + participant Client as Git CLI
276 + participant SSH as gitrust-ssh
277 + participant Access as AccessService
278 + participant Git as gitrust-git
279 + participant Hooks as gitrust-hooks
280 + participant DB as PostgreSQL
281 + participant FS as Bare repo (.git)
282 +
283 + Note over Client,SSH: Session SSH déjà authentifiée
284 +
285 + Client-&gt;&gt;SSH: exec "git-receive-pack 'alice/my-repo.git'"
286 + SSH-&gt;&gt;SSH: CommandHandler::parse(...)
287 + Note over SSH: Extraction owner=alice, repo=my-repo
288 +
289 + SSH-&gt;&gt;Access: effective_role(db, user_id, repo_id)
290 + Access-&gt;&gt;DB: Check ownership + shares + teams
291 + DB--&gt;&gt;Access: Role::Developer
292 + Access--&gt;&gt;SSH: can_push = true
293 +
294 + SSH-&gt;&gt;Git: pack_protocol::advertise_refs(repo_path)
295 + Git-&gt;&gt;FS: Lecture refs
296 + Git--&gt;&gt;SSH: refs advertisement
297 +
298 + SSH--&gt;&gt;Client: refs
299 + Client-&gt;&gt;SSH: pack data + commands
300 +
301 + SSH-&gt;&gt;Git: pack_protocol::serve_pack(repo_path, receive-pack)
302 + Git-&gt;&gt;FS: Écriture objets + update refs
303 + FS--&gt;&gt;Git: Ok
304 + Git--&gt;&gt;SSH: Ok
305 +
306 + SSH-&gt;&gt;DB: UPDATE repositories SET is_empty = false, updated_at = now()
307 +
308 + SSH--&gt;&gt;Client: Push OK
309 + Client--&gt;&gt;Dev: Push réussi
310 +</pre>
311 +
312 +<h2 id="4-enregistrement-dune-clé-ssh"><a class="header" href="#4-enregistrement-dune-clé-ssh">4. Enregistrement d’une clé SSH</a></h2>
313 +<pre class="mermaid">sequenceDiagram
314 + actor User as Utilisateur
315 + participant Web as gitrust-web
316 + participant Svc as SshKeyService
317 + participant DB as PostgreSQL
318 +
319 + User-&gt;&gt;Web: POST /settings/keys {title, key_data}
320 + Web-&gt;&gt;Web: Extraire user_id (session)
321 +
322 + Web-&gt;&gt;Svc: create(db, user_id, input)
323 +
324 + Svc-&gt;&gt;Svc: parse_public_key(key_data)
325 + Note over Svc: Extraire type + décoder base64
326 +
327 + Svc-&gt;&gt;Svc: validate_key_type_and_size(type, bytes)
328 + Note over Svc: ed25519 OK&lt;br/&gt;RSA &gt;= 4096 bits&lt;br/&gt;ecdsa-p256/p384 OK
329 +
330 + Svc-&gt;&gt;Svc: compute_fingerprint(bytes)
331 + Note over Svc: SHA256(key_bytes) -&gt; base64-no-pad
332 +
333 + Svc-&gt;&gt;DB: SELECT FROM ssh_keys WHERE fingerprint = ?
334 + DB--&gt;&gt;Svc: None (pas de doublon)
335 +
336 + Svc-&gt;&gt;DB: INSERT INTO ssh_keys
337 + DB--&gt;&gt;Svc: ssh_key::Model
338 +
339 + Svc--&gt;&gt;Web: SshKeyOutput
340 + Web--&gt;&gt;User: 200 Clé ajoutée (fingerprint affiché)
341 +</pre>
342 +
343 +<h2 id="5-résolution-des-permissions-accessservice"><a class="header" href="#5-résolution-des-permissions-accessservice">5. Résolution des permissions (AccessService)</a></h2>
344 +<pre class="mermaid">sequenceDiagram
345 + participant Caller as Handler / SSH Session
346 + participant AS as AccessService
347 + participant RS as ResourceService
348 + participant DB as PostgreSQL
349 +
350 + Caller-&gt;&gt;AS: effective_role(db, user_id, repo_id)
351 +
352 + AS-&gt;&gt;RS: effective_permission(db, user_id, "repository", repo_id)
353 + RS-&gt;&gt;DB: SELECT FROM resources WHERE type AND id
354 + DB--&gt;&gt;RS: resource {owner_id, is_public}
355 +
356 + alt user_id == owner_id
357 + RS--&gt;&gt;AS: "owner"
358 + else Share exists
359 + RS-&gt;&gt;DB: SELECT FROM resource_shares WHERE resource AND user
360 + DB--&gt;&gt;RS: share {permission_level}
361 + RS--&gt;&gt;AS: permission_level
362 + else Resource is public
363 + RS--&gt;&gt;AS: "read"
364 + else No access
365 + RS--&gt;&gt;AS: None
366 + end
367 +
368 + AS-&gt;&gt;AS: Role::from_permission(individual_level)
369 +
370 + AS-&gt;&gt;DB: SELECT team_members + team_repository_access&lt;br/&gt;WHERE user_id AND repository_id
371 + DB--&gt;&gt;AS: Vec&lt;team_permission&gt;
372 +
373 + AS-&gt;&gt;AS: team_role = max(team_permissions)
374 + AS-&gt;&gt;AS: effective = max(individual_role, team_role)
375 +
376 + AS--&gt;&gt;Caller: Role (Reader / Developer / Maintainer / Owner)
377 +</pre>
378 +
379 +<h2 id="6-navigation-dans-un-dépôt-web"><a class="header" href="#6-navigation-dans-un-dépôt-web">6. Navigation dans un dépôt (Web)</a></h2>
380 +<pre class="mermaid">sequenceDiagram
381 + actor User as Utilisateur
382 + participant Web as gitrust-web
383 + participant Ext as RepoExtractor
384 + participant Access as AccessService
385 + participant Git as gitrust-git
386 + participant DB as PostgreSQL
387 + participant FS as Bare repo
388 +
389 + User-&gt;&gt;Web: GET /alice/my-repo/tree/main/src
390 + Web-&gt;&gt;Ext: RepoContext::extract(owner=alice, repo=my-repo, ref=main, path=src)
391 +
392 + Ext-&gt;&gt;DB: SELECT user WHERE username = 'alice'
393 + DB--&gt;&gt;Ext: user {id}
394 +
395 + Ext-&gt;&gt;DB: SELECT repository WHERE owner_id AND slug
396 + DB--&gt;&gt;Ext: repository::Model
397 +
398 + Ext-&gt;&gt;Access: effective_role(db, visitor_id, repo_id)
399 + Access--&gt;&gt;Ext: Role::Reader
400 +
401 + Ext--&gt;&gt;Web: RepoContext {repo, role, ref, path}
402 +
403 + Web-&gt;&gt;Git: tree_browser::list_tree(repo_path, "main", "src")
404 + Git-&gt;&gt;FS: Resolve ref main -&gt; commit -&gt; tree -&gt; src/
405 + FS--&gt;&gt;Git: Vec&lt;TreeEntry&gt;
406 +
407 + Git--&gt;&gt;Web: entries (fichiers + dossiers)
408 +
409 + Web-&gt;&gt;Git: readme::find_readme(repo_path, "main", "src")
410 + Git-&gt;&gt;FS: Cherche README.md, README, readme.md
411 + FS--&gt;&gt;Git: Option&lt;BlobContent&gt;
412 + Git--&gt;&gt;Web: Option&lt;readme_content&gt;
413 +
414 + Web-&gt;&gt;Web: Render template tree.html
415 + Web--&gt;&gt;User: HTML (arbre + README)
416 +</pre>
417 +
418 +<h2 id="7-inscription-utilisateur--création-répertoire"><a class="header" href="#7-inscription-utilisateur--création-répertoire">7. Inscription utilisateur + création répertoire</a></h2>
419 +<pre class="mermaid">sequenceDiagram
420 + actor User as Nouvel utilisateur
421 + participant Web as rustwarden-core (auth)
422 + participant Hook as GitrustHooks
423 + participant DB as PostgreSQL
424 + participant FS as Système de fichiers
425 +
426 + User-&gt;&gt;Web: POST /register {username, email, password}
427 + Web-&gt;&gt;DB: INSERT INTO users
428 + DB--&gt;&gt;Web: user {id, username}
429 +
430 + Web-&gt;&gt;Hook: on_user_registered(db, user_id, username)
431 + Hook-&gt;&gt;Hook: Valider username (anti path-traversal)
432 + Hook-&gt;&gt;FS: create_dir_all(repos_base_path / username)
433 + FS--&gt;&gt;Hook: Ok
434 + Hook--&gt;&gt;Web: Ok
435 +
436 + Web--&gt;&gt;User: 302 Redirect /login
437 +</pre>
438 +
439 +
440 + </main>
441 +
442 + <nav class="nav-wrapper" aria-label="Page navigation">
443 + <!-- Mobile navigation buttons -->
444 + <a rel="prev" href="../../developer_manual/explanation/vue-ensemble-architecture.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
445 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
446 + </a>
447 +
448 + <a rel="next prefetch" href="../../developer_manual/explanation/modele-permissions-rbac.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
449 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
450 + </a>
451 +
452 + <div style="clear: both"></div>
453 + </nav>
454 + </div>
455 + </div>
456 +
457 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
458 + <a rel="prev" href="../../developer_manual/explanation/vue-ensemble-architecture.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
459 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
460 + </a>
461 +
462 + <a rel="next prefetch" href="../../developer_manual/explanation/modele-permissions-rbac.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
463 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
464 + </a>
465 + </nav>
466 +
467 + </div>
468 +
469 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
470 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
471 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
472 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
473 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
474 +
475 +
476 +
477 + <script>
478 + window.playground_copyable = true;
479 + </script>
480 +
481 +
482 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
483 + <script src="../../mark-09e88c2c.min.js"></script>
484 + <script src="../../searcher-c2a407aa.js"></script>
485 +
486 + <script src="../../clipboard-1626706a.min.js"></script>
487 + <script src="../../highlight-abc7f01d.js"></script>
488 + <script src="../../book-a0b12cfe.js"></script>
489 +
490 + <!-- Custom JS scripts -->
491 + <script src="../../theme/mermaid-eefea253.min.js"></script>
492 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
493 +
494 +
495 +
496 + </div>
497 + </body>
498 +</html>
A book/developer_manual/explanation/hierarchie-labels.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Hiérarchie des labels - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/explanation/hierarchie-labels.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="hiérarchie-des-labels"><a class="header" href="#hiérarchie-des-labels">Hiérarchie des labels</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/explanation/2fa-fonctionnement.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/explanation/ci-dagger-easy-vs-power.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/explanation/2fa-fonctionnement.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/explanation/ci-dagger-easy-vs-power.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/explanation/index.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Explication - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/explanation/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="explication"><a class="header" href="#explication">Explication</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/reference/rustwarden-core-api.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/explanation/vue-ensemble-architecture.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/reference/rustwarden-core-api.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/explanation/vue-ensemble-architecture.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/explanation/modele-permissions-rbac.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Modèle de permissions RBAC - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/explanation/modele-permissions-rbac.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="modèle-de-permissions-rbac"><a class="header" href="#modèle-de-permissions-rbac">Modèle de permissions RBAC</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/explanation/flux-requetes.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/explanation/2fa-fonctionnement.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/explanation/flux-requetes.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/explanation/2fa-fonctionnement.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/explanation/patron-worker-async.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Patron worker async - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/explanation/patron-worker-async.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="patron-worker-async"><a class="header" href="#patron-worker-async">Patron worker async</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/explanation/decisions-ui-htmx.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../template/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/explanation/decisions-ui-htmx.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../template/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/explanation/vue-ensemble-architecture.html
+372 -0
@@ -0,0 +1,372 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Vue d&#x27;ensemble de l&#x27;architecture - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/explanation/vue-ensemble-architecture.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="vue-densemble-de-larchitecture"><a class="header" href="#vue-densemble-de-larchitecture">Vue d’ensemble de l’architecture</a></h1>
181 +<p>Gitrust est une plateforme d’hébergement Git auto-hébergée construite sur le framework <strong>rustwarden-core</strong>. L’application expose deux points d’entrée réseau (HTTP + SSH) et persiste ses données dans PostgreSQL.</p>
182 +<h2 id="vue-densemble"><a class="header" href="#vue-densemble">Vue d’ensemble</a></h2>
183 +<pre class="mermaid">graph TB
184 + subgraph Clients
185 + Browser["Navigateur Web"]
186 + GitCLI["Git CLI (ssh/https)"]
187 + end
188 +
189 + subgraph "Gitrust Binary (src/main.rs)"
190 + Main["main()"]
191 + end
192 +
193 + subgraph "Crates Gitrust"
194 + Web["gitrust-web&lt;br/&gt;&lt;i&gt;Routes HTTP, templates,&lt;br/&gt;handlers Axum&lt;/i&gt;"]
195 + SSH["gitrust-ssh&lt;br/&gt;&lt;i&gt;Serveur SSH (russh),&lt;br/&gt;auth par clé, sessions&lt;/i&gt;"]
196 + Hooks["gitrust-hooks&lt;br/&gt;&lt;i&gt;impl RustwardenHooks&lt;br/&gt;(on_user_registered, ...)&lt;/i&gt;"]
197 + Core["gitrust-core&lt;br/&gt;&lt;i&gt;Models, services, migrations,&lt;br/&gt;rôles, types, DTOs&lt;/i&gt;"]
198 + Git["gitrust-git&lt;br/&gt;&lt;i&gt;Bare repos, tree browser,&lt;br/&gt;pack protocol (git2)&lt;/i&gt;"]
199 + end
200 +
201 + subgraph "Framework"
202 + RW["rustwarden-core&lt;br/&gt;&lt;i&gt;Auth, users, JWT, sessions,&lt;br/&gt;ResourceService, i18n&lt;/i&gt;"]
203 + end
204 +
205 + subgraph "Stockage"
206 + PG[(PostgreSQL)]
207 + FS[("Système de fichiers&lt;br/&gt;bare repos .git")]
208 + end
209 +
210 + subgraph "CI/CD (optionnel)"
211 + CiWorker["CiWorker&lt;br/&gt;&lt;i&gt;tokio::spawn, mpsc,&lt;br/&gt;sous-processus Dagger&lt;/i&gt;"]
212 + Dagger["Dagger Engine&lt;br/&gt;&lt;i&gt;Containers isolés,&lt;br/&gt;cache, exécution&lt;/i&gt;"]
213 + CiEngine["ci-engine&lt;br/&gt;&lt;i&gt;Module Dagger Python&lt;br/&gt;(Easy Mode)&lt;/i&gt;"]
214 + Syft["Syft (optionnel)&lt;br/&gt;&lt;i&gt;Génération SBOM&lt;br/&gt;CycloneDX&lt;/i&gt;"]
215 + DTrack["Dependency-Track&lt;br/&gt;(optionnel)&lt;br/&gt;&lt;i&gt;Analyse vulnérabilités&lt;/i&gt;"]
216 + end
217 +
218 + Browser --&gt;|HTTP :4000| Web
219 + GitCLI --&gt;|SSH :2222| SSH
220 + GitCLI --&gt;|HTTPS :4000| Web
221 +
222 + Main --&gt; Web
223 + Main --&gt; SSH
224 + Main --&gt; Hooks
225 + Main -.-&gt;|"si CI_ENABLED"| CiWorker
226 +
227 + Web --&gt; Core
228 + Web --&gt; Git
229 + SSH --&gt; Core
230 + SSH --&gt; Git
231 + Hooks --&gt; Core
232 +
233 + Core --&gt; RW
234 + Core --&gt; PG
235 + Git --&gt; FS
236 +
237 + CiWorker --&gt; Core
238 + CiWorker --&gt;|"dagger call"| Dagger
239 + Dagger --&gt;|"Easy Mode"| CiEngine
240 + Dagger --&gt;|"Power Mode"| FS
241 + CiWorker -.-&gt;|"si CI_SBOM_ENABLED"| Syft
242 + Syft -.-&gt;|"si CI_DTRACK_ENABLED"| DTrack
243 +</pre>
244 +
245 +<hr>
246 +<h2 id="démarrage-de-lapplication"><a class="header" href="#démarrage-de-lapplication">Démarrage de l’application</a></h2>
247 +<p>Le diagramme suivant détaille la séquence d’initialisation depuis <code>main()</code> jusqu’au démarrage des serveurs HTTP et SSH.</p>
248 +<pre class="mermaid">sequenceDiagram
249 + participant Main as main()
250 + participant Builder as RustwardenBuilder
251 + participant App as RustwardenApp
252 + participant Mig as AppMigrator
253 + participant DB as PostgreSQL
254 + participant SMTP as Serveur SMTP
255 +
256 + Main-&gt;&gt;Main: GitrustConfig::from_env()
257 + Main-&gt;&gt;Main: Arc&lt;GitrustHooks&gt; (hooks FS)
258 +
259 + Main-&gt;&gt;Builder: builder().from_env()
260 + Note over Builder: Charge .env, init tracing
261 + Main-&gt;&gt;Builder: .headless().auto_migrate(false)
262 + Main-&gt;&gt;Builder: .merge_routes(app_routes(hooks))
263 + Note over Builder: Routes = framework API&lt;br/&gt;+ pages SSR gitrust&lt;br/&gt;+ Extension(hooks)
264 + Main-&gt;&gt;Builder: .build().await
265 + Builder-&gt;&gt;DB: Connexion pool
266 + Builder-&gt;&gt;DB: Migrations rustwarden-core
267 + Builder-&gt;&gt;SMTP: EmailQueueProcessor.start()
268 + Note over SMTP: Worker de fond : dépile&lt;br/&gt;email_queue toutes les 30s
269 + Builder--&gt;&gt;Main: RustwardenApp
270 +
271 + Main-&gt;&gt;Mig: run_migrations(app.database())
272 + Mig-&gt;&gt;DB: core_migrations() + gitrust_migrations()
273 + Note over DB: Tables: users, resources,&lt;br/&gt;repositories, ssh_keys,&lt;br/&gt;teams, team_members,&lt;br/&gt;team_repository_access
274 + Mig--&gt;&gt;Main: Ok
275 +
276 + Main-&gt;&gt;Main: tokio::spawn(SSH server :2222)
277 +
278 + alt CI_ENABLED=true
279 + Main-&gt;&gt;Main: CiWorker::start(config.ci)
280 + Note over Main: Vérifie dagger dans PATH&lt;br/&gt;Si CI_SBOM_ENABLED: vérifie syft&lt;br/&gt;Si CI_DTRACK_ENABLED: vérifie API DT
281 + Main-&gt;&gt;Main: tokio::spawn(CiWorker loop)
282 + Note over Main: Écoute mpsc channel&lt;br/&gt;pour les jobs CI
283 + end
284 +
285 + Main-&gt;&gt;App: app.run().await
286 + Note over App: HTTP :4000 démarre
287 +</pre>
288 +
289 +<hr>
290 +<h2 id="principes-de-conception"><a class="header" href="#principes-de-conception">Principes de conception</a></h2>
291 +<h3 id="séparation-framework--métier-gitrust"><a class="header" href="#séparation-framework--métier-gitrust">Séparation framework / métier gitrust</a></h3>
292 +<p>Gitrust est construit <strong>au-dessus</strong> de rustwarden-core, un framework Rust d’authentification et de gestion d’utilisateurs. Cette séparation est intentionnelle :</p>
293 +<ul>
294 +<li><strong>rustwarden-core</strong> gère : auth JWT, sessions, users, roles génériques, i18n, SMTP, OAuth, audit log générique.</li>
295 +<li><strong>gitrust-core</strong> gère : tout ce qui est spécifique à la forge Git — dépôts, clés SSH, équipes, permissions RBAC à 4 niveaux, CI, import de dépôts.</li>
296 +</ul>
297 +<p>La règle fondamentale : <strong>ne jamais modifier <code>crates/rustwarden-core/</code></strong>. Toute extension passe par des wrappers, des hooks (<code>RustwardenHooks</code>) ou des traits implémentés côté gitrust.</p>
298 +<h3 id="mode-headless"><a class="header" href="#mode-headless">Mode headless</a></h3>
299 +<p>gitrust-web opère en mode <code>headless()</code> : les pages UI standard de rustwarden (login, register, settings) sont <strong>désactivées</strong> et réimplémentées entièrement dans <code>gitrust-web/templates/</code>. Cela permet un design cohérent (sidebar Git, DaisyUI) sans compromis avec l’UI générique du framework.</p>
300 +<h3 id="ssr--htmx-zéro-cdn"><a class="header" href="#ssr--htmx-zéro-cdn">SSR + HTMX, zéro CDN</a></h3>
301 +<p>L’interface est rendue côté serveur via Askama (templates Rust compilés). HTMX gère les interactions dynamiques (mises à jour partielles de page, SSE pour les notifications et les logs CI). Aucun asset externe : tout CSS/JS est servi depuis <code>static/</code> — imposé par la Content Security Policy du framework.</p>
302 +<h3 id="bare-repos-sur-le-système-de-fichiers"><a class="header" href="#bare-repos-sur-le-système-de-fichiers">Bare repos sur le système de fichiers</a></h3>
303 +<p>gitrust-git est <strong>découplé de la base de données</strong>. Les opérations Git (navigation d’arbre, lecture de blobs, pack protocol) travaillent directement sur les bare repos (<code>{GIT_REPOS_BASE_PATH}/{owner}/{slug}.git/</code>) via libgit2. La base ne stocke que les métadonnées (nom, description, visibilité, ownership). Ce découplage permet de remplacer ou tester gitrust-git indépendamment.</p>
304 +<h3 id="ci-hybride--dagger-comme-abstraction-dexécution"><a class="header" href="#ci-hybride--dagger-comme-abstraction-dexécution">CI hybride : Dagger comme abstraction d’exécution</a></h3>
305 +<p>Plutôt que d’implémenter un runner CI from scratch, gitrust délègue l’exécution à <strong>Dagger</strong>, qui garantit l’isolation (containers), la reproductibilité (cache) et la portabilité (local ou runner distant via SSH+rsync). Le <code>CiWorker</code> est une tâche Tokio dans le processus principal — pas un daemon séparé — ce qui simplifie le déploiement (un seul binaire).</p>
306 +<hr>
307 +<h2 id="pour-aller-plus-loin"><a class="header" href="#pour-aller-plus-loin">Pour aller plus loin</a></h2>
308 +<ul>
309 +<li>Référence structurelle complète (tables de modules, routes, dépendances) : <code>developer_manual/reference/architecture-crates.md</code></li>
310 +<li>Diagrammes de séquence détaillés (clone SSH, push, permissions) : <code>developer_manual/explanation/flux-requetes.md</code></li>
311 +<li>Règles de code et gates QA : <code>developer_manual/reference/regles-qa-anssi.md</code></li>
312 +</ul>
313 +
314 + </main>
315 +
316 + <nav class="nav-wrapper" aria-label="Page navigation">
317 + <!-- Mobile navigation buttons -->
318 + <a rel="prev" href="../../developer_manual/explanation/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
319 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
320 + </a>
321 +
322 + <a rel="next prefetch" href="../../developer_manual/explanation/flux-requetes.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
323 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
324 + </a>
325 +
326 + <div style="clear: both"></div>
327 + </nav>
328 + </div>
329 + </div>
330 +
331 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
332 + <a rel="prev" href="../../developer_manual/explanation/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
333 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
334 + </a>
335 +
336 + <a rel="next prefetch" href="../../developer_manual/explanation/flux-requetes.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
337 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
338 + </a>
339 + </nav>
340 +
341 + </div>
342 +
343 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
344 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
345 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
346 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
347 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
348 +
349 +
350 +
351 + <script>
352 + window.playground_copyable = true;
353 + </script>
354 +
355 +
356 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
357 + <script src="../../mark-09e88c2c.min.js"></script>
358 + <script src="../../searcher-c2a407aa.js"></script>
359 +
360 + <script src="../../clipboard-1626706a.min.js"></script>
361 + <script src="../../highlight-abc7f01d.js"></script>
362 + <script src="../../book-a0b12cfe.js"></script>
363 +
364 + <!-- Custom JS scripts -->
365 + <script src="../../theme/mermaid-eefea253.min.js"></script>
366 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
367 +
368 +
369 +
370 + </div>
371 + </body>
372 +</html>
A book/developer_manual/how-to/ajouter-migration-db.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Ajouter une migration de base de données - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/ajouter-migration-db.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="ajouter-une-migration-de-base-de-données"><a class="header" href="#ajouter-une-migration-de-base-de-données">Ajouter une migration de base de données</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/how-to/ajouter-service-metier.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/how-to/implementer-webhooks.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/how-to/ajouter-service-metier.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/how-to/implementer-webhooks.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/how-to/ajouter-route-web.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Ajouter une route web - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/ajouter-route-web.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="ajouter-une-route-web"><a class="header" href="#ajouter-une-route-web">Ajouter une route web</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/how-to/lancer-tests-e2e.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/how-to/ajouter-service-metier.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/how-to/lancer-tests-e2e.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/how-to/ajouter-service-metier.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/how-to/ajouter-service-metier.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Ajouter un service métier - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/ajouter-service-metier.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="ajouter-un-service-métier"><a class="header" href="#ajouter-un-service-métier">Ajouter un service métier</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/how-to/ajouter-route-web.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/how-to/ajouter-migration-db.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/how-to/ajouter-route-web.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/how-to/ajouter-migration-db.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/how-to/contribuer-a-rustwarden.html
+288 -0
@@ -0,0 +1,288 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Contribuer à rustwarden upstream - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/contribuer-a-rustwarden.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="contribuer-à-rustwarden"><a class="header" href="#contribuer-à-rustwarden">Contribuer à rustwarden</a></h1>
181 +<p>Ce document décrit les interactions entre gitrust et le framework rustwarden-core, et explique comment étendre le framework côté gitrust sans modifier ses sources.</p>
182 +<h2 id="services-framework-utilisés"><a class="header" href="#services-framework-utilisés">Services framework utilisés</a></h2>
183 +<div class="table-wrapper">
184 +<table>
185 +<thead>
186 +<tr><th>Service</th><th>Usage dans gitrust</th></tr>
187 +</thead>
188 +<tbody>
189 +<tr><td><code>UserService</code></td><td>CRUD users, roles, <code>delete_user</code>, <code>admin_reset_password</code>, <code>change_password_direct</code>, <code>unassign_role_from_user</code></td></tr>
190 +<tr><td><code>RoleService</code></td><td>Liste/création/suppression roles, <code>get_role_by_name</code></td></tr>
191 +<tr><td><code>PasswordService</code></td><td><code>hash_password</code> (async), <code>verify_password</code> (async), <code>generate_secure_password</code></td></tr>
192 +<tr><td><code>ResourceService</code></td><td><code>register</code>/<code>unregister</code> repos, <code>set_public</code>, <code>effective_permission</code>, <code>find_by_type_and_id</code></td></tr>
193 +<tr><td><code>AuthService</code></td><td><code>authenticate_user</code> (login)</td></tr>
194 +<tr><td><code>JwtService</code></td><td><code>generate_token</code> (login)</td></tr>
195 +<tr><td><code>EmailValidationService</code></td><td>Vérification email</td></tr>
196 +<tr><td><code>PasswordResetService</code></td><td>Flux “mot de passe oublié”</td></tr>
197 +<tr><td><code>AppSettingsService</code></td><td><code>get_bool</code> pour <code>registration_enabled</code></td></tr>
198 +</tbody>
199 +</table>
200 +</div>
201 +<h2 id="hook-on_user_deleted-implémenté"><a class="header" href="#hook-on_user_deleted-implémenté">Hook <code>on_user_deleted</code> implémenté</a></h2>
202 +<p>Le hook <code>on_user_deleted</code> dans <code>gitrust-hooks</code> supprime le répertoire utilisateur sur le filesystem (<code>repos_base_path/username/</code>) avant la cascade DB. Appelé automatiquement par <code>UserService::delete_user</code>.</p>
203 +<h2 id="règle-fondamentale"><a class="header" href="#règle-fondamentale">Règle fondamentale</a></h2>
204 +<p><strong>Ne jamais modifier <code>crates/rustwarden-core/</code>.</strong> Ce crate est le framework partagé. Toute extension passe par :</p>
205 +<ul>
206 +<li>Des <strong>wrappers</strong> côté <code>gitrust-core</code> (services qui délèguent au framework)</li>
207 +<li>Des <strong>trait impls</strong> (<code>RustwardenHooks</code> dans <code>gitrust-hooks</code>)</li>
208 +<li>Des <strong>extensions</strong> via les mécanismes d’injection Axum (<code>Extension</code>, <code>State</code>)</li>
209 +</ul>
210 +<h2 id="aucun-contournement-en-cours"><a class="header" href="#aucun-contournement-en-cours">Aucun contournement en cours</a></h2>
211 +<p>Tous les anciens contournements (entités directes, hash manuels) ont été remplacés par les services du framework suite à la mise à jour du 2026-03-26.</p>
212 +<h2 id="ajouter-une-fonctionnalité-nécessitant-un-service-framework-absent"><a class="header" href="#ajouter-une-fonctionnalité-nécessitant-un-service-framework-absent">Ajouter une fonctionnalité nécessitant un service framework absent</a></h2>
213 +<p>Si un service nécessaire n’existe pas dans rustwarden-core :</p>
214 +<ol>
215 +<li>Implémenter le service côté <code>gitrust-core</code> en réutilisant les primitives du framework (ex: <code>PasswordService::hash_password</code> pour le hashage)</li>
216 +<li>Si la fonctionnalité est générique et bénéficierait au framework lui-même, ouvrir une issue ou une PR upstream sur le dépôt rustwarden-core</li>
217 +<li>Ne pas dupliquer la logique d’auth, de session, ou de JWT — ces domaines appartiennent exclusivement au framework</li>
218 +</ol>
219 +<h2 id="pattern-dextension-via-hooks"><a class="header" href="#pattern-dextension-via-hooks">Pattern d’extension via hooks</a></h2>
220 +<p>Les hooks (<code>gitrust-hooks/src/lib.rs</code>) implémentent <code>RustwardenHooks</code> et sont injectés dans le routeur Axum au démarrage :</p>
221 +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
222 +</span><span class="boring">fn main() {
223 +</span>// Dans main.rs
224 +let hooks = Arc::new(GitrustHooks::new(config.clone()));
225 +// Passé via .merge_routes(app_routes(hooks))
226 +// Puis disponible via axum::Extension dans les handlers
227 +<span class="boring">}</span></code></pre>
228 +<p>Pour réagir à un nouvel événement du framework, ajouter la méthode correspondante dans l’impl <code>RustwardenHooks</code> de <code>gitrust-hooks</code>, sans toucher au code du framework qui émet l’événement.</p>
229 +
230 + </main>
231 +
232 + <nav class="nav-wrapper" aria-label="Page navigation">
233 + <!-- Mobile navigation buttons -->
234 + <a rel="prev" href="../../developer_manual/how-to/importer-depot-externe-code.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
235 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
236 + </a>
237 +
238 + <a rel="next prefetch" href="../../developer_manual/how-to/passer-la-qa-avant-merge.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
239 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
240 + </a>
241 +
242 + <div style="clear: both"></div>
243 + </nav>
244 + </div>
245 + </div>
246 +
247 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
248 + <a rel="prev" href="../../developer_manual/how-to/importer-depot-externe-code.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
249 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
250 + </a>
251 +
252 + <a rel="next prefetch" href="../../developer_manual/how-to/passer-la-qa-avant-merge.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
253 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
254 + </a>
255 + </nav>
256 +
257 + </div>
258 +
259 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
260 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
261 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
262 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
263 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
264 +
265 +
266 +
267 + <script>
268 + window.playground_copyable = true;
269 + </script>
270 +
271 +
272 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
273 + <script src="../../mark-09e88c2c.min.js"></script>
274 + <script src="../../searcher-c2a407aa.js"></script>
275 +
276 + <script src="../../clipboard-1626706a.min.js"></script>
277 + <script src="../../highlight-abc7f01d.js"></script>
278 + <script src="../../book-a0b12cfe.js"></script>
279 +
280 + <!-- Custom JS scripts -->
281 + <script src="../../theme/mermaid-eefea253.min.js"></script>
282 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
283 +
284 +
285 +
286 + </div>
287 + </body>
288 +</html>
A book/developer_manual/how-to/contribuer-workflow-pr.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Workflow de contribution et PR - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/contribuer-workflow-pr.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="workflow-de-contribution-et-pr"><a class="header" href="#workflow-de-contribution-et-pr">Workflow de contribution et PR</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/how-to/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/how-to/lancer-tests-unitaires.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/how-to/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/how-to/lancer-tests-unitaires.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/how-to/implementer-endpoint-api.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Implémenter un endpoint API - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/implementer-endpoint-api.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="implémenter-un-endpoint-api"><a class="header" href="#implémenter-un-endpoint-api">Implémenter un endpoint API</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/how-to/implementer-webhooks.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/how-to/importer-depot-externe-code.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/how-to/implementer-webhooks.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/how-to/importer-depot-externe-code.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/how-to/implementer-webhooks.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Implémenter des webhooks - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/implementer-webhooks.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="implémenter-des-webhooks"><a class="header" href="#implémenter-des-webhooks">Implémenter des webhooks</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/how-to/ajouter-migration-db.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/how-to/implementer-endpoint-api.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/how-to/ajouter-migration-db.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/how-to/implementer-endpoint-api.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/how-to/importer-depot-externe-code.html
+422 -0
@@ -0,0 +1,422 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Importer un dépôt externe (code) - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/importer-depot-externe-code.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="importer-un-dépôt-externe"><a class="header" href="#importer-un-dépôt-externe">Importer un dépôt externe</a></h1>
181 +<p>Référence du flux d’import de dépôts externes dans gitrust : rôle de la base de données, schéma de séquence complet et pistes d’optimisation.</p>
182 +<h2 id="1-rôle-de-la-base-de-données"><a class="header" href="#1-rôle-de-la-base-de-données">1. Rôle de la base de données</a></h2>
183 +<p>Pendant un import, la DB sert <strong>quatre fonctions distinctes</strong> :</p>
184 +<div class="table-wrapper">
185 +<table>
186 +<thead>
187 +<tr><th>Rôle</th><th>Table</th><th>Fréquence</th></tr>
188 +</thead>
189 +<tbody>
190 +<tr><td><strong>File d’attente persistante</strong></td><td><code>import_jobs</code></td><td>1 INSERT à la création</td></tr>
191 +<tr><td><strong>Suivi d’état pour l’UI</strong></td><td><code>import_jobs</code></td><td>1 UPDATE toutes les ~1.5 s</td></tr>
192 +<tr><td><strong>Enregistrement final du dépôt</strong></td><td><code>repositories</code> + <code>resources</code></td><td>2 INSERT à la fin</td></tr>
193 +<tr><td><strong>Journal d’audit</strong></td><td><code>audit_log</code></td><td>1 INSERT à la fin</td></tr>
194 +</tbody>
195 +</table>
196 +</div>
197 +<p>Le clone lui-même ne passe <strong>jamais</strong> par la DB : seuls les métadonnées et compteurs de progression y transitent. Les objets Git sont écrits directement sur disque dans <code>{GIT_REPOS_BASE_PATH}/{owner}/{slug}.git/</code>.</p>
198 +<h3 id="pourquoi-persister-létat-"><a class="header" href="#pourquoi-persister-létat-">Pourquoi persister l’état ?</a></h3>
199 +<ul>
200 +<li><strong>Reprise après redémarrage</strong> : le serveur peut crasher pendant un clone de plusieurs minutes. La table permet de marquer ces jobs comme <code>failed</code> au redémarrage.</li>
201 +<li><strong>SSE</strong> : l’UI lit la progression via un endpoint SSE qui interroge la DB toutes les 2 s. Sans DB, il faudrait un canal in-memory plus un mécanisme de routage vers le bon client.</li>
202 +<li><strong>Multi-navigateurs</strong> : si l’utilisateur ferme l’onglet puis le rouvre, il retrouve l’état exact du job.</li>
203 +<li><strong>Audit / historique</strong> : conservation des imports passés avec leurs statistiques.</li>
204 +</ul>
205 +<h2 id="2-schéma-du-flux-actuel"><a class="header" href="#2-schéma-du-flux-actuel">2. Schéma du flux actuel</a></h2>
206 +<pre class="mermaid">sequenceDiagram
207 + autonumber
208 + participant UI as Navigateur
209 + participant H as Handler HTTP
210 + participant Svc as ImportService
211 + participant Chan as mpsc Channel
212 + participant W as ImportWorker
213 + participant G as git2 (libgit2)
214 + participant DB as PostgreSQL
215 + participant FS as Disque
216 +
217 + UI-&gt;&gt;H: POST /import&lt;br/&gt;(url, slug, pat)
218 + H-&gt;&gt;Svc: create_job
219 + Svc-&gt;&gt;DB: INSERT import_jobs (pending)
220 + H-&gt;&gt;Chan: try_send(ImportTask+PAT)
221 + H--&gt;&gt;UI: 302 /imports/{id}
222 +
223 + UI-&gt;&gt;H: GET /imports/{id}/stream (SSE)
224 + Note over UI,H: EventSource ouvert
225 +
226 + Chan-&gt;&gt;W: ImportTask
227 + W-&gt;&gt;Svc: mark_running
228 + Svc-&gt;&gt;DB: SELECT import_jobs&lt;br/&gt;UPDATE status=running
229 +
230 + W-&gt;&gt;G: RepoBuilder.bare(true).clone()
231 + G-&gt;&gt;FS: init_bare + fetch
232 + loop callbacks transfer_progress (flood)
233 + G--&gt;&gt;W: stats (objets/bytes)
234 + alt throttle 1500 ms écoulé
235 + W-&gt;&gt;Svc: update_progress (tokio::spawn)
236 + Svc-&gt;&gt;DB: SELECT + UPDATE import_jobs
237 + else dans le throttle
238 + W--xW: ignore
239 + end
240 + end
241 +
242 + loop toutes les 2 s
243 + H-&gt;&gt;DB: SELECT import_jobs WHERE id=?
244 + DB--&gt;&gt;H: état courant
245 + H--&gt;&gt;UI: SSE event (JSON)
246 + UI-&gt;&gt;UI: bar.value = percent
247 + end
248 +
249 + G--&gt;&gt;FS: objets écrits
250 + G--&gt;&gt;W: Ok
251 +
252 + W-&gt;&gt;Svc: check cancel (SELECT import_jobs)
253 + W-&gt;&gt;Svc: update_progress (Finalizing)
254 + Svc-&gt;&gt;DB: SELECT + UPDATE
255 +
256 + W-&gt;&gt;RepositoryService: create
257 + RepositoryService-&gt;&gt;DB: INSERT resources&lt;br/&gt;INSERT repositories
258 + W-&gt;&gt;DB: UPDATE repositories&lt;br/&gt;(import_source_url, is_empty=false)
259 + W-&gt;&gt;Svc: mark_success
260 + Svc-&gt;&gt;DB: SELECT + UPDATE import_jobs&lt;br/&gt;(status=success, duration)
261 + W-&gt;&gt;AuditService: log REPO_IMPORTED
262 + AuditService-&gt;&gt;DB: INSERT audit_log
263 +
264 + H-&gt;&gt;DB: SELECT (prochain tick SSE)
265 + H--&gt;&gt;UI: terminal=true
266 + UI-&gt;&gt;UI: window.location.reload()
267 +</pre>
268 +
269 +<h2 id="3-coût-db-par-import"><a class="header" href="#3-coût-db-par-import">3. Coût DB par import</a></h2>
270 +<p>Pour un clone de <strong>90 secondes</strong> avec throttle 1500 ms :</p>
271 +<div class="table-wrapper">
272 +<table>
273 +<thead>
274 +<tr><th>Étape</th><th>Opérations DB</th><th>Cumul</th></tr>
275 +</thead>
276 +<tbody>
277 +<tr><td>create_job</td><td>1 INSERT</td><td>1</td></tr>
278 +<tr><td>mark_running</td><td>1 SELECT + 1 UPDATE</td><td>3</td></tr>
279 +<tr><td>update_progress pendant clone</td><td>~60 x (1 SELECT + 1 UPDATE)</td><td>123</td></tr>
280 +<tr><td>check cancel</td><td>1 SELECT</td><td>124</td></tr>
281 +<tr><td>update_progress finalizing</td><td>1 SELECT + 1 UPDATE</td><td>126</td></tr>
282 +<tr><td>RepositoryService::create</td><td>2 INSERT (repo + resource)</td><td>128</td></tr>
283 +<tr><td>update repositories</td><td>1 UPDATE</td><td>129</td></tr>
284 +<tr><td>mark_success</td><td>1 SELECT + 1 UPDATE</td><td>131</td></tr>
285 +<tr><td>audit log</td><td>1 INSERT</td><td>132</td></tr>
286 +<tr><td>SSE stream (45 ticks à 2 s)</td><td>45 SELECT</td><td>177</td></tr>
287 +</tbody>
288 +</table>
289 +</div>
290 +<p><strong>~177 requêtes pour un import</strong>, dont <strong>120+ sont des progress updates</strong>.</p>
291 +<h2 id="4-pistes-doptimisation-sans-changer-libgit2"><a class="header" href="#4-pistes-doptimisation-sans-changer-libgit2">4. Pistes d’optimisation (sans changer libgit2)</a></h2>
292 +<h3 id="41-éliminer-le-select-avant-update-dans-update_progress"><a class="header" href="#41-éliminer-le-select-avant-update-dans-update_progress">4.1 Éliminer le SELECT avant UPDATE dans <code>update_progress</code></a></h3>
293 +<p><code>update_progress</code> fait actuellement <code>load_model</code> (SELECT) puis <code>active.update(db)</code> (UPDATE + RETURNING). Le SELECT est redondant : on connaît l’ID, on veut juste patcher 4 colonnes.</p>
294 +<p><strong>Gain</strong> : divise par 2 les requêtes de progression (~60 requêtes en moins pour un clone de 90 s).</p>
295 +<p>Refonte suggérée avec <code>UpdateMany</code> (pattern déjà utilisé dans <code>ci_service.rs::cancel_running_pipelines</code>) :</p>
296 +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
297 +</span><span class="boring">fn main() {
298 +</span>import_job::Entity::update_many()
299 + .col_expr(Column::ReceivedObjects, Expr::value(received as i32))
300 + .col_expr(Column::TotalObjects, Expr::value(total as i32))
301 + .col_expr(Column::ReceivedBytes, Expr::value(bytes as i64))
302 + .col_expr(Column::Phase, Expr::value(phase.as_str()))
303 + .col_expr(Column::UpdatedAt, Expr::value(Utc::now()))
304 + .filter(Column::Id.eq(job_id))
305 + .exec(db)
306 + .await?;
307 +<span class="boring">}</span></code></pre>
308 +<p>Même principe pour <code>mark_running</code>, <code>mark_success</code>, <code>mark_failed</code>, <code>mark_cancelled</code> → toutes divisent leurs aller-retours DB par 2.</p>
309 +<h3 id="42-downsampler-la-progression-dans-le-worker-dédié"><a class="header" href="#42-downsampler-la-progression-dans-le-worker-dédié">4.2 Downsampler la progression dans le worker (dédié)</a></h3>
310 +<p>Plan alternatif : le callback écrit simplement dans un <code>tokio::sync::watch&lt;TransferStats&gt;</code> (en mémoire, zéro DB). Une <strong>tâche dédiée</strong> consomme ce channel et UPDATE la DB à 1 Hz seulement.</p>
311 +<pre class="mermaid">flowchart LR
312 + G[git2 callback] --&gt;|watch::send&lt;br/&gt;très haute fréquence| W[watch channel]
313 + W --&gt; T[Tâche update&lt;br/&gt;ticker 1 Hz]
314 + T --&gt;|1 UPDATE / s| DB
315 +</pre>
316 +
317 +<p><strong>Gains</strong> :</p>
318 +<ul>
319 +<li><strong>1 seul émetteur DB</strong> au lieu de N tokio::spawn concurrents → zéro contention sur le pool</li>
320 +<li><strong>Fréquence déterministe</strong> (1 Hz) indépendante de la vitesse réseau</li>
321 +<li>Code plus clair (la tâche est async, on peut <code>await</code> sans détour)</li>
322 +</ul>
323 +<h3 id="43-supprimer-le-returning-implicite-de-seaorm"><a class="header" href="#43-supprimer-le-returning-implicite-de-seaorm">4.3 Supprimer le <code>RETURNING</code> implicite de SeaORM</a></h3>
324 +<p><code>ActiveModel::update(db)</code> renvoie le modèle complet via <code>... RETURNING *</code>. Pour les progress updates, on n’utilise pas le retour. <code>UpdateMany::exec</code> n’émet pas de <code>RETURNING</code> → moins de bytes sur le wire, moins de désérialisation.</p>
325 +<h3 id="44-pool-db-dédié-pour-le-worker"><a class="header" href="#44-pool-db-dédié-pour-le-worker">4.4 Pool DB dédié pour le worker</a></h3>
326 +<p>Aujourd’hui le worker partage le pool principal avec les handlers HTTP. Un pool de 4-8 connexions dédié au worker éviterait qu’un import sature le pool et fasse timeouter les requêtes utilisateur.</p>
327 +<h3 id="45-debouncer-le-sse-côté-serveur"><a class="header" href="#45-debouncer-le-sse-côté-serveur">4.5 Debouncer le SSE côté serveur</a></h3>
328 +<p>Le SSE SELECT toutes les 2 s même quand rien ne change. Alternative : <strong>PostgreSQL LISTEN/NOTIFY</strong> sur une chaîne <code>import_job_{uuid}</code>. Chaque UPDATE émet un NOTIFY, la connexion SSE fait LISTEN → push direct, zéro polling.</p>
329 +<p><strong>Coût</strong> : nécessite une connexion DB dédiée par SSE (LISTEN est stateful). Compromis à évaluer.</p>
330 +<h2 id="5-optimisation-majeure--shell-out-vers-git-clone---bare"><a class="header" href="#5-optimisation-majeure--shell-out-vers-git-clone---bare">5. Optimisation majeure : shell-out vers <code>git clone --bare</code></a></h2>
331 +<p><strong>Indépendant des optimisations DB</strong> mais de loin le plus gros gain. libgit2 est structurellement 2-5x plus lent que <code>git</code> CLI sur gros clones HTTPS (pas de multiplexage, résolution de deltas mono-threadée, etc.).</p>
332 +<pre class="mermaid">flowchart TB
333 + subgraph Actuel[Flux actuel — libgit2]
334 + A1[RepoBuilder::clone] --&gt; A2[libgit2: fetch + resolve]
335 + A2 --&gt;|lent 2-5x| A3[bare repo]
336 + end
337 + subgraph Cible[Flux optimisé — git CLI]
338 + B1[Command::new git] --&gt; B2[git clone --bare --progress]
339 + B2 --&gt;|stderr| B3[Parser regex&lt;br/&gt;Receiving objects: X%]
340 + B3 --&gt; B4[update watch channel]
341 + B2 --&gt;|vitesse native| B5[bare repo]
342 + end
343 +</pre>
344 +
345 +<p>Avantages :</p>
346 +<ul>
347 +<li><strong>Vitesse native</strong> (parité avec <code>git</code> CLI)</li>
348 +<li><strong>Progression native</strong> via stderr <code>Receiving objects: 42% (368/876), 1.10 MiB | 2.05 MiB/s</code></li>
349 +<li><strong>HEAD correctement positionné</strong> (plus besoin du workaround <code>RepoBuilder</code>)</li>
350 +<li><strong>Moins de dépendance sur libgit2</strong> pour le cas du clone initial</li>
351 +</ul>
352 +<p>Contrepartie : binaire <code>git</code> requis sur le serveur (déjà le cas — utilisé par <code>SbomService::git_archive</code>).</p>
353 +<h2 id="6-priorités-recommandées"><a class="header" href="#6-priorités-recommandées">6. Priorités recommandées</a></h2>
354 +<p>Si on voulait optimiser maintenant, ordre proposé :</p>
355 +<ol>
356 +<li><strong>Shell-out <code>git clone --bare</code></strong> — gain réel pour l’utilisateur (clone 3-5x plus rapide).</li>
357 +<li><strong><code>update_many</code> pour <code>update_progress</code></strong> — divise la pression DB par 2, changement mécanique de ~20 lignes.</li>
358 +<li><strong><code>watch</code> channel + tâche 1 Hz</strong> — architecture plus propre, élimine les problèmes de pool.</li>
359 +<li><strong>Pool DB dédié worker</strong> — filet de sécurité opérationnel.</li>
360 +<li>LISTEN/NOTIFY pour SSE — seulement si beaucoup de clients simultanés.</li>
361 +</ol>
362 +<p>Les gains 2-4 sont utiles même avec libgit2 ; le gain 1 est le plus visible pour l’utilisateur final.</p>
363 +
364 + </main>
365 +
366 + <nav class="nav-wrapper" aria-label="Page navigation">
367 + <!-- Mobile navigation buttons -->
368 + <a rel="prev" href="../../developer_manual/how-to/implementer-endpoint-api.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
369 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
370 + </a>
371 +
372 + <a rel="next prefetch" href="../../developer_manual/how-to/contribuer-a-rustwarden.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
373 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
374 + </a>
375 +
376 + <div style="clear: both"></div>
377 + </nav>
378 + </div>
379 + </div>
380 +
381 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
382 + <a rel="prev" href="../../developer_manual/how-to/implementer-endpoint-api.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
383 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
384 + </a>
385 +
386 + <a rel="next prefetch" href="../../developer_manual/how-to/contribuer-a-rustwarden.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
387 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
388 + </a>
389 + </nav>
390 +
391 + </div>
392 +
393 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
394 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
395 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
396 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
397 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
398 +
399 +
400 +
401 + <script>
402 + window.playground_copyable = true;
403 + </script>
404 +
405 +
406 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
407 + <script src="../../mark-09e88c2c.min.js"></script>
408 + <script src="../../searcher-c2a407aa.js"></script>
409 +
410 + <script src="../../clipboard-1626706a.min.js"></script>
411 + <script src="../../highlight-abc7f01d.js"></script>
412 + <script src="../../book-a0b12cfe.js"></script>
413 +
414 + <!-- Custom JS scripts -->
415 + <script src="../../theme/mermaid-eefea253.min.js"></script>
416 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
417 +
418 +
419 +
420 + </div>
421 + </body>
422 +</html>
A book/developer_manual/how-to/index.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Guides pratiques - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="guides-pratiques"><a class="header" href="#guides-pratiques">Guides pratiques</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/tutorials/03-creer-un-worker-async.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/how-to/contribuer-workflow-pr.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/tutorials/03-creer-un-worker-async.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/how-to/contribuer-workflow-pr.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/how-to/lancer-tests-e2e.html
+390 -0
@@ -0,0 +1,390 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Lancer les tests E2E - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/lancer-tests-e2e.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="lancer-les-tests-end-to-end-e2e"><a class="header" href="#lancer-les-tests-end-to-end-e2e">Lancer les tests end-to-end (E2E)</a></h1>
181 +<p>Les tests E2E de gitrust utilisent <strong>Playwright</strong> pour piloter un navigateur Chromium contre une instance de l’application configurée avec une base de données et un répertoire de dépôts dédiés.</p>
182 +<h2 id="pré-requis"><a class="header" href="#pré-requis">Pré-requis</a></h2>
183 +<ul>
184 +<li>Node.js (déjà présent pour Tailwind/DaisyUI)</li>
185 +<li>PostgreSQL accessible en local (Docker via <code>database/docker-compose.yml</code>)</li>
186 +<li><code>psql</code>, <code>createdb</code>, <code>dropdb</code> disponibles dans le PATH</li>
187 +<li>Chromium installé via Playwright (<code>npx playwright install chromium</code>)</li>
188 +</ul>
189 +<h2 id="commandes"><a class="header" href="#commandes">Commandes</a></h2>
190 +<pre><code class="language-bash"># Créer (ou remettre à zéro) la base de données de test
191 +npm run test:e2e:setup
192 +
193 +# Lancer tous les tests E2E
194 +npm run test:e2e
195 +
196 +# Mode debug interactif (inspecteur Playwright, pas-à-pas)
197 +npm run test:e2e:debug
198 +
199 +# Mode UI (interface graphique Playwright)
200 +npm run test:e2e:ui
201 +
202 +# Consulter le rapport HTML après exécution
203 +npm run test:e2e:report
204 +</code></pre>
205 +<h2 id="architecture"><a class="header" href="#architecture">Architecture</a></h2>
206 +<pre><code>.env.test # Variables d'environnement de test
207 +playwright.config.ts # Configuration Playwright
208 +
209 +scripts/
210 + e2e-setup-db.sh # Crée la DB gitrust_test + nettoie depot_test
211 + e2e-server.sh # Démarre l'app avec .env.test
212 +
213 +tests/e2e/
214 + fixtures.ts # Fixtures partagées (loginAs, credentials)
215 + global-setup.ts # Seed : crée les utilisateurs via /register
216 + global-teardown.ts # Nettoyage post-tests
217 + auth.spec.ts # Tests d'authentification
218 + repository.spec.ts # Tests de gestion des dépôts
219 + admin.spec.ts # Tests du panneau d'administration
220 + navigation.spec.ts # Tests de navigation et UI
221 +</code></pre>
222 +<h3 id="isolation-de-lenvironnement-de-test"><a class="header" href="#isolation-de-lenvironnement-de-test">Isolation de l’environnement de test</a></h3>
223 +<div class="table-wrapper">
224 +<table>
225 +<thead>
226 +<tr><th>Ressource</th><th>Développement</th><th>Tests E2E</th></tr>
227 +</thead>
228 +<tbody>
229 +<tr><td>Base de données</td><td><code>gitrust</code></td><td><code>gitrust_test</code></td></tr>
230 +<tr><td>Port HTTP</td><td><code>4000</code></td><td><code>4001</code></td></tr>
231 +<tr><td>Port SSH</td><td><code>2222</code></td><td><code>2223</code></td></tr>
232 +<tr><td>Dépôts Git</td><td><code>./data/repos/</code></td><td><code>./depot_test/</code></td></tr>
233 +<tr><td>Rate limiting</td><td>Standard</td><td>Relâché (×20)</td></tr>
234 +<tr><td>Validation email</td><td>Activée</td><td>Désactivée</td></tr>
235 +</tbody>
236 +</table>
237 +</div>
238 +<h3 id="fonctionnement"><a class="header" href="#fonctionnement">Fonctionnement</a></h3>
239 +<ol>
240 +<li><strong><code>npm run test:e2e:setup</code></strong> supprime puis recrée la base <code>gitrust_test</code> et vide <code>depot_test/</code>.</li>
241 +<li><strong>Playwright</strong> démarre automatiquement l’application via <code>scripts/e2e-server.sh</code>, qui charge les variables de <code>.env.test</code> avant d’exécuter <code>cargo run</code>.</li>
242 +<li>Le <strong>global-setup</strong> crée les utilisateurs de test (alice, bob, charlie) en passant par le formulaire <code>/register</code> — approche 100% E2E, aucune insertion directe en base.</li>
243 +<li>Les <strong>tests</strong> s’exécutent séquentiellement (un seul worker) pour éviter les conflits sur la DB partagée.</li>
244 +<li>Le <strong>global-teardown</strong> est exécuté à la fin de la session.</li>
245 +</ol>
246 +<h3 id="fixtures"><a class="header" href="#fixtures">Fixtures</a></h3>
247 +<p>Le fichier <code>fixtures.ts</code> fournit une fixture <code>loginAs</code> réutilisable dans tous les tests :</p>
248 +<pre><code class="language-typescript">import { test, expect } from './fixtures';
249 +
250 +test('mon test', async ({ page, loginAs }) =&gt; {
251 + await loginAs('alice');
252 + // alice est connectée, on peut naviguer
253 +});
254 +</code></pre>
255 +<p>Utilisateurs disponibles : <code>admin</code>, <code>alice</code>, <code>bob</code>, <code>charlie</code>.</p>
256 +<h2 id="liste-des-tests"><a class="header" href="#liste-des-tests">Liste des tests</a></h2>
257 +<h3 id="authspects--authentification"><a class="header" href="#authspects--authentification"><code>auth.spec.ts</code> — Authentification</a></h3>
258 +<div class="table-wrapper">
259 +<table>
260 +<thead>
261 +<tr><th>Test</th><th>Description</th></tr>
262 +</thead>
263 +<tbody>
264 +<tr><td>login avec des identifiants valides</td><td>Vérifie le login standard et la redirection vers <code>/dashboard</code></td></tr>
265 +<tr><td>login avec un mauvais mot de passe</td><td>Vérifie l’affichage d’un message d’erreur</td></tr>
266 +<tr><td>login avec un utilisateur inexistant</td><td>Vérifie le rejet d’un username inconnu</td></tr>
267 +<tr><td>logout déconnecte l’utilisateur</td><td>Vérifie la déconnexion et l’impossibilité d’accéder au dashboard</td></tr>
268 +<tr><td>accès au dashboard sans login redirige vers login</td><td>Vérifie la protection des routes authentifiées</td></tr>
269 +<tr><td>option remember me est présente</td><td>Vérifie la présence de la checkbox remember_me</td></tr>
270 +<tr><td>formulaire d’inscription est accessible</td><td>Vérifie la présence de tous les champs du formulaire</td></tr>
271 +<tr><td>inscription avec username déjà pris échoue</td><td>Vérifie l’unicité des usernames</td></tr>
272 +<tr><td>inscription avec mots de passe différents échoue</td><td>Vérifie la validation de confirmation du mot de passe</td></tr>
273 +</tbody>
274 +</table>
275 +</div>
276 +<h3 id="repositoryspects--gestion-des-dépôts"><a class="header" href="#repositoryspects--gestion-des-dépôts"><code>repository.spec.ts</code> — Gestion des dépôts</a></h3>
277 +<div class="table-wrapper">
278 +<table>
279 +<thead>
280 +<tr><th>Test</th><th>Description</th></tr>
281 +</thead>
282 +<tbody>
283 +<tr><td>créer un dépôt avec nom et description</td><td>Crée un dépôt complet et vérifie la redirection</td></tr>
284 +<tr><td>créer un dépôt sans description</td><td>Vérifie que la description est optionnelle</td></tr>
285 +<tr><td>créer un dépôt avec un nom déjà pris échoue</td><td>Vérifie l’unicité des slugs par utilisateur</td></tr>
286 +<tr><td>le formulaire de création nécessite un login</td><td>Vérifie la protection de la route <code>/new</code></td></tr>
287 +<tr><td>le dashboard liste les dépôts de l’utilisateur</td><td>Vérifie l’affichage des dépôts sur le dashboard</td></tr>
288 +<tr><td>un dépôt public est accessible sans login</td><td>Vérifie l’accès anonyme aux dépôts publics</td></tr>
289 +</tbody>
290 +</table>
291 +</div>
292 +<h3 id="adminspects--administration"><a class="header" href="#adminspects--administration"><code>admin.spec.ts</code> — Administration</a></h3>
293 +<div class="table-wrapper">
294 +<table>
295 +<thead>
296 +<tr><th>Test</th><th>Description</th></tr>
297 +</thead>
298 +<tbody>
299 +<tr><td>l’admin peut accéder au panneau d’administration</td><td>Vérifie l’accès admin à <code>/admin</code></td></tr>
300 +<tr><td>un utilisateur normal ne peut pas accéder à l’admin</td><td>Vérifie le contrôle d’accès</td></tr>
301 +<tr><td>lister les utilisateurs</td><td>Vérifie l’affichage de la liste des utilisateurs</td></tr>
302 +<tr><td>créer un nouvel utilisateur via l’admin</td><td>Teste le formulaire de création d’utilisateur admin</td></tr>
303 +<tr><td>créer un utilisateur avec un username déjà pris échoue</td><td>Vérifie la gestion des doublons côté admin</td></tr>
304 +<tr><td>les liens du menu admin sont présents</td><td>Vérifie la navigation du panneau admin</td></tr>
305 +</tbody>
306 +</table>
307 +</div>
308 +<h3 id="navigationspects--navigation-et-ui"><a class="header" href="#navigationspects--navigation-et-ui"><code>navigation.spec.ts</code> — Navigation et UI</a></h3>
309 +<div class="table-wrapper">
310 +<table>
311 +<thead>
312 +<tr><th>Test</th><th>Description</th></tr>
313 +</thead>
314 +<tbody>
315 +<tr><td>la page de login est accessible</td><td>Vérifie le rendu de la page de login</td></tr>
316 +<tr><td>la navbar est présente après login</td><td>Vérifie la présence de la barre de navigation</td></tr>
317 +<tr><td>le sidebar est présent après login</td><td>Vérifie la présence du menu latéral</td></tr>
318 +<tr><td>le lien vers le dashboard fonctionne</td><td>Vérifie la navigation vers le dashboard</td></tr>
319 +<tr><td>le lien vers la création de dépôt fonctionne</td><td>Vérifie le lien <code>/new</code></td></tr>
320 +<tr><td>la page utilise le thème DaisyUI</td><td>Vérifie la présence de l’attribut <code>data-theme</code></td></tr>
321 +</tbody>
322 +</table>
323 +</div>
324 +<h2 id="ajouter-un-nouveau-test"><a class="header" href="#ajouter-un-nouveau-test">Ajouter un nouveau test</a></h2>
325 +<ol>
326 +<li>Créer un fichier <code>tests/e2e/mon-module.spec.ts</code></li>
327 +<li>Importer les fixtures : <code>import { test, expect } from './fixtures';</code></li>
328 +<li>Utiliser <code>loginAs</code> pour les tests nécessitant une authentification</li>
329 +<li>Lancer avec <code>npm run test:e2e</code> ou cibler le fichier : <code>npx playwright test mon-module</code></li>
330 +</ol>
331 +
332 + </main>
333 +
334 + <nav class="nav-wrapper" aria-label="Page navigation">
335 + <!-- Mobile navigation buttons -->
336 + <a rel="prev" href="../../developer_manual/how-to/lancer-tests-unitaires.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
337 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
338 + </a>
339 +
340 + <a rel="next prefetch" href="../../developer_manual/how-to/ajouter-route-web.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
341 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
342 + </a>
343 +
344 + <div style="clear: both"></div>
345 + </nav>
346 + </div>
347 + </div>
348 +
349 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
350 + <a rel="prev" href="../../developer_manual/how-to/lancer-tests-unitaires.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
351 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
352 + </a>
353 +
354 + <a rel="next prefetch" href="../../developer_manual/how-to/ajouter-route-web.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
355 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
356 + </a>
357 + </nav>
358 +
359 + </div>
360 +
361 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
362 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
363 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
364 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
365 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
366 +
367 +
368 +
369 + <script>
370 + window.playground_copyable = true;
371 + </script>
372 +
373 +
374 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
375 + <script src="../../mark-09e88c2c.min.js"></script>
376 + <script src="../../searcher-c2a407aa.js"></script>
377 +
378 + <script src="../../clipboard-1626706a.min.js"></script>
379 + <script src="../../highlight-abc7f01d.js"></script>
380 + <script src="../../book-a0b12cfe.js"></script>
381 +
382 + <!-- Custom JS scripts -->
383 + <script src="../../theme/mermaid-eefea253.min.js"></script>
384 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
385 +
386 +
387 +
388 + </div>
389 + </body>
390 +</html>
A book/developer_manual/how-to/lancer-tests-unitaires.html
+431 -0
@@ -0,0 +1,431 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Lancer les tests unitaires - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/lancer-tests-unitaires.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="lancer-les-tests-unitaires"><a class="header" href="#lancer-les-tests-unitaires">Lancer les tests unitaires</a></h1>
181 +<p>Référence des commandes et de la stratégie de tests pour gitrust.</p>
182 +<h2 id="infrastructure-existante"><a class="header" href="#infrastructure-existante">Infrastructure existante</a></h2>
183 +<h3 id="tests-unitaires-rust"><a class="header" href="#tests-unitaires-rust">Tests unitaires Rust</a></h3>
184 +<pre><code class="language-bash">cargo test --workspace # Tous les tests
185 +cargo test -p gitrust-core # Un crate spécifique
186 +cargo test -p gitrust-git # Tests Git (tempdir)
187 +</code></pre>
188 +<p>Les tests unitaires sont intégrés dans chaque crate via <code>#[cfg(test)]</code>.</p>
189 +<h3 id="tests-e2e-playwright"><a class="header" href="#tests-e2e-playwright">Tests e2e Playwright</a></h3>
190 +<p>17 specs couvrant : auth, admin, repos, issues, labels, teams, tokens, settings, navigation.</p>
191 +<pre><code class="language-bash"># Pré-requis (première fois)
192 +npm install
193 +./scripts/e2e-setup-db.sh # Crée la DB gitrust_test
194 +
195 +# Lancer les tests
196 +npm run test:e2e # Mode headless
197 +npm run test:e2e:ui # Mode interactif (navigateur visible)
198 +npm run test:e2e:debug # Mode debug
199 +npm run test:e2e:report # Voir le rapport HTML
200 +</code></pre>
201 +<p>Configuration : <code>playwright.config.ts</code> (port 4001, DB <code>gitrust_test</code>, locale <code>fr-FR</code>).</p>
202 +<h3 id="structure-des-répertoires"><a class="header" href="#structure-des-répertoires">Structure des répertoires</a></h3>
203 +<pre><code>tests/
204 + e2e/ # Specs Playwright (TypeScript)
205 + global-setup.ts # Setup : lancer l'app, créer admin
206 + global-teardown.ts # Teardown : arrêter l'app
207 + fixtures.ts # Fixtures Playwright partagées
208 + auth.spec.ts # Tests authentification
209 + admin.spec.ts # Tests administration
210 + issues.spec.ts # Tests issues
211 + ...
212 + integration/ # Tests d'intégration Rust (DB réelle) [à créer]
213 + fixtures/ # Fichiers de test (repos, configs) [à créer]
214 + seeds/ # Seeds Rust pour initialiser la DB de test
215 + mod.rs
216 + seed.rs
217 +</code></pre>
218 +<hr>
219 +<h2 id="tests-à-ajouter"><a class="header" href="#tests-à-ajouter">Tests à ajouter</a></h2>
220 +<h3 id="1-tests-fonctionnels-api-rest-intégration-rust"><a class="header" href="#1-tests-fonctionnels-api-rest-intégration-rust">1. Tests fonctionnels API REST (intégration Rust)</a></h3>
221 +<p>Tests avec une DB PostgreSQL réelle pour vérifier les endpoints API.</p>
222 +<p><strong>Emplacement</strong> : <code>tests/integration/</code> ou <code>crates/gitrust-web/tests/</code></p>
223 +<p><strong>Approche recommandée</strong> : utiliser <code>reqwest</code> + un serveur de test :</p>
224 +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
225 +</span><span class="boring">fn main() {
226 +</span>// tests/integration/api_test.rs
227 +use reqwest::Client;
228 +
229 +#[tokio::test]
230 +#[ignore] // Nécessite une DB + serveur running
231 +async fn test_api_login() {
232 + let client = Client::new();
233 + let res = client.post("http://localhost:4001/api/v1/auth/login")
234 + .json(&amp;serde_json::json!({
235 + "login": "admin",
236 + "password": "test_password"
237 + }))
238 + .send()
239 + .await
240 + .unwrap();
241 + assert_eq!(res.status(), 200);
242 +}
243 +<span class="boring">}</span></code></pre>
244 +<p><strong>Alternative</strong> : <code>axum::test</code> pour tester les handlers sans serveur HTTP :</p>
245 +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
246 +</span><span class="boring">fn main() {
247 +</span>use axum::body::Body;
248 +use axum::http::Request;
249 +use tower::ServiceExt;
250 +
251 +#[tokio::test]
252 +async fn test_health_check() {
253 + let app = create_test_app().await; // Build router with test DB
254 + let response = app
255 + .oneshot(Request::builder().uri("/api/hello").body(Body::empty()).unwrap())
256 + .await
257 + .unwrap();
258 + assert_eq!(response.status(), 200);
259 +}
260 +<span class="boring">}</span></code></pre>
261 +<h3 id="2-tests-fonctionnels-ci"><a class="header" href="#2-tests-fonctionnels-ci">2. Tests fonctionnels CI</a></h3>
262 +<div class="table-wrapper">
263 +<table>
264 +<thead>
265 +<tr><th>Test</th><th>Description</th><th>Priorité</th></tr>
266 +</thead>
267 +<tbody>
268 +<tr><td>CI detection</td><td>Repo avec <code>.gitrust-ci.yml</code> -&gt; Easy, <code>.dagger/</code> -&gt; Power, rien -&gt; None</td><td>Haute</td></tr>
269 +<tr><td>Pipeline CRUD</td><td>Créer, lister, mettre à jour, annuler un pipeline</td><td>Haute</td></tr>
270 +<tr><td>Config CI</td><td>Activer/désactiver CI, modifier triggers, vérifier effet</td><td>Haute</td></tr>
271 +<tr><td>Variables héritage</td><td>Team var + repo var -&gt; merge correct</td><td>Moyenne</td></tr>
272 +<tr><td>Auto-cancel</td><td>Nouveau push annule les pipelines en cours</td><td>Moyenne</td></tr>
273 +<tr><td>Logs streaming</td><td>Append logs + lecture paginée</td><td>Moyenne</td></tr>
274 +<tr><td>Notifications CI</td><td>Pipeline échoue -&gt; notification créée</td><td>Moyenne</td></tr>
275 +</tbody>
276 +</table>
277 +</div>
278 +<p><strong>Pour les tests CI</strong> : mocker <code>dagger</code> avec un script shell qui simule success/failure :</p>
279 +<pre><code class="language-bash">#!/bin/bash
280 +# tests/fixtures/mock-dagger.sh
281 +echo "Step 1: Building..."
282 +echo "Step 2: Testing..."
283 +if [ "$MOCK_FAIL" = "true" ]; then
284 + echo "FAILED" &gt;&amp;2
285 + exit 1
286 +fi
287 +echo "All checks passed"
288 +exit 0
289 +</code></pre>
290 +<p>Configurer <code>CI_DAGGER_BIN=tests/fixtures/mock-dagger.sh</code> dans les tests.</p>
291 +<h3 id="3-tests-e2e-playwright-à-ajouter"><a class="header" href="#3-tests-e2e-playwright-à-ajouter">3. Tests e2e Playwright à ajouter</a></h3>
292 +<p>Nouvelles specs pour les fonctionnalités CI et notifications :</p>
293 +<div class="table-wrapper">
294 +<table>
295 +<thead>
296 +<tr><th>Spec</th><th>Couverture</th></tr>
297 +</thead>
298 +<tbody>
299 +<tr><td><code>ci-pipelines.spec.ts</code></td><td>Liste pipelines, détail, status badges</td></tr>
300 +<tr><td><code>ci-config.spec.ts</code></td><td>Config CI (enable/disable, triggers, timeout)</td></tr>
301 +<tr><td><code>ci-variables.spec.ts</code></td><td>CRUD variables CI, masquage secrets</td></tr>
302 +<tr><td><code>notifications.spec.ts</code></td><td>Liste notifications, marquer lu, préférences</td></tr>
303 +<tr><td><code>api-docs.spec.ts</code></td><td>Swagger UI accessible, spec chargée</td></tr>
304 +<tr><td><code>i18n.spec.ts</code></td><td>Changement de langue, textes traduits</td></tr>
305 +<tr><td><code>docker-smoke.spec.ts</code></td><td><code>docker compose up</code> + smoke test</td></tr>
306 +</tbody>
307 +</table>
308 +</div>
309 +<p><strong>Exemple de spec CI</strong> :</p>
310 +<pre><code class="language-typescript">// tests/e2e/ci-pipelines.spec.ts
311 +import { test, expect } from './fixtures';
312 +
313 +test.describe('CI Pipelines', () =&gt; {
314 + test('affiche la page CI vide', async ({ authenticatedPage }) =&gt; {
315 + await authenticatedPage.goto('/admin/mon-repo/ci');
316 + await expect(authenticatedPage.locator('text=Aucun pipeline')).toBeVisible();
317 + });
318 +
319 + test('bouton trigger CI visible pour le maintainer', async ({ authenticatedPage }) =&gt; {
320 + await authenticatedPage.goto('/admin/mon-repo/ci');
321 + await expect(authenticatedPage.locator('text=Lancer CI')).toBeVisible();
322 + });
323 +});
324 +</code></pre>
325 +<h3 id="4-tests-settings--comportement"><a class="header" href="#4-tests-settings--comportement">4. Tests settings ↔ comportement</a></h3>
326 +<p>Les tests les plus critiques vérifient que <strong>changer un setting modifie le comportement observable</strong> :</p>
327 +<div class="table-wrapper">
328 +<table>
329 +<thead>
330 +<tr><th>Setting</th><th>Action</th><th>Vérification</th></tr>
331 +</thead>
332 +<tbody>
333 +<tr><td>PAT révoqué</td><td>Appel API</td><td>401 immédiatement</td></tr>
334 +<tr><td><code>ci_enabled = false</code></td><td>Push</td><td>Pas de pipeline créé</td></tr>
335 +<tr><td><code>trigger_on_push = false</code></td><td>Push</td><td>Pas de pipeline</td></tr>
336 +<tr><td><code>auto_cancel = true</code></td><td>2 pushes rapides</td><td>1er pipeline annulé</td></tr>
337 +<tr><td><code>email_on_pipeline_failure = false</code></td><td>Pipeline échoue</td><td>Pas d’email, notif in-app ok</td></tr>
338 +<tr><td><code>DEFAULT_LOCALE = en</code></td><td>Charger page</td><td>Texte en anglais</td></tr>
339 +</tbody>
340 +</table>
341 +</div>
342 +<hr>
343 +<h2 id="commandes-de-test"><a class="header" href="#commandes-de-test">Commandes de test</a></h2>
344 +<pre><code class="language-bash"># Tests unitaires Rust
345 +cargo test --workspace
346 +
347 +# Tests avec filtrage
348 +cargo test -p gitrust-core -- ci_service
349 +cargo test -p gitrust-core -- notification
350 +
351 +# Tests e2e Playwright
352 +npm run test:e2e
353 +
354 +# Tests e2e spécifiques
355 +npx playwright test tests/e2e/ci-pipelines.spec.ts
356 +npx playwright test --grep "notifications"
357 +
358 +# Lint
359 +cargo clippy --workspace -- -D warnings
360 +
361 +# Format check
362 +cargo fmt --all -- --check
363 +</code></pre>
364 +<hr>
365 +<h2 id="ci-locale-exécuter-avant-un-push"><a class="header" href="#ci-locale-exécuter-avant-un-push">CI locale (exécuter avant un push)</a></h2>
366 +<pre><code class="language-bash"># Script rapide de vérification pré-push
367 +cargo fmt --all -- --check &amp;&amp; \
368 +cargo clippy --workspace -- -D warnings &amp;&amp; \
369 +cargo test --workspace &amp;&amp; \
370 +echo "All checks passed"
371 +</code></pre>
372 +
373 + </main>
374 +
375 + <nav class="nav-wrapper" aria-label="Page navigation">
376 + <!-- Mobile navigation buttons -->
377 + <a rel="prev" href="../../developer_manual/how-to/contribuer-workflow-pr.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
378 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
379 + </a>
380 +
381 + <a rel="next prefetch" href="../../developer_manual/how-to/lancer-tests-e2e.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
382 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
383 + </a>
384 +
385 + <div style="clear: both"></div>
386 + </nav>
387 + </div>
388 + </div>
389 +
390 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
391 + <a rel="prev" href="../../developer_manual/how-to/contribuer-workflow-pr.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
392 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
393 + </a>
394 +
395 + <a rel="next prefetch" href="../../developer_manual/how-to/lancer-tests-e2e.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
396 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
397 + </a>
398 + </nav>
399 +
400 + </div>
401 +
402 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
403 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
404 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
405 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
406 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
407 +
408 +
409 +
410 + <script>
411 + window.playground_copyable = true;
412 + </script>
413 +
414 +
415 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
416 + <script src="../../mark-09e88c2c.min.js"></script>
417 + <script src="../../searcher-c2a407aa.js"></script>
418 +
419 + <script src="../../clipboard-1626706a.min.js"></script>
420 + <script src="../../highlight-abc7f01d.js"></script>
421 + <script src="../../book-a0b12cfe.js"></script>
422 +
423 + <!-- Custom JS scripts -->
424 + <script src="../../theme/mermaid-eefea253.min.js"></script>
425 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
426 +
427 +
428 +
429 + </div>
430 + </body>
431 +</html>
A book/developer_manual/how-to/passer-la-qa-avant-merge.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Passer la QA avant un merge - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/how-to/passer-la-qa-avant-merge.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="passer-la-qa-avant-un-merge"><a class="header" href="#passer-la-qa-avant-un-merge">Passer la QA avant un merge</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/how-to/contribuer-a-rustwarden.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/reference/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/how-to/contribuer-a-rustwarden.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/reference/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/index.html
+305 -0
@@ -0,0 +1,305 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Vue d&#x27;ensemble - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="manuel-développeur"><a class="header" href="#manuel-développeur">Manuel développeur</a></h1>
181 +<p>Ce manuel s’adresse à deux publics : les contributeurs au code gitrust (core ou via fork rustwarden) et les développeurs externes qui construisent des intégrations sur l’API publique. Il fournit tout le nécessaire pour comprendre l’architecture des 6 crates, contribuer du code conforme aux standards du projet, ou bâtir un client qui parle à l’API gitrust. Il ne couvre pas l’installation d’une instance de production ni l’usage quotidien de la forge.</p>
182 +<h2 id="parcours-dapprentissage--contributeur-core"><a class="header" href="#parcours-dapprentissage--contributeur-core">Parcours d’apprentissage — contributeur core</a></h2>
183 +<p>Le parcours contributeur représente environ 4 heures au total, avec un étayage dégressif : le premier tutoriel est entièrement guidé, le troisième (capstone) demande de résoudre sans guide pas-à-pas.</p>
184 +<pre class="mermaid">graph LR
185 + A[Utilisateur autonome] --&gt; B[01-getting-started&lt;br/&gt;45 min]
186 + B --&gt; C[02-premiere-contribution&lt;br/&gt;90 min]
187 + C --&gt; D[03-creer-un-worker-async&lt;br/&gt;capstone 120 min]
188 + D --&gt; E[Core contributor]
189 +</pre>
190 +
191 +<blockquote>
192 +<p><strong>Checkpoint de parcours</strong> : avant de passer au tutoriel 02, vous devez avoir compilé gitrust localement, lancé les tests unitaires et obtenu une instance de développement fonctionnelle. Si ce n’est pas le cas, relisez le tutoriel 01.</p>
193 +</blockquote>
194 +<blockquote>
195 +<p><strong>Checkpoint de parcours</strong> : avant le tutoriel 03 (capstone), vous devez avoir soumis une PR complète avec tests, passé la gate QA et reçu une review. Si ce n’est pas le cas, relisez le tutoriel 02.</p>
196 +</blockquote>
197 +<hr>
198 +<h2 id="tutoriels--apprendre-en-faisant"><a class="header" href="#tutoriels--apprendre-en-faisant">Tutoriels — apprendre en faisant</a></h2>
199 +<p>Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suivez-les dans l’ordre — chacun suppose le précédent complété.</p>
200 +<ul>
201 +<li><a href="tutorials/01-getting-started.html">01 — Getting started : build local, tests, instance de dev</a> — ~45 min</li>
202 +<li><a href="tutorials/02-premiere-contribution.html">02 — Première contribution : clone, build, test, PR</a> — ~90 min</li>
203 +<li><a href="tutorials/03-creer-un-worker-async.html">03 — Créer un worker async (capstone)</a> — ~120 min</li>
204 +</ul>
205 +<hr>
206 +<h2 id="how-to--recettes-pour-les-tâches-courantes"><a class="header" href="#how-to--recettes-pour-les-tâches-courantes">How-to — recettes pour les tâches courantes</a></h2>
207 +<p>Les how-to répondent à « comment faire X » sans explication de fond. Consultez-les dans n’importe quel ordre selon votre besoin.</p>
208 +<ul>
209 +<li><a href="how-to/contribuer-workflow-pr.html">Workflow de contribution : Git + review + QA</a></li>
210 +<li><a href="how-to/lancer-tests-unitaires.html">Lancer les tests unitaires</a></li>
211 +<li><a href="how-to/lancer-tests-e2e.html">Lancer les tests E2E (Playwright)</a></li>
212 +<li><a href="how-to/ajouter-route-web.html">Ajouter une route web (patron rustwarden → axum)</a></li>
213 +<li><a href="how-to/ajouter-service-metier.html">Ajouter un service métier</a></li>
214 +<li><a href="how-to/ajouter-migration-db.html">Ajouter une migration de base de données</a></li>
215 +<li><a href="how-to/implementer-webhooks.html">Implémenter des webhooks</a></li>
216 +<li><a href="how-to/implementer-endpoint-api.html">Implémenter un endpoint API</a></li>
217 +<li><a href="how-to/importer-depot-externe-code.html">Importer un dépôt externe (code)</a></li>
218 +<li><a href="how-to/contribuer-a-rustwarden.html">Contribuer à rustwarden upstream</a></li>
219 +<li><a href="how-to/passer-la-qa-avant-merge.html">Passer la QA avant merge</a></li>
220 +</ul>
221 +<hr>
222 +<h2 id="référence--informations-techniques-exactes"><a class="header" href="#référence--informations-techniques-exactes">Référence — informations techniques exactes</a></h2>
223 +<p>La référence documente de façon exhaustive l’architecture, les API internes, le schéma de données et les règles QA. Destinée à la consultation ponctuelle.</p>
224 +<ul>
225 +<li><a href="reference/architecture-crates.html">Architecture des 6 crates</a></li>
226 +<li><a href="reference/services-api-interne.html">Services et API interne</a></li>
227 +<li><a href="reference/schema-base-donnees.html">Schéma de base de données (ERD)</a></li>
228 +<li><a href="reference/regles-qa-anssi.html">Règles QA et gates ANSSI</a></li>
229 +<li><a href="reference/api-rest-v1.html">API REST v1 — auth, pagination, codes d’erreur</a></li>
230 +<li><a href="reference/git-hooks-post-receive.html">Git hooks post-receive</a></li>
231 +<li><a href="reference/rustwarden-core-api.html">rustwarden-core API — helpers, extracteurs, middleware</a></li>
232 +</ul>
233 +<hr>
234 +<h2 id="explication--comprendre-le-pourquoi"><a class="header" href="#explication--comprendre-le-pourquoi">Explication — comprendre le pourquoi</a></h2>
235 +<p>Les explanations construisent les modèles mentaux nécessaires pour contribuer de façon éclairée. Lisez-les quand vous voulez comprendre les décisions d’architecture, pas seulement les appliquer.</p>
236 +<ul>
237 +<li><a href="explanation/vue-ensemble-architecture.html">Vue d’ensemble de l’architecture gitrust</a></li>
238 +<li><a href="explanation/flux-requetes.html">Flux de requêtes (diagrammes de séquence)</a></li>
239 +<li><a href="explanation/modele-permissions-rbac.html">Modèle de permissions RBAC 4 niveaux</a></li>
240 +<li><a href="explanation/2fa-fonctionnement.html">Fonctionnement de la 2FA</a></li>
241 +<li><a href="explanation/hierarchie-labels.html">Hiérarchie des labels</a></li>
242 +<li><a href="explanation/ci-dagger-easy-vs-power.html">CI Dagger : Easy Mode vs Power Mode</a></li>
243 +<li><a href="explanation/decisions-ui-htmx.html">Décisions UI : HTMX + DaisyUI</a></li>
244 +<li><a href="explanation/patron-worker-async.html">Patron worker async</a></li>
245 +</ul>
246 +
247 + </main>
248 +
249 + <nav class="nav-wrapper" aria-label="Page navigation">
250 + <!-- Mobile navigation buttons -->
251 + <a rel="prev" href="../administration_manual/explanation/strategie-sauvegarde.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
252 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
253 + </a>
254 +
255 + <a rel="next prefetch" href="../developer_manual/tutorials/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
256 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
257 + </a>
258 +
259 + <div style="clear: both"></div>
260 + </nav>
261 + </div>
262 + </div>
263 +
264 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
265 + <a rel="prev" href="../administration_manual/explanation/strategie-sauvegarde.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
266 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
267 + </a>
268 +
269 + <a rel="next prefetch" href="../developer_manual/tutorials/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
270 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
271 + </a>
272 + </nav>
273 +
274 + </div>
275 +
276 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
277 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
278 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
279 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
280 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
281 +
282 +
283 +
284 + <script>
285 + window.playground_copyable = true;
286 + </script>
287 +
288 +
289 + <script src="../elasticlunr-ef4e11c1.min.js"></script>
290 + <script src="../mark-09e88c2c.min.js"></script>
291 + <script src="../searcher-c2a407aa.js"></script>
292 +
293 + <script src="../clipboard-1626706a.min.js"></script>
294 + <script src="../highlight-abc7f01d.js"></script>
295 + <script src="../book-a0b12cfe.js"></script>
296 +
297 + <!-- Custom JS scripts -->
298 + <script src="../theme/mermaid-eefea253.min.js"></script>
299 + <script src="../theme/mermaid-init-ccf746f1.js"></script>
300 +
301 +
302 +
303 + </div>
304 + </body>
305 +</html>
A book/developer_manual/reference/api-rest-v1.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>API REST v1 - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/reference/api-rest-v1.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="api-rest-v1"><a class="header" href="#api-rest-v1">API REST v1</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/reference/regles-qa-anssi.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/reference/git-hooks-post-receive.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/reference/regles-qa-anssi.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/reference/git-hooks-post-receive.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/reference/architecture-crates.html
+511 -0
@@ -0,0 +1,511 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Architecture des crates - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/reference/architecture-crates.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="architecture-par-crates"><a class="header" href="#architecture-par-crates">Architecture par crates</a></h1>
181 +<p>Référence structurelle de gitrust : crates, modules, routes, dépendances et composants CI.</p>
182 +<h2 id="dépendances-entre-crates"><a class="header" href="#dépendances-entre-crates">Dépendances entre crates</a></h2>
183 +<pre class="mermaid">graph LR
184 + RW["rustwarden-core"]
185 +
186 + Git["gitrust-git"]
187 + Core["gitrust-core"]
188 + Hooks["gitrust-hooks"]
189 + SSH["gitrust-ssh"]
190 + Web["gitrust-web"]
191 + Bin["gitrust (binaire)"]
192 +
193 + Core --&gt; RW
194 + Git -.-&gt;|"indépendant&lt;br/&gt;(git2, tokio)"| RW
195 +
196 + Hooks --&gt; Core
197 + Hooks --&gt; RW
198 +
199 + SSH --&gt; Core
200 + SSH --&gt; Git
201 +
202 + Web --&gt; Core
203 + Web --&gt; Git
204 + Web -.-&gt;|"CI pages"| Git
205 +
206 + Bin --&gt; Core
207 + Bin --&gt; Git
208 + Bin --&gt; SSH
209 + Bin --&gt; Web
210 + Bin --&gt; Hooks
211 + Bin --&gt; RW
212 +
213 + subgraph "Externes CI (Phase 5b)"
214 + Dagger["Dagger CLI"]
215 + CiEng["ci-engine (Python)"]
216 + Syft["Syft"]
217 + DTrack["Dependency-Track"]
218 + end
219 +
220 + Core -.-&gt;|"CiWorker&lt;br/&gt;sous-processus"| Dagger
221 + Dagger -.-&gt; CiEng
222 + Core -.-&gt; Syft
223 + Syft -.-&gt; DTrack
224 +</pre>
225 +
226 +<hr>
227 +<h2 id="crates--responsabilités"><a class="header" href="#crates--responsabilités">Crates — Responsabilités</a></h2>
228 +<h3 id="gitrust-core"><a class="header" href="#gitrust-core">gitrust-core</a></h3>
229 +<p>Cœur métier. Ne dépend que de rustwarden-core et des crates Rust standards.</p>
230 +<div class="table-wrapper">
231 +<table>
232 +<thead>
233 +<tr><th>Module</th><th>Rôle</th></tr>
234 +</thead>
235 +<tbody>
236 +<tr><td><code>config</code></td><td><code>GitrustConfig::from_env()</code> — ports SSH, chemin repos, limites</td></tr>
237 +<tr><td><code>error</code></td><td><code>GitrustError</code> — erreurs domaine Git + <code>IntoResponse</code> HTTP</td></tr>
238 +<tr><td><code>roles</code></td><td><code>enum Role { Reader, Developer, Maintainer, Owner }</code> avec <code>Ord</code></td></tr>
239 +<tr><td><code>types</code></td><td>Newtypes validés : <code>RepoSlug</code>, <code>TeamSlug</code>, <code>Fingerprint</code>, <code>TokenHash</code></td></tr>
240 +<tr><td><code>models/</code></td><td>Entités SeaORM : repository, ssh_key, team, team_member, team_repository_access, ci_pipeline, ci_job, ci_log, ci_config, ci_variable</td></tr>
241 +<tr><td><code>migrations/</code></td><td>Migrations SeaORM (tables gitrust) combinées avec les migrations core</td></tr>
242 +<tr><td><code>services/</code></td><td><code>SshKeyService</code>, <code>RepositoryService</code>, <code>TeamService</code>, <code>AccessService</code>, <code>CiService</code>, <code>CiVariableService</code>, <code>CiDetectionService</code>, <code>CiWorker</code>, <code>NotificationService</code></td></tr>
243 +<tr><td><code>dto/</code></td><td>Structures d’entrée/sortie pour les services</td></tr>
244 +</tbody>
245 +</table>
246 +</div>
247 +<h3 id="gitrust-git"><a class="header" href="#gitrust-git">gitrust-git</a></h3>
248 +<p>Opérations Git sur le système de fichiers. Utilise <code>git2</code> (libgit2). Pas de dépendance vers la base de données.</p>
249 +<div class="table-wrapper">
250 +<table>
251 +<thead>
252 +<tr><th>Module</th><th>Rôle</th></tr>
253 +</thead>
254 +<tbody>
255 +<tr><td><code>errors</code></td><td><code>enum GitError</code> (Git, RepoNotFound, RefNotFound, PathTraversal, …)</td></tr>
256 +<tr><td><code>bare_repo</code></td><td>Init, open, delete, exists + validation chemin canonique sous base</td></tr>
257 +<tr><td><code>branch</code> / <code>tag</code></td><td>Listing branches (BranchInfo) et tags (TagInfo, annotated/lightweight)</td></tr>
258 +<tr><td><code>reference</code></td><td>resolve_ref (branch -&gt; tag -&gt; SHA -&gt; revparse)</td></tr>
259 +<tr><td><code>tree_browser</code></td><td>list_tree (dirs first, sorted), TreeEntry, EntryKind</td></tr>
260 +<tr><td><code>blob_reader</code></td><td>read_blob -&gt; Text/Binary, détection binaire (null bytes)</td></tr>
261 +<tr><td><code>commit_log</code></td><td>list_commits (paginé), find_commit, CommitInfo</td></tr>
262 +<tr><td><code>readme</code></td><td>find_readme (README.md &gt; README &gt; readme.md &gt; …)</td></tr>
263 +<tr><td><code>pack_protocol</code></td><td>advertise_refs, serve_pack (async, git-upload-pack/git-receive-pack)</td></tr>
264 +</tbody>
265 +</table>
266 +</div>
267 +<h3 id="gitrust-ssh"><a class="header" href="#gitrust-ssh">gitrust-ssh</a></h3>
268 +<p>Serveur SSH basé sur <code>russh</code>. Authentification par clé publique.</p>
269 +<div class="table-wrapper">
270 +<table>
271 +<thead>
272 +<tr><th>Module (prévu)</th><th>Rôle</th></tr>
273 +</thead>
274 +<tbody>
275 +<tr><td><code>server</code></td><td>Démarrage, génération clé hôte Ed25519</td></tr>
276 +<tr><td><code>auth</code></td><td>Authentification par fingerprint -&gt; SshKeyService</td></tr>
277 +<tr><td><code>session</code></td><td>Handler SSH (exec, shell)</td></tr>
278 +<tr><td><code>command_handler</code></td><td>Parsing <code>git-upload-pack</code>/<code>git-receive-pack</code></td></tr>
279 +</tbody>
280 +</table>
281 +</div>
282 +<h3 id="gitrust-web"><a class="header" href="#gitrust-web">gitrust-web</a></h3>
283 +<p>Interface web SSR (Server-Side Rendering) avec Askama (templates compilés) + HTMX (interactions dynamiques). Fonctionne en mode <code>headless()</code> : les pages UI du framework (<code>rustwarden-ui</code>) ne sont pas montées, gitrust-web réimplémente toutes les pages avec un design spécifique (sidebar contextuelle, navigation Git, DaisyUI).</p>
284 +<p><strong>Architecture des routes :</strong></p>
285 +<pre><code>gitrust (port 4000)
286 +├── /api/v1/auth/* ← Routes API du framework (JSON)
287 +│ ├── POST /login AuthService::authenticate_user
288 +│ ├── POST /register UserService::create_user
289 +│ ├── POST /refresh RefreshTokenService (rotation JWT)
290 +│ ├── POST /logout JwtBlacklistService
291 +│ ├── GET /me Claims extraction
292 +│ ├── POST /forgot-password PasswordResetService::request_reset
293 +│ ├── POST /reset-password PasswordResetService::reset_password
294 +│ ├── GET /verify-email/{t} EmailValidationService::verify_email
295 +│ └── POST /resend-verif EmailValidationService::resend
296 +│
297 +├── /api/v1/* ← API REST Gitrust (JSON, auth JWT/PAT)
298 +│ ├── /user, /user/repos Profil utilisateur
299 +│ ├── /repos/{o}/{r} Détail dépôt, branches, tags, commits
300 +│ ├── /repos/{o}/{r}/issues CRUD issues + commentaires
301 +│ ├── /repos/{o}/{r}/pulls CRUD PRs + merge
302 +│ └── /repos/{o}/{r}/ci/* Pipelines CI (list, trigger, cancel, logs)
303 +│
304 +├── /* ← Pages SSR gitrust (HTML)
305 +│ ├── /login, /register Pages formulaires (design gitrust)
306 +│ ├── /dashboard, /teams Pages utilisateur
307 +│ ├── /settings/* Profile, SSH keys, sessions, notifications
308 +│ ├── /notifications Liste notifications + SSE stream
309 +│ ├── /admin/* Administration (+ admin CI)
310 +│ ├── /{owner}/{repo}/* Navigation dépôt Git
311 +│ └── /{owner}/{repo}/ci/* Pages CI (pipelines, logs, config, variables)
312 +│
313 +└── /static/* ← Assets locaux (CSS, JS, HTMX)
314 +</code></pre>
315 +<p>Les routes API du framework sont montées via <code>framework_api_routes()</code> dans <code>routes.rs</code>. Elles sont utilisées par :</p>
316 +<ul>
317 +<li>Les liens dans les emails (vérification, reset password)</li>
318 +<li>Le refresh token (rotation JWT, session longue durée)</li>
319 +<li>L’accès programmatique (GET /me, POST /logout)</li>
320 +</ul>
321 +<p>Les pages SSR et les routes API coexistent : les formulaires HTML soumettent aux handlers gitrust (SSR), tandis que les services framework génèrent des liens vers les routes API.</p>
322 +<div class="table-wrapper">
323 +<table>
324 +<thead>
325 +<tr><th>Module</th><th>Rôle</th></tr>
326 +</thead>
327 +<tbody>
328 +<tr><td><code>routes.rs</code></td><td>Routeur principal : framework API + API REST Gitrust + pages SSR + fichiers statiques</td></tr>
329 +<tr><td><code>handlers/</code></td><td>Handlers Axum SSR (un fichier par domaine) + handlers API JSON</td></tr>
330 +<tr><td><code>templates.rs</code></td><td>Structs Askama + SidebarContext + RepoNav</td></tr>
331 +<tr><td><code>helpers.rs</code></td><td>require_auth, require_admin, sidebar_*, resolve_repo_access</td></tr>
332 +<tr><td><code>templates/</code></td><td>Templates HTML (Askama, extends base.html)</td></tr>
333 +<tr><td><code>static_files.rs</code></td><td>ServeDir pour /static</td></tr>
334 +</tbody>
335 +</table>
336 +</div>
337 +<h3 id="gitrust-hooks"><a class="header" href="#gitrust-hooks">gitrust-hooks</a></h3>
338 +<p>Implémentation de <code>RustwardenHooks</code> pour réagir aux événements du framework. Les hooks sont injectés dans le routeur Axum via <code>Arc&lt;dyn RustwardenHooks&gt;</code> + <code>axum::Extension</code> (dans <code>main.rs</code>).</p>
339 +<div class="table-wrapper">
340 +<table>
341 +<thead>
342 +<tr><th>Hook</th><th>Action</th></tr>
343 +</thead>
344 +<tbody>
345 +<tr><td><code>on_user_registered</code></td><td>Crée le répertoire utilisateur sur le FS (anti path-traversal)</td></tr>
346 +<tr><td><code>on_user_deleted</code></td><td>Supprime le répertoire utilisateur + bare repos sur le FS</td></tr>
347 +<tr><td><code>on_resource_shared</code></td><td>Audit log si resource_type = “repository”</td></tr>
348 +<tr><td><code>on_resource_unshared</code></td><td>Audit log si resource_type = “repository”</td></tr>
349 +</tbody>
350 +</table>
351 +</div>
352 +<hr>
353 +<h2 id="notifications"><a class="header" href="#notifications">Notifications</a></h2>
354 +<p>Système de notification à deux canaux : <strong>in-app</strong> (SSE temps réel + page) et <strong>email</strong> (worker SMTP du framework).</p>
355 +<pre><code>Événement (pipeline échoue, PR commentée, etc.)
356 + │
357 + ▼
358 +NotificationService::notify(user_id, event_type, title, body, link)
359 + │
360 + ├── INSERT INTO notifications (in-app)
361 + │ → broadcast::Sender → SSE /notifications/stream
362 + │ → Badge header mis à jour en temps réel (HTMX)
363 + │
364 + └── if user.email_on_{event} = true:
365 + EmailQueueService::enqueue() (framework SMTP worker)
366 +</code></pre>
367 +<p>Les préférences de notification sont par utilisateur (email on/off par type d’événement).</p>
368 +<hr>
369 +<h2 id="cicd--modes-et-composants"><a class="header" href="#cicd--modes-et-composants">CI/CD — Modes et composants</a></h2>
370 +<p>Système CI hybride à deux niveaux, activé via <code>CI_ENABLED=true</code>.</p>
371 +<h3 id="modes"><a class="header" href="#modes">Modes</a></h3>
372 +<div class="table-wrapper">
373 +<table>
374 +<thead>
375 +<tr><th>Mode</th><th>Détection</th><th>Exécution</th></tr>
376 +</thead>
377 +<tbody>
378 +<tr><td><strong>Easy</strong></td><td><code>.gitrust-ci.yml</code> à la racine du repo</td><td>Module Dagger Python générique (<code>ci-engine</code>) interprète le YAML</td></tr>
379 +<tr><td><strong>Power</strong></td><td><code>.dagger/</code> à la racine du repo</td><td><code>dagger call -m .dagger/</code> exécute le module utilisateur directement</td></tr>
380 +<tr><td>Aucun</td><td>Ni l’un ni l’autre</td><td>Pas de CI pour ce repo</td></tr>
381 +</tbody>
382 +</table>
383 +</div>
384 +<h3 id="architecture-ci"><a class="header" href="#architecture-ci">Architecture CI</a></h3>
385 +<pre><code>git push (HTTP ou SSH)
386 + │
387 + ▼
388 +receive-pack handler
389 + │
390 + ├── CiDetectionService::detect(bare_repo, commit_sha)
391 + │ → Easy / Power / None
392 + │
393 + ├── CiService::create_pipeline(repo_id, sha, mode)
394 + │
395 + └── mpsc::Sender.send(job) ──► CiWorker (tokio::spawn)
396 + │
397 + ├── 1. Validation statique
398 + │ Easy: schéma YAML, whitelist images/packages
399 + │ Power: analyse code .dagger/ (si activé)
400 + │
401 + ├── 2. SBOM Gate (si CI_SBOM_ENABLED)
402 + │ syft scan → sbom.cdx.json
403 + │ → Dependency-Track (si CI_DTRACK_ENABLED)
404 + │ → PASS/FAIL selon politique
405 + │
406 + ├── 3. Résolution variables (héritage team → repo)
407 + │ CiVariableService::resolve_for_pipeline()
408 + │
409 + ├── 4. Exécution Dagger (isolé, timeout, cgroups)
410 + │ Easy: dagger call -m ci-engine test --profile=...
411 + │ Power: dagger call -m .dagger/ &lt;function&gt;
412 + │
413 + └── 5. Rapport + audit
414 + Status, logs (broadcast SSE), ci_audit_log
415 +</code></pre>
416 +<h3 id="composants-externes-tous-optionnels-sauf-dagger"><a class="header" href="#composants-externes-tous-optionnels-sauf-dagger">Composants externes (tous optionnels sauf Dagger)</a></h3>
417 +<div class="table-wrapper">
418 +<table>
419 +<thead>
420 +<tr><th>Composant</th><th>Rôle</th><th>Variable de contrôle</th></tr>
421 +</thead>
422 +<tbody>
423 +<tr><td>Dagger Engine</td><td>Exécution des pipelines dans des containers isolés</td><td><code>CI_ENABLED</code></td></tr>
424 +<tr><td>ci-engine (Python)</td><td>Moteur générique pour Easy Mode</td><td><code>CI_DAGGER_MODULE_PATH</code></td></tr>
425 +<tr><td>Syft</td><td>Génération SBOM CycloneDX</td><td><code>CI_SBOM_ENABLED</code></td></tr>
426 +<tr><td>Dependency-Track</td><td>Analyse de vulnérabilités sur les SBOM</td><td><code>CI_DTRACK_ENABLED</code></td></tr>
427 +</tbody>
428 +</table>
429 +</div>
430 +<h3 id="variables-et-secrets-ci"><a class="header" href="#variables-et-secrets-ci">Variables et secrets CI</a></h3>
431 +<p>Héritage <strong>team → repo</strong> : les variables définies au niveau team sont partagées entre tous les repos de l’équipe. Le repo peut surcharger une clé team avec sa propre valeur. Les secrets sont chiffrés en base (AES-256-GCM) et masqués dans les logs (<code>***</code>).</p>
432 +<hr>
433 +<h2 id="sécurité-anssi-pa-074"><a class="header" href="#sécurité-anssi-pa-074">Sécurité (ANSSI PA-074)</a></h2>
434 +<div class="table-wrapper">
435 +<table>
436 +<thead>
437 +<tr><th>Directive</th><th>Scope</th></tr>
438 +</thead>
439 +<tbody>
440 +<tr><td><code>#![forbid(unsafe_code)]</code></td><td>gitrust-core, gitrust-web, gitrust-hooks</td></tr>
441 +<tr><td><code>#![deny(unsafe_code)]</code></td><td>gitrust-git, gitrust-ssh (FFI libgit2/russh)</td></tr>
442 +<tr><td><code>deny(clippy::unwrap_used, expect_used, panic)</code></td><td>Tous les crates</td></tr>
443 +<tr><td><code>deny(clippy::indexing_slicing)</code></td><td>Tous les crates</td></tr>
444 +<tr><td><code>deny(clippy::mem_forget)</code></td><td>Tous les crates</td></tr>
445 +<tr><td><code>Zeroize</code> on drop</td><td><code>TokenHash</code> (ANSSI R23)</td></tr>
446 +<tr><td>RSA minimum 4096 bits</td><td><code>SshKeyService</code></td></tr>
447 +<tr><td>Path traversal validation</td><td><code>RepositoryService</code>, <code>gitrust-git</code></td></tr>
448 +<tr><td>Slug validation + noms réservés</td><td><code>RepoSlug</code>, <code>TeamSlug</code></td></tr>
449 +</tbody>
450 +</table>
451 +</div>
452 +
453 + </main>
454 +
455 + <nav class="nav-wrapper" aria-label="Page navigation">
456 + <!-- Mobile navigation buttons -->
457 + <a rel="prev" href="../../developer_manual/reference/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
458 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
459 + </a>
460 +
461 + <a rel="next prefetch" href="../../developer_manual/reference/services-api-interne.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
462 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
463 + </a>
464 +
465 + <div style="clear: both"></div>
466 + </nav>
467 + </div>
468 + </div>
469 +
470 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
471 + <a rel="prev" href="../../developer_manual/reference/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
472 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
473 + </a>
474 +
475 + <a rel="next prefetch" href="../../developer_manual/reference/services-api-interne.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
476 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
477 + </a>
478 + </nav>
479 +
480 + </div>
481 +
482 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
483 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
484 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
485 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
486 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
487 +
488 +
489 +
490 + <script>
491 + window.playground_copyable = true;
492 + </script>
493 +
494 +
495 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
496 + <script src="../../mark-09e88c2c.min.js"></script>
497 + <script src="../../searcher-c2a407aa.js"></script>
498 +
499 + <script src="../../clipboard-1626706a.min.js"></script>
500 + <script src="../../highlight-abc7f01d.js"></script>
501 + <script src="../../book-a0b12cfe.js"></script>
502 +
503 + <!-- Custom JS scripts -->
504 + <script src="../../theme/mermaid-eefea253.min.js"></script>
505 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
506 +
507 +
508 +
509 + </div>
510 + </body>
511 +</html>
A book/developer_manual/reference/git-hooks-post-receive.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Hooks Git post-receive - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/reference/git-hooks-post-receive.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="hooks-git-post-receive"><a class="header" href="#hooks-git-post-receive">Hooks Git post-receive</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/reference/api-rest-v1.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/reference/rustwarden-core-api.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/reference/api-rest-v1.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/reference/rustwarden-core-api.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/reference/index.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Référence - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/reference/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="référence"><a class="header" href="#référence">Référence</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/how-to/passer-la-qa-avant-merge.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/reference/architecture-crates.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/how-to/passer-la-qa-avant-merge.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/reference/architecture-crates.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/reference/regles-qa-anssi.html
+375 -0
@@ -0,0 +1,375 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Règles QA et conformité ANSSI - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/reference/regles-qa-anssi.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="règles-qa--conformité-anssi"><a class="header" href="#règles-qa--conformité-anssi">Règles QA &amp; conformité ANSSI</a></h1>
181 +<p>Ce document définit les règles de qualité et de sécurité applicables à tout le projet gitrust. Chaque lot doit satisfaire ces règles avant merge.</p>
182 +<hr>
183 +<h2 id="1-gates-de-compilation-obligatoires"><a class="header" href="#1-gates-de-compilation-obligatoires">1. Gates de compilation obligatoires</a></h2>
184 +<p>Toute modification doit passer ces 4 gates sans erreur :</p>
185 +<div class="table-wrapper">
186 +<table>
187 +<thead>
188 +<tr><th>Gate</th><th>Commande</th><th>Critère</th></tr>
189 +</thead>
190 +<tbody>
191 +<tr><td>Formatage</td><td><code>cargo fmt --all -- --check</code></td><td>Zéro diff</td></tr>
192 +<tr><td>Linting</td><td><code>cargo clippy --workspace -- -D warnings</code></td><td>Zéro warning</td></tr>
193 +<tr><td>Tests unitaires</td><td><code>cargo test --workspace</code></td><td>100% pass</td></tr>
194 +<tr><td>Build CSS</td><td><code>npx tailwindcss -i static/css/input.css -o static/css/style.css --minify</code></td><td>Si templates modifiés</td></tr>
195 +</tbody>
196 +</table>
197 +</div>
198 +<h3 id="gates-supplémentaires-à-mettre-en-place"><a class="header" href="#gates-supplémentaires-à-mettre-en-place">Gates supplémentaires (à mettre en place)</a></h3>
199 +<div class="table-wrapper">
200 +<table>
201 +<thead>
202 +<tr><th>Gate</th><th>Outil</th><th>Rôle</th></tr>
203 +</thead>
204 +<tbody>
205 +<tr><td>Audit dépendances</td><td><code>cargo audit</code></td><td>Détection CVE dans les deps</td></tr>
206 +<tr><td>Licences &amp; bans</td><td><code>cargo deny check</code></td><td>Licences compatibles, pas de crate bannie</td></tr>
207 +<tr><td>Secrets dans le code</td><td>Recherche de patterns sensibles</td><td>Pas de token/mot de passe en dur</td></tr>
208 +</tbody>
209 +</table>
210 +</div>
211 +<hr>
212 +<h2 id="2-règles-de-sécurité-anssi-pa-074"><a class="header" href="#2-règles-de-sécurité-anssi-pa-074">2. Règles de sécurité (ANSSI PA-074)</a></h2>
213 +<h3 id="21-lints-rust-obligatoires-déjà-en-place"><a class="header" href="#21-lints-rust-obligatoires-déjà-en-place">2.1 Lints Rust obligatoires (déjà en place)</a></h3>
214 +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
215 +</span>#![forbid(unsafe_code)] // core, web, hooks
216 +#![deny(unsafe_code)] // git, ssh (FFI nécessaire)
217 +#![deny(clippy::unwrap_used)]
218 +#![deny(clippy::expect_used)]
219 +#![deny(clippy::panic)]
220 +#![deny(clippy::indexing_slicing)]
221 +#![deny(clippy::mem_forget)]
222 +<span class="boring">fn main() {
223 +</span><span class="boring">}</span></code></pre>
224 +<h3 id="22-checklist-sécurité-par-feature"><a class="header" href="#22-checklist-sécurité-par-feature">2.2 Checklist sécurité par feature</a></h3>
225 +<p>Avant toute implémentation touchant l’authentification, les secrets ou les permissions, vérifier :</p>
226 +<ul>
227 +<li><input disabled="" type="checkbox"> <strong>Secrets jamais en clair en base</strong> — hash SHA-256 ou bcrypt</li>
228 +<li><input disabled="" type="checkbox"> <strong>Secrets jamais loggés</strong> — vérifier <code>tracing::info/debug/warn</code>, <code>Display</code> et <code>Debug</code> impls ne révèlent pas le secret</li>
229 +<li><input disabled="" type="checkbox"> <strong>Comparaison constant-time</strong> — <code>subtle::ConstantTimeEq</code> pour toute validation de secret (pas de <code>==</code> sur des hash)</li>
230 +<li><input disabled="" type="checkbox"> <strong>Rate-limiting</strong> — endpoint d’authentification protégé</li>
231 +<li><input disabled="" type="checkbox"> <strong>CSRF</strong> — token valide sur toute action mutante (POST/PUT/DELETE)</li>
232 +<li><input disabled="" type="checkbox"> <strong>Ownership vérifiée (anti-IDOR)</strong> — le user ne peut agir que sur ses propres ressources (vérifier <code>user_id</code> côté serveur)</li>
233 +<li><input disabled="" type="checkbox"> <strong>Expiration obligatoire</strong> — tout token/session a une durée de vie max</li>
234 +<li><input disabled="" type="checkbox"> <strong>Audit log</strong> — création, révocation, utilisation suspecte tracées</li>
235 +<li><input disabled="" type="checkbox"> <strong>Zeroize</strong> — types sensibles implémentent <code>Zeroize</code>/<code>ZeroizeOnDrop</code></li>
236 +<li><input disabled="" type="checkbox"> <strong>Path traversal</strong> — validation des chemins disque (pas de <code>..</code>, <code>/</code>, <code>\</code>)</li>
237 +</ul>
238 +<h3 id="23-marqueurs-sec-"><a class="header" href="#23-marqueurs-sec-">2.3 Marqueurs SEC-</a></h3>
239 +<p>Le code utilise des commentaires <code>// SEC-XX</code> pour tracer les décisions de sécurité. Tout nouveau contrôle doit être marqué avec le prochain numéro disponible dans sa catégorie :</p>
240 +<div class="table-wrapper">
241 +<table>
242 +<thead>
243 +<tr><th>Préfixe</th><th>Catégorie</th><th>Exemples</th></tr>
244 +</thead>
245 +<tbody>
246 +<tr><td>SEC-C</td><td>Cryptographie</td><td>Timing attack, CSRF, PKCE</td></tr>
247 +<tr><td>SEC-H</td><td>HTTP/Headers</td><td>X-Forwarded-For, cookies, nonce</td></tr>
248 +<tr><td>SEC-L</td><td>Logique métier</td><td>Hashing, validation, defaults</td></tr>
249 +<tr><td>SEC-M</td><td>Mémoire/sessions</td><td>Rate-limit DoS, refresh tokens</td></tr>
250 +</tbody>
251 +</table>
252 +</div>
253 +<hr>
254 +<h2 id="3-tests-requis-par-catégorie"><a class="header" href="#3-tests-requis-par-catégorie">3. Tests requis par catégorie</a></h2>
255 +<h3 id="31-matrice-de-couverture"><a class="header" href="#31-matrice-de-couverture">3.1 Matrice de couverture</a></h3>
256 +<div class="table-wrapper">
257 +<table>
258 +<thead>
259 +<tr><th>Catégorie</th><th>Quand appliquer</th><th>Exemples</th></tr>
260 +</thead>
261 +<tbody>
262 +<tr><td><strong>Unitaire</strong></td><td>Logique pure (validation, parsing, conversion)</td><td><code>RepoSlug::new("../evil")</code> → erreur</td></tr>
263 +<tr><td><strong>Intégration</strong></td><td>Service avec DB (CRUD, contraintes, transactions)</td><td><code>PatService::validate</code> token expiré → None</td></tr>
264 +<tr><td><strong>Handler</strong></td><td>Endpoint HTTP (status, redirect, CSRF, auth)</td><td>POST sans CSRF → 403</td></tr>
265 +<tr><td><strong>E2E Playwright</strong></td><td>Flow utilisateur complet</td><td>Créer token → copier → cloner un dépôt</td></tr>
266 +<tr><td><strong>Sécurité négatif</strong></td><td>Tout bypass imaginable</td><td>Token user A sur ressource user B → 401</td></tr>
267 +</tbody>
268 +</table>
269 +</div>
270 +<h3 id="32-règles-de-tests"><a class="header" href="#32-règles-de-tests">3.2 Règles de tests</a></h3>
271 +<ol>
272 +<li><strong>Tests d’intégration sur vraie DB</strong> — pas de mocks pour la couche persistence (les mocks masquent les bugs de migration)</li>
273 +<li><strong>Tests négatifs obligatoires</strong> — pour chaque chemin heureux, tester au moins : input invalide, non-authentifié, non-autorisé, expiré, révoqué</li>
274 +<li><strong>Tests E2E en français</strong> — cohérent avec l’UI (locale <code>fr-FR</code>)</li>
275 +<li><strong>Pas de <code>sleep()</code> dans les tests</strong> — utiliser des retry/poll avec timeout</li>
276 +<li><strong>Données de test isolées</strong> — chaque test crée ses propres données (pas de dépendance sur l’ordre d’exécution)</li>
277 +</ol>
278 +<hr>
279 +<h2 id="4-règles-de-code"><a class="header" href="#4-règles-de-code">4. Règles de code</a></h2>
280 +<h3 id="41-framework-boundary"><a class="header" href="#41-framework-boundary">4.1 Framework boundary</a></h3>
281 +<ul>
282 +<li><strong>Ne jamais modifier</strong> <code>crates/rustwarden-core/</code></li>
283 +<li>Réutiliser les services framework avant d’implémenter (auth, users, sessions, ResourceService, i18n, middleware)</li>
284 +<li>Si un service manque, l’étendre côté gitrust (wrappers, trait impls)</li>
285 +</ul>
286 +<h3 id="42-assets"><a class="header" href="#42-assets">4.2 Assets</a></h3>
287 +<ul>
288 +<li><strong>Zéro CDN</strong> — tous les CSS/JS servis depuis <code>static/</code></li>
289 +<li>La CSP du framework bloque les domaines externes</li>
290 +</ul>
291 +<h3 id="43-gestion-derreurs"><a class="header" href="#43-gestion-derreurs">4.3 Gestion d’erreurs</a></h3>
292 +<ul>
293 +<li><code>GitrustError</code> avec <code>IntoResponse</code> pour le mapping HTTP</li>
294 +<li>Pas de <code>.unwrap()</code> / <code>.expect()</code> / <code>panic!()</code> / <code>[index]</code></li>
295 +<li>Errors utilisateur : messages génériques (pas de leak d’info interne)</li>
296 +</ul>
297 +<h3 id="44-validation-aux-frontières"><a class="header" href="#44-validation-aux-frontières">4.4 Validation aux frontières</a></h3>
298 +<ul>
299 +<li>Valider les inputs utilisateur (formulaires, query params, headers)</li>
300 +<li>Ne pas re-valider entre services internes</li>
301 +<li>Newtypes avec validation à la construction (<code>RepoSlug</code>, <code>TeamSlug</code>, <code>Fingerprint</code>, <code>TokenHash</code>)</li>
302 +</ul>
303 +<hr>
304 +<h2 id="5-checklist-pré-merge"><a class="header" href="#5-checklist-pré-merge">5. Checklist pré-merge</a></h2>
305 +<p>Avant chaque merge de lot :</p>
306 +<ul>
307 +<li><input disabled="" type="checkbox"> <code>cargo fmt --all -- --check</code> passe</li>
308 +<li><input disabled="" type="checkbox"> <code>cargo clippy --workspace -- -D warnings</code> passe</li>
309 +<li><input disabled="" type="checkbox"> <code>cargo test --workspace</code> — tous les tests passent</li>
310 +<li><input disabled="" type="checkbox"> Tests E2E Playwright passent (<code>npm run test:e2e</code>)</li>
311 +<li><input disabled="" type="checkbox"> CSS rebuild si templates modifiés</li>
312 +<li><input disabled="" type="checkbox"> Aucun secret en clair dans le code ou les logs</li>
313 +<li><input disabled="" type="checkbox"> Checklist sécurité §2.2 validée (si applicable)</li>
314 +<li><input disabled="" type="checkbox"> Pas de modification dans <code>crates/rustwarden-core/</code></li>
315 +</ul>
316 +
317 + </main>
318 +
319 + <nav class="nav-wrapper" aria-label="Page navigation">
320 + <!-- Mobile navigation buttons -->
321 + <a rel="prev" href="../../developer_manual/reference/schema-base-donnees.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
322 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
323 + </a>
324 +
325 + <a rel="next prefetch" href="../../developer_manual/reference/api-rest-v1.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
326 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
327 + </a>
328 +
329 + <div style="clear: both"></div>
330 + </nav>
331 + </div>
332 + </div>
333 +
334 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
335 + <a rel="prev" href="../../developer_manual/reference/schema-base-donnees.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
336 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
337 + </a>
338 +
339 + <a rel="next prefetch" href="../../developer_manual/reference/api-rest-v1.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
340 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
341 + </a>
342 + </nav>
343 +
344 + </div>
345 +
346 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
347 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
348 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
349 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
350 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
351 +
352 +
353 +
354 + <script>
355 + window.playground_copyable = true;
356 + </script>
357 +
358 +
359 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
360 + <script src="../../mark-09e88c2c.min.js"></script>
361 + <script src="../../searcher-c2a407aa.js"></script>
362 +
363 + <script src="../../clipboard-1626706a.min.js"></script>
364 + <script src="../../highlight-abc7f01d.js"></script>
365 + <script src="../../book-a0b12cfe.js"></script>
366 +
367 + <!-- Custom JS scripts -->
368 + <script src="../../theme/mermaid-eefea253.min.js"></script>
369 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
370 +
371 +
372 +
373 + </div>
374 + </body>
375 +</html>
A book/developer_manual/reference/rustwarden-core-api.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>API rustwarden-core - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/reference/rustwarden-core-api.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="api-rustwarden-core"><a class="header" href="#api-rustwarden-core">API rustwarden-core</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/reference/git-hooks-post-receive.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/explanation/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/reference/git-hooks-post-receive.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/explanation/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/reference/schema-base-donnees.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Schéma de la base de données - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/reference/schema-base-donnees.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="schéma-de-la-base-de-données"><a class="header" href="#schéma-de-la-base-de-données">Schéma de la base de données</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/reference/services-api-interne.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/reference/regles-qa-anssi.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/reference/services-api-interne.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/reference/regles-qa-anssi.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/reference/services-api-interne.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Services et API interne - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/reference/services-api-interne.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="services-et-api-interne"><a class="header" href="#services-et-api-interne">Services et API interne</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/reference/architecture-crates.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/reference/schema-base-donnees.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/reference/architecture-crates.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/reference/schema-base-donnees.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/tutorials/01-getting-started.html
+512 -0
@@ -0,0 +1,512 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>01 — Démarrer avec le code gitrust - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/tutorials/01-getting-started.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="premiers-pas-avec-gitrust--compilez-configurez-et-poussez-votre-premier-commit"><a class="header" href="#premiers-pas-avec-gitrust--compilez-configurez-et-poussez-votre-premier-commit">Premiers pas avec gitrust : compilez, configurez et poussez votre premier commit</a></h1>
181 +<blockquote>
182 +<p><strong>Source</strong> : ce tutoriel intègre le contenu de <code>gitrust/docs/GETTING_STARTED.md</code> avec la structure pédagogique complète (objectifs Bloom, modèle mental, checkpoints observables, section « Et si ça ne marche pas »).</p>
183 +</blockquote>
184 +<h2 id="objectifs"><a class="header" href="#objectifs">Objectifs</a></h2>
185 +<p>À la fin de ce tutoriel, vous saurez :</p>
186 +<ul>
187 +<li><strong>O1. Compiler</strong> gitrust depuis les sources et lancer l’instance de développement localement</li>
188 +<li><strong>O2. Configurer</strong> l’environnement de développement (base de données, variables d’environnement, assets CSS)</li>
189 +<li><strong>O3. Exécuter</strong> un premier push SSH vers votre instance locale et vérifier le résultat dans l’interface web</li>
190 +</ul>
191 +<h2 id="pré-requis"><a class="header" href="#pré-requis">Pré-requis</a></h2>
192 +<ul>
193 +<li><strong>Technique</strong> : Rust stable ≥ 1.80 (<code>rustc --version</code>), PostgreSQL ≥ 15 (<code>psql --version</code>), Node.js ≥ 18 (<code>node --version</code>), Git 2.x (<code>git --version</code>), Docker (optionnel, recommandé pour la base de données)</li>
194 +<li><strong>Pédagogique</strong> : être un utilisateur autonome de gitrust (parcours <code>user_manual</code> complété ou équivalent) ; familiarité avec Rust (au moins 3 mois de pratique) et avec HTTP/PostgreSQL</li>
195 +<li><strong>Temps estimé</strong> : ~45 minutes</li>
196 +</ul>
197 +<h2 id="vue-densemble"><a class="header" href="#vue-densemble">Vue d’ensemble</a></h2>
198 +<p>Avant d’exécuter la première commande, prenons 3 minutes pour comprendre ce que vous allez monter et comment les pièces s’articulent.</p>
199 +<p>gitrust est un <strong>monorepo Rust à 6 crates</strong> qui compile en un seul binaire. Quand vous lancez <code>cargo run</code>, ce binaire démarre deux serveurs simultanément : un serveur HTTP (<code>:4000</code>) pour l’interface web et l’API REST, et un serveur SSH (<code>:2222</code>) pour les opérations <code>git push/pull</code>. Ils partagent la même base de données PostgreSQL et le même stockage de dépôts bare sur disque.</p>
200 +<pre class="mermaid">graph TB
201 + subgraph sources ["Sources gitrust (monorepo Rust)"]
202 + C1[rustwarden-core&lt;br/&gt;auth, sessions, middleware]
203 + C2[gitrust-core&lt;br/&gt;modèles, services métier]
204 + C3[gitrust-git&lt;br/&gt;opérations Git bare]
205 + C4[gitrust-web&lt;br/&gt;handlers HTTP + templates]
206 + C5[gitrust-ssh&lt;br/&gt;serveur SSH Git]
207 + C6[gitrust-hooks&lt;br/&gt;post-receive, pre-receive]
208 + end
209 +
210 + subgraph runtime ["Processus unique (cargo run)"]
211 + HTTP["HTTP :4000&lt;br/&gt;UI + API REST"]
212 + SSH["SSH :2222&lt;br/&gt;git push/pull"]
213 + end
214 +
215 + subgraph storage ["Stockage"]
216 + PG[(PostgreSQL&lt;br/&gt;comptes, dépôts,&lt;br/&gt;issues, PRs)]
217 + REPOS[Dépôts bare&lt;br/&gt;data/repos/]
218 + end
219 +
220 + C1 &amp; C2 &amp; C3 &amp; C4 &amp; C5 &amp; C6 --&gt;|cargo build| HTTP
221 + C1 &amp; C2 &amp; C3 &amp; C4 &amp; C5 &amp; C6 --&gt;|cargo build| SSH
222 + HTTP &amp; SSH --&gt; PG
223 + HTTP &amp; SSH --&gt; REPOS
224 +</pre>
225 +
226 +<p><strong>Ce que vous allez faire</strong> : cloner les sources → préparer PostgreSQL → copier et remplir <code>.env</code> → compiler les assets CSS → lancer <code>cargo run</code> → vérifier l’instance → pousser un premier commit via SSH.</p>
227 +<hr>
228 +<h2 id="étape-1--vérifiez-les-pré-requis-système"><a class="header" href="#étape-1--vérifiez-les-pré-requis-système">Étape 1 : Vérifiez les pré-requis système</a></h2>
229 +<p>Avant de cloner quoi que ce soit, vérifiez que tous les outils nécessaires sont installés :</p>
230 +<pre><code class="language-bash">rustc --version &amp;&amp; cargo --version &amp;&amp; psql --version &amp;&amp; node --version &amp;&amp; git --version
231 +</code></pre>
232 +<p>Sortie attendue (versions exactes peuvent varier) :</p>
233 +<pre><code>rustc 1.82.0 (f6e511eec 2024-10-15)
234 +cargo 1.82.0 (8f40fc59f 2024-10-15)
235 +psql (PostgreSQL) 16.3
236 +v20.11.0
237 +git version 2.43.0
238 +</code></pre>
239 +<p>Si des dépendances système manquent, installez-les :</p>
240 +<pre><code class="language-bash"># Debian / Ubuntu
241 +sudo apt install build-essential pkg-config libssl-dev libpq-dev cmake git
242 +
243 +# macOS
244 +brew install postgresql openssl cmake
245 +</code></pre>
246 +<p><strong>Checkpoint</strong> : toutes les commandes de vérification doivent retourner un numéro de version sans erreur. Si <code>rustc</code> n’est pas trouvé, installez Rust via <code>curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh</code> puis rechargez votre shell.</p>
247 +<hr>
248 +<h2 id="étape-2--clonez-le-projet"><a class="header" href="#étape-2--clonez-le-projet">Étape 2 : Clonez le projet</a></h2>
249 +<pre><code class="language-bash">git clone https://demo.gitrust.eu/gitrust/gitrust.git
250 +cd gitrust
251 +</code></pre>
252 +<p>Sortie attendue :</p>
253 +<pre><code>Cloning into 'gitrust'...
254 +remote: Enumerating objects: 12847, done.
255 +remote: Counting objects: 100% (12847/12847), done.
256 +Receiving objects: 100% (12847/12847), 18.42 MiB | 4.20 MiB/s, done.
257 +</code></pre>
258 +<p><strong>Checkpoint</strong> : vérifiez que la structure de crates est présente :</p>
259 +<pre><code class="language-bash">ls crates/
260 +</code></pre>
261 +<p>Sortie attendue :</p>
262 +<pre><code>gitrust-core gitrust-git gitrust-hooks gitrust-ssh gitrust-web rustwarden-core
263 +</code></pre>
264 +<hr>
265 +<h2 id="étape-3--configurez-lenvironnement-env"><a class="header" href="#étape-3--configurez-lenvironnement-env">Étape 3 : Configurez l’environnement (.env)</a></h2>
266 +<p>Copiez le fichier d’exemple et éditez les 5 valeurs essentielles :</p>
267 +<pre><code class="language-bash">cp .env.example .env
268 +</code></pre>
269 +<p>Ouvrez <code>.env</code> dans votre éditeur et renseignez ces valeurs :</p>
270 +<pre><code class="language-env"># Connexion à la base de données
271 +DATABASE_URL=postgres://gitrust:motdepasse@localhost:5432/gitrust
272 +
273 +# Clé secrète JWT (générez-la avec : openssl rand -hex 32)
274 +JWT_SECRET=votre_cle_secrete_64_caracteres
275 +
276 +# Compte administrateur créé au premier lancement
277 +ADMIN_USERNAME=admin
278 +ADMIN_EMAIL=admin@example.com
279 +ADMIN_PASSWORD=MotDePasseFort123!
280 +</code></pre>
281 +<blockquote>
282 +<p>Les autres variables ont des valeurs par défaut raisonnables pour le développement. Consultez <code>.env.example</code> pour la liste complète.</p>
283 +</blockquote>
284 +<p>Générez une vraie valeur pour <code>JWT_SECRET</code> :</p>
285 +<pre><code class="language-bash">openssl rand -hex 32
286 +</code></pre>
287 +<p>Sortie attendue (valeur différente à chaque exécution) :</p>
288 +<pre><code>4a7f2c9e1b8d3f6a0e5c2b9d7f4a1e8c3b6d9f2a5e8c1b4d7f0a3e6c9b2d5f8a
289 +</code></pre>
290 +<p>Copiez cette valeur dans <code>.env</code> pour <code>JWT_SECRET</code>.</p>
291 +<p><strong>Checkpoint</strong> : vérifiez qu’aucune valeur d’exemple reste dans <code>.env</code> :</p>
292 +<pre><code class="language-bash">grep -E "votre_cle|example\.com|MotDePasse" .env
293 +</code></pre>
294 +<p>La commande doit retourner vide (aucune ligne). Si elle retourne des lignes, ces valeurs placeholder sont encore présentes — l’application démarrera mais avec une configuration non sécurisée.</p>
295 +<hr>
296 +<h2 id="étape-4--préparez-la-base-de-données-postgresql"><a class="header" href="#étape-4--préparez-la-base-de-données-postgresql">Étape 4 : Préparez la base de données PostgreSQL</a></h2>
297 +<p>Vous avez deux options :</p>
298 +<p><strong>Option A — Docker (recommandé pour débuter) :</strong></p>
299 +<pre><code class="language-bash">cd database &amp;&amp; docker compose up -d &amp;&amp; cd ..
300 +</code></pre>
301 +<p>Sortie attendue :</p>
302 +<pre><code>[+] Running 2/2
303 + ✔ Container gitrust_postgres_dev Started 0.8s
304 + ✔ Container gitrust_pgadmin Started 1.1s
305 +</code></pre>
306 +<p><strong>Option B — PostgreSQL existant sur la machine :</strong></p>
307 +<pre><code class="language-bash">psql -U postgres &lt;&lt; 'SQL'
308 +CREATE USER gitrust WITH PASSWORD 'motdepasse';
309 +CREATE DATABASE gitrust OWNER gitrust;
310 +SQL
311 +</code></pre>
312 +<p>Sortie attendue :</p>
313 +<pre><code>CREATE ROLE
314 +CREATE DATABASE
315 +</code></pre>
316 +<p>Adaptez le mot de passe dans <code>DATABASE_URL</code> dans <code>.env</code> si vous utilisez l’option B.</p>
317 +<p><strong>Checkpoint</strong> : vérifiez que la base est accessible depuis l’application :</p>
318 +<pre><code class="language-bash">psql "$DATABASE_URL" -c "SELECT version();"
319 +</code></pre>
320 +<p>Sortie attendue :</p>
321 +<pre><code> version
322 +-------------------------------------------------------------------------------------------------------
323 + PostgreSQL 16.3 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0, 64-bit
324 +(1 row)
325 +</code></pre>
326 +<p>Si vous obtenez <code>psql: error: connection to server failed</code>, vérifiez que PostgreSQL tourne et que <code>DATABASE_URL</code> correspond.</p>
327 +<hr>
328 +<h2 id="étape-5--compilez-les-assets-css"><a class="header" href="#étape-5--compilez-les-assets-css">Étape 5 : Compilez les assets CSS</a></h2>
329 +<p>gitrust utilise Tailwind CSS + DaisyUI. Les assets doivent être compilés localement — aucun CDN, tous les fichiers sont servis depuis <code>static/</code> :</p>
330 +<pre><code class="language-bash">npm install
331 +npx tailwindcss -i static/css/input.css -o static/css/style.css --minify
332 +</code></pre>
333 +<p>Sortie attendue :</p>
334 +<pre><code>added 98 packages in 3s
335 +
336 +Rebuilding...
337 +Done in 1842ms.
338 +</code></pre>
339 +<p><strong>Checkpoint</strong> : vérifiez que le fichier CSS est généré :</p>
340 +<pre><code class="language-bash">ls -lh static/css/style.css
341 +</code></pre>
342 +<p>Sortie attendue :</p>
343 +<pre><code>-rw-r--r-- 1 vous vous 45K avr 17 10:15 static/css/style.css
344 +</code></pre>
345 +<p>Si le fichier fait 0 octet ou n’existe pas, la compilation a échoué — relancez <code>npm install</code> puis la commande <code>npx tailwindcss</code>.</p>
346 +<hr>
347 +<h2 id="étape-6--lancez-lapplication"><a class="header" href="#étape-6--lancez-lapplication">Étape 6 : Lancez l’application</a></h2>
348 +<pre><code class="language-bash">cargo run
349 +</code></pre>
350 +<p>La première compilation prend 2 à 5 minutes (toutes les dépendances sont compilées). Les compilations suivantes sont incrémentales et beaucoup plus rapides.</p>
351 +<p>Au premier lancement, gitrust exécute automatiquement :</p>
352 +<ol>
353 +<li>Les migrations de base de données (création de toutes les tables)</li>
354 +<li>La création du compte administrateur (depuis <code>.env</code>)</li>
355 +<li>La génération de la clé SSH host (<code>data/ssh_host_ed25519_key</code>)</li>
356 +<li>La création du répertoire de stockage des dépôts (<code>data/repos/</code>)</li>
357 +</ol>
358 +<p>Sortie attendue (après compilation) :</p>
359 +<pre><code> Compiling gitrust-web v0.9.0 (/home/vous/gitrust/crates/gitrust-web)
360 + Finished `dev` profile [unoptimized + debuginfo] target(s) in 187.42s
361 + Running `target/debug/gitrust`
362 +2026-04-17T10:20:00Z INFO gitrust &gt; Starting gitrust v0.9.0
363 +2026-04-17T10:20:00Z INFO gitrust &gt; Running database migrations... applied 42
364 +2026-04-17T10:20:01Z INFO gitrust &gt; Admin account created: admin
365 +2026-04-17T10:20:01Z INFO gitrust &gt; SSH host key: SHA256:xxxxxxxxxxxxxxxxxxxx
366 +Server listening on http://0.0.0.0:4000
367 +</code></pre>
368 +<p><strong>Checkpoint</strong> : ouvrez <code>http://localhost:4000</code> dans votre navigateur. Vous devez voir la page d’accueil gitrust. Connectez-vous avec les identifiants <code>ADMIN_USERNAME</code> / <code>ADMIN_PASSWORD</code> définis dans <code>.env</code>. Si la page ne charge pas, vérifiez que le message <code>Server listening on http://0.0.0.0:4000</code> est bien apparu dans les logs.</p>
369 +<hr>
370 +<h2 id="étape-7--créez-un-dépôt-et-poussez-votre-premier-commit"><a class="header" href="#étape-7--créez-un-dépôt-et-poussez-votre-premier-commit">Étape 7 : Créez un dépôt et poussez votre premier commit</a></h2>
371 +<p>Dans l’interface web (<code>http://localhost:4000</code>), cliquez sur <strong>« New repository »</strong>, donnez un nom (ex. <code>mon-projet</code>) et cliquez <strong>Créer</strong>.</p>
372 +<p>Ajoutez votre clé SSH publique dans <strong>Settings &gt; SSH Keys</strong> en collant le contenu de <code>~/.ssh/id_ed25519.pub</code>.</p>
373 +<p>Puis dans votre terminal :</p>
374 +<pre><code class="language-bash">git clone ssh://git@localhost:2222/admin/mon-projet.git
375 +cd mon-projet
376 +
377 +echo "# Mon projet" &gt; README.md
378 +git add README.md
379 +git commit -m "Initial commit"
380 +git push origin main
381 +</code></pre>
382 +<p>Sortie attendue :</p>
383 +<pre><code>Cloning into 'mon-projet'...
384 +warning: You appear to have cloned an empty repository.
385 +[main (root-commit) a1b2c3d] Initial commit
386 + 1 file changed, 1 insertion(+)
387 + create mode 100644 README.md
388 +Enumerating objects: 3, done.
389 +Counting objects: 100% (3/3), done.
390 +Writing objects: 100% (3/3), 226 bytes | 226.00 KiB/s, done.
391 +Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
392 +To ssh://localhost:2222/admin/mon-projet.git
393 + * [new branch] main -&gt; main
394 +</code></pre>
395 +<p><strong>Checkpoint</strong> : retournez dans le navigateur sur <code>http://localhost:4000/admin/mon-projet</code>. La page doit afficher le fichier <code>README.md</code> avec le contenu <code># Mon projet</code> et indiquer 1 commit sur la branche <code>main</code>.</p>
396 +<hr>
397 +<h2 id="fonctionnalités-supplémentaires-disponibles"><a class="header" href="#fonctionnalités-supplémentaires-disponibles">Fonctionnalités supplémentaires disponibles</a></h2>
398 +<h3 id="ci-intégrée-optionnelle"><a class="header" href="#ci-intégrée-optionnelle">CI intégrée (optionnelle)</a></h3>
399 +<p>La CI s’exécute sur un serveur de build via SSH + rsync. Configurez dans <code>.env</code> :</p>
400 +<pre><code class="language-env"># Même machine (défaut pour le développement)
401 +CI_REMOTE_HOST=localhost
402 +
403 +# Ou serveur dédié
404 +CI_REMOTE_HOST=192.168.13.110
405 +CI_REMOTE_USER=ci-runner
406 +</code></pre>
407 +<p><strong>Easy Mode</strong> — ajoutez <code>.gitrust-ci.yml</code> à la racine de votre dépôt :</p>
408 +<pre><code class="language-yaml">language: rust
409 +
410 +build:
411 + command: "cargo build --release"
412 +
413 +tests:
414 + command: "cargo test"
415 +</code></pre>
416 +<p><strong>Power Mode</strong> — placez un module Dagger dans <code>.dagger/</code> à la racine. gitrust exécutera <code>dagger call -m .dagger/ ci</code>.</p>
417 +<h3 id="notifications"><a class="header" href="#notifications">Notifications</a></h3>
418 +<p>Configurez SMTP dans <code>.env</code> pour les notifications e-mail :</p>
419 +<pre><code class="language-env">SMTP_HOST=smtp.example.com
420 +SMTP_PORT=587
421 +SMTP_USER=user
422 +SMTP_PASSWORD=password
423 +SMTP_FROM=noreply@gitrust.eu
424 +</code></pre>
425 +<h3 id="langue-de-linterface"><a class="header" href="#langue-de-linterface">Langue de l’interface</a></h3>
426 +<p>gitrust est disponible en 6 langues (fr, en, de, es, pt, it). Définissez la langue par défaut de l’instance :</p>
427 +<pre><code class="language-env">DEFAULT_LOCALE=fr
428 +</code></pre>
429 +<hr>
430 +<h2 id="récapitulatif"><a class="header" href="#récapitulatif">Récapitulatif</a></h2>
431 +<ul>
432 +<li>✓ <strong>O1 accompli</strong> : gitrust est compilé depuis les sources et tourne localement — <code>cargo run</code> affiche « Server listening on http://0.0.0.0:4000 »</li>
433 +<li>✓ <strong>O2 accompli</strong> : l’environnement est configuré — <code>.env</code> rempli, PostgreSQL connecté, assets CSS générés, migrations appliquées</li>
434 +<li>✓ <strong>O3 accompli</strong> : un premier push SSH a réussi — le commit est visible dans l’interface web à <code>http://localhost:4000/admin/mon-projet</code></li>
435 +</ul>
436 +<hr>
437 +<h2 id="et-si-ça-ne-marche-pas"><a class="header" href="#et-si-ça-ne-marche-pas">Et si ça ne marche pas</a></h2>
438 +<div class="table-wrapper">
439 +<table>
440 +<thead>
441 +<tr><th>Symptôme</th><th>Cause probable</th><th>Correction</th></tr>
442 +</thead>
443 +<tbody>
444 +<tr><td><code>error[E0463]: can't find crate for 'std'</code> à la compilation</td><td>Toolchain Rust manquante ou mauvaise version</td><td>Exécutez <code>rustup update stable &amp;&amp; rustup default stable</code>. Vérifiez avec <code>rustc --version</code> ≥ 1.80</td></tr>
445 +<tr><td><code>connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed</code></td><td>PostgreSQL non démarré ou <code>DATABASE_URL</code> incorrect</td><td>Démarrez PostgreSQL (<code>sudo systemctl start postgresql</code> ou <code>docker compose up -d</code> dans <code>database/</code>). Vérifiez que <code>DATABASE_URL</code> dans <code>.env</code> correspond</td></tr>
446 +<tr><td><code>Permission denied (publickey)</code> lors du <code>git push</code></td><td>Clé SSH non enregistrée dans gitrust ou mauvais port</td><td>Vérifiez dans <em>Settings &gt; SSH Keys</em> que la clé est présente. Testez avec <code>ssh -T git@localhost -p 2222</code> — vous devez voir « Vous êtes authentifié »</td></tr>
447 +</tbody>
448 +</table>
449 +</div>
450 +<hr>
451 +<h2 id="prochaine-étape"><a class="header" href="#prochaine-étape">Prochaine étape</a></h2>
452 +<p>→ <a href="02-premiere-contribution.html">02 — Première contribution : clone, build, test, PR</a> : apprenez à créer une feature branch, écrire des tests, et soumettre votre première pull request en suivant le workflow gitrust (~90 min)</p>
453 +
454 + </main>
455 +
456 + <nav class="nav-wrapper" aria-label="Page navigation">
457 + <!-- Mobile navigation buttons -->
458 + <a rel="prev" href="../../developer_manual/tutorials/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
459 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
460 + </a>
461 +
462 + <a rel="next prefetch" href="../../developer_manual/tutorials/02-premiere-contribution.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
463 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
464 + </a>
465 +
466 + <div style="clear: both"></div>
467 + </nav>
468 + </div>
469 + </div>
470 +
471 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
472 + <a rel="prev" href="../../developer_manual/tutorials/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
473 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
474 + </a>
475 +
476 + <a rel="next prefetch" href="../../developer_manual/tutorials/02-premiere-contribution.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
477 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
478 + </a>
479 + </nav>
480 +
481 + </div>
482 +
483 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
484 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
485 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
486 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
487 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
488 +
489 +
490 +
491 + <script>
492 + window.playground_copyable = true;
493 + </script>
494 +
495 +
496 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
497 + <script src="../../mark-09e88c2c.min.js"></script>
498 + <script src="../../searcher-c2a407aa.js"></script>
499 +
500 + <script src="../../clipboard-1626706a.min.js"></script>
501 + <script src="../../highlight-abc7f01d.js"></script>
502 + <script src="../../book-a0b12cfe.js"></script>
503 +
504 + <!-- Custom JS scripts -->
505 + <script src="../../theme/mermaid-eefea253.min.js"></script>
506 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
507 +
508 +
509 +
510 + </div>
511 + </body>
512 +</html>
A book/developer_manual/tutorials/02-premiere-contribution.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>02 — Première contribution - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/tutorials/02-premiere-contribution.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="02--première-contribution"><a class="header" href="#02--première-contribution">02 — Première contribution</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/tutorials/01-getting-started.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/tutorials/03-creer-un-worker-async.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/tutorials/01-getting-started.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/tutorials/03-creer-un-worker-async.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/tutorials/03-creer-un-worker-async.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>03 — Créer un worker async (capstone) - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/tutorials/03-creer-un-worker-async.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="03--créer-un-worker-async-capstone"><a class="header" href="#03--créer-un-worker-async-capstone">03 — Créer un worker async (capstone)</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/tutorials/02-premiere-contribution.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/how-to/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/tutorials/02-premiere-contribution.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/how-to/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/developer_manual/tutorials/index.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Tutoriels - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/developer_manual/tutorials/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="tutoriels"><a class="header" href="#tutoriels">Tutoriels</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../developer_manual/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../developer_manual/tutorials/01-getting-started.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../developer_manual/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../developer_manual/tutorials/01-getting-started.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/elasticlunr-ef4e11c1.min.js
+10 -0
@@ -0,0 +1,10 @@
1 +/**
2 + * elasticlunr - http://weixsong.github.io
3 + * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.5
4 + *
5 + * Copyright (C) 2017 Oliver Nightingale
6 + * Copyright (C) 2017 Wei Song
7 + * MIT Licensed
8 + * @license
9 + */
10 +!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u<s.length;u++){var a=s[u];r[a]=this.pipeline.run(t.tokenizer(e[a]))}var l={};for(var c in o){var d=r[c]||r.any;if(d){var f=this.fieldSearch(d,c,o),h=o[c].boost;for(var p in f)f[p]=f[p]*h;for(var p in f)p in l?l[p]+=f[p]:l[p]=f[p]}}var v,g=[];for(var p in l)v={ref:p,score:l[p]},this.documentStore.hasDoc(p)&&(v.doc=this.documentStore.getDoc(p)),g.push(v);return g.sort(function(e,t){return t.score-e.score}),g},t.Index.prototype.fieldSearch=function(e,t,n){var i=n[t].bool,o=n[t].expand,r=n[t].boost,s=null,u={};return 0!==r?(e.forEach(function(e){var n=[e];1==o&&(n=this.index[t].expandToken(e));var r={};n.forEach(function(n){var o=this.index[t].getDocs(n),a=this.idf(n,t);if(s&&"AND"==i){var l={};for(var c in s)c in o&&(l[c]=o[c]);o=l}n==e&&this.fieldSearchStats(u,n,o);for(var c in o){var d=this.index[t].getTermFrequency(n,c),f=this.documentStore.getFieldLength(c,t),h=1;0!=f&&(h=1/Math.sqrt(f));var p=1;n!=e&&(p=.15*(1-(n.length-e.length)/n.length));var v=d*a*h*p;c in r?r[c]+=v:r[c]=v}},this),s=this.mergeScores(s,r,i)},this),s=this.coordNorm(s,u,e.length)):void 0},t.Index.prototype.mergeScores=function(e,t,n){if(!e)return t;if("AND"==n){var i={};for(var o in t)o in e&&(i[o]=e[o]+t[o]);return i}for(var o in t)o in e?e[o]+=t[o]:e[o]=t[o];return e},t.Index.prototype.fieldSearchStats=function(e,t,n){for(var i in n)i in e?e[i].push(t):e[i]=[t]},t.Index.prototype.coordNorm=function(e,t,n){for(var i in e)if(i in t){var o=t[i].length;e[i]=e[i]*o/n}return e},t.Index.prototype.toJSON=function(){var e={};return this._fields.forEach(function(t){e[t]=this.index[t].toJSON()},this),{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),index:e,pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},t.DocumentStore=function(e){this._save=null===e||void 0===e?!0:e,this.docs={},this.docInfo={},this.length=0},t.DocumentStore.load=function(e){var t=new this;return t.length=e.length,t.docs=e.docs,t.docInfo=e.docInfo,t._save=e.save,t},t.DocumentStore.prototype.isDocStored=function(){return this._save},t.DocumentStore.prototype.addDoc=function(t,n){this.hasDoc(t)||this.length++,this.docs[t]=this._save===!0?e(n):null},t.DocumentStore.prototype.getDoc=function(e){return this.hasDoc(e)===!1?null:this.docs[e]},t.DocumentStore.prototype.hasDoc=function(e){return e in this.docs},t.DocumentStore.prototype.removeDoc=function(e){this.hasDoc(e)&&(delete this.docs[e],delete this.docInfo[e],this.length--)},t.DocumentStore.prototype.addFieldLength=function(e,t,n){null!==e&&void 0!==e&&0!=this.hasDoc(e)&&(this.docInfo[e]||(this.docInfo[e]={}),this.docInfo[e][t]=n)},t.DocumentStore.prototype.updateFieldLength=function(e,t,n){null!==e&&void 0!==e&&0!=this.hasDoc(e)&&this.addFieldLength(e,t,n)},t.DocumentStore.prototype.getFieldLength=function(e,t){return null===e||void 0===e?0:e in this.docs&&t in this.docInfo[e]?this.docInfo[e][t]:0},t.DocumentStore.prototype.toJSON=function(){return{docs:this.docs,docInfo:this.docInfo,length:this.length,save:this._save}},t.stemmer=function(){var e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},t={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",o=n+"[^aeiouy]*",r=i+"[aeiou]*",s="^("+o+")?"+r+o,u="^("+o+")?"+r+o+"("+r+")?$",a="^("+o+")?"+r+o+r+o,l="^("+o+")?"+i,c=new RegExp(s),d=new RegExp(a),f=new RegExp(u),h=new RegExp(l),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,x=new RegExp("([^aeiouylsz])\\1$"),w=new RegExp("^"+o+i+"[^aeiouwxy]$"),I=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,D=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,_=/^(.+?)e$/,P=/ll$/,k=new RegExp("^"+o+i+"[^aeiouwxy]$"),z=function(n){var i,o,r,s,u,a,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,u=v,s.test(n)?n=n.replace(s,"$1$2"):u.test(n)&&(n=n.replace(u,"$1$2")),s=g,u=m,s.test(n)){var z=s.exec(n);s=c,s.test(z[1])&&(s=y,n=n.replace(s,""))}else if(u.test(n)){var z=u.exec(n);i=z[1],u=h,u.test(i)&&(n=i,u=S,a=x,l=w,u.test(n)?n+="e":a.test(n)?(s=y,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=I,s.test(n)){var z=s.exec(n);i=z[1],n=i+"i"}if(s=b,s.test(n)){var z=s.exec(n);i=z[1],o=z[2],s=c,s.test(i)&&(n=i+e[o])}if(s=E,s.test(n)){var z=s.exec(n);i=z[1],o=z[2],s=c,s.test(i)&&(n=i+t[o])}if(s=D,u=F,s.test(n)){var z=s.exec(n);i=z[1],s=d,s.test(i)&&(n=i)}else if(u.test(n)){var z=u.exec(n);i=z[1]+z[2],u=d,u.test(i)&&(n=i)}if(s=_,s.test(n)){var z=s.exec(n);i=z[1],s=d,u=f,a=k,(s.test(i)||u.test(i)&&!a.test(i))&&(n=i)}return s=P,u=d,s.test(n)&&u.test(n)&&(s=y,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return z}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.stopWordFilter=function(e){return e&&t.stopWordFilter.stopWords[e]!==!0?e:void 0},t.clearStopWords=function(){t.stopWordFilter.stopWords={}},t.addStopWords=function(e){null!=e&&Array.isArray(e)!==!1&&e.forEach(function(e){t.stopWordFilter.stopWords[e]=!0},this)},t.resetStopWords=function(){t.stopWordFilter.stopWords=t.defaultStopWords},t.defaultStopWords={"":!0,a:!0,able:!0,about:!0,across:!0,after:!0,all:!0,almost:!0,also:!0,am:!0,among:!0,an:!0,and:!0,any:!0,are:!0,as:!0,at:!0,be:!0,because:!0,been:!0,but:!0,by:!0,can:!0,cannot:!0,could:!0,dear:!0,did:!0,"do":!0,does:!0,either:!0,"else":!0,ever:!0,every:!0,"for":!0,from:!0,get:!0,got:!0,had:!0,has:!0,have:!0,he:!0,her:!0,hers:!0,him:!0,his:!0,how:!0,however:!0,i:!0,"if":!0,"in":!0,into:!0,is:!0,it:!0,its:!0,just:!0,least:!0,let:!0,like:!0,likely:!0,may:!0,me:!0,might:!0,most:!0,must:!0,my:!0,neither:!0,no:!0,nor:!0,not:!0,of:!0,off:!0,often:!0,on:!0,only:!0,or:!0,other:!0,our:!0,own:!0,rather:!0,said:!0,say:!0,says:!0,she:!0,should:!0,since:!0,so:!0,some:!0,than:!0,that:!0,the:!0,their:!0,them:!0,then:!0,there:!0,these:!0,they:!0,"this":!0,tis:!0,to:!0,too:!0,twas:!0,us:!0,wants:!0,was:!0,we:!0,were:!0,what:!0,when:!0,where:!0,which:!0,"while":!0,who:!0,whom:!0,why:!0,will:!0,"with":!0,would:!0,yet:!0,you:!0,your:!0},t.stopWordFilter.stopWords=t.defaultStopWords,t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(e){if(null===e||void 0===e)throw new Error("token should not be undefined");return e.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.InvertedIndex=function(){this.root={docs:{},df:0}},t.InvertedIndex.load=function(e){var t=new this;return t.root=e.root,t},t.InvertedIndex.prototype.addToken=function(e,t,n){for(var n=n||this.root,i=0;i<=e.length-1;){var o=e[i];o in n||(n[o]={docs:{},df:0}),i+=1,n=n[o]}var r=t.ref;n.docs[r]?n.docs[r]={tf:t.tf}:(n.docs[r]={tf:t.tf},n.df+=1)},t.InvertedIndex.prototype.hasToken=function(e){if(!e)return!1;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return!1;t=t[e[n]]}return!0},t.InvertedIndex.prototype.getNode=function(e){if(!e)return null;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return null;t=t[e[n]]}return t},t.InvertedIndex.prototype.getDocs=function(e){var t=this.getNode(e);return null==t?{}:t.docs},t.InvertedIndex.prototype.getTermFrequency=function(e,t){var n=this.getNode(e);return null==n?0:t in n.docs?n.docs[t].tf:0},t.InvertedIndex.prototype.getDocFreq=function(e){var t=this.getNode(e);return null==t?0:t.df},t.InvertedIndex.prototype.removeToken=function(e,t){if(e){var n=this.getNode(e);null!=n&&t in n.docs&&(delete n.docs[t],n.df-=1)}},t.InvertedIndex.prototype.expandToken=function(e,t,n){if(null==e||""==e)return[];var t=t||[];if(void 0==n&&(n=this.getNode(e),null==n))return t;n.df>0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e<arguments.length;e++)t=arguments[e],~this.indexOf(t)||this.elements.splice(this.locationFor(t),0,t);this.length=this.elements.length},lunr.SortedSet.prototype.toArray=function(){return this.elements.slice()},lunr.SortedSet.prototype.map=function(e,t){return this.elements.map(e,t)},lunr.SortedSet.prototype.forEach=function(e,t){return this.elements.forEach(e,t)},lunr.SortedSet.prototype.indexOf=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]<u[i]?n++:s[n]>u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o<r.length;o++)i.add(r[o]);return i},lunr.SortedSet.prototype.toJSON=function(){return this.toArray()},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.elasticlunr=t()}(this,function(){return t})}();
10 < \ No newline at end of file
A book/favicon-8114d1fc.png
+0 -0
A book/favicon-de23e50b.svg
+22 -0
@@ -0,0 +1,22 @@
1 +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 199.7 184.2">
2 + <style>
3 + @media (prefers-color-scheme: dark) {
4 + svg { fill: white; }
5 + }
6 + </style>
7 +<path d="M189.5,36.8c0.2,2.8,0,5.1-0.6,6.8L153,162c-0.6,2.1-2,3.7-4.2,5c-2.2,1.2-4.4,1.9-6.7,1.9H31.4c-9.6,0-15.3-2.8-17.3-8.4
8 + c-0.8-2.2-0.8-3.9,0.1-5.2c0.9-1.2,2.4-1.8,4.6-1.8H123c7.4,0,12.6-1.4,15.4-4.1s5.7-8.9,8.6-18.4l32.9-108.6
9 + c1.8-5.9,1-11.1-2.2-15.6S169.9,0,164,0H72.7c-1,0-3.1,0.4-6.1,1.1l0.1-0.4C64.5,0.2,62.6,0,61,0.1s-3,0.5-4.3,1.4
10 + c-1.3,0.9-2.4,1.8-3.2,2.8S52,6.5,51.2,8.1c-0.8,1.6-1.4,3-1.9,4.3s-1.1,2.7-1.8,4.2c-0.7,1.5-1.3,2.7-2,3.7c-0.5,0.6-1.2,1.5-2,2.5
11 + s-1.6,2-2.2,2.8s-0.9,1.5-1.1,2.2c-0.2,0.7-0.1,1.8,0.2,3.2c0.3,1.4,0.4,2.4,0.4,3.1c-0.3,3-1.4,6.9-3.3,11.6
12 + c-1.9,4.7-3.6,8.1-5.1,10.1c-0.3,0.4-1.2,1.3-2.6,2.7c-1.4,1.4-2.3,2.6-2.6,3.7c-0.3,0.4-0.3,1.5-0.1,3.4c0.3,1.8,0.4,3.1,0.3,3.8
13 + c-0.3,2.7-1.3,6.3-3,10.8c-1.7,4.5-3.4,8.2-5,11c-0.2,0.5-0.9,1.4-2,2.8c-1.1,1.4-1.8,2.5-2,3.4c-0.2,0.6-0.1,1.8,0.1,3.4
14 + c0.2,1.6,0.2,2.8-0.1,3.6c-0.6,3-1.8,6.7-3.6,11c-1.8,4.3-3.6,7.9-5.4,11c-0.5,0.8-1.1,1.7-2,2.8c-0.8,1.1-1.5,2-2,2.8
15 + s-0.8,1.6-1,2.5c-0.1,0.5,0,1.3,0.4,2.3c0.3,1.1,0.4,1.9,0.4,2.6c-0.1,1.1-0.2,2.6-0.5,4.4c-0.2,1.8-0.4,2.9-0.4,3.2
16 + c-1.8,4.8-1.7,9.9,0.2,15.2c2.2,6.2,6.2,11.5,11.9,15.8c5.7,4.3,11.7,6.4,17.8,6.4h110.7c5.2,0,10.1-1.7,14.7-5.2s7.7-7.8,9.2-12.9
17 + l33-108.6c1.8-5.8,1-10.9-2.2-15.5C194.9,39.7,192.6,38,189.5,36.8z M59.6,122.8L73.8,80c0,0,7,0,10.8,0s28.8-1.7,25.4,17.5
18 + c-3.4,19.2-18.8,25.2-36.8,25.4S59.6,122.8,59.6,122.8z M78.6,116.8c4.7-0.1,18.9-2.9,22.1-17.1S89.2,86.3,89.2,86.3l-8.9,0
19 + l-10.2,30.5C70.2,116.9,74,116.9,78.6,116.8z M75.3,68.7L89,26.2h9.8l0.8,34l23.6-34h9.9l-13.6,42.5h-7.1l12.5-35.4l-24.5,35.4h-6.8
20 + l-0.8-35L82,68.7H75.3z"/>
21 +</svg>
22 +<!-- Original image Copyright Dave Gandy — CC BY 4.0 License -->
A book/fonts/OPEN-SANS-LICENSE.txt
+202 -0
@@ -0,0 +1,202 @@
1 +
2 + Apache License
3 + Version 2.0, January 2004
4 + http://www.apache.org/licenses/
5 +
6 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7 +
8 + 1. Definitions.
9 +
10 + "License" shall mean the terms and conditions for use, reproduction,
11 + and distribution as defined by Sections 1 through 9 of this document.
12 +
13 + "Licensor" shall mean the copyright owner or entity authorized by
14 + the copyright owner that is granting the License.
15 +
16 + "Legal Entity" shall mean the union of the acting entity and all
17 + other entities that control, are controlled by, or are under common
18 + control with that entity. For the purposes of this definition,
19 + "control" means (i) the power, direct or indirect, to cause the
20 + direction or management of such entity, whether by contract or
21 + otherwise, or (ii) ownership of fifty percent (50%) or more of the
22 + outstanding shares, or (iii) beneficial ownership of such entity.
23 +
24 + "You" (or "Your") shall mean an individual or Legal Entity
25 + exercising permissions granted by this License.
26 +
27 + "Source" form shall mean the preferred form for making modifications,
28 + including but not limited to software source code, documentation
29 + source, and configuration files.
30 +
31 + "Object" form shall mean any form resulting from mechanical
32 + transformation or translation of a Source form, including but
33 + not limited to compiled object code, generated documentation,
34 + and conversions to other media types.
35 +
36 + "Work" shall mean the work of authorship, whether in Source or
37 + Object form, made available under the License, as indicated by a
38 + copyright notice that is included in or attached to the work
39 + (an example is provided in the Appendix below).
40 +
41 + "Derivative Works" shall mean any work, whether in Source or Object
42 + form, that is based on (or derived from) the Work and for which the
43 + editorial revisions, annotations, elaborations, or other modifications
44 + represent, as a whole, an original work of authorship. For the purposes
45 + of this License, Derivative Works shall not include works that remain
46 + separable from, or merely link (or bind by name) to the interfaces of,
47 + the Work and Derivative Works thereof.
48 +
49 + "Contribution" shall mean any work of authorship, including
50 + the original version of the Work and any modifications or additions
51 + to that Work or Derivative Works thereof, that is intentionally
52 + submitted to Licensor for inclusion in the Work by the copyright owner
53 + or by an individual or Legal Entity authorized to submit on behalf of
54 + the copyright owner. For the purposes of this definition, "submitted"
55 + means any form of electronic, verbal, or written communication sent
56 + to the Licensor or its representatives, including but not limited to
57 + communication on electronic mailing lists, source code control systems,
58 + and issue tracking systems that are managed by, or on behalf of, the
59 + Licensor for the purpose of discussing and improving the Work, but
60 + excluding communication that is conspicuously marked or otherwise
61 + designated in writing by the copyright owner as "Not a Contribution."
62 +
63 + "Contributor" shall mean Licensor and any individual or Legal Entity
64 + on behalf of whom a Contribution has been received by Licensor and
65 + subsequently incorporated within the Work.
66 +
67 + 2. Grant of Copyright License. Subject to the terms and conditions of
68 + this License, each Contributor hereby grants to You a perpetual,
69 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70 + copyright license to reproduce, prepare Derivative Works of,
71 + publicly display, publicly perform, sublicense, and distribute the
72 + Work and such Derivative Works in Source or Object form.
73 +
74 + 3. Grant of Patent License. Subject to the terms and conditions of
75 + this License, each Contributor hereby grants to You a perpetual,
76 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77 + (except as stated in this section) patent license to make, have made,
78 + use, offer to sell, sell, import, and otherwise transfer the Work,
79 + where such license applies only to those patent claims licensable
80 + by such Contributor that are necessarily infringed by their
81 + Contribution(s) alone or by combination of their Contribution(s)
82 + with the Work to which such Contribution(s) was submitted. If You
83 + institute patent litigation against any entity (including a
84 + cross-claim or counterclaim in a lawsuit) alleging that the Work
85 + or a Contribution incorporated within the Work constitutes direct
86 + or contributory patent infringement, then any patent licenses
87 + granted to You under this License for that Work shall terminate
88 + as of the date such litigation is filed.
89 +
90 + 4. Redistribution. You may reproduce and distribute copies of the
91 + Work or Derivative Works thereof in any medium, with or without
92 + modifications, and in Source or Object form, provided that You
93 + meet the following conditions:
94 +
95 + (a) You must give any other recipients of the Work or
96 + Derivative Works a copy of this License; and
97 +
98 + (b) You must cause any modified files to carry prominent notices
99 + stating that You changed the files; and
100 +
101 + (c) You must retain, in the Source form of any Derivative Works
102 + that You distribute, all copyright, patent, trademark, and
103 + attribution notices from the Source form of the Work,
104 + excluding those notices that do not pertain to any part of
105 + the Derivative Works; and
106 +
107 + (d) If the Work includes a "NOTICE" text file as part of its
108 + distribution, then any Derivative Works that You distribute must
109 + include a readable copy of the attribution notices contained
110 + within such NOTICE file, excluding those notices that do not
111 + pertain to any part of the Derivative Works, in at least one
112 + of the following places: within a NOTICE text file distributed
113 + as part of the Derivative Works; within the Source form or
114 + documentation, if provided along with the Derivative Works; or,
115 + within a display generated by the Derivative Works, if and
116 + wherever such third-party notices normally appear. The contents
117 + of the NOTICE file are for informational purposes only and
118 + do not modify the License. You may add Your own attribution
119 + notices within Derivative Works that You distribute, alongside
120 + or as an addendum to the NOTICE text from the Work, provided
121 + that such additional attribution notices cannot be construed
122 + as modifying the License.
123 +
124 + You may add Your own copyright statement to Your modifications and
125 + may provide additional or different license terms and conditions
126 + for use, reproduction, or distribution of Your modifications, or
127 + for any such Derivative Works as a whole, provided Your use,
128 + reproduction, and distribution of the Work otherwise complies with
129 + the conditions stated in this License.
130 +
131 + 5. Submission of Contributions. Unless You explicitly state otherwise,
132 + any Contribution intentionally submitted for inclusion in the Work
133 + by You to the Licensor shall be under the terms and conditions of
134 + this License, without any additional terms or conditions.
135 + Notwithstanding the above, nothing herein shall supersede or modify
136 + the terms of any separate license agreement you may have executed
137 + with Licensor regarding such Contributions.
138 +
139 + 6. Trademarks. This License does not grant permission to use the trade
140 + names, trademarks, service marks, or product names of the Licensor,
141 + except as required for reasonable and customary use in describing the
142 + origin of the Work and reproducing the content of the NOTICE file.
143 +
144 + 7. Disclaimer of Warranty. Unless required by applicable law or
145 + agreed to in writing, Licensor provides the Work (and each
146 + Contributor provides its Contributions) on an "AS IS" BASIS,
147 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148 + implied, including, without limitation, any warranties or conditions
149 + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150 + PARTICULAR PURPOSE. You are solely responsible for determining the
151 + appropriateness of using or redistributing the Work and assume any
152 + risks associated with Your exercise of permissions under this License.
153 +
154 + 8. Limitation of Liability. In no event and under no legal theory,
155 + whether in tort (including negligence), contract, or otherwise,
156 + unless required by applicable law (such as deliberate and grossly
157 + negligent acts) or agreed to in writing, shall any Contributor be
158 + liable to You for damages, including any direct, indirect, special,
159 + incidental, or consequential damages of any character arising as a
160 + result of this License or out of the use or inability to use the
161 + Work (including but not limited to damages for loss of goodwill,
162 + work stoppage, computer failure or malfunction, or any and all
163 + other commercial damages or losses), even if such Contributor
164 + has been advised of the possibility of such damages.
165 +
166 + 9. Accepting Warranty or Additional Liability. While redistributing
167 + the Work or Derivative Works thereof, You may choose to offer,
168 + and charge a fee for, acceptance of support, warranty, indemnity,
169 + or other liability obligations and/or rights consistent with this
170 + License. However, in accepting such obligations, You may act only
171 + on Your own behalf and on Your sole responsibility, not on behalf
172 + of any other Contributor, and only if You agree to indemnify,
173 + defend, and hold each Contributor harmless for any liability
174 + incurred by, or claims asserted against, such Contributor by reason
175 + of your accepting any such warranty or additional liability.
176 +
177 + END OF TERMS AND CONDITIONS
178 +
179 + APPENDIX: How to apply the Apache License to your work.
180 +
181 + To apply the Apache License to your work, attach the following
182 + boilerplate notice, with the fields enclosed by brackets "[]"
183 + replaced with your own identifying information. (Don't include
184 + the brackets!) The text should be enclosed in the appropriate
185 + comment syntax for the file format. We also recommend that a
186 + file or class name and description of purpose be included on the
187 + same "printed page" as the copyright notice for easier
188 + identification within third-party archives.
189 +
190 + Copyright [yyyy] [name of copyright owner]
191 +
192 + Licensed under the Apache License, Version 2.0 (the "License");
193 + you may not use this file except in compliance with the License.
194 + You may obtain a copy of the License at
195 +
196 + http://www.apache.org/licenses/LICENSE-2.0
197 +
198 + Unless required by applicable law or agreed to in writing, software
199 + distributed under the License is distributed on an "AS IS" BASIS,
200 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201 + See the License for the specific language governing permissions and
202 + limitations under the License.
A book/fonts/SOURCE-CODE-PRO-LICENSE.txt
+93 -0
@@ -0,0 +1,93 @@
1 +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
2 +
3 +This Font Software is licensed under the SIL Open Font License, Version 1.1.
4 +This license is copied below, and is also available with a FAQ at:
5 +http://scripts.sil.org/OFL
6 +
7 +
8 +-----------------------------------------------------------
9 +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10 +-----------------------------------------------------------
11 +
12 +PREAMBLE
13 +The goals of the Open Font License (OFL) are to stimulate worldwide
14 +development of collaborative font projects, to support the font creation
15 +efforts of academic and linguistic communities, and to provide a free and
16 +open framework in which fonts may be shared and improved in partnership
17 +with others.
18 +
19 +The OFL allows the licensed fonts to be used, studied, modified and
20 +redistributed freely as long as they are not sold by themselves. The
21 +fonts, including any derivative works, can be bundled, embedded,
22 +redistributed and/or sold with any software provided that any reserved
23 +names are not used by derivative works. The fonts and derivatives,
24 +however, cannot be released under any other type of license. The
25 +requirement for fonts to remain under this license does not apply
26 +to any document created using the fonts or their derivatives.
27 +
28 +DEFINITIONS
29 +"Font Software" refers to the set of files released by the Copyright
30 +Holder(s) under this license and clearly marked as such. This may
31 +include source files, build scripts and documentation.
32 +
33 +"Reserved Font Name" refers to any names specified as such after the
34 +copyright statement(s).
35 +
36 +"Original Version" refers to the collection of Font Software components as
37 +distributed by the Copyright Holder(s).
38 +
39 +"Modified Version" refers to any derivative made by adding to, deleting,
40 +or substituting -- in part or in whole -- any of the components of the
41 +Original Version, by changing formats or by porting the Font Software to a
42 +new environment.
43 +
44 +"Author" refers to any designer, engineer, programmer, technical
45 +writer or other person who contributed to the Font Software.
46 +
47 +PERMISSION & CONDITIONS
48 +Permission is hereby granted, free of charge, to any person obtaining
49 +a copy of the Font Software, to use, study, copy, merge, embed, modify,
50 +redistribute, and sell modified and unmodified copies of the Font
51 +Software, subject to the following conditions:
52 +
53 +1) Neither the Font Software nor any of its individual components,
54 +in Original or Modified Versions, may be sold by itself.
55 +
56 +2) Original or Modified Versions of the Font Software may be bundled,
57 +redistributed and/or sold with any software, provided that each copy
58 +contains the above copyright notice and this license. These can be
59 +included either as stand-alone text files, human-readable headers or
60 +in the appropriate machine-readable metadata fields within text or
61 +binary files as long as those fields can be easily viewed by the user.
62 +
63 +3) No Modified Version of the Font Software may use the Reserved Font
64 +Name(s) unless explicit written permission is granted by the corresponding
65 +Copyright Holder. This restriction only applies to the primary font name as
66 +presented to the users.
67 +
68 +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69 +Software shall not be used to promote, endorse or advertise any
70 +Modified Version, except to acknowledge the contribution(s) of the
71 +Copyright Holder(s) and the Author(s) or with their explicit written
72 +permission.
73 +
74 +5) The Font Software, modified or unmodified, in part or in whole,
75 +must be distributed entirely under this license, and must not be
76 +distributed under any other license. The requirement for fonts to
77 +remain under this license does not apply to any document created
78 +using the Font Software.
79 +
80 +TERMINATION
81 +This license becomes null and void if any of the above conditions are
82 +not met.
83 +
84 +DISCLAIMER
85 +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86 +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87 +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88 +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89 +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90 +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91 +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92 +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93 +OTHER DEALINGS IN THE FONT SOFTWARE.
A book/fonts/fonts-9644e21d.css
+100 -0
@@ -0,0 +1,100 @@
1 +/* Open Sans is licensed under the Apache License, Version 2.0. See http://www.apache.org/licenses/LICENSE-2.0 */
2 +/* Source Code Pro is under the Open Font License. See https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL */
3 +
4 +/* open-sans-300 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
5 +@font-face {
6 + font-family: 'Open Sans';
7 + font-style: normal;
8 + font-weight: 300;
9 + src: local('Open Sans Light'), local('OpenSans-Light'),
10 + url('../fonts/open-sans-v17-all-charsets-300-7736aa35.woff2') format('woff2');
11 +}
12 +
13 +/* open-sans-300italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
14 +@font-face {
15 + font-family: 'Open Sans';
16 + font-style: italic;
17 + font-weight: 300;
18 + src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'),
19 + url('../fonts/open-sans-v17-all-charsets-300italic-2c7b95c0.woff2') format('woff2');
20 +}
21 +
22 +/* open-sans-regular - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
23 +@font-face {
24 + font-family: 'Open Sans';
25 + font-style: normal;
26 + font-weight: 400;
27 + src: local('Open Sans Regular'), local('OpenSans-Regular'),
28 + url('../fonts/open-sans-v17-all-charsets-regular-2e3b1d34.woff2') format('woff2');
29 +}
30 +
31 +/* open-sans-italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
32 +@font-face {
33 + font-family: 'Open Sans';
34 + font-style: italic;
35 + font-weight: 400;
36 + src: local('Open Sans Italic'), local('OpenSans-Italic'),
37 + url('../fonts/open-sans-v17-all-charsets-italic-6c9463f7.woff2') format('woff2');
38 +}
39 +
40 +/* open-sans-600 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
41 +@font-face {
42 + font-family: 'Open Sans';
43 + font-style: normal;
44 + font-weight: 600;
45 + src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'),
46 + url('../fonts/open-sans-v17-all-charsets-600-486c6759.woff2') format('woff2');
47 +}
48 +
49 +/* open-sans-600italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
50 +@font-face {
51 + font-family: 'Open Sans';
52 + font-style: italic;
53 + font-weight: 600;
54 + src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'),
55 + url('../fonts/open-sans-v17-all-charsets-600italic-1a3e8659.woff2') format('woff2');
56 +}
57 +
58 +/* open-sans-700 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
59 +@font-face {
60 + font-family: 'Open Sans';
61 + font-style: normal;
62 + font-weight: 700;
63 + src: local('Open Sans Bold'), local('OpenSans-Bold'),
64 + url('../fonts/open-sans-v17-all-charsets-700-c22fe8c7.woff2') format('woff2');
65 +}
66 +
67 +/* open-sans-700italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
68 +@font-face {
69 + font-family: 'Open Sans';
70 + font-style: italic;
71 + font-weight: 700;
72 + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'),
73 + url('../fonts/open-sans-v17-all-charsets-700italic-238ae959.woff2') format('woff2');
74 +}
75 +
76 +/* open-sans-800 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
77 +@font-face {
78 + font-family: 'Open Sans';
79 + font-style: normal;
80 + font-weight: 800;
81 + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'),
82 + url('../fonts/open-sans-v17-all-charsets-800-3d2c812a.woff2') format('woff2');
83 +}
84 +
85 +/* open-sans-800italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
86 +@font-face {
87 + font-family: 'Open Sans';
88 + font-style: italic;
89 + font-weight: 800;
90 + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'),
91 + url('../fonts/open-sans-v17-all-charsets-800italic-ba1521ec.woff2') format('woff2');
92 +}
93 +
94 +/* source-code-pro-500 - latin_vietnamese_latin-ext_greek_cyrillic-ext_cyrillic */
95 +@font-face {
96 + font-family: 'Source Code Pro';
97 + font-style: normal;
98 + font-weight: 500;
99 + src: url('../fonts/source-code-pro-v11-all-charsets-500-2bdd9410.woff2') format('woff2');
100 +}
A book/fonts/open-sans-v17-all-charsets-300-7736aa35.woff2
+0 -0
A book/fonts/open-sans-v17-all-charsets-300italic-2c7b95c0.woff2
+0 -0
A book/fonts/open-sans-v17-all-charsets-600-486c6759.woff2
+0 -0
A book/fonts/open-sans-v17-all-charsets-600italic-1a3e8659.woff2
+0 -0
A book/fonts/open-sans-v17-all-charsets-700-c22fe8c7.woff2
+0 -0
A book/fonts/open-sans-v17-all-charsets-700italic-238ae959.woff2
+0 -0
A book/fonts/open-sans-v17-all-charsets-800-3d2c812a.woff2
+0 -0
A book/fonts/open-sans-v17-all-charsets-800italic-ba1521ec.woff2
+0 -0
A book/fonts/open-sans-v17-all-charsets-italic-6c9463f7.woff2
+0 -0
A book/fonts/open-sans-v17-all-charsets-regular-2e3b1d34.woff2
+0 -0
A book/fonts/source-code-pro-v11-all-charsets-500-2bdd9410.woff2
+0 -0
A book/highlight-493f70e1.css
+83 -0
@@ -0,0 +1,83 @@
1 +/*
2 + * An increased contrast highlighting scheme loosely based on the
3 + * "Base16 Atelier Dune Light" theme by Bram de Haan
4 + * (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune)
5 + * Original Base16 color scheme by Chris Kempson
6 + * (https://github.com/chriskempson/base16)
7 + */
8 +
9 +/* Comment */
10 +.hljs-comment,
11 +.hljs-quote {
12 + color: #575757;
13 +}
14 +
15 +/* Red */
16 +.hljs-variable,
17 +.hljs-template-variable,
18 +.hljs-attribute,
19 +.hljs-attr,
20 +.hljs-tag,
21 +.hljs-name,
22 +.hljs-regexp,
23 +.hljs-link,
24 +.hljs-name,
25 +.hljs-selector-id,
26 +.hljs-selector-class {
27 + color: #d70025;
28 +}
29 +
30 +/* Orange */
31 +.hljs-number,
32 +.hljs-meta,
33 +.hljs-built_in,
34 +.hljs-builtin-name,
35 +.hljs-literal,
36 +.hljs-type,
37 +.hljs-params {
38 + color: #b21e00;
39 +}
40 +
41 +/* Green */
42 +.hljs-string,
43 +.hljs-symbol,
44 +.hljs-bullet {
45 + color: #008200;
46 +}
47 +
48 +/* Blue */
49 +.hljs-title,
50 +.hljs-section {
51 + color: #0030f2;
52 +}
53 +
54 +/* Purple */
55 +.hljs-keyword,
56 +.hljs-selector-tag {
57 + color: #9d00ec;
58 +}
59 +
60 +.hljs {
61 + display: block;
62 + overflow-x: auto;
63 + background: #f6f7f6;
64 + color: #000;
65 +}
66 +
67 +.hljs-emphasis {
68 + font-style: italic;
69 +}
70 +
71 +.hljs-strong {
72 + font-weight: bold;
73 +}
74 +
75 +.hljs-addition {
76 + color: #22863a;
77 + background-color: #f0fff4;
78 +}
79 +
80 +.hljs-deletion {
81 + color: #b31d28;
82 + background-color: #ffeef0;
83 +}
A book/highlight-abc7f01d.js
+54 -0
@@ -0,0 +1,54 @@
1 +/*
2 + Highlight.js 10.1.1 (93fd0d73)
3 + License: BSD-3-Clause
4 + Copyright (c) 2006-2020, Ivan Sagalaev
5 +*/
6 +var hljs=function(){"use strict";function e(n){Object.freeze(n);var t="function"==typeof n;return Object.getOwnPropertyNames(n).forEach((function(r){!Object.hasOwnProperty.call(n,r)||null===n[r]||"object"!=typeof n[r]&&"function"!=typeof n[r]||t&&("caller"===r||"callee"===r||"arguments"===r)||Object.isFrozen(n[r])||e(n[r])})),n}class n{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data}ignoreMatch(){this.ignore=!0}}function t(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")}function r(e,...n){var t={};for(const n in e)t[n]=e[n];return n.forEach((function(e){for(const n in e)t[n]=e[n]})),t}function a(e){return e.nodeName.toLowerCase()}var i=Object.freeze({__proto__:null,escapeHTML:t,inherit:r,nodeStream:function(e){var n=[];return function e(t,r){for(var i=t.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:r,node:i}),r=e(i,r),a(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:r,node:i}));return r}(e,0),n},mergeStreams:function(e,n,r){var i=0,s="",o=[];function l(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset<n[0].offset?e:n:"start"===n[0].event?e:n:e.length?e:n}function c(e){s+="<"+a(e)+[].map.call(e.attributes,(function(e){return" "+e.nodeName+'="'+t(e.value)+'"'})).join("")+">"}function u(e){s+="</"+a(e)+">"}function d(e){("start"===e.event?c:u)(e.node)}for(;e.length||n.length;){var g=l();if(s+=t(r.substring(i,g[0].offset)),i=g[0].offset,g===e){o.reverse().forEach(u);do{d(g.splice(0,1)[0]),g=l()}while(g===e&&g.length&&g[0].offset===i);o.reverse().forEach(c)}else"start"===g[0].event?o.push(g[0].node):o.pop(),d(g.splice(0,1)[0])}return s+t(r.substr(i))}});const s="</span>",o=e=>!!e.kind;class l{constructor(e,n){this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=t(e)}openNode(e){if(!o(e))return;let n=e.kind;e.sublanguage||(n=`${this.classPrefix}${n}`),this.span(n)}closeNode(e){o(e)&&(this.buffer+=s)}value(){return this.buffer}span(e){this.buffer+=`<span class="${e}">`}}class c{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const n={kind:e,children:[]};this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach(n=>this._walk(e,n)),e.closeNode(n)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every(e=>"string"==typeof e)?e.children=[e.children.join("")]:e.children.forEach(e=>{c._collapse(e)}))}}class u extends c{constructor(e){super(),this.options=e}addKeyword(e,n){""!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,n){const t=e.root;t.kind=n,t.sublanguage=!0,this.add(t)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function d(e){return e?"string"==typeof e?e:e.source:null}const g="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",h={begin:"\\\\[\\s\\S]",relevance:0},f={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[h]},p={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[h]},b={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},m=function(e,n,t={}){var a=r({className:"comment",begin:e,end:n,contains:[]},t);return a.contains.push(b),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),a},v=m("//","$"),x=m("/\\*","\\*/"),E=m("#","$");var _=Object.freeze({__proto__:null,IDENT_RE:"[a-zA-Z]\\w*",UNDERSCORE_IDENT_RE:"[a-zA-Z_]\\w*",NUMBER_RE:"\\b\\d+(\\.\\d+)?",C_NUMBER_RE:g,BINARY_NUMBER_RE:"\\b(0b[01]+)",RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const n=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map(e=>d(e)).join("")}(n,/.*\b/,e.binary,/\b.*/)),r({className:"meta",begin:n,end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},BACKSLASH_ESCAPE:h,APOS_STRING_MODE:f,QUOTE_STRING_MODE:p,PHRASAL_WORDS_MODE:b,COMMENT:m,C_LINE_COMMENT_MODE:v,C_BLOCK_COMMENT_MODE:x,HASH_COMMENT_MODE:E,NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?",relevance:0},C_NUMBER_MODE:{className:"number",begin:g,relevance:0},BINARY_NUMBER_MODE:{className:"number",begin:"\\b(0b[01]+)",relevance:0},CSS_NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[h,{begin:/\[/,end:/\]/,relevance:0,contains:[h]}]}]},TITLE_MODE:{className:"title",begin:"[a-zA-Z]\\w*",relevance:0},UNDERSCORE_TITLE_MODE:{className:"title",begin:"[a-zA-Z_]\\w*",relevance:0},METHOD_GUARD:{begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}})}}),N="of and for in not or if then".split(" ");function w(e,n){return n?+n:function(e){return N.includes(e.toLowerCase())}(e)?0:1}const R=t,y=r,{nodeStream:k,mergeStreams:O}=i,M=Symbol("nomatch");return function(t){var a=[],i={},s={},o=[],l=!0,c=/(^(<[^>]+>|\t|)+|\n)/gm,g="Could not find the language '{}', did you forget to load/include a language module?";const h={disableAutodetect:!0,name:"Plain text",contains:[]};var f={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:u};function p(e){return f.noHighlightRe.test(e)}function b(e,n,t,r){var a={code:n,language:e};S("before:highlight",a);var i=a.result?a.result:m(a.language,a.code,t,r);return i.code=a.code,S("after:highlight",i),i}function m(e,t,a,s){var o=t;function c(e,n){var t=E.case_insensitive?n[0].toLowerCase():n[0];return Object.prototype.hasOwnProperty.call(e.keywords,t)&&e.keywords[t]}function u(){null!=y.subLanguage?function(){if(""!==A){var e=null;if("string"==typeof y.subLanguage){if(!i[y.subLanguage])return void O.addText(A);e=m(y.subLanguage,A,!0,k[y.subLanguage]),k[y.subLanguage]=e.top}else e=v(A,y.subLanguage.length?y.subLanguage:null);y.relevance>0&&(I+=e.relevance),O.addSublanguage(e.emitter,e.language)}}():function(){if(!y.keywords)return void O.addText(A);let e=0;y.keywordPatternRe.lastIndex=0;let n=y.keywordPatternRe.exec(A),t="";for(;n;){t+=A.substring(e,n.index);const r=c(y,n);if(r){const[e,a]=r;O.addText(t),t="",I+=a,O.addKeyword(n[0],e)}else t+=n[0];e=y.keywordPatternRe.lastIndex,n=y.keywordPatternRe.exec(A)}t+=A.substr(e),O.addText(t)}(),A=""}function h(e){return e.className&&O.openNode(e.className),y=Object.create(e,{parent:{value:y}})}function p(e){return 0===y.matcher.regexIndex?(A+=e[0],1):(L=!0,0)}var b={};function x(t,r){var i=r&&r[0];if(A+=t,null==i)return u(),0;if("begin"===b.type&&"end"===r.type&&b.index===r.index&&""===i){if(A+=o.slice(r.index,r.index+1),!l){const n=Error("0 width match regex");throw n.languageName=e,n.badRule=b.rule,n}return 1}if(b=r,"begin"===r.type)return function(e){var t=e[0],r=e.rule;const a=new n(r),i=[r.__beforeBegin,r["on:begin"]];for(const n of i)if(n&&(n(e,a),a.ignore))return p(t);return r&&r.endSameAsBegin&&(r.endRe=RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),r.skip?A+=t:(r.excludeBegin&&(A+=t),u(),r.returnBegin||r.excludeBegin||(A=t)),h(r),r.returnBegin?0:t.length}(r);if("illegal"===r.type&&!a){const e=Error('Illegal lexeme "'+i+'" for mode "'+(y.className||"<unnamed>")+'"');throw e.mode=y,e}if("end"===r.type){var s=function(e){var t=e[0],r=o.substr(e.index),a=function e(t,r,a){let i=function(e,n){var t=e&&e.exec(n);return t&&0===t.index}(t.endRe,a);if(i){if(t["on:end"]){const e=new n(t);t["on:end"](r,e),e.ignore&&(i=!1)}if(i){for(;t.endsParent&&t.parent;)t=t.parent;return t}}if(t.endsWithParent)return e(t.parent,r,a)}(y,e,r);if(!a)return M;var i=y;i.skip?A+=t:(i.returnEnd||i.excludeEnd||(A+=t),u(),i.excludeEnd&&(A=t));do{y.className&&O.closeNode(),y.skip||y.subLanguage||(I+=y.relevance),y=y.parent}while(y!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),h(a.starts)),i.returnEnd?0:t.length}(r);if(s!==M)return s}if("illegal"===r.type&&""===i)return 1;if(B>1e5&&B>3*r.index)throw Error("potential infinite loop, way more iterations than matches");return A+=i,i.length}var E=T(e);if(!E)throw console.error(g.replace("{}",e)),Error('Unknown language: "'+e+'"');var _=function(e){function n(n,t){return RegExp(d(n),"m"+(e.case_insensitive?"i":"")+(t?"g":""))}class t{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=function(e){return RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map(e=>e[1]);this.matcherRe=n(function(e,n="|"){for(var t=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,r=0,a="",i=0;i<e.length;i++){var s=r+=1,o=d(e[i]);for(i>0&&(a+=n),a+="(";o.length>0;){var l=t.exec(o);if(null==l){a+=o;break}a+=o.substring(0,l.index),o=o.substring(l.index+l[0].length),"\\"===l[0][0]&&l[1]?a+="\\"+(+l[1]+s):(a+=l[0],"("===l[0]&&r++)}a+=")"}return a}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const n=this.matcherRe.exec(e);if(!n)return null;const t=n.findIndex((e,n)=>n>0&&void 0!==e),r=this.matchIndexes[t];return n.splice(0,t),Object.assign(n,r)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t;return this.rules.slice(e).forEach(([e,t])=>n.addRule(e,t)),n.compile(),this.multiRegexes[e]=n,n}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;const t=n.exec(e);return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&(this.regexIndex=0)),t}}function i(e,n){const t=e.input[e.index-1],r=e.input[e.index+e[0].length];"."!==t&&"."!==r||n.ignoreMatch()}if(e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return function t(s,o){const l=s;if(s.compiled)return l;s.compiled=!0,s.__beforeBegin=null,s.keywords=s.keywords||s.beginKeywords;let c=null;if("object"==typeof s.keywords&&(c=s.keywords.$pattern,delete s.keywords.$pattern),s.keywords&&(s.keywords=function(e,n){var t={};return"string"==typeof e?r("keyword",e):Object.keys(e).forEach((function(n){r(n,e[n])})),t;function r(e,r){n&&(r=r.toLowerCase()),r.split(" ").forEach((function(n){var r=n.split("|");t[r[0]]=[e,w(r[0],r[1])]}))}}(s.keywords,e.case_insensitive)),s.lexemes&&c)throw Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l.keywordPatternRe=n(s.lexemes||c||/\w+/,!0),o&&(s.beginKeywords&&(s.begin="\\b("+s.beginKeywords.split(" ").join("|")+")(?=\\b|\\s)",s.__beforeBegin=i),s.begin||(s.begin=/\B|\b/),l.beginRe=n(s.begin),s.endSameAsBegin&&(s.end=s.begin),s.end||s.endsWithParent||(s.end=/\B|\b/),s.end&&(l.endRe=n(s.end)),l.terminator_end=d(s.end)||"",s.endsWithParent&&o.terminator_end&&(l.terminator_end+=(s.end?"|":"")+o.terminator_end)),s.illegal&&(l.illegalRe=n(s.illegal)),void 0===s.relevance&&(s.relevance=1),s.contains||(s.contains=[]),s.contains=[].concat(...s.contains.map((function(e){return function(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(n){return r(e,{variants:null},n)}))),e.cached_variants?e.cached_variants:function e(n){return!!n&&(n.endsWithParent||e(n.starts))}(e)?r(e,{starts:e.starts?r(e.starts):null}):Object.isFrozen(e)?r(e):e}("self"===e?s:e)}))),s.contains.forEach((function(e){t(e,l)})),s.starts&&t(s.starts,o),l.matcher=function(e){const n=new a;return e.contains.forEach(e=>n.addRule(e.begin,{rule:e,type:"begin"})),e.terminator_end&&n.addRule(e.terminator_end,{type:"end"}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n}(l),l}(e)}(E),N="",y=s||_,k={},O=new f.__emitter(f);!function(){for(var e=[],n=y;n!==E;n=n.parent)n.className&&e.unshift(n.className);e.forEach(e=>O.openNode(e))}();var A="",I=0,S=0,B=0,L=!1;try{for(y.matcher.considerAll();;){B++,L?L=!1:(y.matcher.lastIndex=S,y.matcher.considerAll());const e=y.matcher.exec(o);if(!e)break;const n=x(o.substring(S,e.index),e);S=e.index+n}return x(o.substr(S)),O.closeAllNodes(),O.finalize(),N=O.toHTML(),{relevance:I,value:N,language:e,illegal:!1,emitter:O,top:y}}catch(n){if(n.message&&n.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:n.message,context:o.slice(S-100,S+100),mode:n.mode},sofar:N,relevance:0,value:R(o),emitter:O};if(l)return{illegal:!1,relevance:0,value:R(o),emitter:O,language:e,top:y,errorRaised:n};throw n}}function v(e,n){n=n||f.languages||Object.keys(i);var t=function(e){const n={relevance:0,emitter:new f.__emitter(f),value:R(e),illegal:!1,top:h};return n.emitter.addText(e),n}(e),r=t;return n.filter(T).filter(I).forEach((function(n){var a=m(n,e,!1);a.language=n,a.relevance>r.relevance&&(r=a),a.relevance>t.relevance&&(r=t,t=a)})),r.language&&(t.second_best=r),t}function x(e){return f.tabReplace||f.useBR?e.replace(c,e=>"\n"===e?f.useBR?"<br>":e:f.tabReplace?e.replace(/\t/g,f.tabReplace):e):e}function E(e){let n=null;const t=function(e){var n=e.className+" ";n+=e.parentNode?e.parentNode.className:"";const t=f.languageDetectRe.exec(n);if(t){var r=T(t[1]);return r||(console.warn(g.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),r?t[1]:"no-highlight"}return n.split(/\s+/).find(e=>p(e)||T(e))}(e);if(p(t))return;S("before:highlightBlock",{block:e,language:t}),f.useBR?(n=document.createElement("div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ /]*>/g,"\n"):n=e;const r=n.textContent,a=t?b(t,r,!0):v(r),i=k(n);if(i.length){const e=document.createElement("div");e.innerHTML=a.value,a.value=O(i,k(e),r)}a.value=x(a.value),S("after:highlightBlock",{block:e,result:a}),e.innerHTML=a.value,e.className=function(e,n,t){var r=n?s[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),e.includes(r)||a.push(r),a.join(" ").trim()}(e.className,t,a.language),e.result={language:a.language,re:a.relevance,relavance:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance,relavance:a.second_best.relevance})}const N=()=>{if(!N.called){N.called=!0;var e=document.querySelectorAll("pre code");a.forEach.call(e,E)}};function T(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}function A(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach(e=>{s[e]=n})}function I(e){var n=T(e);return n&&!n.disableAutodetect}function S(e,n){var t=e;o.forEach((function(e){e[t]&&e[t](n)}))}Object.assign(t,{highlight:b,highlightAuto:v,fixMarkup:x,highlightBlock:E,configure:function(e){f=y(f,e)},initHighlighting:N,initHighlightingOnLoad:function(){window.addEventListener("DOMContentLoaded",N,!1)},registerLanguage:function(e,n){var r=null;try{r=n(t)}catch(n){if(console.error("Language definition for '{}' could not be registered.".replace("{}",e)),!l)throw n;console.error(n),r=h}r.name||(r.name=e),i[e]=r,r.rawDefinition=n.bind(null,t),r.aliases&&A(r.aliases,{languageName:e})},listLanguages:function(){return Object.keys(i)},getLanguage:T,registerAliases:A,requireLanguage:function(e){var n=T(e);if(n)return n;throw Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:I,inherit:y,addPlugin:function(e){o.push(e)}}),t.debugMode=function(){l=!1},t.safeMode=function(){l=!0},t.versionString="10.1.1";for(const n in _)"object"==typeof _[n]&&e(_[n]);return Object.assign(t,_),t}({})}();"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);
7 +hljs.registerLanguage("apache",function(){"use strict";return function(e){var n={className:"number",begin:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?"};return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:"</?",end:">",contains:[n,{className:"number",begin:":\\d{1,5}"},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",begin:/\w+/,relevance:0,keywords:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},contains:[{className:"meta",begin:"\\s\\[",end:"\\]$"},{className:"variable",begin:"[\\$%]\\{",end:"\\}",contains:["self",{className:"number",begin:"[\\$%]\\d+"}]},n,{className:"number",begin:"\\d+"},e.QUOTE_STRING_MODE]}}],illegal:/\S/}}}());
8 +hljs.registerLanguage("bash",function(){"use strict";return function(e){const s={};Object.assign(s,{className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{/,end:/\}/,contains:[{begin:/:-/,contains:[s]}]}]});const t={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,t]};t.contains.push(n);const a={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,s]},i=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b-?[a-z\._]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[i,e.SHEBANG(),c,a,e.HASH_COMMENT_MODE,n,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},s]}}}());
9 +hljs.registerLanguage("c-like",function(){"use strict";return function(e){function t(e){return"(?:"+e+")?"}var n="(decltype\\(auto\\)|"+t("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+t("<.*?>")+")",r={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},a={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},i={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(a,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o={className:"title",begin:t("[a-zA-Z_]\\w*::")+e.IDENT_RE,relevance:0},c=t("[a-zA-Z_]\\w*::")+e.IDENT_RE+"\\s*\\(",l={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},d=[r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,a],_={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:l,contains:d.concat([{begin:/\(/,end:/\)/,keywords:l,contains:d.concat(["self"]),relevance:0}]),relevance:0},u={className:"function",begin:"("+n+"[\\*&\\s]+)+"+c,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:l,illegal:/[^\w\s\*&:<>]/,contains:[{begin:"decltype\\(auto\\)",keywords:l,relevance:0},{begin:c,returnBegin:!0,contains:[o],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r,{begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r]}]},r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],keywords:l,disableAutodetect:!0,illegal:"</",contains:[].concat(_,u,d,[s,{begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",end:">",keywords:l,contains:["self",r]},{begin:e.IDENT_RE+"::",keywords:l},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin:/</,end:/>/,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:s,strings:a,keywords:l}}}}());
10 +hljs.registerLanguage("c",function(){"use strict";return function(e){var n=e.getLanguage("c-like").rawDefinition();return n.name="C",n.aliases=["c","h"],n}}());
11 +hljs.registerLanguage("coffeescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={keyword:e.concat(["then","unless","until","loop","by","when","and","or","is","isnt","not"]).filter((e=>n=>!e.includes(n))(["var","const","let","function","static"])).join(" "),literal:n.concat(["yes","no","on","off"]).join(" "),built_in:a.concat(["npm","print"]).join(" ")},i="[A-Za-z$_][0-9A-Za-z$_]*",s={className:"subst",begin:/#\{/,end:/}/,keywords:t},o=[r.BINARY_NUMBER_MODE,r.inherit(r.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[r.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[r.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[r.BACKSLASH_ESCAPE,s]},{begin:/"/,end:/"/,contains:[r.BACKSLASH_ESCAPE,s]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[s,r.HASH_COMMENT_MODE]},{begin:"//[gim]{0,3}(?=\\W)",relevance:0},{begin:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{begin:"@"+i},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{begin:"```",end:"```"},{begin:"`",end:"`"}]}];s.contains=o;var c=r.inherit(r.TITLE_MODE,{begin:i}),l={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(o)}]};return{name:"CoffeeScript",aliases:["coffee","cson","iced"],keywords:t,illegal:/\/\*/,contains:o.concat([r.COMMENT("###","###"),r.HASH_COMMENT_MODE,{className:"function",begin:"^\\s*"+i+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[c,l]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[l]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[c]},c]},{begin:i+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}}());
12 +hljs.registerLanguage("cpp",function(){"use strict";return function(e){var t=e.getLanguage("c-like").rawDefinition();return t.disableAutodetect=!1,t.name="C++",t.aliases=["cc","c++","h++","hpp","hh","hxx","cxx"],t}}());
13 +hljs.registerLanguage("csharp",function(){"use strict";return function(e){var n={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},i=e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},t=e.inherit(s,{illegal:/\n/}),l={className:"subst",begin:"{",end:"}",keywords:n},r=e.inherit(l,{illegal:/\n/}),c={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},e.BACKSLASH_ESCAPE,r]},o={className:"string",begin:/\$@"/,end:'"',contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},l]},g=e.inherit(o,{illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},r]});l.contains=[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE],r.contains=[g,c,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];var d={variants:[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},E={begin:"<",end:">",contains:[{beginKeywords:"in out"},i]},_=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",b={begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:"</?",end:">"}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},d,a,{beginKeywords:"class interface",end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},i,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",end:/[{;=]/,illegal:/[^\s:]/,contains:[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"meta-string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+_+"\\s+)+"+e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{begin:e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE,E],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,contains:[d,a,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},b]}}}());
14 +hljs.registerLanguage("css",function(){"use strict";return function(e){var n={begin:/(?:[A-Z\_\.\-]+|--[a-zA-Z0-9_-]+)\s*:/,returnBegin:!0,end:";",endsWithParent:!0,contains:[{className:"attribute",begin:/\S/,end:":",excludeEnd:!0,starts:{endsWithParent:!0,excludeEnd:!0,contains:[{begin:/[\w-]+\(/,returnBegin:!0,contains:[{className:"built_in",begin:/[\w-]+/},{begin:/\(/,end:/\)/,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"#[0-9A-Fa-f]+"},{className:"meta",begin:"!important"}]}}]};return{name:"CSS",case_insensitive:!0,illegal:/[=\/|'\$]/,contains:[e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/},{className:"selector-class",begin:/\.[A-Za-z0-9_-]+/},{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",illegal:/:/,returnBegin:!0,contains:[{className:"keyword",begin:/@\-?\w[\w]*(\-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:"and or not only",contains:[{begin:/[a-z-]+:/,className:"attribute"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{begin:"{",end:"}",illegal:/\S/,contains:[e.C_BLOCK_COMMENT_MODE,n]}]}}}());
15 +hljs.registerLanguage("diff",function(){"use strict";return function(e){return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^\-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/^\*{15}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"addition",begin:"^\\!",end:"$"}]}}}());
16 +hljs.registerLanguage("go",function(){"use strict";return function(e){var n={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{name:"Go",aliases:["golang"],keywords:n,illegal:"</",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",variants:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{begin:"`",end:"`"}]},{className:"number",variants:[{begin:e.C_NUMBER_RE+"[i]",relevance:1},e.C_NUMBER_MODE]},{begin:/:=/},{className:"function",beginKeywords:"func",end:"\\s*(\\{|$)",excludeEnd:!0,contains:[e.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,keywords:n,illegal:/["']/}]}]}}}());
17 +hljs.registerLanguage("http",function(){"use strict";return function(e){var n="HTTP/[0-9\\.]+";return{name:"HTTP",aliases:["https"],illegal:"\\S",contains:[{begin:"^"+n,end:"$",contains:[{className:"number",begin:"\\b\\d{3}\\b"}]},{begin:"^[A-Z]+ (.*?) "+n+"$",returnBegin:!0,end:"$",contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{begin:n},{className:"keyword",begin:"[A-Z]+"}]},{className:"attribute",begin:"^\\w",end:": ",excludeEnd:!0,illegal:"\\n|\\s|=",starts:{end:"$",relevance:0}},{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}]}}}());
18 +hljs.registerLanguage("ini",function(){"use strict";function e(e){return e?"string"==typeof e?e:e.source:null}function n(...n){return n.map(n=>e(n)).join("")}return function(a){var s={className:"number",relevance:0,variants:[{begin:/([\+\-]+)?[\d]+_[\d_]+/},{begin:a.NUMBER_RE}]},i=a.COMMENT();i.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];var t={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)}/}]},r={className:"literal",begin:/\bon|off|true|false|yes|no\b/},l={className:"string",contains:[a.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]},c={begin:/\[/,end:/\]/,contains:[i,r,t,l,s,"self"],relevance:0},g="("+[/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/].map(n=>e(n)).join("|")+")";return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[i,{className:"section",begin:/\[+/,end:/\]+/},{begin:n(g,"(\\s*\\.\\s*",g,")*",n("(?=",/\s*=\s*[^#\s]/,")")),className:"attr",starts:{end:/$/,contains:[i,c,r,t,l,s]}}]}}}());
19 +hljs.registerLanguage("java",function(){"use strict";function e(e){return e?"string"==typeof e?e:e.source:null}function n(e){return a("(",e,")?")}function a(...n){return n.map(n=>e(n)).join("")}function s(...n){return"("+n.map(n=>e(n)).join("|")+")"}return function(e){var t="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",i={className:"meta",begin:"@[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},r=e=>a("[",e,"]+([",e,"_]*[",e,"]+)?"),c={className:"number",variants:[{begin:`\\b(0[bB]${r("01")})[lL]?`},{begin:`\\b(0${r("0-7")})[dDfFlL]?`},{begin:a(/\b0[xX]/,s(a(r("a-fA-F0-9"),/\./,r("a-fA-F0-9")),a(r("a-fA-F0-9"),/\.?/),a(/\./,r("a-fA-F0-9"))),/([pP][+-]?(\d+))?/,/[fFdDlL]?/)},{begin:a(/\b/,s(a(/\d*\./,r("\\d")),r("\\d")),/[eE][+-]?[\d]+[dDfF]?/)},{begin:a(/\b/,r(/\d/),n(/\.?/),n(r(/\d/)),/[dDfFlL]?/)}],relevance:0};return{name:"Java",aliases:["jsp"],keywords:t,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"function",begin:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:t,relevance:0,contains:[i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},c,i]}}}());
20 +hljs.registerLanguage("javascript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function s(e){return r("(?=",e,")")}function r(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(t){var i="[A-Za-z$_][0-9A-Za-z$_]*",c={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/},o={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.join(" "),literal:n.join(" "),built_in:a.join(" ")},l={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:t.C_NUMBER_RE+"n?"}],relevance:0},E={className:"subst",begin:"\\$\\{",end:"\\}",keywords:o,contains:[]},d={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"xml"}},g={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"css"}},u={className:"string",begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,E]};E.contains=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,l,t.REGEXP_MODE];var b=E.contains.concat([{begin:/\(/,end:/\)/,contains:["self"].concat(E.contains,[t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE])},t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]),_={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:b};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:o,contains:[t.SHEBANG({binary:"node",relevance:5}),{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,t.C_LINE_COMMENT_MODE,t.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:i+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,l,{begin:r(/[{,\n]\s*/,s(r(/(((\/\/.*)|(\/\*(.|\n)*\*\/))\s*)*/,i+"\\s*:"))),relevance:0,contains:[{className:"attr",begin:i+s("\\s*:"),relevance:0}]},{begin:"("+t.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,t.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+t.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:o,contains:b}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:"<>",end:"</>"},{begin:c.begin,end:c.end}],subLanguage:"xml",contains:[{begin:c.begin,end:c.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[t.inherit(t.TITLE_MODE,{begin:i}),_],illegal:/\[|%/},{begin:/\$[(.]/},t.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},t.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor",end:/\{/,excludeEnd:!0},{begin:"(get|set)\\s+(?="+i+"\\()",end:/{/,keywords:"get set",contains:[t.inherit(t.TITLE_MODE,{begin:i}),{begin:/\(\)/},_]}],illegal:/#(?!!)/}}}());
21 +hljs.registerLanguage("json",function(){"use strict";return function(n){var e={literal:"true false null"},i=[n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],t=[n.QUOTE_STRING_MODE,n.C_NUMBER_MODE],a={end:",",endsWithParent:!0,excludeEnd:!0,contains:t,keywords:e},l={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[n.BACKSLASH_ESCAPE],illegal:"\\n"},n.inherit(a,{begin:/:/})].concat(i),illegal:"\\S"},s={begin:"\\[",end:"\\]",contains:[n.inherit(a)],illegal:"\\S"};return t.push(l,s),i.forEach((function(n){t.push(n)})),{name:"JSON",contains:t,keywords:e,illegal:"\\S"}}}());
22 +hljs.registerLanguage("kotlin",function(){"use strict";return function(e){var n={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},a={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},i={className:"subst",begin:"\\${",end:"}",contains:[e.C_NUMBER_MODE]},s={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},t={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[s,i]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,s,i]}]};i.contains.push(t);var r={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},l={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(t,{className:"meta-string"})]}]},c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),o={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},d=o;return d.variants[1].contains=[o],o.variants[1].contains=[d],{name:"Kotlin",aliases:["kt"],keywords:n,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},a,r,l,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:n,illegal:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin:/</,end:/>/,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[o,e.C_LINE_COMMENT_MODE,c],relevance:0},e.C_LINE_COMMENT_MODE,c,r,l,t,e.C_NUMBER_MODE]},c]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin:/</,end:/>/,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},r,l]},t,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},{className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0}]}}}());
23 +hljs.registerLanguage("less",function(){"use strict";return function(e){var n="([\\w-]+|@{[\\w-]+})",a=[],s=[],t=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},r=function(e,n,a){return{className:e,begin:n,relevance:a}},i={begin:"\\(",end:"\\)",contains:s,relevance:0};s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t("'"),t('"'),e.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},r("number","#[0-9A-Fa-f]+\\b"),i,r("variable","@@?[\\w-]+",10),r("variable","@{[\\w-]+}"),r("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},{className:"meta",begin:"!important"});var c=s.concat({begin:"{",end:"}",contains:a}),l={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(s)},o={begin:n+"\\s*:",returnBegin:!0,end:"[;}]",relevance:0,contains:[{className:"attribute",begin:n,end:":",excludeEnd:!0,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}]},g={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",returnEnd:!0,contains:s,relevance:0}},d={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:c}},b={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:n,end:"{"}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,l,r("keyword","all\\b"),r("variable","@{[\\w-]+}"),r("selector-tag",n+"%?",0),r("selector-id","#"+n),r("selector-class","\\."+n,0),r("selector-tag","&",0),{className:"selector-attr",begin:"\\[",end:"\\]"},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"\\(",end:"\\)",contains:c},{begin:"!important"}]};return a.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,g,d,o,b),{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:a}}}());
24 +hljs.registerLanguage("lua",function(){"use strict";return function(e){var t={begin:"\\[=*\\[",end:"\\]=*\\]",contains:["self"]},a=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[","\\]=*\\]",{contains:[t],relevance:10})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:a.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:a}].concat(a)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\[=*\\[",end:"\\]=*\\]",contains:[t],relevance:5}])}}}());
25 +hljs.registerLanguage("makefile",function(){"use strict";return function(e){var i={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%<?\^\+\*]/}]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,i]},a={className:"variable",begin:/\$\([\w-]+\s/,end:/\)/,keywords:{built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"},contains:[i]},r={begin:"^"+e.UNDERSCORE_IDENT_RE+"\\s*(?=[:+?]?=)"},s={className:"section",begin:/^[^\s]+:/,end:/$/,contains:[i]};return{name:"Makefile",aliases:["mk","mak"],keywords:{$pattern:/[\w-]+/,keyword:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath"},contains:[e.HASH_COMMENT_MODE,i,n,a,r,{className:"meta",begin:/^\.PHONY:/,end:/$/,keywords:{$pattern:/[\.\w]+/,"meta-keyword":".PHONY"}},s]}}}());
26 +hljs.registerLanguage("xml",function(){"use strict";return function(e){var n={className:"symbol",begin:"&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;"},a={begin:"\\s",contains:[{className:"meta-keyword",begin:"#?[a-z_][a-z1-9_-]+",illegal:"\\n"}]},s=e.inherit(a,{begin:"\\(",end:"\\)"}),t=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),i=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),c={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:"[A-Za-z0-9\\._:-]+",relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[n]},{begin:/'/,end:/'/,contains:[n]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:"<![a-z]",end:">",relevance:10,contains:[a,i,t,s,{begin:"\\[",end:"\\]",contains:[{className:"meta",begin:"<![a-z]",end:">",contains:[a,s,i,t]}]}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},n,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:"<style(?=\\s|>)",end:">",keywords:{name:"style"},contains:[c],starts:{end:"</style>",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:"<script(?=\\s|>)",end:">",keywords:{name:"script"},contains:[c],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:"</?",end:"/?>",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},c]}]}}}());
27 +hljs.registerLanguage("markdown",function(){"use strict";return function(n){const e={begin:"<",end:">",subLanguage:"xml",relevance:0},a={begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},i={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},s={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]};i.contains.push(s),s.contains.push(i);var c=[e,a];return i.contains=i.contains.concat(c),s.contains=s.contains.concat(c),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:c=c.concat(i,s)},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:c}]}]},e,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},i,s,{className:"quote",begin:"^>\\s+",contains:c,end:"$"},{className:"code",variants:[{begin:"(`{3,})(.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})(.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},a,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}}());
28 +hljs.registerLanguage("nginx",function(){"use strict";return function(e){var n={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{/,end:/}/},{begin:"[\\$\\@]"+e.UNDERSCORE_IDENT_RE}]},a={endsWithParent:!0,keywords:{$pattern:"[a-z/_]+",literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[n]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:"\\s\\^",end:"\\s|{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},n]};return{name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{begin:e.UNDERSCORE_IDENT_RE+"\\s+{",returnBegin:!0,end:"{",contains:[{className:"section",begin:e.UNDERSCORE_IDENT_RE}],relevance:0},{begin:e.UNDERSCORE_IDENT_RE+"\\s",end:";|{",returnBegin:!0,contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:a}],relevance:0}],illegal:"[^\\s\\}]"}}}());
29 +hljs.registerLanguage("objectivec",function(){"use strict";return function(e){var n=/[a-zA-Z@][a-zA-Z0-9_]*/,_={$pattern:n,keyword:"@interface @class @protocol @implementation"};return{name:"Objective-C",aliases:["mm","objc","obj-c"],keywords:{$pattern:n,keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},illegal:"</",contains:[{className:"built_in",begin:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"string",variants:[{begin:'@"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]}]},{className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+_.keyword.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:_,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}}());
30 +hljs.registerLanguage("perl",function(){"use strict";return function(e){var n={$pattern:/[\w.]+/,keyword:"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qq fileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmget sub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedir ioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when"},t={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:n},s={begin:"->{",end:"}"},r={variants:[{begin:/\$\d/},{begin:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{begin:/[\$%@][^\s\w{]/,relevance:0}]},i=[e.BACKSLASH_ESCAPE,t,r],a=[r,e.HASH_COMMENT_MODE,e.COMMENT("^\\=\\w","\\=cut",{endsWithParent:!0}),s,{className:"string",contains:i,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[e.BACKSLASH_ESCAPE],relevance:0}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return t.contains=a,s.contains=a,{name:"Perl",aliases:["pl","pm"],keywords:n,contains:a}}}());
31 +hljs.registerLanguage("php",function(){"use strict";return function(e){var r={begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},t={className:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?[=]?/},{begin:/\?>/}]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},n={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]},i={keyword:"__CLASS__ __DIR__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __NAMESPACE__ __TRAIT__ die echo exit include include_once print require require_once array abstract and as binary bool boolean break callable case catch class clone const continue declare default do double else elseif empty enddeclare endfor endforeach endif endswitch endwhile eval extends final finally float for foreach from global goto if implements instanceof insteadof int integer interface isset iterable list new object or private protected public real return string switch throw trait try unset use var void while xor yield",literal:"false null true",built_in:"Error|0 AppendIterator ArgumentCountError ArithmeticError ArrayIterator ArrayObject AssertionError BadFunctionCallException BadMethodCallException CachingIterator CallbackFilterIterator CompileError Countable DirectoryIterator DivisionByZeroError DomainException EmptyIterator ErrorException Exception FilesystemIterator FilterIterator GlobIterator InfiniteIterator InvalidArgumentException IteratorIterator LengthException LimitIterator LogicException MultipleIterator NoRewindIterator OutOfBoundsException OutOfRangeException OuterIterator OverflowException ParentIterator ParseError RangeException RecursiveArrayIterator RecursiveCachingIterator RecursiveCallbackFilterIterator RecursiveDirectoryIterator RecursiveFilterIterator RecursiveIterator RecursiveIteratorIterator RecursiveRegexIterator RecursiveTreeIterator RegexIterator RuntimeException SeekableIterator SplDoublyLinkedList SplFileInfo SplFileObject SplFixedArray SplHeap SplMaxHeap SplMinHeap SplObjectStorage SplObserver SplObserver SplPriorityQueue SplQueue SplStack SplSubject SplSubject SplTempFileObject TypeError UnderflowException UnexpectedValueException ArrayAccess Closure Generator Iterator IteratorAggregate Serializable Throwable Traversable WeakReference Directory __PHP_Incomplete_Class parent php_user_filter self static stdClass"};return{aliases:["php","php3","php4","php5","php6","php7"],case_insensitive:!0,keywords:i,contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[t]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler"}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;?$/,contains:[e.BACKSLASH_ESCAPE,{className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]}]},t,{className:"keyword",begin:/\$this\b/},r,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:i,contains:["self",r,e.C_BLOCK_COMMENT_MODE,a,n]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},a,n]}}}());
32 +hljs.registerLanguage("php-template",function(){"use strict";return function(n){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},n.inherit(n.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),n.inherit(n.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}}());
33 +hljs.registerLanguage("plaintext",function(){"use strict";return function(t){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}}());
34 +hljs.registerLanguage("properties",function(){"use strict";return function(e){var n="[ \\t\\f]*",t="("+n+"[:=]"+n+"|[ \\t\\f]+)",a="([^\\\\:= \\t\\f\\n]|\\\\.)+",s={end:t,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\n"}]}};return{name:".properties",case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+"+t,returnBegin:!0,contains:[{className:"attr",begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",endsParent:!0,relevance:0}],starts:s},{begin:a+t,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:a,endsParent:!0,relevance:0}],starts:s},{className:"attr",relevance:0,begin:a+n+"$"}]}}}());
35 +hljs.registerLanguage("python",function(){"use strict";return function(e){var n={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},a={className:"meta",begin:/^(>>>|\.\.\.) /},i={className:"subst",begin:/\{/,end:/\}/,keywords:n,illegal:/#/},s={begin:/\{\{/,relevance:0},r={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(fr|rf|f)'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(fr|rf|f)"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},{begin:/(fr|rf|f)'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,s,i]},{begin:/(fr|rf|f)"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,i]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},l={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},t={className:"params",variants:[{begin:/\(\s*\)/,skip:!0,className:null},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:["self",a,l,r,e.HASH_COMMENT_MODE]}]};return i.contains=[r,l,a],{name:"Python",aliases:["py","gyp","ipython"],keywords:n,illegal:/(<\/|->|\?)|=>/,contains:[a,l,{beginKeywords:"if",relevance:0},r,e.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[e.UNDERSCORE_TITLE_MODE,t,{begin:/->/,endsWithParent:!0,keywords:"None"}]},{className:"meta",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}}());
36 +hljs.registerLanguage("python-repl",function(){"use strict";return function(n){return{aliases:["pycon"],contains:[{className:"meta",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}}());
37 +hljs.registerLanguage("ruby",function(){"use strict";return function(e){var n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",a={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},s={className:"doctag",begin:"@[A-Za-z]+"},i={begin:"#<",end:">"},r=[e.COMMENT("#","$",{contains:[s]}),e.COMMENT("^\\=begin","^\\=end",{contains:[s],relevance:10}),e.COMMENT("^__END__","\\n$")],c={className:"subst",begin:"#\\{",end:"}",keywords:a},t={className:"string",contains:[e.BACKSLASH_ESCAPE,c],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[qQwWx]?\\(",end:"\\)"},{begin:"%[qQwWx]?\\[",end:"\\]"},{begin:"%[qQwWx]?{",end:"}"},{begin:"%[qQwWx]?<",end:">"},{begin:"%[qQwWx]?/",end:"/"},{begin:"%[qQwWx]?%",end:"%"},{begin:"%[qQwWx]?-",end:"-"},{begin:"%[qQwWx]?\\|",end:"\\|"},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{begin:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,returnBegin:!0,contains:[{begin:/<<[-~]?'?/},e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[e.BACKSLASH_ESCAPE,c]})]}]},b={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:a},d=[t,i,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE}]}].concat(r)},{className:"function",beginKeywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:n}),b].concat(r)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[t,{begin:n}],relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{className:"params",begin:/\|/,end:/\|/,keywords:a},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[i,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(r),relevance:0}].concat(r);c.contains=d,b.contains=d;var g=[{begin:/^\s*=>/,starts:{end:"$",contains:d}},{className:"meta",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{end:"$",contains:d}}];return{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:a,illegal:/\/\*/,contains:r.concat(g).concat(d)}}}());
38 +hljs.registerLanguage("rust",function(){"use strict";return function(e){var n="([ui](8|16|32|64|128|size)|f(32|64))?",t="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",literal:"true false Some None Ok Err",built_in:t},illegal:"</",contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:["self"]}),e.inherit(e.QUOTE_STRING_MODE,{begin:/b?"/,illegal:null}),{className:"string",variants:[{begin:/r(#*)"(.|\n)*?"\1(?!#)/},{begin:/b?'\\?(x\w{2}|u\w{4}|U\w{8}|.)'/}]},{className:"symbol",begin:/'[a-zA-Z_][a-zA-Z0-9_]*/},{className:"number",variants:[{begin:"\\b0b([01_]+)"+n},{begin:"\\b0o([0-7_]+)"+n},{begin:"\\b0x([A-Fa-f0-9_]+)"+n},{begin:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+n}],relevance:0},{className:"function",beginKeywords:"fn",end:"(\\(|<)",excludeEnd:!0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"meta",begin:"#\\!?\\[",end:"\\]",contains:[{className:"meta-string",begin:/"/,end:/"/}]},{className:"class",beginKeywords:"type",end:";",contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{endsParent:!0})],illegal:"\\S"},{className:"class",beginKeywords:"trait enum struct union",end:"{",contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{endsParent:!0})],illegal:"[\\w\\d]"},{begin:e.IDENT_RE+"::",keywords:{built_in:t}},{begin:"->"}]}}}());
39 +hljs.registerLanguage("scss",function(){"use strict";return function(e){var t={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},i={className:"number",begin:"#[0-9A-Fa-f]+"};return e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:"\\#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},{className:"selector-attr",begin:"\\[",end:"\\]",illegal:"$"},{className:"selector-tag",begin:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{className:"selector-pseudo",begin:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{className:"selector-pseudo",begin:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},t,{className:"attribute",begin:"\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",illegal:"[^\\s]"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:":",end:";",contains:[t,i,e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"meta",begin:"!important"}]},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",returnBegin:!0,keywords:"and or not only",contains:[{begin:"@[a-z-]+",className:"keyword"},t,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i,e.CSS_NUMBER_MODE]}]}}}());
40 +hljs.registerLanguage("shell",function(){"use strict";return function(s){return{name:"Shell Session",aliases:["console"],contains:[{className:"meta",begin:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{end:"$",subLanguage:"bash"}}]}}}());
41 +hljs.registerLanguage("sql",function(){"use strict";return function(e){var t=e.COMMENT("--","$");return{name:"SQL",case_insensitive:!0,illegal:/[<>{}*]/,contains:[{beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",end:/;/,endsWithParent:!0,keywords:{$pattern:/[\w\.]+/,keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:"`",end:"`"},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]}}}());
42 +hljs.registerLanguage("swift",function(){"use strict";return function(e){var i={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c compactMap contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},n=e.COMMENT("/\\*","\\*/",{contains:["self"]}),t={className:"subst",begin:/\\\(/,end:"\\)",keywords:i,contains:[]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"""/,end:/"""/},{begin:/"/,end:/"/}]},r={className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return t.contains=[r],{name:"Swift",keywords:i,contains:[a,e.C_LINE_COMMENT_MODE,n,{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},r,{className:"function",beginKeywords:"func",end:"{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{begin:/</,end:/>/},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:i,contains:["self",r,a,e.C_BLOCK_COMMENT_MODE,{begin:":"}],illegal:/["']/}],illegal:/\[|%/},{className:"class",beginKeywords:"struct protocol class extension enum",keywords:i,end:"\\{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{className:"meta",begin:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)\\b"},{beginKeywords:"import",end:/$/,contains:[e.C_LINE_COMMENT_MODE,n]}]}}}());
43 +hljs.registerLanguage("typescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.concat(["type","namespace","typedef","interface","public","private","protected","implements","declare","abstract","readonly"]).join(" "),literal:n.join(" "),built_in:a.concat(["any","void","number","boolean","string","object","never","enum"]).join(" ")},s={className:"meta",begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},i={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:r.C_NUMBER_RE+"n?"}],relevance:0},o={className:"subst",begin:"\\$\\{",end:"\\}",keywords:t,contains:[]},c={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},l={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"css"}},E={className:"string",begin:"`",end:"`",contains:[r.BACKSLASH_ESCAPE,o]};o.contains=[r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,i,r.REGEXP_MODE];var d={begin:"\\(",end:/\)/,keywords:t,contains:["self",r.QUOTE_STRING_MODE,r.APOS_STRING_MODE,r.NUMBER_MODE]},u={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,s,d]};return{name:"TypeScript",aliases:["ts"],keywords:t,contains:[r.SHEBANG(),{className:"meta",begin:/^\s*['"]use strict['"]/},r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,i,{begin:"("+r.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,r.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+r.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:r.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:d.contains}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[\{;]/,excludeEnd:!0,keywords:t,contains:["self",r.inherit(r.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),u],illegal:/%/,relevance:0},{beginKeywords:"constructor",end:/[\{;]/,excludeEnd:!0,contains:["self",u]},{begin:/module\./,keywords:{built_in:"module"},relevance:0},{beginKeywords:"module",end:/\{/,excludeEnd:!0},{beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:"interface extends"},{begin:/\$[(.]/},{begin:"\\."+r.IDENT_RE,relevance:0},s,d]}}}());
44 +hljs.registerLanguage("yaml",function(){"use strict";return function(e){var n="true false yes no null",a="[\\w#;/?:@&=+$,.~*\\'()[\\]]+",s={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:"{{",end:"}}"},{begin:"%{",end:"}"}]}]},i=e.inherit(s,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),l={end:",",endsWithParent:!0,excludeEnd:!0,contains:[],keywords:n,relevance:0},t={begin:"{",end:"}",contains:[l],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]",contains:[l],illegal:"\\n",relevance:0},b=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---s*$",relevance:10},{className:"string",begin:"[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type",begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"\\-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},{className:"number",begin:e.C_NUMBER_RE+"\\b"},t,g,s],c=[...b];return c.pop(),c.push(i),l.contains=c,{name:"YAML",case_insensitive:!0,aliases:["yml","YAML"],contains:b}}}());
45 +hljs.registerLanguage("armasm",function(){"use strict";return function(s){const e={variants:[s.COMMENT("^[ \\t]*(?=#)","$",{relevance:0,excludeBegin:!0}),s.COMMENT("[;@]","$",{relevance:0}),s.C_LINE_COMMENT_MODE,s.C_BLOCK_COMMENT_MODE]};return{name:"ARM Assembly",case_insensitive:!0,aliases:["arm"],keywords:{$pattern:"\\.?"+s.IDENT_RE,meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"},contains:[{className:"keyword",begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?(?=\\s)"},e,s.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"[=#]\\w+"}],relevance:0}]}}}());
46 +hljs.registerLanguage("d",function(){"use strict";return function(e){var a={$pattern:e.UNDERSCORE_IDENT_RE,keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},d="((0|[1-9][\\d_]*)|0[bB][01_]+|0[xX]([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))",n="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",t={className:"number",begin:"\\b"+d+"(L|u|U|Lu|LU|uL|UL)?",relevance:0},_={className:"number",begin:"\\b(((0[xX](([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)\\.([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)|\\.?([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))[pP][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))|((0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(\\.\\d*|([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)))|\\d+\\.(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)|\\.(0|[1-9][\\d_]*)([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))?))([fF]|L|i|[fF]i|Li)?|"+d+"(i|[fF]i|Li))",relevance:0},r={className:"string",begin:"'("+n+"|.)",end:"'",illegal:"."},i={className:"string",begin:'"',contains:[{begin:n,relevance:0}],end:'"[cwd]?'},s=e.COMMENT("\\/\\+","\\+\\/",{contains:["self"],relevance:10});return{name:"D",keywords:a,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,{className:"string",begin:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',relevance:10},i,{className:"string",begin:'[rq]"',end:'"[cwd]?',relevance:5},{className:"string",begin:"`",end:"`[cwd]?"},{className:"string",begin:'q"\\{',end:'\\}"'},_,t,r,{className:"meta",begin:"^#!",end:"$",relevance:5},{className:"meta",begin:"#(line)",end:"$",relevance:5},{className:"keyword",begin:"@[a-zA-Z_][a-zA-Z_\\d]*"}]}}}());
47 +hljs.registerLanguage("handlebars",function(){"use strict";function e(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(n){const a={"builtin-name":"action bindattr collection component concat debugger each each-in get hash if in input link-to loc log lookup mut outlet partial query-params render template textarea unbound unless view with yield"},t=/\[.*?\]/,s=/[^\s!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]+/,i=e("(",/'.*?'/,"|",/".*?"/,"|",t,"|",s,"|",/\.|\//,")+"),r=e("(",t,"|",s,")(?==)"),l={begin:i,lexemes:/[\w.\/]+/},c=n.inherit(l,{keywords:{literal:"true false undefined null"}}),o={begin:/\(/,end:/\)/},m={className:"attr",begin:r,relevance:0,starts:{begin:/=/,end:/=/,starts:{contains:[n.NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,c,o]}}},d={contains:[n.NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,{begin:/as\s+\|/,keywords:{keyword:"as"},end:/\|/,contains:[{begin:/\w+/}]},m,c,o],returnEnd:!0},g=n.inherit(l,{className:"name",keywords:a,starts:n.inherit(d,{end:/\)/})});o.contains=[g];const u=n.inherit(l,{keywords:a,className:"name",starts:n.inherit(d,{end:/}}/})}),b=n.inherit(l,{keywords:a,className:"name"}),h=n.inherit(l,{className:"name",keywords:a,starts:n.inherit(d,{end:/}}/})});return{name:"Handlebars",aliases:["hbs","html.hbs","html.handlebars","htmlbars"],case_insensitive:!0,subLanguage:"xml",contains:[{begin:/\\\{\{/,skip:!0},{begin:/\\\\(?=\{\{)/,skip:!0},n.COMMENT(/\{\{!--/,/--\}\}/),n.COMMENT(/\{\{!/,/\}\}/),{className:"template-tag",begin:/\{\{\{\{(?!\/)/,end:/\}\}\}\}/,contains:[u],starts:{end:/\{\{\{\{\//,returnEnd:!0,subLanguage:"xml"}},{className:"template-tag",begin:/\{\{\{\{\//,end:/\}\}\}\}/,contains:[b]},{className:"template-tag",begin:/\{\{#/,end:/\}\}/,contains:[u]},{className:"template-tag",begin:/\{\{(?=else\}\})/,end:/\}\}/,keywords:"else"},{className:"template-tag",begin:/\{\{\//,end:/\}\}/,contains:[b]},{className:"template-variable",begin:/\{\{\{/,end:/\}\}\}/,contains:[h]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,contains:[h]}]}}}());
48 +hljs.registerLanguage("haskell",function(){"use strict";return function(e){var n={variants:[e.COMMENT("--","$"),e.COMMENT("{-","-}",{contains:["self"]})]},i={className:"meta",begin:"{-#",end:"#-}"},a={className:"meta",begin:"^#",end:"$"},s={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},l={begin:"\\(",end:"\\)",illegal:'"',contains:[i,a,{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TITLE_MODE,{begin:"[_a-z][\\w']*"}),n]};return{name:"Haskell",aliases:["hs"],keywords:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",contains:[{beginKeywords:"module",end:"where",keywords:"module where",contains:[l,n],illegal:"\\W\\.|;"},{begin:"\\bimport\\b",end:"$",keywords:"import qualified as hiding",contains:[l,n],illegal:"\\W\\.|;"},{className:"class",begin:"^(\\s*)?(class|instance)\\b",end:"where",keywords:"class family instance where",contains:[s,l,n]},{className:"class",begin:"\\b(data|(new)?type)\\b",end:"$",keywords:"data family type newtype deriving",contains:[i,s,l,{begin:"{",end:"}",contains:l.contains},n]},{beginKeywords:"default",end:"$",contains:[s,l,n]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,n]},{begin:"\\bforeign\\b",end:"$",keywords:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",contains:[s,e.QUOTE_STRING_MODE,n]},{className:"meta",begin:"#!\\/usr\\/bin\\/env runhaskell",end:"$"},i,a,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,s,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),n,{begin:"->|<-"}]}}}());
49 +hljs.registerLanguage("julia",function(){"use strict";return function(e){var r="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",t={$pattern:r,keyword:"in isa where baremodule begin break catch ccall const continue do else elseif end export false finally for function global if import importall let local macro module quote return true try using while type immutable abstract bitstype typealias ",literal:"true false ARGS C_NULL DevNull ENDIAN_BOM ENV I Inf Inf16 Inf32 Inf64 InsertionSort JULIA_HOME LOAD_PATH MergeSort NaN NaN16 NaN32 NaN64 PROGRAM_FILE QuickSort RoundDown RoundFromZero RoundNearest RoundNearestTiesAway RoundNearestTiesUp RoundToZero RoundUp STDERR STDIN STDOUT VERSION catalan e|0 eu|0 eulergamma golden im nothing pi γ π φ ",built_in:"ANY AbstractArray AbstractChannel AbstractFloat AbstractMatrix AbstractRNG AbstractSerializer AbstractSet AbstractSparseArray AbstractSparseMatrix AbstractSparseVector AbstractString AbstractUnitRange AbstractVecOrMat AbstractVector Any ArgumentError Array AssertionError Associative Base64DecodePipe Base64EncodePipe Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError BufferStream CachingPool CapturedException CartesianIndex CartesianRange Cchar Cdouble Cfloat Channel Char Cint Cintmax_t Clong Clonglong ClusterManager Cmd CodeInfo Colon Complex Complex128 Complex32 Complex64 CompositeException Condition ConjArray ConjMatrix ConjVector Cptrdiff_t Cshort Csize_t Cssize_t Cstring Cuchar Cuint Cuintmax_t Culong Culonglong Cushort Cwchar_t Cwstring DataType Date DateFormat DateTime DenseArray DenseMatrix DenseVecOrMat DenseVector Diagonal Dict DimensionMismatch Dims DirectIndexString Display DivideError DomainError EOFError EachLine Enum Enumerate ErrorException Exception ExponentialBackOff Expr Factorization FileMonitor Float16 Float32 Float64 Function Future GlobalRef GotoNode HTML Hermitian IO IOBuffer IOContext IOStream IPAddr IPv4 IPv6 IndexCartesian IndexLinear IndexStyle InexactError InitError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException InvalidStateException Irrational KeyError LabelNode LinSpace LineNumberNode LoadError LowerTriangular MIME Matrix MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode NullException Nullable Number ObjectIdDict OrdinalRange OutOfMemoryError OverflowError Pair ParseError PartialQuickSort PermutedDimsArray Pipe PollingFileWatcher ProcessExitedException Ptr QuoteNode RandomDevice Range RangeIndex Rational RawFD ReadOnlyMemoryError Real ReentrantLock Ref Regex RegexMatch RemoteChannel RemoteException RevString RoundingMode RowVector SSAValue SegmentationFault SerializationState Set SharedArray SharedMatrix SharedVector Signed SimpleVector Slot SlotNumber SparseMatrixCSC SparseVector StackFrame StackOverflowError StackTrace StepRange StepRangeLen StridedArray StridedMatrix StridedVecOrMat StridedVector String SubArray SubString SymTridiagonal Symbol Symmetric SystemError TCPSocket Task Text TextDisplay Timer Tridiagonal Tuple Type TypeError TypeMapEntry TypeMapLevel TypeName TypeVar TypedSlot UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UndefRefError UndefVarError UnicodeError UniformScaling Union UnionAll UnitRange Unsigned UpperTriangular Val Vararg VecElement VecOrMat Vector VersionNumber Void WeakKeyDict WeakRef WorkerConfig WorkerPool "},a={keywords:t,illegal:/<\//},n={className:"subst",begin:/\$\(/,end:/\)/,keywords:t},o={className:"variable",begin:"\\$"+r},i={className:"string",contains:[e.BACKSLASH_ESCAPE,n,o],variants:[{begin:/\w*"""/,end:/"""\w*/,relevance:10},{begin:/\w*"/,end:/"\w*/}]},l={className:"string",contains:[e.BACKSLASH_ESCAPE,n,o],begin:"`",end:"`"},s={className:"meta",begin:"@"+r};return a.name="Julia",a.contains=[{className:"number",begin:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},{className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},i,l,s,{className:"comment",variants:[{begin:"#=",end:"=#",relevance:10},{begin:"#",end:"$"}]},e.HASH_COMMENT_MODE,{className:"keyword",begin:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{begin:/<:/}],n.contains=a.contains,a}}());
50 +hljs.registerLanguage("nim",function(){"use strict";return function(e){return{name:"Nim",aliases:["nim"],keywords:{keyword:"addr and as asm bind block break case cast const continue converter discard distinct div do elif else end enum except export finally for from func generic if import in include interface is isnot iterator let macro method mixin mod nil not notin object of or out proc ptr raise ref return shl shr static template try tuple type using var when while with without xor yield",literal:"shared guarded stdin stdout stderr result true false",built_in:"int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float float32 float64 bool char string cstring pointer expr stmt void auto any range array openarray varargs seq set clong culong cchar cschar cshort cint csize clonglong cfloat cdouble clongdouble cuchar cushort cuint culonglong cstringarray semistatic"},contains:[{className:"meta",begin:/{\./,end:/\.}/,relevance:10},{className:"string",begin:/[a-zA-Z]\w*"/,end:/"/,contains:[{begin:/""/}]},{className:"string",begin:/([a-zA-Z]\w*)?"""/,end:/"""/},e.QUOTE_STRING_MODE,{className:"type",begin:/\b[A-Z]\w+\b/,relevance:0},{className:"number",relevance:0,variants:[{begin:/\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/},{begin:/\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/}]},e.HASH_COMMENT_MODE]}}}());
51 +hljs.registerLanguage("nix",function(){"use strict";return function(e){var n={keyword:"rec with let in inherit assert if else then",literal:"true false or and null",built_in:"import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation"},i={className:"subst",begin:/\$\{/,end:/}/,keywords:n},t={className:"string",contains:[i],variants:[{begin:"''",end:"''"},{begin:'"',end:'"'}]},s=[e.NUMBER_MODE,e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t,{begin:/[a-zA-Z0-9-_]+(\s*=)/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/\S+/}]}];return i.contains=s,{name:"Nix",aliases:["nixos"],keywords:n,contains:s}}}());
52 +hljs.registerLanguage("r",function(){"use strict";return function(e){var n="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{name:"R",contains:[e.HASH_COMMENT_MODE,{begin:n,keywords:{$pattern:n,keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},relevance:0},{className:"number",begin:"0[xX][0-9a-fA-F]+[Li]?\\b",relevance:0},{className:"number",begin:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",relevance:0},{className:"number",begin:"\\d+\\.(?!\\d)(?:i\\b)?",relevance:0},{className:"number",begin:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{className:"number",begin:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{begin:"`",end:"`",relevance:0},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]}]}}}());
53 +hljs.registerLanguage("scala",function(){"use strict";return function(e){var n={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:"\\${",end:"}"}]},a={className:"string",variants:[{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'"""',end:'"""',relevance:10},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,n]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[n],relevance:10}]},s={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},t={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},i={className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},t]},l={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[t]};return{name:"Scala",keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,{className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},s,l,i,e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}}());
54 +hljs.registerLanguage("x86asm",function(){"use strict";return function(s){return{name:"Intel x86 Assembly",case_insensitive:!0,keywords:{$pattern:"[.%]?"+s.IDENT_RE,keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",built_in:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr",meta:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},contains:[s.COMMENT(";","$",{relevance:0}),{className:"number",variants:[{begin:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",relevance:0},{begin:"\\$[0-9][0-9A-Fa-f]*",relevance:0},{begin:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{begin:"\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"}]},s.QUOTE_STRING_MODE,{className:"string",variants:[{begin:"'",end:"[^\\\\]'"},{begin:"`",end:"[^\\\\]`"}],relevance:0},{className:"symbol",variants:[{begin:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"},{begin:"^\\s*%%[A-Za-z0-9_$#@~.?]*:"}],relevance:0},{className:"subst",begin:"%[0-9]+",relevance:0},{className:"subst",begin:"%!S+",relevance:0},{className:"meta",begin:/^\s*\.[\w_-]+/}]}}}());
54 < \ No newline at end of file
A book/index.html
+268 -0
@@ -0,0 +1,268 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Introduction - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="css/general-2459343d.css">
19 + <link rel="stylesheet" href="css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/introduction.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="introduction"><a class="header" href="#introduction">Introduction</a></h1>
181 +<h2 id="quest-ce-que-gitrust-"><a class="header" href="#quest-ce-que-gitrust-">Qu’est-ce que gitrust ?</a></h2>
182 +<p><strong>gitrust</strong> est une forge Git self-hosted écrite en Rust, conçue pour les équipes de 3 à 20 personnes qui souhaitent maîtriser leur infrastructure de développement. Elle offre un serveur HTTP (<code>:4000</code>) et SSH (<code>:2222</code>), une CI intégrée via Dagger, la génération de SBOM avec Syft et l’intégration Dependency-Track, une gestion fine des permissions (4 rôles), la double authentification, des labels hiérarchiques et une conformité ANSSI PA-074.</p>
183 +<p>Une instance publique de démonstration est accessible sur <a href="https://demo.gitrust.eu">demo.gitrust.eu</a>.</p>
184 +<h2 id="à-qui-sadresse-cette-documentation-"><a class="header" href="#à-qui-sadresse-cette-documentation-">À qui s’adresse cette documentation ?</a></h2>
185 +<p>Cette documentation est organisée en quatre parties selon leurs publics respectifs :</p>
186 +<ul>
187 +<li><strong>Manuel utilisateur</strong> — pour les développeurs qui <em>utilisent</em> une instance gitrust existante : push/pull, pull requests, issues, CI, notifications. Prérequis : savoir utiliser Git en ligne de commande.</li>
188 +<li><strong>Manuel d’administration</strong> — pour les ops et self-hosters qui déploient, configurent et maintiennent une instance en production. Prérequis : administration Linux, notions de réseau et TLS.</li>
189 +<li><strong>Manuel développeur</strong> — pour les contributeurs au code gitrust et les développeurs qui construisent des intégrations sur l’API publique. Prérequis : Rust (pour contribuer) ou un langage client (pour l’API).</li>
190 +<li><strong>Bibliothèque de templates</strong> — pour tous les profils, lorsqu’ils cherchent un point de départ prêt à l’emploi (fichiers <code>.env</code>, <code>docker-compose.yml</code>, configs reverse-proxy, scripts de backup, exemples de clients API).</li>
191 +</ul>
192 +<h2 id="comment-cette-documentation-est-elle-structurée-"><a class="header" href="#comment-cette-documentation-est-elle-structurée-">Comment cette documentation est-elle structurée ?</a></h2>
193 +<p>Cette documentation suit le cadre <strong>Diátaxis</strong>, qui distingue quatre types de contenu selon le besoin du lecteur :</p>
194 +<div class="table-wrapper">
195 +<table>
196 +<thead>
197 +<tr><th>Type</th><th>Quand l’utiliser</th><th>Exemples</th></tr>
198 +</thead>
199 +<tbody>
200 +<tr><td><strong>Tutoriels</strong></td><td>Quand vous apprenez</td><td>Installer gitrust, créer votre premier dépôt</td></tr>
201 +<tr><td><strong>Guides pratiques</strong></td><td>Quand vous résolvez un problème précis</td><td>Configurer SMTP, gérer les clés SSH</td></tr>
202 +<tr><td><strong>Référence</strong></td><td>Quand vous cherchez une information technique</td><td>Variables d’environnement, schéma API REST</td></tr>
203 +<tr><td><strong>Explication</strong></td><td>Quand vous voulez comprendre le pourquoi</td><td>Architecture des crates, modèle RBAC</td></tr>
204 +</tbody>
205 +</table>
206 +</div>
207 +<p>Chaque manuel (utilisateur, administration, développeur) contient ces quatre types de contenu organisés de manière indépendante.</p>
208 +<h2 id="naviguer-dans-la-documentation"><a class="header" href="#naviguer-dans-la-documentation">Naviguer dans la documentation</a></h2>
209 +<ul>
210 +<li><a href="user_manual/index.html">Manuel utilisateur</a> — collaborer sur gitrust en tant que développeur</li>
211 +<li><a href="administration_manual/index.html">Manuel d’administration</a> — déployer et exploiter une instance</li>
212 +<li><a href="developer_manual/index.html">Manuel développeur</a> — contribuer au code ou consommer l’API</li>
213 +<li><a href="template/index.html">Bibliothèque de templates</a> — configs et scripts copiables</li>
214 +</ul>
215 +
216 + </main>
217 +
218 + <nav class="nav-wrapper" aria-label="Page navigation">
219 + <!-- Mobile navigation buttons -->
220 +
221 + <a rel="next prefetch" href="user_manual/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
222 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
223 + </a>
224 +
225 + <div style="clear: both"></div>
226 + </nav>
227 + </div>
228 + </div>
229 +
230 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
231 +
232 + <a rel="next prefetch" href="user_manual/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
233 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
234 + </a>
235 + </nav>
236 +
237 + </div>
238 +
239 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
240 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
241 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
242 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
243 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
244 +
245 +
246 +
247 + <script>
248 + window.playground_copyable = true;
249 + </script>
250 +
251 +
252 + <script src="elasticlunr-ef4e11c1.min.js"></script>
253 + <script src="mark-09e88c2c.min.js"></script>
254 + <script src="searcher-c2a407aa.js"></script>
255 +
256 + <script src="clipboard-1626706a.min.js"></script>
257 + <script src="highlight-abc7f01d.js"></script>
258 + <script src="book-a0b12cfe.js"></script>
259 +
260 + <!-- Custom JS scripts -->
261 + <script src="theme/mermaid-eefea253.min.js"></script>
262 + <script src="theme/mermaid-init-ccf746f1.js"></script>
263 +
264 +
265 +
266 + </div>
267 + </body>
268 +</html>
A book/introduction.html
+268 -0
@@ -0,0 +1,268 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Introduction - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="css/general-2459343d.css">
19 + <link rel="stylesheet" href="css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/introduction.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="introduction"><a class="header" href="#introduction">Introduction</a></h1>
181 +<h2 id="quest-ce-que-gitrust-"><a class="header" href="#quest-ce-que-gitrust-">Qu’est-ce que gitrust ?</a></h2>
182 +<p><strong>gitrust</strong> est une forge Git self-hosted écrite en Rust, conçue pour les équipes de 3 à 20 personnes qui souhaitent maîtriser leur infrastructure de développement. Elle offre un serveur HTTP (<code>:4000</code>) et SSH (<code>:2222</code>), une CI intégrée via Dagger, la génération de SBOM avec Syft et l’intégration Dependency-Track, une gestion fine des permissions (4 rôles), la double authentification, des labels hiérarchiques et une conformité ANSSI PA-074.</p>
183 +<p>Une instance publique de démonstration est accessible sur <a href="https://demo.gitrust.eu">demo.gitrust.eu</a>.</p>
184 +<h2 id="à-qui-sadresse-cette-documentation-"><a class="header" href="#à-qui-sadresse-cette-documentation-">À qui s’adresse cette documentation ?</a></h2>
185 +<p>Cette documentation est organisée en quatre parties selon leurs publics respectifs :</p>
186 +<ul>
187 +<li><strong>Manuel utilisateur</strong> — pour les développeurs qui <em>utilisent</em> une instance gitrust existante : push/pull, pull requests, issues, CI, notifications. Prérequis : savoir utiliser Git en ligne de commande.</li>
188 +<li><strong>Manuel d’administration</strong> — pour les ops et self-hosters qui déploient, configurent et maintiennent une instance en production. Prérequis : administration Linux, notions de réseau et TLS.</li>
189 +<li><strong>Manuel développeur</strong> — pour les contributeurs au code gitrust et les développeurs qui construisent des intégrations sur l’API publique. Prérequis : Rust (pour contribuer) ou un langage client (pour l’API).</li>
190 +<li><strong>Bibliothèque de templates</strong> — pour tous les profils, lorsqu’ils cherchent un point de départ prêt à l’emploi (fichiers <code>.env</code>, <code>docker-compose.yml</code>, configs reverse-proxy, scripts de backup, exemples de clients API).</li>
191 +</ul>
192 +<h2 id="comment-cette-documentation-est-elle-structurée-"><a class="header" href="#comment-cette-documentation-est-elle-structurée-">Comment cette documentation est-elle structurée ?</a></h2>
193 +<p>Cette documentation suit le cadre <strong>Diátaxis</strong>, qui distingue quatre types de contenu selon le besoin du lecteur :</p>
194 +<div class="table-wrapper">
195 +<table>
196 +<thead>
197 +<tr><th>Type</th><th>Quand l’utiliser</th><th>Exemples</th></tr>
198 +</thead>
199 +<tbody>
200 +<tr><td><strong>Tutoriels</strong></td><td>Quand vous apprenez</td><td>Installer gitrust, créer votre premier dépôt</td></tr>
201 +<tr><td><strong>Guides pratiques</strong></td><td>Quand vous résolvez un problème précis</td><td>Configurer SMTP, gérer les clés SSH</td></tr>
202 +<tr><td><strong>Référence</strong></td><td>Quand vous cherchez une information technique</td><td>Variables d’environnement, schéma API REST</td></tr>
203 +<tr><td><strong>Explication</strong></td><td>Quand vous voulez comprendre le pourquoi</td><td>Architecture des crates, modèle RBAC</td></tr>
204 +</tbody>
205 +</table>
206 +</div>
207 +<p>Chaque manuel (utilisateur, administration, développeur) contient ces quatre types de contenu organisés de manière indépendante.</p>
208 +<h2 id="naviguer-dans-la-documentation"><a class="header" href="#naviguer-dans-la-documentation">Naviguer dans la documentation</a></h2>
209 +<ul>
210 +<li><a href="user_manual/index.html">Manuel utilisateur</a> — collaborer sur gitrust en tant que développeur</li>
211 +<li><a href="administration_manual/index.html">Manuel d’administration</a> — déployer et exploiter une instance</li>
212 +<li><a href="developer_manual/index.html">Manuel développeur</a> — contribuer au code ou consommer l’API</li>
213 +<li><a href="template/index.html">Bibliothèque de templates</a> — configs et scripts copiables</li>
214 +</ul>
215 +
216 + </main>
217 +
218 + <nav class="nav-wrapper" aria-label="Page navigation">
219 + <!-- Mobile navigation buttons -->
220 +
221 + <a rel="next prefetch" href="user_manual/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
222 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
223 + </a>
224 +
225 + <div style="clear: both"></div>
226 + </nav>
227 + </div>
228 + </div>
229 +
230 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
231 +
232 + <a rel="next prefetch" href="user_manual/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
233 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
234 + </a>
235 + </nav>
236 +
237 + </div>
238 +
239 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
240 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
241 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
242 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
243 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
244 +
245 +
246 +
247 + <script>
248 + window.playground_copyable = true;
249 + </script>
250 +
251 +
252 + <script src="elasticlunr-ef4e11c1.min.js"></script>
253 + <script src="mark-09e88c2c.min.js"></script>
254 + <script src="searcher-c2a407aa.js"></script>
255 +
256 + <script src="clipboard-1626706a.min.js"></script>
257 + <script src="highlight-abc7f01d.js"></script>
258 + <script src="book-a0b12cfe.js"></script>
259 +
260 + <!-- Custom JS scripts -->
261 + <script src="theme/mermaid-eefea253.min.js"></script>
262 + <script src="theme/mermaid-init-ccf746f1.js"></script>
263 +
264 +
265 +
266 + </div>
267 + </body>
268 +</html>
A book/mark-09e88c2c.min.js
+7 -0
@@ -0,0 +1,7 @@
1 +/*!***************************************************
2 +* mark.js v8.11.1
3 +* https://markjs.io/
4 +* Copyright (c) 2014–2018, Julian Kühnel
5 +* Released under the MIT license https://git.io/vwTVl
6 +*****************************************************/
7 +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Mark=t()}(this,function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i=function(){function e(n){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=i,this.iframesTimeout=o}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach(function(t){var n=e.filter(function(e){return e.contains(t)}).length>0;-1!==e.indexOf(t)||n||e.push(t)}),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var i=e.contentWindow;if(r=i.document,!i||!r)throw new Error("iframe inaccessible")}catch(e){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,i=!1,o=null,a=function a(){if(!i){i=!0,clearTimeout(o);try{r.isIframeBlank(e)||(e.removeEventListener("load",a),r.getIframeContents(e,t,n))}catch(e){n()}}};e.addEventListener("load",a),o=setTimeout(a,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(e){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,function(){return!0},function(e){r++,n.waitForIframes(e.querySelector("html"),function(){--r||t()})},function(e){e||t()})}},{key:"forEachIframe",value:function(t,n,r){var i=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=t.querySelectorAll("iframe"),s=a.length,c=0;a=Array.prototype.slice.call(a);var u=function(){--s<=0&&o(c)};s||u(),a.forEach(function(t){e.matches(t,i.exclude)?u():i.onIframeReady(t,function(e){n(t)&&(c++,r(e)),u()},u)})}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:null===t?e.nextNode():e.nextNode()&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var i=!1,o=!1;return r.forEach(function(e,t){e.val===n&&(i=t,o=e.handled)}),this.compareNodeIframe(e,t,n)?(!1!==i||o?!1===i||o||(r[i].handled=!0):r.push({val:n,handled:!0}),!0):(!1===i&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var i=this;e.forEach(function(e){e.handled||i.getIframeContents(e.val,function(e){i.createInstanceOnIframe(e).forEachNode(t,n,r)})})}},{key:"iterateThroughNodes",value:function(e,t,n,r,i){for(var o,a=this,s=this.createIterator(t,e,r),c=[],u=[],l=void 0,h=void 0;void 0,o=a.getIteratorNode(s),h=o.prevNode,l=o.node;)this.iframes&&this.forEachIframe(t,function(e){return a.checkIframeFilter(l,h,e,c)},function(t){a.createInstanceOnIframe(t).forEachNode(e,function(e){return u.push(e)},r)}),u.push(l);u.forEach(function(e){n(e)}),this.iframes&&this.handleOpenIframes(c,e,n,r),i()}},{key:"forEachNode",value:function(e,t,n){var r=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},o=this.getContexts(),a=o.length;a||i(),o.forEach(function(o){var s=function(){r.iterateThroughNodes(e,o,t,n,function(){--a<=0&&i()})};r.iframes?r.waitForIframes(o,s):s()})}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var i=!1;return n.every(function(t){return!r.call(e,t)||(i=!0,!1)}),i}return!1}}]),e}(),o=function(){function e(n){t(this,e),this.opt=r({},{diacritics:!0,synonyms:{},accuracy:"partially",caseSensitive:!1,ignoreJoiners:!1,ignorePunctuation:[],wildcards:"disabled"},n)}return n(e,[{key:"create",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),new RegExp(e,"gm"+(this.opt.caseSensitive?"":"i"))}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var i in t)if(t.hasOwnProperty(i)){var o=t[i],a="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(i):this.escapeStr(i),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o);""!==a&&""!==s&&(e=e.replace(new RegExp("("+this.escapeStr(a)+"|"+this.escapeStr(s)+")","gm"+n),r+"("+this.processSynonyms(a)+"|"+this.processSynonyms(s)+")"+r))}return e}},{key:"processSynonyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,function(e){return"\\"===e.charAt(0)?"?":""})).replace(/(?:\\)*\*/g,function(e){return"\\"===e.charAt(0)?"*":""})}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"})}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"],r=[];return e.split("").forEach(function(i){n.every(function(n){if(-1!==n.indexOf(i)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0})}),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n=this.opt.accuracy,r="string"==typeof n?n:n.value,i="";switch(("string"==typeof n?[]:n.limiters).forEach(function(e){i+="|"+t.escapeStr(e)}),r){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿")))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach(function(e){t.opt.separateWordSearch?e.split(" ").forEach(function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)}):e.trim()&&-1===n.indexOf(e)&&n.push(e)}),{keywords:n.sort(function(e,t){return t.length-e.length}),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort(function(e,t){return e.start-t.start}).forEach(function(e){var i=t.callNoMatchOnInvalidRanges(e,r),o=i.start,a=i.end;i.valid&&(e.start=o,e.length=a-o,n.push(e),r=a)}),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,i=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?i=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:i}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,i=!0,o=n.length,a=t-o,s=parseInt(e.start,10)-a;return(r=(s=s>o?o:s)+parseInt(e.length,10))>o&&(r=o,this.log("End range automatically set to the max value of "+o)),s<0||r-s<0||s>o||r>o?(i=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(i=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:i}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})},function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},function(){e({value:n,nodes:r})})}},{key:"matchesExclude",value:function(e){return i.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",i=e.splitText(t),o=i.splitText(n-t),a=document.createElement(r);return a.setAttribute("data-markjs","true"),this.opt.className&&a.setAttribute("class",this.opt.className),a.textContent=i.textContent,i.parentNode.replaceChild(a,i),o}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,i){var o=this;e.nodes.every(function(a,s){var c=e.nodes[s+1];if(void 0===c||c.start>t){if(!r(a.node))return!1;var u=t-a.start,l=(n>a.end?a.end:n)-a.start,h=e.value.substr(0,a.start),f=e.value.substr(l+a.start);if(a.node=o.wrapRangeInTextNode(a.node,u,l),e.value=h+f,e.nodes.forEach(function(t,n){n>=s&&(e.nodes[n].start>0&&n!==s&&(e.nodes[n].start-=l),e.nodes[n].end-=l)}),n-=l,i(a.node.previousSibling,a.start),!(n>a.end))return!1;t=a.end}return!0})}},{key:"wrapGroups",value:function(e,t,n,r){return r((e=this.wrapRangeInTextNode(e,t,t+n)).previousSibling),e}},{key:"separateGroups",value:function(e,t,n,r,i){for(var o=t.length,a=1;a<o;a++){var s=e.textContent.indexOf(t[a]);t[a]&&s>-1&&r(t[a],e)&&(e=this.wrapGroups(e,s,t[a].length,i))}return e}},{key:"wrapMatches",value:function(e,t,n,r,i){var o=this,a=0===t?0:t+1;this.getTextNodes(function(t){t.nodes.forEach(function(t){t=t.node;for(var i=void 0;null!==(i=e.exec(t.textContent))&&""!==i[a];){if(o.opt.separateGroups)t=o.separateGroups(t,i,a,n,r);else{if(!n(i[a],t))continue;var s=i.index;if(0!==a)for(var c=1;c<a;c++)s+=i[c].length;t=o.wrapGroups(t,s,i[a].length,r)}e.lastIndex=0}}),i()})}},{key:"wrapMatchesAcrossElements",value:function(e,t,n,r,i){var o=this,a=0===t?0:t+1;this.getTextNodes(function(t){for(var s=void 0;null!==(s=e.exec(t.value))&&""!==s[a];){var c=s.index;if(0!==a)for(var u=1;u<a;u++)c+=s[u].length;var l=c+s[a].length;o.wrapRangeInMappedTextNode(t,c,l,function(e){return n(s[a],e)},function(t,n){e.lastIndex=n,r(t)})}i()})}},{key:"wrapRangeFromIndex",value:function(e,t,n,r){var i=this;this.getTextNodes(function(o){var a=o.value.length;e.forEach(function(e,r){var s=i.checkWhitespaceRanges(e,a,o.value),c=s.start,u=s.end;s.valid&&i.wrapRangeInMappedTextNode(o,c,u,function(n){return t(n,e,o.value.substring(c,u),r)},function(t){n(t,e)})}),r()})}},{key:"unwrapMatches",value:function(e){for(var t=e.parentNode,n=document.createDocumentFragment();e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}},{key:"normalizeTextNode",value:function(e){if(e){if(3===e.nodeType)for(;e.nextSibling&&3===e.nextSibling.nodeType;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}},{key:"markRegExp",value:function(e,t){var n=this;this.opt=t,this.log('Searching with expression "'+e+'"');var r=0,i="wrapMatches";this.opt.acrossElements&&(i="wrapMatchesAcrossElements"),this[i](e,this.opt.ignoreGroups,function(e,t){return n.opt.filter(t,e,r)},function(e){r++,n.opt.each(e)},function(){0===r&&n.opt.noMatch(e),n.opt.done(r)})}},{key:"mark",value:function(e,t){var n=this;this.opt=t;var r=0,i="wrapMatches",a=this.getSeparatedKeywords("string"==typeof e?[e]:e),s=a.keywords,c=a.length;this.opt.acrossElements&&(i="wrapMatchesAcrossElements"),0===c?this.opt.done(r):function e(t){var a=new o(n.opt).create(t),u=0;n.log('Searching with expression "'+a+'"'),n[i](a,1,function(e,i){return n.opt.filter(i,t,r,u)},function(e){u++,r++,n.opt.each(e)},function(){0===u&&n.opt.noMatch(t),s[c-1]===t?n.opt.done(r):e(s[s.indexOf(t)+1])})}(s[0])}},{key:"markRanges",value:function(e,t){var n=this;this.opt=t;var r=0,i=this.checkRanges(e);i&&i.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(i)),this.wrapRangeFromIndex(i,function(e,t,r,i){return n.opt.filter(e,t,r,i)},function(e,t){r++,n.opt.each(e,t)},function(){n.opt.done(r)})):this.opt.done(r)}},{key:"unmark",value:function(e){var t=this;this.opt=e;var n=this.opt.element?this.opt.element:"*";n+="[data-markjs]",this.opt.className&&(n+="."+this.opt.className),this.log('Removal selector "'+n+'"'),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,function(e){t.unwrapMatches(e)},function(e){var r=i.matches(e,n),o=t.matchesExclude(e);return!r||o?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}},{key:"opt",set:function(e){this._opt=r({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,acrossElements:!1,ignoreGroups:0,each:function(){},noMatch:function(){},filter:function(){return!0},done:function(){},debug:!1,log:window.console},e)},get:function(){return this._opt}},{key:"iterator",get:function(){return new i(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}}]),a}();return function(e){var t=this,n=new a(e);return this.mark=function(e,r){return n.mark(e,r),t},this.markRegExp=function(e,r){return n.markRegExp(e,r),t},this.markRanges=function(e,r){return n.markRanges(e,r),t},this.unmark=function(e){return n.unmark(e),t},this}});
A book/print.html
+5298 -0
@@ -0,0 +1,5298 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Documentation gitrust</title>
7 + <meta name="robots" content="noindex">
8 +
9 +
10 + <!-- Custom HTML head -->
11 +
12 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
13 + <meta name="viewport" content="width=device-width, initial-scale=1">
14 + <meta name="theme-color" content="#ffffff">
15 +
16 + <link rel="icon" href="favicon-de23e50b.svg">
17 + <link rel="shortcut icon" href="favicon-8114d1fc.png">
18 + <link rel="stylesheet" href="css/variables-8adf115d.css">
19 + <link rel="stylesheet" href="css/general-2459343d.css">
20 + <link rel="stylesheet" href="css/chrome-ae938929.css">
21 + <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
22 +
23 + <!-- Fonts -->
24 + <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
25 +
26 + <!-- Highlight.js Stylesheets -->
27 + <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
28 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
29 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
30 +
31 + <!-- Custom theme stylesheets -->
32 +
33 +
34 + <!-- Provide site root and default themes to javascript -->
35 + <script>
36 + const path_to_root = "";
37 + const default_light_theme = "light";
38 + const default_dark_theme = "navy";
39 + window.path_to_searchindex_js = "searchindex-2e4a517d.js";
40 + </script>
41 + <!-- Start loading toc.js asap -->
42 + <script src="toc-84dd2703.js"></script>
43 + </head>
44 + <body>
45 + <div id="mdbook-help-container">
46 + <div id="mdbook-help-popup">
47 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
48 + <div>
49 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
50 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
51 + <p>Press <kbd>?</kbd> to show this help</p>
52 + <p>Press <kbd>Esc</kbd> to hide this help</p>
53 + </div>
54 + </div>
55 + </div>
56 + <div id="mdbook-body-container">
57 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
58 + <script>
59 + try {
60 + let theme = localStorage.getItem('mdbook-theme');
61 + let sidebar = localStorage.getItem('mdbook-sidebar');
62 +
63 + if (theme.startsWith('"') && theme.endsWith('"')) {
64 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
65 + }
66 +
67 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
68 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
69 + }
70 + } catch (e) { }
71 + </script>
72 +
73 + <!-- Set the theme before any content is loaded, prevents flash -->
74 + <script>
75 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
76 + let theme;
77 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
78 + if (theme === null || theme === undefined) { theme = default_theme; }
79 + const html = document.documentElement;
80 + html.classList.remove('light')
81 + html.classList.add(theme);
82 + html.classList.add("js");
83 + </script>
84 +
85 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
86 +
87 + <!-- Hide / unhide sidebar before it is displayed -->
88 + <script>
89 + let sidebar = null;
90 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
91 + if (document.body.clientWidth >= 1080) {
92 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
93 + sidebar = sidebar || 'visible';
94 + } else {
95 + sidebar = 'hidden';
96 + sidebar_toggle.checked = false;
97 + }
98 + if (sidebar === 'visible') {
99 + sidebar_toggle.checked = true;
100 + } else {
101 + html.classList.remove('sidebar-visible');
102 + }
103 + </script>
104 +
105 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
106 + <!-- populated by js -->
107 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
108 + <noscript>
109 + <iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
110 + </noscript>
111 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
112 + <div class="sidebar-resize-indicator"></div>
113 + </div>
114 + </nav>
115 +
116 + <div id="mdbook-page-wrapper" class="page-wrapper">
117 +
118 + <div class="page">
119 + <div id="mdbook-menu-bar-hover-placeholder"></div>
120 + <div id="mdbook-menu-bar" class="menu-bar sticky">
121 + <div class="left-buttons">
122 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
123 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
124 + </label>
125 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
126 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
127 + </button>
128 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
134 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
135 + </ul>
136 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
137 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
138 + </button>
139 + </div>
140 +
141 + <h1 class="menu-title">Documentation gitrust</h1>
142 +
143 + <div class="right-buttons">
144 + <a href="print.html" title="Print this book" aria-label="Print this book">
145 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
146 + </a>
147 +
148 + </div>
149 + </div>
150 +
151 + <div id="mdbook-search-wrapper" class="hidden">
152 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
153 + <div class="search-wrapper">
154 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
155 + <div class="spinner-wrapper">
156 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
157 + </div>
158 + </div>
159 + </form>
160 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
161 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
162 + <ul id="mdbook-searchresults">
163 + </ul>
164 + </div>
165 + </div>
166 +
167 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
168 + <script>
169 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
170 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
171 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
172 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
173 + });
174 + </script>
175 +
176 + <div id="mdbook-content" class="content">
177 + <main>
178 + <h1 id="introduction"><a class="header" href="#introduction">Introduction</a></h1>
179 +<h2 id="quest-ce-que-gitrust-"><a class="header" href="#quest-ce-que-gitrust-">Qu’est-ce que gitrust ?</a></h2>
180 +<p><strong>gitrust</strong> est une forge Git self-hosted écrite en Rust, conçue pour les équipes de 3 à 20 personnes qui souhaitent maîtriser leur infrastructure de développement. Elle offre un serveur HTTP (<code>:4000</code>) et SSH (<code>:2222</code>), une CI intégrée via Dagger, la génération de SBOM avec Syft et l’intégration Dependency-Track, une gestion fine des permissions (4 rôles), la double authentification, des labels hiérarchiques et une conformité ANSSI PA-074.</p>
181 +<p>Une instance publique de démonstration est accessible sur <a href="https://demo.gitrust.eu">demo.gitrust.eu</a>.</p>
182 +<h2 id="à-qui-sadresse-cette-documentation-"><a class="header" href="#à-qui-sadresse-cette-documentation-">À qui s’adresse cette documentation ?</a></h2>
183 +<p>Cette documentation est organisée en quatre parties selon leurs publics respectifs :</p>
184 +<ul>
185 +<li><strong>Manuel utilisateur</strong> — pour les développeurs qui <em>utilisent</em> une instance gitrust existante : push/pull, pull requests, issues, CI, notifications. Prérequis : savoir utiliser Git en ligne de commande.</li>
186 +<li><strong>Manuel d’administration</strong> — pour les ops et self-hosters qui déploient, configurent et maintiennent une instance en production. Prérequis : administration Linux, notions de réseau et TLS.</li>
187 +<li><strong>Manuel développeur</strong> — pour les contributeurs au code gitrust et les développeurs qui construisent des intégrations sur l’API publique. Prérequis : Rust (pour contribuer) ou un langage client (pour l’API).</li>
188 +<li><strong>Bibliothèque de templates</strong> — pour tous les profils, lorsqu’ils cherchent un point de départ prêt à l’emploi (fichiers <code>.env</code>, <code>docker-compose.yml</code>, configs reverse-proxy, scripts de backup, exemples de clients API).</li>
189 +</ul>
190 +<h2 id="comment-cette-documentation-est-elle-structurée-"><a class="header" href="#comment-cette-documentation-est-elle-structurée-">Comment cette documentation est-elle structurée ?</a></h2>
191 +<p>Cette documentation suit le cadre <strong>Diátaxis</strong>, qui distingue quatre types de contenu selon le besoin du lecteur :</p>
192 +<div class="table-wrapper">
193 +<table>
194 +<thead>
195 +<tr><th>Type</th><th>Quand l’utiliser</th><th>Exemples</th></tr>
196 +</thead>
197 +<tbody>
198 +<tr><td><strong>Tutoriels</strong></td><td>Quand vous apprenez</td><td>Installer gitrust, créer votre premier dépôt</td></tr>
199 +<tr><td><strong>Guides pratiques</strong></td><td>Quand vous résolvez un problème précis</td><td>Configurer SMTP, gérer les clés SSH</td></tr>
200 +<tr><td><strong>Référence</strong></td><td>Quand vous cherchez une information technique</td><td>Variables d’environnement, schéma API REST</td></tr>
201 +<tr><td><strong>Explication</strong></td><td>Quand vous voulez comprendre le pourquoi</td><td>Architecture des crates, modèle RBAC</td></tr>
202 +</tbody>
203 +</table>
204 +</div>
205 +<p>Chaque manuel (utilisateur, administration, développeur) contient ces quatre types de contenu organisés de manière indépendante.</p>
206 +<h2 id="naviguer-dans-la-documentation"><a class="header" href="#naviguer-dans-la-documentation">Naviguer dans la documentation</a></h2>
207 +<ul>
208 +<li><a href="#manuel-utilisateur">Manuel utilisateur</a> — collaborer sur gitrust en tant que développeur</li>
209 +<li><a href="#manuel-dadministration">Manuel d’administration</a> — déployer et exploiter une instance</li>
210 +<li><a href="#manuel-développeur">Manuel développeur</a> — contribuer au code ou consommer l’API</li>
211 +<li><a href="#bibliothèque-de-templates-gitrust">Bibliothèque de templates</a> — configs et scripts copiables</li>
212 +</ul>
213 +<div style="break-before: page; page-break-before: always;"></div>
214 +<h1 id="manuel-utilisateur"><a class="header" href="#manuel-utilisateur">Manuel utilisateur</a></h1>
215 +<p>Ce manuel t’accompagne depuis ta première connexion à une instance gitrust jusqu’à l’autonomie complète : pousser du code, collaborer via les pull requests, gérer les issues et automatiser tes workflows avec la CI intégrée. Tu n’as pas besoin d’administrer ni de comprendre l’architecture interne — ce manuel suppose seulement que tu sais utiliser Git en ligne de commande.</p>
216 +<h2 id="parcours-dapprentissage"><a class="header" href="#parcours-dapprentissage">Parcours d’apprentissage</a></h2>
217 +<p>Le manuel est structuré comme un <strong>parcours progressif</strong> de 4 tutoriels. Chaque tutoriel te laisse dans un état stable, vérifié, avant de passer au suivant. L’aide fournie recule d’un cran à chaque étape (du copier-coller intégral vers la composition autonome).</p>
218 +<pre class="mermaid">graph LR
219 + A[Compte créé] --&gt; B[01-premier-pas&lt;br/&gt;20 min]
220 + B --&gt; C[02-cloner-pousser&lt;br/&gt;25 min]
221 + C --&gt; D[03-collaborer&lt;br/&gt;25 min]
222 + D --&gt; E[04-automatiser-ci&lt;br/&gt;20 min]
223 + E --&gt; F[Utilisateur autonome]
224 +</pre>
225 +
226 +<blockquote>
227 +<p><strong>Checkpoint de parcours</strong> : avant de passer au tutoriel 02, tu dois pouvoir te connecter à gitrust, voir ton dépôt dans l’interface et l’accès SSH configuré. Si ce n’est pas le cas, relis le tutoriel 01.</p>
228 +</blockquote>
229 +<blockquote>
230 +<p><strong>Checkpoint de parcours</strong> : avant le tutoriel 03, tu dois avoir poussé au moins un commit sur ta branche via SSH. Si ce n’est pas le cas, relis le tutoriel 02.</p>
231 +</blockquote>
232 +<blockquote>
233 +<p><strong>Checkpoint de parcours</strong> : avant le tutoriel 04, tu dois avoir ouvert et mergé une pull request. Si ce n’est pas le cas, relis le tutoriel 03.</p>
234 +</blockquote>
235 +<hr>
236 +<h2 id="tutoriels--apprendre-en-faisant"><a class="header" href="#tutoriels--apprendre-en-faisant">Tutoriels — apprendre en faisant</a></h2>
237 +<p>Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suis-les dans l’ordre — chacun suppose le précédent complété.</p>
238 +<ul>
239 +<li><a href="#premiers-pas--active-la-2fa-ajoute-ta-clé-ssh-et-crée-ton-premier-dépôt">01 — Premiers pas : 2FA, clé SSH, premier dépôt</a> — ~20 min</li>
240 +<li><a href="#02--cloner-et-pousser-du-code">02 — Cloner et pousser du code</a> — ~25 min</li>
241 +<li><a href="#03--collaborer--équipes-issues-pull-requests">03 — Collaborer : équipes, issues, pull requests</a> — ~25 min</li>
242 +<li><a href="#04--automatiser-avec-la-ci">04 — Automatiser avec la CI</a> — ~20 min</li>
243 +</ul>
244 +<hr>
245 +<h2 id="how-to--recettes-pour-les-tâches-courantes"><a class="header" href="#how-to--recettes-pour-les-tâches-courantes">How-to — recettes pour les tâches courantes</a></h2>
246 +<p>Les how-to répondent à « comment faire X » sans explication de fond. Tu peux les consulter dans n’importe quel ordre selon ton besoin immédiat.</p>
247 +<p>Ces guides supposent que tu as suivi le parcours tutoriels. Ils ne répètent pas les étapes de base.</p>
248 +<ul>
249 +<li><a href="#gérer-ses-clés-ssh">Gérer ses clés SSH</a></li>
250 +<li><a href="#configurer-la-double-authentification-2fa">Configurer la 2FA</a></li>
251 +<li><a href="#créer-un-personal-access-token">Créer un Personal Access Token</a></li>
252 +<li><a href="#gérer-les-équipes-et-les-permissions">Gérer les équipes et permissions</a></li>
253 +<li><a href="#ouvrir-une-pull-request">Ouvrir une pull request</a></li>
254 +<li><a href="#stratégies-de-fusion-ff--squash--merge-commit">Fusionner : fast-forward, squash, merge commit</a></li>
255 +<li><a href="#utiliser-les-labels-et-les-issues">Utiliser les labels hiérarchiques</a></li>
256 +<li><a href="#importer-un-dépôt-externe">Importer un dépôt externe</a></li>
257 +<li><a href="#consulter-le-sbom-dun-dépôt">Consulter le SBOM de ton projet</a></li>
258 +</ul>
259 +<hr>
260 +<h2 id="référence--informations-techniques-exactes"><a class="header" href="#référence--informations-techniques-exactes">Référence — informations techniques exactes</a></h2>
261 +<p>La référence est destinée à la consultation ponctuelle, pas à la lecture linéaire. Elle documente les formats, schémas et comportements exacts.</p>
262 +<ul>
263 +<li><a href="#modèle-de-permissions-4-rôles">Modèle de permissions (4 rôles)</a></li>
264 +<li><a href="#api-rest-v1">API REST v1 — authentification, pagination, codes d’erreur</a></li>
265 +<li><a href="#schéma-du-fichier-gitrust-ciyml">Schéma YAML <code>.gitrust-ci.yml</code> (Easy Mode)</a></li>
266 +<li><a href="#markdown-et-syntaxe-supportée">Syntaxe Markdown supportée</a></li>
267 +<li><a href="#notifications">Notifications : SSE, e-mail, préférences</a></li>
268 +</ul>
269 +<hr>
270 +<h2 id="explication--comprendre-le-pourquoi"><a class="header" href="#explication--comprendre-le-pourquoi">Explication — comprendre le pourquoi</a></h2>
271 +<p>Les explanations t’aident à construire des modèles mentaux durables. Lis-les quand tu veux comprendre <em>pourquoi</em> gitrust fonctionne ainsi, pas seulement <em>comment</em>.</p>
272 +<ul>
273 +<li><a href="#modèle-de-collaboration-sur-gitrust">Modèle de collaboration gitrust</a></li>
274 +<li><a href="#sécurité-côté-utilisateur">Sécurité utilisateur : 2FA, PAT, audit log</a></li>
275 +<li><a href="#cycle-de-vie-dune-pull-request">Cycle de vie d’une pull request</a></li>
276 +</ul>
277 +<div style="break-before: page; page-break-before: always;"></div>
278 +<h1 id="tutoriels"><a class="header" href="#tutoriels">Tutoriels</a></h1>
279 +<blockquote>
280 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
281 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
282 +</blockquote>
283 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
284 +<ul>
285 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
286 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
287 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
288 +</ul>
289 +<div style="break-before: page; page-break-before: always;"></div>
290 +<h1 id="premiers-pas--active-la-2fa-ajoute-ta-clé-ssh-et-crée-ton-premier-dépôt"><a class="header" href="#premiers-pas--active-la-2fa-ajoute-ta-clé-ssh-et-crée-ton-premier-dépôt">Premiers pas : active la 2FA, ajoute ta clé SSH et crée ton premier dépôt</a></h1>
291 +<h2 id="objectifs"><a class="header" href="#objectifs">Objectifs</a></h2>
292 +<p>À la fin de ce tutoriel, tu sauras :</p>
293 +<ul>
294 +<li><strong>O1. Activer</strong> l’authentification à deux facteurs (2FA) sur ton compte gitrust</li>
295 +<li><strong>O2. Enregistrer</strong> une clé SSH publique dans ton profil pour te connecter sans mot de passe</li>
296 +<li><strong>O3. Créer</strong> un dépôt vide et vérifier qu’il est accessible à l’URL attendue</li>
297 +</ul>
298 +<h2 id="pré-requis"><a class="header" href="#pré-requis">Pré-requis</a></h2>
299 +<ul>
300 +<li><strong>Technique</strong> : un compte gitrust existant (e-mail + mot de passe), Git installé (<code>git --version</code> répond), une paire de clés SSH générée ou à générer (<code>ssh-keygen</code>)</li>
301 +<li><strong>Pédagogique</strong> : aucun tutoriel préalable requis — c’est le point de départ du parcours</li>
302 +<li><strong>Temps estimé</strong> : ~20 minutes</li>
303 +</ul>
304 +<h2 id="vue-densemble"><a class="header" href="#vue-densemble">Vue d’ensemble</a></h2>
305 +<p>Avant de taper la première commande, prenons 2 minutes pour comprendre ce que tu vas faire et pourquoi.</p>
306 +<p><strong>Un dépôt</strong> (<em>repository</em>), c’est comme un dossier de projet avec tout l’historique de ses modifications — une boîte d’archives vivante que Git surveille. Sur gitrust, ce dossier vit sur le serveur et peut être partagé avec ton équipe.</p>
307 +<p><strong>Une clé SSH</strong> fonctionne comme une serrure et une clé : tu gardes la clé privée sur ta machine (ne la partage jamais), et tu déposes la clé publique dans ton profil gitrust. Ensuite, Git se connecte automatiquement sans te redemander de mot de passe — gitrust reconnaît ta machine.</p>
308 +<p><strong>La 2FA</strong> (authentification à deux facteurs) ajoute un second verrou à ton compte : même si quelqu’un vole ton mot de passe, il ne peut pas se connecter sans le code de ton téléphone. C’est une protection essentielle pour tout compte qui héberge du code.</p>
309 +<p>Voici le flux que tu vas configurer :</p>
310 +<pre class="mermaid">sequenceDiagram
311 + participant T as Ton navigateur
312 + participant G as gitrust (HTTPS :4000)
313 + participant S as Ton terminal (SSH :2222)
314 +
315 + T-&gt;&gt;G: Connexion avec e-mail + mdp + code 2FA
316 + T-&gt;&gt;G: Dépôt de la clé SSH publique
317 + S-&gt;&gt;G: git push via SSH (authentifié par clé)
318 + G--&gt;&gt;T: Dépôt visible dans l'interface web
319 +</pre>
320 +
321 +<hr>
322 +<h2 id="étape-1--connecte-toi-et-accède-aux-paramètres-de-sécurité"><a class="header" href="#étape-1--connecte-toi-et-accède-aux-paramètres-de-sécurité">Étape 1 : Connecte-toi et accède aux paramètres de sécurité</a></h2>
323 +<p>Ouvre ton navigateur et va sur l’URL de ton instance gitrust (par exemple <code>https://demo.gitrust.eu</code>). Connecte-toi avec ton e-mail et ton mot de passe.</p>
324 +<p>Une fois connecté, clique sur ton avatar en haut à droite, puis sur <strong>Paramètres</strong> (<code>/settings</code>). Dans le menu de gauche, sélectionne <strong>Sécurité</strong>.</p>
325 +<p><strong>Checkpoint</strong> : tu dois voir la page <em>Sécurité</em> avec une section « Authentification à deux facteurs » et le statut « Désactivée ». Si tu ne la vois pas, vérifie que tu es bien connecté avec le bon compte.</p>
326 +<hr>
327 +<h2 id="étape-2--active-la-2fa-avec-une-application-dauthentification"><a class="header" href="#étape-2--active-la-2fa-avec-une-application-dauthentification">Étape 2 : Active la 2FA avec une application d’authentification</a></h2>
328 +<p>Sur la page <em>Sécurité</em>, clique sur <strong>Activer la 2FA</strong>. gitrust affiche un QR code.</p>
329 +<ol>
330 +<li>Ouvre ton application d’authentification (Google Authenticator, Authy, ou tout équivalent compatible TOTP).</li>
331 +<li>Scanne le QR code avec l’application.</li>
332 +<li>L’application affiche un code à 6 chiffres qui change toutes les 30 secondes.</li>
333 +<li>Saisis ce code dans le champ <strong>Code de vérification</strong> et clique <strong>Confirmer</strong>.</li>
334 +</ol>
335 +<p>Sortie attendue (message dans l’interface) :</p>
336 +<pre><code>La 2FA a été activée avec succès.
337 +Conservez vos codes de secours dans un endroit sûr.
338 +</code></pre>
339 +<p>gitrust affiche également <strong>10 codes de secours</strong> (format <code>XXXX-XXXX</code>). Copie-les et conserve-les hors ligne — ils te permettent de récupérer l’accès si tu perds ton téléphone.</p>
340 +<p><strong>Checkpoint</strong> : retourne sur <em>Paramètres → Sécurité</em>. La section 2FA doit maintenant afficher « <strong>Activée</strong> » en vert. Si elle affiche toujours « Désactivée », recommence l’étape en t’assurant que le code à 6 chiffres est saisi avant qu’il expire.</p>
341 +<hr>
342 +<h2 id="étape-3--génère-ou-localise-ta-clé-ssh"><a class="header" href="#étape-3--génère-ou-localise-ta-clé-ssh">Étape 3 : Génère ou localise ta clé SSH</a></h2>
343 +<p>Si tu n’as pas encore de paire de clés SSH, génère-en une maintenant dans ton terminal :</p>
344 +<pre><code class="language-bash">ssh-keygen -t ed25519 -C "mon-compte@example.com"
345 +</code></pre>
346 +<p>Sortie attendue :</p>
347 +<pre><code>Generating public/private ed25519 key pair.
348 +Enter file in which to save the key (/home/toi/.ssh/id_ed25519):
349 +Enter passphrase (empty for no passphrase):
350 +Enter same passphrase again:
351 +Your identification has been saved in /home/toi/.ssh/id_ed25519
352 +Your public key has been saved in /home/toi/.ssh/id_ed25519.pub
353 +The key fingerprint is:
354 +SHA256:xXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXx mon-compte@example.com
355 +</code></pre>
356 +<p>Appuie sur Entrée pour accepter le chemin par défaut. Tu peux choisir une passphrase ou laisser vide (appuie deux fois sur Entrée). Une passphrase ajoute une couche de sécurité.</p>
357 +<p>Affiche maintenant ta <strong>clé publique</strong> (le fichier <code>.pub</code> — celui-ci est fait pour être partagé) :</p>
358 +<pre><code class="language-bash">cat ~/.ssh/id_ed25519.pub
359 +</code></pre>
360 +<p>Sortie attendue (une seule ligne) :</p>
361 +<pre><code>ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mon-compte@example.com
362 +</code></pre>
363 +<p>Copie cette ligne entière dans le presse-papier.</p>
364 +<p><strong>Checkpoint</strong> : la commande <code>cat</code> doit afficher une ligne commençant par <code>ssh-ed25519</code> (ou <code>ssh-rsa</code> si tu as une clé plus ancienne). Si elle affiche « No such file or directory », la génération n’a pas abouti — relance <code>ssh-keygen</code>.</p>
365 +<hr>
366 +<h2 id="étape-4--enregistre-la-clé-ssh-dans-ton-profil-gitrust"><a class="header" href="#étape-4--enregistre-la-clé-ssh-dans-ton-profil-gitrust">Étape 4 : Enregistre la clé SSH dans ton profil gitrust</a></h2>
367 +<p>Dans ton navigateur, retourne sur <em>Paramètres</em> et clique sur <strong>Clés SSH</strong> dans le menu de gauche.</p>
368 +<p>Clique sur <strong>Ajouter une clé SSH</strong>. Un formulaire apparaît :</p>
369 +<ul>
370 +<li><strong>Titre</strong> : donne un nom descriptif à cette clé (ex. <code>laptop-perso-2026</code>, <code>poste-bureau</code>)</li>
371 +<li><strong>Clé</strong> : colle la ligne copiée à l’étape précédente</li>
372 +</ul>
373 +<p>Clique <strong>Enregistrer la clé</strong>.</p>
374 +<p>Sortie attendue (message dans l’interface) :</p>
375 +<pre><code>Clé SSH ajoutée avec succès.
376 +</code></pre>
377 +<p>Teste maintenant la connexion SSH depuis ton terminal :</p>
378 +<pre><code class="language-bash">ssh -T git@demo.gitrust.eu -p 2222
379 +</code></pre>
380 +<p>Sortie attendue :</p>
381 +<pre><code>Bonjour tonpseudo ! Vous êtes authentifié, mais gitrust ne fournit pas d'accès shell.
382 +</code></pre>
383 +<p><strong>Checkpoint</strong> : si tu obtiens ce message, ta clé SSH est correctement enregistrée. Si tu obtiens <code>Permission denied (publickey)</code>, vérifie que tu as bien copié la clé <strong>publique</strong> (<code>.pub</code>) et non la clé privée. Consulte la section « Et si ça ne marche pas » ci-dessous.</p>
384 +<hr>
385 +<h2 id="étape-5--crée-ton-premier-dépôt-vide"><a class="header" href="#étape-5--crée-ton-premier-dépôt-vide">Étape 5 : Crée ton premier dépôt vide</a></h2>
386 +<p>Dans ton navigateur, clique sur le <strong>+</strong> en haut à droite (ou navigue vers <code>/repo/new</code>).</p>
387 +<p>Remplis le formulaire :</p>
388 +<ul>
389 +<li><strong>Propriétaire</strong> : ton pseudo</li>
390 +<li><strong>Nom du dépôt</strong> : <code>mon-premier-depot</code> (lettres, chiffres, tirets uniquement)</li>
391 +<li><strong>Visibilité</strong> : Privé (ou Public selon ta préférence)</li>
392 +<li><strong>Initialiser le dépôt</strong> : coche « Ajouter un README »</li>
393 +</ul>
394 +<p>Clique sur <strong>Créer le dépôt</strong>.</p>
395 +<p>Sortie attendue : gitrust te redirige vers la page du dépôt à l’URL :</p>
396 +<pre><code>https://demo.gitrust.eu/tonpseudo/mon-premier-depot
397 +</code></pre>
398 +<p>La page affiche un fichier <code>README.md</code> avec le nom du dépôt, et la barre latérale montre 1 commit, 1 branche (<code>main</code>).</p>
399 +<p><strong>Checkpoint</strong> : note l’URL affichée dans la barre d’adresse de ton navigateur. Elle doit correspondre au patron <code>https://&lt;instance&gt;/&lt;pseudo&gt;/&lt;nom-depot&gt;</code>. Si tu vois une erreur 404 ou 500, relis le formulaire de création.</p>
400 +<hr>
401 +<h2 id="récapitulatif"><a class="header" href="#récapitulatif">Récapitulatif</a></h2>
402 +<ul>
403 +<li>✓ <strong>O1 accompli</strong> : la 2FA est activée sur ton compte — tu l’as vérifiée sur la page <em>Sécurité</em> qui affiche « Activée »</li>
404 +<li>✓ <strong>O2 accompli</strong> : ta clé SSH publique est enregistrée — tu l’as confirmée avec <code>ssh -T git@... -p 2222</code> qui a répondu « Vous êtes authentifié »</li>
405 +<li>✓ <strong>O3 accompli</strong> : ton premier dépôt est créé et visible à l’URL <code>/&lt;pseudo&gt;/mon-premier-depot</code></li>
406 +</ul>
407 +<hr>
408 +<h2 id="et-si-ça-ne-marche-pas"><a class="header" href="#et-si-ça-ne-marche-pas">Et si ça ne marche pas</a></h2>
409 +<div class="table-wrapper">
410 +<table>
411 +<thead>
412 +<tr><th>Symptôme</th><th>Cause probable</th><th>Correction</th></tr>
413 +</thead>
414 +<tbody>
415 +<tr><td><code>Permission denied (publickey)</code> lors du test SSH</td><td>Tu as collé la clé privée au lieu de la clé publique, ou le fichier <code>.pub</code> ne correspond pas à la clé active</td><td>Dans gitrust, supprime la clé ajoutée. Retourne au terminal et exécute <code>ssh-add -l</code> pour voir les clés actives. Recopie la bonne clé <code>.pub</code> avec <code>cat ~/.ssh/id_ed25519.pub</code></td></tr>
416 +<tr><td><code>Connection refused</code> lors du test SSH</td><td>Le port SSH de l’instance est différent de 2222, ou l’instance est inaccessible</td><td>Vérifie avec l’administrateur le port SSH réel. Essaie <code>ssh -T git@&lt;instance&gt; -p 22</code> en alternative</td></tr>
417 +<tr><td>Le code 2FA est refusé alors qu’il semble correct</td><td>L’horloge de ton téléphone est désynchronisée (décalage &gt; 30 s)</td><td>Active la synchronisation automatique de l’heure sur ton téléphone (<em>Paramètres → Date et heure → Automatique</em>). Réessaie immédiatement après</td></tr>
418 +<tr><td>Le dépôt redirige vers une erreur 422 lors de la création</td><td>Le nom contient des caractères interdits (espaces, accents, <code>/</code>)</td><td>Utilise uniquement des lettres non accentuées, chiffres et tirets. Évite les points en début ou fin de nom</td></tr>
419 +</tbody>
420 +</table>
421 +</div>
422 +<hr>
423 +<h2 id="prochaine-étape"><a class="header" href="#prochaine-étape">Prochaine étape</a></h2>
424 +<p>→ <a href="#02--cloner-et-pousser-du-code">02 — Cloner et pousser du code</a> : clone ton dépôt en local avec SSH, fais ton premier commit et pousse-le sur gitrust (~25 min)</p>
425 +<div style="break-before: page; page-break-before: always;"></div>
426 +<h1 id="02--cloner-et-pousser-du-code"><a class="header" href="#02--cloner-et-pousser-du-code">02 — Cloner et pousser du code</a></h1>
427 +<blockquote>
428 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
429 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
430 +</blockquote>
431 +<h2 id="todo-1"><a class="header" href="#todo-1">TODO</a></h2>
432 +<ul>
433 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
434 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
435 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
436 +</ul>
437 +<div style="break-before: page; page-break-before: always;"></div>
438 +<h1 id="03--collaborer--équipes-issues-pull-requests"><a class="header" href="#03--collaborer--équipes-issues-pull-requests">03 — Collaborer : équipes, issues, pull requests</a></h1>
439 +<blockquote>
440 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
441 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
442 +</blockquote>
443 +<h2 id="todo-2"><a class="header" href="#todo-2">TODO</a></h2>
444 +<ul>
445 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
446 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
447 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
448 +</ul>
449 +<div style="break-before: page; page-break-before: always;"></div>
450 +<h1 id="04--automatiser-avec-la-ci"><a class="header" href="#04--automatiser-avec-la-ci">04 — Automatiser avec la CI</a></h1>
451 +<blockquote>
452 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
453 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
454 +</blockquote>
455 +<h2 id="todo-3"><a class="header" href="#todo-3">TODO</a></h2>
456 +<ul>
457 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
458 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
459 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
460 +</ul>
461 +<div style="break-before: page; page-break-before: always;"></div>
462 +<h1 id="guides-pratiques"><a class="header" href="#guides-pratiques">Guides pratiques</a></h1>
463 +<blockquote>
464 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
465 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
466 +</blockquote>
467 +<h2 id="todo-4"><a class="header" href="#todo-4">TODO</a></h2>
468 +<ul>
469 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
470 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
471 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
472 +</ul>
473 +<div style="break-before: page; page-break-before: always;"></div>
474 +<h1 id="gérer-ses-clés-ssh"><a class="header" href="#gérer-ses-clés-ssh">Gérer ses clés SSH</a></h1>
475 +<blockquote>
476 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
477 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
478 +</blockquote>
479 +<h2 id="todo-5"><a class="header" href="#todo-5">TODO</a></h2>
480 +<ul>
481 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
482 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
483 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
484 +</ul>
485 +<div style="break-before: page; page-break-before: always;"></div>
486 +<h1 id="configurer-la-double-authentification-2fa"><a class="header" href="#configurer-la-double-authentification-2fa">Configurer la double authentification (2FA)</a></h1>
487 +<blockquote>
488 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
489 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
490 +</blockquote>
491 +<h2 id="todo-6"><a class="header" href="#todo-6">TODO</a></h2>
492 +<ul>
493 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
494 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
495 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
496 +</ul>
497 +<div style="break-before: page; page-break-before: always;"></div>
498 +<h1 id="créer-un-personal-access-token"><a class="header" href="#créer-un-personal-access-token">Créer un Personal Access Token</a></h1>
499 +<blockquote>
500 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
501 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
502 +</blockquote>
503 +<h2 id="todo-7"><a class="header" href="#todo-7">TODO</a></h2>
504 +<ul>
505 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
506 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
507 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
508 +</ul>
509 +<div style="break-before: page; page-break-before: always;"></div>
510 +<h1 id="gérer-les-équipes-et-les-permissions"><a class="header" href="#gérer-les-équipes-et-les-permissions">Gérer les équipes et les permissions</a></h1>
511 +<blockquote>
512 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
513 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
514 +</blockquote>
515 +<h2 id="todo-8"><a class="header" href="#todo-8">TODO</a></h2>
516 +<ul>
517 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
518 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
519 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
520 +</ul>
521 +<div style="break-before: page; page-break-before: always;"></div>
522 +<h1 id="ouvrir-une-pull-request"><a class="header" href="#ouvrir-une-pull-request">Ouvrir une pull request</a></h1>
523 +<blockquote>
524 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
525 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
526 +</blockquote>
527 +<h2 id="todo-9"><a class="header" href="#todo-9">TODO</a></h2>
528 +<ul>
529 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
530 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
531 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
532 +</ul>
533 +<div style="break-before: page; page-break-before: always;"></div>
534 +<h1 id="stratégies-de-fusion-ff--squash--merge-commit"><a class="header" href="#stratégies-de-fusion-ff--squash--merge-commit">Stratégies de fusion (ff / squash / merge commit)</a></h1>
535 +<blockquote>
536 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
537 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
538 +</blockquote>
539 +<h2 id="todo-10"><a class="header" href="#todo-10">TODO</a></h2>
540 +<ul>
541 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
542 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
543 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
544 +</ul>
545 +<div style="break-before: page; page-break-before: always;"></div>
546 +<h1 id="utiliser-les-labels-et-les-issues"><a class="header" href="#utiliser-les-labels-et-les-issues">Utiliser les labels et les issues</a></h1>
547 +<blockquote>
548 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
549 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
550 +</blockquote>
551 +<h2 id="todo-11"><a class="header" href="#todo-11">TODO</a></h2>
552 +<ul>
553 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
554 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
555 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
556 +</ul>
557 +<div style="break-before: page; page-break-before: always;"></div>
558 +<h1 id="importer-un-dépôt-externe"><a class="header" href="#importer-un-dépôt-externe">Importer un dépôt externe</a></h1>
559 +<blockquote>
560 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
561 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
562 +</blockquote>
563 +<h2 id="todo-12"><a class="header" href="#todo-12">TODO</a></h2>
564 +<ul>
565 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
566 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
567 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
568 +</ul>
569 +<div style="break-before: page; page-break-before: always;"></div>
570 +<h1 id="consulter-le-sbom-dun-dépôt"><a class="header" href="#consulter-le-sbom-dun-dépôt">Consulter le SBOM d’un dépôt</a></h1>
571 +<blockquote>
572 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
573 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
574 +</blockquote>
575 +<h2 id="todo-13"><a class="header" href="#todo-13">TODO</a></h2>
576 +<ul>
577 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
578 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
579 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
580 +</ul>
581 +<div style="break-before: page; page-break-before: always;"></div>
582 +<h1 id="référence"><a class="header" href="#référence">Référence</a></h1>
583 +<blockquote>
584 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
585 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
586 +</blockquote>
587 +<h2 id="todo-14"><a class="header" href="#todo-14">TODO</a></h2>
588 +<ul>
589 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
590 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
591 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
592 +</ul>
593 +<div style="break-before: page; page-break-before: always;"></div>
594 +<h1 id="modèle-de-permissions-4-rôles"><a class="header" href="#modèle-de-permissions-4-rôles">Modèle de permissions (4 rôles)</a></h1>
595 +<blockquote>
596 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
597 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
598 +</blockquote>
599 +<h2 id="todo-15"><a class="header" href="#todo-15">TODO</a></h2>
600 +<ul>
601 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
602 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
603 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
604 +</ul>
605 +<div style="break-before: page; page-break-before: always;"></div>
606 +<h1 id="api-rest-v1"><a class="header" href="#api-rest-v1">API REST v1</a></h1>
607 +<blockquote>
608 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
609 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
610 +</blockquote>
611 +<h2 id="todo-16"><a class="header" href="#todo-16">TODO</a></h2>
612 +<ul>
613 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
614 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
615 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
616 +</ul>
617 +<div style="break-before: page; page-break-before: always;"></div>
618 +<h1 id="schéma-du-fichier-gitrust-ciyml"><a class="header" href="#schéma-du-fichier-gitrust-ciyml">Schéma du fichier .gitrust-ci.yml</a></h1>
619 +<blockquote>
620 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
621 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
622 +</blockquote>
623 +<h2 id="todo-17"><a class="header" href="#todo-17">TODO</a></h2>
624 +<ul>
625 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
626 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
627 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
628 +</ul>
629 +<div style="break-before: page; page-break-before: always;"></div>
630 +<h1 id="markdown-et-syntaxe-supportée"><a class="header" href="#markdown-et-syntaxe-supportée">Markdown et syntaxe supportée</a></h1>
631 +<blockquote>
632 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
633 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
634 +</blockquote>
635 +<h2 id="todo-18"><a class="header" href="#todo-18">TODO</a></h2>
636 +<ul>
637 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
638 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
639 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
640 +</ul>
641 +<div style="break-before: page; page-break-before: always;"></div>
642 +<h1 id="notifications"><a class="header" href="#notifications">Notifications</a></h1>
643 +<blockquote>
644 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
645 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
646 +</blockquote>
647 +<h2 id="todo-19"><a class="header" href="#todo-19">TODO</a></h2>
648 +<ul>
649 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
650 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
651 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
652 +</ul>
653 +<div style="break-before: page; page-break-before: always;"></div>
654 +<h1 id="explication"><a class="header" href="#explication">Explication</a></h1>
655 +<blockquote>
656 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
657 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
658 +</blockquote>
659 +<h2 id="todo-20"><a class="header" href="#todo-20">TODO</a></h2>
660 +<ul>
661 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
662 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
663 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
664 +</ul>
665 +<div style="break-before: page; page-break-before: always;"></div>
666 +<h1 id="modèle-de-collaboration-sur-gitrust"><a class="header" href="#modèle-de-collaboration-sur-gitrust">Modèle de collaboration sur gitrust</a></h1>
667 +<blockquote>
668 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
669 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
670 +</blockquote>
671 +<h2 id="todo-21"><a class="header" href="#todo-21">TODO</a></h2>
672 +<ul>
673 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
674 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
675 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
676 +</ul>
677 +<div style="break-before: page; page-break-before: always;"></div>
678 +<h1 id="sécurité-côté-utilisateur"><a class="header" href="#sécurité-côté-utilisateur">Sécurité côté utilisateur</a></h1>
679 +<blockquote>
680 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
681 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
682 +</blockquote>
683 +<h2 id="todo-22"><a class="header" href="#todo-22">TODO</a></h2>
684 +<ul>
685 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
686 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
687 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
688 +</ul>
689 +<div style="break-before: page; page-break-before: always;"></div>
690 +<h1 id="cycle-de-vie-dune-pull-request"><a class="header" href="#cycle-de-vie-dune-pull-request">Cycle de vie d’une pull request</a></h1>
691 +<blockquote>
692 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
693 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
694 +</blockquote>
695 +<h2 id="todo-23"><a class="header" href="#todo-23">TODO</a></h2>
696 +<ul>
697 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
698 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
699 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
700 +</ul>
701 +<div style="break-before: page; page-break-before: always;"></div>
702 +<h1 id="manuel-dadministration"><a class="header" href="#manuel-dadministration">Manuel d’administration</a></h1>
703 +<p>Ce manuel s’adresse aux opérateurs et self-hosters qui déploient, configurent et maintiennent une instance gitrust en production. Il couvre l’intégralité du cycle de vie d’une instance : premier démarrage, mise en production, sauvegarde, mise à jour et dépannage. Il suppose des connaissances en administration Linux, en réseau et en TLS — il n’explique pas ces prérequis.</p>
704 +<h2 id="parcours-dapprentissage-1"><a class="header" href="#parcours-dapprentissage-1">Parcours d’apprentissage</a></h2>
705 +<p>Le parcours administrateur est structuré en 4 tutoriels qui représentent environ 3 heures au total. L’étayage est dégressif : le premier tutoriel fournit tout clé en main, le dernier demande de composer soi-même à partir des recettes disponibles.</p>
706 +<pre class="mermaid">graph LR
707 + A[VM prête&lt;br/&gt;Docker installé] --&gt; B[01-installation-docker&lt;br/&gt;30 min]
708 + B --&gt; C[02-installation-systemd&lt;br/&gt;45 min]
709 + C --&gt; D[03-premier-demarrage&lt;br/&gt;20 min]
710 + D --&gt; E[04-mise-en-production&lt;br/&gt;90 min]
711 + E --&gt; F[Admin opérationnel]
712 +</pre>
713 +
714 +<blockquote>
715 +<p><strong>Checkpoint de parcours</strong> : avant de passer au tutoriel 02, vous devez avoir une instance gitrust accessible sur <code>http://localhost:4000</code> avec un compte administrateur fonctionnel. Si ce n’est pas le cas, relisez le tutoriel 01.</p>
716 +</blockquote>
717 +<blockquote>
718 +<p><strong>Checkpoint de parcours</strong> : avant le tutoriel 04, vous devez avoir une instance démarrée avec une configuration SMTP et un reverse-proxy TLS opérationnel. Si ce n’est pas le cas, relisez le tutoriel 03.</p>
719 +</blockquote>
720 +<hr>
721 +<h2 id="tutoriels--apprendre-en-faisant-1"><a class="header" href="#tutoriels--apprendre-en-faisant-1">Tutoriels — apprendre en faisant</a></h2>
722 +<p>Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suivez-les dans l’ordre — chacun suppose le précédent complété.</p>
723 +<ul>
724 +<li><a href="#installation-docker--démarrez-gitrust-en-30-minutes-avec-docker-compose">01 — Installation Docker : stack docker-compose complète</a> — ~30 min</li>
725 +<li><a href="#02--installation-avec-systemd">02 — Installation systemd : binaire natif + service</a> — ~45 min</li>
726 +<li><a href="#03--premier-démarrage">03 — Premier démarrage : admin bootstrap, migrations</a> — ~20 min</li>
727 +<li><a href="#mise-en-production-sur-une-machine-linux-avec-https-lets-encrypt">04 — Mise en production</a> — ~90 min</li>
728 +</ul>
729 +<hr>
730 +<h2 id="how-to--recettes-pour-les-tâches-courantes-1"><a class="header" href="#how-to--recettes-pour-les-tâches-courantes-1">How-to — recettes pour les tâches courantes</a></h2>
731 +<p>Les how-to répondent à « comment faire X » sans explication de fond. Consultez-les dans n’importe quel ordre selon votre besoin.</p>
732 +<ul>
733 +<li><a href="#sauvegarder-et-restaurer">Sauvegarder et restaurer</a></li>
734 +<li><a href="#mettre-à-jour-gitrust">Mettre à jour l’instance</a></li>
735 +<li><a href="#configurer-smtp">Configurer SMTP</a></li>
736 +<li><a href="#configurer-oauth">Configurer OAuth (Google, GitHub)</a></li>
737 +<li><a href="#configurer-le-runner-ci-distant">Configurer un CI runner distant</a></li>
738 +<li><a href="#intégrer-la-ci-et-dependency-track">Intégrer Dependency-Track (SBOM)</a></li>
739 +<li><a href="#durcir-linstance-avec-fail2ban">Durcir avec Fail2ban</a></li>
740 +<li><a href="#régler-le-rate-limiting">Tuner le rate limiting</a></li>
741 +<li><a href="#forcer-le-2fa-sur-toute-linstance">Forcer la 2FA globalement</a></li>
742 +<li><a href="#dépanner-ssh">Dépanner SSH</a></li>
743 +<li><a href="#dépanner-la-ci">Dépanner la CI</a></li>
744 +<li><a href="#gérer-les-utilisateurs-panel-admin">Gérer les utilisateurs depuis /admin</a></li>
745 +<li><a href="#auditer-une-instance">Auditer l’instance</a></li>
746 +</ul>
747 +<hr>
748 +<h2 id="référence--informations-techniques-exactes-1"><a class="header" href="#référence--informations-techniques-exactes-1">Référence — informations techniques exactes</a></h2>
749 +<p>La référence documente de façon exhaustive les paramètres, schémas et comportements. Elle est destinée à la consultation ponctuelle.</p>
750 +<ul>
751 +<li><a href="#variables-denvironnement">Variables d’environnement (.env)</a></li>
752 +<li><a href="#paramètres-dynamiques">Paramètres dynamiques (app_settings)</a></li>
753 +<li><a href="#schéma-de-la-base-de-données">Schéma de base de données</a></li>
754 +<li><a href="#ports-et-services">Ports et services (4000 HTTP, 2222 SSH, 5432 PG)</a></li>
755 +<li><a href="#conformité-anssi-pa-074">Conformité ANSSI PA-074</a></li>
756 +</ul>
757 +<hr>
758 +<h2 id="explication--comprendre-le-pourquoi-1"><a class="header" href="#explication--comprendre-le-pourquoi-1">Explication — comprendre le pourquoi</a></h2>
759 +<p>Les explanations construisent les modèles mentaux nécessaires pour prendre de bonnes décisions d’exploitation. Lisez-les quand vous voulez comprendre les choix d’architecture, pas seulement les appliquer.</p>
760 +<ul>
761 +<li><a href="#architecture-globale">Architecture globale de gitrust</a></li>
762 +<li><a href="#modèle-de-déploiement">Modèle de déploiement : mono-machine vs HA</a></li>
763 +<li><a href="#ci-dagger--easy-mode-vs-power-mode">CI Dagger : pourquoi et comment</a></li>
764 +<li><a href="#stratégie-de-sauvegarde">Stratégie de sauvegarde 3-2-1 adaptée gitrust</a></li>
765 +</ul>
766 +<div style="break-before: page; page-break-before: always;"></div>
767 +<h1 id="tutoriels-1"><a class="header" href="#tutoriels-1">Tutoriels</a></h1>
768 +<blockquote>
769 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
770 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
771 +</blockquote>
772 +<h2 id="todo-24"><a class="header" href="#todo-24">TODO</a></h2>
773 +<ul>
774 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
775 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
776 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
777 +</ul>
778 +<div style="break-before: page; page-break-before: always;"></div>
779 +<h1 id="installation-docker--démarrez-gitrust-en-30-minutes-avec-docker-compose"><a class="header" href="#installation-docker--démarrez-gitrust-en-30-minutes-avec-docker-compose">Installation Docker : démarrez gitrust en 30 minutes avec docker-compose</a></h1>
780 +<h2 id="objectifs-1"><a class="header" href="#objectifs-1">Objectifs</a></h2>
781 +<p>À la fin de ce tutoriel, vous saurez :</p>
782 +<ul>
783 +<li><strong>O1. Déployer</strong> la stack gitrust minimale (application + PostgreSQL) avec docker-compose</li>
784 +<li><strong>O2. Vérifier</strong> que les trois services démarrent correctement et sont en bonne santé</li>
785 +<li><strong>O3. Créer</strong> le premier compte administrateur et accéder à l’interface web</li>
786 +</ul>
787 +<h2 id="pré-requis-1"><a class="header" href="#pré-requis-1">Pré-requis</a></h2>
788 +<ul>
789 +<li><strong>Technique</strong> : une VM ou machine Linux (Debian 12 / Ubuntu 22.04 ou supérieur), Docker Engine ≥ 24 installé (<code>docker --version</code> répond), Docker Compose plugin installé (<code>docker compose version</code> répond), ports 4000 et 2222 libres sur la machine</li>
790 +<li><strong>Pédagogique</strong> : aucun tutoriel gitrust préalable requis — c’est le point de départ du parcours administrateur</li>
791 +<li><strong>Temps estimé</strong> : ~30 minutes</li>
792 +</ul>
793 +<h2 id="vue-densemble-1"><a class="header" href="#vue-densemble-1">Vue d’ensemble</a></h2>
794 +<p>Avant de lancer la moindre commande, comprenons ce que docker-compose va orchestrer et pourquoi.</p>
795 +<p>gitrust est composé de <strong>trois services principaux</strong> dans sa configuration minimale. Pensez-y comme trois pièces d’un appartement qui s’appellent entre elles via un réseau interne :</p>
796 +<pre class="mermaid">graph TB
797 + subgraph internet ["Internet / votre navigateur"]
798 + B[Navigateur :4000]
799 + S[Client git/SSH :2222]
800 + end
801 +
802 + subgraph docker ["Réseau Docker gitrust_net"]
803 + A["gitrust-app&lt;br/&gt;(Rust, port 4000 + 2222)&lt;br/&gt;Lit la config depuis .env"]
804 + P["postgres&lt;br/&gt;(PostgreSQL 16, port 5432)&lt;br/&gt;Stocke comptes, dépôts, issues"]
805 + R["redis (optionnel)&lt;br/&gt;(Redis 7, port 6379)&lt;br/&gt;Sessions web + cache"]
806 + end
807 +
808 + B --&gt;|HTTP| A
809 + S --&gt;|SSH| A
810 + A --&gt;|SQL| P
811 + A -.-&gt;|sessions| R
812 +</pre>
813 +
814 +<p><strong>gitrust-app</strong> est le cœur : serveur HTTP (<code>:4000</code>) + serveur SSH (<code>:2222</code>) compilé en Rust. Il lit sa configuration depuis un fichier <code>.env</code> et écrit les dépôts Git bare sur un volume Docker. <strong>PostgreSQL</strong> stocke toutes les données relationnelles (comptes, organisations, dépôts, issues, PRs). <strong>Redis</strong> est optionnel dans la configuration minimale — il gère les sessions web et le cache quand il est présent.</p>
815 +<p>Dans ce tutoriel, nous utilisons la stack <strong>minimale</strong> (app + PostgreSQL) suffisante pour évaluer gitrust et démarrer une petite instance. La stack production avec Redis et SMTP se trouve dans <a href="template/docker/docker-compose.production.yml"><code>template/docker/docker-compose.production.yml</code></a>.</p>
816 +<hr>
817 +<h2 id="étape-1--créez-le-répertoire-de-travail-et-le-fichier-de-configuration"><a class="header" href="#étape-1--créez-le-répertoire-de-travail-et-le-fichier-de-configuration">Étape 1 : Créez le répertoire de travail et le fichier de configuration</a></h2>
818 +<p>Créez un répertoire dédié à votre instance gitrust et positionnez-vous dedans :</p>
819 +<pre><code class="language-bash">mkdir -p /opt/gitrust &amp;&amp; cd /opt/gitrust
820 +</code></pre>
821 +<p>Créez le fichier de configuration <code>.env</code> avec les valeurs minimales. <strong>Changez impérativement</strong> les valeurs marquées <code>CHANGE_ME</code> :</p>
822 +<pre><code class="language-bash">cat &gt; .env &lt;&lt; 'EOF'
823 +# === gitrust — configuration minimale ===
824 +# Changez toutes les valeurs CHANGE_ME avant de démarrer
825 +
826 +# Clé secrète de l'application (générez avec : openssl rand -hex 32)
827 +SECRET_KEY=CHANGE_ME_openssl_rand_hex_32
828 +
829 +# URL publique de l'instance (sans slash final)
830 +APP_URL=http://localhost:4000
831 +
832 +# Base de données PostgreSQL
833 +DATABASE_URL=postgres://gitrust:CHANGE_ME_db_password@postgres:5432/gitrust
834 +POSTGRES_USER=gitrust
835 +POSTGRES_PASSWORD=CHANGE_ME_db_password
836 +POSTGRES_DB=gitrust
837 +
838 +# Serveur SSH (port exposé à l'extérieur)
839 +SSH_PORT=2222
840 +
841 +# Mode de l'application
842 +RUST_LOG=info
843 +APP_ENV=production
844 +EOF
845 +</code></pre>
846 +<p>Générez maintenant une clé secrète robuste et remplacez la valeur dans <code>.env</code> :</p>
847 +<pre><code class="language-bash">SECRET=$(openssl rand -hex 32)
848 +sed -i "s/CHANGE_ME_openssl_rand_hex_32/$SECRET/" .env
849 +</code></pre>
850 +<p>Choisissez également un mot de passe pour PostgreSQL et remplacez les deux occurrences :</p>
851 +<pre><code class="language-bash">DB_PASS=$(openssl rand -hex 16)
852 +sed -i "s/CHANGE_ME_db_password/$DB_PASS/g" .env
853 +</code></pre>
854 +<p>Sortie attendue (vérification) :</p>
855 +<pre><code class="language-bash">grep SECRET_KEY .env
856 +# → SECRET_KEY=4a7f2c9e1b8d3f6a0e5c2b9d7f4a1e8c3b6d9f2a5e8c1b4d7f0a3e6c9b2d5f8a
857 +</code></pre>
858 +<p><strong>Checkpoint</strong> : exécutez <code>grep CHANGE_ME .env</code> — la commande doit ne rien retourner. Si elle retourne des lignes, ces valeurs n’ont pas été remplacées et le démarrage échouera.</p>
859 +<hr>
860 +<h2 id="étape-2--créez-le-fichier-docker-composeyml"><a class="header" href="#étape-2--créez-le-fichier-docker-composeyml">Étape 2 : Créez le fichier docker-compose.yml</a></h2>
861 +<p>Créez le fichier <code>docker-compose.yml</code> suivant dans <code>/opt/gitrust/</code>. Ce contenu correspond à la stack minimale gitrust — il est reproduit ici intégralement pour que vous puissiez démarrer sans dépendance externe :</p>
862 +<pre><code class="language-bash">cat &gt; docker-compose.yml &lt;&lt; 'EOF'
863 +# docker-compose.minimal.yml — Stack gitrust minimale (app + PostgreSQL)
864 +# Cas d'usage : évaluation, développement, petite instance (&lt;10 utilisateurs)
865 +# Pour la production : utilisez docker-compose.production.yml (+ Redis + SMTP)
866 +#
867 +# Usage :
868 +# docker compose up -d
869 +# docker compose logs -f gitrust
870 +# docker compose down
871 +
872 +version: "3.9"
873 +
874 +services:
875 + # ── Base de données ───────────────────────────────────────────────────────
876 + postgres:
877 + image: postgres:16-alpine
878 + container_name: gitrust_postgres
879 + restart: unless-stopped
880 + environment:
881 + POSTGRES_USER: ${POSTGRES_USER}
882 + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
883 + POSTGRES_DB: ${POSTGRES_DB}
884 + volumes:
885 + # Données persistantes — ne supprimez pas ce volume sans sauvegarde
886 + - postgres_data:/var/lib/postgresql/data
887 + healthcheck:
888 + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
889 + interval: 10s
890 + timeout: 5s
891 + retries: 5
892 + networks:
893 + - gitrust_net
894 +
895 + # ── Application gitrust ───────────────────────────────────────────────────
896 + gitrust:
897 + image: ghcr.io/gitrust/gitrust:latest
898 + container_name: gitrust_app
899 + restart: unless-stopped
900 + depends_on:
901 + postgres:
902 + condition: service_healthy
903 + env_file:
904 + # Lit toutes les variables depuis .env — ne commitez jamais ce fichier
905 + - .env
906 + ports:
907 + # Interface web — exposée sur toutes les interfaces de la machine hôte
908 + - "4000:4000"
909 + # Serveur SSH Git — exposé sur le port configuré dans .env
910 + - "${SSH_PORT:-2222}:2222"
911 + volumes:
912 + # Dépôts Git bare — données critiques, sauvegardez ce volume
913 + - git_repos:/var/lib/gitrust/repositories
914 + # Clés SSH du serveur — générées au premier démarrage, persistez-les
915 + - ssh_host_keys:/etc/gitrust/ssh
916 + healthcheck:
917 + test: ["CMD", "curl", "-f", "http://localhost:4000/health"]
918 + interval: 30s
919 + timeout: 10s
920 + retries: 3
921 + start_period: 30s
922 + networks:
923 + - gitrust_net
924 +
925 +volumes:
926 + # postgres_data : données relationnelles (comptes, dépôts, issues, PRs)
927 + postgres_data:
928 + # git_repos : dépôts Git bare (le contenu réel des commits)
929 + git_repos:
930 + # ssh_host_keys : clés SSH hôte (fingerprint de votre serveur)
931 + ssh_host_keys:
932 +
933 +networks:
934 + gitrust_net:
935 + driver: bridge
936 +EOF
937 +</code></pre>
938 +<p><strong>Checkpoint</strong> : vérifiez que les deux fichiers sont présents dans <code>/opt/gitrust/</code> :</p>
939 +<pre><code class="language-bash">ls -la /opt/gitrust/
940 +</code></pre>
941 +<p>Sortie attendue :</p>
942 +<pre><code>total 16
943 +drwxr-xr-x 2 root root 4096 avr 17 10:00 .
944 +drwxr-xr-x 8 root root 4096 avr 17 09:55 ..
945 +-rw------- 1 root root 612 avr 17 10:00 .env
946 +-rw-r--r-- 1 root root 2048 avr 17 10:00 docker-compose.yml
947 +</code></pre>
948 +<hr>
949 +<h2 id="étape-3--démarrez-la-stack-et-suivez-les-logs"><a class="header" href="#étape-3--démarrez-la-stack-et-suivez-les-logs">Étape 3 : Démarrez la stack et suivez les logs</a></h2>
950 +<p>Démarrez tous les services en arrière-plan :</p>
951 +<pre><code class="language-bash">docker compose up -d
952 +</code></pre>
953 +<p>Sortie attendue :</p>
954 +<pre><code>[+] Running 4/4
955 + ✔ Network gitrust_gitrust_net Created 0.1s
956 + ✔ Volume "gitrust_postgres_data" Created 0.0s
957 + ✔ Container gitrust_postgres Started 0.8s
958 + ✔ Container gitrust_app Started 1.2s
959 +</code></pre>
960 +<p>Suivez les logs de l’application pour observer le démarrage (les migrations s’exécutent automatiquement) :</p>
961 +<pre><code class="language-bash">docker compose logs -f gitrust
962 +</code></pre>
963 +<p>Sortie attendue (les 15-20 premières secondes) :</p>
964 +<pre><code>gitrust_app | 2026-04-17T10:00:15Z INFO gitrust &gt; Starting gitrust v0.9.0
965 +gitrust_app | 2026-04-17T10:00:15Z INFO gitrust &gt; Connecting to database...
966 +gitrust_app | 2026-04-17T10:00:16Z INFO gitrust &gt; Running database migrations...
967 +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust &gt; Applied 42 migrations successfully
968 +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust &gt; Generating SSH host keys...
969 +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust &gt; SSH host key fingerprint: SHA256:xxxxxxxxxxxxxxxxxxxx
970 +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust &gt; HTTP server listening on 0.0.0.0:4000
971 +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust &gt; SSH server listening on 0.0.0.0:2222
972 +gitrust_app | 2026-04-17T10:00:17Z INFO gitrust &gt; gitrust is ready
973 +</code></pre>
974 +<p>Appuyez sur <strong>Ctrl+C</strong> pour quitter le suivi des logs (les containers continuent de tourner).</p>
975 +<p><strong>Checkpoint</strong> : vérifiez l’état de santé des services :</p>
976 +<pre><code class="language-bash">docker compose ps
977 +</code></pre>
978 +<p>Sortie attendue :</p>
979 +<pre><code>NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
980 +gitrust_app ghcr.io/gitrust/gitrust:latest "/usr/local/bin/gitr…" gitrust 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:4000-&gt;4000/tcp, 0.0.0.0:2222-&gt;2222/tcp
981 +gitrust_postgres postgres:16-alpine "docker-entrypoint.s…" postgres 2 minutes ago Up 2 minutes (healthy) 5432/tcp
982 +</code></pre>
983 +<p>Les deux containers doivent afficher <code>(healthy)</code>. Si l’un affiche <code>(starting)</code>, attendez 30 secondes et relancez la commande. S’il affiche <code>(unhealthy)</code>, consultez les logs avec <code>docker compose logs gitrust</code> ou <code>docker compose logs postgres</code>.</p>
984 +<hr>
985 +<h2 id="étape-4--créez-le-premier-compte-administrateur"><a class="header" href="#étape-4--créez-le-premier-compte-administrateur">Étape 4 : Créez le premier compte administrateur</a></h2>
986 +<p>Ouvrez votre navigateur et rendez-vous sur <code>http://localhost:4000</code>.</p>
987 +<p>Vous devriez voir la page d’accueil gitrust avec un formulaire d’inscription. Comme l’instance est vierge, <strong>le premier compte créé devient automatiquement administrateur</strong>.</p>
988 +<p>Remplissez le formulaire :</p>
989 +<ul>
990 +<li><strong>Pseudo</strong> : votre identifiant administrateur (ex. <code>admin</code>)</li>
991 +<li><strong>E-mail</strong> : votre adresse e-mail</li>
992 +<li><strong>Mot de passe</strong> : choisissez un mot de passe robuste (≥ 12 caractères)</li>
993 +</ul>
994 +<p>Cliquez sur <strong>Créer mon compte</strong>.</p>
995 +<p>Sortie attendue dans les logs (visible avec <code>docker compose logs -f gitrust</code>) :</p>
996 +<pre><code>gitrust_app | 2026-04-17T10:05:00Z INFO gitrust::auth &gt; New user registered: admin (id=1)
997 +gitrust_app | 2026-04-17T10:05:00Z INFO gitrust::admin &gt; First user promoted to administrator: admin
998 +</code></pre>
999 +<p><strong>Checkpoint final</strong> : connectez-vous avec vos identifiants. Après la connexion, vérifiez que le menu en haut à droite affiche un lien <strong>Administration</strong> (ou naviguez vers <code>http://localhost:4000/admin</code>). Cette page n’est accessible qu’aux administrateurs — sa présence confirme que votre compte a bien le rôle admin.</p>
1000 +<p>L’URL de votre instance est <code>http://localhost:4000</code> et votre compte administrateur est opérationnel.</p>
1001 +<hr>
1002 +<h2 id="récapitulatif-1"><a class="header" href="#récapitulatif-1">Récapitulatif</a></h2>
1003 +<ul>
1004 +<li>✓ <strong>O1 accompli</strong> : la stack docker-compose est déployée — <code>docker compose ps</code> affiche deux containers <code>(healthy)</code></li>
1005 +<li>✓ <strong>O2 accompli</strong> : les trois services (app, PostgreSQL, réseau interne) démarrent correctement — les logs montrent « gitrust is ready » et les migrations sont appliquées</li>
1006 +<li>✓ <strong>O3 accompli</strong> : le premier compte administrateur est créé et la page <code>/admin</code> est accessible</li>
1007 +</ul>
1008 +<hr>
1009 +<h2 id="et-si-ça-ne-marche-pas-1"><a class="header" href="#et-si-ça-ne-marche-pas-1">Et si ça ne marche pas</a></h2>
1010 +<div class="table-wrapper">
1011 +<table>
1012 +<thead>
1013 +<tr><th>Symptôme</th><th>Cause probable</th><th>Correction</th></tr>
1014 +</thead>
1015 +<tbody>
1016 +<tr><td><code>Error: port 4000 is already in use</code> au démarrage</td><td>Un autre service occupe le port 4000 sur la machine hôte</td><td>Identifiez le service avec <code>ss -tlnp | grep 4000</code> ou <code>lsof -i :4000</code>. Arrêtez-le ou changez le port dans <code>docker-compose.yml</code> : remplacez <code>"4000:4000"</code> par <code>"4001:4000"</code> et accédez sur <code>:4001</code></td></tr>
1017 +<tr><td>Le container <code>gitrust_app</code> affiche <code>(unhealthy)</code> ou redémarre en boucle</td><td>La variable <code>DATABASE_URL</code> est incorrecte ou <code>SECRET_KEY</code> contient des caractères spéciaux non échappés</td><td>Vérifiez avec <code>docker compose logs gitrust | grep ERROR</code>. Assurez-vous que <code>SECRET_KEY</code> est bien une chaîne hexadécimale sans guillemets. Rechargez avec <code>docker compose down &amp;&amp; docker compose up -d</code></td></tr>
1018 +<tr><td>La page <code>http://localhost:4000</code> affiche « Connection refused »</td><td>Le container n’est pas encore en <code>(healthy)</code> ou le port n’est pas exposé</td><td>Attendez 30 secondes et rechargez. Si le problème persiste, vérifiez que votre pare-feu local (<code>ufw status</code>) autorise le port 4000</td></tr>
1019 +<tr><td><code>FATAL: password authentication failed for user "gitrust"</code> dans les logs postgres</td><td>Le mot de passe dans <code>DATABASE_URL</code> ne correspond pas à <code>POSTGRES_PASSWORD</code></td><td>Supprimez le volume PostgreSQL (<code>docker compose down -v</code>) et relancez — <strong>attention : supprime toutes les données</strong></td></tr>
1020 +</tbody>
1021 +</table>
1022 +</div>
1023 +<hr>
1024 +<h2 id="prochaine-étape-1"><a class="header" href="#prochaine-étape-1">Prochaine étape</a></h2>
1025 +<p>→ <a href="#02--installation-avec-systemd">02 — Installation systemd : binaire natif + service</a> : découvrez l’installation sans Docker pour un déploiement production avec hardening AppArmor (~45 min)</p>
1026 +<p>Ou si vous souhaitez rendre cette instance accessible depuis Internet :</p>
1027 +<p>→ <a href="#mise-en-production-sur-une-machine-linux-avec-https-lets-encrypt">04 — Mise en production</a> : reverse-proxy TLS, SMTP, sauvegarde automatique (~90 min)</p>
1028 +<div style="break-before: page; page-break-before: always;"></div>
1029 +<h1 id="02--installation-avec-systemd"><a class="header" href="#02--installation-avec-systemd">02 — Installation avec systemd</a></h1>
1030 +<blockquote>
1031 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
1032 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
1033 +</blockquote>
1034 +<h2 id="todo-25"><a class="header" href="#todo-25">TODO</a></h2>
1035 +<ul>
1036 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
1037 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
1038 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
1039 +</ul>
1040 +<div style="break-before: page; page-break-before: always;"></div>
1041 +<h1 id="03--premier-démarrage"><a class="header" href="#03--premier-démarrage">03 — Premier démarrage</a></h1>
1042 +<blockquote>
1043 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
1044 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
1045 +</blockquote>
1046 +<h2 id="todo-26"><a class="header" href="#todo-26">TODO</a></h2>
1047 +<ul>
1048 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
1049 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
1050 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
1051 +</ul>
1052 +<div style="break-before: page; page-break-before: always;"></div>
1053 +<h1 id="mise-en-production-sur-une-machine-linux-avec-https-lets-encrypt"><a class="header" href="#mise-en-production-sur-une-machine-linux-avec-https-lets-encrypt">Mise en production sur une machine Linux avec HTTPS Let’s Encrypt</a></h1>
1054 +<h2 id="contexte"><a class="header" href="#contexte">Contexte</a></h2>
1055 +<p>Procédure de référence pour déployer une instance gitrust sur une machine Linux à IP fixe, avec patte externe routée et HTTPS via Let’s Encrypt. Reproductible et testée en conditions réelles.</p>
1056 +<p>Adaptez les valeurs suivantes à votre environnement :</p>
1057 +<div class="table-wrapper">
1058 +<table>
1059 +<thead>
1060 +<tr><th>Placeholder</th><th>Remplacez par</th></tr>
1061 +</thead>
1062 +<tbody>
1063 +<tr><td><code>&lt;your-server-ip&gt;</code></td><td>L’IP fixe de votre serveur (ex: <code>192.168.1.57</code> sur un LAN, ou une IP publique)</td></tr>
1064 +<tr><td><code>&lt;your-domain&gt;</code></td><td>Votre FQDN principal (ex: <code>gitrust.example.com</code>)</td></tr>
1065 +<tr><td><code>&lt;acme-email&gt;</code></td><td>L’email pour Let’s Encrypt (ex: <code>contact@example.com</code>)</td></tr>
1066 +<tr><td><code>&lt;admin-user&gt;</code></td><td>L’utilisateur SSH admin sur le serveur cible</td></tr>
1067 +</tbody>
1068 +</table>
1069 +</div>
1070 +<h3 id="les-trois-services-gitrust"><a class="header" href="#les-trois-services-gitrust">Les trois services gitrust</a></h3>
1071 +<div class="table-wrapper">
1072 +<table>
1073 +<thead>
1074 +<tr><th>#</th><th>Service</th><th>Bind interne</th><th>Exposition publique</th><th>Variable</th></tr>
1075 +</thead>
1076 +<tbody>
1077 +<tr><td>1</td><td>Web HTTP (UI SSR + API)</td><td><code>127.0.0.1:4000</code></td><td><code>:443</code> HTTPS via Nginx</td><td><code>SERVER_PORT</code></td></tr>
1078 +<tr><td>2</td><td>SSH Git (russh)</td><td><code>127.0.0.1:2222</code></td><td><code>:22</code> via Nginx stream</td><td><code>SSH_PORT</code></td></tr>
1079 +<tr><td>3</td><td>Worker CI/CD (Dagger)</td><td>tâche Tokio in-process</td><td>— (déclenché par push)</td><td><code>CI_ENABLED</code></td></tr>
1080 +</tbody>
1081 +</table>
1082 +</div>
1083 +<p>PostgreSQL = dépendance, conteneur Docker bind loopback <code>127.0.0.1:5432</code>.</p>
1084 +<h3 id="topologie-réseau"><a class="header" href="#topologie-réseau">Topologie réseau</a></h3>
1085 +<pre><code>Internet
1086 + |
1087 + v
1088 +&lt;your-server-ip&gt; (patte externe)
1089 + |
1090 + +-- :22 Nginx stream --&gt; 127.0.0.1:2222 (gitrust SSH)
1091 + +-- :80 Nginx HTTP --&gt; 301 HTTPS (sauf /.well-known/acme-challenge)
1092 + +-- :443 Nginx HTTPS --&gt; 127.0.0.1:4000 (gitrust HTTP)
1093 + +-- :2022 sshd système (accès admin, déplacé depuis :22)
1094 +
1095 + Loopback uniquement :
1096 + +-- 127.0.0.1:4000 gitrust web
1097 + +-- 127.0.0.1:2222 gitrust SSH
1098 + +-- 127.0.0.1:5432 postgres docker
1099 +</code></pre>
1100 +<h3 id="risque-critique--ordre-dexécution"><a class="header" href="#risque-critique--ordre-dexécution">Risque critique — ordre d’exécution</a></h3>
1101 +<p>Le déplacement de <code>sshd</code> système de <code>:22</code> vers <code>:2022</code> <strong>doit</strong> être fait avant la configuration <code>nginx stream</code>, et <strong>doit</strong> être validé depuis une <strong>deuxième session SSH</strong> avant fermeture de la première. Sinon : lockout total (besoin d’accès console physique).</p>
1102 +<hr>
1103 +<h2 id="pré-requis-2"><a class="header" href="#pré-requis-2">Pré-requis</a></h2>
1104 +<h3 id="poste-de-build-machine-locale-avec-le-code-source"><a class="header" href="#poste-de-build-machine-locale-avec-le-code-source">Poste de build (machine locale avec le code source)</a></h3>
1105 +<pre><code class="language-bash">rustup show &amp;&amp; command -v rsync envsubst npx
1106 +# Installer si besoin : sudo apt install rsync gettext-base
1107 +</code></pre>
1108 +<h3 id="cible-your-server-ip"><a class="header" href="#cible-your-server-ip">Cible <code>&lt;your-server-ip&gt;</code></a></h3>
1109 +<ul>
1110 +<li>Debian/Ubuntu récent</li>
1111 +<li>Accès SSH avec <code>sudo</code></li>
1112 +<li>Docker + plugin compose (<code>docker compose version</code>)</li>
1113 +<li>Snap ou apt pour <code>certbot</code> + plugin nginx</li>
1114 +<li>DNS <code>&lt;your-domain&gt;</code> → IP publique de la patte externe (vérifier <code>dig +short &lt;your-domain&gt;</code>)</li>
1115 +<li>Module <code>stream</code> Nginx disponible (paquet <code>libnginx-mod-stream</code> sur Debian)</li>
1116 +</ul>
1117 +<hr>
1118 +<h2 id="phase-0--générer-envproduction-poste-de-build-une-seule-fois"><a class="header" href="#phase-0--générer-envproduction-poste-de-build-une-seule-fois">Phase 0 — Générer <code>.env.production</code> (poste de build, une seule fois)</a></h2>
1119 +<pre><code class="language-bash">JWT=$(openssl rand -hex 64)
1120 +ADMIN_PWD=$(openssl rand -base64 24)
1121 +PG_PWD=$(openssl rand -base64 24)
1122 +
1123 +cat &gt; .env.production &lt;&lt;EOF
1124 +# ---- Base de données ----
1125 +DATABASE_URL=postgres://gitrust:${PG_PWD}@127.0.0.1:5432/gitrust
1126 +
1127 +# ---- Serveur HTTP (derrière Nginx HTTPS) ----
1128 +SERVER_HOST=127.0.0.1
1129 +SERVER_PORT=4000
1130 +
1131 +# ---- Serveur SSH (derrière nginx stream :22) ----
1132 +SSH_PORT=2222
1133 +SSH_LISTEN_ADDR=127.0.0.1
1134 +SSH_PUBLIC_HOST=&lt;your-domain&gt;
1135 +SSH_HOST_KEY_PATH=/opt/gitrust/data/ssh_host_ed25519_key
1136 +
1137 +# ---- Chemins (réécrits par deploy.sh) ----
1138 +GIT_REPOS_BASE_PATH=/opt/gitrust/data/repos
1139 +STATIC_FILES_PATH=/opt/gitrust/static
1140 +
1141 +# ---- Sécurité — HTTPS actif ----
1142 +JWT_SECRET=${JWT}
1143 +JWT_EXPIRATION_MINUTES=15
1144 +REFRESH_TOKEN_EXPIRATION_DAYS=7
1145 +COOKIE_SECURE=true # HTTPS via Nginx
1146 +COOKIE_SAME_SITE=Lax
1147 +APP_DEBUG=false
1148 +RUST_LOG=info
1149 +
1150 +# ---- Admin initial ----
1151 +ADMIN_USERNAME=admin
1152 +ADMIN_EMAIL=&lt;acme-email&gt;
1153 +ADMIN_PASSWORD=${ADMIN_PWD}
1154 +
1155 +# ---- Inscription &amp; UI ----
1156 +ALLOW_REGISTRATION=false
1157 +APP_NAME=Gitrust
1158 +DEFAULT_LOCALE=fr
1159 +
1160 +# ---- Email ----
1161 +EMAIL_VALIDATION_REQUIRED=false
1162 +EMAIL_BASE_URL=https://&lt;your-domain&gt;
1163 +
1164 +# ---- CI/CD Dagger (worker 3) ----
1165 +CI_ENABLED=true
1166 +CI_MAX_CONCURRENT=4
1167 +CI_DEFAULT_TIMEOUT=3600
1168 +CI_WORKSPACE_PATH=/tmp/gitrust-ci
1169 +CI_REMOTE_HOST=localhost
1170 +
1171 +# ---- Worker import ----
1172 +IMPORT_MAX_CONCURRENT=2
1173 +IMPORT_TIMEOUT_SECS=1800
1174 +DB_WORKER_POOL_SIZE=4
1175 +EOF
1176 +
1177 +chmod 600 .env.production
1178 +echo "ADMIN_PASSWORD = ${ADMIN_PWD}"
1179 +echo "POSTGRES_PASSWORD = ${PG_PWD}"
1180 +</code></pre>
1181 +<blockquote>
1182 +<p><strong>Critique</strong> : noter <code>ADMIN_PASSWORD</code> et <code>POSTGRES_PASSWORD</code> dans un gestionnaire de mots de passe.</p>
1183 +</blockquote>
1184 +<hr>
1185 +<h2 id="phase-1--préparer-la-cible--déplacer-sshd-système-sur-2022"><a class="header" href="#phase-1--préparer-la-cible--déplacer-sshd-système-sur-2022">Phase 1 — Préparer la cible : déplacer sshd système sur :2022</a></h2>
1186 +<p><strong>À faire en gardant deux sessions SSH simultanées</strong>.</p>
1187 +<h3 id="1pre-diagnostic-de-létat-initial"><a class="header" href="#1pre-diagnostic-de-létat-initial">1.pre. Diagnostic de l’état initial</a></h3>
1188 +<h4 id="1pre1--trouver-le-port-ssh-ouvert-depuis-le-poste-de-build"><a class="header" href="#1pre1--trouver-le-port-ssh-ouvert-depuis-le-poste-de-build">1.pre.1 — Trouver le port SSH ouvert depuis le poste de build</a></h4>
1189 +<pre><code class="language-bash"># Depuis votre poste (sans être connecté) :
1190 +for p in 22 2022 2222 2200 22022; do
1191 + timeout 3 bash -c "echo &gt;/dev/tcp/&lt;your-server-ip&gt;/$p" 2&gt;/dev/null \
1192 + &amp;&amp; echo "Port $p : OUVERT" \
1193 + || echo "Port $p : fermé/filtré"
1194 +done
1195 +</code></pre>
1196 +<h4 id="1pre2--se-connecter-sur-le-port-détecté"><a class="header" href="#1pre2--se-connecter-sur-le-port-détecté">1.pre.2 — Se connecter sur le port détecté</a></h4>
1197 +<pre><code class="language-bash"># Cas le plus probable : sshd est sur :22 par défaut
1198 +ssh &lt;admin-user&gt;@&lt;your-server-ip&gt;
1199 +</code></pre>
1200 +<h4 id="1pre3--une-fois-connecté-vérifier-létat-sshd-actuel"><a class="header" href="#1pre3--une-fois-connecté-vérifier-létat-sshd-actuel">1.pre.3 — Une fois connecté, vérifier l’état sshd actuel</a></h4>
1201 +<pre><code class="language-bash"># Sur quel(s) port(s) sshd écoute-t-il ?
1202 +sudo ss -tlnp | grep sshd
1203 +
1204 +# Contenu de la config
1205 +sudo grep -riE '^[[:space:]]*Port[[:space:]]+[0-9]+' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/ 2&gt;/dev/null
1206 +
1207 +# Statut du service
1208 +sudo systemctl status ssh --no-pager
1209 +</code></pre>
1210 +<h3 id="1a-session-1--modifier-la-config-sshd"><a class="header" href="#1a-session-1--modifier-la-config-sshd">1a. Session 1 : modifier la config sshd</a></h3>
1211 +<pre><code class="language-bash">ssh &lt;admin-user&gt;@&lt;your-server-ip&gt;
1212 +
1213 +# Éditer /etc/ssh/sshd_config
1214 +sudo tee /etc/ssh/sshd_config.d/99-gitrust.conf &lt;&lt;'EOF'
1215 +Port 2022
1216 +EOF
1217 +
1218 +# Vérifier la syntaxe
1219 +sudo sshd -t
1220 +
1221 +# Si OK, reload (ne déconnecte pas la session courante)
1222 +sudo systemctl reload ssh
1223 +sudo ss -tlnp | grep -E ':22\b|:2022\b'
1224 +# Attendu : sshd écoute sur 22 ET 2022
1225 +</code></pre>
1226 +<h3 id="1b-session-2--valider-le-nouveau-port"><a class="header" href="#1b-session-2--valider-le-nouveau-port">1b. Session 2 : valider le nouveau port</a></h3>
1227 +<p>Depuis le poste de build, <strong>dans un autre terminal</strong> :</p>
1228 +<pre><code class="language-bash">ssh -p 2022 &lt;admin-user&gt;@&lt;your-server-ip&gt; 'echo "OK port 2022"'
1229 +# Doit afficher : OK port 2022
1230 +</code></pre>
1231 +<h3 id="1c-plus-tard-après-phase-5-fermer-le-port-22-du-sshd-système"><a class="header" href="#1c-plus-tard-après-phase-5-fermer-le-port-22-du-sshd-système">1c. (Plus tard, après Phase 5) Fermer le port 22 du sshd système</a></h3>
1232 +<p>Une fois <code>nginx stream :22</code> actif et testé :</p>
1233 +<pre><code class="language-bash">ssh -p 2022 &lt;admin-user&gt;@&lt;your-server-ip&gt;
1234 +sudo sed -i 's/^Port 22$/# Port 22 (déplacé vers 2022, :22 utilisé par nginx stream)/' /etc/ssh/sshd_config
1235 +sudo systemctl restart ssh
1236 +</code></pre>
1237 +<h3 id="1d-firewall"><a class="header" href="#1d-firewall">1d. Firewall</a></h3>
1238 +<pre><code class="language-bash">ssh -p 2022 &lt;admin-user&gt;@&lt;your-server-ip&gt; bash &lt;&lt;'EOF'
1239 +sudo ufw allow 80/tcp comment 'HTTP ACME + redirect'
1240 +sudo ufw allow 443/tcp comment 'HTTPS Gitrust'
1241 +sudo ufw allow 22/tcp comment 'SSH Git via nginx stream'
1242 +sudo ufw allow 2022/tcp comment 'SSH admin système'
1243 +sudo ufw status numbered
1244 +EOF
1245 +</code></pre>
1246 +<blockquote>
1247 +<p>Mettre à jour <code>~/.ssh/config</code> côté poste dev :</p>
1248 +<pre><code>Host gitrust-host
1249 + HostName &lt;your-server-ip&gt;
1250 + User &lt;admin-user&gt;
1251 + Port 2022
1252 +</code></pre>
1253 +<p>Le reste du plan utilise <code>ssh gitrust-host</code>.</p>
1254 +</blockquote>
1255 +<hr>
1256 +<h2 id="phase-2--postgresql-docker-loopback"><a class="header" href="#phase-2--postgresql-docker-loopback">Phase 2 — PostgreSQL (Docker, loopback)</a></h2>
1257 +<pre><code class="language-bash">scp -P 2022 database/docker-compose.yml &lt;admin-user&gt;@&lt;your-server-ip&gt;:/tmp/pg-compose.yml
1258 +
1259 +ssh gitrust-host bash &lt;&lt;EOF
1260 +sudo mkdir -p /opt/gitrust/database
1261 +sudo mv /tmp/pg-compose.yml /opt/gitrust/database/docker-compose.yml
1262 +echo 'POSTGRES_PASSWORD=${PG_PWD}' | sudo tee /opt/gitrust/database/.env &gt;/dev/null
1263 +sudo chmod 600 /opt/gitrust/database/.env
1264 +cd /opt/gitrust/database &amp;&amp; sudo docker compose up -d
1265 +sudo docker compose ps
1266 +EOF
1267 +</code></pre>
1268 +<p>Remplacer <code>${PG_PWD}</code> par la valeur réelle. Vérifier que le port n’est pas exposé publiquement :</p>
1269 +<pre><code class="language-bash">ssh gitrust-host 'sudo ss -tlnp | grep 5432'
1270 +# Attendu : 127.0.0.1:5432 — PAS 0.0.0.0
1271 +</code></pre>
1272 +<hr>
1273 +<h2 id="phase-3--build--déploiement-gitrust-via-deploysh"><a class="header" href="#phase-3--build--déploiement-gitrust-via-deploysh">Phase 3 — Build + déploiement gitrust via <code>deploy.sh</code></a></h2>
1274 +<h3 id="3a-préparer-deploymentdeployconf"><a class="header" href="#3a-préparer-deploymentdeployconf">3a. Préparer <code>deployment/deploy.conf</code></a></h3>
1275 +<pre><code class="language-bash">cp deployment/deploy.conf.example deployment/deploy.conf
1276 +# Éditer DEPLOY_TARGET=gitrust-host, DEPLOY_REMOTE_PATH=/opt/gitrust, DEPLOY_FQDN_INITIAL=&lt;your-domain&gt;
1277 +$EDITOR deployment/deploy.conf
1278 +chmod 600 deployment/deploy.conf
1279 +</code></pre>
1280 +<h3 id="3b-validation-du-build-seul-optionnel"><a class="header" href="#3b-validation-du-build-seul-optionnel">3b. Validation du build seul (optionnel)</a></h3>
1281 +<pre><code class="language-bash">BUILD_ONLY=1 ./deployment/deploy.sh
1282 +</code></pre>
1283 +<h3 id="3c-déploiement"><a class="header" href="#3c-déploiement">3c. Déploiement</a></h3>
1284 +<pre><code class="language-bash"># Sans argument : utilise DEPLOY_TARGET du deploy.conf (gitrust-host via ~/.ssh/config, port 2022)
1285 +./deployment/deploy.sh
1286 +</code></pre>
1287 +<p>Ce que fait <code>deploy.sh</code> : <code>cargo build --release</code>, <code>tailwindcss --minify</code>, adapte <code>gitrust.service</code> + <code>.env</code>, rsync, crée user <code>gitrust</code>, installe systemd, restart.</p>
1288 +<p>À la fin : gitrust écoute sur <code>127.0.0.1:4000</code> (HTTP) et <code>127.0.0.1:2222</code> (SSH).</p>
1289 +<pre><code class="language-bash">ssh gitrust-host 'sudo systemctl status gitrust --no-pager &amp;&amp; sudo ss -tlnp | grep -E "4000|2222"'
1290 +# Attendu : 127.0.0.1:4000 et 127.0.0.1:2222 (PAS 0.0.0.0)
1291 +</code></pre>
1292 +<hr>
1293 +<h2 id="phase-4--nginx-http--lets-encrypt"><a class="header" href="#phase-4--nginx-http--lets-encrypt">Phase 4 — Nginx HTTP + Let’s Encrypt</a></h2>
1294 +<h3 id="4a-installer-nginx--certbot"><a class="header" href="#4a-installer-nginx--certbot">4a. Installer nginx + certbot</a></h3>
1295 +<pre><code class="language-bash">ssh gitrust-host bash &lt;&lt;'EOF'
1296 +sudo apt update
1297 +sudo apt install -y nginx libnginx-mod-stream certbot python3-certbot-nginx
1298 +sudo systemctl enable --now nginx
1299 +EOF
1300 +</code></pre>
1301 +<h3 id="4b-déployer-la-conf-nginx"><a class="header" href="#4b-déployer-la-conf-nginx">4b. Déployer la conf Nginx</a></h3>
1302 +<pre><code class="language-bash">scp -P 2022 deployment/nginx-gitrust.conf &lt;admin-user&gt;@&lt;your-server-ip&gt;:/tmp/gitrust-nginx.conf
1303 +
1304 +ssh gitrust-host bash &lt;&lt;EOF
1305 +sudo sed -i 's/gitrust.nuage.ebii/&lt;your-domain&gt;/g' /tmp/gitrust-nginx.conf
1306 +sudo mv /tmp/gitrust-nginx.conf /etc/nginx/sites-available/gitrust
1307 +sudo ln -sf /etc/nginx/sites-available/gitrust /etc/nginx/sites-enabled/gitrust
1308 +sudo rm -f /etc/nginx/sites-enabled/default
1309 +sudo mkdir -p /var/www/html/.well-known/acme-challenge
1310 +sudo nginx -t &amp;&amp; sudo systemctl reload nginx
1311 +EOF
1312 +</code></pre>
1313 +<h3 id="4c-émettre-le-certificat-lets-encrypt"><a class="header" href="#4c-émettre-le-certificat-lets-encrypt">4c. Émettre le certificat Let’s Encrypt</a></h3>
1314 +<pre><code class="language-bash">ssh gitrust-host 'sudo certbot --nginx \
1315 + -d &lt;your-domain&gt; \
1316 + --email &lt;acme-email&gt; \
1317 + --agree-tos \
1318 + --no-eff-email \
1319 + --redirect'
1320 +</code></pre>
1321 +<h3 id="4d-vérifier-le-renouvellement-automatique"><a class="header" href="#4d-vérifier-le-renouvellement-automatique">4d. Vérifier le renouvellement automatique</a></h3>
1322 +<pre><code class="language-bash">ssh gitrust-host 'sudo systemctl list-timers | grep certbot'
1323 +ssh gitrust-host 'sudo certbot renew --dry-run'
1324 +</code></pre>
1325 +<h3 id="4e-test-https"><a class="header" href="#4e-test-https">4e. Test HTTPS</a></h3>
1326 +<pre><code class="language-bash">curl -I https://&lt;your-domain&gt;/
1327 +# Attendu : HTTP/2 200 (ou 302 vers /login)
1328 +
1329 +# Vérifier HSTS
1330 +curl -sI https://&lt;your-domain&gt;/ | grep -i strict-transport
1331 +</code></pre>
1332 +<hr>
1333 +<h2 id="phase-5--exposer-ssh-git-sur-22-via-nginx-stream"><a class="header" href="#phase-5--exposer-ssh-git-sur-22-via-nginx-stream">Phase 5 — Exposer SSH Git sur :22 via Nginx stream</a></h2>
1334 +<h3 id="5a-ajouter-le-bloc-stream"><a class="header" href="#5a-ajouter-le-bloc-stream">5a. Ajouter le bloc stream</a></h3>
1335 +<pre><code class="language-bash">ssh gitrust-host bash &lt;&lt;'EOF'
1336 +sudo nginx -V 2&gt;&amp;1 | grep -o with-stream
1337 +
1338 +sudo tee -a /etc/nginx/nginx.conf &lt;&lt;'NGINX'
1339 +
1340 +# --- Gitrust SSH (proxy :22 -&gt; :2222) -----------------------------------------
1341 +stream {
1342 + upstream gitrust_ssh {
1343 + server 127.0.0.1:2222;
1344 + }
1345 + server {
1346 + listen 22;
1347 + listen [::]:22;
1348 + proxy_pass gitrust_ssh;
1349 + proxy_timeout 1h;
1350 + proxy_connect_timeout 30s;
1351 + error_log /var/log/nginx/gitrust-ssh.log;
1352 + }
1353 +}
1354 +NGINX
1355 +
1356 +sudo nginx -t &amp;&amp; sudo systemctl restart nginx
1357 +sudo ss -tlnp | grep -E ':22\b|:2222\b'
1358 +# Attendu : nginx :22, gitrust :2222 (loopback)
1359 +EOF
1360 +</code></pre>
1361 +<h3 id="5b-désactiver-sshd-système-sur-22-phase-1c"><a class="header" href="#5b-désactiver-sshd-système-sur-22-phase-1c">5b. Désactiver sshd système sur :22 (Phase 1c)</a></h3>
1362 +<pre><code class="language-bash">ssh -p 2022 &lt;admin-user&gt;@&lt;your-server-ip&gt; bash &lt;&lt;'EOF'
1363 +sudo sed -i 's/^Port 22$/# Port 22 déplacé/' /etc/ssh/sshd_config 2&gt;/dev/null || true
1364 +sudo systemctl restart ssh
1365 +sudo ss -tlnp | grep -E ':22\b|:2022\b'
1366 +# Attendu : nginx :22, sshd :2022 — plus de sshd:22
1367 +EOF
1368 +</code></pre>
1369 +<h3 id="5c-test-clone-git"><a class="header" href="#5c-test-clone-git">5c. Test clone Git</a></h3>
1370 +<pre><code class="language-bash"># Dans l'UI gitrust : Settings -&gt; SSH keys -&gt; coller ~/.ssh/id_ed25519.pub
1371 +# Créer un repo test admin/test-deploy via UI
1372 +
1373 +git clone git@&lt;your-domain&gt;:admin/test-deploy.git /tmp/test-deploy
1374 +cd /tmp/test-deploy
1375 +echo "# test" &gt; README.md
1376 +git -c user.email=&lt;acme-email&gt; -c user.name=admin add . &amp;&amp; \
1377 + git -c user.email=&lt;acme-email&gt; -c user.name=admin commit -m "test deploy" &amp;&amp; \
1378 + git push origin main
1379 +</code></pre>
1380 +<hr>
1381 +<h2 id="phase-6--vérifications-globales"><a class="header" href="#phase-6--vérifications-globales">Phase 6 — Vérifications globales</a></h2>
1382 +<pre><code class="language-bash"># Service systemd
1383 +ssh gitrust-host 'sudo systemctl status gitrust --no-pager'
1384 +
1385 +# Logs (recherche d'erreurs)
1386 +ssh gitrust-host 'sudo journalctl -u gitrust -n 100 --no-pager | grep -iE "error|warn|fail"'
1387 +
1388 +# Ports d'écoute (vue d'ensemble)
1389 +ssh gitrust-host 'sudo ss -tlnp'
1390 +# Attendu :
1391 +# :22 nginx
1392 +# :80 nginx
1393 +# :443 nginx
1394 +# :2022 sshd système
1395 +# 127.0.0.1:2222 gitrust
1396 +# 127.0.0.1:4000 gitrust
1397 +# 127.0.0.1:5432 docker-proxy
1398 +
1399 +# Renouvellement TLS automatique
1400 +ssh gitrust-host 'sudo systemctl status certbot.timer --no-pager'
1401 +
1402 +# Test E2E
1403 +curl -I https://&lt;your-domain&gt;/login
1404 +ssh -T git@&lt;your-domain&gt; || true # Banner SSH russh attendu
1405 +</code></pre>
1406 +<hr>
1407 +<h2 id="phase-7--durcissement--fail2ban"><a class="header" href="#phase-7--durcissement--fail2ban">Phase 7 — Durcissement : Fail2ban</a></h2>
1408 +<p>Voir <code>administration_manual/how-to/durcir-avec-fail2ban.md</code> pour la configuration complète.</p>
1409 +<h3 id="7a-installation"><a class="header" href="#7a-installation">7a. Installation</a></h3>
1410 +<pre><code class="language-bash">ssh gitrust-host bash &lt;&lt;'EOF'
1411 +sudo apt install -y fail2ban
1412 +sudo systemctl enable --now fail2ban
1413 +EOF
1414 +</code></pre>
1415 +<h3 id="7b-configuration-minimale-rapide"><a class="header" href="#7b-configuration-minimale-rapide">7b. Configuration minimale rapide</a></h3>
1416 +<pre><code class="language-bash">ssh gitrust-host sudo tee /etc/fail2ban/jail.local &lt;&lt;'EOF'
1417 +[DEFAULT]
1418 +backend = systemd
1419 +bantime = 1h
1420 +findtime = 10m
1421 +maxretry = 5
1422 +ignoreip = 127.0.0.1/8 ::1
1423 +banaction = ufw
1424 +banaction_allports = ufw
1425 +
1426 +[sshd]
1427 +enabled = true
1428 +port = 2022
1429 +filter = sshd
1430 +backend = %(sshd_backend)s
1431 +logpath = %(sshd_log)s
1432 +maxretry = 3
1433 +
1434 +[nginx-http-auth]
1435 +enabled = true
1436 +port = http,https
1437 +filter = nginx-http-auth
1438 +logpath = /var/log/nginx/gitrust.error.log
1439 +
1440 +[gitrust-login]
1441 +enabled = true
1442 +port = http,https
1443 +filter = gitrust-login
1444 +logpath = /var/log/nginx/gitrust.access.log
1445 +maxretry = 5
1446 +
1447 +[gitrust-ssh]
1448 +enabled = true
1449 +port = 22,2222
1450 +filter = gitrust-ssh
1451 +backend = systemd
1452 +journalmatch = _SYSTEMD_UNIT=gitrust.service
1453 +maxretry = 5
1454 +
1455 +[recidive]
1456 +enabled = true
1457 +logpath = /var/log/fail2ban.log
1458 +banaction = %(banaction_allports)s
1459 +bantime = 1w
1460 +findtime = 1d
1461 +maxretry = 3
1462 +EOF
1463 +</code></pre>
1464 +<p>Créer les filtres gitrust-login et gitrust-ssh, puis :</p>
1465 +<pre><code class="language-bash">ssh gitrust-host 'sudo systemctl restart fail2ban &amp;&amp; sudo fail2ban-client status'
1466 +</code></pre>
1467 +<hr>
1468 +<h2 id="phase-8--mise-à-jour-vers-un-nouveau-domaine-quand-dns-prêt"><a class="header" href="#phase-8--mise-à-jour-vers-un-nouveau-domaine-quand-dns-prêt">Phase 8 — Mise à jour vers un nouveau domaine (quand DNS prêt)</a></h2>
1469 +<h3 id="8a-ajouter-le-san-au-certificat-existant"><a class="header" href="#8a-ajouter-le-san-au-certificat-existant">8a. Ajouter le SAN au certificat existant</a></h3>
1470 +<pre><code class="language-bash">ssh gitrust-host 'sudo certbot --nginx --expand \
1471 + -d &lt;your-domain&gt; \
1472 + -d &lt;new-domain&gt; \
1473 + --email &lt;acme-email&gt; \
1474 + --agree-tos --no-eff-email'
1475 +</code></pre>
1476 +<h3 id="8b-mettre-à-jour-la-conf-nginx"><a class="header" href="#8b-mettre-à-jour-la-conf-nginx">8b. Mettre à jour la conf Nginx</a></h3>
1477 +<pre><code class="language-bash">ssh gitrust-host bash &lt;&lt;EOF
1478 +sudo sed -i 's/server_name &lt;your-domain&gt;;/server_name &lt;your-domain&gt; &lt;new-domain&gt;;/g' /etc/nginx/sites-available/gitrust
1479 +sudo nginx -t &amp;&amp; sudo systemctl reload nginx
1480 +EOF
1481 +</code></pre>
1482 +<h3 id="8c-mettre-à-jour-envproduction-et-redéployer"><a class="header" href="#8c-mettre-à-jour-envproduction-et-redéployer">8c. Mettre à jour <code>.env.production</code> et redéployer</a></h3>
1483 +<pre><code class="language-bash">sed -i 's|SSH_PUBLIC_HOST=.*|SSH_PUBLIC_HOST=&lt;new-domain&gt;|' .env.production
1484 +sed -i 's|EMAIL_BASE_URL=.*|EMAIL_BASE_URL=https://&lt;new-domain&gt;|' .env.production
1485 +./deployment/deploy.sh gitrust-host
1486 +</code></pre>
1487 +<hr>
1488 +<h2 id="phase-9--mises-à-jour-ultérieures"><a class="header" href="#phase-9--mises-à-jour-ultérieures">Phase 9 — Mises à jour ultérieures</a></h2>
1489 +<pre><code class="language-bash">git pull
1490 +SKIP_ENV=1 SKIP_DB=1 ./deployment/deploy.sh
1491 +</code></pre>
1492 +<hr>
1493 +<h2 id="dépannage"><a class="header" href="#dépannage">Dépannage</a></h2>
1494 +<div class="table-wrapper">
1495 +<table>
1496 +<thead>
1497 +<tr><th>Symptôme</th><th>Diagnostic</th><th>Fix</th></tr>
1498 +</thead>
1499 +<tbody>
1500 +<tr><td>Lockout SSH après reload sshd</td><td>—</td><td>Console physique / KVM IPMI</td></tr>
1501 +<tr><td>Cert Let’s Encrypt échoue (<code>Connection refused</code>)</td><td><code>dig +short &lt;your-domain&gt;</code> ≠ IP publique</td><td>Corriger DNS, ou vérifier que :80 traverse bien le NAT</td></tr>
1502 +<tr><td>Cert échoue (<code>unauthorized</code>)</td><td>Nginx <code>:80</code> ne répond pas sur <code>/.well-known/acme-challenge/</code></td><td><code>curl http://&lt;your-domain&gt;/.well-known/acme-challenge/test</code> doit ne pas rediriger en 301</td></tr>
1503 +<tr><td>Login boucle sur <code>/login</code> malgré HTTPS</td><td><code>grep COOKIE_SECURE /opt/gitrust/.env</code></td><td>Doit être <code>true</code> ; vérifier que Nginx forward bien <code>X-Forwarded-Proto https</code></td></tr>
1504 +<tr><td>Push SSH <code>Connection closed</code></td><td><code>journalctl -u gitrust | grep ssh</code></td><td>Vérifier que gitrust écoute bien <code>127.0.0.1:2222</code> et que nginx stream forward</td></tr>
1505 +<tr><td><code>nginx -t</code> : <code>unknown directive "stream"</code></td><td>Module non chargé</td><td><code>sudo apt install libnginx-mod-stream</code> puis <code>systemctl restart nginx</code></td></tr>
1506 +<tr><td>Mixed content HTTPS</td><td>Templates qui hardcodent <code>http://</code></td><td>Vérifier <code>EMAIL_BASE_URL=https://...</code> et headers <code>X-Forwarded-Proto</code></td></tr>
1507 +<tr><td>Push gros repo timeout</td><td>Logs nginx <code>client intended to send too large body</code></td><td>Augmenter <code>client_max_body_size 2G</code> (déjà fait pour <code>.git/</code>)</td></tr>
1508 +</tbody>
1509 +</table>
1510 +</div>
1511 +<hr>
1512 +<h2 id="récapitulatif-des-ports"><a class="header" href="#récapitulatif-des-ports">Récapitulatif des ports</a></h2>
1513 +<div class="table-wrapper">
1514 +<table>
1515 +<thead>
1516 +<tr><th>Port</th><th>Process</th><th>Exposition</th><th>Rôle</th></tr>
1517 +</thead>
1518 +<tbody>
1519 +<tr><td>22</td><td>nginx (stream)</td><td>Public</td><td>SSH Git → forward vers :2222</td></tr>
1520 +<tr><td>80</td><td>nginx</td><td>Public</td><td>ACME challenge + redirect HTTPS</td></tr>
1521 +<tr><td>443</td><td>nginx</td><td>Public</td><td>HTTPS → forward vers :4000</td></tr>
1522 +<tr><td>2022</td><td>sshd système</td><td>Public</td><td>Admin SSH (à restreindre par firewall si possible)</td></tr>
1523 +<tr><td>2222</td><td>gitrust</td><td>Loopback</td><td>Backend SSH russh</td></tr>
1524 +<tr><td>4000</td><td>gitrust</td><td>Loopback</td><td>Backend HTTP axum</td></tr>
1525 +<tr><td>5432</td><td>docker-proxy</td><td>Loopback</td><td>PostgreSQL</td></tr>
1526 +</tbody>
1527 +</table>
1528 +</div>
1529 +<div style="break-before: page; page-break-before: always;"></div>
1530 +<h1 id="guides-pratiques-1"><a class="header" href="#guides-pratiques-1">Guides pratiques</a></h1>
1531 +<blockquote>
1532 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
1533 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
1534 +</blockquote>
1535 +<h2 id="todo-27"><a class="header" href="#todo-27">TODO</a></h2>
1536 +<ul>
1537 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
1538 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
1539 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
1540 +</ul>
1541 +<div style="break-before: page; page-break-before: always;"></div>
1542 +<h1 id="sauvegarder-et-restaurer"><a class="header" href="#sauvegarder-et-restaurer">Sauvegarder et restaurer</a></h1>
1543 +<blockquote>
1544 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
1545 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
1546 +</blockquote>
1547 +<h2 id="todo-28"><a class="header" href="#todo-28">TODO</a></h2>
1548 +<ul>
1549 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
1550 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
1551 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
1552 +</ul>
1553 +<div style="break-before: page; page-break-before: always;"></div>
1554 +<h1 id="mettre-à-jour-gitrust"><a class="header" href="#mettre-à-jour-gitrust">Mettre à jour gitrust</a></h1>
1555 +<blockquote>
1556 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
1557 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
1558 +</blockquote>
1559 +<h2 id="todo-29"><a class="header" href="#todo-29">TODO</a></h2>
1560 +<ul>
1561 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
1562 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
1563 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
1564 +</ul>
1565 +<div style="break-before: page; page-break-before: always;"></div>
1566 +<h1 id="configurer-smtp"><a class="header" href="#configurer-smtp">Configurer SMTP</a></h1>
1567 +<blockquote>
1568 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
1569 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
1570 +</blockquote>
1571 +<h2 id="todo-30"><a class="header" href="#todo-30">TODO</a></h2>
1572 +<ul>
1573 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
1574 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
1575 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
1576 +</ul>
1577 +<div style="break-before: page; page-break-before: always;"></div>
1578 +<h1 id="configurer-oauth"><a class="header" href="#configurer-oauth">Configurer OAuth</a></h1>
1579 +<blockquote>
1580 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
1581 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
1582 +</blockquote>
1583 +<h2 id="todo-31"><a class="header" href="#todo-31">TODO</a></h2>
1584 +<ul>
1585 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
1586 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
1587 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
1588 +</ul>
1589 +<div style="break-before: page; page-break-before: always;"></div>
1590 +<h1 id="configurer-le-runner-ci-distant"><a class="header" href="#configurer-le-runner-ci-distant">Configurer le runner CI distant</a></h1>
1591 +<p>Guide d’usage du script qui provisionne une machine distante pour exécuter les pipelines CI/CD de gitrust via SSH + rsync + Dagger.</p>
1592 +<hr>
1593 +<h2 id="1-rôle-du-script"><a class="header" href="#1-rôle-du-script">1. Rôle du script</a></h2>
1594 +<p><code>deployment/setup-remote-ci.sh</code> (disponible dans le dépôt source gitrust) prépare <strong>un serveur de build distant</strong> utilisé par le worker CI de gitrust. Il automatise 6 étapes :</p>
1595 +<ol>
1596 +<li>Vérifie la connectivité SSH vers le runner</li>
1597 +<li>Installe <strong>Docker</strong> (<code>curl https://get.docker.com | sh</code>) s’il est absent</li>
1598 +<li>Installe <strong>Dagger CLI</strong> (<code>curl https://dl.dagger.io/dagger/install.sh | sh</code>) s’il est absent</li>
1599 +<li>Crée le répertoire de travail distant (<code>CI_REMOTE_PATH</code>)</li>
1600 +<li>Synchronise le module <code>deployment/ci-engine/</code> (mode CI Easy) via <code>rsync -az --delete</code></li>
1601 +<li>Smoke test : affiche <code>docker --version</code> et <code>dagger version</code></li>
1602 +</ol>
1603 +<p>Le script est <strong>idempotent</strong> : rejoue sans dommage, skip ce qui existe déjà.</p>
1604 +<hr>
1605 +<h2 id="2-quand-lutiliser"><a class="header" href="#2-quand-lutiliser">2. Quand l’utiliser</a></h2>
1606 +<div class="table-wrapper">
1607 +<table>
1608 +<thead>
1609 +<tr><th>Scénario</th><th>Besoin de <code>setup-remote-ci.sh</code> ?</th></tr>
1610 +</thead>
1611 +<tbody>
1612 +<tr><td>Dev local, CI sur la même machine que gitrust (<code>CI_REMOTE_HOST=localhost</code>)</td><td><strong>Non</strong> — Docker et Dagger déjà installés localement, le <code>ci-engine/</code> est lu depuis <code>deployment/ci-engine/</code> directement</td></tr>
1613 +<tr><td>Prod on-premise, un seul serveur (gitrust + CI colocalisés)</td><td><strong>Non</strong> — idem, un simple <code>curl get.docker.com | sh</code> suffit sur le serveur gitrust</td></tr>
1614 +<tr><td>Prod avec <strong>runner CI dédié</strong> (machine séparée)</td><td><strong>OUI</strong> — c’est le cas cible de ce script</td></tr>
1615 +<tr><td>Prod avec plusieurs instances gitrust partageant un runner</td><td><strong>OUI</strong> — le runner est provisionné une fois, chaque instance pointe dessus</td></tr>
1616 +<tr><td>CI dans Kubernetes / Nomad / runner managé cloud</td><td><strong>Non</strong> — ce script est pensé pour une VM Debian/Ubuntu classique</td></tr>
1617 +</tbody>
1618 +</table>
1619 +</div>
1620 +<hr>
1621 +<h2 id="3-architecture-cible"><a class="header" href="#3-architecture-cible">3. Architecture cible</a></h2>
1622 +<pre><code>+---------------------+ SSH + rsync +-----------------------+
1623 +| Gitrust (web+SSH) |---------------------------| CI Runner (distant) |
1624 +| &lt;your-server-ip&gt; | CI_REMOTE_HOST/USER/KEY | &lt;ci-runner-ip&gt; |
1625 +| | | |
1626 +| Worker CI Tokio | push .gitrust-ci.yml | /opt/gitrust-ci/ |
1627 +| (dans gitrust.bin) | + code source checkout | ├── ci-engine/ |
1628 +| | | └── workspaces/ |
1629 +| | dagger call ... | |
1630 +| | | Docker + Dagger CLI |
1631 ++---------------------+ +-----------------------+
1632 +</code></pre>
1633 +<p>Le worker CI de gitrust (tâche Tokio dans le binaire principal) ne fait <strong>pas tourner</strong> Docker localement — il délègue au runner via SSH. Cela permet d’isoler les workloads CPU/RAM gourmands (builds Rust, Node, Docker) du process web de gitrust.</p>
1634 +<hr>
1635 +<h2 id="4-pré-requis"><a class="header" href="#4-pré-requis">4. Pré-requis</a></h2>
1636 +<h3 id="sur-la-machine-dexécution-là-où-on-lance-le-script"><a class="header" href="#sur-la-machine-dexécution-là-où-on-lance-le-script">Sur la machine d’exécution (là où on lance le script)</a></h3>
1637 +<div class="table-wrapper">
1638 +<table>
1639 +<thead>
1640 +<tr><th>Outil</th><th>Rôle</th></tr>
1641 +</thead>
1642 +<tbody>
1643 +<tr><td><code>bash</code> ≥ 4</td><td>Interpréteur</td></tr>
1644 +<tr><td><code>ssh</code>, <code>rsync</code></td><td>Transport et synchro</td></tr>
1645 +<tr><td><code>ssh-agent</code> chargé <strong>ou</strong> <code>CI_REMOTE_SSH_KEY</code> défini</td><td>Auth SSH sans mot de passe interactif (<code>BatchMode=yes</code>)</td></tr>
1646 +<tr><td>Fichier <code>.env</code> avec les variables CI_REMOTE_*</td><td>Config (voir section 5)</td></tr>
1647 +</tbody>
1648 +</table>
1649 +</div>
1650 +<h3 id="sur-le-runner-distant"><a class="header" href="#sur-le-runner-distant">Sur le runner distant</a></h3>
1651 +<div class="table-wrapper">
1652 +<table>
1653 +<thead>
1654 +<tr><th>Pré-requis</th><th>Pourquoi</th></tr>
1655 +</thead>
1656 +<tbody>
1657 +<tr><td>OS Linux récent (Debian 12+, Ubuntu 22.04+)</td><td>Docker install script compatible</td></tr>
1658 +<tr><td>User avec <code>sudo</code> passwordless <strong>ou</strong> droits <code>docker</code></td><td><code>get.docker.com</code> fait <code>sudo</code> en interne</td></tr>
1659 +<tr><td>Clé SSH publique du user local dans <code>~/.ssh/authorized_keys</code></td><td>Auth SSH non-interactive</td></tr>
1660 +<tr><td>Réseau sortant autorisé vers <code>get.docker.com</code> et <code>dl.dagger.io</code></td><td>Installation des binaires</td></tr>
1661 +<tr><td>Au minimum ~5 Go libres dans <code>CI_REMOTE_PATH</code></td><td>Images Docker + workspaces</td></tr>
1662 +</tbody>
1663 +</table>
1664 +</div>
1665 +<hr>
1666 +<h2 id="5-variables-denvironnement-attendues-le-env"><a class="header" href="#5-variables-denvironnement-attendues-le-env">5. Variables d’environnement attendues (le <code>.env</code>)</a></h2>
1667 +<p>Le script <strong>source un fichier <code>.env</code></strong> dont le chemin est passé en argument, ou par défaut <code>../.env</code> (relatif au script, donc <code>&lt;racine_projet&gt;/.env</code>).</p>
1668 +<h3 id="tableau-des-variables"><a class="header" href="#tableau-des-variables">Tableau des variables</a></h3>
1669 +<div class="table-wrapper">
1670 +<table>
1671 +<thead>
1672 +<tr><th>Variable</th><th>Obligatoire</th><th>Défaut</th><th>Description</th></tr>
1673 +</thead>
1674 +<tbody>
1675 +<tr><td><code>CI_REMOTE_HOST</code></td><td><strong>OUI</strong></td><td>—</td><td>Hostname ou IP du runner (ex: <code>ci-runner.internal</code>)</td></tr>
1676 +<tr><td><code>CI_REMOTE_USER</code></td><td>non</td><td><code>$(whoami)</code> (user courant)</td><td>Compte SSH sur le runner</td></tr>
1677 +<tr><td><code>CI_REMOTE_SSH_PORT</code></td><td>non</td><td><code>22</code></td><td>Port SSH du runner</td></tr>
1678 +<tr><td><code>CI_REMOTE_PATH</code></td><td>non</td><td><code>/opt/gitrust-ci</code></td><td>Répertoire de travail distant (créé par le script)</td></tr>
1679 +<tr><td><code>CI_REMOTE_SSH_KEY</code></td><td>non</td><td>— (ssh-agent)</td><td>Chemin d’une clé privée SSH spécifique</td></tr>
1680 +</tbody>
1681 +</table>
1682 +</div>
1683 +<p>Ces variables sont les <strong>mêmes</strong> que celles lues par gitrust au runtime. Centraliser dans <code>.env</code> évite les divergences entre le provisionnement et le runtime.</p>
1684 +<h3 id="exemple-minimal-de-env-runner-dédié"><a class="header" href="#exemple-minimal-de-env-runner-dédié">Exemple minimal de <code>.env</code> (runner dédié)</a></h3>
1685 +<pre><code class="language-bash"># --- CI runner distant ---
1686 +CI_REMOTE_HOST=&lt;ci-runner-ip&gt;
1687 +CI_REMOTE_USER=ci-runner
1688 +CI_REMOTE_SSH_PORT=22
1689 +CI_REMOTE_PATH=/opt/gitrust-ci
1690 +CI_REMOTE_SSH_KEY=/home/gitrust/.ssh/ci_runner_ed25519
1691 +</code></pre>
1692 +<h3 id="exemple-env-complet-coexistant-avec-config-gitrust"><a class="header" href="#exemple-env-complet-coexistant-avec-config-gitrust">Exemple <code>.env</code> complet coexistant avec config gitrust</a></h3>
1693 +<pre><code class="language-bash">DATABASE_URL=postgres://...
1694 +JWT_SECRET=...
1695 +# ... (voir .env.example pour le reste)
1696 +
1697 +# --- CI/CD (lu par gitrust ET par setup-remote-ci.sh) ---
1698 +CI_ENABLED=true
1699 +CI_MAX_CONCURRENT=4
1700 +CI_REMOTE_HOST=ci-runner.internal
1701 +CI_REMOTE_USER=ci-runner
1702 +CI_REMOTE_PATH=/opt/gitrust-ci
1703 +CI_REMOTE_SSH_KEY=/opt/gitrust/data/ci_runner_key
1704 +</code></pre>
1705 +<h3 id="cas--runner-local--pas-besoin-du-script"><a class="header" href="#cas--runner-local--pas-besoin-du-script">Cas « runner local » (pas besoin du script)</a></h3>
1706 +<pre><code class="language-bash">CI_REMOTE_HOST=localhost
1707 +# Les autres CI_REMOTE_* sont ignorés
1708 +</code></pre>
1709 +<p>Dans ce cas, installer Docker et Dagger directement sur la machine gitrust, copier <code>deployment/ci-engine/</code> vers <code>CI_ENGINE_PATH</code> (défaut <code>/opt/gitrust/ci-engine</code>) et passer à la suite. <strong>Ne pas exécuter <code>setup-remote-ci.sh</code></strong> avec <code>CI_REMOTE_HOST=localhost</code>.</p>
1710 +<hr>
1711 +<h2 id="6-usage"><a class="header" href="#6-usage">6. Usage</a></h2>
1712 +<h3 id="depuis-la-racine-du-projet-par-défaut"><a class="header" href="#depuis-la-racine-du-projet-par-défaut">Depuis la racine du projet (par défaut)</a></h3>
1713 +<pre><code class="language-bash">cd /chemin/vers/gitrust
1714 +
1715 +# .env a la racine (défaut) :
1716 +./deployment/setup-remote-ci.sh
1717 +</code></pre>
1718 +<h3 id="avec-un-env-explicite"><a class="header" href="#avec-un-env-explicite">Avec un <code>.env</code> explicite</a></h3>
1719 +<pre><code class="language-bash">./deployment/setup-remote-ci.sh /chemin/vers/mon.env
1720 +# Utile si vous avez .env.production, .env.staging, etc.
1721 +./deployment/setup-remote-ci.sh .env.production
1722 +</code></pre>
1723 +<h3 id="sortie-attendue"><a class="header" href="#sortie-attendue">Sortie attendue</a></h3>
1724 +<pre><code>==&gt; Configuration :
1725 + Serveur : ci-runner@&lt;ci-runner-ip&gt;
1726 + Port SSH : 22
1727 + Chemin : /opt/gitrust-ci
1728 +
1729 +==&gt; [1/6] Vérification de la connectivité SSH...
1730 +SSH OK
1731 + OK
1732 +==&gt; [2/6] Vérification de Docker...
1733 + Docker déjà installé
1734 +==&gt; [3/6] Vérification de Dagger CLI...
1735 + Installation de Dagger CLI...
1736 + Dagger installé
1737 +==&gt; [4/6] Création du répertoire distant...
1738 + /opt/gitrust-ci créé
1739 +==&gt; [5/6] Synchronisation du ci-engine...
1740 +sending incremental file list
1741 +ci-engine/
1742 +ci-engine/profiles/
1743 +...
1744 + ci-engine synchronisé vers /opt/gitrust-ci/ci-engine/
1745 +==&gt; [6/6] Smoke test...
1746 + Versions distantes :
1747 +Docker version 28.0.1, build abcd123
1748 +dagger v0.19.2 (linux/amd64)
1749 +
1750 +==&gt; Setup terminé. Le serveur ci-runner@&lt;ci-runner-ip&gt; est prêt pour l'exécution CI.
1751 + Pensez à configurer CI_EXECUTION_MODE=remote dans votre .env
1752 +</code></pre>
1753 +<hr>
1754 +<h2 id="7-ce-qui-se-retrouve-sur-le-runner"><a class="header" href="#7-ce-qui-se-retrouve-sur-le-runner">7. Ce qui se retrouve sur le runner</a></h2>
1755 +<p>Après exécution réussie :</p>
1756 +<pre><code>/opt/gitrust-ci/ &lt;- CI_REMOTE_PATH
1757 +└── ci-engine/ &lt;- synchronisé depuis deployment/ci-engine/
1758 + ├── README.md
1759 + └── profiles/ &lt;- templates par stack (Python, Node, Rust, ...)
1760 +</code></pre>
1761 +<p>Plus, installés globalement :</p>
1762 +<ul>
1763 +<li><code>/usr/bin/docker</code> (ou équivalent) + socket <code>/var/run/docker.sock</code></li>
1764 +<li><code>/usr/local/bin/dagger</code></li>
1765 +</ul>
1766 +<p>Les <strong>workspaces de pipelines</strong> (checkouts temporaires) sont créés par le worker CI de gitrust au moment de l’exécution sous <code>CI_WORKSPACE_PATH</code> (défaut <code>/tmp/gitrust-ci</code>) — <strong>pas par ce script</strong>.</p>
1767 +<hr>
1768 +<h2 id="8-vérifications-post-setup"><a class="header" href="#8-vérifications-post-setup">8. Vérifications post-setup</a></h2>
1769 +<h3 id="depuis-la-machine-gitrust"><a class="header" href="#depuis-la-machine-gitrust">Depuis la machine gitrust</a></h3>
1770 +<pre><code class="language-bash"># Source le .env
1771 +set -a; source .env.production; set +a
1772 +
1773 +# 1. SSH direct (doit passer sans prompt)
1774 +ssh -p ${CI_REMOTE_SSH_PORT:-22} \
1775 + ${CI_REMOTE_SSH_KEY:+-i $CI_REMOTE_SSH_KEY} \
1776 + $CI_REMOTE_USER@$CI_REMOTE_HOST 'docker info &amp;&amp; dagger version'
1777 +
1778 +# 2. Rsync round-trip (lecture/écriture sur CI_REMOTE_PATH)
1779 +echo "test" | ssh $CI_REMOTE_USER@$CI_REMOTE_HOST \
1780 + "cat &gt; $CI_REMOTE_PATH/.gitrust-test &amp;&amp; cat $CI_REMOTE_PATH/.gitrust-test &amp;&amp; rm $CI_REMOTE_PATH/.gitrust-test"
1781 +# Attendu : "test"
1782 +</code></pre>
1783 +<h3 id="pipeline-de-test-via-gitrust"><a class="header" href="#pipeline-de-test-via-gitrust">Pipeline de test via gitrust</a></h3>
1784 +<p>Pousser un dépôt avec un <code>.gitrust-ci.yml</code> minimal :</p>
1785 +<pre><code class="language-yaml"># .gitrust-ci.yml
1786 +version: 1
1787 +pipeline:
1788 + - name: smoke
1789 + image: alpine:3
1790 + run: echo "CI runner OK"
1791 +</code></pre>
1792 +<p>Puis dans l’UI gitrust : onglet <code>Pipelines</code> → la pipeline doit passer au statut <code>success</code>.</p>
1793 +<hr>
1794 +<h2 id="9-mise-à-jour-après-modification-du-ci-engine"><a class="header" href="#9-mise-à-jour-après-modification-du-ci-engine">9. Mise à jour après modification du <code>ci-engine/</code></a></h2>
1795 +<p>Le <code>ci-engine/</code> synchronisé n’est pas « live-linké » : rejouer le script après modification côté source.</p>
1796 +<pre><code class="language-bash"># Modifier deployment/ci-engine/profiles/*.py ou similaire
1797 +./deployment/setup-remote-ci.sh
1798 +# Les étapes 2-3 sont skip (déjà installés), seule l'étape 5 refait le rsync
1799 +</code></pre>
1800 +<p><code>rsync -az --delete</code> <strong>supprime</strong> les fichiers côté runner qui n’existent plus localement — garantit la cohérence.</p>
1801 +<hr>
1802 +<h2 id="10-dépannage"><a class="header" href="#10-dépannage">10. Dépannage</a></h2>
1803 +<div class="table-wrapper">
1804 +<table>
1805 +<thead>
1806 +<tr><th>Symptôme</th><th>Cause probable</th><th>Fix</th></tr>
1807 +</thead>
1808 +<tbody>
1809 +<tr><td><code>ERREUR: fichier .env introuvable</code></td><td><code>.env</code> absent ou chemin incorrect</td><td><code>cp .env.example .env &amp;&amp; $EDITOR .env</code> ou passer le chemin : <code>./setup-remote-ci.sh /path/to/.env</code></td></tr>
1810 +<tr><td><code>ERREUR: CI_REMOTE_HOST non défini</code></td><td>Variable commentée ou absente</td><td>Décommenter <code>CI_REMOTE_HOST=...</code> dans le <code>.env</code></td></tr>
1811 +<tr><td><code>ERREUR: impossible de se connecter</code></td><td>SSH bloqué, mauvais user, clé non autorisée</td><td>Tester manuellement : <code>ssh -v -p X user@host</code> ; vérifier <code>~/.ssh/authorized_keys</code> sur le runner</td></tr>
1812 +<tr><td><code>Permission denied (publickey)</code></td><td><code>BatchMode=yes</code> interdit les prompts, clé non chargée</td><td><code>ssh-add ~/.ssh/ci_runner_ed25519</code> ou définir <code>CI_REMOTE_SSH_KEY=/path/to/key</code></td></tr>
1813 +<tr><td><code>sudo: a password is required</code> pendant l’install Docker</td><td>User sans <code>NOPASSWD</code> sudo</td><td>Ajouter le user au <code>sudoers</code> : <code>ci-runner ALL=(ALL) NOPASSWD:ALL</code> (runner uniquement)</td></tr>
1814 +<tr><td><code>curl: (7) Failed to connect to get.docker.com</code></td><td>Réseau sortant du runner bloqué</td><td>Whitelist <code>get.docker.com</code> et <code>dl.dagger.io</code>, ou pré-installer Docker + Dagger manuellement</td></tr>
1815 +<tr><td><code>ATTENTION: ... ci-engine introuvable</code></td><td>Lancé hors du repo gitrust</td><td><code>cd</code> dans la racine du projet avant de lancer</td></tr>
1816 +<tr><td>Pipeline reste <code>queued</code> indéfiniment</td><td>Worker CI ne trouve pas le runner</td><td>Vérifier <code>CI_EXECUTION_MODE=remote</code> dans <code>.env</code> gitrust + logs : <code>journalctl -u gitrust | grep -i 'ci|dagger'</code></td></tr>
1817 +<tr><td><code>dagger: command not found</code> au smoke test</td><td><code>$PATH</code> du user SSH ne contient pas <code>/usr/local/bin</code></td><td><code>echo 'export PATH=$PATH:/usr/local/bin' &gt;&gt; ~/.bashrc</code> sur le runner, ou <code>CI_DAGGER_BIN=/usr/local/bin/dagger</code> côté gitrust</td></tr>
1818 +</tbody>
1819 +</table>
1820 +</div>
1821 +<hr>
1822 +<h2 id="11-sécurité"><a class="header" href="#11-sécurité">11. Sécurité</a></h2>
1823 +<ul>
1824 +<li>Le runner CI exécute du <strong>code arbitraire</strong> venant des dépôts hébergés. <strong>Ne jamais</strong> le colocaliser avec des secrets sensibles (PG prod, clés de prod).</li>
1825 +<li>Isoler réseau : bloquer l’accès sortant du runner vers le LAN privé (seul l’accès Internet pour <code>docker pull</code> est nécessaire).</li>
1826 +<li>Limiter <code>sudo NOPASSWD</code> au strict minimum sur le runner (idéalement : juste pour les commandes <code>docker</code> et <code>apt</code>).</li>
1827 +<li>Rotation régulière de la clé SSH <code>CI_REMOTE_SSH_KEY</code>. La révoquer dans <code>~/.ssh/authorized_keys</code> côté runner en cas de suspicion.</li>
1828 +<li>Le runner ne doit <strong>pas</strong> pouvoir se connecter en SSH à la machine gitrust (unidirectionnel).</li>
1829 +</ul>
1830 +<div style="break-before: page; page-break-before: always;"></div>
1831 +<h1 id="intégrer-la-ci-et-dependency-track"><a class="header" href="#intégrer-la-ci-et-dependency-track">Intégrer la CI et Dependency-Track</a></h1>
1832 +<p>Ce document explique comment activer et configurer les deux fonctionnalités de qualité/sécurité de gitrust :</p>
1833 +<ol>
1834 +<li><strong>La CI intégrée</strong> (Dagger) qui exécute les builds/tests/lints à chaque push.</li>
1835 +<li><strong>Le dependency tracker</strong> (Syft + Dependency-Track) qui scanne les composants du code à chaque push et détecte les vulnérabilités connues.</li>
1836 +</ol>
1837 +<p>Ces deux systèmes sont <strong>indépendants</strong> : on peut activer l’un sans l’autre.</p>
1838 +<hr>
1839 +<h2 id="1-architecture-générale"><a class="header" href="#1-architecture-générale">1. Architecture générale</a></h2>
1840 +<pre class="mermaid">flowchart TB
1841 + subgraph Client
1842 + Dev[Développeur]
1843 + end
1844 + subgraph Gitrust[Instance Gitrust]
1845 + HTTP[:4000 HTTP/Git]
1846 + SSH[:2222 SSH/Git]
1847 + Worker[CiWorker&lt;br/&gt;tokio task]
1848 + Sbom[SbomService&lt;br/&gt;tokio spawn]
1849 + DB[(PostgreSQL)]
1850 + end
1851 + subgraph Builder[Serveur de build]
1852 + Docker[Docker/Podman]
1853 + Dagger[Dagger CLI]
1854 + CiEngine[/opt/gitrust-ci/ci-engine/]
1855 + end
1856 + subgraph Security[Stack sécurité optionnelle]
1857 + Syft[syft]
1858 + Dtrack[Dependency-Track]
1859 + end
1860 +
1861 + Dev --&gt;|git push| HTTP
1862 + Dev --&gt;|git push| SSH
1863 + HTTP --&gt; Worker
1864 + SSH --&gt; Worker
1865 + HTTP --&gt; Sbom
1866 + SSH --&gt; Sbom
1867 + Worker --&gt;|SSH + rsync| Builder
1868 + Builder --&gt;|logs streamés| Worker
1869 + Worker --&gt; DB
1870 + Sbom --&gt;|scan workspace| Syft
1871 + Sbom --&gt;|PUT BOM| Dtrack
1872 + Dtrack --&gt;|findings| Sbom
1873 + Sbom --&gt; DB
1874 +</pre>
1875 +
1876 +<p>Trois composants fonctionnent en parallèle :</p>
1877 +<ul>
1878 +<li><strong>CiWorker</strong> : tâche Tokio qui consomme des <code>CiTask</code> depuis un channel <code>mpsc</code>, limitée par un <code>Semaphore</code> à <code>CI_MAX_CONCURRENT</code> pipelines simultanés.</li>
1879 +<li><strong>SbomService</strong> : exécuté dans un <code>tokio::spawn</code> après chaque push, totalement découplé du CI.</li>
1880 +<li><strong>Serveur de build</strong> : machine distante (ou <code>localhost</code>) qui exécute Docker + Dagger. Gitrust y envoie le workspace par rsync et lance Dagger par SSH.</li>
1881 +</ul>
1882 +<hr>
1883 +<h2 id="2-mettre-en-place-la-ci"><a class="header" href="#2-mettre-en-place-la-ci">2. Mettre en place la CI</a></h2>
1884 +<h3 id="21-pré-requis-serveur-de-build"><a class="header" href="#21-pré-requis-serveur-de-build">2.1 Pré-requis serveur de build</a></h3>
1885 +<p>Le serveur de build peut être <strong>la même machine que Gitrust</strong> (<code>CI_REMOTE_HOST=localhost</code>) ou une machine dédiée. Il doit disposer de :</p>
1886 +<div class="table-wrapper">
1887 +<table>
1888 +<thead>
1889 +<tr><th>Outil</th><th>Rôle</th></tr>
1890 +</thead>
1891 +<tbody>
1892 +<tr><td>Docker ou Podman</td><td>Containers Dagger</td></tr>
1893 +<tr><td>Dagger CLI</td><td>Moteur d’exécution</td></tr>
1894 +<tr><td>SSH (accès sortant depuis Gitrust)</td><td>Transport</td></tr>
1895 +<tr><td>rsync</td><td>Copie du workspace</td></tr>
1896 +<tr><td>git, tar</td><td>Extraction du tree du commit</td></tr>
1897 +</tbody>
1898 +</table>
1899 +</div>
1900 +<p>Installation automatique recommandée :</p>
1901 +<pre><code class="language-bash"># Depuis la machine Gitrust (l'utilisateur doit pouvoir SSH vers le builder)
1902 +./deployment/setup-remote-ci.sh .env
1903 +</code></pre>
1904 +<p>Le script exécute :</p>
1905 +<ol>
1906 +<li>Vérification de la connectivité SSH</li>
1907 +<li>Installation de Docker si absent</li>
1908 +<li>Installation de Dagger CLI si absent</li>
1909 +<li>Création du répertoire de travail distant</li>
1910 +<li>Synchronisation du <code>ci-engine</code></li>
1911 +<li>Smoke test (versions)</li>
1912 +</ol>
1913 +<h3 id="22-configuration-gitrust-fichier-env"><a class="header" href="#22-configuration-gitrust-fichier-env">2.2 Configuration Gitrust (fichier .env)</a></h3>
1914 +<p>Ajouter au <code>.env</code> de Gitrust :</p>
1915 +<pre><code class="language-env"># Activer globalement le CI
1916 +CI_ENABLED=true
1917 +
1918 +# Chemin du ci-engine sur le serveur de build
1919 +CI_ENGINE_PATH=/opt/gitrust-ci/ci-engine
1920 +
1921 +# Limite de parallélisme
1922 +CI_MAX_CONCURRENT=4
1923 +CI_DEFAULT_TIMEOUT=3600
1924 +CI_WORKSPACE_PATH=/tmp/gitrust-ci
1925 +
1926 +# Serveur de build (mettre localhost pour "même machine")
1927 +CI_REMOTE_HOST=builder.example.com
1928 +CI_REMOTE_USER=ci-runner
1929 +CI_REMOTE_PATH=/opt/gitrust-ci
1930 +CI_REMOTE_SSH_PORT=22
1931 +# CI_REMOTE_SSH_KEY=/home/gitrust/.ssh/id_ed25519 # si pas ssh-agent
1932 +</code></pre>
1933 +<p>Redémarrer Gitrust : <code>systemctl restart gitrust</code> (ou <code>cargo run --release</code>).</p>
1934 +<h3 id="23-activer-la-ci-sur-un-dépôt"><a class="header" href="#23-activer-la-ci-sur-un-dépôt">2.3 Activer la CI sur un dépôt</a></h3>
1935 +<p>Dans l’interface web : aller sur le dépôt → <strong>Settings</strong> → <strong>CI</strong>.</p>
1936 +<ul>
1937 +<li>Cocher <strong>CI enabled</strong> (requis — par défaut <code>false</code>)</li>
1938 +<li>Cocher <strong>Trigger on push</strong> (active l’exécution à chaque push)</li>
1939 +<li>Optionnel : <strong>Auto-cancel</strong> (annule les pipelines en cours quand un nouveau démarre)</li>
1940 +<li>Optionnel : <strong>Allowed branches</strong> (ex. <code>main,develop</code> — vide = toutes)</li>
1941 +</ul>
1942 +<h3 id="24-choisir-le-mode--easy-ou-power"><a class="header" href="#24-choisir-le-mode--easy-ou-power">2.4 Choisir le mode : Easy ou Power</a></h3>
1943 +<pre class="mermaid">flowchart LR
1944 + Push[Commit&lt;br/&gt;poussé] --&gt; Tree{Arbre du&lt;br/&gt;commit contient ?}
1945 + Tree --&gt;|.dagger/| Power[Mode Power&lt;br/&gt;dagger call -m .dagger/ ci]
1946 + Tree --&gt;|.gitrust-ci.yml| Easy[Mode Easy&lt;br/&gt;dagger call -m ci-engine test-pr]
1947 + Tree --&gt;|rien| None[Pas de pipeline]
1948 + Power --&gt; Run[Exécution&lt;br/&gt;distante SSH]
1949 + Easy --&gt; Run
1950 +</pre>
1951 +
1952 +<h4 id="mode-easy-recommandé-pour-commencer"><a class="header" href="#mode-easy-recommandé-pour-commencer">Mode Easy (recommandé pour commencer)</a></h4>
1953 +<p>Créer <code>.gitrust-ci.yml</code> à la racine du dépôt :</p>
1954 +<pre><code class="language-yaml"># Raccourci : charge un profil pré-configuré (rust | python | node)
1955 +language: rust
1956 +
1957 +build:
1958 + command: "cargo build --release"
1959 +
1960 +checks:
1961 + lint: "cargo clippy -- -D warnings"
1962 + format: "cargo fmt -- --check"
1963 +
1964 +tests:
1965 + command: "cargo test --release"
1966 +</code></pre>
1967 +<p>Les profils disponibles se trouvent dans <code>deployment/ci-engine/profiles/</code> (rust.yaml, python.yaml, node.yaml) dans le dépôt source.</p>
1968 +<h4 id="mode-power"><a class="header" href="#mode-power">Mode Power</a></h4>
1969 +<p>Pour les utilisateurs avancés, créer un module Dagger complet dans <code>.dagger/</code> :</p>
1970 +<pre><code>.dagger/
1971 +├── dagger.json
1972 +├── src/
1973 +│ └── main.py # ou Go/TypeScript
1974 +</code></pre>
1975 +<p>La fonction <code>ci</code> du module est appelée directement :</p>
1976 +<pre><code class="language-bash">dagger call -m .dagger/ ci
1977 +</code></pre>
1978 +<p>Avantage : accès au Daggerverse, composition, tests de pipeline. Voir la <a href="https://docs.dagger.io/">documentation Dagger</a>.</p>
1979 +<h3 id="25-suivi-dun-pipeline"><a class="header" href="#25-suivi-dun-pipeline">2.5 Suivi d’un pipeline</a></h3>
1980 +<p>Après un <code>git push</code>, une entrée apparaît dans l’onglet <strong>CI</strong> du dépôt :</p>
1981 +<pre class="mermaid">stateDiagram-v2
1982 + [*] --&gt; Pending: create_pipeline
1983 + Pending --&gt; Running: worker picks CiTask
1984 + Running --&gt; Success: exit 0
1985 + Running --&gt; Failure: exit != 0
1986 + Running --&gt; Cancelled: timeout / auto_cancel / manuel
1987 + Success --&gt; [*]
1988 + Failure --&gt; [*]
1989 + Cancelled --&gt; [*]
1990 +</pre>
1991 +
1992 +<p>Les logs stdout/stderr sont streamés ligne par ligne dans la table <code>ci_logs</code> et visibles en direct dans l’UI. En cas d’échec, une notification est envoyée au propriétaire du dépôt.</p>
1993 +<hr>
1994 +<h2 id="3-mettre-en-place-le-dependency-tracker"><a class="header" href="#3-mettre-en-place-le-dependency-tracker">3. Mettre en place le Dependency Tracker</a></h2>
1995 +<p>Cette partie est totalement indépendante de la CI. Elle scanne le code poussé et produit un SBOM CycloneDX, puis (optionnellement) l’envoie à Dependency-Track pour une analyse de vulnérabilités.</p>
1996 +<h3 id="31-installer-syft"><a class="header" href="#31-installer-syft">3.1 Installer Syft</a></h3>
1997 +<p>Sur la machine Gitrust (le scan se fait localement, pas sur le builder) :</p>
1998 +<pre><code class="language-bash"># Installation officielle
1999 +curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh \
2000 + | sh -s -- -b /usr/local/bin
2001 +
2002 +# Vérification
2003 +syft --version
2004 +</code></pre>
2005 +<p>Dans <code>.env</code> :</p>
2006 +<pre><code class="language-env">CI_SBOM_ENABLED=true
2007 +CI_SYFT_BIN=/usr/local/bin/syft # optionnel, défaut: syft dans PATH
2008 +</code></pre>
2009 +<p>À ce stade : à chaque push, un SBOM CycloneDX est généré et stocké (sans upload externe). Visible dans l’onglet <strong>Security</strong> du dépôt : nombre de composants, sha256 du BOM.</p>
2010 +<h3 id="32-déployer-dependency-track"><a class="header" href="#32-déployer-dependency-track">3.2 Déployer Dependency-Track</a></h3>
2011 +<p>Dependency-Track est une application Java qui stocke les SBOM et corrèle avec les bases CVE/OSV/NVD. Déploiement Docker recommandé :</p>
2012 +<pre><code class="language-bash">mkdir -p /opt/dtrack &amp;&amp; cd /opt/dtrack
2013 +curl -L -o docker-compose.yml \
2014 + https://dependencytrack.org/docker-compose.yml
2015 +docker compose up -d
2016 +</code></pre>
2017 +<p>L’API est disponible sur <code>http://localhost:8081</code> et l’UI sur <code>http://localhost:8080</code>.
2018 +Login initial : <code>admin</code> / <code>admin</code> (à changer immédiatement).</p>
2019 +<h3 id="33-créer-une-clé-api"><a class="header" href="#33-créer-une-clé-api">3.3 Créer une clé API</a></h3>
2020 +<p>Dans Dependency-Track → <strong>Administration</strong> → <strong>Access Management</strong> → <strong>Teams</strong> :</p>
2021 +<ol>
2022 +<li>Créer (ou réutiliser) une équipe <code>gitrust</code>.</li>
2023 +<li>Lui attribuer les permissions :
2024 +<ul>
2025 +<li><code>BOM_UPLOAD</code></li>
2026 +<li><code>PROJECT_CREATION_UPLOAD</code></li>
2027 +<li><code>VIEW_PORTFOLIO</code></li>
2028 +<li><code>VIEW_VULNERABILITY</code></li>
2029 +</ul>
2030 +</li>
2031 +<li>Générer une API key et la copier.</li>
2032 +</ol>
2033 +<h3 id="34-configurer-gitrust"><a class="header" href="#34-configurer-gitrust">3.4 Configurer Gitrust</a></h3>
2034 +<p>Ajouter au <code>.env</code> :</p>
2035 +<pre><code class="language-env">CI_DTRACK_ENABLED=true
2036 +CI_DTRACK_URL=http://localhost:8081
2037 +CI_DTRACK_API_KEY=odt_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2038 +</code></pre>
2039 +<p>Redémarrer Gitrust. À chaque push :</p>
2040 +<pre class="mermaid">sequenceDiagram
2041 + participant Push as post-receive
2042 + participant Sbom as SbomService
2043 + participant Git as git archive
2044 + participant Syft
2045 + participant Dtrack as Dependency-Track
2046 + participant DB as sbom_reports
2047 +
2048 + Push-&gt;&gt;Sbom: process_push(sha, ref)
2049 + Sbom-&gt;&gt;DB: upsert status=pending
2050 + Sbom-&gt;&gt;Git: archive sha | tar -x tmpdir
2051 + Sbom-&gt;&gt;Syft: scan dir:tmpdir -o cyclonedx-json
2052 + Syft--&gt;&gt;Sbom: BOM bytes
2053 + Sbom-&gt;&gt;DB: update sha256
2054 + Sbom-&gt;&gt;Dtrack: PUT /api/v1/bom (base64)
2055 + Dtrack--&gt;&gt;Sbom: token
2056 + loop max 30s
2057 + Sbom-&gt;&gt;Dtrack: GET /api/v1/bom/token/{token}
2058 + Dtrack--&gt;&gt;Sbom: processing ?
2059 + end
2060 + Sbom-&gt;&gt;Dtrack: GET /api/v1/finding/project/{uuid}
2061 + Dtrack--&gt;&gt;Sbom: findings[]
2062 + Sbom-&gt;&gt;DB: update status=success&lt;br/&gt;+ critical/high/medium/low
2063 +</pre>
2064 +
2065 +<h3 id="35-lire-les-résultats"><a class="header" href="#35-lire-les-résultats">3.5 Lire les résultats</a></h3>
2066 +<p>Onglet <strong>Security</strong> du dépôt → encart SBOM :</p>
2067 +<ul>
2068 +<li>Nombre de composants détectés</li>
2069 +<li>Compteurs par sévérité : Critical / High / Medium / Low</li>
2070 +<li>Lien direct vers le projet dans Dependency-Track (si l’UUID est résolu)</li>
2071 +<li>Hash sha256 du BOM (traçabilité)</li>
2072 +</ul>
2073 +<p>Si Dependency-Track met plus de 30s à analyser, le status reste <code>processing</code> — un sweeper ultérieur ira rechercher les findings.</p>
2074 +<hr>
2075 +<h2 id="4-débogage"><a class="header" href="#4-débogage">4. Débogage</a></h2>
2076 +<h3 id="problèmes-ci-courants"><a class="header" href="#problèmes-ci-courants">Problèmes CI courants</a></h3>
2077 +<div class="table-wrapper">
2078 +<table>
2079 +<thead>
2080 +<tr><th>Symptôme</th><th>Cause probable</th><th>Vérifier</th></tr>
2081 +</thead>
2082 +<tbody>
2083 +<tr><td>Pipeline reste <code>pending</code></td><td>Worker non démarré, ou channel saturé</td><td>Logs <code>CI worker started</code>, <code>CI_MAX_CONCURRENT</code></td></tr>
2084 +<tr><td><code>Échec rsync vers le serveur de build</code></td><td>SSH bloqué, clé absente</td><td><code>ssh -p ${CI_REMOTE_SSH_PORT} ${CI_REMOTE_USER}@${CI_REMOTE_HOST}</code> manuel</td></tr>
2085 +<tr><td><code>dagger: command not found</code></td><td>Dagger non installé sur le builder</td><td>Relancer <code>setup-remote-ci.sh</code></td></tr>
2086 +<tr><td>Status <code>Cancelled</code> inattendu</td><td>Timeout (<code>CI_DEFAULT_TIMEOUT</code>) ou auto-cancel</td><td>Augmenter le timeout, vérifier pipelines concurrents</td></tr>
2087 +</tbody>
2088 +</table>
2089 +</div>
2090 +<h3 id="problèmes-sbom-courants"><a class="header" href="#problèmes-sbom-courants">Problèmes SBOM courants</a></h3>
2091 +<div class="table-wrapper">
2092 +<table>
2093 +<thead>
2094 +<tr><th>Symptôme</th><th>Cause probable</th><th>Vérifier</th></tr>
2095 +</thead>
2096 +<tbody>
2097 +<tr><td><code>SBOM generation disabled</code></td><td><code>CI_SBOM_ENABLED=false</code></td><td><code>.env</code></td></tr>
2098 +<tr><td><code>syft spawn failed</code></td><td>Binaire introuvable</td><td><code>which syft</code>, <code>CI_SYFT_BIN</code></td></tr>
2099 +<tr><td><code>invalid commit sha</code></td><td>SHA non hex 40 chars</td><td>Rare, signale un bug</td></tr>
2100 +<tr><td><code>Dtrack upload 401</code></td><td>API key invalide ou permissions manquantes</td><td>Régénérer, vérifier les 4 permissions</td></tr>
2101 +<tr><td>Status <code>processing</code> indéfiniment</td><td>Dtrack surchargé, analyse lente</td><td>Attendre, ou relancer un push</td></tr>
2102 +</tbody>
2103 +</table>
2104 +</div>
2105 +<h3 id="logs-utiles"><a class="header" href="#logs-utiles">Logs utiles</a></h3>
2106 +<pre><code class="language-bash"># Logs Gitrust (systemd)
2107 +journalctl -u gitrust -f | grep -E "CI|SBOM|sbom|pipeline"
2108 +
2109 +# Vérifier un pipeline en DB
2110 +psql $DATABASE_URL -c "SELECT id, status, commit_sha, created_at FROM ci_pipelines ORDER BY created_at DESC LIMIT 10;"
2111 +
2112 +# Vérifier un SBOM
2113 +psql $DATABASE_URL -c "SELECT commit_sha, status, components_count, critical_count, high_count FROM sbom_reports ORDER BY created_at DESC LIMIT 10;"
2114 +</code></pre>
2115 +<hr>
2116 +<h2 id="5-checklist-récapitulative"><a class="header" href="#5-checklist-récapitulative">5. Checklist récapitulative</a></h2>
2117 +<p><strong>CI :</strong></p>
2118 +<ul>
2119 +<li><input disabled="" type="checkbox"> Docker + Dagger installés sur le serveur de build (<code>setup-remote-ci.sh</code>)</li>
2120 +<li><input disabled="" type="checkbox"> <code>CI_ENABLED=true</code> et <code>CI_REMOTE_*</code> dans <code>.env</code></li>
2121 +<li><input disabled="" type="checkbox"> Gitrust redémarré</li>
2122 +<li><input disabled="" type="checkbox"> CI activée dans Settings → CI pour chaque dépôt</li>
2123 +<li><input disabled="" type="checkbox"> Fichier <code>.gitrust-ci.yml</code> (Easy) ou <code>.dagger/</code> (Power) commité</li>
2124 +<li><input disabled="" type="checkbox"> Push → pipeline visible dans l’onglet CI</li>
2125 +</ul>
2126 +<p><strong>Dependency Tracker :</strong></p>
2127 +<ul>
2128 +<li><input disabled="" type="checkbox"> Syft installé sur la machine Gitrust</li>
2129 +<li><input disabled="" type="checkbox"> <code>CI_SBOM_ENABLED=true</code> dans <code>.env</code></li>
2130 +<li><input disabled="" type="checkbox"> (Optionnel) Dependency-Track déployé + API key créée avec les 4 permissions</li>
2131 +<li><input disabled="" type="checkbox"> (Optionnel) <code>CI_DTRACK_ENABLED=true</code>, <code>CI_DTRACK_URL</code>, <code>CI_DTRACK_API_KEY</code> dans <code>.env</code></li>
2132 +<li><input disabled="" type="checkbox"> Gitrust redémarré</li>
2133 +<li><input disabled="" type="checkbox"> Push → SBOM visible dans l’onglet Security</li>
2134 +</ul>
2135 +<div style="break-before: page; page-break-before: always;"></div>
2136 +<h1 id="durcir-linstance-avec-fail2ban"><a class="header" href="#durcir-linstance-avec-fail2ban">Durcir l’instance avec Fail2ban</a></h1>
2137 +<p>Configuration complète pour protéger un déploiement gitrust exposant :</p>
2138 +<ul>
2139 +<li><strong>sshd système</strong> sur <code>:2022</code> (admin)</li>
2140 +<li><strong>Nginx</strong> en reverse proxy HTTPS <code>:443</code> + redirect <code>:80</code> + <code>stream :22 → :2222</code></li>
2141 +<li><strong>Gitrust</strong> (web <code>127.0.0.1:4000</code>, SSH russh <code>127.0.0.1:2222</code>)</li>
2142 +<li><strong>Dagger</strong> CI runner (local, pas d’exposition réseau directe)</li>
2143 +<li><strong>Dependency-Track</strong> API <code>:8081</code> + UI <code>:8080</code> (si exposés)</li>
2144 +<li><strong>PostgreSQL</strong> <code>127.0.0.1:5432</code> (défensif au cas où le bind fuit)</li>
2145 +</ul>
2146 +<hr>
2147 +<h2 id="1-installation"><a class="header" href="#1-installation">1. Installation</a></h2>
2148 +<pre><code class="language-bash">sudo apt install -y fail2ban
2149 +sudo systemctl enable --now fail2ban
2150 +fail2ban-client --version
2151 +</code></pre>
2152 +<p>Vérifier que <code>ufw</code> est actif (fournit <code>banaction = ufw</code> dans la config) :</p>
2153 +<pre><code class="language-bash">sudo ufw status
2154 +</code></pre>
2155 +<hr>
2156 +<h2 id="2-fichier-principal-etcfail2banjaillocal"><a class="header" href="#2-fichier-principal-etcfail2banjaillocal">2. Fichier principal <code>/etc/fail2ban/jail.local</code></a></h2>
2157 +<p>À placer via :</p>
2158 +<pre><code class="language-bash">sudo tee /etc/fail2ban/jail.local &lt;&lt;'EOF'
2159 +[Le contenu ci-dessous]
2160 +EOF
2161 +</code></pre>
2162 +<pre><code class="language-ini"># =============================================================================
2163 +# Défauts globaux
2164 +# =============================================================================
2165 +[DEFAULT]
2166 +backend = systemd
2167 +bantime = 1h
2168 +findtime = 10m
2169 +maxretry = 5
2170 +
2171 +# LAN privé et loopback jamais bannis
2172 +ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
2173 +
2174 +# UFW
2175 +banaction = ufw
2176 +banaction_allports = ufw
2177 +
2178 +# Notifications (optionnel — nécessite un relay SMTP local)
2179 +# destemail = contact@gitrust.eu
2180 +# sender = fail2ban@votre-serveur.example.com
2181 +# action = %(action_mwl)s
2182 +
2183 +# =============================================================================
2184 +# 1) sshd admin système — port 2022
2185 +# =============================================================================
2186 +[sshd]
2187 +enabled = true
2188 +port = 2022
2189 +filter = sshd
2190 +backend = %(sshd_backend)s
2191 +logpath = %(sshd_log)s
2192 +maxretry = 3
2193 +findtime = 10m
2194 +bantime = 1h
2195 +
2196 +# =============================================================================
2197 +# 2) Nginx — 401/403 auth basic (si un jour activé sur /admin, /metrics, etc.)
2198 +# =============================================================================
2199 +[nginx-http-auth]
2200 +enabled = true
2201 +port = http,https
2202 +filter = nginx-http-auth
2203 +logpath = /var/log/nginx/gitrust.error.log
2204 +maxretry = 5
2205 +
2206 +# =============================================================================
2207 +# 3) Nginx — scanners d'URL (wp-admin, .env, phpmyadmin, config.php, etc.)
2208 +# =============================================================================
2209 +[nginx-botsearch]
2210 +enabled = true
2211 +port = http,https
2212 +filter = nginx-botsearch
2213 +logpath = /var/log/nginx/gitrust.access.log
2214 +maxretry = 2
2215 +findtime = 10m
2216 +bantime = 24h
2217 +
2218 +# =============================================================================
2219 +# 4) Nginx — bad user-agents (scanners agressifs, masscan, nikto, etc.)
2220 +# =============================================================================
2221 +[nginx-badbots]
2222 +enabled = true
2223 +port = http,https
2224 +filter = nginx-badbots
2225 +logpath = /var/log/nginx/gitrust.access.log
2226 +maxretry = 2
2227 +bantime = 24h
2228 +
2229 +# =============================================================================
2230 +# 5) Nginx — dépassement limit_req (voir section 4 — zones HTTPS)
2231 +# =============================================================================
2232 +[nginx-limit-req]
2233 +enabled = true
2234 +port = http,https
2235 +filter = nginx-limit-req
2236 +logpath = /var/log/nginx/gitrust.error.log
2237 +maxretry = 10
2238 +findtime = 5m
2239 +bantime = 1h
2240 +
2241 +# =============================================================================
2242 +# 6) Gitrust — brute force login (formulaire + API JWT)
2243 +# =============================================================================
2244 +[gitrust-login]
2245 +enabled = true
2246 +port = http,https
2247 +filter = gitrust-login
2248 +logpath = /var/log/nginx/gitrust.access.log
2249 +maxretry = 5
2250 +findtime = 10m
2251 +bantime = 1h
2252 +
2253 +# =============================================================================
2254 +# 7) Gitrust — abus API (tokens personnels leaked, scrapers)
2255 +# =============================================================================
2256 +[gitrust-api-abuse]
2257 +enabled = true
2258 +port = http,https
2259 +filter = gitrust-api-abuse
2260 +logpath = /var/log/nginx/gitrust.access.log
2261 +maxretry = 30
2262 +findtime = 1m
2263 +bantime = 2h
2264 +
2265 +# =============================================================================
2266 +# 8) Gitrust SSH (russh) — brute force clé publique
2267 +# =============================================================================
2268 +[gitrust-ssh]
2269 +enabled = true
2270 +port = 22,2222
2271 +filter = gitrust-ssh
2272 +backend = systemd
2273 +journalmatch = _SYSTEMD_UNIT=gitrust.service
2274 +maxretry = 5
2275 +findtime = 10m
2276 +bantime = 1h
2277 +
2278 +# =============================================================================
2279 +# 9) Gitrust import worker — tokens invalides sur clone de dépôts externes
2280 +# =============================================================================
2281 +[gitrust-import]
2282 +enabled = true
2283 +port = http,https
2284 +filter = gitrust-import
2285 +backend = systemd
2286 +journalmatch = _SYSTEMD_UNIT=gitrust.service
2287 +maxretry = 3
2288 +findtime = 5m
2289 +bantime = 30m
2290 +
2291 +# =============================================================================
2292 +# 10) Dependency-Track UI — brute force login (port 8080)
2293 +# =============================================================================
2294 +# Activer UNIQUEMENT si DTrack est exposé publiquement.
2295 +# Si DTrack est sur réseau privé/loopback, laisser enabled=false.
2296 +[dtrack-login]
2297 +enabled = false
2298 +port = 8080,http,https
2299 +filter = dtrack-login
2300 +logpath = /var/log/nginx/dtrack.access.log
2301 +maxretry = 5
2302 +findtime = 10m
2303 +bantime = 2h
2304 +
2305 +# =============================================================================
2306 +# 11) Dependency-Track API — abus clé API (port 8081)
2307 +# =============================================================================
2308 +[dtrack-api]
2309 +enabled = false
2310 +port = 8081,http,https
2311 +filter = dtrack-api
2312 +logpath = /var/log/nginx/dtrack.access.log
2313 +maxretry = 10
2314 +findtime = 5m
2315 +bantime = 1h
2316 +
2317 +# =============================================================================
2318 +# 12) PostgreSQL — tentatives de connexion invalides (défensif)
2319 +# =============================================================================
2320 +# PG doit binder 127.0.0.1 uniquement. Ce jail protège si la config fuit.
2321 +[postgresql]
2322 +enabled = true
2323 +port = 5432
2324 +filter = postgresql
2325 +backend = systemd
2326 +journalmatch = _SYSTEMD_UNIT=postgresql.service + _SYSTEMD_UNIT=docker.service
2327 +maxretry = 5
2328 +findtime = 10m
2329 +bantime = 1h
2330 +
2331 +# =============================================================================
2332 +# 13) Récidive — ban long pour IPs bannies 3x en 24h, tous jails confondus
2333 +# =============================================================================
2334 +[recidive]
2335 +enabled = true
2336 +logpath = /var/log/fail2ban.log
2337 +banaction = %(banaction_allports)s
2338 +bantime = 1w
2339 +findtime = 1d
2340 +maxretry = 3
2341 +</code></pre>
2342 +<hr>
2343 +<h2 id="3-filtres-personnalisés"><a class="header" href="#3-filtres-personnalisés">3. Filtres personnalisés</a></h2>
2344 +<p>À placer dans <code>/etc/fail2ban/filter.d/</code> (un fichier par jail custom).</p>
2345 +<h3 id="31-gitrust-loginconf"><a class="header" href="#31-gitrust-loginconf">3.1 <code>gitrust-login.conf</code></a></h3>
2346 +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/gitrust-login.conf &lt;&lt;'EOF'
2347 +[Definition]
2348 +# POST sur /login ou endpoints JWT avec code 4xx (401/403/422/429)
2349 +failregex = ^&lt;HOST&gt; .* "POST /(login|api/v1/auth/login|api/v1/auth/refresh|api/v1/auth/2fa)[^"]*" (401|403|422|429) .*$
2350 +ignoreregex =
2351 +EOF
2352 +</code></pre>
2353 +<h3 id="32-gitrust-api-abuseconf"><a class="header" href="#32-gitrust-api-abuseconf">3.2 <code>gitrust-api-abuse.conf</code></a></h3>
2354 +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/gitrust-api-abuse.conf &lt;&lt;'EOF'
2355 +[Definition]
2356 +# Abus API : 401/403 répétés sur /api/v1/* (hors auth déjà couvert par gitrust-login)
2357 +failregex = ^&lt;HOST&gt; .* "(GET|POST|PUT|DELETE|PATCH) /api/v1/(?!auth/)[^"]*" (401|403) .*$
2358 +ignoreregex =
2359 +EOF
2360 +</code></pre>
2361 +<h3 id="33-gitrust-sshconf"><a class="header" href="#33-gitrust-sshconf">3.3 <code>gitrust-ssh.conf</code></a></h3>
2362 +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/gitrust-ssh.conf &lt;&lt;'EOF'
2363 +[Definition]
2364 +# russh / gitrust-ssh : échecs d'authentification
2365 +# Regex à raffiner après observation des logs réels via :
2366 +# sudo fail2ban-regex &lt;(journalctl -u gitrust --no-pager -n 2000) \
2367 +# /etc/fail2ban/filter.d/gitrust-ssh.conf
2368 +failregex = ^.*ssh.*auth(entication)? (failed|failure).*from &lt;HOST&gt;.*$
2369 + ^.*[Rr]ejected.*(public[_ ]?key|password).*from &lt;HOST&gt;.*$
2370 + ^.*no matching (ssh|public) key.*from &lt;HOST&gt;.*$
2371 + ^.*unknown user.*from &lt;HOST&gt;.*$
2372 + ^.*gitrust.*auth.*refused.*&lt;HOST&gt;.*$
2373 +ignoreregex =
2374 +EOF
2375 +</code></pre>
2376 +<h3 id="34-gitrust-importconf"><a class="header" href="#34-gitrust-importconf">3.4 <code>gitrust-import.conf</code></a></h3>
2377 +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/gitrust-import.conf &lt;&lt;'EOF'
2378 +[Definition]
2379 +# Import worker : tokens OAuth/GitHub invalides sur clone de dépôts externes
2380 +failregex = ^.*import.*authentication failed.*from &lt;HOST&gt;.*$
2381 + ^.*import.*invalid (token|credentials).*from &lt;HOST&gt;.*$
2382 + ^.*import.*clone failed.*401.*from &lt;HOST&gt;.*$
2383 +ignoreregex =
2384 +EOF
2385 +</code></pre>
2386 +<h3 id="35-dtrack-loginconf-si-dtrack-exposé"><a class="header" href="#35-dtrack-loginconf-si-dtrack-exposé">3.5 <code>dtrack-login.conf</code> (si DTrack exposé)</a></h3>
2387 +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/dtrack-login.conf &lt;&lt;'EOF'
2388 +[Definition]
2389 +# Dependency-Track : brute force du POST /api/v1/user/login
2390 +failregex = ^&lt;HOST&gt; .* "POST /api/v1/user/login[^"]*" (401|403) .*$
2391 + ^&lt;HOST&gt; .* "POST /api/v1/user/forceChangePassword[^"]*" (401|403) .*$
2392 +ignoreregex =
2393 +EOF
2394 +</code></pre>
2395 +<h3 id="36-dtrack-apiconf-si-dtrack-exposé"><a class="header" href="#36-dtrack-apiconf-si-dtrack-exposé">3.6 <code>dtrack-api.conf</code> (si DTrack exposé)</a></h3>
2396 +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/dtrack-api.conf &lt;&lt;'EOF'
2397 +[Definition]
2398 +# Dependency-Track API : abus de clé API ou requêtes non authentifiées
2399 +failregex = ^&lt;HOST&gt; .* "[^"]+ /api/v1/[^"]*" 401 .*$
2400 + ^&lt;HOST&gt; .* "[^"]+ /api/v1/[^"]*" 403 .*$
2401 +ignoreregex =
2402 +EOF
2403 +</code></pre>
2404 +<h3 id="37-postgresqlconf-créer-si-absent"><a class="header" href="#37-postgresqlconf-créer-si-absent">3.7 <code>postgresql.conf</code> (créer si absent)</a></h3>
2405 +<pre><code class="language-bash">if [ ! -f /etc/fail2ban/filter.d/postgresql.conf ]; then
2406 +sudo tee /etc/fail2ban/filter.d/postgresql.conf &lt;&lt;'EOF'
2407 +[Definition]
2408 +failregex = ^.*authentication failed for user.*host=&lt;HOST&gt;.*$
2409 + ^.*FATAL:.*password authentication failed.*&lt;HOST&gt;.*$
2410 + ^.*no pg_hba\.conf entry for host "&lt;HOST&gt;".*$
2411 +ignoreregex =
2412 +EOF
2413 +fi
2414 +</code></pre>
2415 +<h3 id="38-nginx-limit-reqconf-créer-si-absent-sur-votre-distro"><a class="header" href="#38-nginx-limit-reqconf-créer-si-absent-sur-votre-distro">3.8 <code>nginx-limit-req.conf</code> (créer si absent sur votre distro)</a></h3>
2416 +<pre><code class="language-bash">if [ ! -f /etc/fail2ban/filter.d/nginx-limit-req.conf ]; then
2417 +sudo tee /etc/fail2ban/filter.d/nginx-limit-req.conf &lt;&lt;'EOF'
2418 +[Definition]
2419 +failregex = ^.*limiting requests, excess: .* by zone .*, client: &lt;HOST&gt;.*$
2420 +ignoreregex =
2421 +EOF
2422 +fi
2423 +</code></pre>
2424 +<h3 id="39-nginx-badbotsconf--obligatoire-pas-fourni-par-debianubuntu"><a class="header" href="#39-nginx-badbotsconf--obligatoire-pas-fourni-par-debianubuntu">3.9 <code>nginx-badbots.conf</code> — OBLIGATOIRE (pas fourni par Debian/Ubuntu)</a></h3>
2425 +<p>Le paquet <code>fail2ban</code> Debian/Ubuntu fournit <code>apache-badbots.conf</code> mais PAS <code>nginx-badbots.conf</code>. Sans ce filter, <code>fail2ban-client reload</code> affiche :</p>
2426 +<pre><code>Found no accessible config files for 'filter.d/nginx-badbots' under /etc/fail2ban
2427 +</code></pre>
2428 +<p>Le filter ci-dessous réutilise la liste de bad user-agents de <code>apache-badbots</code> avec un <code>failregex</code> adapté au format <code>combined</code> de nginx :</p>
2429 +<pre><code class="language-bash">sudo tee /etc/fail2ban/filter.d/nginx-badbots.conf &lt;&lt;'EOF'
2430 +[Definition]
2431 +badbotscustom = EmailCollector|WebEMailExtrac|TrackBack/1\.02|sogou music spider
2432 +badbots = Atomic_Email_Hunter/4\.0|atSpider/1\.0|autoemailspider|bwh3_user_agent|China Local Browse 2\.6|ContactBot/0\.2|ContentSmartz|DataCha0s/2\.0|DBrowse 1\.4b|DBrowse 1\.4d|Demo Bot DOT 16b|Demo Bot Z 16b|DSurf15a 01|DSurf15a 71|DSurf15a 81|DSurf15a VA|EBrowse 1\.4b|Educate Search VxB|EmailSiphon|EmailSpider|EmailWolf 1\.00|ExtractorPro|Franklin Locator 1\.8|Full Web Bot 0416B|Guestbook Auto Submitter|ISC Systems iRc Search 2\.1|LMQueueBot/0\.2|LWP\:\:Simple/5\.803|Microsoft URL Control - 6\.00\.8xxx|Missigua Locator 1\.9|Mozilla/4\.0 efp@gmx\.net|Nsauditor/1\.x|PBrowse 1\.4b|PEval 1\.4b|Poirot|psycheclone|sogou spider|sohu agent|VadixBot|WebVulnCrawl\.unknown/1\.0 libwww-perl/5\.803|Wells Search II|WEP Search 00
2433 +
2434 +failregex = ^&lt;HOST&gt; -.*"(GET|POST|HEAD).*HTTP.*"(?:%(badbots)s|%(badbotscustom)s)"$
2435 +ignoreregex =
2436 +
2437 +datepattern = ^[^\[]*\[({DATE})
2438 + {^LN-BEG}
2439 +EOF
2440 +</code></pre>
2441 +<p><strong>Alternative</strong> : si vous ne voulez pas maintenir la liste, simplement désactiver le jail (<code>enabled = false</code> dans le <code>[nginx-badbots]</code>) — la combinaison <code>nginx-botsearch</code> + <code>nginx-limit-req</code> + <code>gitrust-api-abuse</code> couvre déjà l’essentiel.</p>
2442 +<hr>
2443 +<h2 id="4-rate-limiting-côté-nginx-requis-par-nginx-limit-req"><a class="header" href="#4-rate-limiting-côté-nginx-requis-par-nginx-limit-req">4. Rate limiting côté Nginx (requis par <code>nginx-limit-req</code>)</a></h2>
2444 +<h3 id="41-déclarer-les-zones-globales"><a class="header" href="#41-déclarer-les-zones-globales">4.1 Déclarer les zones globales</a></h3>
2445 +<pre><code class="language-bash">sudo tee /etc/nginx/conf.d/gitrust-limit.conf &lt;&lt;'EOF'
2446 +# Zones de rate limiting gitrust
2447 +limit_req_zone $binary_remote_addr zone=gitrust_login:10m rate=1r/s;
2448 +limit_req_zone $binary_remote_addr zone=gitrust_api:10m rate=10r/s;
2449 +limit_req_zone $binary_remote_addr zone=gitrust_git:10m rate=30r/s;
2450 +EOF
2451 +</code></pre>
2452 +<h3 id="42-ajouter-les-location-dans-etcnginxsites-availablegitrust"><a class="header" href="#42-ajouter-les-location-dans-etcnginxsites-availablegitrust">4.2 Ajouter les <code>location</code> dans <code>/etc/nginx/sites-available/gitrust</code></a></h3>
2453 +<p>Dans le bloc <code>server { listen 443 ssl; ... }</code>, <strong>avant</strong> <code>location /</code> finale :</p>
2454 +<pre><code class="language-nginx"># Protection brute force login (1 req/s par IP, burst 5)
2455 +location ~ ^/(login|api/v1/auth/) {
2456 + limit_req zone=gitrust_login burst=5 nodelay;
2457 + proxy_pass http://gitrust_backend;
2458 + proxy_set_header Host $host;
2459 + proxy_set_header X-Real-IP $remote_addr;
2460 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
2461 + proxy_set_header X-Forwarded-Proto $scheme;
2462 +}
2463 +
2464 +# Protection API (10 req/s par IP, burst 20)
2465 +location ^~ /api/v1/ {
2466 + limit_req zone=gitrust_api burst=20 nodelay;
2467 + proxy_pass http://gitrust_backend;
2468 + proxy_set_header Host $host;
2469 + proxy_set_header X-Real-IP $remote_addr;
2470 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
2471 + proxy_set_header X-Forwarded-Proto $scheme;
2472 +}
2473 +
2474 +# Protection Git smart HTTP (30 req/s — clone/push légitime peut être verbeux)
2475 +location ~ ^/[^/]+/[^/]+\.git/ {
2476 + limit_req zone=gitrust_git burst=50 nodelay;
2477 + proxy_pass http://gitrust_backend;
2478 + proxy_http_version 1.1;
2479 + proxy_set_header Host $host;
2480 + proxy_set_header X-Real-IP $remote_addr;
2481 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
2482 + proxy_set_header X-Forwarded-Proto $scheme;
2483 + proxy_buffering off;
2484 + proxy_request_buffering off;
2485 + client_max_body_size 2G;
2486 +}
2487 +</code></pre>
2488 +<h3 id="43-reload"><a class="header" href="#43-reload">4.3 Reload</a></h3>
2489 +<pre><code class="language-bash">sudo nginx -t &amp;&amp; sudo systemctl reload nginx
2490 +</code></pre>
2491 +<hr>
2492 +<h2 id="5-démarrage-et-validation"><a class="header" href="#5-démarrage-et-validation">5. Démarrage et validation</a></h2>
2493 +<pre><code class="language-bash">sudo systemctl restart fail2ban
2494 +
2495 +# Liste des jails actifs
2496 +sudo fail2ban-client status
2497 +# Attendu :
2498 +# sshd, nginx-http-auth, nginx-botsearch, nginx-badbots, nginx-limit-req,
2499 +# gitrust-login, gitrust-api-abuse, gitrust-ssh, gitrust-import,
2500 +# postgresql, recidive
2501 +# (+ dtrack-login, dtrack-api si activées)
2502 +
2503 +# Stats par jail
2504 +sudo fail2ban-client status gitrust-login
2505 +sudo fail2ban-client status sshd
2506 +</code></pre>
2507 +<h3 id="valider-chaque-filtre-custom"><a class="header" href="#valider-chaque-filtre-custom">Valider chaque filtre custom</a></h3>
2508 +<pre><code class="language-bash"># 1. gitrust-login contre l'access log nginx
2509 +sudo fail2ban-regex /var/log/nginx/gitrust.access.log \
2510 + /etc/fail2ban/filter.d/gitrust-login.conf
2511 +
2512 +# 2. gitrust-api-abuse
2513 +sudo fail2ban-regex /var/log/nginx/gitrust.access.log \
2514 + /etc/fail2ban/filter.d/gitrust-api-abuse.conf
2515 +
2516 +# 3. gitrust-ssh contre journald
2517 +journalctl -u gitrust --no-pager -n 5000 &gt; /tmp/gitrust.log
2518 +sudo fail2ban-regex /tmp/gitrust.log \
2519 + /etc/fail2ban/filter.d/gitrust-ssh.conf
2520 +rm /tmp/gitrust.log
2521 +
2522 +# 4. postgresql
2523 +journalctl -u docker --no-pager -n 5000 | grep -i postgres &gt; /tmp/pg.log
2524 +sudo fail2ban-regex /tmp/pg.log \
2525 + /etc/fail2ban/filter.d/postgresql.conf
2526 +</code></pre>
2527 +<p><code>0 failregex found</code> = regex à ajuster après observation des logs réels de chaque service.</p>
2528 +<h3 id="test-de-bannissement"><a class="header" href="#test-de-bannissement">Test de bannissement</a></h3>
2529 +<pre><code class="language-bash"># Depuis un host HORS LAN (sinon ignoreip s'applique)
2530 +for i in $(seq 1 10); do
2531 + curl -sk -o /dev/null -w "%{http_code}\n" \
2532 + -X POST https://&lt;votre-domaine&gt;/login \
2533 + -d 'username=admin&amp;password=wrong'
2534 +done
2535 +
2536 +# Vérifier le ban
2537 +ssh gitrust-host 'sudo fail2ban-client status gitrust-login'
2538 +# Currently banned : 1 — Banned IP list : &lt;IP test&gt;
2539 +
2540 +# Débannir manuellement
2541 +ssh gitrust-host 'sudo fail2ban-client unban &lt;IP&gt;'
2542 +</code></pre>
2543 +<hr>
2544 +<h2 id="6-monitoring"><a class="header" href="#6-monitoring">6. Monitoring</a></h2>
2545 +<pre><code class="language-bash"># Logs fail2ban temps réel
2546 +sudo tail -f /var/log/fail2ban.log
2547 +
2548 +# Toutes les IPs bannies, tous jails confondus
2549 +sudo fail2ban-client banned
2550 +
2551 +# Stats détaillées d'un jail
2552 +sudo fail2ban-client status gitrust-ssh
2553 +# Currently failed : 2
2554 +# Total failed : 47
2555 +# Currently banned : 1
2556 +# Total banned : 12
2557 +# Banned IP list : 203.0.113.42
2558 +
2559 +sudo grep "Ban " /var/log/fail2ban.log | tail -20
2560 +</code></pre>
2561 +<hr>
2562 +<h2 id="7-matrice-récapitulative"><a class="header" href="#7-matrice-récapitulative">7. Matrice récapitulative</a></h2>
2563 +<div class="table-wrapper">
2564 +<table>
2565 +<thead>
2566 +<tr><th>#</th><th>Jail</th><th>Port(s)</th><th>Source logs</th><th>Max retry</th><th>Ban time</th><th>Surface protégée</th></tr>
2567 +</thead>
2568 +<tbody>
2569 +<tr><td>1</td><td><code>sshd</code></td><td>2022</td><td>journald sshd</td><td>3</td><td>1h</td><td>SSH admin</td></tr>
2570 +<tr><td>2</td><td><code>nginx-http-auth</code></td><td>80,443</td><td>nginx error</td><td>5</td><td>1h</td><td>Basic auth (admin futur)</td></tr>
2571 +<tr><td>3</td><td><code>nginx-botsearch</code></td><td>80,443</td><td>nginx access</td><td>2</td><td>24h</td><td>Scanners WP/PHP</td></tr>
2572 +<tr><td>4</td><td><code>nginx-badbots</code></td><td>80,443</td><td>nginx access</td><td>2</td><td>24h</td><td>User-agents malveillants</td></tr>
2573 +<tr><td>5</td><td><code>nginx-limit-req</code></td><td>80,443</td><td>nginx error</td><td>10</td><td>1h</td><td>Flood global</td></tr>
2574 +<tr><td>6</td><td><code>gitrust-login</code></td><td>80,443</td><td>nginx access</td><td>5</td><td>1h</td><td>Brute force login UI + API</td></tr>
2575 +<tr><td>7</td><td><code>gitrust-api-abuse</code></td><td>80,443</td><td>nginx access</td><td>30</td><td>2h</td><td>Scrapers API (tokens fuités)</td></tr>
2576 +<tr><td>8</td><td><code>gitrust-ssh</code></td><td>22,2222</td><td>journald gitrust</td><td>5</td><td>1h</td><td>Brute force clé SSH Git</td></tr>
2577 +<tr><td>9</td><td><code>gitrust-import</code></td><td>80,443</td><td>journald gitrust</td><td>3</td><td>30m</td><td>Brute force PAT/OAuth import</td></tr>
2578 +<tr><td>10</td><td><code>dtrack-login</code></td><td>8080</td><td>nginx access</td><td>5</td><td>2h</td><td>Brute force UI Dep-Track</td></tr>
2579 +<tr><td>11</td><td><code>dtrack-api</code></td><td>8081</td><td>nginx access</td><td>10</td><td>1h</td><td>Abus clé API Dep-Track</td></tr>
2580 +<tr><td>12</td><td><code>postgresql</code></td><td>5432</td><td>journald</td><td>5</td><td>1h</td><td>Défense en profondeur PG</td></tr>
2581 +<tr><td>13</td><td><code>recidive</code></td><td>all</td><td>fail2ban.log</td><td>3</td><td>1w</td><td>Méta-ban 3×/24h</td></tr>
2582 +</tbody>
2583 +</table>
2584 +</div>
2585 +<p><strong>Ordre de déclenchement typique</strong> : brute force → jail spécifique (ban 1h) → si récidive 3x → recidive (ban 1 semaine, tous ports).</p>
2586 +<hr>
2587 +<h2 id="8-notes-spécifiques-à-la-stack-gitrust"><a class="header" href="#8-notes-spécifiques-à-la-stack-gitrust">8. Notes spécifiques à la stack gitrust</a></h2>
2588 +<h3 id="81-dagger-ci"><a class="header" href="#81-dagger-ci">8.1 Dagger (CI)</a></h3>
2589 +<p>Dagger s’exécute <strong>localement</strong> sur la machine gitrust (ou un runner distant — voir <code>administration_manual/how-to/configurer-ci-runner-remote.md</code>). <strong>Aucun port réseau ouvert</strong> → pas de jail dédié.</p>
2590 +<h3 id="82-dependency-track"><a class="header" href="#82-dependency-track">8.2 Dependency-Track</a></h3>
2591 +<p>Si DTrack est déployé sur le même serveur et <strong>exposé</strong>, activer les jails 10 et 11 en mettant <code>enabled = true</code> et en pointant <code>logpath</code> vers les logs nginx du vhost DTrack.</p>
2592 +<p>Si DTrack est <strong>interne</strong> (VPN, réseau privé), laisser <code>enabled = false</code> — le firewall suffit.</p>
2593 +<p>Config DTrack recommandée :</p>
2594 +<ul>
2595 +<li>Bind sur <code>127.0.0.1</code> via <code>dtrack.url.base=http://127.0.0.1:8080</code></li>
2596 +</ul>
2597 +<h3 id="83-postgresql"><a class="header" href="#83-postgresql">8.3 PostgreSQL</a></h3>
2598 +<p>Le jail <code>postgresql</code> est <strong>défensif</strong>. PG doit rester bindé sur <code>127.0.0.1:5432</code> via Docker. Vérifier :</p>
2599 +<pre><code class="language-bash">sudo ss -tlnp | grep 5432
2600 +# Attendu : 127.0.0.1:5432 — PAS 0.0.0.0:5432
2601 +</code></pre>
2602 +<h3 id="84-notifications"><a class="header" href="#84-notifications">8.4 Notifications</a></h3>
2603 +<p>Pour recevoir un mail à chaque ban :</p>
2604 +<ol>
2605 +<li>Installer un relay SMTP local : <code>sudo apt install msmtp-mta</code></li>
2606 +<li>Configurer <code>/etc/msmtprc</code> avec un compte SMTP</li>
2607 +<li>Décommenter dans <code>[DEFAULT]</code> :
2608 +<pre><code class="language-ini">destemail = contact@gitrust.eu
2609 +sender = fail2ban@votre-serveur.example.com
2610 +action = %(action_mwl)s
2611 +</code></pre>
2612 +</li>
2613 +<li><code>sudo systemctl restart fail2ban</code></li>
2614 +</ol>
2615 +<hr>
2616 +<h2 id="9-limites-et-évolutions"><a class="header" href="#9-limites-et-évolutions">9. Limites et évolutions</a></h2>
2617 +<ul>
2618 +<li><strong>IPv6</strong> : toutes les regex utilisent <code>&lt;HOST&gt;</code> qui matche IPv4 ET IPv6. Vérifier que UFW est configuré pour v6 également.</li>
2619 +<li><strong>CDN/Cloudflare devant</strong> : si un CDN est ajouté, <code>$remote_addr</code> côté Nginx sera l’IP du CDN — il faut récupérer la vraie IP via <code>X-Forwarded-For</code> et propager au logging Nginx. Changer <code>failregex</code> en conséquence. Sinon les jails banniront le CDN.</li>
2620 +<li><strong>Docker/Podman</strong> : si gitrust passe en conteneur, les logs de <code>gitrust.service</code> deviennent <code>docker.service</code> ou <code>podman.service</code> → mettre à jour <code>journalmatch</code> dans les jails 8 et 9.</li>
2621 +<li><strong>GeoIP</strong> : pour bloquer des pays entiers en amont, ajouter <code>geo $blocked_country</code> dans Nginx (module <code>ngx_http_geoip2_module</code>) — complémentaire à fail2ban.</li>
2622 +</ul>
2623 +<div style="break-before: page; page-break-before: always;"></div>
2624 +<h1 id="régler-le-rate-limiting"><a class="header" href="#régler-le-rate-limiting">Régler le rate limiting</a></h1>
2625 +<blockquote>
2626 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
2627 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
2628 +</blockquote>
2629 +<h2 id="todo-32"><a class="header" href="#todo-32">TODO</a></h2>
2630 +<ul>
2631 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
2632 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
2633 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
2634 +</ul>
2635 +<div style="break-before: page; page-break-before: always;"></div>
2636 +<h1 id="forcer-le-2fa-sur-toute-linstance"><a class="header" href="#forcer-le-2fa-sur-toute-linstance">Forcer le 2FA sur toute l’instance</a></h1>
2637 +<blockquote>
2638 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
2639 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
2640 +</blockquote>
2641 +<h2 id="todo-33"><a class="header" href="#todo-33">TODO</a></h2>
2642 +<ul>
2643 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
2644 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
2645 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
2646 +</ul>
2647 +<div style="break-before: page; page-break-before: always;"></div>
2648 +<h1 id="dépanner-ssh"><a class="header" href="#dépanner-ssh">Dépanner SSH</a></h1>
2649 +<blockquote>
2650 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
2651 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
2652 +</blockquote>
2653 +<h2 id="todo-34"><a class="header" href="#todo-34">TODO</a></h2>
2654 +<ul>
2655 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
2656 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
2657 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
2658 +</ul>
2659 +<div style="break-before: page; page-break-before: always;"></div>
2660 +<h1 id="dépanner-la-ci"><a class="header" href="#dépanner-la-ci">Dépanner la CI</a></h1>
2661 +<blockquote>
2662 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
2663 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
2664 +</blockquote>
2665 +<h2 id="todo-35"><a class="header" href="#todo-35">TODO</a></h2>
2666 +<ul>
2667 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
2668 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
2669 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
2670 +</ul>
2671 +<div style="break-before: page; page-break-before: always;"></div>
2672 +<h1 id="gérer-les-utilisateurs-panel-admin"><a class="header" href="#gérer-les-utilisateurs-panel-admin">Gérer les utilisateurs (panel /admin)</a></h1>
2673 +<blockquote>
2674 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
2675 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
2676 +</blockquote>
2677 +<h2 id="todo-36"><a class="header" href="#todo-36">TODO</a></h2>
2678 +<ul>
2679 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
2680 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
2681 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
2682 +</ul>
2683 +<div style="break-before: page; page-break-before: always;"></div>
2684 +<h1 id="auditer-une-instance"><a class="header" href="#auditer-une-instance">Auditer une instance</a></h1>
2685 +<blockquote>
2686 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
2687 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
2688 +</blockquote>
2689 +<h2 id="todo-37"><a class="header" href="#todo-37">TODO</a></h2>
2690 +<ul>
2691 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
2692 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
2693 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
2694 +</ul>
2695 +<div style="break-before: page; page-break-before: always;"></div>
2696 +<h1 id="référence-1"><a class="header" href="#référence-1">Référence</a></h1>
2697 +<blockquote>
2698 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
2699 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
2700 +</blockquote>
2701 +<h2 id="todo-38"><a class="header" href="#todo-38">TODO</a></h2>
2702 +<ul>
2703 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
2704 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
2705 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
2706 +</ul>
2707 +<div style="break-before: page; page-break-before: always;"></div>
2708 +<h1 id="variables-denvironnement"><a class="header" href="#variables-denvironnement">Variables d’environnement</a></h1>
2709 +<blockquote>
2710 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
2711 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
2712 +</blockquote>
2713 +<h2 id="todo-39"><a class="header" href="#todo-39">TODO</a></h2>
2714 +<ul>
2715 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
2716 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
2717 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
2718 +</ul>
2719 +<div style="break-before: page; page-break-before: always;"></div>
2720 +<h1 id="paramètres-dynamiques"><a class="header" href="#paramètres-dynamiques">Paramètres dynamiques</a></h1>
2721 +<p>Ce document explique comment fonctionne la configuration de la plateforme, les deux mécanismes en jeu, leur précédence, et les pièges à connaître.</p>
2722 +<hr>
2723 +<h2 id="vue-densemble--deux-systèmes-distincts"><a class="header" href="#vue-densemble--deux-systèmes-distincts">Vue d’ensemble : deux systèmes distincts</a></h2>
2724 +<p>Gitrust utilise <strong>deux systèmes de configuration</strong> indépendants :</p>
2725 +<div class="table-wrapper">
2726 +<table>
2727 +<thead>
2728 +<tr><th>Système</th><th>Source</th><th style="text-align: center">Modifiable à chaud</th><th style="text-align: center">Visible dans l’UI admin</th></tr>
2729 +</thead>
2730 +<tbody>
2731 +<tr><td><strong>Configuration statique</strong></td><td>Fichier <code>.env</code> + variables d’environnement</td><td style="text-align: center">Non (restart requis)</td><td style="text-align: center">Non</td></tr>
2732 +<tr><td><strong>Configuration dynamique</strong></td><td>Table <code>app_settings</code> (PostgreSQL)</td><td style="text-align: center">Oui (effet immédiat)</td><td style="text-align: center">Oui (<code>/admin/settings</code>)</td></tr>
2733 +</tbody>
2734 +</table>
2735 +</div>
2736 +<p>Il existe un <strong>cas hybride</strong> pour OAuth (DB prioritaire, <code>.env</code> en fallback).</p>
2737 +<hr>
2738 +<h2 id="1-configuration-statique-env"><a class="header" href="#1-configuration-statique-env">1. Configuration statique (<code>.env</code>)</a></h2>
2739 +<h3 id="principe"><a class="header" href="#principe">Principe</a></h3>
2740 +<p>Les variables d’environnement sont chargées <strong>une seule fois au démarrage</strong> par <code>dotenvy::dotenv()</code> et stockées dans des structs Rust immuables. Elles ne sont jamais relues après le boot.</p>
2741 +<h3 id="fichiers-de-référence"><a class="header" href="#fichiers-de-référence">Fichiers de référence</a></h3>
2742 +<div class="table-wrapper">
2743 +<table>
2744 +<thead>
2745 +<tr><th>Fichier</th><th>Rôle</th></tr>
2746 +</thead>
2747 +<tbody>
2748 +<tr><td><code>.env.example</code></td><td>Template documenté avec toutes les variables</td></tr>
2749 +<tr><td><code>.env</code></td><td>Configuration locale (gitignore)</td></tr>
2750 +<tr><td><code>.env.production</code></td><td>Configuration de déploiement</td></tr>
2751 +<tr><td><code>.env.test</code></td><td>Configuration de tests</td></tr>
2752 +</tbody>
2753 +</table>
2754 +</div>
2755 +<h3 id="structs-de-chargement"><a class="header" href="#structs-de-chargement">Structs de chargement</a></h3>
2756 +<div class="table-wrapper">
2757 +<table>
2758 +<thead>
2759 +<tr><th>Struct</th><th>Variables concernées</th></tr>
2760 +</thead>
2761 +<tbody>
2762 +<tr><td><code>GitrustConfig</code></td><td><code>GIT_REPOS_BASE_PATH</code>, <code>SSH_PORT</code>, <code>SSH_LISTEN_ADDR</code>, <code>SSH_HOST_KEY_PATH</code>, <code>CI_*</code>, <code>IMPORT_*</code></td></tr>
2763 +<tr><td><code>AppConfig</code></td><td><code>APP_NAME</code>, <code>APP_THEME</code>, <code>APP_DEBUG</code></td></tr>
2764 +<tr><td><code>AuthConfig</code></td><td><code>JWT_SECRET</code>, <code>JWT_EXPIRATION_MINUTES</code>, <code>SESSION_*</code>, <code>RATE_LIMIT_*</code>, <code>COOKIE_*</code></td></tr>
2765 +<tr><td><code>EmailConfig</code></td><td><code>SMTP_*</code>, <code>EMAIL_*</code>, <code>IMAP_*</code></td></tr>
2766 +</tbody>
2767 +</table>
2768 +</div>
2769 +<h3 id="comportement"><a class="header" href="#comportement">Comportement</a></h3>
2770 +<ul>
2771 +<li>Chargées dans <code>RustwardenApp::build()</code> au démarrage</li>
2772 +<li>Stockées dans des <code>Arc&lt;Config&gt;</code> partagés via l’état axum</li>
2773 +<li><strong>Modifier le <code>.env</code> sans redémarrer n’a aucun effet</strong></li>
2774 +<li><strong>Ces variables ne sont PAS affichées dans l’interface admin</strong></li>
2775 +</ul>
2776 +<h3 id="liste-des-variables-statiques-non-exhaustive"><a class="header" href="#liste-des-variables-statiques-non-exhaustive">Liste des variables statiques (non exhaustive)</a></h3>
2777 +<pre><code>DATABASE_URL, SERVER_HOST, SERVER_PORT, RUST_LOG,
2778 +SSH_HOST_KEY_PATH, SSH_PORT, SSH_LISTEN_ADDR, SSH_PUBLIC_HOST,
2779 +JWT_SECRET, JWT_EXPIRATION_MINUTES, JWT_ISSUER,
2780 +REFRESH_TOKEN_EXPIRATION_DAYS, REMEMBER_ME_EXPIRATION_DAYS,
2781 +SESSION_TIMEOUT_MINUTES, SESSION_BACKEND,
2782 +RATE_LIMIT_LOGIN_PER_MINUTE, RATE_LIMIT_REFRESH_PER_MINUTE,
2783 +RATE_LIMIT_GENERAL_PER_MINUTE,
2784 +APP_DEBUG, COOKIE_SECURE, COOKIE_SAME_SITE,
2785 +ADMIN_USERNAME, ADMIN_EMAIL, ADMIN_PASSWORD,
2786 +SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, SMTP_FROM,
2787 +EMAIL_BASE_URL, EMAIL_QUEUE_*,
2788 +APP_NAME, APP_THEME, DEFAULT_LOCALE,
2789 +GIT_REPOS_BASE_PATH,
2790 +CI_ENABLED, CI_MAX_CONCURRENT, CI_REMOTE_HOST, CI_WORKSPACE_PATH
2791 +</code></pre>
2792 +<hr>
2793 +<h2 id="2-configuration-dynamique-table-app_settings"><a class="header" href="#2-configuration-dynamique-table-app_settings">2. Configuration dynamique (table <code>app_settings</code>)</a></h2>
2794 +<h3 id="principe-1"><a class="header" href="#principe-1">Principe</a></h3>
2795 +<p>Les réglages dynamiques sont stockés en base PostgreSQL dans la table <code>app_settings</code> et lus <strong>à chaque requête</strong> via <code>AppSettingsService</code>. Ils sont modifiables à chaud par un administrateur depuis l’interface <code>/admin/settings</code>.</p>
2796 +<h3 id="schéma-de-la-table"><a class="header" href="#schéma-de-la-table">Schéma de la table</a></h3>
2797 +<pre><code class="language-sql">CREATE TABLE app_settings (
2798 + id UUID PRIMARY KEY,
2799 + key VARCHAR(100) UNIQUE NOT NULL,
2800 + value TEXT NOT NULL,
2801 + description TEXT,
2802 + updated_by UUID REFERENCES users(id) ON DELETE SET NULL,
2803 + updated_at TIMESTAMPTZ NOT NULL
2804 +);
2805 +</code></pre>
2806 +<h3 id="initialisation-au-démarrage"><a class="header" href="#initialisation-au-démarrage">Initialisation au démarrage</a></h3>
2807 +<p>Au boot, <code>AppSettingsService::initialize_default_settings()</code> crée les réglages par défaut <strong>uniquement s’ils n’existent pas encore en base</strong> :</p>
2808 +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
2809 +</span><span class="boring">fn main() {
2810 +</span>let existing = Self::get_setting(db, key).await?;
2811 +if existing.is_none() {
2812 + // ... insert valeur par défaut
2813 +}
2814 +<span class="boring">}</span></code></pre>
2815 +<p><strong>Conséquence critique</strong> : une fois qu’un réglage existe en base (créé au premier démarrage ou modifié via l’UI), il n’est <strong>jamais écrasé</strong> par un redémarrage ultérieur.</p>
2816 +<h3 id="liste-des-réglages-dynamiques-et-leurs-valeurs-par-défaut"><a class="header" href="#liste-des-réglages-dynamiques-et-leurs-valeurs-par-défaut">Liste des réglages dynamiques et leurs valeurs par défaut</a></h3>
2817 +<div class="table-wrapper">
2818 +<table>
2819 +<thead>
2820 +<tr><th>Clé</th><th>Défaut</th><th>Description</th></tr>
2821 +</thead>
2822 +<tbody>
2823 +<tr><td><code>app_domain</code></td><td><code>env::var("APP_DOMAIN")</code> ou <code>"localhost"</code></td><td>Domaine de l’application</td></tr>
2824 +<tr><td><code>allow_registration</code></td><td><code>false</code></td><td>Autoriser l’inscription publique</td></tr>
2825 +<tr><td><code>validation_email_required</code></td><td><code>true</code></td><td>Exiger la validation email</td></tr>
2826 +<tr><td><code>audit_log_level</code></td><td><code>INFO</code></td><td>Niveau de log d’audit</td></tr>
2827 +<tr><td><code>audit_log_actions</code></td><td><code>["create","update","delete","reset_password"]</code></td><td>Actions auditées</td></tr>
2828 +<tr><td><code>password_min_length</code></td><td><code>8</code></td><td>Longueur minimum mot de passe</td></tr>
2829 +<tr><td><code>password_require_uppercase</code></td><td><code>false</code></td><td>Exiger des majuscules</td></tr>
2830 +<tr><td><code>password_require_lowercase</code></td><td><code>false</code></td><td>Exiger des minuscules</td></tr>
2831 +<tr><td><code>password_require_digits</code></td><td><code>false</code></td><td>Exiger des chiffres</td></tr>
2832 +<tr><td><code>password_require_special</code></td><td><code>false</code></td><td>Exiger des caractères spéciaux</td></tr>
2833 +<tr><td><code>password_change_require_email</code></td><td><code>true</code></td><td>Confirmation email pour changement mdp</td></tr>
2834 +<tr><td><code>password_expiration_enabled</code></td><td><code>false</code></td><td>Activer l’expiration des mots de passe</td></tr>
2835 +<tr><td><code>password_expiration_days</code></td><td><code>0</code></td><td>Durée d’expiration (jours)</td></tr>
2836 +<tr><td><code>password_expiration_alert_enabled</code></td><td><code>false</code></td><td>Alerte email avant expiration</td></tr>
2837 +<tr><td><code>password_expiration_alert_days_before</code></td><td><code>7</code></td><td>Jours avant expiration pour alerter</td></tr>
2838 +<tr><td><code>oauth_enabled</code></td><td><code>false</code></td><td>Activer OAuth/SSO</td></tr>
2839 +<tr><td><code>oauth_google_enabled</code></td><td><code>false</code></td><td>Activer Google OAuth</td></tr>
2840 +<tr><td><code>oauth_github_enabled</code></td><td><code>false</code></td><td>Activer GitHub OAuth</td></tr>
2841 +<tr><td><code>oauth_discord_enabled</code></td><td><code>false</code></td><td>Activer Discord OAuth</td></tr>
2842 +<tr><td><code>oauth_microsoft_enabled</code></td><td><code>false</code></td><td>Activer Microsoft OAuth</td></tr>
2843 +<tr><td><code>oauth_redirect_base_url</code></td><td><code>""</code></td><td>URL de base pour les callbacks OAuth</td></tr>
2844 +<tr><td><code>oauth_auto_register</code></td><td><code>true</code></td><td>Créer un compte auto au premier login OAuth</td></tr>
2845 +<tr><td><code>oauth_link_existing_account</code></td><td><code>true</code></td><td>Lier un compte OAuth à un utilisateur existant</td></tr>
2846 +<tr><td><code>oauth_{provider}_client_id</code></td><td><code>""</code></td><td>Client ID du provider OAuth</td></tr>
2847 +<tr><td><code>oauth_{provider}_client_secret</code></td><td><code>""</code></td><td>Client secret (chiffré AES-256-GCM en base)</td></tr>
2848 +<tr><td><code>oauth_microsoft_tenant</code></td><td><code>""</code></td><td>Tenant Azure AD</td></tr>
2849 +</tbody>
2850 +</table>
2851 +</div>
2852 +<hr>
2853 +<h2 id="3-cas-hybride--oauth"><a class="header" href="#3-cas-hybride--oauth">3. Cas hybride : OAuth</a></h2>
2854 +<p>OAuth est le <strong>seul sous-système</strong> qui combine les deux sources. La logique dans <code>OAuthConfig::load()</code> :</p>
2855 +<pre><code>Pour chaque réglage OAuth :
2856 + 1. Chercher dans app_settings (DB)
2857 + → si trouvé et non vide : utiliser cette valeur
2858 + 2. Sinon : fallback sur la variable d'environnement
2859 + → si absente : utiliser la valeur par défaut codée en dur
2860 +</code></pre>
2861 +<p><strong>Important</strong> : <code>OAuthConfig::load()</code> est appelé au démarrage. Le résultat est stocké dans un <code>Arc</code> et n’est pas relu dynamiquement. Donc :</p>
2862 +<ul>
2863 +<li>Modifier un réglage OAuth <strong>via l’UI admin</strong> nécessite un <strong>redémarrage</strong> pour que <code>OAuthConfig</code> soit rechargé</li>
2864 +<li>Le <code>.env</code> n’est qu’un fallback si la DB n’a pas de valeur</li>
2865 +</ul>
2866 +<hr>
2867 +<h2 id="4-précédence-et-comportement-au-redémarrage"><a class="header" href="#4-précédence-et-comportement-au-redémarrage">4. Précédence et comportement au redémarrage</a></h2>
2868 +<h3 id="réglages-statiques-env-uniquement"><a class="header" href="#réglages-statiques-env-uniquement">Réglages statiques (<code>.env</code> uniquement)</a></h3>
2869 +<div class="table-wrapper">
2870 +<table>
2871 +<thead>
2872 +<tr><th>Action</th><th style="text-align: center">Effet immédiat</th><th style="text-align: center">Après restart</th></tr>
2873 +</thead>
2874 +<tbody>
2875 +<tr><td>Modifier <code>.env</code></td><td style="text-align: center">Non</td><td style="text-align: center">Oui</td></tr>
2876 +</tbody>
2877 +</table>
2878 +</div>
2879 +<h3 id="réglages-dynamiques-db-uniquement"><a class="header" href="#réglages-dynamiques-db-uniquement">Réglages dynamiques (DB uniquement)</a></h3>
2880 +<div class="table-wrapper">
2881 +<table>
2882 +<thead>
2883 +<tr><th>Action</th><th style="text-align: center">Effet immédiat</th><th style="text-align: center">Après restart</th></tr>
2884 +</thead>
2885 +<tbody>
2886 +<tr><td>Modifier via UI admin</td><td style="text-align: center">Oui</td><td style="text-align: center">Oui (valeur en DB persiste)</td></tr>
2887 +<tr><td>Modifier le <code>.env</code></td><td style="text-align: center">Aucun effet</td><td style="text-align: center">Aucun effet</td></tr>
2888 +</tbody>
2889 +</table>
2890 +</div>
2891 +<h3 id="réglages-hybrides-oauth"><a class="header" href="#réglages-hybrides-oauth">Réglages hybrides (OAuth)</a></h3>
2892 +<div class="table-wrapper">
2893 +<table>
2894 +<thead>
2895 +<tr><th>Action</th><th style="text-align: center">Effet immédiat</th><th style="text-align: center">Après restart</th></tr>
2896 +</thead>
2897 +<tbody>
2898 +<tr><td>Modifier via UI admin</td><td style="text-align: center">Non (OAuthConfig est en Arc)</td><td style="text-align: center">Oui (DB prime sur .env)</td></tr>
2899 +<tr><td>Modifier <code>.env</code></td><td style="text-align: center">Non</td><td style="text-align: center">Seulement si aucune valeur en DB</td></tr>
2900 +</tbody>
2901 +</table>
2902 +</div>
2903 +<hr>
2904 +<h2 id="5-piège-principal--les-variables-env-fantômes"><a class="header" href="#5-piège-principal--les-variables-env-fantômes">5. Piège principal : les variables <code>.env</code> fantômes</a></h2>
2905 +<p>Certaines variables présentes dans <code>.env.example</code> donnent l’<strong>illusion</strong> de configurer des réglages qui sont en réalité gérés par la base de données :</p>
2906 +<div class="table-wrapper">
2907 +<table>
2908 +<thead>
2909 +<tr><th>Variable <code>.env</code></th><th>Réglage DB correspondant</th><th style="text-align: center">La variable <code>.env</code> est-elle lue ?</th></tr>
2910 +</thead>
2911 +<tbody>
2912 +<tr><td><code>ALLOW_REGISTRATION=true</code></td><td><code>allow_registration</code></td><td style="text-align: center"><strong>Non</strong> — valeur par défaut codée en dur (<code>"false"</code>)</td></tr>
2913 +<tr><td><code>EMAIL_VALIDATION_REQUIRED=true</code></td><td><code>validation_email_required</code></td><td style="text-align: center"><strong>Non</strong> — valeur par défaut codée en dur (<code>"true"</code>)</td></tr>
2914 +<tr><td><code>OAUTH_ENABLED=true</code></td><td><code>oauth_enabled</code></td><td style="text-align: center">Oui, mais <strong>seulement en fallback</strong> si la DB n’a pas de valeur</td></tr>
2915 +</tbody>
2916 +</table>
2917 +</div>
2918 +<p>Pour <code>ALLOW_REGISTRATION</code> et <code>EMAIL_VALIDATION_REQUIRED</code> :</p>
2919 +<ul>
2920 +<li>La variable <code>.env</code> est documentée dans <code>.env.example</code> mais <strong>n’est jamais consultée</strong> par <code>initialize_default_settings()</code></li>
2921 +<li>La valeur initiale est <strong>codée en dur</strong> dans le service</li>
2922 +<li>Seule la valeur en base de données (modifiable via <code>/admin/settings</code>) fait foi</li>
2923 +</ul>
2924 +<p>Pour <code>app_domain</code>, c’est le seul réglage dynamique qui lit le <code>.env</code> comme seed initial.</p>
2925 +<hr>
2926 +<h2 id="6-diagramme-de-décision"><a class="header" href="#6-diagramme-de-décision">6. Diagramme de décision</a></h2>
2927 +<pre><code> ┌─────────────────────────────┐
2928 + │ Quel type de réglage ? │
2929 + └──────────┬──────────────────-┘
2930 + │
2931 + ┌────────────────┼────────────────┐
2932 + ▼ ▼ ▼
2933 + Infrastructure Fonctionnel OAuth
2934 + (port, JWT, SMTP) (inscription, (providers,
2935 + mots de passe) secrets)
2936 + │ │ │
2937 + ▼ ▼ ▼
2938 + .env seul DB seule DB + fallback .env
2939 + │ │ │
2940 + ▼ ▼ ▼
2941 + Restart requis Effet immédiat Restart requis
2942 + via /admin/ (OAuthConfig en Arc)
2943 + settings
2944 +</code></pre>
2945 +<hr>
2946 +<h2 id="7-guide-pour-les-administrateurs"><a class="header" href="#7-guide-pour-les-administrateurs">7. Guide pour les administrateurs</a></h2>
2947 +<h3 id="modifier-un-réglage-dinfrastructure"><a class="header" href="#modifier-un-réglage-dinfrastructure">Modifier un réglage d’infrastructure</a></h3>
2948 +<p>Éditer <code>.env</code> (ou <code>.env.production</code>) puis redémarrer le service :</p>
2949 +<pre><code class="language-bash"># Éditer
2950 +vim .env
2951 +
2952 +# Redémarrer
2953 +systemctl restart gitrust # production
2954 +# ou Ctrl+C + cargo run # dev
2955 +</code></pre>
2956 +<h3 id="modifier-un-réglage-fonctionnel"><a class="header" href="#modifier-un-réglage-fonctionnel">Modifier un réglage fonctionnel</a></h3>
2957 +<p>Se connecter en tant qu’administrateur, aller dans <code>/admin/settings</code>, modifier la valeur, et cliquer “Save”. L’effet est <strong>immédiat</strong>, aucun redémarrage nécessaire.</p>
2958 +<h3 id="modifier-un-réglage-oauth"><a class="header" href="#modifier-un-réglage-oauth">Modifier un réglage OAuth</a></h3>
2959 +<p>Via <code>/admin/settings</code>, modifier les valeurs OAuth puis <strong>redémarrer le service</strong> (la config OAuth est chargée en mémoire au boot et n’est pas relue dynamiquement).</p>
2960 +<h3 id="vérifier-la-valeur-effective-dun-réglage"><a class="header" href="#vérifier-la-valeur-effective-dun-réglage">Vérifier la valeur effective d’un réglage</a></h3>
2961 +<p>Pour les réglages dynamiques, interroger la base directement :</p>
2962 +<pre><code class="language-sql">SELECT key, value, updated_at, updated_by
2963 +FROM app_settings
2964 +WHERE key = 'allow_registration';
2965 +</code></pre>
2966 +<p>Pour les réglages statiques, vérifier les logs au démarrage (<code>RUST_LOG=debug</code>).</p>
2967 +<hr>
2968 +<h2 id="8-guide-pour-les-développeurs"><a class="header" href="#8-guide-pour-les-développeurs">8. Guide pour les développeurs</a></h2>
2969 +<h3 id="ajouter-un-nouveau-réglage-dynamique"><a class="header" href="#ajouter-un-nouveau-réglage-dynamique">Ajouter un nouveau réglage dynamique</a></h3>
2970 +<ol>
2971 +<li>
2972 +<p>Ajouter le tuple <code>(clé, valeur_défaut, description)</code> dans <code>AppSettingsService::initialize_default_settings()</code> :</p>
2973 +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
2974 +</span><span class="boring">fn main() {
2975 +</span>("ma_nouvelle_cle", "valeur_par_defaut", Some("Description pour l'UI admin")),
2976 +<span class="boring">}</span></code></pre>
2977 +</li>
2978 +<li>
2979 +<p>Lire la valeur dans le code via le service :</p>
2980 +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
2981 +</span><span class="boring">fn main() {
2982 +</span>// Boolean avec défaut
2983 +let enabled = AppSettingsService::get_bool(&amp;db, "ma_nouvelle_cle", false).await?;
2984 +
2985 +// String
2986 +let val = AppSettingsService::get_setting(&amp;db, "ma_nouvelle_cle").await?;
2987 +<span class="boring">}</span></code></pre>
2988 +</li>
2989 +<li>
2990 +<p>La valeur apparaîtra automatiquement dans <code>/admin/settings</code>.</p>
2991 +</li>
2992 +</ol>
2993 +<h3 id="ajouter-un-nouveau-réglage-statique"><a class="header" href="#ajouter-un-nouveau-réglage-statique">Ajouter un nouveau réglage statique</a></h3>
2994 +<ol>
2995 +<li>Ajouter la variable dans <code>.env.example</code> avec documentation complète</li>
2996 +<li>Lire la variable dans le struct <code>Config</code> correspondant via <code>env::var()</code></li>
2997 +<li>La valeur ne sera <strong>pas</strong> visible dans l’interface admin</li>
2998 +</ol>
2999 +<h3 id="ajouter-un-réglage-hybride-db--fallback-env"><a class="header" href="#ajouter-un-réglage-hybride-db--fallback-env">Ajouter un réglage hybride (DB + fallback .env)</a></h3>
3000 +<p>Suivre le pattern OAuth dans <code>crates/rustwarden-core/src/config/oauth.rs</code> :</p>
3001 +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
3002 +</span><span class="boring">fn main() {
3003 +</span>let ma_valeur = match db_val("ma_cle").await {
3004 + Some(v) =&gt; v,
3005 + None =&gt; env::var("MA_CLE").unwrap_or_else(|_| "defaut".to_string()),
3006 +};
3007 +<span class="boring">}</span></code></pre>
3008 +<div style="break-before: page; page-break-before: always;"></div>
3009 +<h1 id="schéma-de-la-base-de-données"><a class="header" href="#schéma-de-la-base-de-données">Schéma de la base de données</a></h1>
3010 +<blockquote>
3011 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
3012 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
3013 +</blockquote>
3014 +<h2 id="todo-40"><a class="header" href="#todo-40">TODO</a></h2>
3015 +<ul>
3016 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
3017 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
3018 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
3019 +</ul>
3020 +<div style="break-before: page; page-break-before: always;"></div>
3021 +<h1 id="ports-et-services"><a class="header" href="#ports-et-services">Ports et services</a></h1>
3022 +<blockquote>
3023 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
3024 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
3025 +</blockquote>
3026 +<h2 id="todo-41"><a class="header" href="#todo-41">TODO</a></h2>
3027 +<ul>
3028 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
3029 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
3030 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
3031 +</ul>
3032 +<div style="break-before: page; page-break-before: always;"></div>
3033 +<h1 id="conformité-anssi-pa-074"><a class="header" href="#conformité-anssi-pa-074">Conformité ANSSI PA-074</a></h1>
3034 +<blockquote>
3035 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
3036 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
3037 +</blockquote>
3038 +<h2 id="todo-42"><a class="header" href="#todo-42">TODO</a></h2>
3039 +<ul>
3040 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
3041 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
3042 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
3043 +</ul>
3044 +<div style="break-before: page; page-break-before: always;"></div>
3045 +<h1 id="explication-1"><a class="header" href="#explication-1">Explication</a></h1>
3046 +<blockquote>
3047 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
3048 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
3049 +</blockquote>
3050 +<h2 id="todo-43"><a class="header" href="#todo-43">TODO</a></h2>
3051 +<ul>
3052 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
3053 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
3054 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
3055 +</ul>
3056 +<div style="break-before: page; page-break-before: always;"></div>
3057 +<h1 id="architecture-globale"><a class="header" href="#architecture-globale">Architecture globale</a></h1>
3058 +<blockquote>
3059 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
3060 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
3061 +</blockquote>
3062 +<h2 id="todo-44"><a class="header" href="#todo-44">TODO</a></h2>
3063 +<ul>
3064 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
3065 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
3066 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
3067 +</ul>
3068 +<div style="break-before: page; page-break-before: always;"></div>
3069 +<h1 id="modèle-de-déploiement"><a class="header" href="#modèle-de-déploiement">Modèle de déploiement</a></h1>
3070 +<blockquote>
3071 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
3072 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
3073 +</blockquote>
3074 +<h2 id="todo-45"><a class="header" href="#todo-45">TODO</a></h2>
3075 +<ul>
3076 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
3077 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
3078 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
3079 +</ul>
3080 +<div style="break-before: page; page-break-before: always;"></div>
3081 +<h1 id="ci-dagger--easy-mode-vs-power-mode"><a class="header" href="#ci-dagger--easy-mode-vs-power-mode">CI Dagger : Easy Mode vs Power Mode</a></h1>
3082 +<blockquote>
3083 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
3084 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
3085 +</blockquote>
3086 +<h2 id="todo-46"><a class="header" href="#todo-46">TODO</a></h2>
3087 +<ul>
3088 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
3089 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
3090 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
3091 +</ul>
3092 +<div style="break-before: page; page-break-before: always;"></div>
3093 +<h1 id="stratégie-de-sauvegarde"><a class="header" href="#stratégie-de-sauvegarde">Stratégie de sauvegarde</a></h1>
3094 +<blockquote>
3095 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
3096 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
3097 +</blockquote>
3098 +<h2 id="todo-47"><a class="header" href="#todo-47">TODO</a></h2>
3099 +<ul>
3100 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
3101 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
3102 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
3103 +</ul>
3104 +<div style="break-before: page; page-break-before: always;"></div>
3105 +<h1 id="manuel-développeur"><a class="header" href="#manuel-développeur">Manuel développeur</a></h1>
3106 +<p>Ce manuel s’adresse à deux publics : les contributeurs au code gitrust (core ou via fork rustwarden) et les développeurs externes qui construisent des intégrations sur l’API publique. Il fournit tout le nécessaire pour comprendre l’architecture des 6 crates, contribuer du code conforme aux standards du projet, ou bâtir un client qui parle à l’API gitrust. Il ne couvre pas l’installation d’une instance de production ni l’usage quotidien de la forge.</p>
3107 +<h2 id="parcours-dapprentissage--contributeur-core"><a class="header" href="#parcours-dapprentissage--contributeur-core">Parcours d’apprentissage — contributeur core</a></h2>
3108 +<p>Le parcours contributeur représente environ 4 heures au total, avec un étayage dégressif : le premier tutoriel est entièrement guidé, le troisième (capstone) demande de résoudre sans guide pas-à-pas.</p>
3109 +<pre class="mermaid">graph LR
3110 + A[Utilisateur autonome] --&gt; B[01-getting-started&lt;br/&gt;45 min]
3111 + B --&gt; C[02-premiere-contribution&lt;br/&gt;90 min]
3112 + C --&gt; D[03-creer-un-worker-async&lt;br/&gt;capstone 120 min]
3113 + D --&gt; E[Core contributor]
3114 +</pre>
3115 +
3116 +<blockquote>
3117 +<p><strong>Checkpoint de parcours</strong> : avant de passer au tutoriel 02, vous devez avoir compilé gitrust localement, lancé les tests unitaires et obtenu une instance de développement fonctionnelle. Si ce n’est pas le cas, relisez le tutoriel 01.</p>
3118 +</blockquote>
3119 +<blockquote>
3120 +<p><strong>Checkpoint de parcours</strong> : avant le tutoriel 03 (capstone), vous devez avoir soumis une PR complète avec tests, passé la gate QA et reçu une review. Si ce n’est pas le cas, relisez le tutoriel 02.</p>
3121 +</blockquote>
3122 +<hr>
3123 +<h2 id="tutoriels--apprendre-en-faisant-2"><a class="header" href="#tutoriels--apprendre-en-faisant-2">Tutoriels — apprendre en faisant</a></h2>
3124 +<p>Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suivez-les dans l’ordre — chacun suppose le précédent complété.</p>
3125 +<ul>
3126 +<li><a href="#premiers-pas-avec-gitrust--compilez-configurez-et-poussez-votre-premier-commit">01 — Getting started : build local, tests, instance de dev</a> — ~45 min</li>
3127 +<li><a href="#02--première-contribution">02 — Première contribution : clone, build, test, PR</a> — ~90 min</li>
3128 +<li><a href="#03--créer-un-worker-async-capstone">03 — Créer un worker async (capstone)</a> — ~120 min</li>
3129 +</ul>
3130 +<hr>
3131 +<h2 id="how-to--recettes-pour-les-tâches-courantes-2"><a class="header" href="#how-to--recettes-pour-les-tâches-courantes-2">How-to — recettes pour les tâches courantes</a></h2>
3132 +<p>Les how-to répondent à « comment faire X » sans explication de fond. Consultez-les dans n’importe quel ordre selon votre besoin.</p>
3133 +<ul>
3134 +<li><a href="#workflow-de-contribution-et-pr">Workflow de contribution : Git + review + QA</a></li>
3135 +<li><a href="#lancer-les-tests-unitaires">Lancer les tests unitaires</a></li>
3136 +<li><a href="#lancer-les-tests-end-to-end-e2e">Lancer les tests E2E (Playwright)</a></li>
3137 +<li><a href="#ajouter-une-route-web">Ajouter une route web (patron rustwarden → axum)</a></li>
3138 +<li><a href="#ajouter-un-service-métier">Ajouter un service métier</a></li>
3139 +<li><a href="#ajouter-une-migration-de-base-de-données">Ajouter une migration de base de données</a></li>
3140 +<li><a href="#implémenter-des-webhooks">Implémenter des webhooks</a></li>
3141 +<li><a href="#implémenter-un-endpoint-api">Implémenter un endpoint API</a></li>
3142 +<li><a href="#importer-un-dépôt-externe-1">Importer un dépôt externe (code)</a></li>
3143 +<li><a href="#contribuer-à-rustwarden">Contribuer à rustwarden upstream</a></li>
3144 +<li><a href="#passer-la-qa-avant-un-merge">Passer la QA avant merge</a></li>
3145 +</ul>
3146 +<hr>
3147 +<h2 id="référence--informations-techniques-exactes-2"><a class="header" href="#référence--informations-techniques-exactes-2">Référence — informations techniques exactes</a></h2>
3148 +<p>La référence documente de façon exhaustive l’architecture, les API internes, le schéma de données et les règles QA. Destinée à la consultation ponctuelle.</p>
3149 +<ul>
3150 +<li><a href="#architecture-par-crates">Architecture des 6 crates</a></li>
3151 +<li><a href="#services-et-api-interne">Services et API interne</a></li>
3152 +<li><a href="#schéma-de-la-base-de-données-1">Schéma de base de données (ERD)</a></li>
3153 +<li><a href="#règles-qa--conformité-anssi">Règles QA et gates ANSSI</a></li>
3154 +<li><a href="#api-rest-v1-1">API REST v1 — auth, pagination, codes d’erreur</a></li>
3155 +<li><a href="#hooks-git-post-receive">Git hooks post-receive</a></li>
3156 +<li><a href="#api-rustwarden-core">rustwarden-core API — helpers, extracteurs, middleware</a></li>
3157 +</ul>
3158 +<hr>
3159 +<h2 id="explication--comprendre-le-pourquoi-2"><a class="header" href="#explication--comprendre-le-pourquoi-2">Explication — comprendre le pourquoi</a></h2>
3160 +<p>Les explanations construisent les modèles mentaux nécessaires pour contribuer de façon éclairée. Lisez-les quand vous voulez comprendre les décisions d’architecture, pas seulement les appliquer.</p>
3161 +<ul>
3162 +<li><a href="#vue-densemble-de-larchitecture">Vue d’ensemble de l’architecture gitrust</a></li>
3163 +<li><a href="#flux-de-requêtes">Flux de requêtes (diagrammes de séquence)</a></li>
3164 +<li><a href="#modèle-de-permissions-rbac">Modèle de permissions RBAC 4 niveaux</a></li>
3165 +<li><a href="#fonctionnement-du-2fa">Fonctionnement de la 2FA</a></li>
3166 +<li><a href="#hiérarchie-des-labels">Hiérarchie des labels</a></li>
3167 +<li><a href="#ci-dagger--easy-mode-vs-power-mode-1">CI Dagger : Easy Mode vs Power Mode</a></li>
3168 +<li><a href="#décisions-ui-htmx-daisyui">Décisions UI : HTMX + DaisyUI</a></li>
3169 +<li><a href="#patron-worker-async">Patron worker async</a></li>
3170 +</ul>
3171 +<div style="break-before: page; page-break-before: always;"></div>
3172 +<h1 id="tutoriels-2"><a class="header" href="#tutoriels-2">Tutoriels</a></h1>
3173 +<blockquote>
3174 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
3175 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
3176 +</blockquote>
3177 +<h2 id="todo-48"><a class="header" href="#todo-48">TODO</a></h2>
3178 +<ul>
3179 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
3180 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
3181 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
3182 +</ul>
3183 +<div style="break-before: page; page-break-before: always;"></div>
3184 +<h1 id="premiers-pas-avec-gitrust--compilez-configurez-et-poussez-votre-premier-commit"><a class="header" href="#premiers-pas-avec-gitrust--compilez-configurez-et-poussez-votre-premier-commit">Premiers pas avec gitrust : compilez, configurez et poussez votre premier commit</a></h1>
3185 +<blockquote>
3186 +<p><strong>Source</strong> : ce tutoriel intègre le contenu de <code>gitrust/docs/GETTING_STARTED.md</code> avec la structure pédagogique complète (objectifs Bloom, modèle mental, checkpoints observables, section « Et si ça ne marche pas »).</p>
3187 +</blockquote>
3188 +<h2 id="objectifs-2"><a class="header" href="#objectifs-2">Objectifs</a></h2>
3189 +<p>À la fin de ce tutoriel, vous saurez :</p>
3190 +<ul>
3191 +<li><strong>O1. Compiler</strong> gitrust depuis les sources et lancer l’instance de développement localement</li>
3192 +<li><strong>O2. Configurer</strong> l’environnement de développement (base de données, variables d’environnement, assets CSS)</li>
3193 +<li><strong>O3. Exécuter</strong> un premier push SSH vers votre instance locale et vérifier le résultat dans l’interface web</li>
3194 +</ul>
3195 +<h2 id="pré-requis-3"><a class="header" href="#pré-requis-3">Pré-requis</a></h2>
3196 +<ul>
3197 +<li><strong>Technique</strong> : Rust stable ≥ 1.80 (<code>rustc --version</code>), PostgreSQL ≥ 15 (<code>psql --version</code>), Node.js ≥ 18 (<code>node --version</code>), Git 2.x (<code>git --version</code>), Docker (optionnel, recommandé pour la base de données)</li>
3198 +<li><strong>Pédagogique</strong> : être un utilisateur autonome de gitrust (parcours <code>user_manual</code> complété ou équivalent) ; familiarité avec Rust (au moins 3 mois de pratique) et avec HTTP/PostgreSQL</li>
3199 +<li><strong>Temps estimé</strong> : ~45 minutes</li>
3200 +</ul>
3201 +<h2 id="vue-densemble-2"><a class="header" href="#vue-densemble-2">Vue d’ensemble</a></h2>
3202 +<p>Avant d’exécuter la première commande, prenons 3 minutes pour comprendre ce que vous allez monter et comment les pièces s’articulent.</p>
3203 +<p>gitrust est un <strong>monorepo Rust à 6 crates</strong> qui compile en un seul binaire. Quand vous lancez <code>cargo run</code>, ce binaire démarre deux serveurs simultanément : un serveur HTTP (<code>:4000</code>) pour l’interface web et l’API REST, et un serveur SSH (<code>:2222</code>) pour les opérations <code>git push/pull</code>. Ils partagent la même base de données PostgreSQL et le même stockage de dépôts bare sur disque.</p>
3204 +<pre class="mermaid">graph TB
3205 + subgraph sources ["Sources gitrust (monorepo Rust)"]
3206 + C1[rustwarden-core&lt;br/&gt;auth, sessions, middleware]
3207 + C2[gitrust-core&lt;br/&gt;modèles, services métier]
3208 + C3[gitrust-git&lt;br/&gt;opérations Git bare]
3209 + C4[gitrust-web&lt;br/&gt;handlers HTTP + templates]
3210 + C5[gitrust-ssh&lt;br/&gt;serveur SSH Git]
3211 + C6[gitrust-hooks&lt;br/&gt;post-receive, pre-receive]
3212 + end
3213 +
3214 + subgraph runtime ["Processus unique (cargo run)"]
3215 + HTTP["HTTP :4000&lt;br/&gt;UI + API REST"]
3216 + SSH["SSH :2222&lt;br/&gt;git push/pull"]
3217 + end
3218 +
3219 + subgraph storage ["Stockage"]
3220 + PG[(PostgreSQL&lt;br/&gt;comptes, dépôts,&lt;br/&gt;issues, PRs)]
3221 + REPOS[Dépôts bare&lt;br/&gt;data/repos/]
3222 + end
3223 +
3224 + C1 &amp; C2 &amp; C3 &amp; C4 &amp; C5 &amp; C6 --&gt;|cargo build| HTTP
3225 + C1 &amp; C2 &amp; C3 &amp; C4 &amp; C5 &amp; C6 --&gt;|cargo build| SSH
3226 + HTTP &amp; SSH --&gt; PG
3227 + HTTP &amp; SSH --&gt; REPOS
3228 +</pre>
3229 +
3230 +<p><strong>Ce que vous allez faire</strong> : cloner les sources → préparer PostgreSQL → copier et remplir <code>.env</code> → compiler les assets CSS → lancer <code>cargo run</code> → vérifier l’instance → pousser un premier commit via SSH.</p>
3231 +<hr>
3232 +<h2 id="étape-1--vérifiez-les-pré-requis-système"><a class="header" href="#étape-1--vérifiez-les-pré-requis-système">Étape 1 : Vérifiez les pré-requis système</a></h2>
3233 +<p>Avant de cloner quoi que ce soit, vérifiez que tous les outils nécessaires sont installés :</p>
3234 +<pre><code class="language-bash">rustc --version &amp;&amp; cargo --version &amp;&amp; psql --version &amp;&amp; node --version &amp;&amp; git --version
3235 +</code></pre>
3236 +<p>Sortie attendue (versions exactes peuvent varier) :</p>
3237 +<pre><code>rustc 1.82.0 (f6e511eec 2024-10-15)
3238 +cargo 1.82.0 (8f40fc59f 2024-10-15)
3239 +psql (PostgreSQL) 16.3
3240 +v20.11.0
3241 +git version 2.43.0
3242 +</code></pre>
3243 +<p>Si des dépendances système manquent, installez-les :</p>
3244 +<pre><code class="language-bash"># Debian / Ubuntu
3245 +sudo apt install build-essential pkg-config libssl-dev libpq-dev cmake git
3246 +
3247 +# macOS
3248 +brew install postgresql openssl cmake
3249 +</code></pre>
3250 +<p><strong>Checkpoint</strong> : toutes les commandes de vérification doivent retourner un numéro de version sans erreur. Si <code>rustc</code> n’est pas trouvé, installez Rust via <code>curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh</code> puis rechargez votre shell.</p>
3251 +<hr>
3252 +<h2 id="étape-2--clonez-le-projet"><a class="header" href="#étape-2--clonez-le-projet">Étape 2 : Clonez le projet</a></h2>
3253 +<pre><code class="language-bash">git clone https://demo.gitrust.eu/gitrust/gitrust.git
3254 +cd gitrust
3255 +</code></pre>
3256 +<p>Sortie attendue :</p>
3257 +<pre><code>Cloning into 'gitrust'...
3258 +remote: Enumerating objects: 12847, done.
3259 +remote: Counting objects: 100% (12847/12847), done.
3260 +Receiving objects: 100% (12847/12847), 18.42 MiB | 4.20 MiB/s, done.
3261 +</code></pre>
3262 +<p><strong>Checkpoint</strong> : vérifiez que la structure de crates est présente :</p>
3263 +<pre><code class="language-bash">ls crates/
3264 +</code></pre>
3265 +<p>Sortie attendue :</p>
3266 +<pre><code>gitrust-core gitrust-git gitrust-hooks gitrust-ssh gitrust-web rustwarden-core
3267 +</code></pre>
3268 +<hr>
3269 +<h2 id="étape-3--configurez-lenvironnement-env"><a class="header" href="#étape-3--configurez-lenvironnement-env">Étape 3 : Configurez l’environnement (.env)</a></h2>
3270 +<p>Copiez le fichier d’exemple et éditez les 5 valeurs essentielles :</p>
3271 +<pre><code class="language-bash">cp .env.example .env
3272 +</code></pre>
3273 +<p>Ouvrez <code>.env</code> dans votre éditeur et renseignez ces valeurs :</p>
3274 +<pre><code class="language-env"># Connexion à la base de données
3275 +DATABASE_URL=postgres://gitrust:motdepasse@localhost:5432/gitrust
3276 +
3277 +# Clé secrète JWT (générez-la avec : openssl rand -hex 32)
3278 +JWT_SECRET=votre_cle_secrete_64_caracteres
3279 +
3280 +# Compte administrateur créé au premier lancement
3281 +ADMIN_USERNAME=admin
3282 +ADMIN_EMAIL=admin@example.com
3283 +ADMIN_PASSWORD=MotDePasseFort123!
3284 +</code></pre>
3285 +<blockquote>
3286 +<p>Les autres variables ont des valeurs par défaut raisonnables pour le développement. Consultez <code>.env.example</code> pour la liste complète.</p>
3287 +</blockquote>
3288 +<p>Générez une vraie valeur pour <code>JWT_SECRET</code> :</p>
3289 +<pre><code class="language-bash">openssl rand -hex 32
3290 +</code></pre>
3291 +<p>Sortie attendue (valeur différente à chaque exécution) :</p>
3292 +<pre><code>4a7f2c9e1b8d3f6a0e5c2b9d7f4a1e8c3b6d9f2a5e8c1b4d7f0a3e6c9b2d5f8a
3293 +</code></pre>
3294 +<p>Copiez cette valeur dans <code>.env</code> pour <code>JWT_SECRET</code>.</p>
3295 +<p><strong>Checkpoint</strong> : vérifiez qu’aucune valeur d’exemple reste dans <code>.env</code> :</p>
3296 +<pre><code class="language-bash">grep -E "votre_cle|example\.com|MotDePasse" .env
3297 +</code></pre>
3298 +<p>La commande doit retourner vide (aucune ligne). Si elle retourne des lignes, ces valeurs placeholder sont encore présentes — l’application démarrera mais avec une configuration non sécurisée.</p>
3299 +<hr>
3300 +<h2 id="étape-4--préparez-la-base-de-données-postgresql"><a class="header" href="#étape-4--préparez-la-base-de-données-postgresql">Étape 4 : Préparez la base de données PostgreSQL</a></h2>
3301 +<p>Vous avez deux options :</p>
3302 +<p><strong>Option A — Docker (recommandé pour débuter) :</strong></p>
3303 +<pre><code class="language-bash">cd database &amp;&amp; docker compose up -d &amp;&amp; cd ..
3304 +</code></pre>
3305 +<p>Sortie attendue :</p>
3306 +<pre><code>[+] Running 2/2
3307 + ✔ Container gitrust_postgres_dev Started 0.8s
3308 + ✔ Container gitrust_pgadmin Started 1.1s
3309 +</code></pre>
3310 +<p><strong>Option B — PostgreSQL existant sur la machine :</strong></p>
3311 +<pre><code class="language-bash">psql -U postgres &lt;&lt; 'SQL'
3312 +CREATE USER gitrust WITH PASSWORD 'motdepasse';
3313 +CREATE DATABASE gitrust OWNER gitrust;
3314 +SQL
3315 +</code></pre>
3316 +<p>Sortie attendue :</p>
3317 +<pre><code>CREATE ROLE
3318 +CREATE DATABASE
3319 +</code></pre>
3320 +<p>Adaptez le mot de passe dans <code>DATABASE_URL</code> dans <code>.env</code> si vous utilisez l’option B.</p>
3321 +<p><strong>Checkpoint</strong> : vérifiez que la base est accessible depuis l’application :</p>
3322 +<pre><code class="language-bash">psql "$DATABASE_URL" -c "SELECT version();"
3323 +</code></pre>
3324 +<p>Sortie attendue :</p>
3325 +<pre><code> version
3326 +-------------------------------------------------------------------------------------------------------
3327 + PostgreSQL 16.3 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0, 64-bit
3328 +(1 row)
3329 +</code></pre>
3330 +<p>Si vous obtenez <code>psql: error: connection to server failed</code>, vérifiez que PostgreSQL tourne et que <code>DATABASE_URL</code> correspond.</p>
3331 +<hr>
3332 +<h2 id="étape-5--compilez-les-assets-css"><a class="header" href="#étape-5--compilez-les-assets-css">Étape 5 : Compilez les assets CSS</a></h2>
3333 +<p>gitrust utilise Tailwind CSS + DaisyUI. Les assets doivent être compilés localement — aucun CDN, tous les fichiers sont servis depuis <code>static/</code> :</p>
3334 +<pre><code class="language-bash">npm install
3335 +npx tailwindcss -i static/css/input.css -o static/css/style.css --minify
3336 +</code></pre>
3337 +<p>Sortie attendue :</p>
3338 +<pre><code>added 98 packages in 3s
3339 +
3340 +Rebuilding...
3341 +Done in 1842ms.
3342 +</code></pre>
3343 +<p><strong>Checkpoint</strong> : vérifiez que le fichier CSS est généré :</p>
3344 +<pre><code class="language-bash">ls -lh static/css/style.css
3345 +</code></pre>
3346 +<p>Sortie attendue :</p>
3347 +<pre><code>-rw-r--r-- 1 vous vous 45K avr 17 10:15 static/css/style.css
3348 +</code></pre>
3349 +<p>Si le fichier fait 0 octet ou n’existe pas, la compilation a échoué — relancez <code>npm install</code> puis la commande <code>npx tailwindcss</code>.</p>
3350 +<hr>
3351 +<h2 id="étape-6--lancez-lapplication"><a class="header" href="#étape-6--lancez-lapplication">Étape 6 : Lancez l’application</a></h2>
3352 +<pre><code class="language-bash">cargo run
3353 +</code></pre>
3354 +<p>La première compilation prend 2 à 5 minutes (toutes les dépendances sont compilées). Les compilations suivantes sont incrémentales et beaucoup plus rapides.</p>
3355 +<p>Au premier lancement, gitrust exécute automatiquement :</p>
3356 +<ol>
3357 +<li>Les migrations de base de données (création de toutes les tables)</li>
3358 +<li>La création du compte administrateur (depuis <code>.env</code>)</li>
3359 +<li>La génération de la clé SSH host (<code>data/ssh_host_ed25519_key</code>)</li>
3360 +<li>La création du répertoire de stockage des dépôts (<code>data/repos/</code>)</li>
3361 +</ol>
3362 +<p>Sortie attendue (après compilation) :</p>
3363 +<pre><code> Compiling gitrust-web v0.9.0 (/home/vous/gitrust/crates/gitrust-web)
3364 + Finished `dev` profile [unoptimized + debuginfo] target(s) in 187.42s
3365 + Running `target/debug/gitrust`
3366 +2026-04-17T10:20:00Z INFO gitrust &gt; Starting gitrust v0.9.0
3367 +2026-04-17T10:20:00Z INFO gitrust &gt; Running database migrations... applied 42
3368 +2026-04-17T10:20:01Z INFO gitrust &gt; Admin account created: admin
3369 +2026-04-17T10:20:01Z INFO gitrust &gt; SSH host key: SHA256:xxxxxxxxxxxxxxxxxxxx
3370 +Server listening on http://0.0.0.0:4000
3371 +</code></pre>
3372 +<p><strong>Checkpoint</strong> : ouvrez <code>http://localhost:4000</code> dans votre navigateur. Vous devez voir la page d’accueil gitrust. Connectez-vous avec les identifiants <code>ADMIN_USERNAME</code> / <code>ADMIN_PASSWORD</code> définis dans <code>.env</code>. Si la page ne charge pas, vérifiez que le message <code>Server listening on http://0.0.0.0:4000</code> est bien apparu dans les logs.</p>
3373 +<hr>
3374 +<h2 id="étape-7--créez-un-dépôt-et-poussez-votre-premier-commit"><a class="header" href="#étape-7--créez-un-dépôt-et-poussez-votre-premier-commit">Étape 7 : Créez un dépôt et poussez votre premier commit</a></h2>
3375 +<p>Dans l’interface web (<code>http://localhost:4000</code>), cliquez sur <strong>« New repository »</strong>, donnez un nom (ex. <code>mon-projet</code>) et cliquez <strong>Créer</strong>.</p>
3376 +<p>Ajoutez votre clé SSH publique dans <strong>Settings &gt; SSH Keys</strong> en collant le contenu de <code>~/.ssh/id_ed25519.pub</code>.</p>
3377 +<p>Puis dans votre terminal :</p>
3378 +<pre><code class="language-bash">git clone ssh://git@localhost:2222/admin/mon-projet.git
3379 +cd mon-projet
3380 +
3381 +echo "# Mon projet" &gt; README.md
3382 +git add README.md
3383 +git commit -m "Initial commit"
3384 +git push origin main
3385 +</code></pre>
3386 +<p>Sortie attendue :</p>
3387 +<pre><code>Cloning into 'mon-projet'...
3388 +warning: You appear to have cloned an empty repository.
3389 +[main (root-commit) a1b2c3d] Initial commit
3390 + 1 file changed, 1 insertion(+)
3391 + create mode 100644 README.md
3392 +Enumerating objects: 3, done.
3393 +Counting objects: 100% (3/3), done.
3394 +Writing objects: 100% (3/3), 226 bytes | 226.00 KiB/s, done.
3395 +Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
3396 +To ssh://localhost:2222/admin/mon-projet.git
3397 + * [new branch] main -&gt; main
3398 +</code></pre>
3399 +<p><strong>Checkpoint</strong> : retournez dans le navigateur sur <code>http://localhost:4000/admin/mon-projet</code>. La page doit afficher le fichier <code>README.md</code> avec le contenu <code># Mon projet</code> et indiquer 1 commit sur la branche <code>main</code>.</p>
3400 +<hr>
3401 +<h2 id="fonctionnalités-supplémentaires-disponibles"><a class="header" href="#fonctionnalités-supplémentaires-disponibles">Fonctionnalités supplémentaires disponibles</a></h2>
3402 +<h3 id="ci-intégrée-optionnelle"><a class="header" href="#ci-intégrée-optionnelle">CI intégrée (optionnelle)</a></h3>
3403 +<p>La CI s’exécute sur un serveur de build via SSH + rsync. Configurez dans <code>.env</code> :</p>
3404 +<pre><code class="language-env"># Même machine (défaut pour le développement)
3405 +CI_REMOTE_HOST=localhost
3406 +
3407 +# Ou serveur dédié
3408 +CI_REMOTE_HOST=192.168.13.110
3409 +CI_REMOTE_USER=ci-runner
3410 +</code></pre>
3411 +<p><strong>Easy Mode</strong> — ajoutez <code>.gitrust-ci.yml</code> à la racine de votre dépôt :</p>
3412 +<pre><code class="language-yaml">language: rust
3413 +
3414 +build:
3415 + command: "cargo build --release"
3416 +
3417 +tests:
3418 + command: "cargo test"
3419 +</code></pre>
3420 +<p><strong>Power Mode</strong> — placez un module Dagger dans <code>.dagger/</code> à la racine. gitrust exécutera <code>dagger call -m .dagger/ ci</code>.</p>
3421 +<h3 id="notifications-1"><a class="header" href="#notifications-1">Notifications</a></h3>
3422 +<p>Configurez SMTP dans <code>.env</code> pour les notifications e-mail :</p>
3423 +<pre><code class="language-env">SMTP_HOST=smtp.example.com
3424 +SMTP_PORT=587
3425 +SMTP_USER=user
3426 +SMTP_PASSWORD=password
3427 +SMTP_FROM=noreply@gitrust.eu
3428 +</code></pre>
3429 +<h3 id="langue-de-linterface"><a class="header" href="#langue-de-linterface">Langue de l’interface</a></h3>
3430 +<p>gitrust est disponible en 6 langues (fr, en, de, es, pt, it). Définissez la langue par défaut de l’instance :</p>
3431 +<pre><code class="language-env">DEFAULT_LOCALE=fr
3432 +</code></pre>
3433 +<hr>
3434 +<h2 id="récapitulatif-2"><a class="header" href="#récapitulatif-2">Récapitulatif</a></h2>
3435 +<ul>
3436 +<li>✓ <strong>O1 accompli</strong> : gitrust est compilé depuis les sources et tourne localement — <code>cargo run</code> affiche « Server listening on http://0.0.0.0:4000 »</li>
3437 +<li>✓ <strong>O2 accompli</strong> : l’environnement est configuré — <code>.env</code> rempli, PostgreSQL connecté, assets CSS générés, migrations appliquées</li>
3438 +<li>✓ <strong>O3 accompli</strong> : un premier push SSH a réussi — le commit est visible dans l’interface web à <code>http://localhost:4000/admin/mon-projet</code></li>
3439 +</ul>
3440 +<hr>
3441 +<h2 id="et-si-ça-ne-marche-pas-2"><a class="header" href="#et-si-ça-ne-marche-pas-2">Et si ça ne marche pas</a></h2>
3442 +<div class="table-wrapper">
3443 +<table>
3444 +<thead>
3445 +<tr><th>Symptôme</th><th>Cause probable</th><th>Correction</th></tr>
3446 +</thead>
3447 +<tbody>
3448 +<tr><td><code>error[E0463]: can't find crate for 'std'</code> à la compilation</td><td>Toolchain Rust manquante ou mauvaise version</td><td>Exécutez <code>rustup update stable &amp;&amp; rustup default stable</code>. Vérifiez avec <code>rustc --version</code> ≥ 1.80</td></tr>
3449 +<tr><td><code>connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed</code></td><td>PostgreSQL non démarré ou <code>DATABASE_URL</code> incorrect</td><td>Démarrez PostgreSQL (<code>sudo systemctl start postgresql</code> ou <code>docker compose up -d</code> dans <code>database/</code>). Vérifiez que <code>DATABASE_URL</code> dans <code>.env</code> correspond</td></tr>
3450 +<tr><td><code>Permission denied (publickey)</code> lors du <code>git push</code></td><td>Clé SSH non enregistrée dans gitrust ou mauvais port</td><td>Vérifiez dans <em>Settings &gt; SSH Keys</em> que la clé est présente. Testez avec <code>ssh -T git@localhost -p 2222</code> — vous devez voir « Vous êtes authentifié »</td></tr>
3451 +</tbody>
3452 +</table>
3453 +</div>
3454 +<hr>
3455 +<h2 id="prochaine-étape-2"><a class="header" href="#prochaine-étape-2">Prochaine étape</a></h2>
3456 +<p>→ <a href="#02--première-contribution">02 — Première contribution : clone, build, test, PR</a> : apprenez à créer une feature branch, écrire des tests, et soumettre votre première pull request en suivant le workflow gitrust (~90 min)</p>
3457 +<div style="break-before: page; page-break-before: always;"></div>
3458 +<h1 id="02--première-contribution"><a class="header" href="#02--première-contribution">02 — Première contribution</a></h1>
3459 +<blockquote>
3460 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
3461 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
3462 +</blockquote>
3463 +<h2 id="todo-49"><a class="header" href="#todo-49">TODO</a></h2>
3464 +<ul>
3465 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
3466 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
3467 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
3468 +</ul>
3469 +<div style="break-before: page; page-break-before: always;"></div>
3470 +<h1 id="03--créer-un-worker-async-capstone"><a class="header" href="#03--créer-un-worker-async-capstone">03 — Créer un worker async (capstone)</a></h1>
3471 +<blockquote>
3472 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
3473 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
3474 +</blockquote>
3475 +<h2 id="todo-50"><a class="header" href="#todo-50">TODO</a></h2>
3476 +<ul>
3477 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
3478 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
3479 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
3480 +</ul>
3481 +<div style="break-before: page; page-break-before: always;"></div>
3482 +<h1 id="guides-pratiques-2"><a class="header" href="#guides-pratiques-2">Guides pratiques</a></h1>
3483 +<blockquote>
3484 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
3485 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
3486 +</blockquote>
3487 +<h2 id="todo-51"><a class="header" href="#todo-51">TODO</a></h2>
3488 +<ul>
3489 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
3490 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
3491 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
3492 +</ul>
3493 +<div style="break-before: page; page-break-before: always;"></div>
3494 +<h1 id="workflow-de-contribution-et-pr"><a class="header" href="#workflow-de-contribution-et-pr">Workflow de contribution et PR</a></h1>
3495 +<blockquote>
3496 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
3497 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
3498 +</blockquote>
3499 +<h2 id="todo-52"><a class="header" href="#todo-52">TODO</a></h2>
3500 +<ul>
3501 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
3502 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
3503 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
3504 +</ul>
3505 +<div style="break-before: page; page-break-before: always;"></div>
3506 +<h1 id="lancer-les-tests-unitaires"><a class="header" href="#lancer-les-tests-unitaires">Lancer les tests unitaires</a></h1>
3507 +<p>Référence des commandes et de la stratégie de tests pour gitrust.</p>
3508 +<h2 id="infrastructure-existante"><a class="header" href="#infrastructure-existante">Infrastructure existante</a></h2>
3509 +<h3 id="tests-unitaires-rust"><a class="header" href="#tests-unitaires-rust">Tests unitaires Rust</a></h3>
3510 +<pre><code class="language-bash">cargo test --workspace # Tous les tests
3511 +cargo test -p gitrust-core # Un crate spécifique
3512 +cargo test -p gitrust-git # Tests Git (tempdir)
3513 +</code></pre>
3514 +<p>Les tests unitaires sont intégrés dans chaque crate via <code>#[cfg(test)]</code>.</p>
3515 +<h3 id="tests-e2e-playwright"><a class="header" href="#tests-e2e-playwright">Tests e2e Playwright</a></h3>
3516 +<p>17 specs couvrant : auth, admin, repos, issues, labels, teams, tokens, settings, navigation.</p>
3517 +<pre><code class="language-bash"># Pré-requis (première fois)
3518 +npm install
3519 +./scripts/e2e-setup-db.sh # Crée la DB gitrust_test
3520 +
3521 +# Lancer les tests
3522 +npm run test:e2e # Mode headless
3523 +npm run test:e2e:ui # Mode interactif (navigateur visible)
3524 +npm run test:e2e:debug # Mode debug
3525 +npm run test:e2e:report # Voir le rapport HTML
3526 +</code></pre>
3527 +<p>Configuration : <code>playwright.config.ts</code> (port 4001, DB <code>gitrust_test</code>, locale <code>fr-FR</code>).</p>
3528 +<h3 id="structure-des-répertoires"><a class="header" href="#structure-des-répertoires">Structure des répertoires</a></h3>
3529 +<pre><code>tests/
3530 + e2e/ # Specs Playwright (TypeScript)
3531 + global-setup.ts # Setup : lancer l'app, créer admin
3532 + global-teardown.ts # Teardown : arrêter l'app
3533 + fixtures.ts # Fixtures Playwright partagées
3534 + auth.spec.ts # Tests authentification
3535 + admin.spec.ts # Tests administration
3536 + issues.spec.ts # Tests issues
3537 + ...
3538 + integration/ # Tests d'intégration Rust (DB réelle) [à créer]
3539 + fixtures/ # Fichiers de test (repos, configs) [à créer]
3540 + seeds/ # Seeds Rust pour initialiser la DB de test
3541 + mod.rs
3542 + seed.rs
3543 +</code></pre>
3544 +<hr>
3545 +<h2 id="tests-à-ajouter"><a class="header" href="#tests-à-ajouter">Tests à ajouter</a></h2>
3546 +<h3 id="1-tests-fonctionnels-api-rest-intégration-rust"><a class="header" href="#1-tests-fonctionnels-api-rest-intégration-rust">1. Tests fonctionnels API REST (intégration Rust)</a></h3>
3547 +<p>Tests avec une DB PostgreSQL réelle pour vérifier les endpoints API.</p>
3548 +<p><strong>Emplacement</strong> : <code>tests/integration/</code> ou <code>crates/gitrust-web/tests/</code></p>
3549 +<p><strong>Approche recommandée</strong> : utiliser <code>reqwest</code> + un serveur de test :</p>
3550 +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
3551 +</span><span class="boring">fn main() {
3552 +</span>// tests/integration/api_test.rs
3553 +use reqwest::Client;
3554 +
3555 +#[tokio::test]
3556 +#[ignore] // Nécessite une DB + serveur running
3557 +async fn test_api_login() {
3558 + let client = Client::new();
3559 + let res = client.post("http://localhost:4001/api/v1/auth/login")
3560 + .json(&amp;serde_json::json!({
3561 + "login": "admin",
3562 + "password": "test_password"
3563 + }))
3564 + .send()
3565 + .await
3566 + .unwrap();
3567 + assert_eq!(res.status(), 200);
3568 +}
3569 +<span class="boring">}</span></code></pre>
3570 +<p><strong>Alternative</strong> : <code>axum::test</code> pour tester les handlers sans serveur HTTP :</p>
3571 +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
3572 +</span><span class="boring">fn main() {
3573 +</span>use axum::body::Body;
3574 +use axum::http::Request;
3575 +use tower::ServiceExt;
3576 +
3577 +#[tokio::test]
3578 +async fn test_health_check() {
3579 + let app = create_test_app().await; // Build router with test DB
3580 + let response = app
3581 + .oneshot(Request::builder().uri("/api/hello").body(Body::empty()).unwrap())
3582 + .await
3583 + .unwrap();
3584 + assert_eq!(response.status(), 200);
3585 +}
3586 +<span class="boring">}</span></code></pre>
3587 +<h3 id="2-tests-fonctionnels-ci"><a class="header" href="#2-tests-fonctionnels-ci">2. Tests fonctionnels CI</a></h3>
3588 +<div class="table-wrapper">
3589 +<table>
3590 +<thead>
3591 +<tr><th>Test</th><th>Description</th><th>Priorité</th></tr>
3592 +</thead>
3593 +<tbody>
3594 +<tr><td>CI detection</td><td>Repo avec <code>.gitrust-ci.yml</code> -&gt; Easy, <code>.dagger/</code> -&gt; Power, rien -&gt; None</td><td>Haute</td></tr>
3595 +<tr><td>Pipeline CRUD</td><td>Créer, lister, mettre à jour, annuler un pipeline</td><td>Haute</td></tr>
3596 +<tr><td>Config CI</td><td>Activer/désactiver CI, modifier triggers, vérifier effet</td><td>Haute</td></tr>
3597 +<tr><td>Variables héritage</td><td>Team var + repo var -&gt; merge correct</td><td>Moyenne</td></tr>
3598 +<tr><td>Auto-cancel</td><td>Nouveau push annule les pipelines en cours</td><td>Moyenne</td></tr>
3599 +<tr><td>Logs streaming</td><td>Append logs + lecture paginée</td><td>Moyenne</td></tr>
3600 +<tr><td>Notifications CI</td><td>Pipeline échoue -&gt; notification créée</td><td>Moyenne</td></tr>
3601 +</tbody>
3602 +</table>
3603 +</div>
3604 +<p><strong>Pour les tests CI</strong> : mocker <code>dagger</code> avec un script shell qui simule success/failure :</p>
3605 +<pre><code class="language-bash">#!/bin/bash
3606 +# tests/fixtures/mock-dagger.sh
3607 +echo "Step 1: Building..."
3608 +echo "Step 2: Testing..."
3609 +if [ "$MOCK_FAIL" = "true" ]; then
3610 + echo "FAILED" &gt;&amp;2
3611 + exit 1
3612 +fi
3613 +echo "All checks passed"
3614 +exit 0
3615 +</code></pre>
3616 +<p>Configurer <code>CI_DAGGER_BIN=tests/fixtures/mock-dagger.sh</code> dans les tests.</p>
3617 +<h3 id="3-tests-e2e-playwright-à-ajouter"><a class="header" href="#3-tests-e2e-playwright-à-ajouter">3. Tests e2e Playwright à ajouter</a></h3>
3618 +<p>Nouvelles specs pour les fonctionnalités CI et notifications :</p>
3619 +<div class="table-wrapper">
3620 +<table>
3621 +<thead>
3622 +<tr><th>Spec</th><th>Couverture</th></tr>
3623 +</thead>
3624 +<tbody>
3625 +<tr><td><code>ci-pipelines.spec.ts</code></td><td>Liste pipelines, détail, status badges</td></tr>
3626 +<tr><td><code>ci-config.spec.ts</code></td><td>Config CI (enable/disable, triggers, timeout)</td></tr>
3627 +<tr><td><code>ci-variables.spec.ts</code></td><td>CRUD variables CI, masquage secrets</td></tr>
3628 +<tr><td><code>notifications.spec.ts</code></td><td>Liste notifications, marquer lu, préférences</td></tr>
3629 +<tr><td><code>api-docs.spec.ts</code></td><td>Swagger UI accessible, spec chargée</td></tr>
3630 +<tr><td><code>i18n.spec.ts</code></td><td>Changement de langue, textes traduits</td></tr>
3631 +<tr><td><code>docker-smoke.spec.ts</code></td><td><code>docker compose up</code> + smoke test</td></tr>
3632 +</tbody>
3633 +</table>
3634 +</div>
3635 +<p><strong>Exemple de spec CI</strong> :</p>
3636 +<pre><code class="language-typescript">// tests/e2e/ci-pipelines.spec.ts
3637 +import { test, expect } from './fixtures';
3638 +
3639 +test.describe('CI Pipelines', () =&gt; {
3640 + test('affiche la page CI vide', async ({ authenticatedPage }) =&gt; {
3641 + await authenticatedPage.goto('/admin/mon-repo/ci');
3642 + await expect(authenticatedPage.locator('text=Aucun pipeline')).toBeVisible();
3643 + });
3644 +
3645 + test('bouton trigger CI visible pour le maintainer', async ({ authenticatedPage }) =&gt; {
3646 + await authenticatedPage.goto('/admin/mon-repo/ci');
3647 + await expect(authenticatedPage.locator('text=Lancer CI')).toBeVisible();
3648 + });
3649 +});
3650 +</code></pre>
3651 +<h3 id="4-tests-settings--comportement"><a class="header" href="#4-tests-settings--comportement">4. Tests settings ↔ comportement</a></h3>
3652 +<p>Les tests les plus critiques vérifient que <strong>changer un setting modifie le comportement observable</strong> :</p>
3653 +<div class="table-wrapper">
3654 +<table>
3655 +<thead>
3656 +<tr><th>Setting</th><th>Action</th><th>Vérification</th></tr>
3657 +</thead>
3658 +<tbody>
3659 +<tr><td>PAT révoqué</td><td>Appel API</td><td>401 immédiatement</td></tr>
3660 +<tr><td><code>ci_enabled = false</code></td><td>Push</td><td>Pas de pipeline créé</td></tr>
3661 +<tr><td><code>trigger_on_push = false</code></td><td>Push</td><td>Pas de pipeline</td></tr>
3662 +<tr><td><code>auto_cancel = true</code></td><td>2 pushes rapides</td><td>1er pipeline annulé</td></tr>
3663 +<tr><td><code>email_on_pipeline_failure = false</code></td><td>Pipeline échoue</td><td>Pas d’email, notif in-app ok</td></tr>
3664 +<tr><td><code>DEFAULT_LOCALE = en</code></td><td>Charger page</td><td>Texte en anglais</td></tr>
3665 +</tbody>
3666 +</table>
3667 +</div>
3668 +<hr>
3669 +<h2 id="commandes-de-test"><a class="header" href="#commandes-de-test">Commandes de test</a></h2>
3670 +<pre><code class="language-bash"># Tests unitaires Rust
3671 +cargo test --workspace
3672 +
3673 +# Tests avec filtrage
3674 +cargo test -p gitrust-core -- ci_service
3675 +cargo test -p gitrust-core -- notification
3676 +
3677 +# Tests e2e Playwright
3678 +npm run test:e2e
3679 +
3680 +# Tests e2e spécifiques
3681 +npx playwright test tests/e2e/ci-pipelines.spec.ts
3682 +npx playwright test --grep "notifications"
3683 +
3684 +# Lint
3685 +cargo clippy --workspace -- -D warnings
3686 +
3687 +# Format check
3688 +cargo fmt --all -- --check
3689 +</code></pre>
3690 +<hr>
3691 +<h2 id="ci-locale-exécuter-avant-un-push"><a class="header" href="#ci-locale-exécuter-avant-un-push">CI locale (exécuter avant un push)</a></h2>
3692 +<pre><code class="language-bash"># Script rapide de vérification pré-push
3693 +cargo fmt --all -- --check &amp;&amp; \
3694 +cargo clippy --workspace -- -D warnings &amp;&amp; \
3695 +cargo test --workspace &amp;&amp; \
3696 +echo "All checks passed"
3697 +</code></pre>
3698 +<div style="break-before: page; page-break-before: always;"></div>
3699 +<h1 id="lancer-les-tests-end-to-end-e2e"><a class="header" href="#lancer-les-tests-end-to-end-e2e">Lancer les tests end-to-end (E2E)</a></h1>
3700 +<p>Les tests E2E de gitrust utilisent <strong>Playwright</strong> pour piloter un navigateur Chromium contre une instance de l’application configurée avec une base de données et un répertoire de dépôts dédiés.</p>
3701 +<h2 id="pré-requis-4"><a class="header" href="#pré-requis-4">Pré-requis</a></h2>
3702 +<ul>
3703 +<li>Node.js (déjà présent pour Tailwind/DaisyUI)</li>
3704 +<li>PostgreSQL accessible en local (Docker via <code>database/docker-compose.yml</code>)</li>
3705 +<li><code>psql</code>, <code>createdb</code>, <code>dropdb</code> disponibles dans le PATH</li>
3706 +<li>Chromium installé via Playwright (<code>npx playwright install chromium</code>)</li>
3707 +</ul>
3708 +<h2 id="commandes"><a class="header" href="#commandes">Commandes</a></h2>
3709 +<pre><code class="language-bash"># Créer (ou remettre à zéro) la base de données de test
3710 +npm run test:e2e:setup
3711 +
3712 +# Lancer tous les tests E2E
3713 +npm run test:e2e
3714 +
3715 +# Mode debug interactif (inspecteur Playwright, pas-à-pas)
3716 +npm run test:e2e:debug
3717 +
3718 +# Mode UI (interface graphique Playwright)
3719 +npm run test:e2e:ui
3720 +
3721 +# Consulter le rapport HTML après exécution
3722 +npm run test:e2e:report
3723 +</code></pre>
3724 +<h2 id="architecture"><a class="header" href="#architecture">Architecture</a></h2>
3725 +<pre><code>.env.test # Variables d'environnement de test
3726 +playwright.config.ts # Configuration Playwright
3727 +
3728 +scripts/
3729 + e2e-setup-db.sh # Crée la DB gitrust_test + nettoie depot_test
3730 + e2e-server.sh # Démarre l'app avec .env.test
3731 +
3732 +tests/e2e/
3733 + fixtures.ts # Fixtures partagées (loginAs, credentials)
3734 + global-setup.ts # Seed : crée les utilisateurs via /register
3735 + global-teardown.ts # Nettoyage post-tests
3736 + auth.spec.ts # Tests d'authentification
3737 + repository.spec.ts # Tests de gestion des dépôts
3738 + admin.spec.ts # Tests du panneau d'administration
3739 + navigation.spec.ts # Tests de navigation et UI
3740 +</code></pre>
3741 +<h3 id="isolation-de-lenvironnement-de-test"><a class="header" href="#isolation-de-lenvironnement-de-test">Isolation de l’environnement de test</a></h3>
3742 +<div class="table-wrapper">
3743 +<table>
3744 +<thead>
3745 +<tr><th>Ressource</th><th>Développement</th><th>Tests E2E</th></tr>
3746 +</thead>
3747 +<tbody>
3748 +<tr><td>Base de données</td><td><code>gitrust</code></td><td><code>gitrust_test</code></td></tr>
3749 +<tr><td>Port HTTP</td><td><code>4000</code></td><td><code>4001</code></td></tr>
3750 +<tr><td>Port SSH</td><td><code>2222</code></td><td><code>2223</code></td></tr>
3751 +<tr><td>Dépôts Git</td><td><code>./data/repos/</code></td><td><code>./depot_test/</code></td></tr>
3752 +<tr><td>Rate limiting</td><td>Standard</td><td>Relâché (×20)</td></tr>
3753 +<tr><td>Validation email</td><td>Activée</td><td>Désactivée</td></tr>
3754 +</tbody>
3755 +</table>
3756 +</div>
3757 +<h3 id="fonctionnement"><a class="header" href="#fonctionnement">Fonctionnement</a></h3>
3758 +<ol>
3759 +<li><strong><code>npm run test:e2e:setup</code></strong> supprime puis recrée la base <code>gitrust_test</code> et vide <code>depot_test/</code>.</li>
3760 +<li><strong>Playwright</strong> démarre automatiquement l’application via <code>scripts/e2e-server.sh</code>, qui charge les variables de <code>.env.test</code> avant d’exécuter <code>cargo run</code>.</li>
3761 +<li>Le <strong>global-setup</strong> crée les utilisateurs de test (alice, bob, charlie) en passant par le formulaire <code>/register</code> — approche 100% E2E, aucune insertion directe en base.</li>
3762 +<li>Les <strong>tests</strong> s’exécutent séquentiellement (un seul worker) pour éviter les conflits sur la DB partagée.</li>
3763 +<li>Le <strong>global-teardown</strong> est exécuté à la fin de la session.</li>
3764 +</ol>
3765 +<h3 id="fixtures"><a class="header" href="#fixtures">Fixtures</a></h3>
3766 +<p>Le fichier <code>fixtures.ts</code> fournit une fixture <code>loginAs</code> réutilisable dans tous les tests :</p>
3767 +<pre><code class="language-typescript">import { test, expect } from './fixtures';
3768 +
3769 +test('mon test', async ({ page, loginAs }) =&gt; {
3770 + await loginAs('alice');
3771 + // alice est connectée, on peut naviguer
3772 +});
3773 +</code></pre>
3774 +<p>Utilisateurs disponibles : <code>admin</code>, <code>alice</code>, <code>bob</code>, <code>charlie</code>.</p>
3775 +<h2 id="liste-des-tests"><a class="header" href="#liste-des-tests">Liste des tests</a></h2>
3776 +<h3 id="authspects--authentification"><a class="header" href="#authspects--authentification"><code>auth.spec.ts</code> — Authentification</a></h3>
3777 +<div class="table-wrapper">
3778 +<table>
3779 +<thead>
3780 +<tr><th>Test</th><th>Description</th></tr>
3781 +</thead>
3782 +<tbody>
3783 +<tr><td>login avec des identifiants valides</td><td>Vérifie le login standard et la redirection vers <code>/dashboard</code></td></tr>
3784 +<tr><td>login avec un mauvais mot de passe</td><td>Vérifie l’affichage d’un message d’erreur</td></tr>
3785 +<tr><td>login avec un utilisateur inexistant</td><td>Vérifie le rejet d’un username inconnu</td></tr>
3786 +<tr><td>logout déconnecte l’utilisateur</td><td>Vérifie la déconnexion et l’impossibilité d’accéder au dashboard</td></tr>
3787 +<tr><td>accès au dashboard sans login redirige vers login</td><td>Vérifie la protection des routes authentifiées</td></tr>
3788 +<tr><td>option remember me est présente</td><td>Vérifie la présence de la checkbox remember_me</td></tr>
3789 +<tr><td>formulaire d’inscription est accessible</td><td>Vérifie la présence de tous les champs du formulaire</td></tr>
3790 +<tr><td>inscription avec username déjà pris échoue</td><td>Vérifie l’unicité des usernames</td></tr>
3791 +<tr><td>inscription avec mots de passe différents échoue</td><td>Vérifie la validation de confirmation du mot de passe</td></tr>
3792 +</tbody>
3793 +</table>
3794 +</div>
3795 +<h3 id="repositoryspects--gestion-des-dépôts"><a class="header" href="#repositoryspects--gestion-des-dépôts"><code>repository.spec.ts</code> — Gestion des dépôts</a></h3>
3796 +<div class="table-wrapper">
3797 +<table>
3798 +<thead>
3799 +<tr><th>Test</th><th>Description</th></tr>
3800 +</thead>
3801 +<tbody>
3802 +<tr><td>créer un dépôt avec nom et description</td><td>Crée un dépôt complet et vérifie la redirection</td></tr>
3803 +<tr><td>créer un dépôt sans description</td><td>Vérifie que la description est optionnelle</td></tr>
3804 +<tr><td>créer un dépôt avec un nom déjà pris échoue</td><td>Vérifie l’unicité des slugs par utilisateur</td></tr>
3805 +<tr><td>le formulaire de création nécessite un login</td><td>Vérifie la protection de la route <code>/new</code></td></tr>
3806 +<tr><td>le dashboard liste les dépôts de l’utilisateur</td><td>Vérifie l’affichage des dépôts sur le dashboard</td></tr>
3807 +<tr><td>un dépôt public est accessible sans login</td><td>Vérifie l’accès anonyme aux dépôts publics</td></tr>
3808 +</tbody>
3809 +</table>
3810 +</div>
3811 +<h3 id="adminspects--administration"><a class="header" href="#adminspects--administration"><code>admin.spec.ts</code> — Administration</a></h3>
3812 +<div class="table-wrapper">
3813 +<table>
3814 +<thead>
3815 +<tr><th>Test</th><th>Description</th></tr>
3816 +</thead>
3817 +<tbody>
3818 +<tr><td>l’admin peut accéder au panneau d’administration</td><td>Vérifie l’accès admin à <code>/admin</code></td></tr>
3819 +<tr><td>un utilisateur normal ne peut pas accéder à l’admin</td><td>Vérifie le contrôle d’accès</td></tr>
3820 +<tr><td>lister les utilisateurs</td><td>Vérifie l’affichage de la liste des utilisateurs</td></tr>
3821 +<tr><td>créer un nouvel utilisateur via l’admin</td><td>Teste le formulaire de création d’utilisateur admin</td></tr>
3822 +<tr><td>créer un utilisateur avec un username déjà pris échoue</td><td>Vérifie la gestion des doublons côté admin</td></tr>
3823 +<tr><td>les liens du menu admin sont présents</td><td>Vérifie la navigation du panneau admin</td></tr>
3824 +</tbody>
3825 +</table>
3826 +</div>
3827 +<h3 id="navigationspects--navigation-et-ui"><a class="header" href="#navigationspects--navigation-et-ui"><code>navigation.spec.ts</code> — Navigation et UI</a></h3>
3828 +<div class="table-wrapper">
3829 +<table>
3830 +<thead>
3831 +<tr><th>Test</th><th>Description</th></tr>
3832 +</thead>
3833 +<tbody>
3834 +<tr><td>la page de login est accessible</td><td>Vérifie le rendu de la page de login</td></tr>
3835 +<tr><td>la navbar est présente après login</td><td>Vérifie la présence de la barre de navigation</td></tr>
3836 +<tr><td>le sidebar est présent après login</td><td>Vérifie la présence du menu latéral</td></tr>
3837 +<tr><td>le lien vers le dashboard fonctionne</td><td>Vérifie la navigation vers le dashboard</td></tr>
3838 +<tr><td>le lien vers la création de dépôt fonctionne</td><td>Vérifie le lien <code>/new</code></td></tr>
3839 +<tr><td>la page utilise le thème DaisyUI</td><td>Vérifie la présence de l’attribut <code>data-theme</code></td></tr>
3840 +</tbody>
3841 +</table>
3842 +</div>
3843 +<h2 id="ajouter-un-nouveau-test"><a class="header" href="#ajouter-un-nouveau-test">Ajouter un nouveau test</a></h2>
3844 +<ol>
3845 +<li>Créer un fichier <code>tests/e2e/mon-module.spec.ts</code></li>
3846 +<li>Importer les fixtures : <code>import { test, expect } from './fixtures';</code></li>
3847 +<li>Utiliser <code>loginAs</code> pour les tests nécessitant une authentification</li>
3848 +<li>Lancer avec <code>npm run test:e2e</code> ou cibler le fichier : <code>npx playwright test mon-module</code></li>
3849 +</ol>
3850 +<div style="break-before: page; page-break-before: always;"></div>
3851 +<h1 id="ajouter-une-route-web"><a class="header" href="#ajouter-une-route-web">Ajouter une route web</a></h1>
3852 +<blockquote>
3853 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
3854 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
3855 +</blockquote>
3856 +<h2 id="todo-53"><a class="header" href="#todo-53">TODO</a></h2>
3857 +<ul>
3858 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
3859 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
3860 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
3861 +</ul>
3862 +<div style="break-before: page; page-break-before: always;"></div>
3863 +<h1 id="ajouter-un-service-métier"><a class="header" href="#ajouter-un-service-métier">Ajouter un service métier</a></h1>
3864 +<blockquote>
3865 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
3866 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
3867 +</blockquote>
3868 +<h2 id="todo-54"><a class="header" href="#todo-54">TODO</a></h2>
3869 +<ul>
3870 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
3871 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
3872 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
3873 +</ul>
3874 +<div style="break-before: page; page-break-before: always;"></div>
3875 +<h1 id="ajouter-une-migration-de-base-de-données"><a class="header" href="#ajouter-une-migration-de-base-de-données">Ajouter une migration de base de données</a></h1>
3876 +<blockquote>
3877 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
3878 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
3879 +</blockquote>
3880 +<h2 id="todo-55"><a class="header" href="#todo-55">TODO</a></h2>
3881 +<ul>
3882 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
3883 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
3884 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
3885 +</ul>
3886 +<div style="break-before: page; page-break-before: always;"></div>
3887 +<h1 id="implémenter-des-webhooks"><a class="header" href="#implémenter-des-webhooks">Implémenter des webhooks</a></h1>
3888 +<blockquote>
3889 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
3890 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
3891 +</blockquote>
3892 +<h2 id="todo-56"><a class="header" href="#todo-56">TODO</a></h2>
3893 +<ul>
3894 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
3895 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
3896 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
3897 +</ul>
3898 +<div style="break-before: page; page-break-before: always;"></div>
3899 +<h1 id="implémenter-un-endpoint-api"><a class="header" href="#implémenter-un-endpoint-api">Implémenter un endpoint API</a></h1>
3900 +<blockquote>
3901 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
3902 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
3903 +</blockquote>
3904 +<h2 id="todo-57"><a class="header" href="#todo-57">TODO</a></h2>
3905 +<ul>
3906 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
3907 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
3908 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
3909 +</ul>
3910 +<div style="break-before: page; page-break-before: always;"></div>
3911 +<h1 id="importer-un-dépôt-externe-1"><a class="header" href="#importer-un-dépôt-externe-1">Importer un dépôt externe</a></h1>
3912 +<p>Référence du flux d’import de dépôts externes dans gitrust : rôle de la base de données, schéma de séquence complet et pistes d’optimisation.</p>
3913 +<h2 id="1-rôle-de-la-base-de-données"><a class="header" href="#1-rôle-de-la-base-de-données">1. Rôle de la base de données</a></h2>
3914 +<p>Pendant un import, la DB sert <strong>quatre fonctions distinctes</strong> :</p>
3915 +<div class="table-wrapper">
3916 +<table>
3917 +<thead>
3918 +<tr><th>Rôle</th><th>Table</th><th>Fréquence</th></tr>
3919 +</thead>
3920 +<tbody>
3921 +<tr><td><strong>File d’attente persistante</strong></td><td><code>import_jobs</code></td><td>1 INSERT à la création</td></tr>
3922 +<tr><td><strong>Suivi d’état pour l’UI</strong></td><td><code>import_jobs</code></td><td>1 UPDATE toutes les ~1.5 s</td></tr>
3923 +<tr><td><strong>Enregistrement final du dépôt</strong></td><td><code>repositories</code> + <code>resources</code></td><td>2 INSERT à la fin</td></tr>
3924 +<tr><td><strong>Journal d’audit</strong></td><td><code>audit_log</code></td><td>1 INSERT à la fin</td></tr>
3925 +</tbody>
3926 +</table>
3927 +</div>
3928 +<p>Le clone lui-même ne passe <strong>jamais</strong> par la DB : seuls les métadonnées et compteurs de progression y transitent. Les objets Git sont écrits directement sur disque dans <code>{GIT_REPOS_BASE_PATH}/{owner}/{slug}.git/</code>.</p>
3929 +<h3 id="pourquoi-persister-létat-"><a class="header" href="#pourquoi-persister-létat-">Pourquoi persister l’état ?</a></h3>
3930 +<ul>
3931 +<li><strong>Reprise après redémarrage</strong> : le serveur peut crasher pendant un clone de plusieurs minutes. La table permet de marquer ces jobs comme <code>failed</code> au redémarrage.</li>
3932 +<li><strong>SSE</strong> : l’UI lit la progression via un endpoint SSE qui interroge la DB toutes les 2 s. Sans DB, il faudrait un canal in-memory plus un mécanisme de routage vers le bon client.</li>
3933 +<li><strong>Multi-navigateurs</strong> : si l’utilisateur ferme l’onglet puis le rouvre, il retrouve l’état exact du job.</li>
3934 +<li><strong>Audit / historique</strong> : conservation des imports passés avec leurs statistiques.</li>
3935 +</ul>
3936 +<h2 id="2-schéma-du-flux-actuel"><a class="header" href="#2-schéma-du-flux-actuel">2. Schéma du flux actuel</a></h2>
3937 +<pre class="mermaid">sequenceDiagram
3938 + autonumber
3939 + participant UI as Navigateur
3940 + participant H as Handler HTTP
3941 + participant Svc as ImportService
3942 + participant Chan as mpsc Channel
3943 + participant W as ImportWorker
3944 + participant G as git2 (libgit2)
3945 + participant DB as PostgreSQL
3946 + participant FS as Disque
3947 +
3948 + UI-&gt;&gt;H: POST /import&lt;br/&gt;(url, slug, pat)
3949 + H-&gt;&gt;Svc: create_job
3950 + Svc-&gt;&gt;DB: INSERT import_jobs (pending)
3951 + H-&gt;&gt;Chan: try_send(ImportTask+PAT)
3952 + H--&gt;&gt;UI: 302 /imports/{id}
3953 +
3954 + UI-&gt;&gt;H: GET /imports/{id}/stream (SSE)
3955 + Note over UI,H: EventSource ouvert
3956 +
3957 + Chan-&gt;&gt;W: ImportTask
3958 + W-&gt;&gt;Svc: mark_running
3959 + Svc-&gt;&gt;DB: SELECT import_jobs&lt;br/&gt;UPDATE status=running
3960 +
3961 + W-&gt;&gt;G: RepoBuilder.bare(true).clone()
3962 + G-&gt;&gt;FS: init_bare + fetch
3963 + loop callbacks transfer_progress (flood)
3964 + G--&gt;&gt;W: stats (objets/bytes)
3965 + alt throttle 1500 ms écoulé
3966 + W-&gt;&gt;Svc: update_progress (tokio::spawn)
3967 + Svc-&gt;&gt;DB: SELECT + UPDATE import_jobs
3968 + else dans le throttle
3969 + W--xW: ignore
3970 + end
3971 + end
3972 +
3973 + loop toutes les 2 s
3974 + H-&gt;&gt;DB: SELECT import_jobs WHERE id=?
3975 + DB--&gt;&gt;H: état courant
3976 + H--&gt;&gt;UI: SSE event (JSON)
3977 + UI-&gt;&gt;UI: bar.value = percent
3978 + end
3979 +
3980 + G--&gt;&gt;FS: objets écrits
3981 + G--&gt;&gt;W: Ok
3982 +
3983 + W-&gt;&gt;Svc: check cancel (SELECT import_jobs)
3984 + W-&gt;&gt;Svc: update_progress (Finalizing)
3985 + Svc-&gt;&gt;DB: SELECT + UPDATE
3986 +
3987 + W-&gt;&gt;RepositoryService: create
3988 + RepositoryService-&gt;&gt;DB: INSERT resources&lt;br/&gt;INSERT repositories
3989 + W-&gt;&gt;DB: UPDATE repositories&lt;br/&gt;(import_source_url, is_empty=false)
3990 + W-&gt;&gt;Svc: mark_success
3991 + Svc-&gt;&gt;DB: SELECT + UPDATE import_jobs&lt;br/&gt;(status=success, duration)
3992 + W-&gt;&gt;AuditService: log REPO_IMPORTED
3993 + AuditService-&gt;&gt;DB: INSERT audit_log
3994 +
3995 + H-&gt;&gt;DB: SELECT (prochain tick SSE)
3996 + H--&gt;&gt;UI: terminal=true
3997 + UI-&gt;&gt;UI: window.location.reload()
3998 +</pre>
3999 +
4000 +<h2 id="3-coût-db-par-import"><a class="header" href="#3-coût-db-par-import">3. Coût DB par import</a></h2>
4001 +<p>Pour un clone de <strong>90 secondes</strong> avec throttle 1500 ms :</p>
4002 +<div class="table-wrapper">
4003 +<table>
4004 +<thead>
4005 +<tr><th>Étape</th><th>Opérations DB</th><th>Cumul</th></tr>
4006 +</thead>
4007 +<tbody>
4008 +<tr><td>create_job</td><td>1 INSERT</td><td>1</td></tr>
4009 +<tr><td>mark_running</td><td>1 SELECT + 1 UPDATE</td><td>3</td></tr>
4010 +<tr><td>update_progress pendant clone</td><td>~60 x (1 SELECT + 1 UPDATE)</td><td>123</td></tr>
4011 +<tr><td>check cancel</td><td>1 SELECT</td><td>124</td></tr>
4012 +<tr><td>update_progress finalizing</td><td>1 SELECT + 1 UPDATE</td><td>126</td></tr>
4013 +<tr><td>RepositoryService::create</td><td>2 INSERT (repo + resource)</td><td>128</td></tr>
4014 +<tr><td>update repositories</td><td>1 UPDATE</td><td>129</td></tr>
4015 +<tr><td>mark_success</td><td>1 SELECT + 1 UPDATE</td><td>131</td></tr>
4016 +<tr><td>audit log</td><td>1 INSERT</td><td>132</td></tr>
4017 +<tr><td>SSE stream (45 ticks à 2 s)</td><td>45 SELECT</td><td>177</td></tr>
4018 +</tbody>
4019 +</table>
4020 +</div>
4021 +<p><strong>~177 requêtes pour un import</strong>, dont <strong>120+ sont des progress updates</strong>.</p>
4022 +<h2 id="4-pistes-doptimisation-sans-changer-libgit2"><a class="header" href="#4-pistes-doptimisation-sans-changer-libgit2">4. Pistes d’optimisation (sans changer libgit2)</a></h2>
4023 +<h3 id="41-éliminer-le-select-avant-update-dans-update_progress"><a class="header" href="#41-éliminer-le-select-avant-update-dans-update_progress">4.1 Éliminer le SELECT avant UPDATE dans <code>update_progress</code></a></h3>
4024 +<p><code>update_progress</code> fait actuellement <code>load_model</code> (SELECT) puis <code>active.update(db)</code> (UPDATE + RETURNING). Le SELECT est redondant : on connaît l’ID, on veut juste patcher 4 colonnes.</p>
4025 +<p><strong>Gain</strong> : divise par 2 les requêtes de progression (~60 requêtes en moins pour un clone de 90 s).</p>
4026 +<p>Refonte suggérée avec <code>UpdateMany</code> (pattern déjà utilisé dans <code>ci_service.rs::cancel_running_pipelines</code>) :</p>
4027 +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
4028 +</span><span class="boring">fn main() {
4029 +</span>import_job::Entity::update_many()
4030 + .col_expr(Column::ReceivedObjects, Expr::value(received as i32))
4031 + .col_expr(Column::TotalObjects, Expr::value(total as i32))
4032 + .col_expr(Column::ReceivedBytes, Expr::value(bytes as i64))
4033 + .col_expr(Column::Phase, Expr::value(phase.as_str()))
4034 + .col_expr(Column::UpdatedAt, Expr::value(Utc::now()))
4035 + .filter(Column::Id.eq(job_id))
4036 + .exec(db)
4037 + .await?;
4038 +<span class="boring">}</span></code></pre>
4039 +<p>Même principe pour <code>mark_running</code>, <code>mark_success</code>, <code>mark_failed</code>, <code>mark_cancelled</code> → toutes divisent leurs aller-retours DB par 2.</p>
4040 +<h3 id="42-downsampler-la-progression-dans-le-worker-dédié"><a class="header" href="#42-downsampler-la-progression-dans-le-worker-dédié">4.2 Downsampler la progression dans le worker (dédié)</a></h3>
4041 +<p>Plan alternatif : le callback écrit simplement dans un <code>tokio::sync::watch&lt;TransferStats&gt;</code> (en mémoire, zéro DB). Une <strong>tâche dédiée</strong> consomme ce channel et UPDATE la DB à 1 Hz seulement.</p>
4042 +<pre class="mermaid">flowchart LR
4043 + G[git2 callback] --&gt;|watch::send&lt;br/&gt;très haute fréquence| W[watch channel]
4044 + W --&gt; T[Tâche update&lt;br/&gt;ticker 1 Hz]
4045 + T --&gt;|1 UPDATE / s| DB
4046 +</pre>
4047 +
4048 +<p><strong>Gains</strong> :</p>
4049 +<ul>
4050 +<li><strong>1 seul émetteur DB</strong> au lieu de N tokio::spawn concurrents → zéro contention sur le pool</li>
4051 +<li><strong>Fréquence déterministe</strong> (1 Hz) indépendante de la vitesse réseau</li>
4052 +<li>Code plus clair (la tâche est async, on peut <code>await</code> sans détour)</li>
4053 +</ul>
4054 +<h3 id="43-supprimer-le-returning-implicite-de-seaorm"><a class="header" href="#43-supprimer-le-returning-implicite-de-seaorm">4.3 Supprimer le <code>RETURNING</code> implicite de SeaORM</a></h3>
4055 +<p><code>ActiveModel::update(db)</code> renvoie le modèle complet via <code>... RETURNING *</code>. Pour les progress updates, on n’utilise pas le retour. <code>UpdateMany::exec</code> n’émet pas de <code>RETURNING</code> → moins de bytes sur le wire, moins de désérialisation.</p>
4056 +<h3 id="44-pool-db-dédié-pour-le-worker"><a class="header" href="#44-pool-db-dédié-pour-le-worker">4.4 Pool DB dédié pour le worker</a></h3>
4057 +<p>Aujourd’hui le worker partage le pool principal avec les handlers HTTP. Un pool de 4-8 connexions dédié au worker éviterait qu’un import sature le pool et fasse timeouter les requêtes utilisateur.</p>
4058 +<h3 id="45-debouncer-le-sse-côté-serveur"><a class="header" href="#45-debouncer-le-sse-côté-serveur">4.5 Debouncer le SSE côté serveur</a></h3>
4059 +<p>Le SSE SELECT toutes les 2 s même quand rien ne change. Alternative : <strong>PostgreSQL LISTEN/NOTIFY</strong> sur une chaîne <code>import_job_{uuid}</code>. Chaque UPDATE émet un NOTIFY, la connexion SSE fait LISTEN → push direct, zéro polling.</p>
4060 +<p><strong>Coût</strong> : nécessite une connexion DB dédiée par SSE (LISTEN est stateful). Compromis à évaluer.</p>
4061 +<h2 id="5-optimisation-majeure--shell-out-vers-git-clone---bare"><a class="header" href="#5-optimisation-majeure--shell-out-vers-git-clone---bare">5. Optimisation majeure : shell-out vers <code>git clone --bare</code></a></h2>
4062 +<p><strong>Indépendant des optimisations DB</strong> mais de loin le plus gros gain. libgit2 est structurellement 2-5x plus lent que <code>git</code> CLI sur gros clones HTTPS (pas de multiplexage, résolution de deltas mono-threadée, etc.).</p>
4063 +<pre class="mermaid">flowchart TB
4064 + subgraph Actuel[Flux actuel — libgit2]
4065 + A1[RepoBuilder::clone] --&gt; A2[libgit2: fetch + resolve]
4066 + A2 --&gt;|lent 2-5x| A3[bare repo]
4067 + end
4068 + subgraph Cible[Flux optimisé — git CLI]
4069 + B1[Command::new git] --&gt; B2[git clone --bare --progress]
4070 + B2 --&gt;|stderr| B3[Parser regex&lt;br/&gt;Receiving objects: X%]
4071 + B3 --&gt; B4[update watch channel]
4072 + B2 --&gt;|vitesse native| B5[bare repo]
4073 + end
4074 +</pre>
4075 +
4076 +<p>Avantages :</p>
4077 +<ul>
4078 +<li><strong>Vitesse native</strong> (parité avec <code>git</code> CLI)</li>
4079 +<li><strong>Progression native</strong> via stderr <code>Receiving objects: 42% (368/876), 1.10 MiB | 2.05 MiB/s</code></li>
4080 +<li><strong>HEAD correctement positionné</strong> (plus besoin du workaround <code>RepoBuilder</code>)</li>
4081 +<li><strong>Moins de dépendance sur libgit2</strong> pour le cas du clone initial</li>
4082 +</ul>
4083 +<p>Contrepartie : binaire <code>git</code> requis sur le serveur (déjà le cas — utilisé par <code>SbomService::git_archive</code>).</p>
4084 +<h2 id="6-priorités-recommandées"><a class="header" href="#6-priorités-recommandées">6. Priorités recommandées</a></h2>
4085 +<p>Si on voulait optimiser maintenant, ordre proposé :</p>
4086 +<ol>
4087 +<li><strong>Shell-out <code>git clone --bare</code></strong> — gain réel pour l’utilisateur (clone 3-5x plus rapide).</li>
4088 +<li><strong><code>update_many</code> pour <code>update_progress</code></strong> — divise la pression DB par 2, changement mécanique de ~20 lignes.</li>
4089 +<li><strong><code>watch</code> channel + tâche 1 Hz</strong> — architecture plus propre, élimine les problèmes de pool.</li>
4090 +<li><strong>Pool DB dédié worker</strong> — filet de sécurité opérationnel.</li>
4091 +<li>LISTEN/NOTIFY pour SSE — seulement si beaucoup de clients simultanés.</li>
4092 +</ol>
4093 +<p>Les gains 2-4 sont utiles même avec libgit2 ; le gain 1 est le plus visible pour l’utilisateur final.</p>
4094 +<div style="break-before: page; page-break-before: always;"></div>
4095 +<h1 id="contribuer-à-rustwarden"><a class="header" href="#contribuer-à-rustwarden">Contribuer à rustwarden</a></h1>
4096 +<p>Ce document décrit les interactions entre gitrust et le framework rustwarden-core, et explique comment étendre le framework côté gitrust sans modifier ses sources.</p>
4097 +<h2 id="services-framework-utilisés"><a class="header" href="#services-framework-utilisés">Services framework utilisés</a></h2>
4098 +<div class="table-wrapper">
4099 +<table>
4100 +<thead>
4101 +<tr><th>Service</th><th>Usage dans gitrust</th></tr>
4102 +</thead>
4103 +<tbody>
4104 +<tr><td><code>UserService</code></td><td>CRUD users, roles, <code>delete_user</code>, <code>admin_reset_password</code>, <code>change_password_direct</code>, <code>unassign_role_from_user</code></td></tr>
4105 +<tr><td><code>RoleService</code></td><td>Liste/création/suppression roles, <code>get_role_by_name</code></td></tr>
4106 +<tr><td><code>PasswordService</code></td><td><code>hash_password</code> (async), <code>verify_password</code> (async), <code>generate_secure_password</code></td></tr>
4107 +<tr><td><code>ResourceService</code></td><td><code>register</code>/<code>unregister</code> repos, <code>set_public</code>, <code>effective_permission</code>, <code>find_by_type_and_id</code></td></tr>
4108 +<tr><td><code>AuthService</code></td><td><code>authenticate_user</code> (login)</td></tr>
4109 +<tr><td><code>JwtService</code></td><td><code>generate_token</code> (login)</td></tr>
4110 +<tr><td><code>EmailValidationService</code></td><td>Vérification email</td></tr>
4111 +<tr><td><code>PasswordResetService</code></td><td>Flux “mot de passe oublié”</td></tr>
4112 +<tr><td><code>AppSettingsService</code></td><td><code>get_bool</code> pour <code>registration_enabled</code></td></tr>
4113 +</tbody>
4114 +</table>
4115 +</div>
4116 +<h2 id="hook-on_user_deleted-implémenté"><a class="header" href="#hook-on_user_deleted-implémenté">Hook <code>on_user_deleted</code> implémenté</a></h2>
4117 +<p>Le hook <code>on_user_deleted</code> dans <code>gitrust-hooks</code> supprime le répertoire utilisateur sur le filesystem (<code>repos_base_path/username/</code>) avant la cascade DB. Appelé automatiquement par <code>UserService::delete_user</code>.</p>
4118 +<h2 id="règle-fondamentale"><a class="header" href="#règle-fondamentale">Règle fondamentale</a></h2>
4119 +<p><strong>Ne jamais modifier <code>crates/rustwarden-core/</code>.</strong> Ce crate est le framework partagé. Toute extension passe par :</p>
4120 +<ul>
4121 +<li>Des <strong>wrappers</strong> côté <code>gitrust-core</code> (services qui délèguent au framework)</li>
4122 +<li>Des <strong>trait impls</strong> (<code>RustwardenHooks</code> dans <code>gitrust-hooks</code>)</li>
4123 +<li>Des <strong>extensions</strong> via les mécanismes d’injection Axum (<code>Extension</code>, <code>State</code>)</li>
4124 +</ul>
4125 +<h2 id="aucun-contournement-en-cours"><a class="header" href="#aucun-contournement-en-cours">Aucun contournement en cours</a></h2>
4126 +<p>Tous les anciens contournements (entités directes, hash manuels) ont été remplacés par les services du framework suite à la mise à jour du 2026-03-26.</p>
4127 +<h2 id="ajouter-une-fonctionnalité-nécessitant-un-service-framework-absent"><a class="header" href="#ajouter-une-fonctionnalité-nécessitant-un-service-framework-absent">Ajouter une fonctionnalité nécessitant un service framework absent</a></h2>
4128 +<p>Si un service nécessaire n’existe pas dans rustwarden-core :</p>
4129 +<ol>
4130 +<li>Implémenter le service côté <code>gitrust-core</code> en réutilisant les primitives du framework (ex: <code>PasswordService::hash_password</code> pour le hashage)</li>
4131 +<li>Si la fonctionnalité est générique et bénéficierait au framework lui-même, ouvrir une issue ou une PR upstream sur le dépôt rustwarden-core</li>
4132 +<li>Ne pas dupliquer la logique d’auth, de session, ou de JWT — ces domaines appartiennent exclusivement au framework</li>
4133 +</ol>
4134 +<h2 id="pattern-dextension-via-hooks"><a class="header" href="#pattern-dextension-via-hooks">Pattern d’extension via hooks</a></h2>
4135 +<p>Les hooks (<code>gitrust-hooks/src/lib.rs</code>) implémentent <code>RustwardenHooks</code> et sont injectés dans le routeur Axum au démarrage :</p>
4136 +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
4137 +</span><span class="boring">fn main() {
4138 +</span>// Dans main.rs
4139 +let hooks = Arc::new(GitrustHooks::new(config.clone()));
4140 +// Passé via .merge_routes(app_routes(hooks))
4141 +// Puis disponible via axum::Extension dans les handlers
4142 +<span class="boring">}</span></code></pre>
4143 +<p>Pour réagir à un nouvel événement du framework, ajouter la méthode correspondante dans l’impl <code>RustwardenHooks</code> de <code>gitrust-hooks</code>, sans toucher au code du framework qui émet l’événement.</p>
4144 +<div style="break-before: page; page-break-before: always;"></div>
4145 +<h1 id="passer-la-qa-avant-un-merge"><a class="header" href="#passer-la-qa-avant-un-merge">Passer la QA avant un merge</a></h1>
4146 +<blockquote>
4147 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
4148 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
4149 +</blockquote>
4150 +<h2 id="todo-58"><a class="header" href="#todo-58">TODO</a></h2>
4151 +<ul>
4152 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
4153 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
4154 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
4155 +</ul>
4156 +<div style="break-before: page; page-break-before: always;"></div>
4157 +<h1 id="référence-2"><a class="header" href="#référence-2">Référence</a></h1>
4158 +<blockquote>
4159 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
4160 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
4161 +</blockquote>
4162 +<h2 id="todo-59"><a class="header" href="#todo-59">TODO</a></h2>
4163 +<ul>
4164 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
4165 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
4166 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
4167 +</ul>
4168 +<div style="break-before: page; page-break-before: always;"></div>
4169 +<h1 id="architecture-par-crates"><a class="header" href="#architecture-par-crates">Architecture par crates</a></h1>
4170 +<p>Référence structurelle de gitrust : crates, modules, routes, dépendances et composants CI.</p>
4171 +<h2 id="dépendances-entre-crates"><a class="header" href="#dépendances-entre-crates">Dépendances entre crates</a></h2>
4172 +<pre class="mermaid">graph LR
4173 + RW["rustwarden-core"]
4174 +
4175 + Git["gitrust-git"]
4176 + Core["gitrust-core"]
4177 + Hooks["gitrust-hooks"]
4178 + SSH["gitrust-ssh"]
4179 + Web["gitrust-web"]
4180 + Bin["gitrust (binaire)"]
4181 +
4182 + Core --&gt; RW
4183 + Git -.-&gt;|"indépendant&lt;br/&gt;(git2, tokio)"| RW
4184 +
4185 + Hooks --&gt; Core
4186 + Hooks --&gt; RW
4187 +
4188 + SSH --&gt; Core
4189 + SSH --&gt; Git
4190 +
4191 + Web --&gt; Core
4192 + Web --&gt; Git
4193 + Web -.-&gt;|"CI pages"| Git
4194 +
4195 + Bin --&gt; Core
4196 + Bin --&gt; Git
4197 + Bin --&gt; SSH
4198 + Bin --&gt; Web
4199 + Bin --&gt; Hooks
4200 + Bin --&gt; RW
4201 +
4202 + subgraph "Externes CI (Phase 5b)"
4203 + Dagger["Dagger CLI"]
4204 + CiEng["ci-engine (Python)"]
4205 + Syft["Syft"]
4206 + DTrack["Dependency-Track"]
4207 + end
4208 +
4209 + Core -.-&gt;|"CiWorker&lt;br/&gt;sous-processus"| Dagger
4210 + Dagger -.-&gt; CiEng
4211 + Core -.-&gt; Syft
4212 + Syft -.-&gt; DTrack
4213 +</pre>
4214 +
4215 +<hr>
4216 +<h2 id="crates--responsabilités"><a class="header" href="#crates--responsabilités">Crates — Responsabilités</a></h2>
4217 +<h3 id="gitrust-core"><a class="header" href="#gitrust-core">gitrust-core</a></h3>
4218 +<p>Cœur métier. Ne dépend que de rustwarden-core et des crates Rust standards.</p>
4219 +<div class="table-wrapper">
4220 +<table>
4221 +<thead>
4222 +<tr><th>Module</th><th>Rôle</th></tr>
4223 +</thead>
4224 +<tbody>
4225 +<tr><td><code>config</code></td><td><code>GitrustConfig::from_env()</code> — ports SSH, chemin repos, limites</td></tr>
4226 +<tr><td><code>error</code></td><td><code>GitrustError</code> — erreurs domaine Git + <code>IntoResponse</code> HTTP</td></tr>
4227 +<tr><td><code>roles</code></td><td><code>enum Role { Reader, Developer, Maintainer, Owner }</code> avec <code>Ord</code></td></tr>
4228 +<tr><td><code>types</code></td><td>Newtypes validés : <code>RepoSlug</code>, <code>TeamSlug</code>, <code>Fingerprint</code>, <code>TokenHash</code></td></tr>
4229 +<tr><td><code>models/</code></td><td>Entités SeaORM : repository, ssh_key, team, team_member, team_repository_access, ci_pipeline, ci_job, ci_log, ci_config, ci_variable</td></tr>
4230 +<tr><td><code>migrations/</code></td><td>Migrations SeaORM (tables gitrust) combinées avec les migrations core</td></tr>
4231 +<tr><td><code>services/</code></td><td><code>SshKeyService</code>, <code>RepositoryService</code>, <code>TeamService</code>, <code>AccessService</code>, <code>CiService</code>, <code>CiVariableService</code>, <code>CiDetectionService</code>, <code>CiWorker</code>, <code>NotificationService</code></td></tr>
4232 +<tr><td><code>dto/</code></td><td>Structures d’entrée/sortie pour les services</td></tr>
4233 +</tbody>
4234 +</table>
4235 +</div>
4236 +<h3 id="gitrust-git"><a class="header" href="#gitrust-git">gitrust-git</a></h3>
4237 +<p>Opérations Git sur le système de fichiers. Utilise <code>git2</code> (libgit2). Pas de dépendance vers la base de données.</p>
4238 +<div class="table-wrapper">
4239 +<table>
4240 +<thead>
4241 +<tr><th>Module</th><th>Rôle</th></tr>
4242 +</thead>
4243 +<tbody>
4244 +<tr><td><code>errors</code></td><td><code>enum GitError</code> (Git, RepoNotFound, RefNotFound, PathTraversal, …)</td></tr>
4245 +<tr><td><code>bare_repo</code></td><td>Init, open, delete, exists + validation chemin canonique sous base</td></tr>
4246 +<tr><td><code>branch</code> / <code>tag</code></td><td>Listing branches (BranchInfo) et tags (TagInfo, annotated/lightweight)</td></tr>
4247 +<tr><td><code>reference</code></td><td>resolve_ref (branch -&gt; tag -&gt; SHA -&gt; revparse)</td></tr>
4248 +<tr><td><code>tree_browser</code></td><td>list_tree (dirs first, sorted), TreeEntry, EntryKind</td></tr>
4249 +<tr><td><code>blob_reader</code></td><td>read_blob -&gt; Text/Binary, détection binaire (null bytes)</td></tr>
4250 +<tr><td><code>commit_log</code></td><td>list_commits (paginé), find_commit, CommitInfo</td></tr>
4251 +<tr><td><code>readme</code></td><td>find_readme (README.md &gt; README &gt; readme.md &gt; …)</td></tr>
4252 +<tr><td><code>pack_protocol</code></td><td>advertise_refs, serve_pack (async, git-upload-pack/git-receive-pack)</td></tr>
4253 +</tbody>
4254 +</table>
4255 +</div>
4256 +<h3 id="gitrust-ssh"><a class="header" href="#gitrust-ssh">gitrust-ssh</a></h3>
4257 +<p>Serveur SSH basé sur <code>russh</code>. Authentification par clé publique.</p>
4258 +<div class="table-wrapper">
4259 +<table>
4260 +<thead>
4261 +<tr><th>Module (prévu)</th><th>Rôle</th></tr>
4262 +</thead>
4263 +<tbody>
4264 +<tr><td><code>server</code></td><td>Démarrage, génération clé hôte Ed25519</td></tr>
4265 +<tr><td><code>auth</code></td><td>Authentification par fingerprint -&gt; SshKeyService</td></tr>
4266 +<tr><td><code>session</code></td><td>Handler SSH (exec, shell)</td></tr>
4267 +<tr><td><code>command_handler</code></td><td>Parsing <code>git-upload-pack</code>/<code>git-receive-pack</code></td></tr>
4268 +</tbody>
4269 +</table>
4270 +</div>
4271 +<h3 id="gitrust-web"><a class="header" href="#gitrust-web">gitrust-web</a></h3>
4272 +<p>Interface web SSR (Server-Side Rendering) avec Askama (templates compilés) + HTMX (interactions dynamiques). Fonctionne en mode <code>headless()</code> : les pages UI du framework (<code>rustwarden-ui</code>) ne sont pas montées, gitrust-web réimplémente toutes les pages avec un design spécifique (sidebar contextuelle, navigation Git, DaisyUI).</p>
4273 +<p><strong>Architecture des routes :</strong></p>
4274 +<pre><code>gitrust (port 4000)
4275 +├── /api/v1/auth/* ← Routes API du framework (JSON)
4276 +│ ├── POST /login AuthService::authenticate_user
4277 +│ ├── POST /register UserService::create_user
4278 +│ ├── POST /refresh RefreshTokenService (rotation JWT)
4279 +│ ├── POST /logout JwtBlacklistService
4280 +│ ├── GET /me Claims extraction
4281 +│ ├── POST /forgot-password PasswordResetService::request_reset
4282 +│ ├── POST /reset-password PasswordResetService::reset_password
4283 +│ ├── GET /verify-email/{t} EmailValidationService::verify_email
4284 +│ └── POST /resend-verif EmailValidationService::resend
4285 +│
4286 +├── /api/v1/* ← API REST Gitrust (JSON, auth JWT/PAT)
4287 +│ ├── /user, /user/repos Profil utilisateur
4288 +│ ├── /repos/{o}/{r} Détail dépôt, branches, tags, commits
4289 +│ ├── /repos/{o}/{r}/issues CRUD issues + commentaires
4290 +│ ├── /repos/{o}/{r}/pulls CRUD PRs + merge
4291 +│ └── /repos/{o}/{r}/ci/* Pipelines CI (list, trigger, cancel, logs)
4292 +│
4293 +├── /* ← Pages SSR gitrust (HTML)
4294 +│ ├── /login, /register Pages formulaires (design gitrust)
4295 +│ ├── /dashboard, /teams Pages utilisateur
4296 +│ ├── /settings/* Profile, SSH keys, sessions, notifications
4297 +│ ├── /notifications Liste notifications + SSE stream
4298 +│ ├── /admin/* Administration (+ admin CI)
4299 +│ ├── /{owner}/{repo}/* Navigation dépôt Git
4300 +│ └── /{owner}/{repo}/ci/* Pages CI (pipelines, logs, config, variables)
4301 +│
4302 +└── /static/* ← Assets locaux (CSS, JS, HTMX)
4303 +</code></pre>
4304 +<p>Les routes API du framework sont montées via <code>framework_api_routes()</code> dans <code>routes.rs</code>. Elles sont utilisées par :</p>
4305 +<ul>
4306 +<li>Les liens dans les emails (vérification, reset password)</li>
4307 +<li>Le refresh token (rotation JWT, session longue durée)</li>
4308 +<li>L’accès programmatique (GET /me, POST /logout)</li>
4309 +</ul>
4310 +<p>Les pages SSR et les routes API coexistent : les formulaires HTML soumettent aux handlers gitrust (SSR), tandis que les services framework génèrent des liens vers les routes API.</p>
4311 +<div class="table-wrapper">
4312 +<table>
4313 +<thead>
4314 +<tr><th>Module</th><th>Rôle</th></tr>
4315 +</thead>
4316 +<tbody>
4317 +<tr><td><code>routes.rs</code></td><td>Routeur principal : framework API + API REST Gitrust + pages SSR + fichiers statiques</td></tr>
4318 +<tr><td><code>handlers/</code></td><td>Handlers Axum SSR (un fichier par domaine) + handlers API JSON</td></tr>
4319 +<tr><td><code>templates.rs</code></td><td>Structs Askama + SidebarContext + RepoNav</td></tr>
4320 +<tr><td><code>helpers.rs</code></td><td>require_auth, require_admin, sidebar_*, resolve_repo_access</td></tr>
4321 +<tr><td><code>templates/</code></td><td>Templates HTML (Askama, extends base.html)</td></tr>
4322 +<tr><td><code>static_files.rs</code></td><td>ServeDir pour /static</td></tr>
4323 +</tbody>
4324 +</table>
4325 +</div>
4326 +<h3 id="gitrust-hooks"><a class="header" href="#gitrust-hooks">gitrust-hooks</a></h3>
4327 +<p>Implémentation de <code>RustwardenHooks</code> pour réagir aux événements du framework. Les hooks sont injectés dans le routeur Axum via <code>Arc&lt;dyn RustwardenHooks&gt;</code> + <code>axum::Extension</code> (dans <code>main.rs</code>).</p>
4328 +<div class="table-wrapper">
4329 +<table>
4330 +<thead>
4331 +<tr><th>Hook</th><th>Action</th></tr>
4332 +</thead>
4333 +<tbody>
4334 +<tr><td><code>on_user_registered</code></td><td>Crée le répertoire utilisateur sur le FS (anti path-traversal)</td></tr>
4335 +<tr><td><code>on_user_deleted</code></td><td>Supprime le répertoire utilisateur + bare repos sur le FS</td></tr>
4336 +<tr><td><code>on_resource_shared</code></td><td>Audit log si resource_type = “repository”</td></tr>
4337 +<tr><td><code>on_resource_unshared</code></td><td>Audit log si resource_type = “repository”</td></tr>
4338 +</tbody>
4339 +</table>
4340 +</div>
4341 +<hr>
4342 +<h2 id="notifications-2"><a class="header" href="#notifications-2">Notifications</a></h2>
4343 +<p>Système de notification à deux canaux : <strong>in-app</strong> (SSE temps réel + page) et <strong>email</strong> (worker SMTP du framework).</p>
4344 +<pre><code>Événement (pipeline échoue, PR commentée, etc.)
4345 + │
4346 + ▼
4347 +NotificationService::notify(user_id, event_type, title, body, link)
4348 + │
4349 + ├── INSERT INTO notifications (in-app)
4350 + │ → broadcast::Sender → SSE /notifications/stream
4351 + │ → Badge header mis à jour en temps réel (HTMX)
4352 + │
4353 + └── if user.email_on_{event} = true:
4354 + EmailQueueService::enqueue() (framework SMTP worker)
4355 +</code></pre>
4356 +<p>Les préférences de notification sont par utilisateur (email on/off par type d’événement).</p>
4357 +<hr>
4358 +<h2 id="cicd--modes-et-composants"><a class="header" href="#cicd--modes-et-composants">CI/CD — Modes et composants</a></h2>
4359 +<p>Système CI hybride à deux niveaux, activé via <code>CI_ENABLED=true</code>.</p>
4360 +<h3 id="modes"><a class="header" href="#modes">Modes</a></h3>
4361 +<div class="table-wrapper">
4362 +<table>
4363 +<thead>
4364 +<tr><th>Mode</th><th>Détection</th><th>Exécution</th></tr>
4365 +</thead>
4366 +<tbody>
4367 +<tr><td><strong>Easy</strong></td><td><code>.gitrust-ci.yml</code> à la racine du repo</td><td>Module Dagger Python générique (<code>ci-engine</code>) interprète le YAML</td></tr>
4368 +<tr><td><strong>Power</strong></td><td><code>.dagger/</code> à la racine du repo</td><td><code>dagger call -m .dagger/</code> exécute le module utilisateur directement</td></tr>
4369 +<tr><td>Aucun</td><td>Ni l’un ni l’autre</td><td>Pas de CI pour ce repo</td></tr>
4370 +</tbody>
4371 +</table>
4372 +</div>
4373 +<h3 id="architecture-ci"><a class="header" href="#architecture-ci">Architecture CI</a></h3>
4374 +<pre><code>git push (HTTP ou SSH)
4375 + │
4376 + ▼
4377 +receive-pack handler
4378 + │
4379 + ├── CiDetectionService::detect(bare_repo, commit_sha)
4380 + │ → Easy / Power / None
4381 + │
4382 + ├── CiService::create_pipeline(repo_id, sha, mode)
4383 + │
4384 + └── mpsc::Sender.send(job) ──► CiWorker (tokio::spawn)
4385 + │
4386 + ├── 1. Validation statique
4387 + │ Easy: schéma YAML, whitelist images/packages
4388 + │ Power: analyse code .dagger/ (si activé)
4389 + │
4390 + ├── 2. SBOM Gate (si CI_SBOM_ENABLED)
4391 + │ syft scan → sbom.cdx.json
4392 + │ → Dependency-Track (si CI_DTRACK_ENABLED)
4393 + │ → PASS/FAIL selon politique
4394 + │
4395 + ├── 3. Résolution variables (héritage team → repo)
4396 + │ CiVariableService::resolve_for_pipeline()
4397 + │
4398 + ├── 4. Exécution Dagger (isolé, timeout, cgroups)
4399 + │ Easy: dagger call -m ci-engine test --profile=...
4400 + │ Power: dagger call -m .dagger/ &lt;function&gt;
4401 + │
4402 + └── 5. Rapport + audit
4403 + Status, logs (broadcast SSE), ci_audit_log
4404 +</code></pre>
4405 +<h3 id="composants-externes-tous-optionnels-sauf-dagger"><a class="header" href="#composants-externes-tous-optionnels-sauf-dagger">Composants externes (tous optionnels sauf Dagger)</a></h3>
4406 +<div class="table-wrapper">
4407 +<table>
4408 +<thead>
4409 +<tr><th>Composant</th><th>Rôle</th><th>Variable de contrôle</th></tr>
4410 +</thead>
4411 +<tbody>
4412 +<tr><td>Dagger Engine</td><td>Exécution des pipelines dans des containers isolés</td><td><code>CI_ENABLED</code></td></tr>
4413 +<tr><td>ci-engine (Python)</td><td>Moteur générique pour Easy Mode</td><td><code>CI_DAGGER_MODULE_PATH</code></td></tr>
4414 +<tr><td>Syft</td><td>Génération SBOM CycloneDX</td><td><code>CI_SBOM_ENABLED</code></td></tr>
4415 +<tr><td>Dependency-Track</td><td>Analyse de vulnérabilités sur les SBOM</td><td><code>CI_DTRACK_ENABLED</code></td></tr>
4416 +</tbody>
4417 +</table>
4418 +</div>
4419 +<h3 id="variables-et-secrets-ci"><a class="header" href="#variables-et-secrets-ci">Variables et secrets CI</a></h3>
4420 +<p>Héritage <strong>team → repo</strong> : les variables définies au niveau team sont partagées entre tous les repos de l’équipe. Le repo peut surcharger une clé team avec sa propre valeur. Les secrets sont chiffrés en base (AES-256-GCM) et masqués dans les logs (<code>***</code>).</p>
4421 +<hr>
4422 +<h2 id="sécurité-anssi-pa-074"><a class="header" href="#sécurité-anssi-pa-074">Sécurité (ANSSI PA-074)</a></h2>
4423 +<div class="table-wrapper">
4424 +<table>
4425 +<thead>
4426 +<tr><th>Directive</th><th>Scope</th></tr>
4427 +</thead>
4428 +<tbody>
4429 +<tr><td><code>#![forbid(unsafe_code)]</code></td><td>gitrust-core, gitrust-web, gitrust-hooks</td></tr>
4430 +<tr><td><code>#![deny(unsafe_code)]</code></td><td>gitrust-git, gitrust-ssh (FFI libgit2/russh)</td></tr>
4431 +<tr><td><code>deny(clippy::unwrap_used, expect_used, panic)</code></td><td>Tous les crates</td></tr>
4432 +<tr><td><code>deny(clippy::indexing_slicing)</code></td><td>Tous les crates</td></tr>
4433 +<tr><td><code>deny(clippy::mem_forget)</code></td><td>Tous les crates</td></tr>
4434 +<tr><td><code>Zeroize</code> on drop</td><td><code>TokenHash</code> (ANSSI R23)</td></tr>
4435 +<tr><td>RSA minimum 4096 bits</td><td><code>SshKeyService</code></td></tr>
4436 +<tr><td>Path traversal validation</td><td><code>RepositoryService</code>, <code>gitrust-git</code></td></tr>
4437 +<tr><td>Slug validation + noms réservés</td><td><code>RepoSlug</code>, <code>TeamSlug</code></td></tr>
4438 +</tbody>
4439 +</table>
4440 +</div>
4441 +<div style="break-before: page; page-break-before: always;"></div>
4442 +<h1 id="services-et-api-interne"><a class="header" href="#services-et-api-interne">Services et API interne</a></h1>
4443 +<blockquote>
4444 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
4445 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
4446 +</blockquote>
4447 +<h2 id="todo-60"><a class="header" href="#todo-60">TODO</a></h2>
4448 +<ul>
4449 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
4450 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
4451 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
4452 +</ul>
4453 +<div style="break-before: page; page-break-before: always;"></div>
4454 +<h1 id="schéma-de-la-base-de-données-1"><a class="header" href="#schéma-de-la-base-de-données-1">Schéma de la base de données</a></h1>
4455 +<blockquote>
4456 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
4457 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
4458 +</blockquote>
4459 +<h2 id="todo-61"><a class="header" href="#todo-61">TODO</a></h2>
4460 +<ul>
4461 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
4462 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
4463 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
4464 +</ul>
4465 +<div style="break-before: page; page-break-before: always;"></div>
4466 +<h1 id="règles-qa--conformité-anssi"><a class="header" href="#règles-qa--conformité-anssi">Règles QA &amp; conformité ANSSI</a></h1>
4467 +<p>Ce document définit les règles de qualité et de sécurité applicables à tout le projet gitrust. Chaque lot doit satisfaire ces règles avant merge.</p>
4468 +<hr>
4469 +<h2 id="1-gates-de-compilation-obligatoires"><a class="header" href="#1-gates-de-compilation-obligatoires">1. Gates de compilation obligatoires</a></h2>
4470 +<p>Toute modification doit passer ces 4 gates sans erreur :</p>
4471 +<div class="table-wrapper">
4472 +<table>
4473 +<thead>
4474 +<tr><th>Gate</th><th>Commande</th><th>Critère</th></tr>
4475 +</thead>
4476 +<tbody>
4477 +<tr><td>Formatage</td><td><code>cargo fmt --all -- --check</code></td><td>Zéro diff</td></tr>
4478 +<tr><td>Linting</td><td><code>cargo clippy --workspace -- -D warnings</code></td><td>Zéro warning</td></tr>
4479 +<tr><td>Tests unitaires</td><td><code>cargo test --workspace</code></td><td>100% pass</td></tr>
4480 +<tr><td>Build CSS</td><td><code>npx tailwindcss -i static/css/input.css -o static/css/style.css --minify</code></td><td>Si templates modifiés</td></tr>
4481 +</tbody>
4482 +</table>
4483 +</div>
4484 +<h3 id="gates-supplémentaires-à-mettre-en-place"><a class="header" href="#gates-supplémentaires-à-mettre-en-place">Gates supplémentaires (à mettre en place)</a></h3>
4485 +<div class="table-wrapper">
4486 +<table>
4487 +<thead>
4488 +<tr><th>Gate</th><th>Outil</th><th>Rôle</th></tr>
4489 +</thead>
4490 +<tbody>
4491 +<tr><td>Audit dépendances</td><td><code>cargo audit</code></td><td>Détection CVE dans les deps</td></tr>
4492 +<tr><td>Licences &amp; bans</td><td><code>cargo deny check</code></td><td>Licences compatibles, pas de crate bannie</td></tr>
4493 +<tr><td>Secrets dans le code</td><td>Recherche de patterns sensibles</td><td>Pas de token/mot de passe en dur</td></tr>
4494 +</tbody>
4495 +</table>
4496 +</div>
4497 +<hr>
4498 +<h2 id="2-règles-de-sécurité-anssi-pa-074"><a class="header" href="#2-règles-de-sécurité-anssi-pa-074">2. Règles de sécurité (ANSSI PA-074)</a></h2>
4499 +<h3 id="21-lints-rust-obligatoires-déjà-en-place"><a class="header" href="#21-lints-rust-obligatoires-déjà-en-place">2.1 Lints Rust obligatoires (déjà en place)</a></h3>
4500 +<pre class="playground"><code class="language-rust"><span class="boring">#![allow(unused)]
4501 +</span>#![forbid(unsafe_code)] // core, web, hooks
4502 +#![deny(unsafe_code)] // git, ssh (FFI nécessaire)
4503 +#![deny(clippy::unwrap_used)]
4504 +#![deny(clippy::expect_used)]
4505 +#![deny(clippy::panic)]
4506 +#![deny(clippy::indexing_slicing)]
4507 +#![deny(clippy::mem_forget)]
4508 +<span class="boring">fn main() {
4509 +</span><span class="boring">}</span></code></pre>
4510 +<h3 id="22-checklist-sécurité-par-feature"><a class="header" href="#22-checklist-sécurité-par-feature">2.2 Checklist sécurité par feature</a></h3>
4511 +<p>Avant toute implémentation touchant l’authentification, les secrets ou les permissions, vérifier :</p>
4512 +<ul>
4513 +<li><input disabled="" type="checkbox"> <strong>Secrets jamais en clair en base</strong> — hash SHA-256 ou bcrypt</li>
4514 +<li><input disabled="" type="checkbox"> <strong>Secrets jamais loggés</strong> — vérifier <code>tracing::info/debug/warn</code>, <code>Display</code> et <code>Debug</code> impls ne révèlent pas le secret</li>
4515 +<li><input disabled="" type="checkbox"> <strong>Comparaison constant-time</strong> — <code>subtle::ConstantTimeEq</code> pour toute validation de secret (pas de <code>==</code> sur des hash)</li>
4516 +<li><input disabled="" type="checkbox"> <strong>Rate-limiting</strong> — endpoint d’authentification protégé</li>
4517 +<li><input disabled="" type="checkbox"> <strong>CSRF</strong> — token valide sur toute action mutante (POST/PUT/DELETE)</li>
4518 +<li><input disabled="" type="checkbox"> <strong>Ownership vérifiée (anti-IDOR)</strong> — le user ne peut agir que sur ses propres ressources (vérifier <code>user_id</code> côté serveur)</li>
4519 +<li><input disabled="" type="checkbox"> <strong>Expiration obligatoire</strong> — tout token/session a une durée de vie max</li>
4520 +<li><input disabled="" type="checkbox"> <strong>Audit log</strong> — création, révocation, utilisation suspecte tracées</li>
4521 +<li><input disabled="" type="checkbox"> <strong>Zeroize</strong> — types sensibles implémentent <code>Zeroize</code>/<code>ZeroizeOnDrop</code></li>
4522 +<li><input disabled="" type="checkbox"> <strong>Path traversal</strong> — validation des chemins disque (pas de <code>..</code>, <code>/</code>, <code>\</code>)</li>
4523 +</ul>
4524 +<h3 id="23-marqueurs-sec-"><a class="header" href="#23-marqueurs-sec-">2.3 Marqueurs SEC-</a></h3>
4525 +<p>Le code utilise des commentaires <code>// SEC-XX</code> pour tracer les décisions de sécurité. Tout nouveau contrôle doit être marqué avec le prochain numéro disponible dans sa catégorie :</p>
4526 +<div class="table-wrapper">
4527 +<table>
4528 +<thead>
4529 +<tr><th>Préfixe</th><th>Catégorie</th><th>Exemples</th></tr>
4530 +</thead>
4531 +<tbody>
4532 +<tr><td>SEC-C</td><td>Cryptographie</td><td>Timing attack, CSRF, PKCE</td></tr>
4533 +<tr><td>SEC-H</td><td>HTTP/Headers</td><td>X-Forwarded-For, cookies, nonce</td></tr>
4534 +<tr><td>SEC-L</td><td>Logique métier</td><td>Hashing, validation, defaults</td></tr>
4535 +<tr><td>SEC-M</td><td>Mémoire/sessions</td><td>Rate-limit DoS, refresh tokens</td></tr>
4536 +</tbody>
4537 +</table>
4538 +</div>
4539 +<hr>
4540 +<h2 id="3-tests-requis-par-catégorie"><a class="header" href="#3-tests-requis-par-catégorie">3. Tests requis par catégorie</a></h2>
4541 +<h3 id="31-matrice-de-couverture"><a class="header" href="#31-matrice-de-couverture">3.1 Matrice de couverture</a></h3>
4542 +<div class="table-wrapper">
4543 +<table>
4544 +<thead>
4545 +<tr><th>Catégorie</th><th>Quand appliquer</th><th>Exemples</th></tr>
4546 +</thead>
4547 +<tbody>
4548 +<tr><td><strong>Unitaire</strong></td><td>Logique pure (validation, parsing, conversion)</td><td><code>RepoSlug::new("../evil")</code> → erreur</td></tr>
4549 +<tr><td><strong>Intégration</strong></td><td>Service avec DB (CRUD, contraintes, transactions)</td><td><code>PatService::validate</code> token expiré → None</td></tr>
4550 +<tr><td><strong>Handler</strong></td><td>Endpoint HTTP (status, redirect, CSRF, auth)</td><td>POST sans CSRF → 403</td></tr>
4551 +<tr><td><strong>E2E Playwright</strong></td><td>Flow utilisateur complet</td><td>Créer token → copier → cloner un dépôt</td></tr>
4552 +<tr><td><strong>Sécurité négatif</strong></td><td>Tout bypass imaginable</td><td>Token user A sur ressource user B → 401</td></tr>
4553 +</tbody>
4554 +</table>
4555 +</div>
4556 +<h3 id="32-règles-de-tests"><a class="header" href="#32-règles-de-tests">3.2 Règles de tests</a></h3>
4557 +<ol>
4558 +<li><strong>Tests d’intégration sur vraie DB</strong> — pas de mocks pour la couche persistence (les mocks masquent les bugs de migration)</li>
4559 +<li><strong>Tests négatifs obligatoires</strong> — pour chaque chemin heureux, tester au moins : input invalide, non-authentifié, non-autorisé, expiré, révoqué</li>
4560 +<li><strong>Tests E2E en français</strong> — cohérent avec l’UI (locale <code>fr-FR</code>)</li>
4561 +<li><strong>Pas de <code>sleep()</code> dans les tests</strong> — utiliser des retry/poll avec timeout</li>
4562 +<li><strong>Données de test isolées</strong> — chaque test crée ses propres données (pas de dépendance sur l’ordre d’exécution)</li>
4563 +</ol>
4564 +<hr>
4565 +<h2 id="4-règles-de-code"><a class="header" href="#4-règles-de-code">4. Règles de code</a></h2>
4566 +<h3 id="41-framework-boundary"><a class="header" href="#41-framework-boundary">4.1 Framework boundary</a></h3>
4567 +<ul>
4568 +<li><strong>Ne jamais modifier</strong> <code>crates/rustwarden-core/</code></li>
4569 +<li>Réutiliser les services framework avant d’implémenter (auth, users, sessions, ResourceService, i18n, middleware)</li>
4570 +<li>Si un service manque, l’étendre côté gitrust (wrappers, trait impls)</li>
4571 +</ul>
4572 +<h3 id="42-assets"><a class="header" href="#42-assets">4.2 Assets</a></h3>
4573 +<ul>
4574 +<li><strong>Zéro CDN</strong> — tous les CSS/JS servis depuis <code>static/</code></li>
4575 +<li>La CSP du framework bloque les domaines externes</li>
4576 +</ul>
4577 +<h3 id="43-gestion-derreurs"><a class="header" href="#43-gestion-derreurs">4.3 Gestion d’erreurs</a></h3>
4578 +<ul>
4579 +<li><code>GitrustError</code> avec <code>IntoResponse</code> pour le mapping HTTP</li>
4580 +<li>Pas de <code>.unwrap()</code> / <code>.expect()</code> / <code>panic!()</code> / <code>[index]</code></li>
4581 +<li>Errors utilisateur : messages génériques (pas de leak d’info interne)</li>
4582 +</ul>
4583 +<h3 id="44-validation-aux-frontières"><a class="header" href="#44-validation-aux-frontières">4.4 Validation aux frontières</a></h3>
4584 +<ul>
4585 +<li>Valider les inputs utilisateur (formulaires, query params, headers)</li>
4586 +<li>Ne pas re-valider entre services internes</li>
4587 +<li>Newtypes avec validation à la construction (<code>RepoSlug</code>, <code>TeamSlug</code>, <code>Fingerprint</code>, <code>TokenHash</code>)</li>
4588 +</ul>
4589 +<hr>
4590 +<h2 id="5-checklist-pré-merge"><a class="header" href="#5-checklist-pré-merge">5. Checklist pré-merge</a></h2>
4591 +<p>Avant chaque merge de lot :</p>
4592 +<ul>
4593 +<li><input disabled="" type="checkbox"> <code>cargo fmt --all -- --check</code> passe</li>
4594 +<li><input disabled="" type="checkbox"> <code>cargo clippy --workspace -- -D warnings</code> passe</li>
4595 +<li><input disabled="" type="checkbox"> <code>cargo test --workspace</code> — tous les tests passent</li>
4596 +<li><input disabled="" type="checkbox"> Tests E2E Playwright passent (<code>npm run test:e2e</code>)</li>
4597 +<li><input disabled="" type="checkbox"> CSS rebuild si templates modifiés</li>
4598 +<li><input disabled="" type="checkbox"> Aucun secret en clair dans le code ou les logs</li>
4599 +<li><input disabled="" type="checkbox"> Checklist sécurité §2.2 validée (si applicable)</li>
4600 +<li><input disabled="" type="checkbox"> Pas de modification dans <code>crates/rustwarden-core/</code></li>
4601 +</ul>
4602 +<div style="break-before: page; page-break-before: always;"></div>
4603 +<h1 id="api-rest-v1-1"><a class="header" href="#api-rest-v1-1">API REST v1</a></h1>
4604 +<blockquote>
4605 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
4606 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
4607 +</blockquote>
4608 +<h2 id="todo-62"><a class="header" href="#todo-62">TODO</a></h2>
4609 +<ul>
4610 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
4611 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
4612 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
4613 +</ul>
4614 +<div style="break-before: page; page-break-before: always;"></div>
4615 +<h1 id="hooks-git-post-receive"><a class="header" href="#hooks-git-post-receive">Hooks Git post-receive</a></h1>
4616 +<blockquote>
4617 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
4618 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
4619 +</blockquote>
4620 +<h2 id="todo-63"><a class="header" href="#todo-63">TODO</a></h2>
4621 +<ul>
4622 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
4623 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
4624 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
4625 +</ul>
4626 +<div style="break-before: page; page-break-before: always;"></div>
4627 +<h1 id="api-rustwarden-core"><a class="header" href="#api-rustwarden-core">API rustwarden-core</a></h1>
4628 +<blockquote>
4629 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
4630 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
4631 +</blockquote>
4632 +<h2 id="todo-64"><a class="header" href="#todo-64">TODO</a></h2>
4633 +<ul>
4634 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
4635 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
4636 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
4637 +</ul>
4638 +<div style="break-before: page; page-break-before: always;"></div>
4639 +<h1 id="explication-2"><a class="header" href="#explication-2">Explication</a></h1>
4640 +<blockquote>
4641 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
4642 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
4643 +</blockquote>
4644 +<h2 id="todo-65"><a class="header" href="#todo-65">TODO</a></h2>
4645 +<ul>
4646 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
4647 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
4648 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
4649 +</ul>
4650 +<div style="break-before: page; page-break-before: always;"></div>
4651 +<h1 id="vue-densemble-de-larchitecture"><a class="header" href="#vue-densemble-de-larchitecture">Vue d’ensemble de l’architecture</a></h1>
4652 +<p>Gitrust est une plateforme d’hébergement Git auto-hébergée construite sur le framework <strong>rustwarden-core</strong>. L’application expose deux points d’entrée réseau (HTTP + SSH) et persiste ses données dans PostgreSQL.</p>
4653 +<h2 id="vue-densemble-3"><a class="header" href="#vue-densemble-3">Vue d’ensemble</a></h2>
4654 +<pre class="mermaid">graph TB
4655 + subgraph Clients
4656 + Browser["Navigateur Web"]
4657 + GitCLI["Git CLI (ssh/https)"]
4658 + end
4659 +
4660 + subgraph "Gitrust Binary (src/main.rs)"
4661 + Main["main()"]
4662 + end
4663 +
4664 + subgraph "Crates Gitrust"
4665 + Web["gitrust-web&lt;br/&gt;&lt;i&gt;Routes HTTP, templates,&lt;br/&gt;handlers Axum&lt;/i&gt;"]
4666 + SSH["gitrust-ssh&lt;br/&gt;&lt;i&gt;Serveur SSH (russh),&lt;br/&gt;auth par clé, sessions&lt;/i&gt;"]
4667 + Hooks["gitrust-hooks&lt;br/&gt;&lt;i&gt;impl RustwardenHooks&lt;br/&gt;(on_user_registered, ...)&lt;/i&gt;"]
4668 + Core["gitrust-core&lt;br/&gt;&lt;i&gt;Models, services, migrations,&lt;br/&gt;rôles, types, DTOs&lt;/i&gt;"]
4669 + Git["gitrust-git&lt;br/&gt;&lt;i&gt;Bare repos, tree browser,&lt;br/&gt;pack protocol (git2)&lt;/i&gt;"]
4670 + end
4671 +
4672 + subgraph "Framework"
4673 + RW["rustwarden-core&lt;br/&gt;&lt;i&gt;Auth, users, JWT, sessions,&lt;br/&gt;ResourceService, i18n&lt;/i&gt;"]
4674 + end
4675 +
4676 + subgraph "Stockage"
4677 + PG[(PostgreSQL)]
4678 + FS[("Système de fichiers&lt;br/&gt;bare repos .git")]
4679 + end
4680 +
4681 + subgraph "CI/CD (optionnel)"
4682 + CiWorker["CiWorker&lt;br/&gt;&lt;i&gt;tokio::spawn, mpsc,&lt;br/&gt;sous-processus Dagger&lt;/i&gt;"]
4683 + Dagger["Dagger Engine&lt;br/&gt;&lt;i&gt;Containers isolés,&lt;br/&gt;cache, exécution&lt;/i&gt;"]
4684 + CiEngine["ci-engine&lt;br/&gt;&lt;i&gt;Module Dagger Python&lt;br/&gt;(Easy Mode)&lt;/i&gt;"]
4685 + Syft["Syft (optionnel)&lt;br/&gt;&lt;i&gt;Génération SBOM&lt;br/&gt;CycloneDX&lt;/i&gt;"]
4686 + DTrack["Dependency-Track&lt;br/&gt;(optionnel)&lt;br/&gt;&lt;i&gt;Analyse vulnérabilités&lt;/i&gt;"]
4687 + end
4688 +
4689 + Browser --&gt;|HTTP :4000| Web
4690 + GitCLI --&gt;|SSH :2222| SSH
4691 + GitCLI --&gt;|HTTPS :4000| Web
4692 +
4693 + Main --&gt; Web
4694 + Main --&gt; SSH
4695 + Main --&gt; Hooks
4696 + Main -.-&gt;|"si CI_ENABLED"| CiWorker
4697 +
4698 + Web --&gt; Core
4699 + Web --&gt; Git
4700 + SSH --&gt; Core
4701 + SSH --&gt; Git
4702 + Hooks --&gt; Core
4703 +
4704 + Core --&gt; RW
4705 + Core --&gt; PG
4706 + Git --&gt; FS
4707 +
4708 + CiWorker --&gt; Core
4709 + CiWorker --&gt;|"dagger call"| Dagger
4710 + Dagger --&gt;|"Easy Mode"| CiEngine
4711 + Dagger --&gt;|"Power Mode"| FS
4712 + CiWorker -.-&gt;|"si CI_SBOM_ENABLED"| Syft
4713 + Syft -.-&gt;|"si CI_DTRACK_ENABLED"| DTrack
4714 +</pre>
4715 +
4716 +<hr>
4717 +<h2 id="démarrage-de-lapplication"><a class="header" href="#démarrage-de-lapplication">Démarrage de l’application</a></h2>
4718 +<p>Le diagramme suivant détaille la séquence d’initialisation depuis <code>main()</code> jusqu’au démarrage des serveurs HTTP et SSH.</p>
4719 +<pre class="mermaid">sequenceDiagram
4720 + participant Main as main()
4721 + participant Builder as RustwardenBuilder
4722 + participant App as RustwardenApp
4723 + participant Mig as AppMigrator
4724 + participant DB as PostgreSQL
4725 + participant SMTP as Serveur SMTP
4726 +
4727 + Main-&gt;&gt;Main: GitrustConfig::from_env()
4728 + Main-&gt;&gt;Main: Arc&lt;GitrustHooks&gt; (hooks FS)
4729 +
4730 + Main-&gt;&gt;Builder: builder().from_env()
4731 + Note over Builder: Charge .env, init tracing
4732 + Main-&gt;&gt;Builder: .headless().auto_migrate(false)
4733 + Main-&gt;&gt;Builder: .merge_routes(app_routes(hooks))
4734 + Note over Builder: Routes = framework API&lt;br/&gt;+ pages SSR gitrust&lt;br/&gt;+ Extension(hooks)
4735 + Main-&gt;&gt;Builder: .build().await
4736 + Builder-&gt;&gt;DB: Connexion pool
4737 + Builder-&gt;&gt;DB: Migrations rustwarden-core
4738 + Builder-&gt;&gt;SMTP: EmailQueueProcessor.start()
4739 + Note over SMTP: Worker de fond : dépile&lt;br/&gt;email_queue toutes les 30s
4740 + Builder--&gt;&gt;Main: RustwardenApp
4741 +
4742 + Main-&gt;&gt;Mig: run_migrations(app.database())
4743 + Mig-&gt;&gt;DB: core_migrations() + gitrust_migrations()
4744 + Note over DB: Tables: users, resources,&lt;br/&gt;repositories, ssh_keys,&lt;br/&gt;teams, team_members,&lt;br/&gt;team_repository_access
4745 + Mig--&gt;&gt;Main: Ok
4746 +
4747 + Main-&gt;&gt;Main: tokio::spawn(SSH server :2222)
4748 +
4749 + alt CI_ENABLED=true
4750 + Main-&gt;&gt;Main: CiWorker::start(config.ci)
4751 + Note over Main: Vérifie dagger dans PATH&lt;br/&gt;Si CI_SBOM_ENABLED: vérifie syft&lt;br/&gt;Si CI_DTRACK_ENABLED: vérifie API DT
4752 + Main-&gt;&gt;Main: tokio::spawn(CiWorker loop)
4753 + Note over Main: Écoute mpsc channel&lt;br/&gt;pour les jobs CI
4754 + end
4755 +
4756 + Main-&gt;&gt;App: app.run().await
4757 + Note over App: HTTP :4000 démarre
4758 +</pre>
4759 +
4760 +<hr>
4761 +<h2 id="principes-de-conception"><a class="header" href="#principes-de-conception">Principes de conception</a></h2>
4762 +<h3 id="séparation-framework--métier-gitrust"><a class="header" href="#séparation-framework--métier-gitrust">Séparation framework / métier gitrust</a></h3>
4763 +<p>Gitrust est construit <strong>au-dessus</strong> de rustwarden-core, un framework Rust d’authentification et de gestion d’utilisateurs. Cette séparation est intentionnelle :</p>
4764 +<ul>
4765 +<li><strong>rustwarden-core</strong> gère : auth JWT, sessions, users, roles génériques, i18n, SMTP, OAuth, audit log générique.</li>
4766 +<li><strong>gitrust-core</strong> gère : tout ce qui est spécifique à la forge Git — dépôts, clés SSH, équipes, permissions RBAC à 4 niveaux, CI, import de dépôts.</li>
4767 +</ul>
4768 +<p>La règle fondamentale : <strong>ne jamais modifier <code>crates/rustwarden-core/</code></strong>. Toute extension passe par des wrappers, des hooks (<code>RustwardenHooks</code>) ou des traits implémentés côté gitrust.</p>
4769 +<h3 id="mode-headless"><a class="header" href="#mode-headless">Mode headless</a></h3>
4770 +<p>gitrust-web opère en mode <code>headless()</code> : les pages UI standard de rustwarden (login, register, settings) sont <strong>désactivées</strong> et réimplémentées entièrement dans <code>gitrust-web/templates/</code>. Cela permet un design cohérent (sidebar Git, DaisyUI) sans compromis avec l’UI générique du framework.</p>
4771 +<h3 id="ssr--htmx-zéro-cdn"><a class="header" href="#ssr--htmx-zéro-cdn">SSR + HTMX, zéro CDN</a></h3>
4772 +<p>L’interface est rendue côté serveur via Askama (templates Rust compilés). HTMX gère les interactions dynamiques (mises à jour partielles de page, SSE pour les notifications et les logs CI). Aucun asset externe : tout CSS/JS est servi depuis <code>static/</code> — imposé par la Content Security Policy du framework.</p>
4773 +<h3 id="bare-repos-sur-le-système-de-fichiers"><a class="header" href="#bare-repos-sur-le-système-de-fichiers">Bare repos sur le système de fichiers</a></h3>
4774 +<p>gitrust-git est <strong>découplé de la base de données</strong>. Les opérations Git (navigation d’arbre, lecture de blobs, pack protocol) travaillent directement sur les bare repos (<code>{GIT_REPOS_BASE_PATH}/{owner}/{slug}.git/</code>) via libgit2. La base ne stocke que les métadonnées (nom, description, visibilité, ownership). Ce découplage permet de remplacer ou tester gitrust-git indépendamment.</p>
4775 +<h3 id="ci-hybride--dagger-comme-abstraction-dexécution"><a class="header" href="#ci-hybride--dagger-comme-abstraction-dexécution">CI hybride : Dagger comme abstraction d’exécution</a></h3>
4776 +<p>Plutôt que d’implémenter un runner CI from scratch, gitrust délègue l’exécution à <strong>Dagger</strong>, qui garantit l’isolation (containers), la reproductibilité (cache) et la portabilité (local ou runner distant via SSH+rsync). Le <code>CiWorker</code> est une tâche Tokio dans le processus principal — pas un daemon séparé — ce qui simplifie le déploiement (un seul binaire).</p>
4777 +<hr>
4778 +<h2 id="pour-aller-plus-loin"><a class="header" href="#pour-aller-plus-loin">Pour aller plus loin</a></h2>
4779 +<ul>
4780 +<li>Référence structurelle complète (tables de modules, routes, dépendances) : <code>developer_manual/reference/architecture-crates.md</code></li>
4781 +<li>Diagrammes de séquence détaillés (clone SSH, push, permissions) : <code>developer_manual/explanation/flux-requetes.md</code></li>
4782 +<li>Règles de code et gates QA : <code>developer_manual/reference/regles-qa-anssi.md</code></li>
4783 +</ul>
4784 +<div style="break-before: page; page-break-before: always;"></div>
4785 +<h1 id="flux-de-requêtes"><a class="header" href="#flux-de-requêtes">Flux de requêtes</a></h1>
4786 +<p>Diagrammes de séquence couvrant les opérations principales de gitrust : création de dépôt, clone et push SSH, enregistrement de clé SSH, résolution des permissions, navigation web, inscription utilisateur.</p>
4787 +<h2 id="1-création-dun-dépôt-web"><a class="header" href="#1-création-dun-dépôt-web">1. Création d’un dépôt (Web)</a></h2>
4788 +<pre class="mermaid">sequenceDiagram
4789 + actor User as Utilisateur
4790 + participant Web as gitrust-web
4791 + participant RepoSvc as RepositoryService
4792 + participant ResSvc as ResourceService
4793 + participant DB as PostgreSQL
4794 + participant Git as gitrust-git
4795 + participant FS as Système de fichiers
4796 +
4797 + User-&gt;&gt;Web: POST /new {name, description}
4798 + Web-&gt;&gt;Web: Extraire user_id (session JWT)
4799 +
4800 + Web-&gt;&gt;RepoSvc: create(db, owner_id, username, base_path, input)
4801 + RepoSvc-&gt;&gt;RepoSvc: RepoSlug::from_name(input.name)
4802 + RepoSvc-&gt;&gt;DB: SELECT ... WHERE owner_id AND slug
4803 + DB--&gt;&gt;RepoSvc: None (pas de doublon)
4804 +
4805 + RepoSvc-&gt;&gt;RepoSvc: compute_disk_path(base, owner, slug)
4806 + Note over RepoSvc: Validation anti path-traversal
4807 +
4808 + RepoSvc-&gt;&gt;ResSvc: register(db, "repository", repo_id, owner_id)
4809 + ResSvc-&gt;&gt;DB: INSERT INTO resources
4810 + DB--&gt;&gt;ResSvc: Ok
4811 +
4812 + RepoSvc-&gt;&gt;DB: INSERT INTO repositories
4813 + DB--&gt;&gt;RepoSvc: repository::Model
4814 +
4815 + RepoSvc--&gt;&gt;Web: RepositoryOutput
4816 +
4817 + Web-&gt;&gt;Git: BareRepo::init(disk_path)
4818 + Git-&gt;&gt;FS: git init --bare
4819 + FS--&gt;&gt;Git: Ok
4820 + Git--&gt;&gt;Web: Ok
4821 +
4822 + Web--&gt;&gt;User: 302 Redirect /{owner}/{slug}
4823 +</pre>
4824 +
4825 +<h2 id="2-clone-ssh-git-clone"><a class="header" href="#2-clone-ssh-git-clone">2. Clone SSH (git clone)</a></h2>
4826 +<pre class="mermaid">sequenceDiagram
4827 + actor Dev as Développeur
4828 + participant Client as Git CLI
4829 + participant SSH as gitrust-ssh
4830 + participant Auth as SshKeyService
4831 + participant Access as AccessService
4832 + participant Git as gitrust-git
4833 + participant DB as PostgreSQL
4834 + participant FS as Bare repo (.git)
4835 +
4836 + Dev-&gt;&gt;Client: git clone ssh://git@host:2222/alice/my-repo.git
4837 + Client-&gt;&gt;SSH: Connexion TCP :2222
4838 + SSH--&gt;&gt;Client: Banner SSH + échange clés
4839 +
4840 + Client-&gt;&gt;SSH: Auth publickey (signature)
4841 + SSH-&gt;&gt;Auth: find_by_fingerprint(db, fingerprint)
4842 + Auth-&gt;&gt;DB: SELECT FROM ssh_keys WHERE fingerprint = ?
4843 + DB--&gt;&gt;Auth: ssh_key::Model {user_id, ...}
4844 + Auth--&gt;&gt;SSH: user_id
4845 +
4846 + SSH-&gt;&gt;Auth: update_last_used(db, key_id)
4847 + Auth-&gt;&gt;DB: UPDATE ssh_keys SET last_used_at = now()
4848 +
4849 + SSH--&gt;&gt;Client: Auth OK
4850 +
4851 + Client-&gt;&gt;SSH: exec "git-upload-pack 'alice/my-repo.git'"
4852 + SSH-&gt;&gt;SSH: CommandHandler::parse("git-upload-pack alice/my-repo.git")
4853 + Note over SSH: Extraction owner=alice, repo=my-repo
4854 +
4855 + SSH-&gt;&gt;Access: effective_role(db, user_id, repo_id)
4856 + Access-&gt;&gt;DB: Check ownership + shares + teams
4857 + DB--&gt;&gt;Access: Role::Developer
4858 + Access--&gt;&gt;SSH: can_read = true
4859 +
4860 + SSH-&gt;&gt;Git: pack_protocol::advertise_refs(repo_path)
4861 + Git-&gt;&gt;FS: Lecture refs
4862 + FS--&gt;&gt;Git: refs/heads/main, ...
4863 + Git--&gt;&gt;SSH: advertise output
4864 +
4865 + SSH--&gt;&gt;Client: refs advertisement
4866 + Client-&gt;&gt;SSH: want/have negotiation
4867 +
4868 + SSH-&gt;&gt;Git: pack_protocol::serve_pack(repo_path, wants, haves)
4869 + Git-&gt;&gt;FS: Pack objects
4870 + FS--&gt;&gt;Git: pack data
4871 + Git--&gt;&gt;SSH: pack stream
4872 +
4873 + SSH--&gt;&gt;Client: pack data
4874 + Client--&gt;&gt;Dev: Dépôt cloné avec succès
4875 +</pre>
4876 +
4877 +<h2 id="3-push-ssh-git-push"><a class="header" href="#3-push-ssh-git-push">3. Push SSH (git push)</a></h2>
4878 +<pre class="mermaid">sequenceDiagram
4879 + actor Dev as Développeur
4880 + participant Client as Git CLI
4881 + participant SSH as gitrust-ssh
4882 + participant Access as AccessService
4883 + participant Git as gitrust-git
4884 + participant Hooks as gitrust-hooks
4885 + participant DB as PostgreSQL
4886 + participant FS as Bare repo (.git)
4887 +
4888 + Note over Client,SSH: Session SSH déjà authentifiée
4889 +
4890 + Client-&gt;&gt;SSH: exec "git-receive-pack 'alice/my-repo.git'"
4891 + SSH-&gt;&gt;SSH: CommandHandler::parse(...)
4892 + Note over SSH: Extraction owner=alice, repo=my-repo
4893 +
4894 + SSH-&gt;&gt;Access: effective_role(db, user_id, repo_id)
4895 + Access-&gt;&gt;DB: Check ownership + shares + teams
4896 + DB--&gt;&gt;Access: Role::Developer
4897 + Access--&gt;&gt;SSH: can_push = true
4898 +
4899 + SSH-&gt;&gt;Git: pack_protocol::advertise_refs(repo_path)
4900 + Git-&gt;&gt;FS: Lecture refs
4901 + Git--&gt;&gt;SSH: refs advertisement
4902 +
4903 + SSH--&gt;&gt;Client: refs
4904 + Client-&gt;&gt;SSH: pack data + commands
4905 +
4906 + SSH-&gt;&gt;Git: pack_protocol::serve_pack(repo_path, receive-pack)
4907 + Git-&gt;&gt;FS: Écriture objets + update refs
4908 + FS--&gt;&gt;Git: Ok
4909 + Git--&gt;&gt;SSH: Ok
4910 +
4911 + SSH-&gt;&gt;DB: UPDATE repositories SET is_empty = false, updated_at = now()
4912 +
4913 + SSH--&gt;&gt;Client: Push OK
4914 + Client--&gt;&gt;Dev: Push réussi
4915 +</pre>
4916 +
4917 +<h2 id="4-enregistrement-dune-clé-ssh"><a class="header" href="#4-enregistrement-dune-clé-ssh">4. Enregistrement d’une clé SSH</a></h2>
4918 +<pre class="mermaid">sequenceDiagram
4919 + actor User as Utilisateur
4920 + participant Web as gitrust-web
4921 + participant Svc as SshKeyService
4922 + participant DB as PostgreSQL
4923 +
4924 + User-&gt;&gt;Web: POST /settings/keys {title, key_data}
4925 + Web-&gt;&gt;Web: Extraire user_id (session)
4926 +
4927 + Web-&gt;&gt;Svc: create(db, user_id, input)
4928 +
4929 + Svc-&gt;&gt;Svc: parse_public_key(key_data)
4930 + Note over Svc: Extraire type + décoder base64
4931 +
4932 + Svc-&gt;&gt;Svc: validate_key_type_and_size(type, bytes)
4933 + Note over Svc: ed25519 OK&lt;br/&gt;RSA &gt;= 4096 bits&lt;br/&gt;ecdsa-p256/p384 OK
4934 +
4935 + Svc-&gt;&gt;Svc: compute_fingerprint(bytes)
4936 + Note over Svc: SHA256(key_bytes) -&gt; base64-no-pad
4937 +
4938 + Svc-&gt;&gt;DB: SELECT FROM ssh_keys WHERE fingerprint = ?
4939 + DB--&gt;&gt;Svc: None (pas de doublon)
4940 +
4941 + Svc-&gt;&gt;DB: INSERT INTO ssh_keys
4942 + DB--&gt;&gt;Svc: ssh_key::Model
4943 +
4944 + Svc--&gt;&gt;Web: SshKeyOutput
4945 + Web--&gt;&gt;User: 200 Clé ajoutée (fingerprint affiché)
4946 +</pre>
4947 +
4948 +<h2 id="5-résolution-des-permissions-accessservice"><a class="header" href="#5-résolution-des-permissions-accessservice">5. Résolution des permissions (AccessService)</a></h2>
4949 +<pre class="mermaid">sequenceDiagram
4950 + participant Caller as Handler / SSH Session
4951 + participant AS as AccessService
4952 + participant RS as ResourceService
4953 + participant DB as PostgreSQL
4954 +
4955 + Caller-&gt;&gt;AS: effective_role(db, user_id, repo_id)
4956 +
4957 + AS-&gt;&gt;RS: effective_permission(db, user_id, "repository", repo_id)
4958 + RS-&gt;&gt;DB: SELECT FROM resources WHERE type AND id
4959 + DB--&gt;&gt;RS: resource {owner_id, is_public}
4960 +
4961 + alt user_id == owner_id
4962 + RS--&gt;&gt;AS: "owner"
4963 + else Share exists
4964 + RS-&gt;&gt;DB: SELECT FROM resource_shares WHERE resource AND user
4965 + DB--&gt;&gt;RS: share {permission_level}
4966 + RS--&gt;&gt;AS: permission_level
4967 + else Resource is public
4968 + RS--&gt;&gt;AS: "read"
4969 + else No access
4970 + RS--&gt;&gt;AS: None
4971 + end
4972 +
4973 + AS-&gt;&gt;AS: Role::from_permission(individual_level)
4974 +
4975 + AS-&gt;&gt;DB: SELECT team_members + team_repository_access&lt;br/&gt;WHERE user_id AND repository_id
4976 + DB--&gt;&gt;AS: Vec&lt;team_permission&gt;
4977 +
4978 + AS-&gt;&gt;AS: team_role = max(team_permissions)
4979 + AS-&gt;&gt;AS: effective = max(individual_role, team_role)
4980 +
4981 + AS--&gt;&gt;Caller: Role (Reader / Developer / Maintainer / Owner)
4982 +</pre>
4983 +
4984 +<h2 id="6-navigation-dans-un-dépôt-web"><a class="header" href="#6-navigation-dans-un-dépôt-web">6. Navigation dans un dépôt (Web)</a></h2>
4985 +<pre class="mermaid">sequenceDiagram
4986 + actor User as Utilisateur
4987 + participant Web as gitrust-web
4988 + participant Ext as RepoExtractor
4989 + participant Access as AccessService
4990 + participant Git as gitrust-git
4991 + participant DB as PostgreSQL
4992 + participant FS as Bare repo
4993 +
4994 + User-&gt;&gt;Web: GET /alice/my-repo/tree/main/src
4995 + Web-&gt;&gt;Ext: RepoContext::extract(owner=alice, repo=my-repo, ref=main, path=src)
4996 +
4997 + Ext-&gt;&gt;DB: SELECT user WHERE username = 'alice'
4998 + DB--&gt;&gt;Ext: user {id}
4999 +
5000 + Ext-&gt;&gt;DB: SELECT repository WHERE owner_id AND slug
5001 + DB--&gt;&gt;Ext: repository::Model
5002 +
5003 + Ext-&gt;&gt;Access: effective_role(db, visitor_id, repo_id)
5004 + Access--&gt;&gt;Ext: Role::Reader
5005 +
5006 + Ext--&gt;&gt;Web: RepoContext {repo, role, ref, path}
5007 +
5008 + Web-&gt;&gt;Git: tree_browser::list_tree(repo_path, "main", "src")
5009 + Git-&gt;&gt;FS: Resolve ref main -&gt; commit -&gt; tree -&gt; src/
5010 + FS--&gt;&gt;Git: Vec&lt;TreeEntry&gt;
5011 +
5012 + Git--&gt;&gt;Web: entries (fichiers + dossiers)
5013 +
5014 + Web-&gt;&gt;Git: readme::find_readme(repo_path, "main", "src")
5015 + Git-&gt;&gt;FS: Cherche README.md, README, readme.md
5016 + FS--&gt;&gt;Git: Option&lt;BlobContent&gt;
5017 + Git--&gt;&gt;Web: Option&lt;readme_content&gt;
5018 +
5019 + Web-&gt;&gt;Web: Render template tree.html
5020 + Web--&gt;&gt;User: HTML (arbre + README)
5021 +</pre>
5022 +
5023 +<h2 id="7-inscription-utilisateur--création-répertoire"><a class="header" href="#7-inscription-utilisateur--création-répertoire">7. Inscription utilisateur + création répertoire</a></h2>
5024 +<pre class="mermaid">sequenceDiagram
5025 + actor User as Nouvel utilisateur
5026 + participant Web as rustwarden-core (auth)
5027 + participant Hook as GitrustHooks
5028 + participant DB as PostgreSQL
5029 + participant FS as Système de fichiers
5030 +
5031 + User-&gt;&gt;Web: POST /register {username, email, password}
5032 + Web-&gt;&gt;DB: INSERT INTO users
5033 + DB--&gt;&gt;Web: user {id, username}
5034 +
5035 + Web-&gt;&gt;Hook: on_user_registered(db, user_id, username)
5036 + Hook-&gt;&gt;Hook: Valider username (anti path-traversal)
5037 + Hook-&gt;&gt;FS: create_dir_all(repos_base_path / username)
5038 + FS--&gt;&gt;Hook: Ok
5039 + Hook--&gt;&gt;Web: Ok
5040 +
5041 + Web--&gt;&gt;User: 302 Redirect /login
5042 +</pre>
5043 +
5044 +<div style="break-before: page; page-break-before: always;"></div>
5045 +<h1 id="modèle-de-permissions-rbac"><a class="header" href="#modèle-de-permissions-rbac">Modèle de permissions RBAC</a></h1>
5046 +<blockquote>
5047 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
5048 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
5049 +</blockquote>
5050 +<h2 id="todo-66"><a class="header" href="#todo-66">TODO</a></h2>
5051 +<ul>
5052 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
5053 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
5054 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
5055 +</ul>
5056 +<div style="break-before: page; page-break-before: always;"></div>
5057 +<h1 id="fonctionnement-du-2fa"><a class="header" href="#fonctionnement-du-2fa">Fonctionnement du 2FA</a></h1>
5058 +<blockquote>
5059 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
5060 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
5061 +</blockquote>
5062 +<h2 id="todo-67"><a class="header" href="#todo-67">TODO</a></h2>
5063 +<ul>
5064 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
5065 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
5066 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
5067 +</ul>
5068 +<div style="break-before: page; page-break-before: always;"></div>
5069 +<h1 id="hiérarchie-des-labels"><a class="header" href="#hiérarchie-des-labels">Hiérarchie des labels</a></h1>
5070 +<blockquote>
5071 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
5072 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
5073 +</blockquote>
5074 +<h2 id="todo-68"><a class="header" href="#todo-68">TODO</a></h2>
5075 +<ul>
5076 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
5077 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
5078 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
5079 +</ul>
5080 +<div style="break-before: page; page-break-before: always;"></div>
5081 +<h1 id="ci-dagger--easy-mode-vs-power-mode-1"><a class="header" href="#ci-dagger--easy-mode-vs-power-mode-1">CI Dagger : Easy Mode vs Power Mode</a></h1>
5082 +<blockquote>
5083 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
5084 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
5085 +</blockquote>
5086 +<h2 id="todo-69"><a class="header" href="#todo-69">TODO</a></h2>
5087 +<ul>
5088 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
5089 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
5090 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
5091 +</ul>
5092 +<div style="break-before: page; page-break-before: always;"></div>
5093 +<h1 id="décisions-ui-htmx-daisyui"><a class="header" href="#décisions-ui-htmx-daisyui">Décisions UI (HTMX, DaisyUI)</a></h1>
5094 +<blockquote>
5095 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
5096 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
5097 +</blockquote>
5098 +<h2 id="todo-70"><a class="header" href="#todo-70">TODO</a></h2>
5099 +<ul>
5100 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
5101 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
5102 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
5103 +</ul>
5104 +<div style="break-before: page; page-break-before: always;"></div>
5105 +<h1 id="patron-worker-async"><a class="header" href="#patron-worker-async">Patron worker async</a></h1>
5106 +<blockquote>
5107 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
5108 +<p>Consultez <a href=".plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
5109 +</blockquote>
5110 +<h2 id="todo-71"><a class="header" href="#todo-71">TODO</a></h2>
5111 +<ul>
5112 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="CLAUDE.html">CLAUDE.md</a>)</li>
5113 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
5114 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
5115 +</ul>
5116 +<div style="break-before: page; page-break-before: always;"></div>
5117 +<h1 id="bibliothèque-de-templates-gitrust"><a class="header" href="#bibliothèque-de-templates-gitrust">Bibliothèque de templates gitrust</a></h1>
5118 +<p>Bienvenue dans l’atelier gitrust. Chaque fichier ici est <strong>standalone et copiable tel quel</strong> — un fichier, un cas d’usage. Les commentaires internes suffisent à l’adapter. Pour les explications pédagogiques, référez-vous aux manuels qui pointent vers ces templates.</p>
5119 +<blockquote>
5120 +<p><strong>Convention</strong> : copiez le fichier qui correspond à votre cas, adaptez les valeurs marquées <code>CHANGE_ME</code>, puis supprimez les commentaires si vous le souhaitez. Ne modifiez pas les fichiers dans ce dépôt — travaillez toujours sur une copie locale.</p>
5121 +</blockquote>
5122 +<hr>
5123 +<h2 id="fichiers-denvironnement-env"><a class="header" href="#fichiers-denvironnement-env">Fichiers d’environnement (<code>env/</code>)</a></h2>
5124 +<div class="table-wrapper">
5125 +<table>
5126 +<thead>
5127 +<tr><th>Fichier</th><th>Cas d’usage</th></tr>
5128 +</thead>
5129 +<tbody>
5130 +<tr><td><a href="template/env/dev-local.env"><code>env/dev-local.env</code></a></td><td>Instance de développement local sur <code>localhost:4000</code> — PostgreSQL local, pas de TLS, debug activé</td></tr>
5131 +<tr><td><a href="template/env/production-mono-machine.env"><code>env/production-mono-machine.env</code></a></td><td>Production mono-machine derrière reverse-proxy — PostgreSQL, SMTP, Redis sessions, TLS délégué</td></tr>
5132 +<tr><td><a href="template/env/production-ci-heavy.env"><code>env/production-ci-heavy.env</code></a></td><td>Production avec CI runners distants intensifs — tuning pool de connexions, rate limiting ajusté</td></tr>
5133 +<tr><td><a href="template/env/tests-e2e.env"><code>env/tests-e2e.env</code></a></td><td>Environnement E2E Playwright — base éphémère, seed de données, SMTP mock</td></tr>
5134 +</tbody>
5135 +</table>
5136 +</div>
5137 +<hr>
5138 +<h2 id="stacks-docker-docker"><a class="header" href="#stacks-docker-docker">Stacks Docker (<code>docker/</code>)</a></h2>
5139 +<div class="table-wrapper">
5140 +<table>
5141 +<thead>
5142 +<tr><th>Fichier</th><th>Cas d’usage</th></tr>
5143 +</thead>
5144 +<tbody>
5145 +<tr><td><a href="template/docker/docker-compose.minimal.yml"><code>docker/docker-compose.minimal.yml</code></a></td><td>Stack minimale : gitrust + PostgreSQL uniquement — idéale pour l’évaluation et les tutoriels</td></tr>
5146 +<tr><td><a href="template/docker/docker-compose.production.yml"><code>docker/docker-compose.production.yml</code></a></td><td>Stack production : gitrust + PostgreSQL + Redis sessions + relay SMTP Postfix</td></tr>
5147 +<tr><td><a href="template/docker/docker-compose.with-ci-runner.yml"><code>docker/docker-compose.with-ci-runner.yml</code></a></td><td>Stack production + CI runner Dagger en sidecar — pour instances avec builds fréquents</td></tr>
5148 +<tr><td><a href="template/docker/podman-quadlet.container"><code>docker/podman-quadlet.container</code></a></td><td>Alternative Podman Quadlet — déploiement rootless systemd-native sans Docker daemon</td></tr>
5149 +</tbody>
5150 +</table>
5151 +</div>
5152 +<hr>
5153 +<h2 id="reverse-proxy-reverse-proxy"><a class="header" href="#reverse-proxy-reverse-proxy">Reverse-proxy (<code>reverse-proxy/</code>)</a></h2>
5154 +<div class="table-wrapper">
5155 +<table>
5156 +<thead>
5157 +<tr><th>Fichier</th><th>Cas d’usage</th></tr>
5158 +</thead>
5159 +<tbody>
5160 +<tr><td><a href="template/reverse-proxy/nginx-tls.conf"><code>reverse-proxy/nginx-tls.conf</code></a></td><td>Nginx avec TLS Let’s Encrypt — virtual host gitrust, headers de sécurité, proxy WebSocket SSE</td></tr>
5161 +<tr><td><a href="template/reverse-proxy/caddy-Caddyfile"><code>reverse-proxy/caddy-Caddyfile</code></a></td><td>Caddyfile — TLS automatique, configuration minimale, idéal pour les petites instances</td></tr>
5162 +<tr><td><a href="template/reverse-proxy/traefik-dynamic.yml"><code>reverse-proxy/traefik-dynamic.yml</code></a></td><td>Traefik config dynamique — intégration labels Docker, middlewares rate-limit et auth</td></tr>
5163 +</tbody>
5164 +</table>
5165 +</div>
5166 +<hr>
5167 +<h2 id="systemd-systemd"><a class="header" href="#systemd-systemd">Systemd (<code>systemd/</code>)</a></h2>
5168 +<div class="table-wrapper">
5169 +<table>
5170 +<thead>
5171 +<tr><th>Fichier</th><th>Cas d’usage</th></tr>
5172 +</thead>
5173 +<tbody>
5174 +<tr><td><a href="template/systemd/gitrust.service"><code>systemd/gitrust.service</code></a></td><td>Service systemd avec hardening AppArmor/seccomp — pour déploiement binaire natif sans Docker</td></tr>
5175 +<tr><td><a href="template/systemd/gitrust-backup.timer"><code>systemd/gitrust-backup.timer</code></a></td><td>Timer systemd de sauvegarde quotidienne — déclenche <code>backup.sh</code> à 2h00 avec journalisation</td></tr>
5176 +</tbody>
5177 +</table>
5178 +</div>
5179 +<hr>
5180 +<h2 id="configurations-ci-gitrust-ciyml-ci"><a class="header" href="#configurations-ci-gitrust-ciyml-ci">Configurations CI (<code>.gitrust-ci.yml</code>) (<code>ci/</code>)</a></h2>
5181 +<div class="table-wrapper">
5182 +<table>
5183 +<thead>
5184 +<tr><th>Fichier</th><th>Cas d’usage</th></tr>
5185 +</thead>
5186 +<tbody>
5187 +<tr><td><a href="template/ci/rust.gitrust-ci.yml"><code>ci/rust.gitrust-ci.yml</code></a></td><td>Pipeline CI pour projet Rust — fmt, clippy, test, audit de dépendances, SBOM</td></tr>
5188 +<tr><td><a href="template/ci/go.gitrust-ci.yml"><code>ci/go.gitrust-ci.yml</code></a></td><td>Pipeline CI pour projet Go — vet, staticcheck, test, build multi-arch</td></tr>
5189 +<tr><td><a href="template/ci/python.gitrust-ci.yml"><code>ci/python.gitrust-ci.yml</code></a></td><td>Pipeline CI pour projet Python — ruff, mypy, pytest, packaging wheel</td></tr>
5190 +<tr><td><a href="template/ci/node.gitrust-ci.yml"><code>ci/node.gitrust-ci.yml</code></a></td><td>Pipeline CI pour projet Node.js — ESLint, Vitest, build, audit npm</td></tr>
5191 +<tr><td><a href="template/ci/dagger-power-mode/dagger.json"><code>ci/dagger-power-mode/dagger.json</code></a></td><td>Squelette Dagger Power Mode — module Go minimal à étendre pour pipelines complexes</td></tr>
5192 +<tr><td><a href="template/ci/dagger-power-mode/main.go"><code>ci/dagger-power-mode/main.go</code></a></td><td>Module Dagger Go — fonctions build/test/publish prêtes à adapter</td></tr>
5193 +</tbody>
5194 +</table>
5195 +</div>
5196 +<hr>
5197 +<h2 id="scripts-de-sauvegarde-et-restauration-backup"><a class="header" href="#scripts-de-sauvegarde-et-restauration-backup">Scripts de sauvegarde et restauration (<code>backup/</code>)</a></h2>
5198 +<div class="table-wrapper">
5199 +<table>
5200 +<thead>
5201 +<tr><th>Fichier</th><th>Cas d’usage</th></tr>
5202 +</thead>
5203 +<tbody>
5204 +<tr><td><a href="template/backup/backup.sh"><code>backup/backup.sh</code></a></td><td>Sauvegarde complète — <code>pg_dump</code> + <code>rsync</code> des dépôts bare + copie des clés SSH host</td></tr>
5205 +<tr><td><a href="template/backup/restore.sh"><code>backup/restore.sh</code></a></td><td>Restauration complète depuis une archive de sauvegarde — avec vérification d’intégrité</td></tr>
5206 +</tbody>
5207 +</table>
5208 +</div>
5209 +<hr>
5210 +<h2 id="clients-api-dexemple-api-clients"><a class="header" href="#clients-api-dexemple-api-clients">Clients API d’exemple (<code>api-clients/</code>)</a></h2>
5211 +<p>Ces exemples illustrent l’authentification par Personal Access Token (PAT) et les opérations CRUD de base sur l’API REST gitrust v1.</p>
5212 +<div class="table-wrapper">
5213 +<table>
5214 +<thead>
5215 +<tr><th>Fichier</th><th>Cas d’usage</th></tr>
5216 +</thead>
5217 +<tbody>
5218 +<tr><td><a href="template/api-clients/python-create-repo.py"><code>api-clients/python-create-repo.py</code></a></td><td>Client Python — créer un dépôt via l’API v1 avec <code>httpx</code> et PAT</td></tr>
5219 +<tr><td><a href="template/api-clients/rust-list-repos.rs"><code>api-clients/rust-list-repos.rs</code></a></td><td>Client Rust — lister les dépôts avec pagination via <code>reqwest</code> et PAT</td></tr>
5220 +<tr><td><a href="template/api-clients/curl-pat-auth.sh"><code>api-clients/curl-pat-auth.sh</code></a></td><td>Shell curl — exemples d’authentification PAT, GET/POST/DELETE sur les endpoints principaux</td></tr>
5221 +</tbody>
5222 +</table>
5223 +</div>
5224 +<hr>
5225 +<h2 id="scripts-de-migration-migration"><a class="header" href="#scripts-de-migration-migration">Scripts de migration (<code>migration/</code>)</a></h2>
5226 +<div class="table-wrapper">
5227 +<table>
5228 +<thead>
5229 +<tr><th>Fichier</th><th>Cas d’usage</th></tr>
5230 +</thead>
5231 +<tbody>
5232 +<tr><td><a href="template/migration/from-gitea.sh"><code>migration/from-gitea.sh</code></a></td><td>Import en masse depuis Gitea — dépôts, membres, issues via le worker d’import gitrust</td></tr>
5233 +<tr><td><a href="template/migration/from-forgejo.sh"><code>migration/from-forgejo.sh</code></a></td><td>Import en masse depuis Forgejo — même mécanique, adaptée à l’API Forgejo</td></tr>
5234 +</tbody>
5235 +</table>
5236 +</div>
5237 +<hr>
5238 +<h2 id="comment-utiliser-ces-templates-depuis-les-manuels"><a class="header" href="#comment-utiliser-ces-templates-depuis-les-manuels">Comment utiliser ces templates depuis les manuels</a></h2>
5239 +<p>Les manuels narratifs pointent vers ces fichiers depuis leurs sections how-to. Par exemple :</p>
5240 +<ul>
5241 +<li><code>administration_manual/how-to/configurer-smtp.md</code> → <em>« Copiez <code>template/env/production-mono-machine.env</code> puis… »</em></li>
5242 +<li><code>administration_manual/tutorials/01-installation-docker.md</code> → <em>« La stack s’appuie sur <code>template/docker/docker-compose.minimal.yml</code> »</em></li>
5243 +<li><code>developer_manual/how-to/implementer-endpoint-api.md</code> → <em>« Testez avec <code>template/api-clients/curl-pat-auth.sh</code> »</em></li>
5244 +</ul>
5245 +<p>Les templates ne contiennent pas d’explication pédagogique — tout le contexte se trouve dans les manuels.</p>
5246 +
5247 + </main>
5248 +
5249 + <nav class="nav-wrapper" aria-label="Page navigation">
5250 + <!-- Mobile navigation buttons -->
5251 +
5252 +
5253 + <div style="clear: both"></div>
5254 + </nav>
5255 + </div>
5256 + </div>
5257 +
5258 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
5259 +
5260 + </nav>
5261 +
5262 + </div>
5263 +
5264 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
5265 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
5266 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
5267 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
5268 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
5269 +
5270 +
5271 +
5272 + <script>
5273 + window.playground_copyable = true;
5274 + </script>
5275 +
5276 +
5277 + <script src="elasticlunr-ef4e11c1.min.js"></script>
5278 + <script src="mark-09e88c2c.min.js"></script>
5279 + <script src="searcher-c2a407aa.js"></script>
5280 +
5281 + <script src="clipboard-1626706a.min.js"></script>
5282 + <script src="highlight-abc7f01d.js"></script>
5283 + <script src="book-a0b12cfe.js"></script>
5284 +
5285 + <!-- Custom JS scripts -->
5286 + <script src="theme/mermaid-eefea253.min.js"></script>
5287 + <script src="theme/mermaid-init-ccf746f1.js"></script>
5288 +
5289 + <script>
5290 + window.addEventListener('load', function() {
5291 + window.setTimeout(window.print, 100);
5292 + });
5293 + </script>
5294 +
5295 +
5296 + </div>
5297 + </body>
5298 +</html>
A book/searcher-c2a407aa.js
+555 -0
@@ -0,0 +1,555 @@
1 +'use strict';
2 +
3 +/* global Mark, elasticlunr, path_to_root */
4 +
5 +window.search = window.search || {};
6 +(function search() {
7 + // Search functionality
8 + //
9 + // You can use !hasFocus() to prevent keyhandling in your key
10 + // event handlers while the user is typing their search.
11 +
12 + if (!Mark || !elasticlunr) {
13 + return;
14 + }
15 +
16 + // eslint-disable-next-line max-len
17 + // IE 11 Compatibility from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
18 + if (!String.prototype.startsWith) {
19 + String.prototype.startsWith = function(search, pos) {
20 + return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
21 + };
22 + }
23 +
24 + const search_wrap = document.getElementById('mdbook-search-wrapper'),
25 + searchbar_outer = document.getElementById('mdbook-searchbar-outer'),
26 + searchbar = document.getElementById('mdbook-searchbar'),
27 + searchresults = document.getElementById('mdbook-searchresults'),
28 + searchresults_outer = document.getElementById('mdbook-searchresults-outer'),
29 + searchresults_header = document.getElementById('mdbook-searchresults-header'),
30 + searchicon = document.getElementById('mdbook-search-toggle'),
31 + content = document.getElementById('mdbook-content'),
32 +
33 + // SVG text elements don't render if inside a <mark> tag.
34 + mark_exclude = ['text'],
35 + marker = new Mark(content),
36 + URL_SEARCH_PARAM = 'search',
37 + URL_MARK_PARAM = 'highlight';
38 +
39 + let current_searchterm = '',
40 + doc_urls = [],
41 + search_options = {
42 + bool: 'AND',
43 + expand: true,
44 + fields: {
45 + title: {boost: 1},
46 + body: {boost: 1},
47 + breadcrumbs: {boost: 0},
48 + },
49 + },
50 + searchindex = null,
51 + results_options = {
52 + teaser_word_count: 30,
53 + limit_results: 30,
54 + },
55 + teaser_count = 0;
56 +
57 + function hasFocus() {
58 + return searchbar === document.activeElement;
59 + }
60 +
61 + function removeChildren(elem) {
62 + while (elem.firstChild) {
63 + elem.removeChild(elem.firstChild);
64 + }
65 + }
66 +
67 + // Helper to parse a url into its building blocks.
68 + function parseURL(url) {
69 + const a = document.createElement('a');
70 + a.href = url;
71 + return {
72 + source: url,
73 + protocol: a.protocol.replace(':', ''),
74 + host: a.hostname,
75 + port: a.port,
76 + params: (function() {
77 + const ret = {};
78 + const seg = a.search.replace(/^\?/, '').split('&');
79 + for (const part of seg) {
80 + if (!part) {
81 + continue;
82 + }
83 + const s = part.split('=');
84 + ret[s[0]] = s[1];
85 + }
86 + return ret;
87 + })(),
88 + file: (a.pathname.match(/\/([^/?#]+)$/i) || ['', ''])[1],
89 + hash: a.hash.replace('#', ''),
90 + path: a.pathname.replace(/^([^/])/, '/$1'),
91 + };
92 + }
93 +
94 + // Helper to recreate a url string from its building blocks.
95 + function renderURL(urlobject) {
96 + let url = urlobject.protocol + '://' + urlobject.host;
97 + if (urlobject.port !== '') {
98 + url += ':' + urlobject.port;
99 + }
100 + url += urlobject.path;
101 + let joiner = '?';
102 + for (const prop in urlobject.params) {
103 + if (Object.prototype.hasOwnProperty.call(urlobject.params, prop)) {
104 + url += joiner + prop + '=' + urlobject.params[prop];
105 + joiner = '&';
106 + }
107 + }
108 + if (urlobject.hash !== '') {
109 + url += '#' + urlobject.hash;
110 + }
111 + return url;
112 + }
113 +
114 + // Helper to escape html special chars for displaying the teasers
115 + const escapeHTML = (function() {
116 + const MAP = {
117 + '&': '&amp;',
118 + '<': '&lt;',
119 + '>': '&gt;',
120 + '"': '&#34;',
121 + '\'': '&#39;',
122 + };
123 + const repl = function(c) {
124 + return MAP[c];
125 + };
126 + return function(s) {
127 + return s.replace(/[&<>'"]/g, repl);
128 + };
129 + })();
130 +
131 + function formatSearchMetric(count, searchterm) {
132 + if (count === 1) {
133 + return count + ' search result for \'' + searchterm + '\':';
134 + } else if (count === 0) {
135 + return 'No search results for \'' + searchterm + '\'.';
136 + } else {
137 + return count + ' search results for \'' + searchterm + '\':';
138 + }
139 + }
140 +
141 + function formatSearchResult(result, searchterms) {
142 + const teaser = makeTeaser(escapeHTML(result.doc.body), searchterms);
143 + teaser_count++;
144 +
145 + // The ?URL_MARK_PARAM= parameter belongs inbetween the page and the #heading-anchor
146 + const url = doc_urls[result.ref].split('#');
147 + if (url.length === 1) { // no anchor found
148 + url.push('');
149 + }
150 +
151 + // encodeURIComponent escapes all chars that could allow an XSS except
152 + // for '. Due to that we also manually replace ' with its url-encoded
153 + // representation (%27).
154 + const encoded_search = encodeURIComponent(searchterms.join(' ')).replace(/'/g, '%27');
155 +
156 + return '<a href="' + path_to_root + url[0] + '?' + URL_MARK_PARAM + '=' + encoded_search
157 + + '#' + url[1] + '" aria-details="mdbook-teaser_' + teaser_count + '">'
158 + + result.doc.breadcrumbs + '</a>'
159 + + '<span class="teaser" id="mdbook-teaser_' + teaser_count
160 + + '" aria-label="Search Result Teaser">' + teaser + '</span>';
161 + }
162 +
163 + function makeTeaser(body, searchterms) {
164 + // The strategy is as follows:
165 + // First, assign a value to each word in the document:
166 + // Words that correspond to search terms (stemmer aware): 40
167 + // Normal words: 2
168 + // First word in a sentence: 8
169 + // Then use a sliding window with a constant number of words and count the
170 + // sum of the values of the words within the window. Then use the window that got the
171 + // maximum sum. If there are multiple maximas, then get the last one.
172 + // Enclose the terms in <em>.
173 + const stemmed_searchterms = searchterms.map(function(w) {
174 + return elasticlunr.stemmer(w.toLowerCase());
175 + });
176 + const searchterm_weight = 40;
177 + const weighted = []; // contains elements of ["word", weight, index_in_document]
178 + // split in sentences, then words
179 + const sentences = body.toLowerCase().split('. ');
180 + let index = 0;
181 + let value = 0;
182 + let searchterm_found = false;
183 + for (const sentenceindex in sentences) {
184 + const words = sentences[sentenceindex].split(' ');
185 + value = 8;
186 + for (const wordindex in words) {
187 + const word = words[wordindex];
188 + if (word.length > 0) {
189 + for (const searchtermindex in stemmed_searchterms) {
190 + if (elasticlunr.stemmer(word).startsWith(
191 + stemmed_searchterms[searchtermindex])
192 + ) {
193 + value = searchterm_weight;
194 + searchterm_found = true;
195 + }
196 + }
197 + weighted.push([word, value, index]);
198 + value = 2;
199 + }
200 + index += word.length;
201 + index += 1; // ' ' or '.' if last word in sentence
202 + }
203 + index += 1; // because we split at a two-char boundary '. '
204 + }
205 +
206 + if (weighted.length === 0) {
207 + return body;
208 + }
209 +
210 + const window_weight = [];
211 + const window_size = Math.min(weighted.length, results_options.teaser_word_count);
212 +
213 + let cur_sum = 0;
214 + for (let wordindex = 0; wordindex < window_size; wordindex++) {
215 + cur_sum += weighted[wordindex][1];
216 + }
217 + window_weight.push(cur_sum);
218 + for (let wordindex = 0; wordindex < weighted.length - window_size; wordindex++) {
219 + cur_sum -= weighted[wordindex][1];
220 + cur_sum += weighted[wordindex + window_size][1];
221 + window_weight.push(cur_sum);
222 + }
223 +
224 + let max_sum_window_index = 0;
225 + if (searchterm_found) {
226 + let max_sum = 0;
227 + // backwards
228 + for (let i = window_weight.length - 1; i >= 0; i--) {
229 + if (window_weight[i] > max_sum) {
230 + max_sum = window_weight[i];
231 + max_sum_window_index = i;
232 + }
233 + }
234 + } else {
235 + max_sum_window_index = 0;
236 + }
237 +
238 + // add <em/> around searchterms
239 + const teaser_split = [];
240 + index = weighted[max_sum_window_index][2];
241 + for (let i = max_sum_window_index; i < max_sum_window_index + window_size; i++) {
242 + const word = weighted[i];
243 + if (index < word[2]) {
244 + // missing text from index to start of `word`
245 + teaser_split.push(body.substring(index, word[2]));
246 + index = word[2];
247 + }
248 + if (word[1] === searchterm_weight) {
249 + teaser_split.push('<em>');
250 + }
251 + index = word[2] + word[0].length;
252 + teaser_split.push(body.substring(word[2], index));
253 + if (word[1] === searchterm_weight) {
254 + teaser_split.push('</em>');
255 + }
256 + }
257 +
258 + return teaser_split.join('');
259 + }
260 +
261 + function init(config) {
262 + results_options = config.results_options;
263 + search_options = config.search_options;
264 + doc_urls = config.doc_urls;
265 + searchindex = elasticlunr.Index.load(config.index);
266 +
267 + searchbar_outer.classList.remove('searching');
268 +
269 + searchbar.focus();
270 +
271 + const searchterm = searchbar.value.trim();
272 + if (searchterm !== '') {
273 + searchbar.classList.add('active');
274 + doSearch(searchterm);
275 + }
276 + }
277 +
278 + function initSearchInteractions(config) {
279 + // Set up events
280 + searchicon.addEventListener('click', () => {
281 + searchIconClickHandler();
282 + }, false);
283 + searchbar.addEventListener('keyup', () => {
284 + searchbarKeyUpHandler();
285 + }, false);
286 + document.addEventListener('keydown', e => {
287 + globalKeyHandler(e);
288 + }, false);
289 + // If the user uses the browser buttons, do the same as if a reload happened
290 + window.onpopstate = () => {
291 + doSearchOrMarkFromUrl();
292 + };
293 + // Suppress "submit" events so the page doesn't reload when the user presses Enter
294 + document.addEventListener('submit', e => {
295 + e.preventDefault();
296 + }, false);
297 +
298 + // If reloaded, do the search or mark again, depending on the current url parameters
299 + doSearchOrMarkFromUrl();
300 +
301 + // Exported functions
302 + config.hasFocus = hasFocus;
303 + }
304 +
305 + initSearchInteractions(window.search);
306 +
307 + function unfocusSearchbar() {
308 + // hacky, but just focusing a div only works once
309 + const tmp = document.createElement('input');
310 + tmp.setAttribute('style', 'position: absolute; opacity: 0;');
311 + searchicon.appendChild(tmp);
312 + tmp.focus();
313 + tmp.remove();
314 + }
315 +
316 + // On reload or browser history backwards/forwards events, parse the url and do search or mark
317 + function doSearchOrMarkFromUrl() {
318 + // Check current URL for search request
319 + const url = parseURL(window.location.href);
320 + if (Object.prototype.hasOwnProperty.call(url.params, URL_SEARCH_PARAM)
321 + && url.params[URL_SEARCH_PARAM] !== '') {
322 + showSearch(true);
323 + searchbar.value = decodeURIComponent(
324 + (url.params[URL_SEARCH_PARAM] + '').replace(/\+/g, '%20'));
325 + searchbarKeyUpHandler(); // -> doSearch()
326 + } else {
327 + showSearch(false);
328 + }
329 +
330 + if (Object.prototype.hasOwnProperty.call(url.params, URL_MARK_PARAM)) {
331 + const words = decodeURIComponent(url.params[URL_MARK_PARAM]).split(' ');
332 + marker.mark(words, {
333 + exclude: mark_exclude,
334 + });
335 +
336 + const markers = document.querySelectorAll('mark');
337 + const hide = () => {
338 + for (let i = 0; i < markers.length; i++) {
339 + markers[i].classList.add('fade-out');
340 + window.setTimeout(() => {
341 + marker.unmark();
342 + }, 300);
343 + }
344 + };
345 +
346 + for (let i = 0; i < markers.length; i++) {
347 + markers[i].addEventListener('click', hide);
348 + }
349 + }
350 + }
351 +
352 + // Eventhandler for keyevents on `document`
353 + function globalKeyHandler(e) {
354 + if (e.altKey ||
355 + e.ctrlKey ||
356 + e.metaKey ||
357 + e.shiftKey ||
358 + e.target.type === 'textarea' ||
359 + e.target.type === 'text' ||
360 + !hasFocus() && /^(?:input|select|textarea)$/i.test(e.target.nodeName)
361 + ) {
362 + return;
363 + }
364 +
365 + if (e.key === 'Escape') {
366 + e.preventDefault();
367 + searchbar.classList.remove('active');
368 + setSearchUrlParameters('',
369 + searchbar.value.trim() !== '' ? 'push' : 'replace');
370 + if (hasFocus()) {
371 + unfocusSearchbar();
372 + }
373 + showSearch(false);
374 + marker.unmark();
375 + } else if (!hasFocus() && (e.key === 's' || e.key === '/')) {
376 + e.preventDefault();
377 + showSearch(true);
378 + window.scrollTo(0, 0);
379 + searchbar.select();
380 + } else if (hasFocus() && (e.key === 'ArrowDown'
381 + || e.key === 'Enter')) {
382 + e.preventDefault();
383 + const first = searchresults.firstElementChild;
384 + if (first !== null) {
385 + unfocusSearchbar();
386 + first.classList.add('focus');
387 + if (e.key === 'Enter') {
388 + window.location.assign(first.querySelector('a'));
389 + }
390 + }
391 + } else if (!hasFocus() && (e.key === 'ArrowDown'
392 + || e.key === 'ArrowUp'
393 + || e.key === 'Enter')) {
394 + // not `:focus` because browser does annoying scrolling
395 + const focused = searchresults.querySelector('li.focus');
396 + if (!focused) {
397 + return;
398 + }
399 + e.preventDefault();
400 + if (e.key === 'ArrowDown') {
401 + const next = focused.nextElementSibling;
402 + if (next) {
403 + focused.classList.remove('focus');
404 + next.classList.add('focus');
405 + }
406 + } else if (e.key === 'ArrowUp') {
407 + focused.classList.remove('focus');
408 + const prev = focused.previousElementSibling;
409 + if (prev) {
410 + prev.classList.add('focus');
411 + } else {
412 + searchbar.select();
413 + }
414 + } else { // Enter
415 + window.location.assign(focused.querySelector('a'));
416 + }
417 + }
418 + }
419 +
420 + function loadSearchScript(url, id) {
421 + if (document.getElementById(id)) {
422 + return;
423 + }
424 + searchbar_outer.classList.add('searching');
425 +
426 + const script = document.createElement('script');
427 + script.src = url;
428 + script.id = id;
429 + script.onload = () => init(window.search);
430 + script.onerror = error => {
431 + console.error(`Failed to load \`${url}\`: ${error}`);
432 + };
433 + document.head.append(script);
434 + }
435 +
436 + function showSearch(yes) {
437 + if (yes) {
438 + loadSearchScript(
439 + window.path_to_searchindex_js ||
440 + path_to_root + 'searchindex-2e4a517d.js',
441 + 'mdbook-search-index');
442 + search_wrap.classList.remove('hidden');
443 + searchicon.setAttribute('aria-expanded', 'true');
444 + } else {
445 + search_wrap.classList.add('hidden');
446 + searchicon.setAttribute('aria-expanded', 'false');
447 + const results = searchresults.children;
448 + for (let i = 0; i < results.length; i++) {
449 + results[i].classList.remove('focus');
450 + }
451 + }
452 + }
453 +
454 + function showResults(yes) {
455 + if (yes) {
456 + searchresults_outer.classList.remove('hidden');
457 + } else {
458 + searchresults_outer.classList.add('hidden');
459 + }
460 + }
461 +
462 + // Eventhandler for search icon
463 + function searchIconClickHandler() {
464 + if (search_wrap.classList.contains('hidden')) {
465 + showSearch(true);
466 + window.scrollTo(0, 0);
467 + searchbar.select();
468 + } else {
469 + showSearch(false);
470 + }
471 + }
472 +
473 + // Eventhandler for keyevents while the searchbar is focused
474 + function searchbarKeyUpHandler() {
475 + const searchterm = searchbar.value.trim();
476 + if (searchterm !== '') {
477 + searchbar.classList.add('active');
478 + doSearch(searchterm);
479 + } else {
480 + searchbar.classList.remove('active');
481 + showResults(false);
482 + removeChildren(searchresults);
483 + }
484 +
485 + setSearchUrlParameters(searchterm, 'push_if_new_search_else_replace');
486 +
487 + // Remove marks
488 + marker.unmark();
489 + }
490 +
491 + // Update current url with ?URL_SEARCH_PARAM= parameter, remove ?URL_MARK_PARAM and
492 + // `#heading-anchor`. `action` can be one of "push", "replace",
493 + // "push_if_new_search_else_replace" and replaces or pushes a new browser history item.
494 + // "push_if_new_search_else_replace" pushes if there is no `?URL_SEARCH_PARAM=abc` yet.
495 + function setSearchUrlParameters(searchterm, action) {
496 + const url = parseURL(window.location.href);
497 + const first_search = !Object.prototype.hasOwnProperty.call(url.params, URL_SEARCH_PARAM);
498 +
499 + if (searchterm !== '' || action === 'push_if_new_search_else_replace') {
500 + url.params[URL_SEARCH_PARAM] = searchterm;
501 + delete url.params[URL_MARK_PARAM];
502 + url.hash = '';
503 + } else {
504 + delete url.params[URL_MARK_PARAM];
505 + delete url.params[URL_SEARCH_PARAM];
506 + }
507 + // A new search will also add a new history item, so the user can go back
508 + // to the page prior to searching. A updated search term will only replace
509 + // the url.
510 + if (action === 'push' || action === 'push_if_new_search_else_replace' && first_search ) {
511 + history.pushState({}, document.title, renderURL(url));
512 + } else if (action === 'replace' ||
513 + action === 'push_if_new_search_else_replace' &&
514 + !first_search
515 + ) {
516 + history.replaceState({}, document.title, renderURL(url));
517 + }
518 + }
519 +
520 + function doSearch(searchterm) {
521 + // Don't search the same twice
522 + if (current_searchterm === searchterm) {
523 + return;
524 + }
525 + searchbar_outer.classList.add('searching');
526 + if (searchindex === null) {
527 + return;
528 + }
529 +
530 + current_searchterm = searchterm;
531 +
532 + // Do the actual search
533 + const results = searchindex.search(searchterm, search_options);
534 + const resultcount = Math.min(results.length, results_options.limit_results);
535 +
536 + // Display search metrics
537 + searchresults_header.innerText = formatSearchMetric(resultcount, searchterm);
538 +
539 + // Clear and insert results
540 + const searchterms = searchterm.split(' ');
541 + removeChildren(searchresults);
542 + for (let i = 0; i < resultcount ; i++) {
543 + const resultElem = document.createElement('li');
544 + resultElem.innerHTML = formatSearchResult(results[i], searchterms);
545 + searchresults.appendChild(resultElem);
546 + }
547 +
548 + // Display results
549 + showResults(true);
550 + searchbar_outer.classList.remove('searching');
551 + }
552 +
553 + // Exported functions
554 + search.hasFocus = hasFocus;
555 +})(window.search);
A book/searchindex-2e4a517d.js
+1 -0
@@ -0,0 +1 @@
1 +window.search = Object.assign(window.search, JSON.parse('{"doc_urls":["introduction.html#introduction","introduction.html#quest-ce-que-gitrust-","introduction.html#à-qui-sadresse-cette-documentation-","introduction.html#comment-cette-documentation-est-elle-structurée-","introduction.html#naviguer-dans-la-documentation","user_manual/index.html#manuel-utilisateur","user_manual/index.html#parcours-dapprentissage","user_manual/index.html#tutoriels--apprendre-en-faisant","user_manual/index.html#how-to--recettes-pour-les-tâches-courantes","user_manual/index.html#référence--informations-techniques-exactes","user_manual/index.html#explication--comprendre-le-pourquoi","user_manual/tutorials/index.html#tutoriels","user_manual/tutorials/index.html#todo","user_manual/tutorials/01-premier-pas.html#premiers-pas--active-la-2fa-ajoute-ta-clé-ssh-et-crée-ton-premier-dépôt","user_manual/tutorials/01-premier-pas.html#objectifs","user_manual/tutorials/01-premier-pas.html#pré-requis","user_manual/tutorials/01-premier-pas.html#vue-densemble","user_manual/tutorials/01-premier-pas.html#étape-1--connecte-toi-et-accède-aux-paramètres-de-sécurité","user_manual/tutorials/01-premier-pas.html#étape-2--active-la-2fa-avec-une-application-dauthentification","user_manual/tutorials/01-premier-pas.html#étape-3--génère-ou-localise-ta-clé-ssh","user_manual/tutorials/01-premier-pas.html#étape-4--enregistre-la-clé-ssh-dans-ton-profil-gitrust","user_manual/tutorials/01-premier-pas.html#étape-5--crée-ton-premier-dépôt-vide","user_manual/tutorials/01-premier-pas.html#récapitulatif","user_manual/tutorials/01-premier-pas.html#et-si-ça-ne-marche-pas","user_manual/tutorials/01-premier-pas.html#prochaine-étape","user_manual/tutorials/02-cloner-pousser.html#02--cloner-et-pousser-du-code","user_manual/tutorials/02-cloner-pousser.html#todo","user_manual/tutorials/03-collaborer.html#03--collaborer--équipes-issues-pull-requests","user_manual/tutorials/03-collaborer.html#todo","user_manual/tutorials/04-automatiser-ci.html#04--automatiser-avec-la-ci","user_manual/tutorials/04-automatiser-ci.html#todo","user_manual/how-to/index.html#guides-pratiques","user_manual/how-to/index.html#todo","user_manual/how-to/gerer-cles-ssh.html#gérer-ses-clés-ssh","user_manual/how-to/gerer-cles-ssh.html#todo","user_manual/how-to/configurer-2fa.html#configurer-la-double-authentification-2fa","user_manual/how-to/configurer-2fa.html#todo","user_manual/how-to/creer-personal-access-token.html#créer-un-personal-access-token","user_manual/how-to/creer-personal-access-token.html#todo","user_manual/how-to/gerer-equipes-permissions.html#gérer-les-équipes-et-les-permissions","user_manual/how-to/gerer-equipes-permissions.html#todo","user_manual/how-to/ouvrir-pull-request.html#ouvrir-une-pull-request","user_manual/how-to/ouvrir-pull-request.html#todo","user_manual/how-to/fusionner-strategies.html#stratégies-de-fusion-ff--squash--merge-commit","user_manual/how-to/fusionner-strategies.html#todo","user_manual/how-to/utiliser-labels-issues.html#utiliser-les-labels-et-les-issues","user_manual/how-to/utiliser-labels-issues.html#todo","user_manual/how-to/importer-depot-externe.html#importer-un-dépôt-externe","user_manual/how-to/importer-depot-externe.html#todo","user_manual/how-to/consulter-sbom.html#consulter-le-sbom-dun-dépôt","user_manual/how-to/consulter-sbom.html#todo","user_manual/reference/index.html#référence","user_manual/reference/index.html#todo","user_manual/reference/modele-permissions.html#modèle-de-permissions-4-rôles","user_manual/reference/modele-permissions.html#todo","user_manual/reference/api-rest-v1.html#api-rest-v1","user_manual/reference/api-rest-v1.html#todo","user_manual/reference/gitrust-ci-yml-schema.html#schéma-du-fichier-gitrust-ciyml","user_manual/reference/gitrust-ci-yml-schema.html#todo","user_manual/reference/markdown-et-syntaxe.html#markdown-et-syntaxe-supportée","user_manual/reference/markdown-et-syntaxe.html#todo","user_manual/reference/notifications.html#notifications","user_manual/reference/notifications.html#todo","user_manual/explanation/index.html#explication","user_manual/explanation/index.html#todo","user_manual/explanation/modele-collaboration.html#modèle-de-collaboration-sur-gitrust","user_manual/explanation/modele-collaboration.html#todo","user_manual/explanation/securite-utilisateur.html#sécurité-côté-utilisateur","user_manual/explanation/securite-utilisateur.html#todo","user_manual/explanation/cycle-vie-pull-request.html#cycle-de-vie-dune-pull-request","user_manual/explanation/cycle-vie-pull-request.html#todo","administration_manual/index.html#manuel-dadministration","administration_manual/index.html#parcours-dapprentissage","administration_manual/index.html#tutoriels--apprendre-en-faisant","administration_manual/index.html#how-to--recettes-pour-les-tâches-courantes","administration_manual/index.html#référence--informations-techniques-exactes","administration_manual/index.html#explication--comprendre-le-pourquoi","administration_manual/tutorials/index.html#tutoriels","administration_manual/tutorials/index.html#todo","administration_manual/tutorials/01-installation-docker.html#installation-docker--démarrez-gitrust-en-30-minutes-avec-docker-compose","administration_manual/tutorials/01-installation-docker.html#objectifs","administration_manual/tutorials/01-installation-docker.html#pré-requis","administration_manual/tutorials/01-installation-docker.html#vue-densemble","administration_manual/tutorials/01-installation-docker.html#étape-1--créez-le-répertoire-de-travail-et-le-fichier-de-configuration","administration_manual/tutorials/01-installation-docker.html#étape-2--créez-le-fichier-docker-composeyml","administration_manual/tutorials/01-installation-docker.html#étape-3--démarrez-la-stack-et-suivez-les-logs","administration_manual/tutorials/01-installation-docker.html#étape-4--créez-le-premier-compte-administrateur","administration_manual/tutorials/01-installation-docker.html#récapitulatif","administration_manual/tutorials/01-installation-docker.html#et-si-ça-ne-marche-pas","administration_manual/tutorials/01-installation-docker.html#prochaine-étape","administration_manual/tutorials/02-installation-systemd.html#02--installation-avec-systemd","administration_manual/tutorials/02-installation-systemd.html#todo","administration_manual/tutorials/03-premier-demarrage.html#03--premier-démarrage","administration_manual/tutorials/03-premier-demarrage.html#todo","administration_manual/tutorials/04-mise-en-production-192-168.html#mise-en-production-sur-une-machine-linux-avec-https-lets-encrypt","administration_manual/tutorials/04-mise-en-production-192-168.html#contexte","administration_manual/tutorials/04-mise-en-production-192-168.html#les-trois-services-gitrust","administration_manual/tutorials/04-mise-en-production-192-168.html#topologie-réseau","administration_manual/tutorials/04-mise-en-production-192-168.html#risque-critique--ordre-dexécution","administration_manual/tutorials/04-mise-en-production-192-168.html#pré-requis","administration_manual/tutorials/04-mise-en-production-192-168.html#poste-de-build-machine-locale-avec-le-code-source","administration_manual/tutorials/04-mise-en-production-192-168.html#cible-your-server-ip","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-0--générer-envproduction-poste-de-build-une-seule-fois","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-1--préparer-la-cible--déplacer-sshd-système-sur-2022","administration_manual/tutorials/04-mise-en-production-192-168.html#1pre-diagnostic-de-létat-initial","administration_manual/tutorials/04-mise-en-production-192-168.html#1a-session-1--modifier-la-config-sshd","administration_manual/tutorials/04-mise-en-production-192-168.html#1b-session-2--valider-le-nouveau-port","administration_manual/tutorials/04-mise-en-production-192-168.html#1c-plus-tard-après-phase-5-fermer-le-port-22-du-sshd-système","administration_manual/tutorials/04-mise-en-production-192-168.html#1d-firewall","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-2--postgresql-docker-loopback","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-3--build--déploiement-gitrust-via-deploysh","administration_manual/tutorials/04-mise-en-production-192-168.html#3a-préparer-deploymentdeployconf","administration_manual/tutorials/04-mise-en-production-192-168.html#3b-validation-du-build-seul-optionnel","administration_manual/tutorials/04-mise-en-production-192-168.html#3c-déploiement","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-4--nginx-http--lets-encrypt","administration_manual/tutorials/04-mise-en-production-192-168.html#4a-installer-nginx--certbot","administration_manual/tutorials/04-mise-en-production-192-168.html#4b-déployer-la-conf-nginx","administration_manual/tutorials/04-mise-en-production-192-168.html#4c-émettre-le-certificat-lets-encrypt","administration_manual/tutorials/04-mise-en-production-192-168.html#4d-vérifier-le-renouvellement-automatique","administration_manual/tutorials/04-mise-en-production-192-168.html#4e-test-https","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-5--exposer-ssh-git-sur-22-via-nginx-stream","administration_manual/tutorials/04-mise-en-production-192-168.html#5a-ajouter-le-bloc-stream","administration_manual/tutorials/04-mise-en-production-192-168.html#5b-désactiver-sshd-système-sur-22-phase-1c","administration_manual/tutorials/04-mise-en-production-192-168.html#5c-test-clone-git","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-6--vérifications-globales","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-7--durcissement--fail2ban","administration_manual/tutorials/04-mise-en-production-192-168.html#7a-installation","administration_manual/tutorials/04-mise-en-production-192-168.html#7b-configuration-minimale-rapide","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-8--mise-à-jour-vers-un-nouveau-domaine-quand-dns-prêt","administration_manual/tutorials/04-mise-en-production-192-168.html#8a-ajouter-le-san-au-certificat-existant","administration_manual/tutorials/04-mise-en-production-192-168.html#8b-mettre-à-jour-la-conf-nginx","administration_manual/tutorials/04-mise-en-production-192-168.html#8c-mettre-à-jour-envproduction-et-redéployer","administration_manual/tutorials/04-mise-en-production-192-168.html#phase-9--mises-à-jour-ultérieures","administration_manual/tutorials/04-mise-en-production-192-168.html#dépannage","administration_manual/tutorials/04-mise-en-production-192-168.html#récapitulatif-des-ports","administration_manual/how-to/index.html#guides-pratiques","administration_manual/how-to/index.html#todo","administration_manual/how-to/sauvegarder-restaurer.html#sauvegarder-et-restaurer","administration_manual/how-to/sauvegarder-restaurer.html#todo","administration_manual/how-to/mettre-a-jour.html#mettre-à-jour-gitrust","administration_manual/how-to/mettre-a-jour.html#todo","administration_manual/how-to/configurer-smtp.html#configurer-smtp","administration_manual/how-to/configurer-smtp.html#todo","administration_manual/how-to/configurer-oauth.html#configurer-oauth","administration_manual/how-to/configurer-oauth.html#todo","administration_manual/how-to/configurer-ci-runner-remote.html#configurer-le-runner-ci-distant","administration_manual/how-to/configurer-ci-runner-remote.html#1-rôle-du-script","administration_manual/how-to/configurer-ci-runner-remote.html#2-quand-lutiliser","administration_manual/how-to/configurer-ci-runner-remote.html#3-architecture-cible","administration_manual/how-to/configurer-ci-runner-remote.html#4-pré-requis","administration_manual/how-to/configurer-ci-runner-remote.html#sur-la-machine-dexécution-là-où-on-lance-le-script","administration_manual/how-to/configurer-ci-runner-remote.html#sur-le-runner-distant","administration_manual/how-to/configurer-ci-runner-remote.html#5-variables-denvironnement-attendues-le-env","administration_manual/how-to/configurer-ci-runner-remote.html#tableau-des-variables","administration_manual/how-to/configurer-ci-runner-remote.html#exemple-minimal-de-env-runner-dédié","administration_manual/how-to/configurer-ci-runner-remote.html#exemple-env-complet-coexistant-avec-config-gitrust","administration_manual/how-to/configurer-ci-runner-remote.html#cas--runner-local--pas-besoin-du-script","administration_manual/how-to/configurer-ci-runner-remote.html#6-usage","administration_manual/how-to/configurer-ci-runner-remote.html#depuis-la-racine-du-projet-par-défaut","administration_manual/how-to/configurer-ci-runner-remote.html#avec-un-env-explicite","administration_manual/how-to/configurer-ci-runner-remote.html#sortie-attendue","administration_manual/how-to/configurer-ci-runner-remote.html#7-ce-qui-se-retrouve-sur-le-runner","administration_manual/how-to/configurer-ci-runner-remote.html#8-vérifications-post-setup","administration_manual/how-to/configurer-ci-runner-remote.html#depuis-la-machine-gitrust","administration_manual/how-to/configurer-ci-runner-remote.html#pipeline-de-test-via-gitrust","administration_manual/how-to/configurer-ci-runner-remote.html#9-mise-à-jour-après-modification-du-ci-engine","administration_manual/how-to/configurer-ci-runner-remote.html#10-dépannage","administration_manual/how-to/configurer-ci-runner-remote.html#11-sécurité","administration_manual/how-to/integrer-dependency-track.html#intégrer-la-ci-et-dependency-track","administration_manual/how-to/integrer-dependency-track.html#1-architecture-générale","administration_manual/how-to/integrer-dependency-track.html#2-mettre-en-place-la-ci","administration_manual/how-to/integrer-dependency-track.html#21-pré-requis-serveur-de-build","administration_manual/how-to/integrer-dependency-track.html#22-configuration-gitrust-fichier-env","administration_manual/how-to/integrer-dependency-track.html#23-activer-la-ci-sur-un-dépôt","administration_manual/how-to/integrer-dependency-track.html#24-choisir-le-mode--easy-ou-power","administration_manual/how-to/integrer-dependency-track.html#25-suivi-dun-pipeline","administration_manual/how-to/integrer-dependency-track.html#3-mettre-en-place-le-dependency-tracker","administration_manual/how-to/integrer-dependency-track.html#31-installer-syft","administration_manual/how-to/integrer-dependency-track.html#32-déployer-dependency-track","administration_manual/how-to/integrer-dependency-track.html#33-créer-une-clé-api","administration_manual/how-to/integrer-dependency-track.html#34-configurer-gitrust","administration_manual/how-to/integrer-dependency-track.html#35-lire-les-résultats","administration_manual/how-to/integrer-dependency-track.html#4-débogage","administration_manual/how-to/integrer-dependency-track.html#problèmes-ci-courants","administration_manual/how-to/integrer-dependency-track.html#problèmes-sbom-courants","administration_manual/how-to/integrer-dependency-track.html#logs-utiles","administration_manual/how-to/integrer-dependency-track.html#5-checklist-récapitulative","administration_manual/how-to/durcir-avec-fail2ban.html#durcir-linstance-avec-fail2ban","administration_manual/how-to/durcir-avec-fail2ban.html#1-installation","administration_manual/how-to/durcir-avec-fail2ban.html#2-fichier-principal-etcfail2banjaillocal","administration_manual/how-to/durcir-avec-fail2ban.html#3-filtres-personnalisés","administration_manual/how-to/durcir-avec-fail2ban.html#31-gitrust-loginconf","administration_manual/how-to/durcir-avec-fail2ban.html#32-gitrust-api-abuseconf","administration_manual/how-to/durcir-avec-fail2ban.html#33-gitrust-sshconf","administration_manual/how-to/durcir-avec-fail2ban.html#34-gitrust-importconf","administration_manual/how-to/durcir-avec-fail2ban.html#35-dtrack-loginconf-si-dtrack-exposé","administration_manual/how-to/durcir-avec-fail2ban.html#36-dtrack-apiconf-si-dtrack-exposé","administration_manual/how-to/durcir-avec-fail2ban.html#37-postgresqlconf-créer-si-absent","administration_manual/how-to/durcir-avec-fail2ban.html#38-nginx-limit-reqconf-créer-si-absent-sur-votre-distro","administration_manual/how-to/durcir-avec-fail2ban.html#39-nginx-badbotsconf--obligatoire-pas-fourni-par-debianubuntu","administration_manual/how-to/durcir-avec-fail2ban.html#4-rate-limiting-côté-nginx-requis-par-nginx-limit-req","administration_manual/how-to/durcir-avec-fail2ban.html#41-déclarer-les-zones-globales","administration_manual/how-to/durcir-avec-fail2ban.html#42-ajouter-les-location-dans-etcnginxsites-availablegitrust","administration_manual/how-to/durcir-avec-fail2ban.html#43-reload","administration_manual/how-to/durcir-avec-fail2ban.html#5-démarrage-et-validation","administration_manual/how-to/durcir-avec-fail2ban.html#valider-chaque-filtre-custom","administration_manual/how-to/durcir-avec-fail2ban.html#test-de-bannissement","administration_manual/how-to/durcir-avec-fail2ban.html#6-monitoring","administration_manual/how-to/durcir-avec-fail2ban.html#7-matrice-récapitulative","administration_manual/how-to/durcir-avec-fail2ban.html#8-notes-spécifiques-à-la-stack-gitrust","administration_manual/how-to/durcir-avec-fail2ban.html#81-dagger-ci","administration_manual/how-to/durcir-avec-fail2ban.html#82-dependency-track","administration_manual/how-to/durcir-avec-fail2ban.html#83-postgresql","administration_manual/how-to/durcir-avec-fail2ban.html#84-notifications","administration_manual/how-to/durcir-avec-fail2ban.html#9-limites-et-évolutions","administration_manual/how-to/tuner-rate-limiting.html#régler-le-rate-limiting","administration_manual/how-to/tuner-rate-limiting.html#todo","administration_manual/how-to/forcer-2fa-globalement.html#forcer-le-2fa-sur-toute-linstance","administration_manual/how-to/forcer-2fa-globalement.html#todo","administration_manual/how-to/depanner-ssh.html#dépanner-ssh","administration_manual/how-to/depanner-ssh.html#todo","administration_manual/how-to/depanner-ci.html#dépanner-la-ci","administration_manual/how-to/depanner-ci.html#todo","administration_manual/how-to/gerer-utilisateurs-admin.html#gérer-les-utilisateurs-panel-admin","administration_manual/how-to/gerer-utilisateurs-admin.html#todo","administration_manual/how-to/auditer-instance.html#auditer-une-instance","administration_manual/how-to/auditer-instance.html#todo","administration_manual/reference/index.html#référence","administration_manual/reference/index.html#todo","administration_manual/reference/variables-environnement.html#variables-denvironnement","administration_manual/reference/variables-environnement.html#todo","administration_manual/reference/parametres-dynamiques.html#paramètres-dynamiques","administration_manual/reference/parametres-dynamiques.html#vue-densemble--deux-systèmes-distincts","administration_manual/reference/parametres-dynamiques.html#1-configuration-statique-env","administration_manual/reference/parametres-dynamiques.html#principe","administration_manual/reference/parametres-dynamiques.html#fichiers-de-référence","administration_manual/reference/parametres-dynamiques.html#structs-de-chargement","administration_manual/reference/parametres-dynamiques.html#comportement","administration_manual/reference/parametres-dynamiques.html#liste-des-variables-statiques-non-exhaustive","administration_manual/reference/parametres-dynamiques.html#2-configuration-dynamique-table-app_settings","administration_manual/reference/parametres-dynamiques.html#principe-1","administration_manual/reference/parametres-dynamiques.html#schéma-de-la-table","administration_manual/reference/parametres-dynamiques.html#initialisation-au-démarrage","administration_manual/reference/parametres-dynamiques.html#liste-des-réglages-dynamiques-et-leurs-valeurs-par-défaut","administration_manual/reference/parametres-dynamiques.html#3-cas-hybride--oauth","administration_manual/reference/parametres-dynamiques.html#4-précédence-et-comportement-au-redémarrage","administration_manual/reference/parametres-dynamiques.html#réglages-statiques-env-uniquement","administration_manual/reference/parametres-dynamiques.html#réglages-dynamiques-db-uniquement","administration_manual/reference/parametres-dynamiques.html#réglages-hybrides-oauth","administration_manual/reference/parametres-dynamiques.html#5-piège-principal--les-variables-env-fantômes","administration_manual/reference/parametres-dynamiques.html#6-diagramme-de-décision","administration_manual/reference/parametres-dynamiques.html#7-guide-pour-les-administrateurs","administration_manual/reference/parametres-dynamiques.html#modifier-un-réglage-dinfrastructure","administration_manual/reference/parametres-dynamiques.html#modifier-un-réglage-fonctionnel","administration_manual/reference/parametres-dynamiques.html#modifier-un-réglage-oauth","administration_manual/reference/parametres-dynamiques.html#vérifier-la-valeur-effective-dun-réglage","administration_manual/reference/parametres-dynamiques.html#8-guide-pour-les-développeurs","administration_manual/reference/parametres-dynamiques.html#ajouter-un-nouveau-réglage-dynamique","administration_manual/reference/parametres-dynamiques.html#ajouter-un-nouveau-réglage-statique","administration_manual/reference/parametres-dynamiques.html#ajouter-un-réglage-hybride-db--fallback-env","administration_manual/reference/schema-base-de-donnees.html#schéma-de-la-base-de-données","administration_manual/reference/schema-base-de-donnees.html#todo","administration_manual/reference/ports-et-services.html#ports-et-services","administration_manual/reference/ports-et-services.html#todo","administration_manual/reference/conformite-anssi-pa074.html#conformité-anssi-pa-074","administration_manual/reference/conformite-anssi-pa074.html#todo","administration_manual/explanation/index.html#explication","administration_manual/explanation/index.html#todo","administration_manual/explanation/architecture-globale.html#architecture-globale","administration_manual/explanation/architecture-globale.html#todo","administration_manual/explanation/modele-deploiement.html#modèle-de-déploiement","administration_manual/explanation/modele-deploiement.html#todo","administration_manual/explanation/ci-dagger.html#ci-dagger--easy-mode-vs-power-mode","administration_manual/explanation/ci-dagger.html#todo","administration_manual/explanation/strategie-sauvegarde.html#stratégie-de-sauvegarde","administration_manual/explanation/strategie-sauvegarde.html#todo","developer_manual/index.html#manuel-développeur","developer_manual/index.html#parcours-dapprentissage--contributeur-core","developer_manual/index.html#tutoriels--apprendre-en-faisant","developer_manual/index.html#how-to--recettes-pour-les-tâches-courantes","developer_manual/index.html#référence--informations-techniques-exactes","developer_manual/index.html#explication--comprendre-le-pourquoi","developer_manual/tutorials/index.html#tutoriels","developer_manual/tutorials/index.html#todo","developer_manual/tutorials/01-getting-started.html#premiers-pas-avec-gitrust--compilez-configurez-et-poussez-votre-premier-commit","developer_manual/tutorials/01-getting-started.html#objectifs","developer_manual/tutorials/01-getting-started.html#pré-requis","developer_manual/tutorials/01-getting-started.html#vue-densemble","developer_manual/tutorials/01-getting-started.html#étape-1--vérifiez-les-pré-requis-système","developer_manual/tutorials/01-getting-started.html#étape-2--clonez-le-projet","developer_manual/tutorials/01-getting-started.html#étape-3--configurez-lenvironnement-env","developer_manual/tutorials/01-getting-started.html#étape-4--préparez-la-base-de-données-postgresql","developer_manual/tutorials/01-getting-started.html#étape-5--compilez-les-assets-css","developer_manual/tutorials/01-getting-started.html#étape-6--lancez-lapplication","developer_manual/tutorials/01-getting-started.html#étape-7--créez-un-dépôt-et-poussez-votre-premier-commit","developer_manual/tutorials/01-getting-started.html#fonctionnalités-supplémentaires-disponibles","developer_manual/tutorials/01-getting-started.html#ci-intégrée-optionnelle","developer_manual/tutorials/01-getting-started.html#notifications","developer_manual/tutorials/01-getting-started.html#langue-de-linterface","developer_manual/tutorials/01-getting-started.html#récapitulatif","developer_manual/tutorials/01-getting-started.html#et-si-ça-ne-marche-pas","developer_manual/tutorials/01-getting-started.html#prochaine-étape","developer_manual/tutorials/02-premiere-contribution.html#02--première-contribution","developer_manual/tutorials/02-premiere-contribution.html#todo","developer_manual/tutorials/03-creer-un-worker-async.html#03--créer-un-worker-async-capstone","developer_manual/tutorials/03-creer-un-worker-async.html#todo","developer_manual/how-to/index.html#guides-pratiques","developer_manual/how-to/index.html#todo","developer_manual/how-to/contribuer-workflow-pr.html#workflow-de-contribution-et-pr","developer_manual/how-to/contribuer-workflow-pr.html#todo","developer_manual/how-to/lancer-tests-unitaires.html#lancer-les-tests-unitaires","developer_manual/how-to/lancer-tests-unitaires.html#infrastructure-existante","developer_manual/how-to/lancer-tests-unitaires.html#tests-unitaires-rust","developer_manual/how-to/lancer-tests-unitaires.html#tests-e2e-playwright","developer_manual/how-to/lancer-tests-unitaires.html#structure-des-répertoires","developer_manual/how-to/lancer-tests-unitaires.html#tests-à-ajouter","developer_manual/how-to/lancer-tests-unitaires.html#1-tests-fonctionnels-api-rest-intégration-rust","developer_manual/how-to/lancer-tests-unitaires.html#2-tests-fonctionnels-ci","developer_manual/how-to/lancer-tests-unitaires.html#3-tests-e2e-playwright-à-ajouter","developer_manual/how-to/lancer-tests-unitaires.html#4-tests-settings--comportement","developer_manual/how-to/lancer-tests-unitaires.html#commandes-de-test","developer_manual/how-to/lancer-tests-unitaires.html#ci-locale-exécuter-avant-un-push","developer_manual/how-to/lancer-tests-e2e.html#lancer-les-tests-end-to-end-e2e","developer_manual/how-to/lancer-tests-e2e.html#pré-requis","developer_manual/how-to/lancer-tests-e2e.html#commandes","developer_manual/how-to/lancer-tests-e2e.html#architecture","developer_manual/how-to/lancer-tests-e2e.html#isolation-de-lenvironnement-de-test","developer_manual/how-to/lancer-tests-e2e.html#fonctionnement","developer_manual/how-to/lancer-tests-e2e.html#fixtures","developer_manual/how-to/lancer-tests-e2e.html#liste-des-tests","developer_manual/how-to/lancer-tests-e2e.html#authspects--authentification","developer_manual/how-to/lancer-tests-e2e.html#repositoryspects--gestion-des-dépôts","developer_manual/how-to/lancer-tests-e2e.html#adminspects--administration","developer_manual/how-to/lancer-tests-e2e.html#navigationspects--navigation-et-ui","developer_manual/how-to/lancer-tests-e2e.html#ajouter-un-nouveau-test","developer_manual/how-to/ajouter-route-web.html#ajouter-une-route-web","developer_manual/how-to/ajouter-route-web.html#todo","developer_manual/how-to/ajouter-service-metier.html#ajouter-un-service-métier","developer_manual/how-to/ajouter-service-metier.html#todo","developer_manual/how-to/ajouter-migration-db.html#ajouter-une-migration-de-base-de-données","developer_manual/how-to/ajouter-migration-db.html#todo","developer_manual/how-to/implementer-webhooks.html#implémenter-des-webhooks","developer_manual/how-to/implementer-webhooks.html#todo","developer_manual/how-to/implementer-endpoint-api.html#implémenter-un-endpoint-api","developer_manual/how-to/implementer-endpoint-api.html#todo","developer_manual/how-to/importer-depot-externe-code.html#importer-un-dépôt-externe","developer_manual/how-to/importer-depot-externe-code.html#1-rôle-de-la-base-de-données","developer_manual/how-to/importer-depot-externe-code.html#pourquoi-persister-létat-","developer_manual/how-to/importer-depot-externe-code.html#2-schéma-du-flux-actuel","developer_manual/how-to/importer-depot-externe-code.html#3-coût-db-par-import","developer_manual/how-to/importer-depot-externe-code.html#4-pistes-doptimisation-sans-changer-libgit2","developer_manual/how-to/importer-depot-externe-code.html#41-éliminer-le-select-avant-update-dans-update_progress","developer_manual/how-to/importer-depot-externe-code.html#42-downsampler-la-progression-dans-le-worker-dédié","developer_manual/how-to/importer-depot-externe-code.html#43-supprimer-le-returning-implicite-de-seaorm","developer_manual/how-to/importer-depot-externe-code.html#44-pool-db-dédié-pour-le-worker","developer_manual/how-to/importer-depot-externe-code.html#45-debouncer-le-sse-côté-serveur","developer_manual/how-to/importer-depot-externe-code.html#5-optimisation-majeure--shell-out-vers-git-clone---bare","developer_manual/how-to/importer-depot-externe-code.html#6-priorités-recommandées","developer_manual/how-to/contribuer-a-rustwarden.html#contribuer-à-rustwarden","developer_manual/how-to/contribuer-a-rustwarden.html#services-framework-utilisés","developer_manual/how-to/contribuer-a-rustwarden.html#hook-on_user_deleted-implémenté","developer_manual/how-to/contribuer-a-rustwarden.html#règle-fondamentale","developer_manual/how-to/contribuer-a-rustwarden.html#aucun-contournement-en-cours","developer_manual/how-to/contribuer-a-rustwarden.html#ajouter-une-fonctionnalité-nécessitant-un-service-framework-absent","developer_manual/how-to/contribuer-a-rustwarden.html#pattern-dextension-via-hooks","developer_manual/how-to/passer-la-qa-avant-merge.html#passer-la-qa-avant-un-merge","developer_manual/how-to/passer-la-qa-avant-merge.html#todo","developer_manual/reference/index.html#référence","developer_manual/reference/index.html#todo","developer_manual/reference/architecture-crates.html#architecture-par-crates","developer_manual/reference/architecture-crates.html#dépendances-entre-crates","developer_manual/reference/architecture-crates.html#crates--responsabilités","developer_manual/reference/architecture-crates.html#gitrust-core","developer_manual/reference/architecture-crates.html#gitrust-git","developer_manual/reference/architecture-crates.html#gitrust-ssh","developer_manual/reference/architecture-crates.html#gitrust-web","developer_manual/reference/architecture-crates.html#gitrust-hooks","developer_manual/reference/architecture-crates.html#notifications","developer_manual/reference/architecture-crates.html#cicd--modes-et-composants","developer_manual/reference/architecture-crates.html#modes","developer_manual/reference/architecture-crates.html#architecture-ci","developer_manual/reference/architecture-crates.html#composants-externes-tous-optionnels-sauf-dagger","developer_manual/reference/architecture-crates.html#variables-et-secrets-ci","developer_manual/reference/architecture-crates.html#sécurité-anssi-pa-074","developer_manual/reference/services-api-interne.html#services-et-api-interne","developer_manual/reference/services-api-interne.html#todo","developer_manual/reference/schema-base-donnees.html#schéma-de-la-base-de-données","developer_manual/reference/schema-base-donnees.html#todo","developer_manual/reference/regles-qa-anssi.html#règles-qa--conformité-anssi","developer_manual/reference/regles-qa-anssi.html#1-gates-de-compilation-obligatoires","developer_manual/reference/regles-qa-anssi.html#gates-supplémentaires-à-mettre-en-place","developer_manual/reference/regles-qa-anssi.html#2-règles-de-sécurité-anssi-pa-074","developer_manual/reference/regles-qa-anssi.html#21-lints-rust-obligatoires-déjà-en-place","developer_manual/reference/regles-qa-anssi.html#22-checklist-sécurité-par-feature","developer_manual/reference/regles-qa-anssi.html#23-marqueurs-sec-","developer_manual/reference/regles-qa-anssi.html#3-tests-requis-par-catégorie","developer_manual/reference/regles-qa-anssi.html#31-matrice-de-couverture","developer_manual/reference/regles-qa-anssi.html#32-règles-de-tests","developer_manual/reference/regles-qa-anssi.html#4-règles-de-code","developer_manual/reference/regles-qa-anssi.html#41-framework-boundary","developer_manual/reference/regles-qa-anssi.html#42-assets","developer_manual/reference/regles-qa-anssi.html#43-gestion-derreurs","developer_manual/reference/regles-qa-anssi.html#44-validation-aux-frontières","developer_manual/reference/regles-qa-anssi.html#5-checklist-pré-merge","developer_manual/reference/api-rest-v1.html#api-rest-v1","developer_manual/reference/api-rest-v1.html#todo","developer_manual/reference/git-hooks-post-receive.html#hooks-git-post-receive","developer_manual/reference/git-hooks-post-receive.html#todo","developer_manual/reference/rustwarden-core-api.html#api-rustwarden-core","developer_manual/reference/rustwarden-core-api.html#todo","developer_manual/explanation/index.html#explication","developer_manual/explanation/index.html#todo","developer_manual/explanation/vue-ensemble-architecture.html#vue-densemble-de-larchitecture","developer_manual/explanation/vue-ensemble-architecture.html#vue-densemble","developer_manual/explanation/vue-ensemble-architecture.html#démarrage-de-lapplication","developer_manual/explanation/vue-ensemble-architecture.html#principes-de-conception","developer_manual/explanation/vue-ensemble-architecture.html#séparation-framework--métier-gitrust","developer_manual/explanation/vue-ensemble-architecture.html#mode-headless","developer_manual/explanation/vue-ensemble-architecture.html#ssr--htmx-zéro-cdn","developer_manual/explanation/vue-ensemble-architecture.html#bare-repos-sur-le-système-de-fichiers","developer_manual/explanation/vue-ensemble-architecture.html#ci-hybride--dagger-comme-abstraction-dexécution","developer_manual/explanation/vue-ensemble-architecture.html#pour-aller-plus-loin","developer_manual/explanation/flux-requetes.html#flux-de-requêtes","developer_manual/explanation/flux-requetes.html#1-création-dun-dépôt-web","developer_manual/explanation/flux-requetes.html#2-clone-ssh-git-clone","developer_manual/explanation/flux-requetes.html#3-push-ssh-git-push","developer_manual/explanation/flux-requetes.html#4-enregistrement-dune-clé-ssh","developer_manual/explanation/flux-requetes.html#5-résolution-des-permissions-accessservice","developer_manual/explanation/flux-requetes.html#6-navigation-dans-un-dépôt-web","developer_manual/explanation/flux-requetes.html#7-inscription-utilisateur--création-répertoire","developer_manual/explanation/modele-permissions-rbac.html#modèle-de-permissions-rbac","developer_manual/explanation/modele-permissions-rbac.html#todo","developer_manual/explanation/2fa-fonctionnement.html#fonctionnement-du-2fa","developer_manual/explanation/2fa-fonctionnement.html#todo","developer_manual/explanation/hierarchie-labels.html#hiérarchie-des-labels","developer_manual/explanation/hierarchie-labels.html#todo","developer_manual/explanation/ci-dagger-easy-vs-power.html#ci-dagger--easy-mode-vs-power-mode","developer_manual/explanation/ci-dagger-easy-vs-power.html#todo","developer_manual/explanation/decisions-ui-htmx.html#décisions-ui-htmx-daisyui","developer_manual/explanation/decisions-ui-htmx.html#todo","developer_manual/explanation/patron-worker-async.html#patron-worker-async","developer_manual/explanation/patron-worker-async.html#todo","template/index.html#bibliothèque-de-templates-gitrust","template/index.html#fichiers-denvironnement-env","template/index.html#stacks-docker-docker","template/index.html#reverse-proxy-reverse-proxy","template/index.html#systemd-systemd","template/index.html#configurations-ci-gitrust-ciyml-ci","template/index.html#scripts-de-sauvegarde-et-restauration-backup","template/index.html#clients-api-dexemple-api-clients","template/index.html#scripts-de-migration-migration","template/index.html#comment-utiliser-ces-templates-depuis-les-manuels"],"index":{"documentStore":{"docInfo":{"0":{"body":0,"breadcrumbs":2,"title":1},"1":{"body":77,"breadcrumbs":5,"title":4},"10":{"body":37,"breadcrumbs":6,"title":4},"100":{"body":16,"breadcrumbs":16,"title":9},"101":{"body":41,"breadcrumbs":10,"title":3},"102":{"body":108,"breadcrumbs":17,"title":10},"103":{"body":7,"breadcrumbs":17,"title":10},"104":{"body":103,"breadcrumbs":12,"title":5},"105":{"body":47,"breadcrumbs":14,"title":7},"106":{"body":25,"breadcrumbs":14,"title":7},"107":{"body":34,"breadcrumbs":20,"title":13},"108":{"body":72,"breadcrumbs":9,"title":2},"109":{"body":73,"breadcrumbs":12,"title":5},"11":{"body":29,"breadcrumbs":2,"title":1},"110":{"body":0,"breadcrumbs":14,"title":7},"111":{"body":14,"breadcrumbs":10,"title":3},"112":{"body":2,"breadcrumbs":13,"title":6},"113":{"body":62,"breadcrumbs":9,"title":2},"114":{"body":0,"breadcrumbs":13,"title":6},"115":{"body":26,"breadcrumbs":11,"title":4},"116":{"body":53,"breadcrumbs":12,"title":5},"117":{"body":16,"breadcrumbs":13,"title":6},"118":{"body":17,"breadcrumbs":12,"title":5},"119":{"body":19,"breadcrumbs":10,"title":3},"12":{"body":33,"breadcrumbs":2,"title":1},"120":{"body":0,"breadcrumbs":17,"title":10},"121":{"body":61,"breadcrumbs":12,"title":5},"122":{"body":38,"breadcrumbs":15,"title":8},"123":{"body":50,"breadcrumbs":11,"title":4},"124":{"body":78,"breadcrumbs":11,"title":4},"125":{"body":9,"breadcrumbs":11,"title":4},"126":{"body":16,"breadcrumbs":9,"title":2},"127":{"body":111,"breadcrumbs":11,"title":4},"128":{"body":0,"breadcrumbs":18,"title":11},"129":{"body":19,"breadcrumbs":14,"title":7},"13":{"body":0,"breadcrumbs":20,"title":14},"130":{"body":22,"breadcrumbs":13,"title":6},"131":{"body":11,"breadcrumbs":13,"title":6},"132":{"body":5,"breadcrumbs":12,"title":5},"133":{"body":147,"breadcrumbs":8,"title":1},"134":{"body":55,"breadcrumbs":10,"title":3},"135":{"body":29,"breadcrumbs":4,"title":2},"136":{"body":33,"breadcrumbs":3,"title":1},"137":{"body":29,"breadcrumbs":8,"title":3},"138":{"body":33,"breadcrumbs":6,"title":1},"139":{"body":29,"breadcrumbs":8,"title":3},"14":{"body":45,"breadcrumbs":7,"title":1},"140":{"body":33,"breadcrumbs":6,"title":1},"141":{"body":29,"breadcrumbs":6,"title":2},"142":{"body":33,"breadcrumbs":5,"title":1},"143":{"body":29,"breadcrumbs":6,"title":2},"144":{"body":33,"breadcrumbs":5,"title":1},"145":{"body":20,"breadcrumbs":12,"title":5},"146":{"body":89,"breadcrumbs":11,"title":4},"147":{"body":103,"breadcrumbs":10,"title":3},"148":{"body":73,"breadcrumbs":10,"title":3},"149":{"body":0,"breadcrumbs":10,"title":3},"15":{"body":41,"breadcrumbs":8,"title":2},"150":{"body":34,"breadcrumbs":16,"title":9},"151":{"body":58,"breadcrumbs":11,"title":4},"152":{"body":22,"breadcrumbs":13,"title":6},"153":{"body":77,"breadcrumbs":10,"title":3},"154":{"body":12,"breadcrumbs":13,"title":6},"155":{"body":25,"breadcrumbs":14,"title":7},"156":{"body":38,"breadcrumbs":14,"title":7},"157":{"body":0,"breadcrumbs":9,"title":2},"158":{"body":9,"breadcrumbs":14,"title":7},"159":{"body":15,"breadcrumbs":11,"title":4},"16":{"body":201,"breadcrumbs":8,"title":2},"160":{"body":99,"breadcrumbs":9,"title":2},"161":{"body":56,"breadcrumbs":15,"title":8},"162":{"body":0,"breadcrumbs":11,"title":4},"163":{"body":47,"breadcrumbs":11,"title":4},"164":{"body":35,"breadcrumbs":12,"title":5},"165":{"body":52,"breadcrumbs":15,"title":8},"166":{"body":185,"breadcrumbs":9,"title":2},"167":{"body":91,"breadcrumbs":9,"title":2},"168":{"body":53,"breadcrumbs":12,"title":6},"169":{"body":135,"breadcrumbs":9,"title":3},"17":{"body":79,"breadcrumbs":16,"title":10},"170":{"body":0,"breadcrumbs":12,"title":6},"171":{"body":98,"breadcrumbs":12,"title":6},"172":{"body":57,"breadcrumbs":11,"title":5},"173":{"body":42,"breadcrumbs":13,"title":7},"174":{"body":137,"breadcrumbs":13,"title":7},"175":{"body":66,"breadcrumbs":10,"title":4},"176":{"body":28,"breadcrumbs":13,"title":7},"177":{"body":60,"breadcrumbs":9,"title":3},"178":{"body":50,"breadcrumbs":10,"title":4},"179":{"body":28,"breadcrumbs":11,"title":5},"18":{"body":137,"breadcrumbs":15,"title":9},"180":{"body":90,"breadcrumbs":9,"title":3},"181":{"body":53,"breadcrumbs":10,"title":4},"182":{"body":0,"breadcrumbs":8,"title":2},"183":{"body":61,"breadcrumbs":9,"title":3},"184":{"body":54,"breadcrumbs":9,"title":3},"185":{"body":47,"breadcrumbs":8,"title":2},"186":{"body":77,"breadcrumbs":9,"title":3},"187":{"body":55,"breadcrumbs":9,"title":4},"188":{"body":27,"breadcrumbs":7,"title":2},"189":{"body":421,"breadcrumbs":9,"title":4},"19":{"body":155,"breadcrumbs":14,"title":8},"190":{"body":8,"breadcrumbs":8,"title":3},"191":{"body":23,"breadcrumbs":8,"title":3},"192":{"body":27,"breadcrumbs":9,"title":4},"193":{"body":47,"breadcrumbs":8,"title":3},"194":{"body":28,"breadcrumbs":8,"title":3},"195":{"body":24,"breadcrumbs":11,"title":6},"196":{"body":26,"breadcrumbs":11,"title":6},"197":{"body":21,"breadcrumbs":10,"title":5},"198":{"body":21,"breadcrumbs":15,"title":10},"199":{"body":148,"breadcrumbs":13,"title":8},"2":{"body":118,"breadcrumbs":5,"title":4},"20":{"body":128,"breadcrumbs":16,"title":10},"200":{"body":0,"breadcrumbs":15,"title":10},"201":{"body":23,"breadcrumbs":10,"title":5},"202":{"body":120,"breadcrumbs":12,"title":7},"203":{"body":7,"breadcrumbs":7,"title":2},"204":{"body":55,"breadcrumbs":9,"title":4},"205":{"body":73,"breadcrumbs":9,"title":4},"206":{"body":54,"breadcrumbs":8,"title":3},"207":{"body":51,"breadcrumbs":7,"title":2},"208":{"body":178,"breadcrumbs":8,"title":3},"209":{"body":0,"breadcrumbs":11,"title":6},"21":{"body":114,"breadcrumbs":13,"title":7},"210":{"body":25,"breadcrumbs":8,"title":3},"211":{"body":52,"breadcrumbs":8,"title":3},"212":{"body":23,"breadcrumbs":7,"title":2},"213":{"body":36,"breadcrumbs":7,"title":2},"214":{"body":97,"breadcrumbs":9,"title":4},"215":{"body":29,"breadcrumbs":10,"title":4},"216":{"body":33,"breadcrumbs":7,"title":1},"217":{"body":29,"breadcrumbs":14,"title":6},"218":{"body":33,"breadcrumbs":9,"title":1},"219":{"body":29,"breadcrumbs":6,"title":2},"22":{"body":54,"breadcrumbs":7,"title":1},"220":{"body":33,"breadcrumbs":5,"title":1},"221":{"body":29,"breadcrumbs":8,"title":3},"222":{"body":33,"breadcrumbs":6,"title":1},"223":{"body":29,"breadcrumbs":12,"title":5},"224":{"body":33,"breadcrumbs":8,"title":1},"225":{"body":29,"breadcrumbs":8,"title":3},"226":{"body":33,"breadcrumbs":6,"title":1},"227":{"body":29,"breadcrumbs":2,"title":1},"228":{"body":33,"breadcrumbs":2,"title":1},"229":{"body":29,"breadcrumbs":5,"title":2},"23":{"body":165,"breadcrumbs":11,"title":5},"230":{"body":33,"breadcrumbs":4,"title":1},"231":{"body":21,"breadcrumbs":5,"title":2},"232":{"body":47,"breadcrumbs":8,"title":5},"233":{"body":0,"breadcrumbs":7,"title":4},"234":{"body":27,"breadcrumbs":4,"title":1},"235":{"body":21,"breadcrumbs":6,"title":3},"236":{"body":24,"breadcrumbs":6,"title":3},"237":{"body":30,"breadcrumbs":4,"title":1},"238":{"body":39,"breadcrumbs":9,"title":6},"239":{"body":0,"breadcrumbs":8,"title":5},"24":{"body":24,"breadcrumbs":8,"title":2},"240":{"body":28,"breadcrumbs":4,"title":1},"241":{"body":26,"breadcrumbs":7,"title":4},"242":{"body":51,"breadcrumbs":6,"title":3},"243":{"body":162,"breadcrumbs":12,"title":9},"244":{"body":95,"breadcrumbs":7,"title":4},"245":{"body":0,"breadcrumbs":9,"title":6},"246":{"body":9,"breadcrumbs":7,"title":4},"247":{"body":22,"breadcrumbs":7,"title":4},"248":{"body":28,"breadcrumbs":6,"title":3},"249":{"body":120,"breadcrumbs":10,"title":7},"25":{"body":29,"breadcrumbs":13,"title":6},"250":{"body":35,"breadcrumbs":7,"title":4},"251":{"body":0,"breadcrumbs":8,"title":5},"252":{"body":21,"breadcrumbs":7,"title":4},"253":{"body":20,"breadcrumbs":7,"title":4},"254":{"body":24,"breadcrumbs":7,"title":4},"255":{"body":26,"breadcrumbs":9,"title":6},"256":{"body":0,"breadcrumbs":8,"title":5},"257":{"body":46,"breadcrumbs":8,"title":5},"258":{"body":27,"breadcrumbs":8,"title":5},"259":{"body":18,"breadcrumbs":10,"title":7},"26":{"body":33,"breadcrumbs":8,"title":1},"260":{"body":29,"breadcrumbs":13,"title":6},"261":{"body":33,"breadcrumbs":8,"title":1},"262":{"body":29,"breadcrumbs":7,"title":3},"263":{"body":33,"breadcrumbs":5,"title":1},"264":{"body":29,"breadcrumbs":9,"title":4},"265":{"body":33,"breadcrumbs":6,"title":1},"266":{"body":29,"breadcrumbs":2,"title":1},"267":{"body":33,"breadcrumbs":2,"title":1},"268":{"body":29,"breadcrumbs":5,"title":2},"269":{"body":33,"breadcrumbs":4,"title":1},"27":{"body":29,"breadcrumbs":13,"title":6},"270":{"body":29,"breadcrumbs":7,"title":3},"271":{"body":33,"breadcrumbs":5,"title":1},"272":{"body":29,"breadcrumbs":15,"title":7},"273":{"body":33,"breadcrumbs":9,"title":1},"274":{"body":29,"breadcrumbs":7,"title":3},"275":{"body":33,"breadcrumbs":5,"title":1},"276":{"body":68,"breadcrumbs":4,"title":2},"277":{"body":124,"breadcrumbs":6,"title":4},"278":{"body":48,"breadcrumbs":6,"title":4},"279":{"body":71,"breadcrumbs":7,"title":5},"28":{"body":33,"breadcrumbs":8,"title":1},"280":{"body":58,"breadcrumbs":6,"title":4},"281":{"body":63,"breadcrumbs":6,"title":4},"282":{"body":29,"breadcrumbs":2,"title":1},"283":{"body":33,"breadcrumbs":2,"title":1},"284":{"body":25,"breadcrumbs":18,"title":11},"285":{"body":48,"breadcrumbs":8,"title":1},"286":{"body":54,"breadcrumbs":9,"title":2},"287":{"body":191,"breadcrumbs":9,"title":2},"288":{"body":111,"breadcrumbs":14,"title":7},"289":{"body":54,"breadcrumbs":12,"title":5},"29":{"body":29,"breadcrumbs":11,"title":5},"290":{"body":128,"breadcrumbs":12,"title":5},"291":{"body":119,"breadcrumbs":15,"title":8},"292":{"body":81,"breadcrumbs":13,"title":6},"293":{"body":164,"breadcrumbs":11,"title":4},"294":{"body":147,"breadcrumbs":17,"title":10},"295":{"body":0,"breadcrumbs":10,"title":3},"296":{"body":65,"breadcrumbs":10,"title":3},"297":{"body":14,"breadcrumbs":8,"title":1},"298":{"body":19,"breadcrumbs":10,"title":3},"299":{"body":47,"breadcrumbs":8,"title":1},"3":{"body":84,"breadcrumbs":7,"title":6},"30":{"body":33,"breadcrumbs":7,"title":1},"300":{"body":98,"breadcrumbs":12,"title":5},"301":{"body":28,"breadcrumbs":9,"title":2},"302":{"body":29,"breadcrumbs":7,"title":3},"303":{"body":33,"breadcrumbs":5,"title":1},"304":{"body":29,"breadcrumbs":13,"title":6},"305":{"body":33,"breadcrumbs":8,"title":1},"306":{"body":29,"breadcrumbs":4,"title":2},"307":{"body":33,"breadcrumbs":3,"title":1},"308":{"body":29,"breadcrumbs":12,"title":5},"309":{"body":33,"breadcrumbs":8,"title":1},"31":{"body":29,"breadcrumbs":4,"title":2},"310":{"body":11,"breadcrumbs":10,"title":4},"311":{"body":0,"breadcrumbs":8,"title":2},"312":{"body":32,"breadcrumbs":9,"title":3},"313":{"body":61,"breadcrumbs":9,"title":3},"314":{"body":55,"breadcrumbs":9,"title":3},"315":{"body":0,"breadcrumbs":8,"title":2},"316":{"body":89,"breadcrumbs":13,"title":7},"317":{"body":110,"breadcrumbs":10,"title":4},"318":{"body":97,"breadcrumbs":11,"title":5},"319":{"body":60,"breadcrumbs":10,"title":4},"32":{"body":33,"breadcrumbs":3,"title":1},"320":{"body":51,"breadcrumbs":9,"title":3},"321":{"body":20,"breadcrumbs":12,"title":6},"322":{"body":29,"breadcrumbs":12,"title":6},"323":{"body":28,"breadcrumbs":8,"title":2},"324":{"body":48,"breadcrumbs":7,"title":1},"325":{"body":63,"breadcrumbs":7,"title":1},"326":{"body":30,"breadcrumbs":11,"title":5},"327":{"body":79,"breadcrumbs":7,"title":1},"328":{"body":34,"breadcrumbs":7,"title":1},"329":{"body":0,"breadcrumbs":9,"title":3},"33":{"body":29,"breadcrumbs":10,"title":4},"330":{"body":114,"breadcrumbs":8,"title":2},"331":{"body":84,"breadcrumbs":10,"title":4},"332":{"body":76,"breadcrumbs":8,"title":2},"333":{"body":79,"breadcrumbs":10,"title":4},"334":{"body":34,"breadcrumbs":10,"title":4},"335":{"body":29,"breadcrumbs":10,"title":4},"336":{"body":33,"breadcrumbs":7,"title":1},"337":{"body":29,"breadcrumbs":10,"title":4},"338":{"body":33,"breadcrumbs":7,"title":1},"339":{"body":29,"breadcrumbs":16,"title":7},"34":{"body":33,"breadcrumbs":7,"title":1},"340":{"body":33,"breadcrumbs":10,"title":1},"341":{"body":29,"breadcrumbs":8,"title":3},"342":{"body":33,"breadcrumbs":6,"title":1},"343":{"body":29,"breadcrumbs":10,"title":4},"344":{"body":33,"breadcrumbs":7,"title":1},"345":{"body":22,"breadcrumbs":11,"title":4},"346":{"body":77,"breadcrumbs":14,"title":7},"347":{"body":81,"breadcrumbs":10,"title":3},"348":{"body":194,"breadcrumbs":12,"title":5},"349":{"body":88,"breadcrumbs":12,"title":5},"35":{"body":29,"breadcrumbs":12,"title":5},"350":{"body":0,"breadcrumbs":13,"title":6},"351":{"body":82,"breadcrumbs":15,"title":8},"352":{"body":81,"breadcrumbs":15,"title":8},"353":{"body":29,"breadcrumbs":14,"title":7},"354":{"body":32,"breadcrumbs":14,"title":7},"355":{"body":46,"breadcrumbs":13,"title":6},"356":{"body":129,"breadcrumbs":16,"title":9},"357":{"body":83,"breadcrumbs":10,"title":3},"358":{"body":24,"breadcrumbs":7,"title":2},"359":{"body":48,"breadcrumbs":8,"title":3},"36":{"body":33,"breadcrumbs":8,"title":1},"360":{"body":22,"breadcrumbs":8,"title":3},"361":{"body":41,"breadcrumbs":7,"title":2},"362":{"body":24,"breadcrumbs":9,"title":4},"363":{"body":66,"breadcrumbs":13,"title":8},"364":{"body":58,"breadcrumbs":9,"title":4},"365":{"body":29,"breadcrumbs":14,"title":6},"366":{"body":33,"breadcrumbs":9,"title":1},"367":{"body":29,"breadcrumbs":2,"title":1},"368":{"body":33,"breadcrumbs":2,"title":1},"369":{"body":11,"breadcrumbs":7,"title":3},"37":{"body":29,"breadcrumbs":12,"title":5},"370":{"body":74,"breadcrumbs":7,"title":3},"371":{"body":0,"breadcrumbs":6,"title":2},"372":{"body":84,"breadcrumbs":6,"title":2},"373":{"body":85,"breadcrumbs":6,"title":2},"374":{"body":36,"breadcrumbs":6,"title":2},"375":{"body":272,"breadcrumbs":6,"title":2},"376":{"body":58,"breadcrumbs":6,"title":2},"377":{"body":59,"breadcrumbs":5,"title":1},"378":{"body":8,"breadcrumbs":8,"title":4},"379":{"body":45,"breadcrumbs":5,"title":1},"38":{"body":33,"breadcrumbs":8,"title":1},"380":{"body":83,"breadcrumbs":6,"title":2},"381":{"body":38,"breadcrumbs":10,"title":6},"382":{"body":42,"breadcrumbs":8,"title":4},"383":{"body":52,"breadcrumbs":8,"title":4},"384":{"body":29,"breadcrumbs":9,"title":4},"385":{"body":33,"breadcrumbs":6,"title":1},"386":{"body":29,"breadcrumbs":13,"title":6},"387":{"body":33,"breadcrumbs":8,"title":1},"388":{"body":23,"breadcrumbs":10,"title":4},"389":{"body":44,"breadcrumbs":11,"title":5},"39":{"body":29,"breadcrumbs":14,"title":6},"390":{"body":38,"breadcrumbs":11,"title":5},"391":{"body":0,"breadcrumbs":13,"title":7},"392":{"body":17,"breadcrumbs":13,"title":7},"393":{"body":111,"breadcrumbs":11,"title":5},"394":{"body":59,"breadcrumbs":9,"title":3},"395":{"body":0,"breadcrumbs":11,"title":5},"396":{"body":57,"breadcrumbs":10,"title":4},"397":{"body":74,"breadcrumbs":10,"title":4},"398":{"body":0,"breadcrumbs":10,"title":4},"399":{"body":27,"breadcrumbs":9,"title":3},"4":{"body":31,"breadcrumbs":5,"title":4},"40":{"body":33,"breadcrumbs":9,"title":1},"400":{"body":16,"breadcrumbs":8,"title":2},"401":{"body":22,"breadcrumbs":9,"title":3},"402":{"body":24,"breadcrumbs":10,"title":4},"403":{"body":56,"breadcrumbs":10,"title":4},"404":{"body":29,"breadcrumbs":7,"title":3},"405":{"body":33,"breadcrumbs":5,"title":1},"406":{"body":29,"breadcrumbs":9,"title":4},"407":{"body":33,"breadcrumbs":6,"title":1},"408":{"body":29,"breadcrumbs":7,"title":3},"409":{"body":33,"breadcrumbs":5,"title":1},"41":{"body":29,"breadcrumbs":10,"title":4},"410":{"body":29,"breadcrumbs":2,"title":1},"411":{"body":33,"breadcrumbs":2,"title":1},"412":{"body":28,"breadcrumbs":9,"title":4},"413":{"body":149,"breadcrumbs":7,"title":2},"414":{"body":163,"breadcrumbs":8,"title":3},"415":{"body":0,"breadcrumbs":8,"title":3},"416":{"body":81,"breadcrumbs":9,"title":4},"417":{"body":38,"breadcrumbs":7,"title":2},"418":{"body":45,"breadcrumbs":9,"title":4},"419":{"body":49,"breadcrumbs":12,"title":7},"42":{"body":33,"breadcrumbs":7,"title":1},"420":{"body":49,"breadcrumbs":11,"title":6},"421":{"body":29,"breadcrumbs":9,"title":4},"422":{"body":27,"breadcrumbs":7,"title":3},"423":{"body":113,"breadcrumbs":9,"title":5},"424":{"body":171,"breadcrumbs":9,"title":5},"425":{"body":127,"breadcrumbs":9,"title":5},"426":{"body":90,"breadcrumbs":9,"title":5},"427":{"body":81,"breadcrumbs":9,"title":5},"428":{"body":118,"breadcrumbs":10,"title":6},"429":{"body":64,"breadcrumbs":9,"title":5},"43":{"body":29,"breadcrumbs":16,"title":7},"430":{"body":29,"breadcrumbs":9,"title":4},"431":{"body":33,"breadcrumbs":6,"title":1},"432":{"body":29,"breadcrumbs":7,"title":3},"433":{"body":33,"breadcrumbs":5,"title":1},"434":{"body":29,"breadcrumbs":7,"title":3},"435":{"body":33,"breadcrumbs":5,"title":1},"436":{"body":29,"breadcrumbs":15,"title":7},"437":{"body":33,"breadcrumbs":9,"title":1},"438":{"body":29,"breadcrumbs":9,"title":4},"439":{"body":33,"breadcrumbs":6,"title":1},"44":{"body":33,"breadcrumbs":10,"title":1},"440":{"body":29,"breadcrumbs":7,"title":3},"441":{"body":33,"breadcrumbs":5,"title":1},"442":{"body":71,"breadcrumbs":7,"title":4},"443":{"body":61,"breadcrumbs":6,"title":3},"444":{"body":55,"breadcrumbs":6,"title":3},"445":{"body":47,"breadcrumbs":7,"title":4},"446":{"body":27,"breadcrumbs":5,"title":2},"447":{"body":78,"breadcrumbs":8,"title":5},"448":{"body":27,"breadcrumbs":9,"title":6},"449":{"body":68,"breadcrumbs":8,"title":5},"45":{"body":29,"breadcrumbs":14,"title":6},"450":{"body":30,"breadcrumbs":7,"title":4},"451":{"body":54,"breadcrumbs":10,"title":7},"46":{"body":33,"breadcrumbs":9,"title":1},"47":{"body":29,"breadcrumbs":10,"title":4},"48":{"body":33,"breadcrumbs":7,"title":1},"49":{"body":29,"breadcrumbs":12,"title":5},"5":{"body":55,"breadcrumbs":4,"title":2},"50":{"body":33,"breadcrumbs":8,"title":1},"51":{"body":29,"breadcrumbs":2,"title":1},"52":{"body":33,"breadcrumbs":2,"title":1},"53":{"body":29,"breadcrumbs":11,"title":5},"54":{"body":33,"breadcrumbs":7,"title":1},"55":{"body":29,"breadcrumbs":7,"title":3},"56":{"body":33,"breadcrumbs":5,"title":1},"57":{"body":29,"breadcrumbs":11,"title":5},"58":{"body":33,"breadcrumbs":7,"title":1},"59":{"body":29,"breadcrumbs":9,"title":4},"6":{"body":155,"breadcrumbs":4,"title":2},"60":{"body":33,"breadcrumbs":6,"title":1},"61":{"body":29,"breadcrumbs":3,"title":1},"62":{"body":33,"breadcrumbs":3,"title":1},"63":{"body":29,"breadcrumbs":2,"title":1},"64":{"body":33,"breadcrumbs":2,"title":1},"65":{"body":29,"breadcrumbs":11,"title":5},"66":{"body":33,"breadcrumbs":7,"title":1},"67":{"body":29,"breadcrumbs":7,"title":3},"68":{"body":33,"breadcrumbs":5,"title":1},"69":{"body":29,"breadcrumbs":13,"title":6},"7":{"body":53,"breadcrumbs":6,"title":4},"70":{"body":33,"breadcrumbs":8,"title":1},"71":{"body":54,"breadcrumbs":4,"title":2},"72":{"body":131,"breadcrumbs":4,"title":2},"73":{"body":51,"breadcrumbs":6,"title":4},"74":{"body":62,"breadcrumbs":7,"title":5},"75":{"body":41,"breadcrumbs":6,"title":4},"76":{"body":50,"breadcrumbs":6,"title":4},"77":{"body":29,"breadcrumbs":2,"title":1},"78":{"body":33,"breadcrumbs":2,"title":1},"79":{"body":0,"breadcrumbs":15,"title":10},"8":{"body":79,"breadcrumbs":7,"title":5},"80":{"body":41,"breadcrumbs":6,"title":1},"81":{"body":53,"breadcrumbs":7,"title":2},"82":{"body":184,"breadcrumbs":7,"title":2},"83":{"body":157,"breadcrumbs":17,"title":12},"84":{"body":298,"breadcrumbs":12,"title":7},"85":{"body":236,"breadcrumbs":14,"title":9},"86":{"body":148,"breadcrumbs":12,"title":7},"87":{"body":50,"breadcrumbs":6,"title":1},"88":{"body":175,"breadcrumbs":10,"title":5},"89":{"body":41,"breadcrumbs":7,"title":2},"9":{"body":45,"breadcrumbs":6,"title":4},"90":{"body":29,"breadcrumbs":9,"title":4},"91":{"body":33,"breadcrumbs":6,"title":1},"92":{"body":29,"breadcrumbs":7,"title":3},"93":{"body":33,"breadcrumbs":5,"title":1},"94":{"body":0,"breadcrumbs":18,"title":11},"95":{"body":77,"breadcrumbs":8,"title":1},"96":{"body":46,"breadcrumbs":11,"title":4},"97":{"body":46,"breadcrumbs":9,"title":2},"98":{"body":38,"breadcrumbs":11,"title":4},"99":{"body":0,"breadcrumbs":9,"title":2}},"docs":{"0":{"body":"","breadcrumbs":"Introduction » Introduction","id":"0","title":"Introduction"},"1":{"body":"gitrust est une forge Git self-hosted écrite en Rust, conçue pour les équipes de 3 à 20 personnes qui souhaitent maîtriser leur infrastructure de développement. Elle offre un serveur HTTP ( :4000) et SSH ( :2222), une CI intégrée via Dagger, la génération de SBOM avec Syft et l’intégration Dependency-Track, une gestion fine des permissions (4 rôles), la double authentification, des labels hiérarchiques et une conformité ANSSI PA-074. Une instance publique de démonstration est accessible sur demo.gitrust.eu.","breadcrumbs":"Introduction » Qu’est-ce que gitrust ?","id":"1","title":"Qu’est-ce que gitrust ?"},"10":{"body":"Les explanations t’aident à construire des modèles mentaux durables. Lis-les quand tu veux comprendre pourquoi gitrust fonctionne ainsi, pas seulement comment. Modèle de collaboration gitrust Sécurité utilisateur : 2FA, PAT, audit log Cycle de vie d’une pull request","breadcrumbs":"Vue d\'ensemble » Explication — comprendre le pourquoi","id":"10","title":"Explication — comprendre le pourquoi"},"100":{"body":"rustup show && command -v rsync envsubst npx\\n# Installer si besoin : sudo apt install rsync gettext-base","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Poste de build (machine locale avec le code source)","id":"100","title":"Poste de build (machine locale avec le code source)"},"101":{"body":"Debian/Ubuntu récent Accès SSH avec sudo Docker + plugin compose ( docker compose version) Snap ou apt pour certbot + plugin nginx DNS <your-domain> → IP publique de la patte externe (vérifier dig +short <your-domain>) Module stream Nginx disponible (paquet libnginx-mod-stream sur Debian)","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Cible <your-server-ip>","id":"101","title":"Cible <your-server-ip>"},"102":{"body":"JWT=$(openssl rand -hex 64)\\nADMIN_PWD=$(openssl rand -base64 24)\\nPG_PWD=$(openssl rand -base64 24) cat > .env.production <<EOF\\n# ---- Base de données ----\\nDATABASE_URL=postgres://gitrust:${PG_PWD}@127.0.0.1:5432/gitrust # ---- Serveur HTTP (derrière Nginx HTTPS) ----\\nSERVER_HOST=127.0.0.1\\nSERVER_PORT=4000 # ---- Serveur SSH (derrière nginx stream :22) ----\\nSSH_PORT=2222\\nSSH_LISTEN_ADDR=127.0.0.1\\nSSH_PUBLIC_HOST=<your-domain>\\nSSH_HOST_KEY_PATH=/opt/gitrust/data/ssh_host_ed25519_key # ---- Chemins (réécrits par deploy.sh) ----\\nGIT_REPOS_BASE_PATH=/opt/gitrust/data/repos\\nSTATIC_FILES_PATH=/opt/gitrust/static # ---- Sécurité — HTTPS actif ----\\nJWT_SECRET=${JWT}\\nJWT_EXPIRATION_MINUTES=15\\nREFRESH_TOKEN_EXPIRATION_DAYS=7\\nCOOKIE_SECURE=true # HTTPS via Nginx\\nCOOKIE_SAME_SITE=Lax\\nAPP_DEBUG=false\\nRUST_LOG=info # ---- Admin initial ----\\nADMIN_USERNAME=admin\\nADMIN_EMAIL=<acme-email>\\nADMIN_PASSWORD=${ADMIN_PWD} # ---- Inscription & UI ----\\nALLOW_REGISTRATION=false\\nAPP_NAME=Gitrust\\nDEFAULT_LOCALE=fr # ---- Email ----\\nEMAIL_VALIDATION_REQUIRED=false\\nEMAIL_BASE_URL=https://<your-domain> # ---- CI/CD Dagger (worker 3) ----\\nCI_ENABLED=true\\nCI_MAX_CONCURRENT=4\\nCI_DEFAULT_TIMEOUT=3600\\nCI_WORKSPACE_PATH=/tmp/gitrust-ci\\nCI_REMOTE_HOST=localhost # ---- Worker import ----\\nIMPORT_MAX_CONCURRENT=2\\nIMPORT_TIMEOUT_SECS=1800\\nDB_WORKER_POOL_SIZE=4\\nEOF chmod 600 .env.production\\necho \\"ADMIN_PASSWORD = ${ADMIN_PWD}\\"\\necho \\"POSTGRES_PASSWORD = ${PG_PWD}\\" Critique : noter ADMIN_PASSWORD et POSTGRES_PASSWORD dans un gestionnaire de mots de passe.","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 0 — Générer .env.production (poste de build, une seule fois)","id":"102","title":"Phase 0 — Générer .env.production (poste de build, une seule fois)"},"103":{"body":"À faire en gardant deux sessions SSH simultanées.","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 1 — Préparer la cible : déplacer sshd système sur :2022","id":"103","title":"Phase 1 — Préparer la cible : déplacer sshd système sur :2022"},"104":{"body":"1.pre.1 — Trouver le port SSH ouvert depuis le poste de build # Depuis votre poste (sans être connecté) :\\nfor p in 22 2022 2222 2200 22022; do timeout 3 bash -c \\"echo >/dev/tcp/<your-server-ip>/$p\\" 2>/dev/null \\\\ && echo \\"Port $p : OUVERT\\" \\\\ || echo \\"Port $p : fermé/filtré\\"\\ndone 1.pre.2 — Se connecter sur le port détecté # Cas le plus probable : sshd est sur :22 par défaut\\nssh <admin-user>@<your-server-ip> 1.pre.3 — Une fois connecté, vérifier l’état sshd actuel # Sur quel(s) port(s) sshd écoute-t-il ?\\nsudo ss -tlnp | grep sshd # Contenu de la config\\nsudo grep -riE \'^[[:space:]]*Port[[:space:]]+[0-9]+\' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/ 2>/dev/null # Statut du service\\nsudo systemctl status ssh --no-pager","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 1.pre. Diagnostic de l’état initial","id":"104","title":"1.pre. Diagnostic de l’état initial"},"105":{"body":"ssh <admin-user>@<your-server-ip> # Éditer /etc/ssh/sshd_config\\nsudo tee /etc/ssh/sshd_config.d/99-gitrust.conf <<\'EOF\'\\nPort 2022\\nEOF # Vérifier la syntaxe\\nsudo sshd -t # Si OK, reload (ne déconnecte pas la session courante)\\nsudo systemctl reload ssh\\nsudo ss -tlnp | grep -E \':22\\\\b|:2022\\\\b\'\\n# Attendu : sshd écoute sur 22 ET 2022","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 1a. Session 1 : modifier la config sshd","id":"105","title":"1a. Session 1 : modifier la config sshd"},"106":{"body":"Depuis le poste de build, dans un autre terminal : ssh -p 2022 <admin-user>@<your-server-ip> \'echo \\"OK port 2022\\"\'\\n# Doit afficher : OK port 2022","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 1b. Session 2 : valider le nouveau port","id":"106","title":"1b. Session 2 : valider le nouveau port"},"107":{"body":"Une fois nginx stream :22 actif et testé : ssh -p 2022 <admin-user>@<your-server-ip>\\nsudo sed -i \'s/^Port 22$/# Port 22 (déplacé vers 2022, :22 utilisé par nginx stream)/\' /etc/ssh/sshd_config\\nsudo systemctl restart ssh","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 1c. (Plus tard, après Phase 5) Fermer le port 22 du sshd système","id":"107","title":"1c. (Plus tard, après Phase 5) Fermer le port 22 du sshd système"},"108":{"body":"ssh -p 2022 <admin-user>@<your-server-ip> bash <<\'EOF\'\\nsudo ufw allow 80/tcp comment \'HTTP ACME + redirect\'\\nsudo ufw allow 443/tcp comment \'HTTPS Gitrust\'\\nsudo ufw allow 22/tcp comment \'SSH Git via nginx stream\'\\nsudo ufw allow 2022/tcp comment \'SSH admin système\'\\nsudo ufw status numbered\\nEOF Mettre à jour ~/.ssh/config côté poste dev : Host gitrust-host HostName <your-server-ip> User <admin-user> Port 2022 Le reste du plan utilise ssh gitrust-host.","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 1d. Firewall","id":"108","title":"1d. Firewall"},"109":{"body":"scp -P 2022 database/docker-compose.yml <admin-user>@<your-server-ip>:/tmp/pg-compose.yml ssh gitrust-host bash <<EOF\\nsudo mkdir -p /opt/gitrust/database\\nsudo mv /tmp/pg-compose.yml /opt/gitrust/database/docker-compose.yml\\necho \'POSTGRES_PASSWORD=${PG_PWD}\' | sudo tee /opt/gitrust/database/.env >/dev/null\\nsudo chmod 600 /opt/gitrust/database/.env\\ncd /opt/gitrust/database && sudo docker compose up -d\\nsudo docker compose ps\\nEOF Remplacer ${PG_PWD} par la valeur réelle. Vérifier que le port n’est pas exposé publiquement : ssh gitrust-host \'sudo ss -tlnp | grep 5432\'\\n# Attendu : 127.0.0.1:5432 — PAS 0.0.0.0","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 2 — PostgreSQL (Docker, loopback)","id":"109","title":"Phase 2 — PostgreSQL (Docker, loopback)"},"11":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » Tutoriels","id":"11","title":"Tutoriels"},"110":{"body":"","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 3 — Build + déploiement gitrust via deploy.sh","id":"110","title":"Phase 3 — Build + déploiement gitrust via deploy.sh"},"111":{"body":"cp deployment/deploy.conf.example deployment/deploy.conf\\n# Éditer DEPLOY_TARGET=gitrust-host, DEPLOY_REMOTE_PATH=/opt/gitrust, DEPLOY_FQDN_INITIAL=<your-domain>\\n$EDITOR deployment/deploy.conf\\nchmod 600 deployment/deploy.conf","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 3a. Préparer deployment/deploy.conf","id":"111","title":"3a. Préparer deployment/deploy.conf"},"112":{"body":"BUILD_ONLY=1 ./deployment/deploy.sh","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 3b. Validation du build seul (optionnel)","id":"112","title":"3b. Validation du build seul (optionnel)"},"113":{"body":"# Sans argument : utilise DEPLOY_TARGET du deploy.conf (gitrust-host via ~/.ssh/config, port 2022)\\n./deployment/deploy.sh Ce que fait deploy.sh : cargo build --release, tailwindcss --minify, adapte gitrust.service + .env, rsync, crée user gitrust, installe systemd, restart. À la fin : gitrust écoute sur 127.0.0.1:4000 (HTTP) et 127.0.0.1:2222 (SSH). ssh gitrust-host \'sudo systemctl status gitrust --no-pager && sudo ss -tlnp | grep -E \\"4000|2222\\"\'\\n# Attendu : 127.0.0.1:4000 et 127.0.0.1:2222 (PAS 0.0.0.0)","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 3c. Déploiement","id":"113","title":"3c. Déploiement"},"114":{"body":"","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 4 — Nginx HTTP + Let’s Encrypt","id":"114","title":"Phase 4 — Nginx HTTP + Let’s Encrypt"},"115":{"body":"ssh gitrust-host bash <<\'EOF\'\\nsudo apt update\\nsudo apt install -y nginx libnginx-mod-stream certbot python3-certbot-nginx\\nsudo systemctl enable --now nginx\\nEOF","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 4a. Installer nginx + certbot","id":"115","title":"4a. Installer nginx + certbot"},"116":{"body":"scp -P 2022 deployment/nginx-gitrust.conf <admin-user>@<your-server-ip>:/tmp/gitrust-nginx.conf ssh gitrust-host bash <<EOF\\nsudo sed -i \'s/gitrust.nuage.ebii/<your-domain>/g\' /tmp/gitrust-nginx.conf\\nsudo mv /tmp/gitrust-nginx.conf /etc/nginx/sites-available/gitrust\\nsudo ln -sf /etc/nginx/sites-available/gitrust /etc/nginx/sites-enabled/gitrust\\nsudo rm -f /etc/nginx/sites-enabled/default\\nsudo mkdir -p /var/www/html/.well-known/acme-challenge\\nsudo nginx -t && sudo systemctl reload nginx\\nEOF","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 4b. Déployer la conf Nginx","id":"116","title":"4b. Déployer la conf Nginx"},"117":{"body":"ssh gitrust-host \'sudo certbot --nginx \\\\ -d <your-domain> \\\\ --email <acme-email> \\\\ --agree-tos \\\\ --no-eff-email \\\\ --redirect\'","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 4c. Émettre le certificat Let’s Encrypt","id":"117","title":"4c. Émettre le certificat Let’s Encrypt"},"118":{"body":"ssh gitrust-host \'sudo systemctl list-timers | grep certbot\'\\nssh gitrust-host \'sudo certbot renew --dry-run\'","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 4d. Vérifier le renouvellement automatique","id":"118","title":"4d. Vérifier le renouvellement automatique"},"119":{"body":"curl -I https://<your-domain>/\\n# Attendu : HTTP/2 200 (ou 302 vers /login) # Vérifier HSTS\\ncurl -sI https://<your-domain>/ | grep -i strict-transport","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 4e. Test HTTPS","id":"119","title":"4e. Test HTTPS"},"12":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » TODO","id":"12","title":"TODO"},"120":{"body":"","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 5 — Exposer SSH Git sur :22 via Nginx stream","id":"120","title":"Phase 5 — Exposer SSH Git sur :22 via Nginx stream"},"121":{"body":"ssh gitrust-host bash <<\'EOF\'\\nsudo nginx -V 2>&1 | grep -o with-stream sudo tee -a /etc/nginx/nginx.conf <<\'NGINX\' # --- Gitrust SSH (proxy :22 -> :2222) -----------------------------------------\\nstream { upstream gitrust_ssh { server 127.0.0.1:2222; } server { listen 22; listen [::]:22; proxy_pass gitrust_ssh; proxy_timeout 1h; proxy_connect_timeout 30s; error_log /var/log/nginx/gitrust-ssh.log; }\\n}\\nNGINX sudo nginx -t && sudo systemctl restart nginx\\nsudo ss -tlnp | grep -E \':22\\\\b|:2222\\\\b\'\\n# Attendu : nginx :22, gitrust :2222 (loopback)\\nEOF","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 5a. Ajouter le bloc stream","id":"121","title":"5a. Ajouter le bloc stream"},"122":{"body":"ssh -p 2022 <admin-user>@<your-server-ip> bash <<\'EOF\'\\nsudo sed -i \'s/^Port 22$/# Port 22 déplacé/\' /etc/ssh/sshd_config 2>/dev/null || true\\nsudo systemctl restart ssh\\nsudo ss -tlnp | grep -E \':22\\\\b|:2022\\\\b\'\\n# Attendu : nginx :22, sshd :2022 — plus de sshd:22\\nEOF","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 5b. Désactiver sshd système sur :22 (Phase 1c)","id":"122","title":"5b. Désactiver sshd système sur :22 (Phase 1c)"},"123":{"body":"# Dans l\'UI gitrust : Settings -> SSH keys -> coller ~/.ssh/id_ed25519.pub\\n# Créer un repo test admin/test-deploy via UI git clone git@<your-domain>:admin/test-deploy.git /tmp/test-deploy\\ncd /tmp/test-deploy\\necho \\"# test\\" > README.md\\ngit -c user.email=<acme-email> -c user.name=admin add . && \\\\ git -c user.email=<acme-email> -c user.name=admin commit -m \\"test deploy\\" && \\\\ git push origin main","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 5c. Test clone Git","id":"123","title":"5c. Test clone Git"},"124":{"body":"# Service systemd\\nssh gitrust-host \'sudo systemctl status gitrust --no-pager\' # Logs (recherche d\'erreurs)\\nssh gitrust-host \'sudo journalctl -u gitrust -n 100 --no-pager | grep -iE \\"error|warn|fail\\"\' # Ports d\'écoute (vue d\'ensemble)\\nssh gitrust-host \'sudo ss -tlnp\'\\n# Attendu :\\n# :22 nginx\\n# :80 nginx\\n# :443 nginx\\n# :2022 sshd système\\n# 127.0.0.1:2222 gitrust\\n# 127.0.0.1:4000 gitrust\\n# 127.0.0.1:5432 docker-proxy # Renouvellement TLS automatique\\nssh gitrust-host \'sudo systemctl status certbot.timer --no-pager\' # Test E2E\\ncurl -I https://<your-domain>/login\\nssh -T git@<your-domain> || true # Banner SSH russh attendu","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 6 — Vérifications globales","id":"124","title":"Phase 6 — Vérifications globales"},"125":{"body":"Voir administration_manual/how-to/durcir-avec-fail2ban.md pour la configuration complète.","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 7 — Durcissement : Fail2ban","id":"125","title":"Phase 7 — Durcissement : Fail2ban"},"126":{"body":"ssh gitrust-host bash <<\'EOF\'\\nsudo apt install -y fail2ban\\nsudo systemctl enable --now fail2ban\\nEOF","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 7a. Installation","id":"126","title":"7a. Installation"},"127":{"body":"ssh gitrust-host sudo tee /etc/fail2ban/jail.local <<\'EOF\'\\n[DEFAULT]\\nbackend = systemd\\nbantime = 1h\\nfindtime = 10m\\nmaxretry = 5\\nignoreip = 127.0.0.1/8 ::1\\nbanaction = ufw\\nbanaction_allports = ufw [sshd]\\nenabled = true\\nport = 2022\\nfilter = sshd\\nbackend = %(sshd_backend)s\\nlogpath = %(sshd_log)s\\nmaxretry = 3 [nginx-http-auth]\\nenabled = true\\nport = http,https\\nfilter = nginx-http-auth\\nlogpath = /var/log/nginx/gitrust.error.log [gitrust-login]\\nenabled = true\\nport = http,https\\nfilter = gitrust-login\\nlogpath = /var/log/nginx/gitrust.access.log\\nmaxretry = 5 [gitrust-ssh]\\nenabled = true\\nport = 22,2222\\nfilter = gitrust-ssh\\nbackend = systemd\\njournalmatch = _SYSTEMD_UNIT=gitrust.service\\nmaxretry = 5 [recidive]\\nenabled = true\\nlogpath = /var/log/fail2ban.log\\nbanaction = %(banaction_allports)s\\nbantime = 1w\\nfindtime = 1d\\nmaxretry = 3\\nEOF Créer les filtres gitrust-login et gitrust-ssh, puis : ssh gitrust-host \'sudo systemctl restart fail2ban && sudo fail2ban-client status\'","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 7b. Configuration minimale rapide","id":"127","title":"7b. Configuration minimale rapide"},"128":{"body":"","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 8 — Mise à jour vers un nouveau domaine (quand DNS prêt)","id":"128","title":"Phase 8 — Mise à jour vers un nouveau domaine (quand DNS prêt)"},"129":{"body":"ssh gitrust-host \'sudo certbot --nginx --expand \\\\ -d <your-domain> \\\\ -d <new-domain> \\\\ --email <acme-email> \\\\ --agree-tos --no-eff-email\'","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 8a. Ajouter le SAN au certificat existant","id":"129","title":"8a. Ajouter le SAN au certificat existant"},"13":{"body":"","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Premiers pas : active la 2FA, ajoute ta clé SSH et crée ton premier dépôt","id":"13","title":"Premiers pas : active la 2FA, ajoute ta clé SSH et crée ton premier dépôt"},"130":{"body":"ssh gitrust-host bash <<EOF\\nsudo sed -i \'s/server_name <your-domain>;/server_name <your-domain> <new-domain>;/g\' /etc/nginx/sites-available/gitrust\\nsudo nginx -t && sudo systemctl reload nginx\\nEOF","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 8b. Mettre à jour la conf Nginx","id":"130","title":"8b. Mettre à jour la conf Nginx"},"131":{"body":"sed -i \'s|SSH_PUBLIC_HOST=.*|SSH_PUBLIC_HOST=<new-domain>|\' .env.production\\nsed -i \'s|EMAIL_BASE_URL=.*|EMAIL_BASE_URL=https://<new-domain>|\' .env.production\\n./deployment/deploy.sh gitrust-host","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » 8c. Mettre à jour .env.production et redéployer","id":"131","title":"8c. Mettre à jour .env.production et redéployer"},"132":{"body":"git pull\\nSKIP_ENV=1 SKIP_DB=1 ./deployment/deploy.sh","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Phase 9 — Mises à jour ultérieures","id":"132","title":"Phase 9 — Mises à jour ultérieures"},"133":{"body":"Symptôme Diagnostic Fix Lockout SSH après reload sshd — Console physique / KVM IPMI Cert Let’s Encrypt échoue ( Connection refused) dig +short <your-domain> ≠ IP publique Corriger DNS, ou vérifier que :80 traverse bien le NAT Cert échoue ( unauthorized) Nginx :80 ne répond pas sur /.well-known/acme-challenge/ curl http://<your-domain>/.well-known/acme-challenge/test doit ne pas rediriger en 301 Login boucle sur /login malgré HTTPS grep COOKIE_SECURE /opt/gitrust/.env Doit être true ; vérifier que Nginx forward bien X-Forwarded-Proto https Push SSH Connection closed journalctl -u gitrust | grep ssh Vérifier que gitrust écoute bien 127.0.0.1:2222 et que nginx stream forward nginx -t : unknown directive \\"stream\\" Module non chargé sudo apt install libnginx-mod-stream puis systemctl restart nginx Mixed content HTTPS Templates qui hardcodent http:// Vérifier EMAIL_BASE_URL=https://... et headers X-Forwarded-Proto Push gros repo timeout Logs nginx client intended to send too large body Augmenter client_max_body_size 2G (déjà fait pour .git/)","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Dépannage","id":"133","title":"Dépannage"},"134":{"body":"Port Process Exposition Rôle 22 nginx (stream) Public SSH Git → forward vers :2222 80 nginx Public ACME challenge + redirect HTTPS 443 nginx Public HTTPS → forward vers :4000 2022 sshd système Public Admin SSH (à restreindre par firewall si possible) 2222 gitrust Loopback Backend SSH russh 4000 gitrust Loopback Backend HTTP axum 5432 docker-proxy Loopback PostgreSQL","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Récapitulatif des ports","id":"134","title":"Récapitulatif des ports"},"135":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Guides pratiques","id":"135","title":"Guides pratiques"},"136":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » TODO","id":"136","title":"TODO"},"137":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Sauvegarder et restaurer » Sauvegarder et restaurer","id":"137","title":"Sauvegarder et restaurer"},"138":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Sauvegarder et restaurer » TODO","id":"138","title":"TODO"},"139":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Mettre à jour gitrust » Mettre à jour gitrust","id":"139","title":"Mettre à jour gitrust"},"14":{"body":"À la fin de ce tutoriel, tu sauras : O1. Activer l’authentification à deux facteurs (2FA) sur ton compte gitrust O2. Enregistrer une clé SSH publique dans ton profil pour te connecter sans mot de passe O3. Créer un dépôt vide et vérifier qu’il est accessible à l’URL attendue","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Objectifs","id":"14","title":"Objectifs"},"140":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Mettre à jour gitrust » TODO","id":"140","title":"TODO"},"141":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Configurer SMTP » Configurer SMTP","id":"141","title":"Configurer SMTP"},"142":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Configurer SMTP » TODO","id":"142","title":"TODO"},"143":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Configurer OAuth » Configurer OAuth","id":"143","title":"Configurer OAuth"},"144":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Configurer OAuth » TODO","id":"144","title":"TODO"},"145":{"body":"Guide d’usage du script qui provisionne une machine distante pour exécuter les pipelines CI/CD de gitrust via SSH + rsync + Dagger.","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Configurer le runner CI distant","id":"145","title":"Configurer le runner CI distant"},"146":{"body":"deployment/setup-remote-ci.sh (disponible dans le dépôt source gitrust) prépare un serveur de build distant utilisé par le worker CI de gitrust. Il automatise 6 étapes : Vérifie la connectivité SSH vers le runner Installe Docker ( curl https://get.docker.com | sh) s’il est absent Installe Dagger CLI ( curl https://dl.dagger.io/dagger/install.sh | sh) s’il est absent Crée le répertoire de travail distant ( CI_REMOTE_PATH) Synchronise le module deployment/ci-engine/ (mode CI Easy) via rsync -az --delete Smoke test : affiche docker --version et dagger version Le script est idempotent : rejoue sans dommage, skip ce qui existe déjà.","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 1. Rôle du script","id":"146","title":"1. Rôle du script"},"147":{"body":"Scénario Besoin de setup-remote-ci.sh ? Dev local, CI sur la même machine que gitrust ( CI_REMOTE_HOST=localhost) Non — Docker et Dagger déjà installés localement, le ci-engine/ est lu depuis deployment/ci-engine/ directement Prod on-premise, un seul serveur (gitrust + CI colocalisés) Non — idem, un simple curl get.docker.com | sh suffit sur le serveur gitrust Prod avec runner CI dédié (machine séparée) OUI — c’est le cas cible de ce script Prod avec plusieurs instances gitrust partageant un runner OUI — le runner est provisionné une fois, chaque instance pointe dessus CI dans Kubernetes / Nomad / runner managé cloud Non — ce script est pensé pour une VM Debian/Ubuntu classique","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 2. Quand l’utiliser","id":"147","title":"2. Quand l’utiliser"},"148":{"body":"+---------------------+ SSH + rsync +-----------------------+\\n| Gitrust (web+SSH) |---------------------------| CI Runner (distant) |\\n| <your-server-ip> | CI_REMOTE_HOST/USER/KEY | <ci-runner-ip> |\\n| | | |\\n| Worker CI Tokio | push .gitrust-ci.yml | /opt/gitrust-ci/ |\\n| (dans gitrust.bin) | + code source checkout | ├── ci-engine/ |\\n| | | └── workspaces/ |\\n| | dagger call ... | |\\n| | | Docker + Dagger CLI |\\n+---------------------+ +-----------------------+ Le worker CI de gitrust (tâche Tokio dans le binaire principal) ne fait pas tourner Docker localement — il délègue au runner via SSH. Cela permet d’isoler les workloads CPU/RAM gourmands (builds Rust, Node, Docker) du process web de gitrust.","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 3. Architecture cible","id":"148","title":"3. Architecture cible"},"149":{"body":"","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 4. Pré-requis","id":"149","title":"4. Pré-requis"},"15":{"body":"Technique : un compte gitrust existant (e-mail + mot de passe), Git installé ( git --version répond), une paire de clés SSH générée ou à générer ( ssh-keygen) Pédagogique : aucun tutoriel préalable requis — c’est le point de départ du parcours Temps estimé : ~20 minutes","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Pré-requis","id":"15","title":"Pré-requis"},"150":{"body":"Outil Rôle bash ≥ 4 Interpréteur ssh, rsync Transport et synchro ssh-agent chargé ou CI_REMOTE_SSH_KEY défini Auth SSH sans mot de passe interactif ( BatchMode=yes) Fichier .env avec les variables CI_REMOTE_* Config (voir section 5)","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Sur la machine d’exécution (là où on lance le script)","id":"150","title":"Sur la machine d’exécution (là où on lance le script)"},"151":{"body":"Pré-requis Pourquoi OS Linux récent (Debian 12+, Ubuntu 22.04+) Docker install script compatible User avec sudo passwordless ou droits docker get.docker.com fait sudo en interne Clé SSH publique du user local dans ~/.ssh/authorized_keys Auth SSH non-interactive Réseau sortant autorisé vers get.docker.com et dl.dagger.io Installation des binaires Au minimum ~5 Go libres dans CI_REMOTE_PATH Images Docker + workspaces","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Sur le runner distant","id":"151","title":"Sur le runner distant"},"152":{"body":"Le script source un fichier .env dont le chemin est passé en argument, ou par défaut ../.env (relatif au script, donc <racine_projet>/.env).","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 5. Variables d’environnement attendues (le .env)","id":"152","title":"5. Variables d’environnement attendues (le .env)"},"153":{"body":"Variable Obligatoire Défaut Description CI_REMOTE_HOST OUI — Hostname ou IP du runner (ex: ci-runner.internal) CI_REMOTE_USER non $(whoami) (user courant) Compte SSH sur le runner CI_REMOTE_SSH_PORT non 22 Port SSH du runner CI_REMOTE_PATH non /opt/gitrust-ci Répertoire de travail distant (créé par le script) CI_REMOTE_SSH_KEY non — (ssh-agent) Chemin d’une clé privée SSH spécifique Ces variables sont les mêmes que celles lues par gitrust au runtime. Centraliser dans .env évite les divergences entre le provisionnement et le runtime.","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Tableau des variables","id":"153","title":"Tableau des variables"},"154":{"body":"# --- CI runner distant ---\\nCI_REMOTE_HOST=<ci-runner-ip>\\nCI_REMOTE_USER=ci-runner\\nCI_REMOTE_SSH_PORT=22\\nCI_REMOTE_PATH=/opt/gitrust-ci\\nCI_REMOTE_SSH_KEY=/home/gitrust/.ssh/ci_runner_ed25519","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Exemple minimal de .env (runner dédié)","id":"154","title":"Exemple minimal de .env (runner dédié)"},"155":{"body":"DATABASE_URL=postgres://...\\nJWT_SECRET=...\\n# ... (voir .env.example pour le reste) # --- CI/CD (lu par gitrust ET par setup-remote-ci.sh) ---\\nCI_ENABLED=true\\nCI_MAX_CONCURRENT=4\\nCI_REMOTE_HOST=ci-runner.internal\\nCI_REMOTE_USER=ci-runner\\nCI_REMOTE_PATH=/opt/gitrust-ci\\nCI_REMOTE_SSH_KEY=/opt/gitrust/data/ci_runner_key","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Exemple .env complet coexistant avec config gitrust","id":"155","title":"Exemple .env complet coexistant avec config gitrust"},"156":{"body":"CI_REMOTE_HOST=localhost\\n# Les autres CI_REMOTE_* sont ignorés Dans ce cas, installer Docker et Dagger directement sur la machine gitrust, copier deployment/ci-engine/ vers CI_ENGINE_PATH (défaut /opt/gitrust/ci-engine) et passer à la suite. Ne pas exécuter setup-remote-ci.sh avec CI_REMOTE_HOST=localhost.","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Cas « runner local » (pas besoin du script)","id":"156","title":"Cas « runner local » (pas besoin du script)"},"157":{"body":"","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 6. Usage","id":"157","title":"6. Usage"},"158":{"body":"cd /chemin/vers/gitrust # .env a la racine (défaut) :\\n./deployment/setup-remote-ci.sh","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Depuis la racine du projet (par défaut)","id":"158","title":"Depuis la racine du projet (par défaut)"},"159":{"body":"./deployment/setup-remote-ci.sh /chemin/vers/mon.env\\n# Utile si vous avez .env.production, .env.staging, etc.\\n./deployment/setup-remote-ci.sh .env.production","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Avec un .env explicite","id":"159","title":"Avec un .env explicite"},"16":{"body":"Avant de taper la première commande, prenons 2 minutes pour comprendre ce que tu vas faire et pourquoi. Un dépôt ( repository), c’est comme un dossier de projet avec tout l’historique de ses modifications — une boîte d’archives vivante que Git surveille. Sur gitrust, ce dossier vit sur le serveur et peut être partagé avec ton équipe. Une clé SSH fonctionne comme une serrure et une clé : tu gardes la clé privée sur ta machine (ne la partage jamais), et tu déposes la clé publique dans ton profil gitrust. Ensuite, Git se connecte automatiquement sans te redemander de mot de passe — gitrust reconnaît ta machine. La 2FA (authentification à deux facteurs) ajoute un second verrou à ton compte : même si quelqu’un vole ton mot de passe, il ne peut pas se connecter sans le code de ton téléphone. C’est une protection essentielle pour tout compte qui héberge du code. Voici le flux que tu vas configurer : sequenceDiagram participant T as Ton navigateur participant G as gitrust (HTTPS :4000) participant S as Ton terminal (SSH :2222) T->>G: Connexion avec e-mail + mdp + code 2FA T->>G: Dépôt de la clé SSH publique S->>G: git push via SSH (authentifié par clé) G-->>T: Dépôt visible dans l\'interface web","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Vue d’ensemble","id":"16","title":"Vue d’ensemble"},"160":{"body":"==> Configuration : Serveur : ci-runner@<ci-runner-ip> Port SSH : 22 Chemin : /opt/gitrust-ci ==> [1/6] Vérification de la connectivité SSH...\\nSSH OK OK\\n==> [2/6] Vérification de Docker... Docker déjà installé\\n==> [3/6] Vérification de Dagger CLI... Installation de Dagger CLI... Dagger installé\\n==> [4/6] Création du répertoire distant... /opt/gitrust-ci créé\\n==> [5/6] Synchronisation du ci-engine...\\nsending incremental file list\\nci-engine/\\nci-engine/profiles/\\n... ci-engine synchronisé vers /opt/gitrust-ci/ci-engine/\\n==> [6/6] Smoke test... Versions distantes :\\nDocker version 28.0.1, build abcd123\\ndagger v0.19.2 (linux/amd64) ==> Setup terminé. Le serveur ci-runner@<ci-runner-ip> est prêt pour l\'exécution CI. Pensez à configurer CI_EXECUTION_MODE=remote dans votre .env","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Sortie attendue","id":"160","title":"Sortie attendue"},"161":{"body":"Après exécution réussie : /opt/gitrust-ci/ <- CI_REMOTE_PATH\\n└── ci-engine/ <- synchronisé depuis deployment/ci-engine/ ├── README.md └── profiles/ <- templates par stack (Python, Node, Rust, ...) Plus, installés globalement : /usr/bin/docker (ou équivalent) + socket /var/run/docker.sock /usr/local/bin/dagger Les workspaces de pipelines (checkouts temporaires) sont créés par le worker CI de gitrust au moment de l’exécution sous CI_WORKSPACE_PATH (défaut /tmp/gitrust-ci) — pas par ce script.","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 7. Ce qui se retrouve sur le runner","id":"161","title":"7. Ce qui se retrouve sur le runner"},"162":{"body":"","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 8. Vérifications post-setup","id":"162","title":"8. Vérifications post-setup"},"163":{"body":"# Source le .env\\nset -a; source .env.production; set +a # 1. SSH direct (doit passer sans prompt)\\nssh -p ${CI_REMOTE_SSH_PORT:-22} \\\\ ${CI_REMOTE_SSH_KEY:+-i $CI_REMOTE_SSH_KEY} \\\\ $CI_REMOTE_USER@$CI_REMOTE_HOST \'docker info && dagger version\' # 2. Rsync round-trip (lecture/écriture sur CI_REMOTE_PATH)\\necho \\"test\\" | ssh $CI_REMOTE_USER@$CI_REMOTE_HOST \\\\ \\"cat > $CI_REMOTE_PATH/.gitrust-test && cat $CI_REMOTE_PATH/.gitrust-test && rm $CI_REMOTE_PATH/.gitrust-test\\"\\n# Attendu : \\"test\\"","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Depuis la machine gitrust","id":"163","title":"Depuis la machine gitrust"},"164":{"body":"Pousser un dépôt avec un .gitrust-ci.yml minimal : # .gitrust-ci.yml\\nversion: 1\\npipeline: - name: smoke image: alpine:3 run: echo \\"CI runner OK\\" Puis dans l’UI gitrust : onglet Pipelines → la pipeline doit passer au statut success.","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » Pipeline de test via gitrust","id":"164","title":"Pipeline de test via gitrust"},"165":{"body":"Le ci-engine/ synchronisé n’est pas « live-linké » : rejouer le script après modification côté source. # Modifier deployment/ci-engine/profiles/*.py ou similaire\\n./deployment/setup-remote-ci.sh\\n# Les étapes 2-3 sont skip (déjà installés), seule l\'étape 5 refait le rsync rsync -az --delete supprime les fichiers côté runner qui n’existent plus localement — garantit la cohérence.","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 9. Mise à jour après modification du ci-engine/","id":"165","title":"9. Mise à jour après modification du ci-engine/"},"166":{"body":"Symptôme Cause probable Fix ERREUR: fichier .env introuvable .env absent ou chemin incorrect cp .env.example .env && $EDITOR .env ou passer le chemin : ./setup-remote-ci.sh /path/to/.env ERREUR: CI_REMOTE_HOST non défini Variable commentée ou absente Décommenter CI_REMOTE_HOST=... dans le .env ERREUR: impossible de se connecter SSH bloqué, mauvais user, clé non autorisée Tester manuellement : ssh -v -p X user@host ; vérifier ~/.ssh/authorized_keys sur le runner Permission denied (publickey) BatchMode=yes interdit les prompts, clé non chargée ssh-add ~/.ssh/ci_runner_ed25519 ou définir CI_REMOTE_SSH_KEY=/path/to/key sudo: a password is required pendant l’install Docker User sans NOPASSWD sudo Ajouter le user au sudoers : ci-runner ALL=(ALL) NOPASSWD:ALL (runner uniquement) curl: (7) Failed to connect to get.docker.com Réseau sortant du runner bloqué Whitelist get.docker.com et dl.dagger.io, ou pré-installer Docker + Dagger manuellement ATTENTION: ... ci-engine introuvable Lancé hors du repo gitrust cd dans la racine du projet avant de lancer Pipeline reste queued indéfiniment Worker CI ne trouve pas le runner Vérifier CI_EXECUTION_MODE=remote dans .env gitrust + logs : journalctl -u gitrust | grep -i \'ci|dagger\' dagger: command not found au smoke test $PATH du user SSH ne contient pas /usr/local/bin echo \'export PATH=$PATH:/usr/local/bin\' >> ~/.bashrc sur le runner, ou CI_DAGGER_BIN=/usr/local/bin/dagger côté gitrust","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 10. Dépannage","id":"166","title":"10. Dépannage"},"167":{"body":"Le runner CI exécute du code arbitraire venant des dépôts hébergés. Ne jamais le colocaliser avec des secrets sensibles (PG prod, clés de prod). Isoler réseau : bloquer l’accès sortant du runner vers le LAN privé (seul l’accès Internet pour docker pull est nécessaire). Limiter sudo NOPASSWD au strict minimum sur le runner (idéalement : juste pour les commandes docker et apt). Rotation régulière de la clé SSH CI_REMOTE_SSH_KEY. La révoquer dans ~/.ssh/authorized_keys côté runner en cas de suspicion. Le runner ne doit pas pouvoir se connecter en SSH à la machine gitrust (unidirectionnel).","breadcrumbs":"Guides pratiques » Configurer un runner CI distant » 11. Sécurité","id":"167","title":"11. Sécurité"},"168":{"body":"Ce document explique comment activer et configurer les deux fonctionnalités de qualité/sécurité de gitrust : La CI intégrée (Dagger) qui exécute les builds/tests/lints à chaque push. Le dependency tracker (Syft + Dependency-Track) qui scanne les composants du code à chaque push et détecte les vulnérabilités connues. Ces deux systèmes sont indépendants : on peut activer l’un sans l’autre.","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » Intégrer la CI et Dependency-Track","id":"168","title":"Intégrer la CI et Dependency-Track"},"169":{"body":"flowchart TB subgraph Client Dev[Développeur] end subgraph Gitrust[Instance Gitrust] HTTP[:4000 HTTP/Git] SSH[:2222 SSH/Git] Worker[CiWorker<br/>tokio task] Sbom[SbomService<br/>tokio spawn] DB[(PostgreSQL)] end subgraph Builder[Serveur de build] Docker[Docker/Podman] Dagger[Dagger CLI] CiEngine[/opt/gitrust-ci/ci-engine/] end subgraph Security[Stack sécurité optionnelle] Syft[syft] Dtrack[Dependency-Track] end Dev -->|git push| HTTP Dev -->|git push| SSH HTTP --> Worker SSH --> Worker HTTP --> Sbom SSH --> Sbom Worker -->|SSH + rsync| Builder Builder -->|logs streamés| Worker Worker --> DB Sbom -->|scan workspace| Syft Sbom -->|PUT BOM| Dtrack Dtrack -->|findings| Sbom Sbom --> DB Trois composants fonctionnent en parallèle : CiWorker : tâche Tokio qui consomme des CiTask depuis un channel mpsc, limitée par un Semaphore à CI_MAX_CONCURRENT pipelines simultanés. SbomService : exécuté dans un tokio::spawn après chaque push, totalement découplé du CI. Serveur de build : machine distante (ou localhost) qui exécute Docker + Dagger. Gitrust y envoie le workspace par rsync et lance Dagger par SSH.","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 1. Architecture générale","id":"169","title":"1. Architecture générale"},"17":{"body":"Ouvre ton navigateur et va sur l’URL de ton instance gitrust (par exemple https://demo.gitrust.eu). Connecte-toi avec ton e-mail et ton mot de passe. Une fois connecté, clique sur ton avatar en haut à droite, puis sur Paramètres ( /settings). Dans le menu de gauche, sélectionne Sécurité. Checkpoint : tu dois voir la page Sécurité avec une section « Authentification à deux facteurs » et le statut « Désactivée ». Si tu ne la vois pas, vérifie que tu es bien connecté avec le bon compte.","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Étape 1 : Connecte-toi et accède aux paramètres de sécurité","id":"17","title":"Étape 1 : Connecte-toi et accède aux paramètres de sécurité"},"170":{"body":"","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 2. Mettre en place la CI","id":"170","title":"2. Mettre en place la CI"},"171":{"body":"Le serveur de build peut être la même machine que Gitrust ( CI_REMOTE_HOST=localhost) ou une machine dédiée. Il doit disposer de : Outil Rôle Docker ou Podman Containers Dagger Dagger CLI Moteur d’exécution SSH (accès sortant depuis Gitrust) Transport rsync Copie du workspace git, tar Extraction du tree du commit Installation automatique recommandée : # Depuis la machine Gitrust (l\'utilisateur doit pouvoir SSH vers le builder)\\n./deployment/setup-remote-ci.sh .env Le script exécute : Vérification de la connectivité SSH Installation de Docker si absent Installation de Dagger CLI si absent Création du répertoire de travail distant Synchronisation du ci-engine Smoke test (versions)","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 2.1 Pré-requis serveur de build","id":"171","title":"2.1 Pré-requis serveur de build"},"172":{"body":"Ajouter au .env de Gitrust : # Activer globalement le CI\\nCI_ENABLED=true # Chemin du ci-engine sur le serveur de build\\nCI_ENGINE_PATH=/opt/gitrust-ci/ci-engine # Limite de parallélisme\\nCI_MAX_CONCURRENT=4\\nCI_DEFAULT_TIMEOUT=3600\\nCI_WORKSPACE_PATH=/tmp/gitrust-ci # Serveur de build (mettre localhost pour \\"même machine\\")\\nCI_REMOTE_HOST=builder.example.com\\nCI_REMOTE_USER=ci-runner\\nCI_REMOTE_PATH=/opt/gitrust-ci\\nCI_REMOTE_SSH_PORT=22\\n# CI_REMOTE_SSH_KEY=/home/gitrust/.ssh/id_ed25519 # si pas ssh-agent Redémarrer Gitrust : systemctl restart gitrust (ou cargo run --release).","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 2.2 Configuration Gitrust (fichier .env)","id":"172","title":"2.2 Configuration Gitrust (fichier .env)"},"173":{"body":"Dans l’interface web : aller sur le dépôt → Settings → CI. Cocher CI enabled (requis — par défaut false) Cocher Trigger on push (active l’exécution à chaque push) Optionnel : Auto-cancel (annule les pipelines en cours quand un nouveau démarre) Optionnel : Allowed branches (ex. main,develop — vide = toutes)","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 2.3 Activer la CI sur un dépôt","id":"173","title":"2.3 Activer la CI sur un dépôt"},"174":{"body":"flowchart LR Push[Commit<br/>poussé] --> Tree{Arbre du<br/>commit contient ?} Tree -->|.dagger/| Power[Mode Power<br/>dagger call -m .dagger/ ci] Tree -->|.gitrust-ci.yml| Easy[Mode Easy<br/>dagger call -m ci-engine test-pr] Tree -->|rien| None[Pas de pipeline] Power --> Run[Exécution<br/>distante SSH] Easy --> Run Mode Easy (recommandé pour commencer) Créer .gitrust-ci.yml à la racine du dépôt : # Raccourci : charge un profil pré-configuré (rust | python | node)\\nlanguage: rust build: command: \\"cargo build --release\\" checks: lint: \\"cargo clippy -- -D warnings\\" format: \\"cargo fmt -- --check\\" tests: command: \\"cargo test --release\\" Les profils disponibles se trouvent dans deployment/ci-engine/profiles/ (rust.yaml, python.yaml, node.yaml) dans le dépôt source. Mode Power Pour les utilisateurs avancés, créer un module Dagger complet dans .dagger/ : .dagger/\\n├── dagger.json\\n├── src/\\n│ └── main.py # ou Go/TypeScript La fonction ci du module est appelée directement : dagger call -m .dagger/ ci Avantage : accès au Daggerverse, composition, tests de pipeline. Voir la documentation Dagger.","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 2.4 Choisir le mode : Easy ou Power","id":"174","title":"2.4 Choisir le mode : Easy ou Power"},"175":{"body":"Après un git push, une entrée apparaît dans l’onglet CI du dépôt : stateDiagram-v2 [*] --> Pending: create_pipeline Pending --> Running: worker picks CiTask Running --> Success: exit 0 Running --> Failure: exit != 0 Running --> Cancelled: timeout / auto_cancel / manuel Success --> [*] Failure --> [*] Cancelled --> [*] Les logs stdout/stderr sont streamés ligne par ligne dans la table ci_logs et visibles en direct dans l’UI. En cas d’échec, une notification est envoyée au propriétaire du dépôt.","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 2.5 Suivi d’un pipeline","id":"175","title":"2.5 Suivi d’un pipeline"},"176":{"body":"Cette partie est totalement indépendante de la CI. Elle scanne le code poussé et produit un SBOM CycloneDX, puis (optionnellement) l’envoie à Dependency-Track pour une analyse de vulnérabilités.","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 3. Mettre en place le Dependency Tracker","id":"176","title":"3. Mettre en place le Dependency Tracker"},"177":{"body":"Sur la machine Gitrust (le scan se fait localement, pas sur le builder) : # Installation officielle\\ncurl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh \\\\ | sh -s -- -b /usr/local/bin # Vérification\\nsyft --version Dans .env : CI_SBOM_ENABLED=true\\nCI_SYFT_BIN=/usr/local/bin/syft # optionnel, défaut: syft dans PATH À ce stade : à chaque push, un SBOM CycloneDX est généré et stocké (sans upload externe). Visible dans l’onglet Security du dépôt : nombre de composants, sha256 du BOM.","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 3.1 Installer Syft","id":"177","title":"3.1 Installer Syft"},"178":{"body":"Dependency-Track est une application Java qui stocke les SBOM et corrèle avec les bases CVE/OSV/NVD. Déploiement Docker recommandé : mkdir -p /opt/dtrack && cd /opt/dtrack\\ncurl -L -o docker-compose.yml \\\\ https://dependencytrack.org/docker-compose.yml\\ndocker compose up -d L’API est disponible sur http://localhost:8081 et l’UI sur http://localhost:8080.\\nLogin initial : admin / admin (à changer immédiatement).","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 3.2 Déployer Dependency-Track","id":"178","title":"3.2 Déployer Dependency-Track"},"179":{"body":"Dans Dependency-Track → Administration → Access Management → Teams : Créer (ou réutiliser) une équipe gitrust. Lui attribuer les permissions : BOM_UPLOAD PROJECT_CREATION_UPLOAD VIEW_PORTFOLIO VIEW_VULNERABILITY Générer une API key et la copier.","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 3.3 Créer une clé API","id":"179","title":"3.3 Créer une clé API"},"18":{"body":"Sur la page Sécurité, clique sur Activer la 2FA. gitrust affiche un QR code. Ouvre ton application d’authentification (Google Authenticator, Authy, ou tout équivalent compatible TOTP). Scanne le QR code avec l’application. L’application affiche un code à 6 chiffres qui change toutes les 30 secondes. Saisis ce code dans le champ Code de vérification et clique Confirmer. Sortie attendue (message dans l’interface) : La 2FA a été activée avec succès.\\nConservez vos codes de secours dans un endroit sûr. gitrust affiche également 10 codes de secours (format XXXX-XXXX). Copie-les et conserve-les hors ligne — ils te permettent de récupérer l’accès si tu perds ton téléphone. Checkpoint : retourne sur Paramètres → Sécurité. La section 2FA doit maintenant afficher « Activée » en vert. Si elle affiche toujours « Désactivée », recommence l’étape en t’assurant que le code à 6 chiffres est saisi avant qu’il expire.","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Étape 2 : Active la 2FA avec une application d’authentification","id":"18","title":"Étape 2 : Active la 2FA avec une application d’authentification"},"180":{"body":"Ajouter au .env : CI_DTRACK_ENABLED=true\\nCI_DTRACK_URL=http://localhost:8081\\nCI_DTRACK_API_KEY=odt_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Redémarrer Gitrust. À chaque push : sequenceDiagram participant Push as post-receive participant Sbom as SbomService participant Git as git archive participant Syft participant Dtrack as Dependency-Track participant DB as sbom_reports Push->>Sbom: process_push(sha, ref) Sbom->>DB: upsert status=pending Sbom->>Git: archive sha | tar -x tmpdir Sbom->>Syft: scan dir:tmpdir -o cyclonedx-json Syft-->>Sbom: BOM bytes Sbom->>DB: update sha256 Sbom->>Dtrack: PUT /api/v1/bom (base64) Dtrack-->>Sbom: token loop max 30s Sbom->>Dtrack: GET /api/v1/bom/token/{token} Dtrack-->>Sbom: processing ? end Sbom->>Dtrack: GET /api/v1/finding/project/{uuid} Dtrack-->>Sbom: findings[] Sbom->>DB: update status=success<br/>+ critical/high/medium/low","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 3.4 Configurer Gitrust","id":"180","title":"3.4 Configurer Gitrust"},"181":{"body":"Onglet Security du dépôt → encart SBOM : Nombre de composants détectés Compteurs par sévérité : Critical / High / Medium / Low Lien direct vers le projet dans Dependency-Track (si l’UUID est résolu) Hash sha256 du BOM (traçabilité) Si Dependency-Track met plus de 30s à analyser, le status reste processing — un sweeper ultérieur ira rechercher les findings.","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 3.5 Lire les résultats","id":"181","title":"3.5 Lire les résultats"},"182":{"body":"","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 4. Débogage","id":"182","title":"4. Débogage"},"183":{"body":"Symptôme Cause probable Vérifier Pipeline reste pending Worker non démarré, ou channel saturé Logs CI worker started, CI_MAX_CONCURRENT Échec rsync vers le serveur de build SSH bloqué, clé absente ssh -p ${CI_REMOTE_SSH_PORT} ${CI_REMOTE_USER}@${CI_REMOTE_HOST} manuel dagger: command not found Dagger non installé sur le builder Relancer setup-remote-ci.sh Status Cancelled inattendu Timeout ( CI_DEFAULT_TIMEOUT) ou auto-cancel Augmenter le timeout, vérifier pipelines concurrents","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » Problèmes CI courants","id":"183","title":"Problèmes CI courants"},"184":{"body":"Symptôme Cause probable Vérifier SBOM generation disabled CI_SBOM_ENABLED=false .env syft spawn failed Binaire introuvable which syft, CI_SYFT_BIN invalid commit sha SHA non hex 40 chars Rare, signale un bug Dtrack upload 401 API key invalide ou permissions manquantes Régénérer, vérifier les 4 permissions Status processing indéfiniment Dtrack surchargé, analyse lente Attendre, ou relancer un push","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » Problèmes SBOM courants","id":"184","title":"Problèmes SBOM courants"},"185":{"body":"# Logs Gitrust (systemd)\\njournalctl -u gitrust -f | grep -E \\"CI|SBOM|sbom|pipeline\\" # Vérifier un pipeline en DB\\npsql $DATABASE_URL -c \\"SELECT id, status, commit_sha, created_at FROM ci_pipelines ORDER BY created_at DESC LIMIT 10;\\" # Vérifier un SBOM\\npsql $DATABASE_URL -c \\"SELECT commit_sha, status, components_count, critical_count, high_count FROM sbom_reports ORDER BY created_at DESC LIMIT 10;\\"","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » Logs utiles","id":"185","title":"Logs utiles"},"186":{"body":"CI : Docker + Dagger installés sur le serveur de build ( setup-remote-ci.sh) CI_ENABLED=true et CI_REMOTE_* dans .env Gitrust redémarré CI activée dans Settings → CI pour chaque dépôt Fichier .gitrust-ci.yml (Easy) ou .dagger/ (Power) commité Push → pipeline visible dans l’onglet CI Dependency Tracker : Syft installé sur la machine Gitrust CI_SBOM_ENABLED=true dans .env (Optionnel) Dependency-Track déployé + API key créée avec les 4 permissions (Optionnel) CI_DTRACK_ENABLED=true, CI_DTRACK_URL, CI_DTRACK_API_KEY dans .env Gitrust redémarré Push → SBOM visible dans l’onglet Security","breadcrumbs":"Guides pratiques » Intégrer Dependency-Track (SBOM) » 5. Checklist récapitulative","id":"186","title":"5. Checklist récapitulative"},"187":{"body":"Configuration complète pour protéger un déploiement gitrust exposant : sshd système sur :2022 (admin) Nginx en reverse proxy HTTPS :443 + redirect :80 + stream :22 → :2222 Gitrust (web 127.0.0.1:4000, SSH russh 127.0.0.1:2222) Dagger CI runner (local, pas d’exposition réseau directe) Dependency-Track API :8081 + UI :8080 (si exposés) PostgreSQL 127.0.0.1:5432 (défensif au cas où le bind fuit)","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » Durcir l’instance avec Fail2ban","id":"187","title":"Durcir l’instance avec Fail2ban"},"188":{"body":"sudo apt install -y fail2ban\\nsudo systemctl enable --now fail2ban\\nfail2ban-client --version Vérifier que ufw est actif (fournit banaction = ufw dans la config) : sudo ufw status","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 1. Installation","id":"188","title":"1. Installation"},"189":{"body":"À placer via : sudo tee /etc/fail2ban/jail.local <<\'EOF\'\\n[Le contenu ci-dessous]\\nEOF # =============================================================================\\n# Défauts globaux\\n# =============================================================================\\n[DEFAULT]\\nbackend = systemd\\nbantime = 1h\\nfindtime = 10m\\nmaxretry = 5 # LAN privé et loopback jamais bannis\\nignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 # UFW\\nbanaction = ufw\\nbanaction_allports = ufw # Notifications (optionnel — nécessite un relay SMTP local)\\n# destemail = contact@gitrust.eu\\n# sender = fail2ban@votre-serveur.example.com\\n# action = %(action_mwl)s # =============================================================================\\n# 1) sshd admin système — port 2022\\n# =============================================================================\\n[sshd]\\nenabled = true\\nport = 2022\\nfilter = sshd\\nbackend = %(sshd_backend)s\\nlogpath = %(sshd_log)s\\nmaxretry = 3\\nfindtime = 10m\\nbantime = 1h # =============================================================================\\n# 2) Nginx — 401/403 auth basic (si un jour activé sur /admin, /metrics, etc.)\\n# =============================================================================\\n[nginx-http-auth]\\nenabled = true\\nport = http,https\\nfilter = nginx-http-auth\\nlogpath = /var/log/nginx/gitrust.error.log\\nmaxretry = 5 # =============================================================================\\n# 3) Nginx — scanners d\'URL (wp-admin, .env, phpmyadmin, config.php, etc.)\\n# =============================================================================\\n[nginx-botsearch]\\nenabled = true\\nport = http,https\\nfilter = nginx-botsearch\\nlogpath = /var/log/nginx/gitrust.access.log\\nmaxretry = 2\\nfindtime = 10m\\nbantime = 24h # =============================================================================\\n# 4) Nginx — bad user-agents (scanners agressifs, masscan, nikto, etc.)\\n# =============================================================================\\n[nginx-badbots]\\nenabled = true\\nport = http,https\\nfilter = nginx-badbots\\nlogpath = /var/log/nginx/gitrust.access.log\\nmaxretry = 2\\nbantime = 24h # =============================================================================\\n# 5) Nginx — dépassement limit_req (voir section 4 — zones HTTPS)\\n# =============================================================================\\n[nginx-limit-req]\\nenabled = true\\nport = http,https\\nfilter = nginx-limit-req\\nlogpath = /var/log/nginx/gitrust.error.log\\nmaxretry = 10\\nfindtime = 5m\\nbantime = 1h # =============================================================================\\n# 6) Gitrust — brute force login (formulaire + API JWT)\\n# =============================================================================\\n[gitrust-login]\\nenabled = true\\nport = http,https\\nfilter = gitrust-login\\nlogpath = /var/log/nginx/gitrust.access.log\\nmaxretry = 5\\nfindtime = 10m\\nbantime = 1h # =============================================================================\\n# 7) Gitrust — abus API (tokens personnels leaked, scrapers)\\n# =============================================================================\\n[gitrust-api-abuse]\\nenabled = true\\nport = http,https\\nfilter = gitrust-api-abuse\\nlogpath = /var/log/nginx/gitrust.access.log\\nmaxretry = 30\\nfindtime = 1m\\nbantime = 2h # =============================================================================\\n# 8) Gitrust SSH (russh) — brute force clé publique\\n# =============================================================================\\n[gitrust-ssh]\\nenabled = true\\nport = 22,2222\\nfilter = gitrust-ssh\\nbackend = systemd\\njournalmatch = _SYSTEMD_UNIT=gitrust.service\\nmaxretry = 5\\nfindtime = 10m\\nbantime = 1h # =============================================================================\\n# 9) Gitrust import worker — tokens invalides sur clone de dépôts externes\\n# =============================================================================\\n[gitrust-import]\\nenabled = true\\nport = http,https\\nfilter = gitrust-import\\nbackend = systemd\\njournalmatch = _SYSTEMD_UNIT=gitrust.service\\nmaxretry = 3\\nfindtime = 5m\\nbantime = 30m # =============================================================================\\n# 10) Dependency-Track UI — brute force login (port 8080)\\n# =============================================================================\\n# Activer UNIQUEMENT si DTrack est exposé publiquement.\\n# Si DTrack est sur réseau privé/loopback, laisser enabled=false.\\n[dtrack-login]\\nenabled = false\\nport = 8080,http,https\\nfilter = dtrack-login\\nlogpath = /var/log/nginx/dtrack.access.log\\nmaxretry = 5\\nfindtime = 10m\\nbantime = 2h # =============================================================================\\n# 11) Dependency-Track API — abus clé API (port 8081)\\n# =============================================================================\\n[dtrack-api]\\nenabled = false\\nport = 8081,http,https\\nfilter = dtrack-api\\nlogpath = /var/log/nginx/dtrack.access.log\\nmaxretry = 10\\nfindtime = 5m\\nbantime = 1h # =============================================================================\\n# 12) PostgreSQL — tentatives de connexion invalides (défensif)\\n# =============================================================================\\n# PG doit binder 127.0.0.1 uniquement. Ce jail protège si la config fuit.\\n[postgresql]\\nenabled = true\\nport = 5432\\nfilter = postgresql\\nbackend = systemd\\njournalmatch = _SYSTEMD_UNIT=postgresql.service + _SYSTEMD_UNIT=docker.service\\nmaxretry = 5\\nfindtime = 10m\\nbantime = 1h # =============================================================================\\n# 13) Récidive — ban long pour IPs bannies 3x en 24h, tous jails confondus\\n# =============================================================================\\n[recidive]\\nenabled = true\\nlogpath = /var/log/fail2ban.log\\nbanaction = %(banaction_allports)s\\nbantime = 1w\\nfindtime = 1d\\nmaxretry = 3","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 2. Fichier principal /etc/fail2ban/jail.local","id":"189","title":"2. Fichier principal /etc/fail2ban/jail.local"},"19":{"body":"Si tu n’as pas encore de paire de clés SSH, génère-en une maintenant dans ton terminal : ssh-keygen -t ed25519 -C \\"mon-compte@example.com\\" Sortie attendue : Generating public/private ed25519 key pair.\\nEnter file in which to save the key (/home/toi/.ssh/id_ed25519):\\nEnter passphrase (empty for no passphrase):\\nEnter same passphrase again:\\nYour identification has been saved in /home/toi/.ssh/id_ed25519\\nYour public key has been saved in /home/toi/.ssh/id_ed25519.pub\\nThe key fingerprint is:\\nSHA256:xXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXx mon-compte@example.com Appuie sur Entrée pour accepter le chemin par défaut. Tu peux choisir une passphrase ou laisser vide (appuie deux fois sur Entrée). Une passphrase ajoute une couche de sécurité. Affiche maintenant ta clé publique (le fichier .pub — celui-ci est fait pour être partagé) : cat ~/.ssh/id_ed25519.pub Sortie attendue (une seule ligne) : ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mon-compte@example.com Copie cette ligne entière dans le presse-papier. Checkpoint : la commande cat doit afficher une ligne commençant par ssh-ed25519 (ou ssh-rsa si tu as une clé plus ancienne). Si elle affiche « No such file or directory », la génération n’a pas abouti — relance ssh-keygen.","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Étape 3 : Génère ou localise ta clé SSH","id":"19","title":"Étape 3 : Génère ou localise ta clé SSH"},"190":{"body":"À placer dans /etc/fail2ban/filter.d/ (un fichier par jail custom).","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3. Filtres personnalisés","id":"190","title":"3. Filtres personnalisés"},"191":{"body":"sudo tee /etc/fail2ban/filter.d/gitrust-login.conf <<\'EOF\'\\n[Definition]\\n# POST sur /login ou endpoints JWT avec code 4xx (401/403/422/429)\\nfailregex = ^<HOST> .* \\"POST /(login|api/v1/auth/login|api/v1/auth/refresh|api/v1/auth/2fa)[^\\"]*\\" (401|403|422|429) .*$\\nignoreregex =\\nEOF","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3.1 gitrust-login.conf","id":"191","title":"3.1 gitrust-login.conf"},"192":{"body":"sudo tee /etc/fail2ban/filter.d/gitrust-api-abuse.conf <<\'EOF\'\\n[Definition]\\n# Abus API : 401/403 répétés sur /api/v1/* (hors auth déjà couvert par gitrust-login)\\nfailregex = ^<HOST> .* \\"(GET|POST|PUT|DELETE|PATCH) /api/v1/(?!auth/)[^\\"]*\\" (401|403) .*$\\nignoreregex =\\nEOF","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3.2 gitrust-api-abuse.conf","id":"192","title":"3.2 gitrust-api-abuse.conf"},"193":{"body":"sudo tee /etc/fail2ban/filter.d/gitrust-ssh.conf <<\'EOF\'\\n[Definition]\\n# russh / gitrust-ssh : échecs d\'authentification\\n# Regex à raffiner après observation des logs réels via :\\n# sudo fail2ban-regex <(journalctl -u gitrust --no-pager -n 2000) \\\\\\n# /etc/fail2ban/filter.d/gitrust-ssh.conf\\nfailregex = ^.*ssh.*auth(entication)? (failed|failure).*from <HOST>.*$ ^.*[Rr]ejected.*(public[_ ]?key|password).*from <HOST>.*$ ^.*no matching (ssh|public) key.*from <HOST>.*$ ^.*unknown user.*from <HOST>.*$ ^.*gitrust.*auth.*refused.*<HOST>.*$\\nignoreregex =\\nEOF","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3.3 gitrust-ssh.conf","id":"193","title":"3.3 gitrust-ssh.conf"},"194":{"body":"sudo tee /etc/fail2ban/filter.d/gitrust-import.conf <<\'EOF\'\\n[Definition]\\n# Import worker : tokens OAuth/GitHub invalides sur clone de dépôts externes\\nfailregex = ^.*import.*authentication failed.*from <HOST>.*$ ^.*import.*invalid (token|credentials).*from <HOST>.*$ ^.*import.*clone failed.*401.*from <HOST>.*$\\nignoreregex =\\nEOF","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3.4 gitrust-import.conf","id":"194","title":"3.4 gitrust-import.conf"},"195":{"body":"sudo tee /etc/fail2ban/filter.d/dtrack-login.conf <<\'EOF\'\\n[Definition]\\n# Dependency-Track : brute force du POST /api/v1/user/login\\nfailregex = ^<HOST> .* \\"POST /api/v1/user/login[^\\"]*\\" (401|403) .*$ ^<HOST> .* \\"POST /api/v1/user/forceChangePassword[^\\"]*\\" (401|403) .*$\\nignoreregex =\\nEOF","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3.5 dtrack-login.conf (si DTrack exposé)","id":"195","title":"3.5 dtrack-login.conf (si DTrack exposé)"},"196":{"body":"sudo tee /etc/fail2ban/filter.d/dtrack-api.conf <<\'EOF\'\\n[Definition]\\n# Dependency-Track API : abus de clé API ou requêtes non authentifiées\\nfailregex = ^<HOST> .* \\"[^\\"]+ /api/v1/[^\\"]*\\" 401 .*$ ^<HOST> .* \\"[^\\"]+ /api/v1/[^\\"]*\\" 403 .*$\\nignoreregex =\\nEOF","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3.6 dtrack-api.conf (si DTrack exposé)","id":"196","title":"3.6 dtrack-api.conf (si DTrack exposé)"},"197":{"body":"if [ ! -f /etc/fail2ban/filter.d/postgresql.conf ]; then\\nsudo tee /etc/fail2ban/filter.d/postgresql.conf <<\'EOF\'\\n[Definition]\\nfailregex = ^.*authentication failed for user.*host=<HOST>.*$ ^.*FATAL:.*password authentication failed.*<HOST>.*$ ^.*no pg_hba\\\\.conf entry for host \\"<HOST>\\".*$\\nignoreregex =\\nEOF\\nfi","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3.7 postgresql.conf (créer si absent)","id":"197","title":"3.7 postgresql.conf (créer si absent)"},"198":{"body":"if [ ! -f /etc/fail2ban/filter.d/nginx-limit-req.conf ]; then\\nsudo tee /etc/fail2ban/filter.d/nginx-limit-req.conf <<\'EOF\'\\n[Definition]\\nfailregex = ^.*limiting requests, excess: .* by zone .*, client: <HOST>.*$\\nignoreregex =\\nEOF\\nfi","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3.8 nginx-limit-req.conf (créer si absent sur votre distro)","id":"198","title":"3.8 nginx-limit-req.conf (créer si absent sur votre distro)"},"199":{"body":"Le paquet fail2ban Debian/Ubuntu fournit apache-badbots.conf mais PAS nginx-badbots.conf. Sans ce filter, fail2ban-client reload affiche : Found no accessible config files for \'filter.d/nginx-badbots\' under /etc/fail2ban Le filter ci-dessous réutilise la liste de bad user-agents de apache-badbots avec un failregex adapté au format combined de nginx : sudo tee /etc/fail2ban/filter.d/nginx-badbots.conf <<\'EOF\'\\n[Definition]\\nbadbotscustom = EmailCollector|WebEMailExtrac|TrackBack/1\\\\.02|sogou music spider\\nbadbots = Atomic_Email_Hunter/4\\\\.0|atSpider/1\\\\.0|autoemailspider|bwh3_user_agent|China Local Browse 2\\\\.6|ContactBot/0\\\\.2|ContentSmartz|DataCha0s/2\\\\.0|DBrowse 1\\\\.4b|DBrowse 1\\\\.4d|Demo Bot DOT 16b|Demo Bot Z 16b|DSurf15a 01|DSurf15a 71|DSurf15a 81|DSurf15a VA|EBrowse 1\\\\.4b|Educate Search VxB|EmailSiphon|EmailSpider|EmailWolf 1\\\\.00|ExtractorPro|Franklin Locator 1\\\\.8|Full Web Bot 0416B|Guestbook Auto Submitter|ISC Systems iRc Search 2\\\\.1|LMQueueBot/0\\\\.2|LWP\\\\:\\\\:Simple/5\\\\.803|Microsoft URL Control - 6\\\\.00\\\\.8xxx|Missigua Locator 1\\\\.9|Mozilla/4\\\\.0 efp@gmx\\\\.net|Nsauditor/1\\\\.x|PBrowse 1\\\\.4b|PEval 1\\\\.4b|Poirot|psycheclone|sogou spider|sohu agent|VadixBot|WebVulnCrawl\\\\.unknown/1\\\\.0 libwww-perl/5\\\\.803|Wells Search II|WEP Search 00 failregex = ^<HOST> -.*\\"(GET|POST|HEAD).*HTTP.*\\"(?:%(badbots)s|%(badbotscustom)s)\\"$\\nignoreregex = datepattern = ^[^\\\\[]*\\\\[({DATE}) {^LN-BEG}\\nEOF Alternative : si vous ne voulez pas maintenir la liste, simplement désactiver le jail ( enabled = false dans le [nginx-badbots]) — la combinaison nginx-botsearch + nginx-limit-req + gitrust-api-abuse couvre déjà l’essentiel.","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 3.9 nginx-badbots.conf — OBLIGATOIRE (pas fourni par Debian/Ubuntu)","id":"199","title":"3.9 nginx-badbots.conf — OBLIGATOIRE (pas fourni par Debian/Ubuntu)"},"2":{"body":"Cette documentation est organisée en quatre parties selon leurs publics respectifs : Manuel utilisateur — pour les développeurs qui utilisent une instance gitrust existante : push/pull, pull requests, issues, CI, notifications. Prérequis : savoir utiliser Git en ligne de commande. Manuel d’administration — pour les ops et self-hosters qui déploient, configurent et maintiennent une instance en production. Prérequis : administration Linux, notions de réseau et TLS. Manuel développeur — pour les contributeurs au code gitrust et les développeurs qui construisent des intégrations sur l’API publique. Prérequis : Rust (pour contribuer) ou un langage client (pour l’API). Bibliothèque de templates — pour tous les profils, lorsqu’ils cherchent un point de départ prêt à l’emploi (fichiers .env, docker-compose.yml, configs reverse-proxy, scripts de backup, exemples de clients API).","breadcrumbs":"Introduction » À qui s’adresse cette documentation ?","id":"2","title":"À qui s’adresse cette documentation ?"},"20":{"body":"Dans ton navigateur, retourne sur Paramètres et clique sur Clés SSH dans le menu de gauche. Clique sur Ajouter une clé SSH. Un formulaire apparaît : Titre : donne un nom descriptif à cette clé (ex. laptop-perso-2026, poste-bureau) Clé : colle la ligne copiée à l’étape précédente Clique Enregistrer la clé. Sortie attendue (message dans l’interface) : Clé SSH ajoutée avec succès. Teste maintenant la connexion SSH depuis ton terminal : ssh -T git@demo.gitrust.eu -p 2222 Sortie attendue : Bonjour tonpseudo ! Vous êtes authentifié, mais gitrust ne fournit pas d\'accès shell. Checkpoint : si tu obtiens ce message, ta clé SSH est correctement enregistrée. Si tu obtiens Permission denied (publickey), vérifie que tu as bien copié la clé publique ( .pub) et non la clé privée. Consulte la section « Et si ça ne marche pas » ci-dessous.","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Étape 4 : Enregistre la clé SSH dans ton profil gitrust","id":"20","title":"Étape 4 : Enregistre la clé SSH dans ton profil gitrust"},"200":{"body":"","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 4. Rate limiting côté Nginx (requis par nginx-limit-req)","id":"200","title":"4. Rate limiting côté Nginx (requis par nginx-limit-req)"},"201":{"body":"sudo tee /etc/nginx/conf.d/gitrust-limit.conf <<\'EOF\'\\n# Zones de rate limiting gitrust\\nlimit_req_zone $binary_remote_addr zone=gitrust_login:10m rate=1r/s;\\nlimit_req_zone $binary_remote_addr zone=gitrust_api:10m rate=10r/s;\\nlimit_req_zone $binary_remote_addr zone=gitrust_git:10m rate=30r/s;\\nEOF","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 4.1 Déclarer les zones globales","id":"201","title":"4.1 Déclarer les zones globales"},"202":{"body":"Dans le bloc server { listen 443 ssl; ... }, avant location / finale : # Protection brute force login (1 req/s par IP, burst 5)\\nlocation ~ ^/(login|api/v1/auth/) { limit_req zone=gitrust_login burst=5 nodelay; proxy_pass http://gitrust_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;\\n} # Protection API (10 req/s par IP, burst 20)\\nlocation ^~ /api/v1/ { limit_req zone=gitrust_api burst=20 nodelay; proxy_pass http://gitrust_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;\\n} # Protection Git smart HTTP (30 req/s — clone/push légitime peut être verbeux)\\nlocation ~ ^/[^/]+/[^/]+\\\\.git/ { limit_req zone=gitrust_git burst=50 nodelay; proxy_pass http://gitrust_backend; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_buffering off; proxy_request_buffering off; client_max_body_size 2G;\\n}","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 4.2 Ajouter les location dans /etc/nginx/sites-available/gitrust","id":"202","title":"4.2 Ajouter les location dans /etc/nginx/sites-available/gitrust"},"203":{"body":"sudo nginx -t && sudo systemctl reload nginx","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 4.3 Reload","id":"203","title":"4.3 Reload"},"204":{"body":"sudo systemctl restart fail2ban # Liste des jails actifs\\nsudo fail2ban-client status\\n# Attendu :\\n# sshd, nginx-http-auth, nginx-botsearch, nginx-badbots, nginx-limit-req,\\n# gitrust-login, gitrust-api-abuse, gitrust-ssh, gitrust-import,\\n# postgresql, recidive\\n# (+ dtrack-login, dtrack-api si activées) # Stats par jail\\nsudo fail2ban-client status gitrust-login\\nsudo fail2ban-client status sshd","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 5. Démarrage et validation","id":"204","title":"5. Démarrage et validation"},"205":{"body":"# 1. gitrust-login contre l\'access log nginx\\nsudo fail2ban-regex /var/log/nginx/gitrust.access.log \\\\ /etc/fail2ban/filter.d/gitrust-login.conf # 2. gitrust-api-abuse\\nsudo fail2ban-regex /var/log/nginx/gitrust.access.log \\\\ /etc/fail2ban/filter.d/gitrust-api-abuse.conf # 3. gitrust-ssh contre journald\\njournalctl -u gitrust --no-pager -n 5000 > /tmp/gitrust.log\\nsudo fail2ban-regex /tmp/gitrust.log \\\\ /etc/fail2ban/filter.d/gitrust-ssh.conf\\nrm /tmp/gitrust.log # 4. postgresql\\njournalctl -u docker --no-pager -n 5000 | grep -i postgres > /tmp/pg.log\\nsudo fail2ban-regex /tmp/pg.log \\\\ /etc/fail2ban/filter.d/postgresql.conf 0 failregex found = regex à ajuster après observation des logs réels de chaque service.","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » Valider chaque filtre custom","id":"205","title":"Valider chaque filtre custom"},"206":{"body":"# Depuis un host HORS LAN (sinon ignoreip s\'applique)\\nfor i in $(seq 1 10); do curl -sk -o /dev/null -w \\"%{http_code}\\\\n\\" \\\\ -X POST https://<votre-domaine>/login \\\\ -d \'username=admin&password=wrong\'\\ndone # Vérifier le ban\\nssh gitrust-host \'sudo fail2ban-client status gitrust-login\'\\n# Currently banned : 1 — Banned IP list : <IP test> # Débannir manuellement\\nssh gitrust-host \'sudo fail2ban-client unban <IP>\'","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » Test de bannissement","id":"206","title":"Test de bannissement"},"207":{"body":"# Logs fail2ban temps réel\\nsudo tail -f /var/log/fail2ban.log # Toutes les IPs bannies, tous jails confondus\\nsudo fail2ban-client banned # Stats détaillées d\'un jail\\nsudo fail2ban-client status gitrust-ssh\\n# Currently failed : 2\\n# Total failed : 47\\n# Currently banned : 1\\n# Total banned : 12\\n# Banned IP list : 203.0.113.42 sudo grep \\"Ban \\" /var/log/fail2ban.log | tail -20","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 6. Monitoring","id":"207","title":"6. Monitoring"},"208":{"body":"# Jail Port(s) Source logs Max retry Ban time Surface protégée 1 sshd 2022 journald sshd 3 1h SSH admin 2 nginx-http-auth 80,443 nginx error 5 1h Basic auth (admin futur) 3 nginx-botsearch 80,443 nginx access 2 24h Scanners WP/PHP 4 nginx-badbots 80,443 nginx access 2 24h User-agents malveillants 5 nginx-limit-req 80,443 nginx error 10 1h Flood global 6 gitrust-login 80,443 nginx access 5 1h Brute force login UI + API 7 gitrust-api-abuse 80,443 nginx access 30 2h Scrapers API (tokens fuités) 8 gitrust-ssh 22,2222 journald gitrust 5 1h Brute force clé SSH Git 9 gitrust-import 80,443 journald gitrust 3 30m Brute force PAT/OAuth import 10 dtrack-login 8080 nginx access 5 2h Brute force UI Dep-Track 11 dtrack-api 8081 nginx access 10 1h Abus clé API Dep-Track 12 postgresql 5432 journald 5 1h Défense en profondeur PG 13 recidive all fail2ban.log 3 1w Méta-ban 3×/24h Ordre de déclenchement typique : brute force → jail spécifique (ban 1h) → si récidive 3x → recidive (ban 1 semaine, tous ports).","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 7. Matrice récapitulative","id":"208","title":"7. Matrice récapitulative"},"209":{"body":"","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 8. Notes spécifiques à la stack gitrust","id":"209","title":"8. Notes spécifiques à la stack gitrust"},"21":{"body":"Dans ton navigateur, clique sur le + en haut à droite (ou navigue vers /repo/new). Remplis le formulaire : Propriétaire : ton pseudo Nom du dépôt : mon-premier-depot (lettres, chiffres, tirets uniquement) Visibilité : Privé (ou Public selon ta préférence) Initialiser le dépôt : coche « Ajouter un README » Clique sur Créer le dépôt. Sortie attendue : gitrust te redirige vers la page du dépôt à l’URL : https://demo.gitrust.eu/tonpseudo/mon-premier-depot La page affiche un fichier README.md avec le nom du dépôt, et la barre latérale montre 1 commit, 1 branche ( main). Checkpoint : note l’URL affichée dans la barre d’adresse de ton navigateur. Elle doit correspondre au patron https://<instance>/<pseudo>/<nom-depot>. Si tu vois une erreur 404 ou 500, relis le formulaire de création.","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Étape 5 : Crée ton premier dépôt vide","id":"21","title":"Étape 5 : Crée ton premier dépôt vide"},"210":{"body":"Dagger s’exécute localement sur la machine gitrust (ou un runner distant — voir administration_manual/how-to/configurer-ci-runner-remote.md). Aucun port réseau ouvert → pas de jail dédié.","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 8.1 Dagger (CI)","id":"210","title":"8.1 Dagger (CI)"},"211":{"body":"Si DTrack est déployé sur le même serveur et exposé, activer les jails 10 et 11 en mettant enabled = true et en pointant logpath vers les logs nginx du vhost DTrack. Si DTrack est interne (VPN, réseau privé), laisser enabled = false — le firewall suffit. Config DTrack recommandée : Bind sur 127.0.0.1 via dtrack.url.base=http://127.0.0.1:8080","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 8.2 Dependency-Track","id":"211","title":"8.2 Dependency-Track"},"212":{"body":"Le jail postgresql est défensif. PG doit rester bindé sur 127.0.0.1:5432 via Docker. Vérifier : sudo ss -tlnp | grep 5432\\n# Attendu : 127.0.0.1:5432 — PAS 0.0.0.0:5432","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 8.3 PostgreSQL","id":"212","title":"8.3 PostgreSQL"},"213":{"body":"Pour recevoir un mail à chaque ban : Installer un relay SMTP local : sudo apt install msmtp-mta Configurer /etc/msmtprc avec un compte SMTP Décommenter dans [DEFAULT] : destemail = contact@gitrust.eu\\nsender = fail2ban@votre-serveur.example.com\\naction = %(action_mwl)s sudo systemctl restart fail2ban","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 8.4 Notifications","id":"213","title":"8.4 Notifications"},"214":{"body":"IPv6 : toutes les regex utilisent <HOST> qui matche IPv4 ET IPv6. Vérifier que UFW est configuré pour v6 également. CDN/Cloudflare devant : si un CDN est ajouté, $remote_addr côté Nginx sera l’IP du CDN — il faut récupérer la vraie IP via X-Forwarded-For et propager au logging Nginx. Changer failregex en conséquence. Sinon les jails banniront le CDN. Docker/Podman : si gitrust passe en conteneur, les logs de gitrust.service deviennent docker.service ou podman.service → mettre à jour journalmatch dans les jails 8 et 9. GeoIP : pour bloquer des pays entiers en amont, ajouter geo $blocked_country dans Nginx (module ngx_http_geoip2_module) — complémentaire à fail2ban.","breadcrumbs":"Guides pratiques » Durcir avec Fail2ban » 9. Limites et évolutions","id":"214","title":"9. Limites et évolutions"},"215":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Régler le rate limiting » Régler le rate limiting","id":"215","title":"Régler le rate limiting"},"216":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Régler le rate limiting » TODO","id":"216","title":"TODO"},"217":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Forcer le 2FA sur toute l\'instance » Forcer le 2FA sur toute l’instance","id":"217","title":"Forcer le 2FA sur toute l’instance"},"218":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Forcer le 2FA sur toute l\'instance » TODO","id":"218","title":"TODO"},"219":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Dépanner SSH » Dépanner SSH","id":"219","title":"Dépanner SSH"},"22":{"body":"✓ O1 accompli : la 2FA est activée sur ton compte — tu l’as vérifiée sur la page Sécurité qui affiche « Activée » ✓ O2 accompli : ta clé SSH publique est enregistrée — tu l’as confirmée avec ssh -T git@... -p 2222 qui a répondu « Vous êtes authentifié » ✓ O3 accompli : ton premier dépôt est créé et visible à l’URL /<pseudo>/mon-premier-depot","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Récapitulatif","id":"22","title":"Récapitulatif"},"220":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Dépanner SSH » TODO","id":"220","title":"TODO"},"221":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Dépanner la CI » Dépanner la CI","id":"221","title":"Dépanner la CI"},"222":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Dépanner la CI » TODO","id":"222","title":"TODO"},"223":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Gérer les utilisateurs (panel /admin) » Gérer les utilisateurs (panel /admin)","id":"223","title":"Gérer les utilisateurs (panel /admin)"},"224":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Gérer les utilisateurs (panel /admin) » TODO","id":"224","title":"TODO"},"225":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Auditer une instance » Auditer une instance","id":"225","title":"Auditer une instance"},"226":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Auditer une instance » TODO","id":"226","title":"TODO"},"227":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Référence","id":"227","title":"Référence"},"228":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » TODO","id":"228","title":"TODO"},"229":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Variables d\'environnement » Variables d’environnement","id":"229","title":"Variables d’environnement"},"23":{"body":"Symptôme Cause probable Correction Permission denied (publickey) lors du test SSH Tu as collé la clé privée au lieu de la clé publique, ou le fichier .pub ne correspond pas à la clé active Dans gitrust, supprime la clé ajoutée. Retourne au terminal et exécute ssh-add -l pour voir les clés actives. Recopie la bonne clé .pub avec cat ~/.ssh/id_ed25519.pub Connection refused lors du test SSH Le port SSH de l’instance est différent de 2222, ou l’instance est inaccessible Vérifie avec l’administrateur le port SSH réel. Essaie ssh -T git@<instance> -p 22 en alternative Le code 2FA est refusé alors qu’il semble correct L’horloge de ton téléphone est désynchronisée (décalage > 30 s) Active la synchronisation automatique de l’heure sur ton téléphone ( Paramètres → Date et heure → Automatique). Réessaie immédiatement après Le dépôt redirige vers une erreur 422 lors de la création Le nom contient des caractères interdits (espaces, accents, /) Utilise uniquement des lettres non accentuées, chiffres et tirets. Évite les points en début ou fin de nom","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Et si ça ne marche pas","id":"23","title":"Et si ça ne marche pas"},"230":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Variables d\'environnement » TODO","id":"230","title":"TODO"},"231":{"body":"Ce document explique comment fonctionne la configuration de la plateforme, les deux mécanismes en jeu, leur précédence, et les pièges à connaître.","breadcrumbs":"Référence » Paramètres dynamiques » Paramètres dynamiques","id":"231","title":"Paramètres dynamiques"},"232":{"body":"Gitrust utilise deux systèmes de configuration indépendants : Système Source Modifiable à chaud Visible dans l’UI admin Configuration statique Fichier .env + variables d’environnement Non (restart requis) Non Configuration dynamique Table app_settings (PostgreSQL) Oui (effet immédiat) Oui ( /admin/settings) Il existe un cas hybride pour OAuth (DB prioritaire, .env en fallback).","breadcrumbs":"Référence » Paramètres dynamiques » Vue d’ensemble : deux systèmes distincts","id":"232","title":"Vue d’ensemble : deux systèmes distincts"},"233":{"body":"","breadcrumbs":"Référence » Paramètres dynamiques » 1. Configuration statique ( .env)","id":"233","title":"1. Configuration statique ( .env)"},"234":{"body":"Les variables d’environnement sont chargées une seule fois au démarrage par dotenvy::dotenv() et stockées dans des structs Rust immuables. Elles ne sont jamais relues après le boot.","breadcrumbs":"Référence » Paramètres dynamiques » Principe","id":"234","title":"Principe"},"235":{"body":"Fichier Rôle .env.example Template documenté avec toutes les variables .env Configuration locale (gitignore) .env.production Configuration de déploiement .env.test Configuration de tests","breadcrumbs":"Référence » Paramètres dynamiques » Fichiers de référence","id":"235","title":"Fichiers de référence"},"236":{"body":"Struct Variables concernées GitrustConfig GIT_REPOS_BASE_PATH, SSH_PORT, SSH_LISTEN_ADDR, SSH_HOST_KEY_PATH, CI_*, IMPORT_* AppConfig APP_NAME, APP_THEME, APP_DEBUG AuthConfig JWT_SECRET, JWT_EXPIRATION_MINUTES, SESSION_*, RATE_LIMIT_*, COOKIE_* EmailConfig SMTP_*, EMAIL_*, IMAP_*","breadcrumbs":"Référence » Paramètres dynamiques » Structs de chargement","id":"236","title":"Structs de chargement"},"237":{"body":"Chargées dans RustwardenApp::build() au démarrage Stockées dans des Arc<Config> partagés via l’état axum Modifier le .env sans redémarrer n’a aucun effet Ces variables ne sont PAS affichées dans l’interface admin","breadcrumbs":"Référence » Paramètres dynamiques » Comportement","id":"237","title":"Comportement"},"238":{"body":"DATABASE_URL, SERVER_HOST, SERVER_PORT, RUST_LOG,\\nSSH_HOST_KEY_PATH, SSH_PORT, SSH_LISTEN_ADDR, SSH_PUBLIC_HOST,\\nJWT_SECRET, JWT_EXPIRATION_MINUTES, JWT_ISSUER,\\nREFRESH_TOKEN_EXPIRATION_DAYS, REMEMBER_ME_EXPIRATION_DAYS,\\nSESSION_TIMEOUT_MINUTES, SESSION_BACKEND,\\nRATE_LIMIT_LOGIN_PER_MINUTE, RATE_LIMIT_REFRESH_PER_MINUTE,\\nRATE_LIMIT_GENERAL_PER_MINUTE,\\nAPP_DEBUG, COOKIE_SECURE, COOKIE_SAME_SITE,\\nADMIN_USERNAME, ADMIN_EMAIL, ADMIN_PASSWORD,\\nSMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, SMTP_FROM,\\nEMAIL_BASE_URL, EMAIL_QUEUE_*,\\nAPP_NAME, APP_THEME, DEFAULT_LOCALE,\\nGIT_REPOS_BASE_PATH,\\nCI_ENABLED, CI_MAX_CONCURRENT, CI_REMOTE_HOST, CI_WORKSPACE_PATH","breadcrumbs":"Référence » Paramètres dynamiques » Liste des variables statiques (non exhaustive)","id":"238","title":"Liste des variables statiques (non exhaustive)"},"239":{"body":"","breadcrumbs":"Référence » Paramètres dynamiques » 2. Configuration dynamique (table app_settings)","id":"239","title":"2. Configuration dynamique (table app_settings)"},"24":{"body":"→ 02 — Cloner et pousser du code : clone ton dépôt en local avec SSH, fais ton premier commit et pousse-le sur gitrust (~25 min)","breadcrumbs":"Tutoriels » 01 — Premier pas sur gitrust » Prochaine étape","id":"24","title":"Prochaine étape"},"240":{"body":"Les réglages dynamiques sont stockés en base PostgreSQL dans la table app_settings et lus à chaque requête via AppSettingsService. Ils sont modifiables à chaud par un administrateur depuis l’interface /admin/settings.","breadcrumbs":"Référence » Paramètres dynamiques » Principe","id":"240","title":"Principe"},"241":{"body":"CREATE TABLE app_settings ( id UUID PRIMARY KEY, key VARCHAR(100) UNIQUE NOT NULL, value TEXT NOT NULL, description TEXT, updated_by UUID REFERENCES users(id) ON DELETE SET NULL, updated_at TIMESTAMPTZ NOT NULL\\n);","breadcrumbs":"Référence » Paramètres dynamiques » Schéma de la table","id":"241","title":"Schéma de la table"},"242":{"body":"Au boot, AppSettingsService::initialize_default_settings() crée les réglages par défaut uniquement s’ils n’existent pas encore en base : #![allow(unused)] fn main() {\\nlet existing = Self::get_setting(db, key).await?;\\nif existing.is_none() { // ... insert valeur par défaut\\n} } Conséquence critique : une fois qu’un réglage existe en base (créé au premier démarrage ou modifié via l’UI), il n’est jamais écrasé par un redémarrage ultérieur.","breadcrumbs":"Référence » Paramètres dynamiques » Initialisation au démarrage","id":"242","title":"Initialisation au démarrage"},"243":{"body":"Clé Défaut Description app_domain env::var(\\"APP_DOMAIN\\") ou \\"localhost\\" Domaine de l’application allow_registration false Autoriser l’inscription publique validation_email_required true Exiger la validation email audit_log_level INFO Niveau de log d’audit audit_log_actions [\\"create\\",\\"update\\",\\"delete\\",\\"reset_password\\"] Actions auditées password_min_length 8 Longueur minimum mot de passe password_require_uppercase false Exiger des majuscules password_require_lowercase false Exiger des minuscules password_require_digits false Exiger des chiffres password_require_special false Exiger des caractères spéciaux password_change_require_email true Confirmation email pour changement mdp password_expiration_enabled false Activer l’expiration des mots de passe password_expiration_days 0 Durée d’expiration (jours) password_expiration_alert_enabled false Alerte email avant expiration password_expiration_alert_days_before 7 Jours avant expiration pour alerter oauth_enabled false Activer OAuth/SSO oauth_google_enabled false Activer Google OAuth oauth_github_enabled false Activer GitHub OAuth oauth_discord_enabled false Activer Discord OAuth oauth_microsoft_enabled false Activer Microsoft OAuth oauth_redirect_base_url \\"\\" URL de base pour les callbacks OAuth oauth_auto_register true Créer un compte auto au premier login OAuth oauth_link_existing_account true Lier un compte OAuth à un utilisateur existant oauth_{provider}_client_id \\"\\" Client ID du provider OAuth oauth_{provider}_client_secret \\"\\" Client secret (chiffré AES-256-GCM en base) oauth_microsoft_tenant \\"\\" Tenant Azure AD","breadcrumbs":"Référence » Paramètres dynamiques » Liste des réglages dynamiques et leurs valeurs par défaut","id":"243","title":"Liste des réglages dynamiques et leurs valeurs par défaut"},"244":{"body":"OAuth est le seul sous-système qui combine les deux sources. La logique dans OAuthConfig::load() : Pour chaque réglage OAuth : 1. Chercher dans app_settings (DB) → si trouvé et non vide : utiliser cette valeur 2. Sinon : fallback sur la variable d\'environnement → si absente : utiliser la valeur par défaut codée en dur Important : OAuthConfig::load() est appelé au démarrage. Le résultat est stocké dans un Arc et n’est pas relu dynamiquement. Donc : Modifier un réglage OAuth via l’UI admin nécessite un redémarrage pour que OAuthConfig soit rechargé Le .env n’est qu’un fallback si la DB n’a pas de valeur","breadcrumbs":"Référence » Paramètres dynamiques » 3. Cas hybride : OAuth","id":"244","title":"3. Cas hybride : OAuth"},"245":{"body":"","breadcrumbs":"Référence » Paramètres dynamiques » 4. Précédence et comportement au redémarrage","id":"245","title":"4. Précédence et comportement au redémarrage"},"246":{"body":"Action Effet immédiat Après restart Modifier .env Non Oui","breadcrumbs":"Référence » Paramètres dynamiques » Réglages statiques ( .env uniquement)","id":"246","title":"Réglages statiques ( .env uniquement)"},"247":{"body":"Action Effet immédiat Après restart Modifier via UI admin Oui Oui (valeur en DB persiste) Modifier le .env Aucun effet Aucun effet","breadcrumbs":"Référence » Paramètres dynamiques » Réglages dynamiques (DB uniquement)","id":"247","title":"Réglages dynamiques (DB uniquement)"},"248":{"body":"Action Effet immédiat Après restart Modifier via UI admin Non (OAuthConfig est en Arc) Oui (DB prime sur .env) Modifier .env Non Seulement si aucune valeur en DB","breadcrumbs":"Référence » Paramètres dynamiques » Réglages hybrides (OAuth)","id":"248","title":"Réglages hybrides (OAuth)"},"249":{"body":"Certaines variables présentes dans .env.example donnent l’ illusion de configurer des réglages qui sont en réalité gérés par la base de données : Variable .env Réglage DB correspondant La variable .env est-elle lue ? ALLOW_REGISTRATION=true allow_registration Non — valeur par défaut codée en dur ( \\"false\\") EMAIL_VALIDATION_REQUIRED=true validation_email_required Non — valeur par défaut codée en dur ( \\"true\\") OAUTH_ENABLED=true oauth_enabled Oui, mais seulement en fallback si la DB n’a pas de valeur Pour ALLOW_REGISTRATION et EMAIL_VALIDATION_REQUIRED : La variable .env est documentée dans .env.example mais n’est jamais consultée par initialize_default_settings() La valeur initiale est codée en dur dans le service Seule la valeur en base de données (modifiable via /admin/settings) fait foi Pour app_domain, c’est le seul réglage dynamique qui lit le .env comme seed initial.","breadcrumbs":"Référence » Paramètres dynamiques » 5. Piège principal : les variables .env fantômes","id":"249","title":"5. Piège principal : les variables .env fantômes"},"25":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » 02 — Cloner et pousser du code » 02 — Cloner et pousser du code","id":"25","title":"02 — Cloner et pousser du code"},"250":{"body":"┌─────────────────────────────┐ │ Quel type de réglage ? │ └──────────┬──────────────────-┘ │ ┌────────────────┼────────────────┐ ▼ ▼ ▼ Infrastructure Fonctionnel OAuth (port, JWT, SMTP) (inscription, (providers, mots de passe) secrets) │ │ │ ▼ ▼ ▼ .env seul DB seule DB + fallback .env │ │ │ ▼ ▼ ▼ Restart requis Effet immédiat Restart requis via /admin/ (OAuthConfig en Arc) settings","breadcrumbs":"Référence » Paramètres dynamiques » 6. Diagramme de décision","id":"250","title":"6. Diagramme de décision"},"251":{"body":"","breadcrumbs":"Référence » Paramètres dynamiques » 7. Guide pour les administrateurs","id":"251","title":"7. Guide pour les administrateurs"},"252":{"body":"Éditer .env (ou .env.production) puis redémarrer le service : # Éditer\\nvim .env # Redémarrer\\nsystemctl restart gitrust # production\\n# ou Ctrl+C + cargo run # dev","breadcrumbs":"Référence » Paramètres dynamiques » Modifier un réglage d’infrastructure","id":"252","title":"Modifier un réglage d’infrastructure"},"253":{"body":"Se connecter en tant qu’administrateur, aller dans /admin/settings, modifier la valeur, et cliquer “Save”. L’effet est immédiat, aucun redémarrage nécessaire.","breadcrumbs":"Référence » Paramètres dynamiques » Modifier un réglage fonctionnel","id":"253","title":"Modifier un réglage fonctionnel"},"254":{"body":"Via /admin/settings, modifier les valeurs OAuth puis redémarrer le service (la config OAuth est chargée en mémoire au boot et n’est pas relue dynamiquement).","breadcrumbs":"Référence » Paramètres dynamiques » Modifier un réglage OAuth","id":"254","title":"Modifier un réglage OAuth"},"255":{"body":"Pour les réglages dynamiques, interroger la base directement : SELECT key, value, updated_at, updated_by\\nFROM app_settings\\nWHERE key = \'allow_registration\'; Pour les réglages statiques, vérifier les logs au démarrage ( RUST_LOG=debug).","breadcrumbs":"Référence » Paramètres dynamiques » Vérifier la valeur effective d’un réglage","id":"255","title":"Vérifier la valeur effective d’un réglage"},"256":{"body":"","breadcrumbs":"Référence » Paramètres dynamiques » 8. Guide pour les développeurs","id":"256","title":"8. Guide pour les développeurs"},"257":{"body":"Ajouter le tuple (clé, valeur_défaut, description) dans AppSettingsService::initialize_default_settings() : #![allow(unused)] fn main() {\\n(\\"ma_nouvelle_cle\\", \\"valeur_par_defaut\\", Some(\\"Description pour l\'UI admin\\")), } Lire la valeur dans le code via le service : #![allow(unused)] fn main() {\\n// Boolean avec défaut\\nlet enabled = AppSettingsService::get_bool(&db, \\"ma_nouvelle_cle\\", false).await?; // String\\nlet val = AppSettingsService::get_setting(&db, \\"ma_nouvelle_cle\\").await?; } La valeur apparaîtra automatiquement dans /admin/settings.","breadcrumbs":"Référence » Paramètres dynamiques » Ajouter un nouveau réglage dynamique","id":"257","title":"Ajouter un nouveau réglage dynamique"},"258":{"body":"Ajouter la variable dans .env.example avec documentation complète Lire la variable dans le struct Config correspondant via env::var() La valeur ne sera pas visible dans l’interface admin","breadcrumbs":"Référence » Paramètres dynamiques » Ajouter un nouveau réglage statique","id":"258","title":"Ajouter un nouveau réglage statique"},"259":{"body":"Suivre le pattern OAuth dans crates/rustwarden-core/src/config/oauth.rs : #![allow(unused)] fn main() {\\nlet ma_valeur = match db_val(\\"ma_cle\\").await { Some(v) => v, None => env::var(\\"MA_CLE\\").unwrap_or_else(|_| \\"defaut\\".to_string()),\\n}; }","breadcrumbs":"Référence » Paramètres dynamiques » Ajouter un réglage hybride (DB + fallback .env)","id":"259","title":"Ajouter un réglage hybride (DB + fallback .env)"},"26":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » 02 — Cloner et pousser du code » TODO","id":"26","title":"TODO"},"260":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Schéma de la base de données » Schéma de la base de données","id":"260","title":"Schéma de la base de données"},"261":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Schéma de la base de données » TODO","id":"261","title":"TODO"},"262":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Ports et services » Ports et services","id":"262","title":"Ports et services"},"263":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Ports et services » TODO","id":"263","title":"TODO"},"264":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Conformité ANSSI PA-074 » Conformité ANSSI PA-074","id":"264","title":"Conformité ANSSI PA-074"},"265":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Conformité ANSSI PA-074 » TODO","id":"265","title":"TODO"},"266":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Explication","id":"266","title":"Explication"},"267":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » TODO","id":"267","title":"TODO"},"268":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Architecture globale » Architecture globale","id":"268","title":"Architecture globale"},"269":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Architecture globale » TODO","id":"269","title":"TODO"},"27":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » 03 — Collaborer : équipes, issues, pull requests » 03 — Collaborer : équipes, issues, pull requests","id":"27","title":"03 — Collaborer : équipes, issues, pull requests"},"270":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Modèle de déploiement » Modèle de déploiement","id":"270","title":"Modèle de déploiement"},"271":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Modèle de déploiement » TODO","id":"271","title":"TODO"},"272":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » CI Dagger : Easy Mode vs Power Mode » CI Dagger : Easy Mode vs Power Mode","id":"272","title":"CI Dagger : Easy Mode vs Power Mode"},"273":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » CI Dagger : Easy Mode vs Power Mode » TODO","id":"273","title":"TODO"},"274":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Stratégie de sauvegarde » Stratégie de sauvegarde","id":"274","title":"Stratégie de sauvegarde"},"275":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Stratégie de sauvegarde » TODO","id":"275","title":"TODO"},"276":{"body":"Ce manuel s’adresse à deux publics : les contributeurs au code gitrust (core ou via fork rustwarden) et les développeurs externes qui construisent des intégrations sur l’API publique. Il fournit tout le nécessaire pour comprendre l’architecture des 6 crates, contribuer du code conforme aux standards du projet, ou bâtir un client qui parle à l’API gitrust. Il ne couvre pas l’installation d’une instance de production ni l’usage quotidien de la forge.","breadcrumbs":"Vue d\'ensemble » Manuel développeur","id":"276","title":"Manuel développeur"},"277":{"body":"Le parcours contributeur représente environ 4 heures au total, avec un étayage dégressif : le premier tutoriel est entièrement guidé, le troisième (capstone) demande de résoudre sans guide pas-à-pas. graph LR A[Utilisateur autonome] --> B[01-getting-started<br/>45 min] B --> C[02-premiere-contribution<br/>90 min] C --> D[03-creer-un-worker-async<br/>capstone 120 min] D --> E[Core contributor] Checkpoint de parcours : avant de passer au tutoriel 02, vous devez avoir compilé gitrust localement, lancé les tests unitaires et obtenu une instance de développement fonctionnelle. Si ce n’est pas le cas, relisez le tutoriel 01. Checkpoint de parcours : avant le tutoriel 03 (capstone), vous devez avoir soumis une PR complète avec tests, passé la gate QA et reçu une review. Si ce n’est pas le cas, relisez le tutoriel 02.","breadcrumbs":"Vue d\'ensemble » Parcours d’apprentissage — contributeur core","id":"277","title":"Parcours d’apprentissage — contributeur core"},"278":{"body":"Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suivez-les dans l’ordre — chacun suppose le précédent complété. 01 — Getting started : build local, tests, instance de dev — ~45 min 02 — Première contribution : clone, build, test, PR — ~90 min 03 — Créer un worker async (capstone) — ~120 min","breadcrumbs":"Vue d\'ensemble » Tutoriels — apprendre en faisant","id":"278","title":"Tutoriels — apprendre en faisant"},"279":{"body":"Les how-to répondent à « comment faire X » sans explication de fond. Consultez-les dans n’importe quel ordre selon votre besoin. Workflow de contribution : Git + review + QA Lancer les tests unitaires Lancer les tests E2E (Playwright) Ajouter une route web (patron rustwarden → axum) Ajouter un service métier Ajouter une migration de base de données Implémenter des webhooks Implémenter un endpoint API Importer un dépôt externe (code) Contribuer à rustwarden upstream Passer la QA avant merge","breadcrumbs":"Vue d\'ensemble » How-to — recettes pour les tâches courantes","id":"279","title":"How-to — recettes pour les tâches courantes"},"28":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » 03 — Collaborer : équipes, issues, pull requests » TODO","id":"28","title":"TODO"},"280":{"body":"La référence documente de façon exhaustive l’architecture, les API internes, le schéma de données et les règles QA. Destinée à la consultation ponctuelle. Architecture des 6 crates Services et API interne Schéma de base de données (ERD) Règles QA et gates ANSSI API REST v1 — auth, pagination, codes d’erreur Git hooks post-receive rustwarden-core API — helpers, extracteurs, middleware","breadcrumbs":"Vue d\'ensemble » Référence — informations techniques exactes","id":"280","title":"Référence — informations techniques exactes"},"281":{"body":"Les explanations construisent les modèles mentaux nécessaires pour contribuer de façon éclairée. Lisez-les quand vous voulez comprendre les décisions d’architecture, pas seulement les appliquer. Vue d’ensemble de l’architecture gitrust Flux de requêtes (diagrammes de séquence) Modèle de permissions RBAC 4 niveaux Fonctionnement de la 2FA Hiérarchie des labels CI Dagger : Easy Mode vs Power Mode Décisions UI : HTMX + DaisyUI Patron worker async","breadcrumbs":"Vue d\'ensemble » Explication — comprendre le pourquoi","id":"281","title":"Explication — comprendre le pourquoi"},"282":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » Tutoriels","id":"282","title":"Tutoriels"},"283":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » TODO","id":"283","title":"TODO"},"284":{"body":"Source : ce tutoriel intègre le contenu de gitrust/docs/GETTING_STARTED.md avec la structure pédagogique complète (objectifs Bloom, modèle mental, checkpoints observables, section « Et si ça ne marche pas »).","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Premiers pas avec gitrust : compilez, configurez et poussez votre premier commit","id":"284","title":"Premiers pas avec gitrust : compilez, configurez et poussez votre premier commit"},"285":{"body":"À la fin de ce tutoriel, vous saurez : O1. Compiler gitrust depuis les sources et lancer l’instance de développement localement O2. Configurer l’environnement de développement (base de données, variables d’environnement, assets CSS) O3. Exécuter un premier push SSH vers votre instance locale et vérifier le résultat dans l’interface web","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Objectifs","id":"285","title":"Objectifs"},"286":{"body":"Technique : Rust stable ≥ 1.80 ( rustc --version), PostgreSQL ≥ 15 ( psql --version), Node.js ≥ 18 ( node --version), Git 2.x ( git --version), Docker (optionnel, recommandé pour la base de données) Pédagogique : être un utilisateur autonome de gitrust (parcours user_manual complété ou équivalent) ; familiarité avec Rust (au moins 3 mois de pratique) et avec HTTP/PostgreSQL Temps estimé : ~45 minutes","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Pré-requis","id":"286","title":"Pré-requis"},"287":{"body":"Avant d’exécuter la première commande, prenons 3 minutes pour comprendre ce que vous allez monter et comment les pièces s’articulent. gitrust est un monorepo Rust à 6 crates qui compile en un seul binaire. Quand vous lancez cargo run, ce binaire démarre deux serveurs simultanément : un serveur HTTP ( :4000) pour l’interface web et l’API REST, et un serveur SSH ( :2222) pour les opérations git push/pull. Ils partagent la même base de données PostgreSQL et le même stockage de dépôts bare sur disque. graph TB subgraph sources [\\"Sources gitrust (monorepo Rust)\\"] C1[rustwarden-core<br/>auth, sessions, middleware] C2[gitrust-core<br/>modèles, services métier] C3[gitrust-git<br/>opérations Git bare] C4[gitrust-web<br/>handlers HTTP + templates] C5[gitrust-ssh<br/>serveur SSH Git] C6[gitrust-hooks<br/>post-receive, pre-receive] end subgraph runtime [\\"Processus unique (cargo run)\\"] HTTP[\\"HTTP :4000<br/>UI + API REST\\"] SSH[\\"SSH :2222<br/>git push/pull\\"] end subgraph storage [\\"Stockage\\"] PG[(PostgreSQL<br/>comptes, dépôts,<br/>issues, PRs)] REPOS[Dépôts bare<br/>data/repos/] end C1 & C2 & C3 & C4 & C5 & C6 -->|cargo build| HTTP C1 & C2 & C3 & C4 & C5 & C6 -->|cargo build| SSH HTTP & SSH --> PG HTTP & SSH --> REPOS Ce que vous allez faire : cloner les sources → préparer PostgreSQL → copier et remplir .env → compiler les assets CSS → lancer cargo run → vérifier l’instance → pousser un premier commit via SSH.","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Vue d’ensemble","id":"287","title":"Vue d’ensemble"},"288":{"body":"Avant de cloner quoi que ce soit, vérifiez que tous les outils nécessaires sont installés : rustc --version && cargo --version && psql --version && node --version && git --version Sortie attendue (versions exactes peuvent varier) : rustc 1.82.0 (f6e511eec 2024-10-15)\\ncargo 1.82.0 (8f40fc59f 2024-10-15)\\npsql (PostgreSQL) 16.3\\nv20.11.0\\ngit version 2.43.0 Si des dépendances système manquent, installez-les : # Debian / Ubuntu\\nsudo apt install build-essential pkg-config libssl-dev libpq-dev cmake git # macOS\\nbrew install postgresql openssl cmake Checkpoint : toutes les commandes de vérification doivent retourner un numéro de version sans erreur. Si rustc n’est pas trouvé, installez Rust via curl --proto \'=https\' --tlsv1.2 -sSf https://sh.rustup.rs | sh puis rechargez votre shell.","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Étape 1 : Vérifiez les pré-requis système","id":"288","title":"Étape 1 : Vérifiez les pré-requis système"},"289":{"body":"git clone https://demo.gitrust.eu/gitrust/gitrust.git\\ncd gitrust Sortie attendue : Cloning into \'gitrust\'...\\nremote: Enumerating objects: 12847, done.\\nremote: Counting objects: 100% (12847/12847), done.\\nReceiving objects: 100% (12847/12847), 18.42 MiB | 4.20 MiB/s, done. Checkpoint : vérifiez que la structure de crates est présente : ls crates/ Sortie attendue : gitrust-core gitrust-git gitrust-hooks gitrust-ssh gitrust-web rustwarden-core","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Étape 2 : Clonez le projet","id":"289","title":"Étape 2 : Clonez le projet"},"29":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » 04 — Automatiser avec la CI » 04 — Automatiser avec la CI","id":"29","title":"04 — Automatiser avec la CI"},"290":{"body":"Copiez le fichier d’exemple et éditez les 5 valeurs essentielles : cp .env.example .env Ouvrez .env dans votre éditeur et renseignez ces valeurs : # Connexion à la base de données\\nDATABASE_URL=postgres://gitrust:motdepasse@localhost:5432/gitrust # Clé secrète JWT (générez-la avec : openssl rand -hex 32)\\nJWT_SECRET=votre_cle_secrete_64_caracteres # Compte administrateur créé au premier lancement\\nADMIN_USERNAME=admin\\nADMIN_EMAIL=admin@example.com\\nADMIN_PASSWORD=MotDePasseFort123! Les autres variables ont des valeurs par défaut raisonnables pour le développement. Consultez .env.example pour la liste complète. Générez une vraie valeur pour JWT_SECRET : openssl rand -hex 32 Sortie attendue (valeur différente à chaque exécution) : 4a7f2c9e1b8d3f6a0e5c2b9d7f4a1e8c3b6d9f2a5e8c1b4d7f0a3e6c9b2d5f8a Copiez cette valeur dans .env pour JWT_SECRET. Checkpoint : vérifiez qu’aucune valeur d’exemple reste dans .env : grep -E \\"votre_cle|example\\\\.com|MotDePasse\\" .env La commande doit retourner vide (aucune ligne). Si elle retourne des lignes, ces valeurs placeholder sont encore présentes — l’application démarrera mais avec une configuration non sécurisée.","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Étape 3 : Configurez l’environnement (.env)","id":"290","title":"Étape 3 : Configurez l’environnement (.env)"},"291":{"body":"Vous avez deux options : Option A — Docker (recommandé pour débuter) : cd database && docker compose up -d && cd .. Sortie attendue : [+] Running 2/2 ✔ Container gitrust_postgres_dev Started 0.8s ✔ Container gitrust_pgadmin Started 1.1s Option B — PostgreSQL existant sur la machine : psql -U postgres << \'SQL\'\\nCREATE USER gitrust WITH PASSWORD \'motdepasse\';\\nCREATE DATABASE gitrust OWNER gitrust;\\nSQL Sortie attendue : CREATE ROLE\\nCREATE DATABASE Adaptez le mot de passe dans DATABASE_URL dans .env si vous utilisez l’option B. Checkpoint : vérifiez que la base est accessible depuis l’application : psql \\"$DATABASE_URL\\" -c \\"SELECT version();\\" Sortie attendue : version\\n------------------------------------------------------------------------------------------------------- PostgreSQL 16.3 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0, 64-bit\\n(1 row) Si vous obtenez psql: error: connection to server failed, vérifiez que PostgreSQL tourne et que DATABASE_URL correspond.","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Étape 4 : Préparez la base de données PostgreSQL","id":"291","title":"Étape 4 : Préparez la base de données PostgreSQL"},"292":{"body":"gitrust utilise Tailwind CSS + DaisyUI. Les assets doivent être compilés localement — aucun CDN, tous les fichiers sont servis depuis static/ : npm install\\nnpx tailwindcss -i static/css/input.css -o static/css/style.css --minify Sortie attendue : added 98 packages in 3s Rebuilding...\\nDone in 1842ms. Checkpoint : vérifiez que le fichier CSS est généré : ls -lh static/css/style.css Sortie attendue : -rw-r--r-- 1 vous vous 45K avr 17 10:15 static/css/style.css Si le fichier fait 0 octet ou n’existe pas, la compilation a échoué — relancez npm install puis la commande npx tailwindcss.","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Étape 5 : Compilez les assets CSS","id":"292","title":"Étape 5 : Compilez les assets CSS"},"293":{"body":"cargo run La première compilation prend 2 à 5 minutes (toutes les dépendances sont compilées). Les compilations suivantes sont incrémentales et beaucoup plus rapides. Au premier lancement, gitrust exécute automatiquement : Les migrations de base de données (création de toutes les tables) La création du compte administrateur (depuis .env) La génération de la clé SSH host ( data/ssh_host_ed25519_key) La création du répertoire de stockage des dépôts ( data/repos/) Sortie attendue (après compilation) : Compiling gitrust-web v0.9.0 (/home/vous/gitrust/crates/gitrust-web) Finished `dev` profile [unoptimized + debuginfo] target(s) in 187.42s Running `target/debug/gitrust`\\n2026-04-17T10:20:00Z INFO gitrust > Starting gitrust v0.9.0\\n2026-04-17T10:20:00Z INFO gitrust > Running database migrations... applied 42\\n2026-04-17T10:20:01Z INFO gitrust > Admin account created: admin\\n2026-04-17T10:20:01Z INFO gitrust > SSH host key: SHA256:xxxxxxxxxxxxxxxxxxxx\\nServer listening on http://0.0.0.0:4000 Checkpoint : ouvrez http://localhost:4000 dans votre navigateur. Vous devez voir la page d’accueil gitrust. Connectez-vous avec les identifiants ADMIN_USERNAME / ADMIN_PASSWORD définis dans .env. Si la page ne charge pas, vérifiez que le message Server listening on http://0.0.0.0:4000 est bien apparu dans les logs.","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Étape 6 : Lancez l’application","id":"293","title":"Étape 6 : Lancez l’application"},"294":{"body":"Dans l’interface web ( http://localhost:4000), cliquez sur « New repository », donnez un nom (ex. mon-projet) et cliquez Créer. Ajoutez votre clé SSH publique dans Settings > SSH Keys en collant le contenu de ~/.ssh/id_ed25519.pub. Puis dans votre terminal : git clone ssh://git@localhost:2222/admin/mon-projet.git\\ncd mon-projet echo \\"# Mon projet\\" > README.md\\ngit add README.md\\ngit commit -m \\"Initial commit\\"\\ngit push origin main Sortie attendue : Cloning into \'mon-projet\'...\\nwarning: You appear to have cloned an empty repository.\\n[main (root-commit) a1b2c3d] Initial commit 1 file changed, 1 insertion(+) create mode 100644 README.md\\nEnumerating objects: 3, done.\\nCounting objects: 100% (3/3), done.\\nWriting objects: 100% (3/3), 226 bytes | 226.00 KiB/s, done.\\nTotal 3 (delta 0), reused 0 (delta 0), pack-reused 0\\nTo ssh://localhost:2222/admin/mon-projet.git * [new branch] main -> main Checkpoint : retournez dans le navigateur sur http://localhost:4000/admin/mon-projet. La page doit afficher le fichier README.md avec le contenu # Mon projet et indiquer 1 commit sur la branche main.","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Étape 7 : Créez un dépôt et poussez votre premier commit","id":"294","title":"Étape 7 : Créez un dépôt et poussez votre premier commit"},"295":{"body":"","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Fonctionnalités supplémentaires disponibles","id":"295","title":"Fonctionnalités supplémentaires disponibles"},"296":{"body":"La CI s’exécute sur un serveur de build via SSH + rsync. Configurez dans .env : # Même machine (défaut pour le développement)\\nCI_REMOTE_HOST=localhost # Ou serveur dédié\\nCI_REMOTE_HOST=192.168.13.110\\nCI_REMOTE_USER=ci-runner Easy Mode — ajoutez .gitrust-ci.yml à la racine de votre dépôt : language: rust build: command: \\"cargo build --release\\" tests: command: \\"cargo test\\" Power Mode — placez un module Dagger dans .dagger/ à la racine. gitrust exécutera dagger call -m .dagger/ ci.","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » CI intégrée (optionnelle)","id":"296","title":"CI intégrée (optionnelle)"},"297":{"body":"Configurez SMTP dans .env pour les notifications e-mail : SMTP_HOST=smtp.example.com\\nSMTP_PORT=587\\nSMTP_USER=user\\nSMTP_PASSWORD=password\\nSMTP_FROM=noreply@gitrust.eu","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Notifications","id":"297","title":"Notifications"},"298":{"body":"gitrust est disponible en 6 langues (fr, en, de, es, pt, it). Définissez la langue par défaut de l’instance : DEFAULT_LOCALE=fr","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Langue de l’interface","id":"298","title":"Langue de l’interface"},"299":{"body":"✓ O1 accompli : gitrust est compilé depuis les sources et tourne localement — cargo run affiche « Server listening on http://0.0.0.0:4000 » ✓ O2 accompli : l’environnement est configuré — .env rempli, PostgreSQL connecté, assets CSS générés, migrations appliquées ✓ O3 accompli : un premier push SSH a réussi — le commit est visible dans l’interface web à http://localhost:4000/admin/mon-projet","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Récapitulatif","id":"299","title":"Récapitulatif"},"3":{"body":"Cette documentation suit le cadre Diátaxis, qui distingue quatre types de contenu selon le besoin du lecteur : Type Quand l’utiliser Exemples Tutoriels Quand vous apprenez Installer gitrust, créer votre premier dépôt Guides pratiques Quand vous résolvez un problème précis Configurer SMTP, gérer les clés SSH Référence Quand vous cherchez une information technique Variables d’environnement, schéma API REST Explication Quand vous voulez comprendre le pourquoi Architecture des crates, modèle RBAC Chaque manuel (utilisateur, administration, développeur) contient ces quatre types de contenu organisés de manière indépendante.","breadcrumbs":"Introduction » Comment cette documentation est-elle structurée ?","id":"3","title":"Comment cette documentation est-elle structurée ?"},"30":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » 04 — Automatiser avec la CI » TODO","id":"30","title":"TODO"},"300":{"body":"Symptôme Cause probable Correction error[E0463]: can\'t find crate for \'std\' à la compilation Toolchain Rust manquante ou mauvaise version Exécutez rustup update stable && rustup default stable. Vérifiez avec rustc --version ≥ 1.80 connection to server on socket \\"/var/run/postgresql/.s.PGSQL.5432\\" failed PostgreSQL non démarré ou DATABASE_URL incorrect Démarrez PostgreSQL ( sudo systemctl start postgresql ou docker compose up -d dans database/). Vérifiez que DATABASE_URL dans .env correspond Permission denied (publickey) lors du git push Clé SSH non enregistrée dans gitrust ou mauvais port Vérifiez dans Settings > SSH Keys que la clé est présente. Testez avec ssh -T git@localhost -p 2222 — vous devez voir « Vous êtes authentifié »","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Et si ça ne marche pas","id":"300","title":"Et si ça ne marche pas"},"301":{"body":"→ 02 — Première contribution : clone, build, test, PR : apprenez à créer une feature branch, écrire des tests, et soumettre votre première pull request en suivant le workflow gitrust (~90 min)","breadcrumbs":"Tutoriels » 01 — Démarrer avec le code gitrust » Prochaine étape","id":"301","title":"Prochaine étape"},"302":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » 02 — Première contribution » 02 — Première contribution","id":"302","title":"02 — Première contribution"},"303":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » 02 — Première contribution » TODO","id":"303","title":"TODO"},"304":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » 03 — Créer un worker async (capstone) » 03 — Créer un worker async (capstone)","id":"304","title":"03 — Créer un worker async (capstone)"},"305":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » 03 — Créer un worker async (capstone) » TODO","id":"305","title":"TODO"},"306":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Guides pratiques","id":"306","title":"Guides pratiques"},"307":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » TODO","id":"307","title":"TODO"},"308":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Workflow de contribution et PR » Workflow de contribution et PR","id":"308","title":"Workflow de contribution et PR"},"309":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Workflow de contribution et PR » TODO","id":"309","title":"TODO"},"31":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Guides pratiques","id":"31","title":"Guides pratiques"},"310":{"body":"Référence des commandes et de la stratégie de tests pour gitrust.","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » Lancer les tests unitaires","id":"310","title":"Lancer les tests unitaires"},"311":{"body":"","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » Infrastructure existante","id":"311","title":"Infrastructure existante"},"312":{"body":"cargo test --workspace # Tous les tests\\ncargo test -p gitrust-core # Un crate spécifique\\ncargo test -p gitrust-git # Tests Git (tempdir) Les tests unitaires sont intégrés dans chaque crate via #[cfg(test)].","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » Tests unitaires Rust","id":"312","title":"Tests unitaires Rust"},"313":{"body":"17 specs couvrant : auth, admin, repos, issues, labels, teams, tokens, settings, navigation. # Pré-requis (première fois)\\nnpm install\\n./scripts/e2e-setup-db.sh # Crée la DB gitrust_test # Lancer les tests\\nnpm run test:e2e # Mode headless\\nnpm run test:e2e:ui # Mode interactif (navigateur visible)\\nnpm run test:e2e:debug # Mode debug\\nnpm run test:e2e:report # Voir le rapport HTML Configuration : playwright.config.ts (port 4001, DB gitrust_test, locale fr-FR).","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » Tests e2e Playwright","id":"313","title":"Tests e2e Playwright"},"314":{"body":"tests/ e2e/ # Specs Playwright (TypeScript) global-setup.ts # Setup : lancer l\'app, créer admin global-teardown.ts # Teardown : arrêter l\'app fixtures.ts # Fixtures Playwright partagées auth.spec.ts # Tests authentification admin.spec.ts # Tests administration issues.spec.ts # Tests issues ... integration/ # Tests d\'intégration Rust (DB réelle) [à créer] fixtures/ # Fichiers de test (repos, configs) [à créer] seeds/ # Seeds Rust pour initialiser la DB de test mod.rs seed.rs","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » Structure des répertoires","id":"314","title":"Structure des répertoires"},"315":{"body":"","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » Tests à ajouter","id":"315","title":"Tests à ajouter"},"316":{"body":"Tests avec une DB PostgreSQL réelle pour vérifier les endpoints API. Emplacement : tests/integration/ ou crates/gitrust-web/tests/ Approche recommandée : utiliser reqwest + un serveur de test : #![allow(unused)] fn main() {\\n// tests/integration/api_test.rs\\nuse reqwest::Client; #[tokio::test]\\n#[ignore] // Nécessite une DB + serveur running\\nasync fn test_api_login() { let client = Client::new(); let res = client.post(\\"http://localhost:4001/api/v1/auth/login\\") .json(&serde_json::json!({ \\"login\\": \\"admin\\", \\"password\\": \\"test_password\\" })) .send() .await .unwrap(); assert_eq!(res.status(), 200);\\n} } Alternative : axum::test pour tester les handlers sans serveur HTTP : #![allow(unused)] fn main() {\\nuse axum::body::Body;\\nuse axum::http::Request;\\nuse tower::ServiceExt; #[tokio::test]\\nasync fn test_health_check() { let app = create_test_app().await; // Build router with test DB let response = app .oneshot(Request::builder().uri(\\"/api/hello\\").body(Body::empty()).unwrap()) .await .unwrap(); assert_eq!(response.status(), 200);\\n} }","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » 1. Tests fonctionnels API REST (intégration Rust)","id":"316","title":"1. Tests fonctionnels API REST (intégration Rust)"},"317":{"body":"Test Description Priorité CI detection Repo avec .gitrust-ci.yml -> Easy, .dagger/ -> Power, rien -> None Haute Pipeline CRUD Créer, lister, mettre à jour, annuler un pipeline Haute Config CI Activer/désactiver CI, modifier triggers, vérifier effet Haute Variables héritage Team var + repo var -> merge correct Moyenne Auto-cancel Nouveau push annule les pipelines en cours Moyenne Logs streaming Append logs + lecture paginée Moyenne Notifications CI Pipeline échoue -> notification créée Moyenne Pour les tests CI : mocker dagger avec un script shell qui simule success/failure : #!/bin/bash\\n# tests/fixtures/mock-dagger.sh\\necho \\"Step 1: Building...\\"\\necho \\"Step 2: Testing...\\"\\nif [ \\"$MOCK_FAIL\\" = \\"true\\" ]; then echo \\"FAILED\\" >&2 exit 1\\nfi\\necho \\"All checks passed\\"\\nexit 0 Configurer CI_DAGGER_BIN=tests/fixtures/mock-dagger.sh dans les tests.","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » 2. Tests fonctionnels CI","id":"317","title":"2. Tests fonctionnels CI"},"318":{"body":"Nouvelles specs pour les fonctionnalités CI et notifications : Spec Couverture ci-pipelines.spec.ts Liste pipelines, détail, status badges ci-config.spec.ts Config CI (enable/disable, triggers, timeout) ci-variables.spec.ts CRUD variables CI, masquage secrets notifications.spec.ts Liste notifications, marquer lu, préférences api-docs.spec.ts Swagger UI accessible, spec chargée i18n.spec.ts Changement de langue, textes traduits docker-smoke.spec.ts docker compose up + smoke test Exemple de spec CI : // tests/e2e/ci-pipelines.spec.ts\\nimport { test, expect } from \'./fixtures\'; test.describe(\'CI Pipelines\', () => { test(\'affiche la page CI vide\', async ({ authenticatedPage }) => { await authenticatedPage.goto(\'/admin/mon-repo/ci\'); await expect(authenticatedPage.locator(\'text=Aucun pipeline\')).toBeVisible(); }); test(\'bouton trigger CI visible pour le maintainer\', async ({ authenticatedPage }) => { await authenticatedPage.goto(\'/admin/mon-repo/ci\'); await expect(authenticatedPage.locator(\'text=Lancer CI\')).toBeVisible(); });\\n});","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » 3. Tests e2e Playwright à ajouter","id":"318","title":"3. Tests e2e Playwright à ajouter"},"319":{"body":"Les tests les plus critiques vérifient que changer un setting modifie le comportement observable : Setting Action Vérification PAT révoqué Appel API 401 immédiatement ci_enabled = false Push Pas de pipeline créé trigger_on_push = false Push Pas de pipeline auto_cancel = true 2 pushes rapides 1er pipeline annulé email_on_pipeline_failure = false Pipeline échoue Pas d’email, notif in-app ok DEFAULT_LOCALE = en Charger page Texte en anglais","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » 4. Tests settings ↔ comportement","id":"319","title":"4. Tests settings ↔ comportement"},"32":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » TODO","id":"32","title":"TODO"},"320":{"body":"# Tests unitaires Rust\\ncargo test --workspace # Tests avec filtrage\\ncargo test -p gitrust-core -- ci_service\\ncargo test -p gitrust-core -- notification # Tests e2e Playwright\\nnpm run test:e2e # Tests e2e spécifiques\\nnpx playwright test tests/e2e/ci-pipelines.spec.ts\\nnpx playwright test --grep \\"notifications\\" # Lint\\ncargo clippy --workspace -- -D warnings # Format check\\ncargo fmt --all -- --check","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » Commandes de test","id":"320","title":"Commandes de test"},"321":{"body":"# Script rapide de vérification pré-push\\ncargo fmt --all -- --check && \\\\\\ncargo clippy --workspace -- -D warnings && \\\\\\ncargo test --workspace && \\\\\\necho \\"All checks passed\\"","breadcrumbs":"Guides pratiques » Lancer les tests unitaires » CI locale (exécuter avant un push)","id":"321","title":"CI locale (exécuter avant un push)"},"322":{"body":"Les tests E2E de gitrust utilisent Playwright pour piloter un navigateur Chromium contre une instance de l’application configurée avec une base de données et un répertoire de dépôts dédiés.","breadcrumbs":"Guides pratiques » Lancer les tests E2E » Lancer les tests end-to-end (E2E)","id":"322","title":"Lancer les tests end-to-end (E2E)"},"323":{"body":"Node.js (déjà présent pour Tailwind/DaisyUI) PostgreSQL accessible en local (Docker via database/docker-compose.yml) psql, createdb, dropdb disponibles dans le PATH Chromium installé via Playwright ( npx playwright install chromium)","breadcrumbs":"Guides pratiques » Lancer les tests E2E » Pré-requis","id":"323","title":"Pré-requis"},"324":{"body":"# Créer (ou remettre à zéro) la base de données de test\\nnpm run test:e2e:setup # Lancer tous les tests E2E\\nnpm run test:e2e # Mode debug interactif (inspecteur Playwright, pas-à-pas)\\nnpm run test:e2e:debug # Mode UI (interface graphique Playwright)\\nnpm run test:e2e:ui # Consulter le rapport HTML après exécution\\nnpm run test:e2e:report","breadcrumbs":"Guides pratiques » Lancer les tests E2E » Commandes","id":"324","title":"Commandes"},"325":{"body":".env.test # Variables d\'environnement de test\\nplaywright.config.ts # Configuration Playwright scripts/ e2e-setup-db.sh # Crée la DB gitrust_test + nettoie depot_test e2e-server.sh # Démarre l\'app avec .env.test tests/e2e/ fixtures.ts # Fixtures partagées (loginAs, credentials) global-setup.ts # Seed : crée les utilisateurs via /register global-teardown.ts # Nettoyage post-tests auth.spec.ts # Tests d\'authentification repository.spec.ts # Tests de gestion des dépôts admin.spec.ts # Tests du panneau d\'administration navigation.spec.ts # Tests de navigation et UI","breadcrumbs":"Guides pratiques » Lancer les tests E2E » Architecture","id":"325","title":"Architecture"},"326":{"body":"Ressource Développement Tests E2E Base de données gitrust gitrust_test Port HTTP 4000 4001 Port SSH 2222 2223 Dépôts Git ./data/repos/ ./depot_test/ Rate limiting Standard Relâché (×20) Validation email Activée Désactivée","breadcrumbs":"Guides pratiques » Lancer les tests E2E » Isolation de l’environnement de test","id":"326","title":"Isolation de l’environnement de test"},"327":{"body":"npm run test:e2e:setup supprime puis recrée la base gitrust_test et vide depot_test/. Playwright démarre automatiquement l’application via scripts/e2e-server.sh, qui charge les variables de .env.test avant d’exécuter cargo run. Le global-setup crée les utilisateurs de test (alice, bob, charlie) en passant par le formulaire /register — approche 100% E2E, aucune insertion directe en base. Les tests s’exécutent séquentiellement (un seul worker) pour éviter les conflits sur la DB partagée. Le global-teardown est exécuté à la fin de la session.","breadcrumbs":"Guides pratiques » Lancer les tests E2E » Fonctionnement","id":"327","title":"Fonctionnement"},"328":{"body":"Le fichier fixtures.ts fournit une fixture loginAs réutilisable dans tous les tests : import { test, expect } from \'./fixtures\'; test(\'mon test\', async ({ page, loginAs }) => { await loginAs(\'alice\'); // alice est connectée, on peut naviguer\\n}); Utilisateurs disponibles : admin, alice, bob, charlie.","breadcrumbs":"Guides pratiques » Lancer les tests E2E » Fixtures","id":"328","title":"Fixtures"},"329":{"body":"","breadcrumbs":"Guides pratiques » Lancer les tests E2E » Liste des tests","id":"329","title":"Liste des tests"},"33":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Gérer ses clés SSH » Gérer ses clés SSH","id":"33","title":"Gérer ses clés SSH"},"330":{"body":"Test Description login avec des identifiants valides Vérifie le login standard et la redirection vers /dashboard login avec un mauvais mot de passe Vérifie l’affichage d’un message d’erreur login avec un utilisateur inexistant Vérifie le rejet d’un username inconnu logout déconnecte l’utilisateur Vérifie la déconnexion et l’impossibilité d’accéder au dashboard accès au dashboard sans login redirige vers login Vérifie la protection des routes authentifiées option remember me est présente Vérifie la présence de la checkbox remember_me formulaire d’inscription est accessible Vérifie la présence de tous les champs du formulaire inscription avec username déjà pris échoue Vérifie l’unicité des usernames inscription avec mots de passe différents échoue Vérifie la validation de confirmation du mot de passe","breadcrumbs":"Guides pratiques » Lancer les tests E2E » auth.spec.ts — Authentification","id":"330","title":"auth.spec.ts — Authentification"},"331":{"body":"Test Description créer un dépôt avec nom et description Crée un dépôt complet et vérifie la redirection créer un dépôt sans description Vérifie que la description est optionnelle créer un dépôt avec un nom déjà pris échoue Vérifie l’unicité des slugs par utilisateur le formulaire de création nécessite un login Vérifie la protection de la route /new le dashboard liste les dépôts de l’utilisateur Vérifie l’affichage des dépôts sur le dashboard un dépôt public est accessible sans login Vérifie l’accès anonyme aux dépôts publics","breadcrumbs":"Guides pratiques » Lancer les tests E2E » repository.spec.ts — Gestion des dépôts","id":"331","title":"repository.spec.ts — Gestion des dépôts"},"332":{"body":"Test Description l’admin peut accéder au panneau d’administration Vérifie l’accès admin à /admin un utilisateur normal ne peut pas accéder à l’admin Vérifie le contrôle d’accès lister les utilisateurs Vérifie l’affichage de la liste des utilisateurs créer un nouvel utilisateur via l’admin Teste le formulaire de création d’utilisateur admin créer un utilisateur avec un username déjà pris échoue Vérifie la gestion des doublons côté admin les liens du menu admin sont présents Vérifie la navigation du panneau admin","breadcrumbs":"Guides pratiques » Lancer les tests E2E » admin.spec.ts — Administration","id":"332","title":"admin.spec.ts — Administration"},"333":{"body":"Test Description la page de login est accessible Vérifie le rendu de la page de login la navbar est présente après login Vérifie la présence de la barre de navigation le sidebar est présent après login Vérifie la présence du menu latéral le lien vers le dashboard fonctionne Vérifie la navigation vers le dashboard le lien vers la création de dépôt fonctionne Vérifie le lien /new la page utilise le thème DaisyUI Vérifie la présence de l’attribut data-theme","breadcrumbs":"Guides pratiques » Lancer les tests E2E » navigation.spec.ts — Navigation et UI","id":"333","title":"navigation.spec.ts — Navigation et UI"},"334":{"body":"Créer un fichier tests/e2e/mon-module.spec.ts Importer les fixtures : import { test, expect } from \'./fixtures\'; Utiliser loginAs pour les tests nécessitant une authentification Lancer avec npm run test:e2e ou cibler le fichier : npx playwright test mon-module","breadcrumbs":"Guides pratiques » Lancer les tests E2E » Ajouter un nouveau test","id":"334","title":"Ajouter un nouveau test"},"335":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Ajouter une route web » Ajouter une route web","id":"335","title":"Ajouter une route web"},"336":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Ajouter une route web » TODO","id":"336","title":"TODO"},"337":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Ajouter un service métier » Ajouter un service métier","id":"337","title":"Ajouter un service métier"},"338":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Ajouter un service métier » TODO","id":"338","title":"TODO"},"339":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Ajouter une migration de base de données » Ajouter une migration de base de données","id":"339","title":"Ajouter une migration de base de données"},"34":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Gérer ses clés SSH » TODO","id":"34","title":"TODO"},"340":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Ajouter une migration de base de données » TODO","id":"340","title":"TODO"},"341":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Implémenter des webhooks » Implémenter des webhooks","id":"341","title":"Implémenter des webhooks"},"342":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Implémenter des webhooks » TODO","id":"342","title":"TODO"},"343":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Implémenter un endpoint API » Implémenter un endpoint API","id":"343","title":"Implémenter un endpoint API"},"344":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Implémenter un endpoint API » TODO","id":"344","title":"TODO"},"345":{"body":"Référence du flux d’import de dépôts externes dans gitrust : rôle de la base de données, schéma de séquence complet et pistes d’optimisation.","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » Importer un dépôt externe","id":"345","title":"Importer un dépôt externe"},"346":{"body":"Pendant un import, la DB sert quatre fonctions distinctes : Rôle Table Fréquence File d’attente persistante import_jobs 1 INSERT à la création Suivi d’état pour l’UI import_jobs 1 UPDATE toutes les ~1.5 s Enregistrement final du dépôt repositories + resources 2 INSERT à la fin Journal d’audit audit_log 1 INSERT à la fin Le clone lui-même ne passe jamais par la DB : seuls les métadonnées et compteurs de progression y transitent. Les objets Git sont écrits directement sur disque dans {GIT_REPOS_BASE_PATH}/{owner}/{slug}.git/.","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 1. Rôle de la base de données","id":"346","title":"1. Rôle de la base de données"},"347":{"body":"Reprise après redémarrage : le serveur peut crasher pendant un clone de plusieurs minutes. La table permet de marquer ces jobs comme failed au redémarrage. SSE : l’UI lit la progression via un endpoint SSE qui interroge la DB toutes les 2 s. Sans DB, il faudrait un canal in-memory plus un mécanisme de routage vers le bon client. Multi-navigateurs : si l’utilisateur ferme l’onglet puis le rouvre, il retrouve l’état exact du job. Audit / historique : conservation des imports passés avec leurs statistiques.","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » Pourquoi persister l’état ?","id":"347","title":"Pourquoi persister l’état ?"},"348":{"body":"sequenceDiagram autonumber participant UI as Navigateur participant H as Handler HTTP participant Svc as ImportService participant Chan as mpsc Channel participant W as ImportWorker participant G as git2 (libgit2) participant DB as PostgreSQL participant FS as Disque UI->>H: POST /import<br/>(url, slug, pat) H->>Svc: create_job Svc->>DB: INSERT import_jobs (pending) H->>Chan: try_send(ImportTask+PAT) H-->>UI: 302 /imports/{id} UI->>H: GET /imports/{id}/stream (SSE) Note over UI,H: EventSource ouvert Chan->>W: ImportTask W->>Svc: mark_running Svc->>DB: SELECT import_jobs<br/>UPDATE status=running W->>G: RepoBuilder.bare(true).clone() G->>FS: init_bare + fetch loop callbacks transfer_progress (flood) G-->>W: stats (objets/bytes) alt throttle 1500 ms écoulé W->>Svc: update_progress (tokio::spawn) Svc->>DB: SELECT + UPDATE import_jobs else dans le throttle W--xW: ignore end end loop toutes les 2 s H->>DB: SELECT import_jobs WHERE id=? DB-->>H: état courant H-->>UI: SSE event (JSON) UI->>UI: bar.value = percent end G-->>FS: objets écrits G-->>W: Ok W->>Svc: check cancel (SELECT import_jobs) W->>Svc: update_progress (Finalizing) Svc->>DB: SELECT + UPDATE W->>RepositoryService: create RepositoryService->>DB: INSERT resources<br/>INSERT repositories W->>DB: UPDATE repositories<br/>(import_source_url, is_empty=false) W->>Svc: mark_success Svc->>DB: SELECT + UPDATE import_jobs<br/>(status=success, duration) W->>AuditService: log REPO_IMPORTED AuditService->>DB: INSERT audit_log H->>DB: SELECT (prochain tick SSE) H-->>UI: terminal=true UI->>UI: window.location.reload()","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 2. Schéma du flux actuel","id":"348","title":"2. Schéma du flux actuel"},"349":{"body":"Pour un clone de 90 secondes avec throttle 1500 ms : Étape Opérations DB Cumul create_job 1 INSERT 1 mark_running 1 SELECT + 1 UPDATE 3 update_progress pendant clone ~60 x (1 SELECT + 1 UPDATE) 123 check cancel 1 SELECT 124 update_progress finalizing 1 SELECT + 1 UPDATE 126 RepositoryService::create 2 INSERT (repo + resource) 128 update repositories 1 UPDATE 129 mark_success 1 SELECT + 1 UPDATE 131 audit log 1 INSERT 132 SSE stream (45 ticks à 2 s) 45 SELECT 177 ~177 requêtes pour un import, dont 120+ sont des progress updates.","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 3. Coût DB par import","id":"349","title":"3. Coût DB par import"},"35":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Configurer la double authentification (2FA) » Configurer la double authentification (2FA)","id":"35","title":"Configurer la double authentification (2FA)"},"350":{"body":"","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 4. Pistes d’optimisation (sans changer libgit2)","id":"350","title":"4. Pistes d’optimisation (sans changer libgit2)"},"351":{"body":"update_progress fait actuellement load_model (SELECT) puis active.update(db) (UPDATE + RETURNING). Le SELECT est redondant : on connaît l’ID, on veut juste patcher 4 colonnes. Gain : divise par 2 les requêtes de progression (~60 requêtes en moins pour un clone de 90 s). Refonte suggérée avec UpdateMany (pattern déjà utilisé dans ci_service.rs::cancel_running_pipelines) : #![allow(unused)] fn main() {\\nimport_job::Entity::update_many() .col_expr(Column::ReceivedObjects, Expr::value(received as i32)) .col_expr(Column::TotalObjects, Expr::value(total as i32)) .col_expr(Column::ReceivedBytes, Expr::value(bytes as i64)) .col_expr(Column::Phase, Expr::value(phase.as_str())) .col_expr(Column::UpdatedAt, Expr::value(Utc::now())) .filter(Column::Id.eq(job_id)) .exec(db) .await?; } Même principe pour mark_running, mark_success, mark_failed, mark_cancelled → toutes divisent leurs aller-retours DB par 2.","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 4.1 Éliminer le SELECT avant UPDATE dans update_progress","id":"351","title":"4.1 Éliminer le SELECT avant UPDATE dans update_progress"},"352":{"body":"Plan alternatif : le callback écrit simplement dans un tokio::sync::watch<TransferStats> (en mémoire, zéro DB). Une tâche dédiée consomme ce channel et UPDATE la DB à 1 Hz seulement. flowchart LR G[git2 callback] -->|watch::send<br/>très haute fréquence| W[watch channel] W --> T[Tâche update<br/>ticker 1 Hz] T -->|1 UPDATE / s| DB Gains : 1 seul émetteur DB au lieu de N tokio::spawn concurrents → zéro contention sur le pool Fréquence déterministe (1 Hz) indépendante de la vitesse réseau Code plus clair (la tâche est async, on peut await sans détour)","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 4.2 Downsampler la progression dans le worker (dédié)","id":"352","title":"4.2 Downsampler la progression dans le worker (dédié)"},"353":{"body":"ActiveModel::update(db) renvoie le modèle complet via ... RETURNING *. Pour les progress updates, on n’utilise pas le retour. UpdateMany::exec n’émet pas de RETURNING → moins de bytes sur le wire, moins de désérialisation.","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 4.3 Supprimer le RETURNING implicite de SeaORM","id":"353","title":"4.3 Supprimer le RETURNING implicite de SeaORM"},"354":{"body":"Aujourd’hui le worker partage le pool principal avec les handlers HTTP. Un pool de 4-8 connexions dédié au worker éviterait qu’un import sature le pool et fasse timeouter les requêtes utilisateur.","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 4.4 Pool DB dédié pour le worker","id":"354","title":"4.4 Pool DB dédié pour le worker"},"355":{"body":"Le SSE SELECT toutes les 2 s même quand rien ne change. Alternative : PostgreSQL LISTEN/NOTIFY sur une chaîne import_job_{uuid}. Chaque UPDATE émet un NOTIFY, la connexion SSE fait LISTEN → push direct, zéro polling. Coût : nécessite une connexion DB dédiée par SSE (LISTEN est stateful). Compromis à évaluer.","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 4.5 Debouncer le SSE côté serveur","id":"355","title":"4.5 Debouncer le SSE côté serveur"},"356":{"body":"Indépendant des optimisations DB mais de loin le plus gros gain. libgit2 est structurellement 2-5x plus lent que git CLI sur gros clones HTTPS (pas de multiplexage, résolution de deltas mono-threadée, etc.). flowchart TB subgraph Actuel[Flux actuel — libgit2] A1[RepoBuilder::clone] --> A2[libgit2: fetch + resolve] A2 -->|lent 2-5x| A3[bare repo] end subgraph Cible[Flux optimisé — git CLI] B1[Command::new git] --> B2[git clone --bare --progress] B2 -->|stderr| B3[Parser regex<br/>Receiving objects: X%] B3 --> B4[update watch channel] B2 -->|vitesse native| B5[bare repo] end Avantages : Vitesse native (parité avec git CLI) Progression native via stderr Receiving objects: 42% (368/876), 1.10 MiB | 2.05 MiB/s HEAD correctement positionné (plus besoin du workaround RepoBuilder) Moins de dépendance sur libgit2 pour le cas du clone initial Contrepartie : binaire git requis sur le serveur (déjà le cas — utilisé par SbomService::git_archive).","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 5. Optimisation majeure : shell-out vers git clone --bare","id":"356","title":"5. Optimisation majeure : shell-out vers git clone --bare"},"357":{"body":"Si on voulait optimiser maintenant, ordre proposé : Shell-out git clone --bare — gain réel pour l’utilisateur (clone 3-5x plus rapide). update_many pour update_progress — divise la pression DB par 2, changement mécanique de ~20 lignes. watch channel + tâche 1 Hz — architecture plus propre, élimine les problèmes de pool. Pool DB dédié worker — filet de sécurité opérationnel. LISTEN/NOTIFY pour SSE — seulement si beaucoup de clients simultanés. Les gains 2-4 sont utiles même avec libgit2 ; le gain 1 est le plus visible pour l’utilisateur final.","breadcrumbs":"Guides pratiques » Importer un dépôt externe (code) » 6. Priorités recommandées","id":"357","title":"6. Priorités recommandées"},"358":{"body":"Ce document décrit les interactions entre gitrust et le framework rustwarden-core, et explique comment étendre le framework côté gitrust sans modifier ses sources.","breadcrumbs":"Guides pratiques » Contribuer à rustwarden upstream » Contribuer à rustwarden","id":"358","title":"Contribuer à rustwarden"},"359":{"body":"Service Usage dans gitrust UserService CRUD users, roles, delete_user, admin_reset_password, change_password_direct, unassign_role_from_user RoleService Liste/création/suppression roles, get_role_by_name PasswordService hash_password (async), verify_password (async), generate_secure_password ResourceService register/ unregister repos, set_public, effective_permission, find_by_type_and_id AuthService authenticate_user (login) JwtService generate_token (login) EmailValidationService Vérification email PasswordResetService Flux “mot de passe oublié” AppSettingsService get_bool pour registration_enabled","breadcrumbs":"Guides pratiques » Contribuer à rustwarden upstream » Services framework utilisés","id":"359","title":"Services framework utilisés"},"36":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Configurer la double authentification (2FA) » TODO","id":"36","title":"TODO"},"360":{"body":"Le hook on_user_deleted dans gitrust-hooks supprime le répertoire utilisateur sur le filesystem ( repos_base_path/username/) avant la cascade DB. Appelé automatiquement par UserService::delete_user.","breadcrumbs":"Guides pratiques » Contribuer à rustwarden upstream » Hook on_user_deleted implémenté","id":"360","title":"Hook on_user_deleted implémenté"},"361":{"body":"Ne jamais modifier crates/rustwarden-core/. Ce crate est le framework partagé. Toute extension passe par : Des wrappers côté gitrust-core (services qui délèguent au framework) Des trait impls ( RustwardenHooks dans gitrust-hooks) Des extensions via les mécanismes d’injection Axum ( Extension, State)","breadcrumbs":"Guides pratiques » Contribuer à rustwarden upstream » Règle fondamentale","id":"361","title":"Règle fondamentale"},"362":{"body":"Tous les anciens contournements (entités directes, hash manuels) ont été remplacés par les services du framework suite à la mise à jour du 2026-03-26.","breadcrumbs":"Guides pratiques » Contribuer à rustwarden upstream » Aucun contournement en cours","id":"362","title":"Aucun contournement en cours"},"363":{"body":"Si un service nécessaire n’existe pas dans rustwarden-core : Implémenter le service côté gitrust-core en réutilisant les primitives du framework (ex: PasswordService::hash_password pour le hashage) Si la fonctionnalité est générique et bénéficierait au framework lui-même, ouvrir une issue ou une PR upstream sur le dépôt rustwarden-core Ne pas dupliquer la logique d’auth, de session, ou de JWT — ces domaines appartiennent exclusivement au framework","breadcrumbs":"Guides pratiques » Contribuer à rustwarden upstream » Ajouter une fonctionnalité nécessitant un service framework absent","id":"363","title":"Ajouter une fonctionnalité nécessitant un service framework absent"},"364":{"body":"Les hooks ( gitrust-hooks/src/lib.rs) implémentent RustwardenHooks et sont injectés dans le routeur Axum au démarrage : #![allow(unused)] fn main() {\\n// Dans main.rs\\nlet hooks = Arc::new(GitrustHooks::new(config.clone()));\\n// Passé via .merge_routes(app_routes(hooks))\\n// Puis disponible via axum::Extension dans les handlers } Pour réagir à un nouvel événement du framework, ajouter la méthode correspondante dans l’impl RustwardenHooks de gitrust-hooks, sans toucher au code du framework qui émet l’événement.","breadcrumbs":"Guides pratiques » Contribuer à rustwarden upstream » Pattern d’extension via hooks","id":"364","title":"Pattern d’extension via hooks"},"365":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Passer la QA avant un merge » Passer la QA avant un merge","id":"365","title":"Passer la QA avant un merge"},"366":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Passer la QA avant un merge » TODO","id":"366","title":"TODO"},"367":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Référence","id":"367","title":"Référence"},"368":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » TODO","id":"368","title":"TODO"},"369":{"body":"Référence structurelle de gitrust : crates, modules, routes, dépendances et composants CI.","breadcrumbs":"Référence » Architecture des crates » Architecture par crates","id":"369","title":"Architecture par crates"},"37":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Créer un Personal Access Token » Créer un Personal Access Token","id":"37","title":"Créer un Personal Access Token"},"370":{"body":"graph LR RW[\\"rustwarden-core\\"] Git[\\"gitrust-git\\"] Core[\\"gitrust-core\\"] Hooks[\\"gitrust-hooks\\"] SSH[\\"gitrust-ssh\\"] Web[\\"gitrust-web\\"] Bin[\\"gitrust (binaire)\\"] Core --> RW Git -.->|\\"indépendant<br/>(git2, tokio)\\"| RW Hooks --> Core Hooks --> RW SSH --> Core SSH --> Git Web --> Core Web --> Git Web -.->|\\"CI pages\\"| Git Bin --> Core Bin --> Git Bin --> SSH Bin --> Web Bin --> Hooks Bin --> RW subgraph \\"Externes CI (Phase 5b)\\" Dagger[\\"Dagger CLI\\"] CiEng[\\"ci-engine (Python)\\"] Syft[\\"Syft\\"] DTrack[\\"Dependency-Track\\"] end Core -.->|\\"CiWorker<br/>sous-processus\\"| Dagger Dagger -.-> CiEng Core -.-> Syft Syft -.-> DTrack","breadcrumbs":"Référence » Architecture des crates » Dépendances entre crates","id":"370","title":"Dépendances entre crates"},"371":{"body":"","breadcrumbs":"Référence » Architecture des crates » Crates — Responsabilités","id":"371","title":"Crates — Responsabilités"},"372":{"body":"Cœur métier. Ne dépend que de rustwarden-core et des crates Rust standards. Module Rôle config GitrustConfig::from_env() — ports SSH, chemin repos, limites error GitrustError — erreurs domaine Git + IntoResponse HTTP roles enum Role { Reader, Developer, Maintainer, Owner } avec Ord types Newtypes validés : RepoSlug, TeamSlug, Fingerprint, TokenHash models/ Entités SeaORM : repository, ssh_key, team, team_member, team_repository_access, ci_pipeline, ci_job, ci_log, ci_config, ci_variable migrations/ Migrations SeaORM (tables gitrust) combinées avec les migrations core services/ SshKeyService, RepositoryService, TeamService, AccessService, CiService, CiVariableService, CiDetectionService, CiWorker, NotificationService dto/ Structures d’entrée/sortie pour les services","breadcrumbs":"Référence » Architecture des crates » gitrust-core","id":"372","title":"gitrust-core"},"373":{"body":"Opérations Git sur le système de fichiers. Utilise git2 (libgit2). Pas de dépendance vers la base de données. Module Rôle errors enum GitError (Git, RepoNotFound, RefNotFound, PathTraversal, …) bare_repo Init, open, delete, exists + validation chemin canonique sous base branch / tag Listing branches (BranchInfo) et tags (TagInfo, annotated/lightweight) reference resolve_ref (branch -> tag -> SHA -> revparse) tree_browser list_tree (dirs first, sorted), TreeEntry, EntryKind blob_reader read_blob -> Text/Binary, détection binaire (null bytes) commit_log list_commits (paginé), find_commit, CommitInfo readme find_readme (README.md > README > readme.md > …) pack_protocol advertise_refs, serve_pack (async, git-upload-pack/git-receive-pack)","breadcrumbs":"Référence » Architecture des crates » gitrust-git","id":"373","title":"gitrust-git"},"374":{"body":"Serveur SSH basé sur russh. Authentification par clé publique. Module (prévu) Rôle server Démarrage, génération clé hôte Ed25519 auth Authentification par fingerprint -> SshKeyService session Handler SSH (exec, shell) command_handler Parsing git-upload-pack/ git-receive-pack","breadcrumbs":"Référence » Architecture des crates » gitrust-ssh","id":"374","title":"gitrust-ssh"},"375":{"body":"Interface web SSR (Server-Side Rendering) avec Askama (templates compilés) + HTMX (interactions dynamiques). Fonctionne en mode headless() : les pages UI du framework ( rustwarden-ui) ne sont pas montées, gitrust-web réimplémente toutes les pages avec un design spécifique (sidebar contextuelle, navigation Git, DaisyUI). Architecture des routes : gitrust (port 4000)\\n├── /api/v1/auth/* ← Routes API du framework (JSON)\\n│ ├── POST /login AuthService::authenticate_user\\n│ ├── POST /register UserService::create_user\\n│ ├── POST /refresh RefreshTokenService (rotation JWT)\\n│ ├── POST /logout JwtBlacklistService\\n│ ├── GET /me Claims extraction\\n│ ├── POST /forgot-password PasswordResetService::request_reset\\n│ ├── POST /reset-password PasswordResetService::reset_password\\n│ ├── GET /verify-email/{t} EmailValidationService::verify_email\\n│ └── POST /resend-verif EmailValidationService::resend\\n│\\n├── /api/v1/* ← API REST Gitrust (JSON, auth JWT/PAT)\\n│ ├── /user, /user/repos Profil utilisateur\\n│ ├── /repos/{o}/{r} Détail dépôt, branches, tags, commits\\n│ ├── /repos/{o}/{r}/issues CRUD issues + commentaires\\n│ ├── /repos/{o}/{r}/pulls CRUD PRs + merge\\n│ └── /repos/{o}/{r}/ci/* Pipelines CI (list, trigger, cancel, logs)\\n│\\n├── /* ← Pages SSR gitrust (HTML)\\n│ ├── /login, /register Pages formulaires (design gitrust)\\n│ ├── /dashboard, /teams Pages utilisateur\\n│ ├── /settings/* Profile, SSH keys, sessions, notifications\\n│ ├── /notifications Liste notifications + SSE stream\\n│ ├── /admin/* Administration (+ admin CI)\\n│ ├── /{owner}/{repo}/* Navigation dépôt Git\\n│ └── /{owner}/{repo}/ci/* Pages CI (pipelines, logs, config, variables)\\n│\\n└── /static/* ← Assets locaux (CSS, JS, HTMX) Les routes API du framework sont montées via framework_api_routes() dans routes.rs. Elles sont utilisées par : Les liens dans les emails (vérification, reset password) Le refresh token (rotation JWT, session longue durée) L’accès programmatique (GET /me, POST /logout) Les pages SSR et les routes API coexistent : les formulaires HTML soumettent aux handlers gitrust (SSR), tandis que les services framework génèrent des liens vers les routes API. Module Rôle routes.rs Routeur principal : framework API + API REST Gitrust + pages SSR + fichiers statiques handlers/ Handlers Axum SSR (un fichier par domaine) + handlers API JSON templates.rs Structs Askama + SidebarContext + RepoNav helpers.rs require_auth, require_admin, sidebar_*, resolve_repo_access templates/ Templates HTML (Askama, extends base.html) static_files.rs ServeDir pour /static","breadcrumbs":"Référence » Architecture des crates » gitrust-web","id":"375","title":"gitrust-web"},"376":{"body":"Implémentation de RustwardenHooks pour réagir aux événements du framework. Les hooks sont injectés dans le routeur Axum via Arc<dyn RustwardenHooks> + axum::Extension (dans main.rs). Hook Action on_user_registered Crée le répertoire utilisateur sur le FS (anti path-traversal) on_user_deleted Supprime le répertoire utilisateur + bare repos sur le FS on_resource_shared Audit log si resource_type = “repository” on_resource_unshared Audit log si resource_type = “repository”","breadcrumbs":"Référence » Architecture des crates » gitrust-hooks","id":"376","title":"gitrust-hooks"},"377":{"body":"Système de notification à deux canaux : in-app (SSE temps réel + page) et email (worker SMTP du framework). Événement (pipeline échoue, PR commentée, etc.) │ ▼\\nNotificationService::notify(user_id, event_type, title, body, link) │ ├── INSERT INTO notifications (in-app) │ → broadcast::Sender → SSE /notifications/stream │ → Badge header mis à jour en temps réel (HTMX) │ └── if user.email_on_{event} = true: EmailQueueService::enqueue() (framework SMTP worker) Les préférences de notification sont par utilisateur (email on/off par type d’événement).","breadcrumbs":"Référence » Architecture des crates » Notifications","id":"377","title":"Notifications"},"378":{"body":"Système CI hybride à deux niveaux, activé via CI_ENABLED=true.","breadcrumbs":"Référence » Architecture des crates » CI/CD — Modes et composants","id":"378","title":"CI/CD — Modes et composants"},"379":{"body":"Mode Détection Exécution Easy .gitrust-ci.yml à la racine du repo Module Dagger Python générique ( ci-engine) interprète le YAML Power .dagger/ à la racine du repo dagger call -m .dagger/ exécute le module utilisateur directement Aucun Ni l’un ni l’autre Pas de CI pour ce repo","breadcrumbs":"Référence » Architecture des crates » Modes","id":"379","title":"Modes"},"38":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Créer un Personal Access Token » TODO","id":"38","title":"TODO"},"380":{"body":"git push (HTTP ou SSH) │ ▼\\nreceive-pack handler │ ├── CiDetectionService::detect(bare_repo, commit_sha) │ → Easy / Power / None │ ├── CiService::create_pipeline(repo_id, sha, mode) │ └── mpsc::Sender.send(job) ──► CiWorker (tokio::spawn) │ ├── 1. Validation statique │ Easy: schéma YAML, whitelist images/packages │ Power: analyse code .dagger/ (si activé) │ ├── 2. SBOM Gate (si CI_SBOM_ENABLED) │ syft scan → sbom.cdx.json │ → Dependency-Track (si CI_DTRACK_ENABLED) │ → PASS/FAIL selon politique │ ├── 3. Résolution variables (héritage team → repo) │ CiVariableService::resolve_for_pipeline() │ ├── 4. Exécution Dagger (isolé, timeout, cgroups) │ Easy: dagger call -m ci-engine test --profile=... │ Power: dagger call -m .dagger/ <function> │ └── 5. Rapport + audit Status, logs (broadcast SSE), ci_audit_log","breadcrumbs":"Référence » Architecture des crates » Architecture CI","id":"380","title":"Architecture CI"},"381":{"body":"Composant Rôle Variable de contrôle Dagger Engine Exécution des pipelines dans des containers isolés CI_ENABLED ci-engine (Python) Moteur générique pour Easy Mode CI_DAGGER_MODULE_PATH Syft Génération SBOM CycloneDX CI_SBOM_ENABLED Dependency-Track Analyse de vulnérabilités sur les SBOM CI_DTRACK_ENABLED","breadcrumbs":"Référence » Architecture des crates » Composants externes (tous optionnels sauf Dagger)","id":"381","title":"Composants externes (tous optionnels sauf Dagger)"},"382":{"body":"Héritage team → repo : les variables définies au niveau team sont partagées entre tous les repos de l’équipe. Le repo peut surcharger une clé team avec sa propre valeur. Les secrets sont chiffrés en base (AES-256-GCM) et masqués dans les logs ( ***).","breadcrumbs":"Référence » Architecture des crates » Variables et secrets CI","id":"382","title":"Variables et secrets CI"},"383":{"body":"Directive Scope #![forbid(unsafe_code)] gitrust-core, gitrust-web, gitrust-hooks #![deny(unsafe_code)] gitrust-git, gitrust-ssh (FFI libgit2/russh) deny(clippy::unwrap_used, expect_used, panic) Tous les crates deny(clippy::indexing_slicing) Tous les crates deny(clippy::mem_forget) Tous les crates Zeroize on drop TokenHash (ANSSI R23) RSA minimum 4096 bits SshKeyService Path traversal validation RepositoryService, gitrust-git Slug validation + noms réservés RepoSlug, TeamSlug","breadcrumbs":"Référence » Architecture des crates » Sécurité (ANSSI PA-074)","id":"383","title":"Sécurité (ANSSI PA-074)"},"384":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Services et API interne » Services et API interne","id":"384","title":"Services et API interne"},"385":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Services et API interne » TODO","id":"385","title":"TODO"},"386":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Schéma de la base de données » Schéma de la base de données","id":"386","title":"Schéma de la base de données"},"387":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Schéma de la base de données » TODO","id":"387","title":"TODO"},"388":{"body":"Ce document définit les règles de qualité et de sécurité applicables à tout le projet gitrust. Chaque lot doit satisfaire ces règles avant merge.","breadcrumbs":"Référence » Règles QA et conformité ANSSI » Règles QA & conformité ANSSI","id":"388","title":"Règles QA & conformité ANSSI"},"389":{"body":"Toute modification doit passer ces 4 gates sans erreur : Gate Commande Critère Formatage cargo fmt --all -- --check Zéro diff Linting cargo clippy --workspace -- -D warnings Zéro warning Tests unitaires cargo test --workspace 100% pass Build CSS npx tailwindcss -i static/css/input.css -o static/css/style.css --minify Si templates modifiés","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 1. Gates de compilation obligatoires","id":"389","title":"1. Gates de compilation obligatoires"},"39":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Gérer les équipes et les permissions » Gérer les équipes et les permissions","id":"39","title":"Gérer les équipes et les permissions"},"390":{"body":"Gate Outil Rôle Audit dépendances cargo audit Détection CVE dans les deps Licences & bans cargo deny check Licences compatibles, pas de crate bannie Secrets dans le code Recherche de patterns sensibles Pas de token/mot de passe en dur","breadcrumbs":"Référence » Règles QA et conformité ANSSI » Gates supplémentaires (à mettre en place)","id":"390","title":"Gates supplémentaires (à mettre en place)"},"391":{"body":"","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 2. Règles de sécurité (ANSSI PA-074)","id":"391","title":"2. Règles de sécurité (ANSSI PA-074)"},"392":{"body":"#![allow(unused)]\\n#![forbid(unsafe_code)] // core, web, hooks\\n#![deny(unsafe_code)] // git, ssh (FFI nécessaire)\\n#![deny(clippy::unwrap_used)]\\n#![deny(clippy::expect_used)]\\n#![deny(clippy::panic)]\\n#![deny(clippy::indexing_slicing)]\\n#![deny(clippy::mem_forget)] fn main() { }","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 2.1 Lints Rust obligatoires (déjà en place)","id":"392","title":"2.1 Lints Rust obligatoires (déjà en place)"},"393":{"body":"Avant toute implémentation touchant l’authentification, les secrets ou les permissions, vérifier : Secrets jamais en clair en base — hash SHA-256 ou bcrypt Secrets jamais loggés — vérifier tracing::info/debug/warn, Display et Debug impls ne révèlent pas le secret Comparaison constant-time — subtle::ConstantTimeEq pour toute validation de secret (pas de == sur des hash) Rate-limiting — endpoint d’authentification protégé CSRF — token valide sur toute action mutante (POST/PUT/DELETE) Ownership vérifiée (anti-IDOR) — le user ne peut agir que sur ses propres ressources (vérifier user_id côté serveur) Expiration obligatoire — tout token/session a une durée de vie max Audit log — création, révocation, utilisation suspecte tracées Zeroize — types sensibles implémentent Zeroize/ ZeroizeOnDrop Path traversal — validation des chemins disque (pas de .., /, \\\\)","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 2.2 Checklist sécurité par feature","id":"393","title":"2.2 Checklist sécurité par feature"},"394":{"body":"Le code utilise des commentaires // SEC-XX pour tracer les décisions de sécurité. Tout nouveau contrôle doit être marqué avec le prochain numéro disponible dans sa catégorie : Préfixe Catégorie Exemples SEC-C Cryptographie Timing attack, CSRF, PKCE SEC-H HTTP/Headers X-Forwarded-For, cookies, nonce SEC-L Logique métier Hashing, validation, defaults SEC-M Mémoire/sessions Rate-limit DoS, refresh tokens","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 2.3 Marqueurs SEC-","id":"394","title":"2.3 Marqueurs SEC-"},"395":{"body":"","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 3. Tests requis par catégorie","id":"395","title":"3. Tests requis par catégorie"},"396":{"body":"Catégorie Quand appliquer Exemples Unitaire Logique pure (validation, parsing, conversion) RepoSlug::new(\\"../evil\\") → erreur Intégration Service avec DB (CRUD, contraintes, transactions) PatService::validate token expiré → None Handler Endpoint HTTP (status, redirect, CSRF, auth) POST sans CSRF → 403 E2E Playwright Flow utilisateur complet Créer token → copier → cloner un dépôt Sécurité négatif Tout bypass imaginable Token user A sur ressource user B → 401","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 3.1 Matrice de couverture","id":"396","title":"3.1 Matrice de couverture"},"397":{"body":"Tests d’intégration sur vraie DB — pas de mocks pour la couche persistence (les mocks masquent les bugs de migration) Tests négatifs obligatoires — pour chaque chemin heureux, tester au moins : input invalide, non-authentifié, non-autorisé, expiré, révoqué Tests E2E en français — cohérent avec l’UI (locale fr-FR) Pas de sleep() dans les tests — utiliser des retry/poll avec timeout Données de test isolées — chaque test crée ses propres données (pas de dépendance sur l’ordre d’exécution)","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 3.2 Règles de tests","id":"397","title":"3.2 Règles de tests"},"398":{"body":"","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 4. Règles de code","id":"398","title":"4. Règles de code"},"399":{"body":"Ne jamais modifier crates/rustwarden-core/ Réutiliser les services framework avant d’implémenter (auth, users, sessions, ResourceService, i18n, middleware) Si un service manque, l’étendre côté gitrust (wrappers, trait impls)","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 4.1 Framework boundary","id":"399","title":"4.1 Framework boundary"},"4":{"body":"Manuel utilisateur — collaborer sur gitrust en tant que développeur Manuel d’administration — déployer et exploiter une instance Manuel développeur — contribuer au code ou consommer l’API Bibliothèque de templates — configs et scripts copiables","breadcrumbs":"Introduction » Naviguer dans la documentation","id":"4","title":"Naviguer dans la documentation"},"40":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Gérer les équipes et les permissions » TODO","id":"40","title":"TODO"},"400":{"body":"Zéro CDN — tous les CSS/JS servis depuis static/ La CSP du framework bloque les domaines externes","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 4.2 Assets","id":"400","title":"4.2 Assets"},"401":{"body":"GitrustError avec IntoResponse pour le mapping HTTP Pas de .unwrap() / .expect() / panic!() / [index] Errors utilisateur : messages génériques (pas de leak d’info interne)","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 4.3 Gestion d’erreurs","id":"401","title":"4.3 Gestion d’erreurs"},"402":{"body":"Valider les inputs utilisateur (formulaires, query params, headers) Ne pas re-valider entre services internes Newtypes avec validation à la construction ( RepoSlug, TeamSlug, Fingerprint, TokenHash)","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 4.4 Validation aux frontières","id":"402","title":"4.4 Validation aux frontières"},"403":{"body":"Avant chaque merge de lot : cargo fmt --all -- --check passe cargo clippy --workspace -- -D warnings passe cargo test --workspace — tous les tests passent Tests E2E Playwright passent ( npm run test:e2e) CSS rebuild si templates modifiés Aucun secret en clair dans le code ou les logs Checklist sécurité §2.2 validée (si applicable) Pas de modification dans crates/rustwarden-core/","breadcrumbs":"Référence » Règles QA et conformité ANSSI » 5. Checklist pré-merge","id":"403","title":"5. Checklist pré-merge"},"404":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » API REST v1 » API REST v1","id":"404","title":"API REST v1"},"405":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » API REST v1 » TODO","id":"405","title":"TODO"},"406":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Hooks Git post-receive » Hooks Git post-receive","id":"406","title":"Hooks Git post-receive"},"407":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Hooks Git post-receive » TODO","id":"407","title":"TODO"},"408":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » API rustwarden-core » API rustwarden-core","id":"408","title":"API rustwarden-core"},"409":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » API rustwarden-core » TODO","id":"409","title":"TODO"},"41":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Ouvrir une pull request » Ouvrir une pull request","id":"41","title":"Ouvrir une pull request"},"410":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Explication","id":"410","title":"Explication"},"411":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » TODO","id":"411","title":"TODO"},"412":{"body":"Gitrust est une plateforme d’hébergement Git auto-hébergée construite sur le framework rustwarden-core. L’application expose deux points d’entrée réseau (HTTP + SSH) et persiste ses données dans PostgreSQL.","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » Vue d’ensemble de l’architecture","id":"412","title":"Vue d’ensemble de l’architecture"},"413":{"body":"graph TB subgraph Clients Browser[\\"Navigateur Web\\"] GitCLI[\\"Git CLI (ssh/https)\\"] end subgraph \\"Gitrust Binary (src/main.rs)\\" Main[\\"main()\\"] end subgraph \\"Crates Gitrust\\" Web[\\"gitrust-web<br/><i>Routes HTTP, templates,<br/>handlers Axum</i>\\"] SSH[\\"gitrust-ssh<br/><i>Serveur SSH (russh),<br/>auth par clé, sessions</i>\\"] Hooks[\\"gitrust-hooks<br/><i>impl RustwardenHooks<br/>(on_user_registered, ...)</i>\\"] Core[\\"gitrust-core<br/><i>Models, services, migrations,<br/>rôles, types, DTOs</i>\\"] Git[\\"gitrust-git<br/><i>Bare repos, tree browser,<br/>pack protocol (git2)</i>\\"] end subgraph \\"Framework\\" RW[\\"rustwarden-core<br/><i>Auth, users, JWT, sessions,<br/>ResourceService, i18n</i>\\"] end subgraph \\"Stockage\\" PG[(PostgreSQL)] FS[(\\"Système de fichiers<br/>bare repos .git\\")] end subgraph \\"CI/CD (optionnel)\\" CiWorker[\\"CiWorker<br/><i>tokio::spawn, mpsc,<br/>sous-processus Dagger</i>\\"] Dagger[\\"Dagger Engine<br/><i>Containers isolés,<br/>cache, exécution</i>\\"] CiEngine[\\"ci-engine<br/><i>Module Dagger Python<br/>(Easy Mode)</i>\\"] Syft[\\"Syft (optionnel)<br/><i>Génération SBOM<br/>CycloneDX</i>\\"] DTrack[\\"Dependency-Track<br/>(optionnel)<br/><i>Analyse vulnérabilités</i>\\"] end Browser -->|HTTP :4000| Web GitCLI -->|SSH :2222| SSH GitCLI -->|HTTPS :4000| Web Main --> Web Main --> SSH Main --> Hooks Main -.->|\\"si CI_ENABLED\\"| CiWorker Web --> Core Web --> Git SSH --> Core SSH --> Git Hooks --> Core Core --> RW Core --> PG Git --> FS CiWorker --> Core CiWorker -->|\\"dagger call\\"| Dagger Dagger -->|\\"Easy Mode\\"| CiEngine Dagger -->|\\"Power Mode\\"| FS CiWorker -.->|\\"si CI_SBOM_ENABLED\\"| Syft Syft -.->|\\"si CI_DTRACK_ENABLED\\"| DTrack","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » Vue d’ensemble","id":"413","title":"Vue d’ensemble"},"414":{"body":"Le diagramme suivant détaille la séquence d’initialisation depuis main() jusqu’au démarrage des serveurs HTTP et SSH. sequenceDiagram participant Main as main() participant Builder as RustwardenBuilder participant App as RustwardenApp participant Mig as AppMigrator participant DB as PostgreSQL participant SMTP as Serveur SMTP Main->>Main: GitrustConfig::from_env() Main->>Main: Arc<GitrustHooks> (hooks FS) Main->>Builder: builder().from_env() Note over Builder: Charge .env, init tracing Main->>Builder: .headless().auto_migrate(false) Main->>Builder: .merge_routes(app_routes(hooks)) Note over Builder: Routes = framework API<br/>+ pages SSR gitrust<br/>+ Extension(hooks) Main->>Builder: .build().await Builder->>DB: Connexion pool Builder->>DB: Migrations rustwarden-core Builder->>SMTP: EmailQueueProcessor.start() Note over SMTP: Worker de fond : dépile<br/>email_queue toutes les 30s Builder-->>Main: RustwardenApp Main->>Mig: run_migrations(app.database()) Mig->>DB: core_migrations() + gitrust_migrations() Note over DB: Tables: users, resources,<br/>repositories, ssh_keys,<br/>teams, team_members,<br/>team_repository_access Mig-->>Main: Ok Main->>Main: tokio::spawn(SSH server :2222) alt CI_ENABLED=true Main->>Main: CiWorker::start(config.ci) Note over Main: Vérifie dagger dans PATH<br/>Si CI_SBOM_ENABLED: vérifie syft<br/>Si CI_DTRACK_ENABLED: vérifie API DT Main->>Main: tokio::spawn(CiWorker loop) Note over Main: Écoute mpsc channel<br/>pour les jobs CI end Main->>App: app.run().await Note over App: HTTP :4000 démarre","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » Démarrage de l’application","id":"414","title":"Démarrage de l’application"},"415":{"body":"","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » Principes de conception","id":"415","title":"Principes de conception"},"416":{"body":"Gitrust est construit au-dessus de rustwarden-core, un framework Rust d’authentification et de gestion d’utilisateurs. Cette séparation est intentionnelle : rustwarden-core gère : auth JWT, sessions, users, roles génériques, i18n, SMTP, OAuth, audit log générique. gitrust-core gère : tout ce qui est spécifique à la forge Git — dépôts, clés SSH, équipes, permissions RBAC à 4 niveaux, CI, import de dépôts. La règle fondamentale : ne jamais modifier crates/rustwarden-core/. Toute extension passe par des wrappers, des hooks ( RustwardenHooks) ou des traits implémentés côté gitrust.","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » Séparation framework / métier gitrust","id":"416","title":"Séparation framework / métier gitrust"},"417":{"body":"gitrust-web opère en mode headless() : les pages UI standard de rustwarden (login, register, settings) sont désactivées et réimplémentées entièrement dans gitrust-web/templates/. Cela permet un design cohérent (sidebar Git, DaisyUI) sans compromis avec l’UI générique du framework.","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » Mode headless","id":"417","title":"Mode headless"},"418":{"body":"L’interface est rendue côté serveur via Askama (templates Rust compilés). HTMX gère les interactions dynamiques (mises à jour partielles de page, SSE pour les notifications et les logs CI). Aucun asset externe : tout CSS/JS est servi depuis static/ — imposé par la Content Security Policy du framework.","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » SSR + HTMX, zéro CDN","id":"418","title":"SSR + HTMX, zéro CDN"},"419":{"body":"gitrust-git est découplé de la base de données. Les opérations Git (navigation d’arbre, lecture de blobs, pack protocol) travaillent directement sur les bare repos ( {GIT_REPOS_BASE_PATH}/{owner}/{slug}.git/) via libgit2. La base ne stocke que les métadonnées (nom, description, visibilité, ownership). Ce découplage permet de remplacer ou tester gitrust-git indépendamment.","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » Bare repos sur le système de fichiers","id":"419","title":"Bare repos sur le système de fichiers"},"42":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Ouvrir une pull request » TODO","id":"42","title":"TODO"},"420":{"body":"Plutôt que d’implémenter un runner CI from scratch, gitrust délègue l’exécution à Dagger, qui garantit l’isolation (containers), la reproductibilité (cache) et la portabilité (local ou runner distant via SSH+rsync). Le CiWorker est une tâche Tokio dans le processus principal — pas un daemon séparé — ce qui simplifie le déploiement (un seul binaire).","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » CI hybride : Dagger comme abstraction d’exécution","id":"420","title":"CI hybride : Dagger comme abstraction d’exécution"},"421":{"body":"Référence structurelle complète (tables de modules, routes, dépendances) : developer_manual/reference/architecture-crates.md Diagrammes de séquence détaillés (clone SSH, push, permissions) : developer_manual/explanation/flux-requetes.md Règles de code et gates QA : developer_manual/reference/regles-qa-anssi.md","breadcrumbs":"Explication » Vue d\'ensemble de l\'architecture » Pour aller plus loin","id":"421","title":"Pour aller plus loin"},"422":{"body":"Diagrammes de séquence couvrant les opérations principales de gitrust : création de dépôt, clone et push SSH, enregistrement de clé SSH, résolution des permissions, navigation web, inscription utilisateur.","breadcrumbs":"Explication » Flux de requêtes » Flux de requêtes","id":"422","title":"Flux de requêtes"},"423":{"body":"sequenceDiagram actor User as Utilisateur participant Web as gitrust-web participant RepoSvc as RepositoryService participant ResSvc as ResourceService participant DB as PostgreSQL participant Git as gitrust-git participant FS as Système de fichiers User->>Web: POST /new {name, description} Web->>Web: Extraire user_id (session JWT) Web->>RepoSvc: create(db, owner_id, username, base_path, input) RepoSvc->>RepoSvc: RepoSlug::from_name(input.name) RepoSvc->>DB: SELECT ... WHERE owner_id AND slug DB-->>RepoSvc: None (pas de doublon) RepoSvc->>RepoSvc: compute_disk_path(base, owner, slug) Note over RepoSvc: Validation anti path-traversal RepoSvc->>ResSvc: register(db, \\"repository\\", repo_id, owner_id) ResSvc->>DB: INSERT INTO resources DB-->>ResSvc: Ok RepoSvc->>DB: INSERT INTO repositories DB-->>RepoSvc: repository::Model RepoSvc-->>Web: RepositoryOutput Web->>Git: BareRepo::init(disk_path) Git->>FS: git init --bare FS-->>Git: Ok Git-->>Web: Ok Web-->>User: 302 Redirect /{owner}/{slug}","breadcrumbs":"Explication » Flux de requêtes » 1. Création d’un dépôt (Web)","id":"423","title":"1. Création d’un dépôt (Web)"},"424":{"body":"sequenceDiagram actor Dev as Développeur participant Client as Git CLI participant SSH as gitrust-ssh participant Auth as SshKeyService participant Access as AccessService participant Git as gitrust-git participant DB as PostgreSQL participant FS as Bare repo (.git) Dev->>Client: git clone ssh://git@host:2222/alice/my-repo.git Client->>SSH: Connexion TCP :2222 SSH-->>Client: Banner SSH + échange clés Client->>SSH: Auth publickey (signature) SSH->>Auth: find_by_fingerprint(db, fingerprint) Auth->>DB: SELECT FROM ssh_keys WHERE fingerprint = ? DB-->>Auth: ssh_key::Model {user_id, ...} Auth-->>SSH: user_id SSH->>Auth: update_last_used(db, key_id) Auth->>DB: UPDATE ssh_keys SET last_used_at = now() SSH-->>Client: Auth OK Client->>SSH: exec \\"git-upload-pack \'alice/my-repo.git\'\\" SSH->>SSH: CommandHandler::parse(\\"git-upload-pack alice/my-repo.git\\") Note over SSH: Extraction owner=alice, repo=my-repo SSH->>Access: effective_role(db, user_id, repo_id) Access->>DB: Check ownership + shares + teams DB-->>Access: Role::Developer Access-->>SSH: can_read = true SSH->>Git: pack_protocol::advertise_refs(repo_path) Git->>FS: Lecture refs FS-->>Git: refs/heads/main, ... Git-->>SSH: advertise output SSH-->>Client: refs advertisement Client->>SSH: want/have negotiation SSH->>Git: pack_protocol::serve_pack(repo_path, wants, haves) Git->>FS: Pack objects FS-->>Git: pack data Git-->>SSH: pack stream SSH-->>Client: pack data Client-->>Dev: Dépôt cloné avec succès","breadcrumbs":"Explication » Flux de requêtes » 2. Clone SSH (git clone)","id":"424","title":"2. Clone SSH (git clone)"},"425":{"body":"sequenceDiagram actor Dev as Développeur participant Client as Git CLI participant SSH as gitrust-ssh participant Access as AccessService participant Git as gitrust-git participant Hooks as gitrust-hooks participant DB as PostgreSQL participant FS as Bare repo (.git) Note over Client,SSH: Session SSH déjà authentifiée Client->>SSH: exec \\"git-receive-pack \'alice/my-repo.git\'\\" SSH->>SSH: CommandHandler::parse(...) Note over SSH: Extraction owner=alice, repo=my-repo SSH->>Access: effective_role(db, user_id, repo_id) Access->>DB: Check ownership + shares + teams DB-->>Access: Role::Developer Access-->>SSH: can_push = true SSH->>Git: pack_protocol::advertise_refs(repo_path) Git->>FS: Lecture refs Git-->>SSH: refs advertisement SSH-->>Client: refs Client->>SSH: pack data + commands SSH->>Git: pack_protocol::serve_pack(repo_path, receive-pack) Git->>FS: Écriture objets + update refs FS-->>Git: Ok Git-->>SSH: Ok SSH->>DB: UPDATE repositories SET is_empty = false, updated_at = now() SSH-->>Client: Push OK Client-->>Dev: Push réussi","breadcrumbs":"Explication » Flux de requêtes » 3. Push SSH (git push)","id":"425","title":"3. Push SSH (git push)"},"426":{"body":"sequenceDiagram actor User as Utilisateur participant Web as gitrust-web participant Svc as SshKeyService participant DB as PostgreSQL User->>Web: POST /settings/keys {title, key_data} Web->>Web: Extraire user_id (session) Web->>Svc: create(db, user_id, input) Svc->>Svc: parse_public_key(key_data) Note over Svc: Extraire type + décoder base64 Svc->>Svc: validate_key_type_and_size(type, bytes) Note over Svc: ed25519 OK<br/>RSA >= 4096 bits<br/>ecdsa-p256/p384 OK Svc->>Svc: compute_fingerprint(bytes) Note over Svc: SHA256(key_bytes) -> base64-no-pad Svc->>DB: SELECT FROM ssh_keys WHERE fingerprint = ? DB-->>Svc: None (pas de doublon) Svc->>DB: INSERT INTO ssh_keys DB-->>Svc: ssh_key::Model Svc-->>Web: SshKeyOutput Web-->>User: 200 Clé ajoutée (fingerprint affiché)","breadcrumbs":"Explication » Flux de requêtes » 4. Enregistrement d’une clé SSH","id":"426","title":"4. Enregistrement d’une clé SSH"},"427":{"body":"sequenceDiagram participant Caller as Handler / SSH Session participant AS as AccessService participant RS as ResourceService participant DB as PostgreSQL Caller->>AS: effective_role(db, user_id, repo_id) AS->>RS: effective_permission(db, user_id, \\"repository\\", repo_id) RS->>DB: SELECT FROM resources WHERE type AND id DB-->>RS: resource {owner_id, is_public} alt user_id == owner_id RS-->>AS: \\"owner\\" else Share exists RS->>DB: SELECT FROM resource_shares WHERE resource AND user DB-->>RS: share {permission_level} RS-->>AS: permission_level else Resource is public RS-->>AS: \\"read\\" else No access RS-->>AS: None end AS->>AS: Role::from_permission(individual_level) AS->>DB: SELECT team_members + team_repository_access<br/>WHERE user_id AND repository_id DB-->>AS: Vec<team_permission> AS->>AS: team_role = max(team_permissions) AS->>AS: effective = max(individual_role, team_role) AS-->>Caller: Role (Reader / Developer / Maintainer / Owner)","breadcrumbs":"Explication » Flux de requêtes » 5. Résolution des permissions (AccessService)","id":"427","title":"5. Résolution des permissions (AccessService)"},"428":{"body":"sequenceDiagram actor User as Utilisateur participant Web as gitrust-web participant Ext as RepoExtractor participant Access as AccessService participant Git as gitrust-git participant DB as PostgreSQL participant FS as Bare repo User->>Web: GET /alice/my-repo/tree/main/src Web->>Ext: RepoContext::extract(owner=alice, repo=my-repo, ref=main, path=src) Ext->>DB: SELECT user WHERE username = \'alice\' DB-->>Ext: user {id} Ext->>DB: SELECT repository WHERE owner_id AND slug DB-->>Ext: repository::Model Ext->>Access: effective_role(db, visitor_id, repo_id) Access-->>Ext: Role::Reader Ext-->>Web: RepoContext {repo, role, ref, path} Web->>Git: tree_browser::list_tree(repo_path, \\"main\\", \\"src\\") Git->>FS: Resolve ref main -> commit -> tree -> src/ FS-->>Git: Vec<TreeEntry> Git-->>Web: entries (fichiers + dossiers) Web->>Git: readme::find_readme(repo_path, \\"main\\", \\"src\\") Git->>FS: Cherche README.md, README, readme.md FS-->>Git: Option<BlobContent> Git-->>Web: Option<readme_content> Web->>Web: Render template tree.html Web-->>User: HTML (arbre + README)","breadcrumbs":"Explication » Flux de requêtes » 6. Navigation dans un dépôt (Web)","id":"428","title":"6. Navigation dans un dépôt (Web)"},"429":{"body":"sequenceDiagram actor User as Nouvel utilisateur participant Web as rustwarden-core (auth) participant Hook as GitrustHooks participant DB as PostgreSQL participant FS as Système de fichiers User->>Web: POST /register {username, email, password} Web->>DB: INSERT INTO users DB-->>Web: user {id, username} Web->>Hook: on_user_registered(db, user_id, username) Hook->>Hook: Valider username (anti path-traversal) Hook->>FS: create_dir_all(repos_base_path / username) FS-->>Hook: Ok Hook-->>Web: Ok Web-->>User: 302 Redirect /login","breadcrumbs":"Explication » Flux de requêtes » 7. Inscription utilisateur + création répertoire","id":"429","title":"7. Inscription utilisateur + création répertoire"},"43":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Stratégies de fusion (ff / squash / merge commit) » Stratégies de fusion (ff / squash / merge commit)","id":"43","title":"Stratégies de fusion (ff / squash / merge commit)"},"430":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Modèle de permissions RBAC » Modèle de permissions RBAC","id":"430","title":"Modèle de permissions RBAC"},"431":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Modèle de permissions RBAC » TODO","id":"431","title":"TODO"},"432":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Fonctionnement du 2FA » Fonctionnement du 2FA","id":"432","title":"Fonctionnement du 2FA"},"433":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Fonctionnement du 2FA » TODO","id":"433","title":"TODO"},"434":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Hiérarchie des labels » Hiérarchie des labels","id":"434","title":"Hiérarchie des labels"},"435":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Hiérarchie des labels » TODO","id":"435","title":"TODO"},"436":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » CI Dagger : Easy Mode vs Power Mode » CI Dagger : Easy Mode vs Power Mode","id":"436","title":"CI Dagger : Easy Mode vs Power Mode"},"437":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » CI Dagger : Easy Mode vs Power Mode » TODO","id":"437","title":"TODO"},"438":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Décisions UI (HTMX, DaisyUI) » Décisions UI (HTMX, DaisyUI)","id":"438","title":"Décisions UI (HTMX, DaisyUI)"},"439":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Décisions UI (HTMX, DaisyUI) » TODO","id":"439","title":"TODO"},"44":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Stratégies de fusion (ff / squash / merge commit) » TODO","id":"44","title":"TODO"},"440":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Patron worker async » Patron worker async","id":"440","title":"Patron worker async"},"441":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Patron worker async » TODO","id":"441","title":"TODO"},"442":{"body":"Bienvenue dans l’atelier gitrust. Chaque fichier ici est standalone et copiable tel quel — un fichier, un cas d’usage. Les commentaires internes suffisent à l’adapter. Pour les explications pédagogiques, référez-vous aux manuels qui pointent vers ces templates. Convention : copiez le fichier qui correspond à votre cas, adaptez les valeurs marquées CHANGE_ME, puis supprimez les commentaires si vous le souhaitez. Ne modifiez pas les fichiers dans ce dépôt — travaillez toujours sur une copie locale.","breadcrumbs":"Catalogue des templates » Bibliothèque de templates gitrust","id":"442","title":"Bibliothèque de templates gitrust"},"443":{"body":"Fichier Cas d’usage env/dev-local.env Instance de développement local sur localhost:4000 — PostgreSQL local, pas de TLS, debug activé env/production-mono-machine.env Production mono-machine derrière reverse-proxy — PostgreSQL, SMTP, Redis sessions, TLS délégué env/production-ci-heavy.env Production avec CI runners distants intensifs — tuning pool de connexions, rate limiting ajusté env/tests-e2e.env Environnement E2E Playwright — base éphémère, seed de données, SMTP mock","breadcrumbs":"Catalogue des templates » Fichiers d’environnement ( env/)","id":"443","title":"Fichiers d’environnement ( env/)"},"444":{"body":"Fichier Cas d’usage docker/docker-compose.minimal.yml Stack minimale : gitrust + PostgreSQL uniquement — idéale pour l’évaluation et les tutoriels docker/docker-compose.production.yml Stack production : gitrust + PostgreSQL + Redis sessions + relay SMTP Postfix docker/docker-compose.with-ci-runner.yml Stack production + CI runner Dagger en sidecar — pour instances avec builds fréquents docker/podman-quadlet.container Alternative Podman Quadlet — déploiement rootless systemd-native sans Docker daemon","breadcrumbs":"Catalogue des templates » Stacks Docker ( docker/)","id":"444","title":"Stacks Docker ( docker/)"},"445":{"body":"Fichier Cas d’usage reverse-proxy/nginx-tls.conf Nginx avec TLS Let’s Encrypt — virtual host gitrust, headers de sécurité, proxy WebSocket SSE reverse-proxy/caddy-Caddyfile Caddyfile — TLS automatique, configuration minimale, idéal pour les petites instances reverse-proxy/traefik-dynamic.yml Traefik config dynamique — intégration labels Docker, middlewares rate-limit et auth","breadcrumbs":"Catalogue des templates » Reverse-proxy ( reverse-proxy/)","id":"445","title":"Reverse-proxy ( reverse-proxy/)"},"446":{"body":"Fichier Cas d’usage systemd/gitrust.service Service systemd avec hardening AppArmor/seccomp — pour déploiement binaire natif sans Docker systemd/gitrust-backup.timer Timer systemd de sauvegarde quotidienne — déclenche backup.sh à 2h00 avec journalisation","breadcrumbs":"Catalogue des templates » Systemd ( systemd/)","id":"446","title":"Systemd ( systemd/)"},"447":{"body":"Fichier Cas d’usage ci/rust.gitrust-ci.yml Pipeline CI pour projet Rust — fmt, clippy, test, audit de dépendances, SBOM ci/go.gitrust-ci.yml Pipeline CI pour projet Go — vet, staticcheck, test, build multi-arch ci/python.gitrust-ci.yml Pipeline CI pour projet Python — ruff, mypy, pytest, packaging wheel ci/node.gitrust-ci.yml Pipeline CI pour projet Node.js — ESLint, Vitest, build, audit npm ci/dagger-power-mode/dagger.json Squelette Dagger Power Mode — module Go minimal à étendre pour pipelines complexes ci/dagger-power-mode/main.go Module Dagger Go — fonctions build/test/publish prêtes à adapter","breadcrumbs":"Catalogue des templates » Configurations CI ( .gitrust-ci.yml) ( ci/)","id":"447","title":"Configurations CI ( .gitrust-ci.yml) ( ci/)"},"448":{"body":"Fichier Cas d’usage backup/backup.sh Sauvegarde complète — pg_dump + rsync des dépôts bare + copie des clés SSH host backup/restore.sh Restauration complète depuis une archive de sauvegarde — avec vérification d’intégrité","breadcrumbs":"Catalogue des templates » Scripts de sauvegarde et restauration ( backup/)","id":"448","title":"Scripts de sauvegarde et restauration ( backup/)"},"449":{"body":"Ces exemples illustrent l’authentification par Personal Access Token (PAT) et les opérations CRUD de base sur l’API REST gitrust v1. Fichier Cas d’usage api-clients/python-create-repo.py Client Python — créer un dépôt via l’API v1 avec httpx et PAT api-clients/rust-list-repos.rs Client Rust — lister les dépôts avec pagination via reqwest et PAT api-clients/curl-pat-auth.sh Shell curl — exemples d’authentification PAT, GET/POST/DELETE sur les endpoints principaux","breadcrumbs":"Catalogue des templates » Clients API d’exemple ( api-clients/)","id":"449","title":"Clients API d’exemple ( api-clients/)"},"45":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Utiliser les labels et les issues » Utiliser les labels et les issues","id":"45","title":"Utiliser les labels et les issues"},"450":{"body":"Fichier Cas d’usage migration/from-gitea.sh Import en masse depuis Gitea — dépôts, membres, issues via le worker d’import gitrust migration/from-forgejo.sh Import en masse depuis Forgejo — même mécanique, adaptée à l’API Forgejo","breadcrumbs":"Catalogue des templates » Scripts de migration ( migration/)","id":"450","title":"Scripts de migration ( migration/)"},"451":{"body":"Les manuels narratifs pointent vers ces fichiers depuis leurs sections how-to. Par exemple : administration_manual/how-to/configurer-smtp.md → « Copiez template/env/production-mono-machine.env puis… » administration_manual/tutorials/01-installation-docker.md → « La stack s’appuie sur template/docker/docker-compose.minimal.yml » developer_manual/how-to/implementer-endpoint-api.md → « Testez avec template/api-clients/curl-pat-auth.sh » Les templates ne contiennent pas d’explication pédagogique — tout le contexte se trouve dans les manuels.","breadcrumbs":"Catalogue des templates » Comment utiliser ces templates depuis les manuels","id":"451","title":"Comment utiliser ces templates depuis les manuels"},"46":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Utiliser les labels et les issues » TODO","id":"46","title":"TODO"},"47":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Importer un dépôt externe » Importer un dépôt externe","id":"47","title":"Importer un dépôt externe"},"48":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Importer un dépôt externe » TODO","id":"48","title":"TODO"},"49":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Guides pratiques » Consulter le SBOM d\'un dépôt » Consulter le SBOM d’un dépôt","id":"49","title":"Consulter le SBOM d’un dépôt"},"5":{"body":"Ce manuel t’accompagne depuis ta première connexion à une instance gitrust jusqu’à l’autonomie complète : pousser du code, collaborer via les pull requests, gérer les issues et automatiser tes workflows avec la CI intégrée. Tu n’as pas besoin d’administrer ni de comprendre l’architecture interne — ce manuel suppose seulement que tu sais utiliser Git en ligne de commande.","breadcrumbs":"Vue d\'ensemble » Manuel utilisateur","id":"5","title":"Manuel utilisateur"},"50":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Guides pratiques » Consulter le SBOM d\'un dépôt » TODO","id":"50","title":"TODO"},"51":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Référence","id":"51","title":"Référence"},"52":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » TODO","id":"52","title":"TODO"},"53":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Modèle de permissions (4 rôles) » Modèle de permissions (4 rôles)","id":"53","title":"Modèle de permissions (4 rôles)"},"54":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Modèle de permissions (4 rôles) » TODO","id":"54","title":"TODO"},"55":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » API REST v1 » API REST v1","id":"55","title":"API REST v1"},"56":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » API REST v1 » TODO","id":"56","title":"TODO"},"57":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Schéma du fichier .gitrust-ci.yml » Schéma du fichier .gitrust-ci.yml","id":"57","title":"Schéma du fichier .gitrust-ci.yml"},"58":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Schéma du fichier .gitrust-ci.yml » TODO","id":"58","title":"TODO"},"59":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Markdown et syntaxe supportée » Markdown et syntaxe supportée","id":"59","title":"Markdown et syntaxe supportée"},"6":{"body":"Le manuel est structuré comme un parcours progressif de 4 tutoriels. Chaque tutoriel te laisse dans un état stable, vérifié, avant de passer au suivant. L’aide fournie recule d’un cran à chaque étape (du copier-coller intégral vers la composition autonome). graph LR A[Compte créé] --> B[01-premier-pas<br/>20 min] B --> C[02-cloner-pousser<br/>25 min] C --> D[03-collaborer<br/>25 min] D --> E[04-automatiser-ci<br/>20 min] E --> F[Utilisateur autonome] Checkpoint de parcours : avant de passer au tutoriel 02, tu dois pouvoir te connecter à gitrust, voir ton dépôt dans l’interface et l’accès SSH configuré. Si ce n’est pas le cas, relis le tutoriel 01. Checkpoint de parcours : avant le tutoriel 03, tu dois avoir poussé au moins un commit sur ta branche via SSH. Si ce n’est pas le cas, relis le tutoriel 02. Checkpoint de parcours : avant le tutoriel 04, tu dois avoir ouvert et mergé une pull request. Si ce n’est pas le cas, relis le tutoriel 03.","breadcrumbs":"Vue d\'ensemble » Parcours d’apprentissage","id":"6","title":"Parcours d’apprentissage"},"60":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Markdown et syntaxe supportée » TODO","id":"60","title":"TODO"},"61":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Référence » Notifications » Notifications","id":"61","title":"Notifications"},"62":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Référence » Notifications » TODO","id":"62","title":"TODO"},"63":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Explication","id":"63","title":"Explication"},"64":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » TODO","id":"64","title":"TODO"},"65":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Modèle de collaboration sur gitrust » Modèle de collaboration sur gitrust","id":"65","title":"Modèle de collaboration sur gitrust"},"66":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Modèle de collaboration sur gitrust » TODO","id":"66","title":"TODO"},"67":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Sécurité côté utilisateur » Sécurité côté utilisateur","id":"67","title":"Sécurité côté utilisateur"},"68":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Sécurité côté utilisateur » TODO","id":"68","title":"TODO"},"69":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Explication » Cycle de vie d\'une pull request » Cycle de vie d’une pull request","id":"69","title":"Cycle de vie d’une pull request"},"7":{"body":"Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suis-les dans l’ordre — chacun suppose le précédent complété. 01 — Premiers pas : 2FA, clé SSH, premier dépôt — ~20 min 02 — Cloner et pousser du code — ~25 min 03 — Collaborer : équipes, issues, pull requests — ~25 min 04 — Automatiser avec la CI — ~20 min","breadcrumbs":"Vue d\'ensemble » Tutoriels — apprendre en faisant","id":"7","title":"Tutoriels — apprendre en faisant"},"70":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Explication » Cycle de vie d\'une pull request » TODO","id":"70","title":"TODO"},"71":{"body":"Ce manuel s’adresse aux opérateurs et self-hosters qui déploient, configurent et maintiennent une instance gitrust en production. Il couvre l’intégralité du cycle de vie d’une instance : premier démarrage, mise en production, sauvegarde, mise à jour et dépannage. Il suppose des connaissances en administration Linux, en réseau et en TLS — il n’explique pas ces prérequis.","breadcrumbs":"Vue d\'ensemble » Manuel d’administration","id":"71","title":"Manuel d’administration"},"72":{"body":"Le parcours administrateur est structuré en 4 tutoriels qui représentent environ 3 heures au total. L’étayage est dégressif : le premier tutoriel fournit tout clé en main, le dernier demande de composer soi-même à partir des recettes disponibles. graph LR A[VM prête<br/>Docker installé] --> B[01-installation-docker<br/>30 min] B --> C[02-installation-systemd<br/>45 min] C --> D[03-premier-demarrage<br/>20 min] D --> E[04-mise-en-production<br/>90 min] E --> F[Admin opérationnel] Checkpoint de parcours : avant de passer au tutoriel 02, vous devez avoir une instance gitrust accessible sur http://localhost:4000 avec un compte administrateur fonctionnel. Si ce n’est pas le cas, relisez le tutoriel 01. Checkpoint de parcours : avant le tutoriel 04, vous devez avoir une instance démarrée avec une configuration SMTP et un reverse-proxy TLS opérationnel. Si ce n’est pas le cas, relisez le tutoriel 03.","breadcrumbs":"Vue d\'ensemble » Parcours d’apprentissage","id":"72","title":"Parcours d’apprentissage"},"73":{"body":"Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suivez-les dans l’ordre — chacun suppose le précédent complété. 01 — Installation Docker : stack docker-compose complète — ~30 min 02 — Installation systemd : binaire natif + service — ~45 min 03 — Premier démarrage : admin bootstrap, migrations — ~20 min 04 — Mise en production — ~90 min","breadcrumbs":"Vue d\'ensemble » Tutoriels — apprendre en faisant","id":"73","title":"Tutoriels — apprendre en faisant"},"74":{"body":"Les how-to répondent à « comment faire X » sans explication de fond. Consultez-les dans n’importe quel ordre selon votre besoin. Sauvegarder et restaurer Mettre à jour l’instance Configurer SMTP Configurer OAuth (Google, GitHub) Configurer un CI runner distant Intégrer Dependency-Track (SBOM) Durcir avec Fail2ban Tuner le rate limiting Forcer la 2FA globalement Dépanner SSH Dépanner la CI Gérer les utilisateurs depuis /admin Auditer l’instance","breadcrumbs":"Vue d\'ensemble » How-to — recettes pour les tâches courantes","id":"74","title":"How-to — recettes pour les tâches courantes"},"75":{"body":"La référence documente de façon exhaustive les paramètres, schémas et comportements. Elle est destinée à la consultation ponctuelle. Variables d’environnement (.env) Paramètres dynamiques (app_settings) Schéma de base de données Ports et services (4000 HTTP, 2222 SSH, 5432 PG) Conformité ANSSI PA-074","breadcrumbs":"Vue d\'ensemble » Référence — informations techniques exactes","id":"75","title":"Référence — informations techniques exactes"},"76":{"body":"Les explanations construisent les modèles mentaux nécessaires pour prendre de bonnes décisions d’exploitation. Lisez-les quand vous voulez comprendre les choix d’architecture, pas seulement les appliquer. Architecture globale de gitrust Modèle de déploiement : mono-machine vs HA CI Dagger : pourquoi et comment Stratégie de sauvegarde 3-2-1 adaptée gitrust","breadcrumbs":"Vue d\'ensemble » Explication — comprendre le pourquoi","id":"76","title":"Explication — comprendre le pourquoi"},"77":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » Tutoriels","id":"77","title":"Tutoriels"},"78":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » TODO","id":"78","title":"TODO"},"79":{"body":"","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Installation Docker : démarrez gitrust en 30 minutes avec docker-compose","id":"79","title":"Installation Docker : démarrez gitrust en 30 minutes avec docker-compose"},"8":{"body":"Les how-to répondent à « comment faire X » sans explication de fond. Tu peux les consulter dans n’importe quel ordre selon ton besoin immédiat. Ces guides supposent que tu as suivi le parcours tutoriels. Ils ne répètent pas les étapes de base. Gérer ses clés SSH Configurer la 2FA Créer un Personal Access Token Gérer les équipes et permissions Ouvrir une pull request Fusionner : fast-forward, squash, merge commit Utiliser les labels hiérarchiques Importer un dépôt externe Consulter le SBOM de ton projet","breadcrumbs":"Vue d\'ensemble » How-to — recettes pour les tâches courantes","id":"8","title":"How-to — recettes pour les tâches courantes"},"80":{"body":"À la fin de ce tutoriel, vous saurez : O1. Déployer la stack gitrust minimale (application + PostgreSQL) avec docker-compose O2. Vérifier que les trois services démarrent correctement et sont en bonne santé O3. Créer le premier compte administrateur et accéder à l’interface web","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Objectifs","id":"80","title":"Objectifs"},"81":{"body":"Technique : une VM ou machine Linux (Debian 12 / Ubuntu 22.04 ou supérieur), Docker Engine ≥ 24 installé ( docker --version répond), Docker Compose plugin installé ( docker compose version répond), ports 4000 et 2222 libres sur la machine Pédagogique : aucun tutoriel gitrust préalable requis — c’est le point de départ du parcours administrateur Temps estimé : ~30 minutes","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Pré-requis","id":"81","title":"Pré-requis"},"82":{"body":"Avant de lancer la moindre commande, comprenons ce que docker-compose va orchestrer et pourquoi. gitrust est composé de trois services principaux dans sa configuration minimale. Pensez-y comme trois pièces d’un appartement qui s’appellent entre elles via un réseau interne : graph TB subgraph internet [\\"Internet / votre navigateur\\"] B[Navigateur :4000] S[Client git/SSH :2222] end subgraph docker [\\"Réseau Docker gitrust_net\\"] A[\\"gitrust-app<br/>(Rust, port 4000 + 2222)<br/>Lit la config depuis .env\\"] P[\\"postgres<br/>(PostgreSQL 16, port 5432)<br/>Stocke comptes, dépôts, issues\\"] R[\\"redis (optionnel)<br/>(Redis 7, port 6379)<br/>Sessions web + cache\\"] end B -->|HTTP| A S -->|SSH| A A -->|SQL| P A -.->|sessions| R gitrust-app est le cœur : serveur HTTP ( :4000) + serveur SSH ( :2222) compilé en Rust. Il lit sa configuration depuis un fichier .env et écrit les dépôts Git bare sur un volume Docker. PostgreSQL stocke toutes les données relationnelles (comptes, organisations, dépôts, issues, PRs). Redis est optionnel dans la configuration minimale — il gère les sessions web et le cache quand il est présent. Dans ce tutoriel, nous utilisons la stack minimale (app + PostgreSQL) suffisante pour évaluer gitrust et démarrer une petite instance. La stack production avec Redis et SMTP se trouve dans template/docker/docker-compose.production.yml.","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Vue d’ensemble","id":"82","title":"Vue d’ensemble"},"83":{"body":"Créez un répertoire dédié à votre instance gitrust et positionnez-vous dedans : mkdir -p /opt/gitrust && cd /opt/gitrust Créez le fichier de configuration .env avec les valeurs minimales. Changez impérativement les valeurs marquées CHANGE_ME : cat > .env << \'EOF\'\\n# === gitrust — configuration minimale ===\\n# Changez toutes les valeurs CHANGE_ME avant de démarrer # Clé secrète de l\'application (générez avec : openssl rand -hex 32)\\nSECRET_KEY=CHANGE_ME_openssl_rand_hex_32 # URL publique de l\'instance (sans slash final)\\nAPP_URL=http://localhost:4000 # Base de données PostgreSQL\\nDATABASE_URL=postgres://gitrust:CHANGE_ME_db_password@postgres:5432/gitrust\\nPOSTGRES_USER=gitrust\\nPOSTGRES_PASSWORD=CHANGE_ME_db_password\\nPOSTGRES_DB=gitrust # Serveur SSH (port exposé à l\'extérieur)\\nSSH_PORT=2222 # Mode de l\'application\\nRUST_LOG=info\\nAPP_ENV=production\\nEOF Générez maintenant une clé secrète robuste et remplacez la valeur dans .env : SECRET=$(openssl rand -hex 32)\\nsed -i \\"s/CHANGE_ME_openssl_rand_hex_32/$SECRET/\\" .env Choisissez également un mot de passe pour PostgreSQL et remplacez les deux occurrences : DB_PASS=$(openssl rand -hex 16)\\nsed -i \\"s/CHANGE_ME_db_password/$DB_PASS/g\\" .env Sortie attendue (vérification) : grep SECRET_KEY .env\\n# → SECRET_KEY=4a7f2c9e1b8d3f6a0e5c2b9d7f4a1e8c3b6d9f2a5e8c1b4d7f0a3e6c9b2d5f8a Checkpoint : exécutez grep CHANGE_ME .env — la commande doit ne rien retourner. Si elle retourne des lignes, ces valeurs n’ont pas été remplacées et le démarrage échouera.","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Étape 1 : Créez le répertoire de travail et le fichier de configuration","id":"83","title":"Étape 1 : Créez le répertoire de travail et le fichier de configuration"},"84":{"body":"Créez le fichier docker-compose.yml suivant dans /opt/gitrust/. Ce contenu correspond à la stack minimale gitrust — il est reproduit ici intégralement pour que vous puissiez démarrer sans dépendance externe : cat > docker-compose.yml << \'EOF\'\\n# docker-compose.minimal.yml — Stack gitrust minimale (app + PostgreSQL)\\n# Cas d\'usage : évaluation, développement, petite instance (<10 utilisateurs)\\n# Pour la production : utilisez docker-compose.production.yml (+ Redis + SMTP)\\n#\\n# Usage :\\n# docker compose up -d\\n# docker compose logs -f gitrust\\n# docker compose down version: \\"3.9\\" services: # ── Base de données ─────────────────────────────────────────────────────── postgres: image: postgres:16-alpine container_name: gitrust_postgres restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} volumes: # Données persistantes — ne supprimez pas ce volume sans sauvegarde - postgres_data:/var/lib/postgresql/data healthcheck: test: [\\"CMD-SHELL\\", \\"pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}\\"] interval: 10s timeout: 5s retries: 5 networks: - gitrust_net # ── Application gitrust ─────────────────────────────────────────────────── gitrust: image: ghcr.io/gitrust/gitrust:latest container_name: gitrust_app restart: unless-stopped depends_on: postgres: condition: service_healthy env_file: # Lit toutes les variables depuis .env — ne commitez jamais ce fichier - .env ports: # Interface web — exposée sur toutes les interfaces de la machine hôte - \\"4000:4000\\" # Serveur SSH Git — exposé sur le port configuré dans .env - \\"${SSH_PORT:-2222}:2222\\" volumes: # Dépôts Git bare — données critiques, sauvegardez ce volume - git_repos:/var/lib/gitrust/repositories # Clés SSH du serveur — générées au premier démarrage, persistez-les - ssh_host_keys:/etc/gitrust/ssh healthcheck: test: [\\"CMD\\", \\"curl\\", \\"-f\\", \\"http://localhost:4000/health\\"] interval: 30s timeout: 10s retries: 3 start_period: 30s networks: - gitrust_net volumes: # postgres_data : données relationnelles (comptes, dépôts, issues, PRs) postgres_data: # git_repos : dépôts Git bare (le contenu réel des commits) git_repos: # ssh_host_keys : clés SSH hôte (fingerprint de votre serveur) ssh_host_keys: networks: gitrust_net: driver: bridge\\nEOF Checkpoint : vérifiez que les deux fichiers sont présents dans /opt/gitrust/ : ls -la /opt/gitrust/ Sortie attendue : total 16\\ndrwxr-xr-x 2 root root 4096 avr 17 10:00 .\\ndrwxr-xr-x 8 root root 4096 avr 17 09:55 ..\\n-rw------- 1 root root 612 avr 17 10:00 .env\\n-rw-r--r-- 1 root root 2048 avr 17 10:00 docker-compose.yml","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Étape 2 : Créez le fichier docker-compose.yml","id":"84","title":"Étape 2 : Créez le fichier docker-compose.yml"},"85":{"body":"Démarrez tous les services en arrière-plan : docker compose up -d Sortie attendue : [+] Running 4/4 ✔ Network gitrust_gitrust_net Created 0.1s ✔ Volume \\"gitrust_postgres_data\\" Created 0.0s ✔ Container gitrust_postgres Started 0.8s ✔ Container gitrust_app Started 1.2s Suivez les logs de l’application pour observer le démarrage (les migrations s’exécutent automatiquement) : docker compose logs -f gitrust Sortie attendue (les 15-20 premières secondes) : gitrust_app | 2026-04-17T10:00:15Z INFO gitrust > Starting gitrust v0.9.0\\ngitrust_app | 2026-04-17T10:00:15Z INFO gitrust > Connecting to database...\\ngitrust_app | 2026-04-17T10:00:16Z INFO gitrust > Running database migrations...\\ngitrust_app | 2026-04-17T10:00:17Z INFO gitrust > Applied 42 migrations successfully\\ngitrust_app | 2026-04-17T10:00:17Z INFO gitrust > Generating SSH host keys...\\ngitrust_app | 2026-04-17T10:00:17Z INFO gitrust > SSH host key fingerprint: SHA256:xxxxxxxxxxxxxxxxxxxx\\ngitrust_app | 2026-04-17T10:00:17Z INFO gitrust > HTTP server listening on 0.0.0.0:4000\\ngitrust_app | 2026-04-17T10:00:17Z INFO gitrust > SSH server listening on 0.0.0.0:2222\\ngitrust_app | 2026-04-17T10:00:17Z INFO gitrust > gitrust is ready Appuyez sur Ctrl+C pour quitter le suivi des logs (les containers continuent de tourner). Checkpoint : vérifiez l’état de santé des services : docker compose ps Sortie attendue : NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS\\ngitrust_app ghcr.io/gitrust/gitrust:latest \\"/usr/local/bin/gitr…\\" gitrust 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:4000->4000/tcp, 0.0.0.0:2222->2222/tcp\\ngitrust_postgres postgres:16-alpine \\"docker-entrypoint.s…\\" postgres 2 minutes ago Up 2 minutes (healthy) 5432/tcp Les deux containers doivent afficher (healthy). Si l’un affiche (starting), attendez 30 secondes et relancez la commande. S’il affiche (unhealthy), consultez les logs avec docker compose logs gitrust ou docker compose logs postgres.","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Étape 3 : Démarrez la stack et suivez les logs","id":"85","title":"Étape 3 : Démarrez la stack et suivez les logs"},"86":{"body":"Ouvrez votre navigateur et rendez-vous sur http://localhost:4000. Vous devriez voir la page d’accueil gitrust avec un formulaire d’inscription. Comme l’instance est vierge, le premier compte créé devient automatiquement administrateur. Remplissez le formulaire : Pseudo : votre identifiant administrateur (ex. admin) E-mail : votre adresse e-mail Mot de passe : choisissez un mot de passe robuste (≥ 12 caractères) Cliquez sur Créer mon compte. Sortie attendue dans les logs (visible avec docker compose logs -f gitrust) : gitrust_app | 2026-04-17T10:05:00Z INFO gitrust::auth > New user registered: admin (id=1)\\ngitrust_app | 2026-04-17T10:05:00Z INFO gitrust::admin > First user promoted to administrator: admin Checkpoint final : connectez-vous avec vos identifiants. Après la connexion, vérifiez que le menu en haut à droite affiche un lien Administration (ou naviguez vers http://localhost:4000/admin). Cette page n’est accessible qu’aux administrateurs — sa présence confirme que votre compte a bien le rôle admin. L’URL de votre instance est http://localhost:4000 et votre compte administrateur est opérationnel.","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Étape 4 : Créez le premier compte administrateur","id":"86","title":"Étape 4 : Créez le premier compte administrateur"},"87":{"body":"✓ O1 accompli : la stack docker-compose est déployée — docker compose ps affiche deux containers (healthy) ✓ O2 accompli : les trois services (app, PostgreSQL, réseau interne) démarrent correctement — les logs montrent « gitrust is ready » et les migrations sont appliquées ✓ O3 accompli : le premier compte administrateur est créé et la page /admin est accessible","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Récapitulatif","id":"87","title":"Récapitulatif"},"88":{"body":"Symptôme Cause probable Correction Error: port 4000 is already in use au démarrage Un autre service occupe le port 4000 sur la machine hôte Identifiez le service avec ss -tlnp | grep 4000 ou lsof -i :4000. Arrêtez-le ou changez le port dans docker-compose.yml : remplacez \\"4000:4000\\" par \\"4001:4000\\" et accédez sur :4001 Le container gitrust_app affiche (unhealthy) ou redémarre en boucle La variable DATABASE_URL est incorrecte ou SECRET_KEY contient des caractères spéciaux non échappés Vérifiez avec docker compose logs gitrust | grep ERROR. Assurez-vous que SECRET_KEY est bien une chaîne hexadécimale sans guillemets. Rechargez avec docker compose down && docker compose up -d La page http://localhost:4000 affiche « Connection refused » Le container n’est pas encore en (healthy) ou le port n’est pas exposé Attendez 30 secondes et rechargez. Si le problème persiste, vérifiez que votre pare-feu local ( ufw status) autorise le port 4000 FATAL: password authentication failed for user \\"gitrust\\" dans les logs postgres Le mot de passe dans DATABASE_URL ne correspond pas à POSTGRES_PASSWORD Supprimez le volume PostgreSQL ( docker compose down -v) et relancez — attention : supprime toutes les données","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Et si ça ne marche pas","id":"88","title":"Et si ça ne marche pas"},"89":{"body":"→ 02 — Installation systemd : binaire natif + service : découvrez l’installation sans Docker pour un déploiement production avec hardening AppArmor (~45 min) Ou si vous souhaitez rendre cette instance accessible depuis Internet : → 04 — Mise en production : reverse-proxy TLS, SMTP, sauvegarde automatique (~90 min)","breadcrumbs":"Tutoriels » 01 — Installation avec Docker » Prochaine étape","id":"89","title":"Prochaine étape"},"9":{"body":"La référence est destinée à la consultation ponctuelle, pas à la lecture linéaire. Elle documente les formats, schémas et comportements exacts. Modèle de permissions (4 rôles) API REST v1 — authentification, pagination, codes d’erreur Schéma YAML .gitrust-ci.yml (Easy Mode) Syntaxe Markdown supportée Notifications : SSE, e-mail, préférences","breadcrumbs":"Vue d\'ensemble » Référence — informations techniques exactes","id":"9","title":"Référence — informations techniques exactes"},"90":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » 02 — Installation avec systemd » 02 — Installation avec systemd","id":"90","title":"02 — Installation avec systemd"},"91":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » 02 — Installation avec systemd » TODO","id":"91","title":"TODO"},"92":{"body":"Page à rédiger. Ce contenu est un stub généré automatiquement lors du scaffolding initial. Consultez .plans/001-scaffold-initial.md pour le contexte et la place de cette page dans le parcours.","breadcrumbs":"Tutoriels » 03 — Premier démarrage » 03 — Premier démarrage","id":"92","title":"03 — Premier démarrage"},"93":{"body":"Rédiger cette page selon son mode Diátaxis (voir CLAUDE.md) Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill pedagogie) Lier les pages voisines selon les règles de navigation Diátaxis","breadcrumbs":"Tutoriels » 03 — Premier démarrage » TODO","id":"93","title":"TODO"},"94":{"body":"","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Mise en production sur une machine Linux avec HTTPS Let’s Encrypt","id":"94","title":"Mise en production sur une machine Linux avec HTTPS Let’s Encrypt"},"95":{"body":"Procédure de référence pour déployer une instance gitrust sur une machine Linux à IP fixe, avec patte externe routée et HTTPS via Let’s Encrypt. Reproductible et testée en conditions réelles. Adaptez les valeurs suivantes à votre environnement : Placeholder Remplacez par <your-server-ip> L’IP fixe de votre serveur (ex: 192.168.1.57 sur un LAN, ou une IP publique) <your-domain> Votre FQDN principal (ex: gitrust.example.com) <acme-email> L’email pour Let’s Encrypt (ex: contact@example.com) <admin-user> L’utilisateur SSH admin sur le serveur cible","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Contexte","id":"95","title":"Contexte"},"96":{"body":"# Service Bind interne Exposition publique Variable 1 Web HTTP (UI SSR + API) 127.0.0.1:4000 :443 HTTPS via Nginx SERVER_PORT 2 SSH Git (russh) 127.0.0.1:2222 :22 via Nginx stream SSH_PORT 3 Worker CI/CD (Dagger) tâche Tokio in-process — (déclenché par push) CI_ENABLED PostgreSQL = dépendance, conteneur Docker bind loopback 127.0.0.1:5432.","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Les trois services gitrust","id":"96","title":"Les trois services gitrust"},"97":{"body":"Internet | v\\n<your-server-ip> (patte externe) | +-- :22 Nginx stream --> 127.0.0.1:2222 (gitrust SSH) +-- :80 Nginx HTTP --> 301 HTTPS (sauf /.well-known/acme-challenge) +-- :443 Nginx HTTPS --> 127.0.0.1:4000 (gitrust HTTP) +-- :2022 sshd système (accès admin, déplacé depuis :22) Loopback uniquement : +-- 127.0.0.1:4000 gitrust web +-- 127.0.0.1:2222 gitrust SSH +-- 127.0.0.1:5432 postgres docker","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Topologie réseau","id":"97","title":"Topologie réseau"},"98":{"body":"Le déplacement de sshd système de :22 vers :2022 doit être fait avant la configuration nginx stream, et doit être validé depuis une deuxième session SSH avant fermeture de la première. Sinon : lockout total (besoin d’accès console physique).","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Risque critique — ordre d’exécution","id":"98","title":"Risque critique — ordre d’exécution"},"99":{"body":"","breadcrumbs":"Tutoriels » 04 — Mise en production (réseau local) » Pré-requis","id":"99","title":"Pré-requis"}},"length":452,"save":true},"fields":["title","body","breadcrumbs"],"index":{"body":{"root":{"0":{".":{"0":{".":{"0":{".":{"0":{":":{"2":{"2":{"2":{"2":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"0":{"0":{"0":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"4":{"3":{"2":{"df":1,"docs":{"212":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"109":{"tf":1.0},"113":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"85":{"tf":1.0}}},"1":{"df":1,"docs":{"85":{"tf":1.0}}},"8":{"df":2,"docs":{"291":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"0":{"df":1,"docs":{"199":{"tf":1.0}}},"1":{"df":6,"docs":{"277":{"tf":1.0},"278":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0}},"|":{"d":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"1":{"5":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"2":{"df":12,"docs":{"24":{"tf":1.0},"25":{"tf":1.0},"277":{"tf":1.4142135623730951},"278":{"tf":1.0},"301":{"tf":1.0},"302":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0}}},"3":{"df":10,"docs":{"27":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"304":{"tf":1.0},"362":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"92":{"tf":1.0}}},"4":{"1":{"6":{"b":{"df":0,"docs":{},"|":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"29":{"tf":1.0},"293":{"tf":2.0},"6":{"tf":1.0},"7":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"85":{"tf":3.0},"86":{"tf":1.4142135623730951},"89":{"tf":1.0}}},"7":{"4":{"df":5,"docs":{"1":{"tf":1.0},"264":{"tf":1.0},"383":{"tf":1.0},"391":{"tf":1.0},"75":{"tf":1.0}}},"df":0,"docs":{}},"9":{":":{"5":{"5":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":7,"docs":{"102":{"tf":1.0},"175":{"tf":1.4142135623730951},"205":{"tf":1.0},"243":{"tf":1.0},"292":{"tf":1.0},"294":{"tf":2.0},"317":{"tf":1.0}}},"1":{".":{"1":{"0":{"df":1,"docs":{"356":{"tf":1.0}}},"df":2,"docs":{"202":{"tf":1.0},"291":{"tf":1.0}}},"2":{"df":1,"docs":{"85":{"tf":1.0}}},"5":{"df":1,"docs":{"346":{"tf":1.0}}},"8":{"0":{"df":2,"docs":{"286":{"tf":1.0},"300":{"tf":1.0}}},"2":{".":{"0":{"df":1,"docs":{"288":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{".":{"1":{"df":1,"docs":{"104":{"tf":1.0}}},"2":{"df":1,"docs":{"104":{"tf":1.0}}},"3":{"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"104":{"tf":1.0}}}}}},"/":{"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"6":{"4":{"4":{"df":1,"docs":{"294":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":5,"docs":{"124":{"tf":1.0},"289":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"327":{"tf":1.0},"389":{"tf":1.0}}},":":{"0":{"0":{"df":1,"docs":{"84":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"1":{"5":{"df":1,"docs":{"292":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":10,"docs":{"166":{"tf":1.0},"18":{"tf":1.0},"185":{"tf":1.4142135623730951},"189":{"tf":1.7320508075688772},"202":{"tf":1.0},"206":{"tf":1.0},"208":{"tf":1.7320508075688772},"211":{"tf":1.0},"288":{"tf":1.4142135623730951},"84":{"tf":1.7320508075688772}},"m":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":2.6457513110645907}}}},"1":{"df":4,"docs":{"167":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0},"211":{"tf":1.0}}},"2":{"0":{"df":3,"docs":{"277":{"tf":1.0},"278":{"tf":1.0},"349":{"tf":1.0}}},"3":{"df":1,"docs":{"349":{"tf":1.0}}},"4":{"df":1,"docs":{"349":{"tf":1.0}}},"6":{"df":1,"docs":{"349":{"tf":1.0}}},"7":{".":{"0":{".":{"0":{".":{"1":{"/":{"8":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}}},"df":0,"docs":{}},":":{"2":{"2":{"2":{"2":{"df":7,"docs":{"113":{"tf":1.4142135623730951},"121":{"tf":1.0},"124":{"tf":1.0},"133":{"tf":1.0},"187":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"0":{"0":{"0":{"df":5,"docs":{"113":{"tf":1.4142135623730951},"124":{"tf":1.0},"187":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"4":{"3":{"2":{"df":6,"docs":{"109":{"tf":1.0},"124":{"tf":1.0},"187":{"tf":1.0},"212":{"tf":1.4142135623730951},"96":{"tf":1.0},"97":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"189":{"tf":1.0},"211":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"4":{"7":{"/":{"1":{"2":{"8":{"4":{"7":{"df":1,"docs":{"289":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"289":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"349":{"tf":1.0}}},"9":{"df":1,"docs":{"349":{"tf":1.0}}},"df":6,"docs":{"151":{"tf":1.0},"189":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"81":{"tf":1.0},"86":{"tf":1.0}}},"3":{".":{"2":{".":{"0":{"df":1,"docs":{"291":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{"df":1,"docs":{"349":{"tf":1.0}}},"2":{"df":1,"docs":{"349":{"tf":1.0}}},"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}},"5":{"0":{"0":{"df":2,"docs":{"348":{"tf":1.0},"349":{"tf":1.0}}},"df":0,"docs":{}},"df":3,"docs":{"286":{"tf":1.0},"288":{"tf":1.4142135623730951},"85":{"tf":1.0}}},"6":{".":{"3":{"df":2,"docs":{"288":{"tf":1.0},"291":{"tf":1.0}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":1,"docs":{"199":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"1":{"5":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":3,"docs":{"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}}},"7":{"7":{"df":1,"docs":{"349":{"tf":1.4142135623730951}}},"df":3,"docs":{"292":{"tf":1.0},"313":{"tf":1.0},"84":{"tf":2.0}},"t":{"1":{"0":{":":{"0":{"0":{":":{"1":{"5":{"df":0,"docs":{},"z":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}}},"6":{"df":0,"docs":{},"z":{"df":1,"docs":{"85":{"tf":1.0}}}},"7":{"df":0,"docs":{},"z":{"df":1,"docs":{"85":{"tf":2.449489742783178}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{":":{"0":{"0":{"df":0,"docs":{},"z":{"df":1,"docs":{"86":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"0":{":":{"0":{"0":{"df":0,"docs":{},"z":{"df":1,"docs":{"293":{"tf":1.4142135623730951}}}},"1":{"df":0,"docs":{},"z":{"df":1,"docs":{"293":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"8":{".":{"4":{"2":{"df":1,"docs":{"289":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"2":{"df":0,"docs":{},"m":{"df":1,"docs":{"292":{"tf":1.0}}}},"df":0,"docs":{}},"7":{".":{"4":{"2":{"df":1,"docs":{"293":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"286":{"tf":1.0}}},"9":{"2":{".":{"1":{"6":{"8":{".":{"1":{".":{"0":{"/":{"2":{"4":{"df":1,"docs":{"189":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"7":{"df":1,"docs":{"95":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"\\\\":{".":{"0":{"0":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"|":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"4":{"b":{"df":0,"docs":{},"|":{"d":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"u":{"c":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"|":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}}}}},"d":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"8":{"df":0,"docs":{},"|":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"9":{"df":0,"docs":{},"|":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"z":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"a":{"/":{"4":{"\\\\":{".":{"0":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":1,"docs":{"105":{"tf":1.0}}},"b":{"df":1,"docs":{"106":{"tf":1.0}}},"c":{"df":2,"docs":{"107":{"tf":1.0},"122":{"tf":1.0}}},"d":{"df":3,"docs":{"108":{"tf":1.0},"127":{"tf":1.0},"189":{"tf":1.0}}},"df":35,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"127":{"tf":1.0},"146":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"169":{"tf":1.0},"17":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":1.4142135623730951},"202":{"tf":1.0},"205":{"tf":1.0},"206":{"tf":1.4142135623730951},"207":{"tf":1.0},"208":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"233":{"tf":1.0},"244":{"tf":1.0},"288":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"294":{"tf":1.7320508075688772},"316":{"tf":1.0},"317":{"tf":1.4142135623730951},"346":{"tf":2.0},"349":{"tf":3.605551275463989},"352":{"tf":2.23606797749979},"357":{"tf":1.4142135623730951},"380":{"tf":1.0},"389":{"tf":1.0},"423":{"tf":1.0},"76":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"319":{"tf":1.0}}}},"h":{"df":4,"docs":{"121":{"tf":1.0},"127":{"tf":1.0},"189":{"tf":2.6457513110645907},"208":{"tf":2.8284271247461903}}},"m":{"df":1,"docs":{"189":{"tf":1.0}}},"w":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0}}}},"2":{".":{"0":{"5":{"df":1,"docs":{"356":{"tf":1.0}}},"df":0,"docs":{}},"1":{"df":2,"docs":{"171":{"tf":1.0},"392":{"tf":1.0}}},"2":{"df":3,"docs":{"172":{"tf":1.0},"393":{"tf":1.0},"403":{"tf":1.0}}},"3":{"df":2,"docs":{"173":{"tf":1.0},"394":{"tf":1.0}}},"4":{"3":{".":{"0":{"df":1,"docs":{"288":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"174":{"tf":1.0}}},"5":{"df":1,"docs":{"175":{"tf":1.0}}},"df":0,"docs":{},"x":{"df":1,"docs":{"286":{"tf":1.0}}}},"/":{"2":{"df":1,"docs":{"291":{"tf":1.0}}},"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"0":{"df":1,"docs":{"193":{"tf":1.0}}},"df":3,"docs":{"119":{"tf":1.0},"316":{"tf":1.4142135623730951},"426":{"tf":1.0}}},"2":{"2":{"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}}},"df":18,"docs":{"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.4142135623730951},"106":{"tf":1.7320508075688772},"107":{"tf":1.4142135623730951},"108":{"tf":1.4142135623730951},"109":{"tf":1.0},"113":{"tf":1.0},"116":{"tf":1.0},"122":{"tf":1.4142135623730951},"124":{"tf":1.0},"127":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.4142135623730951},"208":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}}},"4":{"df":1,"docs":{"288":{"tf":1.4142135623730951}}},"6":{"df":5,"docs":{"20":{"tf":1.0},"293":{"tf":2.0},"362":{"tf":1.0},"85":{"tf":3.0},"86":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"3":{".":{"0":{".":{"1":{"1":{"3":{".":{"4":{"2":{"df":1,"docs":{"207":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"8":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"df":9,"docs":{"1":{"tf":1.0},"15":{"tf":1.0},"202":{"tf":1.0},"207":{"tf":1.0},"326":{"tf":1.0},"357":{"tf":1.0},"7":{"tf":1.4142135623730951},"73":{"tf":1.0},"85":{"tf":1.0}}},"2":{",":{"2":{"2":{"2":{"2":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"0":{"4":{"df":2,"docs":{"151":{"tf":1.0},"81":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}}},"0":{"0":{"df":1,"docs":{"104":{"tf":1.0}}},"2":{"2":{"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"2":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"85":{"tf":1.0}}}},"df":0,"docs":{}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":18,"docs":{"1":{"tf":1.0},"104":{"tf":1.0},"121":{"tf":1.4142135623730951},"134":{"tf":1.4142135623730951},"16":{"tf":1.0},"187":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"287":{"tf":1.0},"300":{"tf":1.0},"326":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0},"424":{"tf":1.0},"75":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951}},"}":{":":{"2":{"2":{"2":{"2":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"3":{"df":1,"docs":{"326":{"tf":1.0}}},"df":0,"docs":{}},"6":{".":{"0":{"0":{"df":1,"docs":{"294":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"294":{"tf":1.0}}},"\\\\":{"b":{"df":0,"docs":{},"|":{":":{"2":{"0":{"2":{"2":{"\\\\":{"b":{"df":2,"docs":{"105":{"tf":1.0},"122":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"2":{"2":{"\\\\":{"b":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":17,"docs":{"102":{"tf":1.0},"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"107":{"tf":2.23606797749979},"120":{"tf":1.0},"121":{"tf":2.0},"122":{"tf":2.0},"124":{"tf":1.0},"134":{"tf":1.0},"153":{"tf":1.0},"160":{"tf":1.0},"163":{"tf":1.0},"187":{"tf":1.0},"23":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.4142135623730951},"98":{"tf":1.0}}},"3":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"4":{"df":1,"docs":{"291":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"4":{"df":2,"docs":{"102":{"tf":1.4142135623730951},"81":{"tf":1.0}},"h":{"df":2,"docs":{"189":{"tf":1.7320508075688772},"208":{"tf":1.4142135623730951}}}},"5":{"6":{"df":3,"docs":{"243":{"tf":1.0},"382":{"tf":1.0},"393":{"tf":1.0}}},"df":2,"docs":{"24":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"6":{"df":1,"docs":{"362":{"tf":1.0}}},"8":{".":{"0":{".":{"1":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},">":{"&":{"1":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}},"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"104":{"tf":1.4142135623730951},"122":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"\\\\":{".":{"1":{"df":0,"docs":{},"|":{"df":0,"docs":{},"l":{"df":0,"docs":{},"m":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"/":{"0":{"\\\\":{".":{"2":{"df":0,"docs":{},"|":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"df":0,"docs":{},"p":{"\\\\":{":":{"\\\\":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"/":{"5":{"\\\\":{".":{"8":{"0":{"3":{"df":0,"docs":{},"|":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"6":{"df":0,"docs":{},"|":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"t":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"/":{"0":{"\\\\":{".":{"2":{"df":0,"docs":{},"|":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"z":{"df":0,"docs":{},"|":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"h":{"a":{"0":{"df":0,"docs":{},"s":{"/":{"2":{"\\\\":{".":{"0":{"df":0,"docs":{},"|":{"d":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":33,"docs":{"106":{"tf":1.0},"109":{"tf":1.0},"147":{"tf":1.0},"16":{"tf":1.0},"163":{"tf":1.0},"165":{"tf":1.0},"170":{"tf":1.0},"18":{"tf":1.0},"189":{"tf":2.0},"205":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.7320508075688772},"239":{"tf":1.0},"244":{"tf":1.0},"289":{"tf":1.0},"293":{"tf":1.0},"317":{"tf":1.7320508075688772},"319":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.4142135623730951},"349":{"tf":1.4142135623730951},"351":{"tf":1.4142135623730951},"355":{"tf":1.0},"356":{"tf":1.4142135623730951},"357":{"tf":1.4142135623730951},"380":{"tf":1.0},"391":{"tf":1.0},"424":{"tf":1.0},"76":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":2.0},"96":{"tf":1.0}},"f":{"a":{"df":14,"docs":{"10":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"18":{"tf":2.0},"217":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"281":{"tf":1.0},"35":{"tf":1.0},"432":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}},"g":{"df":2,"docs":{"133":{"tf":1.0},"202":{"tf":1.0}}},"h":{"0":{"0":{"df":1,"docs":{"446":{"tf":1.0}}},"df":0,"docs":{}},"df":2,"docs":{"189":{"tf":1.4142135623730951},"208":{"tf":1.4142135623730951}}}},"3":{".":{"1":{"df":3,"docs":{"177":{"tf":1.0},"191":{"tf":1.0},"396":{"tf":1.0}}},"2":{"df":3,"docs":{"178":{"tf":1.0},"192":{"tf":1.0},"397":{"tf":1.0}}},"3":{"df":2,"docs":{"179":{"tf":1.0},"193":{"tf":1.0}}},"4":{"df":2,"docs":{"180":{"tf":1.0},"194":{"tf":1.0}}},"5":{"df":2,"docs":{"181":{"tf":1.0},"195":{"tf":1.0}}},"6":{"df":1,"docs":{"196":{"tf":1.0}}},"7":{"df":1,"docs":{"197":{"tf":1.0}}},"8":{"df":1,"docs":{"198":{"tf":1.0}}},"9":{"df":2,"docs":{"199":{"tf":1.0},"84":{"tf":1.0}}},"df":0,"docs":{}},"/":{"3":{"df":1,"docs":{"294":{"tf":1.4142135623730951}}},"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"1":{"df":2,"docs":{"133":{"tf":1.0},"97":{"tf":1.0}}},"2":{"df":4,"docs":{"119":{"tf":1.0},"348":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0}}},"df":15,"docs":{"121":{"tf":1.0},"18":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"189":{"tf":1.0},"202":{"tf":1.0},"208":{"tf":1.0},"23":{"tf":1.0},"414":{"tf":1.0},"73":{"tf":1.0},"79":{"tf":1.0},"81":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"88":{"tf":1.0}},"m":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}}},"2":{"df":2,"docs":{"290":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951}}},"6":{"8":{"/":{"8":{"7":{"6":{"df":1,"docs":{"356":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":1,"docs":{"111":{"tf":1.0}}},"b":{"df":1,"docs":{"112":{"tf":1.0}}},"c":{"df":1,"docs":{"113":{"tf":1.0}}},"df":29,"docs":{"1":{"tf":1.0},"102":{"tf":1.0},"104":{"tf":1.0},"110":{"tf":1.0},"127":{"tf":1.4142135623730951},"148":{"tf":1.0},"165":{"tf":1.0},"176":{"tf":1.0},"189":{"tf":2.0},"19":{"tf":1.0},"190":{"tf":1.0},"205":{"tf":1.0},"208":{"tf":2.0},"244":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":1.0},"294":{"tf":1.4142135623730951},"318":{"tf":1.0},"349":{"tf":1.4142135623730951},"357":{"tf":1.0},"380":{"tf":1.0},"395":{"tf":1.0},"425":{"tf":1.0},"72":{"tf":1.0},"76":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"96":{"tf":1.0}},"s":{"df":1,"docs":{"292":{"tf":1.0}}},"x":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}},"×":{"/":{"2":{"4":{"df":0,"docs":{},"h":{"df":1,"docs":{"208":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"4":{".":{"1":{"df":3,"docs":{"201":{"tf":1.0},"351":{"tf":1.0},"399":{"tf":1.0}}},"2":{"0":{"df":1,"docs":{"289":{"tf":1.0}}},"df":3,"docs":{"202":{"tf":1.0},"352":{"tf":1.0},"400":{"tf":1.0}}},"3":{"df":3,"docs":{"203":{"tf":1.0},"353":{"tf":1.0},"401":{"tf":1.0}}},"4":{"df":2,"docs":{"354":{"tf":1.0},"402":{"tf":1.0}}},"5":{"df":1,"docs":{"355":{"tf":1.0}}},"df":0,"docs":{}},"/":{"4":{"df":1,"docs":{"85":{"tf":1.0}}},"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"0":{"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"85":{"tf":1.0}}}},"df":0,"docs":{}}},":":{"4":{"0":{"0":{"0":{"df":2,"docs":{"84":{"tf":1.0},"88":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"287":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":12,"docs":{"1":{"tf":1.0},"134":{"tf":1.4142135623730951},"16":{"tf":1.0},"287":{"tf":1.0},"326":{"tf":1.0},"375":{"tf":1.0},"413":{"tf":1.4142135623730951},"414":{"tf":1.0},"75":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.7320508075688772},"88":{"tf":2.23606797749979}},"|":{"2":{"2":{"2":{"2":{"df":1,"docs":{"113":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"1":{":":{"4":{"0":{"0":{"0":{"df":1,"docs":{"88":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"313":{"tf":1.0},"326":{"tf":1.0},"88":{"tf":1.0}}},"df":0,"docs":{}},"1":{"/":{"4":{"0":{"3":{"/":{"4":{"2":{"2":{"/":{"4":{"2":{"9":{"df":1,"docs":{"191":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"189":{"tf":1.0},"192":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":4,"docs":{"184":{"tf":1.0},"196":{"tf":1.0},"319":{"tf":1.0},"396":{"tf":1.0}},"|":{"4":{"0":{"3":{"df":2,"docs":{"192":{"tf":1.0},"195":{"tf":1.4142135623730951}},"|":{"4":{"2":{"2":{"df":0,"docs":{},"|":{"4":{"2":{"9":{"df":1,"docs":{"191":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"3":{"df":2,"docs":{"196":{"tf":1.0},"396":{"tf":1.0}}},"4":{"df":1,"docs":{"21":{"tf":1.0}}},"9":{"6":{"df":3,"docs":{"383":{"tf":1.0},"426":{"tf":1.0},"84":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":1,"docs":{"184":{"tf":1.0}}},"2":{"2":{"df":1,"docs":{"23":{"tf":1.0}}},"df":3,"docs":{"293":{"tf":1.0},"356":{"tf":1.0},"85":{"tf":1.0}}},"4":{"3":{"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}}},"df":6,"docs":{"124":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"202":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0}}},"df":0,"docs":{}},"5":{"df":5,"docs":{"278":{"tf":1.0},"286":{"tf":1.0},"349":{"tf":1.4142135623730951},"73":{"tf":1.0},"89":{"tf":1.0}},"k":{"df":1,"docs":{"292":{"tf":1.0}}}},"7":{"df":1,"docs":{"207":{"tf":1.0}}},"a":{"7":{"df":0,"docs":{},"f":{"2":{"c":{"9":{"df":0,"docs":{},"e":{"1":{"b":{"8":{"d":{"3":{"df":0,"docs":{},"f":{"6":{"a":{"0":{"df":0,"docs":{},"e":{"5":{"c":{"2":{"b":{"9":{"d":{"7":{"df":0,"docs":{},"f":{"4":{"a":{"1":{"df":0,"docs":{},"e":{"8":{"c":{"3":{"b":{"6":{"d":{"9":{"df":0,"docs":{},"f":{"2":{"a":{"5":{"df":0,"docs":{},"e":{"8":{"c":{"1":{"b":{"4":{"d":{"7":{"df":0,"docs":{},"f":{"0":{"a":{"3":{"df":0,"docs":{},"e":{"6":{"c":{"9":{"b":{"2":{"d":{"5":{"df":0,"docs":{},"f":{"8":{"a":{"df":1,"docs":{"290":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"115":{"tf":1.0}}},"b":{"df":1,"docs":{"116":{"tf":1.0}}},"c":{"df":1,"docs":{"117":{"tf":1.0}}},"d":{"df":1,"docs":{"118":{"tf":1.0}}},"df":31,"docs":{"1":{"tf":1.0},"114":{"tf":1.0},"149":{"tf":1.0},"150":{"tf":1.0},"182":{"tf":1.0},"184":{"tf":1.0},"186":{"tf":1.0},"189":{"tf":1.4142135623730951},"20":{"tf":1.0},"200":{"tf":1.0},"205":{"tf":1.0},"208":{"tf":1.0},"245":{"tf":1.0},"277":{"tf":1.0},"281":{"tf":1.0},"291":{"tf":1.0},"319":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"354":{"tf":1.0},"357":{"tf":1.0},"380":{"tf":1.0},"389":{"tf":1.0},"398":{"tf":1.0},"416":{"tf":1.0},"426":{"tf":1.0},"53":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"86":{"tf":1.0},"9":{"tf":1.0}},"e":{"df":1,"docs":{"119":{"tf":1.0}}},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"191":{"tf":1.0}}}}},"5":{"/":{"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"0":{"df":1,"docs":{"205":{"tf":1.4142135623730951}}},"df":1,"docs":{"21":{"tf":1.0}}},"df":0,"docs":{}},"4":{"3":{"2":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"85":{"tf":1.0}}}},"df":0,"docs":{}}},"df":6,"docs":{"109":{"tf":1.0},"134":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0},"212":{"tf":1.0},"75":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":1,"docs":{"121":{"tf":1.0}}},"b":{"df":2,"docs":{"122":{"tf":1.0},"370":{"tf":1.0}}},"c":{"df":1,"docs":{"123":{"tf":1.0}}},"df":22,"docs":{"107":{"tf":1.0},"120":{"tf":1.0},"127":{"tf":1.7320508075688772},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"165":{"tf":1.0},"186":{"tf":1.0},"189":{"tf":2.6457513110645907},"202":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":2.449489742783178},"21":{"tf":1.0},"249":{"tf":1.0},"290":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"356":{"tf":1.0},"380":{"tf":1.0},"403":{"tf":1.0},"427":{"tf":1.0},"84":{"tf":1.0}},"m":{"df":1,"docs":{"189":{"tf":1.7320508075688772}}},"s":{"df":1,"docs":{"84":{"tf":1.0}}},"x":{"df":2,"docs":{"356":{"tf":1.4142135623730951},"357":{"tf":1.0}}}},"6":{"/":{"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"df":3,"docs":{"102":{"tf":1.0},"109":{"tf":1.0},"111":{"tf":1.0}}},"df":2,"docs":{"349":{"tf":1.0},"351":{"tf":1.0}}},"1":{"2":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"3":{"7":{"9":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"df":2,"docs":{"102":{"tf":1.0},"291":{"tf":1.0}}},"\\\\":{".":{"0":{"0":{"\\\\":{".":{"8":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"|":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":15,"docs":{"124":{"tf":1.0},"146":{"tf":1.0},"157":{"tf":1.0},"18":{"tf":1.4142135623730951},"189":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"250":{"tf":1.0},"276":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.0},"293":{"tf":1.0},"298":{"tf":1.0},"357":{"tf":1.0},"428":{"tf":1.0}}},"7":{"1":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"1":{"5":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"a":{"df":1,"docs":{"126":{"tf":1.0}}},"b":{"df":1,"docs":{"127":{"tf":1.0}}},"df":10,"docs":{"125":{"tf":1.0},"161":{"tf":1.0},"166":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.4142135623730951},"243":{"tf":1.0},"251":{"tf":1.0},"294":{"tf":1.0},"429":{"tf":1.0},"82":{"tf":1.0}}},"8":{".":{"1":{"df":1,"docs":{"210":{"tf":1.0}}},"2":{"df":1,"docs":{"211":{"tf":1.0}}},"3":{"df":1,"docs":{"212":{"tf":1.0}}},"4":{"df":1,"docs":{"213":{"tf":1.0}}},"df":0,"docs":{}},"0":{",":{"4":{"4":{"3":{"df":1,"docs":{"208":{"tf":2.6457513110645907}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}}},"8":{"0":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"189":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":3,"docs":{"187":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0}}},"1":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"189":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":3,"docs":{"187":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0}}},"df":0,"docs":{}},"df":5,"docs":{"124":{"tf":1.0},"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"187":{"tf":1.0},"97":{"tf":1.0}}},"1":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"1":{"5":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"a":{"df":1,"docs":{"129":{"tf":1.0}}},"b":{"df":1,"docs":{"130":{"tf":1.0}}},"c":{"df":1,"docs":{"131":{"tf":1.0}}},"df":10,"docs":{"128":{"tf":1.0},"162":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.0},"214":{"tf":1.0},"243":{"tf":1.0},"256":{"tf":1.0},"354":{"tf":1.0},"84":{"tf":1.0}},"f":{"4":{"0":{"df":0,"docs":{},"f":{"c":{"5":{"9":{"df":0,"docs":{},"f":{"df":1,"docs":{"288":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"9":{"0":{"df":6,"docs":{"278":{"tf":1.0},"301":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0}}},"8":{"df":1,"docs":{"292":{"tf":1.0}}},"df":6,"docs":{"104":{"tf":1.0},"132":{"tf":1.0},"165":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0},"214":{"tf":1.4142135623730951}}},"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"d":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"=":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"189":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"189":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"a":{"1":{"[":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"b":{"2":{"c":{"3":{"d":{"df":1,"docs":{"294":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"[":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"2":{"df":1,"docs":{"356":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":1,"docs":{"356":{"tf":1.0}}},"3":{"[":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"72":{"tf":1.0}}}}},"a":{"a":{"a":{"c":{"3":{"df":0,"docs":{},"n":{"df":0,"docs":{},"z":{"a":{"c":{"1":{"df":0,"docs":{},"l":{"df":0,"docs":{},"z":{"d":{"df":0,"docs":{},"i":{"1":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"5":{"a":{"a":{"a":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"19":{"tf":1.0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"b":{"c":{"d":{"1":{"2":{"3":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"19":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"146":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"171":{"tf":1.4142135623730951},"183":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"244":{"tf":1.0},"363":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"420":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":4,"docs":{"189":{"tf":1.4142135623730951},"192":{"tf":1.0},"196":{"tf":1.0},"208":{"tf":1.0}},"s":{"df":5,"docs":{"189":{"tf":1.4142135623730951},"199":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"208":{"tf":1.0}},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":2,"docs":{"192":{"tf":1.4142135623730951},"205":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"23":{"tf":1.0}},"u":{"df":0,"docs":{},"é":{"df":1,"docs":{"23":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"19":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":22,"docs":{"1":{"tf":1.0},"14":{"tf":1.0},"179":{"tf":1.0},"199":{"tf":1.0},"208":{"tf":2.449489742783178},"291":{"tf":1.0},"318":{"tf":1.0},"323":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"333":{"tf":1.0},"37":{"tf":1.0},"424":{"tf":2.23606797749979},"425":{"tf":2.23606797749979},"427":{"tf":1.0},"428":{"tf":1.7320508075688772},"449":{"tf":1.0},"72":{"tf":1.0},"8":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":5,"docs":{"372":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"427":{"tf":1.4142135623730951},"428":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"22":{"tf":1.7320508075688772},"299":{"tf":1.7320508075688772},"87":{"tf":1.7320508075688772}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"293":{"tf":1.0}}}}}},"è":{"d":{"df":1,"docs":{"17":{"tf":1.0}}},"df":5,"docs":{"101":{"tf":1.0},"171":{"tf":1.0},"174":{"tf":1.0},"330":{"tf":1.0},"97":{"tf":1.0}}},"é":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"332":{"tf":1.4142135623730951},"80":{"tf":1.0}}},"z":{"df":1,"docs":{"88":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":5,"docs":{"108":{"tf":1.0},"117":{"tf":1.0},"129":{"tf":1.0},"134":{"tf":1.0},"95":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"102":{"tf":1.0},"107":{"tf":1.0},"188":{"tf":1.0},"204":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{")":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":9,"docs":{"189":{"tf":1.0},"213":{"tf":1.0},"243":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"319":{"tf":1.0},"376":{"tf":1.0},"393":{"tf":1.0}}}},"v":{"df":13,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"168":{"tf":1.4142135623730951},"172":{"tf":1.0},"173":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"211":{"tf":1.0},"23":{"tf":1.7320508075688772},"243":{"tf":2.449489742783178},"378":{"tf":1.0},"380":{"tf":1.0},"443":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"b":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"b":{"df":1,"docs":{"353":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"r":{"/":{"d":{"df":0,"docs":{},"é":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"317":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"é":{"df":5,"docs":{"18":{"tf":1.4142135623730951},"186":{"tf":1.0},"204":{"tf":1.0},"22":{"tf":1.4142135623730951},"326":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":6,"docs":{"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}}}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"[":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"356":{"tf":1.0}}}}}}},"df":4,"docs":{"104":{"tf":1.0},"348":{"tf":1.0},"351":{"tf":1.0},"356":{"tf":1.0}}}}}}},"d":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"113":{"tf":1.0},"199":{"tf":1.0},"447":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"291":{"tf":1.0},"442":{"tf":1.0},"95":{"tf":1.0}}}},"é":{"df":2,"docs":{"450":{"tf":1.0},"76":{"tf":1.0}}}}}},"d":{"df":4,"docs":{"123":{"tf":1.0},"166":{"tf":1.0},"23":{"tf":1.0},"294":{"tf":1.0}}},"df":2,"docs":{"243":{"tf":1.0},"292":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":3,"docs":{"314":{"tf":1.0},"325":{"tf":1.0},"332":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":6,"docs":{"232":{"tf":1.0},"240":{"tf":1.0},"249":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"257":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.0}}}}}}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"=":{"<":{"a":{"c":{"df":0,"docs":{},"m":{"df":1,"docs":{"102":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"@":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"290":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"238":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"=":{"$":{"df":0,"docs":{},"{":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"w":{"d":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"1":{"2":{"3":{"df":1,"docs":{"290":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":3,"docs":{"102":{"tf":1.4142135623730951},"238":{"tf":1.0},"293":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"w":{"d":{"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"238":{"tf":1.0},"293":{"tf":1.0}},"e":{"=":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"102":{"tf":1.0},"290":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":36,"docs":{"102":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.7320508075688772},"109":{"tf":1.0},"116":{"tf":1.0},"122":{"tf":1.0},"134":{"tf":1.0},"178":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"208":{"tf":1.4142135623730951},"223":{"tf":1.0},"232":{"tf":1.0},"237":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"293":{"tf":1.4142135623730951},"313":{"tf":1.0},"314":{"tf":1.0},"316":{"tf":1.0},"328":{"tf":1.0},"332":{"tf":2.449489742783178},"375":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0},"86":{"tf":2.0},"87":{"tf":1.0},"95":{"tf":1.4142135623730951},"97":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":9,"docs":{"240":{"tf":1.0},"251":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"72":{"tf":1.4142135623730951},"80":{"tf":1.0},"81":{"tf":1.0},"86":{"tf":2.23606797749979},"87":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":3,"docs":{"125":{"tf":1.0},"210":{"tf":1.0},"451":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"/":{"0":{"1":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":8,"docs":{"179":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"314":{"tf":1.0},"332":{"tf":1.0},"375":{"tf":1.0},"71":{"tf":1.0},"86":{"tf":1.4142135623730951}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"86":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"424":{"tf":1.4142135623730951},"425":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"373":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"e":{"df":2,"docs":{"243":{"tf":1.0},"382":{"tf":1.0}}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"df":14,"docs":{"106":{"tf":1.0},"146":{"tf":1.0},"18":{"tf":2.23606797749979},"19":{"tf":1.7320508075688772},"199":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"294":{"tf":1.0},"299":{"tf":1.0},"426":{"tf":1.0},"85":{"tf":1.7320508075688772},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.4142135623730951}},"é":{"df":2,"docs":{"21":{"tf":1.0},"237":{"tf":1.0}}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"19":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":6,"docs":{"150":{"tf":1.0},"153":{"tf":1.0},"172":{"tf":1.0},"189":{"tf":1.0},"199":{"tf":1.0},"208":{"tf":1.0}},"|":{"df":0,"docs":{},"v":{"a":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"v":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{"\\\\":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"/":{"1":{"\\\\":{".":{"0":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"393":{"tf":1.0}}}},"o":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"117":{"tf":1.0},"129":{"tf":1.0}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"189":{"tf":1.0}}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":24,"docs":{"121":{"tf":1.0},"129":{"tf":1.0},"13":{"tf":1.0},"16":{"tf":1.0},"166":{"tf":1.0},"172":{"tf":1.0},"180":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"202":{"tf":1.0},"21":{"tf":1.0},"214":{"tf":1.4142135623730951},"257":{"tf":1.4142135623730951},"258":{"tf":1.4142135623730951},"259":{"tf":1.0},"279":{"tf":1.7320508075688772},"315":{"tf":1.0},"318":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"294":{"tf":1.0},"296":{"tf":1.0}}}},"é":{"df":3,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"426":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"205":{"tf":1.0},"443":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.4142135623730951}}}}},"i":{"c":{"df":3,"docs":{"327":{"tf":1.0},"328":{"tf":1.4142135623730951},"428":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":3,"docs":{"424":{"tf":1.4142135623730951},"425":{"tf":1.0},"428":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"l":{"=":{"(":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"166":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"173":{"tf":1.0},"253":{"tf":1.0},"351":{"tf":1.0},"421":{"tf":1.0}}},"z":{"df":1,"docs":{"287":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":7,"docs":{"242":{"tf":1.0},"257":{"tf":1.4142135623730951},"259":{"tf":1.0},"316":{"tf":1.4142135623730951},"351":{"tf":1.0},"364":{"tf":1.0},"392":{"tf":1.0}}}}}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"102":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":3,"docs":{"243":{"tf":1.0},"249":{"tf":1.4142135623730951},"255":{"tf":1.0}}}}}}}}}},"df":2,"docs":{"108":{"tf":2.0},"173":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"84":{"tf":1.0},"85":{"tf":1.0}},"e":{":":{"3":{"df":1,"docs":{"164":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"88":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":3,"docs":{"348":{"tf":1.0},"414":{"tf":1.0},"427":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"352":{"tf":1.0}}}}}},"df":5,"docs":{"199":{"tf":1.0},"23":{"tf":1.0},"316":{"tf":1.0},"355":{"tf":1.0},"444":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"214":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":5,"docs":{"176":{"tf":1.0},"181":{"tf":1.0},"184":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"362":{"tf":1.0}},"n":{"df":1,"docs":{"19":{"tf":1.0}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"i":{"df":1,"docs":{"319":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"l":{"df":3,"docs":{"173":{"tf":1.0},"317":{"tf":1.4142135623730951},"319":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":1,"docs":{"331":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"421":{"tf":1.0}}},"df":0,"docs":{}}},"df":7,"docs":{"1":{"tf":1.0},"264":{"tf":1.0},"280":{"tf":1.0},"383":{"tf":1.4142135623730951},"388":{"tf":1.0},"391":{"tf":1.0},"75":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":4,"docs":{"376":{"tf":1.0},"393":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0}}}}},"p":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"199":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"196":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"v":{"1":{"/":{"(":{"?":{"!":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"192":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"180":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"180":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"u":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"180":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"195":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"195":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}}}}}},"df":4,"docs":{"192":{"tf":1.0},"196":{"tf":1.4142135623730951},"202":{"tf":1.0},"375":{"tf":1.0}}},"df":0,"docs":{}}},"<":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}},"df":30,"docs":{"179":{"tf":1.4142135623730951},"184":{"tf":1.0},"186":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":2.8284271247461903},"192":{"tf":1.7320508075688772},"196":{"tf":1.4142135623730951},"199":{"tf":1.0},"2":{"tf":1.0},"202":{"tf":1.0},"204":{"tf":1.4142135623730951},"205":{"tf":1.4142135623730951},"208":{"tf":2.23606797749979},"279":{"tf":1.0},"280":{"tf":2.0},"287":{"tf":1.0},"3":{"tf":1.0},"316":{"tf":1.4142135623730951},"318":{"tf":1.0},"319":{"tf":1.0},"343":{"tf":1.0},"375":{"tf":2.8284271247461903},"384":{"tf":1.0},"404":{"tf":1.0},"408":{"tf":1.0},"414":{"tf":1.0},"449":{"tf":2.23606797749979},"55":{"tf":1.0},"9":{"tf":1.0},"96":{"tf":1.0}}},"p":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"(":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"102":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"243":{"tf":1.0},"249":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"=":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}},"e":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":7,"docs":{"232":{"tf":1.0},"239":{"tf":1.0},"240":{"tf":1.0},"241":{"tf":1.0},"244":{"tf":1.0},"255":{"tf":1.0},"75":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"4":{"0":{"0":{"0":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"î":{"df":0,"docs":{},"t":{"df":2,"docs":{"175":{"tf":1.0},"20":{"tf":1.0}},"r":{"a":{"df":1,"docs":{"257":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"446":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":1,"docs":{"89":{"tf":1.0}}}}},"t":{"df":1,"docs":{"82":{"tf":1.0}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"363":{"tf":1.0}}}}}}},"u":{"df":1,"docs":{"293":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"236":{"tf":1.0}}}}}}}},"df":7,"docs":{"316":{"tf":1.4142135623730951},"319":{"tf":1.0},"377":{"tf":1.4142135623730951},"414":{"tf":1.7320508075688772},"82":{"tf":1.4142135623730951},"84":{"tf":1.0},"87":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"294":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":3,"docs":{"244":{"tf":1.0},"319":{"tf":1.0},"360":{"tf":1.0}},"é":{"df":1,"docs":{"174":{"tf":1.0}}}},"n":{"d":{"df":1,"docs":{"317":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"c":{"df":6,"docs":{"178":{"tf":1.0},"18":{"tf":1.4142135623730951},"388":{"tf":1.0},"403":{"tf":1.0},"80":{"tf":1.0},"84":{"tf":1.0}}},"df":2,"docs":{"293":{"tf":1.0},"85":{"tf":1.0}},"q":{"df":0,"docs":{},"u":{"df":75,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"281":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"396":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"é":{"df":2,"docs":{"299":{"tf":1.0},"87":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"3":{"tf":1.0},"301":{"tf":1.0}}}}}},"o":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"316":{"tf":1.0},"327":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"240":{"tf":1.0},"359":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"(":{"&":{"d":{"b":{"df":1,"docs":{"257":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"(":{"&":{"d":{"b":{"df":1,"docs":{"257":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"242":{"tf":1.0},"257":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}}}}},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"19":{"tf":1.4142135623730951}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"85":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"è":{"df":18,"docs":{"107":{"tf":1.0},"133":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.4142135623730951},"169":{"tf":1.0},"175":{"tf":1.0},"193":{"tf":1.0},"205":{"tf":1.0},"23":{"tf":1.0},"234":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"293":{"tf":1.0},"324":{"tf":1.0},"333":{"tf":1.4142135623730951},"347":{"tf":1.0},"86":{"tf":1.0}}}},"t":{"df":9,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"115":{"tf":1.4142135623730951},"126":{"tf":1.0},"133":{"tf":1.0},"167":{"tf":1.0},"188":{"tf":1.0},"213":{"tf":1.0},"288":{"tf":1.0}}}},"r":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"167":{"tf":1.0}}}}},"df":0,"docs":{}}}},"r":{"df":1,"docs":{"428":{"tf":1.0}}}},"c":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"364":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"237":{"tf":1.0}}}}}}}},"d":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"df":1,"docs":{"376":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"414":{"tf":1.0}}}}}}}}}}}}}},"df":3,"docs":{"244":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.0}},"h":{"df":1,"docs":{"447":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":11,"docs":{"148":{"tf":1.0},"169":{"tf":1.0},"268":{"tf":1.0},"280":{"tf":1.0},"3":{"tf":1.0},"325":{"tf":1.0},"357":{"tf":1.0},"369":{"tf":1.0},"375":{"tf":1.0},"380":{"tf":1.0},"76":{"tf":1.0}}}}}},"df":0,"docs":{}}},"v":{"df":2,"docs":{"180":{"tf":1.4142135623730951},"448":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"113":{"tf":1.0},"152":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"85":{"tf":1.0}}}}},"ê":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"314":{"tf":1.0}}},"z":{"df":1,"docs":{"88":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"m":{"a":{"df":2,"docs":{"375":{"tf":1.7320508075688772},"418":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"316":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"316":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"df":7,"docs":{"285":{"tf":1.0},"287":{"tf":1.0},"292":{"tf":1.4142135623730951},"299":{"tf":1.0},"375":{"tf":1.0},"400":{"tf":1.0},"418":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"88":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"n":{"c":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"277":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":10,"docs":{"278":{"tf":1.0},"281":{"tf":1.0},"304":{"tf":1.0},"316":{"tf":1.4142135623730951},"318":{"tf":1.4142135623730951},"328":{"tf":1.0},"352":{"tf":1.0},"359":{"tf":1.4142135623730951},"373":{"tf":1.0},"440":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"4":{"\\\\":{".":{"0":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"1":{"\\\\":{".":{"0":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"|":{"b":{"df":0,"docs":{},"w":{"df":0,"docs":{},"h":{"3":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"394":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"85":{"tf":1.0},"88":{"tf":1.0}}}},"r":{"df":1,"docs":{"184":{"tf":1.0}}},"u":{"df":31,"docs":{"105":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"119":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.4142135623730951},"14":{"tf":1.0},"152":{"tf":1.0},"160":{"tf":1.0},"163":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"204":{"tf":1.0},"21":{"tf":1.0},"212":{"tf":1.0},"278":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.4142135623730951},"290":{"tf":1.0},"291":{"tf":1.7320508075688772},"292":{"tf":1.4142135623730951},"293":{"tf":1.0},"294":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772},"86":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":2,"docs":{"166":{"tf":1.0},"88":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":1,"docs":{"179":{"tf":1.0}}}},"df":0,"docs":{}}}}},"u":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":14,"docs":{"15":{"tf":1.0},"210":{"tf":1.0},"237":{"tf":1.0},"247":{"tf":1.4142135623730951},"248":{"tf":1.0},"253":{"tf":1.0},"290":{"tf":1.0},"292":{"tf":1.0},"327":{"tf":1.0},"362":{"tf":1.0},"379":{"tf":1.0},"403":{"tf":1.0},"418":{"tf":1.0},"81":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"_":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}},"df":2,"docs":{"346":{"tf":1.0},"348":{"tf":1.0}}}}}},"df":11,"docs":{"10":{"tf":1.0},"225":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.0},"376":{"tf":1.4142135623730951},"380":{"tf":1.0},"390":{"tf":1.4142135623730951},"393":{"tf":1.0},"416":{"tf":1.0},"447":{"tf":1.4142135623730951},"74":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"348":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"é":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"df":48,"docs":{"129":{"tf":1.0},"148":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"161":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"172":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"180":{"tf":1.0},"187":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.0},"21":{"tf":1.0},"214":{"tf":1.0},"23":{"tf":1.4142135623730951},"234":{"tf":1.0},"237":{"tf":1.0},"242":{"tf":1.7320508075688772},"243":{"tf":1.0},"244":{"tf":1.0},"245":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.4142135623730951},"286":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"330":{"tf":1.4142135623730951},"332":{"tf":1.0},"347":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.4142135623730951},"364":{"tf":1.4142135623730951},"382":{"tf":1.0},"397":{"tf":1.0},"4":{"tf":1.0},"416":{"tf":1.0},"6":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"84":{"tf":1.0},"88":{"tf":1.0}},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"133":{"tf":1.0},"183":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"’":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"354":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"449":{"tf":1.0},"451":{"tf":1.0}}},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":3,"docs":{"314":{"tf":1.0},"325":{"tf":1.0},"330":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"236":{"tf":1.0}}}}}}}},"df":17,"docs":{"127":{"tf":1.4142135623730951},"150":{"tf":1.0},"151":{"tf":1.0},"189":{"tf":1.7320508075688772},"192":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.4142135623730951},"280":{"tf":1.0},"313":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"396":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0},"424":{"tf":3.0},"429":{"tf":1.0},"445":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"18":{"tf":1.0},"197":{"tf":1.4142135623730951},"88":{"tf":1.0}},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"318":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"(":{"\'":{"/":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"318":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":9,"docs":{"1":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"314":{"tf":1.0},"330":{"tf":1.0},"334":{"tf":1.0},"35":{"tf":1.0},"374":{"tf":1.4142135623730951},"9":{"tf":1.0}},"i":{"df":5,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"300":{"tf":1.0},"397":{"tf":1.0}},"é":{"df":3,"docs":{"196":{"tf":1.0},"330":{"tf":1.0},"425":{"tf":1.0}}}}}}}}},"i":{"df":1,"docs":{"18":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"o":{"_":{"c":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"175":{"tf":1.0},"319":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":6,"docs":{"173":{"tf":1.0},"183":{"tf":1.0},"199":{"tf":1.0},"243":{"tf":1.0},"317":{"tf":1.0},"412":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":85,"docs":{"11":{"tf":1.0},"118":{"tf":1.0},"124":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"16":{"tf":1.0},"171":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.4142135623730951},"25":{"tf":1.0},"257":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"293":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"327":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"360":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"445":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}},"s":{"df":5,"docs":{"146":{"tf":1.0},"29":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0}}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"277":{"tf":1.0},"286":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"m":{"b":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"151":{"tf":1.0},"397":{"tf":1.0}},"s":{"df":2,"docs":{"243":{"tf":1.0},"88":{"tf":1.0}},"é":{"df":1,"docs":{"166":{"tf":1.0}}}}}}},"r":{"df":4,"docs":{"106":{"tf":1.0},"156":{"tf":1.0},"290":{"tf":1.0},"88":{"tf":1.0}}}},"x":{"df":8,"docs":{"17":{"tf":1.0},"276":{"tf":1.0},"331":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"402":{"tf":1.0},"442":{"tf":1.0},"71":{"tf":1.0}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"116":{"tf":1.4142135623730951},"130":{"tf":1.0},"202":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"c":{"df":0,"docs":{},"é":{"df":1,"docs":{"174":{"tf":1.0}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"174":{"tf":1.0},"356":{"tf":1.0}}}},"df":23,"docs":{"16":{"tf":1.0},"166":{"tf":1.0},"18":{"tf":1.0},"202":{"tf":1.0},"243":{"tf":1.4142135623730951},"277":{"tf":1.4142135623730951},"279":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"321":{"tf":1.0},"327":{"tf":1.0},"351":{"tf":1.0},"360":{"tf":1.0},"365":{"tf":1.0},"388":{"tf":1.0},"393":{"tf":1.0},"399":{"tf":1.0},"403":{"tf":1.0},"6":{"tf":2.0},"72":{"tf":1.4142135623730951},"82":{"tf":1.0},"83":{"tf":1.0},"98":{"tf":1.4142135623730951}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":86,"docs":{"1":{"tf":1.0},"100":{"tf":1.0},"101":{"tf":1.0},"125":{"tf":1.0},"147":{"tf":1.4142135623730951},"150":{"tf":1.0},"151":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"159":{"tf":1.0},"16":{"tf":1.7320508075688772},"164":{"tf":1.0},"167":{"tf":1.0},"17":{"tf":1.7320508075688772},"178":{"tf":1.0},"18":{"tf":1.7320508075688772},"186":{"tf":1.0},"187":{"tf":1.0},"191":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"213":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"235":{"tf":1.0},"24":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"277":{"tf":1.4142135623730951},"278":{"tf":1.0},"284":{"tf":1.4142135623730951},"286":{"tf":1.4142135623730951},"29":{"tf":1.0},"290":{"tf":1.4142135623730951},"293":{"tf":1.0},"294":{"tf":1.0},"300":{"tf":1.4142135623730951},"316":{"tf":1.0},"317":{"tf":1.4142135623730951},"320":{"tf":1.0},"322":{"tf":1.0},"325":{"tf":1.0},"330":{"tf":2.23606797749979},"331":{"tf":1.4142135623730951},"332":{"tf":1.0},"334":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"372":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"382":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.4142135623730951},"401":{"tf":1.0},"402":{"tf":1.0},"417":{"tf":1.0},"424":{"tf":1.0},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.4142135623730951},"448":{"tf":1.0},"449":{"tf":1.4142135623730951},"451":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.4142135623730951},"85":{"tf":1.0},"86":{"tf":1.7320508075688772},"88":{"tf":1.7320508075688772},"89":{"tf":1.0},"90":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0}}},"df":0,"docs":{},"z":{"df":2,"docs":{"159":{"tf":1.0},"291":{"tf":1.0}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"277":{"tf":1.4142135623730951},"6":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951}}}}},"r":{"df":2,"docs":{"292":{"tf":1.0},"84":{"tf":2.0}}}},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":5,"docs":{"316":{"tf":1.4142135623730951},"318":{"tf":2.0},"328":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0}}}}},"df":0,"docs":{}},"x":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{":":{":":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"y":{":":{":":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"364":{"tf":1.0},"376":{"tf":1.0}}}}}}}},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}},"df":0,"docs":{}},"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":7,"docs":{"134":{"tf":1.0},"237":{"tf":1.0},"279":{"tf":1.0},"361":{"tf":1.0},"364":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0}}}}},"z":{"df":2,"docs":{"146":{"tf":1.0},"165":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"b":{"1":{"[":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":1,"docs":{"356":{"tf":1.4142135623730951}}},"3":{"[":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":1,"docs":{"356":{"tf":1.0}}},"4":{"[":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"5":{"[":{"b":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"356":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"0":{"1":{"df":3,"docs":{"277":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"82":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"127":{"tf":1.7320508075688772},"134":{"tf":1.4142135623730951},"189":{"tf":2.23606797749979}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"446":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"446":{"tf":1.0}}}}}},"/":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"448":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"448":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":2,"docs":{"2":{"tf":1.0},"448":{"tf":1.0}}}}}},"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":4,"docs":{"189":{"tf":1.4142135623730951},"199":{"tf":2.0},"204":{"tf":1.0},"208":{"tf":1.0}},"s":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"199":{"tf":2.0}}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":2,"docs":{"189":{"tf":1.0},"199":{"tf":1.0}},"g":{"df":2,"docs":{"318":{"tf":1.0},"377":{"tf":1.0}}}},"df":1,"docs":{"374":{"tf":1.0}},"n":{"a":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"127":{"tf":1.4142135623730951},"188":{"tf":1.0},"189":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}},"s":{")":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":6,"docs":{"189":{"tf":1.0},"206":{"tf":1.7320508075688772},"207":{"tf":2.23606797749979},"208":{"tf":2.0},"213":{"tf":1.0},"390":{"tf":1.0}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"124":{"tf":1.0},"424":{"tf":1.0}}}},"i":{"df":3,"docs":{"189":{"tf":1.4142135623730951},"207":{"tf":1.0},"390":{"tf":1.0}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"214":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"206":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"127":{"tf":1.4142135623730951},"189":{"tf":3.605551275463989}}}}}},"r":{".":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"348":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"df":12,"docs":{"287":{"tf":1.4142135623730951},"356":{"tf":1.4142135623730951},"357":{"tf":1.0},"376":{"tf":1.0},"419":{"tf":1.4142135623730951},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"428":{"tf":1.0},"448":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"(":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"423":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":2,"docs":{"21":{"tf":1.4142135623730951},"333":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},"6":{"4":{"df":3,"docs":{"102":{"tf":1.4142135623730951},"180":{"tf":1.0},"426":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"423":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":35,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"178":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"255":{"tf":1.0},"260":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.4142135623730951},"293":{"tf":1.0},"322":{"tf":1.0},"324":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.4142135623730951},"339":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"373":{"tf":1.4142135623730951},"382":{"tf":1.0},"386":{"tf":1.0},"393":{"tf":1.0},"419":{"tf":1.4142135623730951},"443":{"tf":1.0},"449":{"tf":1.0},"75":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}}},"h":{"df":10,"docs":{"104":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"126":{"tf":1.0},"130":{"tf":1.0},"150":{"tf":1.0}},"r":{"c":{"df":1,"docs":{"166":{"tf":1.0}}},"df":0,"docs":{}}},"i":{"c":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"=":{"df":0,"docs":{},"y":{"df":2,"docs":{"150":{"tf":1.0},"166":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}}}},"df":7,"docs":{"177":{"tf":1.0},"277":{"tf":1.0},"291":{"tf":1.4142135623730951},"396":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"293":{"tf":1.0},"357":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":1,"docs":{"199":{"tf":1.0}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":10,"docs":{"100":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.0},"279":{"tf":1.0},"3":{"tf":1.0},"356":{"tf":1.0},"5":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0},"98":{"tf":1.0}}}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"è":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":3,"docs":{"2":{"tf":1.0},"4":{"tf":1.0},"442":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"133":{"tf":1.7320508075688772},"17":{"tf":1.0},"20":{"tf":1.0},"293":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"442":{"tf":1.0}}}}}}}},"n":{"/":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"317":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"370":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":11,"docs":{"148":{"tf":1.0},"151":{"tf":1.0},"184":{"tf":1.0},"287":{"tf":1.4142135623730951},"356":{"tf":1.0},"370":{"tf":1.0},"373":{"tf":1.0},"420":{"tf":1.0},"446":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}},"y":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"201":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"d":{"df":4,"docs":{"187":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"96":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"189":{"tf":1.0}}}}},"df":1,"docs":{"370":{"tf":2.449489742783178}}},"t":{"df":2,"docs":{"291":{"tf":1.0},"383":{"tf":1.0}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"e":{"c":{"d":{"df":0,"docs":{},"s":{"a":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"o":{"b":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":1,"docs":{"419":{"tf":1.0}}},"c":{"df":2,"docs":{"121":{"tf":1.0},"202":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"214":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"284":{"tf":1.0}}}},"q":{"df":0,"docs":{},"u":{"df":3,"docs":{"166":{"tf":1.4142135623730951},"183":{"tf":1.0},"400":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"167":{"tf":1.0},"214":{"tf":1.0}}}}}}}},"o":{"b":{"df":2,"docs":{"327":{"tf":1.0},"328":{"tf":1.0}}},"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"133":{"tf":1.0},"377":{"tf":1.0}}}},"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"179":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":4,"docs":{"169":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0}}},"n":{"df":2,"docs":{"17":{"tf":1.0},"347":{"tf":1.0}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"n":{"df":3,"docs":{"23":{"tf":1.0},"76":{"tf":1.0},"80":{"tf":1.0}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"257":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":3,"docs":{"234":{"tf":1.0},"242":{"tf":1.0},"254":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"t":{"df":1,"docs":{"199":{"tf":1.7320508075688772}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":4,"docs":{"189":{"tf":1.4142135623730951},"199":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"u":{"c":{"df":0,"docs":{},"l":{"df":2,"docs":{"133":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"399":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"î":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":7,"docs":{"173":{"tf":1.0},"21":{"tf":1.0},"294":{"tf":1.4142135623730951},"301":{"tf":1.0},"373":{"tf":1.7320508075688772},"375":{"tf":1.0},"6":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"288":{"tf":1.0}}}},"i":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"a":{"d":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"377":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"380":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"413":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":4,"docs":{"189":{"tf":1.7320508075688772},"195":{"tf":1.0},"202":{"tf":1.0},"208":{"tf":2.23606797749979}}}}}},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"184":{"tf":1.0},"397":{"tf":1.0}}},"i":{"df":0,"docs":{},"l":{"d":{"(":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"447":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"=":{"1":{"df":1,"docs":{"112":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":26,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"104":{"tf":1.0},"106":{"tf":1.0},"110":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"160":{"tf":1.0},"169":{"tf":1.4142135623730951},"171":{"tf":1.4142135623730951},"172":{"tf":1.4142135623730951},"174":{"tf":1.4142135623730951},"183":{"tf":1.0},"186":{"tf":1.0},"278":{"tf":1.4142135623730951},"287":{"tf":1.4142135623730951},"288":{"tf":1.0},"296":{"tf":1.7320508075688772},"301":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"389":{"tf":1.0},"444":{"tf":1.0},"447":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}}}},"df":5,"docs":{"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"177":{"tf":1.0},"183":{"tf":1.0},"414":{"tf":3.3166247903554}}}},"s":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"168":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"=":{"2":{"0":{"df":1,"docs":{"202":{"tf":1.0}}},"df":0,"docs":{}},"5":{"0":{"df":1,"docs":{"202":{"tf":1.0}}},"df":1,"docs":{"202":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"202":{"tf":1.4142135623730951}}}}}},"y":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"396":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":5,"docs":{"180":{"tf":1.0},"294":{"tf":1.0},"353":{"tf":1.0},"373":{"tf":1.0},"426":{"tf":1.0}}}}},"â":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"276":{"tf":1.0}}}}}},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"363":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"c":{"1":{"[":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"287":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"2":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"3":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"4":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"5":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"6":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"[":{"0":{"2":{"df":3,"docs":{"277":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"420":{"tf":1.0},"82":{"tf":1.4142135623730951}}}},"d":{"d":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"445":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"r":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":22,"docs":{"104":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.4142135623730951},"167":{"tf":1.0},"175":{"tf":1.0},"187":{"tf":1.0},"232":{"tf":1.0},"244":{"tf":1.0},"277":{"tf":1.4142135623730951},"356":{"tf":1.4142135623730951},"442":{"tf":1.4142135623730951},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0},"6":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"84":{"tf":1.0}},"l":{"df":0,"docs":{},"l":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"243":{"tf":1.0},"348":{"tf":1.0},"352":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":6,"docs":{"148":{"tf":1.0},"174":{"tf":1.7320508075688772},"296":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.4142135623730951},"413":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"427":{"tf":1.7320508075688772}}}}}},"n":{"\'":{"df":0,"docs":{},"t":{"df":1,"docs":{"300":{"tf":1.0}}}},"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"425":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"424":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"347":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"377":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":7,"docs":{"173":{"tf":1.0},"175":{"tf":1.4142135623730951},"183":{"tf":1.4142135623730951},"317":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"375":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"277":{"tf":1.4142135623730951},"278":{"tf":1.0},"304":{"tf":1.0}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":4,"docs":{"23":{"tf":1.0},"243":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":16,"docs":{"113":{"tf":1.0},"172":{"tf":1.0},"174":{"tf":2.0},"252":{"tf":1.0},"287":{"tf":2.23606797749979},"288":{"tf":1.4142135623730951},"293":{"tf":1.0},"296":{"tf":1.4142135623730951},"299":{"tf":1.0},"312":{"tf":1.7320508075688772},"320":{"tf":2.23606797749979},"321":{"tf":1.7320508075688772},"327":{"tf":1.0},"389":{"tf":1.7320508075688772},"390":{"tf":1.4142135623730951},"403":{"tf":1.7320508075688772}}}}},"s":{"c":{"a":{"d":{"df":1,"docs":{"360":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"df":6,"docs":{"102":{"tf":1.0},"163":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"23":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":3,"docs":{"394":{"tf":1.4142135623730951},"395":{"tf":1.0},"396":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"s":{"df":6,"docs":{"166":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}}},"d":{"df":9,"docs":{"109":{"tf":1.0},"123":{"tf":1.0},"158":{"tf":1.0},"166":{"tf":1.0},"178":{"tf":1.0},"289":{"tf":1.0},"291":{"tf":1.4142135623730951},"294":{"tf":1.0},"83":{"tf":1.0}},"n":{"/":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"214":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":4,"docs":{"214":{"tf":1.7320508075688772},"292":{"tf":1.0},"400":{"tf":1.0},"418":{"tf":1.0}}}},"df":9,"docs":{"104":{"tf":1.0},"123":{"tf":2.0},"185":{"tf":1.4142135623730951},"19":{"tf":1.0},"277":{"tf":1.0},"291":{"tf":1.0},"394":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}},"e":{"df":120,"docs":{"1":{"tf":1.0},"11":{"tf":1.0},"113":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.4142135623730951},"153":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.4142135623730951},"161":{"tf":1.4142135623730951},"168":{"tf":1.4142135623730951},"177":{"tf":1.0},"18":{"tf":1.0},"189":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"231":{"tf":1.0},"237":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.4142135623730951},"282":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.7320508075688772},"288":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.4142135623730951},"3":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"347":{"tf":1.0},"35":{"tf":1.0},"352":{"tf":1.0},"358":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"379":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"388":{"tf":1.4142135623730951},"389":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"416":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.4142135623730951},"449":{"tf":1.0},"45":{"tf":1.0},"451":{"tf":1.4142135623730951},"47":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.4142135623730951},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.7320508075688772},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"77":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":2.0},"90":{"tf":1.0},"92":{"tf":1.0}},"l":{"a":{"df":2,"docs":{"148":{"tf":1.0},"417":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":1,"docs":{"153":{"tf":1.0}}},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"19":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"153":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"249":{"tf":1.0}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"124":{"tf":1.0}}}}}},"df":5,"docs":{"101":{"tf":1.0},"115":{"tf":1.7320508075688772},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"129":{"tf":1.0}}}}},"df":1,"docs":{"133":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"117":{"tf":1.0},"129":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"t":{"df":154,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"176":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.4142135623730951},"20":{"tf":1.0},"215":{"tf":1.0},"216":{"tf":1.0},"217":{"tf":1.0},"218":{"tf":1.0},"219":{"tf":1.0},"220":{"tf":1.0},"221":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.0},"227":{"tf":1.0},"228":{"tf":1.0},"229":{"tf":1.0},"230":{"tf":1.0},"244":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"260":{"tf":1.0},"261":{"tf":1.0},"262":{"tf":1.0},"263":{"tf":1.0},"264":{"tf":1.0},"265":{"tf":1.0},"266":{"tf":1.0},"267":{"tf":1.0},"268":{"tf":1.0},"269":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"271":{"tf":1.0},"272":{"tf":1.0},"273":{"tf":1.0},"274":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"282":{"tf":1.0},"283":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.0},"3":{"tf":1.4142135623730951},"30":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.0},"304":{"tf":1.0},"305":{"tf":1.0},"306":{"tf":1.0},"307":{"tf":1.0},"308":{"tf":1.0},"309":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":1.0},"387":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"416":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"431":{"tf":1.0},"432":{"tf":1.0},"433":{"tf":1.0},"434":{"tf":1.0},"435":{"tf":1.0},"436":{"tf":1.0},"437":{"tf":1.0},"438":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"440":{"tf":1.0},"441":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"86":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0}}}}},"f":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"312":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"h":{"a":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":4,"docs":{"116":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"97":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"133":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"m":{"df":0,"docs":{},"p":{"df":2,"docs":{"18":{"tf":1.0},"330":{"tf":1.0}}}},"n":{"df":1,"docs":{"348":{"tf":1.7320508075688772}},"g":{"df":4,"docs":{"18":{"tf":1.0},"294":{"tf":1.0},"355":{"tf":1.0},"424":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"m":{"df":2,"docs":{"442":{"tf":1.0},"83":{"tf":1.7320508075688772}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"359":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"243":{"tf":1.0},"318":{"tf":1.0},"357":{"tf":1.0}}}}}},"r":{"df":4,"docs":{"178":{"tf":1.0},"214":{"tf":1.0},"319":{"tf":1.0},"350":{"tf":1.0}}},"z":{"df":2,"docs":{"83":{"tf":1.4142135623730951},"88":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":6,"docs":{"169":{"tf":1.0},"183":{"tf":1.0},"348":{"tf":1.0},"352":{"tf":1.4142135623730951},"356":{"tf":1.0},"357":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"é":{"df":1,"docs":{"88":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":20,"docs":{"147":{"tf":1.0},"168":{"tf":1.4142135623730951},"169":{"tf":1.0},"173":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.0},"186":{"tf":1.0},"205":{"tf":1.4142135623730951},"213":{"tf":1.0},"240":{"tf":1.0},"244":{"tf":1.0},"290":{"tf":1.0},"3":{"tf":1.0},"312":{"tf":1.0},"355":{"tf":1.0},"388":{"tf":1.0},"397":{"tf":1.4142135623730951},"403":{"tf":1.0},"442":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"r":{"df":1,"docs":{"184":{"tf":1.0}},"g":{"df":6,"docs":{"133":{"tf":1.0},"150":{"tf":1.0},"174":{"tf":1.0},"293":{"tf":1.0},"327":{"tf":1.0},"414":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"236":{"tf":1.0}}}}}},"r":{"df":1,"docs":{"319":{"tf":1.0}}}},"é":{"df":5,"docs":{"166":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.0},"254":{"tf":1.0},"318":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"327":{"tf":1.0},"328":{"tf":1.0}}}}},"u":{"d":{"df":2,"docs":{"232":{"tf":1.0},"240":{"tf":1.0}}},"df":0,"docs":{}},"î":{"df":0,"docs":{},"n":{"df":2,"docs":{"355":{"tf":1.0},"88":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"183":{"tf":1.0},"193":{"tf":1.0}},"k":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"x":{"df":1,"docs":{"330":{"tf":1.0}}}}},"df":11,"docs":{"174":{"tf":1.4142135623730951},"317":{"tf":1.0},"320":{"tf":1.4142135623730951},"321":{"tf":1.4142135623730951},"348":{"tf":1.0},"349":{"tf":1.0},"389":{"tf":1.0},"390":{"tf":1.0},"403":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"186":{"tf":1.0},"393":{"tf":1.0},"403":{"tf":1.4142135623730951}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"148":{"tf":1.0},"161":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":20,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"277":{"tf":1.4142135623730951},"284":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"6":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"158":{"tf":1.0}}}}}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"159":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":11,"docs":{"102":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"160":{"tf":1.0},"166":{"tf":1.4142135623730951},"172":{"tf":1.0},"19":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"393":{"tf":1.0},"397":{"tf":1.0}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"428":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"2":{"tf":1.0}}}},"r":{"df":1,"docs":{"244":{"tf":1.0}}},"z":{"df":1,"docs":{"3":{"tf":1.0}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":4,"docs":{"18":{"tf":1.4142135623730951},"21":{"tf":1.0},"23":{"tf":1.0},"243":{"tf":1.4142135623730951}},"é":{"df":1,"docs":{"382":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"o":{"d":{"df":3,"docs":{"102":{"tf":1.0},"109":{"tf":1.0},"111":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"174":{"tf":1.0},"19":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"83":{"tf":1.0},"86":{"tf":1.0}}}}}}}},"x":{"df":1,"docs":{"76":{"tf":1.0}}}},"u":{"df":1,"docs":{"292":{"tf":1.0}},"e":{"df":7,"docs":{"133":{"tf":1.4142135623730951},"317":{"tf":1.0},"319":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":1.0},"332":{"tf":1.0},"377":{"tf":1.0}},"r":{"a":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"322":{"tf":1.0},"323":{"tf":1.4142135623730951}}}}}}}}},"i":{"\'":{")":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"318":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":11,"docs":{"146":{"tf":1.0},"147":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.4142135623730951},"165":{"tf":1.0},"166":{"tf":1.0},"171":{"tf":1.0},"183":{"tf":1.0},"186":{"tf":1.0}}}},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":10,"docs":{"148":{"tf":1.0},"164":{"tf":1.4142135623730951},"174":{"tf":1.4142135623730951},"186":{"tf":1.0},"296":{"tf":1.0},"317":{"tf":1.0},"379":{"tf":1.0},"447":{"tf":2.23606797749979},"57":{"tf":1.0},"9":{"tf":1.0}}}}}},"/":{"c":{"d":{"df":6,"docs":{"102":{"tf":1.0},"145":{"tf":1.0},"155":{"tf":1.0},"378":{"tf":1.0},"413":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":3,"docs":{"160":{"tf":1.0},"169":{"tf":1.0},"172":{"tf":1.0}}}},"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"447":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"0":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"380":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"372":{"tf":1.0}}}}}}}},"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"=":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"166":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"317":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"381":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"=":{"3":{"6":{"0":{"0":{"df":2,"docs":{"102":{"tf":1.0},"172":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"183":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"=":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"180":{"tf":1.0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":1,"docs":{"186":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":2,"docs":{"180":{"tf":1.0},"186":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":4,"docs":{"380":{"tf":1.0},"381":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"8":{"0":{"8":{"1":{"df":1,"docs":{"180":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"186":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":1,"docs":{"236":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":6,"docs":{"102":{"tf":1.0},"155":{"tf":1.0},"172":{"tf":1.0},"186":{"tf":1.0},"378":{"tf":1.0},"414":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":5,"docs":{"238":{"tf":1.0},"319":{"tf":1.0},"381":{"tf":1.0},"413":{"tf":1.0},"96":{"tf":1.0}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"172":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"156":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"=":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":2,"docs":{"160":{"tf":1.0},"166":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"372":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":2,"docs":{"175":{"tf":1.0},"372":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"x":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":3,"docs":{"169":{"tf":1.0},"183":{"tf":1.0},"238":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"=":{"4":{"df":3,"docs":{"102":{"tf":1.0},"155":{"tf":1.0},"172":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"185":{"tf":1.0},"372":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":3,"docs":{"150":{"tf":1.0},"156":{"tf":1.0},"186":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"148":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"=":{"1":{"9":{"2":{".":{"1":{"6":{"8":{".":{"1":{"3":{".":{"1":{"1":{"0":{"df":1,"docs":{"296":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"154":{"tf":1.0}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"172":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"155":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":5,"docs":{"102":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.4142135623730951},"171":{"tf":1.0},"296":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":3,"docs":{"153":{"tf":1.0},"166":{"tf":1.4142135623730951},"238":{"tf":1.0}}}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"163":{"tf":1.7320508075688772}}}}}}}}}},"df":0,"docs":{}},"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"154":{"tf":1.0},"155":{"tf":1.0},"172":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":5,"docs":{"146":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.0},"161":{"tf":1.0},"163":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"=":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"/":{"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"df":1,"docs":{"154":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"d":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"df":1,"docs":{"172":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"155":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"166":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":4,"docs":{"150":{"tf":1.0},"153":{"tf":1.0},"163":{"tf":1.4142135623730951},"167":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"=":{"2":{"2":{"df":2,"docs":{"154":{"tf":1.0},"172":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"153":{"tf":1.0},"163":{"tf":1.0},"183":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"153":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"=":{"c":{"df":0,"docs":{},"i":{"df":4,"docs":{"154":{"tf":1.0},"155":{"tf":1.0},"172":{"tf":1.0},"296":{"tf":1.0}}}},"df":0,"docs":{}},"@":{"$":{"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"163":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"}":{"@":{"$":{"df":0,"docs":{},"{":{"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"183":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"s":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"184":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":2,"docs":{"177":{"tf":1.0},"186":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":4,"docs":{"380":{"tf":1.0},"381":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"320":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{":":{"c":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"351":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"=":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"177":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"184":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"v":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"372":{"tf":1.0}}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"102":{"tf":1.0},"172":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"161":{"tf":1.0},"238":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"b":{"df":0,"docs":{},"l":{"df":5,"docs":{"101":{"tf":1.0},"103":{"tf":1.0},"147":{"tf":1.0},"148":{"tf":1.0},"95":{"tf":1.0}},"e":{"[":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"356":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":1,"docs":{"334":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}},"e":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"(":{"b":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}}}}},"df":61,"docs":{"1":{"tf":1.0},"102":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":2.23606797749979},"148":{"tf":2.449489742783178},"153":{"tf":1.4142135623730951},"154":{"tf":1.4142135623730951},"155":{"tf":1.0},"160":{"tf":3.0},"161":{"tf":2.0},"164":{"tf":1.0},"165":{"tf":1.4142135623730951},"166":{"tf":1.7320508075688772},"167":{"tf":1.0},"168":{"tf":1.4142135623730951},"169":{"tf":1.0},"170":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":2.0},"173":{"tf":1.7320508075688772},"174":{"tf":2.0},"175":{"tf":1.0},"176":{"tf":1.0},"183":{"tf":1.4142135623730951},"186":{"tf":2.0},"187":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"210":{"tf":1.4142135623730951},"221":{"tf":1.0},"272":{"tf":1.0},"281":{"tf":1.0},"29":{"tf":1.0},"296":{"tf":1.7320508075688772},"317":{"tf":2.449489742783178},"318":{"tf":3.0},"321":{"tf":1.0},"369":{"tf":1.0},"370":{"tf":1.4142135623730951},"375":{"tf":1.7320508075688772},"378":{"tf":1.0},"379":{"tf":1.4142135623730951},"380":{"tf":1.4142135623730951},"381":{"tf":1.0},"382":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.0},"418":{"tf":1.0},"420":{"tf":1.4142135623730951},"436":{"tf":1.0},"443":{"tf":1.4142135623730951},"444":{"tf":1.4142135623730951},"447":{"tf":2.449489742783178},"5":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"[":{"\\"":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"370":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"370":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"413":{"tf":1.0}},"e":{"[":{"\\"":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}},"e":{":":{":":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"380":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"t":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":2,"docs":{"169":{"tf":1.0},"175":{"tf":1.0}}}}},"df":0,"docs":{}},"v":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"380":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":5,"docs":{"169":{"tf":1.0},"372":{"tf":1.0},"380":{"tf":1.0},"413":{"tf":2.0},"420":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":1,"docs":{"370":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"|":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"166":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"|":{"df":0,"docs":{},"s":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"|":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"185":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"375":{"tf":1.0}}},"r":{"df":3,"docs":{"352":{"tf":1.0},"393":{"tf":1.0},"403":{"tf":1.0}},"é":{"df":1,"docs":{"281":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"147":{"tf":1.0}}}}}}},"u":{"d":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"m":{"d":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":30,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.0},"16":{"tf":2.449489742783178},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"179":{"tf":1.0},"183":{"tf":1.0},"189":{"tf":1.4142135623730951},"19":{"tf":1.7320508075688772},"196":{"tf":1.0},"20":{"tf":3.0},"208":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":2.23606797749979},"243":{"tf":1.0},"257":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"300":{"tf":1.4142135623730951},"374":{"tf":1.4142135623730951},"382":{"tf":1.0},"413":{"tf":1.0},"422":{"tf":1.0},"426":{"tf":1.4142135623730951},"7":{"tf":1.0},"72":{"tf":1.0},"83":{"tf":1.4142135623730951}},"i":{"df":10,"docs":{"146":{"tf":1.0},"148":{"tf":1.0},"160":{"tf":1.4142135623730951},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"356":{"tf":1.7320508075688772},"370":{"tf":1.0},"413":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{",":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"425":{"tf":1.0}}}}}},".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"(":{"\\"":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"4":{"0":{"0":{"1":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"v":{"1":{"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"316":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"316":{"tf":1.0}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"x":{"_":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"s":{"df":2,"docs":{"133":{"tf":1.0},"202":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":19,"docs":{"127":{"tf":1.0},"133":{"tf":1.0},"169":{"tf":1.0},"188":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.4142135623730951},"204":{"tf":1.7320508075688772},"206":{"tf":1.4142135623730951},"207":{"tf":1.4142135623730951},"243":{"tf":1.4142135623730951},"276":{"tf":1.0},"316":{"tf":1.0},"347":{"tf":1.0},"357":{"tf":1.0},"413":{"tf":1.0},"424":{"tf":3.3166247903554},"425":{"tf":2.449489742783178},"449":{"tf":2.0}},"s":{"/":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":2,"docs":{"449":{"tf":1.0},"451":{"tf":1.0}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"449":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"449":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":6,"docs":{"174":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"389":{"tf":1.0},"403":{"tf":1.0},"447":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"253":{"tf":1.0}}},"z":{"df":2,"docs":{"294":{"tf":1.4142135623730951},"86":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"424":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"202":{"tf":1.0}}}}}}},"df":17,"docs":{"123":{"tf":1.4142135623730951},"189":{"tf":1.0},"194":{"tf":1.0},"24":{"tf":1.0},"278":{"tf":1.0},"289":{"tf":1.4142135623730951},"294":{"tf":1.7320508075688772},"301":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.4142135623730951},"351":{"tf":1.0},"356":{"tf":2.0},"357":{"tf":1.4142135623730951},"421":{"tf":1.0},"422":{"tf":1.0},"424":{"tf":1.7320508075688772}},"r":{"df":7,"docs":{"24":{"tf":1.0},"25":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"396":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0}}},"z":{"df":1,"docs":{"289":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"133":{"tf":1.0}}}},"u":{"d":{"df":1,"docs":{"147":{"tf":1.0}}},"df":0,"docs":{}}},"é":{"df":12,"docs":{"15":{"tf":1.0},"167":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0},"416":{"tf":1.0},"424":{"tf":1.0},"448":{"tf":1.0},"8":{"tf":1.0},"84":{"tf":1.4142135623730951}}}},"m":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"288":{"tf":1.4142135623730951}}}}},"d":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"21":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"173":{"tf":1.4142135623730951}}}}}},"d":{"df":0,"docs":{},"e":{"df":28,"docs":{"100":{"tf":1.0},"148":{"tf":1.0},"16":{"tf":1.7320508075688772},"167":{"tf":1.0},"168":{"tf":1.0},"176":{"tf":1.0},"18":{"tf":2.8284271247461903},"191":{"tf":1.0},"2":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"257":{"tf":1.0},"276":{"tf":1.4142135623730951},"279":{"tf":1.0},"280":{"tf":1.0},"352":{"tf":1.0},"364":{"tf":1.0},"380":{"tf":1.0},"390":{"tf":1.0},"394":{"tf":1.0},"398":{"tf":1.0},"4":{"tf":1.0},"403":{"tf":1.0},"421":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}},"é":{"df":2,"docs":{"244":{"tf":1.0},"249":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"155":{"tf":1.0},"375":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"165":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":2,"docs":{"397":{"tf":1.0},"417":{"tf":1.0}}}}}}}},"l":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"351":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"d":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":6,"docs":{"10":{"tf":1.0},"27":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":1.0},"65":{"tf":1.0},"7":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"5":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"294":{"tf":1.0}}}}},"df":2,"docs":{"20":{"tf":1.0},"23":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"123":{"tf":1.0},"6":{"tf":1.0}}}}},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"167":{"tf":1.0}},"é":{"df":1,"docs":{"147":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":2,"docs":{"199":{"tf":1.0},"244":{"tf":1.0}},"é":{"df":1,"docs":{"372":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"374":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":22,"docs":{"100":{"tf":1.0},"16":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"174":{"tf":1.4142135623730951},"183":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"290":{"tf":1.0},"292":{"tf":1.0},"296":{"tf":1.4142135623730951},"310":{"tf":1.0},"320":{"tf":1.0},"324":{"tf":1.0},"389":{"tf":1.0},"425":{"tf":1.0},"5":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.4142135623730951}},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"425":{"tf":1.0}},"e":{"(":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"424":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":7,"docs":{"16":{"tf":1.4142135623730951},"249":{"tf":1.0},"347":{"tf":1.0},"420":{"tf":1.0},"6":{"tf":1.0},"82":{"tf":1.0},"86":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"174":{"tf":1.0}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"375":{"tf":1.0},"394":{"tf":1.0},"442":{"tf":1.4142135623730951}}}}},"df":12,"docs":{"10":{"tf":1.0},"108":{"tf":2.0},"168":{"tf":1.0},"231":{"tf":1.0},"279":{"tf":1.0},"287":{"tf":1.0},"3":{"tf":1.0},"358":{"tf":1.0},"451":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"8":{"tf":1.0}},"é":{"df":2,"docs":{"166":{"tf":1.0},"377":{"tf":1.0}}}},"ç":{"df":1,"docs":{"19":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"373":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"a":{"df":2,"docs":{"185":{"tf":1.4142135623730951},"380":{"tf":1.0}}},"df":0,"docs":{}}}},"df":16,"docs":{"123":{"tf":1.0},"171":{"tf":1.0},"184":{"tf":1.0},"186":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.0},"284":{"tf":1.0},"287":{"tf":1.0},"294":{"tf":2.449489742783178},"299":{"tf":1.0},"375":{"tf":1.0},"428":{"tf":1.0},"43":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0},"84":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"84":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}}},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"393":{"tf":1.0}}}}}}},"df":0,"docs":{}},"t":{"df":3,"docs":{"151":{"tf":1.0},"18":{"tf":1.0},"390":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":10,"docs":{"277":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.4142135623730951},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":2.0},"299":{"tf":1.0},"300":{"tf":1.0},"389":{"tf":1.0},"82":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"284":{"tf":1.0},"292":{"tf":1.0}}}},"é":{"df":4,"docs":{"292":{"tf":1.0},"293":{"tf":1.0},"375":{"tf":1.0},"418":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":6,"docs":{"155":{"tf":1.0},"174":{"tf":1.0},"331":{"tf":1.0},"345":{"tf":1.0},"353":{"tf":1.0},"396":{"tf":1.0}}},"x":{"df":1,"docs":{"447":{"tf":1.0}}}},"è":{"df":0,"docs":{},"t":{"df":10,"docs":{"125":{"tf":1.0},"187":{"tf":1.0},"258":{"tf":1.0},"277":{"tf":1.0},"284":{"tf":1.0},"290":{"tf":1.0},"421":{"tf":1.0},"448":{"tf":1.4142135623730951},"5":{"tf":1.0},"73":{"tf":1.0}}}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"214":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"t":{"df":4,"docs":{"278":{"tf":1.0},"286":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}},"o":{"df":1,"docs":{"82":{"tf":1.0}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"185":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"t":{"df":5,"docs":{"237":{"tf":1.0},"245":{"tf":1.0},"319":{"tf":1.4142135623730951},"75":{"tf":1.0},"9":{"tf":1.0}}}},"s":{"df":24,"docs":{"101":{"tf":1.4142135623730951},"109":{"tf":1.4142135623730951},"168":{"tf":1.0},"169":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.0},"181":{"tf":1.0},"291":{"tf":1.0},"300":{"tf":1.0},"318":{"tf":1.0},"369":{"tf":1.0},"378":{"tf":1.0},"381":{"tf":1.4142135623730951},"72":{"tf":1.0},"73":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.4142135623730951},"82":{"tf":1.0},"84":{"tf":1.7320508075688772},"85":{"tf":2.23606797749979},"86":{"tf":1.0},"87":{"tf":1.4142135623730951},"88":{"tf":2.0}},"e":{".":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":3,"docs":{"444":{"tf":1.0},"451":{"tf":1.0},"84":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":3,"docs":{"444":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"444":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":6,"docs":{"109":{"tf":2.0},"178":{"tf":1.4142135623730951},"2":{"tf":1.0},"323":{"tf":1.0},"84":{"tf":2.0},"88":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"174":{"tf":1.0},"6":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":8,"docs":{"10":{"tf":1.4142135623730951},"16":{"tf":1.0},"276":{"tf":1.0},"281":{"tf":1.4142135623730951},"287":{"tf":1.0},"3":{"tf":1.0},"5":{"tf":1.0},"76":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"82":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":2,"docs":{"355":{"tf":1.0},"417":{"tf":1.0}}}}}},"t":{"df":16,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"153":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"213":{"tf":1.0},"22":{"tf":1.0},"243":{"tf":1.4142135623730951},"290":{"tf":1.0},"293":{"tf":1.0},"72":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0},"86":{"tf":2.23606797749979},"87":{"tf":1.0}},"e":{"@":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"19":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"181":{"tf":1.0},"346":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"423":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"426":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}}},"df":0,"docs":{}}}}}},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"415":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":1,"docs":{"236":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":2,"docs":{"183":{"tf":1.0},"352":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"84":{"tf":1.0},"95":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":2,"docs":{"116":{"tf":1.0},"130":{"tf":1.0}},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"p":{"df":1,"docs":{"189":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":20,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"150":{"tf":1.0},"155":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.0},"211":{"tf":1.0},"254":{"tf":1.0},"258":{"tf":1.0},"288":{"tf":1.0},"314":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"4":{"tf":1.0},"445":{"tf":1.0},"82":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":40,"docs":{"125":{"tf":1.0},"127":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"145":{"tf":1.0},"16":{"tf":1.0},"160":{"tf":1.4142135623730951},"168":{"tf":1.0},"172":{"tf":1.0},"174":{"tf":1.0},"180":{"tf":1.0},"187":{"tf":1.0},"2":{"tf":1.0},"213":{"tf":1.0},"214":{"tf":1.0},"231":{"tf":1.0},"232":{"tf":1.7320508075688772},"233":{"tf":1.0},"235":{"tf":1.7320508075688772},"239":{"tf":1.0},"249":{"tf":1.0},"285":{"tf":1.0},"290":{"tf":1.0},"299":{"tf":1.0},"3":{"tf":1.0},"313":{"tf":1.0},"317":{"tf":1.0},"325":{"tf":1.0},"35":{"tf":1.0},"445":{"tf":1.0},"447":{"tf":1.0},"6":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.7320508075688772},"8":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":1.7320508075688772},"84":{"tf":1.0},"98":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":4,"docs":{"284":{"tf":1.0},"290":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.0}}}},"é":{"df":1,"docs":{"322":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"m":{"df":4,"docs":{"18":{"tf":1.0},"243":{"tf":1.0},"330":{"tf":1.0},"86":{"tf":1.0}},"é":{"df":1,"docs":{"22":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"327":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"u":{"df":2,"docs":{"189":{"tf":1.0},"207":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"276":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"1":{"tf":1.0},"264":{"tf":1.0},"388":{"tf":1.0},"75":{"tf":1.0}}}}}}}},"n":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"71":{"tf":1.0}}}}},"î":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}},"r":{"df":1,"docs":{"231":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":15,"docs":{"104":{"tf":1.7320508075688772},"133":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"17":{"tf":2.0},"23":{"tf":1.0},"253":{"tf":1.0},"291":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"6":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"293":{"tf":1.0},"86":{"tf":1.0}}}},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"146":{"tf":1.0},"160":{"tf":1.0},"171":{"tf":1.0}}}}}},"é":{"df":1,"docs":{"328":{"tf":1.0}}}}},"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":11,"docs":{"16":{"tf":1.0},"189":{"tf":1.0},"20":{"tf":1.0},"290":{"tf":1.0},"354":{"tf":1.0},"355":{"tf":1.4142135623730951},"414":{"tf":1.0},"424":{"tf":1.0},"443":{"tf":1.0},"5":{"tf":1.0},"86":{"tf":1.0}}}}}}},"u":{"df":1,"docs":{"168":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":2,"docs":{"18":{"tf":1.0},"347":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"133":{"tf":1.0},"98":{"tf":1.0}}},"m":{"df":0,"docs":{},"m":{"df":3,"docs":{"169":{"tf":1.0},"352":{"tf":1.0},"4":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"402":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}},"s":{"df":4,"docs":{"2":{"tf":1.0},"276":{"tf":1.0},"281":{"tf":1.0},"76":{"tf":1.0}}},"t":{"df":2,"docs":{"412":{"tf":1.0},"416":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":7,"docs":{"20":{"tf":1.0},"280":{"tf":1.0},"324":{"tf":1.0},"49":{"tf":1.0},"75":{"tf":1.0},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":76,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"279":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"85":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}},"é":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"é":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"214":{"tf":1.0},"242":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"t":{"a":{"c":{"df":0,"docs":{},"t":{"@":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"95":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"171":{"tf":1.0},"291":{"tf":1.4142135623730951},"381":{"tf":1.0},"420":{"tf":1.0},"85":{"tf":2.0},"87":{"tf":1.0},"88":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"214":{"tf":1.0},"96":{"tf":1.0}}}}},"t":{"df":3,"docs":{"133":{"tf":1.0},"352":{"tf":1.0},"418":{"tf":1.0}}},"u":{"df":78,"docs":{"104":{"tf":1.0},"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"189":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"284":{"tf":1.0},"29":{"tf":1.0},"294":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"84":{"tf":1.4142135623730951},"90":{"tf":1.0},"92":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"df":74,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"451":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.0}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"375":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"451":{"tf":1.0}}},"t":{"df":5,"docs":{"166":{"tf":1.0},"174":{"tf":1.0},"23":{"tf":1.0},"3":{"tf":1.0},"88":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"85":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"362":{"tf":1.4142135623730951}}}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"396":{"tf":1.0}}}}}},"df":2,"docs":{"205":{"tf":1.4142135623730951},"322":{"tf":1.0}},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":0,"docs":{}}},"i":{"b":{"df":0,"docs":{},"u":{"df":6,"docs":{"2":{"tf":1.0},"276":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"358":{"tf":1.0},"4":{"tf":1.0}},"t":{"df":5,"docs":{"278":{"tf":1.0},"279":{"tf":1.0},"301":{"tf":1.0},"302":{"tf":1.0},"308":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"2":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"9":{"0":{"df":1,"docs":{"277":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}},"ô":{"df":0,"docs":{},"l":{"df":3,"docs":{"332":{"tf":1.0},"381":{"tf":1.0},"394":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"442":{"tf":1.0}}}},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"396":{"tf":1.0}}}}}},"ç":{"df":0,"docs":{},"u":{"df":1,"docs":{"1":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":1,"docs":{"394":{"tf":1.0}},"e":{"_":{"df":1,"docs":{"236":{"tf":1.0}},"s":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}},"e":{"=":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"x":{"df":1,"docs":{"102":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"133":{"tf":1.0},"238":{"tf":1.0}},"e":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"102":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"p":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"4":{"tf":1.0},"442":{"tf":1.0}}}},"df":0,"docs":{}},"df":6,"docs":{"171":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"442":{"tf":1.0},"448":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"156":{"tf":1.0},"179":{"tf":1.0},"287":{"tf":1.0},"396":{"tf":1.0},"6":{"tf":1.0}}},"z":{"df":3,"docs":{"290":{"tf":1.4142135623730951},"442":{"tf":1.0},"451":{"tf":1.0}}}},"é":{"df":1,"docs":{"20":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"259":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"287":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"è":{"df":0,"docs":{},"l":{"df":1,"docs":{"287":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}}}}},"df":21,"docs":{"276":{"tf":1.0},"277":{"tf":1.0},"280":{"tf":1.0},"289":{"tf":1.4142135623730951},"312":{"tf":1.0},"320":{"tf":1.4142135623730951},"358":{"tf":1.0},"361":{"tf":1.4142135623730951},"363":{"tf":1.7320508075688772},"370":{"tf":3.0},"372":{"tf":1.7320508075688772},"383":{"tf":1.0},"392":{"tf":1.0},"399":{"tf":1.0},"403":{"tf":1.0},"408":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":2.449489742783178},"414":{"tf":1.0},"416":{"tf":2.0},"429":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":8,"docs":{"20":{"tf":1.0},"23":{"tf":1.4142135623730951},"300":{"tf":1.0},"317":{"tf":1.0},"356":{"tf":1.0},"80":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"364":{"tf":1.0}}}}},"df":8,"docs":{"23":{"tf":1.0},"249":{"tf":1.0},"258":{"tf":1.0},"291":{"tf":1.0},"300":{"tf":1.0},"442":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0}},"r":{"df":1,"docs":{"21":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"133":{"tf":1.0}}}},"è":{"df":0,"docs":{},"l":{"df":1,"docs":{"178":{"tf":1.0}}}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"19":{"tf":1.0},"397":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":1,"docs":{"348":{"tf":1.0}}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"289":{"tf":1.0},"294":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"105":{"tf":1.0},"153":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"279":{"tf":1.0},"348":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}},"df":3,"docs":{"173":{"tf":1.0},"317":{"tf":1.0},"362":{"tf":1.0}}},"t":{"df":5,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"113":{"tf":1.0},"133":{"tf":1.0},"414":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"192":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"318":{"tf":1.0},"396":{"tf":1.0}}}}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"313":{"tf":1.0},"422":{"tf":1.0}}}}},"df":3,"docs":{"199":{"tf":1.0},"276":{"tf":1.0},"71":{"tf":1.0}}}}},"û":{"df":0,"docs":{},"t":{"df":2,"docs":{"349":{"tf":1.0},"355":{"tf":1.0}}}}},"p":{"df":3,"docs":{"111":{"tf":1.0},"166":{"tf":1.0},"290":{"tf":1.0}},"u":{"/":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"148":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"a":{"df":1,"docs":{"242":{"tf":1.0}},"n":{"df":1,"docs":{"6":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"347":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":15,"docs":{"276":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.0},"289":{"tf":1.4142135623730951},"3":{"tf":1.0},"300":{"tf":1.0},"312":{"tf":1.4142135623730951},"361":{"tf":1.0},"369":{"tf":1.4142135623730951},"370":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.0},"383":{"tf":1.7320508075688772},"390":{"tf":1.0},"413":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"421":{"tf":1.0}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":5,"docs":{"259":{"tf":1.0},"361":{"tf":1.0},"399":{"tf":1.0},"403":{"tf":1.0},"416":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":9,"docs":{"153":{"tf":1.0},"160":{"tf":1.0},"22":{"tf":1.0},"242":{"tf":1.0},"290":{"tf":1.0},"319":{"tf":1.0},"6":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":7,"docs":{"241":{"tf":1.0},"291":{"tf":2.0},"293":{"tf":1.0},"294":{"tf":1.0},"348":{"tf":1.0},"449":{"tf":1.0},"85":{"tf":1.7320508075688772}},"e":{"\\"":{",":{"\\"":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"\\"":{",":{"\\"":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"\\"":{",":{"\\"":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"243":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"(":{"d":{"b":{"df":2,"docs":{"423":{"tf":1.0},"426":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"429":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{"b":{"df":2,"docs":{"348":{"tf":1.0},"349":{"tf":1.0}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"175":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"(":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"185":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"b":{"df":1,"docs":{"323":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"325":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"301":{"tf":1.0}}}},"t":{"df":4,"docs":{"346":{"tf":1.0},"348":{"tf":1.0},"352":{"tf":1.0},"82":{"tf":1.0}},"e":{"df":1,"docs":{"1":{"tf":1.0}}},"i":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"180":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"185":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"181":{"tf":1.0}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":5,"docs":{"102":{"tf":1.0},"242":{"tf":1.0},"319":{"tf":1.0},"84":{"tf":1.0},"98":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"425":{"tf":1.0}}}},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"389":{"tf":1.0}}}}}},"u":{"d":{"df":6,"docs":{"317":{"tf":1.0},"318":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.4142135623730951},"396":{"tf":1.0},"449":{"tf":1.0}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"394":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}},"é":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":13,"docs":{"160":{"tf":1.0},"171":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.0},"293":{"tf":1.7320508075688772},"331":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"346":{"tf":1.0},"393":{"tf":1.0},"422":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":11,"docs":{"113":{"tf":1.0},"13":{"tf":1.0},"146":{"tf":1.0},"21":{"tf":1.0},"242":{"tf":1.0},"313":{"tf":1.0},"325":{"tf":1.4142135623730951},"327":{"tf":1.0},"331":{"tf":1.0},"376":{"tf":1.0},"397":{"tf":1.0}},"r":{"df":26,"docs":{"123":{"tf":1.0},"127":{"tf":1.0},"14":{"tf":1.0},"174":{"tf":1.4142135623730951},"179":{"tf":1.4142135623730951},"197":{"tf":1.0},"198":{"tf":1.0},"21":{"tf":1.0},"243":{"tf":1.0},"278":{"tf":1.0},"294":{"tf":1.0},"3":{"tf":1.0},"301":{"tf":1.0},"304":{"tf":1.0},"314":{"tf":1.7320508075688772},"317":{"tf":1.0},"324":{"tf":1.0},"331":{"tf":1.7320508075688772},"332":{"tf":1.4142135623730951},"334":{"tf":1.0},"37":{"tf":1.0},"396":{"tf":1.0},"449":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.0},"86":{"tf":1.0}}},"z":{"df":4,"docs":{"294":{"tf":1.0},"83":{"tf":1.7320508075688772},"84":{"tf":1.4142135623730951},"86":{"tf":1.0}}}},"é":{"df":1,"docs":{"161":{"tf":1.0}},"e":{"df":2,"docs":{"186":{"tf":1.0},"317":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"p":{"df":1,"docs":{"400":{"tf":1.0}}},"r":{"df":0,"docs":{},"f":{"df":3,"docs":{"393":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.4142135623730951}}}},"s":{"/":{"df":0,"docs":{},"j":{"df":2,"docs":{"400":{"tf":1.0},"418":{"tf":1.0}}}},"df":7,"docs":{"285":{"tf":1.0},"287":{"tf":1.0},"292":{"tf":1.7320508075688772},"299":{"tf":1.0},"375":{"tf":1.0},"389":{"tf":1.0},"403":{"tf":1.0}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"+":{"c":{"df":2,"docs":{"252":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"349":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"l":{"df":12,"docs":{"119":{"tf":1.4142135623730951},"124":{"tf":1.0},"133":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":1.0},"166":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.0},"206":{"tf":1.0},"288":{"tf":1.0},"449":{"tf":1.0},"84":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"206":{"tf":1.0},"207":{"tf":1.4142135623730951}}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"190":{"tf":1.0},"205":{"tf":1.0}}}}}}},"v":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"v":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"d":{"df":1,"docs":{"178":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":1,"docs":{"390":{"tf":1.0}}}},"y":{"c":{"df":0,"docs":{},"l":{"df":3,"docs":{"10":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"x":{"df":4,"docs":{"176":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.0},"381":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"ô":{"df":0,"docs":{},"t":{"df":16,"docs":{"108":{"tf":1.0},"165":{"tf":1.4142135623730951},"166":{"tf":1.0},"167":{"tf":1.0},"200":{"tf":1.0},"214":{"tf":1.0},"332":{"tf":1.0},"355":{"tf":1.0},"358":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"393":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0},"418":{"tf":1.0},"67":{"tf":1.0}}}},"œ":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"372":{"tf":1.0},"82":{"tf":1.0}}}}},"’":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":77,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"147":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.4142135623730951},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"249":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}}},"d":{"\'":{"a":{"c":{"c":{"df":0,"docs":{},"è":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"325":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"193":{"tf":1.0},"325":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"124":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":2,"docs":{"244":{"tf":1.0},"325":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"124":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"314":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"207":{"tf":1.0}}},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"189":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":0,"docs":{}}},"é":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"124":{"tf":1.0}}}}}},"df":0,"docs":{}}},"[":{"0":{"3":{"df":3,"docs":{"277":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"420":{"tf":1.0},"444":{"tf":1.0}}}}}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"174":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"317":{"tf":1.4142135623730951}}}}},"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"[":{"\\"":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"169":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":34,"docs":{"1":{"tf":1.0},"102":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":1.0},"148":{"tf":1.4142135623730951},"156":{"tf":1.0},"160":{"tf":2.0},"163":{"tf":1.0},"166":{"tf":1.4142135623730951},"168":{"tf":1.0},"169":{"tf":1.4142135623730951},"171":{"tf":1.7320508075688772},"174":{"tf":2.8284271247461903},"183":{"tf":1.4142135623730951},"186":{"tf":1.4142135623730951},"187":{"tf":1.0},"210":{"tf":1.4142135623730951},"272":{"tf":1.0},"281":{"tf":1.0},"296":{"tf":2.0},"317":{"tf":1.4142135623730951},"370":{"tf":1.4142135623730951},"379":{"tf":2.0},"380":{"tf":2.23606797749979},"381":{"tf":1.4142135623730951},"413":{"tf":2.23606797749979},"414":{"tf":1.0},"420":{"tf":1.4142135623730951},"436":{"tf":1.0},"444":{"tf":1.0},"447":{"tf":1.4142135623730951},"76":{"tf":1.0},"96":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"174":{"tf":1.0}}}}}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":6,"docs":{"281":{"tf":1.0},"292":{"tf":1.0},"333":{"tf":1.0},"375":{"tf":1.0},"417":{"tf":1.0},"438":{"tf":1.0}}}}}}},"n":{"df":168,"docs":{"102":{"tf":1.0},"106":{"tf":1.0},"11":{"tf":1.0},"123":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"148":{"tf":1.4142135623730951},"151":{"tf":1.4142135623730951},"153":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.4142135623730951},"160":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.7320508075688772},"167":{"tf":1.0},"169":{"tf":1.0},"17":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.7320508075688772},"175":{"tf":1.7320508075688772},"177":{"tf":1.7320508075688772},"179":{"tf":1.0},"18":{"tf":1.7320508075688772},"181":{"tf":1.0},"186":{"tf":2.449489742783178},"188":{"tf":1.0},"19":{"tf":1.4142135623730951},"190":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":2.0},"202":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"213":{"tf":1.0},"214":{"tf":1.4142135623730951},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.7320508075688772},"240":{"tf":1.0},"244":{"tf":1.7320508075688772},"249":{"tf":1.7320508075688772},"25":{"tf":1.0},"253":{"tf":1.0},"257":{"tf":1.7320508075688772},"258":{"tf":1.7320508075688772},"259":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"278":{"tf":1.0},"279":{"tf":1.0},"282":{"tf":1.0},"285":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.7320508075688772},"291":{"tf":1.4142135623730951},"293":{"tf":1.7320508075688772},"294":{"tf":2.0},"296":{"tf":1.4142135623730951},"297":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":2.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"312":{"tf":1.0},"317":{"tf":1.0},"323":{"tf":1.0},"328":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"348":{"tf":1.0},"35":{"tf":1.0},"351":{"tf":1.4142135623730951},"352":{"tf":1.4142135623730951},"359":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":2.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"375":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"381":{"tf":1.0},"382":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"390":{"tf":1.4142135623730951},"394":{"tf":1.0},"397":{"tf":1.0},"4":{"tf":1.0},"403":{"tf":1.4142135623730951},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"417":{"tf":1.0},"420":{"tf":1.0},"428":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.4142135623730951},"45":{"tf":1.0},"451":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":2.0},"83":{"tf":1.0},"84":{"tf":1.7320508075688772},"86":{"tf":1.0},"88":{"tf":1.7320508075688772},"90":{"tf":1.0},"92":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"b":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"r":{"d":{"df":4,"docs":{"330":{"tf":1.7320508075688772},"331":{"tf":1.4142135623730951},"333":{"tf":1.4142135623730951},"375":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"a":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":2,"docs":{"293":{"tf":1.0},"326":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"293":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"b":{"a":{"df":0,"docs":{},"s":{"df":4,"docs":{"291":{"tf":1.7320508075688772},"293":{"tf":1.0},"300":{"tf":1.0},"85":{"tf":1.4142135623730951}},"e":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"109":{"tf":1.0},"323":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"155":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"$":{"df":0,"docs":{},"{":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"w":{"d":{"df":0,"docs":{},"}":{"@":{"1":{"2":{"7":{".":{"0":{".":{"0":{".":{"1":{":":{"5":{"4":{"3":{"2":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"d":{"b":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"@":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{":":{"5":{"4":{"3":{"2":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"@":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"5":{"4":{"3":{"2":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"290":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":5,"docs":{"185":{"tf":1.4142135623730951},"238":{"tf":1.0},"291":{"tf":1.7320508075688772},"300":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"333":{"tf":1.0},"424":{"tf":1.4142135623730951},"425":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":2,"docs":{"199":{"tf":1.0},"23":{"tf":1.0}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"b":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"313":{"tf":1.0},"325":{"tf":1.0}}}}},"[":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"v":{"a":{"df":0,"docs":{},"l":{"(":{"\\"":{"df":0,"docs":{},"m":{"a":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"\\"":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"259":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"=":{"4":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":36,"docs":{"169":{"tf":1.4142135623730951},"180":{"tf":2.0},"185":{"tf":1.0},"232":{"tf":1.0},"244":{"tf":1.4142135623730951},"247":{"tf":1.4142135623730951},"248":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"250":{"tf":1.4142135623730951},"259":{"tf":1.0},"313":{"tf":1.4142135623730951},"314":{"tf":1.4142135623730951},"316":{"tf":1.7320508075688772},"325":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.4142135623730951},"347":{"tf":1.4142135623730951},"348":{"tf":3.4641016151377544},"349":{"tf":1.4142135623730951},"351":{"tf":1.0},"352":{"tf":2.0},"354":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.4142135623730951},"360":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"414":{"tf":2.23606797749979},"423":{"tf":2.6457513110645907},"424":{"tf":2.449489742783178},"425":{"tf":2.0},"426":{"tf":2.23606797749979},"427":{"tf":2.6457513110645907},"428":{"tf":2.23606797749979},"429":{"tf":1.7320508075688772}}},"df":18,"docs":{"109":{"tf":1.0},"117":{"tf":1.0},"129":{"tf":1.4142135623730951},"174":{"tf":1.0},"178":{"tf":1.0},"206":{"tf":1.0},"277":{"tf":1.0},"291":{"tf":1.0},"300":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"389":{"tf":1.0},"403":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"88":{"tf":1.0}},"e":{"b":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":3,"docs":{"101":{"tf":1.0},"147":{"tf":1.0},"199":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}},"df":4,"docs":{"101":{"tf":1.0},"151":{"tf":1.0},"288":{"tf":1.0},"81":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"355":{"tf":1.0}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"g":{"df":4,"docs":{"313":{"tf":1.0},"324":{"tf":1.0},"393":{"tf":1.0},"443":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}}},"d":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"83":{"tf":1.0}}}},"df":0,"docs":{}},"df":325,"docs":{"1":{"tf":2.449489742783178},"10":{"tf":1.7320508075688772},"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":2.0},"104":{"tf":1.7320508075688772},"106":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"122":{"tf":1.0},"134":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.4142135623730951},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.7320508075688772},"147":{"tf":1.4142135623730951},"148":{"tf":1.4142135623730951},"15":{"tf":1.7320508075688772},"150":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.4142135623730951},"154":{"tf":1.0},"16":{"tf":2.8284271247461903},"160":{"tf":2.0},"161":{"tf":1.7320508075688772},"164":{"tf":1.0},"166":{"tf":1.4142135623730951},"167":{"tf":2.23606797749979},"168":{"tf":1.4142135623730951},"169":{"tf":1.7320508075688772},"17":{"tf":2.0},"171":{"tf":2.6457513110645907},"172":{"tf":2.0},"174":{"tf":1.4142135623730951},"176":{"tf":1.4142135623730951},"177":{"tf":1.0},"18":{"tf":2.0},"181":{"tf":1.4142135623730951},"183":{"tf":1.0},"186":{"tf":1.0},"189":{"tf":1.4142135623730951},"19":{"tf":1.7320508075688772},"193":{"tf":1.0},"194":{"tf":1.0},"196":{"tf":1.0},"199":{"tf":1.7320508075688772},"2":{"tf":2.6457513110645907},"20":{"tf":1.0},"201":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.4142135623730951},"206":{"tf":1.0},"208":{"tf":1.0},"21":{"tf":1.4142135623730951},"210":{"tf":1.0},"214":{"tf":1.4142135623730951},"215":{"tf":1.0},"216":{"tf":1.0},"217":{"tf":1.0},"218":{"tf":1.0},"219":{"tf":1.0},"220":{"tf":1.0},"221":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.0},"227":{"tf":1.0},"228":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":3.0},"230":{"tf":1.0},"231":{"tf":1.0},"232":{"tf":1.0},"234":{"tf":1.0},"235":{"tf":1.7320508075688772},"236":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"241":{"tf":1.0},"243":{"tf":3.3166247903554},"244":{"tf":1.0},"249":{"tf":2.23606797749979},"25":{"tf":1.0},"250":{"tf":1.7320508075688772},"26":{"tf":1.0},"260":{"tf":1.7320508075688772},"261":{"tf":1.0},"262":{"tf":1.0},"263":{"tf":1.0},"264":{"tf":1.0},"265":{"tf":1.0},"266":{"tf":1.0},"267":{"tf":1.0},"268":{"tf":1.0},"269":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.4142135623730951},"271":{"tf":1.0},"272":{"tf":1.0},"273":{"tf":1.0},"274":{"tf":1.4142135623730951},"275":{"tf":1.0},"276":{"tf":2.0},"277":{"tf":2.23606797749979},"278":{"tf":1.4142135623730951},"279":{"tf":2.23606797749979},"28":{"tf":1.0},"280":{"tf":2.23606797749979},"281":{"tf":2.6457513110645907},"282":{"tf":1.0},"283":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":2.0},"286":{"tf":1.7320508075688772},"287":{"tf":1.4142135623730951},"288":{"tf":2.0},"289":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.7320508075688772},"291":{"tf":1.4142135623730951},"293":{"tf":2.449489742783178},"294":{"tf":1.0},"296":{"tf":1.4142135623730951},"298":{"tf":1.7320508075688772},"3":{"tf":2.0},"30":{"tf":1.0},"301":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.0},"304":{"tf":1.0},"305":{"tf":1.0},"306":{"tf":1.0},"307":{"tf":1.0},"308":{"tf":1.4142135623730951},"309":{"tf":1.0},"31":{"tf":1.0},"310":{"tf":1.7320508075688772},"314":{"tf":1.7320508075688772},"316":{"tf":1.0},"318":{"tf":1.4142135623730951},"319":{"tf":1.4142135623730951},"32":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":2.0},"324":{"tf":1.4142135623730951},"325":{"tf":2.0},"326":{"tf":1.7320508075688772},"327":{"tf":1.7320508075688772},"329":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":3.0},"331":{"tf":2.449489742783178},"332":{"tf":2.0},"333":{"tf":2.6457513110645907},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":1.7320508075688772},"34":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.4142135623730951},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"345":{"tf":2.0},"346":{"tf":1.7320508075688772},"347":{"tf":2.0},"349":{"tf":1.4142135623730951},"35":{"tf":1.0},"351":{"tf":1.4142135623730951},"352":{"tf":1.4142135623730951},"353":{"tf":2.0},"354":{"tf":1.0},"356":{"tf":2.23606797749979},"357":{"tf":2.0},"359":{"tf":1.0},"36":{"tf":1.0},"361":{"tf":1.7320508075688772},"363":{"tf":1.4142135623730951},"364":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"369":{"tf":1.0},"37":{"tf":1.0},"372":{"tf":1.4142135623730951},"373":{"tf":1.7320508075688772},"375":{"tf":1.4142135623730951},"376":{"tf":1.0},"377":{"tf":1.4142135623730951},"379":{"tf":1.0},"38":{"tf":1.0},"381":{"tf":2.0},"382":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":1.7320508075688772},"387":{"tf":1.0},"388":{"tf":1.4142135623730951},"389":{"tf":1.0},"39":{"tf":1.0},"390":{"tf":2.0},"391":{"tf":1.0},"393":{"tf":2.449489742783178},"394":{"tf":1.4142135623730951},"396":{"tf":1.0},"397":{"tf":2.6457513110645907},"398":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.0},"401":{"tf":1.4142135623730951},"403":{"tf":1.4142135623730951},"404":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.7320508075688772},"415":{"tf":1.0},"416":{"tf":2.449489742783178},"417":{"tf":1.0},"418":{"tf":1.0},"419":{"tf":2.23606797749979},"42":{"tf":1.0},"421":{"tf":1.7320508075688772},"422":{"tf":2.449489742783178},"423":{"tf":1.4142135623730951},"426":{"tf":1.0},"427":{"tf":1.0},"429":{"tf":1.0},"43":{"tf":1.4142135623730951},"430":{"tf":1.4142135623730951},"431":{"tf":1.0},"432":{"tf":1.0},"433":{"tf":1.0},"434":{"tf":1.4142135623730951},"435":{"tf":1.0},"436":{"tf":1.0},"437":{"tf":1.0},"438":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"440":{"tf":1.0},"441":{"tf":1.0},"442":{"tf":1.0},"443":{"tf":2.0},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":2.0},"449":{"tf":1.0},"45":{"tf":1.0},"450":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":2.449489742783178},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.4142135623730951},"7":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":2.23606797749979},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.7320508075688772},"76":{"tf":2.0},"77":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.7320508075688772},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":3.1622776601683795},"84":{"tf":2.0},"85":{"tf":2.23606797749979},"86":{"tf":1.7320508075688772},"88":{"tf":1.4142135623730951},"9":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0},"95":{"tf":1.4142135623730951},"98":{"tf":1.7320508075688772}},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"238":{"tf":1.0},"319":{"tf":1.0}},"e":{"=":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":2,"docs":{"102":{"tf":1.0},"298":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":5,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"213":{"tf":1.0},"300":{"tf":1.0},"394":{"tf":1.0}}}},"t":{"\\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"259":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":9,"docs":{"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"146":{"tf":1.0},"165":{"tf":1.0},"241":{"tf":1.0},"373":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}}}}},"df":0,"docs":{}}}},"t":{"a":{"df":2,"docs":{"294":{"tf":1.4142135623730951},"356":{"tf":1.0}}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"277":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"0":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"1":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"i":{"df":5,"docs":{"166":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"390":{"tf":1.0}}},"y":{"(":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"392":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"392":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"p":{"df":2,"docs":{"208":{"tf":1.4142135623730951},"390":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":16,"docs":{"1":{"tf":1.0},"168":{"tf":1.7320508075688772},"176":{"tf":1.4142135623730951},"178":{"tf":1.4142135623730951},"179":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.4142135623730951},"186":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.4142135623730951},"195":{"tf":1.0},"196":{"tf":1.0},"211":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"74":{"tf":1.0}},"s":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"84":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"113":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"102":{"tf":1.0},"110":{"tf":1.0},"113":{"tf":1.0}}}}},"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"q":{"d":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"=":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"111":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"111":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"111":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"113":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":1,"docs":{"123":{"tf":2.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"/":{"c":{"df":0,"docs":{},"i":{"df":6,"docs":{"146":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"174":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"111":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":1,"docs":{"111":{"tf":2.0}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":4,"docs":{"112":{"tf":1.0},"113":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":1,"docs":{"116":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":5,"docs":{"146":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.4142135623730951},"165":{"tf":1.0},"171":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}},"o":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"325":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.0}}}}}}},"df":2,"docs":{"21":{"tf":1.7320508075688772},"22":{"tf":1.0}}}},"u":{"df":0,"docs":{},"i":{"df":29,"docs":{"104":{"tf":1.4142135623730951},"106":{"tf":1.0},"147":{"tf":1.0},"158":{"tf":1.0},"161":{"tf":1.0},"163":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"20":{"tf":1.0},"206":{"tf":1.0},"240":{"tf":1.0},"285":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"299":{"tf":1.0},"400":{"tf":1.0},"414":{"tf":1.0},"418":{"tf":1.0},"448":{"tf":1.0},"450":{"tf":1.4142135623730951},"451":{"tf":1.4142135623730951},"5":{"tf":1.0},"74":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0},"89":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"72":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":2,"docs":{"102":{"tf":1.4142135623730951},"443":{"tf":1.0}}}}}}},"s":{"c":{"df":1,"docs":{"185":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":11,"docs":{"153":{"tf":1.0},"241":{"tf":1.0},"243":{"tf":1.0},"257":{"tf":1.0},"317":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":2.0},"332":{"tf":1.0},"333":{"tf":1.0},"419":{"tf":1.0},"423":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"375":{"tf":1.4142135623730951},"417":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":3,"docs":{"189":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.0}}}},"u":{"df":2,"docs":{"147":{"tf":1.0},"416":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":3,"docs":{"280":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"317":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"x":{"df":19,"docs":{"103":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"168":{"tf":1.4142135623730951},"17":{"tf":1.0},"19":{"tf":1.0},"231":{"tf":1.0},"232":{"tf":1.4142135623730951},"244":{"tf":1.0},"276":{"tf":1.0},"287":{"tf":1.0},"291":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"412":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":1.0}},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"m":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"v":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"109":{"tf":1.0},"206":{"tf":1.0}}}}},"t":{"c":{"df":0,"docs":{},"p":{"/":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"104":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"[":{"d":{"df":0,"docs":{},"é":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"214":{"tf":1.0}}}}},"df":9,"docs":{"108":{"tf":1.0},"147":{"tf":1.0},"169":{"tf":1.4142135623730951},"252":{"tf":1.0},"278":{"tf":1.0},"288":{"tf":1.4142135623730951},"293":{"tf":1.0},"424":{"tf":1.7320508075688772},"425":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":2,"docs":{"372":{"tf":1.0},"427":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"421":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"451":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"/":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"421":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":1,"docs":{"421":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"z":{"df":4,"docs":{"277":{"tf":1.4142135623730951},"293":{"tf":1.0},"300":{"tf":1.0},"72":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"214":{"tf":1.0}}},"t":{"df":1,"docs":{"86":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"86":{"tf":1.0}}}}}}}},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"104":{"tf":1.0},"133":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":5,"docs":{"250":{"tf":1.0},"281":{"tf":1.0},"414":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"389":{"tf":1.0}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"23":{"tf":1.0},"290":{"tf":1.0},"330":{"tf":1.0}}}}}}}}},"g":{"df":2,"docs":{"101":{"tf":1.0},"133":{"tf":1.0}}},"r":{":":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"180":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":1,"docs":{"373":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"t":{"df":16,"docs":{"133":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.0},"163":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"181":{"tf":1.0},"187":{"tf":1.0},"255":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.0},"355":{"tf":1.0},"362":{"tf":1.0},"379":{"tf":1.0},"383":{"tf":1.0},"419":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"19":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"184":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"243":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"393":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":11,"docs":{"101":{"tf":1.0},"146":{"tf":1.0},"174":{"tf":1.0},"178":{"tf":1.0},"295":{"tf":1.0},"298":{"tf":1.0},"323":{"tf":1.0},"328":{"tf":1.0},"364":{"tf":1.0},"394":{"tf":1.0},"72":{"tf":1.0}}},"s":{"df":1,"docs":{"171":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"287":{"tf":1.0},"346":{"tf":1.0},"348":{"tf":1.0},"393":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"145":{"tf":1.4142135623730951},"146":{"tf":1.4142135623730951},"148":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.0},"154":{"tf":1.0},"160":{"tf":1.4142135623730951},"169":{"tf":1.0},"171":{"tf":1.0},"210":{"tf":1.0},"420":{"tf":1.0},"443":{"tf":1.0},"74":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"232":{"tf":1.0},"346":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"3":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"198":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"105":{"tf":1.0},"111":{"tf":1.0},"252":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"290":{"tf":1.0}}}},"z":{"df":1,"docs":{"290":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"153":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"351":{"tf":1.4142135623730951},"357":{"tf":1.0}}}}},"á":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":73,"docs":{"12":{"tf":1.4142135623730951},"136":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"144":{"tf":1.4142135623730951},"216":{"tf":1.4142135623730951},"218":{"tf":1.4142135623730951},"220":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"228":{"tf":1.4142135623730951},"230":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"261":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"265":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"283":{"tf":1.4142135623730951},"3":{"tf":1.0},"30":{"tf":1.4142135623730951},"303":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"342":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"385":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"431":{"tf":1.4142135623730951},"433":{"tf":1.4142135623730951},"435":{"tf":1.4142135623730951},"437":{"tf":1.4142135623730951},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"441":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"91":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"l":{".":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":2,"docs":{"151":{"tf":1.0},"166":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":3,"docs":{"101":{"tf":1.0},"128":{"tf":1.0},"133":{"tf":1.0}}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"214":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"444":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"214":{"tf":1.0},"444":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"3":{"0":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"169":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":41,"docs":{"101":{"tf":1.4142135623730951},"109":{"tf":1.7320508075688772},"124":{"tf":1.0},"134":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":1.0},"148":{"tf":1.7320508075688772},"151":{"tf":1.7320508075688772},"156":{"tf":1.0},"160":{"tf":1.7320508075688772},"163":{"tf":1.0},"166":{"tf":1.4142135623730951},"167":{"tf":1.4142135623730951},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"178":{"tf":1.7320508075688772},"186":{"tf":1.0},"2":{"tf":1.0},"205":{"tf":1.0},"212":{"tf":1.0},"286":{"tf":1.0},"291":{"tf":1.4142135623730951},"300":{"tf":1.0},"318":{"tf":1.4142135623730951},"323":{"tf":1.0},"444":{"tf":1.7320508075688772},"445":{"tf":1.0},"446":{"tf":1.0},"73":{"tf":1.4142135623730951},"79":{"tf":1.4142135623730951},"80":{"tf":1.0},"81":{"tf":2.0},"82":{"tf":2.0},"84":{"tf":3.0},"85":{"tf":2.449489742783178},"86":{"tf":1.0},"87":{"tf":1.4142135623730951},"88":{"tf":2.23606797749979},"89":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0}}}}},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"168":{"tf":1.0},"174":{"tf":1.0},"2":{"tf":1.4142135623730951},"231":{"tf":1.0},"235":{"tf":1.0},"258":{"tf":1.0},"280":{"tf":1.0},"3":{"tf":1.4142135623730951},"358":{"tf":1.0},"388":{"tf":1.0},"4":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}},"é":{"df":1,"docs":{"249":{"tf":1.0}}}}}}}}},"df":1,"docs":{"394":{"tf":1.0}},"i":{"df":2,"docs":{"17":{"tf":1.0},"6":{"tf":1.7320508075688772}},"t":{"df":18,"docs":{"106":{"tf":1.0},"133":{"tf":1.4142135623730951},"163":{"tf":1.0},"164":{"tf":1.0},"167":{"tf":1.0},"171":{"tf":1.4142135623730951},"18":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.0},"21":{"tf":1.0},"212":{"tf":1.0},"290":{"tf":1.0},"294":{"tf":1.0},"388":{"tf":1.0},"389":{"tf":1.0},"394":{"tf":1.0},"83":{"tf":1.0},"98":{"tf":1.4142135623730951}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"288":{"tf":1.0},"292":{"tf":1.0},"85":{"tf":1.0}}}}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{">":{"/":{".":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"133":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":1,"docs":{"116":{"tf":1.0}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"124":{"tf":1.0}}}}}}}},":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},";":{"/":{"df":0,"docs":{},"g":{"df":1,"docs":{"130":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"130":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":17,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.4142135623730951},"111":{"tf":1.0},"117":{"tf":1.0},"119":{"tf":1.4142135623730951},"124":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.4142135623730951},"130":{"tf":1.0},"131":{"tf":1.4142135623730951},"133":{"tf":1.0},"243":{"tf":1.0},"363":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"400":{"tf":1.0},"95":{"tf":1.0}},"e":{">":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"206":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"146":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"c":{"df":2,"docs":{"152":{"tf":1.0},"244":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":5,"docs":{"104":{"tf":1.0},"206":{"tf":1.0},"289":{"tf":1.7320508075688772},"292":{"tf":1.0},"294":{"tf":1.7320508075688772}}},"n":{"df":1,"docs":{"20":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"249":{"tf":1.0}}}},"z":{"df":1,"docs":{"294":{"tf":1.0}}}},"é":{"df":28,"docs":{"102":{"tf":1.0},"249":{"tf":1.4142135623730951},"260":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.4142135623730951},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"293":{"tf":1.0},"322":{"tf":1.0},"324":{"tf":1.0},"326":{"tf":1.0},"339":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"373":{"tf":1.0},"386":{"tf":1.0},"397":{"tf":1.4142135623730951},"412":{"tf":1.0},"419":{"tf":1.0},"443":{"tf":1.0},"75":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":2.0},"88":{"tf":1.0}}}},"t":{"df":2,"docs":{"152":{"tf":1.0},"349":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"16":{"tf":1.4142135623730951},"428":{"tf":1.0}}}}}}},"t":{"df":1,"docs":{"199":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"y":{":":{":":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"234":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"1":{"tf":1.0},"35":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"332":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0}}}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"84":{"tf":1.0},"88":{"tf":1.4142135623730951}},"s":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"352":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"118":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"151":{"tf":1.0},"17":{"tf":1.0},"21":{"tf":1.0},"86":{"tf":1.0}}}},"p":{"d":{"b":{"df":1,"docs":{"323":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"383":{"tf":1.0}}}},"w":{"df":0,"docs":{},"x":{"df":0,"docs":{},"r":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}}}},"t":{"df":1,"docs":{"414":{"tf":1.0}},"o":{"df":1,"docs":{"372":{"tf":1.0}},"s":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"a":{"c":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{".":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"1":{"2":{"7":{".":{"0":{".":{"0":{".":{"1":{":":{"8":{"0":{"8":{"0":{"df":1,"docs":{"211":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"[":{"\\"":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"169":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":11,"docs":{"169":{"tf":1.4142135623730951},"180":{"tf":2.6457513110645907},"184":{"tf":1.4142135623730951},"189":{"tf":2.449489742783178},"195":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"204":{"tf":1.4142135623730951},"208":{"tf":1.4142135623730951},"211":{"tf":2.0},"370":{"tf":1.0},"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"u":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"174":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":134,"docs":{"104":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"11":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"15":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.4142135623730951},"156":{"tf":1.0},"158":{"tf":1.0},"16":{"tf":1.0},"160":{"tf":1.4142135623730951},"165":{"tf":1.0},"166":{"tf":2.0},"167":{"tf":1.4142135623730951},"168":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":2.23606797749979},"172":{"tf":1.0},"174":{"tf":1.4142135623730951},"175":{"tf":1.4142135623730951},"177":{"tf":1.4142135623730951},"181":{"tf":1.4142135623730951},"195":{"tf":1.0},"21":{"tf":1.7320508075688772},"211":{"tf":1.0},"214":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"243":{"tf":1.0},"25":{"tf":1.4142135623730951},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.4142135623730951},"282":{"tf":1.0},"29":{"tf":1.0},"293":{"tf":1.4142135623730951},"3":{"tf":1.0},"300":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"325":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.4142135623730951},"332":{"tf":1.4142135623730951},"333":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"35":{"tf":1.0},"356":{"tf":1.4142135623730951},"362":{"tf":1.4142135623730951},"363":{"tf":1.0},"364":{"tf":1.4142135623730951},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"375":{"tf":1.7320508075688772},"376":{"tf":1.0},"377":{"tf":1.0},"379":{"tf":1.4142135623730951},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"400":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.4142135623730951},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.4142135623730951},"59":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.0},"81":{"tf":1.0},"84":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"363":{"tf":1.0}}}}}}},"r":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"187":{"tf":1.0},"74":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"125":{"tf":1.0}}}}}},"df":3,"docs":{"244":{"tf":1.0},"249":{"tf":1.7320508075688772},"390":{"tf":1.0}},"é":{"df":3,"docs":{"243":{"tf":1.0},"375":{"tf":1.0},"393":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{".":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"445":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":15,"docs":{"231":{"tf":1.0},"232":{"tf":1.0},"239":{"tf":1.0},"240":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"249":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.0},"257":{"tf":1.0},"375":{"tf":1.0},"418":{"tf":1.0},"445":{"tf":1.0},"75":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"é":{"b":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"206":{"tf":1.0}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"182":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"23":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"291":{"tf":1.0}}}}}}},"c":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":5,"docs":{"250":{"tf":1.0},"281":{"tf":1.4142135623730951},"394":{"tf":1.0},"438":{"tf":1.0},"76":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"201":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"446":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"208":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"426":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"166":{"tf":1.0},"213":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"105":{"tf":1.0},"330":{"tf":1.0}}}},"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"330":{"tf":1.0}}}}}}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"419":{"tf":1.0}}}},"df":2,"docs":{"169":{"tf":1.0},"419":{"tf":1.0}}}},"v":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"89":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"358":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":8,"docs":{"147":{"tf":1.0},"154":{"tf":1.0},"210":{"tf":1.0},"296":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.4142135623730951},"357":{"tf":1.0},"83":{"tf":1.0}},"é":{"df":1,"docs":{"322":{"tf":1.0}},"e":{"df":3,"docs":{"171":{"tf":1.0},"352":{"tf":1.0},"355":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":18,"docs":{"104":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"156":{"tf":1.0},"158":{"tf":1.4142135623730951},"161":{"tf":1.0},"173":{"tf":1.0},"177":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.4142135623730951},"244":{"tf":1.0},"249":{"tf":1.4142135623730951},"257":{"tf":1.0},"290":{"tf":1.0},"296":{"tf":1.0},"298":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"208":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"187":{"tf":1.0},"189":{"tf":1.0},"212":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":4,"docs":{"150":{"tf":1.0},"166":{"tf":1.0},"293":{"tf":1.0},"382":{"tf":1.0}},"r":{"df":1,"docs":{"166":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"298":{"tf":1.0}}}}}},"t":{"df":1,"docs":{"388":{"tf":1.0}}}}}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"277":{"tf":1.0},"72":{"tf":1.0}}}}}}}}},"j":{"df":15,"docs":{"133":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"160":{"tf":1.0},"165":{"tf":1.0},"192":{"tf":1.0},"199":{"tf":1.0},"323":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"351":{"tf":1.0},"356":{"tf":1.0},"392":{"tf":1.0},"425":{"tf":1.0}}},"l":{"df":0,"docs":{},"è":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":2,"docs":{"148":{"tf":1.0},"420":{"tf":1.0}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"361":{"tf":1.0}}}}}}}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"443":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":16,"docs":{"204":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.0},"242":{"tf":1.4142135623730951},"244":{"tf":1.0},"255":{"tf":1.0},"364":{"tf":1.0},"374":{"tf":1.0},"414":{"tf":1.4142135623730951},"71":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.0},"92":{"tf":1.0}}}},"df":7,"docs":{"173":{"tf":1.0},"183":{"tf":1.0},"287":{"tf":1.0},"300":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"414":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"80":{"tf":1.0},"87":{"tf":1.0}}}},"r":{"a":{"df":1,"docs":{"290":{"tf":1.0}}},"df":3,"docs":{"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}}},"z":{"df":3,"docs":{"300":{"tf":1.0},"79":{"tf":1.0},"85":{"tf":1.4142135623730951}}}},"é":{"df":1,"docs":{"72":{"tf":1.0}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"1":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"p":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"133":{"tf":1.0},"166":{"tf":1.0},"71":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"219":{"tf":1.0},"221":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}}},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.0},"2":{"tf":1.0},"81":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"189":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"n":{"c":{"df":12,"docs":{"288":{"tf":1.0},"293":{"tf":1.0},"356":{"tf":1.0},"369":{"tf":1.0},"370":{"tf":1.0},"373":{"tf":1.0},"390":{"tf":1.0},"397":{"tf":1.0},"421":{"tf":1.0},"447":{"tf":1.0},"84":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"372":{"tf":1.0}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"414":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"a":{"c":{"df":3,"docs":{"107":{"tf":1.0},"122":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"r":{"df":1,"docs":{"103":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":11,"docs":{"110":{"tf":1.0},"113":{"tf":1.0},"178":{"tf":1.0},"187":{"tf":1.0},"235":{"tf":1.0},"270":{"tf":1.0},"420":{"tf":1.0},"444":{"tf":1.0},"446":{"tf":1.0},"76":{"tf":1.0},"89":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"2":{"tf":1.0},"71":{"tf":1.0}}}}}},"y":{"df":2,"docs":{"186":{"tf":1.0},"211":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"116":{"tf":1.0},"178":{"tf":1.0},"4":{"tf":1.0},"80":{"tf":1.0},"95":{"tf":1.0}}}},"é":{"df":1,"docs":{"87":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"16":{"tf":1.0}}}}},"ô":{"df":0,"docs":{},"t":{"df":50,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"146":{"tf":1.0},"16":{"tf":1.7320508075688772},"164":{"tf":1.0},"167":{"tf":1.0},"173":{"tf":1.4142135623730951},"174":{"tf":1.4142135623730951},"175":{"tf":1.4142135623730951},"177":{"tf":1.0},"181":{"tf":1.0},"186":{"tf":1.0},"189":{"tf":1.0},"194":{"tf":1.0},"21":{"tf":2.449489742783178},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"279":{"tf":1.0},"287":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"296":{"tf":1.0},"3":{"tf":1.0},"322":{"tf":1.0},"325":{"tf":1.0},"326":{"tf":1.0},"331":{"tf":3.0},"333":{"tf":1.0},"345":{"tf":1.4142135623730951},"346":{"tf":1.0},"363":{"tf":1.0},"375":{"tf":1.4142135623730951},"396":{"tf":1.0},"416":{"tf":1.4142135623730951},"422":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.0},"428":{"tf":1.0},"442":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.4142135623730951},"450":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.7320508075688772},"84":{"tf":1.7320508075688772}},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"122":{"tf":1.0},"199":{"tf":1.0}},"é":{"df":4,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"326":{"tf":1.0},"417":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"é":{"df":1,"docs":{"23":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"353":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"318":{"tf":1.0},"375":{"tf":1.0}},"l":{"df":1,"docs":{"414":{"tf":1.0}},"é":{"df":2,"docs":{"207":{"tf":1.0},"421":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"104":{"tf":1.0},"168":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"373":{"tf":1.0},"379":{"tf":1.0},"390":{"tf":1.0}}}}},"é":{"df":1,"docs":{"181":{"tf":1.0}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"352":{"tf":1.0}}}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"352":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":8,"docs":{"1":{"tf":1.0},"277":{"tf":1.0},"285":{"tf":1.4142135623730951},"290":{"tf":1.0},"296":{"tf":1.0},"326":{"tf":1.0},"443":{"tf":1.0},"84":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":7,"docs":{"2":{"tf":1.7320508075688772},"256":{"tf":1.0},"276":{"tf":1.4142135623730951},"3":{"tf":1.0},"4":{"tf":1.4142135623730951},"424":{"tf":1.0},"425":{"tf":1.0}}}}}}}}}}}},"’":{"a":{"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"293":{"tf":1.0},"86":{"tf":1.0}}}}}},"è":{"df":2,"docs":{"332":{"tf":1.0},"98":{"tf":1.0}}},"é":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"330":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":5,"docs":{"2":{"tf":1.0},"332":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":1.0},"71":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"21":{"tf":1.0}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"277":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}}},"r":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"419":{"tf":1.0}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"281":{"tf":1.0},"76":{"tf":1.0}}}}}},"df":0,"docs":{}}},"v":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"346":{"tf":1.0}}}}}}},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"243":{"tf":1.0},"346":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"363":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"18":{"tf":1.4142135623730951},"393":{"tf":1.0},"416":{"tf":1.0},"449":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"319":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"l":{"df":7,"docs":{"16":{"tf":1.0},"232":{"tf":1.0},"281":{"tf":1.0},"287":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"82":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"é":{"df":1,"docs":{"412":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"372":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":8,"docs":{"152":{"tf":1.0},"229":{"tf":1.0},"232":{"tf":1.0},"234":{"tf":1.0},"285":{"tf":1.0},"3":{"tf":1.0},"443":{"tf":1.0},"75":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"280":{"tf":1.0},"330":{"tf":1.0},"401":{"tf":1.0},"9":{"tf":1.0}}}}}}},"x":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"290":{"tf":1.4142135623730951},"449":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"76":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"187":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"364":{"tf":1.0}}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":7,"docs":{"150":{"tf":1.0},"171":{"tf":1.0},"287":{"tf":1.0},"327":{"tf":1.0},"397":{"tf":1.0},"420":{"tf":1.0},"98":{"tf":1.0}}}}},"df":0,"docs":{}}}},"h":{"df":0,"docs":{},"é":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"412":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"399":{"tf":1.0},"420":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"345":{"tf":1.0},"450":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"401":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"252":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"361":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"330":{"tf":1.0},"86":{"tf":1.0}}}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"397":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"448":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"148":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"345":{"tf":1.0},"350":{"tf":1.0}}}}}}}}},"u":{"df":0,"docs":{},"n":{"df":7,"docs":{"175":{"tf":1.0},"255":{"tf":1.0},"330":{"tf":1.4142135623730951},"423":{"tf":1.0},"49":{"tf":1.0},"6":{"tf":1.0},"82":{"tf":1.0}},"e":{"df":6,"docs":{"10":{"tf":1.0},"153":{"tf":1.0},"276":{"tf":1.0},"426":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":10,"docs":{"145":{"tf":1.0},"442":{"tf":1.0},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"332":{"tf":1.0},"416":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"é":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"175":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"346":{"tf":1.0}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"377":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{},"e":{"2":{"df":15,"docs":{"124":{"tf":1.0},"279":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"318":{"tf":1.0},"320":{"tf":1.4142135623730951},"322":{"tf":1.4142135623730951},"324":{"tf":1.0},"325":{"tf":1.4142135623730951},"326":{"tf":1.0},"327":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"403":{"tf":1.0},"443":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"443":{"tf":1.0}}}}}},"df":0,"docs":{}}},"[":{"0":{"4":{"df":2,"docs":{"6":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":13,"docs":{"146":{"tf":1.0},"174":{"tf":1.7320508075688772},"186":{"tf":1.0},"272":{"tf":1.0},"281":{"tf":1.0},"296":{"tf":1.0},"317":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.7320508075688772},"381":{"tf":1.0},"413":{"tf":1.0},"436":{"tf":1.0},"9":{"tf":1.0}}},"y":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"174":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":11,"docs":{"102":{"tf":1.4142135623730951},"104":{"tf":1.7320508075688772},"106":{"tf":1.0},"109":{"tf":1.0},"123":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.0},"294":{"tf":1.0},"317":{"tf":2.0},"321":{"tf":1.0}}}}},"d":{"2":{"5":{"5":{"1":{"9":{"df":3,"docs":{"19":{"tf":2.0},"374":{"tf":1.0},"426":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"111":{"tf":1.0},"166":{"tf":1.0}}}}}}},"df":14,"docs":{"105":{"tf":1.0},"113":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"185":{"tf":1.0},"290":{"tf":1.0},"297":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"86":{"tf":1.4142135623730951},"9":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":2,"docs":{"117":{"tf":1.0},"129":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"255":{"tf":1.0},"427":{"tf":1.0}},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"d":{"b":{"df":1,"docs":{"427":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"d":{"b":{"df":4,"docs":{"424":{"tf":1.0},"425":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"t":{"df":7,"docs":{"232":{"tf":1.0},"237":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.7320508075688772},"248":{"tf":1.0},"250":{"tf":1.0},"317":{"tf":1.0}}}}},"p":{"@":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"x":{"\\\\":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"/":{"1":{"\\\\":{".":{"df":0,"docs":{},"x":{"df":0,"docs":{},"|":{"df":0,"docs":{},"p":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"l":{"df":14,"docs":{"1":{"tf":1.0},"176":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"21":{"tf":1.0},"234":{"tf":1.0},"249":{"tf":1.0},"290":{"tf":1.0},"3":{"tf":1.0},"375":{"tf":1.0},"75":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"9":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}},"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"133":{"tf":1.0}},"s":{":":{"/":{"/":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":1,"docs":{"236":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"319":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"_":{"df":1,"docs":{"238":{"tf":1.0}}},"df":0,"docs":{}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"249":{"tf":1.0}},"e":{"d":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"102":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"|":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"|":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"/":{"1":{"\\\\":{".":{"0":{"2":{"df":0,"docs":{},"|":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"236":{"tf":1.0}}}}}}}},"df":11,"docs":{"102":{"tf":1.4142135623730951},"117":{"tf":1.7320508075688772},"123":{"tf":1.4142135623730951},"129":{"tf":1.7320508075688772},"243":{"tf":1.7320508075688772},"326":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.4142135623730951},"429":{"tf":1.0},"95":{"tf":1.0}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"377":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"c":{"df":1,"docs":{"316":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"19":{"tf":1.0},"294":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":9,"docs":{"115":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":2.23606797749979},"173":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":3.605551275463989},"199":{"tf":1.0},"211":{"tf":1.4142135623730951},"257":{"tf":1.0}},"e":{"/":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"318":{"tf":1.0}}}}},"df":0,"docs":{}},"d":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"116":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"116":{"tf":1.0}}}}}}}}}},"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"189":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"181":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"19":{"tf":1.0},"242":{"tf":1.0},"290":{"tf":1.0},"88":{"tf":1.0}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":6,"docs":{"114":{"tf":1.0},"117":{"tf":1.0},"133":{"tf":1.0},"445":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.4142135623730951}}}}}}},"d":{"df":11,"docs":{"169":{"tf":2.0},"180":{"tf":1.0},"287":{"tf":1.7320508075688772},"322":{"tf":1.4142135623730951},"348":{"tf":1.7320508075688772},"356":{"tf":1.4142135623730951},"370":{"tf":1.0},"413":{"tf":2.449489742783178},"414":{"tf":1.0},"427":{"tf":1.0},"82":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":9,"docs":{"191":{"tf":1.0},"279":{"tf":1.0},"316":{"tf":1.0},"343":{"tf":1.0},"347":{"tf":1.0},"393":{"tf":1.0},"396":{"tf":1.0},"449":{"tf":1.0},"451":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"df":75,"docs":{"1":{"tf":1.0},"103":{"tf":1.0},"133":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"167":{"tf":1.4142135623730951},"169":{"tf":1.0},"17":{"tf":1.0},"170":{"tf":1.0},"173":{"tf":1.0},"175":{"tf":1.4142135623730951},"176":{"tf":1.0},"18":{"tf":1.4142135623730951},"185":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.7320508075688772},"208":{"tf":1.0},"21":{"tf":1.0},"211":{"tf":1.4142135623730951},"214":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"231":{"tf":1.0},"232":{"tf":1.0},"24":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.4142135623730951},"249":{"tf":2.449489742783178},"250":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"278":{"tf":1.0},"287":{"tf":1.0},"294":{"tf":1.0},"298":{"tf":1.4142135623730951},"301":{"tf":1.0},"317":{"tf":1.0},"319":{"tf":1.4142135623730951},"323":{"tf":1.0},"327":{"tf":1.4142135623730951},"351":{"tf":1.0},"352":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.0},"382":{"tf":1.0},"390":{"tf":1.4142135623730951},"392":{"tf":1.0},"393":{"tf":1.4142135623730951},"397":{"tf":1.0},"4":{"tf":1.0},"403":{"tf":1.0},"417":{"tf":1.0},"444":{"tf":1.0},"450":{"tf":1.4142135623730951},"5":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":2.23606797749979},"72":{"tf":1.7320508075688772},"73":{"tf":1.4142135623730951},"79":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":1.4142135623730951},"89":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":17,"docs":{"146":{"tf":1.0},"147":{"tf":1.4142135623730951},"148":{"tf":1.0},"156":{"tf":1.4142135623730951},"160":{"tf":2.0},"161":{"tf":1.4142135623730951},"165":{"tf":1.4142135623730951},"166":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.4142135623730951},"174":{"tf":1.0},"370":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.4142135623730951},"81":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"160":{"tf":1.0},"174":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"/":{"*":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"165":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":5,"docs":{"14":{"tf":1.0},"20":{"tf":1.4142135623730951},"346":{"tf":1.0},"422":{"tf":1.0},"426":{"tf":1.0}},"é":{"df":3,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"300":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"19":{"tf":1.7320508075688772}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"214":{"tf":1.0}}}},"t":{"df":0,"docs":{},"é":{"df":2,"docs":{"362":{"tf":1.0},"372":{"tf":1.0}}}},"è":{"df":0,"docs":{},"r":{"df":3,"docs":{"19":{"tf":1.0},"277":{"tf":1.0},"417":{"tf":1.0}}}}},"r":{"df":6,"docs":{"153":{"tf":1.0},"358":{"tf":1.0},"370":{"tf":1.0},"382":{"tf":1.0},"402":{"tf":1.0},"82":{"tf":1.0}},"i":{"df":2,"docs":{"197":{"tf":1.0},"428":{"tf":1.0}}},"y":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{".":{"df":1,"docs":{"85":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"é":{"df":2,"docs":{"175":{"tf":1.0},"19":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"372":{"tf":1.0},"373":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"289":{"tf":1.0},"294":{"tf":1.0}}}}}},"v":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":6,"docs":{"155":{"tf":1.0},"166":{"tf":1.0},"235":{"tf":1.0},"249":{"tf":1.4142135623730951},"258":{"tf":1.0},"290":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"102":{"tf":1.7320508075688772},"131":{"tf":1.7320508075688772},"159":{"tf":1.4142135623730951},"163":{"tf":1.0},"235":{"tf":1.0},"252":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"159":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"235":{"tf":1.0},"325":{"tf":1.4142135623730951},"327":{"tf":1.0}}}}}}},"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"443":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"443":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"443":{"tf":1.0}}}}}}},":":{":":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"r":{"(":{"\\"":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"a":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"\\"":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"|":{"_":{"df":1,"docs":{"259":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"258":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"df":45,"docs":{"113":{"tf":1.0},"150":{"tf":1.0},"152":{"tf":1.7320508075688772},"153":{"tf":1.0},"154":{"tf":1.0},"155":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.0},"160":{"tf":1.0},"163":{"tf":1.0},"166":{"tf":2.449489742783178},"171":{"tf":1.0},"172":{"tf":1.4142135623730951},"177":{"tf":1.0},"180":{"tf":1.0},"184":{"tf":1.0},"186":{"tf":1.7320508075688772},"189":{"tf":1.0},"2":{"tf":1.0},"232":{"tf":1.4142135623730951},"233":{"tf":1.0},"235":{"tf":1.0},"237":{"tf":1.0},"244":{"tf":1.0},"246":{"tf":1.4142135623730951},"247":{"tf":1.0},"248":{"tf":1.4142135623730951},"249":{"tf":2.23606797749979},"250":{"tf":1.4142135623730951},"252":{"tf":1.4142135623730951},"259":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":2.449489742783178},"291":{"tf":1.0},"293":{"tf":1.4142135623730951},"296":{"tf":1.0},"297":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"414":{"tf":1.0},"443":{"tf":1.0},"75":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":2.6457513110645907},"84":{"tf":2.0}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"277":{"tf":1.0},"72":{"tf":1.0},"84":{"tf":1.0}},"n":{"df":2,"docs":{"443":{"tf":1.0},"95":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"169":{"tf":1.0}}},"y":{"df":0,"docs":{},"é":{"df":1,"docs":{"175":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"100":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"f":{"df":24,"docs":{"102":{"tf":1.4142135623730951},"105":{"tf":1.4142135623730951},"108":{"tf":1.4142135623730951},"109":{"tf":1.4142135623730951},"115":{"tf":1.4142135623730951},"116":{"tf":1.4142135623730951},"121":{"tf":1.4142135623730951},"122":{"tf":1.4142135623730951},"126":{"tf":1.4142135623730951},"127":{"tf":1.4142135623730951},"130":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"191":{"tf":1.4142135623730951},"192":{"tf":1.4142135623730951},"193":{"tf":1.4142135623730951},"194":{"tf":1.4142135623730951},"195":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"197":{"tf":1.4142135623730951},"198":{"tf":1.4142135623730951},"199":{"tf":1.4142135623730951},"201":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951}}}},"r":{"d":{"df":1,"docs":{"280":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":7,"docs":{"166":{"tf":1.7320508075688772},"21":{"tf":1.0},"23":{"tf":1.0},"288":{"tf":1.0},"372":{"tf":1.0},"389":{"tf":1.0},"396":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"[":{"df":0,"docs":{},"e":{"0":{"4":{"6":{"3":{"df":1,"docs":{"300":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"121":{"tf":1.0}}}}}},"df":6,"docs":{"208":{"tf":1.4142135623730951},"291":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"401":{"tf":1.0},"88":{"tf":1.4142135623730951}},"|":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"|":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"124":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"s":{"df":2,"docs":{"17":{"tf":1.0},"298":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}},"p":{"a":{"c":{"df":1,"docs":{"23":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"a":{"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"288":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"16":{"tf":1.0},"290":{"tf":1.0}}}}}}}}},"t":{"df":139,"docs":{"1":{"tf":1.4142135623730951},"104":{"tf":1.0},"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.7320508075688772},"147":{"tf":1.7320508075688772},"152":{"tf":1.0},"160":{"tf":1.0},"167":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.4142135623730951},"18":{"tf":1.0},"181":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":1.4142135623730951},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"211":{"tf":1.4142135623730951},"212":{"tf":1.0},"214":{"tf":1.4142135623730951},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"22":{"tf":1.7320508075688772},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":2.0},"244":{"tf":1.7320508075688772},"248":{"tf":1.0},"249":{"tf":1.7320508075688772},"25":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"277":{"tf":1.0},"282":{"tf":1.0},"287":{"tf":1.0},"289":{"tf":1.0},"29":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"298":{"tf":1.0},"299":{"tf":1.7320508075688772},"3":{"tf":1.0},"300":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":1.4142135623730951},"333":{"tf":1.7320508075688772},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"412":{"tf":1.0},"416":{"tf":1.7320508075688772},"418":{"tf":1.4142135623730951},"419":{"tf":1.0},"420":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"72":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0},"82":{"tf":2.0},"84":{"tf":1.0},"86":{"tf":1.7320508075688772},"87":{"tf":1.7320508075688772},"88":{"tf":1.4142135623730951},"9":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"15":{"tf":1.0},"286":{"tf":1.0},"81":{"tf":1.0}}}}}},"t":{"c":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"2":{"b":{"a":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"d":{"/":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"195":{"tf":1.0},"196":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":5,"docs":{"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.4142135623730951},"194":{"tf":1.0},"205":{"tf":1.7320508075688772}}}}}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":2,"docs":{"198":{"tf":1.4142135623730951},"199":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":2,"docs":{"197":{"tf":1.4142135623730951},"205":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"df":1,"docs":{"190":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"j":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"199":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"213":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{".":{"d":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"201":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"121":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"116":{"tf":2.0},"130":{"tf":1.0},"202":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"d":{"/":{"9":{"9":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}},"df":4,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"107":{"tf":1.0},"122":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":4,"docs":{"159":{"tf":1.0},"189":{"tf":1.7320508075688772},"356":{"tf":1.0},"377":{"tf":1.0}}},"df":193,"docs":{"1":{"tf":1.7320508075688772},"102":{"tf":1.0},"105":{"tf":1.0},"107":{"tf":1.0},"11":{"tf":1.0},"113":{"tf":1.4142135623730951},"127":{"tf":1.0},"13":{"tf":1.0},"131":{"tf":1.0},"133":{"tf":1.4142135623730951},"135":{"tf":1.0},"137":{"tf":1.4142135623730951},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.4142135623730951},"16":{"tf":2.0},"166":{"tf":1.0},"167":{"tf":1.0},"168":{"tf":1.7320508075688772},"169":{"tf":1.0},"17":{"tf":2.0},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.4142135623730951},"179":{"tf":1.0},"18":{"tf":1.4142135623730951},"186":{"tf":1.0},"189":{"tf":1.0},"2":{"tf":2.0},"20":{"tf":1.7320508075688772},"204":{"tf":1.0},"21":{"tf":1.0},"211":{"tf":1.7320508075688772},"214":{"tf":2.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"22":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":2.0},"231":{"tf":1.0},"234":{"tf":1.0},"24":{"tf":1.4142135623730951},"240":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":1.4142135623730951},"245":{"tf":1.0},"249":{"tf":1.0},"25":{"tf":1.4142135623730951},"253":{"tf":1.0},"254":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.4142135623730951},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.4142135623730951},"280":{"tf":1.7320508075688772},"282":{"tf":1.0},"284":{"tf":1.4142135623730951},"285":{"tf":1.4142135623730951},"286":{"tf":1.0},"287":{"tf":2.23606797749979},"29":{"tf":1.0},"290":{"tf":1.4142135623730951},"291":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.7320508075688772},"299":{"tf":1.0},"300":{"tf":1.0},"301":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.4142135623730951},"31":{"tf":1.0},"310":{"tf":1.0},"318":{"tf":1.0},"322":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":1.4142135623730951},"333":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"35":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.0},"358":{"tf":1.4142135623730951},"363":{"tf":1.0},"364":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"369":{"tf":1.0},"37":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"382":{"tf":1.4142135623730951},"384":{"tf":1.4142135623730951},"386":{"tf":1.0},"388":{"tf":1.0},"39":{"tf":1.4142135623730951},"393":{"tf":1.0},"4":{"tf":1.4142135623730951},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"420":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"47":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.4142135623730951},"6":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":2.0},"72":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.4142135623730951},"76":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":2.23606797749979},"83":{"tf":2.23606797749979},"85":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"88":{"tf":2.0},"9":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.4142135623730951},"98":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"377":{"tf":1.0}}}}}},"df":1,"docs":{"348":{"tf":1.0}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":5,"docs":{"280":{"tf":1.0},"288":{"tf":1.0},"347":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"198":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"363":{"tf":1.0}}}}}}}},"df":7,"docs":{"153":{"tf":1.0},"173":{"tf":1.0},"20":{"tf":1.0},"294":{"tf":1.0},"363":{"tf":1.0},"86":{"tf":1.0},"95":{"tf":1.7320508075688772}},"e":{"c":{"(":{"d":{"b":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"374":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":10,"docs":{"154":{"tf":1.0},"155":{"tf":1.0},"17":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"318":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.0},"449":{"tf":1.4142135623730951},"451":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"238":{"tf":1.0},"280":{"tf":1.0},"75":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"243":{"tf":2.23606797749979}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"2":{"tf":1.0},"311":{"tf":1.0}}}}},"df":9,"docs":{"129":{"tf":1.0},"146":{"tf":1.0},"15":{"tf":1.0},"232":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.0},"291":{"tf":1.0},"373":{"tf":1.0},"427":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"242":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"t":{"df":2,"docs":{"175":{"tf":1.4142135623730951},"317":{"tf":1.4142135623730951}}}},"p":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"129":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"(":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"(":{"\'":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"=":{"a":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"318":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"318":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"383":{"tf":1.0}}}}},"df":4,"docs":{"318":{"tf":1.0},"328":{"tf":1.0},"334":{"tf":1.0},"401":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"r":{"df":5,"docs":{"18":{"tf":1.0},"243":{"tf":1.4142135623730951},"393":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"n":{"df":75,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"281":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}},"df":0,"docs":{},"i":{"c":{"df":11,"docs":{"10":{"tf":1.0},"266":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"3":{"tf":1.0},"410":{"tf":1.0},"442":{"tf":1.0},"63":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"159":{"tf":1.0}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":3,"docs":{"168":{"tf":1.0},"231":{"tf":1.0},"358":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"4":{"tf":1.0}}}}}},"o":{"df":8,"docs":{"109":{"tf":1.0},"189":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"211":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0}},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"166":{"tf":1.0}}}},"s":{"df":3,"docs":{"120":{"tf":1.0},"187":{"tf":1.0},"412":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"134":{"tf":1.0},"96":{"tf":1.0}}}},"é":{"df":2,"docs":{"187":{"tf":1.0},"84":{"tf":1.0}}}}},"r":{":":{":":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"(":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"t":{"c":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":1,"docs":{"428":{"tf":3.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":2,"docs":{"361":{"tf":1.7320508075688772},"416":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"414":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"n":{"df":16,"docs":{"101":{"tf":1.0},"177":{"tf":1.0},"189":{"tf":1.0},"194":{"tf":1.0},"276":{"tf":1.0},"279":{"tf":1.0},"345":{"tf":1.4142135623730951},"370":{"tf":1.0},"381":{"tf":1.0},"400":{"tf":1.0},"418":{"tf":1.0},"47":{"tf":1.0},"8":{"tf":1.0},"84":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"171":{"tf":1.0},"375":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"280":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"423":{"tf":1.0},"426":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":17,"docs":{"145":{"tf":1.0},"156":{"tf":1.0},"161":{"tf":1.0},"167":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"23":{"tf":1.0},"285":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"321":{"tf":1.0},"324":{"tf":1.0},"327":{"tf":1.0},"379":{"tf":1.4142135623730951},"380":{"tf":1.0},"381":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"296":{"tf":1.0}}},"df":0,"docs":{}},"z":{"df":2,"docs":{"300":{"tf":1.0},"83":{"tf":1.0}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"f":{"6":{"df":0,"docs":{},"e":{"5":{"1":{"1":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"288":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"[":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"72":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"24":{"tf":1.0}},"l":{"2":{"b":{"a":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"208":{"tf":1.0}}}}},"m":{"d":{"df":1,"docs":{"125":{"tf":1.0}}},"df":0,"docs":{}}},"@":{"df":0,"docs":{},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}}}},"df":14,"docs":{"125":{"tf":1.0},"126":{"tf":1.4142135623730951},"127":{"tf":1.4142135623730951},"187":{"tf":1.0},"188":{"tf":1.7320508075688772},"193":{"tf":1.0},"199":{"tf":1.4142135623730951},"204":{"tf":2.0},"205":{"tf":2.0},"206":{"tf":1.4142135623730951},"207":{"tf":1.7320508075688772},"213":{"tf":1.0},"214":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"166":{"tf":1.0},"184":{"tf":1.0},"197":{"tf":1.0},"207":{"tf":1.4142135623730951},"291":{"tf":1.0},"300":{"tf":1.0},"317":{"tf":1.0},"347":{"tf":1.0},"88":{"tf":1.0}},"e":{"d":{".":{"*":{"4":{"0":{"1":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"194":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"197":{"tf":1.0}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"194":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"|":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{")":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"193":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":11,"docs":{"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.4142135623730951},"205":{"tf":1.0},"214":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"175":{"tf":1.4142135623730951}}}}},"r":{"df":6,"docs":{"103":{"tf":1.0},"16":{"tf":1.0},"279":{"tf":1.0},"287":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}},"s":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":11,"docs":{"113":{"tf":1.0},"133":{"tf":1.0},"148":{"tf":1.0},"151":{"tf":1.0},"177":{"tf":1.0},"19":{"tf":1.0},"249":{"tf":1.0},"292":{"tf":1.0},"351":{"tf":1.0},"355":{"tf":1.0},"98":{"tf":1.0}}}},"l":{"df":0,"docs":{},"l":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":5,"docs":{"232":{"tf":1.0},"244":{"tf":1.4142135623730951},"249":{"tf":1.0},"250":{"tf":1.0},"259":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":8,"docs":{"173":{"tf":1.0},"189":{"tf":1.4142135623730951},"199":{"tf":1.0},"211":{"tf":1.0},"243":{"tf":3.4641016151377544},"249":{"tf":1.0},"319":{"tf":1.7320508075688772},"425":{"tf":1.0}},"e":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"286":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"m":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"354":{"tf":1.0}}},"t":{"df":1,"docs":{"8":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"l":{":":{".":{"*":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"197":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"88":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"d":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"347":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"t":{"df":1,"docs":{"214":{"tf":1.0}}}},"ç":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"280":{"tf":1.0},"281":{"tf":1.0},"75":{"tf":1.0}}}}}},"df":8,"docs":{"116":{"tf":1.0},"185":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"207":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"86":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"301":{"tf":1.0},"393":{"tf":1.0}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"347":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"107":{"tf":1.0}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"é":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"104":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"348":{"tf":1.0},"356":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"88":{"tf":1.0}}}},"f":{"df":1,"docs":{"43":{"tf":1.0}},"i":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}}},"i":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":40,"docs":{"150":{"tf":1.0},"152":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"172":{"tf":1.0},"186":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.0},"190":{"tf":1.0},"2":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"235":{"tf":1.4142135623730951},"290":{"tf":1.0},"292":{"tf":1.7320508075688772},"294":{"tf":1.0},"314":{"tf":1.0},"328":{"tf":1.0},"334":{"tf":1.4142135623730951},"373":{"tf":1.0},"375":{"tf":1.4142135623730951},"419":{"tf":1.0},"423":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0},"442":{"tf":2.0},"443":{"tf":1.4142135623730951},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0},"451":{"tf":1.0},"57":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.4142135623730951},"84":{"tf":2.0}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":3,"docs":{"197":{"tf":1.0},"198":{"tf":1.0},"317":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":5,"docs":{"160":{"tf":1.0},"19":{"tf":1.4142135623730951},"199":{"tf":1.0},"294":{"tf":1.0},"346":{"tf":1.0}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"360":{"tf":1.0}}}}}}}},"t":{"df":1,"docs":{"357":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"i":{"d":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"(":{"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{"b":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},".":{"d":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"127":{"tf":2.0},"189":{"tf":3.4641016151377544},"199":{"tf":1.4142135623730951}}}},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"320":{"tf":1.0}}}},"df":3,"docs":{"127":{"tf":1.0},"190":{"tf":1.0},"205":{"tf":1.0}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":7,"docs":{"202":{"tf":1.0},"346":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"357":{"tf":1.0},"83":{"tf":1.0},"86":{"tf":1.0}}}},"d":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"d":{"b":{"df":1,"docs":{"424":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"m":{"df":1,"docs":{"373":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":4,"docs":{"169":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"300":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"127":{"tf":1.4142135623730951},"189":{"tf":3.4641016151377544}}}}}},"df":7,"docs":{"113":{"tf":1.0},"14":{"tf":1.0},"23":{"tf":1.0},"285":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.4142135623730951},"80":{"tf":1.0}},"e":{"df":1,"docs":{"1":{"tf":1.0}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"19":{"tf":1.0},"372":{"tf":1.0},"374":{"tf":1.0},"402":{"tf":1.0},"424":{"tf":1.4142135623730951},"426":{"tf":1.4142135623730951},"84":{"tf":1.0},"85":{"tf":1.0}}}}}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"293":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"108":{"tf":1.0},"134":{"tf":1.0},"211":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"373":{"tf":1.0},"86":{"tf":1.0}}}}},"x":{"df":3,"docs":{"133":{"tf":1.0},"166":{"tf":1.0},"95":{"tf":1.4142135623730951}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"314":{"tf":1.4142135623730951},"318":{"tf":1.0},"325":{"tf":1.0},"328":{"tf":1.7320508075688772},"334":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"t":{"df":3,"docs":{"314":{"tf":1.0},"325":{"tf":1.0},"328":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"208":{"tf":1.0},"348":{"tf":1.0}}},"df":0,"docs":{}},"w":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"169":{"tf":1.0},"174":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":1,"docs":{"396":{"tf":1.0}}}},"u":{"df":0,"docs":{},"x":{"df":6,"docs":{"16":{"tf":1.0},"281":{"tf":1.0},"345":{"tf":1.0},"348":{"tf":1.0},"359":{"tf":1.0},"422":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"t":{"df":6,"docs":{"174":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"389":{"tf":1.0},"403":{"tf":1.0},"447":{"tf":1.0}}}},"n":{"df":7,"docs":{"242":{"tf":1.0},"257":{"tf":1.4142135623730951},"259":{"tf":1.0},"316":{"tf":2.0},"351":{"tf":1.0},"364":{"tf":1.0},"392":{"tf":1.0}}},"o":{"df":0,"docs":{},"i":{"df":10,"docs":{"102":{"tf":1.0},"104":{"tf":1.0},"107":{"tf":1.0},"147":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"234":{"tf":1.0},"242":{"tf":1.0},"249":{"tf":1.0},"313":{"tf":1.0}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"174":{"tf":1.0},"346":{"tf":1.0},"447":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"363":{"tf":1.4142135623730951}},"é":{"df":3,"docs":{"168":{"tf":1.0},"295":{"tf":1.0},"318":{"tf":1.0}}}}}}},"df":9,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"169":{"tf":1.0},"231":{"tf":1.0},"281":{"tf":1.0},"327":{"tf":1.0},"333":{"tf":1.4142135623730951},"375":{"tf":1.0},"432":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":6,"docs":{"250":{"tf":1.0},"253":{"tf":1.0},"277":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"72":{"tf":1.0}}}}}}}}}},"d":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"361":{"tf":1.0},"416":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":4,"docs":{"279":{"tf":1.0},"414":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}},"r":{"b":{"df":0,"docs":{},"i":{"d":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"c":{"df":4,"docs":{"189":{"tf":1.7320508075688772},"195":{"tf":1.0},"202":{"tf":1.0},"208":{"tf":2.23606797749979}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"217":{"tf":1.0},"74":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":3,"docs":{"1":{"tf":1.0},"276":{"tf":1.0},"416":{"tf":1.0}},"e":{"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"450":{"tf":1.0}}}}},"df":1,"docs":{"450":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}},"k":{"df":1,"docs":{"276":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"389":{"tf":1.0}}}},"df":5,"docs":{"174":{"tf":1.0},"18":{"tf":1.0},"199":{"tf":1.0},"320":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":10,"docs":{"189":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"327":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":1.0},"332":{"tf":1.0},"375":{"tf":1.4142135623730951},"402":{"tf":1.0},"86":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":6,"docs":{"133":{"tf":2.0},"134":{"tf":1.4142135623730951},"202":{"tf":2.449489742783178},"214":{"tf":1.0},"394":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"166":{"tf":1.0},"183":{"tf":1.0},"199":{"tf":1.0},"205":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":2,"docs":{"199":{"tf":1.0},"6":{"tf":1.0}},"t":{"df":6,"docs":{"188":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.0},"276":{"tf":1.0},"328":{"tf":1.0},"72":{"tf":1.0}}}}}}}},"q":{"d":{"df":0,"docs":{},"n":{"df":1,"docs":{"95":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":17,"docs":{"358":{"tf":1.4142135623730951},"359":{"tf":1.0},"361":{"tf":1.4142135623730951},"362":{"tf":1.0},"363":{"tf":2.0},"364":{"tf":1.4142135623730951},"375":{"tf":2.23606797749979},"376":{"tf":1.0},"377":{"tf":1.4142135623730951},"399":{"tf":1.4142135623730951},"400":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.4142135623730951},"417":{"tf":1.0},"418":{"tf":1.0}}}}}}}},"n":{"df":0,"docs":{},"ç":{"a":{"df":0,"docs":{},"i":{"df":1,"docs":{"397":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":3,"docs":{"298":{"tf":1.0},"313":{"tf":1.4142135623730951},"397":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"402":{"tf":1.0}}}}}}}},"é":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"346":{"tf":1.0},"352":{"tf":1.4142135623730951}}},"df":0,"docs":{},"t":{"df":1,"docs":{"444":{"tf":1.0}}}}}}}}},"s":{"[":{"(":{"\\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"è":{"df":0,"docs":{},"m":{"df":1,"docs":{"413":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"348":{"tf":1.7320508075688772},"376":{"tf":1.4142135623730951},"413":{"tf":1.4142135623730951},"414":{"tf":1.0},"423":{"tf":1.7320508075688772},"424":{"tf":2.23606797749979},"425":{"tf":2.0},"428":{"tf":2.23606797749979},"429":{"tf":1.7320508075688772}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"187":{"tf":1.0},"189":{"tf":1.0}},"é":{"df":1,"docs":{"208":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"43":{"tf":1.0}},"n":{"df":1,"docs":{"8":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"208":{"tf":1.0}}}}}}},"g":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"2":{"df":1,"docs":{"352":{"tf":1.0}}},"df":0,"docs":{}}}}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"351":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.7320508075688772}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"18":{"tf":1.0},"214":{"tf":1.0},"83":{"tf":1.0}}}}}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"165":{"tf":1.0},"420":{"tf":1.0}}}}}}},"d":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"103":{"tf":1.0}}}}},"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":6,"docs":{"277":{"tf":1.0},"280":{"tf":1.0},"380":{"tf":1.0},"389":{"tf":1.7320508075688772},"390":{"tf":1.4142135623730951},"421":{"tf":1.0}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"17":{"tf":1.0},"20":{"tf":1.0}}}},"df":0,"docs":{}}},"c":{"c":{"df":1,"docs":{"291":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":2,"docs":{"243":{"tf":1.0},"382":{"tf":1.0}}}},"df":2,"docs":{"16":{"tf":2.23606797749979},"348":{"tf":2.449489742783178}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"359":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"df":3,"docs":{"184":{"tf":1.0},"19":{"tf":1.0},"85":{"tf":1.0}}}}},"o":{"df":1,"docs":{"214":{"tf":1.0}},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"214":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":6,"docs":{"1":{"tf":1.0},"325":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"401":{"tf":1.0},"416":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"102":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"t":{".":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"147":{"tf":1.0},"151":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"449":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"_":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"359":{"tf":1.0}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"359":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":2,"docs":{"277":{"tf":1.0},"278":{"tf":1.0}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"100":{"tf":1.0}}}}}},"|":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"d":{")":{".":{"*":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{".":{"*":{"\\"":{"(":{"?":{":":{"%":{"(":{"b":{"a":{"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{")":{"df":0,"docs":{},"s":{"df":0,"docs":{},"|":{"%":{"(":{"b":{"a":{"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{")":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"|":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"192":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}}}}}}}},"h":{"c":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"84":{"tf":1.0},"85":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"82":{"tf":1.0}}}}}},"2":{")":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"348":{"tf":1.0},"373":{"tf":1.0}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"@":{"<":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"23":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"123":{"tf":1.0},"124":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"300":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"84":{"tf":1.4142135623730951}},"s":{":":{"/":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"84":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}},"}":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"}":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"}":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"346":{"tf":1.0},"419":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":1,"docs":{"413":{"tf":1.4142135623730951}}}}},"df":52,"docs":{"1":{"tf":1.0},"108":{"tf":1.0},"120":{"tf":1.0},"123":{"tf":2.23606797749979},"132":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.7320508075688772},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"175":{"tf":1.0},"180":{"tf":1.7320508075688772},"2":{"tf":1.0},"202":{"tf":1.4142135623730951},"208":{"tf":1.0},"22":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.0},"286":{"tf":1.4142135623730951},"287":{"tf":1.7320508075688772},"288":{"tf":1.7320508075688772},"289":{"tf":1.4142135623730951},"294":{"tf":2.0},"300":{"tf":1.0},"312":{"tf":1.4142135623730951},"326":{"tf":1.0},"346":{"tf":1.0},"356":{"tf":2.449489742783178},"357":{"tf":1.0},"370":{"tf":2.449489742783178},"372":{"tf":1.0},"373":{"tf":2.0},"374":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"380":{"tf":1.0},"383":{"tf":1.4142135623730951},"392":{"tf":1.0},"406":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":2.0},"416":{"tf":1.0},"417":{"tf":1.0},"419":{"tf":1.7320508075688772},"423":{"tf":2.6457513110645907},"424":{"tf":3.872983346207417},"425":{"tf":3.605551275463989},"428":{"tf":3.1622776601683795},"5":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.7320508075688772},"96":{"tf":1.0}},"e":{"a":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"450":{"tf":1.0}}}}},"df":1,"docs":{"450":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"u":{"b":{"df":2,"docs":{"243":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"235":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"*":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{".":{"*":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"d":{".":{"*":{"<":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"193":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"148":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":2,"docs":{"105":{"tf":1.0},"116":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"95":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"113":{"tf":1.0},"214":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"284":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"86":{"tf":1.0}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"86":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}}}},"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":4,"docs":{"84":{"tf":1.0},"85":{"tf":3.3166247903554},"86":{"tf":1.4142135623730951},"88":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"82":{"tf":1.0},"84":{"tf":1.7320508075688772}}}}},"p":{"df":0,"docs":{},"g":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"291":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":2,"docs":{"84":{"tf":1.0},"85":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"85":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"291":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"121":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"313":{"tf":1.4142135623730951},"325":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":2,"docs":{"372":{"tf":1.0},"414":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":1,"docs":{"236":{"tf":1.0}}}}}}}},"df":151,"docs":{"1":{"tf":1.4142135623730951},"10":{"tf":1.4142135623730951},"108":{"tf":1.7320508075688772},"109":{"tf":1.4142135623730951},"110":{"tf":1.0},"113":{"tf":2.23606797749979},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"121":{"tf":1.7320508075688772},"123":{"tf":1.0},"124":{"tf":2.8284271247461903},"126":{"tf":1.0},"127":{"tf":2.8284271247461903},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"133":{"tf":1.4142135623730951},"134":{"tf":1.4142135623730951},"139":{"tf":1.0},"14":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":2.0},"148":{"tf":2.0},"15":{"tf":1.0},"153":{"tf":1.0},"155":{"tf":1.4142135623730951},"156":{"tf":1.0},"16":{"tf":2.0},"161":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":2.0},"166":{"tf":2.0},"167":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":1.4142135623730951},"17":{"tf":1.0},"171":{"tf":1.7320508075688772},"172":{"tf":2.0},"174":{"tf":1.4142135623730951},"177":{"tf":1.0},"179":{"tf":1.0},"18":{"tf":1.4142135623730951},"180":{"tf":1.4142135623730951},"185":{"tf":1.4142135623730951},"186":{"tf":2.0},"187":{"tf":1.4142135623730951},"189":{"tf":3.4641016151377544},"191":{"tf":1.0},"192":{"tf":1.4142135623730951},"193":{"tf":1.7320508075688772},"194":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"201":{"tf":1.0},"204":{"tf":2.23606797749979},"205":{"tf":2.0},"206":{"tf":1.7320508075688772},"207":{"tf":1.0},"208":{"tf":2.449489742783178},"209":{"tf":1.0},"21":{"tf":1.0},"210":{"tf":1.0},"214":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"24":{"tf":1.0},"252":{"tf":1.0},"276":{"tf":1.4142135623730951},"277":{"tf":1.0},"281":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.4142135623730951},"289":{"tf":2.6457513110645907},"291":{"tf":1.7320508075688772},"292":{"tf":1.0},"293":{"tf":2.8284271247461903},"296":{"tf":1.4142135623730951},"298":{"tf":1.0},"299":{"tf":1.0},"3":{"tf":1.0},"300":{"tf":1.0},"301":{"tf":1.0},"310":{"tf":1.0},"312":{"tf":1.4142135623730951},"317":{"tf":1.0},"320":{"tf":1.4142135623730951},"322":{"tf":1.0},"326":{"tf":1.0},"345":{"tf":1.0},"358":{"tf":1.4142135623730951},"359":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.4142135623730951},"363":{"tf":1.0},"364":{"tf":1.4142135623730951},"369":{"tf":1.0},"372":{"tf":1.4142135623730951},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":2.8284271247461903},"376":{"tf":1.0},"379":{"tf":1.0},"383":{"tf":2.449489742783178},"388":{"tf":1.0},"399":{"tf":1.0},"4":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.4142135623730951},"416":{"tf":2.0},"417":{"tf":1.4142135623730951},"419":{"tf":1.4142135623730951},"420":{"tf":1.0},"422":{"tf":1.0},"423":{"tf":1.4142135623730951},"424":{"tf":1.4142135623730951},"425":{"tf":1.7320508075688772},"426":{"tf":1.0},"428":{"tf":1.4142135623730951},"442":{"tf":1.4142135623730951},"444":{"tf":1.4142135623730951},"445":{"tf":1.0},"447":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0},"5":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"65":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"76":{"tf":1.4142135623730951},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":1.4142135623730951},"84":{"tf":2.23606797749979},"85":{"tf":3.7416573867739413},"86":{"tf":1.4142135623730951},"87":{"tf":1.0},"88":{"tf":1.4142135623730951},"9":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"372":{"tf":1.0},"401":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"429":{"tf":1.0}}}}}}}}}}}},"l":{"df":0,"docs":{},"o":{"b":{"a":{"df":0,"docs":{},"l":{"df":11,"docs":{"124":{"tf":1.0},"161":{"tf":1.0},"172":{"tf":1.0},"201":{"tf":1.0},"208":{"tf":1.0},"268":{"tf":1.0},"314":{"tf":1.4142135623730951},"325":{"tf":1.4142135623730951},"327":{"tf":1.4142135623730951},"74":{"tf":1.0},"76":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"189":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"291":{"tf":1.0}}}},"o":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"174":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":2,"docs":{"151":{"tf":1.0},"447":{"tf":1.7320508075688772}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":3,"docs":{"18":{"tf":1.0},"243":{"tf":1.0},"74":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"148":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":7,"docs":{"277":{"tf":1.0},"287":{"tf":1.0},"370":{"tf":1.0},"413":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.0}},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":19,"docs":{"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"121":{"tf":1.4142135623730951},"122":{"tf":1.0},"124":{"tf":1.0},"133":{"tf":1.4142135623730951},"166":{"tf":1.0},"185":{"tf":1.0},"205":{"tf":1.0},"207":{"tf":1.0},"212":{"tf":1.0},"290":{"tf":1.0},"320":{"tf":1.0},"83":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951}}}},"o":{"df":2,"docs":{"133":{"tf":1.0},"356":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"i":{"d":{"df":9,"docs":{"135":{"tf":1.0},"145":{"tf":1.0},"251":{"tf":1.0},"256":{"tf":1.0},"277":{"tf":1.4142135623730951},"3":{"tf":1.0},"306":{"tf":1.0},"31":{"tf":1.0},"8":{"tf":1.0}},"é":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"88":{"tf":1.0}}}}}}}}}},"è":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"416":{"tf":1.4142135623730951},"418":{"tf":1.0},"82":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"19":{"tf":1.4142135623730951}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"169":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":5,"docs":{"1":{"tf":1.0},"19":{"tf":1.0},"293":{"tf":1.0},"374":{"tf":1.0},"381":{"tf":1.0}}}}}}},"df":74,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"177":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"292":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"102":{"tf":1.0},"15":{"tf":1.0},"179":{"tf":1.0}}},"z":{"df":2,"docs":{"290":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":6,"docs":{"363":{"tf":1.0},"379":{"tf":1.0},"381":{"tf":1.0},"401":{"tf":1.0},"416":{"tf":1.4142135623730951},"417":{"tf":1.0}}}}},"é":{"df":1,"docs":{"299":{"tf":1.0}},"e":{"df":2,"docs":{"15":{"tf":1.0},"84":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":7,"docs":{"223":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0},"39":{"tf":1.0},"5":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.4142135623730951}}}},"é":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"h":{"a":{"df":1,"docs":{"76":{"tf":1.0}},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"316":{"tf":1.0},"348":{"tf":1.0},"354":{"tf":1.0},"364":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":2.0},"380":{"tf":1.0},"396":{"tf":1.0},"427":{"tf":1.0}}}}}},"df":0,"docs":{}},"r":{"d":{"c":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"133":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"446":{"tf":1.0},"89":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"363":{"tf":1.0}}}},"df":4,"docs":{"181":{"tf":1.0},"362":{"tf":1.0},"393":{"tf":1.4142135623730951},"394":{"tf":1.0}}}},"u":{"df":0,"docs":{},"t":{"df":5,"docs":{"17":{"tf":1.0},"21":{"tf":1.0},"317":{"tf":1.7320508075688772},"352":{"tf":1.0},"86":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"424":{"tf":1.0}}}}},"df":2,"docs":{"348":{"tf":3.3166247903554},"394":{"tf":1.0}},"e":{"a":{"d":{"df":1,"docs":{"356":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"133":{"tf":1.0},"377":{"tf":1.0},"402":{"tf":1.0},"445":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"(":{")":{".":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"313":{"tf":1.0},"375":{"tf":1.0},"417":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":3,"docs":{"85":{"tf":1.7320508075688772},"87":{"tf":1.0},"88":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"443":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"280":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"23":{"tf":1.0},"277":{"tf":1.0},"72":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"397":{"tf":1.0}}}}}}},"x":{"a":{"d":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"88":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":4,"docs":{"102":{"tf":1.0},"184":{"tf":1.0},"290":{"tf":1.4142135623730951},"83":{"tf":1.7320508075688772}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"185":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"181":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"347":{"tf":1.0}}}}}}}}},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":2,"docs":{"281":{"tf":1.0},"434":{"tf":1.0}},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"1":{"tf":1.0},"8":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"/":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"i":{"d":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":1,"docs":{"19":{"tf":1.0}}},"df":0,"docs":{}}}},"df":1,"docs":{"19":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"c":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"k":{"df":15,"docs":{"280":{"tf":1.0},"289":{"tf":1.0},"360":{"tf":1.7320508075688772},"361":{"tf":1.0},"364":{"tf":2.0},"370":{"tf":2.0},"376":{"tf":1.7320508075688772},"383":{"tf":1.0},"392":{"tf":1.0},"406":{"tf":1.0},"413":{"tf":1.4142135623730951},"414":{"tf":1.0},"416":{"tf":1.0},"425":{"tf":1.4142135623730951},"429":{"tf":2.6457513110645907}},"s":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"364":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"df":4,"docs":{"166":{"tf":1.0},"18":{"tf":1.0},"192":{"tf":1.0},"206":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":32,"docs":{"1":{"tf":1.0},"108":{"tf":1.7320508075688772},"109":{"tf":1.4142135623730951},"111":{"tf":1.0},"113":{"tf":1.4142135623730951},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"121":{"tf":1.0},"124":{"tf":2.0},"126":{"tf":1.0},"127":{"tf":1.4142135623730951},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":2.0},"194":{"tf":1.7320508075688772},"195":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"197":{"tf":1.4142135623730951},"198":{"tf":1.0},"199":{"tf":1.0},"202":{"tf":2.449489742783178},"206":{"tf":1.7320508075688772},"214":{"tf":1.0},"293":{"tf":1.4142135623730951},"445":{"tf":1.0},"448":{"tf":1.0},"85":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"2":{"tf":1.0},"71":{"tf":1.0}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"108":{"tf":1.0},"153":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"119":{"tf":1.0}}}},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":4,"docs":{"313":{"tf":1.0},"324":{"tf":1.0},"375":{"tf":1.7320508075688772},"428":{"tf":1.0}}},"x":{"df":5,"docs":{"281":{"tf":1.0},"375":{"tf":1.4142135623730951},"377":{"tf":1.0},"418":{"tf":1.4142135623730951},"438":{"tf":1.0}}}},"t":{"df":0,"docs":{},"p":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":2,"docs":{"127":{"tf":1.4142135623730951},"189":{"tf":2.6457513110645907}}}}}}},"/":{"2":{"df":1,"docs":{"119":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"394":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":1,"docs":{"286":{"tf":1.0}}}}}}}}}}}}},":":{"/":{"/":{"0":{".":{"0":{".":{"0":{".":{"0":{":":{"4":{"0":{"0":{"0":{"df":2,"docs":{"293":{"tf":1.4142135623730951},"299":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"133":{"tf":1.0}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"4":{"0":{"0":{"0":{"/":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"294":{"tf":1.0},"299":{"tf":1.0}}}}}},"df":1,"docs":{"86":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":5,"docs":{"293":{"tf":1.0},"294":{"tf":1.0},"72":{"tf":1.0},"86":{"tf":1.4142135623730951},"88":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"0":{"8":{"0":{"df":1,"docs":{"178":{"tf":1.0}}},"1":{"df":1,"docs":{"178":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},":":{"4":{"0":{"0":{"0":{"df":1,"docs":{"169":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"}":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"206":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":37,"docs":{"1":{"tf":1.0},"102":{"tf":2.0},"108":{"tf":1.4142135623730951},"113":{"tf":1.0},"114":{"tf":1.0},"119":{"tf":1.0},"127":{"tf":1.4142135623730951},"133":{"tf":2.0},"134":{"tf":1.7320508075688772},"16":{"tf":1.0},"169":{"tf":1.7320508075688772},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"202":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.0},"287":{"tf":2.23606797749979},"288":{"tf":1.0},"316":{"tf":1.0},"326":{"tf":1.0},"348":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.0},"372":{"tf":1.0},"380":{"tf":1.0},"396":{"tf":1.0},"401":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.7320508075688772},"414":{"tf":1.4142135623730951},"75":{"tf":1.0},"82":{"tf":1.4142135623730951},"85":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.4142135623730951},"97":{"tf":2.0}},"s":{":":{"/":{"/":{"<":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{">":{"/":{"<":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"o":{">":{"/":{"<":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"21":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"206":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"119":{"tf":1.4142135623730951},"124":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"289":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"21":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":1,"docs":{"17":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"178":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"l":{".":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"/":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"146":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{".":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"146":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"w":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"/":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"177":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"288":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"x":{"df":1,"docs":{"449":{"tf":1.0}}}}}},"y":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"d":{"df":6,"docs":{"232":{"tf":1.0},"244":{"tf":1.0},"248":{"tf":1.0},"259":{"tf":1.0},"378":{"tf":1.0},"420":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"z":{"df":2,"docs":{"352":{"tf":1.7320508075688772},"357":{"tf":1.0}}},"é":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"16":{"tf":1.0}},"é":{"df":2,"docs":{"167":{"tf":1.0},"412":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"317":{"tf":1.0},"380":{"tf":1.0},"382":{"tf":1.0}}}},"df":0,"docs":{}}}}},"ô":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"374":{"tf":1.0},"84":{"tf":1.4142135623730951},"88":{"tf":1.0}}}}}},"i":{"1":{"8":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"399":{"tf":1.0},"416":{"tf":1.0}}}},"df":0,"docs":{}},"3":{"2":{"df":1,"docs":{"351":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"6":{"4":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"442":{"tf":1.0},"84":{"tf":1.0}}}},"d":{"=":{"1":{"df":1,"docs":{"86":{"tf":1.0}}},"df":0,"docs":{}},"df":7,"docs":{"185":{"tf":1.0},"241":{"tf":1.0},"243":{"tf":1.0},"348":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"147":{"tf":1.0}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"146":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"19":{"tf":1.0}},"i":{"df":3,"docs":{"293":{"tf":1.0},"330":{"tf":1.0},"86":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"88":{"tf":1.0}}}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"393":{"tf":1.0}}}},"é":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"167":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":1,"docs":{"124":{"tf":1.0}}},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"316":{"tf":1.0},"348":{"tf":1.0}},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"206":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":9,"docs":{"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0}}}}}}}},"é":{"df":1,"docs":{"156":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"|":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"l":{"df":17,"docs":{"104":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"16":{"tf":1.0},"171":{"tf":1.0},"18":{"tf":1.0},"214":{"tf":1.0},"232":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.0},"276":{"tf":1.4142135623730951},"287":{"tf":1.0},"347":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"8":{"tf":1.0},"82":{"tf":1.7320508075688772},"84":{"tf":1.0}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"249":{"tf":1.0}},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"449":{"tf":1.0}}}}}}}},"m":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"151":{"tf":1.0},"164":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"380":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"396":{"tf":1.0}}}}},"p":{"_":{"df":1,"docs":{"236":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"234":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"é":{"d":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":10,"docs":{"178":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.0},"253":{"tf":1.0},"319":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"361":{"tf":1.0},"393":{"tf":1.0},"399":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"353":{"tf":1.0}}}}},"df":0,"docs":{}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"279":{"tf":1.4142135623730951},"341":{"tf":1.0},"343":{"tf":1.0},"360":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"376":{"tf":1.0},"393":{"tf":1.4142135623730951}},"é":{"df":1,"docs":{"416":{"tf":1.0}}}}}}}}},"o":{"df":1,"docs":{"418":{"tf":1.0}},"r":{"df":0,"docs":{},"t":{".":{"*":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"194":{"tf":1.0}}}}}}}}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"194":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"194":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"194":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":1,"docs":{"236":{"tf":1.0}},"j":{"df":0,"docs":{},"o":{"b":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"{":{"df":0,"docs":{},"u":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"355":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":2,"docs":{"346":{"tf":1.4142135623730951},"348":{"tf":2.0}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"=":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"x":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"=":{"2":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"s":{"=":{"1":{"8":{"0":{"0":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":19,"docs":{"102":{"tf":1.0},"189":{"tf":1.7320508075688772},"194":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.4142135623730951},"244":{"tf":1.0},"279":{"tf":1.0},"318":{"tf":1.0},"328":{"tf":1.0},"334":{"tf":1.4142135623730951},"345":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.4142135623730951},"354":{"tf":1.0},"416":{"tf":1.0},"450":{"tf":1.4142135623730951},"47":{"tf":1.0},"8":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"348":{"tf":1.0}},"}":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"348":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}}}}}},"t":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"348":{"tf":1.0}}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"348":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"166":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"83":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"n":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"23":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"u":{"df":1,"docs":{"183":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"330":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"166":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"160":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"293":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"401":{"tf":1.0}}}},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"294":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":2,"docs":{"166":{"tf":1.0},"184":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"419":{"tf":1.0}}},"n":{"df":0,"docs":{},"t":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"2":{"df":1,"docs":{"370":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":3,"docs":{"176":{"tf":1.0},"3":{"tf":1.0},"352":{"tf":1.0}}}}},"df":3,"docs":{"168":{"tf":1.0},"232":{"tf":1.0},"356":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"330":{"tf":1.0}}}}}}},"f":{"df":0,"docs":{},"o":{"df":5,"docs":{"163":{"tf":1.0},"243":{"tf":1.0},"293":{"tf":2.0},"85":{"tf":3.0},"86":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"m":{"df":4,"docs":{"280":{"tf":1.0},"3":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"1":{"tf":1.0},"250":{"tf":1.0},"311":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"t":{"_":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"348":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"373":{"tf":1.0},"414":{"tf":1.0},"423":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"m":{"d":{"df":72,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"249":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":3,"docs":{"21":{"tf":1.0},"242":{"tf":1.0},"314":{"tf":1.0}}},"z":{"df":0,"docs":{},"e":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":78,"docs":{"102":{"tf":1.0},"104":{"tf":1.0},"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"178":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"249":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"294":{"tf":1.4142135623730951},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"356":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":2,"docs":{"364":{"tf":1.0},"376":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":4,"docs":{"397":{"tf":1.0},"402":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0}}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":5,"docs":{"102":{"tf":1.0},"250":{"tf":1.0},"330":{"tf":1.4142135623730951},"422":{"tf":1.0},"429":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":10,"docs":{"242":{"tf":1.0},"294":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.7320508075688772},"348":{"tf":1.7320508075688772},"349":{"tf":1.7320508075688772},"377":{"tf":1.0},"423":{"tf":1.4142135623730951},"426":{"tf":1.0},"429":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"l":{"df":29,"docs":{"100":{"tf":1.4142135623730951},"113":{"tf":1.0},"115":{"tf":1.4142135623730951},"126":{"tf":1.4142135623730951},"133":{"tf":1.0},"146":{"tf":1.4142135623730951},"15":{"tf":1.0},"151":{"tf":1.4142135623730951},"156":{"tf":1.0},"160":{"tf":1.7320508075688772},"166":{"tf":1.0},"171":{"tf":1.7320508075688772},"177":{"tf":1.4142135623730951},"183":{"tf":1.0},"186":{"tf":1.0},"188":{"tf":1.4142135623730951},"213":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"292":{"tf":1.4142135623730951},"3":{"tf":1.0},"313":{"tf":1.0},"323":{"tf":1.4142135623730951},"451":{"tf":1.0},"72":{"tf":1.7320508075688772},"73":{"tf":1.4142135623730951},"79":{"tf":1.0},"81":{"tf":1.4142135623730951},"89":{"tf":1.0},"90":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"288":{"tf":1.4142135623730951}}}},"é":{"df":5,"docs":{"147":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"186":{"tf":1.0},"288":{"tf":1.0}}}}},"n":{"c":{"df":23,"docs":{"1":{"tf":1.0},"147":{"tf":1.4142135623730951},"17":{"tf":1.0},"2":{"tf":1.4142135623730951},"225":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"285":{"tf":1.0},"322":{"tf":1.0},"4":{"tf":1.0},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"5":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"86":{"tf":1.0},"89":{"tf":1.0},"95":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"314":{"tf":1.0}}}},"n":{"d":{"df":1,"docs":{"133":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"443":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"416":{"tf":1.0}}}}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"151":{"tf":1.0},"358":{"tf":1.0},"375":{"tf":1.0},"418":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"150":{"tf":1.0},"313":{"tf":1.0},"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"166":{"tf":1.0},"23":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"a":{"c":{"df":3,"docs":{"324":{"tf":1.0},"375":{"tf":1.0},"84":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":11,"docs":{"151":{"tf":1.0},"211":{"tf":1.0},"280":{"tf":1.4142135623730951},"384":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"442":{"tf":1.0},"5":{"tf":1.0},"82":{"tf":1.0},"87":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"167":{"tf":1.0},"82":{"tf":1.4142135623730951},"89":{"tf":1.0},"97":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"è":{"df":0,"docs":{},"t":{"df":1,"docs":{"379":{"tf":1.0}}}},"é":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"150":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":2,"docs":{"255":{"tf":1.0},"347":{"tf":1.0}}}}},"v":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"372":{"tf":1.0},"401":{"tf":1.0}}}}}}}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"0":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":2,"docs":{"166":{"tf":1.4142135623730951},"184":{"tf":1.0}}}}}},"è":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"284":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"6":{"tf":1.0},"84":{"tf":1.0}}},"t":{"df":5,"docs":{"2":{"tf":1.0},"276":{"tf":1.0},"316":{"tf":1.0},"396":{"tf":1.0},"445":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"168":{"tf":1.0},"74":{"tf":1.0}}}},"é":{"df":5,"docs":{"1":{"tf":1.0},"168":{"tf":1.0},"296":{"tf":1.0},"312":{"tf":1.0},"5":{"tf":1.0}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":4,"docs":{"184":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"194":{"tf":1.0},"397":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"p":{">":{"/":{"$":{"df":0,"docs":{},"p":{"df":1,"docs":{"104":{"tf":1.0}}}},"df":0,"docs":{}},":":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"116":{"tf":1.0}}}}}}}}},"p":{"df":0,"docs":{},"g":{"df":1,"docs":{"109":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":19,"docs":{"101":{"tf":1.4142135623730951},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.4142135623730951},"122":{"tf":1.0},"133":{"tf":1.0},"148":{"tf":1.4142135623730951},"153":{"tf":1.0},"154":{"tf":1.0},"160":{"tf":1.4142135623730951},"189":{"tf":1.0},"202":{"tf":2.23606797749979},"206":{"tf":1.7320508075688772},"207":{"tf":1.4142135623730951},"214":{"tf":1.0},"95":{"tf":1.7320508075688772},"97":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"133":{"tf":1.0}}}},"v":{"4":{"df":1,"docs":{"214":{"tf":1.0}}},"6":{"df":1,"docs":{"214":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"r":{"a":{"df":1,"docs":{"181":{"tf":1.0}}},"c":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"s":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"425":{"tf":1.0}}},"y":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"348":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":3,"docs":{"167":{"tf":1.0},"326":{"tf":1.0},"380":{"tf":1.0}},"é":{"df":2,"docs":{"381":{"tf":1.0},"397":{"tf":1.0}},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"u":{"df":12,"docs":{"2":{"tf":1.0},"27":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"363":{"tf":1.0},"375":{"tf":1.0},"45":{"tf":1.0},"450":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"314":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"j":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":10,"docs":{"189":{"tf":1.4142135623730951},"190":{"tf":1.0},"199":{"tf":1.0},"204":{"tf":1.4142135623730951},"207":{"tf":1.4142135623730951},"208":{"tf":1.4142135623730951},"210":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"214":{"tf":1.4142135623730951}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":12,"docs":{"16":{"tf":1.0},"167":{"tf":1.0},"189":{"tf":1.0},"234":{"tf":1.0},"242":{"tf":1.0},"249":{"tf":1.0},"346":{"tf":1.0},"361":{"tf":1.0},"393":{"tf":1.4142135623730951},"399":{"tf":1.0},"416":{"tf":1.0},"84":{"tf":1.0}}}},"df":0,"docs":{}},"v":{"a":{"df":1,"docs":{"178":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"231":{"tf":1.0}}}},"o":{"b":{"df":2,"docs":{"347":{"tf":1.4142135623730951},"414":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":16,"docs":{"108":{"tf":1.0},"128":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"139":{"tf":1.0},"165":{"tf":1.0},"189":{"tf":1.0},"214":{"tf":1.0},"243":{"tf":1.4142135623730951},"317":{"tf":1.0},"362":{"tf":1.0},"377":{"tf":1.0},"418":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":6,"docs":{"124":{"tf":1.0},"133":{"tf":1.0},"166":{"tf":1.0},"185":{"tf":1.0},"193":{"tf":1.0},"205":{"tf":1.4142135623730951}}}}},"d":{"df":2,"docs":{"205":{"tf":1.0},"208":{"tf":2.0}}},"df":1,"docs":{"346":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"446":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.7320508075688772},"214":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"s":{"df":1,"docs":{"375":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"316":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"180":{"tf":1.0},"348":{"tf":1.0},"375":{"tf":1.7320508075688772}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"5":{"tf":1.0}},"’":{"a":{"df":0,"docs":{},"u":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":2,"docs":{"167":{"tf":1.0},"351":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{}}},"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"=":{"1":{"5":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"$":{"df":0,"docs":{},"{":{"df":0,"docs":{},"j":{"df":0,"docs":{},"w":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"df":0,"docs":{},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"6":{"4":{"_":{"c":{"a":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"290":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":4,"docs":{"155":{"tf":1.0},"236":{"tf":1.0},"238":{"tf":1.0},"290":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"b":{"df":0,"docs":{},"l":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":9,"docs":{"189":{"tf":1.0},"191":{"tf":1.0},"250":{"tf":1.0},"290":{"tf":1.0},"363":{"tf":1.0},"375":{"tf":1.4142135623730951},"413":{"tf":1.0},"416":{"tf":1.0},"423":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"242":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"193":{"tf":1.0}}}}}}},"df":0,"docs":{}},"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"424":{"tf":1.0}}},"df":0,"docs":{}}},"df":12,"docs":{"123":{"tf":1.0},"179":{"tf":1.0},"184":{"tf":1.0},"186":{"tf":1.0},"19":{"tf":2.0},"241":{"tf":1.4142135623730951},"255":{"tf":1.4142135623730951},"293":{"tf":1.0},"294":{"tf":1.0},"300":{"tf":1.0},"375":{"tf":1.0},"85":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"15":{"tf":1.0},"19":{"tf":1.4142135623730951}}}}},"|":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{")":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"193":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"i":{"b":{"/":{"df":1,"docs":{"294":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"/":{"a":{"c":{"df":0,"docs":{},"m":{"df":3,"docs":{"116":{"tf":1.0},"133":{"tf":1.4142135623730951},"97":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"u":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"147":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"133":{"tf":1.0}}}}},"l":{"\'":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"205":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":2,"docs":{"314":{"tf":1.4142135623730951},"325":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"83":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"160":{"tf":1.0}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"i":{"df":2,"docs":{"123":{"tf":1.0},"257":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"171":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"é":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"165":{"tf":1.0}}}}},"df":0,"docs":{}}}},"a":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":7,"docs":{"1":{"tf":1.0},"281":{"tf":1.0},"313":{"tf":1.0},"434":{"tf":1.0},"445":{"tf":1.0},"45":{"tf":1.0},"8":{"tf":1.0}}}}},"df":198,"docs":{"1":{"tf":1.4142135623730951},"101":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.7320508075688772},"109":{"tf":1.0},"11":{"tf":1.0},"113":{"tf":1.0},"116":{"tf":1.0},"125":{"tf":1.0},"13":{"tf":1.0},"130":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"150":{"tf":1.0},"156":{"tf":1.4142135623730951},"158":{"tf":1.4142135623730951},"16":{"tf":2.449489742783178},"160":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.7320508075688772},"168":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"170":{"tf":1.0},"171":{"tf":1.7320508075688772},"173":{"tf":1.0},"174":{"tf":1.7320508075688772},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"179":{"tf":1.0},"18":{"tf":2.23606797749979},"186":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.4142135623730951},"199":{"tf":1.7320508075688772},"20":{"tf":2.6457513110645907},"209":{"tf":1.0},"21":{"tf":2.0},"210":{"tf":1.0},"214":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"22":{"tf":1.4142135623730951},"221":{"tf":1.4142135623730951},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":2.6457513110645907},"231":{"tf":1.4142135623730951},"240":{"tf":1.0},"241":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":2.0},"249":{"tf":2.449489742783178},"25":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.4142135623730951},"257":{"tf":1.4142135623730951},"258":{"tf":1.7320508075688772},"260":{"tf":1.4142135623730951},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.4142135623730951},"281":{"tf":1.0},"282":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.4142135623730951},"289":{"tf":1.0},"29":{"tf":1.4142135623730951},"290":{"tf":2.0},"291":{"tf":1.7320508075688772},"292":{"tf":1.4142135623730951},"293":{"tf":2.6457513110645907},"294":{"tf":1.4142135623730951},"296":{"tf":1.7320508075688772},"298":{"tf":1.0},"300":{"tf":1.4142135623730951},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"310":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"318":{"tf":1.0},"324":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":2.0},"33":{"tf":1.0},"330":{"tf":2.6457513110645907},"331":{"tf":2.0},"332":{"tf":1.7320508075688772},"333":{"tf":3.1622776601683795},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":2.449489742783178},"347":{"tf":1.7320508075688772},"35":{"tf":1.4142135623730951},"352":{"tf":2.0},"355":{"tf":1.0},"357":{"tf":1.0},"360":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.4142135623730951},"364":{"tf":1.0},"365":{"tf":1.4142135623730951},"367":{"tf":1.0},"37":{"tf":1.0},"373":{"tf":1.0},"379":{"tf":1.4142135623730951},"384":{"tf":1.0},"386":{"tf":1.4142135623730951},"39":{"tf":1.0},"397":{"tf":1.0},"4":{"tf":1.0},"400":{"tf":1.0},"402":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.4142135623730951},"418":{"tf":1.0},"419":{"tf":1.4142135623730951},"420":{"tf":1.4142135623730951},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"451":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.4142135623730951},"77":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":2.23606797749979},"83":{"tf":1.4142135623730951},"84":{"tf":2.0},"85":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"88":{"tf":1.7320508075688772},"9":{"tf":1.7320508075688772},"90":{"tf":1.0},"92":{"tf":1.0},"98":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"189":{"tf":1.0},"19":{"tf":1.0},"211":{"tf":1.0}}}}}}},"n":{"c":{"df":4,"docs":{"150":{"tf":1.0},"166":{"tf":1.0},"169":{"tf":1.0},"277":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"290":{"tf":1.0},"293":{"tf":1.0}}}}}},"r":{"df":11,"docs":{"166":{"tf":1.0},"279":{"tf":1.4142135623730951},"285":{"tf":1.0},"287":{"tf":1.0},"310":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"322":{"tf":1.0},"324":{"tf":1.0},"334":{"tf":1.0},"82":{"tf":1.0}}},"z":{"df":2,"docs":{"287":{"tf":1.0},"293":{"tf":1.0}}}}},"df":4,"docs":{"167":{"tf":1.0},"189":{"tf":1.0},"206":{"tf":1.0},"95":{"tf":1.0}},"g":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"2":{"tf":1.0}}}},"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"174":{"tf":1.0},"296":{"tf":1.0}}}},"df":2,"docs":{"298":{"tf":1.7320508075688772},"318":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"133":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"424":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"21":{"tf":1.0},"333":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":5,"docs":{"150":{"tf":1.0},"178":{"tf":1.0},"23":{"tf":1.0},"249":{"tf":1.0},"394":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"k":{"df":2,"docs":{"189":{"tf":1.0},"401":{"tf":1.0}}}},"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"3":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"317":{"tf":1.0},"419":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"9":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"163":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":336,"docs":{"1":{"tf":1.0},"10":{"tf":1.7320508075688772},"100":{"tf":1.0},"104":{"tf":2.0},"106":{"tf":1.4142135623730951},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"11":{"tf":1.4142135623730951},"117":{"tf":1.0},"118":{"tf":1.0},"12":{"tf":1.7320508075688772},"121":{"tf":1.0},"127":{"tf":1.0},"129":{"tf":1.0},"133":{"tf":1.0},"135":{"tf":1.4142135623730951},"136":{"tf":1.7320508075688772},"137":{"tf":1.4142135623730951},"138":{"tf":1.7320508075688772},"139":{"tf":1.4142135623730951},"140":{"tf":1.7320508075688772},"141":{"tf":1.4142135623730951},"142":{"tf":1.7320508075688772},"143":{"tf":1.4142135623730951},"144":{"tf":1.7320508075688772},"145":{"tf":1.4142135623730951},"146":{"tf":2.449489742783178},"147":{"tf":2.0},"148":{"tf":1.7320508075688772},"15":{"tf":1.0},"150":{"tf":1.4142135623730951},"151":{"tf":1.0},"152":{"tf":1.7320508075688772},"153":{"tf":2.449489742783178},"155":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.7320508075688772},"160":{"tf":1.0},"161":{"tf":1.7320508075688772},"163":{"tf":1.0},"165":{"tf":2.23606797749979},"166":{"tf":2.6457513110645907},"167":{"tf":2.449489742783178},"168":{"tf":2.23606797749979},"169":{"tf":1.0},"17":{"tf":1.7320508075688772},"171":{"tf":1.7320508075688772},"172":{"tf":1.4142135623730951},"173":{"tf":1.4142135623730951},"174":{"tf":2.0},"175":{"tf":1.0},"176":{"tf":1.4142135623730951},"177":{"tf":1.4142135623730951},"178":{"tf":1.4142135623730951},"179":{"tf":1.0},"18":{"tf":2.449489742783178},"181":{"tf":2.0},"183":{"tf":1.7320508075688772},"184":{"tf":1.0},"186":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.7320508075688772},"199":{"tf":2.0},"2":{"tf":2.23606797749979},"20":{"tf":1.0},"201":{"tf":1.0},"202":{"tf":1.4142135623730951},"206":{"tf":1.0},"207":{"tf":1.0},"21":{"tf":2.449489742783178},"211":{"tf":2.0},"212":{"tf":1.0},"214":{"tf":2.23606797749979},"215":{"tf":1.7320508075688772},"216":{"tf":1.7320508075688772},"217":{"tf":1.7320508075688772},"218":{"tf":1.7320508075688772},"219":{"tf":1.4142135623730951},"220":{"tf":1.7320508075688772},"221":{"tf":1.4142135623730951},"222":{"tf":1.7320508075688772},"223":{"tf":1.7320508075688772},"224":{"tf":1.7320508075688772},"225":{"tf":1.4142135623730951},"226":{"tf":1.7320508075688772},"227":{"tf":1.4142135623730951},"228":{"tf":1.7320508075688772},"229":{"tf":1.4142135623730951},"23":{"tf":2.8284271247461903},"230":{"tf":1.7320508075688772},"231":{"tf":1.4142135623730951},"234":{"tf":1.4142135623730951},"235":{"tf":1.0},"237":{"tf":1.0},"24":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":2.0},"247":{"tf":1.0},"249":{"tf":2.0},"25":{"tf":1.4142135623730951},"251":{"tf":1.0},"252":{"tf":1.0},"254":{"tf":1.4142135623730951},"255":{"tf":1.7320508075688772},"256":{"tf":1.0},"257":{"tf":1.7320508075688772},"258":{"tf":1.0},"259":{"tf":1.0},"26":{"tf":1.7320508075688772},"260":{"tf":1.4142135623730951},"261":{"tf":1.7320508075688772},"262":{"tf":1.4142135623730951},"263":{"tf":1.7320508075688772},"264":{"tf":1.4142135623730951},"265":{"tf":1.7320508075688772},"266":{"tf":1.4142135623730951},"267":{"tf":1.7320508075688772},"268":{"tf":1.4142135623730951},"269":{"tf":1.7320508075688772},"27":{"tf":1.4142135623730951},"270":{"tf":1.4142135623730951},"271":{"tf":1.7320508075688772},"272":{"tf":1.4142135623730951},"273":{"tf":1.7320508075688772},"274":{"tf":1.4142135623730951},"275":{"tf":1.7320508075688772},"276":{"tf":1.7320508075688772},"277":{"tf":3.0},"278":{"tf":1.7320508075688772},"279":{"tf":2.23606797749979},"28":{"tf":1.7320508075688772},"280":{"tf":1.7320508075688772},"281":{"tf":2.449489742783178},"282":{"tf":1.4142135623730951},"283":{"tf":1.7320508075688772},"284":{"tf":1.0},"285":{"tf":1.4142135623730951},"287":{"tf":2.23606797749979},"288":{"tf":2.0},"289":{"tf":1.0},"29":{"tf":1.4142135623730951},"290":{"tf":2.0},"291":{"tf":1.0},"292":{"tf":2.23606797749979},"293":{"tf":2.6457513110645907},"294":{"tf":2.0},"296":{"tf":1.0},"297":{"tf":1.0},"299":{"tf":1.4142135623730951},"3":{"tf":2.0},"30":{"tf":1.7320508075688772},"301":{"tf":1.0},"302":{"tf":1.4142135623730951},"303":{"tf":1.7320508075688772},"304":{"tf":1.4142135623730951},"305":{"tf":1.7320508075688772},"306":{"tf":1.4142135623730951},"307":{"tf":1.7320508075688772},"308":{"tf":1.4142135623730951},"309":{"tf":1.7320508075688772},"31":{"tf":1.4142135623730951},"310":{"tf":1.0},"312":{"tf":1.4142135623730951},"313":{"tf":1.4142135623730951},"316":{"tf":1.4142135623730951},"317":{"tf":1.7320508075688772},"318":{"tf":1.4142135623730951},"319":{"tf":1.7320508075688772},"32":{"tf":1.7320508075688772},"322":{"tf":1.4142135623730951},"323":{"tf":1.0},"324":{"tf":1.4142135623730951},"325":{"tf":1.0},"327":{"tf":2.6457513110645907},"328":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"330":{"tf":1.7320508075688772},"331":{"tf":2.0},"332":{"tf":2.0},"333":{"tf":2.8284271247461903},"334":{"tf":1.7320508075688772},"335":{"tf":1.4142135623730951},"336":{"tf":1.7320508075688772},"337":{"tf":1.4142135623730951},"338":{"tf":1.7320508075688772},"339":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"340":{"tf":1.7320508075688772},"341":{"tf":1.4142135623730951},"342":{"tf":1.7320508075688772},"343":{"tf":1.4142135623730951},"344":{"tf":1.7320508075688772},"346":{"tf":2.0},"347":{"tf":2.0},"348":{"tf":1.4142135623730951},"35":{"tf":1.4142135623730951},"351":{"tf":1.7320508075688772},"352":{"tf":1.7320508075688772},"353":{"tf":2.23606797749979},"354":{"tf":2.449489742783178},"355":{"tf":1.7320508075688772},"356":{"tf":2.0},"357":{"tf":2.0},"358":{"tf":1.7320508075688772},"36":{"tf":1.7320508075688772},"360":{"tf":1.7320508075688772},"361":{"tf":1.4142135623730951},"362":{"tf":1.4142135623730951},"363":{"tf":2.0},"364":{"tf":1.7320508075688772},"365":{"tf":1.4142135623730951},"366":{"tf":1.7320508075688772},"367":{"tf":1.4142135623730951},"368":{"tf":1.7320508075688772},"37":{"tf":1.4142135623730951},"372":{"tf":1.4142135623730951},"373":{"tf":1.0},"375":{"tf":3.3166247903554},"376":{"tf":2.449489742783178},"377":{"tf":1.0},"379":{"tf":1.4142135623730951},"38":{"tf":1.7320508075688772},"381":{"tf":1.0},"382":{"tf":2.23606797749979},"383":{"tf":1.7320508075688772},"384":{"tf":1.4142135623730951},"385":{"tf":1.7320508075688772},"386":{"tf":1.4142135623730951},"387":{"tf":1.7320508075688772},"388":{"tf":1.4142135623730951},"39":{"tf":2.0},"390":{"tf":1.4142135623730951},"393":{"tf":2.0},"394":{"tf":1.7320508075688772},"397":{"tf":1.7320508075688772},"399":{"tf":1.0},"40":{"tf":1.7320508075688772},"400":{"tf":1.4142135623730951},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.7320508075688772},"404":{"tf":1.4142135623730951},"405":{"tf":1.7320508075688772},"406":{"tf":1.4142135623730951},"407":{"tf":1.7320508075688772},"408":{"tf":1.4142135623730951},"409":{"tf":1.7320508075688772},"41":{"tf":1.4142135623730951},"410":{"tf":1.4142135623730951},"411":{"tf":1.7320508075688772},"412":{"tf":1.0},"414":{"tf":1.7320508075688772},"417":{"tf":1.0},"418":{"tf":1.7320508075688772},"419":{"tf":2.0},"42":{"tf":1.7320508075688772},"420":{"tf":1.7320508075688772},"422":{"tf":1.0},"43":{"tf":1.4142135623730951},"430":{"tf":1.4142135623730951},"431":{"tf":1.7320508075688772},"432":{"tf":1.4142135623730951},"433":{"tf":1.7320508075688772},"434":{"tf":1.4142135623730951},"435":{"tf":1.7320508075688772},"436":{"tf":1.4142135623730951},"437":{"tf":1.7320508075688772},"438":{"tf":1.4142135623730951},"439":{"tf":1.7320508075688772},"44":{"tf":1.7320508075688772},"440":{"tf":1.4142135623730951},"441":{"tf":1.7320508075688772},"442":{"tf":2.6457513110645907},"444":{"tf":1.0},"445":{"tf":1.0},"449":{"tf":1.7320508075688772},"45":{"tf":2.0},"450":{"tf":1.0},"451":{"tf":2.23606797749979},"46":{"tf":1.7320508075688772},"47":{"tf":1.4142135623730951},"48":{"tf":1.7320508075688772},"49":{"tf":1.7320508075688772},"5":{"tf":1.4142135623730951},"50":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951},"52":{"tf":1.7320508075688772},"53":{"tf":1.4142135623730951},"54":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"56":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"6":{"tf":3.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951},"62":{"tf":1.7320508075688772},"63":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"65":{"tf":1.4142135623730951},"66":{"tf":1.7320508075688772},"67":{"tf":1.4142135623730951},"68":{"tf":1.7320508075688772},"69":{"tf":1.4142135623730951},"7":{"tf":1.7320508075688772},"70":{"tf":1.7320508075688772},"72":{"tf":2.8284271247461903},"73":{"tf":1.7320508075688772},"74":{"tf":2.23606797749979},"75":{"tf":1.0},"76":{"tf":2.449489742783178},"77":{"tf":1.4142135623730951},"78":{"tf":1.7320508075688772},"8":{"tf":2.8284271247461903},"80":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":2.23606797749979},"83":{"tf":2.8284271247461903},"84":{"tf":2.8284271247461903},"85":{"tf":3.1622776601683795},"86":{"tf":2.449489742783178},"87":{"tf":2.0},"88":{"tf":3.605551275463989},"9":{"tf":1.0},"90":{"tf":1.4142135623730951},"91":{"tf":1.7320508075688772},"92":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772},"95":{"tf":1.4142135623730951},"96":{"tf":1.0},"98":{"tf":1.0}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"184":{"tf":1.0},"356":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"21":{"tf":1.0},"23":{"tf":1.0}}}},"’":{"df":6,"docs":{"114":{"tf":1.0},"117":{"tf":1.0},"133":{"tf":1.0},"445":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"r":{"df":7,"docs":{"1":{"tf":1.0},"2":{"tf":1.0},"231":{"tf":1.0},"243":{"tf":1.0},"347":{"tf":1.0},"351":{"tf":1.0},"451":{"tf":1.0}}}}},"h":{"df":1,"docs":{"292":{"tf":1.0}}},"i":{"b":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"2":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"383":{"tf":1.0}}}}}}}},"df":6,"docs":{"348":{"tf":1.0},"350":{"tf":1.0},"356":{"tf":1.7320508075688772},"357":{"tf":1.0},"373":{"tf":1.0},"419":{"tf":1.0}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":3,"docs":{"101":{"tf":1.0},"115":{"tf":1.0},"133":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"q":{"df":1,"docs":{"288":{"tf":1.0}}}},"r":{"df":2,"docs":{"151":{"tf":1.0},"81":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"288":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"w":{"df":0,"docs":{},"w":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"390":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":1,"docs":{"10":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":5,"docs":{"181":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.7320508075688772},"375":{"tf":1.4142135623730951},"86":{"tf":1.0}}},"r":{"df":73,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"243":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}},"u":{"df":2,"docs":{"23":{"tf":1.0},"352":{"tf":1.0}}}},"g":{"df":0,"docs":{},"n":{"df":9,"docs":{"175":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"2":{"tf":1.0},"20":{"tf":1.0},"290":{"tf":1.4142135623730951},"357":{"tf":1.0},"5":{"tf":1.0},"83":{"tf":1.0}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"351":{"tf":1.0},"357":{"tf":1.0}}},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"201":{"tf":1.0}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"_":{"df":0,"docs":{},"z":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"201":{"tf":1.7320508075688772}}}}}},"df":2,"docs":{"189":{"tf":1.0},"202":{"tf":1.7320508075688772}}}}}},"df":19,"docs":{"167":{"tf":1.0},"172":{"tf":1.0},"185":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"198":{"tf":2.0},"199":{"tf":1.0},"200":{"tf":1.4142135623730951},"201":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.0},"214":{"tf":1.0},"215":{"tf":1.0},"326":{"tf":1.0},"372":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"443":{"tf":1.0},"445":{"tf":1.0},"74":{"tf":1.0}},"é":{"df":1,"docs":{"169":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"k":{"df":2,"docs":{"165":{"tf":1.0},"377":{"tf":1.0}}},"t":{"df":4,"docs":{"174":{"tf":1.0},"320":{"tf":1.0},"389":{"tf":1.0},"392":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"/":{"a":{"df":0,"docs":{},"m":{"d":{"6":{"4":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":7,"docs":{"151":{"tf":1.0},"2":{"tf":1.0},"291":{"tf":1.0},"71":{"tf":1.0},"81":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0}}}},"é":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"181":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"281":{"tf":1.0},"76":{"tf":1.0}}}},"t":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"373":{"tf":1.0}}}}}},"df":16,"docs":{"118":{"tf":1.0},"160":{"tf":1.0},"199":{"tf":1.4142135623730951},"204":{"tf":1.0},"206":{"tf":1.0},"207":{"tf":1.0},"238":{"tf":1.0},"243":{"tf":1.0},"290":{"tf":1.0},"318":{"tf":1.4142135623730951},"329":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"373":{"tf":1.0},"375":{"tf":1.4142135623730951},"449":{"tf":1.0}},"e":{"/":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"é":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":2,"docs":{"355":{"tf":1.0},"357":{"tf":1.0}}}}}}}}},"df":6,"docs":{"121":{"tf":1.4142135623730951},"202":{"tf":1.0},"293":{"tf":1.4142135623730951},"299":{"tf":1.0},"355":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951}}},"r":{"df":3,"docs":{"317":{"tf":1.0},"332":{"tf":1.0},"449":{"tf":1.0}}}}}},"t":{"df":4,"docs":{"249":{"tf":1.0},"347":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"165":{"tf":1.0}}}}},"n":{"df":2,"docs":{"116":{"tf":1.0},"199":{"tf":1.0}}},"o":{"a":{"d":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"443":{"tf":1.0}}}}}},"df":27,"docs":{"100":{"tf":1.0},"147":{"tf":1.4142135623730951},"148":{"tf":1.0},"151":{"tf":1.0},"156":{"tf":1.0},"165":{"tf":1.0},"177":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"199":{"tf":1.0},"210":{"tf":1.0},"213":{"tf":1.0},"235":{"tf":1.0},"24":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"285":{"tf":1.4142135623730951},"292":{"tf":1.0},"299":{"tf":1.0},"313":{"tf":1.0},"321":{"tf":1.0},"323":{"tf":1.0},"397":{"tf":1.0},"420":{"tf":1.0},"442":{"tf":1.0},"443":{"tf":1.4142135623730951},"88":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"4":{"0":{"0":{"0":{"df":1,"docs":{"443":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"169":{"tf":1.0},"172":{"tf":1.0},"243":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"19":{"tf":1.0}}}}},"t":{"df":2,"docs":{"199":{"tf":1.4142135623730951},"202":{"tf":2.23606797749979}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"133":{"tf":1.0},"98":{"tf":1.0}}}}}}},"df":0,"docs":{},"g":{"df":33,"docs":{"10":{"tf":1.0},"124":{"tf":1.0},"133":{"tf":1.0},"166":{"tf":1.0},"169":{"tf":1.0},"175":{"tf":1.0},"183":{"tf":1.0},"185":{"tf":1.4142135623730951},"193":{"tf":1.0},"205":{"tf":1.4142135623730951},"207":{"tf":1.0},"208":{"tf":1.0},"211":{"tf":1.0},"214":{"tf":1.4142135623730951},"243":{"tf":1.0},"255":{"tf":1.0},"293":{"tf":1.0},"317":{"tf":1.4142135623730951},"348":{"tf":1.0},"349":{"tf":1.0},"375":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"380":{"tf":1.0},"382":{"tf":1.0},"393":{"tf":1.0},"403":{"tf":1.0},"416":{"tf":1.0},"418":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":2.6457513110645907},"86":{"tf":1.4142135623730951},"87":{"tf":1.0},"88":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"é":{"df":1,"docs":{"393":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":3,"docs":{"191":{"tf":1.4142135623730951},"195":{"tf":1.4142135623730951},"205":{"tf":1.0}}}}}},"df":0,"docs":{}},"a":{"df":3,"docs":{"325":{"tf":1.0},"328":{"tf":1.4142135623730951},"334":{"tf":1.0}},"s":{"(":{"\'":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"328":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":21,"docs":{"119":{"tf":1.0},"127":{"tf":1.7320508075688772},"133":{"tf":1.4142135623730951},"178":{"tf":1.0},"189":{"tf":2.449489742783178},"191":{"tf":1.0},"192":{"tf":1.0},"202":{"tf":1.0},"204":{"tf":1.7320508075688772},"205":{"tf":1.0},"206":{"tf":1.0},"208":{"tf":1.7320508075688772},"243":{"tf":1.0},"316":{"tf":1.0},"330":{"tf":2.449489742783178},"331":{"tf":1.4142135623730951},"333":{"tf":2.0},"359":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"417":{"tf":1.0},"429":{"tf":1.0}},"|":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"v":{"1":{"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"v":{"1":{"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"v":{"1":{"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"2":{"df":0,"docs":{},"f":{"a":{"df":1,"docs":{"191":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":1,"docs":{"202":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"244":{"tf":1.0},"363":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"330":{"tf":1.0},"375":{"tf":1.4142135623730951}}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"127":{"tf":2.0},"189":{"tf":3.1622776601683795},"211":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"356":{"tf":1.0},"421":{"tf":1.0}}}},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"189":{"tf":1.0}},"u":{"df":1,"docs":{"375":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"p":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":6,"docs":{"109":{"tf":1.0},"121":{"tf":1.0},"134":{"tf":1.7320508075688772},"189":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"180":{"tf":1.0},"348":{"tf":1.4142135623730951},"414":{"tf":1.0}}}},"r":{"df":74,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.7320508075688772},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"300":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"’":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"2":{"tf":1.0}}}}}}}}},"t":{"df":2,"docs":{"388":{"tf":1.0},"403":{"tf":1.0}}},"w":{"df":1,"docs":{"181":{"tf":1.0}}}},"r":{"df":6,"docs":{"174":{"tf":1.0},"277":{"tf":1.0},"352":{"tf":1.0},"370":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}},"s":{"df":3,"docs":{"289":{"tf":1.0},"292":{"tf":1.0},"84":{"tf":1.0}},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"88":{"tf":1.0}}}}},"u":{"df":4,"docs":{"147":{"tf":1.0},"155":{"tf":1.0},"240":{"tf":1.0},"318":{"tf":1.0}},"e":{"df":2,"docs":{"153":{"tf":1.0},"249":{"tf":1.0}}},"i":{"df":3,"docs":{"179":{"tf":1.0},"346":{"tf":1.0},"363":{"tf":1.0}}}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"202":{"tf":1.0}}}}}}}},"’":{"a":{"c":{"c":{"df":0,"docs":{},"è":{"df":6,"docs":{"167":{"tf":1.4142135623730951},"18":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"375":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}},"d":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"442":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"332":{"tf":1.7320508075688772}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}}},"df":1,"docs":{"22":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"i":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"i":{"df":7,"docs":{"178":{"tf":1.0},"2":{"tf":1.4142135623730951},"276":{"tf":1.4142135623730951},"287":{"tf":1.0},"4":{"tf":1.0},"449":{"tf":1.4142135623730951},"450":{"tf":1.0}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":10,"docs":{"18":{"tf":1.4142135623730951},"243":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"293":{"tf":1.0},"322":{"tf":1.0},"327":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"276":{"tf":1.0},"280":{"tf":1.0},"281":{"tf":1.0},"412":{"tf":1.0},"5":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"442":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"333":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"14":{"tf":1.0},"393":{"tf":1.0},"449":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"5":{"tf":1.0}}}}}}},"r":{"df":2,"docs":{"168":{"tf":1.0},"379":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"253":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"95":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"2":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":4,"docs":{"285":{"tf":1.0},"290":{"tf":1.0},"299":{"tf":1.0},"326":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"176":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}}},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"161":{"tf":1.0},"173":{"tf":1.0},"420":{"tf":1.0}}}}},"df":0,"docs":{}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"23":{"tf":1.0}}}}}}}},"i":{"d":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"364":{"tf":1.0}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"330":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"n":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"166":{"tf":1.0},"276":{"tf":1.0},"89":{"tf":1.0}}},"n":{"c":{"df":8,"docs":{"187":{"tf":1.0},"217":{"tf":1.0},"23":{"tf":1.4142135623730951},"285":{"tf":1.0},"287":{"tf":1.0},"298":{"tf":1.0},"74":{"tf":1.4142135623730951},"86":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":14,"docs":{"173":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"237":{"tf":1.0},"240":{"tf":1.0},"258":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.0},"294":{"tf":1.0},"298":{"tf":1.0},"299":{"tf":1.0},"418":{"tf":1.0},"6":{"tf":1.0},"80":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"71":{"tf":1.0}}}}},"t":{"df":1,"docs":{"1":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"p":{"df":2,"docs":{"214":{"tf":1.0},"95":{"tf":1.0}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"420":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"175":{"tf":1.0},"177":{"tf":1.0},"186":{"tf":1.4142135623730951},"347":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"291":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"r":{"df":4,"docs":{"278":{"tf":1.0},"397":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"i":{"df":10,"docs":{"164":{"tf":1.0},"175":{"tf":1.0},"178":{"tf":1.0},"232":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"397":{"tf":1.0},"417":{"tf":1.0}}},"n":{"df":3,"docs":{"168":{"tf":1.0},"379":{"tf":1.0},"85":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"330":{"tf":1.0},"331":{"tf":1.0}}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"l":{"df":5,"docs":{"14":{"tf":1.0},"17":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"86":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"276":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"330":{"tf":1.0},"331":{"tf":1.0},"347":{"tf":1.0},"357":{"tf":1.4142135623730951},"95":{"tf":1.0}}}}}}},"df":2,"docs":{"147":{"tf":1.0},"3":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"181":{"tf":1.0}}},"df":0,"docs":{}}}},"é":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"382":{"tf":1.0}}}}}},"t":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":2,"docs":{"18":{"tf":1.0},"20":{"tf":1.0}}}},"t":{"df":4,"docs":{"104":{"tf":1.4142135623730951},"237":{"tf":1.0},"347":{"tf":1.4142135623730951},"85":{"tf":1.0}}},"y":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"72":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"399":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"444":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"364":{"tf":1.0}}}}}}}}}}}}},"m":{"a":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"257":{"tf":1.4142135623730951}},"e":{"\\"":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"259":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":23,"docs":{"100":{"tf":1.0},"145":{"tf":1.0},"147":{"tf":1.4142135623730951},"150":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.4142135623730951},"163":{"tf":1.0},"167":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.7320508075688772},"172":{"tf":1.0},"177":{"tf":1.0},"186":{"tf":1.0},"210":{"tf":1.0},"291":{"tf":1.0},"296":{"tf":1.0},"443":{"tf":1.0},"76":{"tf":1.0},"81":{"tf":1.4142135623730951},"84":{"tf":1.0},"88":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":2,"docs":{"443":{"tf":1.0},"451":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"o":{"df":1,"docs":{"288":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":5,"docs":{"199":{"tf":1.0},"20":{"tf":1.0},"249":{"tf":1.4142135623730951},"290":{"tf":1.0},"356":{"tf":1.0}},"l":{"df":7,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"213":{"tf":1.0},"297":{"tf":1.0},"86":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"n":{",":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"173":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"174":{"tf":1.0}}}},"r":{"df":2,"docs":{"364":{"tf":1.0},"376":{"tf":1.0}}}},"[":{"\\"":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":14,"docs":{"123":{"tf":1.0},"21":{"tf":1.0},"242":{"tf":1.0},"257":{"tf":1.4142135623730951},"259":{"tf":1.0},"294":{"tf":2.23606797749979},"316":{"tf":1.4142135623730951},"351":{"tf":1.0},"364":{"tf":1.0},"392":{"tf":1.0},"413":{"tf":2.0},"414":{"tf":4.795831523312719},"428":{"tf":1.7320508075688772},"72":{"tf":1.0}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"318":{"tf":1.0},"372":{"tf":1.0},"427":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":5,"docs":{"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"357":{"tf":1.0},"83":{"tf":1.0}},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":2,"docs":{"2":{"tf":1.0},"71":{"tf":1.0}}}}}}}}},"j":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"133":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"208":{"tf":1.0}}}}}}},"n":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"147":{"tf":1.0},"179":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"3":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"184":{"tf":1.0},"300":{"tf":1.0}}}}},"df":1,"docs":{"399":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"288":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":14,"docs":{"166":{"tf":1.4142135623730951},"175":{"tf":1.0},"183":{"tf":1.0},"2":{"tf":1.7320508075688772},"206":{"tf":1.0},"276":{"tf":1.4142135623730951},"3":{"tf":1.0},"362":{"tf":1.0},"4":{"tf":1.7320508075688772},"442":{"tf":1.0},"451":{"tf":1.7320508075688772},"5":{"tf":1.7320508075688772},"6":{"tf":1.0},"71":{"tf":1.4142135623730951}}}}}},"p":{"df":1,"docs":{"401":{"tf":1.0}}},"r":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"284":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{},"k":{"_":{"c":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"348":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"348":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"59":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"394":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"318":{"tf":1.0},"347":{"tf":1.0}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"394":{"tf":1.0}}}}},"é":{"df":2,"docs":{"442":{"tf":1.0},"83":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"397":{"tf":1.0}}}}},"é":{"df":1,"docs":{"382":{"tf":1.0}}}}},"s":{"c":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"189":{"tf":1.0}}}},"df":0,"docs":{}},"df":1,"docs":{"450":{"tf":1.4142135623730951}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"193":{"tf":1.0},"214":{"tf":1.0},"259":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"208":{"tf":1.0},"396":{"tf":1.0}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"i":{"df":3,"docs":{"166":{"tf":1.0},"300":{"tf":1.0},"330":{"tf":1.0}},"s":{"df":1,"docs":{"300":{"tf":1.0}}}}},"df":0,"docs":{}}},"x":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"427":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":3,"docs":{"180":{"tf":1.0},"208":{"tf":1.0},"393":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"127":{"tf":2.23606797749979},"189":{"tf":3.7416573867739413}}}}}}}},"î":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"1":{"tf":1.0}}}}}}}},"d":{"df":0,"docs":{},"p":{"df":2,"docs":{"16":{"tf":1.0},"243":{"tf":1.0}}}},"df":7,"docs":{"123":{"tf":1.0},"174":{"tf":1.7320508075688772},"294":{"tf":1.0},"296":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.4142135623730951},"394":{"tf":1.0}},"e":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"181":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"450":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"347":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"284":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":3,"docs":{"10":{"tf":1.0},"281":{"tf":1.0},"76":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":5,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"86":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":9,"docs":{"279":{"tf":1.0},"317":{"tf":1.0},"365":{"tf":1.0},"375":{"tf":1.0},"388":{"tf":1.0},"403":{"tf":1.4142135623730951},"43":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":2,"docs":{"364":{"tf":1.0},"414":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"293":{"tf":1.0},"330":{"tf":1.0},"401":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":3,"docs":{"181":{"tf":1.0},"355":{"tf":1.0},"364":{"tf":1.0}},"r":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"189":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"211":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"352":{"tf":1.0}}}}},"r":{"df":12,"docs":{"108":{"tf":1.0},"117":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"139":{"tf":1.0},"170":{"tf":1.0},"172":{"tf":1.0},"176":{"tf":1.0},"214":{"tf":1.0},"317":{"tf":1.0},"390":{"tf":1.0},"74":{"tf":1.0}}}}}},"i":{"b":{"/":{"df":2,"docs":{"289":{"tf":1.0},"356":{"tf":1.0}}},"df":2,"docs":{"289":{"tf":1.0},"356":{"tf":1.0}}},"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}}},"d":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":4,"docs":{"280":{"tf":1.0},"287":{"tf":1.0},"399":{"tf":1.0},"445":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"377":{"tf":1.0}},"g":{"df":1,"docs":{"414":{"tf":2.0}},"r":{"a":{"df":0,"docs":{},"t":{"df":11,"docs":{"279":{"tf":1.0},"293":{"tf":1.4142135623730951},"299":{"tf":1.0},"339":{"tf":1.0},"372":{"tf":1.7320508075688772},"397":{"tf":1.0},"414":{"tf":1.0},"450":{"tf":1.4142135623730951},"73":{"tf":1.0},"85":{"tf":1.7320508075688772},"87":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"450":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"n":{"df":9,"docs":{"24":{"tf":1.0},"277":{"tf":1.7320508075688772},"278":{"tf":1.7320508075688772},"301":{"tf":1.0},"6":{"tf":2.0},"7":{"tf":2.0},"72":{"tf":2.0},"73":{"tf":2.0},"89":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":3,"docs":{"113":{"tf":1.0},"292":{"tf":1.0},"389":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":7,"docs":{"127":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951}}}},"df":3,"docs":{"154":{"tf":1.0},"164":{"tf":1.0},"447":{"tf":1.0}},"u":{"df":0,"docs":{},"m":{"df":4,"docs":{"151":{"tf":1.0},"167":{"tf":1.0},"243":{"tf":1.0},"383":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":9,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"293":{"tf":1.0},"347":{"tf":1.0},"79":{"tf":1.0},"81":{"tf":1.0},"85":{"tf":2.0}}}}},"s":{"df":0,"docs":{},"e":{"df":10,"docs":{"128":{"tf":1.0},"132":{"tf":1.0},"165":{"tf":1.0},"362":{"tf":1.0},"418":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0},"94":{"tf":1.0}}}},"x":{"df":1,"docs":{"133":{"tf":1.0}}}},"k":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":4,"docs":{"109":{"tf":1.0},"116":{"tf":1.0},"178":{"tf":1.0},"83":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"317":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":2,"docs":{"397":{"tf":1.4142135623730951},"443":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"317":{"tf":1.0}}}}}},"d":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"314":{"tf":1.0}}}},"df":3,"docs":{"101":{"tf":1.0},"115":{"tf":1.0},"133":{"tf":1.0}},"e":{")":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"447":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":1,"docs":{"447":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":91,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"146":{"tf":1.0},"174":{"tf":1.7320508075688772},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"272":{"tf":1.4142135623730951},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"281":{"tf":1.4142135623730951},"283":{"tf":1.0},"294":{"tf":1.0},"296":{"tf":1.4142135623730951},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"313":{"tf":1.7320508075688772},"32":{"tf":1.0},"324":{"tf":1.4142135623730951},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"375":{"tf":1.0},"378":{"tf":1.0},"379":{"tf":1.4142135623730951},"38":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"413":{"tf":1.4142135623730951},"417":{"tf":1.4142135623730951},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"436":{"tf":1.4142135623730951},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"447":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0},"9":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"l":{"df":1,"docs":{"372":{"tf":1.0}}}},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"16":{"tf":1.0},"165":{"tf":1.4142135623730951},"389":{"tf":1.0},"403":{"tf":1.0}},"i":{"df":20,"docs":{"105":{"tf":1.0},"165":{"tf":1.0},"232":{"tf":1.0},"237":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.4142135623730951},"248":{"tf":1.4142135623730951},"249":{"tf":1.0},"252":{"tf":1.0},"253":{"tf":1.4142135623730951},"254":{"tf":1.4142135623730951},"317":{"tf":1.0},"319":{"tf":1.0},"358":{"tf":1.0},"361":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"442":{"tf":1.0}}}},"é":{"df":2,"docs":{"389":{"tf":1.0},"403":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"l":{"df":15,"docs":{"101":{"tf":1.0},"133":{"tf":1.0},"146":{"tf":1.0},"174":{"tf":1.4142135623730951},"214":{"tf":1.0},"296":{"tf":1.0},"334":{"tf":1.0},"369":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"379":{"tf":1.4142135623730951},"421":{"tf":1.0},"447":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"334":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"è":{"df":0,"docs":{},"l":{"df":11,"docs":{"10":{"tf":1.4142135623730951},"270":{"tf":1.0},"281":{"tf":1.4142135623730951},"284":{"tf":1.0},"3":{"tf":1.0},"353":{"tf":1.0},"430":{"tf":1.0},"53":{"tf":1.0},"65":{"tf":1.0},"76":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"286":{"tf":1.0}},"n":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":6,"docs":{"286":{"tf":1.0},"351":{"tf":1.0},"353":{"tf":1.4142135623730951},"356":{"tf":1.0},"397":{"tf":1.0},"6":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"161":{"tf":1.0}}}}}},"n":{"df":5,"docs":{"19":{"tf":1.7320508075688772},"21":{"tf":1.0},"294":{"tf":2.23606797749979},"334":{"tf":1.0},"86":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"207":{"tf":1.0}}}}}},"o":{"df":4,"docs":{"356":{"tf":1.0},"443":{"tf":1.4142135623730951},"451":{"tf":1.0},"76":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"287":{"tf":1.4142135623730951}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"287":{"tf":1.0}}}},"r":{"df":1,"docs":{"21":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"87":{"tf":1.0}}}}}},"é":{"df":1,"docs":{"375":{"tf":1.4142135623730951}}}}},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"291":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":14,"docs":{"102":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"150":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"243":{"tf":1.4142135623730951},"250":{"tf":1.0},"291":{"tf":1.0},"330":{"tf":1.7320508075688772},"359":{"tf":1.0},"83":{"tf":1.0},"86":{"tf":1.4142135623730951},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"171":{"tf":1.0},"381":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"317":{"tf":2.0}}}}}}},"p":{"df":0,"docs":{},"s":{"c":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"(":{"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"380":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"169":{"tf":1.0},"348":{"tf":1.0},"414":{"tf":1.0}}},"df":0,"docs":{}}},"s":{"df":2,"docs":{"348":{"tf":1.0},"349":{"tf":1.0}},"m":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"213":{"tf":1.0}}}}}},"t":{"a":{"df":1,"docs":{"213":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"347":{"tf":1.0},"447":{"tf":1.0}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}},"df":0,"docs":{}}},"v":{"df":2,"docs":{"109":{"tf":1.0},"116":{"tf":1.0}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"447":{"tf":1.0}}}}},"é":{"c":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"357":{"tf":1.0},"450":{"tf":1.0}}}},"s":{"df":0,"docs":{},"m":{"df":3,"docs":{"231":{"tf":1.0},"347":{"tf":1.0},"361":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"254":{"tf":1.0},"352":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"394":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"t":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":2,"docs":{"346":{"tf":1.0},"419":{"tf":1.0}}}}}}},"df":1,"docs":{"208":{"tf":1.0}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"364":{"tf":1.0}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"279":{"tf":1.0},"287":{"tf":1.0},"337":{"tf":1.0},"372":{"tf":1.0},"394":{"tf":1.0},"416":{"tf":1.0}}}}}}},"ê":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":15,"docs":{"147":{"tf":1.0},"153":{"tf":1.0},"16":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.0},"211":{"tf":1.0},"287":{"tf":1.4142135623730951},"296":{"tf":1.0},"346":{"tf":1.0},"351":{"tf":1.0},"355":{"tf":1.0},"357":{"tf":1.0},"363":{"tf":1.0},"450":{"tf":1.0},"72":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":3,"docs":{"164":{"tf":1.0},"423":{"tf":1.0},"85":{"tf":1.0}}}},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"451":{"tf":1.0}}}}}},"df":0,"docs":{}}},"t":{"df":1,"docs":{"133":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"446":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0}}},"v":{"df":2,"docs":{"356":{"tf":1.7320508075688772},"444":{"tf":1.0}}}}},"v":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"333":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":12,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"293":{"tf":1.0},"294":{"tf":1.0},"313":{"tf":1.0},"322":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"82":{"tf":1.0},"86":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"325":{"tf":1.0},"333":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":80,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"313":{"tf":1.0},"32":{"tf":1.0},"325":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.7320508075688772},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"375":{"tf":1.4142135623730951},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"419":{"tf":1.0},"42":{"tf":1.0},"422":{"tf":1.0},"428":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"u":{"df":3,"docs":{"21":{"tf":1.0},"328":{"tf":1.0},"4":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"86":{"tf":1.0}}}}}}}}},"df":4,"docs":{"124":{"tf":1.0},"193":{"tf":1.0},"205":{"tf":1.4142135623730951},"352":{"tf":1.0}},"e":{"df":36,"docs":{"105":{"tf":1.0},"133":{"tf":1.4142135623730951},"148":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"167":{"tf":1.4142135623730951},"17":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"234":{"tf":1.0},"237":{"tf":1.0},"258":{"tf":1.0},"276":{"tf":1.0},"284":{"tf":1.0},"293":{"tf":1.0},"300":{"tf":1.0},"332":{"tf":1.0},"346":{"tf":1.0},"355":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"393":{"tf":1.4142135623730951},"399":{"tf":1.0},"402":{"tf":1.0},"416":{"tf":1.0},"419":{"tf":1.0},"442":{"tf":1.0},"451":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"424":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"325":{"tf":1.0}}},"y":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"325":{"tf":1.0}}}},"df":0,"docs":{}}}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":2,"docs":{"84":{"tf":1.7320508075688772},"85":{"tf":1.0}}}}}}},"w":{"df":7,"docs":{"129":{"tf":1.0},"130":{"tf":1.0},"294":{"tf":1.4142135623730951},"331":{"tf":1.0},"333":{"tf":1.0},"423":{"tf":1.0},"86":{"tf":1.0}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":2,"docs":{"372":{"tf":1.0},"402":{"tf":1.0}}}}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"116":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":32,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.7320508075688772},"107":{"tf":1.4142135623730951},"108":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":2.0},"116":{"tf":1.7320508075688772},"117":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":2.449489742783178},"122":{"tf":1.0},"124":{"tf":1.7320508075688772},"127":{"tf":1.4142135623730951},"129":{"tf":1.0},"130":{"tf":1.7320508075688772},"133":{"tf":2.449489742783178},"134":{"tf":1.7320508075688772},"187":{"tf":1.0},"189":{"tf":3.4641016151377544},"198":{"tf":1.0},"199":{"tf":2.449489742783178},"200":{"tf":1.4142135623730951},"203":{"tf":1.4142135623730951},"204":{"tf":2.0},"205":{"tf":1.0},"208":{"tf":3.4641016151377544},"211":{"tf":1.0},"214":{"tf":1.7320508075688772},"445":{"tf":1.0},"96":{"tf":1.4142135623730951},"97":{"tf":1.7320508075688772},"98":{"tf":1.0}}}}},"x":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"2":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"214":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"i":{"df":3,"docs":{"276":{"tf":1.0},"379":{"tf":1.4142135623730951},"5":{"tf":1.0}},"k":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"189":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":2,"docs":{"243":{"tf":1.0},"382":{"tf":1.0}},"x":{"df":3,"docs":{"281":{"tf":1.0},"378":{"tf":1.0},"416":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"j":{"df":3,"docs":{"286":{"tf":1.0},"323":{"tf":1.0},"447":{"tf":1.0}}},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":5,"docs":{"148":{"tf":1.0},"161":{"tf":1.0},"174":{"tf":1.0},"286":{"tf":1.0},"288":{"tf":1.0}},"l":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"a":{"d":{"df":1,"docs":{"147":{"tf":1.0}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"r":{"df":2,"docs":{"177":{"tf":1.0},"181":{"tf":1.0}}}},"df":7,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"294":{"tf":1.0},"331":{"tf":1.4142135623730951},"383":{"tf":1.0},"419":{"tf":1.0}}},"n":{"c":{"df":1,"docs":{"394":{"tf":1.0}}},"df":20,"docs":{"133":{"tf":1.0},"147":{"tf":1.7320508075688772},"151":{"tf":1.0},"153":{"tf":2.0},"166":{"tf":1.7320508075688772},"183":{"tf":1.4142135623730951},"184":{"tf":1.0},"196":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.4142135623730951},"238":{"tf":1.0},"244":{"tf":1.0},"246":{"tf":1.0},"248":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"290":{"tf":1.0},"300":{"tf":1.4142135623730951},"397":{"tf":1.4142135623730951},"88":{"tf":1.0}},"e":{"[":{"df":0,"docs":{},"p":{"a":{"df":1,"docs":{"174":{"tf":1.0}}},"df":0,"docs":{}}},"df":7,"docs":{"259":{"tf":1.0},"317":{"tf":1.0},"380":{"tf":1.0},"396":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"d":{":":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"166":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"166":{"tf":1.0},"167":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"332":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":8,"docs":{"209":{"tf":1.0},"21":{"tf":1.0},"348":{"tf":1.0},"414":{"tf":2.6457513110645907},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.4142135623730951},"426":{"tf":1.7320508075688772}},"r":{"df":1,"docs":{"102":{"tf":1.0}}}},"i":{"df":0,"docs":{},"f":{"df":14,"docs":{"175":{"tf":1.0},"189":{"tf":1.0},"2":{"tf":1.0},"213":{"tf":1.0},"297":{"tf":1.4142135623730951},"317":{"tf":1.4142135623730951},"318":{"tf":1.4142135623730951},"319":{"tf":1.0},"320":{"tf":1.4142135623730951},"375":{"tf":1.7320508075688772},"377":{"tf":2.0},"418":{"tf":1.0},"61":{"tf":1.0},"9":{"tf":1.0}},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"377":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"377":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"355":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"2":{"tf":1.0}}}}}},"u":{"df":1,"docs":{"82":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":8,"docs":{"106":{"tf":1.0},"128":{"tf":1.0},"173":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"317":{"tf":1.0},"334":{"tf":1.0},"394":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":4,"docs":{"318":{"tf":1.0},"332":{"tf":1.0},"364":{"tf":1.0},"429":{"tf":1.0}}}}}},"w":{"df":5,"docs":{"115":{"tf":1.0},"126":{"tf":1.0},"188":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}}}},"p":{"df":0,"docs":{},"m":{"df":8,"docs":{"292":{"tf":1.4142135623730951},"313":{"tf":2.23606797749979},"320":{"tf":1.0},"324":{"tf":2.23606797749979},"327":{"tf":1.0},"334":{"tf":1.0},"403":{"tf":1.0},"447":{"tf":1.0}}},"x":{"df":6,"docs":{"100":{"tf":1.0},"292":{"tf":1.4142135623730951},"320":{"tf":1.4142135623730951},"323":{"tf":1.0},"334":{"tf":1.0},"389":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"241":{"tf":2.0},"373":{"tf":1.0}}}},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"108":{"tf":1.0}}}}},"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":2,"docs":{"288":{"tf":1.0},"394":{"tf":1.0}}}}}}},"é":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":8,"docs":{"167":{"tf":1.0},"253":{"tf":1.0},"276":{"tf":1.0},"281":{"tf":1.0},"288":{"tf":1.0},"363":{"tf":1.0},"392":{"tf":1.0},"76":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":7,"docs":{"189":{"tf":1.0},"244":{"tf":1.0},"316":{"tf":1.0},"331":{"tf":1.0},"334":{"tf":1.0},"355":{"tf":1.0},"363":{"tf":1.0}}}}}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"396":{"tf":1.0},"397":{"tf":1.0}}}}}},"df":0,"docs":{}}},"’":{"a":{"df":5,"docs":{"19":{"tf":1.4142135623730951},"237":{"tf":1.0},"244":{"tf":1.0},"249":{"tf":1.0},"5":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":12,"docs":{"109":{"tf":1.0},"165":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.4142135623730951},"249":{"tf":1.0},"254":{"tf":1.0},"277":{"tf":1.4142135623730951},"288":{"tf":1.0},"6":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"86":{"tf":1.0},"88":{"tf":1.4142135623730951}}}},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"165":{"tf":1.0},"242":{"tf":1.0},"292":{"tf":1.0},"363":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"71":{"tf":1.0}}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"279":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"353":{"tf":1.0}}}}}}}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"353":{"tf":1.0}}}}}}}},"o":{"1":{"df":6,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"285":{"tf":1.0},"299":{"tf":1.0},"80":{"tf":1.0},"87":{"tf":1.0}}},"2":{"df":6,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"285":{"tf":1.0},"299":{"tf":1.0},"80":{"tf":1.0},"87":{"tf":1.0}}},"3":{"df":6,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"285":{"tf":1.0},"299":{"tf":1.0},"80":{"tf":1.0},"87":{"tf":1.0}}},"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{"df":1,"docs":{"194":{"tf":1.0}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"_":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":2,"docs":{"243":{"tf":1.0},"249":{"tf":1.0}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"a":{"c":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}},"m":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"{":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"}":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"243":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"244":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"244":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.0}}}}}}}},"df":10,"docs":{"143":{"tf":1.0},"232":{"tf":1.0},"243":{"tf":2.8284271247461903},"244":{"tf":2.0},"248":{"tf":1.0},"250":{"tf":1.0},"254":{"tf":1.7320508075688772},"259":{"tf":1.0},"416":{"tf":1.0},"74":{"tf":1.0}}}}}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"289":{"tf":1.7320508075688772},"294":{"tf":1.7320508075688772},"356":{"tf":1.4142135623730951},"424":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"14":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"80":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":3,"docs":{"346":{"tf":1.0},"348":{"tf":1.0},"425":{"tf":1.0}},"s":{"/":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":6,"docs":{"153":{"tf":1.0},"199":{"tf":1.0},"389":{"tf":1.0},"392":{"tf":1.0},"393":{"tf":1.0},"397":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":5,"docs":{"193":{"tf":1.0},"205":{"tf":1.0},"284":{"tf":1.0},"319":{"tf":1.0},"85":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"291":{"tf":1.0}}}},"u":{"df":1,"docs":{"277":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}}}}}},"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"88":{"tf":1.0}}},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"83":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"292":{"tf":1.0}}}}}},"df":8,"docs":{"121":{"tf":1.0},"150":{"tf":1.0},"178":{"tf":1.0},"180":{"tf":1.0},"187":{"tf":1.0},"206":{"tf":1.0},"292":{"tf":1.0},"389":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"177":{"tf":1.0}}}}}},"df":0,"docs":{}},"r":{"df":1,"docs":{"1":{"tf":1.0}}}}},"k":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"a":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":12,"docs":{"105":{"tf":1.0},"106":{"tf":1.4142135623730951},"160":{"tf":1.4142135623730951},"164":{"tf":1.0},"319":{"tf":1.0},"348":{"tf":1.0},"414":{"tf":1.0},"423":{"tf":1.7320508075688772},"424":{"tf":1.0},"425":{"tf":1.7320508075688772},"426":{"tf":1.0},"429":{"tf":1.4142135623730951}}},"n":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"377":{"tf":1.0}}}}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"376":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"376":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"360":{"tf":1.4142135623730951},"376":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"376":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"(":{"d":{"b":{"df":1,"docs":{"429":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"(":{"\\"":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"\\"":{")":{".":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"y":{"(":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"(":{")":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"164":{"tf":1.0},"181":{"tf":1.0}}}}}},"t":{"df":2,"docs":{"290":{"tf":1.0},"362":{"tf":1.0}}}},"p":{"df":1,"docs":{"2":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"373":{"tf":1.0}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":3,"docs":{"288":{"tf":1.0},"290":{"tf":1.4142135623730951},"83":{"tf":1.0}}}}}}},"t":{"/":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"178":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"133":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"156":{"tf":1.0}}}},"d":{"a":{"df":0,"docs":{},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"109":{"tf":1.4142135623730951}},"e":{"/":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"109":{"tf":1.4142135623730951}}}}}},"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"109":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":6,"docs":{"148":{"tf":1.0},"153":{"tf":1.0},"160":{"tf":1.7320508075688772},"161":{"tf":1.0},"83":{"tf":1.4142135623730951},"84":{"tf":1.7320508075688772}}}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"356":{"tf":1.0}},"s":{"df":2,"docs":{"356":{"tf":1.4142135623730951},"357":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"<":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"428":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"428":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":2,"docs":{"291":{"tf":1.7320508075688772},"330":{"tf":1.0}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{}}}},"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"g":{"df":0,"docs":{},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":13,"docs":{"112":{"tf":1.0},"169":{"tf":1.0},"173":{"tf":1.4142135623730951},"176":{"tf":1.0},"177":{"tf":1.0},"186":{"tf":1.4142135623730951},"189":{"tf":1.0},"286":{"tf":1.0},"296":{"tf":1.0},"331":{"tf":1.0},"381":{"tf":1.0},"413":{"tf":1.0},"82":{"tf":1.0}}}}}}}}},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"417":{"tf":1.0}}}},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":6,"docs":{"287":{"tf":1.0},"349":{"tf":1.0},"373":{"tf":1.0},"419":{"tf":1.0},"422":{"tf":1.0},"449":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"71":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"357":{"tf":1.0},"72":{"tf":1.4142135623730951},"86":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}},"d":{"df":1,"docs":{"372":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"185":{"tf":1.4142135623730951}}}},"r":{"df":6,"docs":{"208":{"tf":1.0},"279":{"tf":1.0},"357":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"82":{"tf":1.0}},"é":{"df":2,"docs":{"2":{"tf":1.0},"3":{"tf":1.0}}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"123":{"tf":1.0},"294":{"tf":1.0}}}}}}},"s":{"df":1,"docs":{"151":{"tf":1.0}}},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"359":{"tf":1.0}}}}},"df":125,"docs":{"101":{"tf":1.0},"119":{"tf":1.0},"12":{"tf":1.0},"133":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"15":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":2.449489742783178},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"172":{"tf":1.0},"174":{"tf":1.4142135623730951},"179":{"tf":1.0},"18":{"tf":1.0},"183":{"tf":1.4142135623730951},"184":{"tf":1.4142135623730951},"186":{"tf":1.0},"19":{"tf":1.7320508075688772},"191":{"tf":1.0},"196":{"tf":1.0},"2":{"tf":1.0},"21":{"tf":1.7320508075688772},"210":{"tf":1.0},"214":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"23":{"tf":1.7320508075688772},"230":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.0},"252":{"tf":1.4142135623730951},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"276":{"tf":1.4142135623730951},"28":{"tf":1.0},"283":{"tf":1.0},"286":{"tf":1.0},"292":{"tf":1.0},"296":{"tf":1.0},"30":{"tf":1.0},"300":{"tf":2.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"316":{"tf":1.0},"32":{"tf":1.0},"324":{"tf":1.0},"334":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"363":{"tf":1.4142135623730951},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"380":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"393":{"tf":1.4142135623730951},"4":{"tf":1.0},"40":{"tf":1.0},"403":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"416":{"tf":1.0},"419":{"tf":1.0},"42":{"tf":1.0},"420":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.4142135623730951},"85":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":2.23606797749979},"89":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0},"95":{"tf":1.0}},"i":{"df":7,"docs":{"147":{"tf":1.4142135623730951},"153":{"tf":1.0},"232":{"tf":1.4142135623730951},"246":{"tf":1.0},"247":{"tf":1.4142135623730951},"248":{"tf":1.0},"249":{"tf":1.0}}},"t":{"df":2,"docs":{"356":{"tf":1.0},"357":{"tf":1.0}},"i":{"df":0,"docs":{},"l":{"df":4,"docs":{"150":{"tf":1.0},"171":{"tf":1.0},"288":{"tf":1.0},"390":{"tf":1.0}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"424":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"104":{"tf":1.4142135623730951},"210":{"tf":1.0},"348":{"tf":1.0},"6":{"tf":1.0}}}}},"r":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"290":{"tf":1.0},"293":{"tf":1.0},"86":{"tf":1.0}}}},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"363":{"tf":1.0},"41":{"tf":1.0},"8":{"tf":1.0}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"348":{"tf":1.0},"414":{"tf":2.6457513110645907},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.4142135623730951},"426":{"tf":1.7320508075688772}}}}},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"=":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"424":{"tf":1.0},"425":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"423":{"tf":1.7320508075688772},"427":{"tf":1.4142135623730951},"428":{"tf":1.0}}},"df":0,"docs":{}}},"df":4,"docs":{"291":{"tf":1.0},"372":{"tf":1.0},"423":{"tf":1.0},"427":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":4,"docs":{"393":{"tf":1.0},"419":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}}}}}},"}":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"375":{"tf":1.0}},"}":{"/":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"423":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}},"p":{"2":{"5":{"6":{"/":{"df":0,"docs":{},"p":{"3":{"8":{"4":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"k":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"373":{"tf":1.0}}}}}},"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{":":{":":{"a":{"d":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"424":{"tf":1.0},"425":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"k":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"424":{"tf":1.0},"425":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"373":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"292":{"tf":1.0},"447":{"tf":1.0}}}},"df":7,"docs":{"294":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.4142135623730951},"380":{"tf":1.0},"419":{"tf":1.0},"424":{"tf":2.449489742783178},"425":{"tf":1.7320508075688772}}}},"d":{"df":1,"docs":{"426":{"tf":1.0}}},"df":76,"docs":{"1":{"tf":1.0},"10":{"tf":1.0},"105":{"tf":1.0},"109":{"tf":1.4142135623730951},"113":{"tf":1.0},"13":{"tf":1.0},"133":{"tf":1.4142135623730951},"148":{"tf":1.0},"156":{"tf":1.4142135623730951},"16":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"17":{"tf":1.0},"172":{"tf":1.0},"177":{"tf":1.0},"187":{"tf":1.0},"19":{"tf":1.4142135623730951},"199":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"210":{"tf":1.0},"212":{"tf":1.0},"23":{"tf":1.4142135623730951},"237":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.4142135623730951},"249":{"tf":1.0},"254":{"tf":1.0},"258":{"tf":1.0},"264":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":2.0},"278":{"tf":1.4142135623730951},"281":{"tf":1.0},"284":{"tf":1.4142135623730951},"288":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"300":{"tf":1.0},"319":{"tf":1.7320508075688772},"324":{"tf":1.4142135623730951},"332":{"tf":1.0},"353":{"tf":1.4142135623730951},"356":{"tf":1.0},"363":{"tf":1.4142135623730951},"373":{"tf":1.0},"375":{"tf":1.0},"379":{"tf":1.0},"383":{"tf":1.0},"390":{"tf":1.4142135623730951},"391":{"tf":1.0},"393":{"tf":1.7320508075688772},"397":{"tf":1.7320508075688772},"401":{"tf":1.4142135623730951},"402":{"tf":1.0},"403":{"tf":1.0},"420":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0},"442":{"tf":1.0},"443":{"tf":1.0},"451":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.7320508075688772},"7":{"tf":1.7320508075688772},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"75":{"tf":1.0},"76":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":2.0},"9":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":163,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"135":{"tf":1.4142135623730951},"136":{"tf":1.4142135623730951},"137":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"139":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"141":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"143":{"tf":1.4142135623730951},"144":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.0},"21":{"tf":1.4142135623730951},"215":{"tf":1.4142135623730951},"216":{"tf":1.4142135623730951},"217":{"tf":1.4142135623730951},"218":{"tf":1.4142135623730951},"219":{"tf":1.4142135623730951},"22":{"tf":1.0},"220":{"tf":1.4142135623730951},"221":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"223":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"225":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"227":{"tf":1.4142135623730951},"228":{"tf":1.4142135623730951},"229":{"tf":1.4142135623730951},"230":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"260":{"tf":1.4142135623730951},"261":{"tf":1.4142135623730951},"262":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"264":{"tf":1.4142135623730951},"265":{"tf":1.4142135623730951},"266":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"268":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"270":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"272":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"274":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"282":{"tf":1.4142135623730951},"283":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"293":{"tf":1.4142135623730951},"294":{"tf":1.0},"30":{"tf":1.4142135623730951},"302":{"tf":1.4142135623730951},"303":{"tf":1.4142135623730951},"304":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"306":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"308":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"318":{"tf":1.0},"319":{"tf":1.0},"32":{"tf":1.4142135623730951},"328":{"tf":1.0},"33":{"tf":1.4142135623730951},"333":{"tf":1.7320508075688772},"335":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"337":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"339":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"341":{"tf":1.4142135623730951},"342":{"tf":1.4142135623730951},"343":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"35":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"365":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"367":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"370":{"tf":1.0},"375":{"tf":2.8284271247461903},"377":{"tf":1.0},"38":{"tf":1.4142135623730951},"384":{"tf":1.4142135623730951},"385":{"tf":1.4142135623730951},"386":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"39":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"404":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"406":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"408":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"410":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"414":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.4142135623730951},"430":{"tf":1.4142135623730951},"431":{"tf":1.4142135623730951},"432":{"tf":1.4142135623730951},"433":{"tf":1.4142135623730951},"434":{"tf":1.4142135623730951},"435":{"tf":1.4142135623730951},"436":{"tf":1.4142135623730951},"437":{"tf":1.4142135623730951},"438":{"tf":1.4142135623730951},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"440":{"tf":1.4142135623730951},"441":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"47":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"55":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951},"87":{"tf":1.0},"88":{"tf":1.0},"90":{"tf":1.4142135623730951},"91":{"tf":1.4142135623730951},"92":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951}},"r":{"df":5,"docs":{"104":{"tf":1.0},"113":{"tf":1.0},"124":{"tf":1.7320508075688772},"193":{"tf":1.0},"205":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"280":{"tf":1.0},"373":{"tf":1.0},"449":{"tf":1.0},"9":{"tf":1.0}},"é":{"df":1,"docs":{"317":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"15":{"tf":1.0},"19":{"tf":1.4142135623730951}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"223":{"tf":1.0}}}},"i":{"c":{"df":2,"docs":{"383":{"tf":1.0},"401":{"tf":1.0}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":2,"docs":{"325":{"tf":1.0},"332":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"19":{"tf":1.0}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"101":{"tf":1.0},"199":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"è":{"df":0,"docs":{},"l":{"df":1,"docs":{"169":{"tf":1.0}}}},"é":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"172":{"tf":1.0}}}}}}}}},"m":{"df":1,"docs":{"402":{"tf":1.0}},"è":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":6,"docs":{"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"231":{"tf":1.0},"75":{"tf":1.4142135623730951}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":79,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"15":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"277":{"tf":2.0},"282":{"tf":1.0},"286":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":2.23606797749979},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"72":{"tf":2.0},"77":{"tf":1.0},"8":{"tf":1.0},"81":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}}}},"df":57,"docs":{"102":{"tf":1.0},"104":{"tf":1.0},"107":{"tf":1.0},"109":{"tf":1.0},"134":{"tf":1.0},"146":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.4142135623730951},"155":{"tf":1.4142135623730951},"158":{"tf":1.0},"16":{"tf":1.0},"161":{"tf":1.7320508075688772},"169":{"tf":1.7320508075688772},"17":{"tf":1.0},"173":{"tf":1.0},"175":{"tf":1.0},"181":{"tf":1.0},"19":{"tf":1.4142135623730951},"190":{"tf":1.0},"192":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.0},"202":{"tf":1.4142135623730951},"204":{"tf":1.0},"234":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.7320508075688772},"243":{"tf":1.0},"244":{"tf":1.0},"249":{"tf":2.0},"290":{"tf":1.0},"298":{"tf":1.0},"327":{"tf":1.0},"331":{"tf":1.0},"346":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.4142135623730951},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"362":{"tf":1.0},"369":{"tf":1.0},"374":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"377":{"tf":1.4142135623730951},"393":{"tf":1.0},"395":{"tf":1.0},"413":{"tf":1.0},"416":{"tf":1.0},"418":{"tf":1.0},"449":{"tf":1.0},"451":{"tf":1.0},"88":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":1,"docs":{"88":{"tf":1.0}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"356":{"tf":1.0}}}},"l":{"df":1,"docs":{"276":{"tf":1.0}}},"s":{"df":2,"docs":{"374":{"tf":1.0},"396":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":6,"docs":{"147":{"tf":1.0},"16":{"tf":1.4142135623730951},"19":{"tf":1.0},"287":{"tf":1.0},"354":{"tf":1.0},"361":{"tf":1.0}},"é":{"df":5,"docs":{"237":{"tf":1.0},"314":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"382":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":11,"docs":{"16":{"tf":1.7320508075688772},"180":{"tf":2.449489742783178},"348":{"tf":2.8284271247461903},"414":{"tf":2.449489742783178},"423":{"tf":2.449489742783178},"424":{"tf":2.6457513110645907},"425":{"tf":2.6457513110645907},"426":{"tf":1.7320508075688772},"427":{"tf":2.0},"428":{"tf":2.449489742783178},"429":{"tf":2.0}}}}},"df":2,"docs":{"176":{"tf":1.0},"2":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"418":{"tf":1.0}}}},"r":{"df":1,"docs":{"72":{"tf":1.0}}}}}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"0":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"380":{"tf":1.0}}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"327":{"tf":1.0}}}}},"df":26,"docs":{"102":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"150":{"tf":1.0},"152":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"214":{"tf":1.0},"243":{"tf":1.4142135623730951},"250":{"tf":1.0},"277":{"tf":1.0},"291":{"tf":1.0},"317":{"tf":1.0},"321":{"tf":1.0},"330":{"tf":1.7320508075688772},"346":{"tf":1.0},"359":{"tf":1.0},"361":{"tf":1.0},"364":{"tf":1.0},"389":{"tf":1.0},"390":{"tf":1.0},"403":{"tf":1.4142135623730951},"416":{"tf":1.0},"83":{"tf":1.0},"86":{"tf":1.4142135623730951},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"403":{"tf":1.4142135623730951}}}},"r":{"df":10,"docs":{"156":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.0},"277":{"tf":1.0},"279":{"tf":1.0},"365":{"tf":1.0},"389":{"tf":1.0},"6":{"tf":1.4142135623730951},"72":{"tf":1.0}}}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"19":{"tf":2.23606797749979}}}},"df":0,"docs":{}}}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"_":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"d":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"_":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"d":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}}},"df":6,"docs":{"166":{"tf":1.0},"291":{"tf":1.0},"316":{"tf":1.0},"375":{"tf":1.7320508075688772},"429":{"tf":1.0},"88":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"151":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"363":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"é":{"df":1,"docs":{"347":{"tf":1.0}}}}},"t":{"/":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"208":{"tf":1.0}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"df":5,"docs":{"10":{"tf":1.0},"319":{"tf":1.0},"348":{"tf":1.0},"449":{"tf":2.23606797749979},"451":{"tf":1.0}},"h":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"/":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"166":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"=":{"$":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{":":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"166":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}}}},"df":9,"docs":{"166":{"tf":1.0},"177":{"tf":1.0},"323":{"tf":1.0},"376":{"tf":1.0},"383":{"tf":1.0},"393":{"tf":1.0},"423":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"21":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"440":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"396":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"t":{"df":3,"docs":{"101":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"259":{"tf":1.0},"351":{"tf":1.0},"364":{"tf":1.0},"390":{"tf":1.0}}}}}}},"y":{"df":1,"docs":{"214":{"tf":1.0}}}},"c":{"df":1,"docs":{"291":{"tf":1.0}}},"df":19,"docs":{"104":{"tf":1.7320508075688772},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.4142135623730951},"116":{"tf":1.4142135623730951},"122":{"tf":1.0},"163":{"tf":1.0},"166":{"tf":1.0},"178":{"tf":1.0},"183":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"312":{"tf":1.4142135623730951},"320":{"tf":1.4142135623730951},"82":{"tf":1.0},"83":{"tf":1.0}},"e":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"166":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.0}}}}},"df":3,"docs":{"175":{"tf":1.4142135623730951},"183":{"tf":1.0},"348":{"tf":1.0}}},"df":1,"docs":{"147":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"160":{"tf":1.0},"82":{"tf":1.0}}}}}},"r":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{},"l":{"/":{"5":{"\\\\":{".":{"8":{"0":{"3":{"df":0,"docs":{},"|":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"148":{"tf":1.0},"347":{"tf":1.0},"417":{"tf":1.0},"419":{"tf":1.0}},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":19,"docs":{"1":{"tf":1.0},"166":{"tf":1.0},"179":{"tf":1.0},"184":{"tf":1.4142135623730951},"186":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"281":{"tf":1.0},"300":{"tf":1.0},"39":{"tf":1.0},"393":{"tf":1.0},"416":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0},"427":{"tf":1.0},"430":{"tf":1.0},"53":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"346":{"tf":1.0},"84":{"tf":1.0}}}}},"df":5,"docs":{"247":{"tf":1.0},"347":{"tf":1.0},"397":{"tf":1.0},"412":{"tf":1.0},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"84":{"tf":1.0}}}}}}},"o":{"df":1,"docs":{"20":{"tf":1.0}},"n":{"df":3,"docs":{"37":{"tf":1.0},"449":{"tf":1.0},"8":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"é":{"df":1,"docs":{"190":{"tf":1.0}}}}}}},"df":1,"docs":{"1":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"189":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"445":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"t":{"df":10,"docs":{"16":{"tf":1.4142135623730951},"168":{"tf":1.0},"171":{"tf":1.0},"202":{"tf":1.0},"328":{"tf":1.0},"332":{"tf":1.4142135623730951},"347":{"tf":1.0},"352":{"tf":1.0},"382":{"tf":1.0},"393":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"288":{"tf":1.0}}}}}},"x":{"df":2,"docs":{"19":{"tf":1.0},"8":{"tf":1.0}}}}},"g":{"[":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"413":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"448":{"tf":1.0}}}}}},"df":0,"docs":{},"h":{"b":{"a":{"\\\\":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"197":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"p":{"df":0,"docs":{},"w":{"d":{"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"102":{"tf":1.0},"109":{"tf":1.0}}},"df":0,"docs":{}}}},"df":7,"docs":{"167":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0},"212":{"tf":1.0},"287":{"tf":1.0},"413":{"tf":1.0},"75":{"tf":1.0}}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":13,"docs":{"102":{"tf":1.0},"103":{"tf":1.0},"107":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"114":{"tf":1.0},"120":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"128":{"tf":1.0},"132":{"tf":1.0},"370":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"189":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"133":{"tf":1.0},"98":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"443":{"tf":1.0}}}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"175":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"322":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":18,"docs":{"145":{"tf":1.0},"161":{"tf":1.0},"164":{"tf":2.0},"166":{"tf":1.0},"169":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.4142135623730951},"175":{"tf":1.0},"183":{"tf":1.4142135623730951},"185":{"tf":1.0},"186":{"tf":1.0},"317":{"tf":2.0},"318":{"tf":1.4142135623730951},"319":{"tf":2.0},"375":{"tf":1.4142135623730951},"377":{"tf":1.0},"381":{"tf":1.0},"447":{"tf":2.23606797749979}},"e":{"\'":{")":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"318":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"318":{"tf":1.4142135623730951},"320":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"345":{"tf":1.0},"350":{"tf":1.0}}}},"è":{"c":{"df":2,"docs":{"287":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":2,"docs":{"231":{"tf":1.0},"249":{"tf":1.0}}}}},"k":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"394":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":1,"docs":{"288":{"tf":1.0}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":76,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"170":{"tf":1.0},"176":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"390":{"tf":1.0},"392":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"290":{"tf":1.0},"95":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":2,"docs":{"189":{"tf":1.0},"190":{"tf":1.0}}},"z":{"df":1,"docs":{"296":{"tf":1.0}}}}},"df":0,"docs":{},"n":{"df":3,"docs":{"108":{"tf":1.0},"352":{"tf":1.0},"85":{"tf":1.0}},"s":{"/":{"0":{"0":{"1":{"df":72,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"231":{"tf":1.0},"412":{"tf":1.0}}}}}}}},"y":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"313":{"tf":1.0},"325":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":14,"docs":{"279":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.4142135623730951},"318":{"tf":1.0},"320":{"tf":1.7320508075688772},"322":{"tf":1.0},"323":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951},"325":{"tf":1.0},"327":{"tf":1.0},"334":{"tf":1.0},"396":{"tf":1.0},"403":{"tf":1.0},"443":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"u":{"df":14,"docs":{"104":{"tf":1.0},"107":{"tf":1.0},"122":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"181":{"tf":1.0},"19":{"tf":1.0},"293":{"tf":1.0},"319":{"tf":1.0},"347":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.7320508075688772},"357":{"tf":1.7320508075688772},"421":{"tf":1.0}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"101":{"tf":1.4142135623730951},"81":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"147":{"tf":1.0},"347":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"t":{"df":1,"docs":{"420":{"tf":1.0}}}}}}},"o":{"d":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"214":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":2,"docs":{"171":{"tf":1.0},"444":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"211":{"tf":1.0}}}}},"df":6,"docs":{"147":{"tf":1.0},"15":{"tf":1.0},"2":{"tf":1.0},"23":{"tf":1.0},"412":{"tf":1.0},"81":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"442":{"tf":1.0},"451":{"tf":1.0}}}}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"418":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"l":{"df":1,"docs":{"355":{"tf":1.0}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"280":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":5,"docs":{"352":{"tf":1.0},"354":{"tf":2.0},"357":{"tf":1.4142135623730951},"414":{"tf":1.0},"443":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"(":{"df":2,"docs":{"104":{"tf":1.0},"208":{"tf":1.0}}},"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"420":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":31,"docs":{"104":{"tf":2.0},"105":{"tf":1.0},"106":{"tf":1.7320508075688772},"107":{"tf":1.4142135623730951},"108":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"127":{"tf":2.0},"134":{"tf":1.4142135623730951},"153":{"tf":1.0},"160":{"tf":1.0},"189":{"tf":3.872983346207417},"208":{"tf":1.0},"210":{"tf":1.0},"23":{"tf":1.4142135623730951},"250":{"tf":1.0},"262":{"tf":1.0},"300":{"tf":1.0},"313":{"tf":1.0},"326":{"tf":1.4142135623730951},"372":{"tf":1.0},"375":{"tf":1.0},"75":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"88":{"tf":2.23606797749979}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"356":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"134":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":20,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"104":{"tf":1.4142135623730951},"106":{"tf":1.0},"108":{"tf":1.0},"162":{"tf":1.0},"180":{"tf":1.0},"191":{"tf":1.4142135623730951},"195":{"tf":1.7320508075688772},"20":{"tf":1.0},"206":{"tf":1.0},"280":{"tf":1.0},"325":{"tf":1.0},"348":{"tf":1.0},"375":{"tf":2.8284271247461903},"396":{"tf":1.0},"406":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0},"429":{"tf":1.0}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"444":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"r":{"df":6,"docs":{"205":{"tf":1.0},"291":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951},"88":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{":":{"1":{"6":{"df":2,"docs":{"84":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{":":{"/":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"/":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"84":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"b":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"84":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"=":{"$":{"df":0,"docs":{},"{":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"w":{"d":{"df":1,"docs":{"109":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"d":{"b":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":3,"docs":{"102":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951},"88":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"84":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"197":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":38,"docs":{"109":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"204":{"tf":1.0},"205":{"tf":1.0},"208":{"tf":1.0},"212":{"tf":1.4142135623730951},"232":{"tf":1.0},"240":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"291":{"tf":2.0},"299":{"tf":1.0},"300":{"tf":1.7320508075688772},"316":{"tf":1.0},"323":{"tf":1.0},"348":{"tf":1.0},"355":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0},"443":{"tf":1.4142135623730951},"444":{"tf":1.4142135623730951},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951},"84":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0},"96":{"tf":1.0}}}}}}}}}},"u":{"df":0,"docs":{},"r":{"df":155,"docs":{"1":{"tf":1.0},"101":{"tf":1.0},"11":{"tf":1.0},"125":{"tf":1.0},"133":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"145":{"tf":1.0},"147":{"tf":1.0},"155":{"tf":1.0},"16":{"tf":1.4142135623730951},"160":{"tf":1.0},"167":{"tf":1.4142135623730951},"172":{"tf":1.0},"174":{"tf":1.4142135623730951},"176":{"tf":1.0},"186":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.4142135623730951},"2":{"tf":2.449489742783178},"213":{"tf":1.0},"214":{"tf":1.4142135623730951},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"243":{"tf":1.7320508075688772},"244":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"25":{"tf":1.0},"251":{"tf":1.0},"255":{"tf":1.4142135623730951},"256":{"tf":1.0},"257":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"282":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.7320508075688772},"29":{"tf":1.0},"290":{"tf":2.0},"291":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"310":{"tf":1.0},"314":{"tf":1.0},"316":{"tf":1.4142135623730951},"317":{"tf":1.0},"318":{"tf":1.4142135623730951},"322":{"tf":1.0},"323":{"tf":1.0},"327":{"tf":1.0},"33":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"346":{"tf":1.0},"349":{"tf":1.4142135623730951},"35":{"tf":1.0},"351":{"tf":1.4142135623730951},"353":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":2.0},"359":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"379":{"tf":1.0},"381":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"397":{"tf":1.4142135623730951},"401":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"418":{"tf":1.0},"421":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.0},"444":{"tf":1.4142135623730951},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":2.23606797749979},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951},"89":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.4142135623730951}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":8,"docs":{"10":{"tf":1.4142135623730951},"151":{"tf":1.0},"16":{"tf":1.0},"281":{"tf":1.0},"3":{"tf":1.0},"347":{"tf":1.0},"76":{"tf":1.4142135623730951},"82":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"176":{"tf":1.0},"24":{"tf":1.0},"6":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"5":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":6,"docs":{"164":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"287":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.0}}},"z":{"df":2,"docs":{"284":{"tf":1.0},"294":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"167":{"tf":1.0},"171":{"tf":1.0},"6":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"174":{"tf":1.0}}},"df":0,"docs":{}}}},"df":11,"docs":{"174":{"tf":1.7320508075688772},"186":{"tf":1.0},"272":{"tf":1.0},"281":{"tf":1.0},"296":{"tf":1.0},"317":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.7320508075688772},"413":{"tf":1.0},"436":{"tf":1.0},"447":{"tf":1.7320508075688772}}}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":5,"docs":{"135":{"tf":1.0},"286":{"tf":1.0},"3":{"tf":1.0},"306":{"tf":1.0},"31":{"tf":1.0}}}}}}},"df":24,"docs":{"149":{"tf":1.0},"15":{"tf":1.0},"151":{"tf":1.0},"166":{"tf":1.0},"171":{"tf":1.0},"174":{"tf":1.4142135623730951},"277":{"tf":1.0},"278":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"301":{"tf":1.0},"308":{"tf":1.0},"313":{"tf":1.0},"321":{"tf":1.0},"323":{"tf":1.0},"363":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.0},"403":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0},"99":{"tf":1.0}},"e":{"df":1,"docs":{"287":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":25,"docs":{"13":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"24":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.0},"277":{"tf":1.4142135623730951},"284":{"tf":1.4142135623730951},"285":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"299":{"tf":1.0},"3":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"80":{"tf":1.0},"84":{"tf":1.0},"86":{"tf":1.4142135623730951},"87":{"tf":1.0},"92":{"tf":1.0}}}},"s":{"df":1,"docs":{"147":{"tf":1.0}}},"è":{"df":0,"docs":{},"r":{"df":10,"docs":{"16":{"tf":1.0},"278":{"tf":1.0},"287":{"tf":1.0},"293":{"tf":1.0},"301":{"tf":1.4142135623730951},"302":{"tf":1.0},"313":{"tf":1.0},"5":{"tf":1.0},"85":{"tf":1.0},"98":{"tf":1.0}}}}}},"n":{"d":{"df":1,"docs":{"293":{"tf":1.0}},"r":{"df":1,"docs":{"76":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"16":{"tf":1.0},"287":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"19":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"357":{"tf":1.0}}}}}}}},"i":{"df":3,"docs":{"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"241":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"248":{"tf":1.0}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"363":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"422":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":2,"docs":{"449":{"tf":1.0},"82":{"tf":1.0}}}}},"df":11,"docs":{"148":{"tf":1.0},"189":{"tf":1.0},"234":{"tf":1.0},"240":{"tf":1.0},"249":{"tf":1.0},"351":{"tf":1.0},"354":{"tf":1.0},"375":{"tf":1.0},"415":{"tf":1.0},"420":{"tf":1.0},"95":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"232":{"tf":1.0}}}}},"df":1,"docs":{"317":{"tf":1.0}},"é":{"df":1,"docs":{"357":{"tf":1.0}}}}}}},"v":{"df":4,"docs":{"167":{"tf":1.0},"189":{"tf":1.0},"21":{"tf":1.0},"211":{"tf":1.0}},"é":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"189":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":4,"docs":{"153":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0}}}}},"o":{"b":{"a":{"b":{"df":0,"docs":{},"l":{"df":7,"docs":{"104":{"tf":1.0},"166":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"è":{"df":0,"docs":{},"m":{"df":5,"docs":{"183":{"tf":1.0},"184":{"tf":1.0},"3":{"tf":1.0},"357":{"tf":1.0},"88":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":1,"docs":{"180":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":6,"docs":{"134":{"tf":1.0},"148":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"184":{"tf":1.0},"96":{"tf":1.0}},"u":{"df":4,"docs":{"287":{"tf":1.0},"370":{"tf":1.0},"413":{"tf":1.0},"420":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"24":{"tf":1.0},"301":{"tf":1.0},"348":{"tf":1.0},"394":{"tf":1.0},"89":{"tf":1.0}}}}},"df":0,"docs":{}},"é":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"95":{"tf":1.0}}}}},"df":0,"docs":{}}},"d":{"df":2,"docs":{"147":{"tf":1.7320508075688772},"167":{"tf":1.4142135623730951}},"u":{"c":{"df":0,"docs":{},"t":{"df":11,"docs":{"2":{"tf":1.0},"252":{"tf":1.0},"276":{"tf":1.0},"443":{"tf":1.4142135623730951},"444":{"tf":1.4142135623730951},"71":{"tf":1.4142135623730951},"73":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0},"89":{"tf":1.4142135623730951},"94":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"9":{"0":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"176":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":9,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"161":{"tf":1.0},"174":{"tf":1.4142135623730951},"2":{"tf":1.0},"20":{"tf":1.0},"293":{"tf":1.0},"375":{"tf":1.4142135623730951},"380":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"208":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":7,"docs":{"346":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"6":{"tf":1.0}}}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"_":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"179":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"294":{"tf":1.4142135623730951}}}}}},"df":11,"docs":{"158":{"tf":1.0},"16":{"tf":1.0},"166":{"tf":1.0},"181":{"tf":1.0},"276":{"tf":1.0},"289":{"tf":1.0},"294":{"tf":2.449489742783178},"299":{"tf":1.0},"388":{"tf":1.0},"447":{"tf":2.0},"8":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"86":{"tf":1.0}}}},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"163":{"tf":1.0},"166":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"214":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":1,"docs":{"357":{"tf":1.0}}},"r":{"df":4,"docs":{"357":{"tf":1.0},"382":{"tf":1.0},"393":{"tf":1.0},"397":{"tf":1.0}},"i":{"df":0,"docs":{},"é":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"175":{"tf":1.0},"21":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"16":{"tf":1.0},"202":{"tf":1.7320508075688772},"330":{"tf":1.0},"331":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"413":{"tf":1.0},"419":{"tf":1.0}}}}},"df":3,"docs":{"133":{"tf":1.4142135623730951},"202":{"tf":1.7320508075688772},"288":{"tf":1.0}}},"è":{"df":0,"docs":{},"g":{"df":1,"docs":{"189":{"tf":1.0}}}},"é":{"df":0,"docs":{},"g":{"df":1,"docs":{"393":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"187":{"tf":1.0}}}},"é":{"df":1,"docs":{"208":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"243":{"tf":1.0},"250":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":3,"docs":{"145":{"tf":1.0},"147":{"tf":1.0},"153":{"tf":1.0}}}}}}}}},"x":{"df":0,"docs":{},"i":{"df":9,"docs":{"121":{"tf":1.0},"124":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"2":{"tf":1.0},"443":{"tf":1.0},"445":{"tf":1.7320508075688772},"72":{"tf":1.0},"89":{"tf":1.0}}},"y":{"/":{"c":{"a":{"d":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"445":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":1,"docs":{"445":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"k":{"df":1,"docs":{"445":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"_":{"a":{"d":{"d":{"_":{"df":0,"docs":{},"x":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"202":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"121":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"202":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"121":{"tf":1.0},"202":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"202":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"202":{"tf":3.4641016151377544}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"121":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"é":{"a":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"15":{"tf":1.0},"81":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"3":{"tf":1.0}}},"é":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"231":{"tf":1.0},"245":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":4,"docs":{"20":{"tf":1.0},"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"394":{"tf":1.0}}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"21":{"tf":1.0},"318":{"tf":1.0},"377":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"146":{"tf":1.0}},"r":{"df":3,"docs":{"103":{"tf":1.0},"111":{"tf":1.0},"287":{"tf":1.0}}},"z":{"df":1,"docs":{"291":{"tf":1.0}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":2,"docs":{"2":{"tf":1.7320508075688772},"71":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"330":{"tf":1.4142135623730951},"333":{"tf":1.7320508075688772},"86":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":10,"docs":{"249":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"300":{"tf":1.0},"323":{"tf":1.0},"330":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.4142135623730951},"82":{"tf":1.0},"84":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"u":{"df":1,"docs":{"374":{"tf":1.0}}}}},"ê":{"df":0,"docs":{},"t":{"df":3,"docs":{"128":{"tf":1.0},"160":{"tf":1.0},"2":{"tf":1.0}},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"72":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"447":{"tf":1.0}}}}}},"s":{"df":3,"docs":{"109":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"o":{">":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"22":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":2,"docs":{"21":{"tf":1.0},"86":{"tf":1.0}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"l":{"df":5,"docs":{"185":{"tf":1.4142135623730951},"286":{"tf":1.0},"288":{"tf":1.4142135623730951},"291":{"tf":1.7320508075688772},"323":{"tf":1.0}}}}},"t":{"df":1,"docs":{"298":{"tf":1.0}}},"u":{"b":{"df":3,"docs":{"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"c":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"19":{"tf":1.0}}}}}}},"df":7,"docs":{"134":{"tf":2.0},"19":{"tf":1.0},"2":{"tf":1.0},"21":{"tf":1.0},"276":{"tf":1.0},"331":{"tf":1.4142135623730951},"427":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":5,"docs":{"166":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"424":{"tf":1.0}}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":20,"docs":{"1":{"tf":1.0},"101":{"tf":1.0},"109":{"tf":1.0},"133":{"tf":1.0},"14":{"tf":1.0},"151":{"tf":1.0},"16":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"243":{"tf":1.0},"276":{"tf":1.0},"294":{"tf":1.0},"374":{"tf":1.0},"83":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":16,"docs":{"127":{"tf":1.0},"133":{"tf":1.0},"164":{"tf":1.0},"17":{"tf":1.0},"176":{"tf":1.0},"252":{"tf":1.0},"254":{"tf":1.0},"288":{"tf":1.0},"292":{"tf":1.0},"294":{"tf":1.0},"327":{"tf":1.0},"347":{"tf":1.0},"351":{"tf":1.0},"364":{"tf":1.0},"442":{"tf":1.0},"451":{"tf":1.0}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"84":{"tf":1.0}}}}}}}},"l":{"df":0,"docs":{},"l":{"df":12,"docs":{"10":{"tf":1.0},"132":{"tf":1.0},"167":{"tf":1.0},"2":{"tf":1.0},"27":{"tf":1.0},"301":{"tf":1.0},"41":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"396":{"tf":1.0}}}},"s":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"2":{"tf":1.0},"287":{"tf":1.4142135623730951}}}}}},"[":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"174":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":25,"docs":{"123":{"tf":1.0},"133":{"tf":1.4142135623730951},"148":{"tf":1.0},"16":{"tf":1.0},"168":{"tf":1.4142135623730951},"169":{"tf":1.7320508075688772},"173":{"tf":1.4142135623730951},"175":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.7320508075688772},"184":{"tf":1.0},"186":{"tf":1.4142135623730951},"285":{"tf":1.0},"294":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"317":{"tf":1.0},"319":{"tf":1.7320508075688772},"321":{"tf":1.4142135623730951},"355":{"tf":1.0},"380":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0},"425":{"tf":2.0},"96":{"tf":1.0}}}},"t":{"df":2,"docs":{"169":{"tf":1.0},"180":{"tf":1.0}}}},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}}},"3":{"df":1,"docs":{"115":{"tf":1.0}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":7,"docs":{"161":{"tf":1.0},"174":{"tf":1.0},"370":{"tf":1.0},"379":{"tf":1.0},"381":{"tf":1.0},"447":{"tf":1.0},"449":{"tf":1.0}}}}}}},"é":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":78,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"15":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"284":{"tf":1.0},"286":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"442":{"tf":1.0},"451":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"q":{"a":{"df":6,"docs":{"277":{"tf":1.0},"279":{"tf":1.4142135623730951},"280":{"tf":1.4142135623730951},"365":{"tf":1.0},"388":{"tf":1.0},"421":{"tf":1.4142135623730951}}},"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}},"u":{"a":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"444":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"444":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"388":{"tf":1.0}},"é":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"168":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"n":{"d":{"df":11,"docs":{"10":{"tf":1.0},"128":{"tf":1.0},"147":{"tf":1.0},"173":{"tf":1.0},"281":{"tf":1.0},"287":{"tf":1.0},"3":{"tf":2.23606797749979},"355":{"tf":1.0},"396":{"tf":1.0},"76":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"r":{"df":3,"docs":{"2":{"tf":1.0},"3":{"tf":1.4142135623730951},"346":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":37,"docs":{"1":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"133":{"tf":2.0},"147":{"tf":1.0},"153":{"tf":1.0},"16":{"tf":1.7320508075688772},"17":{"tf":1.0},"171":{"tf":1.0},"18":{"tf":1.0},"188":{"tf":1.0},"20":{"tf":1.0},"214":{"tf":1.0},"244":{"tf":1.0},"287":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"289":{"tf":1.0},"291":{"tf":1.7320508075688772},"292":{"tf":1.0},"293":{"tf":1.0},"300":{"tf":1.4142135623730951},"319":{"tf":1.0},"331":{"tf":1.0},"356":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"393":{"tf":1.0},"4":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"5":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951}},"l":{"(":{"df":1,"docs":{"104":{"tf":1.0}}},"df":5,"docs":{"250":{"tf":1.0},"279":{"tf":1.0},"442":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"’":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"402":{"tf":1.0}}}},"u":{"df":1,"docs":{"166":{"tf":1.0}}}},"i":{"df":30,"docs":{"1":{"tf":1.0},"133":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"16":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"168":{"tf":1.4142135623730951},"169":{"tf":1.4142135623730951},"178":{"tf":1.0},"18":{"tf":1.0},"2":{"tf":2.0},"214":{"tf":1.0},"22":{"tf":1.4142135623730951},"244":{"tf":1.0},"249":{"tf":1.4142135623730951},"276":{"tf":1.4142135623730951},"287":{"tf":1.0},"3":{"tf":1.0},"317":{"tf":1.0},"327":{"tf":1.0},"347":{"tf":1.0},"361":{"tf":1.0},"364":{"tf":1.0},"416":{"tf":1.0},"420":{"tf":1.4142135623730951},"442":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.0}},"p":{"df":8,"docs":{"1":{"tf":1.0},"16":{"tf":1.0},"179":{"tf":1.0},"27":{"tf":1.0},"39":{"tf":1.0},"416":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"161":{"tf":1.0},"18":{"tf":1.0},"286":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"288":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"276":{"tf":1.0}},"n":{"df":1,"docs":{"446":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"’":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"253":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"290":{"tf":1.0}}}}},"df":0,"docs":{},"x":{"df":1,"docs":{"86":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"1":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"23":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"242":{"tf":1.0},"244":{"tf":1.0},"354":{"tf":1.0}}}}}}},"r":{"2":{"3":{"df":1,"docs":{"383":{"tf":1.0}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"a":{"c":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"174":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"158":{"tf":1.4142135623730951},"166":{"tf":1.0},"174":{"tf":1.0},"296":{"tf":1.4142135623730951},"379":{"tf":1.4142135623730951}},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{">":{"/":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"152":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"193":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"290":{"tf":1.0}}}}}}},"n":{"d":{"df":3,"docs":{"102":{"tf":1.7320508075688772},"290":{"tf":1.4142135623730951},"83":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"127":{"tf":1.0},"293":{"tf":1.0},"319":{"tf":1.0},"321":{"tf":1.0},"357":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"313":{"tf":1.0},"324":{"tf":1.0},"380":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"184":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"=":{"1":{"0":{"df":0,"docs":{},"r":{"/":{"df":1,"docs":{"201":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"/":{"df":1,"docs":{"201":{"tf":1.0}}},"df":0,"docs":{}}},"3":{"0":{"df":0,"docs":{},"r":{"/":{"df":1,"docs":{"201":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":1,"docs":{"236":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}},"df":9,"docs":{"200":{"tf":1.0},"201":{"tf":1.0},"215":{"tf":1.0},"326":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"443":{"tf":1.0},"445":{"tf":1.0},"74":{"tf":1.0}}}}},"b":{"a":{"c":{"df":4,"docs":{"281":{"tf":1.0},"3":{"tf":1.0},"416":{"tf":1.0},"430":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"292":{"tf":1.4142135623730951},"82":{"tf":1.0},"84":{"tf":1.4142135623730951}},"e":{"a":{"d":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":1,"docs":{"427":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"372":{"tf":1.0},"427":{"tf":1.0}}}},"i":{"df":2,"docs":{"85":{"tf":1.0},"87":{"tf":1.0}}},"m":{"df":3,"docs":{"21":{"tf":1.0},"373":{"tf":1.4142135623730951},"428":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"m":{"d":{"df":6,"docs":{"123":{"tf":1.0},"161":{"tf":1.0},"21":{"tf":1.0},"294":{"tf":2.0},"373":{"tf":1.4142135623730951},"428":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"428":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"292":{"tf":1.0},"403":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":10,"docs":{"180":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.4142135623730951},"289":{"tf":1.0},"356":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"380":{"tf":1.0},"406":{"tf":1.0},"425":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"t":{"df":4,"docs":{"279":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"213":{"tf":1.0}}}}}}},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"244":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"288":{"tf":1.0},"88":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"124":{"tf":1.0},"181":{"tf":1.0},"390":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"d":{"df":4,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"174":{"tf":1.0},"178":{"tf":1.0},"286":{"tf":1.0},"291":{"tf":1.0}},"é":{"df":4,"docs":{"171":{"tf":1.0},"211":{"tf":1.0},"316":{"tf":1.0},"357":{"tf":1.0}}}},"df":0,"docs":{}}},"df":1,"docs":{"18":{"tf":1.0}}}},"n":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"î":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"é":{"df":1,"docs":{"327":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"6":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"i":{"df":4,"docs":{"443":{"tf":1.0},"444":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":9,"docs":{"108":{"tf":1.0},"117":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"396":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":4,"docs":{"133":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.0},"330":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}}},"é":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"242":{"tf":1.0},"244":{"tf":1.0},"245":{"tf":1.0},"253":{"tf":1.0},"347":{"tf":1.4142135623730951}}}},"df":7,"docs":{"172":{"tf":1.0},"180":{"tf":1.0},"186":{"tf":1.4142135623730951},"237":{"tf":1.0},"252":{"tf":1.4142135623730951},"254":{"tf":1.0},"88":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":1,"docs":{"131":{"tf":1.0}}}}}}}},"df":2,"docs":{"316":{"tf":1.0},"402":{"tf":1.0}},"f":{"=":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"428":{"tf":1.0}}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"165":{"tf":1.0}}}}},"df":4,"docs":{"180":{"tf":1.0},"424":{"tf":1.4142135623730951},"425":{"tf":2.0},"428":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"241":{"tf":1.0},"373":{"tf":1.0}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"d":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"238":{"tf":1.0}},"s":{"=":{"7":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"df":2,"docs":{"375":{"tf":1.4142135623730951},"394":{"tf":1.0}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}}}}}}},"s":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"424":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"23":{"tf":1.0}},"s":{"df":3,"docs":{"133":{"tf":1.0},"23":{"tf":1.0},"88":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":3,"docs":{"193":{"tf":1.4142135623730951},"205":{"tf":2.23606797749979},"214":{"tf":1.0}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":7,"docs":{"325":{"tf":1.0},"327":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.4142135623730951},"417":{"tf":1.0},"429":{"tf":1.0},"86":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"(":{"d":{"b":{"df":1,"docs":{"423":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"359":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"j":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"330":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"146":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"165":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"183":{"tf":1.0},"184":{"tf":1.0},"19":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"292":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"152":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"82":{"tf":1.0},"84":{"tf":1.0}}}}}}}}},"y":{"df":3,"docs":{"189":{"tf":1.0},"213":{"tf":1.0},"444":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":4,"docs":{"113":{"tf":1.0},"172":{"tf":1.0},"174":{"tf":1.4142135623730951},"296":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":2,"docs":{"21":{"tf":1.0},"6":{"tf":1.7320508075688772}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"277":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951}}}}}},"o":{"a":{"d":{"df":6,"docs":{"105":{"tf":1.4142135623730951},"116":{"tf":1.0},"130":{"tf":1.0},"133":{"tf":1.0},"199":{"tf":1.0},"203":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"u":{"df":3,"docs":{"234":{"tf":1.0},"244":{"tf":1.0},"254":{"tf":1.0}}},"â":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"326":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":1,"docs":{"330":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":1,"docs":{"330":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"d":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"238":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"t":{"df":12,"docs":{"146":{"tf":1.0},"147":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.4142135623730951},"165":{"tf":1.0},"166":{"tf":1.0},"171":{"tf":1.0},"183":{"tf":1.0},"186":{"tf":1.0},"289":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"210":{"tf":1.0}}},"df":0,"docs":{}}},"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":2,"docs":{"202":{"tf":1.7320508075688772},"214":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"l":{"a":{"c":{"df":2,"docs":{"109":{"tf":1.0},"419":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"83":{"tf":1.4142135623730951},"88":{"tf":1.0},"95":{"tf":1.0}}}},"é":{"df":2,"docs":{"362":{"tf":1.0},"83":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":2,"docs":{"21":{"tf":1.0},"299":{"tf":1.0}},"r":{"df":1,"docs":{"287":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"86":{"tf":1.0}}}}}}}}}},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"375":{"tf":1.0},"428":{"tf":1.0}}},"z":{"df":1,"docs":{"86":{"tf":1.0}}}},"r":{"df":1,"docs":{"89":{"tf":1.0}}},"u":{"df":2,"docs":{"333":{"tf":1.0},"418":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"118":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"118":{"tf":1.0},"124":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"290":{"tf":1.0}}}}}}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"353":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"424":{"tf":1.7320508075688772},"425":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"449":{"tf":1.0}}}}},"/":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"318":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"21":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"=":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":3,"docs":{"424":{"tf":1.0},"425":{"tf":1.0},"428":{"tf":1.0}}}}},"_":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"427":{"tf":1.4142135623730951},"428":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}}}}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"356":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"b":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{")":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"=":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":1,"docs":{"428":{"tf":1.0}}}}}}}}},"df":20,"docs":{"123":{"tf":1.0},"133":{"tf":1.0},"166":{"tf":1.0},"287":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"317":{"tf":1.4142135623730951},"349":{"tf":1.0},"356":{"tf":1.4142135623730951},"359":{"tf":1.0},"372":{"tf":1.0},"376":{"tf":1.0},"379":{"tf":1.7320508075688772},"380":{"tf":1.0},"382":{"tf":1.7320508075688772},"413":{"tf":1.4142135623730951},"419":{"tf":1.4142135623730951},"424":{"tf":1.4142135623730951},"425":{"tf":1.4142135623730951},"428":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"428":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"n":{"a":{"df":0,"docs":{},"v":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"449":{"tf":1.0}}}},"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"o":{"df":0,"docs":{},"}":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}},"}":{"/":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"[":{"d":{"df":0,"docs":{},"é":{"df":0,"docs":{},"p":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"360":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":11,"docs":{"16":{"tf":1.0},"294":{"tf":1.4142135623730951},"346":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"372":{"tf":1.0},"376":{"tf":1.4142135623730951},"423":{"tf":1.4142135623730951},"425":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"y":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"325":{"tf":1.0},"331":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"423":{"tf":1.0},"428":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"427":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"423":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"348":{"tf":1.4142135623730951},"372":{"tf":1.0},"383":{"tf":1.0},"423":{"tf":1.0}},"e":{":":{":":{"c":{"df":0,"docs":{},"r":{"df":1,"docs":{"349":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"423":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\\"":{".":{".":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"396":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"372":{"tf":1.0},"383":{"tf":1.0},"402":{"tf":1.0}}}}},"v":{"c":{"df":1,"docs":{"423":{"tf":3.605551275463989}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"347":{"tf":1.0}}}},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"95":{"tf":1.0}},"i":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"420":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"df":0,"docs":{}},"é":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"277":{"tf":1.0},"72":{"tf":1.0}}}}}}}}},"q":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"198":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"/":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}},"df":5,"docs":{"189":{"tf":1.4142135623730951},"199":{"tf":1.0},"200":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.0}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":11,"docs":{"10":{"tf":1.0},"198":{"tf":1.0},"2":{"tf":1.0},"27":{"tf":1.0},"301":{"tf":1.0},"41":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"421":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"i":{"df":16,"docs":{"149":{"tf":1.0},"15":{"tf":1.4142135623730951},"151":{"tf":1.0},"171":{"tf":1.0},"173":{"tf":1.0},"200":{"tf":1.0},"232":{"tf":1.0},"250":{"tf":1.4142135623730951},"286":{"tf":1.0},"288":{"tf":1.0},"313":{"tf":1.0},"323":{"tf":1.0},"356":{"tf":1.0},"395":{"tf":1.0},"81":{"tf":1.4142135623730951},"99":{"tf":1.0}},"r":{"df":1,"docs":{"166":{"tf":1.0}},"e":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"ê":{"df":0,"docs":{},"t":{"df":7,"docs":{"196":{"tf":1.0},"240":{"tf":1.0},"281":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.4142135623730951},"354":{"tf":1.0},"422":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"316":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"316":{"tf":1.0},"449":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":1,"docs":{"375":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":2,"docs":{"356":{"tf":1.0},"428":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"373":{"tf":1.0}}},"p":{"df":0,"docs":{},"o":{"_":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":4,"docs":{"346":{"tf":1.0},"349":{"tf":1.0},"423":{"tf":1.0},"427":{"tf":2.0}},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"427":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"376":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"414":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"359":{"tf":1.0},"399":{"tf":1.0},"423":{"tf":1.0},"427":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"2":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":1,"docs":{"371":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"316":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":3,"docs":{"326":{"tf":1.0},"393":{"tf":1.0},"396":{"tf":1.0}}},"df":0,"docs":{}}}},"v":{"c":{"df":1,"docs":{"423":{"tf":2.0}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":16,"docs":{"107":{"tf":1.0},"113":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"127":{"tf":1.0},"133":{"tf":1.0},"172":{"tf":1.0},"204":{"tf":1.0},"213":{"tf":1.0},"232":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.4142135623730951},"252":{"tf":1.0},"84":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"137":{"tf":1.0},"448":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}},"df":15,"docs":{"108":{"tf":1.0},"155":{"tf":1.0},"166":{"tf":1.0},"181":{"tf":1.0},"183":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.4142135623730951},"290":{"tf":1.0},"3":{"tf":1.0},"316":{"tf":1.0},"375":{"tf":1.4142135623730951},"404":{"tf":1.0},"449":{"tf":1.0},"55":{"tf":1.0},"9":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"212":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"134":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"351":{"tf":1.0},"353":{"tf":1.0}},"n":{"df":6,"docs":{"18":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"288":{"tf":1.0},"290":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"294":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"208":{"tf":1.0},"84":{"tf":1.4142135623730951}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":2,"docs":{"161":{"tf":1.0},"347":{"tf":1.0}}}}},"y":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"397":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"351":{"tf":1.0},"353":{"tf":1.7320508075688772}}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"294":{"tf":1.4142135623730951}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":6,"docs":{"187":{"tf":1.0},"2":{"tf":1.0},"443":{"tf":1.0},"445":{"tf":2.23606797749979},"72":{"tf":1.0},"89":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"277":{"tf":1.0},"279":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"373":{"tf":1.0}}}}},"df":0,"docs":{}}},"ç":{"df":0,"docs":{},"u":{"df":1,"docs":{"277":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":1,"docs":{"104":{"tf":1.0}},"n":{"df":4,"docs":{"174":{"tf":1.0},"317":{"tf":1.0},"355":{"tf":1.0},"83":{"tf":1.0}}}},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"m":{"df":3,"docs":{"116":{"tf":1.0},"163":{"tf":1.0},"205":{"tf":1.0}}},"o":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"83":{"tf":1.0},"86":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":2,"docs":{"424":{"tf":1.0},"425":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":6,"docs":{"291":{"tf":1.0},"359":{"tf":1.4142135623730951},"372":{"tf":1.4142135623730951},"416":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"o":{"df":0,"docs":{},"t":{"df":2,"docs":{"294":{"tf":1.0},"84":{"tf":2.8284271247461903}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"444":{"tf":1.0}}}}}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"167":{"tf":1.0},"375":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"163":{"tf":1.0}}},"df":0,"docs":{}},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"347":{"tf":1.0}}}},"df":8,"docs":{"279":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"335":{"tf":1.0},"369":{"tf":1.0},"375":{"tf":2.23606797749979},"414":{"tf":1.0},"421":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"316":{"tf":1.0}}},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"364":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0}}}}},"é":{"df":1,"docs":{"95":{"tf":1.0}}}},"v":{"df":0,"docs":{},"r":{"df":1,"docs":{"347":{"tf":1.0}}}}},"w":{"df":1,"docs":{"291":{"tf":1.0}}}},"r":{"]":{"df":0,"docs":{},"e":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{".":{"*":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"[":{"_":{"df":1,"docs":{"193":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"s":{"a":{"df":2,"docs":{"19":{"tf":1.0},"383":{"tf":1.0}}},"df":1,"docs":{"427":{"tf":3.1622776601683795}},"y":{"df":0,"docs":{},"n":{"c":{"df":13,"docs":{"100":{"tf":1.4142135623730951},"113":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"150":{"tf":1.0},"163":{"tf":1.0},"165":{"tf":1.4142135623730951},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"183":{"tf":1.0},"296":{"tf":1.0},"448":{"tf":1.0}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"447":{"tf":1.0}}}},"n":{"[":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"(":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{".":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":18,"docs":{"118":{"tf":1.0},"164":{"tf":1.0},"172":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":2.0},"252":{"tf":1.0},"287":{"tf":1.7320508075688772},"291":{"tf":1.0},"293":{"tf":1.7320508075688772},"299":{"tf":1.0},"313":{"tf":2.0},"316":{"tf":1.0},"320":{"tf":1.0},"324":{"tf":2.23606797749979},"327":{"tf":1.4142135623730951},"334":{"tf":1.0},"403":{"tf":1.0},"85":{"tf":1.4142135623730951}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"153":{"tf":1.0},"155":{"tf":1.0}}}}}}}},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"444":{"tf":1.0}}}}}},"@":{"<":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"160":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":23,"docs":{"145":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":2.0},"148":{"tf":1.7320508075688772},"151":{"tf":1.0},"153":{"tf":1.7320508075688772},"154":{"tf":2.0},"155":{"tf":1.0},"156":{"tf":1.0},"160":{"tf":1.4142135623730951},"161":{"tf":1.0},"164":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":2.449489742783178},"167":{"tf":2.23606797749979},"172":{"tf":1.0},"187":{"tf":1.0},"210":{"tf":1.4142135623730951},"296":{"tf":1.0},"420":{"tf":1.4142135623730951},"443":{"tf":1.0},"444":{"tf":1.0},"74":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"153":{"tf":1.4142135623730951},"287":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{")":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":7,"docs":{"124":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"193":{"tf":1.0},"374":{"tf":1.0},"96":{"tf":1.0}}}},"t":{".":{"df":0,"docs":{},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"=":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"255":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":2,"docs":{"102":{"tf":1.0},"83":{"tf":1.0}}}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"c":{"df":3,"docs":{"286":{"tf":1.0},"288":{"tf":1.7320508075688772},"300":{"tf":1.0}}},"df":22,"docs":{"1":{"tf":1.0},"148":{"tf":1.0},"161":{"tf":1.0},"174":{"tf":1.4142135623730951},"2":{"tf":1.0},"234":{"tf":1.0},"286":{"tf":1.4142135623730951},"287":{"tf":1.4142135623730951},"288":{"tf":1.0},"296":{"tf":1.0},"300":{"tf":1.0},"312":{"tf":1.0},"314":{"tf":1.4142135623730951},"316":{"tf":1.0},"320":{"tf":1.0},"372":{"tf":1.0},"392":{"tf":1.0},"416":{"tf":1.0},"418":{"tf":1.0},"447":{"tf":1.0},"449":{"tf":1.0},"82":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"100":{"tf":1.0},"300":{"tf":1.4142135623730951}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{":":{":":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"237":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"414":{"tf":1.4142135623730951}}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"414":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":14,"docs":{"276":{"tf":1.0},"279":{"tf":1.4142135623730951},"280":{"tf":1.0},"289":{"tf":1.0},"358":{"tf":1.4142135623730951},"363":{"tf":1.4142135623730951},"372":{"tf":1.0},"375":{"tf":1.0},"408":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.4142135623730951},"417":{"tf":1.0},"429":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":4,"docs":{"361":{"tf":1.0},"364":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"416":{"tf":1.0}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"413":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"w":{"[":{"\\"":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":4,"docs":{"292":{"tf":1.0},"370":{"tf":2.0},"413":{"tf":1.0},"84":{"tf":1.4142135623730951}}},"è":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":80,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"280":{"tf":1.4142135623730951},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"361":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"388":{"tf":1.7320508075688772},"391":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"416":{"tf":1.0},"42":{"tf":1.0},"421":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}},"é":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"364":{"tf":1.0},"376":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"134":{"tf":1.0},"22":{"tf":1.0},"299":{"tf":1.0},"87":{"tf":1.0}}}}}},"df":2,"docs":{"186":{"tf":1.0},"208":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"101":{"tf":1.0},"151":{"tf":1.0}}}}},"i":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"18":{"tf":1.0},"214":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":144,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"215":{"tf":1.0},"216":{"tf":1.0},"217":{"tf":1.0},"218":{"tf":1.0},"219":{"tf":1.0},"220":{"tf":1.0},"221":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.0},"227":{"tf":1.0},"228":{"tf":1.0},"229":{"tf":1.0},"230":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"260":{"tf":1.0},"261":{"tf":1.0},"262":{"tf":1.0},"263":{"tf":1.0},"264":{"tf":1.0},"265":{"tf":1.0},"266":{"tf":1.0},"267":{"tf":1.0},"268":{"tf":1.0},"269":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"271":{"tf":1.0},"272":{"tf":1.0},"273":{"tf":1.0},"274":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"282":{"tf":1.0},"283":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.0},"304":{"tf":1.0},"305":{"tf":1.0},"306":{"tf":1.0},"307":{"tf":1.0},"308":{"tf":1.0},"309":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":1.0},"387":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"431":{"tf":1.0},"432":{"tf":1.0},"433":{"tf":1.0},"434":{"tf":1.0},"435":{"tf":1.0},"436":{"tf":1.0},"437":{"tf":1.0},"438":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"440":{"tf":1.0},"441":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":7,"docs":{"193":{"tf":1.0},"205":{"tf":1.0},"207":{"tf":1.0},"23":{"tf":1.0},"357":{"tf":1.0},"377":{"tf":1.4142135623730951},"84":{"tf":1.0}},"l":{"df":4,"docs":{"109":{"tf":1.0},"314":{"tf":1.0},"316":{"tf":1.0},"95":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}}}},"f":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":13,"docs":{"227":{"tf":1.0},"235":{"tf":1.0},"280":{"tf":1.4142135623730951},"3":{"tf":1.0},"310":{"tf":1.0},"345":{"tf":1.0},"367":{"tf":1.0},"369":{"tf":1.0},"421":{"tf":1.0},"51":{"tf":1.0},"75":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951},"95":{"tf":1.0}}},"df":0,"docs":{}},"z":{"df":1,"docs":{"442":{"tf":1.0}}}}}}},"g":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":16,"docs":{"240":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.0},"244":{"tf":1.4142135623730951},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":1.7320508075688772},"250":{"tf":1.0},"252":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.7320508075688772},"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"215":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"167":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"184":{"tf":1.0}}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}},"é":{"df":1,"docs":{"417":{"tf":1.0}}}}}}}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":11,"docs":{"146":{"tf":1.0},"153":{"tf":1.0},"160":{"tf":1.0},"171":{"tf":1.0},"293":{"tf":1.0},"314":{"tf":1.0},"322":{"tf":1.0},"360":{"tf":1.0},"376":{"tf":1.4142135623730951},"429":{"tf":1.0},"83":{"tf":1.4142135623730951}}}}}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"133":{"tf":1.0},"15":{"tf":1.0},"81":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"279":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}},"u":{"df":1,"docs":{"22":{"tf":1.0}}}},"df":0,"docs":{}}},"è":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"8":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":1,"docs":{"192":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":14,"docs":{"151":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"2":{"tf":1.0},"210":{"tf":1.0},"211":{"tf":1.0},"352":{"tf":1.0},"412":{"tf":1.0},"71":{"tf":1.0},"82":{"tf":1.4142135623730951},"87":{"tf":1.0},"97":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"é":{"df":1,"docs":{"383":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"181":{"tf":1.0}},"t":{"df":4,"docs":{"356":{"tf":1.0},"380":{"tf":1.0},"422":{"tf":1.0},"427":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"3":{"tf":1.0}}}}}},"u":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"181":{"tf":1.0},"244":{"tf":1.0},"285":{"tf":1.0}}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":3,"docs":{"161":{"tf":1.0},"299":{"tf":1.0},"425":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":5,"docs":{"179":{"tf":1.0},"199":{"tf":1.0},"328":{"tf":1.0},"363":{"tf":1.0},"399":{"tf":1.0}}}}}}}},"v":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"319":{"tf":1.0},"397":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"167":{"tf":1.0}}}}}}},"è":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}}}}},"é":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}}}},"df":0,"docs":{}}},"ô":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":17,"docs":{"1":{"tf":1.0},"134":{"tf":1.0},"146":{"tf":1.0},"150":{"tf":1.0},"171":{"tf":1.0},"235":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.4142135623730951},"372":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"381":{"tf":1.0},"390":{"tf":1.0},"53":{"tf":1.0},"86":{"tf":1.0},"9":{"tf":1.0}}}}}},"s":{"\'":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"206":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"/":{"^":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"107":{"tf":1.0},"122":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"d":{"b":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"/":{"$":{"d":{"b":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":1,"docs":{"83":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"_":{"3":{"2":{"/":{"$":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"i":{"/":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"116":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"130":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"[":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"a":{"df":4,"docs":{"382":{"tf":1.0},"394":{"tf":1.0},"82":{"tf":1.4142135623730951},"86":{"tf":1.0}},"i":{"df":1,"docs":{"5":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"19":{"tf":1.0}}}},"n":{"df":35,"docs":{"104":{"tf":1.0},"113":{"tf":1.0},"129":{"tf":1.0},"14":{"tf":1.0},"146":{"tf":1.0},"150":{"tf":1.0},"16":{"tf":1.4142135623730951},"163":{"tf":1.0},"166":{"tf":1.0},"168":{"tf":1.0},"177":{"tf":1.0},"199":{"tf":1.0},"237":{"tf":1.0},"277":{"tf":1.0},"279":{"tf":1.0},"288":{"tf":1.0},"316":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.4142135623730951},"347":{"tf":1.0},"350":{"tf":1.0},"352":{"tf":1.0},"358":{"tf":1.0},"364":{"tf":1.0},"389":{"tf":1.0},"396":{"tf":1.0},"417":{"tf":1.0},"444":{"tf":1.0},"446":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"88":{"tf":1.0},"89":{"tf":1.0}},"t":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"388":{"tf":1.0}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"183":{"tf":1.0},"354":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"f":{"df":2,"docs":{"381":{"tf":1.0},"97":{"tf":1.0}}},"r":{"a":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"285":{"tf":1.0},"80":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":9,"docs":{"137":{"tf":1.0},"274":{"tf":1.0},"446":{"tf":1.0},"448":{"tf":1.7320508075688772},"71":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"84":{"tf":1.0},"89":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"84":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"19":{"tf":1.7320508075688772},"253":{"tf":1.0}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"2":{"tf":1.0}}}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{".":{"c":{"d":{"df":0,"docs":{},"x":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"df":0,"docs":{},"y":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"x":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"s":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"180":{"tf":1.0},"185":{"tf":1.0}}}}}}}}},"df":16,"docs":{"1":{"tf":1.0},"169":{"tf":2.449489742783178},"176":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.0},"180":{"tf":3.7416573867739413},"181":{"tf":1.0},"184":{"tf":1.4142135623730951},"185":{"tf":1.0},"186":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.4142135623730951},"447":{"tf":1.0},"49":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"169":{"tf":1.0},"180":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"c":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":72,"docs":{"11":{"tf":1.4142135623730951},"135":{"tf":1.4142135623730951},"137":{"tf":1.4142135623730951},"139":{"tf":1.4142135623730951},"141":{"tf":1.4142135623730951},"143":{"tf":1.4142135623730951},"215":{"tf":1.4142135623730951},"217":{"tf":1.4142135623730951},"219":{"tf":1.4142135623730951},"221":{"tf":1.4142135623730951},"223":{"tf":1.4142135623730951},"225":{"tf":1.4142135623730951},"227":{"tf":1.4142135623730951},"229":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"260":{"tf":1.4142135623730951},"262":{"tf":1.4142135623730951},"264":{"tf":1.4142135623730951},"266":{"tf":1.4142135623730951},"268":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"270":{"tf":1.4142135623730951},"272":{"tf":1.4142135623730951},"274":{"tf":1.4142135623730951},"282":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"302":{"tf":1.4142135623730951},"304":{"tf":1.4142135623730951},"306":{"tf":1.4142135623730951},"308":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"335":{"tf":1.4142135623730951},"337":{"tf":1.4142135623730951},"339":{"tf":1.4142135623730951},"341":{"tf":1.4142135623730951},"343":{"tf":1.4142135623730951},"35":{"tf":1.4142135623730951},"365":{"tf":1.4142135623730951},"367":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"384":{"tf":1.4142135623730951},"386":{"tf":1.4142135623730951},"39":{"tf":1.4142135623730951},"404":{"tf":1.4142135623730951},"406":{"tf":1.4142135623730951},"408":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"410":{"tf":1.4142135623730951},"43":{"tf":1.4142135623730951},"430":{"tf":1.4142135623730951},"432":{"tf":1.4142135623730951},"434":{"tf":1.4142135623730951},"436":{"tf":1.4142135623730951},"438":{"tf":1.4142135623730951},"440":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"47":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"55":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"90":{"tf":1.4142135623730951},"92":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"n":{"df":4,"docs":{"169":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.0},"380":{"tf":1.0}},"n":{"df":3,"docs":{"168":{"tf":1.0},"176":{"tf":1.0},"18":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"189":{"tf":1.4142135623730951},"208":{"tf":1.0}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}}}},"é":{"df":0,"docs":{},"m":{"a":{"df":11,"docs":{"241":{"tf":1.0},"260":{"tf":1.0},"280":{"tf":1.4142135623730951},"3":{"tf":1.0},"345":{"tf":1.0},"348":{"tf":1.0},"380":{"tf":1.0},"386":{"tf":1.0},"57":{"tf":1.0},"75":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"383":{"tf":1.0}}}}},"p":{"df":2,"docs":{"109":{"tf":1.0},"116":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"420":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":18,"docs":{"145":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":1.4142135623730951},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.4142135623730951},"153":{"tf":1.0},"156":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"171":{"tf":1.0},"2":{"tf":1.0},"317":{"tf":1.0},"321":{"tf":1.0},"325":{"tf":1.0},"4":{"tf":1.0},"448":{"tf":1.0},"450":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"e":{"2":{"df":2,"docs":{"313":{"tf":1.0},"327":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"é":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"147":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":11,"docs":{"16":{"tf":1.4142135623730951},"177":{"tf":1.0},"23":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"355":{"tf":1.0},"82":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"353":{"tf":1.0},"372":{"tf":1.4142135623730951}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"199":{"tf":2.0}}}},"df":0,"docs":{}}},"c":{"df":1,"docs":{"394":{"tf":2.449489742783178}},"o":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"16":{"tf":1.0},"18":{"tf":1.0},"349":{"tf":1.0},"85":{"tf":1.4142135623730951},"88":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"=":{"4":{"a":{"7":{"df":0,"docs":{},"f":{"2":{"c":{"9":{"df":0,"docs":{},"e":{"1":{"b":{"8":{"d":{"3":{"df":0,"docs":{},"f":{"6":{"a":{"0":{"df":0,"docs":{},"e":{"5":{"c":{"2":{"b":{"9":{"d":{"7":{"df":0,"docs":{},"f":{"4":{"a":{"1":{"df":0,"docs":{},"e":{"8":{"c":{"3":{"b":{"6":{"d":{"9":{"df":0,"docs":{},"f":{"2":{"a":{"5":{"df":0,"docs":{},"e":{"8":{"c":{"1":{"b":{"4":{"d":{"7":{"df":0,"docs":{},"f":{"0":{"a":{"3":{"df":0,"docs":{},"e":{"6":{"c":{"9":{"b":{"2":{"d":{"5":{"df":0,"docs":{},"f":{"8":{"a":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"_":{"3":{"2":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":2,"docs":{"83":{"tf":1.0},"88":{"tf":1.4142135623730951}}}}}},"df":8,"docs":{"167":{"tf":1.0},"243":{"tf":1.0},"250":{"tf":1.0},"318":{"tf":1.0},"382":{"tf":1.4142135623730951},"390":{"tf":1.0},"393":{"tf":2.23606797749979},"403":{"tf":1.0}}}},"è":{"df":0,"docs":{},"t":{"df":2,"docs":{"290":{"tf":1.0},"83":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":7,"docs":{"150":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"189":{"tf":1.0},"20":{"tf":1.0},"284":{"tf":1.0},"451":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"177":{"tf":1.0},"181":{"tf":1.0},"186":{"tf":1.0},"418":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"[":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"169":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"d":{"df":6,"docs":{"107":{"tf":1.0},"116":{"tf":1.0},"122":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951}}},"df":16,"docs":{"104":{"tf":1.0},"16":{"tf":1.7320508075688772},"161":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"174":{"tf":1.0},"177":{"tf":1.0},"253":{"tf":1.0},"33":{"tf":1.0},"358":{"tf":1.0},"393":{"tf":1.0},"397":{"tf":1.0},"412":{"tf":1.0},"451":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.0}},"e":{"d":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"314":{"tf":1.0}}}},"df":4,"docs":{"249":{"tf":1.0},"314":{"tf":1.4142135623730951},"325":{"tf":1.0},"443":{"tf":1.0}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":12,"docs":{"185":{"tf":1.4142135623730951},"255":{"tf":1.0},"291":{"tf":1.0},"348":{"tf":2.6457513110645907},"349":{"tf":2.449489742783178},"351":{"tf":1.7320508075688772},"355":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.7320508075688772},"428":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"f":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"(":{"d":{"b":{"df":1,"docs":{"242":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"1":{"tf":1.0},"2":{"tf":1.0},"71":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"df":79,"docs":{"12":{"tf":1.4142135623730951},"136":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"144":{"tf":1.4142135623730951},"2":{"tf":1.0},"21":{"tf":1.0},"216":{"tf":1.4142135623730951},"218":{"tf":1.4142135623730951},"220":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"228":{"tf":1.4142135623730951},"230":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"261":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"265":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"279":{"tf":1.0},"28":{"tf":1.4142135623730951},"283":{"tf":1.4142135623730951},"3":{"tf":1.0},"30":{"tf":1.4142135623730951},"303":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"342":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"380":{"tf":1.0},"385":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"431":{"tf":1.4142135623730951},"433":{"tf":1.4142135623730951},"435":{"tf":1.4142135623730951},"437":{"tf":1.4142135623730951},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"441":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"74":{"tf":1.0},"78":{"tf":1.4142135623730951},"8":{"tf":1.0},"91":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951}}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"208":{"tf":1.0}}}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"169":{"tf":1.0}}}}}}},"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}},"n":{"d":{"df":3,"docs":{"133":{"tf":1.0},"160":{"tf":1.0},"316":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"167":{"tf":1.0},"390":{"tf":1.0},"393":{"tf":1.0}}}},"df":0,"docs":{}}}},"q":{"df":1,"docs":{"206":{"tf":1.0}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":11,"docs":{"16":{"tf":1.0},"180":{"tf":1.0},"348":{"tf":1.0},"414":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"r":{"a":{"df":2,"docs":{"214":{"tf":1.0},"258":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"16":{"tf":1.0}}}}},"t":{"df":1,"docs":{"346":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"373":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"325":{"tf":1.0},"327":{"tf":1.0}}}}},"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"1":{"2":{"7":{".":{"0":{".":{"0":{".":{"1":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"=":{"4":{"0":{"0":{"0":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"238":{"tf":1.0},"96":{"tf":1.0}}}}}}},"df":22,"docs":{"101":{"tf":1.0},"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.4142135623730951},"109":{"tf":1.0},"116":{"tf":1.0},"121":{"tf":1.4142135623730951},"122":{"tf":1.0},"148":{"tf":1.0},"202":{"tf":1.0},"291":{"tf":1.0},"293":{"tf":1.4142135623730951},"299":{"tf":1.0},"300":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"414":{"tf":1.0},"85":{"tf":1.4142135623730951},"95":{"tf":1.0},"97":{"tf":1.0}}},"u":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":26,"docs":{"1":{"tf":1.0},"102":{"tf":1.4142135623730951},"146":{"tf":1.0},"147":{"tf":1.4142135623730951},"16":{"tf":1.0},"160":{"tf":1.4142135623730951},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"172":{"tf":1.4142135623730951},"183":{"tf":1.0},"186":{"tf":1.0},"211":{"tf":1.0},"287":{"tf":1.7320508075688772},"296":{"tf":1.4142135623730951},"316":{"tf":1.7320508075688772},"347":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"374":{"tf":1.0},"393":{"tf":1.0},"414":{"tf":1.4142135623730951},"418":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.7320508075688772},"95":{"tf":1.4142135623730951}}}}},"i":{"c":{"df":34,"docs":{"104":{"tf":1.0},"124":{"tf":1.0},"205":{"tf":1.0},"249":{"tf":1.0},"252":{"tf":1.0},"254":{"tf":1.0},"257":{"tf":1.0},"262":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.0},"337":{"tf":1.0},"359":{"tf":1.4142135623730951},"361":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.7320508075688772},"372":{"tf":1.4142135623730951},"375":{"tf":1.0},"384":{"tf":1.0},"396":{"tf":1.0},"399":{"tf":1.4142135623730951},"402":{"tf":1.0},"413":{"tf":1.0},"446":{"tf":1.0},"73":{"tf":1.0},"75":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772},"87":{"tf":1.0},"88":{"tf":1.4142135623730951},"89":{"tf":1.0},"96":{"tf":1.4142135623730951}},"e":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"84":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":3,"docs":{"292":{"tf":1.0},"400":{"tf":1.0},"418":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"238":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"236":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":18,"docs":{"103":{"tf":1.0},"105":{"tf":1.4142135623730951},"106":{"tf":1.0},"287":{"tf":1.0},"327":{"tf":1.0},"363":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.4142135623730951},"399":{"tf":1.0},"416":{"tf":1.0},"423":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"443":{"tf":1.0},"444":{"tf":1.0},"82":{"tf":1.4142135623730951},"98":{"tf":1.0}},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"413":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"t":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"359":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":15,"docs":{"123":{"tf":1.0},"163":{"tf":1.4142135623730951},"17":{"tf":1.0},"173":{"tf":1.0},"186":{"tf":1.0},"241":{"tf":1.0},"250":{"tf":1.0},"294":{"tf":1.0},"300":{"tf":1.0},"313":{"tf":1.0},"319":{"tf":1.7320508075688772},"375":{"tf":1.0},"417":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"426":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"314":{"tf":1.0},"325":{"tf":1.0}}}},"df":12,"docs":{"147":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"160":{"tf":1.0},"162":{"tf":1.0},"166":{"tf":1.0},"183":{"tf":1.0},"186":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":15,"docs":{"102":{"tf":1.0},"112":{"tf":1.0},"147":{"tf":1.0},"165":{"tf":1.0},"167":{"tf":1.0},"19":{"tf":1.0},"234":{"tf":1.0},"244":{"tf":1.0},"249":{"tf":1.4142135623730951},"250":{"tf":1.4142135623730951},"287":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.0},"352":{"tf":1.0},"420":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"10":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":1.0},"281":{"tf":1.0},"352":{"tf":1.0},"357":{"tf":1.0},"5":{"tf":1.0},"76":{"tf":1.0}}}}}}}}}},"f":{"df":1,"docs":{"116":{"tf":1.0}}},"h":{"a":{"2":{"5":{"6":{"(":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"426":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},":":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":2,"docs":{"293":{"tf":1.0},"85":{"tf":1.0}},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"19":{"tf":1.0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"df":3,"docs":{"177":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":5,"docs":{"180":{"tf":1.0},"184":{"tf":1.4142135623730951},"373":{"tf":1.0},"380":{"tf":1.0},"393":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"424":{"tf":1.0},"425":{"tf":1.0},"427":{"tf":1.4142135623730951}}}}},"df":4,"docs":{"146":{"tf":1.4142135623730951},"147":{"tf":1.0},"177":{"tf":1.0},"288":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":8,"docs":{"20":{"tf":1.0},"288":{"tf":1.0},"317":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"374":{"tf":1.0},"449":{"tf":1.0},"84":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"101":{"tf":1.0},"133":{"tf":1.0}}}},"w":{"df":1,"docs":{"100":{"tf":1.0}}}}},"i":{"d":{"df":0,"docs":{},"e":{"b":{"a":{"df":0,"docs":{},"r":{"_":{"df":1,"docs":{"375":{"tf":1.0}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}}}}}},"df":3,"docs":{"333":{"tf":1.0},"375":{"tf":1.0},"417":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"444":{"tf":1.0}}}},"df":0,"docs":{}},"df":1,"docs":{"375":{"tf":1.0}}}},"df":125,"docs":{"100":{"tf":1.0},"105":{"tf":1.0},"119":{"tf":1.0},"12":{"tf":1.0},"134":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"159":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"171":{"tf":1.4142135623730951},"172":{"tf":1.0},"18":{"tf":1.4142135623730951},"181":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":2.0},"19":{"tf":1.7320508075688772},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.7320508075688772},"204":{"tf":1.0},"208":{"tf":1.0},"21":{"tf":1.0},"211":{"tf":1.4142135623730951},"214":{"tf":1.4142135623730951},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"23":{"tf":1.0},"230":{"tf":1.0},"244":{"tf":1.7320508075688772},"248":{"tf":1.0},"249":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"277":{"tf":1.4142135623730951},"28":{"tf":1.0},"283":{"tf":1.0},"284":{"tf":1.0},"288":{"tf":1.4142135623730951},"290":{"tf":1.0},"291":{"tf":1.4142135623730951},"292":{"tf":1.0},"293":{"tf":1.0},"30":{"tf":1.0},"300":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"347":{"tf":1.0},"357":{"tf":1.4142135623730951},"36":{"tf":1.0},"363":{"tf":1.4142135623730951},"366":{"tf":1.0},"368":{"tf":1.0},"376":{"tf":1.4142135623730951},"38":{"tf":1.0},"380":{"tf":1.7320508075688772},"385":{"tf":1.0},"387":{"tf":1.0},"389":{"tf":1.0},"399":{"tf":1.0},"40":{"tf":1.0},"403":{"tf":1.4142135623730951},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"413":{"tf":1.7320508075688772},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"442":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.7320508075688772},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.4142135623730951},"78":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.4142135623730951},"89":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"184":{"tf":1.0}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"424":{"tf":1.0}}}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"165":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"147":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"199":{"tf":1.0},"352":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"420":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"317":{"tf":1.0}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":4,"docs":{"103":{"tf":1.0},"169":{"tf":1.0},"287":{"tf":1.0},"357":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"206":{"tf":1.0},"214":{"tf":1.0},"244":{"tf":1.0},"98":{"tf":1.0}}}}}},"k":{"df":1,"docs":{"206":{"tf":1.0}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}},"p":{"_":{"d":{"b":{"=":{"1":{"df":1,"docs":{"132":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"=":{"1":{"df":1,"docs":{"132":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":2,"docs":{"146":{"tf":1.0},"165":{"tf":1.0}}}}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"83":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"397":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"g":{"df":5,"docs":{"331":{"tf":1.0},"348":{"tf":1.0},"383":{"tf":1.0},"423":{"tf":1.4142135623730951},"428":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"202":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":6,"docs":{"146":{"tf":1.0},"160":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.0},"171":{"tf":1.0},"318":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}}},"_":{"df":1,"docs":{"236":{"tf":1.0}},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"=":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"@":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"297":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"297":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"=":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"297":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":1,"docs":{"238":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"=":{"5":{"8":{"7":{"df":1,"docs":{"297":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"=":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"297":{"tf":1.0}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}}},"df":16,"docs":{"141":{"tf":1.0},"189":{"tf":1.0},"213":{"tf":1.4142135623730951},"250":{"tf":1.0},"297":{"tf":1.0},"3":{"tf":1.0},"377":{"tf":1.4142135623730951},"414":{"tf":2.0},"416":{"tf":1.0},"443":{"tf":1.4142135623730951},"444":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0},"89":{"tf":1.0}}}}},"n":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"101":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"161":{"tf":1.0},"300":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"72":{"tf":1.0}},"t":{"df":2,"docs":{"244":{"tf":1.0},"288":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"(":{"\\"":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"v":{"df":1,"docs":{"259":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"t":{"df":31,"docs":{"153":{"tf":1.0},"156":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"168":{"tf":1.0},"175":{"tf":1.0},"234":{"tf":1.4142135623730951},"237":{"tf":1.0},"240":{"tf":1.4142135623730951},"249":{"tf":1.0},"278":{"tf":1.0},"288":{"tf":1.0},"290":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.4142135623730951},"312":{"tf":1.0},"332":{"tf":1.0},"346":{"tf":1.0},"349":{"tf":1.0},"357":{"tf":1.0},"364":{"tf":1.0},"375":{"tf":1.7320508075688772},"376":{"tf":1.0},"377":{"tf":1.0},"382":{"tf":1.4142135623730951},"417":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"80":{"tf":1.0},"84":{"tf":1.0},"87":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"151":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"171":{"tf":1.0}}}}},"df":1,"docs":{"373":{"tf":1.0}},"i":{"df":19,"docs":{"160":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"278":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.4142135623730951},"290":{"tf":1.0},"291":{"tf":1.7320508075688772},"292":{"tf":1.4142135623730951},"293":{"tf":1.0},"294":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772},"86":{"tf":1.0}}}}},"u":{"df":3,"docs":{"161":{"tf":1.0},"244":{"tf":1.0},"373":{"tf":1.0}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"1":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"442":{"tf":1.0},"89":{"tf":1.0}}}}}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}},"r":{"df":1,"docs":{"301":{"tf":1.0}}}}}},"i":{"df":1,"docs":{"277":{"tf":1.0}}}},"r":{"c":{"df":15,"docs":{"100":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"152":{"tf":1.0},"163":{"tf":1.4142135623730951},"165":{"tf":1.0},"174":{"tf":1.0},"208":{"tf":1.0},"232":{"tf":1.0},"244":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.7320508075688772},"299":{"tf":1.0},"358":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"c":{"df":0,"docs":{},"e":{":":{"]":{"]":{"*":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"[":{"[":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"e":{":":{"]":{"]":{"+":{"[":{"0":{"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"169":{"tf":1.0},"184":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":3,"docs":{"313":{"tf":1.0},"314":{"tf":1.0},"318":{"tf":2.0}}},"df":0,"docs":{}},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"199":{"tf":1.0}},"|":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"é":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":2,"docs":{"243":{"tf":1.0},"88":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":7,"docs":{"153":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.0},"312":{"tf":1.0},"320":{"tf":1.0},"375":{"tf":1.0},"416":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"l":{"df":2,"docs":{"291":{"tf":1.4142135623730951},"82":{"tf":1.0}}},"u":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"43":{"tf":1.0},"8":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}},"r":{"c":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":2,"docs":{"174":{"tf":1.0},"428":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"s":{"df":9,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"212":{"tf":1.0},"88":{"tf":1.0}},"e":{"df":11,"docs":{"347":{"tf":1.4142135623730951},"348":{"tf":1.7320508075688772},"349":{"tf":1.0},"355":{"tf":2.0},"357":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.4142135623730951},"380":{"tf":1.0},"418":{"tf":1.0},"445":{"tf":1.0},"9":{"tf":1.0}}},"f":{"df":1,"docs":{"288":{"tf":1.0}},"l":{"df":1,"docs":{"177":{"tf":1.0}}}},"h":{"+":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"420":{"tf":1.0}}},"df":0,"docs":{}}}}}},".":{"*":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"193":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":2,"docs":{"193":{"tf":1.7320508075688772},"205":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"121":{"tf":1.0}}}}}},"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":3,"docs":{"151":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"df":1,"docs":{"166":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"108":{"tf":1.0},"113":{"tf":1.0}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"i":{"d":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":4,"docs":{"123":{"tf":1.0},"19":{"tf":1.0},"23":{"tf":1.0},"294":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},":":{"/":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"@":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"2":{"2":{"2":{"2":{"/":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"424":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"2":{"2":{"2":{"2":{"/":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"294":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"2":{"2":{"2":{"2":{"/":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"294":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"287":{"tf":1.0}}}}}},":":{"2":{"2":{"2":{"2":{"df":1,"docs":{"169":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"102":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":1,"docs":{"84":{"tf":1.4142135623730951}},"s":{":":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"c":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"424":{"tf":1.0},"426":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"372":{"tf":1.0},"424":{"tf":1.4142135623730951},"426":{"tf":1.4142135623730951}},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"=":{"1":{"2":{"7":{".":{"0":{".":{"0":{".":{"1":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"=":{"2":{"2":{"2":{"2":{"df":2,"docs":{"102":{"tf":1.0},"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":4,"docs":{"236":{"tf":1.0},"238":{"tf":1.0},"84":{"tf":1.0},"96":{"tf":1.0}}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"238":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"d":{":":{"2":{"2":{"df":1,"docs":{"122":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{")":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{")":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":15,"docs":{"103":{"tf":1.0},"104":{"tf":2.0},"105":{"tf":1.7320508075688772},"107":{"tf":1.0},"122":{"tf":1.4142135623730951},"124":{"tf":1.0},"127":{"tf":1.4142135623730951},"133":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"204":{"tf":1.4142135623730951},"208":{"tf":1.4142135623730951},"97":{"tf":1.0},"98":{"tf":1.0}}},"df":101,"docs":{"1":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":1.4142135623730951},"106":{"tf":1.0},"107":{"tf":1.4142135623730951},"108":{"tf":2.0},"109":{"tf":1.4142135623730951},"113":{"tf":1.4142135623730951},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"120":{"tf":1.0},"121":{"tf":1.4142135623730951},"122":{"tf":1.4142135623730951},"123":{"tf":1.0},"124":{"tf":2.449489742783178},"126":{"tf":1.0},"127":{"tf":2.23606797749979},"129":{"tf":1.0},"13":{"tf":1.0},"130":{"tf":1.0},"133":{"tf":1.7320508075688772},"134":{"tf":1.7320508075688772},"14":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"150":{"tf":1.7320508075688772},"151":{"tf":1.4142135623730951},"153":{"tf":2.0},"16":{"tf":2.0},"160":{"tf":1.7320508075688772},"163":{"tf":1.7320508075688772},"166":{"tf":2.0},"167":{"tf":1.4142135623730951},"169":{"tf":2.23606797749979},"171":{"tf":1.7320508075688772},"172":{"tf":1.0},"174":{"tf":1.0},"183":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"19":{"tf":2.6457513110645907},"193":{"tf":1.0},"20":{"tf":2.6457513110645907},"204":{"tf":1.0},"205":{"tf":1.0},"206":{"tf":1.4142135623730951},"207":{"tf":1.0},"208":{"tf":1.7320508075688772},"219":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":2.449489742783178},"24":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":2.449489742783178},"289":{"tf":1.0},"293":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"296":{"tf":1.0},"299":{"tf":1.0},"3":{"tf":1.0},"300":{"tf":1.7320508075688772},"326":{"tf":1.0},"33":{"tf":1.0},"370":{"tf":2.0},"372":{"tf":1.0},"374":{"tf":1.7320508075688772},"375":{"tf":1.0},"380":{"tf":1.0},"383":{"tf":1.0},"392":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":2.449489742783178},"414":{"tf":1.0},"416":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.4142135623730951},"424":{"tf":4.898979485566356},"425":{"tf":4.242640687119285},"426":{"tf":1.0},"427":{"tf":1.0},"448":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.7320508075688772},"85":{"tf":1.7320508075688772},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.4142135623730951},"98":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"426":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":5,"docs":{"372":{"tf":1.0},"374":{"tf":1.0},"383":{"tf":1.0},"424":{"tf":1.0},"426":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"|":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"193":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"l":{"df":1,"docs":{"202":{"tf":1.0}}},"r":{"df":4,"docs":{"375":{"tf":2.449489742783178},"414":{"tf":1.0},"418":{"tf":1.0},"96":{"tf":1.0}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"286":{"tf":1.0},"300":{"tf":1.4142135623730951},"6":{"tf":1.0}}}},"c":{"df":0,"docs":{},"k":{"df":10,"docs":{"161":{"tf":1.0},"209":{"tf":1.0},"444":{"tf":2.0},"451":{"tf":1.0},"73":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"87":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"177":{"tf":1.0}}}},"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"442":{"tf":1.0}}}}},"r":{"d":{"df":5,"docs":{"276":{"tf":1.0},"326":{"tf":1.0},"330":{"tf":1.0},"372":{"tf":1.0},"417":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":6,"docs":{"183":{"tf":1.0},"278":{"tf":1.0},"291":{"tf":1.4142135623730951},"293":{"tf":1.0},"300":{"tf":1.0},"85":{"tf":2.0}},"e":{"d":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"4":{"5":{"df":1,"docs":{"277":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"t":{"df":3,"docs":{"204":{"tf":1.0},"207":{"tf":1.0},"348":{"tf":1.0}},"e":{"d":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"175":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":2,"docs":{"355":{"tf":1.0},"361":{"tf":1.0}}},"i":{"c":{"/":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"292":{"tf":1.0},"389":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"292":{"tf":1.7320508075688772},"389":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}}}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"447":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":4,"docs":{"292":{"tf":1.0},"375":{"tf":1.4142135623730951},"400":{"tf":1.0},"418":{"tf":1.0}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":8,"docs":{"232":{"tf":1.0},"233":{"tf":1.0},"238":{"tf":1.0},"246":{"tf":1.0},"255":{"tf":1.0},"258":{"tf":1.0},"375":{"tf":1.0},"380":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"347":{"tf":1.0}}}}}}}},"u":{"df":18,"docs":{"104":{"tf":1.0},"108":{"tf":1.0},"113":{"tf":1.0},"124":{"tf":1.4142135623730951},"127":{"tf":1.0},"181":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"185":{"tf":1.4142135623730951},"188":{"tf":1.0},"204":{"tf":1.7320508075688772},"206":{"tf":1.0},"207":{"tf":1.0},"318":{"tf":1.0},"380":{"tf":1.0},"396":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.0}},"s":{"=":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"180":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"348":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"<":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"180":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"t":{"df":3,"docs":{"104":{"tf":1.0},"164":{"tf":1.0},"17":{"tf":1.0}}}}}},"d":{"df":1,"docs":{"300":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"175":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"317":{"tf":1.4142135623730951}}}},"o":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"287":{"tf":1.4142135623730951},"293":{"tf":1.0},"413":{"tf":1.0}}}},"df":5,"docs":{"177":{"tf":1.0},"178":{"tf":1.0},"244":{"tf":1.0},"419":{"tf":1.0},"82":{"tf":1.0}},"é":{"df":3,"docs":{"234":{"tf":1.0},"237":{"tf":1.0},"240":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"287":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":4,"docs":{"274":{"tf":1.0},"310":{"tf":1.0},"43":{"tf":1.0},"76":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":17,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.0},"107":{"tf":1.4142135623730951},"108":{"tf":1.0},"115":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.7320508075688772},"133":{"tf":1.7320508075688772},"134":{"tf":1.0},"187":{"tf":1.0},"317":{"tf":1.0},"349":{"tf":1.0},"375":{"tf":1.0},"424":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}},"é":{"df":2,"docs":{"169":{"tf":1.0},"175":{"tf":1.0}}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"119":{"tf":1.0},"167":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"257":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"234":{"tf":1.0},"236":{"tf":1.4142135623730951},"258":{"tf":1.0},"375":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":6,"docs":{"284":{"tf":1.0},"289":{"tf":1.0},"314":{"tf":1.0},"372":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"356":{"tf":1.0},"369":{"tf":1.0},"421":{"tf":1.0}}}},"é":{"df":1,"docs":{"3":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"u":{"b":{"df":72,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}}},"u":{"b":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":6,"docs":{"169":{"tf":2.0},"287":{"tf":1.7320508075688772},"356":{"tf":1.4142135623730951},"370":{"tf":1.0},"413":{"tf":2.449489742783178},"82":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"|":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"c":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{":":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":1,"docs":{"393":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"317":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":2,"docs":{"164":{"tf":1.0},"175":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"85":{"tf":1.0}}}}}}}}}},"è":{"df":3,"docs":{"18":{"tf":1.0},"20":{"tf":1.0},"424":{"tf":1.0}}}},"df":0,"docs":{},"h":{"df":1,"docs":{"19":{"tf":1.0}}}},"d":{"df":0,"docs":{},"o":{"df":44,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":2.0},"107":{"tf":1.4142135623730951},"108":{"tf":2.23606797749979},"109":{"tf":2.6457513110645907},"113":{"tf":1.4142135623730951},"115":{"tf":1.7320508075688772},"116":{"tf":2.6457513110645907},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"121":{"tf":2.23606797749979},"122":{"tf":1.7320508075688772},"124":{"tf":2.0},"126":{"tf":1.4142135623730951},"127":{"tf":1.7320508075688772},"129":{"tf":1.0},"130":{"tf":1.7320508075688772},"133":{"tf":1.0},"151":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"188":{"tf":1.7320508075688772},"189":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.4142135623730951},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"201":{"tf":1.0},"203":{"tf":1.4142135623730951},"204":{"tf":2.0},"205":{"tf":2.0},"206":{"tf":1.4142135623730951},"207":{"tf":2.0},"212":{"tf":1.0},"213":{"tf":1.4142135623730951},"288":{"tf":1.0},"300":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"166":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}},"df":1,"docs":{"442":{"tf":1.0}}},"t":{"df":2,"docs":{"147":{"tf":1.0},"211":{"tf":1.0}}}}}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"é":{"df":1,"docs":{"351":{"tf":1.0}}}}}}},"i":{"df":1,"docs":{"7":{"tf":1.0}},"t":{"df":3,"docs":{"156":{"tf":1.0},"3":{"tf":1.0},"362":{"tf":1.0}}},"v":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":6,"docs":{"293":{"tf":1.0},"301":{"tf":1.0},"414":{"tf":1.0},"6":{"tf":1.0},"84":{"tf":1.0},"95":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"278":{"tf":1.0},"73":{"tf":1.0},"85":{"tf":1.4142135623730951}}}},"i":{"df":4,"docs":{"175":{"tf":1.0},"346":{"tf":1.0},"8":{"tf":1.0},"85":{"tf":1.0}}},"r":{"df":1,"docs":{"259":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"295":{"tf":1.0},"390":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":2,"docs":{"59":{"tf":1.0},"9":{"tf":1.0}}}}},"s":{"df":6,"docs":{"278":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"8":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":7,"docs":{"165":{"tf":1.0},"23":{"tf":1.0},"327":{"tf":1.0},"353":{"tf":1.0},"360":{"tf":1.0},"376":{"tf":1.0},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"442":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0}}}}}}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"81":{"tf":1.0}}}}}}}}},"r":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":2,"docs":{"184":{"tf":1.0},"382":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":86,"docs":{"1":{"tf":1.0},"101":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":1.0},"113":{"tf":1.0},"120":{"tf":1.0},"122":{"tf":1.0},"133":{"tf":1.4142135623730951},"14":{"tf":1.0},"147":{"tf":1.4142135623730951},"150":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.7320508075688772},"161":{"tf":1.0},"163":{"tf":1.0},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"17":{"tf":1.7320508075688772},"172":{"tf":1.0},"173":{"tf":1.4142135623730951},"177":{"tf":1.4142135623730951},"178":{"tf":1.4142135623730951},"18":{"tf":1.7320508075688772},"183":{"tf":1.0},"186":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"19":{"tf":1.4142135623730951},"191":{"tf":1.0},"192":{"tf":1.0},"194":{"tf":1.0},"198":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951},"210":{"tf":1.0},"211":{"tf":1.4142135623730951},"212":{"tf":1.0},"217":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"244":{"tf":1.0},"248":{"tf":1.0},"276":{"tf":1.0},"287":{"tf":1.0},"291":{"tf":1.0},"294":{"tf":1.7320508075688772},"296":{"tf":1.0},"327":{"tf":1.0},"331":{"tf":1.0},"346":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.7320508075688772},"360":{"tf":1.0},"363":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"376":{"tf":1.4142135623730951},"381":{"tf":1.0},"393":{"tf":1.7320508075688772},"396":{"tf":1.0},"397":{"tf":1.4142135623730951},"4":{"tf":1.0},"412":{"tf":1.0},"419":{"tf":1.4142135623730951},"442":{"tf":1.0},"443":{"tf":1.0},"449":{"tf":1.4142135623730951},"451":{"tf":1.0},"6":{"tf":1.0},"65":{"tf":1.0},"72":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"86":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951},"94":{"tf":1.0},"95":{"tf":1.7320508075688772}},"f":{"a":{"c":{"df":1,"docs":{"208":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"16":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"167":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"v":{"c":{"df":2,"docs":{"348":{"tf":3.4641016151377544},"426":{"tf":4.0}}},"df":0,"docs":{}},"w":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"318":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"181":{"tf":1.0}}}}}}}},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}}}},"df":11,"docs":{"1":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":1.0},"177":{"tf":1.7320508075688772},"180":{"tf":1.7320508075688772},"184":{"tf":1.4142135623730951},"186":{"tf":1.0},"370":{"tf":1.4142135623730951},"380":{"tf":1.0},"381":{"tf":1.0},"413":{"tf":1.4142135623730951}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"m":{"df":7,"docs":{"133":{"tf":1.0},"166":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"150":{"tf":1.0}},"n":{"df":0,"docs":{},"i":{"df":3,"docs":{"160":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0}},"s":{"df":4,"docs":{"146":{"tf":1.0},"160":{"tf":1.0},"171":{"tf":1.0},"23":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"x":{"df":3,"docs":{"105":{"tf":1.0},"59":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":21,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"107":{"tf":1.0},"113":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"118":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.4142135623730951},"126":{"tf":1.0},"127":{"tf":1.0},"130":{"tf":1.0},"133":{"tf":1.0},"172":{"tf":1.0},"188":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":1.0},"213":{"tf":1.0},"252":{"tf":1.0},"300":{"tf":1.0}}}}},"d":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"446":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"446":{"tf":1.0}}}}}}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"4":{"5":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":10,"docs":{"113":{"tf":1.0},"124":{"tf":1.0},"127":{"tf":1.4142135623730951},"185":{"tf":1.0},"189":{"tf":2.0},"444":{"tf":1.0},"446":{"tf":2.0},"73":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0}}},"df":1,"docs":{"199":{"tf":1.0}}}},"è":{"df":0,"docs":{},"m":{"df":20,"docs":{"103":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"134":{"tf":1.0},"168":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"232":{"tf":1.7320508075688772},"244":{"tf":1.0},"288":{"tf":1.4142135623730951},"373":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"419":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}}}}}}},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{".":{"*":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"<":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"131":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{".":{"*":{"df":0,"docs":{},"|":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"<":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"131":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"é":{"df":1,"docs":{"290":{"tf":1.0}}}},"t":{"df":18,"docs":{"10":{"tf":1.0},"102":{"tf":1.0},"167":{"tf":1.0},"169":{"tf":1.0},"17":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"22":{"tf":1.0},"357":{"tf":1.0},"383":{"tf":1.0},"388":{"tf":1.0},"391":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.0},"403":{"tf":1.0},"445":{"tf":1.0},"67":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"17":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"416":{"tf":1.4142135623730951}}}},"df":1,"docs":{"420":{"tf":1.0}},"é":{"df":1,"docs":{"147":{"tf":1.0}}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":5,"docs":{"281":{"tf":1.0},"345":{"tf":1.0},"414":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"327":{"tf":1.0}}}}}}}}}},"v":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"181":{"tf":1.0}}}}}}}},"û":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}},"’":{"a":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"2":{"tf":1.0},"276":{"tf":1.0},"71":{"tf":1.0}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"82":{"tf":1.0}}}},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"451":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"287":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":4,"docs":{"210":{"tf":1.0},"296":{"tf":1.0},"327":{"tf":1.0},"85":{"tf":1.0}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"146":{"tf":1.4142135623730951},"242":{"tf":1.0},"85":{"tf":1.0}}}}}},"t":{"[":{"df":0,"docs":{},"t":{"df":0,"docs":{},"â":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":1,"docs":{"352":{"tf":1.0}}}}},"df":0,"docs":{}}}},"a":{"b":{"df":0,"docs":{},"l":{"df":11,"docs":{"175":{"tf":1.0},"232":{"tf":1.0},"239":{"tf":1.0},"240":{"tf":1.0},"241":{"tf":1.4142135623730951},"293":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"372":{"tf":1.0},"414":{"tf":1.0},"421":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"u":{"df":1,"docs":{"153":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":8,"docs":{"13":{"tf":1.0},"16":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0}},"g":{"df":2,"docs":{"373":{"tf":1.7320508075688772},"375":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"207":{"tf":1.4142135623730951}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"/":{"d":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"323":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"113":{"tf":1.0},"292":{"tf":1.4142135623730951},"389":{"tf":1.0}}}}},"df":1,"docs":{"292":{"tf":1.0}}},"df":0,"docs":{}}}}}},"n":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":2,"docs":{"253":{"tf":1.0},"4":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"df":24,"docs":{"146":{"tf":1.0},"165":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"301":{"tf":1.0},"349":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"89":{"tf":1.0}},"r":{"df":1,"docs":{"16":{"tf":1.0}}}}},"r":{"d":{"df":1,"docs":{"107":{"tf":1.0}}},"df":2,"docs":{"171":{"tf":1.0},"180":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{"df":1,"docs":{"293":{"tf":1.0}}},"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"169":{"tf":1.0}}}},"t":{"df":2,"docs":{"348":{"tf":1.0},"6":{"tf":1.0}}},"y":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"277":{"tf":1.0}}}},"df":0,"docs":{}}},"b":{"df":5,"docs":{"169":{"tf":1.0},"287":{"tf":1.0},"356":{"tf":1.0},"413":{"tf":1.0},"82":{"tf":1.0}}},"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"424":{"tf":1.0}}}},"df":18,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"116":{"tf":1.0},"121":{"tf":1.0},"124":{"tf":1.0},"130":{"tf":1.0},"133":{"tf":1.0},"16":{"tf":2.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"203":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"352":{"tf":1.0},"362":{"tf":1.0},"83":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":2,"docs":{"372":{"tf":1.0},"427":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"427":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"372":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.4142135623730951}}}}}},"df":9,"docs":{"179":{"tf":1.0},"313":{"tf":1.0},"317":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"380":{"tf":1.0},"382":{"tf":1.7320508075688772},"424":{"tf":1.0},"425":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":3,"docs":{"372":{"tf":1.0},"383":{"tf":1.0},"402":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"314":{"tf":1.0},"325":{"tf":1.0}}}},"df":2,"docs":{"314":{"tf":1.0},"327":{"tf":1.0}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":7,"docs":{"15":{"tf":1.0},"280":{"tf":1.0},"286":{"tf":1.0},"3":{"tf":1.0},"75":{"tf":1.0},"81":{"tf":1.0},"9":{"tf":1.0}}}}}}}},"df":9,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"300":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.4142135623730951}},"e":{"df":15,"docs":{"105":{"tf":1.0},"109":{"tf":1.0},"121":{"tf":1.0},"127":{"tf":1.0},"189":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"201":{"tf":1.0}}},"l":{"df":1,"docs":{"442":{"tf":1.0}}},"m":{"df":0,"docs":{},"p":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"312":{"tf":1.0}}}}},"df":5,"docs":{"15":{"tf":1.0},"207":{"tf":1.0},"286":{"tf":1.0},"377":{"tf":1.4142135623730951},"81":{"tf":1.0}},"l":{"a":{"df":0,"docs":{},"t":{"df":85,"docs":{"12":{"tf":1.0},"133":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"161":{"tf":1.0},"2":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"235":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"287":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"375":{"tf":1.7320508075688772},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"389":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.0},"403":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"418":{"tf":1.0},"42":{"tf":1.0},"428":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"442":{"tf":1.4142135623730951},"451":{"tf":1.4142135623730951},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"e":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"451":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"451":{"tf":1.0},"82":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"451":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"161":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"n":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"r":{"df":2,"docs":{"358":{"tf":1.0},"447":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":1,"docs":{"189":{"tf":1.0}}}},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":7,"docs":{"106":{"tf":1.0},"16":{"tf":1.0},"160":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"294":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"(":{"\'":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"318":{"tf":1.0}}}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"328":{"tf":1.0}}}}}},"df":0,"docs":{}},".":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"e":{"(":{"\'":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},":":{"df":0,"docs":{},"e":{"2":{"df":5,"docs":{"313":{"tf":1.0},"320":{"tf":1.0},"324":{"tf":1.0},"334":{"tf":1.0},"403":{"tf":1.0}},"e":{":":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"313":{"tf":1.0},"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"313":{"tf":1.0},"324":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"324":{"tf":1.0},"327":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"i":{"df":2,"docs":{"313":{"tf":1.0},"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"316":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"316":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":50,"docs":{"107":{"tf":1.0},"119":{"tf":1.0},"123":{"tf":2.0},"124":{"tf":1.0},"146":{"tf":1.0},"160":{"tf":1.0},"163":{"tf":2.23606797749979},"164":{"tf":1.0},"166":{"tf":1.0},"171":{"tf":1.0},"174":{"tf":2.0},"20":{"tf":1.0},"206":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"235":{"tf":1.0},"277":{"tf":1.4142135623730951},"278":{"tf":1.4142135623730951},"279":{"tf":1.4142135623730951},"296":{"tf":1.4142135623730951},"301":{"tf":1.4142135623730951},"310":{"tf":1.4142135623730951},"312":{"tf":2.6457513110645907},"313":{"tf":1.4142135623730951},"314":{"tf":2.6457513110645907},"315":{"tf":1.0},"316":{"tf":2.0},"317":{"tf":2.23606797749979},"318":{"tf":1.7320508075688772},"319":{"tf":1.4142135623730951},"320":{"tf":3.1622776601683795},"321":{"tf":1.0},"322":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951},"325":{"tf":2.449489742783178},"326":{"tf":1.4142135623730951},"327":{"tf":1.4142135623730951},"328":{"tf":1.7320508075688772},"329":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.4142135623730951},"333":{"tf":1.0},"334":{"tf":2.0},"380":{"tf":1.0},"389":{"tf":1.4142135623730951},"395":{"tf":1.0},"397":{"tf":2.6457513110645907},"403":{"tf":1.7320508075688772},"447":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"166":{"tf":1.0},"316":{"tf":1.0},"397":{"tf":1.0},"419":{"tf":1.0}}},"z":{"df":2,"docs":{"300":{"tf":1.0},"451":{"tf":1.0}}}},"s":{"/":{"df":0,"docs":{},"e":{"2":{"df":1,"docs":{"325":{"tf":1.0}},"e":{"/":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"318":{"tf":1.0},"320":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"334":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"317":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"316":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"é":{"df":1,"docs":{"95":{"tf":1.0}}}}},"x":{"df":0,"docs":{},"t":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"373":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"241":{"tf":1.4142135623730951},"318":{"tf":1.0},"319":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"333":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"é":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":2,"docs":{"348":{"tf":1.4142135623730951},"349":{"tf":1.0}}}}}}},"è":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"333":{"tf":1.0}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"348":{"tf":1.0},"349":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":3,"docs":{"208":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":9,"docs":{"104":{"tf":1.0},"133":{"tf":1.0},"175":{"tf":1.0},"183":{"tf":1.4142135623730951},"318":{"tf":1.0},"354":{"tf":1.0},"380":{"tf":1.0},"397":{"tf":1.0},"84":{"tf":1.4142135623730951}}}}},"r":{"df":2,"docs":{"118":{"tf":1.0},"446":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"z":{"df":1,"docs":{"241":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"21":{"tf":1.0},"23":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"l":{"df":2,"docs":{"377":{"tf":1.0},"426":{"tf":1.0}}},"r":{"df":1,"docs":{"20":{"tf":1.0}}}}},"l":{"df":7,"docs":{"124":{"tf":1.0},"2":{"tf":1.0},"443":{"tf":1.4142135623730951},"445":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.0},"89":{"tf":1.0}},"n":{"df":0,"docs":{},"p":{"df":9,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"212":{"tf":1.0},"88":{"tf":1.0}}}},"s":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"445":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"v":{"1":{".":{"2":{"df":1,"docs":{"288":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"m":{"df":0,"docs":{},"p":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"205":{"tf":1.7320508075688772}}}}}},"df":2,"docs":{"116":{"tf":1.4142135623730951},"161":{"tf":1.0}}}}}}}}},"p":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"205":{"tf":1.4142135623730951}}}}}},"df":1,"docs":{"109":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.4142135623730951}}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"180":{"tf":1.0}}}}},"df":0,"docs":{}}},"o":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"210":{"tf":1.0},"451":{"tf":1.0}}}}}}}}}},"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"125":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"451":{"tf":1.0}}}}}}}}}}}},"d":{"df":0,"docs":{},"o":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}},"df":2,"docs":{"117":{"tf":1.0},"129":{"tf":1.0}},"i":{"df":1,"docs":{"17":{"tf":1.4142135623730951}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"390":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"393":{"tf":1.0}}}}}}},"df":12,"docs":{"180":{"tf":1.0},"189":{"tf":1.4142135623730951},"194":{"tf":1.0},"208":{"tf":1.0},"313":{"tf":1.0},"37":{"tf":1.0},"375":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.7320508075688772},"449":{"tf":1.0},"8":{"tf":1.0}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"372":{"tf":1.0},"383":{"tf":1.0},"402":{"tf":1.0}}}}},"df":0,"docs":{}},"|":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{")":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"194":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"(":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"414":{"tf":1.0}}}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"df":4,"docs":{"169":{"tf":1.0},"348":{"tf":1.0},"352":{"tf":1.0},"380":{"tf":1.0}}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"<":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"352":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"df":5,"docs":{"148":{"tf":1.4142135623730951},"169":{"tf":1.0},"370":{"tf":1.0},"420":{"tf":1.0},"96":{"tf":1.0}}}}},"n":{"df":13,"docs":{"13":{"tf":1.0},"14":{"tf":1.4142135623730951},"16":{"tf":2.6457513110645907},"17":{"tf":2.23606797749979},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"6":{"tf":1.0},"8":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"300":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":1,"docs":{"97":{"tf":1.0}}}}}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":8,"docs":{"169":{"tf":1.0},"176":{"tf":1.0},"207":{"tf":1.4142135623730951},"277":{"tf":1.0},"294":{"tf":1.0},"72":{"tf":1.0},"84":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{},"p":{"df":1,"docs":{"18":{"tf":1.0}}}},"u":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"364":{"tf":1.0}}}}}},"df":17,"docs":{"189":{"tf":1.0},"2":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"288":{"tf":1.0},"292":{"tf":1.0},"312":{"tf":1.0},"324":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.0},"362":{"tf":1.0},"381":{"tf":1.0},"382":{"tf":1.0},"383":{"tf":1.7320508075688772},"400":{"tf":1.0},"403":{"tf":1.0},"85":{"tf":1.0}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"18":{"tf":1.0},"442":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"291":{"tf":1.0},"299":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"148":{"tf":1.0},"85":{"tf":1.0}}}}}},"t":{"df":31,"docs":{"16":{"tf":1.4142135623730951},"173":{"tf":1.0},"18":{"tf":1.4142135623730951},"207":{"tf":1.0},"214":{"tf":1.0},"217":{"tf":1.0},"235":{"tf":1.0},"276":{"tf":1.0},"288":{"tf":1.0},"293":{"tf":1.4142135623730951},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"351":{"tf":1.0},"355":{"tf":1.0},"361":{"tf":1.0},"375":{"tf":1.0},"388":{"tf":1.0},"389":{"tf":1.0},"393":{"tf":2.0},"394":{"tf":1.0},"396":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.4142135623730951},"418":{"tf":1.0},"451":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"88":{"tf":1.0}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"414":{"tf":1.0}},"r":{"df":1,"docs":{"394":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"393":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"k":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"a":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":19,"docs":{"1":{"tf":1.0},"168":{"tf":1.4142135623730951},"169":{"tf":1.0},"176":{"tf":1.0},"178":{"tf":1.4142135623730951},"179":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.4142135623730951},"186":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.4142135623730951},"195":{"tf":1.0},"196":{"tf":1.0},"208":{"tf":1.4142135623730951},"211":{"tf":1.0},"370":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"74":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"168":{"tf":1.0},"176":{"tf":1.0},"186":{"tf":1.0}}}}},"é":{"df":1,"docs":{"393":{"tf":1.0}}}},"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"k":{"df":1,"docs":{"445":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"361":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0}}}},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"396":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"348":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"346":{"tf":1.0}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"119":{"tf":1.0},"150":{"tf":1.0},"171":{"tf":1.0}}}}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":5,"docs":{"146":{"tf":1.0},"153":{"tf":1.0},"171":{"tf":1.0},"419":{"tf":1.0},"83":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"442":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":6,"docs":{"133":{"tf":1.0},"376":{"tf":1.0},"383":{"tf":1.0},"393":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0}}}}}},"ç":{"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"181":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":10,"docs":{"104":{"tf":1.0},"133":{"tf":1.0},"16":{"tf":1.0},"171":{"tf":1.0},"19":{"tf":1.0},"202":{"tf":1.0},"286":{"tf":1.0},"292":{"tf":1.0},"394":{"tf":1.0},"98":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"428":{"tf":1.0}}}}}}},"_":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"373":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"428":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":4,"docs":{"171":{"tf":1.0},"174":{"tf":1.7320508075688772},"413":{"tf":1.0},"428":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"{":{"a":{"df":0,"docs":{},"r":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"174":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"319":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":4,"docs":{"173":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.4142135623730951},"375":{"tf":1.0}}}}}},"p":{"df":1,"docs":{"163":{"tf":1.0}}}},"o":{"df":0,"docs":{},"i":{"df":5,"docs":{"169":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"87":{"tf":1.0},"96":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"m":{"df":1,"docs":{"277":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"v":{"df":5,"docs":{"166":{"tf":1.0},"244":{"tf":1.0},"288":{"tf":1.0},"451":{"tf":1.0},"82":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"174":{"tf":1.0}}}},"r":{"df":1,"docs":{"104":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"e":{"df":13,"docs":{"122":{"tf":1.0},"124":{"tf":1.0},"127":{"tf":2.23606797749979},"133":{"tf":1.0},"189":{"tf":3.3166247903554},"211":{"tf":1.0},"243":{"tf":2.0},"249":{"tf":1.0},"317":{"tf":1.0},"319":{"tf":1.0},"377":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}}}},"y":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"+":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"u":{"df":13,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":2.0},"17":{"tf":1.7320508075688772},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"20":{"tf":1.7320508075688772},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"5":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951}},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"443":{"tf":1.0}},"r":{"df":1,"docs":{"74":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"257":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":91,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"14":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"15":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"277":{"tf":2.23606797749979},"278":{"tf":1.4142135623730951},"28":{"tf":1.0},"282":{"tf":1.0},"283":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"444":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":2.8284271247461903},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"7":{"tf":1.4142135623730951},"70":{"tf":1.0},"72":{"tf":2.449489742783178},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":8,"docs":{"250":{"tf":1.0},"3":{"tf":1.7320508075688772},"372":{"tf":1.0},"377":{"tf":1.0},"393":{"tf":1.0},"413":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"314":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"208":{"tf":1.0}}}}}}},"â":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":9,"docs":{"148":{"tf":1.0},"169":{"tf":1.0},"279":{"tf":1.0},"352":{"tf":1.4142135623730951},"357":{"tf":1.0},"420":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0},"96":{"tf":1.0}}}}},"df":0,"docs":{}},"é":{"df":0,"docs":{},"l":{"df":0,"docs":{},"é":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":3,"docs":{"16":{"tf":1.0},"18":{"tf":1.0},"23":{"tf":1.4142135623730951}}}}}}}}}},"’":{"a":{"c":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"5":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":4,"docs":{"151":{"tf":1.0},"288":{"tf":1.0},"291":{"tf":1.0},"81":{"tf":1.0}}}}}}},"df":8,"docs":{"124":{"tf":1.0},"133":{"tf":1.0},"166":{"tf":1.0},"185":{"tf":1.0},"193":{"tf":1.0},"205":{"tf":1.4142135623730951},"291":{"tf":1.0},"84":{"tf":1.0}},"f":{"df":0,"docs":{},"w":{"df":6,"docs":{"108":{"tf":2.23606797749979},"127":{"tf":1.4142135623730951},"188":{"tf":1.7320508075688772},"189":{"tf":1.7320508075688772},"214":{"tf":1.0},"88":{"tf":1.0}}}},"i":{",":{"df":0,"docs":{},"h":{"df":1,"docs":{"348":{"tf":1.0}}}},"df":17,"docs":{"102":{"tf":1.0},"123":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.4142135623730951},"247":{"tf":1.0},"248":{"tf":1.0},"281":{"tf":1.0},"318":{"tf":1.0},"324":{"tf":1.0},"325":{"tf":1.0},"333":{"tf":1.0},"348":{"tf":3.1622776601683795},"375":{"tf":1.4142135623730951},"417":{"tf":1.0},"438":{"tf":1.0},"96":{"tf":1.0}}},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"132":{"tf":1.0},"181":{"tf":1.0},"242":{"tf":1.0}}}}}}}}}},"n":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"133":{"tf":1.0}}}}}}}},"b":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"206":{"tf":1.0}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"199":{"tf":1.0}}}}},"df":264,"docs":{"1":{"tf":2.449489742783178},"102":{"tf":1.4142135623730951},"104":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.4142135623730951},"123":{"tf":1.0},"128":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.4142135623730951},"137":{"tf":1.0},"138":{"tf":1.4142135623730951},"139":{"tf":1.0},"14":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"141":{"tf":1.0},"142":{"tf":1.4142135623730951},"143":{"tf":1.0},"144":{"tf":1.4142135623730951},"145":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":2.23606797749979},"15":{"tf":1.4142135623730951},"152":{"tf":1.0},"159":{"tf":1.0},"16":{"tf":2.8284271247461903},"164":{"tf":1.4142135623730951},"169":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"171":{"tf":1.0},"173":{"tf":1.4142135623730951},"174":{"tf":1.4142135623730951},"175":{"tf":1.7320508075688772},"176":{"tf":1.4142135623730951},"177":{"tf":1.0},"178":{"tf":1.0},"179":{"tf":1.7320508075688772},"18":{"tf":2.0},"181":{"tf":1.0},"184":{"tf":1.4142135623730951},"185":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.4142135623730951},"19":{"tf":2.6457513110645907},"190":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":2.0},"20":{"tf":1.7320508075688772},"206":{"tf":1.0},"21":{"tf":1.7320508075688772},"210":{"tf":1.0},"213":{"tf":1.7320508075688772},"214":{"tf":1.0},"215":{"tf":1.0},"216":{"tf":1.4142135623730951},"217":{"tf":1.0},"218":{"tf":1.4142135623730951},"219":{"tf":1.0},"220":{"tf":1.4142135623730951},"221":{"tf":1.0},"222":{"tf":1.4142135623730951},"223":{"tf":1.0},"224":{"tf":1.4142135623730951},"225":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"227":{"tf":1.0},"228":{"tf":1.4142135623730951},"229":{"tf":1.0},"23":{"tf":1.0},"230":{"tf":1.4142135623730951},"232":{"tf":1.0},"234":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.7320508075688772},"244":{"tf":1.7320508075688772},"25":{"tf":1.0},"252":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0},"26":{"tf":1.4142135623730951},"260":{"tf":1.0},"261":{"tf":1.4142135623730951},"262":{"tf":1.0},"263":{"tf":1.4142135623730951},"264":{"tf":1.0},"265":{"tf":1.4142135623730951},"266":{"tf":1.0},"267":{"tf":1.4142135623730951},"268":{"tf":1.0},"269":{"tf":1.4142135623730951},"27":{"tf":1.0},"270":{"tf":1.0},"271":{"tf":1.4142135623730951},"272":{"tf":1.0},"273":{"tf":1.4142135623730951},"274":{"tf":1.0},"275":{"tf":1.4142135623730951},"276":{"tf":1.0},"277":{"tf":2.23606797749979},"278":{"tf":1.0},"279":{"tf":2.23606797749979},"28":{"tf":1.4142135623730951},"282":{"tf":1.0},"283":{"tf":1.4142135623730951},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":2.23606797749979},"288":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"296":{"tf":1.4142135623730951},"299":{"tf":1.0},"3":{"tf":1.4142135623730951},"30":{"tf":1.4142135623730951},"301":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.4142135623730951},"304":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"306":{"tf":1.0},"307":{"tf":1.4142135623730951},"308":{"tf":1.0},"309":{"tf":1.4142135623730951},"31":{"tf":1.0},"312":{"tf":1.0},"316":{"tf":1.7320508075688772},"317":{"tf":1.4142135623730951},"319":{"tf":1.0},"32":{"tf":1.4142135623730951},"321":{"tf":1.0},"322":{"tf":2.0},"327":{"tf":1.0},"328":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":2.6457513110645907},"332":{"tf":2.0},"334":{"tf":1.7320508075688772},"335":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"337":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"339":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"341":{"tf":1.0},"342":{"tf":1.4142135623730951},"343":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"345":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":2.0},"349":{"tf":1.4142135623730951},"35":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.4142135623730951},"354":{"tf":1.0},"355":{"tf":1.7320508075688772},"36":{"tf":1.4142135623730951},"363":{"tf":2.23606797749979},"364":{"tf":1.0},"365":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"367":{"tf":1.0},"368":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"382":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.4142135623730951},"386":{"tf":1.0},"387":{"tf":1.4142135623730951},"39":{"tf":1.0},"393":{"tf":1.0},"396":{"tf":1.0},"399":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.4142135623730951},"404":{"tf":1.0},"405":{"tf":1.4142135623730951},"406":{"tf":1.0},"407":{"tf":1.4142135623730951},"408":{"tf":1.0},"409":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"410":{"tf":1.0},"411":{"tf":1.4142135623730951},"412":{"tf":1.0},"416":{"tf":1.0},"417":{"tf":1.0},"42":{"tf":1.4142135623730951},"420":{"tf":2.0},"428":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"431":{"tf":1.4142135623730951},"432":{"tf":1.0},"433":{"tf":1.4142135623730951},"434":{"tf":1.0},"435":{"tf":1.4142135623730951},"436":{"tf":1.0},"437":{"tf":1.4142135623730951},"438":{"tf":1.0},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"440":{"tf":1.0},"441":{"tf":1.4142135623730951},"442":{"tf":1.7320508075688772},"448":{"tf":1.0},"449":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.4142135623730951},"47":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"49":{"tf":1.0},"5":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"6":{"tf":2.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"63":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":2.23606797749979},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"8":{"tf":1.7320508075688772},"81":{"tf":1.0},"82":{"tf":2.0},"83":{"tf":1.7320508075688772},"86":{"tf":1.7320508075688772},"88":{"tf":1.4142135623730951},"89":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.4142135623730951},"92":{"tf":1.0},"93":{"tf":1.4142135623730951},"94":{"tf":1.0},"95":{"tf":2.0},"98":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":2,"docs":{"85":{"tf":1.0},"88":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"i":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"167":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":11,"docs":{"166":{"tf":1.0},"189":{"tf":1.4142135623730951},"21":{"tf":1.0},"23":{"tf":1.0},"241":{"tf":1.0},"242":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"287":{"tf":1.0},"444":{"tf":1.0},"97":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":7,"docs":{"277":{"tf":1.0},"279":{"tf":1.0},"310":{"tf":1.0},"312":{"tf":1.4142135623730951},"320":{"tf":1.0},"389":{"tf":1.0},"396":{"tf":1.0}}}}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"133":{"tf":1.0},"193":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"293":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"359":{"tf":1.0}}}}}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"316":{"tf":1.4142135623730951},"401":{"tf":1.0}}}},"df":0,"docs":{}}}},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":12,"docs":{"115":{"tf":1.0},"180":{"tf":1.4142135623730951},"300":{"tf":1.0},"346":{"tf":1.0},"348":{"tf":2.0},"349":{"tf":2.6457513110645907},"351":{"tf":1.4142135623730951},"352":{"tf":1.4142135623730951},"353":{"tf":1.0},"355":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.4142135623730951}},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"352":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"d":{"(":{"d":{"b":{"df":1,"docs":{"424":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"357":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"348":{"tf":1.4142135623730951},"349":{"tf":1.4142135623730951},"351":{"tf":1.4142135623730951},"357":{"tf":1.0}}}}}}}}}}},"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"241":{"tf":1.0},"255":{"tf":1.0},"425":{"tf":1.0}}}},"b":{"df":0,"docs":{},"i":{"df":2,"docs":{"241":{"tf":1.0},"255":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"351":{"tf":1.0}}},"y":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"353":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":8,"docs":{"109":{"tf":1.0},"178":{"tf":1.0},"291":{"tf":1.0},"300":{"tf":1.0},"318":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772},"88":{"tf":1.0}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":5,"docs":{"177":{"tf":1.0},"184":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"424":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"180":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":3,"docs":{"121":{"tf":1.0},"279":{"tf":1.0},"363":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"l":{"df":3,"docs":{"199":{"tf":1.0},"243":{"tf":1.0},"83":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"157":{"tf":1.0},"359":{"tf":1.0},"84":{"tf":1.0}}}},"df":2,"docs":{"316":{"tf":2.0},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"193":{"tf":1.0}}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"<":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"197":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"=":{"<":{"a":{"c":{"df":0,"docs":{},"m":{"df":1,"docs":{"123":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"{":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"377":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"=":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"123":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},">":{"@":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":8,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"116":{"tf":1.0},"122":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"@":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"166":{"tf":1.0}}}}}}},"_":{"df":0,"docs":{},"i":{"d":{"df":7,"docs":{"393":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.7320508075688772},"425":{"tf":1.0},"426":{"tf":1.4142135623730951},"427":{"tf":2.0},"429":{"tf":1.0}}},"df":0,"docs":{}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"286":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":25,"docs":{"108":{"tf":1.4142135623730951},"113":{"tf":1.0},"151":{"tf":1.4142135623730951},"153":{"tf":1.0},"166":{"tf":2.0},"189":{"tf":1.0},"199":{"tf":1.0},"208":{"tf":1.0},"291":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.0},"393":{"tf":1.0},"396":{"tf":1.4142135623730951},"399":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.0},"423":{"tf":1.7320508075688772},"426":{"tf":1.7320508075688772},"427":{"tf":1.0},"428":{"tf":2.23606797749979},"429":{"tf":2.23606797749979},"86":{"tf":1.4142135623730951},"88":{"tf":1.0},"95":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"m":{"df":5,"docs":{"330":{"tf":1.7320508075688772},"332":{"tf":1.0},"423":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":2.23606797749979}},"e":{"=":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"&":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"=":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"206":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"s":{"(":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"241":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"360":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"r":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"161":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"161":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"85":{"tf":1.0}}}}}}},"df":2,"docs":{"166":{"tf":1.0},"177":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"159":{"tf":1.0},"185":{"tf":1.0},"357":{"tf":1.0}},"i":{"df":4,"docs":{"107":{"tf":1.0},"146":{"tf":1.0},"351":{"tf":1.0},"356":{"tf":1.0}},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":32,"docs":{"10":{"tf":1.0},"174":{"tf":1.0},"2":{"tf":1.0},"223":{"tf":1.0},"243":{"tf":1.0},"286":{"tf":1.0},"3":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":2.23606797749979},"354":{"tf":1.0},"360":{"tf":1.0},"375":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"377":{"tf":1.0},"379":{"tf":1.0},"396":{"tf":1.0},"4":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"422":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.4142135623730951},"5":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.0},"84":{"tf":1.0}}}}}}},"df":20,"docs":{"108":{"tf":1.0},"113":{"tf":1.0},"2":{"tf":1.4142135623730951},"214":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"244":{"tf":1.4142135623730951},"292":{"tf":1.0},"316":{"tf":1.0},"322":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"373":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"397":{"tf":1.0},"45":{"tf":1.0},"451":{"tf":1.0},"5":{"tf":1.0},"8":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"291":{"tf":1.0},"84":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"82":{"tf":1.0}}}},"é":{"df":2,"docs":{"359":{"tf":1.0},"375":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"241":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"v":{"0":{".":{"1":{"9":{".":{"2":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"9":{".":{"0":{"df":2,"docs":{"293":{"tf":1.4142135623730951},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{"df":5,"docs":{"280":{"tf":1.0},"404":{"tf":1.0},"449":{"tf":1.4142135623730951},"55":{"tf":1.0},"9":{"tf":1.0}}},"2":{"0":{".":{"1":{"1":{".":{"0":{"df":1,"docs":{"288":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"175":{"tf":1.0}}},"6":{"df":1,"docs":{"214":{"tf":1.0}}},"a":{"df":3,"docs":{"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"82":{"tf":1.0}},"l":{"df":1,"docs":{"257":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"_":{"d":{"df":0,"docs":{},"é":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":17,"docs":{"109":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":1.7320508075688772},"247":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":2.23606797749979},"253":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.0},"257":{"tf":1.4142135623730951},"258":{"tf":1.0},"290":{"tf":2.8284271247461903},"382":{"tf":1.0},"442":{"tf":1.0},"83":{"tf":2.23606797749979},"95":{"tf":1.0}}}}},"i":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"426":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"243":{"tf":1.0},"249":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":17,"docs":{"106":{"tf":1.0},"112":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"243":{"tf":1.0},"326":{"tf":1.0},"330":{"tf":1.4142135623730951},"373":{"tf":1.0},"380":{"tf":1.0},"383":{"tf":1.4142135623730951},"393":{"tf":1.7320508075688772},"394":{"tf":1.0},"396":{"tf":1.0},"402":{"tf":2.0},"423":{"tf":1.0},"429":{"tf":1.0},"98":{"tf":1.0}},"é":{"df":2,"docs":{"372":{"tf":1.0},"403":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":2,"docs":{"241":{"tf":1.0},"255":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"355":{"tf":1.0},"82":{"tf":1.0}}}}}},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"2":{"b":{"a":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"207":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"/":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{".":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"189":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":2.0},"205":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"121":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"161":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"/":{".":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{".":{"5":{"4":{"3":{"2":{"df":1,"docs":{"300":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}}}},"w":{"df":0,"docs":{},"w":{"df":0,"docs":{},"w":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"/":{".":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"116":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"(":{"1":{"0":{"0":{"df":1,"docs":{"241":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":1,"docs":{"317":{"tf":1.4142135623730951}},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":29,"docs":{"150":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.7320508075688772},"166":{"tf":1.0},"229":{"tf":1.0},"232":{"tf":1.0},"234":{"tf":1.0},"235":{"tf":1.0},"236":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"244":{"tf":1.0},"249":{"tf":2.23606797749979},"258":{"tf":1.4142135623730951},"285":{"tf":1.0},"290":{"tf":1.0},"3":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"375":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"382":{"tf":1.4142135623730951},"75":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"288":{"tf":1.0}}}}}},"|":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":6,"docs":{"100":{"tf":1.0},"121":{"tf":1.0},"166":{"tf":1.0},"259":{"tf":1.0},"88":{"tf":1.0},"97":{"tf":1.0}},"e":{"c":{"<":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"427":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"428":{"tf":1.0}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"167":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"b":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"202":{"tf":1.0}}}}}},"df":27,"docs":{"107":{"tf":1.0},"119":{"tf":1.0},"128":{"tf":1.0},"134":{"tf":1.4142135623730951},"146":{"tf":1.0},"151":{"tf":1.0},"156":{"tf":1.0},"160":{"tf":1.0},"167":{"tf":1.0},"171":{"tf":1.0},"181":{"tf":1.0},"183":{"tf":1.0},"21":{"tf":1.4142135623730951},"211":{"tf":1.0},"23":{"tf":1.0},"285":{"tf":1.0},"330":{"tf":1.4142135623730951},"333":{"tf":1.7320508075688772},"347":{"tf":1.0},"356":{"tf":1.0},"373":{"tf":1.0},"375":{"tf":1.0},"442":{"tf":1.0},"451":{"tf":1.0},"6":{"tf":1.0},"86":{"tf":1.0},"98":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"375":{"tf":1.0}},"i":{"df":1,"docs":{"375":{"tf":1.0}}},"y":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"16":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":15,"docs":{"101":{"tf":1.0},"146":{"tf":1.4142135623730951},"15":{"tf":1.0},"160":{"tf":1.4142135623730951},"163":{"tf":1.0},"164":{"tf":1.0},"171":{"tf":1.0},"177":{"tf":1.0},"188":{"tf":1.0},"286":{"tf":2.0},"288":{"tf":2.8284271247461903},"291":{"tf":1.4142135623730951},"300":{"tf":1.4142135623730951},"81":{"tf":1.4142135623730951},"84":{"tf":1.0}}}}}},"t":{"df":1,"docs":{"18":{"tf":1.0}}}},"t":{"df":1,"docs":{"447":{"tf":1.0}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}},"x":{"df":1,"docs":{"10":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"211":{"tf":1.0}}}}}},"i":{"a":{"df":55,"docs":{"1":{"tf":1.0},"102":{"tf":1.0},"108":{"tf":1.0},"110":{"tf":1.0},"113":{"tf":1.0},"120":{"tf":1.0},"123":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"16":{"tf":1.0},"164":{"tf":1.0},"189":{"tf":1.0},"193":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"214":{"tf":1.0},"237":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":1.0},"250":{"tf":1.0},"254":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"276":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"296":{"tf":1.0},"312":{"tf":1.0},"323":{"tf":1.4142135623730951},"325":{"tf":1.0},"327":{"tf":1.0},"332":{"tf":1.0},"347":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.0},"361":{"tf":1.0},"364":{"tf":1.7320508075688772},"375":{"tf":1.0},"376":{"tf":1.0},"378":{"tf":1.0},"418":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"449":{"tf":1.4142135623730951},"450":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"82":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.4142135623730951}}},"d":{"df":0,"docs":{},"e":{"df":8,"docs":{"14":{"tf":1.0},"173":{"tf":1.0},"19":{"tf":1.0},"21":{"tf":1.0},"244":{"tf":1.0},"290":{"tf":1.0},"318":{"tf":1.0},"327":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":4,"docs":{"10":{"tf":1.0},"393":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"86":{"tf":1.0}}}},"w":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"179":{"tf":1.0}}}}}}}}}}},"v":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"179":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}},"m":{"df":1,"docs":{"252":{"tf":1.0}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"445":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"21":{"tf":1.0},"419":{"tf":1.0}}}}}},"l":{"df":12,"docs":{"16":{"tf":1.0},"175":{"tf":1.0},"177":{"tf":1.0},"186":{"tf":1.4142135623730951},"22":{"tf":1.0},"232":{"tf":1.0},"258":{"tf":1.0},"299":{"tf":1.0},"313":{"tf":1.0},"318":{"tf":1.0},"357":{"tf":1.0},"86":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"t":{"df":1,"docs":{"16":{"tf":1.0}},"e":{"df":2,"docs":{"153":{"tf":1.0},"23":{"tf":1.0}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"354":{"tf":1.0}}}}},"df":1,"docs":{"327":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"352":{"tf":1.0},"356":{"tf":1.4142135623730951}}},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}}},"m":{"df":2,"docs":{"147":{"tf":1.0},"81":{"tf":1.0}}},"o":{"df":2,"docs":{"18":{"tf":1.0},"86":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":2,"docs":{"17":{"tf":1.0},"21":{"tf":1.0}},"r":{"df":85,"docs":{"12":{"tf":1.4142135623730951},"125":{"tf":1.0},"136":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"144":{"tf":1.4142135623730951},"150":{"tf":1.0},"155":{"tf":1.0},"17":{"tf":1.0},"174":{"tf":1.0},"189":{"tf":1.0},"210":{"tf":1.0},"216":{"tf":1.4142135623730951},"218":{"tf":1.4142135623730951},"220":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"228":{"tf":1.4142135623730951},"23":{"tf":1.0},"230":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"261":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"265":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"283":{"tf":1.4142135623730951},"293":{"tf":1.0},"30":{"tf":1.4142135623730951},"300":{"tf":1.0},"303":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"313":{"tf":1.0},"32":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"342":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"385":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"431":{"tf":1.4142135623730951},"433":{"tf":1.4142135623730951},"435":{"tf":1.4142135623730951},"437":{"tf":1.4142135623730951},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"441":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"86":{"tf":1.0},"91":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"16":{"tf":1.0}}},"u":{"df":0,"docs":{},"m":{"df":4,"docs":{"82":{"tf":1.0},"84":{"tf":2.23606797749979},"85":{"tf":1.0},"88":{"tf":1.0}}},"t":{"df":1,"docs":{"214":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":21,"docs":{"104":{"tf":1.0},"160":{"tf":1.0},"198":{"tf":1.0},"279":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"288":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.7320508075688772},"296":{"tf":1.0},"3":{"tf":1.0},"301":{"tf":1.0},"442":{"tf":1.0},"74":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"86":{"tf":2.449489742783178},"88":{"tf":1.0},"95":{"tf":1.7320508075688772}},"e":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"\\\\":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"|":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"290":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":22,"docs":{"159":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"277":{"tf":1.4142135623730951},"281":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.7320508075688772},"291":{"tf":1.7320508075688772},"292":{"tf":1.4142135623730951},"293":{"tf":1.4142135623730951},"3":{"tf":2.0},"300":{"tf":1.4142135623730951},"442":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"76":{"tf":1.0},"80":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"86":{"tf":1.7320508075688772},"88":{"tf":1.0},"89":{"tf":1.0}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"357":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":4,"docs":{"199":{"tf":1.0},"281":{"tf":1.0},"3":{"tf":1.0},"76":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"n":{"df":1,"docs":{"211":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":3,"docs":{"214":{"tf":1.0},"290":{"tf":1.0},"397":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":4,"docs":{"272":{"tf":1.0},"281":{"tf":1.0},"436":{"tf":1.0},"76":{"tf":1.0}}},"u":{"df":0,"docs":{},"e":{"df":8,"docs":{"124":{"tf":1.0},"16":{"tf":1.0},"232":{"tf":1.0},"281":{"tf":1.0},"287":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"82":{"tf":1.0}}},"l":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":3,"docs":{"168":{"tf":1.0},"176":{"tf":1.0},"381":{"tf":1.0}},"s":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"x":{"b":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"364":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":13,"docs":{"124":{"tf":1.0},"160":{"tf":1.7320508075688772},"162":{"tf":1.0},"171":{"tf":1.0},"177":{"tf":1.0},"18":{"tf":1.0},"288":{"tf":1.0},"319":{"tf":1.0},"321":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.0},"448":{"tf":1.0},"83":{"tf":1.0}}},"df":10,"docs":{"146":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"330":{"tf":3.0},"331":{"tf":2.449489742783178},"332":{"tf":2.23606797749979},"333":{"tf":2.449489742783178},"414":{"tf":1.7320508075688772},"6":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"319":{"tf":1.0}}}},"r":{"df":23,"docs":{"101":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"109":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"133":{"tf":2.0},"14":{"tf":1.0},"166":{"tf":1.4142135623730951},"183":{"tf":1.4142135623730951},"184":{"tf":1.4142135623730951},"185":{"tf":1.4142135623730951},"188":{"tf":1.0},"206":{"tf":1.0},"212":{"tf":1.0},"214":{"tf":1.0},"255":{"tf":1.4142135623730951},"285":{"tf":1.0},"287":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"393":{"tf":1.7320508075688772},"80":{"tf":1.0}}},"z":{"df":11,"docs":{"288":{"tf":1.4142135623730951},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.4142135623730951},"292":{"tf":1.0},"293":{"tf":1.0},"300":{"tf":1.7320508075688772},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":1.4142135623730951}}}},"é":{"df":2,"docs":{"22":{"tf":1.0},"393":{"tf":1.0}}}}}}}}},"w":{"[":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"352":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"v":{"df":1,"docs":{"424":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"n":{"df":6,"docs":{"174":{"tf":1.0},"294":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"389":{"tf":1.4142135623730951},"403":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"è":{"df":1,"docs":{"352":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"356":{"tf":1.0},"357":{"tf":1.0}}}},"df":0,"docs":{}}},"df":3,"docs":{"206":{"tf":1.0},"348":{"tf":3.7416573867739413},"352":{"tf":1.0}},"e":{"b":{"+":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"148":{"tf":1.0}}}}}},"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"417":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"413":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"287":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":29,"docs":{"148":{"tf":1.0},"16":{"tf":1.0},"173":{"tf":1.0},"187":{"tf":1.0},"199":{"tf":1.0},"279":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.0},"289":{"tf":1.0},"293":{"tf":1.4142135623730951},"294":{"tf":1.0},"299":{"tf":1.0},"335":{"tf":1.0},"370":{"tf":2.23606797749979},"375":{"tf":1.7320508075688772},"383":{"tf":1.0},"392":{"tf":1.0},"413":{"tf":2.449489742783178},"417":{"tf":1.0},"422":{"tf":1.0},"423":{"tf":3.3166247903554},"426":{"tf":2.8284271247461903},"428":{"tf":3.605551275463989},"429":{"tf":2.6457513110645907},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":2,"docs":{"279":{"tf":1.0},"341":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"445":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"133":{"tf":1.0},"97":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"447":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"166":{"tf":1.0},"380":{"tf":1.0}}}}}}}}},"o":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"153":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"353":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"356":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"[":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":23,"docs":{"102":{"tf":1.4142135623730951},"146":{"tf":1.0},"148":{"tf":1.4142135623730951},"161":{"tf":1.0},"166":{"tf":1.0},"169":{"tf":2.23606797749979},"175":{"tf":1.0},"183":{"tf":1.4142135623730951},"189":{"tf":1.0},"194":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"281":{"tf":1.0},"304":{"tf":1.0},"327":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.7320508075688772},"357":{"tf":1.0},"377":{"tf":1.4142135623730951},"414":{"tf":1.0},"440":{"tf":1.0},"450":{"tf":1.0},"96":{"tf":1.0}}}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":4,"docs":{"279":{"tf":1.0},"301":{"tf":1.0},"308":{"tf":1.0},"5":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"148":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":10,"docs":{"148":{"tf":1.0},"151":{"tf":1.0},"161":{"tf":1.0},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"312":{"tf":1.0},"320":{"tf":1.4142135623730951},"321":{"tf":1.4142135623730951},"389":{"tf":1.4142135623730951},"403":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"p":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"p":{"df":1,"docs":{"208":{"tf":1.0}}}}}},"df":1,"docs":{"189":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"361":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"294":{"tf":1.0}}}}}}},"x":{"8":{"6":{"_":{"6":{"4":{"df":1,"docs":{"291":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":13,"docs":{"133":{"tf":1.4142135623730951},"166":{"tf":1.0},"180":{"tf":1.0},"202":{"tf":3.0},"206":{"tf":1.0},"214":{"tf":1.0},"279":{"tf":1.0},"349":{"tf":1.0},"356":{"tf":1.0},"394":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0},"84":{"tf":1.4142135623730951}},"r":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}},"w":{"df":1,"docs":{"348":{"tf":1.0}}},"x":{"df":1,"docs":{"394":{"tf":1.0}},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}}},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":3,"docs":{"379":{"tf":1.0},"380":{"tf":1.0},"9":{"tf":1.0}}}}},"df":6,"docs":{"115":{"tf":1.0},"126":{"tf":1.0},"169":{"tf":1.0},"188":{"tf":1.0},"346":{"tf":1.0},"82":{"tf":1.0}}},"z":{"df":1,"docs":{"199":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":2,"docs":{"383":{"tf":1.0},"393":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"393":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{":":{"1":{"0":{"df":0,"docs":{},"m":{"df":1,"docs":{"201":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"202":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{":":{"1":{"0":{"df":0,"docs":{},"m":{"df":1,"docs":{"201":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"202":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{":":{"1":{"0":{"df":0,"docs":{},"m":{"df":1,"docs":{"201":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"202":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":3,"docs":{"189":{"tf":1.0},"198":{"tf":1.0},"201":{"tf":1.4142135623730951}}}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":6,"docs":{"324":{"tf":1.0},"352":{"tf":1.4142135623730951},"355":{"tf":1.0},"389":{"tf":1.4142135623730951},"400":{"tf":1.0},"418":{"tf":1.0}}}}}}}},"breadcrumbs":{"root":{"0":{".":{"0":{".":{"0":{".":{"0":{":":{"2":{"2":{"2":{"2":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"0":{"0":{"0":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"4":{"3":{"2":{"df":1,"docs":{"212":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"109":{"tf":1.0},"113":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"85":{"tf":1.0}}},"1":{"df":1,"docs":{"85":{"tf":1.0}}},"8":{"df":2,"docs":{"291":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"0":{"df":1,"docs":{"199":{"tf":1.0}}},"1":{"df":47,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.0},"298":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"301":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0},"89":{"tf":1.0}},"|":{"d":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"1":{"5":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"2":{"df":15,"docs":{"24":{"tf":1.0},"25":{"tf":1.7320508075688772},"26":{"tf":1.0},"277":{"tf":1.4142135623730951},"278":{"tf":1.0},"301":{"tf":1.0},"302":{"tf":1.7320508075688772},"303":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.7320508075688772},"91":{"tf":1.0}}},"3":{"df":13,"docs":{"27":{"tf":1.7320508075688772},"277":{"tf":1.0},"278":{"tf":1.0},"28":{"tf":1.0},"304":{"tf":1.7320508075688772},"305":{"tf":1.0},"362":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"92":{"tf":1.7320508075688772},"93":{"tf":1.0}}},"4":{"1":{"6":{"b":{"df":0,"docs":{},"|":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":51,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"29":{"tf":1.7320508075688772},"293":{"tf":2.0},"30":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"85":{"tf":3.0},"86":{"tf":1.4142135623730951},"89":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}}},"7":{"4":{"df":6,"docs":{"1":{"tf":1.0},"264":{"tf":1.7320508075688772},"265":{"tf":1.0},"383":{"tf":1.4142135623730951},"391":{"tf":1.4142135623730951},"75":{"tf":1.0}}},"df":0,"docs":{}},"9":{":":{"5":{"5":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":7,"docs":{"102":{"tf":1.4142135623730951},"175":{"tf":1.4142135623730951},"205":{"tf":1.0},"243":{"tf":1.0},"292":{"tf":1.0},"294":{"tf":2.0},"317":{"tf":1.0}}},"1":{".":{"1":{"0":{"df":1,"docs":{"356":{"tf":1.0}}},"df":2,"docs":{"202":{"tf":1.0},"291":{"tf":1.0}}},"2":{"df":1,"docs":{"85":{"tf":1.0}}},"5":{"df":1,"docs":{"346":{"tf":1.0}}},"8":{"0":{"df":2,"docs":{"286":{"tf":1.0},"300":{"tf":1.0}}},"2":{".":{"0":{"df":1,"docs":{"288":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{".":{"1":{"df":1,"docs":{"104":{"tf":1.0}}},"2":{"df":1,"docs":{"104":{"tf":1.0}}},"3":{"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"104":{"tf":1.4142135623730951}}}}}},"/":{"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"6":{"4":{"4":{"df":1,"docs":{"294":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":5,"docs":{"124":{"tf":1.0},"289":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"327":{"tf":1.0},"389":{"tf":1.0}}},":":{"0":{"0":{"df":1,"docs":{"84":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"1":{"5":{"df":1,"docs":{"292":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":10,"docs":{"166":{"tf":1.4142135623730951},"18":{"tf":1.0},"185":{"tf":1.4142135623730951},"189":{"tf":1.7320508075688772},"202":{"tf":1.0},"206":{"tf":1.0},"208":{"tf":1.7320508075688772},"211":{"tf":1.0},"288":{"tf":1.4142135623730951},"84":{"tf":1.7320508075688772}},"m":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":2.6457513110645907}}}},"1":{"df":4,"docs":{"167":{"tf":1.4142135623730951},"189":{"tf":1.0},"208":{"tf":1.0},"211":{"tf":1.0}}},"2":{"0":{"df":3,"docs":{"277":{"tf":1.0},"278":{"tf":1.0},"349":{"tf":1.0}}},"3":{"df":1,"docs":{"349":{"tf":1.0}}},"4":{"df":1,"docs":{"349":{"tf":1.0}}},"6":{"df":1,"docs":{"349":{"tf":1.0}}},"7":{".":{"0":{".":{"0":{".":{"1":{"/":{"8":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}}},"df":0,"docs":{}},":":{"2":{"2":{"2":{"2":{"df":7,"docs":{"113":{"tf":1.4142135623730951},"121":{"tf":1.0},"124":{"tf":1.0},"133":{"tf":1.0},"187":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"0":{"0":{"0":{"df":5,"docs":{"113":{"tf":1.4142135623730951},"124":{"tf":1.0},"187":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"4":{"3":{"2":{"df":6,"docs":{"109":{"tf":1.0},"124":{"tf":1.0},"187":{"tf":1.0},"212":{"tf":1.4142135623730951},"96":{"tf":1.0},"97":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"189":{"tf":1.0},"211":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"4":{"7":{"/":{"1":{"2":{"8":{"4":{"7":{"df":1,"docs":{"289":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"289":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"349":{"tf":1.0}}},"9":{"df":1,"docs":{"349":{"tf":1.0}}},"df":6,"docs":{"151":{"tf":1.0},"189":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"81":{"tf":1.0},"86":{"tf":1.0}}},"3":{".":{"2":{".":{"0":{"df":1,"docs":{"291":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{"df":1,"docs":{"349":{"tf":1.0}}},"2":{"df":1,"docs":{"349":{"tf":1.0}}},"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}},"5":{"0":{"0":{"df":2,"docs":{"348":{"tf":1.0},"349":{"tf":1.0}}},"df":0,"docs":{}},"df":3,"docs":{"286":{"tf":1.0},"288":{"tf":1.4142135623730951},"85":{"tf":1.0}}},"6":{".":{"3":{"df":2,"docs":{"288":{"tf":1.0},"291":{"tf":1.0}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":1,"docs":{"199":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"1":{"5":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":3,"docs":{"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}}},"7":{"7":{"df":1,"docs":{"349":{"tf":1.4142135623730951}}},"df":3,"docs":{"292":{"tf":1.0},"313":{"tf":1.0},"84":{"tf":2.0}},"t":{"1":{"0":{":":{"0":{"0":{":":{"1":{"5":{"df":0,"docs":{},"z":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}}},"6":{"df":0,"docs":{},"z":{"df":1,"docs":{"85":{"tf":1.0}}}},"7":{"df":0,"docs":{},"z":{"df":1,"docs":{"85":{"tf":2.449489742783178}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{":":{"0":{"0":{"df":0,"docs":{},"z":{"df":1,"docs":{"86":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"0":{":":{"0":{"0":{"df":0,"docs":{},"z":{"df":1,"docs":{"293":{"tf":1.4142135623730951}}}},"1":{"df":0,"docs":{},"z":{"df":1,"docs":{"293":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"8":{".":{"4":{"2":{"df":1,"docs":{"289":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"2":{"df":0,"docs":{},"m":{"df":1,"docs":{"292":{"tf":1.0}}}},"df":0,"docs":{}},"7":{".":{"4":{"2":{"df":1,"docs":{"293":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"286":{"tf":1.0}}},"9":{"2":{".":{"1":{"6":{"8":{".":{"1":{".":{"0":{"/":{"2":{"4":{"df":1,"docs":{"189":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"7":{"df":1,"docs":{"95":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"\\\\":{".":{"0":{"0":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"|":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"4":{"b":{"df":0,"docs":{},"|":{"d":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"u":{"c":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"|":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}}}}},"d":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"8":{"df":0,"docs":{},"|":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"9":{"df":0,"docs":{},"|":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"z":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"a":{"/":{"4":{"\\\\":{".":{"0":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":1,"docs":{"105":{"tf":1.4142135623730951}}},"b":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}},"c":{"df":2,"docs":{"107":{"tf":1.4142135623730951},"122":{"tf":1.4142135623730951}}},"d":{"df":3,"docs":{"108":{"tf":1.4142135623730951},"127":{"tf":1.0},"189":{"tf":1.0}}},"df":35,"docs":{"103":{"tf":1.4142135623730951},"105":{"tf":1.4142135623730951},"127":{"tf":1.0},"146":{"tf":1.4142135623730951},"163":{"tf":1.0},"164":{"tf":1.0},"169":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"188":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"202":{"tf":1.0},"205":{"tf":1.0},"206":{"tf":1.4142135623730951},"207":{"tf":1.0},"208":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"233":{"tf":1.4142135623730951},"244":{"tf":1.0},"288":{"tf":1.4142135623730951},"291":{"tf":1.0},"292":{"tf":1.0},"294":{"tf":1.7320508075688772},"316":{"tf":1.4142135623730951},"317":{"tf":1.4142135623730951},"346":{"tf":2.23606797749979},"349":{"tf":3.605551275463989},"352":{"tf":2.23606797749979},"357":{"tf":1.4142135623730951},"380":{"tf":1.0},"389":{"tf":1.4142135623730951},"423":{"tf":1.4142135623730951},"76":{"tf":1.0},"83":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"319":{"tf":1.0}}}},"h":{"df":4,"docs":{"121":{"tf":1.0},"127":{"tf":1.0},"189":{"tf":2.6457513110645907},"208":{"tf":2.8284271247461903}}},"m":{"df":1,"docs":{"189":{"tf":1.0}}},"w":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0}}}},"2":{".":{"0":{"5":{"df":1,"docs":{"356":{"tf":1.0}}},"df":0,"docs":{}},"1":{"df":2,"docs":{"171":{"tf":1.4142135623730951},"392":{"tf":1.4142135623730951}}},"2":{"df":3,"docs":{"172":{"tf":1.4142135623730951},"393":{"tf":1.4142135623730951},"403":{"tf":1.0}}},"3":{"df":2,"docs":{"173":{"tf":1.4142135623730951},"394":{"tf":1.4142135623730951}}},"4":{"3":{".":{"0":{"df":1,"docs":{"288":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"174":{"tf":1.4142135623730951}}},"5":{"df":1,"docs":{"175":{"tf":1.4142135623730951}}},"df":0,"docs":{},"x":{"df":1,"docs":{"286":{"tf":1.0}}}},"/":{"2":{"df":1,"docs":{"291":{"tf":1.0}}},"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"0":{"df":1,"docs":{"193":{"tf":1.0}}},"df":3,"docs":{"119":{"tf":1.0},"316":{"tf":1.4142135623730951},"426":{"tf":1.0}}},"2":{"2":{"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}}},"df":18,"docs":{"103":{"tf":1.4142135623730951},"104":{"tf":1.0},"105":{"tf":1.4142135623730951},"106":{"tf":1.7320508075688772},"107":{"tf":1.4142135623730951},"108":{"tf":1.4142135623730951},"109":{"tf":1.0},"113":{"tf":1.0},"116":{"tf":1.0},"122":{"tf":1.4142135623730951},"124":{"tf":1.0},"127":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.4142135623730951},"208":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}}},"4":{"df":1,"docs":{"288":{"tf":1.4142135623730951}}},"6":{"df":5,"docs":{"20":{"tf":1.0},"293":{"tf":2.0},"362":{"tf":1.0},"85":{"tf":3.0},"86":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"3":{".":{"0":{".":{"1":{"1":{"3":{".":{"4":{"2":{"df":1,"docs":{"207":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"8":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"df":9,"docs":{"1":{"tf":1.0},"15":{"tf":1.0},"202":{"tf":1.0},"207":{"tf":1.0},"326":{"tf":1.0},"357":{"tf":1.0},"7":{"tf":1.4142135623730951},"73":{"tf":1.0},"85":{"tf":1.0}}},"2":{",":{"2":{"2":{"2":{"2":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"0":{"4":{"df":2,"docs":{"151":{"tf":1.0},"81":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}}},"0":{"0":{"df":1,"docs":{"104":{"tf":1.0}}},"2":{"2":{"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"2":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"85":{"tf":1.0}}}},"df":0,"docs":{}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":18,"docs":{"1":{"tf":1.0},"104":{"tf":1.0},"121":{"tf":1.4142135623730951},"134":{"tf":1.4142135623730951},"16":{"tf":1.0},"187":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"287":{"tf":1.0},"300":{"tf":1.0},"326":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0},"424":{"tf":1.0},"75":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951}},"}":{":":{"2":{"2":{"2":{"2":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"3":{"df":1,"docs":{"326":{"tf":1.0}}},"df":0,"docs":{}},"6":{".":{"0":{"0":{"df":1,"docs":{"294":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"294":{"tf":1.0}}},"\\\\":{"b":{"df":0,"docs":{},"|":{":":{"2":{"0":{"2":{"2":{"\\\\":{"b":{"df":2,"docs":{"105":{"tf":1.0},"122":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"2":{"2":{"\\\\":{"b":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":17,"docs":{"102":{"tf":1.0},"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"107":{"tf":2.449489742783178},"120":{"tf":1.4142135623730951},"121":{"tf":2.0},"122":{"tf":2.23606797749979},"124":{"tf":1.0},"134":{"tf":1.0},"153":{"tf":1.0},"160":{"tf":1.0},"163":{"tf":1.0},"187":{"tf":1.0},"23":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.4142135623730951},"98":{"tf":1.0}}},"3":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"4":{"df":1,"docs":{"291":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"4":{"df":2,"docs":{"102":{"tf":1.4142135623730951},"81":{"tf":1.0}},"h":{"df":2,"docs":{"189":{"tf":1.7320508075688772},"208":{"tf":1.4142135623730951}}}},"5":{"6":{"df":3,"docs":{"243":{"tf":1.0},"382":{"tf":1.0},"393":{"tf":1.0}}},"df":2,"docs":{"24":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"6":{"df":1,"docs":{"362":{"tf":1.0}}},"8":{".":{"0":{".":{"1":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},">":{"&":{"1":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}},"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"104":{"tf":1.4142135623730951},"122":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"\\\\":{".":{"1":{"df":0,"docs":{},"|":{"df":0,"docs":{},"l":{"df":0,"docs":{},"m":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"/":{"0":{"\\\\":{".":{"2":{"df":0,"docs":{},"|":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"df":0,"docs":{},"p":{"\\\\":{":":{"\\\\":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"/":{"5":{"\\\\":{".":{"8":{"0":{"3":{"df":0,"docs":{},"|":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"6":{"df":0,"docs":{},"|":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"t":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"/":{"0":{"\\\\":{".":{"2":{"df":0,"docs":{},"|":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"z":{"df":0,"docs":{},"|":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"h":{"a":{"0":{"df":0,"docs":{},"s":{"/":{"2":{"\\\\":{".":{"0":{"df":0,"docs":{},"|":{"d":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":33,"docs":{"106":{"tf":1.4142135623730951},"109":{"tf":1.4142135623730951},"147":{"tf":1.4142135623730951},"16":{"tf":1.0},"163":{"tf":1.0},"165":{"tf":1.0},"170":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"189":{"tf":2.23606797749979},"205":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.7320508075688772},"239":{"tf":1.4142135623730951},"244":{"tf":1.0},"289":{"tf":1.4142135623730951},"293":{"tf":1.0},"317":{"tf":2.0},"319":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.7320508075688772},"349":{"tf":1.4142135623730951},"351":{"tf":1.4142135623730951},"355":{"tf":1.0},"356":{"tf":1.4142135623730951},"357":{"tf":1.4142135623730951},"380":{"tf":1.0},"391":{"tf":1.4142135623730951},"424":{"tf":1.4142135623730951},"76":{"tf":1.0},"84":{"tf":1.7320508075688772},"85":{"tf":2.0},"96":{"tf":1.0}},"f":{"a":{"df":17,"docs":{"10":{"tf":1.0},"13":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"18":{"tf":2.23606797749979},"217":{"tf":1.7320508075688772},"218":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"281":{"tf":1.0},"35":{"tf":1.7320508075688772},"36":{"tf":1.0},"432":{"tf":1.7320508075688772},"433":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}},"g":{"df":2,"docs":{"133":{"tf":1.0},"202":{"tf":1.0}}},"h":{"0":{"0":{"df":1,"docs":{"446":{"tf":1.0}}},"df":0,"docs":{}},"df":2,"docs":{"189":{"tf":1.4142135623730951},"208":{"tf":1.4142135623730951}}}},"3":{".":{"1":{"df":3,"docs":{"177":{"tf":1.4142135623730951},"191":{"tf":1.4142135623730951},"396":{"tf":1.4142135623730951}}},"2":{"df":3,"docs":{"178":{"tf":1.4142135623730951},"192":{"tf":1.4142135623730951},"397":{"tf":1.4142135623730951}}},"3":{"df":2,"docs":{"179":{"tf":1.4142135623730951},"193":{"tf":1.4142135623730951}}},"4":{"df":2,"docs":{"180":{"tf":1.4142135623730951},"194":{"tf":1.4142135623730951}}},"5":{"df":2,"docs":{"181":{"tf":1.4142135623730951},"195":{"tf":1.4142135623730951}}},"6":{"df":1,"docs":{"196":{"tf":1.4142135623730951}}},"7":{"df":1,"docs":{"197":{"tf":1.4142135623730951}}},"8":{"df":1,"docs":{"198":{"tf":1.4142135623730951}}},"9":{"df":2,"docs":{"199":{"tf":1.4142135623730951},"84":{"tf":1.0}}},"df":0,"docs":{}},"/":{"3":{"df":1,"docs":{"294":{"tf":1.4142135623730951}}},"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"1":{"df":2,"docs":{"133":{"tf":1.0},"97":{"tf":1.0}}},"2":{"df":4,"docs":{"119":{"tf":1.0},"348":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0}}},"df":15,"docs":{"121":{"tf":1.0},"18":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"189":{"tf":1.0},"202":{"tf":1.0},"208":{"tf":1.0},"23":{"tf":1.0},"414":{"tf":1.0},"73":{"tf":1.0},"79":{"tf":1.4142135623730951},"81":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"88":{"tf":1.0}},"m":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}}},"2":{"df":2,"docs":{"290":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951}}},"6":{"8":{"/":{"8":{"7":{"6":{"df":1,"docs":{"356":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":1,"docs":{"111":{"tf":1.4142135623730951}}},"b":{"df":1,"docs":{"112":{"tf":1.4142135623730951}}},"c":{"df":1,"docs":{"113":{"tf":1.4142135623730951}}},"df":29,"docs":{"1":{"tf":1.0},"102":{"tf":1.0},"104":{"tf":1.0},"110":{"tf":1.4142135623730951},"127":{"tf":1.4142135623730951},"148":{"tf":1.4142135623730951},"165":{"tf":1.0},"176":{"tf":1.4142135623730951},"189":{"tf":2.0},"19":{"tf":1.4142135623730951},"190":{"tf":1.4142135623730951},"205":{"tf":1.0},"208":{"tf":2.0},"244":{"tf":1.4142135623730951},"286":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"318":{"tf":1.4142135623730951},"349":{"tf":1.7320508075688772},"357":{"tf":1.0},"380":{"tf":1.0},"395":{"tf":1.4142135623730951},"425":{"tf":1.4142135623730951},"72":{"tf":1.0},"76":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.4142135623730951},"96":{"tf":1.0}},"s":{"df":1,"docs":{"292":{"tf":1.0}}},"x":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}},"×":{"/":{"2":{"4":{"df":0,"docs":{},"h":{"df":1,"docs":{"208":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"4":{".":{"1":{"df":3,"docs":{"201":{"tf":1.4142135623730951},"351":{"tf":1.4142135623730951},"399":{"tf":1.4142135623730951}}},"2":{"0":{"df":1,"docs":{"289":{"tf":1.0}}},"df":3,"docs":{"202":{"tf":1.4142135623730951},"352":{"tf":1.4142135623730951},"400":{"tf":1.4142135623730951}}},"3":{"df":3,"docs":{"203":{"tf":1.4142135623730951},"353":{"tf":1.4142135623730951},"401":{"tf":1.4142135623730951}}},"4":{"df":2,"docs":{"354":{"tf":1.4142135623730951},"402":{"tf":1.4142135623730951}}},"5":{"df":1,"docs":{"355":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"/":{"4":{"df":1,"docs":{"85":{"tf":1.0}}},"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"0":{"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"85":{"tf":1.0}}}},"df":0,"docs":{}}},":":{"4":{"0":{"0":{"0":{"df":2,"docs":{"84":{"tf":1.0},"88":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"287":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":12,"docs":{"1":{"tf":1.0},"134":{"tf":1.4142135623730951},"16":{"tf":1.0},"287":{"tf":1.0},"326":{"tf":1.0},"375":{"tf":1.0},"413":{"tf":1.4142135623730951},"414":{"tf":1.0},"75":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.7320508075688772},"88":{"tf":2.23606797749979}},"|":{"2":{"2":{"2":{"2":{"df":1,"docs":{"113":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"1":{":":{"4":{"0":{"0":{"0":{"df":1,"docs":{"88":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"313":{"tf":1.0},"326":{"tf":1.0},"88":{"tf":1.0}}},"df":0,"docs":{}},"1":{"/":{"4":{"0":{"3":{"/":{"4":{"2":{"2":{"/":{"4":{"2":{"9":{"df":1,"docs":{"191":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"189":{"tf":1.0},"192":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":4,"docs":{"184":{"tf":1.0},"196":{"tf":1.0},"319":{"tf":1.0},"396":{"tf":1.0}},"|":{"4":{"0":{"3":{"df":2,"docs":{"192":{"tf":1.0},"195":{"tf":1.4142135623730951}},"|":{"4":{"2":{"2":{"df":0,"docs":{},"|":{"4":{"2":{"9":{"df":1,"docs":{"191":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"3":{"df":2,"docs":{"196":{"tf":1.0},"396":{"tf":1.0}}},"4":{"df":1,"docs":{"21":{"tf":1.0}}},"9":{"6":{"df":3,"docs":{"383":{"tf":1.0},"426":{"tf":1.0},"84":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":1,"docs":{"184":{"tf":1.0}}},"2":{"2":{"df":1,"docs":{"23":{"tf":1.0}}},"df":3,"docs":{"293":{"tf":1.0},"356":{"tf":1.0},"85":{"tf":1.0}}},"4":{"3":{"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}}},"df":6,"docs":{"124":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"202":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0}}},"df":0,"docs":{}},"5":{"df":5,"docs":{"278":{"tf":1.0},"286":{"tf":1.0},"349":{"tf":1.4142135623730951},"73":{"tf":1.0},"89":{"tf":1.0}},"k":{"df":1,"docs":{"292":{"tf":1.0}}}},"7":{"df":1,"docs":{"207":{"tf":1.0}}},"a":{"7":{"df":0,"docs":{},"f":{"2":{"c":{"9":{"df":0,"docs":{},"e":{"1":{"b":{"8":{"d":{"3":{"df":0,"docs":{},"f":{"6":{"a":{"0":{"df":0,"docs":{},"e":{"5":{"c":{"2":{"b":{"9":{"d":{"7":{"df":0,"docs":{},"f":{"4":{"a":{"1":{"df":0,"docs":{},"e":{"8":{"c":{"3":{"b":{"6":{"d":{"9":{"df":0,"docs":{},"f":{"2":{"a":{"5":{"df":0,"docs":{},"e":{"8":{"c":{"1":{"b":{"4":{"d":{"7":{"df":0,"docs":{},"f":{"0":{"a":{"3":{"df":0,"docs":{},"e":{"6":{"c":{"9":{"b":{"2":{"d":{"5":{"df":0,"docs":{},"f":{"8":{"a":{"df":1,"docs":{"290":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"115":{"tf":1.4142135623730951}}},"b":{"df":1,"docs":{"116":{"tf":1.4142135623730951}}},"c":{"df":1,"docs":{"117":{"tf":1.4142135623730951}}},"d":{"df":1,"docs":{"118":{"tf":1.4142135623730951}}},"df":32,"docs":{"1":{"tf":1.0},"114":{"tf":1.4142135623730951},"149":{"tf":1.4142135623730951},"150":{"tf":1.0},"182":{"tf":1.4142135623730951},"184":{"tf":1.0},"186":{"tf":1.0},"189":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"200":{"tf":1.4142135623730951},"205":{"tf":1.0},"208":{"tf":1.0},"245":{"tf":1.4142135623730951},"277":{"tf":1.0},"281":{"tf":1.0},"291":{"tf":1.4142135623730951},"319":{"tf":1.4142135623730951},"350":{"tf":1.4142135623730951},"351":{"tf":1.0},"354":{"tf":1.0},"357":{"tf":1.0},"380":{"tf":1.0},"389":{"tf":1.0},"398":{"tf":1.4142135623730951},"416":{"tf":1.0},"426":{"tf":1.4142135623730951},"53":{"tf":1.7320508075688772},"54":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"86":{"tf":1.4142135623730951},"9":{"tf":1.0}},"e":{"df":1,"docs":{"119":{"tf":1.4142135623730951}}},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"191":{"tf":1.0}}}}},"5":{"/":{"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"0":{"df":1,"docs":{"205":{"tf":1.4142135623730951}}},"df":1,"docs":{"21":{"tf":1.0}}},"df":0,"docs":{}},"4":{"3":{"2":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"85":{"tf":1.0}}}},"df":0,"docs":{}}},"df":6,"docs":{"109":{"tf":1.0},"134":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0},"212":{"tf":1.0},"75":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":1,"docs":{"121":{"tf":1.4142135623730951}}},"b":{"df":2,"docs":{"122":{"tf":1.4142135623730951},"370":{"tf":1.0}}},"c":{"df":1,"docs":{"123":{"tf":1.4142135623730951}}},"df":22,"docs":{"107":{"tf":1.4142135623730951},"120":{"tf":1.4142135623730951},"127":{"tf":1.7320508075688772},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.4142135623730951},"165":{"tf":1.0},"186":{"tf":1.4142135623730951},"189":{"tf":2.6457513110645907},"202":{"tf":1.0},"204":{"tf":1.4142135623730951},"208":{"tf":2.449489742783178},"21":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"290":{"tf":1.0},"292":{"tf":1.4142135623730951},"293":{"tf":1.0},"356":{"tf":1.4142135623730951},"380":{"tf":1.0},"403":{"tf":1.4142135623730951},"427":{"tf":1.4142135623730951},"84":{"tf":1.0}},"m":{"df":1,"docs":{"189":{"tf":1.7320508075688772}}},"s":{"df":1,"docs":{"84":{"tf":1.0}}},"x":{"df":2,"docs":{"356":{"tf":1.4142135623730951},"357":{"tf":1.0}}}},"6":{"/":{"6":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"df":3,"docs":{"102":{"tf":1.0},"109":{"tf":1.0},"111":{"tf":1.0}}},"df":2,"docs":{"349":{"tf":1.0},"351":{"tf":1.0}}},"1":{"2":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"3":{"7":{"9":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"4":{"df":2,"docs":{"102":{"tf":1.0},"291":{"tf":1.0}}},"\\\\":{".":{"0":{"0":{"\\\\":{".":{"8":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"|":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":15,"docs":{"124":{"tf":1.4142135623730951},"146":{"tf":1.0},"157":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"189":{"tf":1.0},"207":{"tf":1.4142135623730951},"208":{"tf":1.0},"250":{"tf":1.4142135623730951},"276":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.0},"293":{"tf":1.4142135623730951},"298":{"tf":1.0},"357":{"tf":1.4142135623730951},"428":{"tf":1.4142135623730951}}},"7":{"1":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"1":{"5":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"a":{"df":1,"docs":{"126":{"tf":1.4142135623730951}}},"b":{"df":1,"docs":{"127":{"tf":1.4142135623730951}}},"df":10,"docs":{"125":{"tf":1.4142135623730951},"161":{"tf":1.4142135623730951},"166":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.7320508075688772},"243":{"tf":1.0},"251":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"429":{"tf":1.4142135623730951},"82":{"tf":1.0}}},"8":{".":{"1":{"df":1,"docs":{"210":{"tf":1.4142135623730951}}},"2":{"df":1,"docs":{"211":{"tf":1.4142135623730951}}},"3":{"df":1,"docs":{"212":{"tf":1.4142135623730951}}},"4":{"df":1,"docs":{"213":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"0":{",":{"4":{"4":{"3":{"df":1,"docs":{"208":{"tf":2.6457513110645907}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}}},"8":{"0":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"189":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":3,"docs":{"187":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0}}},"1":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"189":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":3,"docs":{"187":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0}}},"df":0,"docs":{}},"df":5,"docs":{"124":{"tf":1.0},"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"187":{"tf":1.0},"97":{"tf":1.0}}},"1":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"1":{"5":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"a":{"df":1,"docs":{"129":{"tf":1.4142135623730951}}},"b":{"df":1,"docs":{"130":{"tf":1.4142135623730951}}},"c":{"df":1,"docs":{"131":{"tf":1.4142135623730951}}},"df":10,"docs":{"128":{"tf":1.4142135623730951},"162":{"tf":1.4142135623730951},"189":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.4142135623730951},"214":{"tf":1.0},"243":{"tf":1.0},"256":{"tf":1.4142135623730951},"354":{"tf":1.0},"84":{"tf":1.0}},"f":{"4":{"0":{"df":0,"docs":{},"f":{"c":{"5":{"9":{"df":0,"docs":{},"f":{"df":1,"docs":{"288":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"9":{"0":{"df":6,"docs":{"278":{"tf":1.0},"301":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0}}},"8":{"df":1,"docs":{"292":{"tf":1.0}}},"df":6,"docs":{"104":{"tf":1.0},"132":{"tf":1.4142135623730951},"165":{"tf":1.4142135623730951},"189":{"tf":1.0},"208":{"tf":1.0},"214":{"tf":1.7320508075688772}}},"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"d":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"=":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"189":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"189":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"a":{"1":{"[":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"b":{"2":{"c":{"3":{"d":{"df":1,"docs":{"294":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"[":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"2":{"df":1,"docs":{"356":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":1,"docs":{"356":{"tf":1.0}}},"3":{"[":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"72":{"tf":1.0}}}}},"a":{"a":{"a":{"c":{"3":{"df":0,"docs":{},"n":{"df":0,"docs":{},"z":{"a":{"c":{"1":{"df":0,"docs":{},"l":{"df":0,"docs":{},"z":{"d":{"df":0,"docs":{},"i":{"1":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"5":{"a":{"a":{"a":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"19":{"tf":1.0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"b":{"c":{"d":{"1":{"2":{"3":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"19":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"146":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"171":{"tf":1.4142135623730951},"183":{"tf":1.0},"197":{"tf":1.4142135623730951},"198":{"tf":1.4142135623730951},"244":{"tf":1.0},"363":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"420":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":4,"docs":{"189":{"tf":1.4142135623730951},"192":{"tf":1.0},"196":{"tf":1.0},"208":{"tf":1.0}},"s":{"df":5,"docs":{"189":{"tf":1.4142135623730951},"199":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"208":{"tf":1.0}},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":2,"docs":{"192":{"tf":1.7320508075688772},"205":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"23":{"tf":1.0}},"u":{"df":0,"docs":{},"é":{"df":1,"docs":{"23":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"19":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":23,"docs":{"1":{"tf":1.0},"14":{"tf":1.0},"179":{"tf":1.0},"199":{"tf":1.0},"208":{"tf":2.449489742783178},"291":{"tf":1.0},"318":{"tf":1.0},"323":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"333":{"tf":1.0},"37":{"tf":1.7320508075688772},"38":{"tf":1.0},"424":{"tf":2.23606797749979},"425":{"tf":2.23606797749979},"427":{"tf":1.0},"428":{"tf":1.7320508075688772},"449":{"tf":1.0},"72":{"tf":1.0},"8":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":5,"docs":{"372":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"427":{"tf":1.7320508075688772},"428":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"22":{"tf":1.7320508075688772},"299":{"tf":1.7320508075688772},"87":{"tf":1.7320508075688772}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"293":{"tf":1.0}}}}}},"è":{"d":{"df":1,"docs":{"17":{"tf":1.4142135623730951}}},"df":5,"docs":{"101":{"tf":1.0},"171":{"tf":1.0},"174":{"tf":1.0},"330":{"tf":1.0},"97":{"tf":1.0}}},"é":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"332":{"tf":1.4142135623730951},"80":{"tf":1.0}}},"z":{"df":1,"docs":{"88":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":5,"docs":{"108":{"tf":1.0},"117":{"tf":1.0},"129":{"tf":1.0},"134":{"tf":1.0},"95":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"102":{"tf":1.0},"107":{"tf":1.0},"188":{"tf":1.0},"204":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{")":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":9,"docs":{"189":{"tf":1.0},"213":{"tf":1.0},"243":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"319":{"tf":1.0},"376":{"tf":1.0},"393":{"tf":1.0}}}},"v":{"df":13,"docs":{"13":{"tf":1.4142135623730951},"14":{"tf":1.0},"168":{"tf":1.4142135623730951},"172":{"tf":1.0},"173":{"tf":1.7320508075688772},"18":{"tf":1.7320508075688772},"189":{"tf":1.4142135623730951},"211":{"tf":1.0},"23":{"tf":1.7320508075688772},"243":{"tf":2.449489742783178},"378":{"tf":1.0},"380":{"tf":1.0},"443":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"b":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"b":{"df":1,"docs":{"353":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"r":{"/":{"d":{"df":0,"docs":{},"é":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"317":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"é":{"df":5,"docs":{"18":{"tf":1.4142135623730951},"186":{"tf":1.0},"204":{"tf":1.0},"22":{"tf":1.4142135623730951},"326":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":6,"docs":{"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}}}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"[":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"356":{"tf":1.0}}}}}}},"df":4,"docs":{"104":{"tf":1.0},"348":{"tf":1.4142135623730951},"351":{"tf":1.0},"356":{"tf":1.0}}}}}}},"d":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"113":{"tf":1.0},"199":{"tf":1.0},"447":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"291":{"tf":1.0},"442":{"tf":1.0},"95":{"tf":1.0}}}},"é":{"df":2,"docs":{"450":{"tf":1.0},"76":{"tf":1.0}}}}}},"d":{"df":4,"docs":{"123":{"tf":1.0},"166":{"tf":1.0},"23":{"tf":1.0},"294":{"tf":1.0}}},"df":2,"docs":{"243":{"tf":1.0},"292":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":3,"docs":{"314":{"tf":1.0},"325":{"tf":1.0},"332":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":6,"docs":{"232":{"tf":1.0},"240":{"tf":1.0},"249":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"257":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.0}}}}}}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"=":{"<":{"a":{"c":{"df":0,"docs":{},"m":{"df":1,"docs":{"102":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"@":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"290":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"238":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"=":{"$":{"df":0,"docs":{},"{":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"w":{"d":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"1":{"2":{"3":{"df":1,"docs":{"290":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":3,"docs":{"102":{"tf":1.4142135623730951},"238":{"tf":1.0},"293":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"w":{"d":{"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"238":{"tf":1.0},"293":{"tf":1.0}},"e":{"=":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"102":{"tf":1.0},"290":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":37,"docs":{"102":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.7320508075688772},"109":{"tf":1.0},"116":{"tf":1.0},"122":{"tf":1.0},"134":{"tf":1.0},"178":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"208":{"tf":1.4142135623730951},"223":{"tf":1.7320508075688772},"224":{"tf":1.0},"232":{"tf":1.0},"237":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"293":{"tf":1.4142135623730951},"313":{"tf":1.0},"314":{"tf":1.0},"316":{"tf":1.0},"328":{"tf":1.0},"332":{"tf":2.449489742783178},"375":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0},"86":{"tf":2.0},"87":{"tf":1.0},"95":{"tf":1.4142135623730951},"97":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":9,"docs":{"240":{"tf":1.0},"251":{"tf":1.4142135623730951},"290":{"tf":1.0},"293":{"tf":1.0},"72":{"tf":1.4142135623730951},"80":{"tf":1.0},"81":{"tf":1.0},"86":{"tf":2.449489742783178},"87":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":3,"docs":{"125":{"tf":1.0},"210":{"tf":1.0},"451":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"/":{"0":{"1":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":8,"docs":{"179":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"314":{"tf":1.0},"332":{"tf":1.4142135623730951},"375":{"tf":1.0},"71":{"tf":1.0},"86":{"tf":1.4142135623730951}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"86":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"424":{"tf":1.4142135623730951},"425":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"373":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"e":{"df":2,"docs":{"243":{"tf":1.0},"382":{"tf":1.0}}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"df":14,"docs":{"106":{"tf":1.0},"146":{"tf":1.0},"18":{"tf":2.23606797749979},"19":{"tf":1.7320508075688772},"199":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"294":{"tf":1.0},"299":{"tf":1.0},"426":{"tf":1.0},"85":{"tf":1.7320508075688772},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.4142135623730951}},"é":{"df":2,"docs":{"21":{"tf":1.0},"237":{"tf":1.0}}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"19":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":6,"docs":{"150":{"tf":1.0},"153":{"tf":1.0},"172":{"tf":1.0},"189":{"tf":1.0},"199":{"tf":1.0},"208":{"tf":1.0}},"|":{"df":0,"docs":{},"v":{"a":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"v":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{"\\\\":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"/":{"1":{"\\\\":{".":{"0":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"393":{"tf":1.0}}}},"o":{"df":1,"docs":{"85":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"117":{"tf":1.0},"129":{"tf":1.0}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"189":{"tf":1.0}}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":27,"docs":{"121":{"tf":1.4142135623730951},"129":{"tf":1.4142135623730951},"13":{"tf":1.4142135623730951},"16":{"tf":1.0},"166":{"tf":1.0},"172":{"tf":1.0},"180":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"202":{"tf":1.4142135623730951},"21":{"tf":1.0},"214":{"tf":1.4142135623730951},"257":{"tf":1.7320508075688772},"258":{"tf":1.7320508075688772},"259":{"tf":1.4142135623730951},"279":{"tf":1.7320508075688772},"315":{"tf":1.4142135623730951},"318":{"tf":1.4142135623730951},"334":{"tf":1.4142135623730951},"335":{"tf":1.7320508075688772},"336":{"tf":1.0},"337":{"tf":1.7320508075688772},"338":{"tf":1.0},"339":{"tf":1.7320508075688772},"340":{"tf":1.0},"363":{"tf":1.4142135623730951},"364":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"294":{"tf":1.0},"296":{"tf":1.0}}}},"é":{"df":3,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"426":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"205":{"tf":1.0},"443":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.4142135623730951}}}}},"i":{"c":{"df":3,"docs":{"327":{"tf":1.0},"328":{"tf":1.4142135623730951},"428":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":3,"docs":{"424":{"tf":1.4142135623730951},"425":{"tf":1.0},"428":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"l":{"=":{"(":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"166":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"173":{"tf":1.0},"253":{"tf":1.0},"351":{"tf":1.0},"421":{"tf":1.4142135623730951}}},"z":{"df":1,"docs":{"287":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":7,"docs":{"242":{"tf":1.0},"257":{"tf":1.4142135623730951},"259":{"tf":1.0},"316":{"tf":1.4142135623730951},"351":{"tf":1.0},"364":{"tf":1.0},"392":{"tf":1.0}}}}}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"102":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":3,"docs":{"243":{"tf":1.0},"249":{"tf":1.4142135623730951},"255":{"tf":1.0}}}}}}}}}},"df":2,"docs":{"108":{"tf":2.0},"173":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"84":{"tf":1.0},"85":{"tf":1.0}},"e":{":":{"3":{"df":1,"docs":{"164":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"88":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":3,"docs":{"348":{"tf":1.0},"414":{"tf":1.0},"427":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"352":{"tf":1.0}}}}}},"df":5,"docs":{"199":{"tf":1.0},"23":{"tf":1.0},"316":{"tf":1.0},"355":{"tf":1.0},"444":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"214":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":5,"docs":{"176":{"tf":1.0},"181":{"tf":1.0},"184":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"362":{"tf":1.0}},"n":{"df":1,"docs":{"19":{"tf":1.0}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"i":{"df":1,"docs":{"319":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"l":{"df":3,"docs":{"173":{"tf":1.0},"317":{"tf":1.4142135623730951},"319":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":1,"docs":{"331":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"421":{"tf":1.0}}},"df":0,"docs":{}}},"df":22,"docs":{"1":{"tf":1.0},"264":{"tf":1.7320508075688772},"265":{"tf":1.0},"280":{"tf":1.0},"383":{"tf":1.7320508075688772},"388":{"tf":1.7320508075688772},"389":{"tf":1.0},"390":{"tf":1.0},"391":{"tf":1.7320508075688772},"392":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"395":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0},"399":{"tf":1.0},"400":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.0},"75":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":4,"docs":{"376":{"tf":1.0},"393":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0}}}}},"p":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"199":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"196":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"v":{"1":{"/":{"(":{"?":{"!":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"192":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"180":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"180":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"u":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"180":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"195":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"195":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}}}}}},"df":4,"docs":{"192":{"tf":1.0},"196":{"tf":1.4142135623730951},"202":{"tf":1.0},"375":{"tf":1.0}}},"df":0,"docs":{}}},"<":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}},"df":35,"docs":{"179":{"tf":1.7320508075688772},"184":{"tf":1.0},"186":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":2.8284271247461903},"192":{"tf":2.0},"196":{"tf":1.4142135623730951},"199":{"tf":1.0},"2":{"tf":1.0},"202":{"tf":1.0},"204":{"tf":1.4142135623730951},"205":{"tf":1.4142135623730951},"208":{"tf":2.23606797749979},"279":{"tf":1.0},"280":{"tf":2.0},"287":{"tf":1.0},"3":{"tf":1.0},"316":{"tf":1.7320508075688772},"318":{"tf":1.0},"319":{"tf":1.0},"343":{"tf":1.7320508075688772},"344":{"tf":1.0},"375":{"tf":2.8284271247461903},"384":{"tf":1.7320508075688772},"385":{"tf":1.0},"404":{"tf":1.7320508075688772},"405":{"tf":1.0},"408":{"tf":1.7320508075688772},"409":{"tf":1.0},"414":{"tf":1.0},"449":{"tf":2.6457513110645907},"55":{"tf":1.7320508075688772},"56":{"tf":1.0},"9":{"tf":1.0},"96":{"tf":1.0}}},"p":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"(":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"102":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"243":{"tf":1.0},"249":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"=":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}},"e":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":7,"docs":{"232":{"tf":1.0},"239":{"tf":1.4142135623730951},"240":{"tf":1.0},"241":{"tf":1.0},"244":{"tf":1.0},"255":{"tf":1.0},"75":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"4":{"0":{"0":{"0":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"î":{"df":0,"docs":{},"t":{"df":2,"docs":{"175":{"tf":1.0},"20":{"tf":1.0}},"r":{"a":{"df":1,"docs":{"257":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"446":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":1,"docs":{"89":{"tf":1.0}}}}},"t":{"df":1,"docs":{"82":{"tf":1.0}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"363":{"tf":1.0}}}}}}},"u":{"df":1,"docs":{"293":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"236":{"tf":1.0}}}}}}}},"df":7,"docs":{"316":{"tf":1.4142135623730951},"319":{"tf":1.0},"377":{"tf":1.4142135623730951},"414":{"tf":1.7320508075688772},"82":{"tf":1.4142135623730951},"84":{"tf":1.0},"87":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"294":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":3,"docs":{"244":{"tf":1.0},"319":{"tf":1.0},"360":{"tf":1.0}},"é":{"df":1,"docs":{"174":{"tf":1.0}}}},"n":{"d":{"df":1,"docs":{"317":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"c":{"df":6,"docs":{"178":{"tf":1.0},"18":{"tf":1.7320508075688772},"388":{"tf":1.0},"403":{"tf":1.0},"80":{"tf":1.0},"84":{"tf":1.0}}},"df":2,"docs":{"293":{"tf":1.0},"85":{"tf":1.0}},"q":{"df":0,"docs":{},"u":{"df":75,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"281":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"396":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"é":{"df":2,"docs":{"299":{"tf":1.0},"87":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":3,"docs":{"278":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"3":{"tf":1.0},"301":{"tf":1.0}}}}}},"o":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"316":{"tf":1.0},"327":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"240":{"tf":1.0},"359":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"(":{"&":{"d":{"b":{"df":1,"docs":{"257":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"(":{"&":{"d":{"b":{"df":1,"docs":{"257":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"242":{"tf":1.0},"257":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}}}}},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"19":{"tf":1.4142135623730951}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"85":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"è":{"df":18,"docs":{"107":{"tf":1.4142135623730951},"133":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.7320508075688772},"169":{"tf":1.0},"175":{"tf":1.0},"193":{"tf":1.0},"205":{"tf":1.0},"23":{"tf":1.0},"234":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"293":{"tf":1.0},"324":{"tf":1.0},"333":{"tf":1.4142135623730951},"347":{"tf":1.0},"86":{"tf":1.0}}}},"t":{"df":9,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"115":{"tf":1.4142135623730951},"126":{"tf":1.0},"133":{"tf":1.0},"167":{"tf":1.0},"188":{"tf":1.0},"213":{"tf":1.0},"288":{"tf":1.0}}}},"r":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"167":{"tf":1.0}}}}},"df":0,"docs":{}}}},"r":{"df":1,"docs":{"428":{"tf":1.0}}}},"c":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"364":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"237":{"tf":1.0}}}}}}}},"d":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"df":1,"docs":{"376":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"414":{"tf":1.0}}}}}}}}}}}}}},"df":3,"docs":{"244":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.0}},"h":{"df":1,"docs":{"447":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":24,"docs":{"148":{"tf":1.4142135623730951},"169":{"tf":1.4142135623730951},"268":{"tf":1.7320508075688772},"269":{"tf":1.0},"280":{"tf":1.0},"3":{"tf":1.0},"325":{"tf":1.4142135623730951},"357":{"tf":1.0},"369":{"tf":1.7320508075688772},"370":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.4142135623730951},"376":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.7320508075688772},"381":{"tf":1.0},"382":{"tf":1.0},"383":{"tf":1.0},"76":{"tf":1.0}}}}}},"df":0,"docs":{}}},"v":{"df":2,"docs":{"180":{"tf":1.4142135623730951},"448":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"113":{"tf":1.0},"152":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"85":{"tf":1.0}}}}},"ê":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"314":{"tf":1.0}}},"z":{"df":1,"docs":{"88":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"m":{"a":{"df":2,"docs":{"375":{"tf":1.7320508075688772},"418":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"316":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"316":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"df":7,"docs":{"285":{"tf":1.0},"287":{"tf":1.0},"292":{"tf":1.7320508075688772},"299":{"tf":1.0},"375":{"tf":1.0},"400":{"tf":1.4142135623730951},"418":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"88":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"n":{"c":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"277":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":12,"docs":{"278":{"tf":1.0},"281":{"tf":1.0},"304":{"tf":1.7320508075688772},"305":{"tf":1.0},"316":{"tf":1.4142135623730951},"318":{"tf":1.4142135623730951},"328":{"tf":1.0},"352":{"tf":1.0},"359":{"tf":1.4142135623730951},"373":{"tf":1.0},"440":{"tf":1.7320508075688772},"441":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"4":{"\\\\":{".":{"0":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"1":{"\\\\":{".":{"0":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"|":{"b":{"df":0,"docs":{},"w":{"df":0,"docs":{},"h":{"3":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"394":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"85":{"tf":1.0},"88":{"tf":1.0}}}},"r":{"df":1,"docs":{"184":{"tf":1.0}}},"u":{"df":31,"docs":{"105":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"119":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.4142135623730951},"14":{"tf":1.0},"152":{"tf":1.4142135623730951},"160":{"tf":1.4142135623730951},"163":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"204":{"tf":1.0},"21":{"tf":1.0},"212":{"tf":1.0},"278":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.4142135623730951},"290":{"tf":1.0},"291":{"tf":1.7320508075688772},"292":{"tf":1.4142135623730951},"293":{"tf":1.0},"294":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772},"86":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":2,"docs":{"166":{"tf":1.0},"88":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":1,"docs":{"179":{"tf":1.0}}}},"df":0,"docs":{}}}}},"u":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":14,"docs":{"15":{"tf":1.0},"210":{"tf":1.0},"237":{"tf":1.0},"247":{"tf":1.4142135623730951},"248":{"tf":1.0},"253":{"tf":1.0},"290":{"tf":1.0},"292":{"tf":1.0},"327":{"tf":1.0},"362":{"tf":1.4142135623730951},"379":{"tf":1.0},"403":{"tf":1.0},"418":{"tf":1.0},"81":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"_":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}},"df":2,"docs":{"346":{"tf":1.0},"348":{"tf":1.0}}}}}},"df":12,"docs":{"10":{"tf":1.0},"225":{"tf":1.7320508075688772},"226":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.0},"376":{"tf":1.4142135623730951},"380":{"tf":1.0},"390":{"tf":1.4142135623730951},"393":{"tf":1.0},"416":{"tf":1.0},"447":{"tf":1.4142135623730951},"74":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"348":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"é":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"df":48,"docs":{"129":{"tf":1.4142135623730951},"148":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"161":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"172":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"180":{"tf":1.0},"187":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.0},"21":{"tf":1.0},"214":{"tf":1.0},"23":{"tf":1.4142135623730951},"234":{"tf":1.0},"237":{"tf":1.0},"242":{"tf":2.0},"243":{"tf":1.0},"244":{"tf":1.0},"245":{"tf":1.4142135623730951},"254":{"tf":1.0},"255":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.4142135623730951},"286":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"330":{"tf":1.4142135623730951},"332":{"tf":1.0},"347":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.4142135623730951},"364":{"tf":1.4142135623730951},"382":{"tf":1.0},"397":{"tf":1.0},"4":{"tf":1.0},"416":{"tf":1.0},"6":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"84":{"tf":1.0},"88":{"tf":1.0}},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"133":{"tf":1.0},"183":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"’":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"354":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"449":{"tf":1.0},"451":{"tf":1.0}}},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":3,"docs":{"314":{"tf":1.0},"325":{"tf":1.0},"330":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"236":{"tf":1.0}}}}}}}},"df":17,"docs":{"127":{"tf":1.4142135623730951},"150":{"tf":1.0},"151":{"tf":1.0},"189":{"tf":1.7320508075688772},"192":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.4142135623730951},"280":{"tf":1.0},"313":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"396":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0},"424":{"tf":3.0},"429":{"tf":1.0},"445":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"18":{"tf":1.0},"197":{"tf":1.4142135623730951},"88":{"tf":1.0}},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"318":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"(":{"\'":{"/":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"318":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":10,"docs":{"1":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"314":{"tf":1.0},"330":{"tf":1.4142135623730951},"334":{"tf":1.0},"35":{"tf":1.7320508075688772},"36":{"tf":1.0},"374":{"tf":1.4142135623730951},"9":{"tf":1.0}},"i":{"df":5,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"300":{"tf":1.0},"397":{"tf":1.0}},"é":{"df":3,"docs":{"196":{"tf":1.0},"330":{"tf":1.0},"425":{"tf":1.0}}}}}}}}},"i":{"df":1,"docs":{"18":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"o":{"_":{"c":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"175":{"tf":1.0},"319":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":6,"docs":{"173":{"tf":1.0},"183":{"tf":1.0},"199":{"tf":1.0},"243":{"tf":1.0},"317":{"tf":1.0},"412":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":85,"docs":{"11":{"tf":1.0},"118":{"tf":1.4142135623730951},"124":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"16":{"tf":1.0},"171":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.4142135623730951},"25":{"tf":1.0},"257":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"293":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"327":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"360":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"445":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}},"s":{"df":6,"docs":{"146":{"tf":1.0},"29":{"tf":1.7320508075688772},"30":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0}}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"277":{"tf":1.0},"286":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"m":{"b":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"151":{"tf":1.0},"397":{"tf":1.0}},"s":{"df":2,"docs":{"243":{"tf":1.0},"88":{"tf":1.0}},"é":{"df":1,"docs":{"166":{"tf":1.0}}}}}}},"r":{"df":4,"docs":{"106":{"tf":1.0},"156":{"tf":1.0},"290":{"tf":1.0},"88":{"tf":1.0}}}},"x":{"df":8,"docs":{"17":{"tf":1.4142135623730951},"276":{"tf":1.0},"331":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"402":{"tf":1.4142135623730951},"442":{"tf":1.0},"71":{"tf":1.0}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"116":{"tf":1.4142135623730951},"130":{"tf":1.0},"202":{"tf":1.4142135623730951}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"c":{"df":0,"docs":{},"é":{"df":1,"docs":{"174":{"tf":1.0}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"174":{"tf":1.0},"356":{"tf":1.0}}}},"df":24,"docs":{"16":{"tf":1.0},"166":{"tf":1.0},"18":{"tf":1.0},"202":{"tf":1.0},"243":{"tf":1.4142135623730951},"277":{"tf":1.4142135623730951},"279":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"321":{"tf":1.4142135623730951},"327":{"tf":1.0},"351":{"tf":1.4142135623730951},"360":{"tf":1.0},"365":{"tf":1.7320508075688772},"366":{"tf":1.0},"388":{"tf":1.0},"393":{"tf":1.0},"399":{"tf":1.0},"403":{"tf":1.0},"6":{"tf":2.0},"72":{"tf":1.4142135623730951},"82":{"tf":1.0},"83":{"tf":1.0},"98":{"tf":1.4142135623730951}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":127,"docs":{"1":{"tf":1.0},"100":{"tf":1.4142135623730951},"101":{"tf":1.0},"125":{"tf":1.0},"147":{"tf":1.4142135623730951},"150":{"tf":1.0},"151":{"tf":1.0},"155":{"tf":1.4142135623730951},"156":{"tf":1.0},"159":{"tf":1.4142135623730951},"16":{"tf":1.7320508075688772},"164":{"tf":1.0},"167":{"tf":1.0},"17":{"tf":1.7320508075688772},"178":{"tf":1.0},"18":{"tf":2.0},"186":{"tf":1.0},"187":{"tf":1.7320508075688772},"188":{"tf":1.0},"189":{"tf":1.0},"190":{"tf":1.0},"191":{"tf":1.4142135623730951},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.4142135623730951},"20":{"tf":1.0},"200":{"tf":1.0},"201":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"206":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.0},"21":{"tf":1.0},"210":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"213":{"tf":1.4142135623730951},"214":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"235":{"tf":1.0},"24":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"277":{"tf":1.4142135623730951},"278":{"tf":1.0},"284":{"tf":2.0},"285":{"tf":1.0},"286":{"tf":1.7320508075688772},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"29":{"tf":1.7320508075688772},"290":{"tf":1.7320508075688772},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"295":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.0},"298":{"tf":1.0},"299":{"tf":1.0},"30":{"tf":1.0},"300":{"tf":1.7320508075688772},"301":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.4142135623730951},"320":{"tf":1.0},"322":{"tf":1.0},"325":{"tf":1.0},"330":{"tf":2.23606797749979},"331":{"tf":1.4142135623730951},"332":{"tf":1.0},"334":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"372":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"382":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.4142135623730951},"401":{"tf":1.0},"402":{"tf":1.0},"417":{"tf":1.0},"424":{"tf":1.0},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.4142135623730951},"448":{"tf":1.0},"449":{"tf":1.4142135623730951},"451":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0},"79":{"tf":1.7320508075688772},"80":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.7320508075688772},"84":{"tf":1.0},"85":{"tf":1.4142135623730951},"86":{"tf":2.0},"87":{"tf":1.0},"88":{"tf":2.0},"89":{"tf":1.4142135623730951},"90":{"tf":1.7320508075688772},"91":{"tf":1.0},"94":{"tf":1.4142135623730951},"95":{"tf":1.0}}},"df":0,"docs":{},"z":{"df":2,"docs":{"159":{"tf":1.0},"291":{"tf":1.0}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"277":{"tf":1.4142135623730951},"6":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951}}}}},"r":{"df":2,"docs":{"292":{"tf":1.0},"84":{"tf":2.0}}}},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":5,"docs":{"316":{"tf":1.4142135623730951},"318":{"tf":2.0},"328":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0}}}}},"df":0,"docs":{}},"x":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{":":{":":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"y":{":":{":":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"364":{"tf":1.0},"376":{"tf":1.0}}}}}}}},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}},"df":0,"docs":{}},"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":7,"docs":{"134":{"tf":1.0},"237":{"tf":1.0},"279":{"tf":1.0},"361":{"tf":1.0},"364":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0}}}}},"z":{"df":2,"docs":{"146":{"tf":1.0},"165":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"b":{"1":{"[":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":1,"docs":{"356":{"tf":1.4142135623730951}}},"3":{"[":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":1,"docs":{"356":{"tf":1.0}}},"4":{"[":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"5":{"[":{"b":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"356":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"0":{"1":{"df":3,"docs":{"277":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"82":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"127":{"tf":1.7320508075688772},"134":{"tf":1.4142135623730951},"189":{"tf":2.23606797749979}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"446":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"446":{"tf":1.0}}}}}},"/":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"448":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"448":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":2,"docs":{"2":{"tf":1.0},"448":{"tf":1.4142135623730951}}}}}},"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":4,"docs":{"189":{"tf":1.4142135623730951},"199":{"tf":2.0},"204":{"tf":1.0},"208":{"tf":1.0}},"s":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"199":{"tf":2.23606797749979}}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":2,"docs":{"189":{"tf":1.0},"199":{"tf":1.0}},"g":{"df":2,"docs":{"318":{"tf":1.0},"377":{"tf":1.0}}}},"df":1,"docs":{"374":{"tf":1.0}},"n":{"a":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"127":{"tf":1.4142135623730951},"188":{"tf":1.0},"189":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}},"s":{")":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":6,"docs":{"189":{"tf":1.0},"206":{"tf":1.7320508075688772},"207":{"tf":2.23606797749979},"208":{"tf":2.0},"213":{"tf":1.0},"390":{"tf":1.0}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"124":{"tf":1.0},"424":{"tf":1.0}}}},"i":{"df":3,"docs":{"189":{"tf":1.4142135623730951},"207":{"tf":1.0},"390":{"tf":1.0}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"214":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"206":{"tf":1.4142135623730951}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"127":{"tf":1.4142135623730951},"189":{"tf":3.605551275463989}}}}}},"r":{".":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"348":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"df":12,"docs":{"287":{"tf":1.4142135623730951},"356":{"tf":1.7320508075688772},"357":{"tf":1.0},"376":{"tf":1.0},"419":{"tf":1.7320508075688772},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"428":{"tf":1.0},"448":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"(":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"423":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":2,"docs":{"21":{"tf":1.4142135623730951},"333":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},"6":{"4":{"df":3,"docs":{"102":{"tf":1.4142135623730951},"180":{"tf":1.0},"426":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"423":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":38,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"178":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"255":{"tf":1.0},"260":{"tf":1.7320508075688772},"261":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.7320508075688772},"293":{"tf":1.0},"322":{"tf":1.0},"324":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.4142135623730951},"339":{"tf":1.7320508075688772},"340":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.4142135623730951},"373":{"tf":1.4142135623730951},"382":{"tf":1.0},"386":{"tf":1.7320508075688772},"387":{"tf":1.0},"393":{"tf":1.0},"419":{"tf":1.4142135623730951},"443":{"tf":1.0},"449":{"tf":1.0},"75":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}}},"h":{"df":10,"docs":{"104":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"126":{"tf":1.0},"130":{"tf":1.0},"150":{"tf":1.0}},"r":{"c":{"df":1,"docs":{"166":{"tf":1.0}}},"df":0,"docs":{}}},"i":{"c":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"=":{"df":0,"docs":{},"y":{"df":2,"docs":{"150":{"tf":1.0},"166":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}}}},"df":7,"docs":{"177":{"tf":1.0},"277":{"tf":1.0},"291":{"tf":1.4142135623730951},"396":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"293":{"tf":1.0},"357":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":1,"docs":{"199":{"tf":1.0}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":10,"docs":{"100":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.4142135623730951},"279":{"tf":1.0},"3":{"tf":1.0},"356":{"tf":1.0},"5":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0},"98":{"tf":1.0}}}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"è":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":3,"docs":{"2":{"tf":1.0},"4":{"tf":1.0},"442":{"tf":1.4142135623730951}}}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"133":{"tf":1.7320508075688772},"17":{"tf":1.0},"20":{"tf":1.0},"293":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"442":{"tf":1.0}}}}}}}},"n":{"/":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"317":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"370":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":11,"docs":{"148":{"tf":1.0},"151":{"tf":1.0},"184":{"tf":1.0},"287":{"tf":1.4142135623730951},"356":{"tf":1.0},"370":{"tf":1.0},"373":{"tf":1.0},"420":{"tf":1.0},"446":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}},"y":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"201":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"d":{"df":4,"docs":{"187":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"96":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"189":{"tf":1.0}}}}},"df":1,"docs":{"370":{"tf":2.449489742783178}}},"t":{"df":2,"docs":{"291":{"tf":1.0},"383":{"tf":1.0}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"e":{"c":{"d":{"df":0,"docs":{},"s":{"a":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"o":{"b":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":1,"docs":{"419":{"tf":1.0}}},"c":{"df":2,"docs":{"121":{"tf":1.4142135623730951},"202":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"214":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"284":{"tf":1.0}}}},"q":{"df":0,"docs":{},"u":{"df":3,"docs":{"166":{"tf":1.4142135623730951},"183":{"tf":1.0},"400":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"167":{"tf":1.0},"214":{"tf":1.0}}}}}}}},"o":{"b":{"df":2,"docs":{"327":{"tf":1.0},"328":{"tf":1.0}}},"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"133":{"tf":1.0},"377":{"tf":1.0}}}},"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"179":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":4,"docs":{"169":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0}}},"n":{"df":2,"docs":{"17":{"tf":1.0},"347":{"tf":1.0}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"n":{"df":3,"docs":{"23":{"tf":1.0},"76":{"tf":1.0},"80":{"tf":1.0}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"257":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":3,"docs":{"234":{"tf":1.0},"242":{"tf":1.0},"254":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"t":{"df":1,"docs":{"199":{"tf":1.7320508075688772}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":4,"docs":{"189":{"tf":1.4142135623730951},"199":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"u":{"c":{"df":0,"docs":{},"l":{"df":2,"docs":{"133":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"399":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"î":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":7,"docs":{"173":{"tf":1.0},"21":{"tf":1.0},"294":{"tf":1.4142135623730951},"301":{"tf":1.0},"373":{"tf":1.7320508075688772},"375":{"tf":1.0},"6":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"288":{"tf":1.0}}}},"i":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"a":{"d":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"377":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"380":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"413":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":4,"docs":{"189":{"tf":1.7320508075688772},"195":{"tf":1.0},"202":{"tf":1.0},"208":{"tf":2.23606797749979}}}}}},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"184":{"tf":1.0},"397":{"tf":1.0}}},"i":{"df":0,"docs":{},"l":{"d":{"(":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"447":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"=":{"1":{"df":1,"docs":{"112":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":26,"docs":{"100":{"tf":1.4142135623730951},"102":{"tf":1.4142135623730951},"104":{"tf":1.0},"106":{"tf":1.0},"110":{"tf":1.4142135623730951},"112":{"tf":1.4142135623730951},"113":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"160":{"tf":1.0},"169":{"tf":1.4142135623730951},"171":{"tf":1.7320508075688772},"172":{"tf":1.4142135623730951},"174":{"tf":1.4142135623730951},"183":{"tf":1.0},"186":{"tf":1.0},"278":{"tf":1.4142135623730951},"287":{"tf":1.4142135623730951},"288":{"tf":1.0},"296":{"tf":1.7320508075688772},"301":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"389":{"tf":1.0},"444":{"tf":1.0},"447":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}}}},"df":5,"docs":{"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"177":{"tf":1.0},"183":{"tf":1.0},"414":{"tf":3.3166247903554}}}},"s":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"168":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"=":{"2":{"0":{"df":1,"docs":{"202":{"tf":1.0}}},"df":0,"docs":{}},"5":{"0":{"df":1,"docs":{"202":{"tf":1.0}}},"df":1,"docs":{"202":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"202":{"tf":1.4142135623730951}}}}}},"y":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"396":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":5,"docs":{"180":{"tf":1.0},"294":{"tf":1.0},"353":{"tf":1.0},"373":{"tf":1.0},"426":{"tf":1.0}}}}},"â":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"276":{"tf":1.0}}}}}},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"363":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"c":{"1":{"[":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"287":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"2":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"3":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"4":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"5":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"6":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"287":{"tf":1.4142135623730951}}},"[":{"0":{"2":{"df":3,"docs":{"277":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"420":{"tf":1.0},"82":{"tf":1.4142135623730951}}}},"d":{"d":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"445":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"r":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":22,"docs":{"104":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.7320508075688772},"167":{"tf":1.0},"175":{"tf":1.0},"187":{"tf":1.0},"232":{"tf":1.0},"244":{"tf":1.4142135623730951},"277":{"tf":1.4142135623730951},"356":{"tf":1.4142135623730951},"442":{"tf":1.4142135623730951},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0},"6":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"84":{"tf":1.0}},"l":{"df":0,"docs":{},"l":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"243":{"tf":1.0},"348":{"tf":1.0},"352":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":6,"docs":{"148":{"tf":1.0},"174":{"tf":1.7320508075688772},"296":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.4142135623730951},"413":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"427":{"tf":1.7320508075688772}}}}}},"n":{"\'":{"df":0,"docs":{},"t":{"df":1,"docs":{"300":{"tf":1.0}}}},"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"425":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"424":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"347":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"377":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":7,"docs":{"173":{"tf":1.0},"175":{"tf":1.4142135623730951},"183":{"tf":1.4142135623730951},"317":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"375":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"277":{"tf":1.4142135623730951},"278":{"tf":1.0},"304":{"tf":1.7320508075688772},"305":{"tf":1.0}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":4,"docs":{"23":{"tf":1.0},"243":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":16,"docs":{"113":{"tf":1.0},"172":{"tf":1.0},"174":{"tf":2.0},"252":{"tf":1.0},"287":{"tf":2.23606797749979},"288":{"tf":1.4142135623730951},"293":{"tf":1.0},"296":{"tf":1.4142135623730951},"299":{"tf":1.0},"312":{"tf":1.7320508075688772},"320":{"tf":2.23606797749979},"321":{"tf":1.7320508075688772},"327":{"tf":1.0},"389":{"tf":1.7320508075688772},"390":{"tf":1.4142135623730951},"403":{"tf":1.7320508075688772}}}}},"s":{"c":{"a":{"d":{"df":1,"docs":{"360":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":10,"docs":{"442":{"tf":1.0},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0},"451":{"tf":1.0}}}}}}},"df":6,"docs":{"102":{"tf":1.0},"163":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"23":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":3,"docs":{"394":{"tf":1.4142135623730951},"395":{"tf":1.4142135623730951},"396":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"s":{"df":6,"docs":{"166":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}}},"d":{"df":9,"docs":{"109":{"tf":1.0},"123":{"tf":1.0},"158":{"tf":1.0},"166":{"tf":1.0},"178":{"tf":1.0},"289":{"tf":1.0},"291":{"tf":1.4142135623730951},"294":{"tf":1.0},"83":{"tf":1.0}},"n":{"/":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"214":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":4,"docs":{"214":{"tf":1.7320508075688772},"292":{"tf":1.0},"400":{"tf":1.0},"418":{"tf":1.4142135623730951}}}},"df":9,"docs":{"104":{"tf":1.0},"123":{"tf":2.0},"185":{"tf":1.4142135623730951},"19":{"tf":1.0},"277":{"tf":1.0},"291":{"tf":1.0},"394":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}},"e":{"df":120,"docs":{"1":{"tf":1.4142135623730951},"11":{"tf":1.0},"113":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.4142135623730951},"153":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.4142135623730951},"161":{"tf":1.7320508075688772},"168":{"tf":1.4142135623730951},"177":{"tf":1.0},"18":{"tf":1.0},"189":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"231":{"tf":1.0},"237":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.4142135623730951},"282":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.7320508075688772},"288":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.4142135623730951},"3":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"347":{"tf":1.0},"35":{"tf":1.0},"352":{"tf":1.0},"358":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"379":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"388":{"tf":1.4142135623730951},"389":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"416":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.4142135623730951},"449":{"tf":1.0},"45":{"tf":1.0},"451":{"tf":1.7320508075688772},"47":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.4142135623730951},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.7320508075688772},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"77":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":2.0},"90":{"tf":1.0},"92":{"tf":1.0}},"l":{"a":{"df":2,"docs":{"148":{"tf":1.0},"417":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":1,"docs":{"153":{"tf":1.0}}},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"19":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"153":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"249":{"tf":1.0}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"124":{"tf":1.0}}}}}},"df":5,"docs":{"101":{"tf":1.0},"115":{"tf":2.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"129":{"tf":1.0}}}}},"df":1,"docs":{"133":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"117":{"tf":1.4142135623730951},"129":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"t":{"df":154,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"176":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.7320508075688772},"20":{"tf":1.0},"215":{"tf":1.0},"216":{"tf":1.0},"217":{"tf":1.0},"218":{"tf":1.0},"219":{"tf":1.0},"220":{"tf":1.0},"221":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.0},"227":{"tf":1.0},"228":{"tf":1.0},"229":{"tf":1.0},"230":{"tf":1.0},"244":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"260":{"tf":1.0},"261":{"tf":1.0},"262":{"tf":1.0},"263":{"tf":1.0},"264":{"tf":1.0},"265":{"tf":1.0},"266":{"tf":1.0},"267":{"tf":1.0},"268":{"tf":1.0},"269":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"271":{"tf":1.0},"272":{"tf":1.0},"273":{"tf":1.0},"274":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"282":{"tf":1.0},"283":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.0},"3":{"tf":1.7320508075688772},"30":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.0},"304":{"tf":1.0},"305":{"tf":1.0},"306":{"tf":1.0},"307":{"tf":1.0},"308":{"tf":1.0},"309":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":1.0},"387":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"416":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"431":{"tf":1.0},"432":{"tf":1.0},"433":{"tf":1.0},"434":{"tf":1.0},"435":{"tf":1.0},"436":{"tf":1.0},"437":{"tf":1.0},"438":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"440":{"tf":1.0},"441":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"86":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0}}}}},"f":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"312":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"h":{"a":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":4,"docs":{"116":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"97":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"133":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"m":{"df":0,"docs":{},"p":{"df":2,"docs":{"18":{"tf":1.0},"330":{"tf":1.0}}}},"n":{"df":1,"docs":{"348":{"tf":1.7320508075688772}},"g":{"df":4,"docs":{"18":{"tf":1.0},"294":{"tf":1.0},"355":{"tf":1.0},"424":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"m":{"df":2,"docs":{"442":{"tf":1.0},"83":{"tf":1.7320508075688772}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"359":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"243":{"tf":1.0},"318":{"tf":1.0},"357":{"tf":1.0}}}}}},"r":{"df":4,"docs":{"178":{"tf":1.0},"214":{"tf":1.0},"319":{"tf":1.0},"350":{"tf":1.4142135623730951}}},"z":{"df":2,"docs":{"83":{"tf":1.4142135623730951},"88":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":6,"docs":{"169":{"tf":1.0},"183":{"tf":1.0},"348":{"tf":1.0},"352":{"tf":1.4142135623730951},"356":{"tf":1.0},"357":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"é":{"df":1,"docs":{"88":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":20,"docs":{"147":{"tf":1.0},"168":{"tf":1.4142135623730951},"169":{"tf":1.0},"173":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.0},"186":{"tf":1.0},"205":{"tf":1.7320508075688772},"213":{"tf":1.0},"240":{"tf":1.0},"244":{"tf":1.0},"290":{"tf":1.0},"3":{"tf":1.0},"312":{"tf":1.0},"355":{"tf":1.0},"388":{"tf":1.0},"397":{"tf":1.4142135623730951},"403":{"tf":1.0},"442":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"r":{"df":1,"docs":{"184":{"tf":1.0}},"g":{"df":6,"docs":{"133":{"tf":1.0},"150":{"tf":1.0},"174":{"tf":1.0},"293":{"tf":1.0},"327":{"tf":1.0},"414":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"236":{"tf":1.4142135623730951}}}}}},"r":{"df":1,"docs":{"319":{"tf":1.0}}}},"é":{"df":5,"docs":{"166":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.0},"254":{"tf":1.0},"318":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"327":{"tf":1.0},"328":{"tf":1.0}}}}},"u":{"d":{"df":2,"docs":{"232":{"tf":1.0},"240":{"tf":1.0}}},"df":0,"docs":{}},"î":{"df":0,"docs":{},"n":{"df":2,"docs":{"355":{"tf":1.0},"88":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"183":{"tf":1.0},"193":{"tf":1.0}},"k":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"x":{"df":1,"docs":{"330":{"tf":1.0}}}}},"df":11,"docs":{"174":{"tf":1.4142135623730951},"317":{"tf":1.0},"320":{"tf":1.4142135623730951},"321":{"tf":1.4142135623730951},"348":{"tf":1.0},"349":{"tf":1.0},"389":{"tf":1.0},"390":{"tf":1.0},"403":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"186":{"tf":1.4142135623730951},"393":{"tf":1.4142135623730951},"403":{"tf":1.7320508075688772}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"148":{"tf":1.0},"161":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":20,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"277":{"tf":1.4142135623730951},"284":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"6":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"158":{"tf":1.0}}}}}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"159":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":11,"docs":{"102":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"160":{"tf":1.0},"166":{"tf":1.4142135623730951},"172":{"tf":1.0},"19":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"393":{"tf":1.0},"397":{"tf":1.0}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"428":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"2":{"tf":1.0}}}},"r":{"df":1,"docs":{"244":{"tf":1.0}}},"z":{"df":1,"docs":{"3":{"tf":1.0}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":4,"docs":{"18":{"tf":1.4142135623730951},"21":{"tf":1.0},"23":{"tf":1.0},"243":{"tf":1.4142135623730951}},"é":{"df":1,"docs":{"382":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"o":{"d":{"df":3,"docs":{"102":{"tf":1.0},"109":{"tf":1.0},"111":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"174":{"tf":1.4142135623730951},"19":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"83":{"tf":1.0},"86":{"tf":1.0}}}}}}}},"x":{"df":1,"docs":{"76":{"tf":1.0}}}},"u":{"df":1,"docs":{"292":{"tf":1.0}},"e":{"df":7,"docs":{"133":{"tf":1.4142135623730951},"317":{"tf":1.0},"319":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":1.0},"332":{"tf":1.0},"377":{"tf":1.0}},"r":{"a":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"322":{"tf":1.0},"323":{"tf":1.4142135623730951}}}}}}}}},"i":{"\'":{")":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"318":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":11,"docs":{"146":{"tf":1.0},"147":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.4142135623730951},"165":{"tf":1.0},"166":{"tf":1.0},"171":{"tf":1.0},"183":{"tf":1.0},"186":{"tf":1.0}}}},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":11,"docs":{"148":{"tf":1.0},"164":{"tf":1.4142135623730951},"174":{"tf":1.4142135623730951},"186":{"tf":1.0},"296":{"tf":1.0},"317":{"tf":1.0},"379":{"tf":1.0},"447":{"tf":2.449489742783178},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"9":{"tf":1.0}}}}}},"/":{"c":{"d":{"df":6,"docs":{"102":{"tf":1.0},"145":{"tf":1.0},"155":{"tf":1.0},"378":{"tf":1.4142135623730951},"413":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":3,"docs":{"160":{"tf":1.0},"169":{"tf":1.0},"172":{"tf":1.0}}}},"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"447":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"0":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"a":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"380":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"372":{"tf":1.0}}}}}}}},"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"=":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"166":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"317":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"381":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"=":{"3":{"6":{"0":{"0":{"df":2,"docs":{"102":{"tf":1.0},"172":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"183":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"=":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"180":{"tf":1.0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":1,"docs":{"186":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":2,"docs":{"180":{"tf":1.0},"186":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":4,"docs":{"380":{"tf":1.0},"381":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"8":{"0":{"8":{"1":{"df":1,"docs":{"180":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"186":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":1,"docs":{"236":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":6,"docs":{"102":{"tf":1.0},"155":{"tf":1.0},"172":{"tf":1.0},"186":{"tf":1.0},"378":{"tf":1.0},"414":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":5,"docs":{"238":{"tf":1.0},"319":{"tf":1.0},"381":{"tf":1.0},"413":{"tf":1.0},"96":{"tf":1.0}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"172":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"156":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"=":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":2,"docs":{"160":{"tf":1.0},"166":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"372":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":2,"docs":{"175":{"tf":1.0},"372":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"x":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":3,"docs":{"169":{"tf":1.0},"183":{"tf":1.0},"238":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"=":{"4":{"df":3,"docs":{"102":{"tf":1.0},"155":{"tf":1.0},"172":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"185":{"tf":1.0},"372":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":3,"docs":{"150":{"tf":1.0},"156":{"tf":1.0},"186":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"148":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"=":{"1":{"9":{"2":{".":{"1":{"6":{"8":{".":{"1":{"3":{".":{"1":{"1":{"0":{"df":1,"docs":{"296":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"154":{"tf":1.0}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"172":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"155":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":5,"docs":{"102":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.4142135623730951},"171":{"tf":1.0},"296":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":3,"docs":{"153":{"tf":1.0},"166":{"tf":1.4142135623730951},"238":{"tf":1.0}}}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"163":{"tf":1.7320508075688772}}}}}}}}}},"df":0,"docs":{}},"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"154":{"tf":1.0},"155":{"tf":1.0},"172":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":5,"docs":{"146":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.0},"161":{"tf":1.0},"163":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"=":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"/":{"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"df":1,"docs":{"154":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"d":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"df":1,"docs":{"172":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"155":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"166":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":4,"docs":{"150":{"tf":1.0},"153":{"tf":1.0},"163":{"tf":1.4142135623730951},"167":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"=":{"2":{"2":{"df":2,"docs":{"154":{"tf":1.0},"172":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"153":{"tf":1.0},"163":{"tf":1.0},"183":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"153":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"=":{"c":{"df":0,"docs":{},"i":{"df":4,"docs":{"154":{"tf":1.0},"155":{"tf":1.0},"172":{"tf":1.0},"296":{"tf":1.0}}}},"df":0,"docs":{}},"@":{"$":{"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"163":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"}":{"@":{"$":{"df":0,"docs":{},"{":{"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"183":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"s":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"184":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":2,"docs":{"177":{"tf":1.0},"186":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":4,"docs":{"380":{"tf":1.0},"381":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"320":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{":":{":":{"c":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"351":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"=":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"177":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"184":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"v":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"372":{"tf":1.0}}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"102":{"tf":1.0},"172":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"161":{"tf":1.0},"238":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"b":{"df":0,"docs":{},"l":{"df":5,"docs":{"101":{"tf":1.4142135623730951},"103":{"tf":1.4142135623730951},"147":{"tf":1.0},"148":{"tf":1.4142135623730951},"95":{"tf":1.0}},"e":{"[":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"356":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":1,"docs":{"334":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}},"e":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"(":{"b":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}}}}},"df":75,"docs":{"1":{"tf":1.0},"102":{"tf":1.0},"145":{"tf":1.7320508075688772},"146":{"tf":1.7320508075688772},"147":{"tf":2.449489742783178},"148":{"tf":2.6457513110645907},"149":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.7320508075688772},"154":{"tf":1.7320508075688772},"155":{"tf":1.4142135623730951},"156":{"tf":1.0},"157":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.0},"160":{"tf":3.1622776601683795},"161":{"tf":2.23606797749979},"162":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.4142135623730951},"165":{"tf":2.0},"166":{"tf":2.0},"167":{"tf":1.4142135623730951},"168":{"tf":1.7320508075688772},"169":{"tf":1.0},"170":{"tf":1.4142135623730951},"171":{"tf":1.0},"172":{"tf":2.0},"173":{"tf":2.0},"174":{"tf":2.0},"175":{"tf":1.0},"176":{"tf":1.0},"183":{"tf":1.7320508075688772},"186":{"tf":2.0},"187":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"210":{"tf":1.7320508075688772},"221":{"tf":1.7320508075688772},"222":{"tf":1.0},"272":{"tf":1.7320508075688772},"273":{"tf":1.0},"281":{"tf":1.0},"29":{"tf":1.7320508075688772},"296":{"tf":2.0},"30":{"tf":1.0},"317":{"tf":2.6457513110645907},"318":{"tf":3.0},"321":{"tf":1.4142135623730951},"369":{"tf":1.0},"370":{"tf":1.4142135623730951},"375":{"tf":1.7320508075688772},"378":{"tf":1.0},"379":{"tf":1.4142135623730951},"380":{"tf":1.7320508075688772},"381":{"tf":1.0},"382":{"tf":1.4142135623730951},"414":{"tf":1.0},"416":{"tf":1.0},"418":{"tf":1.0},"420":{"tf":1.7320508075688772},"436":{"tf":1.7320508075688772},"437":{"tf":1.0},"443":{"tf":1.4142135623730951},"444":{"tf":1.4142135623730951},"447":{"tf":2.8284271247461903},"5":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"[":{"\\"":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"370":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"370":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"413":{"tf":1.0}},"e":{"[":{"\\"":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}},"e":{":":{":":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"380":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"t":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":2,"docs":{"169":{"tf":1.0},"175":{"tf":1.0}}}}},"df":0,"docs":{}},"v":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"380":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":5,"docs":{"169":{"tf":1.0},"372":{"tf":1.0},"380":{"tf":1.0},"413":{"tf":2.0},"420":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":1,"docs":{"370":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"|":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"166":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"|":{"df":0,"docs":{},"s":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"|":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"185":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"375":{"tf":1.0}}},"r":{"df":3,"docs":{"352":{"tf":1.0},"393":{"tf":1.0},"403":{"tf":1.0}},"é":{"df":1,"docs":{"281":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"147":{"tf":1.0}}}}}}},"u":{"d":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"m":{"d":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":30,"docs":{"13":{"tf":1.4142135623730951},"14":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.0},"16":{"tf":2.449489742783178},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"179":{"tf":1.4142135623730951},"183":{"tf":1.0},"189":{"tf":1.4142135623730951},"19":{"tf":2.0},"196":{"tf":1.0},"20":{"tf":3.1622776601683795},"208":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":2.23606797749979},"243":{"tf":1.0},"257":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"300":{"tf":1.4142135623730951},"374":{"tf":1.4142135623730951},"382":{"tf":1.0},"413":{"tf":1.0},"422":{"tf":1.0},"426":{"tf":1.7320508075688772},"7":{"tf":1.0},"72":{"tf":1.0},"83":{"tf":1.4142135623730951}},"i":{"df":10,"docs":{"146":{"tf":1.0},"148":{"tf":1.0},"160":{"tf":1.4142135623730951},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"356":{"tf":1.7320508075688772},"370":{"tf":1.0},"413":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{",":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"425":{"tf":1.0}}}}}},".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"(":{"\\"":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"4":{"0":{"0":{"1":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"v":{"1":{"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"316":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"316":{"tf":1.0}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"x":{"_":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"s":{"df":2,"docs":{"133":{"tf":1.0},"202":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":19,"docs":{"127":{"tf":1.0},"133":{"tf":1.0},"169":{"tf":1.0},"188":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.4142135623730951},"204":{"tf":1.7320508075688772},"206":{"tf":1.4142135623730951},"207":{"tf":1.4142135623730951},"243":{"tf":1.4142135623730951},"276":{"tf":1.0},"316":{"tf":1.0},"347":{"tf":1.0},"357":{"tf":1.0},"413":{"tf":1.0},"424":{"tf":3.3166247903554},"425":{"tf":2.449489742783178},"449":{"tf":2.449489742783178}},"s":{"/":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":2,"docs":{"449":{"tf":1.0},"451":{"tf":1.0}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"449":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"449":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":6,"docs":{"174":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"389":{"tf":1.0},"403":{"tf":1.0},"447":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"253":{"tf":1.0}}},"z":{"df":2,"docs":{"294":{"tf":1.4142135623730951},"86":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"424":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"202":{"tf":1.0}}}}}}},"df":17,"docs":{"123":{"tf":1.7320508075688772},"189":{"tf":1.0},"194":{"tf":1.0},"24":{"tf":1.0},"278":{"tf":1.0},"289":{"tf":1.4142135623730951},"294":{"tf":1.7320508075688772},"301":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.4142135623730951},"351":{"tf":1.0},"356":{"tf":2.23606797749979},"357":{"tf":1.4142135623730951},"421":{"tf":1.0},"422":{"tf":1.0},"424":{"tf":2.23606797749979}},"r":{"df":8,"docs":{"24":{"tf":1.0},"25":{"tf":1.7320508075688772},"26":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"396":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0}}},"z":{"df":1,"docs":{"289":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"133":{"tf":1.0}}}},"u":{"d":{"df":1,"docs":{"147":{"tf":1.0}}},"df":0,"docs":{}}},"é":{"df":13,"docs":{"15":{"tf":1.0},"167":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"416":{"tf":1.0},"424":{"tf":1.0},"448":{"tf":1.0},"8":{"tf":1.0},"84":{"tf":1.4142135623730951}}}},"m":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"288":{"tf":1.4142135623730951}}}}},"d":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"21":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"173":{"tf":1.4142135623730951}}}}}},"d":{"df":0,"docs":{},"e":{"df":59,"docs":{"100":{"tf":1.4142135623730951},"148":{"tf":1.0},"16":{"tf":1.7320508075688772},"167":{"tf":1.0},"168":{"tf":1.0},"176":{"tf":1.0},"18":{"tf":2.8284271247461903},"191":{"tf":1.0},"2":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.7320508075688772},"257":{"tf":1.0},"26":{"tf":1.0},"276":{"tf":1.4142135623730951},"279":{"tf":1.0},"280":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.0},"298":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"301":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.4142135623730951},"353":{"tf":1.0},"354":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"364":{"tf":1.0},"380":{"tf":1.0},"390":{"tf":1.0},"394":{"tf":1.0},"398":{"tf":1.4142135623730951},"4":{"tf":1.0},"403":{"tf":1.0},"421":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.0},"9":{"tf":1.0}}},"é":{"df":2,"docs":{"244":{"tf":1.0},"249":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"155":{"tf":1.4142135623730951},"375":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"165":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":2,"docs":{"397":{"tf":1.0},"417":{"tf":1.0}}}}}}}},"l":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"351":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"d":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":8,"docs":{"10":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":1.0},"65":{"tf":1.7320508075688772},"66":{"tf":1.0},"7":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"5":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"294":{"tf":1.0}}}}},"df":2,"docs":{"20":{"tf":1.0},"23":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"123":{"tf":1.0},"6":{"tf":1.0}}}}},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"167":{"tf":1.0}},"é":{"df":1,"docs":{"147":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":2,"docs":{"199":{"tf":1.0},"244":{"tf":1.0}},"é":{"df":1,"docs":{"372":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"374":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":22,"docs":{"100":{"tf":1.0},"16":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"174":{"tf":1.4142135623730951},"183":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"290":{"tf":1.0},"292":{"tf":1.0},"296":{"tf":1.4142135623730951},"310":{"tf":1.0},"320":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951},"389":{"tf":1.0},"425":{"tf":1.0},"5":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.4142135623730951}},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"425":{"tf":1.0}},"e":{"(":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"424":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":7,"docs":{"16":{"tf":1.4142135623730951},"249":{"tf":1.0},"347":{"tf":1.0},"420":{"tf":1.4142135623730951},"6":{"tf":1.0},"82":{"tf":1.0},"86":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"174":{"tf":1.0}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"375":{"tf":1.0},"394":{"tf":1.0},"442":{"tf":1.4142135623730951}}}}},"df":12,"docs":{"10":{"tf":1.0},"108":{"tf":2.0},"168":{"tf":1.0},"231":{"tf":1.0},"279":{"tf":1.0},"287":{"tf":1.0},"3":{"tf":1.4142135623730951},"358":{"tf":1.0},"451":{"tf":1.4142135623730951},"74":{"tf":1.0},"76":{"tf":1.0},"8":{"tf":1.0}},"é":{"df":2,"docs":{"166":{"tf":1.0},"377":{"tf":1.0}}}},"ç":{"df":1,"docs":{"19":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"373":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"a":{"df":2,"docs":{"185":{"tf":1.4142135623730951},"380":{"tf":1.0}}},"df":0,"docs":{}}}},"df":17,"docs":{"123":{"tf":1.0},"171":{"tf":1.0},"184":{"tf":1.0},"186":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.0},"284":{"tf":1.4142135623730951},"287":{"tf":1.0},"294":{"tf":2.6457513110645907},"299":{"tf":1.0},"375":{"tf":1.0},"428":{"tf":1.0},"43":{"tf":1.7320508075688772},"44":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0},"84":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"84":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}}},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"393":{"tf":1.0}}}}}}},"df":0,"docs":{}},"t":{"df":3,"docs":{"151":{"tf":1.0},"18":{"tf":1.0},"390":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":10,"docs":{"277":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.4142135623730951},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":2.0},"299":{"tf":1.0},"300":{"tf":1.0},"389":{"tf":1.4142135623730951},"82":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"284":{"tf":1.4142135623730951},"292":{"tf":1.4142135623730951}}}},"é":{"df":4,"docs":{"292":{"tf":1.0},"293":{"tf":1.0},"375":{"tf":1.0},"418":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":6,"docs":{"155":{"tf":1.4142135623730951},"174":{"tf":1.0},"331":{"tf":1.0},"345":{"tf":1.0},"353":{"tf":1.0},"396":{"tf":1.0}}},"x":{"df":1,"docs":{"447":{"tf":1.0}}}},"è":{"df":0,"docs":{},"t":{"df":10,"docs":{"125":{"tf":1.0},"187":{"tf":1.0},"258":{"tf":1.0},"277":{"tf":1.0},"284":{"tf":1.0},"290":{"tf":1.0},"421":{"tf":1.0},"448":{"tf":1.4142135623730951},"5":{"tf":1.0},"73":{"tf":1.0}}}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"214":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"t":{"df":4,"docs":{"278":{"tf":1.0},"286":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}},"o":{"df":1,"docs":{"82":{"tf":1.0}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"185":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"t":{"df":5,"docs":{"237":{"tf":1.4142135623730951},"245":{"tf":1.4142135623730951},"319":{"tf":1.7320508075688772},"75":{"tf":1.0},"9":{"tf":1.0}}}},"s":{"df":24,"docs":{"101":{"tf":1.4142135623730951},"109":{"tf":1.4142135623730951},"168":{"tf":1.0},"169":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.0},"181":{"tf":1.0},"291":{"tf":1.0},"300":{"tf":1.0},"318":{"tf":1.0},"369":{"tf":1.0},"378":{"tf":1.4142135623730951},"381":{"tf":1.7320508075688772},"72":{"tf":1.0},"73":{"tf":1.0},"79":{"tf":1.4142135623730951},"80":{"tf":1.0},"81":{"tf":1.4142135623730951},"82":{"tf":1.0},"84":{"tf":1.7320508075688772},"85":{"tf":2.23606797749979},"86":{"tf":1.0},"87":{"tf":1.4142135623730951},"88":{"tf":2.0}},"e":{".":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":3,"docs":{"444":{"tf":1.0},"451":{"tf":1.0},"84":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":3,"docs":{"444":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"444":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":6,"docs":{"109":{"tf":2.0},"178":{"tf":1.4142135623730951},"2":{"tf":1.0},"323":{"tf":1.0},"84":{"tf":2.23606797749979},"88":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"174":{"tf":1.0},"6":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":8,"docs":{"10":{"tf":1.7320508075688772},"16":{"tf":1.0},"276":{"tf":1.0},"281":{"tf":1.7320508075688772},"287":{"tf":1.0},"3":{"tf":1.0},"5":{"tf":1.0},"76":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"82":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":2,"docs":{"355":{"tf":1.0},"417":{"tf":1.0}}}}}},"t":{"df":16,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"153":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"213":{"tf":1.0},"22":{"tf":1.0},"243":{"tf":1.4142135623730951},"290":{"tf":1.0},"293":{"tf":1.0},"72":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0},"86":{"tf":2.449489742783178},"87":{"tf":1.0}},"e":{"@":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"19":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"181":{"tf":1.0},"346":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"423":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"426":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}}},"df":0,"docs":{}}}}}},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"415":{"tf":1.4142135623730951}}}},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":1,"docs":{"236":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":2,"docs":{"183":{"tf":1.0},"352":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"84":{"tf":1.0},"95":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":2,"docs":{"116":{"tf":1.4142135623730951},"130":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"p":{"df":1,"docs":{"189":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":20,"docs":{"104":{"tf":1.0},"105":{"tf":1.4142135623730951},"150":{"tf":1.0},"155":{"tf":1.4142135623730951},"188":{"tf":1.0},"189":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":1.0},"211":{"tf":1.0},"254":{"tf":1.0},"258":{"tf":1.0},"288":{"tf":1.0},"314":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"4":{"tf":1.0},"445":{"tf":1.0},"82":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":64,"docs":{"125":{"tf":1.0},"127":{"tf":1.4142135623730951},"141":{"tf":1.7320508075688772},"142":{"tf":1.0},"143":{"tf":1.7320508075688772},"144":{"tf":1.0},"145":{"tf":1.7320508075688772},"146":{"tf":1.0},"147":{"tf":1.0},"148":{"tf":1.0},"149":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"154":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"157":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.0},"16":{"tf":1.0},"160":{"tf":1.7320508075688772},"161":{"tf":1.0},"162":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"168":{"tf":1.0},"172":{"tf":1.4142135623730951},"174":{"tf":1.0},"180":{"tf":1.4142135623730951},"187":{"tf":1.0},"2":{"tf":1.0},"213":{"tf":1.0},"214":{"tf":1.0},"231":{"tf":1.0},"232":{"tf":1.7320508075688772},"233":{"tf":1.4142135623730951},"235":{"tf":1.7320508075688772},"239":{"tf":1.4142135623730951},"249":{"tf":1.0},"285":{"tf":1.0},"290":{"tf":1.0},"299":{"tf":1.0},"3":{"tf":1.0},"313":{"tf":1.0},"317":{"tf":1.0},"325":{"tf":1.0},"35":{"tf":1.7320508075688772},"36":{"tf":1.0},"445":{"tf":1.0},"447":{"tf":1.4142135623730951},"6":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.7320508075688772},"8":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":2.0},"84":{"tf":1.0},"98":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":4,"docs":{"284":{"tf":1.4142135623730951},"290":{"tf":1.4142135623730951},"296":{"tf":1.0},"297":{"tf":1.0}}}},"é":{"df":1,"docs":{"322":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"m":{"df":4,"docs":{"18":{"tf":1.0},"243":{"tf":1.0},"330":{"tf":1.0},"86":{"tf":1.0}},"é":{"df":1,"docs":{"22":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"327":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"u":{"df":2,"docs":{"189":{"tf":1.0},"207":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"276":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":20,"docs":{"1":{"tf":1.0},"264":{"tf":1.7320508075688772},"265":{"tf":1.0},"388":{"tf":1.7320508075688772},"389":{"tf":1.0},"390":{"tf":1.0},"391":{"tf":1.0},"392":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"395":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0},"399":{"tf":1.0},"400":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.0},"75":{"tf":1.0}}}}}}}},"n":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"71":{"tf":1.0}}}}},"î":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}},"r":{"df":1,"docs":{"231":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":15,"docs":{"104":{"tf":1.7320508075688772},"133":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"17":{"tf":2.23606797749979},"23":{"tf":1.0},"253":{"tf":1.0},"291":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"6":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"293":{"tf":1.0},"86":{"tf":1.0}}}},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"146":{"tf":1.0},"160":{"tf":1.0},"171":{"tf":1.0}}}}}},"é":{"df":1,"docs":{"328":{"tf":1.0}}}}},"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":11,"docs":{"16":{"tf":1.0},"189":{"tf":1.0},"20":{"tf":1.0},"290":{"tf":1.0},"354":{"tf":1.0},"355":{"tf":1.4142135623730951},"414":{"tf":1.0},"424":{"tf":1.0},"443":{"tf":1.0},"5":{"tf":1.0},"86":{"tf":1.0}}}}}}},"u":{"df":1,"docs":{"168":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":2,"docs":{"18":{"tf":1.0},"347":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"133":{"tf":1.0},"98":{"tf":1.0}}},"m":{"df":0,"docs":{},"m":{"df":3,"docs":{"169":{"tf":1.0},"352":{"tf":1.0},"4":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"402":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}},"s":{"df":4,"docs":{"2":{"tf":1.0},"276":{"tf":1.0},"281":{"tf":1.0},"76":{"tf":1.0}}},"t":{"df":2,"docs":{"412":{"tf":1.0},"416":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":8,"docs":{"20":{"tf":1.0},"280":{"tf":1.0},"324":{"tf":1.0},"49":{"tf":1.7320508075688772},"50":{"tf":1.0},"75":{"tf":1.0},"8":{"tf":1.4142135623730951},"9":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":76,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"279":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"85":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}},"é":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"é":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"214":{"tf":1.0},"242":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"t":{"a":{"c":{"df":0,"docs":{},"t":{"@":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"95":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"171":{"tf":1.0},"291":{"tf":1.4142135623730951},"381":{"tf":1.0},"420":{"tf":1.0},"85":{"tf":2.0},"87":{"tf":1.0},"88":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"214":{"tf":1.0},"96":{"tf":1.0}}}}},"t":{"df":3,"docs":{"133":{"tf":1.0},"352":{"tf":1.0},"418":{"tf":1.0}}},"u":{"df":78,"docs":{"104":{"tf":1.0},"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"189":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"284":{"tf":1.0},"29":{"tf":1.0},"294":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"84":{"tf":1.4142135623730951},"90":{"tf":1.0},"92":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"df":74,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"451":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.4142135623730951}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"375":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"451":{"tf":1.0}}},"t":{"df":5,"docs":{"166":{"tf":1.0},"174":{"tf":1.0},"23":{"tf":1.0},"3":{"tf":1.0},"88":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"85":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"362":{"tf":1.7320508075688772}}}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"396":{"tf":1.0}}}}}},"df":2,"docs":{"205":{"tf":1.4142135623730951},"322":{"tf":1.0}},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":0,"docs":{}}},"i":{"b":{"df":0,"docs":{},"u":{"df":12,"docs":{"2":{"tf":1.0},"276":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"358":{"tf":1.7320508075688772},"359":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"4":{"tf":1.0}},"t":{"df":7,"docs":{"278":{"tf":1.0},"279":{"tf":1.0},"301":{"tf":1.0},"302":{"tf":1.7320508075688772},"303":{"tf":1.0},"308":{"tf":1.7320508075688772},"309":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"2":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.7320508075688772}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"9":{"0":{"df":1,"docs":{"277":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}},"ô":{"df":0,"docs":{},"l":{"df":3,"docs":{"332":{"tf":1.0},"381":{"tf":1.0},"394":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"442":{"tf":1.0}}}},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"396":{"tf":1.0}}}}}},"ç":{"df":0,"docs":{},"u":{"df":1,"docs":{"1":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":1,"docs":{"394":{"tf":1.0}},"e":{"_":{"df":1,"docs":{"236":{"tf":1.0}},"s":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}},"e":{"=":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"x":{"df":1,"docs":{"102":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"133":{"tf":1.0},"238":{"tf":1.0}},"e":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"102":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"p":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"4":{"tf":1.0},"442":{"tf":1.0}}}},"df":0,"docs":{}},"df":6,"docs":{"171":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"442":{"tf":1.0},"448":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"156":{"tf":1.0},"179":{"tf":1.0},"287":{"tf":1.0},"396":{"tf":1.0},"6":{"tf":1.0}}},"z":{"df":3,"docs":{"290":{"tf":1.4142135623730951},"442":{"tf":1.0},"451":{"tf":1.0}}}},"é":{"df":1,"docs":{"20":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"259":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"287":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"è":{"df":0,"docs":{},"l":{"df":1,"docs":{"287":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}}}}},"df":22,"docs":{"276":{"tf":1.0},"277":{"tf":1.4142135623730951},"280":{"tf":1.0},"289":{"tf":1.4142135623730951},"312":{"tf":1.0},"320":{"tf":1.4142135623730951},"358":{"tf":1.0},"361":{"tf":1.4142135623730951},"363":{"tf":1.7320508075688772},"370":{"tf":3.0},"372":{"tf":2.0},"383":{"tf":1.0},"392":{"tf":1.0},"399":{"tf":1.0},"403":{"tf":1.0},"408":{"tf":1.7320508075688772},"409":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":2.449489742783178},"414":{"tf":1.0},"416":{"tf":2.0},"429":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":8,"docs":{"20":{"tf":1.0},"23":{"tf":1.4142135623730951},"300":{"tf":1.0},"317":{"tf":1.0},"356":{"tf":1.0},"80":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"364":{"tf":1.0}}}}},"df":8,"docs":{"23":{"tf":1.0},"249":{"tf":1.0},"258":{"tf":1.0},"291":{"tf":1.0},"300":{"tf":1.0},"442":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0}},"r":{"df":1,"docs":{"21":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"133":{"tf":1.0}}}},"è":{"df":0,"docs":{},"l":{"df":1,"docs":{"178":{"tf":1.0}}}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"19":{"tf":1.0},"397":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":1,"docs":{"348":{"tf":1.0}}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"289":{"tf":1.0},"294":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"105":{"tf":1.0},"153":{"tf":1.0},"183":{"tf":1.4142135623730951},"184":{"tf":1.4142135623730951},"279":{"tf":1.4142135623730951},"348":{"tf":1.0},"74":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}}}},"df":3,"docs":{"173":{"tf":1.0},"317":{"tf":1.0},"362":{"tf":1.4142135623730951}}},"t":{"df":5,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"113":{"tf":1.0},"133":{"tf":1.0},"414":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"192":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"318":{"tf":1.0},"396":{"tf":1.4142135623730951}}}}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"313":{"tf":1.0},"422":{"tf":1.0}}}}},"df":3,"docs":{"199":{"tf":1.0},"276":{"tf":1.0},"71":{"tf":1.0}}}}},"û":{"df":0,"docs":{},"t":{"df":2,"docs":{"349":{"tf":1.4142135623730951},"355":{"tf":1.0}}}}},"p":{"df":3,"docs":{"111":{"tf":1.0},"166":{"tf":1.0},"290":{"tf":1.0}},"u":{"/":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"148":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"a":{"df":1,"docs":{"242":{"tf":1.0}},"n":{"df":1,"docs":{"6":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"347":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":25,"docs":{"276":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.0},"289":{"tf":1.4142135623730951},"3":{"tf":1.0},"300":{"tf":1.0},"312":{"tf":1.4142135623730951},"361":{"tf":1.0},"369":{"tf":2.0},"370":{"tf":1.7320508075688772},"371":{"tf":1.7320508075688772},"372":{"tf":1.4142135623730951},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"382":{"tf":1.0},"383":{"tf":2.0},"390":{"tf":1.0},"413":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"421":{"tf":1.0}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":5,"docs":{"259":{"tf":1.0},"361":{"tf":1.0},"399":{"tf":1.0},"403":{"tf":1.0},"416":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":9,"docs":{"153":{"tf":1.0},"160":{"tf":1.0},"22":{"tf":1.0},"242":{"tf":1.0},"290":{"tf":1.0},"319":{"tf":1.0},"6":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":7,"docs":{"241":{"tf":1.0},"291":{"tf":2.0},"293":{"tf":1.0},"294":{"tf":1.0},"348":{"tf":1.0},"449":{"tf":1.0},"85":{"tf":1.7320508075688772}},"e":{"\\"":{",":{"\\"":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"\\"":{",":{"\\"":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"\\"":{",":{"\\"":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"243":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"(":{"d":{"b":{"df":2,"docs":{"423":{"tf":1.0},"426":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"429":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{"b":{"df":2,"docs":{"348":{"tf":1.0},"349":{"tf":1.0}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"175":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"(":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"185":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"b":{"df":1,"docs":{"323":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"325":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"301":{"tf":1.0}}}},"t":{"df":4,"docs":{"346":{"tf":1.0},"348":{"tf":1.0},"352":{"tf":1.0},"82":{"tf":1.0}},"e":{"df":1,"docs":{"1":{"tf":1.0}}},"i":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"180":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"185":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"181":{"tf":1.0}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":5,"docs":{"102":{"tf":1.0},"242":{"tf":1.0},"319":{"tf":1.0},"84":{"tf":1.0},"98":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"425":{"tf":1.0}}}},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"389":{"tf":1.0}}}}}},"u":{"d":{"df":6,"docs":{"317":{"tf":1.0},"318":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.4142135623730951},"396":{"tf":1.0},"449":{"tf":1.0}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"394":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}},"é":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":13,"docs":{"160":{"tf":1.0},"171":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.0},"293":{"tf":1.7320508075688772},"331":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"346":{"tf":1.0},"393":{"tf":1.0},"422":{"tf":1.0},"423":{"tf":1.4142135623730951},"429":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"e":{"df":11,"docs":{"113":{"tf":1.0},"13":{"tf":1.4142135623730951},"146":{"tf":1.0},"21":{"tf":1.4142135623730951},"242":{"tf":1.0},"313":{"tf":1.0},"325":{"tf":1.4142135623730951},"327":{"tf":1.0},"331":{"tf":1.0},"376":{"tf":1.0},"397":{"tf":1.0}},"r":{"df":28,"docs":{"123":{"tf":1.0},"127":{"tf":1.0},"14":{"tf":1.0},"174":{"tf":1.4142135623730951},"179":{"tf":1.7320508075688772},"197":{"tf":1.4142135623730951},"198":{"tf":1.4142135623730951},"21":{"tf":1.0},"243":{"tf":1.0},"278":{"tf":1.0},"294":{"tf":1.0},"3":{"tf":1.0},"301":{"tf":1.0},"304":{"tf":1.7320508075688772},"305":{"tf":1.0},"314":{"tf":1.7320508075688772},"317":{"tf":1.0},"324":{"tf":1.0},"331":{"tf":1.7320508075688772},"332":{"tf":1.4142135623730951},"334":{"tf":1.0},"37":{"tf":1.7320508075688772},"38":{"tf":1.0},"396":{"tf":1.0},"449":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.0},"86":{"tf":1.0}}},"z":{"df":4,"docs":{"294":{"tf":1.4142135623730951},"83":{"tf":2.0},"84":{"tf":1.7320508075688772},"86":{"tf":1.4142135623730951}}}},"é":{"df":1,"docs":{"161":{"tf":1.0}},"e":{"df":2,"docs":{"186":{"tf":1.0},"317":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"p":{"df":1,"docs":{"400":{"tf":1.0}}},"r":{"df":0,"docs":{},"f":{"df":3,"docs":{"393":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.4142135623730951}}}},"s":{"/":{"df":0,"docs":{},"j":{"df":2,"docs":{"400":{"tf":1.0},"418":{"tf":1.0}}}},"df":7,"docs":{"285":{"tf":1.0},"287":{"tf":1.0},"292":{"tf":2.0},"299":{"tf":1.0},"375":{"tf":1.0},"389":{"tf":1.0},"403":{"tf":1.0}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"+":{"c":{"df":2,"docs":{"252":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"349":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"l":{"df":12,"docs":{"119":{"tf":1.4142135623730951},"124":{"tf":1.0},"133":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":1.0},"166":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.0},"206":{"tf":1.0},"288":{"tf":1.0},"449":{"tf":1.0},"84":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"206":{"tf":1.0},"207":{"tf":1.4142135623730951}}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"190":{"tf":1.0},"205":{"tf":1.4142135623730951}}}}}}},"v":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"v":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"d":{"df":1,"docs":{"178":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":1,"docs":{"390":{"tf":1.0}}}},"y":{"c":{"df":0,"docs":{},"l":{"df":4,"docs":{"10":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"71":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"x":{"df":4,"docs":{"176":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.0},"381":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"ô":{"df":0,"docs":{},"t":{"df":17,"docs":{"108":{"tf":1.0},"165":{"tf":1.4142135623730951},"166":{"tf":1.0},"167":{"tf":1.0},"200":{"tf":1.4142135623730951},"214":{"tf":1.0},"332":{"tf":1.0},"355":{"tf":1.4142135623730951},"358":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"393":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0},"418":{"tf":1.0},"67":{"tf":1.7320508075688772},"68":{"tf":1.0}}}},"œ":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"372":{"tf":1.0},"82":{"tf":1.0}}}}},"’":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":77,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"147":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.4142135623730951},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"249":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}}},"d":{"\'":{"a":{"c":{"c":{"df":0,"docs":{},"è":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"325":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"193":{"tf":1.0},"325":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"l":{"df":29,"docs":{"10":{"tf":1.0},"124":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.0},"281":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0},"415":{"tf":1.0},"416":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"421":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":4,"docs":{"229":{"tf":1.0},"230":{"tf":1.0},"244":{"tf":1.0},"325":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"124":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"314":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"207":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0}},"e":{"df":2,"docs":{"69":{"tf":1.0},"70":{"tf":1.0}}}},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"189":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":0,"docs":{}}},"é":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"124":{"tf":1.0}}}}}},"df":0,"docs":{}}},"[":{"0":{"3":{"df":3,"docs":{"277":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"420":{"tf":1.0},"444":{"tf":1.0}}}}}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"174":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"317":{"tf":1.4142135623730951}}}}},"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"[":{"\\"":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"169":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":36,"docs":{"1":{"tf":1.0},"102":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":1.0},"148":{"tf":1.4142135623730951},"156":{"tf":1.0},"160":{"tf":2.0},"163":{"tf":1.0},"166":{"tf":1.4142135623730951},"168":{"tf":1.0},"169":{"tf":1.4142135623730951},"171":{"tf":1.7320508075688772},"174":{"tf":2.8284271247461903},"183":{"tf":1.4142135623730951},"186":{"tf":1.4142135623730951},"187":{"tf":1.0},"210":{"tf":1.7320508075688772},"272":{"tf":1.7320508075688772},"273":{"tf":1.0},"281":{"tf":1.0},"296":{"tf":2.0},"317":{"tf":1.4142135623730951},"370":{"tf":1.4142135623730951},"379":{"tf":2.0},"380":{"tf":2.23606797749979},"381":{"tf":1.7320508075688772},"413":{"tf":2.23606797749979},"414":{"tf":1.0},"420":{"tf":1.7320508075688772},"436":{"tf":1.7320508075688772},"437":{"tf":1.0},"444":{"tf":1.0},"447":{"tf":1.4142135623730951},"76":{"tf":1.0},"96":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"174":{"tf":1.0}}}}}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":7,"docs":{"281":{"tf":1.0},"292":{"tf":1.0},"333":{"tf":1.0},"375":{"tf":1.0},"417":{"tf":1.0},"438":{"tf":1.7320508075688772},"439":{"tf":1.0}}}}}}},"n":{"df":168,"docs":{"102":{"tf":1.0},"106":{"tf":1.0},"11":{"tf":1.0},"123":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"148":{"tf":1.4142135623730951},"151":{"tf":1.4142135623730951},"153":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.4142135623730951},"160":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.7320508075688772},"167":{"tf":1.0},"169":{"tf":1.0},"17":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.7320508075688772},"175":{"tf":1.7320508075688772},"177":{"tf":1.7320508075688772},"179":{"tf":1.0},"18":{"tf":1.7320508075688772},"181":{"tf":1.0},"186":{"tf":2.449489742783178},"188":{"tf":1.0},"19":{"tf":1.4142135623730951},"190":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":2.23606797749979},"202":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951},"213":{"tf":1.0},"214":{"tf":1.4142135623730951},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"234":{"tf":1.0},"237":{"tf":1.7320508075688772},"240":{"tf":1.0},"244":{"tf":1.7320508075688772},"249":{"tf":1.7320508075688772},"25":{"tf":1.0},"253":{"tf":1.0},"257":{"tf":1.7320508075688772},"258":{"tf":1.7320508075688772},"259":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"278":{"tf":1.0},"279":{"tf":1.0},"282":{"tf":1.0},"285":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.7320508075688772},"291":{"tf":1.4142135623730951},"293":{"tf":1.7320508075688772},"294":{"tf":2.0},"296":{"tf":1.4142135623730951},"297":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":2.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"312":{"tf":1.0},"317":{"tf":1.0},"323":{"tf":1.0},"328":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"348":{"tf":1.0},"35":{"tf":1.0},"351":{"tf":1.7320508075688772},"352":{"tf":1.7320508075688772},"359":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":2.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"375":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"381":{"tf":1.0},"382":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"390":{"tf":1.4142135623730951},"394":{"tf":1.0},"397":{"tf":1.0},"4":{"tf":1.4142135623730951},"403":{"tf":1.4142135623730951},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"417":{"tf":1.0},"420":{"tf":1.0},"428":{"tf":1.4142135623730951},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.4142135623730951},"45":{"tf":1.0},"451":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":2.0},"83":{"tf":1.0},"84":{"tf":1.7320508075688772},"86":{"tf":1.0},"88":{"tf":1.7320508075688772},"90":{"tf":1.0},"92":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"b":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"r":{"d":{"df":4,"docs":{"330":{"tf":1.7320508075688772},"331":{"tf":1.4142135623730951},"333":{"tf":1.4142135623730951},"375":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"a":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":2,"docs":{"293":{"tf":1.0},"326":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"293":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"b":{"a":{"df":0,"docs":{},"s":{"df":4,"docs":{"291":{"tf":1.7320508075688772},"293":{"tf":1.0},"300":{"tf":1.0},"85":{"tf":1.4142135623730951}},"e":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"109":{"tf":1.0},"323":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"155":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"$":{"df":0,"docs":{},"{":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"w":{"d":{"df":0,"docs":{},"}":{"@":{"1":{"2":{"7":{".":{"0":{".":{"0":{".":{"1":{":":{"5":{"4":{"3":{"2":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"d":{"b":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"@":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{":":{"5":{"4":{"3":{"2":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"@":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"5":{"4":{"3":{"2":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"290":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":5,"docs":{"185":{"tf":1.4142135623730951},"238":{"tf":1.0},"291":{"tf":1.7320508075688772},"300":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"333":{"tf":1.0},"424":{"tf":1.4142135623730951},"425":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":2,"docs":{"199":{"tf":1.0},"23":{"tf":1.0}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"b":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"313":{"tf":1.0},"325":{"tf":1.0}}}}},"[":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"v":{"a":{"df":0,"docs":{},"l":{"(":{"\\"":{"df":0,"docs":{},"m":{"a":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"\\"":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"259":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"=":{"4":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":36,"docs":{"169":{"tf":1.4142135623730951},"180":{"tf":2.0},"185":{"tf":1.0},"232":{"tf":1.0},"244":{"tf":1.4142135623730951},"247":{"tf":1.7320508075688772},"248":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"250":{"tf":1.4142135623730951},"259":{"tf":1.4142135623730951},"313":{"tf":1.4142135623730951},"314":{"tf":1.4142135623730951},"316":{"tf":1.7320508075688772},"325":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.4142135623730951},"347":{"tf":1.4142135623730951},"348":{"tf":3.4641016151377544},"349":{"tf":1.7320508075688772},"351":{"tf":1.0},"352":{"tf":2.0},"354":{"tf":1.4142135623730951},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.4142135623730951},"360":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"414":{"tf":2.23606797749979},"423":{"tf":2.6457513110645907},"424":{"tf":2.449489742783178},"425":{"tf":2.0},"426":{"tf":2.23606797749979},"427":{"tf":2.6457513110645907},"428":{"tf":2.23606797749979},"429":{"tf":1.7320508075688772}}},"df":18,"docs":{"109":{"tf":1.0},"117":{"tf":1.0},"129":{"tf":1.4142135623730951},"174":{"tf":1.0},"178":{"tf":1.0},"206":{"tf":1.0},"277":{"tf":1.0},"291":{"tf":1.0},"300":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"389":{"tf":1.0},"403":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"88":{"tf":1.0}},"e":{"b":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":3,"docs":{"101":{"tf":1.0},"147":{"tf":1.0},"199":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}}},"df":4,"docs":{"101":{"tf":1.0},"151":{"tf":1.0},"288":{"tf":1.0},"81":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"355":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"g":{"df":4,"docs":{"313":{"tf":1.0},"324":{"tf":1.0},"393":{"tf":1.0},"443":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}}},"d":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"83":{"tf":1.0}}}},"df":0,"docs":{}},"df":337,"docs":{"1":{"tf":2.449489742783178},"10":{"tf":1.7320508075688772},"100":{"tf":1.4142135623730951},"101":{"tf":1.0},"102":{"tf":2.23606797749979},"104":{"tf":2.0},"106":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"122":{"tf":1.0},"134":{"tf":1.4142135623730951},"135":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.4142135623730951},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.7320508075688772},"147":{"tf":1.4142135623730951},"148":{"tf":1.4142135623730951},"15":{"tf":1.7320508075688772},"150":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.7320508075688772},"154":{"tf":1.4142135623730951},"16":{"tf":2.8284271247461903},"160":{"tf":2.0},"161":{"tf":1.7320508075688772},"164":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"167":{"tf":2.23606797749979},"168":{"tf":1.4142135623730951},"169":{"tf":1.7320508075688772},"17":{"tf":2.23606797749979},"171":{"tf":2.8284271247461903},"172":{"tf":2.0},"174":{"tf":1.4142135623730951},"176":{"tf":1.4142135623730951},"177":{"tf":1.0},"18":{"tf":2.0},"181":{"tf":1.4142135623730951},"183":{"tf":1.0},"186":{"tf":1.0},"189":{"tf":1.4142135623730951},"19":{"tf":1.7320508075688772},"193":{"tf":1.0},"194":{"tf":1.0},"196":{"tf":1.0},"199":{"tf":1.7320508075688772},"2":{"tf":2.6457513110645907},"20":{"tf":1.0},"201":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.4142135623730951},"206":{"tf":1.4142135623730951},"208":{"tf":1.0},"21":{"tf":1.4142135623730951},"210":{"tf":1.0},"214":{"tf":1.4142135623730951},"215":{"tf":1.0},"216":{"tf":1.0},"217":{"tf":1.0},"218":{"tf":1.0},"219":{"tf":1.0},"220":{"tf":1.0},"221":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.0},"227":{"tf":1.0},"228":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":3.0},"230":{"tf":1.0},"231":{"tf":1.0},"232":{"tf":1.0},"234":{"tf":1.0},"235":{"tf":2.0},"236":{"tf":1.4142135623730951},"237":{"tf":1.0},"238":{"tf":1.4142135623730951},"241":{"tf":1.4142135623730951},"243":{"tf":3.4641016151377544},"244":{"tf":1.0},"249":{"tf":2.23606797749979},"25":{"tf":1.0},"250":{"tf":2.0},"26":{"tf":1.0},"260":{"tf":2.6457513110645907},"261":{"tf":1.7320508075688772},"262":{"tf":1.0},"263":{"tf":1.0},"264":{"tf":1.0},"265":{"tf":1.0},"266":{"tf":1.0},"267":{"tf":1.0},"268":{"tf":1.0},"269":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":2.0},"271":{"tf":1.4142135623730951},"272":{"tf":1.0},"273":{"tf":1.0},"274":{"tf":2.0},"275":{"tf":1.4142135623730951},"276":{"tf":2.0},"277":{"tf":2.23606797749979},"278":{"tf":1.4142135623730951},"279":{"tf":2.23606797749979},"28":{"tf":1.0},"280":{"tf":2.23606797749979},"281":{"tf":2.6457513110645907},"282":{"tf":1.0},"283":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":2.0},"286":{"tf":1.7320508075688772},"287":{"tf":1.4142135623730951},"288":{"tf":2.0},"289":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.7320508075688772},"291":{"tf":1.7320508075688772},"293":{"tf":2.449489742783178},"294":{"tf":1.0},"296":{"tf":1.4142135623730951},"298":{"tf":2.0},"3":{"tf":2.0},"30":{"tf":1.0},"301":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.0},"304":{"tf":1.0},"305":{"tf":1.0},"306":{"tf":1.0},"307":{"tf":1.0},"308":{"tf":2.0},"309":{"tf":1.4142135623730951},"31":{"tf":1.0},"310":{"tf":1.7320508075688772},"314":{"tf":2.0},"316":{"tf":1.0},"318":{"tf":1.4142135623730951},"319":{"tf":1.4142135623730951},"32":{"tf":1.0},"320":{"tf":1.4142135623730951},"321":{"tf":1.0},"322":{"tf":2.0},"324":{"tf":1.4142135623730951},"325":{"tf":2.0},"326":{"tf":2.23606797749979},"327":{"tf":1.7320508075688772},"329":{"tf":1.4142135623730951},"33":{"tf":1.0},"330":{"tf":3.0},"331":{"tf":2.6457513110645907},"332":{"tf":2.0},"333":{"tf":2.6457513110645907},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":2.6457513110645907},"34":{"tf":1.0},"340":{"tf":1.7320508075688772},"341":{"tf":2.0},"342":{"tf":1.4142135623730951},"343":{"tf":1.0},"344":{"tf":1.0},"345":{"tf":2.0},"346":{"tf":2.23606797749979},"347":{"tf":2.0},"349":{"tf":1.4142135623730951},"35":{"tf":1.0},"351":{"tf":1.4142135623730951},"352":{"tf":1.4142135623730951},"353":{"tf":2.23606797749979},"354":{"tf":1.0},"356":{"tf":2.23606797749979},"357":{"tf":2.0},"359":{"tf":1.0},"36":{"tf":1.0},"361":{"tf":1.7320508075688772},"363":{"tf":1.4142135623730951},"364":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"369":{"tf":1.4142135623730951},"37":{"tf":1.0},"370":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.7320508075688772},"373":{"tf":2.0},"374":{"tf":1.0},"375":{"tf":1.7320508075688772},"376":{"tf":1.4142135623730951},"377":{"tf":1.7320508075688772},"378":{"tf":1.0},"379":{"tf":1.4142135623730951},"38":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":2.23606797749979},"382":{"tf":1.4142135623730951},"383":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":2.6457513110645907},"387":{"tf":1.7320508075688772},"388":{"tf":1.4142135623730951},"389":{"tf":1.4142135623730951},"39":{"tf":1.0},"390":{"tf":2.0},"391":{"tf":1.4142135623730951},"393":{"tf":2.449489742783178},"394":{"tf":1.4142135623730951},"396":{"tf":1.4142135623730951},"397":{"tf":2.8284271247461903},"398":{"tf":1.4142135623730951},"4":{"tf":1.0},"40":{"tf":1.0},"401":{"tf":1.4142135623730951},"403":{"tf":1.4142135623730951},"404":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"412":{"tf":1.7320508075688772},"413":{"tf":1.4142135623730951},"414":{"tf":2.23606797749979},"415":{"tf":1.7320508075688772},"416":{"tf":2.6457513110645907},"417":{"tf":1.4142135623730951},"418":{"tf":1.4142135623730951},"419":{"tf":2.6457513110645907},"42":{"tf":1.0},"420":{"tf":1.0},"421":{"tf":2.0},"422":{"tf":2.8284271247461903},"423":{"tf":1.7320508075688772},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.4142135623730951},"427":{"tf":1.7320508075688772},"428":{"tf":1.0},"429":{"tf":1.4142135623730951},"43":{"tf":2.0},"430":{"tf":2.0},"431":{"tf":1.4142135623730951},"432":{"tf":1.0},"433":{"tf":1.0},"434":{"tf":2.0},"435":{"tf":1.4142135623730951},"436":{"tf":1.0},"437":{"tf":1.0},"438":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.4142135623730951},"440":{"tf":1.0},"441":{"tf":1.0},"442":{"tf":1.7320508075688772},"443":{"tf":2.23606797749979},"444":{"tf":1.0},"445":{"tf":1.4142135623730951},"446":{"tf":1.4142135623730951},"447":{"tf":1.4142135623730951},"448":{"tf":2.449489742783178},"449":{"tf":1.4142135623730951},"45":{"tf":1.0},"450":{"tf":1.7320508075688772},"451":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":2.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":2.449489742783178},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":2.0},"66":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":2.0},"7":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.4142135623730951},"72":{"tf":2.23606797749979},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.7320508075688772},"76":{"tf":2.0},"77":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.7320508075688772},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":3.4641016151377544},"84":{"tf":2.0},"85":{"tf":2.23606797749979},"86":{"tf":1.7320508075688772},"88":{"tf":1.4142135623730951},"9":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0},"95":{"tf":1.4142135623730951},"98":{"tf":1.7320508075688772}},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"238":{"tf":1.0},"319":{"tf":1.0}},"e":{"=":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":2,"docs":{"102":{"tf":1.0},"298":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":5,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"213":{"tf":1.0},"300":{"tf":1.0},"394":{"tf":1.0}}}},"t":{"\\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"259":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":9,"docs":{"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"146":{"tf":1.0},"165":{"tf":1.0},"241":{"tf":1.0},"373":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}}}}},"df":0,"docs":{}}}},"t":{"a":{"df":2,"docs":{"294":{"tf":1.4142135623730951},"356":{"tf":1.0}}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"277":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"0":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"1":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"i":{"df":5,"docs":{"166":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"390":{"tf":1.0}}},"y":{"(":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"392":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"392":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"p":{"df":2,"docs":{"208":{"tf":1.4142135623730951},"390":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":28,"docs":{"1":{"tf":1.0},"168":{"tf":2.23606797749979},"169":{"tf":1.0},"170":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"176":{"tf":2.0},"177":{"tf":1.0},"178":{"tf":2.0},"179":{"tf":1.4142135623730951},"180":{"tf":1.4142135623730951},"181":{"tf":1.7320508075688772},"182":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"185":{"tf":1.0},"186":{"tf":1.7320508075688772},"187":{"tf":1.0},"189":{"tf":1.4142135623730951},"195":{"tf":1.0},"196":{"tf":1.0},"211":{"tf":1.4142135623730951},"380":{"tf":1.0},"381":{"tf":1.0},"74":{"tf":1.0}},"s":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"84":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"113":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"102":{"tf":1.0},"110":{"tf":1.4142135623730951},"113":{"tf":1.0}}}}},"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"q":{"d":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"=":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"111":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"111":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"111":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"113":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":1,"docs":{"123":{"tf":2.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"/":{"c":{"df":0,"docs":{},"i":{"df":6,"docs":{"146":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"174":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"111":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":1,"docs":{"111":{"tf":2.23606797749979}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":4,"docs":{"112":{"tf":1.0},"113":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":1,"docs":{"116":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":5,"docs":{"146":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.4142135623730951},"165":{"tf":1.0},"171":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}},"o":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"325":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.0}}}}}}},"df":2,"docs":{"21":{"tf":1.7320508075688772},"22":{"tf":1.0}}}},"u":{"df":0,"docs":{},"i":{"df":29,"docs":{"104":{"tf":1.4142135623730951},"106":{"tf":1.0},"147":{"tf":1.0},"158":{"tf":1.4142135623730951},"161":{"tf":1.0},"163":{"tf":1.4142135623730951},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"20":{"tf":1.0},"206":{"tf":1.0},"240":{"tf":1.0},"285":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"299":{"tf":1.0},"400":{"tf":1.0},"414":{"tf":1.0},"418":{"tf":1.0},"448":{"tf":1.0},"450":{"tf":1.4142135623730951},"451":{"tf":1.7320508075688772},"5":{"tf":1.0},"74":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0},"89":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"72":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":2,"docs":{"102":{"tf":1.4142135623730951},"443":{"tf":1.0}}}}}}},"s":{"c":{"df":1,"docs":{"185":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":11,"docs":{"153":{"tf":1.0},"241":{"tf":1.0},"243":{"tf":1.0},"257":{"tf":1.0},"317":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":2.0},"332":{"tf":1.0},"333":{"tf":1.0},"419":{"tf":1.0},"423":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"375":{"tf":1.4142135623730951},"417":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":3,"docs":{"189":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.0}}}},"u":{"df":2,"docs":{"147":{"tf":1.0},"416":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":3,"docs":{"280":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"317":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"x":{"df":19,"docs":{"103":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"168":{"tf":1.4142135623730951},"17":{"tf":1.0},"19":{"tf":1.0},"231":{"tf":1.0},"232":{"tf":1.7320508075688772},"244":{"tf":1.0},"276":{"tf":1.0},"287":{"tf":1.0},"291":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"412":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":1.0}},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"m":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"v":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"109":{"tf":1.0},"206":{"tf":1.0}}}}},"t":{"c":{"df":0,"docs":{},"p":{"/":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"104":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"[":{"d":{"df":0,"docs":{},"é":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"214":{"tf":1.0}}}}},"df":9,"docs":{"108":{"tf":1.0},"147":{"tf":1.0},"169":{"tf":1.4142135623730951},"252":{"tf":1.0},"278":{"tf":1.0},"288":{"tf":1.4142135623730951},"293":{"tf":1.0},"424":{"tf":1.7320508075688772},"425":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":2,"docs":{"372":{"tf":1.0},"427":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"421":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"451":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"/":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"421":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":1,"docs":{"421":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"z":{"df":4,"docs":{"277":{"tf":1.4142135623730951},"293":{"tf":1.0},"300":{"tf":1.0},"72":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"214":{"tf":1.0}}},"t":{"df":1,"docs":{"86":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"86":{"tf":1.0}}}}}}}},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"104":{"tf":1.4142135623730951},"133":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":5,"docs":{"250":{"tf":1.4142135623730951},"281":{"tf":1.0},"414":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"389":{"tf":1.0}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"23":{"tf":1.0},"290":{"tf":1.0},"330":{"tf":1.0}}}}}}}}},"g":{"df":2,"docs":{"101":{"tf":1.0},"133":{"tf":1.0}}},"r":{":":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"180":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":1,"docs":{"373":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"t":{"df":16,"docs":{"133":{"tf":1.0},"147":{"tf":1.0},"156":{"tf":1.0},"163":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"181":{"tf":1.0},"187":{"tf":1.0},"255":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.0},"355":{"tf":1.0},"362":{"tf":1.0},"379":{"tf":1.0},"383":{"tf":1.0},"419":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"19":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"184":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"243":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"393":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":11,"docs":{"101":{"tf":1.0},"146":{"tf":1.0},"174":{"tf":1.0},"178":{"tf":1.0},"295":{"tf":1.4142135623730951},"298":{"tf":1.0},"323":{"tf":1.0},"328":{"tf":1.0},"364":{"tf":1.0},"394":{"tf":1.0},"72":{"tf":1.0}}},"s":{"df":1,"docs":{"171":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"287":{"tf":1.0},"346":{"tf":1.0},"348":{"tf":1.0},"393":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":29,"docs":{"145":{"tf":2.0},"146":{"tf":1.7320508075688772},"147":{"tf":1.0},"148":{"tf":1.4142135623730951},"149":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.7320508075688772},"152":{"tf":1.0},"153":{"tf":1.4142135623730951},"154":{"tf":1.4142135623730951},"155":{"tf":1.0},"156":{"tf":1.0},"157":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.0},"160":{"tf":1.7320508075688772},"161":{"tf":1.0},"162":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.0},"210":{"tf":1.0},"420":{"tf":1.0},"443":{"tf":1.0},"74":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"232":{"tf":1.4142135623730951},"346":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"3":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"198":{"tf":1.4142135623730951}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"105":{"tf":1.0},"111":{"tf":1.0},"252":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"290":{"tf":1.0}}}},"z":{"df":1,"docs":{"290":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"153":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"351":{"tf":1.4142135623730951},"357":{"tf":1.0}}}}},"á":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":73,"docs":{"12":{"tf":1.4142135623730951},"136":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"144":{"tf":1.4142135623730951},"216":{"tf":1.4142135623730951},"218":{"tf":1.4142135623730951},"220":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"228":{"tf":1.4142135623730951},"230":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"261":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"265":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"283":{"tf":1.4142135623730951},"3":{"tf":1.0},"30":{"tf":1.4142135623730951},"303":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"342":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"385":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"431":{"tf":1.4142135623730951},"433":{"tf":1.4142135623730951},"435":{"tf":1.4142135623730951},"437":{"tf":1.4142135623730951},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"441":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"91":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"l":{".":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":2,"docs":{"151":{"tf":1.0},"166":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":3,"docs":{"101":{"tf":1.0},"128":{"tf":1.4142135623730951},"133":{"tf":1.0}}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"214":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"444":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"214":{"tf":1.0},"444":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"3":{"0":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"169":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":42,"docs":{"101":{"tf":1.4142135623730951},"109":{"tf":2.0},"124":{"tf":1.0},"134":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":1.0},"148":{"tf":1.7320508075688772},"151":{"tf":1.7320508075688772},"156":{"tf":1.0},"160":{"tf":1.7320508075688772},"163":{"tf":1.0},"166":{"tf":1.4142135623730951},"167":{"tf":1.4142135623730951},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"178":{"tf":1.7320508075688772},"186":{"tf":1.0},"2":{"tf":1.0},"205":{"tf":1.0},"212":{"tf":1.0},"286":{"tf":1.0},"291":{"tf":1.4142135623730951},"300":{"tf":1.0},"318":{"tf":1.4142135623730951},"323":{"tf":1.0},"444":{"tf":2.23606797749979},"445":{"tf":1.0},"446":{"tf":1.0},"73":{"tf":1.4142135623730951},"79":{"tf":2.23606797749979},"80":{"tf":1.4142135623730951},"81":{"tf":2.23606797749979},"82":{"tf":2.23606797749979},"83":{"tf":1.0},"84":{"tf":3.3166247903554},"85":{"tf":2.6457513110645907},"86":{"tf":1.4142135623730951},"87":{"tf":1.7320508075688772},"88":{"tf":2.449489742783178},"89":{"tf":1.4142135623730951},"96":{"tf":1.0},"97":{"tf":1.0}}}}},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"168":{"tf":1.0},"174":{"tf":1.0},"2":{"tf":1.7320508075688772},"231":{"tf":1.0},"235":{"tf":1.0},"258":{"tf":1.0},"280":{"tf":1.0},"3":{"tf":1.7320508075688772},"358":{"tf":1.0},"388":{"tf":1.0},"4":{"tf":1.4142135623730951},"75":{"tf":1.0},"9":{"tf":1.0}},"é":{"df":1,"docs":{"249":{"tf":1.0}}}}}}}}},"df":1,"docs":{"394":{"tf":1.0}},"i":{"df":2,"docs":{"17":{"tf":1.0},"6":{"tf":1.7320508075688772}},"t":{"df":18,"docs":{"106":{"tf":1.0},"133":{"tf":1.4142135623730951},"163":{"tf":1.0},"164":{"tf":1.0},"167":{"tf":1.0},"171":{"tf":1.4142135623730951},"18":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.0},"21":{"tf":1.0},"212":{"tf":1.0},"290":{"tf":1.0},"294":{"tf":1.0},"388":{"tf":1.0},"389":{"tf":1.0},"394":{"tf":1.0},"83":{"tf":1.0},"98":{"tf":1.4142135623730951}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"288":{"tf":1.0},"292":{"tf":1.0},"85":{"tf":1.0}}}}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{">":{"/":{".":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"133":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":1,"docs":{"116":{"tf":1.0}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"124":{"tf":1.0}}}}}}}},":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},";":{"/":{"df":0,"docs":{},"g":{"df":1,"docs":{"130":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"130":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":17,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.4142135623730951},"111":{"tf":1.0},"117":{"tf":1.0},"119":{"tf":1.4142135623730951},"124":{"tf":1.0},"128":{"tf":1.4142135623730951},"129":{"tf":1.4142135623730951},"130":{"tf":1.0},"131":{"tf":1.4142135623730951},"133":{"tf":1.0},"243":{"tf":1.0},"363":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"400":{"tf":1.0},"95":{"tf":1.0}},"e":{">":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"206":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"146":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"c":{"df":2,"docs":{"152":{"tf":1.0},"244":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":5,"docs":{"104":{"tf":1.0},"206":{"tf":1.0},"289":{"tf":1.7320508075688772},"292":{"tf":1.0},"294":{"tf":1.7320508075688772}}},"n":{"df":1,"docs":{"20":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"249":{"tf":1.0}}}},"z":{"df":1,"docs":{"294":{"tf":1.0}}}},"é":{"df":31,"docs":{"102":{"tf":1.0},"249":{"tf":1.4142135623730951},"260":{"tf":1.7320508075688772},"261":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.4142135623730951},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.4142135623730951},"293":{"tf":1.0},"322":{"tf":1.0},"324":{"tf":1.0},"326":{"tf":1.0},"339":{"tf":1.7320508075688772},"340":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.4142135623730951},"373":{"tf":1.0},"386":{"tf":1.7320508075688772},"387":{"tf":1.0},"397":{"tf":1.4142135623730951},"412":{"tf":1.0},"419":{"tf":1.0},"443":{"tf":1.0},"75":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":2.0},"88":{"tf":1.0}}}},"t":{"df":2,"docs":{"152":{"tf":1.0},"349":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"16":{"tf":1.4142135623730951},"428":{"tf":1.0}}}}}}},"t":{"df":1,"docs":{"199":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"y":{":":{":":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"234":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"1":{"tf":1.0},"35":{"tf":1.7320508075688772},"36":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"332":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0}}}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"84":{"tf":1.0},"88":{"tf":1.4142135623730951}},"s":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"352":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"118":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"151":{"tf":1.0},"17":{"tf":1.0},"21":{"tf":1.0},"86":{"tf":1.0}}}},"p":{"d":{"b":{"df":1,"docs":{"323":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"383":{"tf":1.0}}}},"w":{"df":0,"docs":{},"x":{"df":0,"docs":{},"r":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}}}},"t":{"df":1,"docs":{"414":{"tf":1.0}},"o":{"df":1,"docs":{"372":{"tf":1.0}},"s":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"a":{"c":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{".":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{":":{"/":{"/":{"1":{"2":{"7":{".":{"0":{".":{"0":{".":{"1":{":":{"8":{"0":{"8":{"0":{"df":1,"docs":{"211":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"[":{"\\"":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"169":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":11,"docs":{"169":{"tf":1.4142135623730951},"180":{"tf":2.6457513110645907},"184":{"tf":1.4142135623730951},"189":{"tf":2.449489742783178},"195":{"tf":2.0},"196":{"tf":2.0},"204":{"tf":1.4142135623730951},"208":{"tf":1.4142135623730951},"211":{"tf":2.0},"370":{"tf":1.0},"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"u":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"174":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":137,"docs":{"104":{"tf":1.0},"107":{"tf":1.4142135623730951},"108":{"tf":1.0},"11":{"tf":1.0},"112":{"tf":1.4142135623730951},"113":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.4142135623730951},"148":{"tf":1.0},"15":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.4142135623730951},"156":{"tf":1.4142135623730951},"158":{"tf":1.4142135623730951},"16":{"tf":1.0},"160":{"tf":1.4142135623730951},"165":{"tf":1.4142135623730951},"166":{"tf":2.0},"167":{"tf":1.4142135623730951},"168":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":2.23606797749979},"172":{"tf":1.0},"174":{"tf":1.4142135623730951},"175":{"tf":1.4142135623730951},"177":{"tf":1.4142135623730951},"181":{"tf":1.4142135623730951},"195":{"tf":1.0},"21":{"tf":1.7320508075688772},"211":{"tf":1.0},"214":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"243":{"tf":1.0},"25":{"tf":2.0},"26":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.4142135623730951},"282":{"tf":1.0},"29":{"tf":1.0},"293":{"tf":1.4142135623730951},"3":{"tf":1.0},"300":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"325":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.4142135623730951},"332":{"tf":1.4142135623730951},"333":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.4142135623730951},"35":{"tf":1.0},"356":{"tf":1.4142135623730951},"362":{"tf":1.4142135623730951},"363":{"tf":1.0},"364":{"tf":1.4142135623730951},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"375":{"tf":1.7320508075688772},"376":{"tf":1.0},"377":{"tf":1.0},"379":{"tf":1.4142135623730951},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"400":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":2.0},"433":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":2.0},"58":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.0},"81":{"tf":1.0},"84":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"363":{"tf":1.0}}}}}}},"r":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":29,"docs":{"187":{"tf":1.7320508075688772},"188":{"tf":1.0},"189":{"tf":1.0},"190":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.0},"201":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"206":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.0},"210":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"213":{"tf":1.0},"214":{"tf":1.0},"74":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"125":{"tf":1.4142135623730951}}}}}},"df":3,"docs":{"244":{"tf":1.0},"249":{"tf":1.7320508075688772},"390":{"tf":1.0}},"é":{"df":3,"docs":{"243":{"tf":1.0},"375":{"tf":1.0},"393":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"c":{".":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"445":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":33,"docs":{"231":{"tf":1.7320508075688772},"232":{"tf":1.4142135623730951},"233":{"tf":1.0},"234":{"tf":1.0},"235":{"tf":1.0},"236":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"239":{"tf":1.7320508075688772},"240":{"tf":1.4142135623730951},"241":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.7320508075688772},"244":{"tf":1.4142135623730951},"245":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.7320508075688772},"248":{"tf":1.0},"249":{"tf":1.4142135623730951},"250":{"tf":1.0},"251":{"tf":1.0},"252":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.4142135623730951},"255":{"tf":1.4142135623730951},"256":{"tf":1.0},"257":{"tf":1.7320508075688772},"258":{"tf":1.0},"259":{"tf":1.0},"375":{"tf":1.0},"418":{"tf":1.0},"445":{"tf":1.0},"75":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"é":{"b":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"206":{"tf":1.0}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"182":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"23":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"291":{"tf":1.0}}}}}}},"c":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":6,"docs":{"250":{"tf":1.4142135623730951},"281":{"tf":1.4142135623730951},"394":{"tf":1.0},"438":{"tf":1.7320508075688772},"439":{"tf":1.0},"76":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"201":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"446":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"208":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"426":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"166":{"tf":1.0},"213":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"105":{"tf":1.0},"330":{"tf":1.0}}}},"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"330":{"tf":1.0}}}}}}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"419":{"tf":1.0}}}},"df":2,"docs":{"169":{"tf":1.0},"419":{"tf":1.0}}}},"v":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"89":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"358":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":8,"docs":{"147":{"tf":1.0},"154":{"tf":1.4142135623730951},"210":{"tf":1.0},"296":{"tf":1.0},"352":{"tf":1.4142135623730951},"354":{"tf":1.7320508075688772},"357":{"tf":1.0},"83":{"tf":1.0}},"é":{"df":1,"docs":{"322":{"tf":1.0}},"e":{"df":3,"docs":{"171":{"tf":1.0},"352":{"tf":1.0},"355":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":18,"docs":{"104":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"156":{"tf":1.0},"158":{"tf":1.7320508075688772},"161":{"tf":1.0},"173":{"tf":1.0},"177":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.7320508075688772},"244":{"tf":1.0},"249":{"tf":1.4142135623730951},"257":{"tf":1.0},"290":{"tf":1.0},"296":{"tf":1.0},"298":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"208":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"187":{"tf":1.0},"189":{"tf":1.0},"212":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":4,"docs":{"150":{"tf":1.0},"166":{"tf":1.0},"293":{"tf":1.0},"382":{"tf":1.0}},"r":{"df":1,"docs":{"166":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"298":{"tf":1.0}}}}}},"t":{"df":1,"docs":{"388":{"tf":1.0}}}}}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"277":{"tf":1.0},"72":{"tf":1.0}}}}}}}}},"j":{"df":15,"docs":{"133":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"160":{"tf":1.0},"165":{"tf":1.0},"192":{"tf":1.0},"199":{"tf":1.0},"323":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"351":{"tf":1.0},"356":{"tf":1.0},"392":{"tf":1.4142135623730951},"425":{"tf":1.0}}},"l":{"df":0,"docs":{},"è":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":2,"docs":{"148":{"tf":1.0},"420":{"tf":1.0}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"361":{"tf":1.0}}}}}}}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"443":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":17,"docs":{"204":{"tf":1.4142135623730951},"234":{"tf":1.0},"237":{"tf":1.0},"242":{"tf":1.7320508075688772},"244":{"tf":1.0},"255":{"tf":1.0},"364":{"tf":1.0},"374":{"tf":1.0},"414":{"tf":1.7320508075688772},"71":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.0},"92":{"tf":1.7320508075688772},"93":{"tf":1.0}}}},"df":7,"docs":{"173":{"tf":1.0},"183":{"tf":1.0},"287":{"tf":1.0},"300":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"414":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"80":{"tf":1.0},"87":{"tf":1.0}}}},"r":{"a":{"df":1,"docs":{"290":{"tf":1.0}}},"df":21,"docs":{"284":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.0},"298":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"301":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}}},"z":{"df":3,"docs":{"300":{"tf":1.0},"79":{"tf":1.4142135623730951},"85":{"tf":1.7320508075688772}}}},"é":{"df":1,"docs":{"72":{"tf":1.0}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"1":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"p":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"133":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"71":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"219":{"tf":1.7320508075688772},"220":{"tf":1.0},"221":{"tf":1.7320508075688772},"222":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}}},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.0},"2":{"tf":1.0},"81":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"189":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"n":{"c":{"df":12,"docs":{"288":{"tf":1.0},"293":{"tf":1.0},"356":{"tf":1.0},"369":{"tf":1.0},"370":{"tf":1.4142135623730951},"373":{"tf":1.0},"390":{"tf":1.0},"397":{"tf":1.0},"421":{"tf":1.0},"447":{"tf":1.0},"84":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"372":{"tf":1.0}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"414":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"a":{"c":{"df":3,"docs":{"107":{"tf":1.0},"122":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"r":{"df":1,"docs":{"103":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":12,"docs":{"110":{"tf":1.4142135623730951},"113":{"tf":1.4142135623730951},"178":{"tf":1.0},"187":{"tf":1.0},"235":{"tf":1.0},"270":{"tf":1.7320508075688772},"271":{"tf":1.0},"420":{"tf":1.0},"444":{"tf":1.0},"446":{"tf":1.0},"76":{"tf":1.0},"89":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"2":{"tf":1.0},"71":{"tf":1.0}}}}}},"y":{"df":2,"docs":{"186":{"tf":1.0},"211":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"116":{"tf":1.4142135623730951},"178":{"tf":1.4142135623730951},"4":{"tf":1.0},"80":{"tf":1.0},"95":{"tf":1.0}}}},"é":{"df":1,"docs":{"87":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"16":{"tf":1.0}}}}},"ô":{"df":0,"docs":{},"t":{"df":63,"docs":{"13":{"tf":1.4142135623730951},"14":{"tf":1.0},"146":{"tf":1.0},"16":{"tf":1.7320508075688772},"164":{"tf":1.0},"167":{"tf":1.0},"173":{"tf":1.7320508075688772},"174":{"tf":1.4142135623730951},"175":{"tf":1.4142135623730951},"177":{"tf":1.0},"181":{"tf":1.0},"186":{"tf":1.0},"189":{"tf":1.0},"194":{"tf":1.0},"21":{"tf":2.6457513110645907},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"279":{"tf":1.0},"287":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.4142135623730951},"296":{"tf":1.0},"3":{"tf":1.0},"322":{"tf":1.0},"325":{"tf":1.0},"326":{"tf":1.0},"331":{"tf":3.1622776601683795},"333":{"tf":1.0},"345":{"tf":2.0},"346":{"tf":1.4142135623730951},"347":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"363":{"tf":1.0},"375":{"tf":1.4142135623730951},"396":{"tf":1.0},"416":{"tf":1.4142135623730951},"422":{"tf":1.0},"423":{"tf":1.4142135623730951},"424":{"tf":1.0},"428":{"tf":1.4142135623730951},"442":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.4142135623730951},"450":{"tf":1.0},"47":{"tf":1.7320508075688772},"48":{"tf":1.0},"49":{"tf":1.7320508075688772},"50":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.7320508075688772},"84":{"tf":1.7320508075688772}},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"122":{"tf":1.4142135623730951},"199":{"tf":1.0}},"é":{"df":4,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"326":{"tf":1.0},"417":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"é":{"df":1,"docs":{"23":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"353":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"318":{"tf":1.0},"375":{"tf":1.0}},"l":{"df":1,"docs":{"414":{"tf":1.0}},"é":{"df":2,"docs":{"207":{"tf":1.0},"421":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"104":{"tf":1.0},"168":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"373":{"tf":1.0},"379":{"tf":1.0},"390":{"tf":1.0}}}}},"é":{"df":1,"docs":{"181":{"tf":1.0}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"352":{"tf":1.0}}}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"352":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":8,"docs":{"1":{"tf":1.0},"277":{"tf":1.0},"285":{"tf":1.4142135623730951},"290":{"tf":1.0},"296":{"tf":1.0},"326":{"tf":1.0},"443":{"tf":1.0},"84":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":7,"docs":{"2":{"tf":1.7320508075688772},"256":{"tf":1.4142135623730951},"276":{"tf":1.7320508075688772},"3":{"tf":1.0},"4":{"tf":1.4142135623730951},"424":{"tf":1.0},"425":{"tf":1.0}}}}}}}}}}}},"’":{"a":{"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"293":{"tf":1.0},"86":{"tf":1.0}}}}}},"è":{"df":2,"docs":{"332":{"tf":1.0},"98":{"tf":1.0}}},"é":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"330":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":5,"docs":{"2":{"tf":1.0},"332":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":1.0},"71":{"tf":1.4142135623730951}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"21":{"tf":1.0}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"277":{"tf":1.4142135623730951},"6":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}}}}}},"r":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"419":{"tf":1.0}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"281":{"tf":1.0},"76":{"tf":1.0}}}}}},"df":0,"docs":{}}},"v":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"346":{"tf":1.0}}}}}}},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"243":{"tf":1.0},"346":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"363":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"18":{"tf":1.7320508075688772},"393":{"tf":1.0},"416":{"tf":1.0},"449":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"319":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"l":{"df":7,"docs":{"16":{"tf":1.4142135623730951},"232":{"tf":1.4142135623730951},"281":{"tf":1.0},"287":{"tf":1.4142135623730951},"412":{"tf":1.4142135623730951},"413":{"tf":1.4142135623730951},"82":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"é":{"df":1,"docs":{"412":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"372":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":8,"docs":{"152":{"tf":1.4142135623730951},"229":{"tf":1.4142135623730951},"232":{"tf":1.0},"234":{"tf":1.0},"285":{"tf":1.0},"3":{"tf":1.0},"443":{"tf":1.4142135623730951},"75":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"280":{"tf":1.0},"330":{"tf":1.0},"401":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}}}},"x":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"290":{"tf":1.4142135623730951},"449":{"tf":1.4142135623730951}}}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"76":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"187":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"364":{"tf":1.4142135623730951}}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":7,"docs":{"150":{"tf":1.4142135623730951},"171":{"tf":1.0},"287":{"tf":1.0},"327":{"tf":1.0},"397":{"tf":1.0},"420":{"tf":1.4142135623730951},"98":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"h":{"df":0,"docs":{},"é":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"412":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"399":{"tf":1.0},"420":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"345":{"tf":1.0},"450":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"401":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"252":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"361":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"330":{"tf":1.0},"86":{"tf":1.0}}}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"397":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"448":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"148":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"345":{"tf":1.0},"350":{"tf":1.4142135623730951}}}}}}}}},"u":{"df":0,"docs":{},"n":{"df":7,"docs":{"175":{"tf":1.4142135623730951},"255":{"tf":1.4142135623730951},"330":{"tf":1.4142135623730951},"423":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"6":{"tf":1.0},"82":{"tf":1.0}},"e":{"df":6,"docs":{"10":{"tf":1.0},"153":{"tf":1.0},"276":{"tf":1.0},"426":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"71":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":10,"docs":{"145":{"tf":1.0},"442":{"tf":1.0},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"332":{"tf":1.0},"416":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"é":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"175":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"346":{"tf":1.0}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"377":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{},"e":{"2":{"df":23,"docs":{"124":{"tf":1.0},"279":{"tf":1.0},"313":{"tf":1.4142135623730951},"314":{"tf":1.0},"318":{"tf":1.4142135623730951},"320":{"tf":1.4142135623730951},"322":{"tf":2.0},"323":{"tf":1.0},"324":{"tf":1.4142135623730951},"325":{"tf":1.7320508075688772},"326":{"tf":1.4142135623730951},"327":{"tf":1.4142135623730951},"328":{"tf":1.0},"329":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"403":{"tf":1.0},"443":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"443":{"tf":1.0}}}}}},"df":0,"docs":{}}},"[":{"0":{"4":{"df":2,"docs":{"6":{"tf":1.0},"72":{"tf":1.0}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":15,"docs":{"146":{"tf":1.0},"174":{"tf":2.0},"186":{"tf":1.0},"272":{"tf":1.7320508075688772},"273":{"tf":1.0},"281":{"tf":1.0},"296":{"tf":1.0},"317":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.7320508075688772},"381":{"tf":1.0},"413":{"tf":1.0},"436":{"tf":1.7320508075688772},"437":{"tf":1.0},"9":{"tf":1.0}}},"y":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"174":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":11,"docs":{"102":{"tf":1.4142135623730951},"104":{"tf":1.7320508075688772},"106":{"tf":1.0},"109":{"tf":1.0},"123":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.0},"294":{"tf":1.0},"317":{"tf":2.0},"321":{"tf":1.0}}}}},"d":{"2":{"5":{"5":{"1":{"9":{"df":3,"docs":{"19":{"tf":2.0},"374":{"tf":1.0},"426":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"111":{"tf":1.0},"166":{"tf":1.0}}}}}}},"df":14,"docs":{"105":{"tf":1.0},"113":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"185":{"tf":1.0},"290":{"tf":1.0},"297":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"86":{"tf":1.4142135623730951},"9":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":2,"docs":{"117":{"tf":1.0},"129":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"255":{"tf":1.4142135623730951},"427":{"tf":1.0}},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"d":{"b":{"df":1,"docs":{"427":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"(":{"d":{"b":{"df":4,"docs":{"424":{"tf":1.0},"425":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"t":{"df":7,"docs":{"232":{"tf":1.0},"237":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.7320508075688772},"248":{"tf":1.0},"250":{"tf":1.0},"317":{"tf":1.0}}}}},"p":{"@":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"x":{"\\\\":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"/":{"1":{"\\\\":{".":{"df":0,"docs":{},"x":{"df":0,"docs":{},"|":{"df":0,"docs":{},"p":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"l":{"df":14,"docs":{"1":{"tf":1.0},"176":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"21":{"tf":1.0},"234":{"tf":1.0},"249":{"tf":1.0},"290":{"tf":1.0},"3":{"tf":1.4142135623730951},"375":{"tf":1.0},"75":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"9":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}},"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"133":{"tf":1.0}},"s":{":":{"/":{"/":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":1,"docs":{"236":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"319":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"_":{"df":1,"docs":{"238":{"tf":1.0}}},"df":0,"docs":{}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"249":{"tf":1.0}},"e":{"d":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"102":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"|":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"|":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"/":{"1":{"\\\\":{".":{"0":{"2":{"df":0,"docs":{},"|":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"236":{"tf":1.0}}}}}}}},"df":11,"docs":{"102":{"tf":1.4142135623730951},"117":{"tf":1.7320508075688772},"123":{"tf":1.4142135623730951},"129":{"tf":1.7320508075688772},"243":{"tf":1.7320508075688772},"326":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.4142135623730951},"429":{"tf":1.0},"95":{"tf":1.0}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"377":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"c":{"df":1,"docs":{"316":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"19":{"tf":1.0},"294":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":9,"docs":{"115":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":2.23606797749979},"173":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":3.605551275463989},"199":{"tf":1.0},"211":{"tf":1.4142135623730951},"257":{"tf":1.0}},"e":{"/":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"318":{"tf":1.0}}}}},"df":0,"docs":{}},"d":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"116":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"116":{"tf":1.0}}}}}}}}}},"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"189":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"181":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"19":{"tf":1.0},"242":{"tf":1.0},"290":{"tf":1.0},"88":{"tf":1.0}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":6,"docs":{"114":{"tf":1.4142135623730951},"117":{"tf":1.4142135623730951},"133":{"tf":1.0},"445":{"tf":1.0},"94":{"tf":1.4142135623730951},"95":{"tf":1.4142135623730951}}}}}}},"d":{"df":11,"docs":{"169":{"tf":2.0},"180":{"tf":1.0},"287":{"tf":1.7320508075688772},"322":{"tf":2.0},"348":{"tf":1.7320508075688772},"356":{"tf":1.4142135623730951},"370":{"tf":1.0},"413":{"tf":2.449489742783178},"414":{"tf":1.0},"427":{"tf":1.0},"82":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"191":{"tf":1.0},"279":{"tf":1.0},"316":{"tf":1.0},"343":{"tf":1.7320508075688772},"344":{"tf":1.0},"347":{"tf":1.0},"393":{"tf":1.0},"396":{"tf":1.0},"449":{"tf":1.0},"451":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"df":112,"docs":{"1":{"tf":1.0},"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.4142135623730951},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"167":{"tf":1.4142135623730951},"169":{"tf":1.0},"17":{"tf":1.0},"170":{"tf":1.4142135623730951},"173":{"tf":1.0},"175":{"tf":1.4142135623730951},"176":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"185":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.7320508075688772},"208":{"tf":1.0},"21":{"tf":1.0},"211":{"tf":1.4142135623730951},"214":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"231":{"tf":1.0},"232":{"tf":1.0},"24":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.4142135623730951},"249":{"tf":2.449489742783178},"250":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"278":{"tf":1.4142135623730951},"287":{"tf":1.0},"294":{"tf":1.0},"298":{"tf":1.4142135623730951},"301":{"tf":1.0},"317":{"tf":1.0},"319":{"tf":1.4142135623730951},"323":{"tf":1.0},"327":{"tf":1.4142135623730951},"351":{"tf":1.0},"352":{"tf":1.0},"362":{"tf":1.4142135623730951},"363":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.0},"382":{"tf":1.0},"390":{"tf":1.7320508075688772},"392":{"tf":1.4142135623730951},"393":{"tf":1.4142135623730951},"397":{"tf":1.0},"4":{"tf":1.0},"403":{"tf":1.0},"417":{"tf":1.0},"444":{"tf":1.0},"450":{"tf":1.4142135623730951},"5":{"tf":1.0},"7":{"tf":1.4142135623730951},"71":{"tf":2.23606797749979},"72":{"tf":1.7320508075688772},"73":{"tf":1.7320508075688772},"79":{"tf":1.4142135623730951},"80":{"tf":1.0},"82":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":1.4142135623730951},"89":{"tf":1.0},"94":{"tf":1.7320508075688772},"95":{"tf":1.4142135623730951},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":17,"docs":{"146":{"tf":1.0},"147":{"tf":1.4142135623730951},"148":{"tf":1.0},"156":{"tf":1.4142135623730951},"160":{"tf":2.0},"161":{"tf":1.4142135623730951},"165":{"tf":1.7320508075688772},"166":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.4142135623730951},"174":{"tf":1.0},"370":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.4142135623730951},"81":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"160":{"tf":1.0},"174":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"/":{"*":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"165":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":5,"docs":{"14":{"tf":1.0},"20":{"tf":1.7320508075688772},"346":{"tf":1.0},"422":{"tf":1.0},"426":{"tf":1.4142135623730951}},"é":{"df":3,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"300":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"19":{"tf":1.7320508075688772}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"214":{"tf":1.0}}}},"t":{"df":0,"docs":{},"é":{"df":2,"docs":{"362":{"tf":1.0},"372":{"tf":1.0}}}},"è":{"df":0,"docs":{},"r":{"df":3,"docs":{"19":{"tf":1.0},"277":{"tf":1.0},"417":{"tf":1.0}}}}},"r":{"df":6,"docs":{"153":{"tf":1.0},"358":{"tf":1.0},"370":{"tf":1.4142135623730951},"382":{"tf":1.0},"402":{"tf":1.0},"82":{"tf":1.0}},"i":{"df":2,"docs":{"197":{"tf":1.0},"428":{"tf":1.0}}},"y":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{".":{"df":1,"docs":{"85":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"é":{"df":2,"docs":{"175":{"tf":1.0},"19":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"372":{"tf":1.0},"373":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"289":{"tf":1.0},"294":{"tf":1.0}}}}}},"v":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":6,"docs":{"155":{"tf":1.0},"166":{"tf":1.0},"235":{"tf":1.0},"249":{"tf":1.4142135623730951},"258":{"tf":1.0},"290":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"102":{"tf":2.0},"131":{"tf":2.0},"159":{"tf":1.4142135623730951},"163":{"tf":1.0},"235":{"tf":1.0},"252":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"159":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"235":{"tf":1.0},"325":{"tf":1.4142135623730951},"327":{"tf":1.0}}}}}}},"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"443":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"443":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"443":{"tf":1.0}}}}}}},":":{":":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"r":{"(":{"\\"":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"a":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"\\"":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"|":{"_":{"df":1,"docs":{"259":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"258":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"df":45,"docs":{"113":{"tf":1.0},"150":{"tf":1.0},"152":{"tf":2.0},"153":{"tf":1.0},"154":{"tf":1.4142135623730951},"155":{"tf":1.4142135623730951},"158":{"tf":1.0},"159":{"tf":1.4142135623730951},"160":{"tf":1.0},"163":{"tf":1.0},"166":{"tf":2.449489742783178},"171":{"tf":1.0},"172":{"tf":1.7320508075688772},"177":{"tf":1.0},"180":{"tf":1.0},"184":{"tf":1.0},"186":{"tf":1.7320508075688772},"189":{"tf":1.0},"2":{"tf":1.0},"232":{"tf":1.4142135623730951},"233":{"tf":1.4142135623730951},"235":{"tf":1.0},"237":{"tf":1.0},"244":{"tf":1.0},"246":{"tf":1.7320508075688772},"247":{"tf":1.0},"248":{"tf":1.4142135623730951},"249":{"tf":2.449489742783178},"250":{"tf":1.4142135623730951},"252":{"tf":1.4142135623730951},"259":{"tf":1.4142135623730951},"287":{"tf":1.0},"290":{"tf":2.6457513110645907},"291":{"tf":1.0},"293":{"tf":1.4142135623730951},"296":{"tf":1.0},"297":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"414":{"tf":1.0},"443":{"tf":1.4142135623730951},"75":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":2.6457513110645907},"84":{"tf":2.0}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"277":{"tf":1.0},"72":{"tf":1.0},"84":{"tf":1.0}},"n":{"df":2,"docs":{"443":{"tf":1.0},"95":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"169":{"tf":1.0}}},"y":{"df":0,"docs":{},"é":{"df":1,"docs":{"175":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"100":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"f":{"df":24,"docs":{"102":{"tf":1.4142135623730951},"105":{"tf":1.4142135623730951},"108":{"tf":1.4142135623730951},"109":{"tf":1.4142135623730951},"115":{"tf":1.4142135623730951},"116":{"tf":1.4142135623730951},"121":{"tf":1.4142135623730951},"122":{"tf":1.4142135623730951},"126":{"tf":1.4142135623730951},"127":{"tf":1.4142135623730951},"130":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"191":{"tf":1.4142135623730951},"192":{"tf":1.4142135623730951},"193":{"tf":1.4142135623730951},"194":{"tf":1.4142135623730951},"195":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"197":{"tf":1.4142135623730951},"198":{"tf":1.4142135623730951},"199":{"tf":1.4142135623730951},"201":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951}}}},"r":{"d":{"df":1,"docs":{"280":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":7,"docs":{"166":{"tf":1.7320508075688772},"21":{"tf":1.0},"23":{"tf":1.0},"288":{"tf":1.0},"372":{"tf":1.0},"389":{"tf":1.0},"396":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"[":{"df":0,"docs":{},"e":{"0":{"4":{"6":{"3":{"df":1,"docs":{"300":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"121":{"tf":1.0}}}}}},"df":6,"docs":{"208":{"tf":1.4142135623730951},"291":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"401":{"tf":1.0},"88":{"tf":1.4142135623730951}},"|":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"|":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"124":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"s":{"df":2,"docs":{"17":{"tf":1.0},"298":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}},"p":{"a":{"c":{"df":1,"docs":{"23":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"a":{"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"288":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"16":{"tf":1.0},"290":{"tf":1.0}}}}}}}}},"t":{"df":139,"docs":{"1":{"tf":1.4142135623730951},"104":{"tf":1.0},"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.7320508075688772},"147":{"tf":1.7320508075688772},"152":{"tf":1.0},"160":{"tf":1.0},"167":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.4142135623730951},"18":{"tf":1.0},"181":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":1.4142135623730951},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"211":{"tf":1.4142135623730951},"212":{"tf":1.0},"214":{"tf":1.4142135623730951},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"22":{"tf":1.7320508075688772},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":2.0},"244":{"tf":1.7320508075688772},"248":{"tf":1.0},"249":{"tf":1.7320508075688772},"25":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"277":{"tf":1.0},"282":{"tf":1.0},"287":{"tf":1.0},"289":{"tf":1.0},"29":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"298":{"tf":1.0},"299":{"tf":1.7320508075688772},"3":{"tf":1.4142135623730951},"300":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":1.4142135623730951},"333":{"tf":1.7320508075688772},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"412":{"tf":1.0},"416":{"tf":1.7320508075688772},"418":{"tf":1.4142135623730951},"419":{"tf":1.0},"420":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"72":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0},"82":{"tf":2.0},"84":{"tf":1.0},"86":{"tf":1.7320508075688772},"87":{"tf":1.7320508075688772},"88":{"tf":1.4142135623730951},"9":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"15":{"tf":1.0},"286":{"tf":1.0},"81":{"tf":1.0}}}}}},"t":{"c":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"2":{"b":{"a":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"d":{"/":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"195":{"tf":1.0},"196":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":5,"docs":{"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.4142135623730951},"194":{"tf":1.0},"205":{"tf":1.7320508075688772}}}}}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":2,"docs":{"198":{"tf":1.4142135623730951},"199":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":2,"docs":{"197":{"tf":1.4142135623730951},"205":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"df":1,"docs":{"190":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"j":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"199":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"213":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{".":{"d":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"201":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"121":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"116":{"tf":2.0},"130":{"tf":1.0},"202":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"d":{"/":{"9":{"9":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}},"df":4,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"107":{"tf":1.0},"122":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":4,"docs":{"159":{"tf":1.0},"189":{"tf":1.7320508075688772},"356":{"tf":1.0},"377":{"tf":1.0}}},"df":215,"docs":{"1":{"tf":1.7320508075688772},"102":{"tf":1.0},"105":{"tf":1.0},"107":{"tf":1.0},"11":{"tf":1.0},"113":{"tf":1.4142135623730951},"127":{"tf":1.0},"13":{"tf":1.4142135623730951},"131":{"tf":1.4142135623730951},"133":{"tf":1.4142135623730951},"135":{"tf":1.0},"137":{"tf":2.0},"138":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"153":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.4142135623730951},"16":{"tf":2.0},"166":{"tf":1.0},"167":{"tf":1.0},"168":{"tf":2.0},"169":{"tf":1.0},"17":{"tf":2.23606797749979},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.4142135623730951},"179":{"tf":1.0},"18":{"tf":1.4142135623730951},"186":{"tf":1.0},"189":{"tf":1.0},"2":{"tf":2.0},"20":{"tf":1.7320508075688772},"204":{"tf":1.4142135623730951},"21":{"tf":1.0},"211":{"tf":1.7320508075688772},"214":{"tf":2.23606797749979},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"22":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":2.23606797749979},"231":{"tf":1.0},"234":{"tf":1.0},"24":{"tf":1.4142135623730951},"240":{"tf":1.0},"243":{"tf":1.4142135623730951},"244":{"tf":1.4142135623730951},"245":{"tf":1.4142135623730951},"249":{"tf":1.0},"25":{"tf":2.0},"253":{"tf":1.0},"254":{"tf":1.0},"26":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":2.0},"263":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.4142135623730951},"280":{"tf":1.7320508075688772},"282":{"tf":1.0},"284":{"tf":1.7320508075688772},"285":{"tf":1.4142135623730951},"286":{"tf":1.0},"287":{"tf":2.23606797749979},"29":{"tf":1.0},"290":{"tf":1.4142135623730951},"291":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":2.0},"299":{"tf":1.0},"300":{"tf":1.4142135623730951},"301":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":2.0},"309":{"tf":1.0},"31":{"tf":1.0},"310":{"tf":1.0},"318":{"tf":1.0},"322":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":1.4142135623730951},"333":{"tf":1.4142135623730951},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"35":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.0},"358":{"tf":1.4142135623730951},"363":{"tf":1.0},"364":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"369":{"tf":1.0},"37":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.4142135623730951},"382":{"tf":1.7320508075688772},"384":{"tf":2.0},"385":{"tf":1.0},"386":{"tf":1.0},"388":{"tf":1.4142135623730951},"389":{"tf":1.0},"39":{"tf":2.0},"390":{"tf":1.0},"391":{"tf":1.0},"392":{"tf":1.0},"393":{"tf":1.4142135623730951},"394":{"tf":1.0},"395":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0},"399":{"tf":1.0},"4":{"tf":1.4142135623730951},"40":{"tf":1.0},"400":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"420":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"448":{"tf":1.4142135623730951},"449":{"tf":1.7320508075688772},"45":{"tf":2.0},"46":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":2.0},"6":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":2.0},"72":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.4142135623730951},"76":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":2.23606797749979},"83":{"tf":2.449489742783178},"85":{"tf":1.7320508075688772},"86":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"88":{"tf":2.23606797749979},"9":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.4142135623730951},"98":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"377":{"tf":1.0}}}}}},"df":1,"docs":{"348":{"tf":1.0}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":5,"docs":{"280":{"tf":1.4142135623730951},"288":{"tf":1.0},"347":{"tf":1.0},"75":{"tf":1.4142135623730951},"9":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"198":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"363":{"tf":1.0}}}}}}}},"df":7,"docs":{"153":{"tf":1.0},"173":{"tf":1.0},"20":{"tf":1.0},"294":{"tf":1.0},"363":{"tf":1.0},"86":{"tf":1.0},"95":{"tf":1.7320508075688772}},"e":{"c":{"(":{"d":{"b":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"374":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":10,"docs":{"154":{"tf":1.4142135623730951},"155":{"tf":1.4142135623730951},"17":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"318":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.0},"449":{"tf":1.4142135623730951},"451":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"238":{"tf":1.4142135623730951},"280":{"tf":1.0},"75":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"243":{"tf":2.23606797749979}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"2":{"tf":1.0},"311":{"tf":1.4142135623730951}}}}},"df":9,"docs":{"129":{"tf":1.4142135623730951},"146":{"tf":1.0},"15":{"tf":1.0},"232":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.0},"291":{"tf":1.0},"373":{"tf":1.0},"427":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"242":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"t":{"df":2,"docs":{"175":{"tf":1.4142135623730951},"317":{"tf":1.4142135623730951}}}},"p":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"129":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"(":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"(":{"\'":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"=":{"a":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"318":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"318":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"383":{"tf":1.0}}}}},"df":4,"docs":{"318":{"tf":1.0},"328":{"tf":1.0},"334":{"tf":1.0},"401":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"r":{"df":5,"docs":{"18":{"tf":1.0},"243":{"tf":1.4142135623730951},"393":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"n":{"df":75,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"281":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}},"df":0,"docs":{},"i":{"c":{"df":58,"docs":{"10":{"tf":1.4142135623730951},"266":{"tf":1.7320508075688772},"267":{"tf":1.0},"268":{"tf":1.0},"269":{"tf":1.0},"270":{"tf":1.0},"271":{"tf":1.0},"272":{"tf":1.0},"273":{"tf":1.0},"274":{"tf":1.0},"275":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.4142135623730951},"3":{"tf":1.0},"410":{"tf":1.7320508075688772},"411":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0},"415":{"tf":1.0},"416":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0},"430":{"tf":1.0},"431":{"tf":1.0},"432":{"tf":1.0},"433":{"tf":1.0},"434":{"tf":1.0},"435":{"tf":1.0},"436":{"tf":1.0},"437":{"tf":1.0},"438":{"tf":1.0},"439":{"tf":1.0},"440":{"tf":1.0},"441":{"tf":1.0},"442":{"tf":1.0},"63":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.4142135623730951},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"159":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":3,"docs":{"168":{"tf":1.0},"231":{"tf":1.0},"358":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"4":{"tf":1.0}}}}}},"o":{"df":8,"docs":{"109":{"tf":1.0},"189":{"tf":1.0},"195":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"211":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0}},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"166":{"tf":1.0}}}},"s":{"df":3,"docs":{"120":{"tf":1.4142135623730951},"187":{"tf":1.0},"412":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"134":{"tf":1.0},"96":{"tf":1.0}}}},"é":{"df":2,"docs":{"187":{"tf":1.0},"84":{"tf":1.0}}}}},"r":{":":{":":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"(":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"t":{"c":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":1,"docs":{"428":{"tf":3.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":2,"docs":{"361":{"tf":1.7320508075688772},"416":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"414":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"n":{"df":29,"docs":{"101":{"tf":1.0},"177":{"tf":1.0},"189":{"tf":1.0},"194":{"tf":1.0},"276":{"tf":1.0},"279":{"tf":1.0},"345":{"tf":2.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"370":{"tf":1.0},"381":{"tf":1.4142135623730951},"400":{"tf":1.0},"418":{"tf":1.0},"47":{"tf":1.7320508075688772},"48":{"tf":1.0},"8":{"tf":1.0},"84":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"171":{"tf":1.0},"375":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"280":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"423":{"tf":1.0},"426":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":17,"docs":{"145":{"tf":1.0},"156":{"tf":1.0},"161":{"tf":1.0},"167":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"23":{"tf":1.0},"285":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"321":{"tf":1.4142135623730951},"324":{"tf":1.0},"327":{"tf":1.0},"379":{"tf":1.4142135623730951},"380":{"tf":1.0},"381":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"296":{"tf":1.0}}},"df":0,"docs":{}},"z":{"df":2,"docs":{"300":{"tf":1.0},"83":{"tf":1.0}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"f":{"6":{"df":0,"docs":{},"e":{"5":{"1":{"1":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"288":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"[":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"72":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"24":{"tf":1.0}},"l":{"2":{"b":{"a":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"208":{"tf":1.0}}}}},"m":{"d":{"df":1,"docs":{"125":{"tf":1.0}}},"df":0,"docs":{}}},"@":{"df":0,"docs":{},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}}}},"df":32,"docs":{"125":{"tf":1.4142135623730951},"126":{"tf":1.4142135623730951},"127":{"tf":1.4142135623730951},"187":{"tf":1.7320508075688772},"188":{"tf":2.0},"189":{"tf":1.0},"190":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.4142135623730951},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.7320508075688772},"200":{"tf":1.0},"201":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":2.23606797749979},"205":{"tf":2.23606797749979},"206":{"tf":1.7320508075688772},"207":{"tf":2.0},"208":{"tf":1.0},"209":{"tf":1.0},"210":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"213":{"tf":1.4142135623730951},"214":{"tf":1.4142135623730951},"74":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"166":{"tf":1.0},"184":{"tf":1.0},"197":{"tf":1.0},"207":{"tf":1.4142135623730951},"291":{"tf":1.0},"300":{"tf":1.0},"317":{"tf":1.0},"347":{"tf":1.0},"88":{"tf":1.0}},"e":{"d":{".":{"*":{"4":{"0":{"1":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"194":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"197":{"tf":1.0}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"194":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"|":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{")":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"193":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":11,"docs":{"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.4142135623730951},"205":{"tf":1.0},"214":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"175":{"tf":1.4142135623730951}}}}},"r":{"df":6,"docs":{"103":{"tf":1.0},"16":{"tf":1.0},"279":{"tf":1.0},"287":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}},"s":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"278":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"t":{"df":11,"docs":{"113":{"tf":1.0},"133":{"tf":1.0},"148":{"tf":1.0},"151":{"tf":1.0},"177":{"tf":1.0},"19":{"tf":1.0},"249":{"tf":1.0},"292":{"tf":1.0},"351":{"tf":1.0},"355":{"tf":1.0},"98":{"tf":1.0}}}},"l":{"df":0,"docs":{},"l":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":5,"docs":{"232":{"tf":1.0},"244":{"tf":1.4142135623730951},"249":{"tf":1.0},"250":{"tf":1.0},"259":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":8,"docs":{"173":{"tf":1.0},"189":{"tf":1.4142135623730951},"199":{"tf":1.0},"211":{"tf":1.0},"243":{"tf":3.4641016151377544},"249":{"tf":1.0},"319":{"tf":1.7320508075688772},"425":{"tf":1.0}},"e":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"286":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"m":{"df":1,"docs":{"249":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"354":{"tf":1.0}}},"t":{"df":1,"docs":{"8":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"l":{":":{".":{"*":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"197":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"88":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"d":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"347":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"t":{"df":1,"docs":{"214":{"tf":1.0}}}},"ç":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"280":{"tf":1.0},"281":{"tf":1.0},"75":{"tf":1.0}}}}}},"df":8,"docs":{"116":{"tf":1.0},"185":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"207":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"86":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"301":{"tf":1.0},"393":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"347":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"107":{"tf":1.4142135623730951}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"é":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"104":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"348":{"tf":1.0},"356":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"88":{"tf":1.0}}}},"f":{"df":2,"docs":{"43":{"tf":1.7320508075688772},"44":{"tf":1.0}},"i":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}}},"i":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":41,"docs":{"150":{"tf":1.0},"152":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"172":{"tf":1.4142135623730951},"186":{"tf":1.0},"189":{"tf":1.4142135623730951},"19":{"tf":1.0},"190":{"tf":1.0},"2":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"235":{"tf":1.7320508075688772},"290":{"tf":1.0},"292":{"tf":1.7320508075688772},"294":{"tf":1.0},"314":{"tf":1.0},"328":{"tf":1.0},"334":{"tf":1.4142135623730951},"373":{"tf":1.0},"375":{"tf":1.4142135623730951},"419":{"tf":1.4142135623730951},"423":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0},"442":{"tf":2.0},"443":{"tf":1.7320508075688772},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0},"451":{"tf":1.0},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.7320508075688772},"84":{"tf":2.23606797749979}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":3,"docs":{"197":{"tf":1.0},"198":{"tf":1.0},"317":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":5,"docs":{"160":{"tf":1.0},"19":{"tf":1.4142135623730951},"199":{"tf":1.0},"294":{"tf":1.0},"346":{"tf":1.0}},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"360":{"tf":1.0}}}}}}}},"t":{"df":1,"docs":{"357":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"i":{"d":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"(":{"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{"b":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},".":{"d":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"127":{"tf":2.0},"189":{"tf":3.4641016151377544},"199":{"tf":1.4142135623730951}}}},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"320":{"tf":1.0}}}},"df":3,"docs":{"127":{"tf":1.0},"190":{"tf":1.4142135623730951},"205":{"tf":1.4142135623730951}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":7,"docs":{"202":{"tf":1.0},"346":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"357":{"tf":1.0},"83":{"tf":1.0},"86":{"tf":1.0}}}},"d":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"d":{"b":{"df":1,"docs":{"424":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"m":{"df":1,"docs":{"373":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":4,"docs":{"169":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"300":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"127":{"tf":1.4142135623730951},"189":{"tf":3.4641016151377544}}}}}},"df":7,"docs":{"113":{"tf":1.0},"14":{"tf":1.0},"23":{"tf":1.0},"285":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.4142135623730951},"80":{"tf":1.0}},"e":{"df":1,"docs":{"1":{"tf":1.0}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"19":{"tf":1.0},"372":{"tf":1.0},"374":{"tf":1.0},"402":{"tf":1.0},"424":{"tf":1.4142135623730951},"426":{"tf":1.4142135623730951},"84":{"tf":1.0},"85":{"tf":1.0}}}}}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"293":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"108":{"tf":1.4142135623730951},"134":{"tf":1.0},"211":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"373":{"tf":1.0},"86":{"tf":1.0}}}}},"x":{"df":3,"docs":{"133":{"tf":1.0},"166":{"tf":1.0},"95":{"tf":1.4142135623730951}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"314":{"tf":1.4142135623730951},"318":{"tf":1.0},"325":{"tf":1.0},"328":{"tf":2.0},"334":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"t":{"df":3,"docs":{"314":{"tf":1.0},"325":{"tf":1.0},"328":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"208":{"tf":1.0},"348":{"tf":1.0}}},"df":0,"docs":{}},"w":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"169":{"tf":1.0},"174":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":1,"docs":{"396":{"tf":1.0}}}},"u":{"df":0,"docs":{},"x":{"df":13,"docs":{"16":{"tf":1.0},"281":{"tf":1.0},"345":{"tf":1.0},"348":{"tf":1.4142135623730951},"359":{"tf":1.0},"422":{"tf":1.7320508075688772},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"t":{"df":6,"docs":{"174":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"389":{"tf":1.0},"403":{"tf":1.0},"447":{"tf":1.0}}}},"n":{"df":7,"docs":{"242":{"tf":1.0},"257":{"tf":1.4142135623730951},"259":{"tf":1.0},"316":{"tf":2.0},"351":{"tf":1.0},"364":{"tf":1.0},"392":{"tf":1.0}}},"o":{"df":0,"docs":{},"i":{"df":10,"docs":{"102":{"tf":1.4142135623730951},"104":{"tf":1.0},"107":{"tf":1.0},"147":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"234":{"tf":1.0},"242":{"tf":1.0},"249":{"tf":1.0},"313":{"tf":1.0}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"174":{"tf":1.0},"346":{"tf":1.0},"447":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"363":{"tf":1.7320508075688772}},"é":{"df":3,"docs":{"168":{"tf":1.0},"295":{"tf":1.4142135623730951},"318":{"tf":1.0}}}}}}},"df":10,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"169":{"tf":1.0},"231":{"tf":1.0},"281":{"tf":1.0},"327":{"tf":1.4142135623730951},"333":{"tf":1.4142135623730951},"375":{"tf":1.0},"432":{"tf":1.7320508075688772},"433":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":6,"docs":{"250":{"tf":1.0},"253":{"tf":1.4142135623730951},"277":{"tf":1.0},"316":{"tf":1.4142135623730951},"317":{"tf":1.4142135623730951},"72":{"tf":1.0}}}}}}}}}},"d":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"361":{"tf":1.4142135623730951},"416":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":4,"docs":{"279":{"tf":1.0},"414":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}},"r":{"b":{"df":0,"docs":{},"i":{"d":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"383":{"tf":1.0},"392":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"c":{"df":4,"docs":{"189":{"tf":1.7320508075688772},"195":{"tf":1.0},"202":{"tf":1.0},"208":{"tf":2.23606797749979}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"217":{"tf":1.7320508075688772},"218":{"tf":1.0},"74":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":3,"docs":{"1":{"tf":1.0},"276":{"tf":1.0},"416":{"tf":1.0}},"e":{"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"450":{"tf":1.0}}}}},"df":1,"docs":{"450":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}},"k":{"df":1,"docs":{"276":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"389":{"tf":1.0}}}},"df":5,"docs":{"174":{"tf":1.0},"18":{"tf":1.0},"199":{"tf":1.0},"320":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":10,"docs":{"189":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"327":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":1.0},"332":{"tf":1.0},"375":{"tf":1.4142135623730951},"402":{"tf":1.0},"86":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":6,"docs":{"133":{"tf":2.0},"134":{"tf":1.4142135623730951},"202":{"tf":2.449489742783178},"214":{"tf":1.0},"394":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"166":{"tf":1.0},"183":{"tf":1.0},"199":{"tf":1.0},"205":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":2,"docs":{"199":{"tf":1.4142135623730951},"6":{"tf":1.0}},"t":{"df":6,"docs":{"188":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.0},"276":{"tf":1.0},"328":{"tf":1.0},"72":{"tf":1.0}}}}}}}},"q":{"d":{"df":0,"docs":{},"n":{"df":1,"docs":{"95":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":17,"docs":{"358":{"tf":1.4142135623730951},"359":{"tf":1.4142135623730951},"361":{"tf":1.4142135623730951},"362":{"tf":1.0},"363":{"tf":2.23606797749979},"364":{"tf":1.4142135623730951},"375":{"tf":2.23606797749979},"376":{"tf":1.0},"377":{"tf":1.4142135623730951},"399":{"tf":1.7320508075688772},"400":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.7320508075688772},"417":{"tf":1.0},"418":{"tf":1.0}}}}}}}},"n":{"df":0,"docs":{},"ç":{"a":{"df":0,"docs":{},"i":{"df":1,"docs":{"397":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":3,"docs":{"298":{"tf":1.0},"313":{"tf":1.4142135623730951},"397":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"402":{"tf":1.4142135623730951}}}}}}}},"é":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"346":{"tf":1.0},"352":{"tf":1.4142135623730951}}},"df":0,"docs":{},"t":{"df":1,"docs":{"444":{"tf":1.0}}}}}}}}},"s":{"[":{"(":{"\\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"è":{"df":0,"docs":{},"m":{"df":1,"docs":{"413":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"348":{"tf":1.7320508075688772},"376":{"tf":1.4142135623730951},"413":{"tf":1.4142135623730951},"414":{"tf":1.0},"423":{"tf":1.7320508075688772},"424":{"tf":2.23606797749979},"425":{"tf":2.0},"428":{"tf":2.23606797749979},"429":{"tf":1.7320508075688772}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"187":{"tf":1.0},"189":{"tf":1.0}},"é":{"df":1,"docs":{"208":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"43":{"tf":1.7320508075688772},"44":{"tf":1.0}},"n":{"df":1,"docs":{"8":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"208":{"tf":1.0}}}}}}},"g":{"[":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"2":{"df":1,"docs":{"352":{"tf":1.0}}},"df":0,"docs":{}}}}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"351":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.7320508075688772}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"18":{"tf":1.0},"214":{"tf":1.0},"83":{"tf":1.0}}}}}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"165":{"tf":1.0},"420":{"tf":1.0}}}}}}},"d":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"103":{"tf":1.0}}}}},"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":6,"docs":{"277":{"tf":1.0},"280":{"tf":1.0},"380":{"tf":1.0},"389":{"tf":2.0},"390":{"tf":1.7320508075688772},"421":{"tf":1.0}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"17":{"tf":1.0},"20":{"tf":1.0}}}},"df":0,"docs":{}}},"c":{"c":{"df":1,"docs":{"291":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":2,"docs":{"243":{"tf":1.0},"382":{"tf":1.0}}}},"df":2,"docs":{"16":{"tf":2.23606797749979},"348":{"tf":2.449489742783178}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"359":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"df":3,"docs":{"184":{"tf":1.0},"19":{"tf":1.0},"85":{"tf":1.0}}}}},"o":{"df":1,"docs":{"214":{"tf":1.0}},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"214":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":6,"docs":{"1":{"tf":1.0},"325":{"tf":1.0},"331":{"tf":1.4142135623730951},"332":{"tf":1.0},"401":{"tf":1.4142135623730951},"416":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"102":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"t":{".":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"147":{"tf":1.0},"151":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"449":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"_":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"359":{"tf":1.0}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"b":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"359":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":2,"docs":{"277":{"tf":1.0},"278":{"tf":1.0}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"100":{"tf":1.0}}}}}},"|":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"d":{")":{".":{"*":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{".":{"*":{"\\"":{"(":{"?":{":":{"%":{"(":{"b":{"a":{"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{")":{"df":0,"docs":{},"s":{"df":0,"docs":{},"|":{"%":{"(":{"b":{"a":{"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{")":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"|":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"|":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"192":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}}}}}}}},"h":{"c":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"84":{"tf":1.0},"85":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"82":{"tf":1.0}}}}}},"2":{")":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"348":{"tf":1.0},"373":{"tf":1.0}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"@":{"<":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"23":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"123":{"tf":1.0},"124":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"300":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"84":{"tf":1.4142135623730951}},"s":{":":{"/":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"84":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}},"}":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"}":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"}":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"346":{"tf":1.0},"419":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":1,"docs":{"413":{"tf":1.4142135623730951}}}}},"df":53,"docs":{"1":{"tf":1.0},"108":{"tf":1.0},"120":{"tf":1.4142135623730951},"123":{"tf":2.449489742783178},"132":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.7320508075688772},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"175":{"tf":1.0},"180":{"tf":1.7320508075688772},"2":{"tf":1.0},"202":{"tf":1.4142135623730951},"208":{"tf":1.0},"22":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.0},"286":{"tf":1.4142135623730951},"287":{"tf":1.7320508075688772},"288":{"tf":1.7320508075688772},"289":{"tf":1.4142135623730951},"294":{"tf":2.0},"300":{"tf":1.0},"312":{"tf":1.4142135623730951},"326":{"tf":1.0},"346":{"tf":1.0},"356":{"tf":2.6457513110645907},"357":{"tf":1.0},"370":{"tf":2.449489742783178},"372":{"tf":1.0},"373":{"tf":2.23606797749979},"374":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"380":{"tf":1.0},"383":{"tf":1.4142135623730951},"392":{"tf":1.0},"406":{"tf":1.7320508075688772},"407":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":2.0},"416":{"tf":1.0},"417":{"tf":1.0},"419":{"tf":1.7320508075688772},"423":{"tf":2.6457513110645907},"424":{"tf":4.0},"425":{"tf":3.7416573867739413},"428":{"tf":3.1622776601683795},"5":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.7320508075688772},"96":{"tf":1.0}},"e":{"a":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"450":{"tf":1.0}}}}},"df":1,"docs":{"450":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"u":{"b":{"df":2,"docs":{"243":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"235":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"*":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{".":{"*":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"d":{".":{"*":{"<":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"193":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"148":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":2,"docs":{"105":{"tf":1.0},"116":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"95":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"113":{"tf":1.0},"214":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"284":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"86":{"tf":1.0}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"86":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}}}},"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":4,"docs":{"84":{"tf":1.0},"85":{"tf":3.3166247903554},"86":{"tf":1.4142135623730951},"88":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"82":{"tf":1.0},"84":{"tf":1.7320508075688772}}}}},"p":{"df":0,"docs":{},"g":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"291":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":2,"docs":{"84":{"tf":1.0},"85":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"85":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"291":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"121":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"313":{"tf":1.4142135623730951},"325":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":2,"docs":{"372":{"tf":1.0},"414":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":1,"docs":{"236":{"tf":1.0}}}}}}}},"df":162,"docs":{"1":{"tf":1.7320508075688772},"10":{"tf":1.4142135623730951},"108":{"tf":1.7320508075688772},"109":{"tf":1.4142135623730951},"110":{"tf":1.4142135623730951},"113":{"tf":2.23606797749979},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"121":{"tf":1.7320508075688772},"123":{"tf":1.0},"124":{"tf":2.8284271247461903},"126":{"tf":1.0},"127":{"tf":2.8284271247461903},"129":{"tf":1.0},"13":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"133":{"tf":1.4142135623730951},"134":{"tf":1.4142135623730951},"139":{"tf":1.7320508075688772},"14":{"tf":1.4142135623730951},"140":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.4142135623730951},"147":{"tf":2.0},"148":{"tf":2.0},"15":{"tf":1.4142135623730951},"153":{"tf":1.0},"155":{"tf":1.7320508075688772},"156":{"tf":1.0},"16":{"tf":2.23606797749979},"161":{"tf":1.0},"163":{"tf":1.4142135623730951},"164":{"tf":2.23606797749979},"166":{"tf":2.0},"167":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"171":{"tf":1.7320508075688772},"172":{"tf":2.23606797749979},"174":{"tf":1.4142135623730951},"177":{"tf":1.0},"179":{"tf":1.0},"18":{"tf":1.7320508075688772},"180":{"tf":1.7320508075688772},"185":{"tf":1.4142135623730951},"186":{"tf":2.0},"187":{"tf":1.4142135623730951},"189":{"tf":3.4641016151377544},"19":{"tf":1.0},"191":{"tf":1.4142135623730951},"192":{"tf":1.7320508075688772},"193":{"tf":2.0},"194":{"tf":1.4142135623730951},"199":{"tf":1.0},"2":{"tf":1.4142135623730951},"20":{"tf":2.0},"201":{"tf":1.0},"204":{"tf":2.23606797749979},"205":{"tf":2.0},"206":{"tf":1.7320508075688772},"207":{"tf":1.0},"208":{"tf":2.449489742783178},"209":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"210":{"tf":1.0},"214":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"232":{"tf":1.0},"24":{"tf":1.4142135623730951},"252":{"tf":1.0},"276":{"tf":1.4142135623730951},"277":{"tf":1.0},"281":{"tf":1.0},"284":{"tf":1.7320508075688772},"285":{"tf":1.4142135623730951},"286":{"tf":1.4142135623730951},"287":{"tf":1.7320508075688772},"288":{"tf":1.0},"289":{"tf":2.8284271247461903},"290":{"tf":1.0},"291":{"tf":2.0},"292":{"tf":1.4142135623730951},"293":{"tf":3.0},"294":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.7320508075688772},"297":{"tf":1.0},"298":{"tf":1.4142135623730951},"299":{"tf":1.4142135623730951},"3":{"tf":1.0},"300":{"tf":1.4142135623730951},"301":{"tf":1.4142135623730951},"310":{"tf":1.0},"312":{"tf":1.4142135623730951},"317":{"tf":1.0},"320":{"tf":1.4142135623730951},"322":{"tf":1.0},"326":{"tf":1.0},"345":{"tf":1.0},"358":{"tf":1.4142135623730951},"359":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.4142135623730951},"363":{"tf":1.0},"364":{"tf":1.4142135623730951},"369":{"tf":1.0},"372":{"tf":1.7320508075688772},"373":{"tf":1.4142135623730951},"374":{"tf":1.4142135623730951},"375":{"tf":3.0},"376":{"tf":1.4142135623730951},"379":{"tf":1.0},"383":{"tf":2.449489742783178},"388":{"tf":1.0},"399":{"tf":1.0},"4":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.4142135623730951},"416":{"tf":2.23606797749979},"417":{"tf":1.4142135623730951},"419":{"tf":1.4142135623730951},"420":{"tf":1.0},"422":{"tf":1.0},"423":{"tf":1.4142135623730951},"424":{"tf":1.4142135623730951},"425":{"tf":1.7320508075688772},"426":{"tf":1.0},"428":{"tf":1.4142135623730951},"442":{"tf":1.7320508075688772},"444":{"tf":1.4142135623730951},"445":{"tf":1.0},"447":{"tf":1.4142135623730951},"449":{"tf":1.0},"450":{"tf":1.0},"5":{"tf":1.0},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"6":{"tf":1.0},"65":{"tf":1.7320508075688772},"66":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"76":{"tf":1.4142135623730951},"79":{"tf":1.4142135623730951},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":1.4142135623730951},"84":{"tf":2.23606797749979},"85":{"tf":3.7416573867739413},"86":{"tf":1.4142135623730951},"87":{"tf":1.0},"88":{"tf":1.4142135623730951},"9":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.4142135623730951},"97":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"372":{"tf":1.0},"401":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"429":{"tf":1.0}}}}}}}}}}}},"l":{"df":0,"docs":{},"o":{"b":{"a":{"df":0,"docs":{},"l":{"df":12,"docs":{"124":{"tf":1.4142135623730951},"161":{"tf":1.0},"172":{"tf":1.0},"201":{"tf":1.4142135623730951},"208":{"tf":1.0},"268":{"tf":1.7320508075688772},"269":{"tf":1.0},"314":{"tf":1.4142135623730951},"325":{"tf":1.4142135623730951},"327":{"tf":1.4142135623730951},"74":{"tf":1.0},"76":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"189":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"291":{"tf":1.0}}}},"o":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"174":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":2,"docs":{"151":{"tf":1.0},"447":{"tf":1.7320508075688772}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":3,"docs":{"18":{"tf":1.0},"243":{"tf":1.0},"74":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"148":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":7,"docs":{"277":{"tf":1.0},"287":{"tf":1.0},"370":{"tf":1.0},"413":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.0}},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"324":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":19,"docs":{"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"121":{"tf":1.4142135623730951},"122":{"tf":1.0},"124":{"tf":1.0},"133":{"tf":1.4142135623730951},"166":{"tf":1.0},"185":{"tf":1.0},"205":{"tf":1.0},"207":{"tf":1.0},"212":{"tf":1.0},"290":{"tf":1.0},"320":{"tf":1.0},"83":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951}}}},"o":{"df":2,"docs":{"133":{"tf":1.0},"356":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"i":{"d":{"df":178,"docs":{"135":{"tf":1.7320508075688772},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"145":{"tf":1.4142135623730951},"146":{"tf":1.0},"147":{"tf":1.0},"148":{"tf":1.0},"149":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"154":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"157":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.0},"160":{"tf":1.0},"161":{"tf":1.0},"162":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":1.0},"170":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.0},"179":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"182":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"185":{"tf":1.0},"186":{"tf":1.0},"187":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":1.0},"190":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.0},"201":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"206":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.0},"210":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"213":{"tf":1.0},"214":{"tf":1.0},"215":{"tf":1.0},"216":{"tf":1.0},"217":{"tf":1.0},"218":{"tf":1.0},"219":{"tf":1.0},"220":{"tf":1.0},"221":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.0},"251":{"tf":1.4142135623730951},"256":{"tf":1.4142135623730951},"277":{"tf":1.4142135623730951},"3":{"tf":1.0},"306":{"tf":1.7320508075688772},"307":{"tf":1.0},"308":{"tf":1.0},"309":{"tf":1.0},"31":{"tf":1.7320508075688772},"310":{"tf":1.0},"311":{"tf":1.0},"312":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"315":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"32":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.0},"325":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"329":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"35":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"358":{"tf":1.0},"359":{"tf":1.0},"36":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"8":{"tf":1.0}},"é":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"88":{"tf":1.0}}}}}}}}}},"è":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"416":{"tf":1.4142135623730951},"418":{"tf":1.0},"82":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"19":{"tf":1.7320508075688772}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"169":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":5,"docs":{"1":{"tf":1.0},"19":{"tf":1.0},"293":{"tf":1.0},"374":{"tf":1.0},"381":{"tf":1.0}}}}}}},"df":74,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"177":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"292":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"102":{"tf":1.4142135623730951},"15":{"tf":1.0},"179":{"tf":1.0}}},"z":{"df":2,"docs":{"290":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":6,"docs":{"363":{"tf":1.0},"379":{"tf":1.0},"381":{"tf":1.0},"401":{"tf":1.0},"416":{"tf":1.4142135623730951},"417":{"tf":1.0}}}}},"é":{"df":1,"docs":{"299":{"tf":1.0}},"e":{"df":2,"docs":{"15":{"tf":1.0},"84":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":10,"docs":{"223":{"tf":1.7320508075688772},"224":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.0},"5":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.4142135623730951}}}},"é":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"h":{"a":{"df":1,"docs":{"76":{"tf":1.0}},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"316":{"tf":1.0},"348":{"tf":1.0},"354":{"tf":1.0},"364":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":2.0},"380":{"tf":1.0},"396":{"tf":1.0},"427":{"tf":1.0}}}}}},"df":0,"docs":{}},"r":{"d":{"c":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"133":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"446":{"tf":1.0},"89":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"363":{"tf":1.0}}}},"df":4,"docs":{"181":{"tf":1.0},"362":{"tf":1.0},"393":{"tf":1.4142135623730951},"394":{"tf":1.0}}}},"u":{"df":0,"docs":{},"t":{"df":5,"docs":{"17":{"tf":1.0},"21":{"tf":1.0},"317":{"tf":1.7320508075688772},"352":{"tf":1.0},"86":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"424":{"tf":1.0}}}}},"df":2,"docs":{"348":{"tf":3.3166247903554},"394":{"tf":1.0}},"e":{"a":{"d":{"df":1,"docs":{"356":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"133":{"tf":1.0},"377":{"tf":1.0},"402":{"tf":1.0},"445":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"(":{")":{".":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"313":{"tf":1.0},"375":{"tf":1.0},"417":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":3,"docs":{"85":{"tf":1.7320508075688772},"87":{"tf":1.0},"88":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"443":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"280":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"23":{"tf":1.0},"277":{"tf":1.0},"72":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"397":{"tf":1.0}}}}}}},"x":{"a":{"d":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"88":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":4,"docs":{"102":{"tf":1.0},"184":{"tf":1.0},"290":{"tf":1.4142135623730951},"83":{"tf":1.7320508075688772}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"185":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"181":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"347":{"tf":1.0}}}}}}}}},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":3,"docs":{"281":{"tf":1.0},"434":{"tf":1.7320508075688772},"435":{"tf":1.0}},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"1":{"tf":1.0},"8":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"/":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"i":{"d":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":1,"docs":{"19":{"tf":1.0}}},"df":0,"docs":{}}}},"df":1,"docs":{"19":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"c":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"k":{"df":16,"docs":{"280":{"tf":1.0},"289":{"tf":1.0},"360":{"tf":2.0},"361":{"tf":1.0},"364":{"tf":2.23606797749979},"370":{"tf":2.0},"376":{"tf":2.0},"383":{"tf":1.0},"392":{"tf":1.0},"406":{"tf":1.7320508075688772},"407":{"tf":1.0},"413":{"tf":1.4142135623730951},"414":{"tf":1.0},"416":{"tf":1.0},"425":{"tf":1.4142135623730951},"429":{"tf":2.6457513110645907}},"s":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"364":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"df":4,"docs":{"166":{"tf":1.0},"18":{"tf":1.0},"192":{"tf":1.0},"206":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":32,"docs":{"1":{"tf":1.0},"108":{"tf":1.7320508075688772},"109":{"tf":1.4142135623730951},"111":{"tf":1.0},"113":{"tf":1.4142135623730951},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"121":{"tf":1.0},"124":{"tf":2.0},"126":{"tf":1.0},"127":{"tf":1.4142135623730951},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":2.0},"194":{"tf":1.7320508075688772},"195":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"197":{"tf":1.4142135623730951},"198":{"tf":1.0},"199":{"tf":1.0},"202":{"tf":2.449489742783178},"206":{"tf":1.7320508075688772},"214":{"tf":1.0},"293":{"tf":1.4142135623730951},"445":{"tf":1.0},"448":{"tf":1.0},"85":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"2":{"tf":1.0},"71":{"tf":1.0}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"108":{"tf":1.0},"153":{"tf":1.0}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"119":{"tf":1.0}}}},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":4,"docs":{"313":{"tf":1.0},"324":{"tf":1.0},"375":{"tf":1.7320508075688772},"428":{"tf":1.0}}},"x":{"df":6,"docs":{"281":{"tf":1.0},"375":{"tf":1.4142135623730951},"377":{"tf":1.0},"418":{"tf":1.7320508075688772},"438":{"tf":1.7320508075688772},"439":{"tf":1.0}}}},"t":{"df":0,"docs":{},"p":{",":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":2,"docs":{"127":{"tf":1.4142135623730951},"189":{"tf":2.6457513110645907}}}}}}},"/":{"2":{"df":1,"docs":{"119":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"394":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":1,"docs":{"286":{"tf":1.0}}}}}}}}}}}}},":":{"/":{"/":{"0":{".":{"0":{".":{"0":{".":{"0":{":":{"4":{"0":{"0":{"0":{"df":2,"docs":{"293":{"tf":1.4142135623730951},"299":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"133":{"tf":1.0}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"4":{"0":{"0":{"0":{"/":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"294":{"tf":1.0},"299":{"tf":1.0}}}}}},"df":1,"docs":{"86":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":5,"docs":{"293":{"tf":1.0},"294":{"tf":1.0},"72":{"tf":1.0},"86":{"tf":1.4142135623730951},"88":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"0":{"8":{"0":{"df":1,"docs":{"178":{"tf":1.0}}},"1":{"df":1,"docs":{"178":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},":":{"4":{"0":{"0":{"0":{"df":1,"docs":{"169":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"}":{"\\\\":{"df":0,"docs":{},"n":{"df":1,"docs":{"206":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":37,"docs":{"1":{"tf":1.0},"102":{"tf":2.0},"108":{"tf":1.4142135623730951},"113":{"tf":1.0},"114":{"tf":1.4142135623730951},"119":{"tf":1.4142135623730951},"127":{"tf":1.4142135623730951},"133":{"tf":2.0},"134":{"tf":1.7320508075688772},"16":{"tf":1.0},"169":{"tf":1.7320508075688772},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"202":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.0},"287":{"tf":2.23606797749979},"288":{"tf":1.0},"316":{"tf":1.0},"326":{"tf":1.0},"348":{"tf":1.0},"354":{"tf":1.0},"356":{"tf":1.0},"372":{"tf":1.0},"380":{"tf":1.0},"396":{"tf":1.0},"401":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.7320508075688772},"414":{"tf":1.4142135623730951},"75":{"tf":1.0},"82":{"tf":1.4142135623730951},"85":{"tf":1.0},"94":{"tf":1.4142135623730951},"95":{"tf":1.0},"96":{"tf":1.4142135623730951},"97":{"tf":2.0}},"s":{":":{"/":{"/":{"<":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{">":{"/":{"<":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"o":{">":{"/":{"<":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"21":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"206":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"119":{"tf":1.4142135623730951},"124":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"289":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"21":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":1,"docs":{"17":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"178":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"l":{".":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"/":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"146":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{".":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"146":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"w":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"/":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"177":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"288":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"x":{"df":1,"docs":{"449":{"tf":1.0}}}}}},"y":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"d":{"df":6,"docs":{"232":{"tf":1.0},"244":{"tf":1.4142135623730951},"248":{"tf":1.4142135623730951},"259":{"tf":1.4142135623730951},"378":{"tf":1.0},"420":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"z":{"df":2,"docs":{"352":{"tf":1.7320508075688772},"357":{"tf":1.0}}},"é":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"16":{"tf":1.0}},"é":{"df":2,"docs":{"167":{"tf":1.0},"412":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"317":{"tf":1.0},"380":{"tf":1.0},"382":{"tf":1.0}}}},"df":0,"docs":{}}}}},"ô":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"374":{"tf":1.0},"84":{"tf":1.4142135623730951},"88":{"tf":1.0}}}}}},"i":{"1":{"8":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"399":{"tf":1.0},"416":{"tf":1.0}}}},"df":0,"docs":{}},"3":{"2":{"df":1,"docs":{"351":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"6":{"4":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"442":{"tf":1.0},"84":{"tf":1.0}}}},"d":{"=":{"1":{"df":1,"docs":{"86":{"tf":1.0}}},"df":0,"docs":{}},"df":7,"docs":{"185":{"tf":1.0},"241":{"tf":1.0},"243":{"tf":1.0},"348":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"147":{"tf":1.0}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"146":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"19":{"tf":1.0}},"i":{"df":3,"docs":{"293":{"tf":1.0},"330":{"tf":1.0},"86":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"88":{"tf":1.0}}}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"393":{"tf":1.0}}}},"é":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"167":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":1,"docs":{"124":{"tf":1.0}}},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"316":{"tf":1.0},"348":{"tf":1.0}},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"206":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":9,"docs":{"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0}}}}}}}},"é":{"df":1,"docs":{"156":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"|":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"l":{"df":17,"docs":{"104":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"16":{"tf":1.0},"171":{"tf":1.0},"18":{"tf":1.0},"214":{"tf":1.0},"232":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.0},"276":{"tf":1.4142135623730951},"287":{"tf":1.0},"347":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"8":{"tf":1.0},"82":{"tf":1.7320508075688772},"84":{"tf":1.0}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"249":{"tf":1.0}},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"449":{"tf":1.0}}}}}}}},"m":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"151":{"tf":1.0},"164":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"380":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"396":{"tf":1.0}}}}},"p":{"_":{"df":1,"docs":{"236":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"234":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"é":{"d":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":10,"docs":{"178":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.0},"253":{"tf":1.0},"319":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"361":{"tf":1.0},"393":{"tf":1.0},"399":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"353":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"279":{"tf":1.4142135623730951},"341":{"tf":1.7320508075688772},"342":{"tf":1.0},"343":{"tf":1.7320508075688772},"344":{"tf":1.0},"360":{"tf":1.4142135623730951},"363":{"tf":1.0},"364":{"tf":1.0},"376":{"tf":1.0},"393":{"tf":1.4142135623730951}},"é":{"df":1,"docs":{"416":{"tf":1.0}}}}}}}}},"o":{"df":1,"docs":{"418":{"tf":1.0}},"r":{"df":0,"docs":{},"t":{".":{"*":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"194":{"tf":1.0}}}}}}}}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"194":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"194":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"194":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":1,"docs":{"236":{"tf":1.0}},"j":{"df":0,"docs":{},"o":{"b":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"{":{"df":0,"docs":{},"u":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"355":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":2,"docs":{"346":{"tf":1.4142135623730951},"348":{"tf":2.0}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"=":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"x":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"=":{"2":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"s":{"=":{"1":{"8":{"0":{"0":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":28,"docs":{"102":{"tf":1.0},"189":{"tf":1.7320508075688772},"194":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.4142135623730951},"244":{"tf":1.0},"279":{"tf":1.0},"318":{"tf":1.0},"328":{"tf":1.0},"334":{"tf":1.4142135623730951},"345":{"tf":1.7320508075688772},"346":{"tf":1.4142135623730951},"347":{"tf":1.4142135623730951},"348":{"tf":1.0},"349":{"tf":2.0},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.4142135623730951},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"416":{"tf":1.0},"450":{"tf":1.4142135623730951},"47":{"tf":1.7320508075688772},"48":{"tf":1.0},"8":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"348":{"tf":1.0}},"}":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"348":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}}}}}},"t":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"348":{"tf":1.0}}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"348":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"166":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"83":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"n":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"23":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"u":{"df":1,"docs":{"183":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"330":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"166":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"160":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"293":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"401":{"tf":1.0}}}},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"294":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":2,"docs":{"166":{"tf":1.0},"184":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"419":{"tf":1.0}}},"n":{"df":0,"docs":{},"t":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"2":{"df":1,"docs":{"370":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":3,"docs":{"176":{"tf":1.0},"3":{"tf":1.0},"352":{"tf":1.0}}}}},"df":3,"docs":{"168":{"tf":1.0},"232":{"tf":1.0},"356":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"330":{"tf":1.0}}}}}}},"f":{"df":0,"docs":{},"o":{"df":5,"docs":{"163":{"tf":1.0},"243":{"tf":1.0},"293":{"tf":2.0},"85":{"tf":3.0},"86":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"m":{"df":4,"docs":{"280":{"tf":1.4142135623730951},"3":{"tf":1.0},"75":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"1":{"tf":1.0},"250":{"tf":1.0},"311":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"t":{"_":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"348":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"373":{"tf":1.0},"414":{"tf":1.0},"423":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"m":{"d":{"df":72,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"249":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":3,"docs":{"21":{"tf":1.0},"242":{"tf":1.4142135623730951},"314":{"tf":1.0}}},"z":{"df":0,"docs":{},"e":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":78,"docs":{"102":{"tf":1.0},"104":{"tf":1.4142135623730951},"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"178":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"249":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"294":{"tf":1.4142135623730951},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"356":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":2,"docs":{"364":{"tf":1.0},"376":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":4,"docs":{"397":{"tf":1.0},"402":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0}}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":5,"docs":{"102":{"tf":1.0},"250":{"tf":1.0},"330":{"tf":1.4142135623730951},"422":{"tf":1.0},"429":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":10,"docs":{"242":{"tf":1.0},"294":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.7320508075688772},"348":{"tf":1.7320508075688772},"349":{"tf":1.7320508075688772},"377":{"tf":1.0},"423":{"tf":1.4142135623730951},"426":{"tf":1.0},"429":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"l":{"df":38,"docs":{"100":{"tf":1.4142135623730951},"113":{"tf":1.0},"115":{"tf":1.7320508075688772},"126":{"tf":1.7320508075688772},"133":{"tf":1.0},"146":{"tf":1.4142135623730951},"15":{"tf":1.0},"151":{"tf":1.4142135623730951},"156":{"tf":1.0},"160":{"tf":1.7320508075688772},"166":{"tf":1.0},"171":{"tf":1.7320508075688772},"177":{"tf":1.7320508075688772},"183":{"tf":1.0},"186":{"tf":1.0},"188":{"tf":1.7320508075688772},"213":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"292":{"tf":1.4142135623730951},"3":{"tf":1.0},"313":{"tf":1.0},"323":{"tf":1.4142135623730951},"451":{"tf":1.0},"72":{"tf":1.7320508075688772},"73":{"tf":1.4142135623730951},"79":{"tf":1.7320508075688772},"80":{"tf":1.0},"81":{"tf":1.7320508075688772},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0},"89":{"tf":1.4142135623730951},"90":{"tf":1.7320508075688772},"91":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"288":{"tf":1.4142135623730951}}}},"é":{"df":5,"docs":{"147":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"186":{"tf":1.0},"288":{"tf":1.0}}}}},"n":{"c":{"df":24,"docs":{"1":{"tf":1.0},"147":{"tf":1.4142135623730951},"17":{"tf":1.0},"2":{"tf":1.4142135623730951},"225":{"tf":1.7320508075688772},"226":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"285":{"tf":1.0},"322":{"tf":1.0},"4":{"tf":1.0},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"5":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"86":{"tf":1.0},"89":{"tf":1.0},"95":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"314":{"tf":1.0}}}},"n":{"d":{"df":1,"docs":{"133":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"443":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"416":{"tf":1.0}}}}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"151":{"tf":1.0},"358":{"tf":1.0},"375":{"tf":1.0},"418":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"150":{"tf":1.0},"313":{"tf":1.0},"324":{"tf":1.0}}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"166":{"tf":1.0},"23":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"a":{"c":{"df":3,"docs":{"324":{"tf":1.0},"375":{"tf":1.0},"84":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":12,"docs":{"151":{"tf":1.0},"211":{"tf":1.0},"280":{"tf":1.4142135623730951},"384":{"tf":1.7320508075688772},"385":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"442":{"tf":1.0},"5":{"tf":1.0},"82":{"tf":1.0},"87":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"167":{"tf":1.0},"82":{"tf":1.4142135623730951},"89":{"tf":1.0},"97":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"è":{"df":0,"docs":{},"t":{"df":1,"docs":{"379":{"tf":1.0}}}},"é":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"150":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":2,"docs":{"255":{"tf":1.0},"347":{"tf":1.0}}}}},"v":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"372":{"tf":1.0},"401":{"tf":1.0}}}}}}}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":5,"docs":{"0":{"tf":1.7320508075688772},"1":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":2,"docs":{"166":{"tf":1.4142135623730951},"184":{"tf":1.0}}}}}},"è":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"284":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"6":{"tf":1.0},"84":{"tf":1.0}}},"t":{"df":5,"docs":{"2":{"tf":1.0},"276":{"tf":1.0},"316":{"tf":1.4142135623730951},"396":{"tf":1.0},"445":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":20,"docs":{"168":{"tf":1.7320508075688772},"169":{"tf":1.0},"170":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.0},"179":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"182":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"185":{"tf":1.0},"186":{"tf":1.0},"74":{"tf":1.0}}}},"é":{"df":5,"docs":{"1":{"tf":1.0},"168":{"tf":1.0},"296":{"tf":1.4142135623730951},"312":{"tf":1.0},"5":{"tf":1.0}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":4,"docs":{"184":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"194":{"tf":1.0},"397":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"p":{">":{"/":{"$":{"df":0,"docs":{},"p":{"df":1,"docs":{"104":{"tf":1.0}}}},"df":0,"docs":{}},":":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"116":{"tf":1.0}}}}}}}}},"p":{"df":0,"docs":{},"g":{"df":1,"docs":{"109":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":19,"docs":{"101":{"tf":1.7320508075688772},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.4142135623730951},"122":{"tf":1.0},"133":{"tf":1.0},"148":{"tf":1.4142135623730951},"153":{"tf":1.0},"154":{"tf":1.0},"160":{"tf":1.4142135623730951},"189":{"tf":1.0},"202":{"tf":2.23606797749979},"206":{"tf":1.7320508075688772},"207":{"tf":1.4142135623730951},"214":{"tf":1.0},"95":{"tf":1.7320508075688772},"97":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"133":{"tf":1.0}}}},"v":{"4":{"df":1,"docs":{"214":{"tf":1.0}}},"6":{"df":1,"docs":{"214":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"r":{"a":{"df":1,"docs":{"181":{"tf":1.0}}},"c":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"s":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"425":{"tf":1.0}}},"y":{"=":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"348":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":3,"docs":{"167":{"tf":1.0},"326":{"tf":1.4142135623730951},"380":{"tf":1.0}},"é":{"df":2,"docs":{"381":{"tf":1.0},"397":{"tf":1.0}},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"u":{"df":14,"docs":{"2":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"363":{"tf":1.0},"375":{"tf":1.0},"45":{"tf":1.7320508075688772},"450":{"tf":1.0},"46":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"314":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"j":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":10,"docs":{"189":{"tf":1.4142135623730951},"190":{"tf":1.0},"199":{"tf":1.0},"204":{"tf":1.4142135623730951},"207":{"tf":1.4142135623730951},"208":{"tf":1.4142135623730951},"210":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"214":{"tf":1.4142135623730951}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":12,"docs":{"16":{"tf":1.0},"167":{"tf":1.0},"189":{"tf":1.0},"234":{"tf":1.0},"242":{"tf":1.0},"249":{"tf":1.0},"346":{"tf":1.0},"361":{"tf":1.0},"393":{"tf":1.4142135623730951},"399":{"tf":1.0},"416":{"tf":1.0},"84":{"tf":1.0}}}},"df":0,"docs":{}},"v":{"a":{"df":1,"docs":{"178":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"231":{"tf":1.0}}}},"o":{"b":{"df":2,"docs":{"347":{"tf":1.4142135623730951},"414":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":17,"docs":{"108":{"tf":1.0},"128":{"tf":1.4142135623730951},"130":{"tf":1.4142135623730951},"131":{"tf":1.4142135623730951},"132":{"tf":1.4142135623730951},"139":{"tf":1.7320508075688772},"140":{"tf":1.0},"165":{"tf":1.4142135623730951},"189":{"tf":1.0},"214":{"tf":1.0},"243":{"tf":1.4142135623730951},"317":{"tf":1.0},"362":{"tf":1.0},"377":{"tf":1.0},"418":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":6,"docs":{"124":{"tf":1.0},"133":{"tf":1.0},"166":{"tf":1.0},"185":{"tf":1.0},"193":{"tf":1.0},"205":{"tf":1.4142135623730951}}}}},"d":{"df":2,"docs":{"205":{"tf":1.0},"208":{"tf":2.0}}},"df":1,"docs":{"346":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"446":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.7320508075688772},"214":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"s":{"df":1,"docs":{"375":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"(":{"&":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{":":{":":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"316":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"180":{"tf":1.0},"348":{"tf":1.0},"375":{"tf":1.7320508075688772}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"5":{"tf":1.0}},"’":{"a":{"df":0,"docs":{},"u":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":2,"docs":{"167":{"tf":1.0},"351":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{}}},"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"=":{"1":{"5":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"$":{"df":0,"docs":{},"{":{"df":0,"docs":{},"j":{"df":0,"docs":{},"w":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"df":0,"docs":{},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"6":{"4":{"_":{"c":{"a":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"290":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":4,"docs":{"155":{"tf":1.0},"236":{"tf":1.0},"238":{"tf":1.0},"290":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"b":{"df":0,"docs":{},"l":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":9,"docs":{"189":{"tf":1.0},"191":{"tf":1.0},"250":{"tf":1.0},"290":{"tf":1.0},"363":{"tf":1.0},"375":{"tf":1.4142135623730951},"413":{"tf":1.0},"416":{"tf":1.0},"423":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"242":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"193":{"tf":1.0}}}}}}},"df":0,"docs":{}},"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"424":{"tf":1.0}}},"df":0,"docs":{}}},"df":12,"docs":{"123":{"tf":1.0},"179":{"tf":1.0},"184":{"tf":1.0},"186":{"tf":1.0},"19":{"tf":2.0},"241":{"tf":1.4142135623730951},"255":{"tf":1.4142135623730951},"293":{"tf":1.0},"294":{"tf":1.0},"300":{"tf":1.0},"375":{"tf":1.0},"85":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"15":{"tf":1.0},"19":{"tf":1.4142135623730951}}}}},"|":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{")":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"193":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"i":{"b":{"/":{"df":1,"docs":{"294":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"/":{"a":{"c":{"df":0,"docs":{},"m":{"df":3,"docs":{"116":{"tf":1.0},"133":{"tf":1.4142135623730951},"97":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"u":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"147":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"133":{"tf":1.0}}}}},"l":{"\'":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"205":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":2,"docs":{"314":{"tf":1.4142135623730951},"325":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"83":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":10,"docs":{"412":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0},"415":{"tf":1.0},"416":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"421":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"160":{"tf":1.0}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"217":{"tf":1.0},"218":{"tf":1.0},"83":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"i":{"df":2,"docs":{"123":{"tf":1.0},"257":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"171":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"é":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"165":{"tf":1.0}}}}},"df":0,"docs":{}}}},"a":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":9,"docs":{"1":{"tf":1.0},"281":{"tf":1.0},"313":{"tf":1.0},"434":{"tf":1.7320508075688772},"435":{"tf":1.0},"445":{"tf":1.0},"45":{"tf":1.7320508075688772},"46":{"tf":1.0},"8":{"tf":1.0}}}}},"df":204,"docs":{"1":{"tf":1.4142135623730951},"101":{"tf":1.0},"103":{"tf":1.4142135623730951},"104":{"tf":1.0},"105":{"tf":2.0},"109":{"tf":1.0},"11":{"tf":1.0},"113":{"tf":1.0},"116":{"tf":1.4142135623730951},"125":{"tf":1.0},"13":{"tf":1.4142135623730951},"130":{"tf":1.4142135623730951},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"150":{"tf":1.4142135623730951},"156":{"tf":1.4142135623730951},"158":{"tf":1.7320508075688772},"16":{"tf":2.449489742783178},"160":{"tf":1.0},"163":{"tf":1.4142135623730951},"164":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.7320508075688772},"168":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"170":{"tf":1.4142135623730951},"171":{"tf":1.7320508075688772},"173":{"tf":1.4142135623730951},"174":{"tf":1.7320508075688772},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"179":{"tf":1.0},"18":{"tf":2.449489742783178},"186":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.4142135623730951},"199":{"tf":1.7320508075688772},"20":{"tf":2.8284271247461903},"209":{"tf":1.4142135623730951},"21":{"tf":2.0},"210":{"tf":1.0},"214":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"22":{"tf":1.4142135623730951},"221":{"tf":2.0},"222":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":2.6457513110645907},"231":{"tf":1.4142135623730951},"240":{"tf":1.0},"241":{"tf":1.4142135623730951},"243":{"tf":1.0},"244":{"tf":2.0},"249":{"tf":2.449489742783178},"25":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.7320508075688772},"257":{"tf":1.4142135623730951},"258":{"tf":1.7320508075688772},"260":{"tf":2.0},"261":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.4142135623730951},"281":{"tf":1.0},"282":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.4142135623730951},"289":{"tf":1.0},"29":{"tf":2.0},"290":{"tf":2.0},"291":{"tf":2.0},"292":{"tf":1.4142135623730951},"293":{"tf":2.6457513110645907},"294":{"tf":1.4142135623730951},"296":{"tf":1.7320508075688772},"298":{"tf":1.0},"30":{"tf":1.0},"300":{"tf":1.4142135623730951},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"310":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"318":{"tf":1.0},"324":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":2.0},"33":{"tf":1.0},"330":{"tf":2.6457513110645907},"331":{"tf":2.0},"332":{"tf":1.7320508075688772},"333":{"tf":3.1622776601683795},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":2.6457513110645907},"347":{"tf":1.7320508075688772},"35":{"tf":2.0},"352":{"tf":2.23606797749979},"355":{"tf":1.0},"357":{"tf":1.0},"36":{"tf":1.0},"360":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.4142135623730951},"364":{"tf":1.0},"365":{"tf":2.0},"366":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"373":{"tf":1.0},"379":{"tf":1.4142135623730951},"384":{"tf":1.0},"386":{"tf":2.0},"387":{"tf":1.0},"39":{"tf":1.0},"397":{"tf":1.0},"4":{"tf":1.4142135623730951},"400":{"tf":1.0},"402":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.4142135623730951},"418":{"tf":1.0},"419":{"tf":1.4142135623730951},"420":{"tf":1.4142135623730951},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"451":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.4142135623730951},"77":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":2.23606797749979},"83":{"tf":1.4142135623730951},"84":{"tf":2.0},"85":{"tf":1.7320508075688772},"86":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951},"88":{"tf":1.7320508075688772},"9":{"tf":1.7320508075688772},"90":{"tf":1.0},"92":{"tf":1.0},"98":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"189":{"tf":1.0},"19":{"tf":1.0},"211":{"tf":1.0}}}}}}},"n":{"c":{"df":4,"docs":{"150":{"tf":1.4142135623730951},"166":{"tf":1.0},"169":{"tf":1.0},"277":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"290":{"tf":1.0},"293":{"tf":1.0}}}}}},"r":{"df":30,"docs":{"166":{"tf":1.0},"279":{"tf":1.4142135623730951},"285":{"tf":1.0},"287":{"tf":1.0},"310":{"tf":1.7320508075688772},"311":{"tf":1.0},"312":{"tf":1.0},"313":{"tf":1.4142135623730951},"314":{"tf":1.4142135623730951},"315":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":1.7320508075688772},"323":{"tf":1.0},"324":{"tf":1.4142135623730951},"325":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"329":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.4142135623730951},"82":{"tf":1.0}}},"z":{"df":2,"docs":{"287":{"tf":1.0},"293":{"tf":1.4142135623730951}}}}},"df":4,"docs":{"167":{"tf":1.0},"189":{"tf":1.0},"206":{"tf":1.0},"95":{"tf":1.0}},"g":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"2":{"tf":1.0}}}},"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"174":{"tf":1.0},"296":{"tf":1.0}}}},"df":2,"docs":{"298":{"tf":2.0},"318":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"133":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"424":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"21":{"tf":1.0},"333":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":5,"docs":{"150":{"tf":1.4142135623730951},"178":{"tf":1.0},"23":{"tf":1.0},"249":{"tf":1.0},"394":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"k":{"df":2,"docs":{"189":{"tf":1.0},"401":{"tf":1.0}}}},"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"3":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"317":{"tf":1.0},"419":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"9":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"163":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":347,"docs":{"1":{"tf":1.0},"10":{"tf":2.0},"100":{"tf":1.4142135623730951},"104":{"tf":2.0},"106":{"tf":1.7320508075688772},"107":{"tf":1.4142135623730951},"108":{"tf":1.0},"109":{"tf":1.0},"11":{"tf":1.4142135623730951},"117":{"tf":1.4142135623730951},"118":{"tf":1.4142135623730951},"12":{"tf":1.7320508075688772},"121":{"tf":1.4142135623730951},"127":{"tf":1.0},"129":{"tf":1.4142135623730951},"133":{"tf":1.0},"135":{"tf":1.4142135623730951},"136":{"tf":1.7320508075688772},"137":{"tf":1.4142135623730951},"138":{"tf":1.7320508075688772},"139":{"tf":1.4142135623730951},"140":{"tf":1.7320508075688772},"141":{"tf":1.4142135623730951},"142":{"tf":1.7320508075688772},"143":{"tf":1.4142135623730951},"144":{"tf":1.7320508075688772},"145":{"tf":1.7320508075688772},"146":{"tf":2.449489742783178},"147":{"tf":2.0},"148":{"tf":1.7320508075688772},"15":{"tf":1.0},"150":{"tf":1.7320508075688772},"151":{"tf":1.4142135623730951},"152":{"tf":2.0},"153":{"tf":2.449489742783178},"155":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.7320508075688772},"160":{"tf":1.0},"161":{"tf":2.0},"163":{"tf":1.0},"165":{"tf":2.23606797749979},"166":{"tf":2.6457513110645907},"167":{"tf":2.449489742783178},"168":{"tf":2.23606797749979},"169":{"tf":1.0},"17":{"tf":1.7320508075688772},"171":{"tf":1.7320508075688772},"172":{"tf":1.4142135623730951},"173":{"tf":1.4142135623730951},"174":{"tf":2.23606797749979},"175":{"tf":1.0},"176":{"tf":1.7320508075688772},"177":{"tf":1.4142135623730951},"178":{"tf":1.4142135623730951},"179":{"tf":1.0},"18":{"tf":2.449489742783178},"181":{"tf":2.23606797749979},"183":{"tf":1.7320508075688772},"184":{"tf":1.0},"186":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.7320508075688772},"199":{"tf":2.0},"2":{"tf":2.23606797749979},"20":{"tf":1.0},"201":{"tf":1.4142135623730951},"202":{"tf":1.7320508075688772},"206":{"tf":1.0},"207":{"tf":1.0},"21":{"tf":2.449489742783178},"211":{"tf":2.0},"212":{"tf":1.0},"214":{"tf":2.23606797749979},"215":{"tf":2.23606797749979},"216":{"tf":2.0},"217":{"tf":2.23606797749979},"218":{"tf":2.0},"219":{"tf":1.4142135623730951},"220":{"tf":1.7320508075688772},"221":{"tf":1.4142135623730951},"222":{"tf":1.7320508075688772},"223":{"tf":2.23606797749979},"224":{"tf":2.0},"225":{"tf":1.4142135623730951},"226":{"tf":1.7320508075688772},"227":{"tf":1.4142135623730951},"228":{"tf":1.7320508075688772},"229":{"tf":1.4142135623730951},"23":{"tf":2.8284271247461903},"230":{"tf":1.7320508075688772},"231":{"tf":1.4142135623730951},"234":{"tf":1.4142135623730951},"235":{"tf":1.0},"237":{"tf":1.0},"24":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":2.0},"247":{"tf":1.0},"249":{"tf":2.23606797749979},"25":{"tf":1.4142135623730951},"251":{"tf":1.4142135623730951},"252":{"tf":1.0},"254":{"tf":1.4142135623730951},"255":{"tf":1.7320508075688772},"256":{"tf":1.4142135623730951},"257":{"tf":1.7320508075688772},"258":{"tf":1.0},"259":{"tf":1.0},"26":{"tf":1.7320508075688772},"260":{"tf":1.4142135623730951},"261":{"tf":1.7320508075688772},"262":{"tf":1.4142135623730951},"263":{"tf":1.7320508075688772},"264":{"tf":1.4142135623730951},"265":{"tf":1.7320508075688772},"266":{"tf":1.4142135623730951},"267":{"tf":1.7320508075688772},"268":{"tf":1.4142135623730951},"269":{"tf":1.7320508075688772},"27":{"tf":1.4142135623730951},"270":{"tf":1.4142135623730951},"271":{"tf":1.7320508075688772},"272":{"tf":1.4142135623730951},"273":{"tf":1.7320508075688772},"274":{"tf":1.4142135623730951},"275":{"tf":1.7320508075688772},"276":{"tf":1.7320508075688772},"277":{"tf":3.0},"278":{"tf":1.7320508075688772},"279":{"tf":2.449489742783178},"28":{"tf":1.7320508075688772},"280":{"tf":1.7320508075688772},"281":{"tf":2.6457513110645907},"282":{"tf":1.4142135623730951},"283":{"tf":1.7320508075688772},"284":{"tf":1.4142135623730951},"285":{"tf":1.7320508075688772},"286":{"tf":1.0},"287":{"tf":2.449489742783178},"288":{"tf":2.449489742783178},"289":{"tf":1.7320508075688772},"29":{"tf":1.4142135623730951},"290":{"tf":2.23606797749979},"291":{"tf":1.4142135623730951},"292":{"tf":2.6457513110645907},"293":{"tf":2.8284271247461903},"294":{"tf":2.23606797749979},"295":{"tf":1.0},"296":{"tf":1.4142135623730951},"297":{"tf":1.4142135623730951},"298":{"tf":1.0},"299":{"tf":1.7320508075688772},"3":{"tf":2.0},"30":{"tf":1.7320508075688772},"300":{"tf":1.0},"301":{"tf":1.4142135623730951},"302":{"tf":1.4142135623730951},"303":{"tf":1.7320508075688772},"304":{"tf":1.4142135623730951},"305":{"tf":1.7320508075688772},"306":{"tf":1.4142135623730951},"307":{"tf":1.7320508075688772},"308":{"tf":1.4142135623730951},"309":{"tf":1.7320508075688772},"31":{"tf":1.4142135623730951},"310":{"tf":1.7320508075688772},"311":{"tf":1.0},"312":{"tf":1.7320508075688772},"313":{"tf":1.7320508075688772},"314":{"tf":1.0},"315":{"tf":1.0},"316":{"tf":1.7320508075688772},"317":{"tf":2.0},"318":{"tf":1.7320508075688772},"319":{"tf":2.0},"32":{"tf":1.7320508075688772},"320":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":2.0},"323":{"tf":1.4142135623730951},"324":{"tf":1.7320508075688772},"325":{"tf":1.4142135623730951},"326":{"tf":1.0},"327":{"tf":2.8284271247461903},"328":{"tf":1.7320508075688772},"329":{"tf":1.0},"33":{"tf":1.4142135623730951},"330":{"tf":2.0},"331":{"tf":2.23606797749979},"332":{"tf":2.23606797749979},"333":{"tf":3.0},"334":{"tf":2.0},"335":{"tf":1.4142135623730951},"336":{"tf":1.7320508075688772},"337":{"tf":1.4142135623730951},"338":{"tf":1.7320508075688772},"339":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"340":{"tf":1.7320508075688772},"341":{"tf":1.4142135623730951},"342":{"tf":1.7320508075688772},"343":{"tf":1.4142135623730951},"344":{"tf":1.7320508075688772},"346":{"tf":2.0},"347":{"tf":2.0},"348":{"tf":1.4142135623730951},"35":{"tf":1.4142135623730951},"351":{"tf":2.0},"352":{"tf":2.0},"353":{"tf":2.449489742783178},"354":{"tf":2.6457513110645907},"355":{"tf":2.0},"356":{"tf":2.0},"357":{"tf":2.0},"358":{"tf":1.7320508075688772},"36":{"tf":1.7320508075688772},"360":{"tf":1.7320508075688772},"361":{"tf":1.4142135623730951},"362":{"tf":1.4142135623730951},"363":{"tf":2.0},"364":{"tf":1.7320508075688772},"365":{"tf":1.4142135623730951},"366":{"tf":1.7320508075688772},"367":{"tf":1.4142135623730951},"368":{"tf":1.7320508075688772},"37":{"tf":1.4142135623730951},"372":{"tf":1.4142135623730951},"373":{"tf":1.0},"375":{"tf":3.3166247903554},"376":{"tf":2.449489742783178},"377":{"tf":1.0},"379":{"tf":1.4142135623730951},"38":{"tf":1.7320508075688772},"381":{"tf":1.0},"382":{"tf":2.23606797749979},"383":{"tf":1.7320508075688772},"384":{"tf":1.4142135623730951},"385":{"tf":1.7320508075688772},"386":{"tf":1.4142135623730951},"387":{"tf":1.7320508075688772},"388":{"tf":1.4142135623730951},"39":{"tf":2.8284271247461903},"390":{"tf":1.4142135623730951},"393":{"tf":2.0},"394":{"tf":1.7320508075688772},"397":{"tf":1.7320508075688772},"399":{"tf":1.0},"40":{"tf":2.23606797749979},"400":{"tf":1.4142135623730951},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.7320508075688772},"404":{"tf":1.4142135623730951},"405":{"tf":1.7320508075688772},"406":{"tf":1.4142135623730951},"407":{"tf":1.7320508075688772},"408":{"tf":1.4142135623730951},"409":{"tf":1.7320508075688772},"41":{"tf":1.4142135623730951},"410":{"tf":1.4142135623730951},"411":{"tf":1.7320508075688772},"412":{"tf":1.0},"414":{"tf":1.7320508075688772},"417":{"tf":1.0},"418":{"tf":1.7320508075688772},"419":{"tf":2.23606797749979},"42":{"tf":1.7320508075688772},"420":{"tf":1.7320508075688772},"422":{"tf":1.0},"43":{"tf":1.4142135623730951},"430":{"tf":1.4142135623730951},"431":{"tf":1.7320508075688772},"432":{"tf":1.4142135623730951},"433":{"tf":1.7320508075688772},"434":{"tf":1.4142135623730951},"435":{"tf":1.7320508075688772},"436":{"tf":1.4142135623730951},"437":{"tf":1.7320508075688772},"438":{"tf":1.4142135623730951},"439":{"tf":1.7320508075688772},"44":{"tf":1.7320508075688772},"440":{"tf":1.4142135623730951},"441":{"tf":1.7320508075688772},"442":{"tf":2.6457513110645907},"444":{"tf":1.0},"445":{"tf":1.0},"449":{"tf":1.7320508075688772},"45":{"tf":2.8284271247461903},"450":{"tf":1.0},"451":{"tf":2.449489742783178},"46":{"tf":2.23606797749979},"47":{"tf":1.4142135623730951},"48":{"tf":1.7320508075688772},"49":{"tf":2.23606797749979},"5":{"tf":1.4142135623730951},"50":{"tf":2.0},"51":{"tf":1.4142135623730951},"52":{"tf":1.7320508075688772},"53":{"tf":1.4142135623730951},"54":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"56":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"6":{"tf":3.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951},"62":{"tf":1.7320508075688772},"63":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"65":{"tf":1.4142135623730951},"66":{"tf":1.7320508075688772},"67":{"tf":1.4142135623730951},"68":{"tf":1.7320508075688772},"69":{"tf":1.4142135623730951},"7":{"tf":1.7320508075688772},"70":{"tf":1.7320508075688772},"72":{"tf":2.8284271247461903},"73":{"tf":1.7320508075688772},"74":{"tf":2.449489742783178},"75":{"tf":1.0},"76":{"tf":2.6457513110645907},"77":{"tf":1.4142135623730951},"78":{"tf":1.7320508075688772},"8":{"tf":3.0},"80":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":2.23606797749979},"83":{"tf":3.1622776601683795},"84":{"tf":3.0},"85":{"tf":3.3166247903554},"86":{"tf":2.6457513110645907},"87":{"tf":2.0},"88":{"tf":3.605551275463989},"9":{"tf":1.0},"90":{"tf":1.4142135623730951},"91":{"tf":1.7320508075688772},"92":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772},"95":{"tf":1.4142135623730951},"96":{"tf":1.4142135623730951},"98":{"tf":1.0}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"184":{"tf":1.0},"356":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"21":{"tf":1.0},"23":{"tf":1.0}}}},"’":{"df":6,"docs":{"114":{"tf":1.4142135623730951},"117":{"tf":1.4142135623730951},"133":{"tf":1.0},"445":{"tf":1.0},"94":{"tf":1.4142135623730951},"95":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"r":{"df":7,"docs":{"1":{"tf":1.0},"2":{"tf":1.0},"231":{"tf":1.0},"243":{"tf":1.4142135623730951},"347":{"tf":1.0},"351":{"tf":1.0},"451":{"tf":1.0}}}}},"h":{"df":1,"docs":{"292":{"tf":1.0}}},"i":{"b":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"2":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"383":{"tf":1.0}}}}}}}},"df":6,"docs":{"348":{"tf":1.0},"350":{"tf":1.4142135623730951},"356":{"tf":1.7320508075688772},"357":{"tf":1.0},"373":{"tf":1.0},"419":{"tf":1.0}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":3,"docs":{"101":{"tf":1.0},"115":{"tf":1.0},"133":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"q":{"df":1,"docs":{"288":{"tf":1.0}}}},"r":{"df":2,"docs":{"151":{"tf":1.0},"81":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"288":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"w":{"df":0,"docs":{},"w":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"390":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":1,"docs":{"10":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":5,"docs":{"181":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.7320508075688772},"375":{"tf":1.4142135623730951},"86":{"tf":1.0}}},"r":{"df":73,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"243":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}},"u":{"df":2,"docs":{"23":{"tf":1.0},"352":{"tf":1.0}}}},"g":{"df":0,"docs":{},"n":{"df":9,"docs":{"175":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"2":{"tf":1.0},"20":{"tf":1.0},"290":{"tf":1.4142135623730951},"357":{"tf":1.0},"5":{"tf":1.0},"83":{"tf":1.0}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"351":{"tf":1.4142135623730951},"357":{"tf":1.0}}},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"201":{"tf":1.0}}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"_":{"df":0,"docs":{},"z":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"201":{"tf":1.7320508075688772}}}}}},"df":2,"docs":{"189":{"tf":1.0},"202":{"tf":1.7320508075688772}}}}}},"df":20,"docs":{"167":{"tf":1.0},"172":{"tf":1.0},"185":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"198":{"tf":2.23606797749979},"199":{"tf":1.0},"200":{"tf":2.0},"201":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.0},"214":{"tf":1.4142135623730951},"215":{"tf":1.7320508075688772},"216":{"tf":1.0},"326":{"tf":1.0},"372":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"443":{"tf":1.0},"445":{"tf":1.0},"74":{"tf":1.0}},"é":{"df":1,"docs":{"169":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"k":{"df":2,"docs":{"165":{"tf":1.0},"377":{"tf":1.0}}},"t":{"df":4,"docs":{"174":{"tf":1.0},"320":{"tf":1.0},"389":{"tf":1.0},"392":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"x":{"/":{"a":{"df":0,"docs":{},"m":{"d":{"6":{"4":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":7,"docs":{"151":{"tf":1.0},"2":{"tf":1.0},"291":{"tf":1.0},"71":{"tf":1.0},"81":{"tf":1.0},"94":{"tf":1.4142135623730951},"95":{"tf":1.0}}}},"é":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"9":{"tf":1.0}}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"181":{"tf":1.4142135623730951},"257":{"tf":1.0},"258":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"281":{"tf":1.0},"76":{"tf":1.0}}}},"t":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"373":{"tf":1.0}}}}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"373":{"tf":1.0}}}}}},"df":16,"docs":{"118":{"tf":1.0},"160":{"tf":1.0},"199":{"tf":1.4142135623730951},"204":{"tf":1.0},"206":{"tf":1.0},"207":{"tf":1.0},"238":{"tf":1.4142135623730951},"243":{"tf":1.4142135623730951},"290":{"tf":1.0},"318":{"tf":1.4142135623730951},"329":{"tf":1.4142135623730951},"331":{"tf":1.0},"332":{"tf":1.0},"373":{"tf":1.0},"375":{"tf":1.4142135623730951},"449":{"tf":1.0}},"e":{"/":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"é":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":2,"docs":{"355":{"tf":1.0},"357":{"tf":1.0}}}}}}}}},"df":6,"docs":{"121":{"tf":1.4142135623730951},"202":{"tf":1.0},"293":{"tf":1.4142135623730951},"299":{"tf":1.0},"355":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951}}},"r":{"df":3,"docs":{"317":{"tf":1.0},"332":{"tf":1.0},"449":{"tf":1.0}}}}}},"t":{"df":4,"docs":{"249":{"tf":1.0},"347":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"165":{"tf":1.0}}}}},"n":{"df":2,"docs":{"116":{"tf":1.0},"199":{"tf":1.0}}},"o":{"a":{"d":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"443":{"tf":1.0}}}}}},"df":67,"docs":{"100":{"tf":1.7320508075688772},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"147":{"tf":1.4142135623730951},"148":{"tf":1.0},"151":{"tf":1.0},"156":{"tf":1.4142135623730951},"165":{"tf":1.0},"177":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"199":{"tf":1.0},"210":{"tf":1.0},"213":{"tf":1.0},"235":{"tf":1.0},"24":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"285":{"tf":1.4142135623730951},"292":{"tf":1.0},"299":{"tf":1.0},"313":{"tf":1.0},"321":{"tf":1.4142135623730951},"323":{"tf":1.0},"397":{"tf":1.0},"420":{"tf":1.0},"442":{"tf":1.0},"443":{"tf":1.4142135623730951},"88":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"4":{"0":{"0":{"0":{"df":1,"docs":{"443":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"169":{"tf":1.0},"172":{"tf":1.0},"243":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"19":{"tf":1.4142135623730951}}}}},"t":{"df":2,"docs":{"199":{"tf":1.4142135623730951},"202":{"tf":2.449489742783178}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"133":{"tf":1.0},"98":{"tf":1.0}}}}}}},"df":0,"docs":{},"g":{"df":33,"docs":{"10":{"tf":1.0},"124":{"tf":1.0},"133":{"tf":1.0},"166":{"tf":1.0},"169":{"tf":1.0},"175":{"tf":1.0},"183":{"tf":1.0},"185":{"tf":1.7320508075688772},"193":{"tf":1.0},"205":{"tf":1.4142135623730951},"207":{"tf":1.0},"208":{"tf":1.0},"211":{"tf":1.0},"214":{"tf":1.4142135623730951},"243":{"tf":1.0},"255":{"tf":1.0},"293":{"tf":1.0},"317":{"tf":1.4142135623730951},"348":{"tf":1.0},"349":{"tf":1.0},"375":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"380":{"tf":1.0},"382":{"tf":1.0},"393":{"tf":1.0},"403":{"tf":1.0},"416":{"tf":1.0},"418":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":2.8284271247461903},"86":{"tf":1.4142135623730951},"87":{"tf":1.0},"88":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"é":{"df":1,"docs":{"393":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":3,"docs":{"191":{"tf":1.7320508075688772},"195":{"tf":1.7320508075688772},"205":{"tf":1.0}}}}}},"df":0,"docs":{}},"a":{"df":3,"docs":{"325":{"tf":1.0},"328":{"tf":1.4142135623730951},"334":{"tf":1.0}},"s":{"(":{"\'":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"328":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":21,"docs":{"119":{"tf":1.0},"127":{"tf":1.7320508075688772},"133":{"tf":1.4142135623730951},"178":{"tf":1.0},"189":{"tf":2.449489742783178},"191":{"tf":1.0},"192":{"tf":1.0},"202":{"tf":1.0},"204":{"tf":1.7320508075688772},"205":{"tf":1.0},"206":{"tf":1.0},"208":{"tf":1.7320508075688772},"243":{"tf":1.0},"316":{"tf":1.0},"330":{"tf":2.449489742783178},"331":{"tf":1.4142135623730951},"333":{"tf":2.0},"359":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"417":{"tf":1.0},"429":{"tf":1.0}},"|":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"v":{"1":{"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"v":{"1":{"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"v":{"1":{"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"2":{"df":0,"docs":{},"f":{"a":{"df":1,"docs":{"191":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":1,"docs":{"202":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"244":{"tf":1.0},"363":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"330":{"tf":1.0},"375":{"tf":1.4142135623730951}}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"127":{"tf":2.0},"189":{"tf":3.1622776601683795},"211":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"356":{"tf":1.0},"421":{"tf":1.4142135623730951}}}},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"189":{"tf":1.0}},"u":{"df":1,"docs":{"375":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"p":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":6,"docs":{"109":{"tf":1.4142135623730951},"121":{"tf":1.0},"134":{"tf":1.7320508075688772},"189":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"180":{"tf":1.0},"348":{"tf":1.4142135623730951},"414":{"tf":1.0}}}},"r":{"df":74,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.7320508075688772},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"300":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"’":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"2":{"tf":1.0}}}}}}}}},"t":{"df":2,"docs":{"388":{"tf":1.0},"403":{"tf":1.0}}},"w":{"df":1,"docs":{"181":{"tf":1.0}}}},"r":{"df":6,"docs":{"174":{"tf":1.0},"277":{"tf":1.0},"352":{"tf":1.0},"370":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}},"s":{"df":3,"docs":{"289":{"tf":1.0},"292":{"tf":1.0},"84":{"tf":1.0}},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"88":{"tf":1.0}}}}},"u":{"df":4,"docs":{"147":{"tf":1.0},"155":{"tf":1.0},"240":{"tf":1.0},"318":{"tf":1.0}},"e":{"df":2,"docs":{"153":{"tf":1.0},"249":{"tf":1.0}}},"i":{"df":3,"docs":{"179":{"tf":1.0},"346":{"tf":1.0},"363":{"tf":1.0}}}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"202":{"tf":1.0}}}}}}}},"’":{"a":{"c":{"c":{"df":0,"docs":{},"è":{"df":6,"docs":{"167":{"tf":1.4142135623730951},"18":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"375":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}},"d":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"442":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"332":{"tf":1.7320508075688772}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}}},"df":1,"docs":{"22":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"i":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"i":{"df":7,"docs":{"178":{"tf":1.0},"2":{"tf":1.4142135623730951},"276":{"tf":1.4142135623730951},"287":{"tf":1.0},"4":{"tf":1.0},"449":{"tf":1.4142135623730951},"450":{"tf":1.0}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":10,"docs":{"18":{"tf":1.4142135623730951},"243":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"293":{"tf":1.4142135623730951},"322":{"tf":1.0},"327":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.4142135623730951},"85":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"276":{"tf":1.0},"280":{"tf":1.0},"281":{"tf":1.0},"412":{"tf":1.4142135623730951},"5":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"442":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"333":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"14":{"tf":1.0},"393":{"tf":1.0},"449":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"5":{"tf":1.0}}}}}}},"r":{"df":2,"docs":{"168":{"tf":1.0},"379":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"253":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"95":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"2":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":4,"docs":{"285":{"tf":1.0},"290":{"tf":1.4142135623730951},"299":{"tf":1.0},"326":{"tf":1.4142135623730951}}}}}}},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"176":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}}},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"161":{"tf":1.0},"173":{"tf":1.0},"420":{"tf":1.0}}}}},"df":0,"docs":{}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"23":{"tf":1.0}}}}}}}},"i":{"d":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"364":{"tf":1.0}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"330":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"n":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"166":{"tf":1.0},"276":{"tf":1.0},"89":{"tf":1.0}}},"n":{"c":{"df":8,"docs":{"187":{"tf":1.4142135623730951},"217":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"285":{"tf":1.0},"287":{"tf":1.0},"298":{"tf":1.0},"74":{"tf":1.4142135623730951},"86":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":14,"docs":{"173":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"237":{"tf":1.0},"240":{"tf":1.0},"258":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.0},"294":{"tf":1.0},"298":{"tf":1.4142135623730951},"299":{"tf":1.0},"418":{"tf":1.0},"6":{"tf":1.0},"80":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"71":{"tf":1.0}}}}},"t":{"df":1,"docs":{"1":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"p":{"df":2,"docs":{"214":{"tf":1.0},"95":{"tf":1.0}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"420":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"175":{"tf":1.0},"177":{"tf":1.0},"186":{"tf":1.4142135623730951},"347":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"291":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"r":{"df":4,"docs":{"278":{"tf":1.0},"397":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"i":{"df":10,"docs":{"164":{"tf":1.0},"175":{"tf":1.0},"178":{"tf":1.0},"232":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"397":{"tf":1.0},"417":{"tf":1.0}}},"n":{"df":3,"docs":{"168":{"tf":1.0},"379":{"tf":1.0},"85":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"330":{"tf":1.0},"331":{"tf":1.0}}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"l":{"df":5,"docs":{"14":{"tf":1.0},"17":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"86":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"276":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"330":{"tf":1.0},"331":{"tf":1.0},"347":{"tf":1.0},"357":{"tf":1.4142135623730951},"95":{"tf":1.0}}}}}}},"df":2,"docs":{"147":{"tf":1.4142135623730951},"3":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"181":{"tf":1.0}}},"df":0,"docs":{}}}},"é":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"382":{"tf":1.0}}}}}},"t":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":2,"docs":{"18":{"tf":1.0},"20":{"tf":1.0}}}},"t":{"df":4,"docs":{"104":{"tf":1.7320508075688772},"237":{"tf":1.0},"347":{"tf":1.7320508075688772},"85":{"tf":1.0}}},"y":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"72":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"399":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"444":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"364":{"tf":1.0}}}}}}}}}}}}},"m":{"a":{"_":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"257":{"tf":1.4142135623730951}},"e":{"\\"":{")":{".":{"a":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"259":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":23,"docs":{"100":{"tf":1.4142135623730951},"145":{"tf":1.0},"147":{"tf":1.4142135623730951},"150":{"tf":1.4142135623730951},"156":{"tf":1.0},"16":{"tf":1.4142135623730951},"163":{"tf":1.4142135623730951},"167":{"tf":1.0},"169":{"tf":1.0},"171":{"tf":1.7320508075688772},"172":{"tf":1.0},"177":{"tf":1.0},"186":{"tf":1.0},"210":{"tf":1.0},"291":{"tf":1.0},"296":{"tf":1.0},"443":{"tf":1.0},"76":{"tf":1.0},"81":{"tf":1.4142135623730951},"84":{"tf":1.0},"88":{"tf":1.0},"94":{"tf":1.4142135623730951},"95":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":2,"docs":{"443":{"tf":1.0},"451":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"o":{"df":1,"docs":{"288":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":5,"docs":{"199":{"tf":1.0},"20":{"tf":1.0},"249":{"tf":1.4142135623730951},"290":{"tf":1.0},"356":{"tf":1.0}},"l":{"df":7,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"213":{"tf":1.0},"297":{"tf":1.0},"86":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"n":{",":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"173":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"174":{"tf":1.0}}}},"r":{"df":2,"docs":{"364":{"tf":1.0},"376":{"tf":1.0}}}},"[":{"\\"":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":14,"docs":{"123":{"tf":1.0},"21":{"tf":1.0},"242":{"tf":1.0},"257":{"tf":1.4142135623730951},"259":{"tf":1.0},"294":{"tf":2.23606797749979},"316":{"tf":1.4142135623730951},"351":{"tf":1.0},"364":{"tf":1.0},"392":{"tf":1.0},"413":{"tf":2.0},"414":{"tf":4.795831523312719},"428":{"tf":1.7320508075688772},"72":{"tf":1.0}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"318":{"tf":1.0},"372":{"tf":1.0},"427":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":5,"docs":{"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"357":{"tf":1.0},"83":{"tf":1.0}},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":2,"docs":{"2":{"tf":1.0},"71":{"tf":1.0}}}}}}}}},"j":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"133":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"208":{"tf":1.0}}}}}}},"n":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"147":{"tf":1.0},"179":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"3":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"184":{"tf":1.0},"300":{"tf":1.0}}}}},"df":1,"docs":{"399":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"288":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":14,"docs":{"166":{"tf":1.4142135623730951},"175":{"tf":1.0},"183":{"tf":1.0},"2":{"tf":1.7320508075688772},"206":{"tf":1.0},"276":{"tf":1.7320508075688772},"3":{"tf":1.0},"362":{"tf":1.0},"4":{"tf":1.7320508075688772},"442":{"tf":1.0},"451":{"tf":2.0},"5":{"tf":2.0},"6":{"tf":1.0},"71":{"tf":1.7320508075688772}}}}}},"p":{"df":1,"docs":{"401":{"tf":1.0}}},"r":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"20":{"tf":1.0},"23":{"tf":1.4142135623730951},"284":{"tf":1.0},"300":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"k":{"_":{"c":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"351":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"348":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"348":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":3,"docs":{"59":{"tf":1.7320508075688772},"60":{"tf":1.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"394":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"318":{"tf":1.0},"347":{"tf":1.0}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"394":{"tf":1.4142135623730951}}}}},"é":{"df":2,"docs":{"442":{"tf":1.0},"83":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"397":{"tf":1.0}}}}},"é":{"df":1,"docs":{"382":{"tf":1.0}}}}},"s":{"c":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"189":{"tf":1.0}}}},"df":0,"docs":{}},"df":1,"docs":{"450":{"tf":1.4142135623730951}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"193":{"tf":1.0},"214":{"tf":1.0},"259":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"208":{"tf":1.4142135623730951},"396":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"i":{"df":3,"docs":{"166":{"tf":1.0},"300":{"tf":1.0},"330":{"tf":1.0}},"s":{"df":1,"docs":{"300":{"tf":1.0}}}}},"df":0,"docs":{}}},"x":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"427":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":3,"docs":{"180":{"tf":1.0},"208":{"tf":1.0},"393":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"127":{"tf":2.23606797749979},"189":{"tf":3.7416573867739413}}}}}}}},"î":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"1":{"tf":1.0}}}}}}}},"d":{"df":0,"docs":{},"p":{"df":2,"docs":{"16":{"tf":1.0},"243":{"tf":1.0}}}},"df":7,"docs":{"123":{"tf":1.0},"174":{"tf":1.7320508075688772},"294":{"tf":1.0},"296":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.4142135623730951},"394":{"tf":1.0}},"e":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"181":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"450":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"347":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"284":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":3,"docs":{"10":{"tf":1.0},"281":{"tf":1.0},"76":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":5,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"86":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":11,"docs":{"279":{"tf":1.0},"317":{"tf":1.0},"365":{"tf":1.7320508075688772},"366":{"tf":1.0},"375":{"tf":1.0},"388":{"tf":1.0},"403":{"tf":1.7320508075688772},"43":{"tf":1.7320508075688772},"44":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":2,"docs":{"364":{"tf":1.0},"414":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"293":{"tf":1.0},"330":{"tf":1.0},"401":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":3,"docs":{"181":{"tf":1.0},"355":{"tf":1.0},"364":{"tf":1.0}},"r":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"189":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"211":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"352":{"tf":1.0}}}}},"r":{"df":13,"docs":{"108":{"tf":1.0},"117":{"tf":1.4142135623730951},"130":{"tf":1.4142135623730951},"131":{"tf":1.4142135623730951},"139":{"tf":1.7320508075688772},"140":{"tf":1.0},"170":{"tf":1.4142135623730951},"172":{"tf":1.0},"176":{"tf":1.4142135623730951},"214":{"tf":1.0},"317":{"tf":1.0},"390":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"i":{"b":{"/":{"df":2,"docs":{"289":{"tf":1.0},"356":{"tf":1.0}}},"df":2,"docs":{"289":{"tf":1.0},"356":{"tf":1.0}}},"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}}},"d":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":4,"docs":{"280":{"tf":1.0},"287":{"tf":1.0},"399":{"tf":1.0},"445":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"377":{"tf":1.0}},"g":{"df":1,"docs":{"414":{"tf":2.0}},"r":{"a":{"df":0,"docs":{},"t":{"df":12,"docs":{"279":{"tf":1.0},"293":{"tf":1.4142135623730951},"299":{"tf":1.0},"339":{"tf":1.7320508075688772},"340":{"tf":1.0},"372":{"tf":1.7320508075688772},"397":{"tf":1.0},"414":{"tf":1.0},"450":{"tf":2.0},"73":{"tf":1.0},"85":{"tf":1.7320508075688772},"87":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"450":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"n":{"df":9,"docs":{"24":{"tf":1.0},"277":{"tf":1.7320508075688772},"278":{"tf":1.7320508075688772},"301":{"tf":1.0},"6":{"tf":2.0},"7":{"tf":2.0},"72":{"tf":2.0},"73":{"tf":2.0},"89":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":3,"docs":{"113":{"tf":1.0},"292":{"tf":1.0},"389":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":7,"docs":{"127":{"tf":1.4142135623730951},"444":{"tf":1.0},"445":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951}}}},"df":3,"docs":{"154":{"tf":1.4142135623730951},"164":{"tf":1.0},"447":{"tf":1.0}},"u":{"df":0,"docs":{},"m":{"df":4,"docs":{"151":{"tf":1.0},"167":{"tf":1.0},"243":{"tf":1.0},"383":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":9,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.0},"293":{"tf":1.0},"347":{"tf":1.0},"79":{"tf":1.4142135623730951},"81":{"tf":1.0},"85":{"tf":2.0}}}}},"s":{"df":0,"docs":{},"e":{"df":48,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":1.0},"128":{"tf":1.7320508075688772},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.7320508075688772},"133":{"tf":1.0},"134":{"tf":1.0},"165":{"tf":1.4142135623730951},"362":{"tf":1.0},"418":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0},"94":{"tf":1.7320508075688772},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}}}},"x":{"df":1,"docs":{"133":{"tf":1.0}}}},"k":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":4,"docs":{"109":{"tf":1.0},"116":{"tf":1.0},"178":{"tf":1.0},"83":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"317":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":2,"docs":{"397":{"tf":1.4142135623730951},"443":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"317":{"tf":1.0}}}}}},"d":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"314":{"tf":1.0}}}},"df":3,"docs":{"101":{"tf":1.0},"115":{"tf":1.0},"133":{"tf":1.0}},"e":{")":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"447":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":1,"docs":{"447":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":91,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"146":{"tf":1.0},"174":{"tf":2.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"272":{"tf":2.449489742783178},"273":{"tf":1.7320508075688772},"275":{"tf":1.0},"28":{"tf":1.0},"281":{"tf":1.4142135623730951},"283":{"tf":1.0},"294":{"tf":1.0},"296":{"tf":1.4142135623730951},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"313":{"tf":1.7320508075688772},"32":{"tf":1.0},"324":{"tf":1.4142135623730951},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"375":{"tf":1.0},"378":{"tf":1.4142135623730951},"379":{"tf":1.7320508075688772},"38":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"413":{"tf":1.4142135623730951},"417":{"tf":1.7320508075688772},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"436":{"tf":2.449489742783178},"437":{"tf":1.7320508075688772},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"447":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"83":{"tf":1.0},"9":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"l":{"df":1,"docs":{"372":{"tf":1.0}}}},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"16":{"tf":1.0},"165":{"tf":1.7320508075688772},"389":{"tf":1.0},"403":{"tf":1.0}},"i":{"df":20,"docs":{"105":{"tf":1.4142135623730951},"165":{"tf":1.0},"232":{"tf":1.0},"237":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.4142135623730951},"248":{"tf":1.4142135623730951},"249":{"tf":1.0},"252":{"tf":1.4142135623730951},"253":{"tf":1.7320508075688772},"254":{"tf":1.7320508075688772},"317":{"tf":1.0},"319":{"tf":1.0},"358":{"tf":1.0},"361":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"442":{"tf":1.0}}}},"é":{"df":2,"docs":{"389":{"tf":1.0},"403":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"l":{"df":15,"docs":{"101":{"tf":1.0},"133":{"tf":1.0},"146":{"tf":1.0},"174":{"tf":1.4142135623730951},"214":{"tf":1.0},"296":{"tf":1.0},"334":{"tf":1.0},"369":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"379":{"tf":1.4142135623730951},"421":{"tf":1.0},"447":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"334":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"è":{"df":0,"docs":{},"l":{"df":15,"docs":{"10":{"tf":1.4142135623730951},"270":{"tf":1.7320508075688772},"271":{"tf":1.0},"281":{"tf":1.4142135623730951},"284":{"tf":1.0},"3":{"tf":1.0},"353":{"tf":1.0},"430":{"tf":1.7320508075688772},"431":{"tf":1.0},"53":{"tf":1.7320508075688772},"54":{"tf":1.0},"65":{"tf":1.7320508075688772},"66":{"tf":1.0},"76":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"286":{"tf":1.0}},"n":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":6,"docs":{"286":{"tf":1.0},"351":{"tf":1.0},"353":{"tf":1.4142135623730951},"356":{"tf":1.0},"397":{"tf":1.0},"6":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"161":{"tf":1.0}}}}}},"n":{"df":5,"docs":{"19":{"tf":1.7320508075688772},"21":{"tf":1.0},"294":{"tf":2.23606797749979},"334":{"tf":1.0},"86":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"207":{"tf":1.4142135623730951}}}}}},"o":{"df":4,"docs":{"356":{"tf":1.0},"443":{"tf":1.4142135623730951},"451":{"tf":1.0},"76":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"287":{"tf":1.4142135623730951}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"287":{"tf":1.0}}}},"r":{"df":1,"docs":{"21":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"87":{"tf":1.0}}}}}},"é":{"df":1,"docs":{"375":{"tf":1.4142135623730951}}}}},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"291":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":14,"docs":{"102":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"150":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"243":{"tf":1.4142135623730951},"250":{"tf":1.0},"291":{"tf":1.0},"330":{"tf":1.7320508075688772},"359":{"tf":1.0},"83":{"tf":1.0},"86":{"tf":1.4142135623730951},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"171":{"tf":1.0},"381":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"317":{"tf":2.0}}}}}}},"p":{"df":0,"docs":{},"s":{"c":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"(":{"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"380":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"169":{"tf":1.0},"348":{"tf":1.0},"414":{"tf":1.0}}},"df":0,"docs":{}}},"s":{"df":2,"docs":{"348":{"tf":1.0},"349":{"tf":1.0}},"m":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"213":{"tf":1.0}}}}}},"t":{"a":{"df":1,"docs":{"213":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"347":{"tf":1.0},"447":{"tf":1.0}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}},"df":0,"docs":{}}},"v":{"df":2,"docs":{"109":{"tf":1.0},"116":{"tf":1.0}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"447":{"tf":1.0}}}}},"é":{"c":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"357":{"tf":1.0},"450":{"tf":1.0}}}},"s":{"df":0,"docs":{},"m":{"df":3,"docs":{"231":{"tf":1.0},"347":{"tf":1.0},"361":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"254":{"tf":1.0},"352":{"tf":1.0}},"e":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"394":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"t":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":2,"docs":{"346":{"tf":1.0},"419":{"tf":1.0}}}}}}},"df":1,"docs":{"208":{"tf":1.0}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"364":{"tf":1.0}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":7,"docs":{"279":{"tf":1.0},"287":{"tf":1.0},"337":{"tf":1.7320508075688772},"338":{"tf":1.0},"372":{"tf":1.0},"394":{"tf":1.0},"416":{"tf":1.4142135623730951}}}}}}},"ê":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":15,"docs":{"147":{"tf":1.0},"153":{"tf":1.0},"16":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.0},"211":{"tf":1.0},"287":{"tf":1.4142135623730951},"296":{"tf":1.0},"346":{"tf":1.0},"351":{"tf":1.0},"355":{"tf":1.0},"357":{"tf":1.0},"363":{"tf":1.0},"450":{"tf":1.0},"72":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":3,"docs":{"164":{"tf":1.0},"423":{"tf":1.0},"85":{"tf":1.0}}}},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"451":{"tf":1.0}}}}}},"df":0,"docs":{}}},"t":{"df":1,"docs":{"133":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"446":{"tf":1.0},"73":{"tf":1.0},"89":{"tf":1.0}}},"v":{"df":2,"docs":{"356":{"tf":1.7320508075688772},"444":{"tf":1.0}}}}},"v":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"333":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":12,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"293":{"tf":1.0},"294":{"tf":1.0},"313":{"tf":1.0},"322":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"82":{"tf":1.0},"86":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"325":{"tf":1.0},"333":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":80,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"313":{"tf":1.0},"32":{"tf":1.0},"325":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":2.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"375":{"tf":1.4142135623730951},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"419":{"tf":1.0},"42":{"tf":1.0},"422":{"tf":1.0},"428":{"tf":1.4142135623730951},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"u":{"df":3,"docs":{"21":{"tf":1.0},"328":{"tf":1.0},"4":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"86":{"tf":1.0}}}}}}}}},"df":4,"docs":{"124":{"tf":1.0},"193":{"tf":1.0},"205":{"tf":1.4142135623730951},"352":{"tf":1.0}},"e":{"df":36,"docs":{"105":{"tf":1.0},"133":{"tf":1.4142135623730951},"148":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"167":{"tf":1.4142135623730951},"17":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"234":{"tf":1.0},"237":{"tf":1.0},"258":{"tf":1.0},"276":{"tf":1.0},"284":{"tf":1.0},"293":{"tf":1.0},"300":{"tf":1.4142135623730951},"332":{"tf":1.0},"346":{"tf":1.0},"355":{"tf":1.0},"361":{"tf":1.0},"363":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"393":{"tf":1.4142135623730951},"399":{"tf":1.0},"402":{"tf":1.0},"416":{"tf":1.0},"419":{"tf":1.0},"442":{"tf":1.0},"451":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"88":{"tf":1.7320508075688772}},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"424":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"325":{"tf":1.0}}},"y":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"325":{"tf":1.0}}}},"df":0,"docs":{}}}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":2,"docs":{"84":{"tf":1.7320508075688772},"85":{"tf":1.0}}}}}}},"w":{"df":7,"docs":{"129":{"tf":1.0},"130":{"tf":1.0},"294":{"tf":1.4142135623730951},"331":{"tf":1.0},"333":{"tf":1.0},"423":{"tf":1.0},"86":{"tf":1.0}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":2,"docs":{"372":{"tf":1.0},"402":{"tf":1.0}}}}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"116":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":32,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.7320508075688772},"107":{"tf":1.4142135623730951},"108":{"tf":1.0},"114":{"tf":1.4142135623730951},"115":{"tf":2.23606797749979},"116":{"tf":2.0},"117":{"tf":1.0},"120":{"tf":1.4142135623730951},"121":{"tf":2.449489742783178},"122":{"tf":1.0},"124":{"tf":1.7320508075688772},"127":{"tf":1.4142135623730951},"129":{"tf":1.0},"130":{"tf":2.0},"133":{"tf":2.449489742783178},"134":{"tf":1.7320508075688772},"187":{"tf":1.0},"189":{"tf":3.4641016151377544},"198":{"tf":1.4142135623730951},"199":{"tf":2.6457513110645907},"200":{"tf":2.0},"203":{"tf":1.4142135623730951},"204":{"tf":2.0},"205":{"tf":1.0},"208":{"tf":3.4641016151377544},"211":{"tf":1.0},"214":{"tf":1.7320508075688772},"445":{"tf":1.0},"96":{"tf":1.4142135623730951},"97":{"tf":1.7320508075688772},"98":{"tf":1.0}}}}},"x":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"2":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"214":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"i":{"df":3,"docs":{"276":{"tf":1.0},"379":{"tf":1.4142135623730951},"5":{"tf":1.0}},"k":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":1,"docs":{"189":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":2,"docs":{"243":{"tf":1.0},"382":{"tf":1.0}},"x":{"df":3,"docs":{"281":{"tf":1.0},"378":{"tf":1.0},"416":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"j":{"df":3,"docs":{"286":{"tf":1.0},"323":{"tf":1.0},"447":{"tf":1.0}}},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":5,"docs":{"148":{"tf":1.0},"161":{"tf":1.0},"174":{"tf":1.0},"286":{"tf":1.0},"288":{"tf":1.0}},"l":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"m":{"a":{"d":{"df":1,"docs":{"147":{"tf":1.0}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"r":{"df":2,"docs":{"177":{"tf":1.0},"181":{"tf":1.0}}}},"df":7,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"294":{"tf":1.0},"331":{"tf":1.4142135623730951},"383":{"tf":1.0},"419":{"tf":1.0}}},"n":{"c":{"df":1,"docs":{"394":{"tf":1.0}}},"df":20,"docs":{"133":{"tf":1.0},"147":{"tf":1.7320508075688772},"151":{"tf":1.0},"153":{"tf":2.0},"166":{"tf":1.7320508075688772},"183":{"tf":1.4142135623730951},"184":{"tf":1.0},"196":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.4142135623730951},"238":{"tf":1.4142135623730951},"244":{"tf":1.0},"246":{"tf":1.0},"248":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"290":{"tf":1.0},"300":{"tf":1.4142135623730951},"397":{"tf":1.4142135623730951},"88":{"tf":1.0}},"e":{"[":{"df":0,"docs":{},"p":{"a":{"df":1,"docs":{"174":{"tf":1.0}}},"df":0,"docs":{}}},"df":7,"docs":{"259":{"tf":1.0},"317":{"tf":1.0},"380":{"tf":1.0},"396":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"d":{":":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"166":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"166":{"tf":1.0},"167":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"332":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":8,"docs":{"209":{"tf":1.4142135623730951},"21":{"tf":1.0},"348":{"tf":1.0},"414":{"tf":2.6457513110645907},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.4142135623730951},"426":{"tf":1.7320508075688772}},"r":{"df":1,"docs":{"102":{"tf":1.0}}}},"i":{"df":0,"docs":{},"f":{"df":15,"docs":{"175":{"tf":1.0},"189":{"tf":1.0},"2":{"tf":1.0},"213":{"tf":1.4142135623730951},"297":{"tf":1.7320508075688772},"317":{"tf":1.4142135623730951},"318":{"tf":1.4142135623730951},"319":{"tf":1.0},"320":{"tf":1.4142135623730951},"375":{"tf":1.7320508075688772},"377":{"tf":2.23606797749979},"418":{"tf":1.0},"61":{"tf":1.7320508075688772},"62":{"tf":1.0},"9":{"tf":1.0}},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"377":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"377":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"355":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"2":{"tf":1.0}}}}}},"u":{"df":1,"docs":{"82":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":8,"docs":{"106":{"tf":1.4142135623730951},"128":{"tf":1.4142135623730951},"173":{"tf":1.0},"257":{"tf":1.4142135623730951},"258":{"tf":1.4142135623730951},"317":{"tf":1.0},"334":{"tf":1.4142135623730951},"394":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":4,"docs":{"318":{"tf":1.0},"332":{"tf":1.0},"364":{"tf":1.0},"429":{"tf":1.0}}}}}},"w":{"df":5,"docs":{"115":{"tf":1.0},"126":{"tf":1.0},"188":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}}}},"p":{"df":0,"docs":{},"m":{"df":8,"docs":{"292":{"tf":1.4142135623730951},"313":{"tf":2.23606797749979},"320":{"tf":1.0},"324":{"tf":2.23606797749979},"327":{"tf":1.0},"334":{"tf":1.0},"403":{"tf":1.0},"447":{"tf":1.0}}},"x":{"df":6,"docs":{"100":{"tf":1.0},"292":{"tf":1.4142135623730951},"320":{"tf":1.4142135623730951},"323":{"tf":1.0},"334":{"tf":1.0},"389":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"241":{"tf":2.0},"373":{"tf":1.0}}}},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"108":{"tf":1.0}}}}},"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":2,"docs":{"288":{"tf":1.0},"394":{"tf":1.0}}}}}}},"é":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":8,"docs":{"167":{"tf":1.0},"253":{"tf":1.0},"276":{"tf":1.0},"281":{"tf":1.0},"288":{"tf":1.0},"363":{"tf":1.0},"392":{"tf":1.0},"76":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":7,"docs":{"189":{"tf":1.0},"244":{"tf":1.0},"316":{"tf":1.0},"331":{"tf":1.0},"334":{"tf":1.0},"355":{"tf":1.0},"363":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"396":{"tf":1.0},"397":{"tf":1.0}}}}}},"df":0,"docs":{}}},"’":{"a":{"df":5,"docs":{"19":{"tf":1.4142135623730951},"237":{"tf":1.0},"244":{"tf":1.0},"249":{"tf":1.0},"5":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":12,"docs":{"109":{"tf":1.0},"165":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.4142135623730951},"249":{"tf":1.0},"254":{"tf":1.0},"277":{"tf":1.4142135623730951},"288":{"tf":1.0},"6":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"86":{"tf":1.0},"88":{"tf":1.4142135623730951}}}},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"165":{"tf":1.0},"242":{"tf":1.0},"292":{"tf":1.0},"363":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"71":{"tf":1.0}}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"279":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"353":{"tf":1.0}}}}}}}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"353":{"tf":1.0}}}}}}}},"o":{"1":{"df":6,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"285":{"tf":1.0},"299":{"tf":1.0},"80":{"tf":1.0},"87":{"tf":1.0}}},"2":{"df":6,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"285":{"tf":1.0},"299":{"tf":1.0},"80":{"tf":1.0},"87":{"tf":1.0}}},"3":{"df":6,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"285":{"tf":1.0},"299":{"tf":1.0},"80":{"tf":1.0},"87":{"tf":1.0}}},"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{"df":1,"docs":{"194":{"tf":1.0}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"_":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":2,"docs":{"243":{"tf":1.0},"249":{"tf":1.0}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"a":{"c":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}},"m":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"{":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"}":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"243":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"244":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"244":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.0}}}}}}}},"df":11,"docs":{"143":{"tf":1.7320508075688772},"144":{"tf":1.0},"232":{"tf":1.0},"243":{"tf":2.8284271247461903},"244":{"tf":2.23606797749979},"248":{"tf":1.4142135623730951},"250":{"tf":1.0},"254":{"tf":2.0},"259":{"tf":1.0},"416":{"tf":1.0},"74":{"tf":1.0}}}}}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"289":{"tf":1.7320508075688772},"294":{"tf":1.7320508075688772},"356":{"tf":1.4142135623730951},"424":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"14":{"tf":1.4142135623730951},"284":{"tf":1.0},"285":{"tf":1.4142135623730951},"80":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"t":{"df":3,"docs":{"346":{"tf":1.0},"348":{"tf":1.0},"425":{"tf":1.0}},"s":{"/":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":6,"docs":{"153":{"tf":1.0},"199":{"tf":1.4142135623730951},"389":{"tf":1.4142135623730951},"392":{"tf":1.4142135623730951},"393":{"tf":1.0},"397":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":5,"docs":{"193":{"tf":1.0},"205":{"tf":1.0},"284":{"tf":1.0},"319":{"tf":1.0},"85":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"291":{"tf":1.0}}}},"u":{"df":1,"docs":{"277":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}}}}}},"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"88":{"tf":1.0}}},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"83":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"292":{"tf":1.0}}}}}},"df":8,"docs":{"121":{"tf":1.0},"150":{"tf":1.4142135623730951},"178":{"tf":1.0},"180":{"tf":1.0},"187":{"tf":1.0},"206":{"tf":1.0},"292":{"tf":1.0},"389":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"177":{"tf":1.0}}}}}},"df":0,"docs":{}},"r":{"df":1,"docs":{"1":{"tf":1.0}}}}},"k":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"a":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":12,"docs":{"105":{"tf":1.0},"106":{"tf":1.4142135623730951},"160":{"tf":1.4142135623730951},"164":{"tf":1.0},"319":{"tf":1.0},"348":{"tf":1.0},"414":{"tf":1.0},"423":{"tf":1.7320508075688772},"424":{"tf":1.0},"425":{"tf":1.7320508075688772},"426":{"tf":1.0},"429":{"tf":1.4142135623730951}}},"n":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"377":{"tf":1.0}}}}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"376":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"376":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"360":{"tf":1.7320508075688772},"376":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"376":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"(":{"d":{"b":{"df":1,"docs":{"429":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"(":{"\\"":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"\\"":{")":{".":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"y":{"(":{"b":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"(":{")":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"164":{"tf":1.0},"181":{"tf":1.0}}}}}},"t":{"df":2,"docs":{"290":{"tf":1.0},"362":{"tf":1.0}}}},"p":{"df":1,"docs":{"2":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"373":{"tf":1.0}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":3,"docs":{"288":{"tf":1.0},"290":{"tf":1.4142135623730951},"83":{"tf":1.0}}}}}}},"t":{"/":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"178":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"133":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"156":{"tf":1.0}}}},"d":{"a":{"df":0,"docs":{},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"109":{"tf":1.4142135623730951}},"e":{"/":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"109":{"tf":1.4142135623730951}}}}}},"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"109":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":6,"docs":{"148":{"tf":1.0},"153":{"tf":1.0},"160":{"tf":1.7320508075688772},"161":{"tf":1.0},"83":{"tf":1.4142135623730951},"84":{"tf":1.7320508075688772}}}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"356":{"tf":1.0}},"s":{"df":2,"docs":{"356":{"tf":1.7320508075688772},"357":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"<":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"428":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"428":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":2,"docs":{"291":{"tf":1.7320508075688772},"330":{"tf":1.0}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{}}}},"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"g":{"df":0,"docs":{},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":13,"docs":{"112":{"tf":1.4142135623730951},"169":{"tf":1.0},"173":{"tf":1.4142135623730951},"176":{"tf":1.0},"177":{"tf":1.0},"186":{"tf":1.4142135623730951},"189":{"tf":1.0},"286":{"tf":1.0},"296":{"tf":1.4142135623730951},"331":{"tf":1.0},"381":{"tf":1.4142135623730951},"413":{"tf":1.0},"82":{"tf":1.0}}}}}}}}},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"417":{"tf":1.0}}}},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":6,"docs":{"287":{"tf":1.0},"349":{"tf":1.0},"373":{"tf":1.0},"419":{"tf":1.0},"422":{"tf":1.0},"449":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"71":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"357":{"tf":1.0},"72":{"tf":1.4142135623730951},"86":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}},"d":{"df":1,"docs":{"372":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"185":{"tf":1.4142135623730951}}}},"r":{"df":6,"docs":{"208":{"tf":1.0},"279":{"tf":1.0},"357":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0},"98":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"82":{"tf":1.0}},"é":{"df":2,"docs":{"2":{"tf":1.0},"3":{"tf":1.0}}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"123":{"tf":1.0},"294":{"tf":1.0}}}}}}},"s":{"df":1,"docs":{"151":{"tf":1.0}}},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"359":{"tf":1.0}}}}},"df":125,"docs":{"101":{"tf":1.0},"119":{"tf":1.0},"12":{"tf":1.0},"133":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"15":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":2.449489742783178},"169":{"tf":1.0},"171":{"tf":1.4142135623730951},"172":{"tf":1.0},"174":{"tf":1.7320508075688772},"179":{"tf":1.0},"18":{"tf":1.0},"183":{"tf":1.4142135623730951},"184":{"tf":1.4142135623730951},"186":{"tf":1.0},"19":{"tf":2.0},"191":{"tf":1.0},"196":{"tf":1.0},"2":{"tf":1.0},"21":{"tf":1.7320508075688772},"210":{"tf":1.0},"214":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"23":{"tf":1.7320508075688772},"230":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.0},"252":{"tf":1.4142135623730951},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"276":{"tf":1.4142135623730951},"28":{"tf":1.0},"283":{"tf":1.0},"286":{"tf":1.0},"292":{"tf":1.0},"296":{"tf":1.0},"30":{"tf":1.0},"300":{"tf":2.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"316":{"tf":1.0},"32":{"tf":1.0},"324":{"tf":1.0},"334":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"363":{"tf":1.4142135623730951},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"380":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"393":{"tf":1.4142135623730951},"4":{"tf":1.0},"40":{"tf":1.0},"403":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"416":{"tf":1.0},"419":{"tf":1.0},"42":{"tf":1.0},"420":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.4142135623730951},"85":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":2.23606797749979},"89":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0},"95":{"tf":1.0}},"i":{"df":7,"docs":{"147":{"tf":1.4142135623730951},"153":{"tf":1.0},"232":{"tf":1.4142135623730951},"246":{"tf":1.0},"247":{"tf":1.4142135623730951},"248":{"tf":1.0},"249":{"tf":1.0}}},"t":{"df":2,"docs":{"356":{"tf":1.4142135623730951},"357":{"tf":1.0}},"i":{"df":0,"docs":{},"l":{"df":4,"docs":{"150":{"tf":1.0},"171":{"tf":1.0},"288":{"tf":1.0},"390":{"tf":1.0}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"424":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"104":{"tf":1.4142135623730951},"210":{"tf":1.0},"348":{"tf":1.0},"6":{"tf":1.0}}}}},"r":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"290":{"tf":1.0},"293":{"tf":1.0},"86":{"tf":1.0}}}},"i":{"df":0,"docs":{},"r":{"df":4,"docs":{"363":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.0},"8":{"tf":1.0}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"348":{"tf":1.0},"414":{"tf":2.6457513110645907},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.4142135623730951},"426":{"tf":1.7320508075688772}}}}},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"=":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"424":{"tf":1.0},"425":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"423":{"tf":1.7320508075688772},"427":{"tf":1.4142135623730951},"428":{"tf":1.0}}},"df":0,"docs":{}}},"df":4,"docs":{"291":{"tf":1.0},"372":{"tf":1.0},"423":{"tf":1.0},"427":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":4,"docs":{"393":{"tf":1.0},"419":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}}}}}},"}":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"375":{"tf":1.0}},"}":{"/":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"423":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}},"p":{"2":{"5":{"6":{"/":{"df":0,"docs":{},"p":{"3":{"8":{"4":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"k":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"373":{"tf":1.0}}}}}},"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{":":{":":{"a":{"d":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"424":{"tf":1.0},"425":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"k":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"424":{"tf":1.0},"425":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"373":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"292":{"tf":1.0},"447":{"tf":1.0}}}},"df":7,"docs":{"294":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.4142135623730951},"380":{"tf":1.0},"419":{"tf":1.0},"424":{"tf":2.449489742783178},"425":{"tf":1.7320508075688772}}}},"d":{"df":1,"docs":{"426":{"tf":1.0}}},"df":83,"docs":{"1":{"tf":1.0},"10":{"tf":1.0},"105":{"tf":1.0},"109":{"tf":1.4142135623730951},"113":{"tf":1.0},"13":{"tf":1.7320508075688772},"133":{"tf":1.4142135623730951},"14":{"tf":1.0},"148":{"tf":1.0},"15":{"tf":1.0},"156":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"161":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"17":{"tf":1.4142135623730951},"172":{"tf":1.0},"177":{"tf":1.0},"18":{"tf":1.0},"187":{"tf":1.0},"19":{"tf":1.7320508075688772},"199":{"tf":2.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.0},"210":{"tf":1.0},"212":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":2.0},"237":{"tf":1.0},"24":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.4142135623730951},"249":{"tf":1.0},"254":{"tf":1.0},"258":{"tf":1.0},"264":{"tf":1.7320508075688772},"265":{"tf":1.0},"276":{"tf":1.0},"277":{"tf":2.0},"278":{"tf":1.4142135623730951},"281":{"tf":1.0},"284":{"tf":1.7320508075688772},"288":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"300":{"tf":1.4142135623730951},"319":{"tf":1.7320508075688772},"324":{"tf":1.4142135623730951},"332":{"tf":1.0},"353":{"tf":1.4142135623730951},"356":{"tf":1.0},"363":{"tf":1.4142135623730951},"373":{"tf":1.0},"375":{"tf":1.0},"379":{"tf":1.0},"383":{"tf":1.4142135623730951},"390":{"tf":1.4142135623730951},"391":{"tf":1.4142135623730951},"393":{"tf":1.7320508075688772},"397":{"tf":1.7320508075688772},"401":{"tf":1.4142135623730951},"402":{"tf":1.0},"403":{"tf":1.0},"420":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0},"442":{"tf":1.0},"443":{"tf":1.0},"451":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.7320508075688772},"7":{"tf":1.7320508075688772},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"75":{"tf":1.0},"76":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":2.23606797749979},"9":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":163,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"135":{"tf":1.4142135623730951},"136":{"tf":1.4142135623730951},"137":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"139":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"141":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"143":{"tf":1.4142135623730951},"144":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.0},"21":{"tf":1.4142135623730951},"215":{"tf":1.4142135623730951},"216":{"tf":1.4142135623730951},"217":{"tf":1.4142135623730951},"218":{"tf":1.4142135623730951},"219":{"tf":1.4142135623730951},"22":{"tf":1.0},"220":{"tf":1.4142135623730951},"221":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"223":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"225":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"227":{"tf":1.4142135623730951},"228":{"tf":1.4142135623730951},"229":{"tf":1.4142135623730951},"230":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"260":{"tf":1.4142135623730951},"261":{"tf":1.4142135623730951},"262":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"264":{"tf":1.4142135623730951},"265":{"tf":1.4142135623730951},"266":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"268":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"270":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"272":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"274":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"282":{"tf":1.4142135623730951},"283":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"293":{"tf":1.4142135623730951},"294":{"tf":1.0},"30":{"tf":1.4142135623730951},"302":{"tf":1.4142135623730951},"303":{"tf":1.4142135623730951},"304":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"306":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"308":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"318":{"tf":1.0},"319":{"tf":1.0},"32":{"tf":1.4142135623730951},"328":{"tf":1.0},"33":{"tf":1.4142135623730951},"333":{"tf":1.7320508075688772},"335":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"337":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"339":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"341":{"tf":1.4142135623730951},"342":{"tf":1.4142135623730951},"343":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"35":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"365":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"367":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"370":{"tf":1.0},"375":{"tf":2.8284271247461903},"377":{"tf":1.0},"38":{"tf":1.4142135623730951},"384":{"tf":1.4142135623730951},"385":{"tf":1.4142135623730951},"386":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"39":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"404":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"406":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"408":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"410":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"414":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.4142135623730951},"430":{"tf":1.4142135623730951},"431":{"tf":1.4142135623730951},"432":{"tf":1.4142135623730951},"433":{"tf":1.4142135623730951},"434":{"tf":1.4142135623730951},"435":{"tf":1.4142135623730951},"436":{"tf":1.4142135623730951},"437":{"tf":1.4142135623730951},"438":{"tf":1.4142135623730951},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"440":{"tf":1.4142135623730951},"441":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"47":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"55":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951},"87":{"tf":1.0},"88":{"tf":1.0},"90":{"tf":1.4142135623730951},"91":{"tf":1.4142135623730951},"92":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951}},"r":{"df":5,"docs":{"104":{"tf":1.0},"113":{"tf":1.0},"124":{"tf":1.7320508075688772},"193":{"tf":1.0},"205":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"280":{"tf":1.0},"373":{"tf":1.0},"449":{"tf":1.0},"9":{"tf":1.0}},"é":{"df":1,"docs":{"317":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"15":{"tf":1.0},"19":{"tf":1.4142135623730951}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"223":{"tf":1.7320508075688772},"224":{"tf":1.0}}}},"i":{"c":{"df":2,"docs":{"383":{"tf":1.0},"401":{"tf":1.0}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":2,"docs":{"325":{"tf":1.0},"332":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"19":{"tf":1.0}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"101":{"tf":1.0},"199":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"è":{"df":0,"docs":{},"l":{"df":1,"docs":{"169":{"tf":1.0}}}},"é":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"172":{"tf":1.0}}}}}}}}},"m":{"df":1,"docs":{"402":{"tf":1.0}},"è":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":34,"docs":{"17":{"tf":1.7320508075688772},"18":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"231":{"tf":1.7320508075688772},"232":{"tf":1.0},"233":{"tf":1.0},"234":{"tf":1.0},"235":{"tf":1.0},"236":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"239":{"tf":1.0},"240":{"tf":1.0},"241":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":1.0},"245":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.0},"252":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.0},"256":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0},"75":{"tf":1.4142135623730951}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":79,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"15":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"277":{"tf":2.23606797749979},"282":{"tf":1.0},"286":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":2.449489742783178},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"72":{"tf":2.23606797749979},"77":{"tf":1.0},"8":{"tf":1.0},"81":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}}}}},"df":57,"docs":{"102":{"tf":1.0},"104":{"tf":1.0},"107":{"tf":1.0},"109":{"tf":1.0},"134":{"tf":1.0},"146":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.4142135623730951},"155":{"tf":1.4142135623730951},"158":{"tf":1.4142135623730951},"16":{"tf":1.0},"161":{"tf":1.7320508075688772},"169":{"tf":1.7320508075688772},"17":{"tf":1.0},"173":{"tf":1.0},"175":{"tf":1.0},"181":{"tf":1.0},"19":{"tf":1.4142135623730951},"190":{"tf":1.0},"192":{"tf":1.0},"199":{"tf":1.4142135623730951},"200":{"tf":1.4142135623730951},"202":{"tf":1.4142135623730951},"204":{"tf":1.0},"234":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.7320508075688772},"243":{"tf":1.4142135623730951},"244":{"tf":1.0},"249":{"tf":2.0},"290":{"tf":1.0},"298":{"tf":1.0},"327":{"tf":1.0},"331":{"tf":1.0},"346":{"tf":1.0},"349":{"tf":1.4142135623730951},"351":{"tf":1.4142135623730951},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"362":{"tf":1.0},"369":{"tf":1.4142135623730951},"374":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"377":{"tf":1.4142135623730951},"393":{"tf":1.4142135623730951},"395":{"tf":1.4142135623730951},"413":{"tf":1.0},"416":{"tf":1.0},"418":{"tf":1.0},"449":{"tf":1.0},"451":{"tf":1.0},"88":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":1,"docs":{"88":{"tf":1.0}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"356":{"tf":1.0}}}},"l":{"df":1,"docs":{"276":{"tf":1.0}}},"s":{"df":2,"docs":{"374":{"tf":1.0},"396":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"(":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"426":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":6,"docs":{"147":{"tf":1.0},"16":{"tf":1.4142135623730951},"19":{"tf":1.0},"287":{"tf":1.0},"354":{"tf":1.0},"361":{"tf":1.0}},"é":{"df":5,"docs":{"237":{"tf":1.0},"314":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"382":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":11,"docs":{"16":{"tf":1.7320508075688772},"180":{"tf":2.449489742783178},"348":{"tf":2.8284271247461903},"414":{"tf":2.449489742783178},"423":{"tf":2.449489742783178},"424":{"tf":2.6457513110645907},"425":{"tf":2.6457513110645907},"426":{"tf":1.7320508075688772},"427":{"tf":2.0},"428":{"tf":2.449489742783178},"429":{"tf":2.0}}}}},"df":2,"docs":{"176":{"tf":1.0},"2":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"418":{"tf":1.0}}}},"r":{"df":1,"docs":{"72":{"tf":1.0}}}}}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"0":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"380":{"tf":1.0}}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"327":{"tf":1.0}}}}},"df":26,"docs":{"102":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"150":{"tf":1.0},"152":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"214":{"tf":1.0},"243":{"tf":1.4142135623730951},"250":{"tf":1.0},"277":{"tf":1.0},"291":{"tf":1.0},"317":{"tf":1.0},"321":{"tf":1.0},"330":{"tf":1.7320508075688772},"346":{"tf":1.0},"359":{"tf":1.0},"361":{"tf":1.0},"364":{"tf":1.0},"389":{"tf":1.0},"390":{"tf":1.0},"403":{"tf":1.4142135623730951},"416":{"tf":1.0},"83":{"tf":1.0},"86":{"tf":1.4142135623730951},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"403":{"tf":1.4142135623730951}}}},"r":{"df":11,"docs":{"156":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.0},"277":{"tf":1.0},"279":{"tf":1.0},"365":{"tf":1.7320508075688772},"366":{"tf":1.0},"389":{"tf":1.0},"6":{"tf":1.4142135623730951},"72":{"tf":1.0}}}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"19":{"tf":2.23606797749979}}}},"df":0,"docs":{}}}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"_":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"d":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"_":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"d":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"243":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"243":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"243":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}}},"df":6,"docs":{"166":{"tf":1.0},"291":{"tf":1.0},"316":{"tf":1.0},"375":{"tf":1.7320508075688772},"429":{"tf":1.0},"88":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"151":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"363":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"é":{"df":1,"docs":{"347":{"tf":1.0}}}}},"t":{"/":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"208":{"tf":1.0}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"351":{"tf":1.0}}}}}},"df":5,"docs":{"10":{"tf":1.0},"319":{"tf":1.0},"348":{"tf":1.0},"449":{"tf":2.23606797749979},"451":{"tf":1.0}},"h":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"/":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"166":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"=":{"$":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{":":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"166":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}}}},"df":9,"docs":{"166":{"tf":1.0},"177":{"tf":1.0},"323":{"tf":1.0},"376":{"tf":1.0},"383":{"tf":1.0},"393":{"tf":1.0},"423":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":5,"docs":{"21":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"440":{"tf":1.7320508075688772},"441":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"396":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"t":{"df":3,"docs":{"101":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"259":{"tf":1.0},"351":{"tf":1.0},"364":{"tf":1.4142135623730951},"390":{"tf":1.0}}}}}}},"y":{"df":1,"docs":{"214":{"tf":1.0}}}},"c":{"df":1,"docs":{"291":{"tf":1.0}}},"df":19,"docs":{"104":{"tf":1.7320508075688772},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.4142135623730951},"116":{"tf":1.4142135623730951},"122":{"tf":1.0},"163":{"tf":1.0},"166":{"tf":1.0},"178":{"tf":1.0},"183":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"312":{"tf":1.4142135623730951},"320":{"tf":1.4142135623730951},"82":{"tf":1.0},"83":{"tf":1.0}},"e":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"166":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.0}}}}},"df":3,"docs":{"175":{"tf":1.4142135623730951},"183":{"tf":1.0},"348":{"tf":1.0}}},"df":1,"docs":{"147":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"160":{"tf":1.0},"82":{"tf":1.0}}}}}},"r":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{},"l":{"/":{"5":{"\\\\":{".":{"8":{"0":{"3":{"df":0,"docs":{},"|":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"148":{"tf":1.0},"347":{"tf":1.0},"417":{"tf":1.0},"419":{"tf":1.0}},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":22,"docs":{"1":{"tf":1.0},"166":{"tf":1.0},"179":{"tf":1.0},"184":{"tf":1.4142135623730951},"186":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"281":{"tf":1.0},"300":{"tf":1.0},"39":{"tf":1.7320508075688772},"393":{"tf":1.0},"40":{"tf":1.0},"416":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0},"427":{"tf":1.4142135623730951},"430":{"tf":1.7320508075688772},"431":{"tf":1.0},"53":{"tf":1.7320508075688772},"54":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"346":{"tf":1.0},"84":{"tf":1.0}}}}},"df":5,"docs":{"247":{"tf":1.0},"347":{"tf":1.4142135623730951},"397":{"tf":1.0},"412":{"tf":1.0},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"84":{"tf":1.0}}}}}}},"o":{"df":1,"docs":{"20":{"tf":1.0}},"n":{"df":4,"docs":{"37":{"tf":1.7320508075688772},"38":{"tf":1.0},"449":{"tf":1.0},"8":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"é":{"df":1,"docs":{"190":{"tf":1.4142135623730951}}}}}}},"df":1,"docs":{"1":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"189":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"445":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"t":{"df":10,"docs":{"16":{"tf":1.4142135623730951},"168":{"tf":1.0},"171":{"tf":1.0},"202":{"tf":1.0},"328":{"tf":1.0},"332":{"tf":1.4142135623730951},"347":{"tf":1.0},"352":{"tf":1.0},"382":{"tf":1.0},"393":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"288":{"tf":1.0}}}}}},"x":{"df":2,"docs":{"19":{"tf":1.0},"8":{"tf":1.0}}}}},"g":{"[":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"413":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"448":{"tf":1.0}}}}}},"df":0,"docs":{},"h":{"b":{"a":{"\\\\":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"197":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"p":{"df":0,"docs":{},"w":{"d":{"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"102":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"102":{"tf":1.0},"109":{"tf":1.0}}},"df":0,"docs":{}}}},"df":7,"docs":{"167":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.0},"212":{"tf":1.0},"287":{"tf":1.0},"413":{"tf":1.0},"75":{"tf":1.0}}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":13,"docs":{"102":{"tf":1.4142135623730951},"103":{"tf":1.4142135623730951},"107":{"tf":1.4142135623730951},"109":{"tf":1.4142135623730951},"110":{"tf":1.4142135623730951},"114":{"tf":1.4142135623730951},"120":{"tf":1.4142135623730951},"122":{"tf":1.4142135623730951},"124":{"tf":1.4142135623730951},"125":{"tf":1.4142135623730951},"128":{"tf":1.4142135623730951},"132":{"tf":1.4142135623730951},"370":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"m":{"df":0,"docs":{},"y":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"189":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"133":{"tf":1.0},"98":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"443":{"tf":1.0}}}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"175":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"322":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":18,"docs":{"145":{"tf":1.0},"161":{"tf":1.0},"164":{"tf":2.23606797749979},"166":{"tf":1.0},"169":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.4142135623730951},"175":{"tf":1.4142135623730951},"183":{"tf":1.4142135623730951},"185":{"tf":1.0},"186":{"tf":1.0},"317":{"tf":2.0},"318":{"tf":1.4142135623730951},"319":{"tf":2.0},"375":{"tf":1.4142135623730951},"377":{"tf":1.0},"381":{"tf":1.0},"447":{"tf":2.23606797749979}},"e":{"\'":{")":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"318":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"318":{"tf":1.4142135623730951},"320":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"345":{"tf":1.0},"350":{"tf":1.4142135623730951}}}},"è":{"c":{"df":2,"docs":{"287":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":2,"docs":{"231":{"tf":1.0},"249":{"tf":1.4142135623730951}}}}},"k":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"394":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":1,"docs":{"288":{"tf":1.0}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":76,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"170":{"tf":1.4142135623730951},"176":{"tf":1.4142135623730951},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"390":{"tf":1.4142135623730951},"392":{"tf":1.4142135623730951},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"290":{"tf":1.0},"95":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":2,"docs":{"189":{"tf":1.0},"190":{"tf":1.0}}},"z":{"df":1,"docs":{"296":{"tf":1.0}}}}},"df":0,"docs":{},"n":{"df":3,"docs":{"108":{"tf":1.0},"352":{"tf":1.0},"85":{"tf":1.0}},"s":{"/":{"0":{"0":{"1":{"df":72,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"231":{"tf":1.0},"412":{"tf":1.0}}}}}}}},"y":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"313":{"tf":1.0},"325":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":14,"docs":{"279":{"tf":1.0},"313":{"tf":1.4142135623730951},"314":{"tf":1.4142135623730951},"318":{"tf":1.4142135623730951},"320":{"tf":1.7320508075688772},"322":{"tf":1.0},"323":{"tf":1.4142135623730951},"324":{"tf":1.4142135623730951},"325":{"tf":1.0},"327":{"tf":1.0},"334":{"tf":1.0},"396":{"tf":1.0},"403":{"tf":1.0},"443":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"u":{"df":14,"docs":{"104":{"tf":1.0},"107":{"tf":1.4142135623730951},"122":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"181":{"tf":1.0},"19":{"tf":1.0},"293":{"tf":1.0},"319":{"tf":1.0},"347":{"tf":1.0},"352":{"tf":1.0},"356":{"tf":1.7320508075688772},"357":{"tf":1.7320508075688772},"421":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"101":{"tf":1.4142135623730951},"81":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"147":{"tf":1.0},"347":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"t":{"df":1,"docs":{"420":{"tf":1.0}}}}}}},"o":{"d":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"214":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":2,"docs":{"171":{"tf":1.0},"444":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"211":{"tf":1.0}}}}},"df":6,"docs":{"147":{"tf":1.0},"15":{"tf":1.0},"2":{"tf":1.0},"23":{"tf":1.0},"412":{"tf":1.0},"81":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"442":{"tf":1.0},"451":{"tf":1.0}}}}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"418":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"l":{"df":1,"docs":{"355":{"tf":1.0}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"280":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":5,"docs":{"352":{"tf":1.0},"354":{"tf":2.23606797749979},"357":{"tf":1.4142135623730951},"414":{"tf":1.0},"443":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"(":{"df":2,"docs":{"104":{"tf":1.0},"208":{"tf":1.0}}},"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"420":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":32,"docs":{"104":{"tf":2.0},"105":{"tf":1.0},"106":{"tf":2.0},"107":{"tf":1.7320508075688772},"108":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"127":{"tf":2.0},"134":{"tf":1.7320508075688772},"153":{"tf":1.0},"160":{"tf":1.0},"189":{"tf":3.872983346207417},"208":{"tf":1.0},"210":{"tf":1.0},"23":{"tf":1.4142135623730951},"250":{"tf":1.0},"262":{"tf":1.7320508075688772},"263":{"tf":1.0},"300":{"tf":1.0},"313":{"tf":1.0},"326":{"tf":1.4142135623730951},"372":{"tf":1.0},"375":{"tf":1.0},"75":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.7320508075688772},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"88":{"tf":2.23606797749979}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"356":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"134":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":21,"docs":{"100":{"tf":1.4142135623730951},"102":{"tf":1.4142135623730951},"104":{"tf":1.4142135623730951},"106":{"tf":1.0},"108":{"tf":1.0},"162":{"tf":1.4142135623730951},"180":{"tf":1.0},"191":{"tf":1.4142135623730951},"195":{"tf":1.7320508075688772},"20":{"tf":1.0},"206":{"tf":1.0},"280":{"tf":1.0},"325":{"tf":1.0},"348":{"tf":1.0},"375":{"tf":2.8284271247461903},"396":{"tf":1.0},"406":{"tf":1.7320508075688772},"407":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0},"429":{"tf":1.0}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"444":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"r":{"df":6,"docs":{"205":{"tf":1.0},"291":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951},"88":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{":":{"1":{"6":{"df":2,"docs":{"84":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{":":{"/":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"/":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"84":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"b":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":1,"docs":{"84":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"=":{"$":{"df":0,"docs":{},"{":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"w":{"d":{"df":1,"docs":{"109":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"d":{"b":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":3,"docs":{"102":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951},"88":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"84":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"197":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":38,"docs":{"109":{"tf":1.4142135623730951},"134":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"204":{"tf":1.0},"205":{"tf":1.0},"208":{"tf":1.0},"212":{"tf":1.7320508075688772},"232":{"tf":1.0},"240":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"291":{"tf":2.23606797749979},"299":{"tf":1.0},"300":{"tf":1.7320508075688772},"316":{"tf":1.0},"323":{"tf":1.0},"348":{"tf":1.0},"355":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0},"443":{"tf":1.4142135623730951},"444":{"tf":1.4142135623730951},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951},"84":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0},"96":{"tf":1.0}}}}}}}}}},"u":{"df":0,"docs":{},"r":{"df":155,"docs":{"1":{"tf":1.0},"101":{"tf":1.0},"11":{"tf":1.0},"125":{"tf":1.0},"133":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"14":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"145":{"tf":1.0},"147":{"tf":1.0},"155":{"tf":1.0},"16":{"tf":1.4142135623730951},"160":{"tf":1.0},"167":{"tf":1.4142135623730951},"172":{"tf":1.0},"174":{"tf":1.4142135623730951},"176":{"tf":1.0},"186":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"19":{"tf":1.4142135623730951},"2":{"tf":2.449489742783178},"213":{"tf":1.0},"214":{"tf":1.4142135623730951},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"243":{"tf":1.7320508075688772},"244":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"25":{"tf":1.0},"251":{"tf":1.4142135623730951},"255":{"tf":1.4142135623730951},"256":{"tf":1.4142135623730951},"257":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"276":{"tf":1.0},"279":{"tf":1.4142135623730951},"281":{"tf":1.0},"282":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":1.7320508075688772},"29":{"tf":1.0},"290":{"tf":2.0},"291":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"310":{"tf":1.0},"314":{"tf":1.0},"316":{"tf":1.4142135623730951},"317":{"tf":1.0},"318":{"tf":1.4142135623730951},"322":{"tf":1.0},"323":{"tf":1.0},"327":{"tf":1.0},"33":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"346":{"tf":1.0},"349":{"tf":1.4142135623730951},"35":{"tf":1.0},"351":{"tf":1.4142135623730951},"353":{"tf":1.0},"354":{"tf":1.4142135623730951},"356":{"tf":1.0},"357":{"tf":2.0},"359":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"379":{"tf":1.0},"381":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"397":{"tf":1.4142135623730951},"401":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"418":{"tf":1.0},"421":{"tf":1.4142135623730951},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"442":{"tf":1.0},"444":{"tf":1.4142135623730951},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":2.23606797749979},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.4142135623730951},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951},"89":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.4142135623730951}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":8,"docs":{"10":{"tf":1.7320508075688772},"151":{"tf":1.0},"16":{"tf":1.0},"281":{"tf":1.4142135623730951},"3":{"tf":1.0},"347":{"tf":1.4142135623730951},"76":{"tf":1.7320508075688772},"82":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"176":{"tf":1.0},"24":{"tf":1.0},"6":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"2":{"5":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":7,"docs":{"164":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.7320508075688772},"26":{"tf":1.0},"287":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.0}}},"z":{"df":2,"docs":{"284":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951}}}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"167":{"tf":1.0},"171":{"tf":1.0},"6":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"174":{"tf":1.0}}},"df":0,"docs":{}}}},"df":13,"docs":{"174":{"tf":2.0},"186":{"tf":1.0},"272":{"tf":1.7320508075688772},"273":{"tf":1.0},"281":{"tf":1.0},"296":{"tf":1.0},"317":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.7320508075688772},"413":{"tf":1.0},"436":{"tf":1.7320508075688772},"437":{"tf":1.0},"447":{"tf":1.7320508075688772}}}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":175,"docs":{"135":{"tf":1.7320508075688772},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"147":{"tf":1.0},"148":{"tf":1.0},"149":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"153":{"tf":1.0},"154":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"157":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.0},"160":{"tf":1.0},"161":{"tf":1.0},"162":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"165":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":1.0},"170":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"176":{"tf":1.0},"177":{"tf":1.0},"178":{"tf":1.0},"179":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"182":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"185":{"tf":1.0},"186":{"tf":1.0},"187":{"tf":1.0},"188":{"tf":1.0},"189":{"tf":1.0},"190":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.0},"201":{"tf":1.0},"202":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"206":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.0},"210":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"213":{"tf":1.0},"214":{"tf":1.0},"215":{"tf":1.0},"216":{"tf":1.0},"217":{"tf":1.0},"218":{"tf":1.0},"219":{"tf":1.0},"220":{"tf":1.0},"221":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.0},"286":{"tf":1.0},"3":{"tf":1.0},"306":{"tf":1.7320508075688772},"307":{"tf":1.0},"308":{"tf":1.0},"309":{"tf":1.0},"31":{"tf":1.7320508075688772},"310":{"tf":1.0},"311":{"tf":1.0},"312":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"315":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"32":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"322":{"tf":1.0},"323":{"tf":1.0},"324":{"tf":1.0},"325":{"tf":1.0},"326":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"329":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"35":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.0},"357":{"tf":1.0},"358":{"tf":1.0},"359":{"tf":1.0},"36":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.0},"364":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0}}}}}}},"df":25,"docs":{"149":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"151":{"tf":1.0},"166":{"tf":1.0},"171":{"tf":1.4142135623730951},"174":{"tf":1.4142135623730951},"277":{"tf":1.0},"278":{"tf":1.0},"286":{"tf":1.4142135623730951},"287":{"tf":1.0},"288":{"tf":1.4142135623730951},"301":{"tf":1.0},"308":{"tf":1.7320508075688772},"309":{"tf":1.0},"313":{"tf":1.0},"321":{"tf":1.0},"323":{"tf":1.4142135623730951},"363":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.0},"403":{"tf":1.4142135623730951},"81":{"tf":1.4142135623730951},"82":{"tf":1.0},"84":{"tf":1.0},"99":{"tf":1.4142135623730951}},"e":{"df":1,"docs":{"287":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":34,"docs":{"13":{"tf":2.23606797749979},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"24":{"tf":1.4142135623730951},"242":{"tf":1.0},"243":{"tf":1.0},"277":{"tf":1.4142135623730951},"284":{"tf":2.0},"285":{"tf":1.0},"287":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.4142135623730951},"299":{"tf":1.0},"3":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"80":{"tf":1.0},"84":{"tf":1.0},"86":{"tf":1.7320508075688772},"87":{"tf":1.0},"92":{"tf":1.7320508075688772},"93":{"tf":1.0}}}},"s":{"df":1,"docs":{"147":{"tf":1.0}}},"è":{"df":0,"docs":{},"r":{"df":11,"docs":{"16":{"tf":1.0},"278":{"tf":1.0},"287":{"tf":1.0},"293":{"tf":1.0},"301":{"tf":1.4142135623730951},"302":{"tf":1.7320508075688772},"303":{"tf":1.0},"313":{"tf":1.0},"5":{"tf":1.0},"85":{"tf":1.0},"98":{"tf":1.0}}}}}},"n":{"d":{"df":1,"docs":{"293":{"tf":1.0}},"r":{"df":1,"docs":{"76":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"16":{"tf":1.0},"287":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"19":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"357":{"tf":1.0}}}}}}}},"i":{"df":3,"docs":{"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"241":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"248":{"tf":1.0}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"363":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"422":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":2,"docs":{"449":{"tf":1.0},"82":{"tf":1.0}}}}},"df":11,"docs":{"148":{"tf":1.0},"189":{"tf":1.4142135623730951},"234":{"tf":1.4142135623730951},"240":{"tf":1.4142135623730951},"249":{"tf":1.4142135623730951},"351":{"tf":1.0},"354":{"tf":1.0},"375":{"tf":1.0},"415":{"tf":1.4142135623730951},"420":{"tf":1.0},"95":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"232":{"tf":1.0}}}}},"df":1,"docs":{"317":{"tf":1.0}},"é":{"df":1,"docs":{"357":{"tf":1.4142135623730951}}}}}}},"v":{"df":4,"docs":{"167":{"tf":1.0},"189":{"tf":1.0},"21":{"tf":1.0},"211":{"tf":1.0}},"é":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"189":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":4,"docs":{"153":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0}}}}},"o":{"b":{"a":{"b":{"df":0,"docs":{},"l":{"df":7,"docs":{"104":{"tf":1.0},"166":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"è":{"df":0,"docs":{},"m":{"df":5,"docs":{"183":{"tf":1.4142135623730951},"184":{"tf":1.4142135623730951},"3":{"tf":1.0},"357":{"tf":1.0},"88":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":1,"docs":{"180":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":6,"docs":{"134":{"tf":1.0},"148":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0},"184":{"tf":1.0},"96":{"tf":1.0}},"u":{"df":4,"docs":{"287":{"tf":1.0},"370":{"tf":1.0},"413":{"tf":1.0},"420":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"24":{"tf":1.4142135623730951},"301":{"tf":1.4142135623730951},"348":{"tf":1.0},"394":{"tf":1.0},"89":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"é":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"95":{"tf":1.0}}}}},"df":0,"docs":{}}},"d":{"df":2,"docs":{"147":{"tf":1.7320508075688772},"167":{"tf":1.4142135623730951}},"u":{"c":{"df":0,"docs":{},"t":{"df":51,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"2":{"tf":1.0},"252":{"tf":1.0},"276":{"tf":1.0},"443":{"tf":1.4142135623730951},"444":{"tf":1.4142135623730951},"71":{"tf":1.4142135623730951},"73":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0},"89":{"tf":1.4142135623730951},"94":{"tf":1.7320508075688772},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"9":{"0":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"176":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":9,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"161":{"tf":1.0},"174":{"tf":1.4142135623730951},"2":{"tf":1.0},"20":{"tf":1.4142135623730951},"293":{"tf":1.0},"375":{"tf":1.4142135623730951},"380":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"208":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":7,"docs":{"346":{"tf":1.0},"347":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.4142135623730951},"353":{"tf":1.0},"356":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"6":{"tf":1.0}}}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"_":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"179":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"294":{"tf":1.4142135623730951}}}}}},"df":11,"docs":{"158":{"tf":1.4142135623730951},"16":{"tf":1.0},"166":{"tf":1.0},"181":{"tf":1.0},"276":{"tf":1.0},"289":{"tf":1.4142135623730951},"294":{"tf":2.449489742783178},"299":{"tf":1.0},"388":{"tf":1.0},"447":{"tf":2.0},"8":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"86":{"tf":1.0}}}},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"163":{"tf":1.0},"166":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"214":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":1,"docs":{"357":{"tf":1.0}}},"r":{"df":4,"docs":{"357":{"tf":1.0},"382":{"tf":1.0},"393":{"tf":1.0},"397":{"tf":1.0}},"i":{"df":0,"docs":{},"é":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"175":{"tf":1.0},"21":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"16":{"tf":1.0},"202":{"tf":1.7320508075688772},"330":{"tf":1.0},"331":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"413":{"tf":1.0},"419":{"tf":1.0}}}}},"df":3,"docs":{"133":{"tf":1.4142135623730951},"202":{"tf":1.7320508075688772},"288":{"tf":1.0}}},"è":{"df":0,"docs":{},"g":{"df":1,"docs":{"189":{"tf":1.0}}}},"é":{"df":0,"docs":{},"g":{"df":1,"docs":{"393":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"187":{"tf":1.0}}}},"é":{"df":1,"docs":{"208":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"243":{"tf":1.0},"250":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":3,"docs":{"145":{"tf":1.0},"147":{"tf":1.0},"153":{"tf":1.0}}}}}}}}},"x":{"df":0,"docs":{},"i":{"df":9,"docs":{"121":{"tf":1.0},"124":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"2":{"tf":1.0},"443":{"tf":1.0},"445":{"tf":2.23606797749979},"72":{"tf":1.0},"89":{"tf":1.0}}},"y":{"/":{"c":{"a":{"d":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"445":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":1,"docs":{"445":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"k":{"df":1,"docs":{"445":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"_":{"a":{"d":{"d":{"_":{"df":0,"docs":{},"x":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"202":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"121":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"202":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"121":{"tf":1.0},"202":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"202":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"202":{"tf":3.4641016151377544}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"121":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"é":{"a":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"15":{"tf":1.0},"81":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"3":{"tf":1.0}}},"é":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"231":{"tf":1.0},"245":{"tf":1.4142135623730951}}},"df":0,"docs":{},"t":{"df":4,"docs":{"20":{"tf":1.0},"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"394":{"tf":1.0}}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"21":{"tf":1.0},"318":{"tf":1.0},"377":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"146":{"tf":1.0}},"r":{"df":3,"docs":{"103":{"tf":1.4142135623730951},"111":{"tf":1.4142135623730951},"287":{"tf":1.0}}},"z":{"df":1,"docs":{"291":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":2,"docs":{"2":{"tf":1.7320508075688772},"71":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"330":{"tf":1.4142135623730951},"333":{"tf":1.7320508075688772},"86":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":10,"docs":{"249":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"300":{"tf":1.0},"323":{"tf":1.0},"330":{"tf":1.0},"332":{"tf":1.0},"333":{"tf":1.4142135623730951},"82":{"tf":1.0},"84":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"u":{"df":1,"docs":{"374":{"tf":1.0}}}}},"ê":{"df":0,"docs":{},"t":{"df":3,"docs":{"128":{"tf":1.4142135623730951},"160":{"tf":1.0},"2":{"tf":1.0}},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"72":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"447":{"tf":1.0}}}}}},"s":{"df":3,"docs":{"109":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"o":{">":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"22":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":2,"docs":{"21":{"tf":1.0},"86":{"tf":1.0}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"l":{"df":5,"docs":{"185":{"tf":1.4142135623730951},"286":{"tf":1.0},"288":{"tf":1.4142135623730951},"291":{"tf":1.7320508075688772},"323":{"tf":1.0}}}}},"t":{"df":1,"docs":{"298":{"tf":1.0}}},"u":{"b":{"df":3,"docs":{"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"c":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"19":{"tf":1.0}}}}}}},"df":7,"docs":{"134":{"tf":2.0},"19":{"tf":1.0},"2":{"tf":1.0},"21":{"tf":1.0},"276":{"tf":1.0},"331":{"tf":1.4142135623730951},"427":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":5,"docs":{"166":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"424":{"tf":1.0}}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":20,"docs":{"1":{"tf":1.0},"101":{"tf":1.0},"109":{"tf":1.0},"133":{"tf":1.0},"14":{"tf":1.0},"151":{"tf":1.0},"16":{"tf":1.4142135623730951},"189":{"tf":1.4142135623730951},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"243":{"tf":1.0},"276":{"tf":1.0},"294":{"tf":1.0},"374":{"tf":1.0},"83":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":16,"docs":{"127":{"tf":1.0},"133":{"tf":1.0},"164":{"tf":1.0},"17":{"tf":1.0},"176":{"tf":1.0},"252":{"tf":1.0},"254":{"tf":1.0},"288":{"tf":1.0},"292":{"tf":1.0},"294":{"tf":1.0},"327":{"tf":1.0},"347":{"tf":1.0},"351":{"tf":1.0},"364":{"tf":1.0},"442":{"tf":1.0},"451":{"tf":1.0}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"84":{"tf":1.0}}}}}}}},"l":{"df":0,"docs":{},"l":{"df":15,"docs":{"10":{"tf":1.0},"132":{"tf":1.0},"167":{"tf":1.0},"2":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.0},"301":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"69":{"tf":1.7320508075688772},"7":{"tf":1.0},"70":{"tf":1.0},"8":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"396":{"tf":1.0}}}},"s":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"2":{"tf":1.0},"287":{"tf":1.4142135623730951}}}}}},"[":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"174":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":25,"docs":{"123":{"tf":1.0},"133":{"tf":1.4142135623730951},"148":{"tf":1.0},"16":{"tf":1.0},"168":{"tf":1.4142135623730951},"169":{"tf":1.7320508075688772},"173":{"tf":1.4142135623730951},"175":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.7320508075688772},"184":{"tf":1.0},"186":{"tf":1.4142135623730951},"285":{"tf":1.0},"294":{"tf":1.0},"299":{"tf":1.0},"300":{"tf":1.0},"317":{"tf":1.0},"319":{"tf":1.7320508075688772},"321":{"tf":1.7320508075688772},"355":{"tf":1.0},"380":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0},"425":{"tf":2.449489742783178},"96":{"tf":1.0}}}},"t":{"df":2,"docs":{"169":{"tf":1.0},"180":{"tf":1.0}}}},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}}},"3":{"df":1,"docs":{"115":{"tf":1.0}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":7,"docs":{"161":{"tf":1.0},"174":{"tf":1.0},"370":{"tf":1.0},"379":{"tf":1.0},"381":{"tf":1.0},"447":{"tf":1.0},"449":{"tf":1.0}}}}}}},"é":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":78,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"15":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"284":{"tf":1.0},"286":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"442":{"tf":1.0},"451":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"q":{"a":{"df":22,"docs":{"277":{"tf":1.0},"279":{"tf":1.4142135623730951},"280":{"tf":1.4142135623730951},"365":{"tf":1.7320508075688772},"366":{"tf":1.0},"388":{"tf":1.7320508075688772},"389":{"tf":1.0},"390":{"tf":1.0},"391":{"tf":1.0},"392":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"395":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0},"399":{"tf":1.0},"400":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.0},"421":{"tf":1.4142135623730951}}},"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}},"u":{"a":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"444":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"444":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"388":{"tf":1.0}},"é":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"168":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"n":{"d":{"df":11,"docs":{"10":{"tf":1.0},"128":{"tf":1.4142135623730951},"147":{"tf":1.4142135623730951},"173":{"tf":1.0},"281":{"tf":1.0},"287":{"tf":1.0},"3":{"tf":2.23606797749979},"355":{"tf":1.0},"396":{"tf":1.0},"76":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"r":{"df":3,"docs":{"2":{"tf":1.0},"3":{"tf":1.4142135623730951},"346":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":37,"docs":{"1":{"tf":1.4142135623730951},"109":{"tf":1.0},"113":{"tf":1.0},"133":{"tf":2.0},"147":{"tf":1.0},"153":{"tf":1.0},"16":{"tf":1.7320508075688772},"17":{"tf":1.0},"171":{"tf":1.0},"18":{"tf":1.0},"188":{"tf":1.0},"20":{"tf":1.0},"214":{"tf":1.0},"244":{"tf":1.0},"287":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"289":{"tf":1.0},"291":{"tf":1.7320508075688772},"292":{"tf":1.0},"293":{"tf":1.0},"300":{"tf":1.4142135623730951},"319":{"tf":1.0},"331":{"tf":1.0},"356":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"393":{"tf":1.0},"4":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"5":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951}},"l":{"(":{"df":1,"docs":{"104":{"tf":1.0}}},"df":5,"docs":{"250":{"tf":1.0},"279":{"tf":1.0},"442":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"’":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"402":{"tf":1.0}}}},"u":{"df":1,"docs":{"166":{"tf":1.0}}}},"i":{"df":30,"docs":{"1":{"tf":1.0},"133":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"16":{"tf":1.0},"161":{"tf":1.4142135623730951},"165":{"tf":1.0},"168":{"tf":1.4142135623730951},"169":{"tf":1.4142135623730951},"178":{"tf":1.0},"18":{"tf":1.0},"2":{"tf":2.23606797749979},"214":{"tf":1.0},"22":{"tf":1.4142135623730951},"244":{"tf":1.0},"249":{"tf":1.4142135623730951},"276":{"tf":1.4142135623730951},"287":{"tf":1.0},"3":{"tf":1.0},"317":{"tf":1.0},"327":{"tf":1.0},"347":{"tf":1.0},"361":{"tf":1.0},"364":{"tf":1.0},"416":{"tf":1.0},"420":{"tf":1.4142135623730951},"442":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.0}},"p":{"df":10,"docs":{"1":{"tf":1.0},"16":{"tf":1.0},"179":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.0},"416":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"85":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"161":{"tf":1.0},"18":{"tf":1.0},"286":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"288":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"276":{"tf":1.0}},"n":{"df":1,"docs":{"446":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"’":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"253":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"290":{"tf":1.0}}}}},"df":0,"docs":{},"x":{"df":1,"docs":{"86":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"1":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"23":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"242":{"tf":1.0},"244":{"tf":1.0},"354":{"tf":1.0}}}}}}},"r":{"2":{"3":{"df":1,"docs":{"383":{"tf":1.0}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"a":{"c":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"174":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"158":{"tf":1.7320508075688772},"166":{"tf":1.0},"174":{"tf":1.0},"296":{"tf":1.4142135623730951},"379":{"tf":1.4142135623730951}},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{">":{"/":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"152":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"193":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"290":{"tf":1.0}}}}}}},"n":{"d":{"df":3,"docs":{"102":{"tf":1.7320508075688772},"290":{"tf":1.4142135623730951},"83":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"127":{"tf":1.4142135623730951},"293":{"tf":1.0},"319":{"tf":1.0},"321":{"tf":1.0},"357":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"313":{"tf":1.0},"324":{"tf":1.0},"380":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"184":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"=":{"1":{"0":{"df":0,"docs":{},"r":{"/":{"df":1,"docs":{"201":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"/":{"df":1,"docs":{"201":{"tf":1.0}}},"df":0,"docs":{}}},"3":{"0":{"df":0,"docs":{},"r":{"/":{"df":1,"docs":{"201":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"df":1,"docs":{"236":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}},"df":10,"docs":{"200":{"tf":1.4142135623730951},"201":{"tf":1.0},"215":{"tf":1.7320508075688772},"216":{"tf":1.0},"326":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"443":{"tf":1.0},"445":{"tf":1.0},"74":{"tf":1.0}}}}},"b":{"a":{"c":{"df":5,"docs":{"281":{"tf":1.0},"3":{"tf":1.0},"416":{"tf":1.0},"430":{"tf":1.7320508075688772},"431":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"292":{"tf":1.4142135623730951},"82":{"tf":1.0},"84":{"tf":1.4142135623730951}},"e":{"a":{"d":{"_":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":1,"docs":{"427":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"372":{"tf":1.0},"427":{"tf":1.0}}}},"i":{"df":2,"docs":{"85":{"tf":1.0},"87":{"tf":1.0}}},"m":{"df":3,"docs":{"21":{"tf":1.0},"373":{"tf":1.4142135623730951},"428":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"m":{"d":{"df":6,"docs":{"123":{"tf":1.0},"161":{"tf":1.0},"21":{"tf":1.0},"294":{"tf":2.0},"373":{"tf":1.4142135623730951},"428":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"428":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"292":{"tf":1.0},"403":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":11,"docs":{"180":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.4142135623730951},"289":{"tf":1.0},"356":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"380":{"tf":1.0},"406":{"tf":1.7320508075688772},"407":{"tf":1.0},"425":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"t":{"df":4,"docs":{"279":{"tf":1.4142135623730951},"72":{"tf":1.0},"74":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"213":{"tf":1.0}}}}}}},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"244":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"288":{"tf":1.0},"88":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"124":{"tf":1.0},"181":{"tf":1.0},"390":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"d":{"df":4,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"204":{"tf":1.0},"208":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"174":{"tf":1.0},"178":{"tf":1.0},"286":{"tf":1.0},"291":{"tf":1.0}},"é":{"df":4,"docs":{"171":{"tf":1.0},"211":{"tf":1.0},"316":{"tf":1.0},"357":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":1,"docs":{"18":{"tf":1.0}}}},"n":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"î":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"é":{"df":1,"docs":{"327":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"6":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"i":{"df":4,"docs":{"443":{"tf":1.0},"444":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":9,"docs":{"108":{"tf":1.0},"117":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"396":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":4,"docs":{"133":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.0},"330":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"351":{"tf":1.0}}},"df":0,"docs":{}}},"é":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"242":{"tf":1.0},"244":{"tf":1.0},"245":{"tf":1.4142135623730951},"253":{"tf":1.0},"347":{"tf":1.4142135623730951}}}},"df":7,"docs":{"172":{"tf":1.0},"180":{"tf":1.0},"186":{"tf":1.4142135623730951},"237":{"tf":1.0},"252":{"tf":1.4142135623730951},"254":{"tf":1.0},"88":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":1,"docs":{"131":{"tf":1.4142135623730951}}}}}}}},"df":2,"docs":{"316":{"tf":1.0},"402":{"tf":1.0}},"f":{"=":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"428":{"tf":1.0}}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"165":{"tf":1.0}}}}},"df":4,"docs":{"180":{"tf":1.0},"424":{"tf":1.4142135623730951},"425":{"tf":2.0},"428":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"241":{"tf":1.0},"373":{"tf":1.0}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"d":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"238":{"tf":1.0}},"s":{"=":{"7":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"df":2,"docs":{"375":{"tf":1.4142135623730951},"394":{"tf":1.0}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}}}}}}},"s":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"424":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"23":{"tf":1.0}},"s":{"df":3,"docs":{"133":{"tf":1.0},"23":{"tf":1.0},"88":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":3,"docs":{"193":{"tf":1.4142135623730951},"205":{"tf":2.23606797749979},"214":{"tf":1.0}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":7,"docs":{"325":{"tf":1.0},"327":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.4142135623730951},"417":{"tf":1.0},"429":{"tf":1.0},"86":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"(":{"d":{"b":{"df":1,"docs":{"423":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"359":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"j":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"330":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"146":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"165":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":3,"docs":{"183":{"tf":1.0},"184":{"tf":1.0},"19":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"292":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"152":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"82":{"tf":1.0},"84":{"tf":1.0}}}}}}}}},"y":{"df":3,"docs":{"189":{"tf":1.0},"213":{"tf":1.0},"444":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":4,"docs":{"113":{"tf":1.0},"172":{"tf":1.0},"174":{"tf":1.4142135623730951},"296":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":2,"docs":{"21":{"tf":1.0},"6":{"tf":1.7320508075688772}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"277":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951}}}}}},"o":{"a":{"d":{"df":6,"docs":{"105":{"tf":1.4142135623730951},"116":{"tf":1.0},"130":{"tf":1.0},"133":{"tf":1.0},"199":{"tf":1.0},"203":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}},"u":{"df":3,"docs":{"234":{"tf":1.0},"244":{"tf":1.0},"254":{"tf":1.0}}},"â":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"326":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":1,"docs":{"330":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"m":{"df":1,"docs":{"330":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"d":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"238":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"324":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"t":{"df":12,"docs":{"146":{"tf":1.0},"147":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.4142135623730951},"165":{"tf":1.0},"166":{"tf":1.0},"171":{"tf":1.0},"183":{"tf":1.0},"186":{"tf":1.0},"289":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"210":{"tf":1.0}}},"df":0,"docs":{}}},"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":2,"docs":{"202":{"tf":1.7320508075688772},"214":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"l":{"a":{"c":{"df":2,"docs":{"109":{"tf":1.0},"419":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"83":{"tf":1.4142135623730951},"88":{"tf":1.0},"95":{"tf":1.0}}}},"é":{"df":2,"docs":{"362":{"tf":1.0},"83":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":2,"docs":{"21":{"tf":1.0},"299":{"tf":1.0}},"r":{"df":1,"docs":{"287":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"86":{"tf":1.0}}}}}}}}}},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"375":{"tf":1.0},"428":{"tf":1.0}}},"z":{"df":1,"docs":{"86":{"tf":1.0}}}},"r":{"df":1,"docs":{"89":{"tf":1.0}}},"u":{"df":2,"docs":{"333":{"tf":1.0},"418":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"118":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"118":{"tf":1.4142135623730951},"124":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"290":{"tf":1.0}}}}}}}}},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"353":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"424":{"tf":1.7320508075688772},"425":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"449":{"tf":1.0}}}}},"/":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"318":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"21":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"=":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":3,"docs":{"424":{"tf":1.0},"425":{"tf":1.0},"428":{"tf":1.0}}}}},"_":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"427":{"tf":1.4142135623730951},"428":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}}}}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"356":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"b":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{")":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"=":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":1,"docs":{"428":{"tf":1.0}}}}}}}}},"df":20,"docs":{"123":{"tf":1.0},"133":{"tf":1.0},"166":{"tf":1.0},"287":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"317":{"tf":1.4142135623730951},"349":{"tf":1.0},"356":{"tf":1.4142135623730951},"359":{"tf":1.0},"372":{"tf":1.0},"376":{"tf":1.0},"379":{"tf":1.7320508075688772},"380":{"tf":1.0},"382":{"tf":1.7320508075688772},"413":{"tf":1.4142135623730951},"419":{"tf":1.7320508075688772},"424":{"tf":1.4142135623730951},"425":{"tf":1.4142135623730951},"428":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"428":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"n":{"a":{"df":0,"docs":{},"v":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"373":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"449":{"tf":1.0}}}},"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"o":{"df":0,"docs":{},"}":{"/":{"df":0,"docs":{},"{":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}},"}":{"/":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"[":{"d":{"df":0,"docs":{},"é":{"df":0,"docs":{},"p":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"t":{"df":1,"docs":{"287":{"tf":1.0}}}}}}},"df":0,"docs":{}},"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"360":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":11,"docs":{"16":{"tf":1.0},"294":{"tf":1.4142135623730951},"346":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"372":{"tf":1.0},"376":{"tf":1.4142135623730951},"423":{"tf":1.4142135623730951},"425":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"y":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"325":{"tf":1.0},"331":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"423":{"tf":1.0},"428":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"427":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"423":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"348":{"tf":1.4142135623730951},"372":{"tf":1.0},"383":{"tf":1.0},"423":{"tf":1.0}},"e":{":":{":":{"c":{"df":0,"docs":{},"r":{"df":1,"docs":{"349":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"423":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\\"":{".":{".":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"396":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"372":{"tf":1.0},"383":{"tf":1.0},"402":{"tf":1.0}}}}},"v":{"c":{"df":1,"docs":{"423":{"tf":3.605551275463989}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"347":{"tf":1.0}}}},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"95":{"tf":1.0}},"i":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"420":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"df":0,"docs":{}},"é":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"277":{"tf":1.0},"72":{"tf":1.0}}}}}}}}},"q":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"198":{"tf":2.0}}}}}},"df":0,"docs":{}},"/":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}},"df":5,"docs":{"189":{"tf":1.4142135623730951},"199":{"tf":1.0},"200":{"tf":1.4142135623730951},"204":{"tf":1.0},"208":{"tf":1.0}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":14,"docs":{"10":{"tf":1.0},"198":{"tf":1.0},"2":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.0},"301":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"69":{"tf":1.7320508075688772},"7":{"tf":1.0},"70":{"tf":1.0},"8":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"421":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"i":{"df":16,"docs":{"149":{"tf":1.4142135623730951},"15":{"tf":1.7320508075688772},"151":{"tf":1.0},"171":{"tf":1.4142135623730951},"173":{"tf":1.0},"200":{"tf":1.4142135623730951},"232":{"tf":1.0},"250":{"tf":1.4142135623730951},"286":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"313":{"tf":1.0},"323":{"tf":1.4142135623730951},"356":{"tf":1.0},"395":{"tf":1.4142135623730951},"81":{"tf":1.7320508075688772},"99":{"tf":1.4142135623730951}},"r":{"df":1,"docs":{"166":{"tf":1.0}},"e":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"ê":{"df":0,"docs":{},"t":{"df":14,"docs":{"196":{"tf":1.0},"240":{"tf":1.0},"281":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.4142135623730951},"354":{"tf":1.0},"422":{"tf":1.7320508075688772},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"316":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"316":{"tf":1.0},"449":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"375":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":1,"docs":{"375":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":2,"docs":{"356":{"tf":1.0},"428":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"373":{"tf":1.0}}},"p":{"df":0,"docs":{},"o":{"_":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"375":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":4,"docs":{"346":{"tf":1.0},"349":{"tf":1.0},"423":{"tf":1.0},"427":{"tf":2.0}},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"427":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"376":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"414":{"tf":1.0}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"359":{"tf":1.0},"399":{"tf":1.0},"423":{"tf":1.0},"427":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"2":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":1,"docs":{"371":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"316":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":3,"docs":{"326":{"tf":1.0},"393":{"tf":1.0},"396":{"tf":1.0}}},"df":0,"docs":{}}}},"v":{"c":{"df":1,"docs":{"423":{"tf":2.0}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":16,"docs":{"107":{"tf":1.0},"113":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"127":{"tf":1.0},"133":{"tf":1.0},"172":{"tf":1.0},"204":{"tf":1.0},"213":{"tf":1.0},"232":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"250":{"tf":1.4142135623730951},"252":{"tf":1.0},"84":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"137":{"tf":1.7320508075688772},"138":{"tf":1.0},"448":{"tf":1.7320508075688772},"74":{"tf":1.0}}}}},"df":17,"docs":{"108":{"tf":1.0},"155":{"tf":1.0},"166":{"tf":1.0},"181":{"tf":1.0},"183":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.4142135623730951},"290":{"tf":1.0},"3":{"tf":1.0},"316":{"tf":1.4142135623730951},"375":{"tf":1.4142135623730951},"404":{"tf":1.7320508075688772},"405":{"tf":1.0},"449":{"tf":1.0},"55":{"tf":1.7320508075688772},"56":{"tf":1.0},"9":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"212":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"134":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"351":{"tf":1.0},"353":{"tf":1.0}},"n":{"df":6,"docs":{"18":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"288":{"tf":1.0},"290":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"294":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"208":{"tf":1.0},"84":{"tf":1.4142135623730951}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":2,"docs":{"161":{"tf":1.4142135623730951},"347":{"tf":1.0}}}}},"y":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"397":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"351":{"tf":1.0},"353":{"tf":2.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"294":{"tf":1.4142135623730951}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":6,"docs":{"187":{"tf":1.0},"2":{"tf":1.0},"443":{"tf":1.0},"445":{"tf":2.6457513110645907},"72":{"tf":1.0},"89":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"277":{"tf":1.0},"279":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"373":{"tf":1.0}}}}},"df":0,"docs":{}}},"ç":{"df":0,"docs":{},"u":{"df":1,"docs":{"277":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":1,"docs":{"104":{"tf":1.0}},"n":{"df":4,"docs":{"174":{"tf":1.0},"317":{"tf":1.0},"355":{"tf":1.0},"83":{"tf":1.0}}}},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"98":{"tf":1.4142135623730951}}}}}},"m":{"df":3,"docs":{"116":{"tf":1.0},"163":{"tf":1.0},"205":{"tf":1.0}}},"o":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"83":{"tf":1.0},"86":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":2,"docs":{"424":{"tf":1.0},"425":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":6,"docs":{"291":{"tf":1.0},"359":{"tf":1.4142135623730951},"372":{"tf":1.4142135623730951},"416":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"o":{"df":0,"docs":{},"t":{"df":2,"docs":{"294":{"tf":1.0},"84":{"tf":2.8284271247461903}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"444":{"tf":1.0}}}}}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"167":{"tf":1.0},"375":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"163":{"tf":1.0}}},"df":0,"docs":{}},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"347":{"tf":1.0}}}},"df":9,"docs":{"279":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"335":{"tf":1.7320508075688772},"336":{"tf":1.0},"369":{"tf":1.0},"375":{"tf":2.23606797749979},"414":{"tf":1.0},"421":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"316":{"tf":1.0}}},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"364":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0}}}}},"é":{"df":1,"docs":{"95":{"tf":1.0}}}},"v":{"df":0,"docs":{},"r":{"df":1,"docs":{"347":{"tf":1.0}}}}},"w":{"df":1,"docs":{"291":{"tf":1.0}}}},"r":{"]":{"df":0,"docs":{},"e":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"d":{".":{"*":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"[":{"_":{"df":1,"docs":{"193":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"s":{"a":{"df":2,"docs":{"19":{"tf":1.0},"383":{"tf":1.0}}},"df":1,"docs":{"427":{"tf":3.1622776601683795}},"y":{"df":0,"docs":{},"n":{"c":{"df":13,"docs":{"100":{"tf":1.4142135623730951},"113":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"150":{"tf":1.0},"163":{"tf":1.0},"165":{"tf":1.4142135623730951},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"183":{"tf":1.0},"296":{"tf":1.0},"448":{"tf":1.0}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"447":{"tf":1.0}}}},"n":{"[":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"(":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{".":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"df":18,"docs":{"118":{"tf":1.0},"164":{"tf":1.0},"172":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":2.0},"252":{"tf":1.0},"287":{"tf":1.7320508075688772},"291":{"tf":1.0},"293":{"tf":1.7320508075688772},"299":{"tf":1.0},"313":{"tf":2.0},"316":{"tf":1.0},"320":{"tf":1.0},"324":{"tf":2.23606797749979},"327":{"tf":1.4142135623730951},"334":{"tf":1.0},"403":{"tf":1.0},"85":{"tf":1.4142135623730951}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"153":{"tf":1.0},"155":{"tf":1.0}}}}}}}},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"444":{"tf":1.0}}}}}},"@":{"<":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"160":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":31,"docs":{"145":{"tf":1.7320508075688772},"146":{"tf":1.4142135623730951},"147":{"tf":2.23606797749979},"148":{"tf":2.0},"149":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.7320508075688772},"152":{"tf":1.0},"153":{"tf":2.0},"154":{"tf":2.449489742783178},"155":{"tf":1.4142135623730951},"156":{"tf":1.7320508075688772},"157":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.0},"160":{"tf":1.7320508075688772},"161":{"tf":1.7320508075688772},"162":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.4142135623730951},"165":{"tf":1.4142135623730951},"166":{"tf":2.6457513110645907},"167":{"tf":2.449489742783178},"172":{"tf":1.0},"187":{"tf":1.0},"210":{"tf":1.4142135623730951},"296":{"tf":1.0},"420":{"tf":1.4142135623730951},"443":{"tf":1.0},"444":{"tf":1.0},"74":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"153":{"tf":1.4142135623730951},"287":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{")":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":7,"docs":{"124":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"193":{"tf":1.0},"374":{"tf":1.0},"96":{"tf":1.0}}}},"t":{".":{"df":0,"docs":{},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"174":{"tf":1.0}}}}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"=":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"255":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":2,"docs":{"102":{"tf":1.0},"83":{"tf":1.0}}}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"c":{"df":3,"docs":{"286":{"tf":1.0},"288":{"tf":1.7320508075688772},"300":{"tf":1.0}}},"df":22,"docs":{"1":{"tf":1.0},"148":{"tf":1.0},"161":{"tf":1.0},"174":{"tf":1.4142135623730951},"2":{"tf":1.0},"234":{"tf":1.0},"286":{"tf":1.4142135623730951},"287":{"tf":1.4142135623730951},"288":{"tf":1.0},"296":{"tf":1.0},"300":{"tf":1.0},"312":{"tf":1.4142135623730951},"314":{"tf":1.4142135623730951},"316":{"tf":1.4142135623730951},"320":{"tf":1.0},"372":{"tf":1.0},"392":{"tf":1.4142135623730951},"416":{"tf":1.0},"418":{"tf":1.0},"447":{"tf":1.0},"449":{"tf":1.0},"82":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"100":{"tf":1.0},"300":{"tf":1.4142135623730951}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{":":{":":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"237":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"414":{"tf":1.4142135623730951}}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"414":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":20,"docs":{"276":{"tf":1.0},"279":{"tf":1.4142135623730951},"280":{"tf":1.0},"289":{"tf":1.0},"358":{"tf":2.0},"359":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.7320508075688772},"364":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"408":{"tf":1.7320508075688772},"409":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.4142135623730951},"417":{"tf":1.0},"429":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":4,"docs":{"361":{"tf":1.0},"364":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"416":{"tf":1.0}},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"413":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"w":{"[":{"\\"":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":4,"docs":{"292":{"tf":1.0},"370":{"tf":2.0},"413":{"tf":1.0},"84":{"tf":1.4142135623730951}}},"è":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":92,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"280":{"tf":1.4142135623730951},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"361":{"tf":1.4142135623730951},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"388":{"tf":2.23606797749979},"389":{"tf":1.0},"390":{"tf":1.0},"391":{"tf":1.7320508075688772},"392":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"395":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.7320508075688772},"398":{"tf":1.7320508075688772},"399":{"tf":1.0},"40":{"tf":1.0},"400":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"416":{"tf":1.0},"42":{"tf":1.0},"421":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}},"é":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"364":{"tf":1.0},"376":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"249":{"tf":1.0}}}}}},"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"134":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"299":{"tf":1.4142135623730951},"87":{"tf":1.4142135623730951}}}}}},"df":2,"docs":{"186":{"tf":1.4142135623730951},"208":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"101":{"tf":1.0},"151":{"tf":1.0}}}}},"i":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"18":{"tf":1.0},"214":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":144,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"137":{"tf":1.0},"138":{"tf":1.0},"139":{"tf":1.0},"140":{"tf":1.0},"141":{"tf":1.0},"142":{"tf":1.0},"143":{"tf":1.0},"144":{"tf":1.0},"215":{"tf":1.0},"216":{"tf":1.0},"217":{"tf":1.0},"218":{"tf":1.0},"219":{"tf":1.0},"220":{"tf":1.0},"221":{"tf":1.0},"222":{"tf":1.0},"223":{"tf":1.0},"224":{"tf":1.0},"225":{"tf":1.0},"226":{"tf":1.0},"227":{"tf":1.0},"228":{"tf":1.0},"229":{"tf":1.0},"230":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"260":{"tf":1.0},"261":{"tf":1.0},"262":{"tf":1.0},"263":{"tf":1.0},"264":{"tf":1.0},"265":{"tf":1.0},"266":{"tf":1.0},"267":{"tf":1.0},"268":{"tf":1.0},"269":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"271":{"tf":1.0},"272":{"tf":1.0},"273":{"tf":1.0},"274":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"282":{"tf":1.0},"283":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.0},"304":{"tf":1.0},"305":{"tf":1.0},"306":{"tf":1.0},"307":{"tf":1.0},"308":{"tf":1.0},"309":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"336":{"tf":1.0},"337":{"tf":1.0},"338":{"tf":1.0},"339":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"341":{"tf":1.0},"342":{"tf":1.0},"343":{"tf":1.0},"344":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"365":{"tf":1.0},"366":{"tf":1.0},"367":{"tf":1.0},"368":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":1.0},"387":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"431":{"tf":1.0},"432":{"tf":1.0},"433":{"tf":1.0},"434":{"tf":1.0},"435":{"tf":1.0},"436":{"tf":1.0},"437":{"tf":1.0},"438":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"440":{"tf":1.0},"441":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":7,"docs":{"193":{"tf":1.0},"205":{"tf":1.0},"207":{"tf":1.0},"23":{"tf":1.0},"357":{"tf":1.0},"377":{"tf":1.4142135623730951},"84":{"tf":1.0}},"l":{"df":4,"docs":{"109":{"tf":1.0},"314":{"tf":1.0},"316":{"tf":1.0},"95":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"i":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}}}},"f":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":102,"docs":{"227":{"tf":1.7320508075688772},"228":{"tf":1.0},"229":{"tf":1.0},"230":{"tf":1.0},"231":{"tf":1.0},"232":{"tf":1.0},"233":{"tf":1.0},"234":{"tf":1.0},"235":{"tf":1.7320508075688772},"236":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.0},"239":{"tf":1.0},"240":{"tf":1.0},"241":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.0},"244":{"tf":1.0},"245":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":1.0},"250":{"tf":1.0},"251":{"tf":1.0},"252":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.0},"256":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0},"260":{"tf":1.0},"261":{"tf":1.0},"262":{"tf":1.0},"263":{"tf":1.0},"264":{"tf":1.0},"265":{"tf":1.0},"280":{"tf":1.7320508075688772},"3":{"tf":1.0},"310":{"tf":1.0},"345":{"tf":1.0},"367":{"tf":1.7320508075688772},"368":{"tf":1.0},"369":{"tf":1.4142135623730951},"370":{"tf":1.0},"371":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"379":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"382":{"tf":1.0},"383":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.0},"386":{"tf":1.0},"387":{"tf":1.0},"388":{"tf":1.0},"389":{"tf":1.0},"390":{"tf":1.0},"391":{"tf":1.0},"392":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"395":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0},"399":{"tf":1.0},"400":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"403":{"tf":1.0},"404":{"tf":1.0},"405":{"tf":1.0},"406":{"tf":1.0},"407":{"tf":1.0},"408":{"tf":1.0},"409":{"tf":1.0},"421":{"tf":1.0},"51":{"tf":1.7320508075688772},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"75":{"tf":1.7320508075688772},"9":{"tf":1.7320508075688772},"95":{"tf":1.0}}},"df":0,"docs":{}},"z":{"df":1,"docs":{"442":{"tf":1.0}}}}}}},"g":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":16,"docs":{"240":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.4142135623730951},"244":{"tf":1.4142135623730951},"246":{"tf":1.4142135623730951},"247":{"tf":1.4142135623730951},"248":{"tf":1.4142135623730951},"249":{"tf":1.7320508075688772},"250":{"tf":1.0},"252":{"tf":1.4142135623730951},"253":{"tf":1.4142135623730951},"254":{"tf":1.4142135623730951},"255":{"tf":2.0},"257":{"tf":1.4142135623730951},"258":{"tf":1.4142135623730951},"259":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"215":{"tf":1.7320508075688772},"216":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"167":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"184":{"tf":1.0}}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}},"é":{"df":1,"docs":{"417":{"tf":1.0}}}}}}}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":11,"docs":{"146":{"tf":1.0},"153":{"tf":1.0},"160":{"tf":1.0},"171":{"tf":1.0},"293":{"tf":1.0},"314":{"tf":1.4142135623730951},"322":{"tf":1.0},"360":{"tf":1.0},"376":{"tf":1.4142135623730951},"429":{"tf":1.4142135623730951},"83":{"tf":1.7320508075688772}}}}}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"133":{"tf":1.0},"15":{"tf":1.0},"81":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"279":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}},"u":{"df":1,"docs":{"22":{"tf":1.0}}}},"df":0,"docs":{}}},"è":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"8":{"tf":1.0}}}}}}},"é":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":1,"docs":{"192":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":54,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"151":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"2":{"tf":1.0},"210":{"tf":1.0},"211":{"tf":1.0},"352":{"tf":1.0},"412":{"tf":1.0},"71":{"tf":1.0},"82":{"tf":1.4142135623730951},"87":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.7320508075688772},"98":{"tf":1.0},"99":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"é":{"df":1,"docs":{"383":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"181":{"tf":1.0}},"t":{"df":4,"docs":{"356":{"tf":1.0},"380":{"tf":1.0},"422":{"tf":1.0},"427":{"tf":1.4142135623730951}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"3":{"tf":1.0}}}}}},"u":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"181":{"tf":1.4142135623730951},"244":{"tf":1.0},"285":{"tf":1.0}}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":3,"docs":{"161":{"tf":1.0},"299":{"tf":1.0},"425":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":5,"docs":{"179":{"tf":1.0},"199":{"tf":1.0},"328":{"tf":1.0},"363":{"tf":1.0},"399":{"tf":1.0}}}}}}}},"v":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"319":{"tf":1.0},"397":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"167":{"tf":1.0}}}}}}},"è":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}}}}},"é":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}}}},"df":0,"docs":{}}},"ô":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":18,"docs":{"1":{"tf":1.0},"134":{"tf":1.0},"146":{"tf":1.4142135623730951},"150":{"tf":1.0},"171":{"tf":1.0},"235":{"tf":1.0},"345":{"tf":1.0},"346":{"tf":1.7320508075688772},"372":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"381":{"tf":1.0},"390":{"tf":1.0},"53":{"tf":1.7320508075688772},"54":{"tf":1.0},"86":{"tf":1.0},"9":{"tf":1.0}}}}}},"s":{"\'":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"206":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"/":{"^":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"107":{"tf":1.0},"122":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"d":{"b":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"/":{"$":{"d":{"b":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"g":{"df":1,"docs":{"83":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"_":{"3":{"2":{"/":{"$":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"i":{"/":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"116":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"130":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"[":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"a":{"df":4,"docs":{"382":{"tf":1.0},"394":{"tf":1.0},"82":{"tf":1.4142135623730951},"86":{"tf":1.0}},"i":{"df":1,"docs":{"5":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"19":{"tf":1.0}}}},"n":{"df":35,"docs":{"104":{"tf":1.0},"113":{"tf":1.0},"129":{"tf":1.4142135623730951},"14":{"tf":1.0},"146":{"tf":1.0},"150":{"tf":1.0},"16":{"tf":1.4142135623730951},"163":{"tf":1.0},"166":{"tf":1.0},"168":{"tf":1.0},"177":{"tf":1.0},"199":{"tf":1.0},"237":{"tf":1.0},"277":{"tf":1.0},"279":{"tf":1.0},"288":{"tf":1.0},"316":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.4142135623730951},"347":{"tf":1.0},"350":{"tf":1.4142135623730951},"352":{"tf":1.0},"358":{"tf":1.0},"364":{"tf":1.0},"389":{"tf":1.0},"396":{"tf":1.0},"417":{"tf":1.0},"444":{"tf":1.0},"446":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"88":{"tf":1.0},"89":{"tf":1.0}},"t":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"388":{"tf":1.0}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"183":{"tf":1.0},"354":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"f":{"df":2,"docs":{"381":{"tf":1.4142135623730951},"97":{"tf":1.0}}},"r":{"a":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"285":{"tf":1.0},"80":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":11,"docs":{"137":{"tf":1.7320508075688772},"138":{"tf":1.0},"274":{"tf":1.7320508075688772},"275":{"tf":1.0},"446":{"tf":1.0},"448":{"tf":2.0},"71":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"84":{"tf":1.0},"89":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"84":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"19":{"tf":1.7320508075688772},"253":{"tf":1.0}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"2":{"tf":1.0}}}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{".":{"c":{"d":{"df":0,"docs":{},"x":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"380":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"c":{"df":0,"docs":{},"y":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"x":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"df":0,"docs":{},"s":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"180":{"tf":1.0},"185":{"tf":1.0}}}}}}}}},"df":27,"docs":{"1":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":2.6457513110645907},"170":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"176":{"tf":1.4142135623730951},"177":{"tf":1.4142135623730951},"178":{"tf":1.4142135623730951},"179":{"tf":1.0},"180":{"tf":3.872983346207417},"181":{"tf":1.4142135623730951},"182":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":2.0},"185":{"tf":1.4142135623730951},"186":{"tf":1.4142135623730951},"380":{"tf":1.0},"381":{"tf":1.4142135623730951},"447":{"tf":1.0},"49":{"tf":1.7320508075688772},"50":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"169":{"tf":1.0},"180":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"c":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":72,"docs":{"11":{"tf":1.4142135623730951},"135":{"tf":1.4142135623730951},"137":{"tf":1.4142135623730951},"139":{"tf":1.4142135623730951},"141":{"tf":1.4142135623730951},"143":{"tf":1.4142135623730951},"215":{"tf":1.4142135623730951},"217":{"tf":1.4142135623730951},"219":{"tf":1.4142135623730951},"221":{"tf":1.4142135623730951},"223":{"tf":1.4142135623730951},"225":{"tf":1.4142135623730951},"227":{"tf":1.4142135623730951},"229":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"260":{"tf":1.4142135623730951},"262":{"tf":1.4142135623730951},"264":{"tf":1.4142135623730951},"266":{"tf":1.4142135623730951},"268":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"270":{"tf":1.4142135623730951},"272":{"tf":1.4142135623730951},"274":{"tf":1.4142135623730951},"282":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"302":{"tf":1.4142135623730951},"304":{"tf":1.4142135623730951},"306":{"tf":1.4142135623730951},"308":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"335":{"tf":1.4142135623730951},"337":{"tf":1.4142135623730951},"339":{"tf":1.4142135623730951},"341":{"tf":1.4142135623730951},"343":{"tf":1.4142135623730951},"35":{"tf":1.4142135623730951},"365":{"tf":1.4142135623730951},"367":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"384":{"tf":1.4142135623730951},"386":{"tf":1.4142135623730951},"39":{"tf":1.4142135623730951},"404":{"tf":1.4142135623730951},"406":{"tf":1.4142135623730951},"408":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"410":{"tf":1.4142135623730951},"43":{"tf":1.4142135623730951},"430":{"tf":1.4142135623730951},"432":{"tf":1.4142135623730951},"434":{"tf":1.4142135623730951},"436":{"tf":1.4142135623730951},"438":{"tf":1.4142135623730951},"440":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"47":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"55":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"90":{"tf":1.4142135623730951},"92":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"n":{"df":4,"docs":{"169":{"tf":1.0},"177":{"tf":1.0},"180":{"tf":1.0},"380":{"tf":1.0}},"n":{"df":3,"docs":{"168":{"tf":1.0},"176":{"tf":1.0},"18":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"189":{"tf":1.4142135623730951},"208":{"tf":1.0}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"202":{"tf":1.7320508075688772}}}}},"é":{"df":0,"docs":{},"m":{"a":{"df":14,"docs":{"241":{"tf":1.4142135623730951},"260":{"tf":1.7320508075688772},"261":{"tf":1.0},"280":{"tf":1.4142135623730951},"3":{"tf":1.0},"345":{"tf":1.0},"348":{"tf":1.4142135623730951},"380":{"tf":1.0},"386":{"tf":1.7320508075688772},"387":{"tf":1.0},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"75":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"383":{"tf":1.0}}}}},"p":{"df":2,"docs":{"109":{"tf":1.0},"116":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"189":{"tf":1.0},"208":{"tf":1.0}}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"420":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":18,"docs":{"145":{"tf":1.0},"146":{"tf":1.7320508075688772},"147":{"tf":1.4142135623730951},"150":{"tf":1.4142135623730951},"151":{"tf":1.0},"152":{"tf":1.4142135623730951},"153":{"tf":1.0},"156":{"tf":1.4142135623730951},"161":{"tf":1.0},"165":{"tf":1.0},"171":{"tf":1.0},"2":{"tf":1.0},"317":{"tf":1.0},"321":{"tf":1.0},"325":{"tf":1.0},"4":{"tf":1.0},"448":{"tf":1.4142135623730951},"450":{"tf":1.4142135623730951}},"s":{"/":{"df":0,"docs":{},"e":{"2":{"df":2,"docs":{"313":{"tf":1.0},"327":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"é":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"147":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":11,"docs":{"16":{"tf":1.4142135623730951},"177":{"tf":1.0},"23":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"349":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"355":{"tf":1.0},"82":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"353":{"tf":1.4142135623730951},"372":{"tf":1.4142135623730951}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"199":{"tf":2.0}}}},"df":0,"docs":{}}},"c":{"df":1,"docs":{"394":{"tf":2.6457513110645907}},"o":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"16":{"tf":1.0},"18":{"tf":1.0},"349":{"tf":1.0},"85":{"tf":1.4142135623730951},"88":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"$":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":1,"docs":{"83":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"=":{"4":{"a":{"7":{"df":0,"docs":{},"f":{"2":{"c":{"9":{"df":0,"docs":{},"e":{"1":{"b":{"8":{"d":{"3":{"df":0,"docs":{},"f":{"6":{"a":{"0":{"df":0,"docs":{},"e":{"5":{"c":{"2":{"b":{"9":{"d":{"7":{"df":0,"docs":{},"f":{"4":{"a":{"1":{"df":0,"docs":{},"e":{"8":{"c":{"3":{"b":{"6":{"d":{"9":{"df":0,"docs":{},"f":{"2":{"a":{"5":{"df":0,"docs":{},"e":{"8":{"c":{"1":{"b":{"4":{"d":{"7":{"df":0,"docs":{},"f":{"0":{"a":{"3":{"df":0,"docs":{},"e":{"6":{"c":{"9":{"b":{"2":{"d":{"5":{"df":0,"docs":{},"f":{"8":{"a":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"_":{"3":{"2":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":2,"docs":{"83":{"tf":1.0},"88":{"tf":1.4142135623730951}}}}}},"df":8,"docs":{"167":{"tf":1.0},"243":{"tf":1.0},"250":{"tf":1.0},"318":{"tf":1.0},"382":{"tf":1.7320508075688772},"390":{"tf":1.0},"393":{"tf":2.23606797749979},"403":{"tf":1.0}}}},"è":{"df":0,"docs":{},"t":{"df":2,"docs":{"290":{"tf":1.0},"83":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":7,"docs":{"150":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"189":{"tf":1.0},"20":{"tf":1.0},"284":{"tf":1.0},"451":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"177":{"tf":1.0},"181":{"tf":1.0},"186":{"tf":1.0},"418":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"[":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"169":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"d":{"df":6,"docs":{"107":{"tf":1.0},"116":{"tf":1.0},"122":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.4142135623730951},"83":{"tf":1.4142135623730951}}},"df":17,"docs":{"104":{"tf":1.0},"16":{"tf":1.7320508075688772},"161":{"tf":1.4142135623730951},"166":{"tf":1.0},"167":{"tf":1.0},"174":{"tf":1.0},"177":{"tf":1.0},"253":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"358":{"tf":1.0},"393":{"tf":1.0},"397":{"tf":1.0},"412":{"tf":1.0},"451":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.0}},"e":{"d":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"314":{"tf":1.0}}}},"df":4,"docs":{"249":{"tf":1.0},"314":{"tf":1.4142135623730951},"325":{"tf":1.0},"443":{"tf":1.0}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":12,"docs":{"185":{"tf":1.4142135623730951},"255":{"tf":1.0},"291":{"tf":1.0},"348":{"tf":2.6457513110645907},"349":{"tf":2.449489742783178},"351":{"tf":2.0},"355":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.7320508075688772},"428":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"f":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"(":{"d":{"b":{"df":1,"docs":{"242":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"1":{"tf":1.0},"2":{"tf":1.0},"71":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"df":79,"docs":{"12":{"tf":1.4142135623730951},"136":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"144":{"tf":1.4142135623730951},"2":{"tf":1.0},"21":{"tf":1.0},"216":{"tf":1.4142135623730951},"218":{"tf":1.4142135623730951},"220":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"228":{"tf":1.4142135623730951},"230":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"261":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"265":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"279":{"tf":1.0},"28":{"tf":1.4142135623730951},"283":{"tf":1.4142135623730951},"3":{"tf":1.0},"30":{"tf":1.4142135623730951},"303":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"342":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"380":{"tf":1.0},"385":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"431":{"tf":1.4142135623730951},"433":{"tf":1.4142135623730951},"435":{"tf":1.4142135623730951},"437":{"tf":1.4142135623730951},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"441":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"74":{"tf":1.0},"78":{"tf":1.4142135623730951},"8":{"tf":1.0},"91":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951}}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"208":{"tf":1.0}}}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"169":{"tf":1.0}}}}}}},"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}},"n":{"d":{"df":3,"docs":{"133":{"tf":1.0},"160":{"tf":1.0},"316":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"167":{"tf":1.0},"390":{"tf":1.0},"393":{"tf":1.0}}}},"df":0,"docs":{}}}},"q":{"df":1,"docs":{"206":{"tf":1.0}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":11,"docs":{"16":{"tf":1.0},"180":{"tf":1.0},"348":{"tf":1.0},"414":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"r":{"a":{"df":2,"docs":{"214":{"tf":1.0},"258":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"16":{"tf":1.0}}}}},"t":{"df":1,"docs":{"346":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"373":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"325":{"tf":1.0},"327":{"tf":1.0}}}}},"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"1":{"2":{"7":{".":{"0":{".":{"0":{".":{"1":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"=":{"4":{"0":{"0":{"0":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"238":{"tf":1.0},"96":{"tf":1.0}}}}}}},"df":22,"docs":{"101":{"tf":1.4142135623730951},"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.4142135623730951},"109":{"tf":1.0},"116":{"tf":1.0},"121":{"tf":1.4142135623730951},"122":{"tf":1.0},"148":{"tf":1.0},"202":{"tf":1.0},"291":{"tf":1.0},"293":{"tf":1.4142135623730951},"299":{"tf":1.0},"300":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"414":{"tf":1.0},"85":{"tf":1.4142135623730951},"95":{"tf":1.0},"97":{"tf":1.0}}},"u":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"189":{"tf":1.0},"213":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":26,"docs":{"1":{"tf":1.0},"102":{"tf":1.4142135623730951},"146":{"tf":1.0},"147":{"tf":1.4142135623730951},"16":{"tf":1.0},"160":{"tf":1.4142135623730951},"169":{"tf":1.0},"171":{"tf":1.7320508075688772},"172":{"tf":1.4142135623730951},"183":{"tf":1.0},"186":{"tf":1.0},"211":{"tf":1.0},"287":{"tf":1.7320508075688772},"296":{"tf":1.4142135623730951},"316":{"tf":1.7320508075688772},"347":{"tf":1.0},"355":{"tf":1.4142135623730951},"356":{"tf":1.0},"374":{"tf":1.0},"393":{"tf":1.0},"414":{"tf":1.4142135623730951},"418":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.7320508075688772},"95":{"tf":1.4142135623730951}}}}},"i":{"c":{"df":37,"docs":{"104":{"tf":1.0},"124":{"tf":1.0},"205":{"tf":1.0},"249":{"tf":1.0},"252":{"tf":1.0},"254":{"tf":1.0},"257":{"tf":1.0},"262":{"tf":1.7320508075688772},"263":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.0},"287":{"tf":1.0},"337":{"tf":1.7320508075688772},"338":{"tf":1.0},"359":{"tf":1.7320508075688772},"361":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":2.0},"372":{"tf":1.4142135623730951},"375":{"tf":1.0},"384":{"tf":1.7320508075688772},"385":{"tf":1.0},"396":{"tf":1.0},"399":{"tf":1.4142135623730951},"402":{"tf":1.0},"413":{"tf":1.0},"446":{"tf":1.0},"73":{"tf":1.0},"75":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772},"87":{"tf":1.0},"88":{"tf":1.4142135623730951},"89":{"tf":1.0},"96":{"tf":1.7320508075688772}},"e":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"84":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":3,"docs":{"292":{"tf":1.0},"400":{"tf":1.0},"418":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"238":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"236":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":18,"docs":{"103":{"tf":1.0},"105":{"tf":1.7320508075688772},"106":{"tf":1.4142135623730951},"287":{"tf":1.0},"327":{"tf":1.0},"363":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.4142135623730951},"399":{"tf":1.0},"416":{"tf":1.0},"423":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0},"443":{"tf":1.0},"444":{"tf":1.0},"82":{"tf":1.4142135623730951},"98":{"tf":1.0}},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"413":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"t":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"359":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":15,"docs":{"123":{"tf":1.0},"163":{"tf":1.4142135623730951},"17":{"tf":1.0},"173":{"tf":1.0},"186":{"tf":1.0},"241":{"tf":1.0},"250":{"tf":1.0},"294":{"tf":1.0},"300":{"tf":1.0},"313":{"tf":1.0},"319":{"tf":2.0},"375":{"tf":1.0},"417":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"426":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"314":{"tf":1.0},"325":{"tf":1.0}}}},"df":12,"docs":{"147":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"160":{"tf":1.0},"162":{"tf":1.4142135623730951},"166":{"tf":1.0},"183":{"tf":1.0},"186":{"tf":1.0},"313":{"tf":1.0},"314":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":15,"docs":{"102":{"tf":1.4142135623730951},"112":{"tf":1.4142135623730951},"147":{"tf":1.0},"165":{"tf":1.0},"167":{"tf":1.0},"19":{"tf":1.0},"234":{"tf":1.0},"244":{"tf":1.0},"249":{"tf":1.4142135623730951},"250":{"tf":1.4142135623730951},"287":{"tf":1.0},"327":{"tf":1.0},"346":{"tf":1.0},"352":{"tf":1.0},"420":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":8,"docs":{"10":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":1.0},"281":{"tf":1.0},"352":{"tf":1.0},"357":{"tf":1.0},"5":{"tf":1.0},"76":{"tf":1.0}}}}}}}}}},"f":{"df":1,"docs":{"116":{"tf":1.0}}},"h":{"a":{"2":{"5":{"6":{"(":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":1,"docs":{"426":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},":":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":2,"docs":{"293":{"tf":1.0},"85":{"tf":1.0}},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"19":{"tf":1.0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"df":3,"docs":{"177":{"tf":1.0},"180":{"tf":1.0},"181":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":5,"docs":{"180":{"tf":1.0},"184":{"tf":1.4142135623730951},"373":{"tf":1.0},"380":{"tf":1.0},"393":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"424":{"tf":1.0},"425":{"tf":1.0},"427":{"tf":1.4142135623730951}}}}},"df":4,"docs":{"146":{"tf":1.4142135623730951},"147":{"tf":1.0},"177":{"tf":1.0},"288":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":8,"docs":{"20":{"tf":1.0},"288":{"tf":1.0},"317":{"tf":1.0},"356":{"tf":1.4142135623730951},"357":{"tf":1.0},"374":{"tf":1.0},"449":{"tf":1.0},"84":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"101":{"tf":1.0},"133":{"tf":1.0}}}},"w":{"df":1,"docs":{"100":{"tf":1.0}}}}},"i":{"d":{"df":0,"docs":{},"e":{"b":{"a":{"df":0,"docs":{},"r":{"_":{"df":1,"docs":{"375":{"tf":1.0}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}}}}}}}}},"df":3,"docs":{"333":{"tf":1.0},"375":{"tf":1.0},"417":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"444":{"tf":1.0}}}},"df":0,"docs":{}},"df":1,"docs":{"375":{"tf":1.0}}}},"df":125,"docs":{"100":{"tf":1.0},"105":{"tf":1.0},"119":{"tf":1.0},"12":{"tf":1.0},"134":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"159":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"171":{"tf":1.4142135623730951},"172":{"tf":1.0},"18":{"tf":1.4142135623730951},"181":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":2.0},"19":{"tf":1.7320508075688772},"195":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951},"197":{"tf":1.4142135623730951},"198":{"tf":1.4142135623730951},"199":{"tf":1.0},"20":{"tf":1.7320508075688772},"204":{"tf":1.0},"208":{"tf":1.0},"21":{"tf":1.0},"211":{"tf":1.4142135623730951},"214":{"tf":1.4142135623730951},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"23":{"tf":1.4142135623730951},"230":{"tf":1.0},"244":{"tf":1.7320508075688772},"248":{"tf":1.0},"249":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"277":{"tf":1.4142135623730951},"28":{"tf":1.0},"283":{"tf":1.0},"284":{"tf":1.0},"288":{"tf":1.4142135623730951},"290":{"tf":1.0},"291":{"tf":1.4142135623730951},"292":{"tf":1.0},"293":{"tf":1.0},"30":{"tf":1.0},"300":{"tf":1.4142135623730951},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"347":{"tf":1.0},"357":{"tf":1.4142135623730951},"36":{"tf":1.0},"363":{"tf":1.4142135623730951},"366":{"tf":1.0},"368":{"tf":1.0},"376":{"tf":1.4142135623730951},"38":{"tf":1.0},"380":{"tf":1.7320508075688772},"385":{"tf":1.0},"387":{"tf":1.0},"389":{"tf":1.0},"399":{"tf":1.0},"40":{"tf":1.0},"403":{"tf":1.4142135623730951},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"413":{"tf":1.7320508075688772},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"442":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.7320508075688772},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.4142135623730951},"78":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.7320508075688772},"89":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"184":{"tf":1.0}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"424":{"tf":1.0}}}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"165":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"147":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"199":{"tf":1.0},"352":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"420":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"317":{"tf":1.0}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":4,"docs":{"103":{"tf":1.0},"169":{"tf":1.0},"287":{"tf":1.0},"357":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"206":{"tf":1.0},"214":{"tf":1.0},"244":{"tf":1.0},"98":{"tf":1.0}}}}}},"k":{"df":1,"docs":{"206":{"tf":1.0}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}},"p":{"_":{"d":{"b":{"=":{"1":{"df":1,"docs":{"132":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"=":{"1":{"df":1,"docs":{"132":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":2,"docs":{"146":{"tf":1.0},"165":{"tf":1.0}}}}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"83":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"397":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"g":{"df":5,"docs":{"331":{"tf":1.0},"348":{"tf":1.0},"383":{"tf":1.0},"423":{"tf":1.4142135623730951},"428":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"202":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":6,"docs":{"146":{"tf":1.0},"160":{"tf":1.0},"164":{"tf":1.0},"166":{"tf":1.0},"171":{"tf":1.0},"318":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"451":{"tf":1.0}}},"df":0,"docs":{}}},"_":{"df":1,"docs":{"236":{"tf":1.0}},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"=":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"@":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":1,"docs":{"297":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"297":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"=":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"297":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":1,"docs":{"238":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"=":{"5":{"8":{"7":{"df":1,"docs":{"297":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"238":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"=":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"297":{"tf":1.0}}}}},"df":1,"docs":{"238":{"tf":1.0}}}}}}},"df":17,"docs":{"141":{"tf":1.7320508075688772},"142":{"tf":1.0},"189":{"tf":1.0},"213":{"tf":1.4142135623730951},"250":{"tf":1.0},"297":{"tf":1.0},"3":{"tf":1.0},"377":{"tf":1.4142135623730951},"414":{"tf":2.0},"416":{"tf":1.0},"443":{"tf":1.4142135623730951},"444":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0},"89":{"tf":1.0}}}}},"n":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"101":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"161":{"tf":1.0},"300":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"72":{"tf":1.0}},"t":{"df":2,"docs":{"244":{"tf":1.0},"288":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"(":{"\\"":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"v":{"df":1,"docs":{"259":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"t":{"df":31,"docs":{"153":{"tf":1.0},"156":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0},"168":{"tf":1.0},"175":{"tf":1.0},"234":{"tf":1.4142135623730951},"237":{"tf":1.0},"240":{"tf":1.4142135623730951},"249":{"tf":1.0},"278":{"tf":1.0},"288":{"tf":1.0},"290":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.4142135623730951},"312":{"tf":1.0},"332":{"tf":1.0},"346":{"tf":1.0},"349":{"tf":1.0},"357":{"tf":1.0},"364":{"tf":1.0},"375":{"tf":1.7320508075688772},"376":{"tf":1.0},"377":{"tf":1.0},"382":{"tf":1.4142135623730951},"417":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"80":{"tf":1.0},"84":{"tf":1.0},"87":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"151":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"171":{"tf":1.0}}}}},"df":1,"docs":{"373":{"tf":1.0}},"i":{"df":19,"docs":{"160":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"278":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.4142135623730951},"290":{"tf":1.0},"291":{"tf":1.7320508075688772},"292":{"tf":1.4142135623730951},"293":{"tf":1.0},"294":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772},"86":{"tf":1.0}}}}},"u":{"df":3,"docs":{"161":{"tf":1.0},"244":{"tf":1.0},"373":{"tf":1.0}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"1":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"442":{"tf":1.0},"89":{"tf":1.0}}}}}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"375":{"tf":1.0}},"r":{"df":1,"docs":{"301":{"tf":1.0}}}}}},"i":{"df":1,"docs":{"277":{"tf":1.0}}}},"r":{"c":{"df":15,"docs":{"100":{"tf":1.4142135623730951},"146":{"tf":1.0},"148":{"tf":1.0},"152":{"tf":1.0},"163":{"tf":1.4142135623730951},"165":{"tf":1.0},"174":{"tf":1.0},"208":{"tf":1.0},"232":{"tf":1.0},"244":{"tf":1.0},"284":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.7320508075688772},"299":{"tf":1.0},"358":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"c":{"df":0,"docs":{},"e":{":":{"]":{"]":{"*":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"[":{"[":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"e":{":":{"]":{"]":{"+":{"[":{"0":{"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"169":{"tf":1.0},"184":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":3,"docs":{"313":{"tf":1.0},"314":{"tf":1.0},"318":{"tf":2.0}}},"df":0,"docs":{}},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"199":{"tf":1.0}},"|":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"é":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":2,"docs":{"243":{"tf":1.0},"88":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":7,"docs":{"153":{"tf":1.0},"208":{"tf":1.0},"209":{"tf":1.4142135623730951},"312":{"tf":1.0},"320":{"tf":1.0},"375":{"tf":1.0},"416":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"l":{"df":2,"docs":{"291":{"tf":1.4142135623730951},"82":{"tf":1.0}}},"u":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"43":{"tf":1.7320508075688772},"44":{"tf":1.0},"8":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}}}}},"r":{"c":{"/":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":2,"docs":{"174":{"tf":1.0},"428":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"s":{"df":9,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"212":{"tf":1.0},"88":{"tf":1.0}},"e":{"df":11,"docs":{"347":{"tf":1.4142135623730951},"348":{"tf":1.7320508075688772},"349":{"tf":1.0},"355":{"tf":2.23606797749979},"357":{"tf":1.0},"375":{"tf":1.0},"377":{"tf":1.4142135623730951},"380":{"tf":1.0},"418":{"tf":1.0},"445":{"tf":1.0},"9":{"tf":1.0}}},"f":{"df":1,"docs":{"288":{"tf":1.0}},"l":{"df":1,"docs":{"177":{"tf":1.0}}}},"h":{"+":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"420":{"tf":1.0}}},"df":0,"docs":{}}}}}},".":{"*":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"193":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":2,"docs":{"193":{"tf":2.0},"205":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"121":{"tf":1.0}}}}}},"/":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":3,"docs":{"151":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"c":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"df":1,"docs":{"166":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"108":{"tf":1.0},"113":{"tf":1.0}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"i":{"d":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":4,"docs":{"123":{"tf":1.0},"19":{"tf":1.0},"23":{"tf":1.0},"294":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},":":{"/":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"@":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"2":{"2":{"2":{"2":{"/":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"424":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"2":{"2":{"2":{"2":{"/":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"294":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{"2":{"2":{"2":{"2":{"/":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"294":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"287":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"287":{"tf":1.0}}}}}},":":{"2":{"2":{"2":{"2":{"df":1,"docs":{"169":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"102":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":1,"docs":{"84":{"tf":1.4142135623730951}},"s":{":":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"c":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"424":{"tf":1.0},"426":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"372":{"tf":1.0},"424":{"tf":1.4142135623730951},"426":{"tf":1.4142135623730951}},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"414":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"=":{"1":{"2":{"7":{".":{"0":{".":{"0":{".":{"1":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"236":{"tf":1.0},"238":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"=":{"2":{"2":{"2":{"2":{"df":2,"docs":{"102":{"tf":1.0},"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":4,"docs":{"236":{"tf":1.0},"238":{"tf":1.0},"84":{"tf":1.0},"96":{"tf":1.0}}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"238":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"d":{":":{"2":{"2":{"df":1,"docs":{"122":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{")":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{")":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":15,"docs":{"103":{"tf":1.4142135623730951},"104":{"tf":2.0},"105":{"tf":2.0},"107":{"tf":1.4142135623730951},"122":{"tf":1.7320508075688772},"124":{"tf":1.0},"127":{"tf":1.4142135623730951},"133":{"tf":1.0},"134":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"204":{"tf":1.4142135623730951},"208":{"tf":1.4142135623730951},"97":{"tf":1.0},"98":{"tf":1.0}}},"df":103,"docs":{"1":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":1.4142135623730951},"106":{"tf":1.0},"107":{"tf":1.4142135623730951},"108":{"tf":2.0},"109":{"tf":1.4142135623730951},"113":{"tf":1.4142135623730951},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"120":{"tf":1.4142135623730951},"121":{"tf":1.4142135623730951},"122":{"tf":1.4142135623730951},"123":{"tf":1.0},"124":{"tf":2.449489742783178},"126":{"tf":1.0},"127":{"tf":2.23606797749979},"129":{"tf":1.0},"13":{"tf":1.4142135623730951},"130":{"tf":1.0},"133":{"tf":1.7320508075688772},"134":{"tf":1.7320508075688772},"14":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"150":{"tf":1.7320508075688772},"151":{"tf":1.4142135623730951},"153":{"tf":2.0},"16":{"tf":2.0},"160":{"tf":1.7320508075688772},"163":{"tf":1.7320508075688772},"166":{"tf":2.0},"167":{"tf":1.4142135623730951},"169":{"tf":2.23606797749979},"171":{"tf":1.7320508075688772},"172":{"tf":1.0},"174":{"tf":1.0},"183":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"19":{"tf":2.8284271247461903},"193":{"tf":1.0},"20":{"tf":2.8284271247461903},"204":{"tf":1.0},"205":{"tf":1.0},"206":{"tf":1.4142135623730951},"207":{"tf":1.0},"208":{"tf":1.7320508075688772},"219":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"220":{"tf":1.0},"23":{"tf":2.449489742783178},"24":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":2.449489742783178},"289":{"tf":1.0},"293":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"296":{"tf":1.0},"299":{"tf":1.0},"3":{"tf":1.0},"300":{"tf":1.7320508075688772},"326":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"370":{"tf":2.0},"372":{"tf":1.0},"374":{"tf":2.0},"375":{"tf":1.0},"380":{"tf":1.0},"383":{"tf":1.0},"392":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":2.449489742783178},"414":{"tf":1.0},"416":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.4142135623730951},"424":{"tf":5.0},"425":{"tf":4.358898943540674},"426":{"tf":1.4142135623730951},"427":{"tf":1.0},"448":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.7320508075688772},"85":{"tf":1.7320508075688772},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.4142135623730951},"98":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"426":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":5,"docs":{"372":{"tf":1.0},"374":{"tf":1.0},"383":{"tf":1.0},"424":{"tf":1.0},"426":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"|":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"193":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"l":{"df":1,"docs":{"202":{"tf":1.0}}},"r":{"df":4,"docs":{"375":{"tf":2.449489742783178},"414":{"tf":1.0},"418":{"tf":1.4142135623730951},"96":{"tf":1.0}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"286":{"tf":1.0},"300":{"tf":1.4142135623730951},"6":{"tf":1.0}}}},"c":{"df":0,"docs":{},"k":{"df":10,"docs":{"161":{"tf":1.0},"209":{"tf":1.4142135623730951},"444":{"tf":2.23606797749979},"451":{"tf":1.0},"73":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951},"87":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"177":{"tf":1.0}}}},"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"442":{"tf":1.0}}}}},"r":{"d":{"df":5,"docs":{"276":{"tf":1.0},"326":{"tf":1.0},"330":{"tf":1.0},"372":{"tf":1.0},"417":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":6,"docs":{"183":{"tf":1.0},"278":{"tf":1.0},"291":{"tf":1.4142135623730951},"293":{"tf":1.0},"300":{"tf":1.0},"85":{"tf":2.0}},"e":{"d":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"4":{"5":{"df":1,"docs":{"277":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"t":{"df":3,"docs":{"204":{"tf":1.0},"207":{"tf":1.0},"348":{"tf":1.0}},"e":{"d":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"175":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":2,"docs":{"355":{"tf":1.0},"361":{"tf":1.0}}},"i":{"c":{"/":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"292":{"tf":1.0},"389":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"292":{"tf":1.7320508075688772},"389":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}}}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"=":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"447":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":4,"docs":{"292":{"tf":1.0},"375":{"tf":1.4142135623730951},"400":{"tf":1.0},"418":{"tf":1.0}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":8,"docs":{"232":{"tf":1.0},"233":{"tf":1.4142135623730951},"238":{"tf":1.4142135623730951},"246":{"tf":1.4142135623730951},"255":{"tf":1.0},"258":{"tf":1.4142135623730951},"375":{"tf":1.0},"380":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"347":{"tf":1.0}}}}}}}},"u":{"df":18,"docs":{"104":{"tf":1.0},"108":{"tf":1.0},"113":{"tf":1.0},"124":{"tf":1.4142135623730951},"127":{"tf":1.0},"181":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"185":{"tf":1.4142135623730951},"188":{"tf":1.0},"204":{"tf":1.7320508075688772},"206":{"tf":1.0},"207":{"tf":1.0},"318":{"tf":1.0},"380":{"tf":1.0},"396":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.0}},"s":{"=":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"180":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"348":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"u":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"<":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"180":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"t":{"df":3,"docs":{"104":{"tf":1.0},"164":{"tf":1.0},"17":{"tf":1.0}}}}}},"d":{"df":1,"docs":{"300":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"175":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"317":{"tf":1.4142135623730951}}}},"o":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"287":{"tf":1.4142135623730951},"293":{"tf":1.0},"413":{"tf":1.0}}}},"df":5,"docs":{"177":{"tf":1.0},"178":{"tf":1.0},"244":{"tf":1.0},"419":{"tf":1.0},"82":{"tf":1.0}},"é":{"df":3,"docs":{"234":{"tf":1.0},"237":{"tf":1.0},"240":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"287":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":6,"docs":{"274":{"tf":1.7320508075688772},"275":{"tf":1.0},"310":{"tf":1.0},"43":{"tf":1.7320508075688772},"44":{"tf":1.0},"76":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":17,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.0},"107":{"tf":1.4142135623730951},"108":{"tf":1.0},"115":{"tf":1.0},"120":{"tf":1.4142135623730951},"121":{"tf":2.0},"133":{"tf":1.7320508075688772},"134":{"tf":1.0},"187":{"tf":1.0},"317":{"tf":1.0},"349":{"tf":1.0},"375":{"tf":1.0},"424":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}},"é":{"df":2,"docs":{"169":{"tf":1.0},"175":{"tf":1.0}}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"119":{"tf":1.0},"167":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"257":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"234":{"tf":1.0},"236":{"tf":1.7320508075688772},"258":{"tf":1.0},"375":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":6,"docs":{"284":{"tf":1.0},"289":{"tf":1.0},"314":{"tf":1.4142135623730951},"372":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"356":{"tf":1.0},"369":{"tf":1.0},"421":{"tf":1.0}}}},"é":{"df":1,"docs":{"3":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}},"u":{"b":{"df":72,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"137":{"tf":1.0},"139":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"219":{"tf":1.0},"221":{"tf":1.0},"223":{"tf":1.0},"225":{"tf":1.0},"227":{"tf":1.0},"229":{"tf":1.0},"25":{"tf":1.0},"260":{"tf":1.0},"262":{"tf":1.0},"264":{"tf":1.0},"266":{"tf":1.0},"268":{"tf":1.0},"27":{"tf":1.0},"270":{"tf":1.0},"272":{"tf":1.0},"274":{"tf":1.0},"282":{"tf":1.0},"29":{"tf":1.0},"302":{"tf":1.0},"304":{"tf":1.0},"306":{"tf":1.0},"308":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"341":{"tf":1.0},"343":{"tf":1.0},"35":{"tf":1.0},"365":{"tf":1.0},"367":{"tf":1.0},"37":{"tf":1.0},"384":{"tf":1.0},"386":{"tf":1.0},"39":{"tf":1.0},"404":{"tf":1.0},"406":{"tf":1.0},"408":{"tf":1.0},"41":{"tf":1.0},"410":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"432":{"tf":1.0},"434":{"tf":1.0},"436":{"tf":1.0},"438":{"tf":1.0},"440":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.0},"90":{"tf":1.0},"92":{"tf":1.0}}},"df":0,"docs":{}}},"u":{"b":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":6,"docs":{"169":{"tf":2.0},"287":{"tf":1.7320508075688772},"356":{"tf":1.4142135623730951},"370":{"tf":1.0},"413":{"tf":2.449489742783178},"82":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"|":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"c":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{":":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":1,"docs":{"393":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"317":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":2,"docs":{"164":{"tf":1.0},"175":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"85":{"tf":1.0}}}}}}}}}},"è":{"df":3,"docs":{"18":{"tf":1.0},"20":{"tf":1.0},"424":{"tf":1.0}}}},"df":0,"docs":{},"h":{"df":1,"docs":{"19":{"tf":1.0}}}},"d":{"df":0,"docs":{},"o":{"df":44,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":2.0},"107":{"tf":1.4142135623730951},"108":{"tf":2.23606797749979},"109":{"tf":2.6457513110645907},"113":{"tf":1.4142135623730951},"115":{"tf":1.7320508075688772},"116":{"tf":2.6457513110645907},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"121":{"tf":2.23606797749979},"122":{"tf":1.7320508075688772},"124":{"tf":2.0},"126":{"tf":1.4142135623730951},"127":{"tf":1.7320508075688772},"129":{"tf":1.0},"130":{"tf":1.7320508075688772},"133":{"tf":1.0},"151":{"tf":1.4142135623730951},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"188":{"tf":1.7320508075688772},"189":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.4142135623730951},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"201":{"tf":1.0},"203":{"tf":1.4142135623730951},"204":{"tf":2.0},"205":{"tf":2.0},"206":{"tf":1.4142135623730951},"207":{"tf":2.0},"212":{"tf":1.0},"213":{"tf":1.4142135623730951},"288":{"tf":1.0},"300":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"166":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}},"df":1,"docs":{"442":{"tf":1.0}}},"t":{"df":2,"docs":{"147":{"tf":1.0},"211":{"tf":1.0}}}}}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"é":{"df":1,"docs":{"351":{"tf":1.0}}}}}}},"i":{"df":1,"docs":{"7":{"tf":1.0}},"t":{"df":3,"docs":{"156":{"tf":1.0},"3":{"tf":1.0},"362":{"tf":1.0}}},"v":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":6,"docs":{"293":{"tf":1.0},"301":{"tf":1.0},"414":{"tf":1.0},"6":{"tf":1.0},"84":{"tf":1.0},"95":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"278":{"tf":1.0},"73":{"tf":1.0},"85":{"tf":1.7320508075688772}}}},"i":{"df":4,"docs":{"175":{"tf":1.4142135623730951},"346":{"tf":1.0},"8":{"tf":1.0},"85":{"tf":1.0}}},"r":{"df":1,"docs":{"259":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"295":{"tf":1.4142135623730951},"390":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":3,"docs":{"59":{"tf":1.7320508075688772},"60":{"tf":1.0},"9":{"tf":1.0}}}}},"s":{"df":6,"docs":{"278":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"8":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":7,"docs":{"165":{"tf":1.0},"23":{"tf":1.0},"327":{"tf":1.0},"353":{"tf":1.4142135623730951},"360":{"tf":1.0},"376":{"tf":1.0},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":3,"docs":{"442":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0}}}}}}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"81":{"tf":1.0}}}}}}}}},"r":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":2,"docs":{"184":{"tf":1.0},"382":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":90,"docs":{"1":{"tf":1.0},"101":{"tf":1.0},"103":{"tf":1.4142135623730951},"104":{"tf":1.7320508075688772},"105":{"tf":1.0},"113":{"tf":1.0},"120":{"tf":1.4142135623730951},"122":{"tf":1.4142135623730951},"13":{"tf":1.0},"133":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"147":{"tf":1.4142135623730951},"15":{"tf":1.0},"150":{"tf":1.4142135623730951},"151":{"tf":1.4142135623730951},"153":{"tf":1.0},"156":{"tf":1.0},"16":{"tf":2.0},"161":{"tf":1.4142135623730951},"163":{"tf":1.0},"166":{"tf":1.4142135623730951},"167":{"tf":1.0},"17":{"tf":2.0},"172":{"tf":1.0},"173":{"tf":1.7320508075688772},"177":{"tf":1.4142135623730951},"178":{"tf":1.4142135623730951},"18":{"tf":2.0},"183":{"tf":1.0},"186":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.7320508075688772},"19":{"tf":1.7320508075688772},"191":{"tf":1.0},"192":{"tf":1.0},"194":{"tf":1.0},"198":{"tf":1.4142135623730951},"2":{"tf":1.0},"20":{"tf":2.0},"21":{"tf":1.7320508075688772},"210":{"tf":1.0},"211":{"tf":1.4142135623730951},"212":{"tf":1.0},"217":{"tf":1.7320508075688772},"218":{"tf":1.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"244":{"tf":1.0},"248":{"tf":1.0},"276":{"tf":1.0},"287":{"tf":1.0},"291":{"tf":1.0},"294":{"tf":1.7320508075688772},"296":{"tf":1.0},"327":{"tf":1.0},"331":{"tf":1.0},"346":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"355":{"tf":1.0},"356":{"tf":1.7320508075688772},"360":{"tf":1.0},"363":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"376":{"tf":1.4142135623730951},"381":{"tf":1.0},"393":{"tf":1.7320508075688772},"396":{"tf":1.0},"397":{"tf":1.4142135623730951},"4":{"tf":1.0},"412":{"tf":1.0},"419":{"tf":1.7320508075688772},"442":{"tf":1.0},"443":{"tf":1.0},"449":{"tf":1.4142135623730951},"451":{"tf":1.0},"6":{"tf":1.0},"65":{"tf":1.7320508075688772},"66":{"tf":1.0},"72":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.4142135623730951},"85":{"tf":1.0},"86":{"tf":1.4142135623730951},"88":{"tf":1.4142135623730951},"94":{"tf":1.4142135623730951},"95":{"tf":1.7320508075688772}},"f":{"a":{"c":{"df":1,"docs":{"208":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"16":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"167":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"v":{"c":{"df":2,"docs":{"348":{"tf":3.4641016151377544},"426":{"tf":4.0}}},"df":0,"docs":{}},"w":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"318":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"181":{"tf":1.0}}}}}}}},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"414":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"169":{"tf":1.0}}}}}}},"df":11,"docs":{"1":{"tf":1.0},"168":{"tf":1.0},"169":{"tf":1.0},"177":{"tf":2.0},"180":{"tf":1.7320508075688772},"184":{"tf":1.4142135623730951},"186":{"tf":1.0},"370":{"tf":1.4142135623730951},"380":{"tf":1.0},"381":{"tf":1.0},"413":{"tf":1.4142135623730951}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"m":{"df":7,"docs":{"133":{"tf":1.0},"166":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"150":{"tf":1.0}},"n":{"df":0,"docs":{},"i":{"df":3,"docs":{"160":{"tf":1.0},"161":{"tf":1.0},"165":{"tf":1.0}},"s":{"df":4,"docs":{"146":{"tf":1.0},"160":{"tf":1.0},"171":{"tf":1.0},"23":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"x":{"df":4,"docs":{"105":{"tf":1.0},"59":{"tf":1.7320508075688772},"60":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":21,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"107":{"tf":1.0},"113":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"118":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.4142135623730951},"126":{"tf":1.0},"127":{"tf":1.0},"130":{"tf":1.0},"133":{"tf":1.0},"172":{"tf":1.0},"188":{"tf":1.0},"203":{"tf":1.0},"204":{"tf":1.0},"213":{"tf":1.0},"252":{"tf":1.0},"300":{"tf":1.0}}}}},"d":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"446":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"446":{"tf":1.0}}}}}}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"4":{"5":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":11,"docs":{"113":{"tf":1.0},"124":{"tf":1.0},"127":{"tf":1.4142135623730951},"185":{"tf":1.0},"189":{"tf":2.0},"444":{"tf":1.0},"446":{"tf":2.449489742783178},"73":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.7320508075688772},"91":{"tf":1.0}}},"df":1,"docs":{"199":{"tf":1.0}}}},"è":{"df":0,"docs":{},"m":{"df":20,"docs":{"103":{"tf":1.4142135623730951},"107":{"tf":1.4142135623730951},"108":{"tf":1.0},"122":{"tf":1.4142135623730951},"124":{"tf":1.0},"134":{"tf":1.0},"168":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"232":{"tf":2.0},"244":{"tf":1.0},"288":{"tf":1.7320508075688772},"373":{"tf":1.0},"377":{"tf":1.0},"378":{"tf":1.0},"419":{"tf":1.4142135623730951},"423":{"tf":1.0},"429":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}}}}}}},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{".":{"*":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"<":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"131":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{".":{"*":{"df":0,"docs":{},"|":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"<":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"131":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"é":{"df":1,"docs":{"290":{"tf":1.0}}}},"t":{"df":19,"docs":{"10":{"tf":1.0},"102":{"tf":1.0},"167":{"tf":1.4142135623730951},"169":{"tf":1.0},"17":{"tf":2.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"22":{"tf":1.0},"357":{"tf":1.0},"383":{"tf":1.4142135623730951},"388":{"tf":1.0},"391":{"tf":1.4142135623730951},"393":{"tf":1.4142135623730951},"394":{"tf":1.0},"396":{"tf":1.0},"403":{"tf":1.0},"445":{"tf":1.0},"67":{"tf":1.7320508075688772},"68":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":1,"docs":{"17":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"416":{"tf":1.7320508075688772}}}},"df":1,"docs":{"420":{"tf":1.0}},"é":{"df":1,"docs":{"147":{"tf":1.0}}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":5,"docs":{"281":{"tf":1.0},"345":{"tf":1.0},"414":{"tf":1.0},"421":{"tf":1.0},"422":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"327":{"tf":1.0}}}}}}}}}},"v":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"181":{"tf":1.0}}}}}}}},"û":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}},"’":{"a":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"2":{"tf":1.4142135623730951},"276":{"tf":1.0},"71":{"tf":1.0}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"82":{"tf":1.0}}}},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"451":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"287":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":4,"docs":{"210":{"tf":1.0},"296":{"tf":1.0},"327":{"tf":1.0},"85":{"tf":1.0}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"146":{"tf":1.4142135623730951},"242":{"tf":1.0},"85":{"tf":1.0}}}}}},"t":{"[":{"df":0,"docs":{},"t":{"df":0,"docs":{},"â":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":1,"docs":{"352":{"tf":1.0}}}}},"df":0,"docs":{}}}},"a":{"b":{"df":0,"docs":{},"l":{"df":11,"docs":{"175":{"tf":1.0},"232":{"tf":1.0},"239":{"tf":1.4142135623730951},"240":{"tf":1.0},"241":{"tf":1.7320508075688772},"293":{"tf":1.0},"346":{"tf":1.0},"347":{"tf":1.0},"372":{"tf":1.0},"414":{"tf":1.0},"421":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"u":{"df":1,"docs":{"153":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"df":8,"docs":{"13":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"19":{"tf":1.7320508075688772},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0}},"g":{"df":2,"docs":{"373":{"tf":1.7320508075688772},"375":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"207":{"tf":1.4142135623730951}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"/":{"d":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"323":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"113":{"tf":1.0},"292":{"tf":1.4142135623730951},"389":{"tf":1.0}}}}},"df":1,"docs":{"292":{"tf":1.0}}},"df":0,"docs":{}}}}}},"n":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":2,"docs":{"253":{"tf":1.0},"4":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"df":24,"docs":{"146":{"tf":1.0},"165":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"288":{"tf":1.4142135623730951},"289":{"tf":1.4142135623730951},"290":{"tf":1.4142135623730951},"291":{"tf":1.4142135623730951},"292":{"tf":1.4142135623730951},"293":{"tf":1.4142135623730951},"294":{"tf":1.4142135623730951},"301":{"tf":1.4142135623730951},"349":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951},"86":{"tf":1.4142135623730951},"89":{"tf":1.4142135623730951}},"r":{"df":1,"docs":{"16":{"tf":1.0}}}}},"r":{"d":{"df":1,"docs":{"107":{"tf":1.4142135623730951}}},"df":2,"docs":{"171":{"tf":1.0},"180":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{"df":1,"docs":{"293":{"tf":1.0}}},"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"293":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"169":{"tf":1.0}}}},"t":{"df":2,"docs":{"348":{"tf":1.0},"6":{"tf":1.0}}},"y":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"277":{"tf":1.0}}}},"df":0,"docs":{}}},"b":{"df":5,"docs":{"169":{"tf":1.0},"287":{"tf":1.0},"356":{"tf":1.0},"413":{"tf":1.0},"82":{"tf":1.0}}},"c":{"df":0,"docs":{},"p":{"df":1,"docs":{"424":{"tf":1.0}}}},"df":18,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"116":{"tf":1.0},"121":{"tf":1.0},"124":{"tf":1.0},"130":{"tf":1.0},"133":{"tf":1.0},"16":{"tf":2.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"203":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"352":{"tf":1.0},"362":{"tf":1.0},"83":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":2,"docs":{"372":{"tf":1.0},"427":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"427":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"372":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"427":{"tf":1.4142135623730951}}}}}},"df":9,"docs":{"179":{"tf":1.0},"313":{"tf":1.0},"317":{"tf":1.0},"372":{"tf":1.0},"375":{"tf":1.0},"380":{"tf":1.0},"382":{"tf":1.7320508075688772},"424":{"tf":1.0},"425":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"372":{"tf":1.0}}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":3,"docs":{"372":{"tf":1.0},"383":{"tf":1.0},"402":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"t":{"df":2,"docs":{"314":{"tf":1.0},"325":{"tf":1.0}}}},"df":2,"docs":{"314":{"tf":1.0},"327":{"tf":1.0}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":7,"docs":{"15":{"tf":1.0},"280":{"tf":1.4142135623730951},"286":{"tf":1.0},"3":{"tf":1.0},"75":{"tf":1.4142135623730951},"81":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}}}},"df":9,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"300":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.4142135623730951}},"e":{"df":15,"docs":{"105":{"tf":1.0},"109":{"tf":1.0},"121":{"tf":1.0},"127":{"tf":1.0},"189":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"201":{"tf":1.0}}},"l":{"df":1,"docs":{"442":{"tf":1.0}}},"m":{"df":0,"docs":{},"p":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"312":{"tf":1.0}}}}},"df":5,"docs":{"15":{"tf":1.0},"207":{"tf":1.0},"286":{"tf":1.0},"377":{"tf":1.4142135623730951},"81":{"tf":1.0}},"l":{"a":{"df":0,"docs":{},"t":{"df":93,"docs":{"12":{"tf":1.0},"133":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"161":{"tf":1.0},"2":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"235":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"287":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"375":{"tf":1.7320508075688772},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"389":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.0},"403":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"418":{"tf":1.0},"42":{"tf":1.0},"428":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"442":{"tf":2.0},"443":{"tf":1.0},"444":{"tf":1.0},"445":{"tf":1.0},"446":{"tf":1.0},"447":{"tf":1.0},"448":{"tf":1.0},"449":{"tf":1.0},"450":{"tf":1.0},"451":{"tf":2.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}},"e":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"451":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"451":{"tf":1.0},"82":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"451":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"s":{",":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"df":0,"docs":{},"r":{"df":1,"docs":{"375":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"161":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"n":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"243":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"r":{"df":2,"docs":{"358":{"tf":1.0},"447":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":1,"docs":{"189":{"tf":1.0}}}},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"=":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":1,"docs":{"348":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":7,"docs":{"106":{"tf":1.0},"16":{"tf":1.0},"160":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"294":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"(":{"\'":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"318":{"tf":1.0}}}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"328":{"tf":1.0}}}}}},"df":0,"docs":{}},".":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"e":{"(":{"\'":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},":":{"df":0,"docs":{},"e":{"2":{"df":5,"docs":{"313":{"tf":1.0},"320":{"tf":1.0},"324":{"tf":1.0},"334":{"tf":1.0},"403":{"tf":1.0}},"e":{":":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"313":{"tf":1.0},"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"313":{"tf":1.0},"324":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"324":{"tf":1.0},"327":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"i":{"df":2,"docs":{"313":{"tf":1.0},"324":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"316":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"_":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"316":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":52,"docs":{"107":{"tf":1.0},"119":{"tf":1.4142135623730951},"123":{"tf":2.23606797749979},"124":{"tf":1.0},"146":{"tf":1.0},"160":{"tf":1.0},"163":{"tf":2.23606797749979},"164":{"tf":1.4142135623730951},"166":{"tf":1.0},"171":{"tf":1.0},"174":{"tf":2.0},"20":{"tf":1.0},"206":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"235":{"tf":1.0},"277":{"tf":1.4142135623730951},"278":{"tf":1.4142135623730951},"279":{"tf":1.4142135623730951},"296":{"tf":1.4142135623730951},"301":{"tf":1.4142135623730951},"310":{"tf":2.0},"311":{"tf":1.0},"312":{"tf":3.0},"313":{"tf":2.0},"314":{"tf":2.8284271247461903},"315":{"tf":1.7320508075688772},"316":{"tf":2.449489742783178},"317":{"tf":2.6457513110645907},"318":{"tf":2.23606797749979},"319":{"tf":2.0},"320":{"tf":3.4641016151377544},"321":{"tf":1.4142135623730951},"322":{"tf":2.0},"323":{"tf":1.0},"324":{"tf":1.7320508075688772},"325":{"tf":2.6457513110645907},"326":{"tf":2.0},"327":{"tf":1.7320508075688772},"328":{"tf":2.0},"329":{"tf":1.7320508075688772},"330":{"tf":1.4142135623730951},"331":{"tf":1.4142135623730951},"332":{"tf":1.7320508075688772},"333":{"tf":1.4142135623730951},"334":{"tf":2.449489742783178},"380":{"tf":1.0},"389":{"tf":1.4142135623730951},"395":{"tf":1.4142135623730951},"397":{"tf":2.8284271247461903},"403":{"tf":1.7320508075688772},"447":{"tf":1.4142135623730951},"84":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"166":{"tf":1.0},"316":{"tf":1.0},"397":{"tf":1.0},"419":{"tf":1.0}}},"z":{"df":2,"docs":{"300":{"tf":1.0},"451":{"tf":1.0}}}},"s":{"/":{"df":0,"docs":{},"e":{"2":{"df":1,"docs":{"325":{"tf":1.0}},"e":{"/":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"318":{"tf":1.0},"320":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"334":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"317":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":1,"docs":{"316":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"é":{"df":1,"docs":{"95":{"tf":1.0}}}}},"x":{"df":0,"docs":{},"t":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"373":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":3,"docs":{"241":{"tf":1.4142135623730951},"318":{"tf":1.0},"319":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"333":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"é":{"df":1,"docs":{"356":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":2,"docs":{"348":{"tf":1.4142135623730951},"349":{"tf":1.0}}}}}}},"è":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"333":{"tf":1.0}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"348":{"tf":1.0},"349":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":3,"docs":{"208":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":9,"docs":{"104":{"tf":1.0},"133":{"tf":1.0},"175":{"tf":1.0},"183":{"tf":1.4142135623730951},"318":{"tf":1.0},"354":{"tf":1.0},"380":{"tf":1.0},"397":{"tf":1.0},"84":{"tf":1.4142135623730951}}}}},"r":{"df":2,"docs":{"118":{"tf":1.0},"446":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"z":{"df":1,"docs":{"241":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"21":{"tf":1.0},"23":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"l":{"df":2,"docs":{"377":{"tf":1.0},"426":{"tf":1.0}}},"r":{"df":1,"docs":{"20":{"tf":1.0}}}}},"l":{"df":7,"docs":{"124":{"tf":1.0},"2":{"tf":1.0},"443":{"tf":1.4142135623730951},"445":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.0},"89":{"tf":1.0}},"n":{"df":0,"docs":{},"p":{"df":9,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"212":{"tf":1.0},"88":{"tf":1.0}}}},"s":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"445":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"v":{"1":{".":{"2":{"df":1,"docs":{"288":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"m":{"df":0,"docs":{},"p":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"205":{"tf":1.7320508075688772}}}}}},"df":2,"docs":{"116":{"tf":1.4142135623730951},"161":{"tf":1.0}}}}}}}}},"p":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"205":{"tf":1.4142135623730951}}}}}},"df":1,"docs":{"109":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.4142135623730951}}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"180":{"tf":1.0}}}}},"df":0,"docs":{}}},"o":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"210":{"tf":1.0},"451":{"tf":1.0}}}}}}}}}},"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"125":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"451":{"tf":1.0}}}}}}}}}}}},"d":{"df":0,"docs":{},"o":{"df":72,"docs":{"12":{"tf":1.4142135623730951},"136":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"144":{"tf":1.4142135623730951},"216":{"tf":1.4142135623730951},"218":{"tf":1.4142135623730951},"220":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"228":{"tf":1.4142135623730951},"230":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"261":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"265":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"283":{"tf":1.4142135623730951},"30":{"tf":1.4142135623730951},"303":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"342":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"385":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"431":{"tf":1.4142135623730951},"433":{"tf":1.4142135623730951},"435":{"tf":1.4142135623730951},"437":{"tf":1.4142135623730951},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"441":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"91":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951}}}},"df":2,"docs":{"117":{"tf":1.0},"129":{"tf":1.0}},"i":{"df":1,"docs":{"17":{"tf":1.7320508075688772}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"390":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"393":{"tf":1.0}}}}}}},"df":13,"docs":{"180":{"tf":1.0},"189":{"tf":1.4142135623730951},"194":{"tf":1.0},"208":{"tf":1.0},"313":{"tf":1.0},"37":{"tf":1.7320508075688772},"375":{"tf":1.0},"38":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"396":{"tf":1.7320508075688772},"449":{"tf":1.0},"8":{"tf":1.0}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"372":{"tf":1.0},"383":{"tf":1.0},"402":{"tf":1.0}}}}},"df":0,"docs":{}},"|":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{")":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"194":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"(":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"414":{"tf":1.0}}}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"414":{"tf":1.0}}}}}},"df":4,"docs":{"169":{"tf":1.0},"348":{"tf":1.0},"352":{"tf":1.0},"380":{"tf":1.0}}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"n":{"c":{":":{":":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"<":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"352":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"df":5,"docs":{"148":{"tf":1.4142135623730951},"169":{"tf":1.0},"370":{"tf":1.0},"420":{"tf":1.0},"96":{"tf":1.0}}}}},"n":{"df":13,"docs":{"13":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"16":{"tf":2.6457513110645907},"17":{"tf":2.23606797749979},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":2.0},"21":{"tf":2.23606797749979},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"6":{"tf":1.0},"8":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"300":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":1,"docs":{"97":{"tf":1.4142135623730951}}}}}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":8,"docs":{"169":{"tf":1.0},"176":{"tf":1.0},"207":{"tf":1.4142135623730951},"277":{"tf":1.0},"294":{"tf":1.0},"72":{"tf":1.0},"84":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{},"p":{"df":1,"docs":{"18":{"tf":1.0}}}},"u":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"393":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"364":{"tf":1.0}}}}}},"df":17,"docs":{"189":{"tf":1.0},"2":{"tf":1.0},"207":{"tf":1.0},"208":{"tf":1.0},"288":{"tf":1.0},"292":{"tf":1.0},"312":{"tf":1.0},"324":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.0},"362":{"tf":1.0},"381":{"tf":1.4142135623730951},"382":{"tf":1.0},"383":{"tf":1.7320508075688772},"400":{"tf":1.0},"403":{"tf":1.0},"85":{"tf":1.0}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"18":{"tf":1.0},"442":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"291":{"tf":1.0},"299":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"148":{"tf":1.0},"85":{"tf":1.0}}}}}},"t":{"df":32,"docs":{"16":{"tf":1.4142135623730951},"173":{"tf":1.0},"18":{"tf":1.4142135623730951},"207":{"tf":1.0},"214":{"tf":1.0},"217":{"tf":1.7320508075688772},"218":{"tf":1.0},"235":{"tf":1.0},"276":{"tf":1.0},"288":{"tf":1.0},"293":{"tf":1.4142135623730951},"346":{"tf":1.0},"347":{"tf":1.0},"348":{"tf":1.0},"351":{"tf":1.0},"355":{"tf":1.0},"361":{"tf":1.0},"375":{"tf":1.0},"388":{"tf":1.0},"389":{"tf":1.0},"393":{"tf":2.0},"394":{"tf":1.0},"396":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.4142135623730951},"418":{"tf":1.0},"451":{"tf":1.0},"72":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.4142135623730951},"88":{"tf":1.0}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"414":{"tf":1.0}},"r":{"df":1,"docs":{"394":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"393":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"k":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"(":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{")":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"a":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":1,"docs":{"413":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":30,"docs":{"1":{"tf":1.0},"168":{"tf":2.0},"169":{"tf":1.4142135623730951},"170":{"tf":1.0},"171":{"tf":1.0},"172":{"tf":1.0},"173":{"tf":1.0},"174":{"tf":1.0},"175":{"tf":1.0},"176":{"tf":1.4142135623730951},"177":{"tf":1.0},"178":{"tf":2.0},"179":{"tf":1.4142135623730951},"180":{"tf":1.4142135623730951},"181":{"tf":1.7320508075688772},"182":{"tf":1.0},"183":{"tf":1.0},"184":{"tf":1.0},"185":{"tf":1.0},"186":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.4142135623730951},"195":{"tf":1.0},"196":{"tf":1.0},"208":{"tf":1.4142135623730951},"211":{"tf":1.4142135623730951},"370":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"74":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"168":{"tf":1.0},"176":{"tf":1.4142135623730951},"186":{"tf":1.0}}}}},"é":{"df":1,"docs":{"393":{"tf":1.0}}}},"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"k":{"df":1,"docs":{"445":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"361":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0}}}},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"396":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"348":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"346":{"tf":1.0}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"119":{"tf":1.0},"150":{"tf":1.0},"171":{"tf":1.0}}}}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":5,"docs":{"146":{"tf":1.0},"153":{"tf":1.0},"171":{"tf":1.0},"419":{"tf":1.0},"83":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"442":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":6,"docs":{"133":{"tf":1.0},"376":{"tf":1.0},"383":{"tf":1.0},"393":{"tf":1.0},"423":{"tf":1.0},"429":{"tf":1.0}}}}}},"ç":{"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"181":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":10,"docs":{"104":{"tf":1.0},"133":{"tf":1.0},"16":{"tf":1.0},"171":{"tf":1.0},"19":{"tf":1.0},"202":{"tf":1.0},"286":{"tf":1.0},"292":{"tf":1.0},"394":{"tf":1.0},"98":{"tf":1.4142135623730951}},"e":{".":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"428":{"tf":1.0}}}}}}},"_":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"373":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"428":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":4,"docs":{"171":{"tf":1.0},"174":{"tf":1.7320508075688772},"413":{"tf":1.0},"428":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"373":{"tf":1.0}}}}}}},"{":{"a":{"df":0,"docs":{},"r":{"b":{"df":0,"docs":{},"r":{"df":1,"docs":{"174":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"319":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":4,"docs":{"173":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.4142135623730951},"375":{"tf":1.0}}}}}},"p":{"df":1,"docs":{"163":{"tf":1.0}}}},"o":{"df":0,"docs":{},"i":{"df":5,"docs":{"169":{"tf":1.0},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"87":{"tf":1.0},"96":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"m":{"df":1,"docs":{"277":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"v":{"df":5,"docs":{"166":{"tf":1.0},"244":{"tf":1.0},"288":{"tf":1.0},"451":{"tf":1.0},"82":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"174":{"tf":1.0}}}},"r":{"df":1,"docs":{"104":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"e":{"df":13,"docs":{"122":{"tf":1.0},"124":{"tf":1.0},"127":{"tf":2.23606797749979},"133":{"tf":1.0},"189":{"tf":3.3166247903554},"211":{"tf":1.0},"243":{"tf":2.0},"249":{"tf":1.0},"317":{"tf":1.0},"319":{"tf":1.0},"377":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}}}},"y":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"+":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"348":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"u":{"df":13,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":2.0},"17":{"tf":1.7320508075688772},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"20":{"tf":1.7320508075688772},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"5":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951}},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"443":{"tf":1.0}},"r":{"df":1,"docs":{"74":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"257":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":173,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"11":{"tf":1.7320508075688772},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"12":{"tf":1.4142135623730951},"120":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"13":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"14":{"tf":1.4142135623730951},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"22":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"23":{"tf":1.0},"230":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.4142135623730951},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"27":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"277":{"tf":2.23606797749979},"278":{"tf":1.7320508075688772},"28":{"tf":1.4142135623730951},"282":{"tf":1.7320508075688772},"283":{"tf":1.4142135623730951},"284":{"tf":1.4142135623730951},"285":{"tf":1.4142135623730951},"286":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"295":{"tf":1.0},"296":{"tf":1.0},"297":{"tf":1.0},"298":{"tf":1.0},"299":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.4142135623730951},"300":{"tf":1.0},"301":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.4142135623730951},"304":{"tf":1.0},"305":{"tf":1.4142135623730951},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"444":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":2.8284271247461903},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"7":{"tf":1.7320508075688772},"70":{"tf":1.0},"72":{"tf":2.449489742783178},"73":{"tf":1.7320508075688772},"77":{"tf":1.7320508075688772},"78":{"tf":1.4142135623730951},"79":{"tf":1.0},"8":{"tf":1.0},"80":{"tf":1.4142135623730951},"81":{"tf":1.4142135623730951},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.4142135623730951},"92":{"tf":1.0},"93":{"tf":1.4142135623730951},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0},"99":{"tf":1.0}}}}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":8,"docs":{"250":{"tf":1.0},"3":{"tf":1.7320508075688772},"372":{"tf":1.0},"377":{"tf":1.0},"393":{"tf":1.0},"413":{"tf":1.0},"426":{"tf":1.0},"427":{"tf":1.0}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"314":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"208":{"tf":1.0}}}}}}},"â":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":9,"docs":{"148":{"tf":1.0},"169":{"tf":1.0},"279":{"tf":1.4142135623730951},"352":{"tf":1.4142135623730951},"357":{"tf":1.0},"420":{"tf":1.0},"74":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951},"96":{"tf":1.0}}}}},"df":0,"docs":{}},"é":{"df":0,"docs":{},"l":{"df":0,"docs":{},"é":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":3,"docs":{"16":{"tf":1.0},"18":{"tf":1.0},"23":{"tf":1.4142135623730951}}}}}}}}}},"’":{"a":{"c":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"5":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":4,"docs":{"151":{"tf":1.0},"288":{"tf":1.0},"291":{"tf":1.0},"81":{"tf":1.0}}}}}}},"df":8,"docs":{"124":{"tf":1.0},"133":{"tf":1.0},"166":{"tf":1.0},"185":{"tf":1.0},"193":{"tf":1.0},"205":{"tf":1.4142135623730951},"291":{"tf":1.0},"84":{"tf":1.0}},"f":{"df":0,"docs":{},"w":{"df":6,"docs":{"108":{"tf":2.23606797749979},"127":{"tf":1.4142135623730951},"188":{"tf":1.7320508075688772},"189":{"tf":1.7320508075688772},"214":{"tf":1.0},"88":{"tf":1.0}}}},"i":{",":{"df":0,"docs":{},"h":{"df":1,"docs":{"348":{"tf":1.0}}}},"df":18,"docs":{"102":{"tf":1.0},"123":{"tf":1.0},"187":{"tf":1.0},"189":{"tf":1.0},"208":{"tf":1.4142135623730951},"247":{"tf":1.0},"248":{"tf":1.0},"281":{"tf":1.0},"318":{"tf":1.0},"324":{"tf":1.0},"325":{"tf":1.0},"333":{"tf":1.4142135623730951},"348":{"tf":3.1622776601683795},"375":{"tf":1.4142135623730951},"417":{"tf":1.0},"438":{"tf":1.7320508075688772},"439":{"tf":1.0},"96":{"tf":1.0}}},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"132":{"tf":1.4142135623730951},"181":{"tf":1.0},"242":{"tf":1.0}}}}}}}}}},"n":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"359":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"133":{"tf":1.0}}}}}}}},"b":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"206":{"tf":1.0}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"199":{"tf":1.0}}}}},"df":286,"docs":{"1":{"tf":2.449489742783178},"102":{"tf":1.7320508075688772},"104":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.4142135623730951},"123":{"tf":1.0},"128":{"tf":1.4142135623730951},"135":{"tf":1.0},"136":{"tf":1.4142135623730951},"137":{"tf":1.0},"138":{"tf":1.4142135623730951},"139":{"tf":1.0},"14":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"141":{"tf":1.0},"142":{"tf":1.4142135623730951},"143":{"tf":1.0},"144":{"tf":1.4142135623730951},"145":{"tf":1.4142135623730951},"146":{"tf":1.4142135623730951},"147":{"tf":2.449489742783178},"148":{"tf":1.0},"149":{"tf":1.0},"15":{"tf":1.4142135623730951},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.4142135623730951},"153":{"tf":1.0},"154":{"tf":1.0},"155":{"tf":1.0},"156":{"tf":1.0},"157":{"tf":1.0},"158":{"tf":1.0},"159":{"tf":1.7320508075688772},"16":{"tf":2.8284271247461903},"160":{"tf":1.0},"161":{"tf":1.0},"162":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.7320508075688772},"165":{"tf":1.0},"166":{"tf":1.0},"167":{"tf":1.0},"169":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"171":{"tf":1.0},"173":{"tf":1.7320508075688772},"174":{"tf":1.4142135623730951},"175":{"tf":1.7320508075688772},"176":{"tf":1.4142135623730951},"177":{"tf":1.0},"178":{"tf":1.0},"179":{"tf":2.0},"18":{"tf":2.23606797749979},"181":{"tf":1.0},"184":{"tf":1.4142135623730951},"185":{"tf":1.4142135623730951},"187":{"tf":1.0},"189":{"tf":1.4142135623730951},"19":{"tf":2.6457513110645907},"190":{"tf":1.0},"199":{"tf":1.0},"2":{"tf":2.0},"20":{"tf":1.7320508075688772},"206":{"tf":1.0},"21":{"tf":1.7320508075688772},"210":{"tf":1.0},"213":{"tf":1.7320508075688772},"214":{"tf":1.0},"215":{"tf":1.0},"216":{"tf":1.4142135623730951},"217":{"tf":1.0},"218":{"tf":1.4142135623730951},"219":{"tf":1.0},"220":{"tf":1.4142135623730951},"221":{"tf":1.0},"222":{"tf":1.4142135623730951},"223":{"tf":1.0},"224":{"tf":1.4142135623730951},"225":{"tf":2.0},"226":{"tf":1.7320508075688772},"227":{"tf":1.0},"228":{"tf":1.4142135623730951},"229":{"tf":1.0},"23":{"tf":1.0},"230":{"tf":1.4142135623730951},"232":{"tf":1.0},"234":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.4142135623730951},"243":{"tf":1.7320508075688772},"244":{"tf":1.7320508075688772},"25":{"tf":1.0},"252":{"tf":1.4142135623730951},"253":{"tf":1.4142135623730951},"254":{"tf":1.4142135623730951},"257":{"tf":1.4142135623730951},"258":{"tf":1.4142135623730951},"259":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"260":{"tf":1.0},"261":{"tf":1.4142135623730951},"262":{"tf":1.0},"263":{"tf":1.4142135623730951},"264":{"tf":1.0},"265":{"tf":1.4142135623730951},"266":{"tf":1.0},"267":{"tf":1.4142135623730951},"268":{"tf":1.0},"269":{"tf":1.4142135623730951},"27":{"tf":1.0},"270":{"tf":1.0},"271":{"tf":1.4142135623730951},"272":{"tf":1.0},"273":{"tf":1.4142135623730951},"274":{"tf":1.0},"275":{"tf":1.4142135623730951},"276":{"tf":1.0},"277":{"tf":2.23606797749979},"278":{"tf":1.0},"279":{"tf":2.23606797749979},"28":{"tf":1.4142135623730951},"282":{"tf":1.0},"283":{"tf":1.4142135623730951},"285":{"tf":1.0},"286":{"tf":1.0},"287":{"tf":2.23606797749979},"288":{"tf":1.0},"29":{"tf":1.0},"290":{"tf":1.4142135623730951},"294":{"tf":1.7320508075688772},"296":{"tf":1.4142135623730951},"299":{"tf":1.0},"3":{"tf":1.4142135623730951},"30":{"tf":1.4142135623730951},"301":{"tf":1.0},"302":{"tf":1.0},"303":{"tf":1.4142135623730951},"304":{"tf":2.0},"305":{"tf":1.7320508075688772},"306":{"tf":1.0},"307":{"tf":1.4142135623730951},"308":{"tf":1.0},"309":{"tf":1.4142135623730951},"31":{"tf":1.0},"312":{"tf":1.0},"316":{"tf":1.7320508075688772},"317":{"tf":1.4142135623730951},"319":{"tf":1.0},"32":{"tf":1.4142135623730951},"321":{"tf":1.4142135623730951},"322":{"tf":2.0},"327":{"tf":1.0},"328":{"tf":1.0},"33":{"tf":1.0},"330":{"tf":1.4142135623730951},"331":{"tf":2.6457513110645907},"332":{"tf":2.0},"334":{"tf":2.0},"335":{"tf":2.0},"336":{"tf":1.7320508075688772},"337":{"tf":2.0},"338":{"tf":1.7320508075688772},"339":{"tf":2.0},"34":{"tf":1.4142135623730951},"340":{"tf":1.7320508075688772},"341":{"tf":1.0},"342":{"tf":1.4142135623730951},"343":{"tf":2.0},"344":{"tf":1.7320508075688772},"345":{"tf":1.7320508075688772},"346":{"tf":1.4142135623730951},"347":{"tf":2.23606797749979},"348":{"tf":1.0},"349":{"tf":1.7320508075688772},"35":{"tf":1.0},"350":{"tf":1.0},"351":{"tf":1.4142135623730951},"352":{"tf":1.7320508075688772},"353":{"tf":1.0},"354":{"tf":1.4142135623730951},"355":{"tf":2.0},"356":{"tf":1.0},"357":{"tf":1.0},"36":{"tf":1.4142135623730951},"363":{"tf":2.6457513110645907},"364":{"tf":1.0},"365":{"tf":2.0},"366":{"tf":1.7320508075688772},"367":{"tf":1.0},"368":{"tf":1.4142135623730951},"37":{"tf":2.0},"375":{"tf":1.4142135623730951},"38":{"tf":1.7320508075688772},"382":{"tf":1.0},"384":{"tf":1.0},"385":{"tf":1.4142135623730951},"386":{"tf":1.0},"387":{"tf":1.4142135623730951},"39":{"tf":1.0},"393":{"tf":1.0},"396":{"tf":1.0},"399":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.4142135623730951},"404":{"tf":1.0},"405":{"tf":1.4142135623730951},"406":{"tf":1.0},"407":{"tf":1.4142135623730951},"408":{"tf":1.0},"409":{"tf":1.4142135623730951},"41":{"tf":2.0},"410":{"tf":1.0},"411":{"tf":1.4142135623730951},"412":{"tf":1.0},"416":{"tf":1.0},"417":{"tf":1.0},"42":{"tf":1.7320508075688772},"420":{"tf":2.0},"428":{"tf":1.4142135623730951},"43":{"tf":1.0},"430":{"tf":1.0},"431":{"tf":1.4142135623730951},"432":{"tf":1.0},"433":{"tf":1.4142135623730951},"434":{"tf":1.0},"435":{"tf":1.4142135623730951},"436":{"tf":1.0},"437":{"tf":1.4142135623730951},"438":{"tf":1.0},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"440":{"tf":1.0},"441":{"tf":1.4142135623730951},"442":{"tf":1.7320508075688772},"448":{"tf":1.0},"449":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.4142135623730951},"47":{"tf":2.0},"48":{"tf":1.7320508075688772},"49":{"tf":1.0},"5":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"6":{"tf":2.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"63":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":2.23606797749979},"74":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"8":{"tf":1.7320508075688772},"81":{"tf":1.0},"82":{"tf":2.0},"83":{"tf":1.7320508075688772},"86":{"tf":1.7320508075688772},"88":{"tf":1.4142135623730951},"89":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.4142135623730951},"92":{"tf":1.0},"93":{"tf":1.4142135623730951},"94":{"tf":1.4142135623730951},"95":{"tf":2.0},"98":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":2,"docs":{"85":{"tf":1.0},"88":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"i":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"167":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":11,"docs":{"166":{"tf":1.0},"189":{"tf":1.4142135623730951},"21":{"tf":1.0},"23":{"tf":1.0},"241":{"tf":1.0},"242":{"tf":1.0},"246":{"tf":1.4142135623730951},"247":{"tf":1.4142135623730951},"287":{"tf":1.0},"444":{"tf":1.0},"97":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":16,"docs":{"277":{"tf":1.0},"279":{"tf":1.0},"310":{"tf":1.7320508075688772},"311":{"tf":1.0},"312":{"tf":2.0},"313":{"tf":1.0},"314":{"tf":1.0},"315":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"320":{"tf":1.4142135623730951},"321":{"tf":1.0},"389":{"tf":1.0},"396":{"tf":1.0}}}}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"133":{"tf":1.0},"193":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"293":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"359":{"tf":1.0}}}}}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"316":{"tf":1.4142135623730951},"401":{"tf":1.0}}}},"df":0,"docs":{}}}},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":12,"docs":{"115":{"tf":1.0},"180":{"tf":1.4142135623730951},"300":{"tf":1.0},"346":{"tf":1.0},"348":{"tf":2.0},"349":{"tf":2.6457513110645907},"351":{"tf":1.7320508075688772},"352":{"tf":1.4142135623730951},"353":{"tf":1.0},"355":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.4142135623730951}},"e":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"352":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"d":{"(":{"d":{"b":{"df":1,"docs":{"424":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"357":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"348":{"tf":1.4142135623730951},"349":{"tf":1.4142135623730951},"351":{"tf":1.7320508075688772},"357":{"tf":1.0}}}}}}}}}}},"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"241":{"tf":1.0},"255":{"tf":1.0},"425":{"tf":1.0}}}},"b":{"df":0,"docs":{},"i":{"df":2,"docs":{"241":{"tf":1.0},"255":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"351":{"tf":1.0}}},"y":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"353":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":8,"docs":{"109":{"tf":1.0},"178":{"tf":1.0},"291":{"tf":1.0},"300":{"tf":1.0},"318":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.7320508075688772},"88":{"tf":1.0}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":5,"docs":{"177":{"tf":1.0},"184":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"424":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"180":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":9,"docs":{"121":{"tf":1.0},"279":{"tf":1.0},"358":{"tf":1.0},"359":{"tf":1.0},"360":{"tf":1.0},"361":{"tf":1.0},"362":{"tf":1.0},"363":{"tf":1.4142135623730951},"364":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"l":{"df":3,"docs":{"199":{"tf":1.0},"243":{"tf":1.0},"83":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"157":{"tf":1.4142135623730951},"359":{"tf":1.0},"84":{"tf":1.0}}}},"df":2,"docs":{"316":{"tf":2.0},"88":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"*":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"193":{"tf":1.0}}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"=":{"<":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"197":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"=":{"<":{"a":{"c":{"df":0,"docs":{},"m":{"df":1,"docs":{"123":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"{":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"377":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"=":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"123":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"375":{"tf":1.0}}}}}}},">":{"@":{"<":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":8,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"109":{"tf":1.0},"116":{"tf":1.0},"122":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"@":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"166":{"tf":1.0}}}}}}},"_":{"df":0,"docs":{},"i":{"d":{"df":7,"docs":{"393":{"tf":1.0},"423":{"tf":1.0},"424":{"tf":1.7320508075688772},"425":{"tf":1.0},"426":{"tf":1.4142135623730951},"427":{"tf":2.0},"429":{"tf":1.0}}},"df":0,"docs":{}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"286":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":25,"docs":{"108":{"tf":1.4142135623730951},"113":{"tf":1.0},"151":{"tf":1.4142135623730951},"153":{"tf":1.0},"166":{"tf":2.0},"189":{"tf":1.0},"199":{"tf":1.0},"208":{"tf":1.0},"291":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.0},"393":{"tf":1.0},"396":{"tf":1.4142135623730951},"399":{"tf":1.0},"413":{"tf":1.0},"414":{"tf":1.0},"416":{"tf":1.0},"423":{"tf":1.7320508075688772},"426":{"tf":1.7320508075688772},"427":{"tf":1.0},"428":{"tf":2.23606797749979},"429":{"tf":2.23606797749979},"86":{"tf":1.4142135623730951},"88":{"tf":1.0},"95":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"m":{"df":5,"docs":{"330":{"tf":1.7320508075688772},"332":{"tf":1.0},"423":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":2.23606797749979}},"e":{"=":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"&":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"=":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"206":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"s":{"(":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"241":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"359":{"tf":1.0}},"e":{":":{":":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"375":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"360":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"r":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"161":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"/":{"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":1,"docs":{"161":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"85":{"tf":1.0}}}}}}},"df":2,"docs":{"166":{"tf":1.0},"177":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"159":{"tf":1.0},"185":{"tf":1.4142135623730951},"357":{"tf":1.0}},"i":{"df":4,"docs":{"107":{"tf":1.0},"146":{"tf":1.0},"351":{"tf":1.0},"356":{"tf":1.0}},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":34,"docs":{"10":{"tf":1.0},"174":{"tf":1.0},"2":{"tf":1.0},"223":{"tf":1.7320508075688772},"224":{"tf":1.0},"243":{"tf":1.0},"286":{"tf":1.0},"3":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"328":{"tf":1.0},"330":{"tf":1.0},"331":{"tf":1.0},"332":{"tf":2.23606797749979},"354":{"tf":1.0},"360":{"tf":1.0},"375":{"tf":1.4142135623730951},"376":{"tf":1.4142135623730951},"377":{"tf":1.0},"379":{"tf":1.0},"396":{"tf":1.0},"4":{"tf":1.0},"401":{"tf":1.0},"402":{"tf":1.0},"422":{"tf":1.0},"423":{"tf":1.0},"426":{"tf":1.0},"428":{"tf":1.0},"429":{"tf":1.7320508075688772},"5":{"tf":1.4142135623730951},"67":{"tf":1.7320508075688772},"68":{"tf":1.0},"74":{"tf":1.0},"84":{"tf":1.0}}}}}}},"df":21,"docs":{"108":{"tf":1.0},"113":{"tf":1.0},"2":{"tf":1.4142135623730951},"214":{"tf":1.0},"23":{"tf":1.0},"232":{"tf":1.0},"244":{"tf":1.4142135623730951},"292":{"tf":1.0},"316":{"tf":1.0},"322":{"tf":1.0},"333":{"tf":1.0},"334":{"tf":1.0},"373":{"tf":1.0},"393":{"tf":1.0},"394":{"tf":1.0},"397":{"tf":1.0},"45":{"tf":1.7320508075688772},"451":{"tf":1.4142135623730951},"46":{"tf":1.0},"5":{"tf":1.0},"8":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"291":{"tf":1.0},"84":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"82":{"tf":1.0}}}},"é":{"df":2,"docs":{"359":{"tf":1.4142135623730951},"375":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"241":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"v":{"0":{".":{"1":{"9":{".":{"2":{"df":1,"docs":{"160":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"9":{".":{"0":{"df":2,"docs":{"293":{"tf":1.4142135623730951},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{"df":7,"docs":{"280":{"tf":1.0},"404":{"tf":1.7320508075688772},"405":{"tf":1.0},"449":{"tf":1.4142135623730951},"55":{"tf":1.7320508075688772},"56":{"tf":1.0},"9":{"tf":1.0}}},"2":{"0":{".":{"1":{"1":{".":{"0":{"df":1,"docs":{"288":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"175":{"tf":1.0}}},"6":{"df":1,"docs":{"214":{"tf":1.0}}},"a":{"df":3,"docs":{"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"82":{"tf":1.0}},"l":{"df":1,"docs":{"257":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"_":{"d":{"df":0,"docs":{},"é":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"257":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":17,"docs":{"109":{"tf":1.0},"242":{"tf":1.0},"243":{"tf":1.4142135623730951},"244":{"tf":1.7320508075688772},"247":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":2.23606797749979},"253":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.4142135623730951},"257":{"tf":1.4142135623730951},"258":{"tf":1.0},"290":{"tf":2.8284271247461903},"382":{"tf":1.0},"442":{"tf":1.0},"83":{"tf":2.23606797749979},"95":{"tf":1.0}}}}},"i":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"n":{"d":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"426":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"243":{"tf":1.0},"249":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":17,"docs":{"106":{"tf":1.4142135623730951},"112":{"tf":1.4142135623730951},"204":{"tf":1.4142135623730951},"205":{"tf":1.4142135623730951},"243":{"tf":1.0},"326":{"tf":1.0},"330":{"tf":1.4142135623730951},"373":{"tf":1.0},"380":{"tf":1.0},"383":{"tf":1.4142135623730951},"393":{"tf":1.7320508075688772},"394":{"tf":1.0},"396":{"tf":1.0},"402":{"tf":2.23606797749979},"423":{"tf":1.0},"429":{"tf":1.0},"98":{"tf":1.0}},"é":{"df":2,"docs":{"372":{"tf":1.0},"403":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":2,"docs":{"241":{"tf":1.0},"255":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"355":{"tf":1.0},"82":{"tf":1.0}}}}}},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"2":{"b":{"a":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":1.0},"207":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"/":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{".":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"189":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"a":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":3,"docs":{"127":{"tf":1.0},"189":{"tf":2.0},"205":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":2,"docs":{"127":{"tf":1.0},"189":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}}}},"df":1,"docs":{"121":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"161":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"/":{".":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{".":{"5":{"4":{"3":{"2":{"df":1,"docs":{"300":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}}}},"w":{"df":0,"docs":{},"w":{"df":0,"docs":{},"w":{"/":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"/":{".":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"116":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"(":{"1":{"0":{"0":{"df":1,"docs":{"241":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":1,"docs":{"317":{"tf":1.4142135623730951}},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":30,"docs":{"150":{"tf":1.0},"152":{"tf":1.4142135623730951},"153":{"tf":2.0},"166":{"tf":1.0},"229":{"tf":1.7320508075688772},"230":{"tf":1.0},"232":{"tf":1.0},"234":{"tf":1.0},"235":{"tf":1.0},"236":{"tf":1.0},"237":{"tf":1.0},"238":{"tf":1.4142135623730951},"244":{"tf":1.0},"249":{"tf":2.449489742783178},"258":{"tf":1.4142135623730951},"285":{"tf":1.0},"290":{"tf":1.0},"3":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"325":{"tf":1.0},"327":{"tf":1.0},"375":{"tf":1.0},"380":{"tf":1.0},"381":{"tf":1.0},"382":{"tf":1.7320508075688772},"75":{"tf":1.0},"84":{"tf":1.0},"88":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"318":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"288":{"tf":1.0}}}}}},"|":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":6,"docs":{"100":{"tf":1.0},"121":{"tf":1.0},"166":{"tf":1.0},"259":{"tf":1.0},"88":{"tf":1.0},"97":{"tf":1.0}},"e":{"c":{"<":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"427":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"428":{"tf":1.0}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"167":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"b":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"202":{"tf":1.0}}}}}},"df":27,"docs":{"107":{"tf":1.0},"119":{"tf":1.0},"128":{"tf":1.4142135623730951},"134":{"tf":1.4142135623730951},"146":{"tf":1.0},"151":{"tf":1.0},"156":{"tf":1.0},"160":{"tf":1.0},"167":{"tf":1.0},"171":{"tf":1.0},"181":{"tf":1.0},"183":{"tf":1.0},"21":{"tf":1.4142135623730951},"211":{"tf":1.0},"23":{"tf":1.0},"285":{"tf":1.0},"330":{"tf":1.4142135623730951},"333":{"tf":1.7320508075688772},"347":{"tf":1.0},"356":{"tf":1.4142135623730951},"373":{"tf":1.0},"375":{"tf":1.0},"442":{"tf":1.0},"451":{"tf":1.0},"6":{"tf":1.0},"86":{"tf":1.0},"98":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"375":{"tf":1.0}},"i":{"df":1,"docs":{"375":{"tf":1.0}}},"y":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"359":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"16":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":15,"docs":{"101":{"tf":1.0},"146":{"tf":1.4142135623730951},"15":{"tf":1.0},"160":{"tf":1.4142135623730951},"163":{"tf":1.0},"164":{"tf":1.0},"171":{"tf":1.0},"177":{"tf":1.0},"188":{"tf":1.0},"286":{"tf":2.0},"288":{"tf":2.8284271247461903},"291":{"tf":1.4142135623730951},"300":{"tf":1.4142135623730951},"81":{"tf":1.4142135623730951},"84":{"tf":1.0}}}}}},"t":{"df":1,"docs":{"18":{"tf":1.0}}}},"t":{"df":1,"docs":{"447":{"tf":1.0}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}},"x":{"df":1,"docs":{"10":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"211":{"tf":1.0}}}}}},"i":{"a":{"df":55,"docs":{"1":{"tf":1.0},"102":{"tf":1.0},"108":{"tf":1.0},"110":{"tf":1.4142135623730951},"113":{"tf":1.0},"120":{"tf":1.4142135623730951},"123":{"tf":1.0},"145":{"tf":1.0},"146":{"tf":1.0},"148":{"tf":1.0},"16":{"tf":1.0},"164":{"tf":1.4142135623730951},"189":{"tf":1.0},"193":{"tf":1.0},"211":{"tf":1.0},"212":{"tf":1.0},"214":{"tf":1.0},"237":{"tf":1.0},"240":{"tf":1.0},"242":{"tf":1.0},"244":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"249":{"tf":1.0},"250":{"tf":1.0},"254":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"276":{"tf":1.0},"287":{"tf":1.0},"288":{"tf":1.0},"296":{"tf":1.0},"312":{"tf":1.0},"323":{"tf":1.4142135623730951},"325":{"tf":1.0},"327":{"tf":1.0},"332":{"tf":1.0},"347":{"tf":1.0},"353":{"tf":1.0},"356":{"tf":1.0},"361":{"tf":1.0},"364":{"tf":2.0},"375":{"tf":1.0},"376":{"tf":1.0},"378":{"tf":1.0},"418":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"449":{"tf":1.4142135623730951},"450":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"82":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.4142135623730951}}},"d":{"df":0,"docs":{},"e":{"df":8,"docs":{"14":{"tf":1.0},"173":{"tf":1.0},"19":{"tf":1.0},"21":{"tf":1.4142135623730951},"244":{"tf":1.0},"290":{"tf":1.0},"318":{"tf":1.0},"327":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":5,"docs":{"10":{"tf":1.0},"393":{"tf":1.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.0},"71":{"tf":1.0}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"86":{"tf":1.0}}}},"w":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"179":{"tf":1.0}}}}}}}}}}},"v":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"179":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}},"m":{"df":1,"docs":{"252":{"tf":1.0}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"445":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"21":{"tf":1.0},"419":{"tf":1.0}}}}}},"l":{"df":12,"docs":{"16":{"tf":1.0},"175":{"tf":1.0},"177":{"tf":1.0},"186":{"tf":1.4142135623730951},"22":{"tf":1.0},"232":{"tf":1.0},"258":{"tf":1.0},"299":{"tf":1.0},"313":{"tf":1.0},"318":{"tf":1.0},"357":{"tf":1.0},"86":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"428":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"t":{"df":1,"docs":{"16":{"tf":1.0}},"e":{"df":2,"docs":{"153":{"tf":1.0},"23":{"tf":1.0}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"354":{"tf":1.0}}}}},"df":1,"docs":{"327":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"352":{"tf":1.0},"356":{"tf":1.4142135623730951}}},"t":{"df":1,"docs":{"447":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}}},"m":{"df":2,"docs":{"147":{"tf":1.0},"81":{"tf":1.0}}},"o":{"df":2,"docs":{"18":{"tf":1.0},"86":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"16":{"tf":1.0}}}},"df":2,"docs":{"17":{"tf":1.0},"21":{"tf":1.0}},"r":{"df":85,"docs":{"12":{"tf":1.4142135623730951},"125":{"tf":1.0},"136":{"tf":1.4142135623730951},"138":{"tf":1.4142135623730951},"140":{"tf":1.4142135623730951},"142":{"tf":1.4142135623730951},"144":{"tf":1.4142135623730951},"150":{"tf":1.0},"155":{"tf":1.0},"17":{"tf":1.0},"174":{"tf":1.0},"189":{"tf":1.0},"210":{"tf":1.0},"216":{"tf":1.4142135623730951},"218":{"tf":1.4142135623730951},"220":{"tf":1.4142135623730951},"222":{"tf":1.4142135623730951},"224":{"tf":1.4142135623730951},"226":{"tf":1.4142135623730951},"228":{"tf":1.4142135623730951},"23":{"tf":1.0},"230":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"261":{"tf":1.4142135623730951},"263":{"tf":1.4142135623730951},"265":{"tf":1.4142135623730951},"267":{"tf":1.4142135623730951},"269":{"tf":1.4142135623730951},"271":{"tf":1.4142135623730951},"273":{"tf":1.4142135623730951},"275":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"283":{"tf":1.4142135623730951},"293":{"tf":1.0},"30":{"tf":1.4142135623730951},"300":{"tf":1.0},"303":{"tf":1.4142135623730951},"305":{"tf":1.4142135623730951},"307":{"tf":1.4142135623730951},"309":{"tf":1.4142135623730951},"313":{"tf":1.0},"32":{"tf":1.4142135623730951},"336":{"tf":1.4142135623730951},"338":{"tf":1.4142135623730951},"34":{"tf":1.4142135623730951},"340":{"tf":1.4142135623730951},"342":{"tf":1.4142135623730951},"344":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"366":{"tf":1.4142135623730951},"368":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"385":{"tf":1.4142135623730951},"387":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"405":{"tf":1.4142135623730951},"407":{"tf":1.4142135623730951},"409":{"tf":1.4142135623730951},"411":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"431":{"tf":1.4142135623730951},"433":{"tf":1.4142135623730951},"435":{"tf":1.4142135623730951},"437":{"tf":1.4142135623730951},"439":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"441":{"tf":1.4142135623730951},"46":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951},"86":{"tf":1.0},"91":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"16":{"tf":1.0}}},"u":{"df":0,"docs":{},"m":{"df":4,"docs":{"82":{"tf":1.0},"84":{"tf":2.23606797749979},"85":{"tf":1.0},"88":{"tf":1.0}}},"t":{"df":1,"docs":{"214":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"r":{"df":21,"docs":{"104":{"tf":1.0},"160":{"tf":1.0},"198":{"tf":1.4142135623730951},"279":{"tf":1.0},"284":{"tf":1.4142135623730951},"285":{"tf":1.0},"288":{"tf":1.0},"290":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":2.0},"296":{"tf":1.0},"3":{"tf":1.0},"301":{"tf":1.0},"442":{"tf":1.0},"74":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"86":{"tf":2.449489742783178},"88":{"tf":1.0},"95":{"tf":1.7320508075688772}},"e":{"_":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"\\\\":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"|":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"290":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":22,"docs":{"159":{"tf":1.0},"199":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"277":{"tf":1.4142135623730951},"281":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.7320508075688772},"291":{"tf":1.7320508075688772},"292":{"tf":1.4142135623730951},"293":{"tf":1.4142135623730951},"3":{"tf":2.0},"300":{"tf":1.4142135623730951},"442":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"76":{"tf":1.0},"80":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"86":{"tf":1.7320508075688772},"88":{"tf":1.0},"89":{"tf":1.0}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"357":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":4,"docs":{"199":{"tf":1.0},"281":{"tf":1.0},"3":{"tf":1.0},"76":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"n":{"df":1,"docs":{"211":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":3,"docs":{"214":{"tf":1.0},"290":{"tf":1.0},"397":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":6,"docs":{"272":{"tf":1.7320508075688772},"273":{"tf":1.0},"281":{"tf":1.0},"436":{"tf":1.7320508075688772},"437":{"tf":1.0},"76":{"tf":1.0}}},"u":{"df":0,"docs":{},"e":{"df":33,"docs":{"10":{"tf":1.0},"124":{"tf":1.0},"16":{"tf":1.4142135623730951},"232":{"tf":1.4142135623730951},"276":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"279":{"tf":1.0},"280":{"tf":1.0},"281":{"tf":1.4142135623730951},"287":{"tf":1.4142135623730951},"412":{"tf":1.7320508075688772},"413":{"tf":1.7320508075688772},"414":{"tf":1.0},"415":{"tf":1.0},"416":{"tf":1.0},"417":{"tf":1.0},"418":{"tf":1.0},"419":{"tf":1.0},"420":{"tf":1.0},"421":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"l":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":3,"docs":{"168":{"tf":1.0},"176":{"tf":1.0},"381":{"tf":1.0}},"s":{"<":{"/":{"df":0,"docs":{},"i":{"df":1,"docs":{"413":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"x":{"b":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"199":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"364":{"tf":1.0},"376":{"tf":1.0},"377":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":13,"docs":{"124":{"tf":1.4142135623730951},"160":{"tf":1.7320508075688772},"162":{"tf":1.4142135623730951},"171":{"tf":1.0},"177":{"tf":1.0},"18":{"tf":1.0},"288":{"tf":1.0},"319":{"tf":1.0},"321":{"tf":1.0},"359":{"tf":1.0},"375":{"tf":1.0},"448":{"tf":1.0},"83":{"tf":1.0}}},"df":10,"docs":{"146":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"330":{"tf":3.0},"331":{"tf":2.449489742783178},"332":{"tf":2.23606797749979},"333":{"tf":2.449489742783178},"414":{"tf":1.7320508075688772},"6":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"319":{"tf":1.0}}}},"r":{"df":23,"docs":{"101":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.0},"109":{"tf":1.0},"118":{"tf":1.4142135623730951},"119":{"tf":1.0},"133":{"tf":2.0},"14":{"tf":1.0},"166":{"tf":1.4142135623730951},"183":{"tf":1.4142135623730951},"184":{"tf":1.4142135623730951},"185":{"tf":1.4142135623730951},"188":{"tf":1.0},"206":{"tf":1.0},"212":{"tf":1.0},"214":{"tf":1.0},"255":{"tf":1.7320508075688772},"285":{"tf":1.0},"287":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"393":{"tf":1.7320508075688772},"80":{"tf":1.0}}},"z":{"df":11,"docs":{"288":{"tf":1.7320508075688772},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.4142135623730951},"292":{"tf":1.0},"293":{"tf":1.0},"300":{"tf":1.7320508075688772},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"88":{"tf":1.4142135623730951}}}},"é":{"df":2,"docs":{"22":{"tf":1.0},"393":{"tf":1.0}}}}}}}}},"w":{"[":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"352":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"v":{"df":1,"docs":{"424":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"n":{"df":6,"docs":{"174":{"tf":1.0},"294":{"tf":1.0},"320":{"tf":1.0},"321":{"tf":1.0},"389":{"tf":1.4142135623730951},"403":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"è":{"df":1,"docs":{"352":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"356":{"tf":1.0},"357":{"tf":1.0}}}},"df":0,"docs":{}}},"df":3,"docs":{"206":{"tf":1.0},"348":{"tf":3.7416573867739413},"352":{"tf":1.0}},"e":{"b":{"+":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"148":{"tf":1.0}}}}}},"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"417":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}}}}},"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"<":{"df":0,"docs":{},"i":{">":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"413":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"287":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"[":{"\\"":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"370":{"tf":1.0},"413":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":30,"docs":{"148":{"tf":1.0},"16":{"tf":1.0},"173":{"tf":1.0},"187":{"tf":1.0},"199":{"tf":1.0},"279":{"tf":1.0},"285":{"tf":1.0},"287":{"tf":1.0},"289":{"tf":1.0},"293":{"tf":1.4142135623730951},"294":{"tf":1.0},"299":{"tf":1.0},"335":{"tf":1.7320508075688772},"336":{"tf":1.0},"370":{"tf":2.23606797749979},"375":{"tf":2.0},"383":{"tf":1.0},"392":{"tf":1.0},"413":{"tf":2.449489742783178},"417":{"tf":1.0},"422":{"tf":1.0},"423":{"tf":3.4641016151377544},"426":{"tf":2.8284271247461903},"428":{"tf":3.7416573867739413},"429":{"tf":2.6457513110645907},"80":{"tf":1.0},"82":{"tf":1.4142135623730951},"84":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":3,"docs":{"279":{"tf":1.0},"341":{"tf":1.7320508075688772},"342":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"445":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"133":{"tf":1.0},"97":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"447":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"166":{"tf":1.0},"380":{"tf":1.0}}}}}}}}},"o":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"153":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"348":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"353":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"356":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"[":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"<":{"b":{"df":0,"docs":{},"r":{"/":{">":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"169":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":25,"docs":{"102":{"tf":1.4142135623730951},"146":{"tf":1.0},"148":{"tf":1.4142135623730951},"161":{"tf":1.0},"166":{"tf":1.0},"169":{"tf":2.23606797749979},"175":{"tf":1.0},"183":{"tf":1.4142135623730951},"189":{"tf":1.0},"194":{"tf":1.0},"277":{"tf":1.0},"278":{"tf":1.0},"281":{"tf":1.0},"304":{"tf":1.7320508075688772},"305":{"tf":1.0},"327":{"tf":1.0},"352":{"tf":1.4142135623730951},"354":{"tf":2.0},"357":{"tf":1.0},"377":{"tf":1.4142135623730951},"414":{"tf":1.0},"440":{"tf":1.7320508075688772},"441":{"tf":1.0},"450":{"tf":1.0},"96":{"tf":1.0}}}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":5,"docs":{"279":{"tf":1.0},"301":{"tf":1.0},"308":{"tf":1.7320508075688772},"309":{"tf":1.0},"5":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"148":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":10,"docs":{"148":{"tf":1.0},"151":{"tf":1.0},"161":{"tf":1.0},"169":{"tf":1.4142135623730951},"171":{"tf":1.0},"312":{"tf":1.0},"320":{"tf":1.4142135623730951},"321":{"tf":1.4142135623730951},"389":{"tf":1.4142135623730951},"403":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"p":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"p":{"df":1,"docs":{"208":{"tf":1.0}}}}}},"df":1,"docs":{"189":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"361":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"294":{"tf":1.0}}}}}}},"x":{"8":{"6":{"_":{"6":{"4":{"df":1,"docs":{"291":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":13,"docs":{"133":{"tf":1.4142135623730951},"166":{"tf":1.0},"180":{"tf":1.0},"202":{"tf":3.0},"206":{"tf":1.0},"214":{"tf":1.0},"279":{"tf":1.0},"349":{"tf":1.0},"356":{"tf":1.0},"394":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0},"84":{"tf":1.4142135623730951}},"r":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}},"w":{"df":1,"docs":{"348":{"tf":1.0}}},"x":{"df":1,"docs":{"394":{"tf":1.0}},"x":{"df":0,"docs":{},"x":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}}},"y":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":3,"docs":{"379":{"tf":1.0},"380":{"tf":1.0},"9":{"tf":1.0}}}}},"df":6,"docs":{"115":{"tf":1.0},"126":{"tf":1.0},"169":{"tf":1.0},"188":{"tf":1.0},"346":{"tf":1.0},"82":{"tf":1.0}}},"z":{"df":1,"docs":{"199":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":2,"docs":{"383":{"tf":1.0},"393":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"393":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"=":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{":":{"1":{"0":{"df":0,"docs":{},"m":{"df":1,"docs":{"201":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"202":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{":":{"1":{"0":{"df":0,"docs":{},"m":{"df":1,"docs":{"201":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"202":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{":":{"1":{"0":{"df":0,"docs":{},"m":{"df":1,"docs":{"201":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"202":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":3,"docs":{"189":{"tf":1.0},"198":{"tf":1.0},"201":{"tf":1.7320508075688772}}}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":6,"docs":{"324":{"tf":1.0},"352":{"tf":1.4142135623730951},"355":{"tf":1.0},"389":{"tf":1.4142135623730951},"400":{"tf":1.0},"418":{"tf":1.4142135623730951}}}}}}}},"title":{"root":{"0":{"2":{"df":3,"docs":{"25":{"tf":1.0},"302":{"tf":1.0},"90":{"tf":1.0}}},"3":{"df":3,"docs":{"27":{"tf":1.0},"304":{"tf":1.0},"92":{"tf":1.0}}},"4":{"df":1,"docs":{"29":{"tf":1.0}}},"7":{"4":{"df":3,"docs":{"264":{"tf":1.0},"383":{"tf":1.0},"391":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"102":{"tf":1.0}}},"1":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"104":{"tf":1.0}}}}}},"0":{"df":1,"docs":{"166":{"tf":1.0}}},"1":{"df":1,"docs":{"167":{"tf":1.0}}},"a":{"df":1,"docs":{"105":{"tf":1.0}}},"b":{"df":1,"docs":{"106":{"tf":1.0}}},"c":{"df":2,"docs":{"107":{"tf":1.0},"122":{"tf":1.0}}},"d":{"df":1,"docs":{"108":{"tf":1.0}}},"df":13,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"146":{"tf":1.0},"169":{"tf":1.0},"17":{"tf":1.0},"188":{"tf":1.0},"233":{"tf":1.0},"288":{"tf":1.0},"316":{"tf":1.0},"346":{"tf":1.0},"389":{"tf":1.0},"423":{"tf":1.0},"83":{"tf":1.0}}},"2":{".":{"1":{"df":2,"docs":{"171":{"tf":1.0},"392":{"tf":1.0}}},"2":{"df":2,"docs":{"172":{"tf":1.0},"393":{"tf":1.0}}},"3":{"df":2,"docs":{"173":{"tf":1.0},"394":{"tf":1.0}}},"4":{"df":1,"docs":{"174":{"tf":1.0}}},"5":{"df":1,"docs":{"175":{"tf":1.0}}},"df":0,"docs":{}},"0":{"2":{"2":{"df":1,"docs":{"103":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"df":3,"docs":{"107":{"tf":1.0},"120":{"tf":1.0},"122":{"tf":1.0}}},"df":13,"docs":{"106":{"tf":1.0},"109":{"tf":1.0},"147":{"tf":1.0},"170":{"tf":1.0},"18":{"tf":1.0},"189":{"tf":1.0},"239":{"tf":1.0},"289":{"tf":1.0},"317":{"tf":1.0},"348":{"tf":1.0},"391":{"tf":1.0},"424":{"tf":1.0},"84":{"tf":1.0}},"f":{"a":{"df":5,"docs":{"13":{"tf":1.0},"18":{"tf":1.0},"217":{"tf":1.0},"35":{"tf":1.0},"432":{"tf":1.0}}},"df":0,"docs":{}}},"3":{".":{"1":{"df":3,"docs":{"177":{"tf":1.0},"191":{"tf":1.0},"396":{"tf":1.0}}},"2":{"df":3,"docs":{"178":{"tf":1.0},"192":{"tf":1.0},"397":{"tf":1.0}}},"3":{"df":2,"docs":{"179":{"tf":1.0},"193":{"tf":1.0}}},"4":{"df":2,"docs":{"180":{"tf":1.0},"194":{"tf":1.0}}},"5":{"df":2,"docs":{"181":{"tf":1.0},"195":{"tf":1.0}}},"6":{"df":1,"docs":{"196":{"tf":1.0}}},"7":{"df":1,"docs":{"197":{"tf":1.0}}},"8":{"df":1,"docs":{"198":{"tf":1.0}}},"9":{"df":1,"docs":{"199":{"tf":1.0}}},"df":0,"docs":{}},"0":{"df":1,"docs":{"79":{"tf":1.0}}},"a":{"df":1,"docs":{"111":{"tf":1.0}}},"b":{"df":1,"docs":{"112":{"tf":1.0}}},"c":{"df":1,"docs":{"113":{"tf":1.0}}},"df":12,"docs":{"110":{"tf":1.0},"148":{"tf":1.0},"176":{"tf":1.0},"19":{"tf":1.0},"190":{"tf":1.0},"244":{"tf":1.0},"290":{"tf":1.0},"318":{"tf":1.0},"349":{"tf":1.0},"395":{"tf":1.0},"425":{"tf":1.0},"85":{"tf":1.0}}},"4":{".":{"1":{"df":3,"docs":{"201":{"tf":1.0},"351":{"tf":1.0},"399":{"tf":1.0}}},"2":{"df":3,"docs":{"202":{"tf":1.0},"352":{"tf":1.0},"400":{"tf":1.0}}},"3":{"df":3,"docs":{"203":{"tf":1.0},"353":{"tf":1.0},"401":{"tf":1.0}}},"4":{"df":2,"docs":{"354":{"tf":1.0},"402":{"tf":1.0}}},"5":{"df":1,"docs":{"355":{"tf":1.0}}},"df":0,"docs":{}},"a":{"df":1,"docs":{"115":{"tf":1.0}}},"b":{"df":1,"docs":{"116":{"tf":1.0}}},"c":{"df":1,"docs":{"117":{"tf":1.0}}},"d":{"df":1,"docs":{"118":{"tf":1.0}}},"df":13,"docs":{"114":{"tf":1.0},"149":{"tf":1.0},"182":{"tf":1.0},"20":{"tf":1.0},"200":{"tf":1.0},"245":{"tf":1.0},"291":{"tf":1.0},"319":{"tf":1.0},"350":{"tf":1.0},"398":{"tf":1.0},"426":{"tf":1.0},"53":{"tf":1.0},"86":{"tf":1.0}},"e":{"df":1,"docs":{"119":{"tf":1.0}}}},"5":{"a":{"df":1,"docs":{"121":{"tf":1.0}}},"b":{"df":1,"docs":{"122":{"tf":1.0}}},"c":{"df":1,"docs":{"123":{"tf":1.0}}},"df":11,"docs":{"107":{"tf":1.0},"120":{"tf":1.0},"152":{"tf":1.0},"186":{"tf":1.0},"204":{"tf":1.0},"21":{"tf":1.0},"249":{"tf":1.0},"292":{"tf":1.0},"356":{"tf":1.0},"403":{"tf":1.0},"427":{"tf":1.0}}},"6":{"df":7,"docs":{"124":{"tf":1.0},"157":{"tf":1.0},"207":{"tf":1.0},"250":{"tf":1.0},"293":{"tf":1.0},"357":{"tf":1.0},"428":{"tf":1.0}}},"7":{"a":{"df":1,"docs":{"126":{"tf":1.0}}},"b":{"df":1,"docs":{"127":{"tf":1.0}}},"df":6,"docs":{"125":{"tf":1.0},"161":{"tf":1.0},"208":{"tf":1.0},"251":{"tf":1.0},"294":{"tf":1.0},"429":{"tf":1.0}}},"8":{".":{"1":{"df":1,"docs":{"210":{"tf":1.0}}},"2":{"df":1,"docs":{"211":{"tf":1.0}}},"3":{"df":1,"docs":{"212":{"tf":1.0}}},"4":{"df":1,"docs":{"213":{"tf":1.0}}},"df":0,"docs":{}},"a":{"df":1,"docs":{"129":{"tf":1.0}}},"b":{"df":1,"docs":{"130":{"tf":1.0}}},"c":{"df":1,"docs":{"131":{"tf":1.0}}},"df":4,"docs":{"128":{"tf":1.0},"162":{"tf":1.0},"209":{"tf":1.0},"256":{"tf":1.0}}},"9":{"df":3,"docs":{"132":{"tf":1.0},"165":{"tf":1.0},"214":{"tf":1.0}}},"a":{"b":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"197":{"tf":1.0},"198":{"tf":1.0},"363":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"420":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"192":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"37":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"427":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"è":{"d":{"df":1,"docs":{"17":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":3,"docs":{"13":{"tf":1.0},"173":{"tf":1.0},"18":{"tf":1.0}}}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"348":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"332":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":1,"docs":{"223":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"251":{"tf":1.0},"86":{"tf":1.0}}}}}}},"df":1,"docs":{"332":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":14,"docs":{"121":{"tf":1.0},"129":{"tf":1.0},"13":{"tf":1.0},"202":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0},"315":{"tf":1.0},"318":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"363":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"421":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":4,"docs":{"264":{"tf":1.0},"383":{"tf":1.0},"388":{"tf":1.0},"391":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"i":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"196":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":9,"docs":{"179":{"tf":1.0},"192":{"tf":1.0},"316":{"tf":1.0},"343":{"tf":1.0},"384":{"tf":1.0},"404":{"tf":1.0},"408":{"tf":1.0},"449":{"tf":1.4142135623730951},"55":{"tf":1.0}}},"p":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"239":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"è":{"df":2,"docs":{"107":{"tf":1.0},"165":{"tf":1.0}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":6,"docs":{"148":{"tf":1.0},"169":{"tf":1.0},"268":{"tf":1.0},"325":{"tf":1.0},"369":{"tf":1.0},"380":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"292":{"tf":1.0},"400":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"304":{"tf":1.0},"440":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"u":{"df":2,"docs":{"152":{"tf":1.0},"160":{"tf":1.0}}}},"df":0,"docs":{}}}}},"u":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"362":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"225":{"tf":1.0}}}}},"df":3,"docs":{"129":{"tf":1.0},"242":{"tf":1.0},"245":{"tf":1.0}},"t":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"330":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"330":{"tf":1.0},"35":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"118":{"tf":1.0}}}},"s":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"x":{"df":2,"docs":{"17":{"tf":1.0},"402":{"tf":1.0}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"202":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"321":{"tf":1.0},"351":{"tf":1.0},"365":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":10,"docs":{"100":{"tf":1.0},"155":{"tf":1.0},"159":{"tf":1.0},"18":{"tf":1.0},"187":{"tf":1.0},"284":{"tf":1.0},"29":{"tf":1.0},"79":{"tf":1.0},"90":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{}}}},"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"448":{"tf":1.0}}}}}},"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"199":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"206":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"356":{"tf":1.0},"419":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":5,"docs":{"260":{"tf":1.0},"291":{"tf":1.0},"339":{"tf":1.0},"346":{"tf":1.0},"386":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"156":{"tf":1.0}}}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"è":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"442":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"o":{"c":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"399":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":5,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"110":{"tf":1.0},"112":{"tf":1.0},"171":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"a":{"df":2,"docs":{"156":{"tf":1.0},"244":{"tf":1.0}},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"304":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"395":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"n":{"df":1,"docs":{"418":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":3,"docs":{"1":{"tf":1.0},"161":{"tf":1.0},"451":{"tf":1.0}},"r":{"df":0,"docs":{},"t":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"115":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"117":{"tf":1.0},"129":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"t":{"df":2,"docs":{"2":{"tf":1.0},"3":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"350":{"tf":1.0}}}}}},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"205":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"236":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"186":{"tf":1.0},"393":{"tf":1.0},"403":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"174":{"tf":1.0}}}}}}}},"i":{".":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":2,"docs":{"447":{"tf":1.0},"57":{"tf":1.0}}}}}},"/":{"c":{"d":{"df":1,"docs":{"378":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"101":{"tf":1.0},"103":{"tf":1.0},"148":{"tf":1.0}}}},"df":18,"docs":{"145":{"tf":1.0},"165":{"tf":1.0},"168":{"tf":1.0},"170":{"tf":1.0},"173":{"tf":1.0},"183":{"tf":1.0},"210":{"tf":1.0},"221":{"tf":1.0},"272":{"tf":1.0},"29":{"tf":1.0},"296":{"tf":1.0},"317":{"tf":1.0},"321":{"tf":1.0},"380":{"tf":1.0},"382":{"tf":1.0},"420":{"tf":1.0},"436":{"tf":1.0},"447":{"tf":1.4142135623730951}}},"l":{"df":5,"docs":{"13":{"tf":1.0},"179":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"426":{"tf":1.0}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"449":{"tf":1.4142135623730951}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":3,"docs":{"123":{"tf":1.0},"356":{"tf":1.0},"424":{"tf":1.4142135623730951}},"r":{"df":1,"docs":{"25":{"tf":1.0}}},"z":{"df":1,"docs":{"289":{"tf":1.0}}}}}},"é":{"df":1,"docs":{"33":{"tf":1.0}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":3,"docs":{"100":{"tf":1.0},"25":{"tf":1.0},"398":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"155":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"27":{"tf":1.0},"65":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"320":{"tf":1.0},"324":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"420":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"3":{"tf":1.0},"451":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"284":{"tf":1.0},"294":{"tf":1.0},"43":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"389":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"284":{"tf":1.0},"292":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"155":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"237":{"tf":1.0},"245":{"tf":1.0},"319":{"tf":1.0}}}},"s":{"df":3,"docs":{"378":{"tf":1.0},"381":{"tf":1.0},"79":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"84":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"281":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":1,"docs":{"86":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"415":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":2,"docs":{"116":{"tf":1.0},"130":{"tf":1.0}},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"105":{"tf":1.0},"155":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":11,"docs":{"127":{"tf":1.0},"141":{"tf":1.0},"143":{"tf":1.0},"145":{"tf":1.0},"172":{"tf":1.0},"180":{"tf":1.0},"233":{"tf":1.0},"239":{"tf":1.0},"35":{"tf":1.0},"447":{"tf":1.0},"83":{"tf":1.0}},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"284":{"tf":1.0},"290":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"264":{"tf":1.0},"388":{"tf":1.0}}}}}}}},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"49":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"95":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"362":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":1,"docs":{"358":{"tf":1.0}},"t":{"df":2,"docs":{"302":{"tf":1.0},"308":{"tf":1.0}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"277":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"277":{"tf":1.0},"372":{"tf":1.0},"408":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"183":{"tf":1.0},"184":{"tf":1.0},"279":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}},"df":1,"docs":{"362":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"396":{"tf":1.0}}}}}}}}},"û":{"df":0,"docs":{},"t":{"df":1,"docs":{"349":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"369":{"tf":1.0},"370":{"tf":1.0},"371":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"98":{"tf":1.0}}}}}}},"é":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"423":{"tf":1.0},"429":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":2,"docs":{"13":{"tf":1.0},"21":{"tf":1.0}},"r":{"df":5,"docs":{"179":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"304":{"tf":1.0},"37":{"tf":1.0}}},"z":{"df":4,"docs":{"294":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"86":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"292":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"205":{"tf":1.0}}}}}}},"y":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"69":{"tf":1.0}}}},"df":0,"docs":{}},"ô":{"df":0,"docs":{},"t":{"df":3,"docs":{"200":{"tf":1.0},"355":{"tf":1.0},"67":{"tf":1.0}}}}},"d":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"210":{"tf":1.0},"272":{"tf":1.0},"381":{"tf":1.0},"420":{"tf":1.0},"436":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":1,"docs":{"438":{"tf":1.0}}}}}}},"n":{"df":6,"docs":{"20":{"tf":1.0},"202":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"4":{"tf":1.0},"428":{"tf":1.0}}}},"b":{"df":4,"docs":{"247":{"tf":1.0},"259":{"tf":1.0},"349":{"tf":1.0},"354":{"tf":1.0}}},"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"355":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":53,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"104":{"tf":1.0},"134":{"tf":1.0},"153":{"tf":1.0},"154":{"tf":1.0},"164":{"tf":1.0},"17":{"tf":1.0},"171":{"tf":1.0},"206":{"tf":1.0},"235":{"tf":1.0},"236":{"tf":1.0},"238":{"tf":1.0},"241":{"tf":1.0},"243":{"tf":1.0},"250":{"tf":1.0},"260":{"tf":1.4142135623730951},"270":{"tf":1.0},"274":{"tf":1.0},"291":{"tf":1.0},"298":{"tf":1.0},"308":{"tf":1.0},"314":{"tf":1.0},"320":{"tf":1.0},"326":{"tf":1.4142135623730951},"329":{"tf":1.0},"331":{"tf":1.0},"339":{"tf":1.4142135623730951},"341":{"tf":1.0},"346":{"tf":1.4142135623730951},"353":{"tf":1.0},"386":{"tf":1.4142135623730951},"389":{"tf":1.0},"391":{"tf":1.0},"396":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0},"412":{"tf":1.0},"414":{"tf":1.0},"415":{"tf":1.0},"419":{"tf":1.0},"422":{"tf":1.0},"427":{"tf":1.0},"43":{"tf":1.0},"430":{"tf":1.0},"434":{"tf":1.0},"442":{"tf":1.0},"448":{"tf":1.0},"450":{"tf":1.0},"53":{"tf":1.0},"65":{"tf":1.0},"69":{"tf":1.0},"83":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"168":{"tf":1.0},"176":{"tf":1.0},"178":{"tf":1.0},"211":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"110":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"111":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"u":{"df":0,"docs":{},"i":{"df":3,"docs":{"158":{"tf":1.0},"163":{"tf":1.0},"451":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"232":{"tf":1.0}}}}},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"104":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":1,"docs":{"250":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"295":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"145":{"tf":1.0},"151":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"232":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"198":{"tf":1.0}}}}}}},"n":{"df":1,"docs":{"128":{"tf":1.0}}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"109":{"tf":1.0},"444":{"tf":1.4142135623730951},"79":{"tf":1.4142135623730951},"84":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"2":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0}}}}}}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"128":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"é":{"df":5,"docs":{"260":{"tf":1.0},"291":{"tf":1.0},"339":{"tf":1.0},"346":{"tf":1.0},"386":{"tf":1.0}}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"35":{"tf":1.0}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"352":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"195":{"tf":1.4142135623730951},"196":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"u":{"df":10,"docs":{"107":{"tf":1.0},"112":{"tf":1.0},"146":{"tf":1.0},"156":{"tf":1.0},"158":{"tf":1.0},"165":{"tf":1.0},"25":{"tf":1.0},"348":{"tf":1.0},"432":{"tf":1.0},"57":{"tf":1.0}},"r":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"187":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"125":{"tf":1.0}}}}}},"df":0,"docs":{}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":5,"docs":{"231":{"tf":1.0},"239":{"tf":1.0},"243":{"tf":1.0},"247":{"tf":1.0},"257":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"é":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"182":{"tf":1.0}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"250":{"tf":1.0},"438":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"201":{"tf":1.0}}}}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"i":{"df":3,"docs":{"154":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.0}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"158":{"tf":1.0},"243":{"tf":1.0}}}}},"df":0,"docs":{}},"j":{"df":1,"docs":{"392":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"204":{"tf":1.0},"242":{"tf":1.0},"414":{"tf":1.0},"92":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":2,"docs":{"79":{"tf":1.0},"85":{"tf":1.0}}}}}}},"df":0,"docs":{}},"p":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"133":{"tf":1.0},"166":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"219":{"tf":1.0},"221":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"370":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"103":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"110":{"tf":1.0},"113":{"tf":1.0},"270":{"tf":1.0}}}}}}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"116":{"tf":1.0},"178":{"tf":1.0}}}}}}},"ô":{"df":0,"docs":{},"t":{"df":10,"docs":{"13":{"tf":1.0},"173":{"tf":1.0},"21":{"tf":1.0},"294":{"tf":1.0},"331":{"tf":1.0},"345":{"tf":1.0},"423":{"tf":1.0},"428":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0}}}}},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"122":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"256":{"tf":1.0},"276":{"tf":1.0}}}}}}}}}}}},"’":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"71":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"277":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"l":{"df":6,"docs":{"16":{"tf":1.0},"232":{"tf":1.0},"287":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"82":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":3,"docs":{"152":{"tf":1.0},"229":{"tf":1.0},"443":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"401":{"tf":1.0}}}}}}},"x":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"449":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"364":{"tf":1.0}}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"150":{"tf":1.0},"420":{"tf":1.0},"98":{"tf":1.0}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"252":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"350":{"tf":1.0}}}}}}}}},"u":{"df":0,"docs":{},"n":{"df":4,"docs":{"175":{"tf":1.0},"255":{"tf":1.0},"423":{"tf":1.0},"49":{"tf":1.0}},"e":{"df":2,"docs":{"426":{"tf":1.0},"69":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"2":{"df":3,"docs":{"313":{"tf":1.0},"318":{"tf":1.0},"322":{"tf":1.0}}},"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":3,"docs":{"174":{"tf":1.0},"272":{"tf":1.0},"436":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"255":{"tf":1.0}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"3":{"tf":1.0}}}},"n":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"114":{"tf":1.0},"117":{"tf":1.0},"94":{"tf":1.0}}}}}}},"d":{"df":1,"docs":{"322":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"343":{"tf":1.0}}}}}}}},"df":10,"docs":{"170":{"tf":1.0},"176":{"tf":1.0},"278":{"tf":1.0},"362":{"tf":1.0},"390":{"tf":1.0},"392":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"79":{"tf":1.0},"94":{"tf":1.0}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"165":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"20":{"tf":1.0},"426":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"370":{"tf":1.0}}}},"v":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"102":{"tf":1.0},"131":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":11,"docs":{"152":{"tf":1.0},"154":{"tf":1.0},"155":{"tf":1.0},"159":{"tf":1.0},"172":{"tf":1.0},"233":{"tf":1.0},"246":{"tf":1.0},"249":{"tf":1.0},"259":{"tf":1.0},"290":{"tf":1.0},"443":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"3":{"tf":1.0}}}},"t":{"c":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"2":{"b":{"a":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"j":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":1,"docs":{"189":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"202":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":27,"docs":{"13":{"tf":1.0},"131":{"tf":1.0},"137":{"tf":1.0},"168":{"tf":1.0},"17":{"tf":1.0},"204":{"tf":1.0},"214":{"tf":1.0},"23":{"tf":1.0},"243":{"tf":1.0},"245":{"tf":1.0},"25":{"tf":1.0},"262":{"tf":1.0},"284":{"tf":1.0},"294":{"tf":1.0},"300":{"tf":1.0},"308":{"tf":1.0},"333":{"tf":1.0},"378":{"tf":1.0},"382":{"tf":1.0},"384":{"tf":1.0},"39":{"tf":1.0},"448":{"tf":1.0},"45":{"tf":1.0},"59":{"tf":1.0},"83":{"tf":1.0},"85":{"tf":1.0},"88":{"tf":1.0}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"280":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"154":{"tf":1.0},"155":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"238":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"311":{"tf":1.0}}}}},"df":1,"docs":{"129":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":6,"docs":{"10":{"tf":1.0},"266":{"tf":1.0},"281":{"tf":1.0},"410":{"tf":1.0},"63":{"tf":1.0},"76":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"159":{"tf":1.0}}}}},"df":0,"docs":{}}},"o":{"df":2,"docs":{"195":{"tf":1.0},"196":{"tf":1.0}},"s":{"df":1,"docs":{"120":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":3,"docs":{"345":{"tf":1.0},"381":{"tf":1.0},"47":{"tf":1.0}}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"321":{"tf":1.0}}}}},"df":0,"docs":{}}}},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"2":{"b":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"125":{"tf":1.0},"187":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"278":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"l":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"259":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"ô":{"df":0,"docs":{},"m":{"df":1,"docs":{"249":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"393":{"tf":1.0}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"107":{"tf":1.0}}}}}}},"f":{"df":1,"docs":{"43":{"tf":1.0}}},"i":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"172":{"tf":1.0},"189":{"tf":1.0},"235":{"tf":1.0},"419":{"tf":1.0},"443":{"tf":1.0},"57":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"190":{"tf":1.0},"205":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}}}},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"328":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"x":{"df":2,"docs":{"348":{"tf":1.0},"422":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"102":{"tf":1.0}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"363":{"tf":1.0}},"é":{"df":1,"docs":{"295":{"tf":1.0}}}}}}},"df":2,"docs":{"327":{"tf":1.0},"432":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"253":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0}}}}}}}}}},"d":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"361":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"217":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"199":{"tf":1.0}}}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":4,"docs":{"359":{"tf":1.0},"363":{"tf":1.0},"399":{"tf":1.0},"416":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"402":{"tf":1.0}}}}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"43":{"tf":1.0}}}}}}}},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"389":{"tf":1.0},"390":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"331":{"tf":1.0},"401":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"t":{"df":7,"docs":{"120":{"tf":1.0},"123":{"tf":1.0},"356":{"tf":1.0},"373":{"tf":1.0},"406":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":27,"docs":{"1":{"tf":1.0},"110":{"tf":1.0},"139":{"tf":1.0},"155":{"tf":1.0},"163":{"tf":1.0},"164":{"tf":1.0},"172":{"tf":1.0},"180":{"tf":1.0},"191":{"tf":1.0},"192":{"tf":1.0},"193":{"tf":1.0},"194":{"tf":1.0},"20":{"tf":1.0},"209":{"tf":1.0},"284":{"tf":1.0},"372":{"tf":1.0},"373":{"tf":1.0},"374":{"tf":1.0},"375":{"tf":1.0},"376":{"tf":1.0},"416":{"tf":1.0},"442":{"tf":1.0},"447":{"tf":1.0},"57":{"tf":1.0},"65":{"tf":1.0},"79":{"tf":1.0},"96":{"tf":1.0}}}}}}}},"l":{"df":0,"docs":{},"o":{"b":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"124":{"tf":1.0},"201":{"tf":1.0},"268":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"135":{"tf":1.0},"251":{"tf":1.0},"256":{"tf":1.0},"306":{"tf":1.0},"31":{"tf":1.0}}},"df":0,"docs":{}}},"é":{"df":0,"docs":{},"n":{"df":0,"docs":{},"è":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"19":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"169":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"223":{"tf":1.0},"33":{"tf":1.0},"39":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"417":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"434":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":4,"docs":{"360":{"tf":1.0},"364":{"tf":1.0},"376":{"tf":1.0},"406":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"m":{"df":0,"docs":{},"x":{"df":2,"docs":{"418":{"tf":1.0},"438":{"tf":1.0}}}},"t":{"df":0,"docs":{},"p":{"df":3,"docs":{"114":{"tf":1.0},"119":{"tf":1.0},"94":{"tf":1.0}}}}},"y":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"d":{"df":4,"docs":{"244":{"tf":1.0},"248":{"tf":1.0},"259":{"tf":1.0},"420":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"353":{"tf":1.0}}}}},"df":0,"docs":{}},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"341":{"tf":1.0},"343":{"tf":1.0},"360":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"194":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":3,"docs":{"345":{"tf":1.0},"349":{"tf":1.0},"47":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":3,"docs":{"280":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"311":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"242":{"tf":1.0}}}}}},"df":1,"docs":{"104":{"tf":1.0}}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"429":{"tf":1.0}}}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":6,"docs":{"115":{"tf":1.0},"126":{"tf":1.0},"177":{"tf":1.0},"188":{"tf":1.0},"79":{"tf":1.0},"90":{"tf":1.0}}},"n":{"c":{"df":1,"docs":{"225":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"384":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"0":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"316":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"168":{"tf":1.0}}}},"é":{"df":1,"docs":{"296":{"tf":1.0}}}}}}}},"p":{"df":1,"docs":{"101":{"tf":1.0}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"326":{"tf":1.0}}}},"s":{"df":0,"docs":{},"u":{"df":2,"docs":{"27":{"tf":1.0},"45":{"tf":1.0}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":6,"docs":{"128":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"139":{"tf":1.0},"165":{"tf":1.0}}}}}},"l":{"a":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"434":{"tf":1.0},"45":{"tf":1.0}}}}},"df":27,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"116":{"tf":1.0},"13":{"tf":1.0},"130":{"tf":1.0},"150":{"tf":1.0},"158":{"tf":1.0},"163":{"tf":1.0},"168":{"tf":1.0},"170":{"tf":1.0},"173":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"209":{"tf":1.0},"221":{"tf":1.0},"241":{"tf":1.0},"255":{"tf":1.0},"260":{"tf":1.0},"29":{"tf":1.0},"291":{"tf":1.0},"346":{"tf":1.0},"35":{"tf":1.0},"352":{"tf":1.0},"365":{"tf":1.0},"386":{"tf":1.0},"4":{"tf":1.0},"85":{"tf":1.0}},"n":{"c":{"df":1,"docs":{"150":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"310":{"tf":1.0},"322":{"tf":1.0}}},"z":{"df":1,"docs":{"293":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"298":{"tf":1.0}}}}}},"df":1,"docs":{"150":{"tf":1.0}},"e":{"df":49,"docs":{"10":{"tf":1.0},"100":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"121":{"tf":1.0},"129":{"tf":1.0},"145":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"152":{"tf":1.0},"161":{"tf":1.0},"174":{"tf":1.0},"176":{"tf":1.0},"181":{"tf":1.0},"201":{"tf":1.0},"202":{"tf":1.0},"215":{"tf":1.0},"217":{"tf":1.0},"223":{"tf":1.0},"249":{"tf":1.0},"251":{"tf":1.0},"256":{"tf":1.0},"279":{"tf":1.0},"281":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"292":{"tf":1.0},"310":{"tf":1.0},"322":{"tf":1.0},"351":{"tf":1.0},"352":{"tf":1.0},"353":{"tf":1.0},"354":{"tf":1.0},"355":{"tf":1.0},"39":{"tf":1.4142135623730951},"419":{"tf":1.0},"45":{"tf":1.4142135623730951},"451":{"tf":1.0},"49":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.4142135623730951},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"96":{"tf":1.0}},"t":{"df":0,"docs":{},"’":{"df":3,"docs":{"114":{"tf":1.0},"117":{"tf":1.0},"94":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"243":{"tf":1.0}}}}},"i":{"b":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"2":{"df":1,"docs":{"350":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"351":{"tf":1.0}}},"t":{"df":4,"docs":{"198":{"tf":1.0},"200":{"tf":1.4142135623730951},"214":{"tf":1.0},"215":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"392":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"94":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"181":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"238":{"tf":1.0},"243":{"tf":1.0},"329":{"tf":1.0}}}}},"o":{"c":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"100":{"tf":1.0},"156":{"tf":1.0},"321":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"19":{"tf":1.0}}}}},"t":{"df":1,"docs":{"202":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":2,"docs":{"185":{"tf":1.0},"85":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":2,"docs":{"191":{"tf":1.0},"195":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"421":{"tf":1.0}}}},"o":{"df":0,"docs":{},"p":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"109":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"’":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"293":{"tf":1.0},"414":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"412":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":2,"docs":{"290":{"tf":1.0},"326":{"tf":1.0}}}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"187":{"tf":1.0},"217":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"a":{"c":{"df":1,"docs":{"298":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"147":{"tf":1.0}}}}}}}},"é":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"104":{"tf":1.0},"347":{"tf":1.0}}}},"df":0,"docs":{}}}}},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"100":{"tf":1.0},"150":{"tf":1.0},"163":{"tf":1.0},"94":{"tf":1.0}}}}}},"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":4,"docs":{"276":{"tf":1.0},"451":{"tf":1.0},"5":{"tf":1.0},"71":{"tf":1.0}}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"23":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}}},"df":0,"docs":{},"k":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"59":{"tf":1.0}}}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"394":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"208":{"tf":1.0},"396":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":3,"docs":{"365":{"tf":1.0},"403":{"tf":1.0},"43":{"tf":1.0}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":7,"docs":{"117":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"139":{"tf":1.0},"170":{"tf":1.0},"176":{"tf":1.0},"390":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"339":{"tf":1.0},"450":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"127":{"tf":1.0}}}},"df":1,"docs":{"154":{"tf":1.0}}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"79":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":4,"docs":{"128":{"tf":1.0},"132":{"tf":1.0},"165":{"tf":1.0},"94":{"tf":1.0}}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":6,"docs":{"174":{"tf":1.0},"272":{"tf":1.4142135623730951},"378":{"tf":1.0},"379":{"tf":1.0},"417":{"tf":1.0},"436":{"tf":1.4142135623730951}}},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"165":{"tf":1.0}},"i":{"df":4,"docs":{"105":{"tf":1.0},"252":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0}}}}},"è":{"df":0,"docs":{},"l":{"df":4,"docs":{"270":{"tf":1.0},"430":{"tf":1.0},"53":{"tf":1.0},"65":{"tf":1.0}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"207":{"tf":1.0}}}}}}}},"é":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"337":{"tf":1.0},"416":{"tf":1.0}}}}}}}},"n":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"333":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":2,"docs":{"333":{"tf":1.0},"428":{"tf":1.0}},"u":{"df":1,"docs":{"4":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":3,"docs":{"23":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":8,"docs":{"114":{"tf":1.0},"115":{"tf":1.0},"116":{"tf":1.0},"120":{"tf":1.0},"130":{"tf":1.0},"198":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.4142135623730951}}}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"238":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"209":{"tf":1.0}}},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"213":{"tf":1.0},"297":{"tf":1.0},"377":{"tf":1.0},"61":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":5,"docs":{"106":{"tf":1.0},"128":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"334":{"tf":1.0}}}},"df":0,"docs":{}}}}},"é":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"363":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"o":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":4,"docs":{"143":{"tf":1.0},"244":{"tf":1.0},"248":{"tf":1.0},"254":{"tf":1.0}}}}}},"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"14":{"tf":1.0},"285":{"tf":1.0},"80":{"tf":1.0}}}}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"199":{"tf":1.0},"389":{"tf":1.0},"392":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":1,"docs":{"150":{"tf":1.0}},"n":{"_":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"360":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"356":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":3,"docs":{"112":{"tf":1.0},"296":{"tf":1.0},"381":{"tf":1.0}}}}}}}}}},"r":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"98":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":2,"docs":{"174":{"tf":1.0},"19":{"tf":1.0}},"t":{"df":1,"docs":{"356":{"tf":1.0}}},"v":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"41":{"tf":1.0}}}}}}}},"p":{"a":{"df":10,"docs":{"13":{"tf":1.0},"156":{"tf":1.0},"199":{"tf":1.0},"23":{"tf":1.0},"264":{"tf":1.0},"284":{"tf":1.0},"300":{"tf":1.0},"383":{"tf":1.0},"391":{"tf":1.0},"88":{"tf":1.0}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"223":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"è":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"17":{"tf":1.0},"231":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"277":{"tf":1.0},"6":{"tf":1.0},"72":{"tf":1.0}}}}}},"df":8,"docs":{"158":{"tf":1.0},"199":{"tf":1.0},"200":{"tf":1.0},"243":{"tf":1.0},"349":{"tf":1.0},"369":{"tf":1.0},"393":{"tf":1.0},"395":{"tf":1.0}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"365":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"440":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"364":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"39":{"tf":1.0},"427":{"tf":1.0},"430":{"tf":1.0},"53":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"347":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"37":{"tf":1.0}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"é":{"df":1,"docs":{"190":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":12,"docs":{"102":{"tf":1.0},"103":{"tf":1.0},"107":{"tf":1.0},"109":{"tf":1.0},"110":{"tf":1.0},"114":{"tf":1.0},"120":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"128":{"tf":1.0},"132":{"tf":1.0}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"164":{"tf":1.0},"175":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"350":{"tf":1.0}}}},"è":{"df":0,"docs":{},"g":{"df":1,"docs":{"249":{"tf":1.0}}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":4,"docs":{"170":{"tf":1.0},"176":{"tf":1.0},"390":{"tf":1.0},"392":{"tf":1.0}}}},"df":0,"docs":{},"y":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":2,"docs":{"313":{"tf":1.0},"318":{"tf":1.0}}}}}}}}}},"df":0,"docs":{},"u":{"df":2,"docs":{"107":{"tf":1.0},"421":{"tf":1.0}}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"354":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"106":{"tf":1.0},"107":{"tf":1.0},"134":{"tf":1.0},"262":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"100":{"tf":1.0},"102":{"tf":1.0},"162":{"tf":1.0},"406":{"tf":1.0}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"197":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":3,"docs":{"109":{"tf":1.0},"212":{"tf":1.0},"291":{"tf":1.0}}}}}}}}}},"u":{"df":0,"docs":{},"r":{"df":7,"docs":{"251":{"tf":1.0},"256":{"tf":1.0},"279":{"tf":1.0},"354":{"tf":1.0},"421":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":4,"docs":{"10":{"tf":1.0},"281":{"tf":1.0},"347":{"tf":1.0},"76":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"25":{"tf":1.0}}},"z":{"df":2,"docs":{"284":{"tf":1.0},"294":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"174":{"tf":1.0},"272":{"tf":1.0},"436":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":3,"docs":{"135":{"tf":1.0},"306":{"tf":1.0},"31":{"tf":1.0}}}}}}},"df":10,"docs":{"149":{"tf":1.0},"15":{"tf":1.0},"171":{"tf":1.0},"286":{"tf":1.0},"288":{"tf":1.0},"308":{"tf":1.0},"323":{"tf":1.0},"403":{"tf":1.0},"81":{"tf":1.0},"99":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"13":{"tf":1.4142135623730951},"21":{"tf":1.0},"284":{"tf":1.4142135623730951},"294":{"tf":1.0},"86":{"tf":1.0},"92":{"tf":1.0}}}},"è":{"df":0,"docs":{},"r":{"df":1,"docs":{"302":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":5,"docs":{"189":{"tf":1.0},"234":{"tf":1.0},"240":{"tf":1.0},"249":{"tf":1.0},"415":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":1,"docs":{"357":{"tf":1.0}}}}}}}},"o":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"è":{"df":0,"docs":{},"m":{"df":2,"docs":{"183":{"tf":1.0},"184":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"24":{"tf":1.0},"301":{"tf":1.0},"89":{"tf":1.0}}}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"94":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"20":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"352":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"158":{"tf":1.0},"289":{"tf":1.0}}}}},"x":{"df":0,"docs":{},"i":{"df":1,"docs":{"445":{"tf":1.4142135623730951}}}}},"é":{"c":{"df":0,"docs":{},"é":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"245":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"103":{"tf":1.0},"111":{"tf":1.0}}},"z":{"df":1,"docs":{"291":{"tf":1.0}}}}}},"df":0,"docs":{}}},"ê":{"df":0,"docs":{},"t":{"df":1,"docs":{"128":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":3,"docs":{"27":{"tf":1.0},"41":{"tf":1.0},"69":{"tf":1.0}}}},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"321":{"tf":1.0},"425":{"tf":1.4142135623730951}}}}}},"q":{"a":{"df":2,"docs":{"365":{"tf":1.0},"388":{"tf":1.0}}},"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"128":{"tf":1.0},"147":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":1,"docs":{"1":{"tf":1.0}}},"i":{"df":2,"docs":{"161":{"tf":1.0},"2":{"tf":1.0}},"p":{"df":2,"docs":{"27":{"tf":1.0},"39":{"tf":1.0}}}},"’":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"1":{"tf":1.0}}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"158":{"tf":1.0}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"127":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"200":{"tf":1.0},"215":{"tf":1.0}}}}},"b":{"a":{"c":{"df":1,"docs":{"430":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"406":{"tf":1.0}}}},"t":{"df":0,"docs":{},"t":{"df":3,"docs":{"279":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"é":{"df":1,"docs":{"357":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"d":{"df":0,"docs":{},"é":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"245":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":1,"docs":{"131":{"tf":1.0}}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"203":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"118":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"o":{"df":1,"docs":{"419":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{".":{"df":0,"docs":{},"t":{"df":1,"docs":{"331":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"q":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"198":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":1,"docs":{"200":{"tf":1.0}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"27":{"tf":1.0},"41":{"tf":1.0},"69":{"tf":1.0}}}}},"i":{"df":10,"docs":{"149":{"tf":1.0},"15":{"tf":1.0},"171":{"tf":1.0},"200":{"tf":1.0},"286":{"tf":1.0},"288":{"tf":1.0},"323":{"tf":1.0},"395":{"tf":1.0},"81":{"tf":1.0},"99":{"tf":1.0}}},"ê":{"df":0,"docs":{},"t":{"df":1,"docs":{"422":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":1,"docs":{"371":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"137":{"tf":1.0},"448":{"tf":1.0}}}}},"df":3,"docs":{"316":{"tf":1.0},"404":{"tf":1.0},"55":{"tf":1.0}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"v":{"df":1,"docs":{"161":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"353":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"445":{"tf":1.4142135623730951}}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"335":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"145":{"tf":1.0},"151":{"tf":1.0},"154":{"tf":1.0},"156":{"tf":1.0},"161":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"312":{"tf":1.0},"316":{"tf":1.0},"392":{"tf":1.0}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"358":{"tf":1.0},"408":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"è":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":5,"docs":{"361":{"tf":1.0},"388":{"tf":1.0},"391":{"tf":1.0},"397":{"tf":1.0},"398":{"tf":1.0}}}}}},"é":{"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":4,"docs":{"134":{"tf":1.0},"22":{"tf":1.0},"299":{"tf":1.0},"87":{"tf":1.0}}}}}},"df":2,"docs":{"186":{"tf":1.0},"208":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":7,"docs":{"227":{"tf":1.0},"235":{"tf":1.0},"280":{"tf":1.0},"367":{"tf":1.0},"51":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}}},"g":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":11,"docs":{"243":{"tf":1.0},"246":{"tf":1.0},"247":{"tf":1.0},"248":{"tf":1.0},"252":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"255":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"215":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"314":{"tf":1.0},"429":{"tf":1.0},"83":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"u":{"df":1,"docs":{"97":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"427":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"181":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"ô":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":3,"docs":{"146":{"tf":1.0},"346":{"tf":1.0},"53":{"tf":1.0}}}}}},"s":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"129":{"tf":1.0},"350":{"tf":1.0}}},"u":{"df":0,"docs":{},"f":{"df":1,"docs":{"381":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":3,"docs":{"137":{"tf":1.0},"274":{"tf":1.0},"448":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"184":{"tf":1.0},"49":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"é":{"df":0,"docs":{},"m":{"a":{"df":5,"docs":{"241":{"tf":1.0},"260":{"tf":1.0},"348":{"tf":1.0},"386":{"tf":1.0},"57":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":5,"docs":{"146":{"tf":1.0},"150":{"tf":1.0},"156":{"tf":1.0},"448":{"tf":1.0},"450":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"353":{"tf":1.0}}}}}},"c":{"df":1,"docs":{"394":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"382":{"tf":1.0}}}}}},"df":2,"docs":{"161":{"tf":1.0},"33":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"171":{"tf":1.0},"355":{"tf":1.0}}}}},"i":{"c":{"df":6,"docs":{"262":{"tf":1.0},"337":{"tf":1.0},"359":{"tf":1.0},"363":{"tf":1.0},"384":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"105":{"tf":1.0},"106":{"tf":1.0}}}}}}},"t":{"df":1,"docs":{"319":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"162":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"102":{"tf":1.0},"112":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"356":{"tf":1.0}}}}}},"i":{"df":7,"docs":{"195":{"tf":1.0},"196":{"tf":1.0},"197":{"tf":1.0},"198":{"tf":1.0},"23":{"tf":1.0},"300":{"tf":1.0},"88":{"tf":1.0}}},"m":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"141":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"160":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"100":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"é":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"209":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"43":{"tf":1.0}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"355":{"tf":1.0}}},"h":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":1,"docs":{"193":{"tf":1.0}}}}}},"df":0,"docs":{}},"d":{"df":4,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"107":{"tf":1.0},"122":{"tf":1.0}}},"df":10,"docs":{"120":{"tf":1.0},"13":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"219":{"tf":1.0},"33":{"tf":1.0},"374":{"tf":1.0},"424":{"tf":1.0},"425":{"tf":1.0},"426":{"tf":1.0}}},"r":{"df":1,"docs":{"418":{"tf":1.0}}}},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"209":{"tf":1.0},"444":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"233":{"tf":1.0},"238":{"tf":1.0},"246":{"tf":1.0},"258":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":2,"docs":{"274":{"tf":1.0},"43":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"120":{"tf":1.0},"121":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"236":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"314":{"tf":1.0}},"é":{"df":1,"docs":{"3":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"z":{"df":1,"docs":{"85":{"tf":1.0}}}},"i":{"df":1,"docs":{"175":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"é":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"295":{"tf":1.0},"390":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":1,"docs":{"59":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"353":{"tf":1.0}}}}}}},"r":{"df":12,"docs":{"103":{"tf":1.0},"120":{"tf":1.0},"122":{"tf":1.0},"150":{"tf":1.0},"151":{"tf":1.0},"161":{"tf":1.0},"173":{"tf":1.0},"198":{"tf":1.0},"217":{"tf":1.0},"419":{"tf":1.0},"65":{"tf":1.0},"94":{"tf":1.0}}}},"y":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"177":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"x":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"d":{"df":2,"docs":{"446":{"tf":1.4142135623730951},"90":{"tf":1.0}}},"df":0,"docs":{}}},"è":{"df":0,"docs":{},"m":{"df":6,"docs":{"103":{"tf":1.0},"107":{"tf":1.0},"122":{"tf":1.0},"232":{"tf":1.0},"288":{"tf":1.0},"419":{"tf":1.0}}}}}}},"é":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"167":{"tf":1.0},"17":{"tf":1.0},"383":{"tf":1.0},"391":{"tf":1.0},"393":{"tf":1.0},"67":{"tf":1.0}}}}}}},"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"416":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"’":{"a":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"2":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"239":{"tf":1.0},"241":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"u":{"df":1,"docs":{"153":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":2,"docs":{"13":{"tf":1.0},"19":{"tf":1.0}},"p":{"df":0,"docs":{},"e":{"df":19,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.0},"288":{"tf":1.0},"289":{"tf":1.0},"290":{"tf":1.0},"291":{"tf":1.0},"292":{"tf":1.0},"293":{"tf":1.0},"294":{"tf":1.0},"301":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"89":{"tf":1.0}}}},"r":{"d":{"df":1,"docs":{"107":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":3,"docs":{"280":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"442":{"tf":1.0},"451":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"df":19,"docs":{"119":{"tf":1.0},"123":{"tf":1.0},"164":{"tf":1.0},"206":{"tf":1.0},"310":{"tf":1.0},"312":{"tf":1.0},"313":{"tf":1.0},"315":{"tf":1.0},"316":{"tf":1.0},"317":{"tf":1.0},"318":{"tf":1.0},"319":{"tf":1.0},"320":{"tf":1.0},"322":{"tf":1.0},"326":{"tf":1.0},"329":{"tf":1.0},"334":{"tf":1.0},"395":{"tf":1.0},"397":{"tf":1.0}}}}},"o":{"d":{"df":0,"docs":{},"o":{"df":72,"docs":{"12":{"tf":1.0},"136":{"tf":1.0},"138":{"tf":1.0},"140":{"tf":1.0},"142":{"tf":1.0},"144":{"tf":1.0},"216":{"tf":1.0},"218":{"tf":1.0},"220":{"tf":1.0},"222":{"tf":1.0},"224":{"tf":1.0},"226":{"tf":1.0},"228":{"tf":1.0},"230":{"tf":1.0},"26":{"tf":1.0},"261":{"tf":1.0},"263":{"tf":1.0},"265":{"tf":1.0},"267":{"tf":1.0},"269":{"tf":1.0},"271":{"tf":1.0},"273":{"tf":1.0},"275":{"tf":1.0},"28":{"tf":1.0},"283":{"tf":1.0},"30":{"tf":1.0},"303":{"tf":1.0},"305":{"tf":1.0},"307":{"tf":1.0},"309":{"tf":1.0},"32":{"tf":1.0},"336":{"tf":1.0},"338":{"tf":1.0},"34":{"tf":1.0},"340":{"tf":1.0},"342":{"tf":1.0},"344":{"tf":1.0},"36":{"tf":1.0},"366":{"tf":1.0},"368":{"tf":1.0},"38":{"tf":1.0},"385":{"tf":1.0},"387":{"tf":1.0},"40":{"tf":1.0},"405":{"tf":1.0},"407":{"tf":1.0},"409":{"tf":1.0},"411":{"tf":1.0},"42":{"tf":1.0},"431":{"tf":1.0},"433":{"tf":1.0},"435":{"tf":1.0},"437":{"tf":1.0},"439":{"tf":1.0},"44":{"tf":1.0},"441":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0},"91":{"tf":1.0},"93":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"17":{"tf":1.0}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"37":{"tf":1.0}}}}},"n":{"df":3,"docs":{"13":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":1,"docs":{"97":{"tf":1.0}}}}}}}},"u":{"df":1,"docs":{"381":{"tf":1.0}},"t":{"df":1,"docs":{"217":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"168":{"tf":1.0},"178":{"tf":1.0},"211":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"176":{"tf":1.0}}}}}},"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"83":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":1,"docs":{"96":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":6,"docs":{"11":{"tf":1.0},"278":{"tf":1.0},"282":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.0}}}}}}}}},"â":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":3,"docs":{"279":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"i":{"df":2,"docs":{"333":{"tf":1.0},"438":{"tf":1.0}}},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"132":{"tf":1.0}}}}}}}}}},"n":{"df":29,"docs":{"102":{"tf":1.0},"128":{"tf":1.0},"159":{"tf":1.0},"173":{"tf":1.0},"179":{"tf":1.0},"18":{"tf":1.0},"225":{"tf":1.0},"252":{"tf":1.0},"253":{"tf":1.0},"254":{"tf":1.0},"257":{"tf":1.0},"258":{"tf":1.0},"259":{"tf":1.0},"294":{"tf":1.0},"304":{"tf":1.0},"321":{"tf":1.0},"334":{"tf":1.0},"335":{"tf":1.0},"337":{"tf":1.0},"339":{"tf":1.0},"343":{"tf":1.0},"345":{"tf":1.0},"363":{"tf":1.4142135623730951},"365":{"tf":1.0},"37":{"tf":1.0},"41":{"tf":1.0},"428":{"tf":1.0},"47":{"tf":1.0},"94":{"tf":1.0}},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"246":{"tf":1.0},"247":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"310":{"tf":1.0},"312":{"tf":1.0}}}}},"df":0,"docs":{}}}},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"351":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"351":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"157":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"185":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"223":{"tf":1.0},"429":{"tf":1.0},"5":{"tf":1.0},"67":{"tf":1.0}}}}}}},"df":2,"docs":{"45":{"tf":1.0},"451":{"tf":1.0}},"é":{"df":1,"docs":{"359":{"tf":1.0}}}}}}}}},"v":{"1":{"df":2,"docs":{"404":{"tf":1.0},"55":{"tf":1.0}}},"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"243":{"tf":1.0},"255":{"tf":1.0}}}}},"i":{"d":{"df":5,"docs":{"106":{"tf":1.0},"112":{"tf":1.0},"204":{"tf":1.0},"205":{"tf":1.0},"402":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":6,"docs":{"152":{"tf":1.0},"153":{"tf":1.0},"229":{"tf":1.0},"238":{"tf":1.0},"249":{"tf":1.0},"382":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"128":{"tf":1.0},"356":{"tf":1.0}}}},"i":{"a":{"df":4,"docs":{"110":{"tf":1.0},"120":{"tf":1.0},"164":{"tf":1.0},"364":{"tf":1.0}}},"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"21":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"69":{"tf":1.0}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"214":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"r":{"df":3,"docs":{"198":{"tf":1.0},"284":{"tf":1.0},"294":{"tf":1.0}}}}},"s":{"df":2,"docs":{"272":{"tf":1.0},"436":{"tf":1.0}}},"u":{"df":0,"docs":{},"e":{"df":6,"docs":{"16":{"tf":1.0},"232":{"tf":1.0},"287":{"tf":1.0},"412":{"tf":1.0},"413":{"tf":1.0},"82":{"tf":1.0}}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"124":{"tf":1.0},"162":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"118":{"tf":1.0},"255":{"tf":1.0}}},"z":{"df":1,"docs":{"288":{"tf":1.0}}}}}}}}}},"w":{"df":0,"docs":{},"e":{"b":{"df":4,"docs":{"335":{"tf":1.0},"375":{"tf":1.0},"423":{"tf":1.0},"428":{"tf":1.0}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"341":{"tf":1.0}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"304":{"tf":1.0},"352":{"tf":1.0},"354":{"tf":1.0},"440":{"tf":1.0}}}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"308":{"tf":1.0}}}}}}}}}},"z":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"201":{"tf":1.0}}}}},"é":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"418":{"tf":1.0}}}}}}}}},"lang":"English","pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5"},"results_options":{"limit_results":30,"teaser_word_count":30},"search_options":{"bool":"OR","expand":true,"fields":{"body":{"boost":1},"breadcrumbs":{"boost":1},"title":{"boost":2}}}}'));
1 < \ No newline at end of file
A book/template/docker/docker-compose.minimal.yml
+101 -0
@@ -0,0 +1,101 @@
1 +# =============================================================================
2 +# Gitrust — Docker Compose minimal (dev local / évaluation)
3 +# =============================================================================
4 +# Usage :
5 +# cp template/env/dev-local.env .env
6 +# # Editer .env : JWT_SECRET (openssl rand -hex 32), ADMIN_PASSWORD
7 +# docker compose up -d
8 +# docker compose logs -f gitrust
9 +#
10 +# Ce fichier démarre uniquement les services indispensables :
11 +# - gitrust : application principale (HTTP :4000, SSH :2222)
12 +# - postgres : base de données PostgreSQL 15
13 +#
14 +# Pour une stack production (Redis sessions, SMTP local, CI runner) :
15 +# voir template/docker/docker-compose.production.yml
16 +# =============================================================================
17 +
18 +services:
19 +
20 + # ---------------------------------------------------------------------------
21 + # gitrust — application principale
22 + # ---------------------------------------------------------------------------
23 + gitrust:
24 + # Remplacer par l'image officielle publiée sur le registry du projet.
25 + # Format attendu : ghcr.io/<org>/gitrust:<tag>
26 + # Exemple : ghcr.io/gitrust/gitrust:latest
27 + image: ghcr.io/gitrust/gitrust:latest # <AJUSTER_REGISTRY_ET_TAG>
28 +
29 + depends_on:
30 + postgres:
31 + condition: service_healthy
32 +
33 + ports:
34 + # HTTP — interface web et API REST
35 + - "4000:4000"
36 + # SSH — git clone/push via SSH
37 + - "2222:2222"
38 +
39 + volumes:
40 + # Bare repos git (persistés entre redémarrages)
41 + - gitrust_repos:/opt/gitrust/data/repos
42 + # Clé hôte SSH (générée au premier démarrage, doit survivre aux redémarrages)
43 + - gitrust_keys:/opt/gitrust/data
44 +
45 + env_file:
46 + # Le .env doit être dans le même dossier que ce fichier (ou à la racine du projet).
47 + # Variables critiques à renseigner avant le premier démarrage :
48 + # DATABASE_URL, JWT_SECRET, ADMIN_PASSWORD
49 + - ./.env
50 +
51 + restart: unless-stopped
52 +
53 + healthcheck:
54 + test: ["CMD", "curl", "-f", "http://localhost:4000/api/v1/auth/me"]
55 + interval: 30s
56 + timeout: 10s
57 + retries: 5
58 + start_period: 20s
59 +
60 + # ---------------------------------------------------------------------------
61 + # postgres — base de données
62 + # ---------------------------------------------------------------------------
63 + postgres:
64 + image: postgres:15-alpine
65 +
66 + environment:
67 + # Ces valeurs doivent correspondre à DATABASE_URL dans .env.
68 + # Format : postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}
69 + POSTGRES_USER: gitrust
70 + POSTGRES_PASSWORD: gitrust # <CHANGER_EN_PRODUCTION>
71 + POSTGRES_DB: gitrust_dev
72 +
73 + volumes:
74 + - postgres_data:/var/lib/postgresql/data
75 +
76 + # Ne pas exposer PostgreSQL sur le réseau hôte en production.
77 + # Décommenter uniquement pour debug local (accès psql depuis l'hôte) :
78 + # ports:
79 + # - "127.0.0.1:5432:5432"
80 +
81 + restart: unless-stopped
82 +
83 + healthcheck:
84 + test: ["CMD-SHELL", "pg_isready -U gitrust -d gitrust_dev"]
85 + interval: 10s
86 + timeout: 5s
87 + retries: 5
88 +
89 +# -----------------------------------------------------------------------------
90 +# Volumes nommés — persistés sur le système hôte
91 +# -----------------------------------------------------------------------------
92 +volumes:
93 + # Bare repos git : contient tous les dépôts hébergés
94 + gitrust_repos:
95 +
96 + # Clé hôte SSH ed25519 — NE PAS SUPPRIMER après le premier démarrage.
97 + # La supprimer invalide les known_hosts de tous les utilisateurs.
98 + gitrust_keys:
99 +
100 + # Données PostgreSQL
101 + postgres_data:
A book/template/env/dev-local.env
+173 -0
@@ -0,0 +1,173 @@
1 +# =============================================================================
2 +# Gitrust — Configuration de developpement local
3 +# =============================================================================
4 +# Usage :
5 +# cp template/env/dev-local.env .env
6 +# $EDITOR .env # ajuster DATABASE_URL, JWT_SECRET, ADMIN_PASSWORD
7 +# docker compose up -d # demarre postgres puis gitrust
8 +#
9 +# Ce fichier cible un poste de dev local avec Docker Compose.
10 +# NE PAS utiliser tel quel en production — voir template/env/production-mono-machine.env
11 +# =============================================================================
12 +
13 +
14 +# =============================================================================
15 +# 1. BASE DE DONNEES
16 +# =============================================================================
17 +# Valeurs par defaut compatibles avec docker-compose.minimal.yml (service postgres).
18 +# Le mot de passe "gitrust" est acceptable en dev local uniquement.
19 +DATABASE_URL=postgres://gitrust:gitrust@localhost:5432/gitrust_dev
20 +
21 +
22 +# =============================================================================
23 +# 2. SERVEUR HTTP
24 +# =============================================================================
25 +# Accessible depuis localhost et le LAN local (pratique pour tester sur mobile).
26 +SERVER_HOST=0.0.0.0
27 +SERVER_PORT=4000
28 +
29 +
30 +# =============================================================================
31 +# 3. LOGGING
32 +# =============================================================================
33 +# Mode debug : toutes les requetes, migrations, sessions affichees.
34 +# Syntaxe avancee : "info,gitrust_core=debug,sea_orm=warn"
35 +RUST_LOG=debug
36 +
37 +
38 +# =============================================================================
39 +# 4. SERVEUR SSH GIT
40 +# =============================================================================
41 +# Cle hote generee automatiquement au premier demarrage si absente.
42 +# En dev : chemin relatif OK. En prod : chemin absolu obligatoire.
43 +# Permissions requises : 600, proprietaire = user qui lance gitrust.
44 +SSH_HOST_KEY_PATH=./data/ssh_host_ed25519_key
45 +
46 +# Port SSH non-privilegie — pas de conflit avec sshd systeme (port 22).
47 +SSH_PORT=2222
48 +SSH_LISTEN_ADDR=0.0.0.0
49 +
50 +# Affiché dans l'UI pour les instructions "Clone via SSH".
51 +SSH_PUBLIC_HOST=localhost
52 +
53 +
54 +# =============================================================================
55 +# 5. JWT & AUTHENTIFICATION
56 +# =============================================================================
57 +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
58 +# JWT_SECRET DOIT etre regenere avant tout usage reel.
59 +# Commande : openssl rand -hex 32
60 +# Les valeurs generiques ("change-me", "my-secret-key", etc.) sont REJETEES
61 +# au demarrage par AuthConfig::from_env().
62 +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
63 +JWT_SECRET=<REMPLACER_openssl_rand_-hex_32>
64 +
65 +JWT_EXPIRATION_MINUTES=15
66 +JWT_ISSUER=gitrust-dev
67 +REFRESH_TOKEN_EXPIRATION_DAYS=7
68 +REMEMBER_ME_EXPIRATION_DAYS=30
69 +
70 +
71 +# =============================================================================
72 +# 6. SESSIONS
73 +# =============================================================================
74 +SESSION_TIMEOUT_MINUTES=30
75 +# seaorm : persiste en base PostgreSQL — recommande meme en dev.
76 +# memory : volatil, perdu au redemarrage (dev ultra-rapide uniquement).
77 +SESSION_BACKEND=seaorm
78 +
79 +
80 +# =============================================================================
81 +# 7. RATE LIMITING — assoupli pour les tests
82 +# =============================================================================
83 +# Valeurs larges pour ne pas bloquer les tests intensifs en dev.
84 +# voir .env.example ligne 134 pour les valeurs de production recommandees.
85 +RATE_LIMIT_LOGIN_PER_MINUTE=60
86 +RATE_LIMIT_REFRESH_PER_MINUTE=120
87 +RATE_LIMIT_GENERAL_PER_MINUTE=1000
88 +
89 +
90 +# =============================================================================
91 +# 8. COOKIES & DEBUG
92 +# =============================================================================
93 +# APP_DEBUG=true desactive les cookies Secure pour HTTP local.
94 +# Ne jamais mettre true en production.
95 +APP_DEBUG=true
96 +COOKIE_SECURE=false
97 +COOKIE_SAME_SITE=Lax
98 +
99 +
100 +# =============================================================================
101 +# 9. ADMIN INITIAL
102 +# =============================================================================
103 +# Cree l'utilisateur admin au premier demarrage si la table users est vide.
104 +ADMIN_USERNAME=admin
105 +ADMIN_EMAIL=admin@localhost.dev
106 +# Remplacer par un mot de passe quelconque en dev (min 8 chars).
107 +ADMIN_PASSWORD=<REMPLACER_MOT_DE_PASSE_DEV>
108 +
109 +
110 +# =============================================================================
111 +# 10. EMAIL SMTP — desactive en dev
112 +# =============================================================================
113 +# SMTP non configure = gitrust demarre, mais les emails ne partent pas.
114 +# Pour tester les emails en local, utiliser Mailpit (docker run -p 1025:1025 -p 8025:8025 axllent/mailpit).
115 +# Puis decommenter les lignes ci-dessous :
116 +# SMTP_HOST=localhost
117 +# SMTP_PORT=1025
118 +# SMTP_USER=dev
119 +# SMTP_PASSWORD=dev
120 +# SMTP_FROM=noreply@localhost.dev
121 +# SMTP_FROM_NAME=Gitrust Dev
122 +# SMTP_USE_TLS=false
123 +# SMTP_USE_STARTTLS=false
124 +# SMTP_ACCEPT_INVALID_CERTS=true
125 +# EMAIL_BASE_URL=http://localhost:4000
126 +EMAIL_VALIDATION_REQUIRED=false
127 +
128 +
129 +# =============================================================================
130 +# 11. INSCRIPTION
131 +# =============================================================================
132 +# Ouvert en dev pour faciliter les tests multi-utilisateurs.
133 +ALLOW_REGISTRATION=true
134 +
135 +
136 +# =============================================================================
137 +# 12. APPLICATION
138 +# =============================================================================
139 +APP_NAME="Gitrust Dev"
140 +DEFAULT_LOCALE=fr
141 +
142 +
143 +# =============================================================================
144 +# 15. DEPOTS GIT
145 +# =============================================================================
146 +# Chemin relatif acceptable en dev (binaire lance depuis la racine du projet).
147 +# En prod : chemin absolu obligatoire (/opt/gitrust/data/repos).
148 +GIT_REPOS_BASE_PATH=./data/repos
149 +
150 +
151 +# =============================================================================
152 +# 18. CI/CD DAGGER — desactive en dev par defaut
153 +# =============================================================================
154 +# Mettre CI_ENABLED=true uniquement si dagger est installe et teste localement.
155 +CI_ENABLED=false
156 +CI_MAX_CONCURRENT=2
157 +CI_DEFAULT_TIMEOUT=3600
158 +CI_WORKSPACE_PATH=/tmp/gitrust-ci
159 +CI_LOG_RETENTION_DAYS=7
160 +
161 +
162 +# =============================================================================
163 +# 20. IMPORT DE DEPOTS EXTERNES
164 +# =============================================================================
165 +IMPORT_MAX_CONCURRENT=1
166 +IMPORT_TIMEOUT_SECS=1800
167 +
168 +
169 +# =============================================================================
170 +# 21. SBOM / DEPENDENCY-TRACK — desactive en dev
171 +# =============================================================================
172 +CI_SBOM_ENABLED=false
173 +CI_DTRACK_ENABLED=false
A book/template/index.html
+362 -0
@@ -0,0 +1,362 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Catalogue des templates - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/template/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="bibliothèque-de-templates-gitrust"><a class="header" href="#bibliothèque-de-templates-gitrust">Bibliothèque de templates gitrust</a></h1>
181 +<p>Bienvenue dans l’atelier gitrust. Chaque fichier ici est <strong>standalone et copiable tel quel</strong> — un fichier, un cas d’usage. Les commentaires internes suffisent à l’adapter. Pour les explications pédagogiques, référez-vous aux manuels qui pointent vers ces templates.</p>
182 +<blockquote>
183 +<p><strong>Convention</strong> : copiez le fichier qui correspond à votre cas, adaptez les valeurs marquées <code>CHANGE_ME</code>, puis supprimez les commentaires si vous le souhaitez. Ne modifiez pas les fichiers dans ce dépôt — travaillez toujours sur une copie locale.</p>
184 +</blockquote>
185 +<hr>
186 +<h2 id="fichiers-denvironnement-env"><a class="header" href="#fichiers-denvironnement-env">Fichiers d’environnement (<code>env/</code>)</a></h2>
187 +<div class="table-wrapper">
188 +<table>
189 +<thead>
190 +<tr><th>Fichier</th><th>Cas d’usage</th></tr>
191 +</thead>
192 +<tbody>
193 +<tr><td><a href="env/dev-local.env"><code>env/dev-local.env</code></a></td><td>Instance de développement local sur <code>localhost:4000</code> — PostgreSQL local, pas de TLS, debug activé</td></tr>
194 +<tr><td><a href="env/production-mono-machine.env"><code>env/production-mono-machine.env</code></a></td><td>Production mono-machine derrière reverse-proxy — PostgreSQL, SMTP, Redis sessions, TLS délégué</td></tr>
195 +<tr><td><a href="env/production-ci-heavy.env"><code>env/production-ci-heavy.env</code></a></td><td>Production avec CI runners distants intensifs — tuning pool de connexions, rate limiting ajusté</td></tr>
196 +<tr><td><a href="env/tests-e2e.env"><code>env/tests-e2e.env</code></a></td><td>Environnement E2E Playwright — base éphémère, seed de données, SMTP mock</td></tr>
197 +</tbody>
198 +</table>
199 +</div>
200 +<hr>
201 +<h2 id="stacks-docker-docker"><a class="header" href="#stacks-docker-docker">Stacks Docker (<code>docker/</code>)</a></h2>
202 +<div class="table-wrapper">
203 +<table>
204 +<thead>
205 +<tr><th>Fichier</th><th>Cas d’usage</th></tr>
206 +</thead>
207 +<tbody>
208 +<tr><td><a href="docker/docker-compose.minimal.yml"><code>docker/docker-compose.minimal.yml</code></a></td><td>Stack minimale : gitrust + PostgreSQL uniquement — idéale pour l’évaluation et les tutoriels</td></tr>
209 +<tr><td><a href="docker/docker-compose.production.yml"><code>docker/docker-compose.production.yml</code></a></td><td>Stack production : gitrust + PostgreSQL + Redis sessions + relay SMTP Postfix</td></tr>
210 +<tr><td><a href="docker/docker-compose.with-ci-runner.yml"><code>docker/docker-compose.with-ci-runner.yml</code></a></td><td>Stack production + CI runner Dagger en sidecar — pour instances avec builds fréquents</td></tr>
211 +<tr><td><a href="docker/podman-quadlet.container"><code>docker/podman-quadlet.container</code></a></td><td>Alternative Podman Quadlet — déploiement rootless systemd-native sans Docker daemon</td></tr>
212 +</tbody>
213 +</table>
214 +</div>
215 +<hr>
216 +<h2 id="reverse-proxy-reverse-proxy"><a class="header" href="#reverse-proxy-reverse-proxy">Reverse-proxy (<code>reverse-proxy/</code>)</a></h2>
217 +<div class="table-wrapper">
218 +<table>
219 +<thead>
220 +<tr><th>Fichier</th><th>Cas d’usage</th></tr>
221 +</thead>
222 +<tbody>
223 +<tr><td><a href="reverse-proxy/nginx-tls.conf"><code>reverse-proxy/nginx-tls.conf</code></a></td><td>Nginx avec TLS Let’s Encrypt — virtual host gitrust, headers de sécurité, proxy WebSocket SSE</td></tr>
224 +<tr><td><a href="reverse-proxy/caddy-Caddyfile"><code>reverse-proxy/caddy-Caddyfile</code></a></td><td>Caddyfile — TLS automatique, configuration minimale, idéal pour les petites instances</td></tr>
225 +<tr><td><a href="reverse-proxy/traefik-dynamic.yml"><code>reverse-proxy/traefik-dynamic.yml</code></a></td><td>Traefik config dynamique — intégration labels Docker, middlewares rate-limit et auth</td></tr>
226 +</tbody>
227 +</table>
228 +</div>
229 +<hr>
230 +<h2 id="systemd-systemd"><a class="header" href="#systemd-systemd">Systemd (<code>systemd/</code>)</a></h2>
231 +<div class="table-wrapper">
232 +<table>
233 +<thead>
234 +<tr><th>Fichier</th><th>Cas d’usage</th></tr>
235 +</thead>
236 +<tbody>
237 +<tr><td><a href="systemd/gitrust.service"><code>systemd/gitrust.service</code></a></td><td>Service systemd avec hardening AppArmor/seccomp — pour déploiement binaire natif sans Docker</td></tr>
238 +<tr><td><a href="systemd/gitrust-backup.timer"><code>systemd/gitrust-backup.timer</code></a></td><td>Timer systemd de sauvegarde quotidienne — déclenche <code>backup.sh</code> à 2h00 avec journalisation</td></tr>
239 +</tbody>
240 +</table>
241 +</div>
242 +<hr>
243 +<h2 id="configurations-ci-gitrust-ciyml-ci"><a class="header" href="#configurations-ci-gitrust-ciyml-ci">Configurations CI (<code>.gitrust-ci.yml</code>) (<code>ci/</code>)</a></h2>
244 +<div class="table-wrapper">
245 +<table>
246 +<thead>
247 +<tr><th>Fichier</th><th>Cas d’usage</th></tr>
248 +</thead>
249 +<tbody>
250 +<tr><td><a href="ci/rust.gitrust-ci.yml"><code>ci/rust.gitrust-ci.yml</code></a></td><td>Pipeline CI pour projet Rust — fmt, clippy, test, audit de dépendances, SBOM</td></tr>
251 +<tr><td><a href="ci/go.gitrust-ci.yml"><code>ci/go.gitrust-ci.yml</code></a></td><td>Pipeline CI pour projet Go — vet, staticcheck, test, build multi-arch</td></tr>
252 +<tr><td><a href="ci/python.gitrust-ci.yml"><code>ci/python.gitrust-ci.yml</code></a></td><td>Pipeline CI pour projet Python — ruff, mypy, pytest, packaging wheel</td></tr>
253 +<tr><td><a href="ci/node.gitrust-ci.yml"><code>ci/node.gitrust-ci.yml</code></a></td><td>Pipeline CI pour projet Node.js — ESLint, Vitest, build, audit npm</td></tr>
254 +<tr><td><a href="ci/dagger-power-mode/dagger.json"><code>ci/dagger-power-mode/dagger.json</code></a></td><td>Squelette Dagger Power Mode — module Go minimal à étendre pour pipelines complexes</td></tr>
255 +<tr><td><a href="ci/dagger-power-mode/main.go"><code>ci/dagger-power-mode/main.go</code></a></td><td>Module Dagger Go — fonctions build/test/publish prêtes à adapter</td></tr>
256 +</tbody>
257 +</table>
258 +</div>
259 +<hr>
260 +<h2 id="scripts-de-sauvegarde-et-restauration-backup"><a class="header" href="#scripts-de-sauvegarde-et-restauration-backup">Scripts de sauvegarde et restauration (<code>backup/</code>)</a></h2>
261 +<div class="table-wrapper">
262 +<table>
263 +<thead>
264 +<tr><th>Fichier</th><th>Cas d’usage</th></tr>
265 +</thead>
266 +<tbody>
267 +<tr><td><a href="backup/backup.sh"><code>backup/backup.sh</code></a></td><td>Sauvegarde complète — <code>pg_dump</code> + <code>rsync</code> des dépôts bare + copie des clés SSH host</td></tr>
268 +<tr><td><a href="backup/restore.sh"><code>backup/restore.sh</code></a></td><td>Restauration complète depuis une archive de sauvegarde — avec vérification d’intégrité</td></tr>
269 +</tbody>
270 +</table>
271 +</div>
272 +<hr>
273 +<h2 id="clients-api-dexemple-api-clients"><a class="header" href="#clients-api-dexemple-api-clients">Clients API d’exemple (<code>api-clients/</code>)</a></h2>
274 +<p>Ces exemples illustrent l’authentification par Personal Access Token (PAT) et les opérations CRUD de base sur l’API REST gitrust v1.</p>
275 +<div class="table-wrapper">
276 +<table>
277 +<thead>
278 +<tr><th>Fichier</th><th>Cas d’usage</th></tr>
279 +</thead>
280 +<tbody>
281 +<tr><td><a href="api-clients/python-create-repo.py"><code>api-clients/python-create-repo.py</code></a></td><td>Client Python — créer un dépôt via l’API v1 avec <code>httpx</code> et PAT</td></tr>
282 +<tr><td><a href="api-clients/rust-list-repos.rs"><code>api-clients/rust-list-repos.rs</code></a></td><td>Client Rust — lister les dépôts avec pagination via <code>reqwest</code> et PAT</td></tr>
283 +<tr><td><a href="api-clients/curl-pat-auth.sh"><code>api-clients/curl-pat-auth.sh</code></a></td><td>Shell curl — exemples d’authentification PAT, GET/POST/DELETE sur les endpoints principaux</td></tr>
284 +</tbody>
285 +</table>
286 +</div>
287 +<hr>
288 +<h2 id="scripts-de-migration-migration"><a class="header" href="#scripts-de-migration-migration">Scripts de migration (<code>migration/</code>)</a></h2>
289 +<div class="table-wrapper">
290 +<table>
291 +<thead>
292 +<tr><th>Fichier</th><th>Cas d’usage</th></tr>
293 +</thead>
294 +<tbody>
295 +<tr><td><a href="migration/from-gitea.sh"><code>migration/from-gitea.sh</code></a></td><td>Import en masse depuis Gitea — dépôts, membres, issues via le worker d’import gitrust</td></tr>
296 +<tr><td><a href="migration/from-forgejo.sh"><code>migration/from-forgejo.sh</code></a></td><td>Import en masse depuis Forgejo — même mécanique, adaptée à l’API Forgejo</td></tr>
297 +</tbody>
298 +</table>
299 +</div>
300 +<hr>
301 +<h2 id="comment-utiliser-ces-templates-depuis-les-manuels"><a class="header" href="#comment-utiliser-ces-templates-depuis-les-manuels">Comment utiliser ces templates depuis les manuels</a></h2>
302 +<p>Les manuels narratifs pointent vers ces fichiers depuis leurs sections how-to. Par exemple :</p>
303 +<ul>
304 +<li><code>administration_manual/how-to/configurer-smtp.md</code> → <em>« Copiez <code>template/env/production-mono-machine.env</code> puis… »</em></li>
305 +<li><code>administration_manual/tutorials/01-installation-docker.md</code> → <em>« La stack s’appuie sur <code>template/docker/docker-compose.minimal.yml</code> »</em></li>
306 +<li><code>developer_manual/how-to/implementer-endpoint-api.md</code> → <em>« Testez avec <code>template/api-clients/curl-pat-auth.sh</code> »</em></li>
307 +</ul>
308 +<p>Les templates ne contiennent pas d’explication pédagogique — tout le contexte se trouve dans les manuels.</p>
309 +
310 + </main>
311 +
312 + <nav class="nav-wrapper" aria-label="Page navigation">
313 + <!-- Mobile navigation buttons -->
314 + <a rel="prev" href="../developer_manual/explanation/patron-worker-async.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
315 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
316 + </a>
317 +
318 +
319 + <div style="clear: both"></div>
320 + </nav>
321 + </div>
322 + </div>
323 +
324 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
325 + <a rel="prev" href="../developer_manual/explanation/patron-worker-async.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
326 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
327 + </a>
328 +
329 + </nav>
330 +
331 + </div>
332 +
333 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
334 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
335 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
336 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
337 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
338 +
339 +
340 +
341 + <script>
342 + window.playground_copyable = true;
343 + </script>
344 +
345 +
346 + <script src="../elasticlunr-ef4e11c1.min.js"></script>
347 + <script src="../mark-09e88c2c.min.js"></script>
348 + <script src="../searcher-c2a407aa.js"></script>
349 +
350 + <script src="../clipboard-1626706a.min.js"></script>
351 + <script src="../highlight-abc7f01d.js"></script>
352 + <script src="../book-a0b12cfe.js"></script>
353 +
354 + <!-- Custom JS scripts -->
355 + <script src="../theme/mermaid-eefea253.min.js"></script>
356 + <script src="../theme/mermaid-init-ccf746f1.js"></script>
357 +
358 +
359 +
360 + </div>
361 + </body>
362 +</html>
A book/template/reverse-proxy/nginx-tls.conf
+208 -0
@@ -0,0 +1,208 @@
1 +# =============================================================================
2 +# Gitrust — Reverse proxy Nginx avec TLS (Let's Encrypt)
3 +# =============================================================================
4 +# Déploiement :
5 +# sudo cp template/reverse-proxy/nginx-tls.conf /etc/nginx/sites-available/gitrust
6 +# sudo ln -s /etc/nginx/sites-available/gitrust /etc/nginx/sites-enabled/gitrust
7 +# sudo nginx -t && sudo systemctl reload nginx
8 +#
9 +# TLS (Let's Encrypt, après que le bloc HTTP ci-dessous soit actif) :
10 +# sudo certbot --nginx -d <YOUR_DOMAIN>
11 +#
12 +# SSH git :
13 +# Nginx HTTP ne peut pas proxifier SSH. Deux options :
14 +# 1) Exposer le port 2222 directement dans le firewall (recommandé, simple)
15 +# 2) Proxy stream nginx sur :22 → 127.0.0.1:2222 (voir commentaire en bas)
16 +# Prérequis : paquet libnginx-mod-stream + bloc stream{} dans nginx.conf
17 +# =============================================================================
18 +
19 +upstream gitrust_backend {
20 + server 127.0.0.1:4000;
21 + keepalive 32;
22 +}
23 +
24 +# =============================================================================
25 +# HTTP — redirection HTTPS + ACME challenge Let's Encrypt
26 +# =============================================================================
27 +server {
28 + listen 80;
29 + listen [::]:80;
30 + server_name <YOUR_DOMAIN>; # Remplacer par le FQDN de l'instance
31 +
32 + # Répertoire de validation certbot — doit être accessible avant TLS
33 + location /.well-known/acme-challenge/ {
34 + root /var/www/html;
35 + }
36 +
37 + # Tout le reste → HTTPS permanent
38 + location / {
39 + return 301 https://$host$request_uri;
40 + }
41 +}
42 +
43 +# =============================================================================
44 +# HTTPS — reverse proxy vers gitrust
45 +# =============================================================================
46 +server {
47 + listen 443 ssl;
48 + listen [::]:443 ssl;
49 + # Syntaxe nginx >= 1.25. Pour nginx <= 1.24, remplacer les deux lignes
50 + # listen ci-dessus par :
51 + # listen 443 ssl http2;
52 + # listen [::]:443 ssl http2;
53 + http2 on;
54 + server_name <YOUR_DOMAIN>; # Remplacer par le FQDN de l'instance
55 +
56 + # -------------------------------------------------------------------------
57 + # TLS — certificats Let's Encrypt (remplis automatiquement par certbot)
58 + # -------------------------------------------------------------------------
59 + # Décommenter après : sudo certbot --nginx -d <YOUR_DOMAIN>
60 + # ssl_certificate /etc/letsencrypt/live/<YOUR_DOMAIN>/fullchain.pem;
61 + # ssl_certificate_key /etc/letsencrypt/live/<YOUR_DOMAIN>/privkey.pem;
62 + # include /etc/letsencrypt/options-ssl-nginx.conf;
63 + # ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
64 +
65 + # Certificat auto-signé pour valider la config avant certbot (commenter après)
66 + ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
67 + ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
68 +
69 + # Hardening TLS
70 + ssl_protocols TLSv1.2 TLSv1.3;
71 + ssl_prefer_server_ciphers on;
72 + ssl_session_cache shared:SSL:10m;
73 + ssl_session_timeout 1d;
74 +
75 + # -------------------------------------------------------------------------
76 + # En-têtes de sécurité
77 + # -------------------------------------------------------------------------
78 + # HSTS : force HTTPS pendant 1 an, inclut sous-domaines.
79 + # Attention : n'activer includeSubDomains que si TOUS les sous-domaines ont TLS.
80 + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
81 +
82 + # Empêche le navigateur de détecter automatiquement le type MIME (MIME sniffing)
83 + add_header X-Content-Type-Options "nosniff" always;
84 +
85 + # Politique referrer : envoie l'origine complète pour requêtes same-origin,
86 + # uniquement l'origine (sans path) pour requêtes cross-origin HTTPS.
87 + add_header Referrer-Policy "strict-origin-when-cross-origin" always;
88 +
89 + # Empêche l'intégration dans des iframes d'autres origines
90 + add_header X-Frame-Options "SAMEORIGIN" always;
91 +
92 + # -------------------------------------------------------------------------
93 + # Taille max des corps de requête
94 + # -------------------------------------------------------------------------
95 + # 1G pour les git push HTTP de gros dépôts (monorepos, dépôts avec LFS,
96 + # binaires commités). Réduire si l'espace disque est contraint.
97 + # La location git spécifique ci-dessous passe à 2G pour les push volumineux.
98 + client_max_body_size 1G;
99 + client_body_buffer_size 128k;
100 +
101 + # -------------------------------------------------------------------------
102 + # Timeouts étendus pour clone/push de gros dépôts
103 + # -------------------------------------------------------------------------
104 + proxy_connect_timeout 300s;
105 + proxy_send_timeout 3600s;
106 + proxy_read_timeout 3600s;
107 + send_timeout 3600s;
108 +
109 + # -------------------------------------------------------------------------
110 + # Logs
111 + # -------------------------------------------------------------------------
112 + access_log /var/log/nginx/gitrust.access.log;
113 + error_log /var/log/nginx/gitrust.error.log warn;
114 +
115 + # =========================================================================
116 + # Route principale — toutes les pages et l'API REST
117 + # =========================================================================
118 + location / {
119 + proxy_pass http://gitrust_backend;
120 + proxy_http_version 1.1;
121 +
122 + # En-têtes forwarded
123 + proxy_set_header Host $host;
124 + proxy_set_header X-Real-IP $remote_addr;
125 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
126 + proxy_set_header X-Forwarded-Proto $scheme;
127 + proxy_set_header X-Forwarded-Host $host;
128 + proxy_set_header X-Forwarded-Port $server_port;
129 +
130 + # Keep-alive vers l'upstream (connexion réutilisée)
131 + proxy_set_header Connection "";
132 +
133 + # SSE et WebSocket — désactiver la mise en tampon pour :
134 + # - notifications temps réel (/notifications/stream)
135 + # - logs CI en streaming (/repos/.../ci/.../logs)
136 + # - HTMX SSE
137 + proxy_buffering off;
138 + proxy_cache off;
139 + proxy_set_header X-Accel-Buffering no;
140 + }
141 +
142 + # =========================================================================
143 + # Git smart HTTP — clone et push via HTTPS
144 + # =========================================================================
145 + # Pattern : /<owner>/<repo>.git/info/refs, /git-upload-pack, /git-receive-pack
146 + location ~ ^/[^/]+/[^/]+\.git/ {
147 + proxy_pass http://gitrust_backend;
148 + proxy_http_version 1.1;
149 +
150 + proxy_set_header Host $host;
151 + proxy_set_header X-Real-IP $remote_addr;
152 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
153 + proxy_set_header X-Forwarded-Proto $scheme;
154 +
155 + # Désactiver la mise en tampon côté client ET serveur pour les push/clone
156 + proxy_buffering off;
157 + proxy_request_buffering off;
158 + proxy_cache off;
159 +
160 + # Push de gros dépôts peut dépasser 1G (monorepos lourds)
161 + client_max_body_size 2G;
162 + }
163 +
164 + # =========================================================================
165 + # Assets statiques — optionnel : servir directement depuis le filesystem
166 + # =========================================================================
167 + # Décommenter si les fichiers /opt/gitrust/static/ sont lisibles par www-data.
168 + # Réduit la charge sur gitrust pour CSS/JS/images (cache navigateur 7 jours).
169 + # location ^~ /static/ {
170 + # alias /opt/gitrust/static/;
171 + # expires 7d;
172 + # add_header Cache-Control "public, immutable";
173 + # try_files $uri @gitrust;
174 + # }
175 + # location @gitrust {
176 + # proxy_pass http://gitrust_backend;
177 + # }
178 +}
179 +
180 +# =============================================================================
181 +# BONUS — Proxy SSH git via nginx stream (port 22 → gitrust SSH :2222)
182 +# =============================================================================
183 +# ATTENTION : ce bloc `stream {}` est de niveau RACINE nginx et NE PEUT PAS
184 +# être placé dans ce fichier (qui est inclus dans le bloc http{}).
185 +# Le décommenter ici provoquerait : nginx: [emerg] "stream" directive is not allowed here
186 +#
187 +# Méthode correcte : ajouter le bloc ci-dessous À LA FIN de /etc/nginx/nginx.conf
188 +# (hors du bloc http{}), ou dans /etc/nginx/conf.d-stream/gitrust-ssh.conf
189 +# inclus au niveau racine.
190 +#
191 +# Prérequis :
192 +# - paquet libnginx-mod-stream installé (apt install libnginx-mod-stream)
193 +# - sshd système déplacé sur un autre port (ex: 2022) si l'hôte est aussi administré par SSH
194 +#
195 +# stream {
196 +# upstream gitrust_ssh {
197 +# server 127.0.0.1:2222;
198 +# }
199 +# server {
200 +# listen 22;
201 +# listen [::]:22;
202 +# proxy_pass gitrust_ssh;
203 +# proxy_timeout 1h;
204 +# proxy_connect_timeout 30s;
205 +# error_log /var/log/nginx/gitrust-ssh-stream.log;
206 +# }
207 +# }
208 +# =============================================================================
A book/template/systemd/gitrust.service
+112 -0
@@ -0,0 +1,112 @@
1 +# =============================================================================
2 +# Gitrust — unité systemd avec hardening
3 +# =============================================================================
4 +# Déploiement :
5 +# sudo cp template/systemd/gitrust.service /etc/systemd/system/gitrust.service
6 +# sudo systemctl daemon-reload
7 +# sudo systemctl enable --now gitrust
8 +# sudo systemctl status gitrust
9 +#
10 +# Prérequis :
11 +# - Binaire installé dans /opt/gitrust/gitrust (chmod 755, owned by root)
12 +# - Utilisateur et groupe système créés :
13 +# sudo useradd --system --no-create-home --shell /usr/sbin/nologin gitrust
14 +# - Répertoire de données créé et attribué :
15 +# sudo mkdir -p /opt/gitrust/data/repos /opt/gitrust/data/ssh_keys
16 +# sudo chown -R gitrust:gitrust /opt/gitrust/data
17 +# - Fichier .env placé dans /opt/gitrust/.env (chmod 640, owned by root:gitrust)
18 +# =============================================================================
19 +
20 +[Unit]
21 +Description=Gitrust - Self-hosted Git platform
22 +Documentation=https://gitrust.eu/docs
23 +After=network.target postgresql.service
24 +# postgresql.service : décommenter si PostgreSQL tourne sur la même machine.
25 +# Retirer si PostgreSQL est distant (le service ne doit pas bloquer au démarrage).
26 +Wants=network.target
27 +
28 +[Service]
29 +Type=simple
30 +User=gitrust
31 +Group=gitrust
32 +WorkingDirectory=/opt/gitrust
33 +EnvironmentFile=/opt/gitrust/.env
34 +ExecStart=/opt/gitrust/gitrust
35 +Restart=on-failure
36 +RestartSec=5
37 +
38 +# -------------------------------------------------------------------------
39 +# Hardening systemd
40 +# -------------------------------------------------------------------------
41 +
42 +# Interdit d'acquérir de nouveaux privilèges via execve (setuid/setgid binaires)
43 +NoNewPrivileges=true
44 +
45 +# Système de fichiers racine en lecture seule (hors ReadWritePaths ci-dessous)
46 +ProtectSystem=strict
47 +
48 +# Répertoires home des utilisateurs inaccessibles
49 +ProtectHome=true
50 +
51 +# /tmp et /var/tmp privés et isolés du reste du système
52 +PrivateTmp=true
53 +
54 +# Périphériques physiques inaccessibles (/dev/sda, /dev/mem, etc.)
55 +PrivateDevices=true
56 +
57 +# Espace de noms réseau partagé avec l'hôte (gitrust a besoin du réseau)
58 +# PrivateNetwork=false # valeur par défaut, laisser commenté
59 +
60 +# Protège le kernel et les paramètres systèmes (/proc/sys, /sys, etc.)
61 +ProtectKernelTunables=true
62 +ProtectKernelModules=true
63 +ProtectKernelLogs=true
64 +ProtectControlGroups=true
65 +
66 +# Restreint les appels système aux familles nécessaires pour Rust/tokio/git2
67 +SystemCallArchitectures=native
68 +
69 +# Limite les familles d'appels système autorisés
70 +# @system-service couvre les appels standards pour un serveur (network, io, process)
71 +SystemCallFilter=@system-service @network-io @file-system @io-event @process
72 +
73 +# Interdit d'écrire en mémoire exécutable (exploits JIT/shellcode)
74 +MemoryDenyWriteExecute=true
75 +
76 +# Interdit de modifier les capabilities du processus
77 +RestrictRealtime=true
78 +LockPersonality=true
79 +
80 +# Limite les namespaces créables (gitrust n'a pas besoin de créer de namespaces)
81 +RestrictNamespaces=true
82 +
83 +# -------------------------------------------------------------------------
84 +# Chemins en écriture — tout le reste est en lecture seule (ProtectSystem=strict)
85 +# -------------------------------------------------------------------------
86 +# Repos git bare, clé hôte SSH, workspaces CI temporaires
87 +ReadWritePaths=/opt/gitrust/data
88 +# Workspace CI (si CI_WORKSPACE_PATH pointe ailleurs que /opt/gitrust/data)
89 +# ReadWritePaths=/var/lib/gitrust-ci
90 +
91 +# -------------------------------------------------------------------------
92 +# Ports privilégiés (< 1024)
93 +# -------------------------------------------------------------------------
94 +# Décommenter UNIQUEMENT si gitrust doit écouter directement sur :80 ou :22.
95 +# En configuration normale (nginx devant, SSH sur :2222), cette ligne est inutile.
96 +# AmbientCapabilities=CAP_NET_BIND_SERVICE
97 +
98 +# -------------------------------------------------------------------------
99 +# Journalisation
100 +# -------------------------------------------------------------------------
101 +StandardOutput=journal
102 +StandardError=journal
103 +SyslogIdentifier=gitrust
104 +
105 +# -------------------------------------------------------------------------
106 +# Limites de ressources
107 +# -------------------------------------------------------------------------
108 +# Nombre de fichiers ouverts — gros dépôts git2 + connexions SSH simultanées
109 +LimitNOFILE=65536
110 +
111 +[Install]
112 +WantedBy=multi-user.target
A book/theme/mermaid-eefea253.min.js
+2609 -0
@@ -0,0 +1,2609 @@
1 +/* MIT Licensed. Copyright (c) 2014 - 2022 Knut Sveidqvist */
2 +/* For license information please see https://github.com/mermaid-js/mermaid/blob/develop/LICENSE */
3 +"use strict";var __esbuild_esm_mermaid=(()=>{var B2e=Object.create;var by=Object.defineProperty;var F2e=Object.getOwnPropertyDescriptor;var $2e=Object.getOwnPropertyNames;var z2e=Object.getPrototypeOf,G2e=Object.prototype.hasOwnProperty;var o=(t,e)=>by(t,"name",{value:e,configurable:!0});var N=(t,e)=>()=>(t&&(e=t(t=0)),e);var Mi=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),hr=(t,e)=>{for(var r in e)by(t,r,{get:e[r],enumerable:!0})},L4=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of $2e(e))!G2e.call(t,i)&&i!==r&&by(t,i,{get:()=>e[i],enumerable:!(n=F2e(e,i))||n.enumerable});return t},Sr=(t,e,r)=>(L4(t,e,"default"),r&&L4(r,e,"default")),Sa=(t,e,r)=>(r=t!=null?B2e(z2e(t)):{},L4(e||!t||!t.__esModule?by(r,"default",{value:t,enumerable:!0}):r,t)),V2e=t=>L4(by({},"__esModule",{value:!0}),t);var R4=Mi((EC,SC)=>{"use strict";(function(t,e){typeof EC=="object"&&typeof SC<"u"?SC.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs=e()})(EC,function(){"use strict";var t=1e3,e=6e4,r=36e5,n="millisecond",i="second",a="minute",s="hour",l="day",u="week",h="month",f="quarter",d="year",p="date",m="Invalid Date",g=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,v={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:o(function(k){var L=["th","st","nd","rd"],R=k%100;return"["+k+(L[(R-20)%10]||L[R]||L[0])+"]"},"ordinal")},x=o(function(k,L,R){var O=String(k);return!O||O.length>=L?k:""+Array(L+1-O.length).join(R)+k},"m"),b={s:x,z:o(function(k){var L=-k.utcOffset(),R=Math.abs(L),O=Math.floor(R/60),M=R%60;return(L<=0?"+":"-")+x(O,2,"0")+":"+x(M,2,"0")},"z"),m:o(function k(L,R){if(L.date()<R.date())return-k(R,L);var O=12*(R.year()-L.year())+(R.month()-L.month()),M=L.clone().add(O,h),B=R-M<0,F=L.clone().add(O+(B?-1:1),h);return+(-(O+(R-M)/(B?M-F:F-M))||0)},"t"),a:o(function(k){return k<0?Math.ceil(k)||0:Math.floor(k)},"a"),p:o(function(k){return{M:h,y:d,w:u,d:l,D:p,h:s,m:a,s:i,ms:n,Q:f}[k]||String(k||"").toLowerCase().replace(/s$/,"")},"p"),u:o(function(k){return k===void 0},"u")},w="en",C={};C[w]=v;var T="$isDayjsObject",E=o(function(k){return k instanceof I||!(!k||!k[T])},"S"),A=o(function k(L,R,O){var M;if(!L)return w;if(typeof L=="string"){var B=L.toLowerCase();C[B]&&(M=B),R&&(C[B]=R,M=B);var F=L.split("-");if(!M&&F.length>1)return k(F[0])}else{var P=L.name;C[P]=L,M=P}return!O&&M&&(w=M),M||!O&&w},"t"),S=o(function(k,L){if(E(k))return k.clone();var R=typeof L=="object"?L:{};return R.date=k,R.args=arguments,new I(R)},"O"),_=b;_.l=A,_.i=E,_.w=function(k,L){return S(k,{locale:L.$L,utc:L.$u,x:L.$x,$offset:L.$offset})};var I=function(){function k(R){this.$L=A(R.locale,null,!0),this.parse(R),this.$x=this.$x||R.x||{},this[T]=!0}o(k,"M");var L=k.prototype;return L.parse=function(R){this.$d=function(O){var M=O.date,B=O.utc;if(M===null)return new Date(NaN);if(_.u(M))return new Date;if(M instanceof Date)return new Date(M);if(typeof M=="string"&&!/Z$/i.test(M)){var F=M.match(g);if(F){var P=F[2]-1||0,z=(F[7]||"0").substring(0,3);return B?new Date(Date.UTC(F[1],P,F[3]||1,F[4]||0,F[5]||0,F[6]||0,z)):new Date(F[1],P,F[3]||1,F[4]||0,F[5]||0,F[6]||0,z)}}return new Date(M)}(R),this.init()},L.init=function(){var R=this.$d;this.$y=R.getFullYear(),this.$M=R.getMonth(),this.$D=R.getDate(),this.$W=R.getDay(),this.$H=R.getHours(),this.$m=R.getMinutes(),this.$s=R.getSeconds(),this.$ms=R.getMilliseconds()},L.$utils=function(){return _},L.isValid=function(){return this.$d.toString()!==m},L.isSame=function(R,O){var M=S(R);return this.startOf(O)<=M&&M<=this.endOf(O)},L.isAfter=function(R,O){return S(R)<this.startOf(O)},L.isBefore=function(R,O){return this.endOf(O)<S(R)},L.$g=function(R,O,M){return _.u(R)?this[O]:this.set(M,R)},L.unix=function(){return Math.floor(this.valueOf()/1e3)},L.valueOf=function(){return this.$d.getTime()},L.startOf=function(R,O){var M=this,B=!!_.u(O)||O,F=_.p(R),P=o(function(le,he){var K=_.w(M.$u?Date.UTC(M.$y,he,le):new Date(M.$y,he,le),M);return B?K:K.endOf(l)},"l"),z=o(function(le,he){return _.w(M.toDate()[le].apply(M.toDate("s"),(B?[0,0,0,0]:[23,59,59,999]).slice(he)),M)},"$"),$=this.$W,H=this.$M,Q=this.$D,j="set"+(this.$u?"UTC":"");switch(F){case d:return B?P(1,0):P(31,11);case h:return B?P(1,H):P(0,H+1);case u:var ie=this.$locale().weekStart||0,ne=($<ie?$+7:$)-ie;return P(B?Q-ne:Q+(6-ne),H);case l:case p:return z(j+"Hours",0);case s:return z(j+"Minutes",1);case a:return z(j+"Seconds",2);case i:return z(j+"Milliseconds",3);default:return this.clone()}},L.endOf=function(R){return this.startOf(R,!1)},L.$set=function(R,O){var M,B=_.p(R),F="set"+(this.$u?"UTC":""),P=(M={},M[l]=F+"Date",M[p]=F+"Date",M[h]=F+"Month",M[d]=F+"FullYear",M[s]=F+"Hours",M[a]=F+"Minutes",M[i]=F+"Seconds",M[n]=F+"Milliseconds",M)[B],z=B===l?this.$D+(O-this.$W):O;if(B===h||B===d){var $=this.clone().set(p,1);$.$d[P](z),$.init(),this.$d=$.set(p,Math.min(this.$D,$.daysInMonth())).$d}else P&&this.$d[P](z);return this.init(),this},L.set=function(R,O){return this.clone().$set(R,O)},L.get=function(R){return this[_.p(R)]()},L.add=function(R,O){var M,B=this;R=Number(R);var F=_.p(O),P=o(function(H){var Q=S(B);return _.w(Q.date(Q.date()+Math.round(H*R)),B)},"y");if(F===h)return this.set(h,this.$M+R);if(F===d)return this.set(d,this.$y+R);if(F===l)return P(1);if(F===u)return P(7);var z=(M={},M[a]=e,M[s]=r,M[i]=t,M)[F]||1,$=this.$d.getTime()+R*z;return _.w($,this)},L.subtract=function(R,O){return this.add(-1*R,O)},L.format=function(R){var O=this,M=this.$locale();if(!this.isValid())return M.invalidDate||m;var B=R||"YYYY-MM-DDTHH:mm:ssZ",F=_.z(this),P=this.$H,z=this.$m,$=this.$M,H=M.weekdays,Q=M.months,j=M.meridiem,ie=o(function(he,K,X,te){return he&&(he[K]||he(O,B))||X[K].slice(0,te)},"h"),ne=o(function(he){return _.s(P%12||12,he,"0")},"d"),le=j||function(he,K,X){var te=he<12?"AM":"PM";return X?te.toLowerCase():te};return B.replace(y,function(he,K){return K||function(X){switch(X){case"YY":return String(O.$y).slice(-2);case"YYYY":return _.s(O.$y,4,"0");case"M":return $+1;case"MM":return _.s($+1,2,"0");case"MMM":return ie(M.monthsShort,$,Q,3);case"MMMM":return ie(Q,$);case"D":return O.$D;case"DD":return _.s(O.$D,2,"0");case"d":return String(O.$W);case"dd":return ie(M.weekdaysMin,O.$W,H,2);case"ddd":return ie(M.weekdaysShort,O.$W,H,3);case"dddd":return H[O.$W];case"H":return String(P);case"HH":return _.s(P,2,"0");case"h":return ne(1);case"hh":return ne(2);case"a":return le(P,z,!0);case"A":return le(P,z,!1);case"m":return String(z);case"mm":return _.s(z,2,"0");case"s":return String(O.$s);case"ss":return _.s(O.$s,2,"0");case"SSS":return _.s(O.$ms,3,"0");case"Z":return F}return null}(he)||F.replace(":","")})},L.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},L.diff=function(R,O,M){var B,F=this,P=_.p(O),z=S(R),$=(z.utcOffset()-this.utcOffset())*e,H=this-z,Q=o(function(){return _.m(F,z)},"D");switch(P){case d:B=Q()/12;break;case h:B=Q();break;case f:B=Q()/3;break;case u:B=(H-$)/6048e5;break;case l:B=(H-$)/864e5;break;case s:B=H/r;break;case a:B=H/e;break;case i:B=H/t;break;default:B=H}return M?B:_.a(B)},L.daysInMonth=function(){return this.endOf(h).$D},L.$locale=function(){return C[this.$L]},L.locale=function(R,O){if(!R)return this.$L;var M=this.clone(),B=A(R,O,!0);return B&&(M.$L=B),M},L.clone=function(){return _.w(this.$d,this)},L.toDate=function(){return new Date(this.valueOf())},L.toJSON=function(){return this.isValid()?this.toISOString():null},L.toISOString=function(){return this.$d.toISOString()},L.toString=function(){return this.$d.toUTCString()},k}(),D=I.prototype;return S.prototype=D,[["$ms",n],["$s",i],["$m",a],["$H",s],["$W",l],["$M",h],["$y",d],["$D",p]].forEach(function(k){D[k[1]]=function(L){return this.$g(L,k[0],k[1])}}),S.extend=function(k,L){return k.$i||(k(L,I,S),k.$i=!0),S},S.locale=A,S.isDayjs=E,S.unix=function(k){return S(1e3*k)},S.en=C[w],S.Ls=C,S.p={},S})});var CF,eu,Y,wy,bo,vt=N(()=>{"use strict";CF=Sa(R4(),1),eu={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},Y={trace:o((...t)=>{},"trace"),debug:o((...t)=>{},"debug"),info:o((...t)=>{},"info"),warn:o((...t)=>{},"warn"),error:o((...t)=>{},"error"),fatal:o((...t)=>{},"fatal")},wy=o(function(t="fatal"){let e=eu.fatal;typeof t=="string"?t.toLowerCase()in eu&&(e=eu[t]):typeof t=="number"&&(e=t),Y.trace=()=>{},Y.debug=()=>{},Y.info=()=>{},Y.warn=()=>{},Y.error=()=>{},Y.fatal=()=>{},e<=eu.fatal&&(Y.fatal=console.error?console.error.bind(console,bo("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",bo("FATAL"))),e<=eu.error&&(Y.error=console.error?console.error.bind(console,bo("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",bo("ERROR"))),e<=eu.warn&&(Y.warn=console.warn?console.warn.bind(console,bo("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",bo("WARN"))),e<=eu.info&&(Y.info=console.info?console.info.bind(console,bo("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",bo("INFO"))),e<=eu.debug&&(Y.debug=console.debug?console.debug.bind(console,bo("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",bo("DEBUG"))),e<=eu.trace&&(Y.trace=console.debug?console.debug.bind(console,bo("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",bo("TRACE")))},"setLogLevel"),bo=o(t=>`%c${(0,CF.default)().format("ss.SSS")} : ${t} : `,"format")});var U2e,e0,CC,AF,N4=N(()=>{"use strict";U2e=Object.freeze({left:0,top:0,width:16,height:16}),e0=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),CC=Object.freeze({...U2e,...e0}),AF=Object.freeze({...CC,body:"",hidden:!1})});var H2e,_F,DF=N(()=>{"use strict";N4();H2e=Object.freeze({width:null,height:null}),_F=Object.freeze({...H2e,...e0})});var AC,M4,LF=N(()=>{"use strict";AC=o((t,e,r,n="")=>{let i=t.split(":");if(t.slice(0,1)==="@"){if(i.length<2||i.length>3)return null;n=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){let l=i.pop(),u=i.pop(),h={provider:i.length>0?i[0]:n,prefix:u,name:l};return e&&!M4(h)?null:h}let a=i[0],s=a.split("-");if(s.length>1){let l={provider:n,prefix:s.shift(),name:s.join("-")};return e&&!M4(l)?null:l}if(r&&n===""){let l={provider:n,prefix:"",name:a};return e&&!M4(l,r)?null:l}return null},"stringToIcon"),M4=o((t,e)=>t?!!((e&&t.prefix===""||t.prefix)&&t.name):!1,"validateIconName")});function RF(t,e){let r={};!t.hFlip!=!e.hFlip&&(r.hFlip=!0),!t.vFlip!=!e.vFlip&&(r.vFlip=!0);let n=((t.rotate||0)+(e.rotate||0))%4;return n&&(r.rotate=n),r}var NF=N(()=>{"use strict";o(RF,"mergeIconTransformations")});function _C(t,e){let r=RF(t,e);for(let n in AF)n in e0?n in t&&!(n in r)&&(r[n]=e0[n]):n in e?r[n]=e[n]:n in t&&(r[n]=t[n]);return r}var MF=N(()=>{"use strict";N4();NF();o(_C,"mergeIconData")});function IF(t,e){let r=t.icons,n=t.aliases||Object.create(null),i=Object.create(null);function a(s){if(r[s])return i[s]=[];if(!(s in i)){i[s]=null;let l=n[s]&&n[s].parent,u=l&&a(l);u&&(i[s]=[l].concat(u))}return i[s]}return o(a,"resolve"),(e||Object.keys(r).concat(Object.keys(n))).forEach(a),i}var OF=N(()=>{"use strict";o(IF,"getIconsTree")});function PF(t,e,r){let n=t.icons,i=t.aliases||Object.create(null),a={};function s(l){a=_C(n[l]||i[l],a)}return o(s,"parse"),s(e),r.forEach(s),_C(t,a)}function DC(t,e){if(t.icons[e])return PF(t,e,[]);let r=IF(t,[e])[e];return r?PF(t,e,r):null}var BF=N(()=>{"use strict";MF();OF();o(PF,"internalGetIconData");o(DC,"getIconData")});function LC(t,e,r){if(e===1)return t;if(r=r||100,typeof t=="number")return Math.ceil(t*e*r)/r;if(typeof t!="string")return t;let n=t.split(W2e);if(n===null||!n.length)return t;let i=[],a=n.shift(),s=q2e.test(a);for(;;){if(s){let l=parseFloat(a);isNaN(l)?i.push(a):i.push(Math.ceil(l*e*r)/r)}else i.push(a);if(a=n.shift(),a===void 0)return i.join("");s=!s}}var W2e,q2e,FF=N(()=>{"use strict";W2e=/(-?[0-9.]*[0-9]+[0-9.]*)/g,q2e=/^-?[0-9.]*[0-9]+[0-9.]*$/g;o(LC,"calculateSize")});function Y2e(t,e="defs"){let r="",n=t.indexOf("<"+e);for(;n>=0;){let i=t.indexOf(">",n),a=t.indexOf("</"+e);if(i===-1||a===-1)break;let s=t.indexOf(">",a);if(s===-1)break;r+=t.slice(i+1,a).trim(),t=t.slice(0,n).trim()+t.slice(s+1)}return{defs:r,content:t}}function X2e(t,e){return t?"<defs>"+t+"</defs>"+e:e}function $F(t,e,r){let n=Y2e(t);return X2e(n.defs,e+n.content+r)}var zF=N(()=>{"use strict";o(Y2e,"splitSVGDefs");o(X2e,"mergeDefsAndContent");o($F,"wrapSVGContent")});function RC(t,e){let r={...CC,...t},n={..._F,...e},i={left:r.left,top:r.top,width:r.width,height:r.height},a=r.body;[r,n].forEach(y=>{let v=[],x=y.hFlip,b=y.vFlip,w=y.rotate;x?b?w+=2:(v.push("translate("+(i.width+i.left).toString()+" "+(0-i.top).toString()+")"),v.push("scale(-1 1)"),i.top=i.left=0):b&&(v.push("translate("+(0-i.left).toString()+" "+(i.height+i.top).toString()+")"),v.push("scale(1 -1)"),i.top=i.left=0);let C;switch(w<0&&(w-=Math.floor(w/4)*4),w=w%4,w){case 1:C=i.height/2+i.top,v.unshift("rotate(90 "+C.toString()+" "+C.toString()+")");break;case 2:v.unshift("rotate(180 "+(i.width/2+i.left).toString()+" "+(i.height/2+i.top).toString()+")");break;case 3:C=i.width/2+i.left,v.unshift("rotate(-90 "+C.toString()+" "+C.toString()+")");break}w%2===1&&(i.left!==i.top&&(C=i.left,i.left=i.top,i.top=C),i.width!==i.height&&(C=i.width,i.width=i.height,i.height=C)),v.length&&(a=$F(a,'<g transform="'+v.join(" ")+'">',"</g>"))});let s=n.width,l=n.height,u=i.width,h=i.height,f,d;s===null?(d=l===null?"1em":l==="auto"?h:l,f=LC(d,u/h)):(f=s==="auto"?u:s,d=l===null?LC(f,h/u):l==="auto"?h:l);let p={},m=o((y,v)=>{j2e(v)||(p[y]=v.toString())},"setAttr");m("width",f),m("height",d);let g=[i.left,i.top,u,h];return p.viewBox=g.join(" "),{attributes:p,viewBox:g,body:a}}var j2e,GF=N(()=>{"use strict";N4();DF();FF();zF();j2e=o(t=>t==="unset"||t==="undefined"||t==="none","isUnsetKeyword");o(RC,"iconToSVG")});function NC(t,e=Q2e){let r=[],n;for(;n=K2e.exec(t);)r.push(n[1]);if(!r.length)return t;let i="suffix"+(Math.random()*16777216|Date.now()).toString(16);return r.forEach(a=>{let s=typeof e=="function"?e(a):e+(Z2e++).toString(),l=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");t=t.replace(new RegExp('([#;"])('+l+')([")]|\\.[a-z])',"g"),"$1"+s+i+"$3")}),t=t.replace(new RegExp(i,"g"),""),t}var K2e,Q2e,Z2e,VF=N(()=>{"use strict";K2e=/\sid="(\S+)"/g,Q2e="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16),Z2e=0;o(NC,"replaceIDs")});function MC(t,e){let r=t.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(let n in e)r+=" "+n+'="'+e[n]+'"';return'<svg xmlns="http://www.w3.org/2000/svg"'+r+">"+t+"</svg>"}var UF=N(()=>{"use strict";o(MC,"iconToHTML")});var WF=Mi((iit,HF)=>{"use strict";var t0=1e3,r0=t0*60,n0=r0*60,Wf=n0*24,J2e=Wf*7,exe=Wf*365.25;HF.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return txe(t);if(r==="number"&&isFinite(t))return e.long?nxe(t):rxe(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function txe(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*exe;case"weeks":case"week":case"w":return r*J2e;case"days":case"day":case"d":return r*Wf;case"hours":case"hour":case"hrs":case"hr":case"h":return r*n0;case"minutes":case"minute":case"mins":case"min":case"m":return r*r0;case"seconds":case"second":case"secs":case"sec":case"s":return r*t0;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}o(txe,"parse");function rxe(t){var e=Math.abs(t);return e>=Wf?Math.round(t/Wf)+"d":e>=n0?Math.round(t/n0)+"h":e>=r0?Math.round(t/r0)+"m":e>=t0?Math.round(t/t0)+"s":t+"ms"}o(rxe,"fmtShort");function nxe(t){var e=Math.abs(t);return e>=Wf?I4(t,e,Wf,"day"):e>=n0?I4(t,e,n0,"hour"):e>=r0?I4(t,e,r0,"minute"):e>=t0?I4(t,e,t0,"second"):t+" ms"}o(nxe,"fmtLong");function I4(t,e,r,n){var i=e>=r*1.5;return Math.round(t/r)+" "+n+(i?"s":"")}o(I4,"plural")});var YF=Mi((sit,qF)=>{"use strict";function ixe(t){r.debug=r,r.default=r,r.coerce=u,r.disable=s,r.enable=i,r.enabled=l,r.humanize=WF(),r.destroy=h,Object.keys(t).forEach(f=>{r[f]=t[f]}),r.names=[],r.skips=[],r.formatters={};function e(f){let d=0;for(let p=0;p<f.length;p++)d=(d<<5)-d+f.charCodeAt(p),d|=0;return r.colors[Math.abs(d)%r.colors.length]}o(e,"selectColor"),r.selectColor=e;function r(f){let d,p=null,m,g;function y(...v){if(!y.enabled)return;let x=y,b=Number(new Date),w=b-(d||b);x.diff=w,x.prev=d,x.curr=b,d=b,v[0]=r.coerce(v[0]),typeof v[0]!="string"&&v.unshift("%O");let C=0;v[0]=v[0].replace(/%([a-zA-Z%])/g,(E,A)=>{if(E==="%%")return"%";C++;let S=r.formatters[A];if(typeof S=="function"){let _=v[C];E=S.call(x,_),v.splice(C,1),C--}return E}),r.formatArgs.call(x,v),(x.log||r.log).apply(x,v)}return o(y,"debug"),y.namespace=f,y.useColors=r.useColors(),y.color=r.selectColor(f),y.extend=n,y.destroy=r.destroy,Object.defineProperty(y,"enabled",{enumerable:!0,configurable:!1,get:o(()=>p!==null?p:(m!==r.namespaces&&(m=r.namespaces,g=r.enabled(f)),g),"get"),set:o(v=>{p=v},"set")}),typeof r.init=="function"&&r.init(y),y}o(r,"createDebug");function n(f,d){let p=r(this.namespace+(typeof d>"u"?":":d)+f);return p.log=this.log,p}o(n,"extend");function i(f){r.save(f),r.namespaces=f,r.names=[],r.skips=[];let d=(typeof f=="string"?f:"").trim().replace(" ",",").split(",").filter(Boolean);for(let p of d)p[0]==="-"?r.skips.push(p.slice(1)):r.names.push(p)}o(i,"enable");function a(f,d){let p=0,m=0,g=-1,y=0;for(;p<f.length;)if(m<d.length&&(d[m]===f[p]||d[m]==="*"))d[m]==="*"?(g=m,y=p,m++):(p++,m++);else if(g!==-1)m=g+1,y++,p=y;else return!1;for(;m<d.length&&d[m]==="*";)m++;return m===d.length}o(a,"matchesTemplate");function s(){let f=[...r.names,...r.skips.map(d=>"-"+d)].join(",");return r.enable(""),f}o(s,"disable");function l(f){for(let d of r.skips)if(a(f,d))return!1;for(let d of r.names)if(a(f,d))return!0;return!1}o(l,"enabled");function u(f){return f instanceof Error?f.stack||f.message:f}o(u,"coerce");function h(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return o(h,"destroy"),r.enable(r.load()),r}o(ixe,"setup");qF.exports=ixe});var XF=Mi((qs,O4)=>{"use strict";qs.formatArgs=sxe;qs.save=oxe;qs.load=lxe;qs.useColors=axe;qs.storage=cxe();qs.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();qs.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function axe(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let t;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(t=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(t[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}o(axe,"useColors");function sxe(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+O4.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,n=0;t[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(r++,i==="%c"&&(n=r))}),t.splice(n,0,e)}o(sxe,"formatArgs");qs.log=console.debug||console.log||(()=>{});function oxe(t){try{t?qs.storage.setItem("debug",t):qs.storage.removeItem("debug")}catch{}}o(oxe,"save");function lxe(){let t;try{t=qs.storage.getItem("debug")}catch{}return!t&&typeof process<"u"&&"env"in process&&(t=process.env.DEBUG),t}o(lxe,"load");function cxe(){try{return localStorage}catch{}}o(cxe,"localstorage");O4.exports=YF()(qs);var{formatters:uxe}=O4.exports;uxe.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var uit,jF=N(()=>{"use strict";LF();BF();GF();VF();UF();uit=Sa(XF(),1)});var OC,IC,KF,P4,hxe,wo,tu=N(()=>{"use strict";vt();jF();OC={body:'<g><rect width="80" height="80" style="fill: #087ebf; stroke-width: 0px;"/><text transform="translate(21.16 64.67)" style="fill: #fff; font-family: ArialMT, Arial; font-size: 67.75px;"><tspan x="0" y="0">?</tspan></text></g>',height:80,width:80},IC=new Map,KF=new Map,P4=o(t=>{for(let e of t){if(!e.name)throw new Error('Invalid icon loader. Must have a "name" property with non-empty string value.');if(Y.debug("Registering icon pack:",e.name),"loader"in e)KF.set(e.name,e.loader);else if("icons"in e)IC.set(e.name,e.icons);else throw Y.error("Invalid icon loader:",e),new Error('Invalid icon loader. Must have either "icons" or "loader" property.')}},"registerIconPacks"),hxe=o(async(t,e)=>{let r=AC(t,!0,e!==void 0);if(!r)throw new Error(`Invalid icon name: ${t}`);let n=r.prefix||e;if(!n)throw new Error(`Icon name must contain a prefix: ${t}`);let i=IC.get(n);if(!i){let s=KF.get(n);if(!s)throw new Error(`Icon set not found: ${r.prefix}`);try{i={...await s(),prefix:n},IC.set(n,i)}catch(l){throw Y.error(l),new Error(`Failed to load icon set: ${r.prefix}`)}}let a=DC(i,r.name);if(!a)throw new Error(`Icon not found: ${t}`);return a},"getRegisteredIconData"),wo=o(async(t,e)=>{let r;try{r=await hxe(t,e?.fallbackPrefix)}catch(a){Y.error(a),r=OC}let n=RC(r,e);return MC(NC(n.body),n.attributes)},"getIconSVG")});function B4(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=Array.from(typeof t=="string"?[t]:t);n[n.length-1]=n[n.length-1].replace(/\r?\n([\t ]*)$/,"");var i=n.reduce(function(l,u){var h=u.match(/\n([\t ]+|(?!\s).)/g);return h?l.concat(h.map(function(f){var d,p;return(p=(d=f.match(/[\t ]/g))===null||d===void 0?void 0:d.length)!==null&&p!==void 0?p:0})):l},[]);if(i.length){var a=new RegExp(`
4 +[ ]{`+Math.min.apply(Math,i)+"}","g");n=n.map(function(l){return l.replace(a,`
5 +`)})}n[0]=n[0].replace(/^\r?\n/,"");var s=n[0];return e.forEach(function(l,u){var h=s.match(/(?:^|\n)( *)$/),f=h?h[1]:"",d=l;typeof l=="string"&&l.includes(`
6 +`)&&(d=String(l).split(`
7 +`).map(function(p,m){return m===0?p:""+f+p}).join(`
8 +`)),s+=d+n[u+1]}),s}var PC=N(()=>{"use strict";o(B4,"dedent")});var F4,qf,QF,$4=N(()=>{"use strict";F4=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,qf=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,QF=/\s*%%.*\n/gm});var i0,BC=N(()=>{"use strict";i0=class extends Error{static{o(this,"UnknownDiagramError")}constructor(e){super(e),this.name="UnknownDiagramError"}}});var Yf,a0,z4,FC,ZF,Xf=N(()=>{"use strict";vt();$4();BC();Yf={},a0=o(function(t,e){t=t.replace(F4,"").replace(qf,"").replace(QF,`
9 +`);for(let[r,{detector:n}]of Object.entries(Yf))if(n(t,e))return r;throw new i0(`No diagram type detected matching given configuration for text: ${t}`)},"detectType"),z4=o((...t)=>{for(let{id:e,detector:r,loader:n}of t)FC(e,r,n)},"registerLazyLoadedDiagrams"),FC=o((t,e,r)=>{Yf[t]&&Y.warn(`Detector with key ${t} already exists. Overwriting.`),Yf[t]={detector:e,loader:r},Y.debug(`Detector with key ${t} added${r?" with loader":""}`)},"addDetector"),ZF=o(t=>Yf[t].loader,"getDiagramLoader")});var Ty,JF,$C=N(()=>{"use strict";Ty=function(){var t=o(function($e,Re,Ie,be){for(Ie=Ie||{},be=$e.length;be--;Ie[$e[be]]=Re);return Ie},"o"),e=[1,24],r=[1,25],n=[1,26],i=[1,27],a=[1,28],s=[1,63],l=[1,64],u=[1,65],h=[1,66],f=[1,67],d=[1,68],p=[1,69],m=[1,29],g=[1,30],y=[1,31],v=[1,32],x=[1,33],b=[1,34],w=[1,35],C=[1,36],T=[1,37],E=[1,38],A=[1,39],S=[1,40],_=[1,41],I=[1,42],D=[1,43],k=[1,44],L=[1,45],R=[1,46],O=[1,47],M=[1,48],B=[1,50],F=[1,51],P=[1,52],z=[1,53],$=[1,54],H=[1,55],Q=[1,56],j=[1,57],ie=[1,58],ne=[1,59],le=[1,60],he=[14,42],K=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],X=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],te=[1,82],J=[1,83],se=[1,84],ue=[1,85],Z=[12,14,42],Se=[12,14,33,42],ce=[12,14,33,42,76,77,79,80],ae=[12,33],Oe=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],ge={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:o(function(Re,Ie,be,W,de,re,oe){var V=re.length-1;switch(de){case 3:W.setDirection("TB");break;case 4:W.setDirection("BT");break;case 5:W.setDirection("RL");break;case 6:W.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:W.setC4Type(re[V-3]);break;case 19:W.setTitle(re[V].substring(6)),this.$=re[V].substring(6);break;case 20:W.setAccDescription(re[V].substring(15)),this.$=re[V].substring(15);break;case 21:this.$=re[V].trim(),W.setTitle(this.$);break;case 22:case 23:this.$=re[V].trim(),W.setAccDescription(this.$);break;case 28:re[V].splice(2,0,"ENTERPRISE"),W.addPersonOrSystemBoundary(...re[V]),this.$=re[V];break;case 29:re[V].splice(2,0,"SYSTEM"),W.addPersonOrSystemBoundary(...re[V]),this.$=re[V];break;case 30:W.addPersonOrSystemBoundary(...re[V]),this.$=re[V];break;case 31:re[V].splice(2,0,"CONTAINER"),W.addContainerBoundary(...re[V]),this.$=re[V];break;case 32:W.addDeploymentNode("node",...re[V]),this.$=re[V];break;case 33:W.addDeploymentNode("nodeL",...re[V]),this.$=re[V];break;case 34:W.addDeploymentNode("nodeR",...re[V]),this.$=re[V];break;case 35:W.popBoundaryParseStack();break;case 39:W.addPersonOrSystem("person",...re[V]),this.$=re[V];break;case 40:W.addPersonOrSystem("external_person",...re[V]),this.$=re[V];break;case 41:W.addPersonOrSystem("system",...re[V]),this.$=re[V];break;case 42:W.addPersonOrSystem("system_db",...re[V]),this.$=re[V];break;case 43:W.addPersonOrSystem("system_queue",...re[V]),this.$=re[V];break;case 44:W.addPersonOrSystem("external_system",...re[V]),this.$=re[V];break;case 45:W.addPersonOrSystem("external_system_db",...re[V]),this.$=re[V];break;case 46:W.addPersonOrSystem("external_system_queue",...re[V]),this.$=re[V];break;case 47:W.addContainer("container",...re[V]),this.$=re[V];break;case 48:W.addContainer("container_db",...re[V]),this.$=re[V];break;case 49:W.addContainer("container_queue",...re[V]),this.$=re[V];break;case 50:W.addContainer("external_container",...re[V]),this.$=re[V];break;case 51:W.addContainer("external_container_db",...re[V]),this.$=re[V];break;case 52:W.addContainer("external_container_queue",...re[V]),this.$=re[V];break;case 53:W.addComponent("component",...re[V]),this.$=re[V];break;case 54:W.addComponent("component_db",...re[V]),this.$=re[V];break;case 55:W.addComponent("component_queue",...re[V]),this.$=re[V];break;case 56:W.addComponent("external_component",...re[V]),this.$=re[V];break;case 57:W.addComponent("external_component_db",...re[V]),this.$=re[V];break;case 58:W.addComponent("external_component_queue",...re[V]),this.$=re[V];break;case 60:W.addRel("rel",...re[V]),this.$=re[V];break;case 61:W.addRel("birel",...re[V]),this.$=re[V];break;case 62:W.addRel("rel_u",...re[V]),this.$=re[V];break;case 63:W.addRel("rel_d",...re[V]),this.$=re[V];break;case 64:W.addRel("rel_l",...re[V]),this.$=re[V];break;case 65:W.addRel("rel_r",...re[V]),this.$=re[V];break;case 66:W.addRel("rel_b",...re[V]),this.$=re[V];break;case 67:re[V].splice(0,1),W.addRel("rel",...re[V]),this.$=re[V];break;case 68:W.updateElStyle("update_el_style",...re[V]),this.$=re[V];break;case 69:W.updateRelStyle("update_rel_style",...re[V]),this.$=re[V];break;case 70:W.updateLayoutConfig("update_layout_config",...re[V]),this.$=re[V];break;case 71:this.$=[re[V]];break;case 72:re[V].unshift(re[V-1]),this.$=re[V];break;case 73:case 75:this.$=re[V].trim();break;case 74:let xe={};xe[re[V-1].trim()]=re[V].trim(),this.$=xe;break;case 76:this.$="";break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{13:70,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{13:71,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{13:72,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{13:73,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{14:[1,74]},t(he,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le}),t(he,[2,14]),t(K,[2,16],{12:[1,76]}),t(he,[2,36],{12:[1,77]}),t(X,[2,19]),t(X,[2,20]),{25:[1,78]},{27:[1,79]},t(X,[2,23]),{35:80,75:81,76:te,77:J,79:se,80:ue},{35:86,75:81,76:te,77:J,79:se,80:ue},{35:87,75:81,76:te,77:J,79:se,80:ue},{35:88,75:81,76:te,77:J,79:se,80:ue},{35:89,75:81,76:te,77:J,79:se,80:ue},{35:90,75:81,76:te,77:J,79:se,80:ue},{35:91,75:81,76:te,77:J,79:se,80:ue},{35:92,75:81,76:te,77:J,79:se,80:ue},{35:93,75:81,76:te,77:J,79:se,80:ue},{35:94,75:81,76:te,77:J,79:se,80:ue},{35:95,75:81,76:te,77:J,79:se,80:ue},{35:96,75:81,76:te,77:J,79:se,80:ue},{35:97,75:81,76:te,77:J,79:se,80:ue},{35:98,75:81,76:te,77:J,79:se,80:ue},{35:99,75:81,76:te,77:J,79:se,80:ue},{35:100,75:81,76:te,77:J,79:se,80:ue},{35:101,75:81,76:te,77:J,79:se,80:ue},{35:102,75:81,76:te,77:J,79:se,80:ue},{35:103,75:81,76:te,77:J,79:se,80:ue},{35:104,75:81,76:te,77:J,79:se,80:ue},t(Z,[2,59]),{35:105,75:81,76:te,77:J,79:se,80:ue},{35:106,75:81,76:te,77:J,79:se,80:ue},{35:107,75:81,76:te,77:J,79:se,80:ue},{35:108,75:81,76:te,77:J,79:se,80:ue},{35:109,75:81,76:te,77:J,79:se,80:ue},{35:110,75:81,76:te,77:J,79:se,80:ue},{35:111,75:81,76:te,77:J,79:se,80:ue},{35:112,75:81,76:te,77:J,79:se,80:ue},{35:113,75:81,76:te,77:J,79:se,80:ue},{35:114,75:81,76:te,77:J,79:se,80:ue},{35:115,75:81,76:te,77:J,79:se,80:ue},{20:116,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{12:[1,118],33:[1,117]},{35:119,75:81,76:te,77:J,79:se,80:ue},{35:120,75:81,76:te,77:J,79:se,80:ue},{35:121,75:81,76:te,77:J,79:se,80:ue},{35:122,75:81,76:te,77:J,79:se,80:ue},{35:123,75:81,76:te,77:J,79:se,80:ue},{35:124,75:81,76:te,77:J,79:se,80:ue},{35:125,75:81,76:te,77:J,79:se,80:ue},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},t(he,[2,15]),t(K,[2,17],{21:22,19:130,22:e,23:r,24:n,26:i,28:a}),t(he,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:e,23:r,24:n,26:i,28:a,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le}),t(X,[2,21]),t(X,[2,22]),t(Z,[2,39]),t(Se,[2,71],{75:81,35:132,76:te,77:J,79:se,80:ue}),t(ce,[2,73]),{78:[1,133]},t(ce,[2,75]),t(ce,[2,76]),t(Z,[2,40]),t(Z,[2,41]),t(Z,[2,42]),t(Z,[2,43]),t(Z,[2,44]),t(Z,[2,45]),t(Z,[2,46]),t(Z,[2,47]),t(Z,[2,48]),t(Z,[2,49]),t(Z,[2,50]),t(Z,[2,51]),t(Z,[2,52]),t(Z,[2,53]),t(Z,[2,54]),t(Z,[2,55]),t(Z,[2,56]),t(Z,[2,57]),t(Z,[2,58]),t(Z,[2,60]),t(Z,[2,61]),t(Z,[2,62]),t(Z,[2,63]),t(Z,[2,64]),t(Z,[2,65]),t(Z,[2,66]),t(Z,[2,67]),t(Z,[2,68]),t(Z,[2,69]),t(Z,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},t(ae,[2,28]),t(ae,[2,29]),t(ae,[2,30]),t(ae,[2,31]),t(ae,[2,32]),t(ae,[2,33]),t(ae,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},t(K,[2,18]),t(he,[2,38]),t(Se,[2,72]),t(ce,[2,74]),t(Z,[2,24]),t(Z,[2,35]),t(Oe,[2,25]),t(Oe,[2,26],{12:[1,138]}),t(Oe,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:o(function(Re,Ie){if(Ie.recoverable)this.trace(Re);else{var be=new Error(Re);throw be.hash=Ie,be}},"parseError"),parse:o(function(Re){var Ie=this,be=[0],W=[],de=[null],re=[],oe=this.table,V="",xe=0,q=0,pe=0,ve=2,Pe=1,_e=re.slice.call(arguments,1),we=Object.create(this.lexer),Ve={yy:{}};for(var De in this.yy)Object.prototype.hasOwnProperty.call(this.yy,De)&&(Ve.yy[De]=this.yy[De]);we.setInput(Re,Ve.yy),Ve.yy.lexer=we,Ve.yy.parser=this,typeof we.yylloc>"u"&&(we.yylloc={});var qe=we.yylloc;re.push(qe);var at=we.options&&we.options.ranges;typeof Ve.yy.parseError=="function"?this.parseError=Ve.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Rt(nt){be.length=be.length-2*nt,de.length=de.length-nt,re.length=re.length-nt}o(Rt,"popStack");function st(){var nt;return nt=W.pop()||we.lex()||Pe,typeof nt!="number"&&(nt instanceof Array&&(W=nt,nt=W.pop()),nt=Ie.symbols_[nt]||nt),nt}o(st,"lex");for(var Ue,ct,We,ot,Yt,bt,Mt={},xt,ut,Et,ft;;){if(We=be[be.length-1],this.defaultActions[We]?ot=this.defaultActions[We]:((Ue===null||typeof Ue>"u")&&(Ue=st()),ot=oe[We]&&oe[We][Ue]),typeof ot>"u"||!ot.length||!ot[0]){var yt="";ft=[];for(xt in oe[We])this.terminals_[xt]&&xt>ve&&ft.push("'"+this.terminals_[xt]+"'");we.showPosition?yt="Parse error on line "+(xe+1)+`:
10 +`+we.showPosition()+`
11 +Expecting `+ft.join(", ")+", got '"+(this.terminals_[Ue]||Ue)+"'":yt="Parse error on line "+(xe+1)+": Unexpected "+(Ue==Pe?"end of input":"'"+(this.terminals_[Ue]||Ue)+"'"),this.parseError(yt,{text:we.match,token:this.terminals_[Ue]||Ue,line:we.yylineno,loc:qe,expected:ft})}if(ot[0]instanceof Array&&ot.length>1)throw new Error("Parse Error: multiple actions possible at state: "+We+", token: "+Ue);switch(ot[0]){case 1:be.push(Ue),de.push(we.yytext),re.push(we.yylloc),be.push(ot[1]),Ue=null,ct?(Ue=ct,ct=null):(q=we.yyleng,V=we.yytext,xe=we.yylineno,qe=we.yylloc,pe>0&&pe--);break;case 2:if(ut=this.productions_[ot[1]][1],Mt.$=de[de.length-ut],Mt._$={first_line:re[re.length-(ut||1)].first_line,last_line:re[re.length-1].last_line,first_column:re[re.length-(ut||1)].first_column,last_column:re[re.length-1].last_column},at&&(Mt._$.range=[re[re.length-(ut||1)].range[0],re[re.length-1].range[1]]),bt=this.performAction.apply(Mt,[V,q,xe,Ve.yy,ot[1],de,re].concat(_e)),typeof bt<"u")return bt;ut&&(be=be.slice(0,-1*ut*2),de=de.slice(0,-1*ut),re=re.slice(0,-1*ut)),be.push(this.productions_[ot[1]][0]),de.push(Mt.$),re.push(Mt._$),Et=oe[be[be.length-2]][be[be.length-1]],be.push(Et);break;case 3:return!0}}return!0},"parse")},ze=function(){var $e={EOF:1,parseError:o(function(Ie,be){if(this.yy.parser)this.yy.parser.parseError(Ie,be);else throw new Error(Ie)},"parseError"),setInput:o(function(Re,Ie){return this.yy=Ie||this.yy||{},this._input=Re,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Re=this._input[0];this.yytext+=Re,this.yyleng++,this.offset++,this.match+=Re,this.matched+=Re;var Ie=Re.match(/(?:\r\n?|\n).*/g);return Ie?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Re},"input"),unput:o(function(Re){var Ie=Re.length,be=Re.split(/(?:\r\n?|\n)/g);this._input=Re+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ie),this.offset-=Ie;var W=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),be.length-1&&(this.yylineno-=be.length-1);var de=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:be?(be.length===W.length?this.yylloc.first_column:0)+W[W.length-be.length].length-be[0].length:this.yylloc.first_column-Ie},this.options.ranges&&(this.yylloc.range=[de[0],de[0]+this.yyleng-Ie]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
12 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Re){this.unput(this.match.slice(Re))},"less"),pastInput:o(function(){var Re=this.matched.substr(0,this.matched.length-this.match.length);return(Re.length>20?"...":"")+Re.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Re=this.match;return Re.length<20&&(Re+=this._input.substr(0,20-Re.length)),(Re.substr(0,20)+(Re.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Re=this.pastInput(),Ie=new Array(Re.length+1).join("-");return Re+this.upcomingInput()+`
13 +`+Ie+"^"},"showPosition"),test_match:o(function(Re,Ie){var be,W,de;if(this.options.backtrack_lexer&&(de={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(de.yylloc.range=this.yylloc.range.slice(0))),W=Re[0].match(/(?:\r\n?|\n).*/g),W&&(this.yylineno+=W.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:W?W[W.length-1].length-W[W.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Re[0].length},this.yytext+=Re[0],this.match+=Re[0],this.matches=Re,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Re[0].length),this.matched+=Re[0],be=this.performAction.call(this,this.yy,this,Ie,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),be)return be;if(this._backtrack){for(var re in de)this[re]=de[re];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Re,Ie,be,W;this._more||(this.yytext="",this.match="");for(var de=this._currentRules(),re=0;re<de.length;re++)if(be=this._input.match(this.rules[de[re]]),be&&(!Ie||be[0].length>Ie[0].length)){if(Ie=be,W=re,this.options.backtrack_lexer){if(Re=this.test_match(be,de[re]),Re!==!1)return Re;if(this._backtrack){Ie=!1;continue}else return!1}else if(!this.options.flex)break}return Ie?(Re=this.test_match(Ie,de[W]),Re!==!1?Re:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
14 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Ie=this.next();return Ie||this.lex()},"lex"),begin:o(function(Ie){this.conditionStack.push(Ie)},"begin"),popState:o(function(){var Ie=this.conditionStack.length-1;return Ie>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Ie){return Ie=this.conditionStack.length-1-Math.abs(Ie||0),Ie>=0?this.conditionStack[Ie]:"INITIAL"},"topState"),pushState:o(function(Ie){this.begin(Ie)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(Ie,be,W,de){var re=de;switch(W){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),26;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;break;case 23:return this.begin("person"),44;break;case 24:return this.begin("system_ext_queue"),51;break;case 25:return this.begin("system_ext_db"),50;break;case 26:return this.begin("system_ext"),49;break;case 27:return this.begin("system_queue"),48;break;case 28:return this.begin("system_db"),47;break;case 29:return this.begin("system"),46;break;case 30:return this.begin("boundary"),37;break;case 31:return this.begin("enterprise_boundary"),34;break;case 32:return this.begin("system_boundary"),36;break;case 33:return this.begin("container_ext_queue"),57;break;case 34:return this.begin("container_ext_db"),56;break;case 35:return this.begin("container_ext"),55;break;case 36:return this.begin("container_queue"),54;break;case 37:return this.begin("container_db"),53;break;case 38:return this.begin("container"),52;break;case 39:return this.begin("container_boundary"),38;break;case 40:return this.begin("component_ext_queue"),63;break;case 41:return this.begin("component_ext_db"),62;break;case 42:return this.begin("component_ext"),61;break;case 43:return this.begin("component_queue"),60;break;case 44:return this.begin("component_db"),59;break;case 45:return this.begin("component"),58;break;case 46:return this.begin("node"),39;break;case 47:return this.begin("node"),39;break;case 48:return this.begin("node_l"),40;break;case 49:return this.begin("node_r"),41;break;case 50:return this.begin("rel"),64;break;case 51:return this.begin("birel"),65;break;case 52:return this.begin("rel_u"),66;break;case 53:return this.begin("rel_u"),66;break;case 54:return this.begin("rel_d"),67;break;case 55:return this.begin("rel_d"),67;break;case 56:return this.begin("rel_l"),68;break;case 57:return this.begin("rel_l"),68;break;case 58:return this.begin("rel_r"),69;break;case 59:return this.begin("rel_r"),69;break;case 60:return this.begin("rel_b"),70;break;case 61:return this.begin("rel_index"),71;break;case 62:return this.begin("update_el_style"),72;break;case 63:return this.begin("update_rel_style"),73;break;case 64:return this.begin("update_layout_config"),74;break;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";break;case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";break;case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};return $e}();ge.lexer=ze;function He(){this.yy={}}return o(He,"Parser"),He.prototype=ge,ge.Parser=He,new He}();Ty.parser=Ty;JF=Ty});var zC,Gn,s0=N(()=>{"use strict";zC=o((t,e,{depth:r=2,clobber:n=!1}={})=>{let i={depth:r,clobber:n};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(a=>zC(t,a,i)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(a=>{t.includes(a)||t.push(a)}),t):t===void 0||r<=0?t!=null&&typeof t=="object"&&typeof e=="object"?Object.assign(t,e):e:(e!==void 0&&typeof t=="object"&&typeof e=="object"&&Object.keys(e).forEach(a=>{typeof e[a]=="object"&&(t[a]===void 0||typeof t[a]=="object")?(t[a]===void 0&&(t[a]=Array.isArray(e[a])?[]:{}),t[a]=zC(t[a],e[a],{depth:r-1,clobber:n})):(n||typeof t[a]!="object"&&typeof e[a]!="object")&&(t[a]=e[a])}),t)},"assignWithDepth"),Gn=zC});var G4,e$,t$=N(()=>{"use strict";G4={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:o(t=>t>=255?255:t<0?0:t,"r"),g:o(t=>t>=255?255:t<0?0:t,"g"),b:o(t=>t>=255?255:t<0?0:t,"b"),h:o(t=>t%360,"h"),s:o(t=>t>=100?100:t<0?0:t,"s"),l:o(t=>t>=100?100:t<0?0:t,"l"),a:o(t=>t>=1?1:t<0?0:t,"a")},toLinear:o(t=>{let e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},"toLinear"),hue2rgb:o((t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<.16666666666666666?t+(e-t)*6*r:r<.5?e:r<.6666666666666666?t+(e-t)*(.6666666666666666-r)*6:t),"hue2rgb"),hsl2rgb:o(({h:t,s:e,l:r},n)=>{if(!e)return r*2.55;t/=360,e/=100,r/=100;let i=r<.5?r*(1+e):r+e-r*e,a=2*r-i;switch(n){case"r":return G4.hue2rgb(a,i,t+.3333333333333333)*255;case"g":return G4.hue2rgb(a,i,t)*255;case"b":return G4.hue2rgb(a,i,t-.3333333333333333)*255}},"hsl2rgb"),rgb2hsl:o(({r:t,g:e,b:r},n)=>{t/=255,e/=255,r/=255;let i=Math.max(t,e,r),a=Math.min(t,e,r),s=(i+a)/2;if(n==="l")return s*100;if(i===a)return 0;let l=i-a,u=s>.5?l/(2-i-a):l/(i+a);if(n==="s")return u*100;switch(i){case t:return((e-r)/l+(e<r?6:0))*60;case e:return((r-t)/l+2)*60;case r:return((t-e)/l+4)*60;default:return-1}},"rgb2hsl")},e$=G4});var fxe,r$,n$=N(()=>{"use strict";fxe={clamp:o((t,e,r)=>e>r?Math.min(e,Math.max(r,t)):Math.min(r,Math.max(e,t)),"clamp"),round:o(t=>Math.round(t*1e10)/1e10,"round")},r$=fxe});var dxe,i$,a$=N(()=>{"use strict";dxe={dec2hex:o(t=>{let e=Math.round(t).toString(16);return e.length>1?e:`0${e}`},"dec2hex")},i$=dxe});var pxe,jt,Wl=N(()=>{"use strict";t$();n$();a$();pxe={channel:e$,lang:r$,unit:i$},jt=pxe});var ru,Ii,ky=N(()=>{"use strict";Wl();ru={};for(let t=0;t<=255;t++)ru[t]=jt.unit.dec2hex(t);Ii={ALL:0,RGB:1,HSL:2}});var GC,s$,o$=N(()=>{"use strict";ky();GC=class{static{o(this,"Type")}constructor(){this.type=Ii.ALL}get(){return this.type}set(e){if(this.type&&this.type!==e)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=e}reset(){this.type=Ii.ALL}is(e){return this.type===e}},s$=GC});var VC,l$,c$=N(()=>{"use strict";Wl();o$();ky();VC=class{static{o(this,"Channels")}constructor(e,r){this.color=r,this.changed=!1,this.data=e,this.type=new s$}set(e,r){return this.color=r,this.changed=!1,this.data=e,this.type.type=Ii.ALL,this}_ensureHSL(){let e=this.data,{h:r,s:n,l:i}=e;r===void 0&&(e.h=jt.channel.rgb2hsl(e,"h")),n===void 0&&(e.s=jt.channel.rgb2hsl(e,"s")),i===void 0&&(e.l=jt.channel.rgb2hsl(e,"l"))}_ensureRGB(){let e=this.data,{r,g:n,b:i}=e;r===void 0&&(e.r=jt.channel.hsl2rgb(e,"r")),n===void 0&&(e.g=jt.channel.hsl2rgb(e,"g")),i===void 0&&(e.b=jt.channel.hsl2rgb(e,"b"))}get r(){let e=this.data,r=e.r;return!this.type.is(Ii.HSL)&&r!==void 0?r:(this._ensureHSL(),jt.channel.hsl2rgb(e,"r"))}get g(){let e=this.data,r=e.g;return!this.type.is(Ii.HSL)&&r!==void 0?r:(this._ensureHSL(),jt.channel.hsl2rgb(e,"g"))}get b(){let e=this.data,r=e.b;return!this.type.is(Ii.HSL)&&r!==void 0?r:(this._ensureHSL(),jt.channel.hsl2rgb(e,"b"))}get h(){let e=this.data,r=e.h;return!this.type.is(Ii.RGB)&&r!==void 0?r:(this._ensureRGB(),jt.channel.rgb2hsl(e,"h"))}get s(){let e=this.data,r=e.s;return!this.type.is(Ii.RGB)&&r!==void 0?r:(this._ensureRGB(),jt.channel.rgb2hsl(e,"s"))}get l(){let e=this.data,r=e.l;return!this.type.is(Ii.RGB)&&r!==void 0?r:(this._ensureRGB(),jt.channel.rgb2hsl(e,"l"))}get a(){return this.data.a}set r(e){this.type.set(Ii.RGB),this.changed=!0,this.data.r=e}set g(e){this.type.set(Ii.RGB),this.changed=!0,this.data.g=e}set b(e){this.type.set(Ii.RGB),this.changed=!0,this.data.b=e}set h(e){this.type.set(Ii.HSL),this.changed=!0,this.data.h=e}set s(e){this.type.set(Ii.HSL),this.changed=!0,this.data.s=e}set l(e){this.type.set(Ii.HSL),this.changed=!0,this.data.l=e}set a(e){this.changed=!0,this.data.a=e}},l$=VC});var mxe,ih,Ey=N(()=>{"use strict";c$();mxe=new l$({r:0,g:0,b:0,a:0},"transparent"),ih=mxe});var u$,jf,UC=N(()=>{"use strict";Ey();ky();u$={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:o(t=>{if(t.charCodeAt(0)!==35)return;let e=t.match(u$.re);if(!e)return;let r=e[1],n=parseInt(r,16),i=r.length,a=i%4===0,s=i>4,l=s?1:17,u=s?8:4,h=a?0:-1,f=s?255:15;return ih.set({r:(n>>u*(h+3)&f)*l,g:(n>>u*(h+2)&f)*l,b:(n>>u*(h+1)&f)*l,a:a?(n&f)*l/255:1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`#${ru[Math.round(e)]}${ru[Math.round(r)]}${ru[Math.round(n)]}${ru[Math.round(i*255)]}`:`#${ru[Math.round(e)]}${ru[Math.round(r)]}${ru[Math.round(n)]}`},"stringify")},jf=u$});var V4,Sy,h$=N(()=>{"use strict";Wl();Ey();V4={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:o(t=>{let e=t.match(V4.hueRe);if(e){let[,r,n]=e;switch(n){case"grad":return jt.channel.clamp.h(parseFloat(r)*.9);case"rad":return jt.channel.clamp.h(parseFloat(r)*180/Math.PI);case"turn":return jt.channel.clamp.h(parseFloat(r)*360)}}return jt.channel.clamp.h(parseFloat(t))},"_hue2deg"),parse:o(t=>{let e=t.charCodeAt(0);if(e!==104&&e!==72)return;let r=t.match(V4.re);if(!r)return;let[,n,i,a,s,l]=r;return ih.set({h:V4._hue2deg(n),s:jt.channel.clamp.s(parseFloat(i)),l:jt.channel.clamp.l(parseFloat(a)),a:s?jt.channel.clamp.a(l?parseFloat(s)/100:parseFloat(s)):1},t)},"parse"),stringify:o(t=>{let{h:e,s:r,l:n,a:i}=t;return i<1?`hsla(${jt.lang.round(e)}, ${jt.lang.round(r)}%, ${jt.lang.round(n)}%, ${i})`:`hsl(${jt.lang.round(e)}, ${jt.lang.round(r)}%, ${jt.lang.round(n)}%)`},"stringify")},Sy=V4});var U4,HC,f$=N(()=>{"use strict";UC();U4={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:o(t=>{t=t.toLowerCase();let e=U4.colors[t];if(e)return jf.parse(e)},"parse"),stringify:o(t=>{let e=jf.stringify(t);for(let r in U4.colors)if(U4.colors[r]===e)return r},"stringify")},HC=U4});var d$,Cy,p$=N(()=>{"use strict";Wl();Ey();d$={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:o(t=>{let e=t.charCodeAt(0);if(e!==114&&e!==82)return;let r=t.match(d$.re);if(!r)return;let[,n,i,a,s,l,u,h,f]=r;return ih.set({r:jt.channel.clamp.r(i?parseFloat(n)*2.55:parseFloat(n)),g:jt.channel.clamp.g(s?parseFloat(a)*2.55:parseFloat(a)),b:jt.channel.clamp.b(u?parseFloat(l)*2.55:parseFloat(l)),a:h?jt.channel.clamp.a(f?parseFloat(h)/100:parseFloat(h)):1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`rgba(${jt.lang.round(e)}, ${jt.lang.round(r)}, ${jt.lang.round(n)}, ${jt.lang.round(i)})`:`rgb(${jt.lang.round(e)}, ${jt.lang.round(r)}, ${jt.lang.round(n)})`},"stringify")},Cy=d$});var gxe,Oi,nu=N(()=>{"use strict";UC();h$();f$();p$();ky();gxe={format:{keyword:HC,hex:jf,rgb:Cy,rgba:Cy,hsl:Sy,hsla:Sy},parse:o(t=>{if(typeof t!="string")return t;let e=jf.parse(t)||Cy.parse(t)||Sy.parse(t)||HC.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},"parse"),stringify:o(t=>!t.changed&&t.color?t.color:t.type.is(Ii.HSL)||t.data.r===void 0?Sy.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?Cy.stringify(t):jf.stringify(t),"stringify")},Oi=gxe});var yxe,H4,WC=N(()=>{"use strict";Wl();nu();yxe=o((t,e)=>{let r=Oi.parse(t);for(let n in e)r[n]=jt.channel.clamp[n](e[n]);return Oi.stringify(r)},"change"),H4=yxe});var vxe,qa,qC=N(()=>{"use strict";Wl();Ey();nu();WC();vxe=o((t,e,r=0,n=1)=>{if(typeof t!="number")return H4(t,{a:e});let i=ih.set({r:jt.channel.clamp.r(t),g:jt.channel.clamp.g(e),b:jt.channel.clamp.b(r),a:jt.channel.clamp.a(n)});return Oi.stringify(i)},"rgba"),qa=vxe});var xxe,Kf,m$=N(()=>{"use strict";Wl();nu();xxe=o((t,e)=>jt.lang.round(Oi.parse(t)[e]),"channel"),Kf=xxe});var bxe,g$,y$=N(()=>{"use strict";Wl();nu();bxe=o(t=>{let{r:e,g:r,b:n}=Oi.parse(t),i=.2126*jt.channel.toLinear(e)+.7152*jt.channel.toLinear(r)+.0722*jt.channel.toLinear(n);return jt.lang.round(i)},"luminance"),g$=bxe});var wxe,v$,x$=N(()=>{"use strict";y$();wxe=o(t=>g$(t)>=.5,"isLight"),v$=wxe});var Txe,ca,b$=N(()=>{"use strict";x$();Txe=o(t=>!v$(t),"isDark"),ca=Txe});var kxe,W4,YC=N(()=>{"use strict";Wl();nu();kxe=o((t,e,r)=>{let n=Oi.parse(t),i=n[e],a=jt.channel.clamp[e](i+r);return i!==a&&(n[e]=a),Oi.stringify(n)},"adjustChannel"),W4=kxe});var Exe,Dt,w$=N(()=>{"use strict";YC();Exe=o((t,e)=>W4(t,"l",e),"lighten"),Dt=Exe});var Sxe,Ot,T$=N(()=>{"use strict";YC();Sxe=o((t,e)=>W4(t,"l",-e),"darken"),Ot=Sxe});var Cxe,Me,k$=N(()=>{"use strict";nu();WC();Cxe=o((t,e)=>{let r=Oi.parse(t),n={};for(let i in e)e[i]&&(n[i]=r[i]+e[i]);return H4(t,n)},"adjust"),Me=Cxe});var Axe,E$,S$=N(()=>{"use strict";nu();qC();Axe=o((t,e,r=50)=>{let{r:n,g:i,b:a,a:s}=Oi.parse(t),{r:l,g:u,b:h,a:f}=Oi.parse(e),d=r/100,p=d*2-1,m=s-f,y=((p*m===-1?p:(p+m)/(1+p*m))+1)/2,v=1-y,x=n*y+l*v,b=i*y+u*v,w=a*y+h*v,C=s*d+f*(1-d);return qa(x,b,w,C)},"mix"),E$=Axe});var _xe,wt,C$=N(()=>{"use strict";nu();S$();_xe=o((t,e=100)=>{let r=Oi.parse(t);return r.r=255-r.r,r.g=255-r.g,r.b=255-r.b,E$(r,t,e)},"invert"),wt=_xe});var A$=N(()=>{"use strict";qC();m$();b$();w$();T$();k$();C$()});var Ys=N(()=>{"use strict";A$()});var ah,sh,Ay=N(()=>{"use strict";ah="#ffffff",sh="#f2f2f2"});var Ti,o0=N(()=>{"use strict";Ys();Ti=o((t,e)=>e?Me(t,{s:-40,l:10}):Me(t,{s:-40,l:-10}),"mkBorder")});var jC,_$,D$=N(()=>{"use strict";Ys();Ay();o0();jC=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||Me(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||Me(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Ti(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Ti(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Ti(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||wt(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||wt(this.tertiaryColor),this.lineColor=this.lineColor||wt(this.background),this.arrowheadColor=this.arrowheadColor||wt(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Ot(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Ot(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||wt(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||Dt(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.darkMode?(this.rowOdd=this.rowOdd||Ot(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Ot(this.mainBkg,10)):(this.rowOdd=this.rowOdd||Dt(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||Dt(this.mainBkg,5)),this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this["cScale"+r]=Ot(this["cScale"+r],75);else for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this["cScale"+r]=Ot(this["cScale"+r],25);for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this["cScaleInv"+r]=this["cScaleInv"+r]||wt(this["cScale"+r]);for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this.darkMode?this["cScalePeer"+r]=this["cScalePeer"+r]||Dt(this["cScale"+r],10):this["cScalePeer"+r]=this["cScalePeer"+r]||Ot(this["cScale"+r],10);this.scaleLabelColor=this.scaleLabelColor||this.labelTextColor;for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this["cScaleLabel"+r]=this["cScaleLabel"+r]||this.scaleLabelColor;let e=this.darkMode?-4:-1;for(let r=0;r<5;r++)this["surface"+r]=this["surface"+r]||Me(this.mainBkg,{h:180,s:-15,l:e*(5+r*3)}),this["surfacePeer"+r]=this["surfacePeer"+r]||Me(this.mainBkg,{h:180,s:-15,l:e*(8+r*3)});this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||Me(this.primaryColor,{h:64}),this.fillType3=this.fillType3||Me(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||Me(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||Me(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||Me(this.primaryColor,{h:128}),this.fillType7=this.fillType7||Me(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||Me(this.primaryColor,{l:-10}),this.pie5=this.pie5||Me(this.secondaryColor,{l:-10}),this.pie6=this.pie6||Me(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||Me(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||Me(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||Me(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||Me(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||Me(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||Me(this.primaryColor,{h:120,l:-10}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},this.archEdgeColor=this.archEdgeColor||"#777",this.archEdgeArrowColor=this.archEdgeArrowColor||"#777",this.archEdgeWidth=this.archEdgeWidth||"3",this.archGroupBorderColor=this.archGroupBorderColor||"#000",this.archGroupBorderWidth=this.archGroupBorderWidth||"2px",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.plotColorPalette||"#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?Ot(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||Me(this.primaryColor,{h:-30}),this.git4=this.git4||Me(this.primaryColor,{h:-60}),this.git5=this.git5||Me(this.primaryColor,{h:-90}),this.git6=this.git6||Me(this.primaryColor,{h:60}),this.git7=this.git7||Me(this.primaryColor,{h:120}),this.darkMode?(this.git0=Dt(this.git0,25),this.git1=Dt(this.git1,25),this.git2=Dt(this.git2,25),this.git3=Dt(this.git3,25),this.git4=Dt(this.git4,25),this.git5=Dt(this.git5,25),this.git6=Dt(this.git6,25),this.git7=Dt(this.git7,25)):(this.git0=Ot(this.git0,25),this.git1=Ot(this.git1,25),this.git2=Ot(this.git2,25),this.git3=Ot(this.git3,25),this.git4=Ot(this.git4,25),this.git5=Ot(this.git5,25),this.git6=Ot(this.git6,25),this.git7=Ot(this.git7,25)),this.gitInv0=this.gitInv0||wt(this.git0),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(this.git7),this.branchLabelColor=this.branchLabelColor||(this.darkMode?"black":this.labelTextColor),this.gitBranchLabel0=this.gitBranchLabel0||this.branchLabelColor,this.gitBranchLabel1=this.gitBranchLabel1||this.branchLabelColor,this.gitBranchLabel2=this.gitBranchLabel2||this.branchLabelColor,this.gitBranchLabel3=this.gitBranchLabel3||this.branchLabelColor,this.gitBranchLabel4=this.gitBranchLabel4||this.branchLabelColor,this.gitBranchLabel5=this.gitBranchLabel5||this.branchLabelColor,this.gitBranchLabel6=this.gitBranchLabel6||this.branchLabelColor,this.gitBranchLabel7=this.gitBranchLabel7||this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||ah,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||sh}calculate(e){if(typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},_$=o(t=>{let e=new jC;return e.calculate(t),e},"getThemeVariables")});var KC,L$,R$=N(()=>{"use strict";Ys();o0();KC=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Dt(this.primaryColor,16),this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=wt(this.background),this.secondaryBorderColor=Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Ti(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.tertiaryColor),this.lineColor=wt(this.background),this.textColor=wt(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Dt(wt("#323D47"),10),this.lineColor="calculated",this.border1="#ccc",this.border2=qa(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=Ot("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=Ot(this.sectionBkgColor,10),this.taskBorderColor=qa(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=qa(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||Dt(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Ot(this.mainBkg,10),this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=Dt(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=Dt(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.actorBorder,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=Dt(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330});for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||wt(this["cScale"+e]);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScalePeer"+e]=this["cScalePeer"+e]||Dt(this["cScale"+e],10);for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||Me(this.mainBkg,{h:30,s:-30,l:-(-10+e*4)}),this["surfacePeer"+e]=this["surfacePeer"+e]||Me(this.mainBkg,{h:30,s:-30,l:-(-7+e*4)});this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["pie"+e]=this["cScale"+e];this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.plotColorPalette||"#3498db,#2ecc71,#e74c3c,#f1c40f,#bdc3c7,#ffffff,#34495e,#9b59b6,#1abc9c,#e67e22"},this.packet={startByteColor:this.primaryTextColor,endByteColor:this.primaryTextColor,labelColor:this.primaryTextColor,titleColor:this.primaryTextColor,blockStrokeColor:this.primaryTextColor,blockFillColor:this.background},this.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},this.classText=this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?Ot(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=Dt(this.secondaryColor,20),this.git1=Dt(this.pie2||this.secondaryColor,20),this.git2=Dt(this.pie3||this.tertiaryColor,20),this.git3=Dt(this.pie4||Me(this.primaryColor,{h:-30}),20),this.git4=Dt(this.pie5||Me(this.primaryColor,{h:-60}),20),this.git5=Dt(this.pie6||Me(this.primaryColor,{h:-90}),10),this.git6=Dt(this.pie7||Me(this.primaryColor,{h:60}),10),this.git7=Dt(this.pie8||Me(this.primaryColor,{h:120}),20),this.gitInv0=this.gitInv0||wt(this.git0),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||wt(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||wt(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||Dt(this.background,12),this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Dt(this.background,2),this.nodeBorder=this.nodeBorder||"#999"}calculate(e){if(typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},L$=o(t=>{let e=new KC;return e.calculate(t),e},"getThemeVariables")});var QC,oh,_y=N(()=>{"use strict";Ys();o0();Ay();QC=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=Me(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=Ti(this.primaryColor,this.darkMode),this.secondaryBorderColor=Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Ti(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.tertiaryColor),this.lineColor=wt(this.background),this.textColor=wt(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="rgba(232,232,232, 0.8)",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=qa(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd="calculated",this.rowEven="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Ot(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Ot(this.tertiaryColor,40);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=Ot(this["cScale"+e],10),this["cScalePeer"+e]=this["cScalePeer"+e]||Ot(this["cScale"+e],25);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||Me(this["cScale"+e],{h:180});for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||Me(this.mainBkg,{h:30,l:-(5+e*5)}),this["surfacePeer"+e]=this["surfacePeer"+e]||Me(this.mainBkg,{h:30,l:-(7+e*5)});if(this.scaleLabelColor=this.scaleLabelColor!=="calculated"&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor,this.labelTextColor!=="calculated"){this.cScaleLabel0=this.cScaleLabel0||wt(this.labelTextColor),this.cScaleLabel3=this.cScaleLabel3||wt(this.labelTextColor);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.labelTextColor}this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.textColor,this.edgeLabelBackground=this.labelBackground,this.actorBorder=Dt(this.border1,23),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.signalColor=this.textColor,this.signalTextColor=this.textColor,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.actorLineColor=this.actorBorder,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.rowOdd=this.rowOdd||Dt(this.primaryColor,75)||"#ffffff",this.rowEven=this.rowEven||Dt(this.primaryColor,1),this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||Me(this.tertiaryColor,{l:-40}),this.pie4=this.pie4||Me(this.primaryColor,{l:-10}),this.pie5=this.pie5||Me(this.secondaryColor,{l:-30}),this.pie6=this.pie6||Me(this.tertiaryColor,{l:-20}),this.pie7=this.pie7||Me(this.primaryColor,{h:60,l:-20}),this.pie8=this.pie8||Me(this.primaryColor,{h:-60,l:-40}),this.pie9=this.pie9||Me(this.primaryColor,{h:120,l:-40}),this.pie10=this.pie10||Me(this.primaryColor,{h:60,l:-40}),this.pie11=this.pie11||Me(this.primaryColor,{h:-90,l:-40}),this.pie12=this.pie12||Me(this.primaryColor,{h:120,l:-30}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},this.xyChart={backgroundColor:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.plotColorPalette||"#ECECFF,#8493A6,#FFC3A0,#DCDDE1,#B8E994,#D1A36F,#C3CDE6,#FFB6C1,#496078,#F8F3E3"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.labelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||Me(this.primaryColor,{h:-30}),this.git4=this.git4||Me(this.primaryColor,{h:-60}),this.git5=this.git5||Me(this.primaryColor,{h:-90}),this.git6=this.git6||Me(this.primaryColor,{h:60}),this.git7=this.git7||Me(this.primaryColor,{h:120}),this.darkMode?(this.git0=Dt(this.git0,25),this.git1=Dt(this.git1,25),this.git2=Dt(this.git2,25),this.git3=Dt(this.git3,25),this.git4=Dt(this.git4,25),this.git5=Dt(this.git5,25),this.git6=Dt(this.git6,25),this.git7=Dt(this.git7,25)):(this.git0=Ot(this.git0,25),this.git1=Ot(this.git1,25),this.git2=Ot(this.git2,25),this.git3=Ot(this.git3,25),this.git4=Ot(this.git4,25),this.git5=Ot(this.git5,25),this.git6=Ot(this.git6,25),this.git7=Ot(this.git7,25)),this.gitInv0=this.gitInv0||Ot(wt(this.git0),25),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||wt(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||wt(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||ah,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||sh}calculate(e){if(Object.keys(this).forEach(n=>{this[n]==="calculated"&&(this[n]=void 0)}),typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},oh=o(t=>{let e=new QC;return e.calculate(t),e},"getThemeVariables")});var ZC,N$,M$=N(()=>{"use strict";Ys();Ay();o0();ZC=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=Dt("#cde498",10),this.primaryBorderColor=Ti(this.primaryColor,this.darkMode),this.secondaryBorderColor=Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Ti(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.primaryColor),this.lineColor=wt(this.background),this.textColor=wt(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.actorBorder=Ot(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.actorLineColor=this.actorBorder,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Ot(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Ot(this.tertiaryColor,40);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=Ot(this["cScale"+e],10),this["cScalePeer"+e]=this["cScalePeer"+e]||Ot(this["cScale"+e],25);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||Me(this["cScale"+e],{h:180});this.scaleLabelColor=this.scaleLabelColor!=="calculated"&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||Me(this.mainBkg,{h:30,s:-30,l:-(5+e*5)}),this["surfacePeer"+e]=this["surfacePeer"+e]||Me(this.mainBkg,{h:30,s:-30,l:-(8+e*5)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.taskBorderColor=this.border1,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.rowOdd=this.rowOdd||Dt(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||Dt(this.mainBkg,20),this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||Me(this.primaryColor,{l:-30}),this.pie5=this.pie5||Me(this.secondaryColor,{l:-30}),this.pie6=this.pie6||Me(this.tertiaryColor,{h:40,l:-40}),this.pie7=this.pie7||Me(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||Me(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||Me(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||Me(this.primaryColor,{h:60,l:-50}),this.pie11=this.pie11||Me(this.primaryColor,{h:-60,l:-50}),this.pie12=this.pie12||Me(this.primaryColor,{h:120,l:-50}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.packet={startByteColor:this.primaryTextColor,endByteColor:this.primaryTextColor,labelColor:this.primaryTextColor,titleColor:this.primaryTextColor,blockStrokeColor:this.primaryTextColor,blockFillColor:this.mainBkg},this.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},this.xyChart={backgroundColor:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.plotColorPalette||"#CDE498,#FF6B6B,#A0D2DB,#D7BDE2,#F0F0F0,#FFC3A0,#7FD8BE,#FF9A8B,#FAF3E0,#FFF176"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||Me(this.primaryColor,{h:-30}),this.git4=this.git4||Me(this.primaryColor,{h:-60}),this.git5=this.git5||Me(this.primaryColor,{h:-90}),this.git6=this.git6||Me(this.primaryColor,{h:60}),this.git7=this.git7||Me(this.primaryColor,{h:120}),this.darkMode?(this.git0=Dt(this.git0,25),this.git1=Dt(this.git1,25),this.git2=Dt(this.git2,25),this.git3=Dt(this.git3,25),this.git4=Dt(this.git4,25),this.git5=Dt(this.git5,25),this.git6=Dt(this.git6,25),this.git7=Dt(this.git7,25)):(this.git0=Ot(this.git0,25),this.git1=Ot(this.git1,25),this.git2=Ot(this.git2,25),this.git3=Ot(this.git3,25),this.git4=Ot(this.git4,25),this.git5=Ot(this.git5,25),this.git6=Ot(this.git6,25),this.git7=Ot(this.git7,25)),this.gitInv0=this.gitInv0||wt(this.git0),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||wt(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||wt(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||ah,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||sh}calculate(e){if(typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},N$=o(t=>{let e=new ZC;return e.calculate(t),e},"getThemeVariables")});var JC,I$,O$=N(()=>{"use strict";Ys();o0();Ay();JC=class{static{o(this,"Theme")}constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=Dt(this.contrast,55),this.background="#ffffff",this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=Ti(this.primaryColor,this.darkMode),this.secondaryBorderColor=Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Ti(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.tertiaryColor),this.lineColor=wt(this.background),this.textColor=wt(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor=this.actorBorder,this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||Dt(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||"#f4f4f4",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=Dt(this.contrast,55),this.border2=this.contrast,this.actorBorder=Dt(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.actorBorder,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||wt(this["cScale"+e]);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this.darkMode?this["cScalePeer"+e]=this["cScalePeer"+e]||Dt(this["cScale"+e],10):this["cScalePeer"+e]=this["cScalePeer"+e]||Ot(this["cScale"+e],10);this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor),this.cScaleLabel0=this.cScaleLabel0||this.cScale1,this.cScaleLabel2=this.cScaleLabel2||this.cScale1;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||Me(this.mainBkg,{l:-(5+e*5)}),this["surfacePeer"+e]=this["surfacePeer"+e]||Me(this.mainBkg,{l:-(8+e*5)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.text,this.sectionBkgColor=Dt(this.contrast,30),this.sectionBkgColor2=Dt(this.contrast,30),this.taskBorderColor=Ot(this.contrast,10),this.taskBkgColor=this.contrast,this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor=this.text,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.gridColor=Dt(this.border1,30),this.doneTaskBkgColor=this.done,this.doneTaskBorderColor=this.lineColor,this.critBkgColor=this.critical,this.critBorderColor=Ot(this.critBkgColor,10),this.todayLineColor=this.critBkgColor,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.transitionColor=this.transitionColor||"#000",this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f4f4f4",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.stateBorder=this.stateBorder||"#000",this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#222",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(this.secondaryColor,{h:128});for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["pie"+e]=this["cScale"+e];this.pie12=this.pie0,this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.plotColorPalette||"#EEE,#6BB8E4,#8ACB88,#C7ACD6,#E8DCC2,#FFB2A8,#FFF380,#7E8D91,#FFD8B1,#FAF3E0"},this.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=Ot(this.pie1,25)||this.primaryColor,this.git1=this.pie2||this.secondaryColor,this.git2=this.pie3||this.tertiaryColor,this.git3=this.pie4||Me(this.primaryColor,{h:-30}),this.git4=this.pie5||Me(this.primaryColor,{h:-60}),this.git5=this.pie6||Me(this.primaryColor,{h:-90}),this.git6=this.pie7||Me(this.primaryColor,{h:60}),this.git7=this.pie8||Me(this.primaryColor,{h:120}),this.gitInv0=this.gitInv0||wt(this.git0),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(this.git7),this.branchLabelColor=this.branchLabelColor||this.labelTextColor,this.gitBranchLabel0=this.branchLabelColor,this.gitBranchLabel1="white",this.gitBranchLabel2=this.branchLabelColor,this.gitBranchLabel3="white",this.gitBranchLabel4=this.branchLabelColor,this.gitBranchLabel5=this.branchLabelColor,this.gitBranchLabel6=this.branchLabelColor,this.gitBranchLabel7=this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||ah,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||sh}calculate(e){if(typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},I$=o(t=>{let e=new JC;return e.calculate(t),e},"getThemeVariables")});var To,q4=N(()=>{"use strict";D$();R$();_y();M$();O$();To={base:{getThemeVariables:_$},dark:{getThemeVariables:L$},default:{getThemeVariables:oh},forest:{getThemeVariables:N$},neutral:{getThemeVariables:I$}}});var ql,P$=N(()=>{"use strict";ql={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1,hideEmptyMembersBox:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,nodeSpacing:140,rankSpacing:80,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},kanban:{useMaxWidth:!0,padding:8,sectionWidth:200,ticketBaseUrl:""},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},packet:{useMaxWidth:!0,rowHeight:32,bitWidth:32,bitsPerRow:32,showBits:!0,paddingX:5,paddingY:5},architecture:{useMaxWidth:!0,padding:40,iconSize:80,fontSize:16},radar:{useMaxWidth:!0,width:600,height:600,marginTop:50,marginRight:50,marginBottom:50,marginLeft:50,axisScaleFactor:1,axisLabelFactor:1.05,curveTension:.17},theme:"default",look:"classic",handDrawnSeed:0,layout:"dagre",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","suppressErrorRendering","maxEdges"],legacyMathML:!1,forceLegacyMathML:!1,deterministicIds:!1,fontSize:16,markdownAutoWrap:!0,suppressErrorRendering:!1}});var B$,F$,$$,or,Ya=N(()=>{"use strict";q4();P$();B$={...ql,deterministicIDSeed:void 0,elk:{mergeEdges:!1,nodePlacementStrategy:"BRANDES_KOEPF"},themeCSS:void 0,themeVariables:To.default.getThemeVariables(),sequence:{...ql.sequence,messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont"),noteFont:o(function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},"noteFont"),actorFont:o(function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}},"actorFont")},class:{hideEmptyMembersBox:!1},gantt:{...ql.gantt,tickInterval:void 0,useWidth:void 0},c4:{...ql.c4,useWidth:void 0,personFont:o(function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},"personFont"),external_personFont:o(function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},"external_personFont"),systemFont:o(function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},"systemFont"),external_systemFont:o(function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},"external_systemFont"),system_dbFont:o(function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},"system_dbFont"),external_system_dbFont:o(function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},"external_system_dbFont"),system_queueFont:o(function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},"system_queueFont"),external_system_queueFont:o(function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},"external_system_queueFont"),containerFont:o(function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},"containerFont"),external_containerFont:o(function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},"external_containerFont"),container_dbFont:o(function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},"container_dbFont"),external_container_dbFont:o(function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},"external_container_dbFont"),container_queueFont:o(function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},"container_queueFont"),external_container_queueFont:o(function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},"external_container_queueFont"),componentFont:o(function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},"componentFont"),external_componentFont:o(function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},"external_componentFont"),component_dbFont:o(function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},"component_dbFont"),external_component_dbFont:o(function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},"external_component_dbFont"),component_queueFont:o(function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},"component_queueFont"),external_component_queueFont:o(function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},"external_component_queueFont"),boundaryFont:o(function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},"boundaryFont"),messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont")},pie:{...ql.pie,useWidth:984},xyChart:{...ql.xyChart,useWidth:void 0},requirement:{...ql.requirement,useWidth:void 0},packet:{...ql.packet},radar:{...ql.radar}},F$=o((t,e="")=>Object.keys(t).reduce((r,n)=>Array.isArray(t[n])?r:typeof t[n]=="object"&&t[n]!==null?[...r,e+n,...F$(t[n],"")]:[...r,e+n],[]),"keyify"),$$=new Set(F$(B$,"")),or=B$});var l0,Dxe,e7=N(()=>{"use strict";Ya();vt();l0=o(t=>{if(Y.debug("sanitizeDirective called with",t),!(typeof t!="object"||t==null)){if(Array.isArray(t)){t.forEach(e=>l0(e));return}for(let e of Object.keys(t)){if(Y.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!$$.has(e)||t[e]==null){Y.debug("sanitize deleting key: ",e),delete t[e];continue}if(typeof t[e]=="object"){Y.debug("sanitizing object",e),l0(t[e]);continue}let r=["themeCSS","fontFamily","altFontFamily"];for(let n of r)e.includes(n)&&(Y.debug("sanitizing css option",e),t[e]=Dxe(t[e]))}if(t.themeVariables)for(let e of Object.keys(t.themeVariables)){let r=t.themeVariables[e];r?.match&&!r.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}Y.debug("After sanitization",t)}},"sanitizeDirective"),Dxe=o(t=>{let e=0,r=0;for(let n of t){if(e<r)return"{ /* ERROR: Unbalanced CSS */ }";n==="{"?e++:n==="}"&&r++}return e!==r?"{ /* ERROR: Unbalanced CSS */ }":t},"sanitizeCss")});var lh,xs,G$,c0,Dy,Y4,t7,V$,U$,r7,X4,cr,H$,W$,Ly,Lxe,z$,Rxe,q$,ji=N(()=>{"use strict";s0();vt();q4();Ya();e7();lh=Object.freeze(or),xs=Gn({},lh),c0=[],Dy=Gn({},lh),Y4=o((t,e)=>{let r=Gn({},t),n={};for(let i of e)H$(i),n=Gn(n,i);if(r=Gn(r,n),n.theme&&n.theme in To){let i=Gn({},G$),a=Gn(i.themeVariables||{},n.themeVariables);r.theme&&r.theme in To&&(r.themeVariables=To[r.theme].getThemeVariables(a))}return Dy=r,q$(Dy),Dy},"updateCurrentConfig"),t7=o(t=>(xs=Gn({},lh),xs=Gn(xs,t),t.theme&&To[t.theme]&&(xs.themeVariables=To[t.theme].getThemeVariables(t.themeVariables)),Y4(xs,c0),xs),"setSiteConfig"),V$=o(t=>{G$=Gn({},t)},"saveConfigFromInitialize"),U$=o(t=>(xs=Gn(xs,t),Y4(xs,c0),xs),"updateSiteConfig"),r7=o(()=>Gn({},xs),"getSiteConfig"),X4=o(t=>(q$(t),Gn(Dy,t),cr()),"setConfig"),cr=o(()=>Gn({},Dy),"getConfig"),H$=o(t=>{t&&(["secure",...xs.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(Y.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])}),Object.keys(t).forEach(e=>{e.startsWith("__")&&delete t[e]}),Object.keys(t).forEach(e=>{typeof t[e]=="string"&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],typeof t[e]=="object"&&H$(t[e])}))},"sanitize"),W$=o(t=>{l0(t),t.fontFamily&&!t.themeVariables?.fontFamily&&(t.themeVariables={...t.themeVariables,fontFamily:t.fontFamily}),c0.push(t),Y4(xs,c0)},"addDirective"),Ly=o((t=xs)=>{c0=[],Y4(t,c0)},"reset"),Lxe={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},z$={},Rxe=o(t=>{z$[t]||(Y.warn(Lxe[t]),z$[t]=!0)},"issueWarning"),q$=o(t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&Rxe("LAZY_LOAD_DEPRECATED")},"checkConfig")});function Ka(t){return function(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];return l7(t,e,n)}}function $xe(t){return function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];return c7(t,r)}}function Cr(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Q4;Y$&&Y$(t,null);let n=e.length;for(;n--;){let i=e[n];if(typeof i=="string"){let a=r(i);a!==i&&(Nxe(e)||(e[n]=a),i=a)}t[i]=!0}return t}function zxe(t){for(let e=0;e<t.length;e++)sl(t,e)||(t[e]=null);return t}function Qf(t){let e=nz(null);for(let[r,n]of rz(t))sl(t,r)&&(Array.isArray(n)?e[r]=zxe(n):n&&typeof n=="object"&&n.constructor===Object?e[r]=Qf(n):e[r]=n);return e}function Iy(t,e){for(;t!==null;){let n=Ixe(t,e);if(n){if(n.get)return Ka(n.get);if(typeof n.value=="function")return Ka(n.value)}t=Mxe(t)}function r(){return null}return o(r,"fallbackValue"),r}function sz(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Qxe(),e=o(At=>sz(At),"DOMPurify");if(e.version="3.2.4",e.removed=[],!t||!t.document||t.document.nodeType!==Oy.document||!t.Element)return e.isSupported=!1,e;let{document:r}=t,n=r,i=n.currentScript,{DocumentFragment:a,HTMLTemplateElement:s,Node:l,Element:u,NodeFilter:h,NamedNodeMap:f=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:d,DOMParser:p,trustedTypes:m}=t,g=u.prototype,y=Iy(g,"cloneNode"),v=Iy(g,"remove"),x=Iy(g,"nextSibling"),b=Iy(g,"childNodes"),w=Iy(g,"parentNode");if(typeof s=="function"){let At=r.createElement("template");At.content&&At.content.ownerDocument&&(r=At.content.ownerDocument)}let C,T="",{implementation:E,createNodeIterator:A,createDocumentFragment:S,getElementsByTagName:_}=r,{importNode:I}=n,D=tz();e.isSupported=typeof rz=="function"&&typeof w=="function"&&E&&E.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:k,ERB_EXPR:L,TMPLIT_EXPR:R,DATA_ATTR:O,ARIA_ATTR:M,IS_SCRIPT_OR_DATA:B,ATTR_WHITESPACE:F,CUSTOM_ELEMENT:P}=ez,{IS_ALLOWED_URI:z}=ez,$=null,H=Cr({},[...K$,...i7,...a7,...s7,...Q$]),Q=null,j=Cr({},[...Z$,...o7,...J$,...K4]),ie=Object.seal(nz(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ne=null,le=null,he=!0,K=!0,X=!1,te=!0,J=!1,se=!0,ue=!1,Z=!1,Se=!1,ce=!1,ae=!1,Oe=!1,ge=!0,ze=!1,He="user-content-",$e=!0,Re=!1,Ie={},be=null,W=Cr({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),de=null,re=Cr({},["audio","video","img","source","image","track"]),oe=null,V=Cr({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),xe="http://www.w3.org/1998/Math/MathML",q="http://www.w3.org/2000/svg",pe="http://www.w3.org/1999/xhtml",ve=pe,Pe=!1,_e=null,we=Cr({},[xe,q,pe],n7),Ve=Cr({},["mi","mo","mn","ms","mtext"]),De=Cr({},["annotation-xml"]),qe=Cr({},["title","style","font","a","script"]),at=null,Rt=["application/xhtml+xml","text/html"],st="text/html",Ue=null,ct=null,We=r.createElement("form"),ot=o(function(Ce){return Ce instanceof RegExp||Ce instanceof Function},"isRegexOrFunction"),Yt=o(function(){let Ce=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(ct&&ct===Ce)){if((!Ce||typeof Ce!="object")&&(Ce={}),Ce=Qf(Ce),at=Rt.indexOf(Ce.PARSER_MEDIA_TYPE)===-1?st:Ce.PARSER_MEDIA_TYPE,Ue=at==="application/xhtml+xml"?n7:Q4,$=sl(Ce,"ALLOWED_TAGS")?Cr({},Ce.ALLOWED_TAGS,Ue):H,Q=sl(Ce,"ALLOWED_ATTR")?Cr({},Ce.ALLOWED_ATTR,Ue):j,_e=sl(Ce,"ALLOWED_NAMESPACES")?Cr({},Ce.ALLOWED_NAMESPACES,n7):we,oe=sl(Ce,"ADD_URI_SAFE_ATTR")?Cr(Qf(V),Ce.ADD_URI_SAFE_ATTR,Ue):V,de=sl(Ce,"ADD_DATA_URI_TAGS")?Cr(Qf(re),Ce.ADD_DATA_URI_TAGS,Ue):re,be=sl(Ce,"FORBID_CONTENTS")?Cr({},Ce.FORBID_CONTENTS,Ue):W,ne=sl(Ce,"FORBID_TAGS")?Cr({},Ce.FORBID_TAGS,Ue):{},le=sl(Ce,"FORBID_ATTR")?Cr({},Ce.FORBID_ATTR,Ue):{},Ie=sl(Ce,"USE_PROFILES")?Ce.USE_PROFILES:!1,he=Ce.ALLOW_ARIA_ATTR!==!1,K=Ce.ALLOW_DATA_ATTR!==!1,X=Ce.ALLOW_UNKNOWN_PROTOCOLS||!1,te=Ce.ALLOW_SELF_CLOSE_IN_ATTR!==!1,J=Ce.SAFE_FOR_TEMPLATES||!1,se=Ce.SAFE_FOR_XML!==!1,ue=Ce.WHOLE_DOCUMENT||!1,ce=Ce.RETURN_DOM||!1,ae=Ce.RETURN_DOM_FRAGMENT||!1,Oe=Ce.RETURN_TRUSTED_TYPE||!1,Se=Ce.FORCE_BODY||!1,ge=Ce.SANITIZE_DOM!==!1,ze=Ce.SANITIZE_NAMED_PROPS||!1,$e=Ce.KEEP_CONTENT!==!1,Re=Ce.IN_PLACE||!1,z=Ce.ALLOWED_URI_REGEXP||iz,ve=Ce.NAMESPACE||pe,Ve=Ce.MATHML_TEXT_INTEGRATION_POINTS||Ve,De=Ce.HTML_INTEGRATION_POINTS||De,ie=Ce.CUSTOM_ELEMENT_HANDLING||{},Ce.CUSTOM_ELEMENT_HANDLING&&ot(Ce.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ie.tagNameCheck=Ce.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Ce.CUSTOM_ELEMENT_HANDLING&&ot(Ce.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ie.attributeNameCheck=Ce.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Ce.CUSTOM_ELEMENT_HANDLING&&typeof Ce.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(ie.allowCustomizedBuiltInElements=Ce.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),J&&(K=!1),ae&&(ce=!0),Ie&&($=Cr({},Q$),Q=[],Ie.html===!0&&(Cr($,K$),Cr(Q,Z$)),Ie.svg===!0&&(Cr($,i7),Cr(Q,o7),Cr(Q,K4)),Ie.svgFilters===!0&&(Cr($,a7),Cr(Q,o7),Cr(Q,K4)),Ie.mathMl===!0&&(Cr($,s7),Cr(Q,J$),Cr(Q,K4))),Ce.ADD_TAGS&&($===H&&($=Qf($)),Cr($,Ce.ADD_TAGS,Ue)),Ce.ADD_ATTR&&(Q===j&&(Q=Qf(Q)),Cr(Q,Ce.ADD_ATTR,Ue)),Ce.ADD_URI_SAFE_ATTR&&Cr(oe,Ce.ADD_URI_SAFE_ATTR,Ue),Ce.FORBID_CONTENTS&&(be===W&&(be=Qf(be)),Cr(be,Ce.FORBID_CONTENTS,Ue)),$e&&($["#text"]=!0),ue&&Cr($,["html","head","body"]),$.table&&(Cr($,["tbody"]),delete ne.tbody),Ce.TRUSTED_TYPES_POLICY){if(typeof Ce.TRUSTED_TYPES_POLICY.createHTML!="function")throw My('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Ce.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw My('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');C=Ce.TRUSTED_TYPES_POLICY,T=C.createHTML("")}else C===void 0&&(C=Zxe(m,i)),C!==null&&typeof T=="string"&&(T=C.createHTML(""));ja&&ja(Ce),ct=Ce}},"_parseConfig"),bt=Cr({},[...i7,...a7,...Gxe]),Mt=Cr({},[...s7,...Vxe]),xt=o(function(Ce){let tt=w(Ce);(!tt||!tt.tagName)&&(tt={namespaceURI:ve,tagName:"template"});let St=Q4(Ce.tagName),mr=Q4(tt.tagName);return _e[Ce.namespaceURI]?Ce.namespaceURI===q?tt.namespaceURI===pe?St==="svg":tt.namespaceURI===xe?St==="svg"&&(mr==="annotation-xml"||Ve[mr]):!!bt[St]:Ce.namespaceURI===xe?tt.namespaceURI===pe?St==="math":tt.namespaceURI===q?St==="math"&&De[mr]:!!Mt[St]:Ce.namespaceURI===pe?tt.namespaceURI===q&&!De[mr]||tt.namespaceURI===xe&&!Ve[mr]?!1:!Mt[St]&&(qe[St]||!bt[St]):!!(at==="application/xhtml+xml"&&_e[Ce.namespaceURI]):!1},"_checkValidNamespace"),ut=o(function(Ce){Ry(e.removed,{element:Ce});try{w(Ce).removeChild(Ce)}catch{v(Ce)}},"_forceRemove"),Et=o(function(Ce,tt){try{Ry(e.removed,{attribute:tt.getAttributeNode(Ce),from:tt})}catch{Ry(e.removed,{attribute:null,from:tt})}if(tt.removeAttribute(Ce),Ce==="is")if(ce||ae)try{ut(tt)}catch{}else try{tt.setAttribute(Ce,"")}catch{}},"_removeAttribute"),ft=o(function(Ce){let tt=null,St=null;if(Se)Ce="<remove></remove>"+Ce;else{let gn=j$(Ce,/^[\r\n\t ]+/);St=gn&&gn[0]}at==="application/xhtml+xml"&&ve===pe&&(Ce='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+Ce+"</body></html>");let mr=C?C.createHTML(Ce):Ce;if(ve===pe)try{tt=new p().parseFromString(mr,at)}catch{}if(!tt||!tt.documentElement){tt=E.createDocument(ve,"template",null);try{tt.documentElement.innerHTML=Pe?T:mr}catch{}}let rn=tt.body||tt.documentElement;return Ce&&St&&rn.insertBefore(r.createTextNode(St),rn.childNodes[0]||null),ve===pe?_.call(tt,ue?"html":"body")[0]:ue?tt.documentElement:rn},"_initDocument"),yt=o(function(Ce){return A.call(Ce.ownerDocument||Ce,Ce,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT|h.SHOW_PROCESSING_INSTRUCTION|h.SHOW_CDATA_SECTION,null)},"_createNodeIterator"),nt=o(function(Ce){return Ce instanceof d&&(typeof Ce.nodeName!="string"||typeof Ce.textContent!="string"||typeof Ce.removeChild!="function"||!(Ce.attributes instanceof f)||typeof Ce.removeAttribute!="function"||typeof Ce.setAttribute!="function"||typeof Ce.namespaceURI!="string"||typeof Ce.insertBefore!="function"||typeof Ce.hasChildNodes!="function")},"_isClobbered"),dn=o(function(Ce){return typeof l=="function"&&Ce instanceof l},"_isNode");function Tt(At,Ce,tt){j4(At,St=>{St.call(e,Ce,tt,ct)})}o(Tt,"_executeHooks");let On=o(function(Ce){let tt=null;if(Tt(D.beforeSanitizeElements,Ce,null),nt(Ce))return ut(Ce),!0;let St=Ue(Ce.nodeName);if(Tt(D.uponSanitizeElement,Ce,{tagName:St,allowedTags:$}),Ce.hasChildNodes()&&!dn(Ce.firstElementChild)&&Xa(/<[/\w]/g,Ce.innerHTML)&&Xa(/<[/\w]/g,Ce.textContent)||Ce.nodeType===Oy.progressingInstruction||se&&Ce.nodeType===Oy.comment&&Xa(/<[/\w]/g,Ce.data))return ut(Ce),!0;if(!$[St]||ne[St]){if(!ne[St]&&_r(St)&&(ie.tagNameCheck instanceof RegExp&&Xa(ie.tagNameCheck,St)||ie.tagNameCheck instanceof Function&&ie.tagNameCheck(St)))return!1;if($e&&!be[St]){let mr=w(Ce)||Ce.parentNode,rn=b(Ce)||Ce.childNodes;if(rn&&mr){let gn=rn.length;for(let Zr=gn-1;Zr>=0;--Zr){let Ni=y(rn[Zr],!0);Ni.__removalCount=(Ce.__removalCount||0)+1,mr.insertBefore(Ni,x(Ce))}}}return ut(Ce),!0}return Ce instanceof u&&!xt(Ce)||(St==="noscript"||St==="noembed"||St==="noframes")&&Xa(/<\/no(script|embed|frames)/i,Ce.innerHTML)?(ut(Ce),!0):(J&&Ce.nodeType===Oy.text&&(tt=Ce.textContent,j4([k,L,R],mr=>{tt=Ny(tt,mr," ")}),Ce.textContent!==tt&&(Ry(e.removed,{element:Ce.cloneNode()}),Ce.textContent=tt)),Tt(D.afterSanitizeElements,Ce,null),!1)},"_sanitizeElements"),tn=o(function(Ce,tt,St){if(ge&&(tt==="id"||tt==="name")&&(St in r||St in We))return!1;if(!(K&&!le[tt]&&Xa(O,tt))){if(!(he&&Xa(M,tt))){if(!Q[tt]||le[tt]){if(!(_r(Ce)&&(ie.tagNameCheck instanceof RegExp&&Xa(ie.tagNameCheck,Ce)||ie.tagNameCheck instanceof Function&&ie.tagNameCheck(Ce))&&(ie.attributeNameCheck instanceof RegExp&&Xa(ie.attributeNameCheck,tt)||ie.attributeNameCheck instanceof Function&&ie.attributeNameCheck(tt))||tt==="is"&&ie.allowCustomizedBuiltInElements&&(ie.tagNameCheck instanceof RegExp&&Xa(ie.tagNameCheck,St)||ie.tagNameCheck instanceof Function&&ie.tagNameCheck(St))))return!1}else if(!oe[tt]){if(!Xa(z,Ny(St,F,""))){if(!((tt==="src"||tt==="xlink:href"||tt==="href")&&Ce!=="script"&&Bxe(St,"data:")===0&&de[Ce])){if(!(X&&!Xa(B,Ny(St,F,"")))){if(St)return!1}}}}}}return!0},"_isValidAttribute"),_r=o(function(Ce){return Ce!=="annotation-xml"&&j$(Ce,P)},"_isBasicCustomElement"),Dr=o(function(Ce){Tt(D.beforeSanitizeAttributes,Ce,null);let{attributes:tt}=Ce;if(!tt||nt(Ce))return;let St={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Q,forceKeepAttr:void 0},mr=tt.length;for(;mr--;){let rn=tt[mr],{name:gn,namespaceURI:Zr,value:Ni}=rn,Zn=Ue(gn),Sn=gn==="value"?Ni:Fxe(Ni);if(St.attrName=Zn,St.attrValue=Sn,St.keepAttr=!0,St.forceKeepAttr=void 0,Tt(D.uponSanitizeAttribute,Ce,St),Sn=St.attrValue,ze&&(Zn==="id"||Zn==="name")&&(Et(gn,Ce),Sn=He+Sn),se&&Xa(/((--!?|])>)|<\/(style|title)/i,Sn)){Et(gn,Ce);continue}if(St.forceKeepAttr||(Et(gn,Ce),!St.keepAttr))continue;if(!te&&Xa(/\/>/i,Sn)){Et(gn,Ce);continue}J&&j4([k,L,R],et=>{Sn=Ny(Sn,et," ")});let Hr=Ue(Ce.nodeName);if(tn(Hr,Zn,Sn)){if(C&&typeof m=="object"&&typeof m.getAttributeType=="function"&&!Zr)switch(m.getAttributeType(Hr,Zn)){case"TrustedHTML":{Sn=C.createHTML(Sn);break}case"TrustedScriptURL":{Sn=C.createScriptURL(Sn);break}}try{Zr?Ce.setAttributeNS(Zr,gn,Sn):Ce.setAttribute(gn,Sn),nt(Ce)?ut(Ce):X$(e.removed)}catch{}}}Tt(D.afterSanitizeAttributes,Ce,null)},"_sanitizeAttributes"),Pn=o(function At(Ce){let tt=null,St=yt(Ce);for(Tt(D.beforeSanitizeShadowDOM,Ce,null);tt=St.nextNode();)Tt(D.uponSanitizeShadowNode,tt,null),On(tt),Dr(tt),tt.content instanceof a&&At(tt.content);Tt(D.afterSanitizeShadowDOM,Ce,null)},"_sanitizeShadowDOM");return e.sanitize=function(At){let Ce=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},tt=null,St=null,mr=null,rn=null;if(Pe=!At,Pe&&(At="<!-->"),typeof At!="string"&&!dn(At))if(typeof At.toString=="function"){if(At=At.toString(),typeof At!="string")throw My("dirty is not a string, aborting")}else throw My("toString is not a function");if(!e.isSupported)return At;if(Z||Yt(Ce),e.removed=[],typeof At=="string"&&(Re=!1),Re){if(At.nodeName){let Ni=Ue(At.nodeName);if(!$[Ni]||ne[Ni])throw My("root node is forbidden and cannot be sanitized in-place")}}else if(At instanceof l)tt=ft("<!---->"),St=tt.ownerDocument.importNode(At,!0),St.nodeType===Oy.element&&St.nodeName==="BODY"||St.nodeName==="HTML"?tt=St:tt.appendChild(St);else{if(!ce&&!J&&!ue&&At.indexOf("<")===-1)return C&&Oe?C.createHTML(At):At;if(tt=ft(At),!tt)return ce?null:Oe?T:""}tt&&Se&&ut(tt.firstChild);let gn=yt(Re?At:tt);for(;mr=gn.nextNode();)On(mr),Dr(mr),mr.content instanceof a&&Pn(mr.content);if(Re)return At;if(ce){if(ae)for(rn=S.call(tt.ownerDocument);tt.firstChild;)rn.appendChild(tt.firstChild);else rn=tt;return(Q.shadowroot||Q.shadowrootmode)&&(rn=I.call(n,rn,!0)),rn}let Zr=ue?tt.outerHTML:tt.innerHTML;return ue&&$["!doctype"]&&tt.ownerDocument&&tt.ownerDocument.doctype&&tt.ownerDocument.doctype.name&&Xa(az,tt.ownerDocument.doctype.name)&&(Zr="<!DOCTYPE "+tt.ownerDocument.doctype.name+`>
15 +`+Zr),J&&j4([k,L,R],Ni=>{Zr=Ny(Zr,Ni," ")}),C&&Oe?C.createHTML(Zr):Zr},e.setConfig=function(){let At=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Yt(At),Z=!0},e.clearConfig=function(){ct=null,Z=!1},e.isValidAttribute=function(At,Ce,tt){ct||Yt({});let St=Ue(At),mr=Ue(Ce);return tn(St,mr,tt)},e.addHook=function(At,Ce){typeof Ce=="function"&&Ry(D[At],Ce)},e.removeHook=function(At,Ce){if(Ce!==void 0){let tt=Oxe(D[At],Ce);return tt===-1?void 0:Pxe(D[At],tt,1)[0]}return X$(D[At])},e.removeHooks=function(At){D[At]=[]},e.removeAllHooks=function(){D=tz()},e}var rz,Y$,Nxe,Mxe,Ixe,ja,ko,nz,l7,c7,j4,Oxe,X$,Ry,Pxe,Q4,n7,j$,Ny,Bxe,Fxe,sl,Xa,My,K$,i7,a7,Gxe,s7,Vxe,Q$,Z$,o7,J$,K4,Uxe,Hxe,Wxe,qxe,Yxe,iz,Xxe,jxe,az,Kxe,ez,Oy,Qxe,Zxe,tz,ch,u7=N(()=>{"use strict";({entries:rz,setPrototypeOf:Y$,isFrozen:Nxe,getPrototypeOf:Mxe,getOwnPropertyDescriptor:Ixe}=Object),{freeze:ja,seal:ko,create:nz}=Object,{apply:l7,construct:c7}=typeof Reflect<"u"&&Reflect;ja||(ja=o(function(e){return e},"freeze"));ko||(ko=o(function(e){return e},"seal"));l7||(l7=o(function(e,r,n){return e.apply(r,n)},"apply"));c7||(c7=o(function(e,r){return new e(...r)},"construct"));j4=Ka(Array.prototype.forEach),Oxe=Ka(Array.prototype.lastIndexOf),X$=Ka(Array.prototype.pop),Ry=Ka(Array.prototype.push),Pxe=Ka(Array.prototype.splice),Q4=Ka(String.prototype.toLowerCase),n7=Ka(String.prototype.toString),j$=Ka(String.prototype.match),Ny=Ka(String.prototype.replace),Bxe=Ka(String.prototype.indexOf),Fxe=Ka(String.prototype.trim),sl=Ka(Object.prototype.hasOwnProperty),Xa=Ka(RegExp.prototype.test),My=$xe(TypeError);o(Ka,"unapply");o($xe,"unconstruct");o(Cr,"addToSet");o(zxe,"cleanArray");o(Qf,"clone");o(Iy,"lookupGetter");K$=ja(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),i7=ja(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),a7=ja(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),Gxe=ja(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),s7=ja(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),Vxe=ja(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Q$=ja(["#text"]),Z$=ja(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),o7=ja(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),J$=ja(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),K4=ja(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Uxe=ko(/\{\{[\w\W]*|[\w\W]*\}\}/gm),Hxe=ko(/<%[\w\W]*|[\w\W]*%>/gm),Wxe=ko(/\$\{[\w\W]*/gm),qxe=ko(/^data-[\-\w.\u00B7-\uFFFF]+$/),Yxe=ko(/^aria-[\-\w]+$/),iz=ko(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Xxe=ko(/^(?:\w+script|data):/i),jxe=ko(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),az=ko(/^html$/i),Kxe=ko(/^[a-z][.\w]*(-[.\w]+)+$/i),ez=Object.freeze({__proto__:null,ARIA_ATTR:Yxe,ATTR_WHITESPACE:jxe,CUSTOM_ELEMENT:Kxe,DATA_ATTR:qxe,DOCTYPE_NAME:az,ERB_EXPR:Hxe,IS_ALLOWED_URI:iz,IS_SCRIPT_OR_DATA:Xxe,MUSTACHE_EXPR:Uxe,TMPLIT_EXPR:Wxe}),Oy={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Qxe=o(function(){return typeof window>"u"?null:window},"getGlobal"),Zxe=o(function(e,r){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let n=null,i="data-tt-policy-suffix";r&&r.hasAttribute(i)&&(n=r.getAttribute(i));let a="dompurify"+(n?"#"+n:"");try{return e.createPolicy(a,{createHTML(s){return s},createScriptURL(s){return s}})}catch{return console.warn("TrustedTypes policy "+a+" could not be created."),null}},"_createTrustedTypesPolicy"),tz=o(function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},"_createHooksMap");o(sz,"createDOMPurify");ch=sz()});var MG={};hr(MG,{default:()=>q4e});function abe(t){return String(t).replace(ibe,e=>nbe[e])}function cbe(t){if(t.default)return t.default;var e=t.type,r=Array.isArray(e)?e[0]:e;if(typeof r!="string")return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}function gbe(t){for(var e=0;e<k7.length;e++)for(var r=k7[e],n=0;n<r.blocks.length;n++){var i=r.blocks[n];if(t>=i[0]&&t<=i[1])return r.name}return null}function $z(t){for(var e=0;e<u3.length;e+=2)if(t>=u3[e]&&t<=u3[e+1])return!0;return!1}function Abe(t,e){jl[t]=e}function P7(t,e,r){if(!jl[e])throw new Error("Font metrics not found for font: "+e+".");var n=t.charCodeAt(0),i=jl[e][n];if(!i&&t[0]in lz&&(n=lz[t[0]].charCodeAt(0),i=jl[e][n]),!i&&r==="text"&&$z(n)&&(i=jl[e][77]),i)return{depth:i[0],height:i[1],italic:i[2],skew:i[3],width:i[4]}}function _be(t){var e;if(t>=5?e=0:t>=3?e=1:e=2,!h7[e]){var r=h7[e]={cssEmPerMu:Z4.quad[e]/18};for(var n in Z4)Z4.hasOwnProperty(n)&&(r[n]=Z4[n][e])}return h7[e]}function hz(t){if(t instanceof Ts)return t;throw new Error("Expected symbolNode but got "+String(t)+".")}function Nbe(t){if(t instanceof td)return t;throw new Error("Expected span<HtmlDomNode> but got "+String(t)+".")}function G(t,e,r,n,i,a){An[t][i]={font:e,group:r,replace:n},a&&n&&(An[t][n]=An[t][i])}function Nt(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:n.allowedInMath===void 0?!0:n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:i},u=0;u<r.length;++u)jz[r[u]]=l;e&&(a&&(p3[e]=a),s&&(m3[e]=s))}function rd(t){var{type:e,htmlBuilder:r,mathmlBuilder:n}=t;Nt({type:e,names:[],props:{numArgs:0},handler(){throw new Error("Should never be called.")},htmlBuilder:r,mathmlBuilder:n})}function a3(t,e){var r=lu(["base"],t,e),n=lu(["strut"]);return n.style.height=kt(r.height+r.depth),r.depth&&(n.style.verticalAlign=kt(-r.depth)),r.children.unshift(n),r}function _7(t,e){var r=null;t.length===1&&t[0].type==="tag"&&(r=t[0].tag,t=t[0].body);var n=Pi(t,e,"root"),i;n.length===2&&n[1].hasClass("tag")&&(i=n.pop());for(var a=[],s=[],l=0;l<n.length;l++)if(s.push(n[l]),n[l].hasClass("mbin")||n[l].hasClass("mrel")||n[l].hasClass("allowbreak")){for(var u=!1;l<n.length-1&&n[l+1].hasClass("mspace")&&!n[l+1].hasClass("newline");)l++,s.push(n[l]),n[l].hasClass("nobreak")&&(u=!0);u||(a.push(a3(s,e)),s=[])}else n[l].hasClass("newline")&&(s.pop(),s.length>0&&(a.push(a3(s,e)),s=[]),a.push(n[l]));s.length>0&&a.push(a3(s,e));var h;r?(h=a3(Pi(r,e,!0)),h.classes=["tag"],a.push(h)):i&&a.push(i);var f=lu(["katex-html"],a);if(f.setAttribute("aria-hidden","true"),h){var d=h.children[0];d.style.height=kt(f.height+f.depth),f.depth&&(d.style.verticalAlign=kt(-f.depth))}return f}function Qz(t){return new ed(t)}function gz(t,e,r,n,i){var a=ks(t,r),s;a.length===1&&a[0]instanceof ws&&Jt.contains(["mrow","mtable"],a[0].type)?s=a[0]:s=new dt.MathNode("mrow",a);var l=new dt.MathNode("annotation",[new dt.TextNode(e)]);l.setAttribute("encoding","application/x-tex");var u=new dt.MathNode("semantics",[s,l]),h=new dt.MathNode("math",[u]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&h.setAttribute("display","block");var f=i?"katex":"katex-mathml";return Be.makeSpan([f],[h])}function xr(t,e){if(!t||t.type!==e)throw new Error("Expected node of type "+e+", but got "+(t?"node of type "+t.type:String(t)));return t}function z7(t){var e=w3(t);if(!e)throw new Error("Expected node of symbol group type, but got "+(t?"node of type "+t.type:String(t)));return e}function w3(t){return t&&(t.type==="atom"||Ibe.hasOwnProperty(t.type))?t:null}function tG(t,e){var r=Pi(t.body,e,!0);return u4e([t.mclass],r,e)}function rG(t,e){var r,n=ks(t.body,e);return t.mclass==="minner"?r=new dt.MathNode("mpadded",n):t.mclass==="mord"?t.isCharacterBox?(r=n[0],r.type="mi"):r=new dt.MathNode("mi",n):(t.isCharacterBox?(r=n[0],r.type="mo"):r=new dt.MathNode("mo",n),t.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):t.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):t.mclass==="mopen"||t.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):t.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}function d4e(t,e,r){var n=h4e[t];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[e[0]],[e[1]]);case"\\uparrow":case"\\downarrow":{var i=r.callFunction("\\\\cdleft",[e[0]],[]),a={type:"atom",text:n,mode:"math",family:"rel"},s=r.callFunction("\\Big",[a],[]),l=r.callFunction("\\\\cdright",[e[1]],[]),u={type:"ordgroup",mode:"math",body:[i,s,l]};return r.callFunction("\\\\cdparent",[u],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var h={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[h],[])}default:return{type:"textord",text:" ",mode:"math"}}}function p4e(t){var e=[];for(t.gullet.beginGroup(),t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();;){e.push(t.parseExpression(!1,"\\\\")),t.gullet.endGroup(),t.gullet.beginGroup();var r=t.fetch().text;if(r==="&"||r==="\\\\")t.consume();else if(r==="\\end"){e[e.length-1].length===0&&e.pop();break}else throw new gt("Expected \\\\ or \\cr or \\end",t.nextToken)}for(var n=[],i=[n],a=0;a<e.length;a++){for(var s=e[a],l=yz(),u=0;u<s.length;u++)if(!vz(s[u]))l.body.push(s[u]);else{n.push(l),u+=1;var h=z7(s[u]).text,f=new Array(2);if(f[0]={type:"ordgroup",mode:"math",body:[]},f[1]={type:"ordgroup",mode:"math",body:[]},!("=|.".indexOf(h)>-1))if("<>AV".indexOf(h)>-1)for(var d=0;d<2;d++){for(var p=!0,m=u+1;m<s.length;m++){if(f4e(s[m],h)){p=!1,u=m;break}if(vz(s[m]))throw new gt("Missing a "+h+" character to complete a CD arrow.",s[m]);f[d].body.push(s[m])}if(p)throw new gt("Missing a "+h+" character to complete a CD arrow.",s[u])}else throw new gt('Expected one of "<>AV=|." after @',s[u]);var g=d4e(h,f,t),y={type:"styling",body:[g],mode:"math",style:"display"};n.push(y),l=yz()}a%2===0?n.push(l):n.shift(),n=[],i.push(n)}t.gullet.endGroup(),t.gullet.endGroup();var v=new Array(i[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:i,arraystretch:1,addJot:!0,rowGaps:[null],cols:v,colSeparationType:"CD",hLinesBeforeRow:new Array(i.length+1).fill([])}}function k3(t,e){var r=w3(t);if(r&&Jt.contains(A4e,r.text))return r;throw r?new gt("Invalid delimiter '"+r.text+"' after '"+e.funcName+"'",t):new gt("Invalid delimiter type '"+t.type+"'",t)}function bz(t){if(!t.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}function Ql(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:i},u=0;u<r.length;++u)mG[r[u]]=l;a&&(p3[e]=a),s&&(m3[e]=s)}function fe(t,e){gG[t]=e}function wz(t){var e=[];t.consumeSpaces();var r=t.fetch().text;for(r==="\\relax"&&(t.consume(),t.consumeSpaces(),r=t.fetch().text);r==="\\hline"||r==="\\hdashline";)t.consume(),e.push(r==="\\hdashline"),t.consumeSpaces(),r=t.fetch().text;return e}function W7(t){if(t.indexOf("ed")===-1)return t.indexOf("*")===-1}function ph(t,e,r){var{hskipBeforeAndAfter:n,addJot:i,cols:a,arraystretch:s,colSeparationType:l,autoTag:u,singleRow:h,emptySingleRow:f,maxNumCols:d,leqno:p}=e;if(t.gullet.beginGroup(),h||t.gullet.macros.set("\\cr","\\\\\\relax"),!s){var m=t.gullet.expandMacroAsText("\\arraystretch");if(m==null)s=1;else if(s=parseFloat(m),!s||s<0)throw new gt("Invalid \\arraystretch: "+m)}t.gullet.beginGroup();var g=[],y=[g],v=[],x=[],b=u!=null?[]:void 0;function w(){u&&t.gullet.macros.set("\\@eqnsw","1",!0)}o(w,"beginRow");function C(){b&&(t.gullet.macros.get("\\df@tag")?(b.push(t.subparse([new So("\\df@tag")])),t.gullet.macros.set("\\df@tag",void 0,!0)):b.push(!!u&&t.gullet.macros.get("\\@eqnsw")==="1"))}for(o(C,"endRow"),w(),x.push(wz(t));;){var T=t.parseExpression(!1,h?"\\end":"\\\\");t.gullet.endGroup(),t.gullet.beginGroup(),T={type:"ordgroup",mode:t.mode,body:T},r&&(T={type:"styling",mode:t.mode,style:r,body:[T]}),g.push(T);var E=t.fetch().text;if(E==="&"){if(d&&g.length===d){if(h||l)throw new gt("Too many tab characters: &",t.nextToken);t.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}t.consume()}else if(E==="\\end"){C(),g.length===1&&T.type==="styling"&&T.body[0].body.length===0&&(y.length>1||!f)&&y.pop(),x.length<y.length+1&&x.push([]);break}else if(E==="\\\\"){t.consume();var A=void 0;t.gullet.future().text!==" "&&(A=t.parseSizeGroup(!0)),v.push(A?A.value:null),C(),x.push(wz(t)),g=[],y.push(g),w()}else throw new gt("Expected & or \\\\ or \\cr or \\end",t.nextToken)}return t.gullet.endGroup(),t.gullet.endGroup(),{type:"array",mode:t.mode,addJot:i,arraystretch:s,body:y,cols:a,rowGaps:v,hskipBeforeAndAfter:n,hLinesBeforeRow:x,colSeparationType:l,tags:b,leqno:p}}function q7(t){return t.slice(0,1)==="d"?"display":"text"}function SG(t,e,r){for(var n=Pi(t,e,!1),i=e.sizeMultiplier/r.sizeMultiplier,a=0;a<n.length;a++){var s=n[a].classes.indexOf("sizing");s<0?Array.prototype.push.apply(n[a].classes,e.sizingClasses(r)):n[a].classes[s+1]==="reset-size"+e.size&&(n[a].classes[s+1]="reset-size"+r.size),n[a].height*=i,n[a].depth*=i}return Be.makeFragment(n)}var Xs,So,gt,Jxe,ebe,tbe,rbe,nbe,ibe,Fz,sbe,obe,lbe,Jt,c3,zy,Yl,O7,h3,f0,su,Gy,Eo,d0,Qa,Xl,ube,hbe,fbe,dbe,pbe,mbe,tr,k7,u3,h0,ybe,vbe,xbe,bbe,wbe,Tbe,kbe,Ebe,Sbe,oz,Cbe,ed,jl,Z4,lz,h7,Dbe,cz,uz,f3,E7,Lbe,zz,ti,kt,fh,Gz,Vz,Uz,td,Vy,S7,Rbe,Ts,ll,Kl,Uy,Mbe,Ibe,An,U,it,ee,ke,Vn,It,Za,p0,er,ki,js,x3,Ee,uu,Le,Hz,fz,f7,J4,dz,d7,e3,d3,Py,t3,sr,Jn,Ca,iu,uh,C7,By,r3,n3,pz,Obe,b3,ol,Pbe,Bbe,Fbe,$be,zbe,B7,bs,Wz,Gbe,Vbe,qz,Ube,Hbe,Wbe,qbe,i3,Yz,Xz,Ybe,Be,ei,Zf,au,Xbe,jbe,jz,p3,m3,g3,di,lu,Kbe,Qbe,Zbe,Jbe,Pi,mz,Kz,e4e,A7,Hy,Fr,ws,Jf,D7,dt,Co,F7,$7,ks,dh,yn,Zz,Jz,t4e,r4e,n4e,i4e,a4e,s4e,o4e,l4e,cu,G7,eG,c4e,s3,u4e,T3,h4e,yz,vz,f4e,nG,iG,L7,aG,m4e,sG,Fy,V7,oG,g4e,y4e,lG,p7,m7,R7,o3,v4e,x4e,cG,g7,y7,v7,b4e,uG,w4e,hG,$y,T4e,k4e,E4e,fG,S4e,dG,pG,C4e,ou,xz,A4e,U7,H7,mG,gG,E3,Zl,_4e,Jl,yG,Tz,vG,xG,kz,bG,Y7,X7,Ez,Sz,wG,D4e,x7,Cz,TG,kG,m0,Wy,L4e,R4e,EG,N4e,Az,M4e,_z,I4e,CG,b7,w7,Dz,Lz,Rz,O4e,Nz,Mz,hh,AG,P4e,B4e,F4e,$4e,N7,z4e,G4e,y3,M7,V4e,Iz,j7,Oz,K7,_G,DG,LG,I7,Pz,l3,T7,Bz,v3,Q7,RG,U4e,H4e,NG,Z7,W4e,q4e,IG=N(()=>{"use strict";Xs=class t{static{o(this,"SourceLocation")}constructor(e,r,n){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=r,this.end=n}static range(e,r){return r?!e||!e.loc||!r.loc||e.loc.lexer!==r.loc.lexer?null:new t(e.loc.lexer,e.loc.start,r.loc.end):e&&e.loc}},So=class t{static{o(this,"Token")}constructor(e,r){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=r}range(e,r){return new t(r,Xs.range(this,e))}},gt=class t{static{o(this,"ParseError")}constructor(e,r){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var n="KaTeX parse error: "+e,i,a,s=r&&r.loc;if(s&&s.start<=s.end){var l=s.lexer.input;i=s.start,a=s.end,i===l.length?n+=" at end of input: ":n+=" at position "+(i+1)+": ";var u=l.slice(i,a).replace(/[^]/g,"$&\u0332"),h;i>15?h="\u2026"+l.slice(i-15,i):h=l.slice(0,i);var f;a+15<l.length?f=l.slice(a,a+15)+"\u2026":f=l.slice(a),n+=h+u+f}var d=new Error(n);return d.name="ParseError",d.__proto__=t.prototype,d.position=i,i!=null&&a!=null&&(d.length=a-i),d.rawMessage=e,d}};gt.prototype.__proto__=Error.prototype;Jxe=o(function(e,r){return e.indexOf(r)!==-1},"contains"),ebe=o(function(e,r){return e===void 0?r:e},"deflt"),tbe=/([A-Z])/g,rbe=o(function(e){return e.replace(tbe,"-$1").toLowerCase()},"hyphenate"),nbe={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#x27;"},ibe=/[&><"']/g;o(abe,"escape");Fz=o(function t(e){return e.type==="ordgroup"||e.type==="color"?e.body.length===1?t(e.body[0]):e:e.type==="font"?t(e.body):e},"getBaseElem"),sbe=o(function(e){var r=Fz(e);return r.type==="mathord"||r.type==="textord"||r.type==="atom"},"isCharacterBox"),obe=o(function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e},"assert"),lbe=o(function(e){var r=/^[\x00-\x20]*([^\\/#?]*?)(:|&#0*58|&#x0*3a|&colon)/i.exec(e);return r?r[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(r[1])?null:r[1].toLowerCase():"_relative"},"protocolFromUrl"),Jt={contains:Jxe,deflt:ebe,escape:abe,hyphenate:rbe,getBaseElem:Fz,isCharacterBox:sbe,protocolFromUrl:lbe},c3={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format <type>"},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color <color>",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:o(t=>"#"+t,"cliProcessor")},macros:{type:"object",cli:"-m, --macro <def>",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:o((t,e)=>(e.push(t),e),"cliProcessor")},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:o(t=>Math.max(0,t),"processor"),cli:"--min-rule-thickness <size>",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:o(t=>Math.max(0,t),"processor"),cli:"-s, --max-size <n>",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:o(t=>Math.max(0,t),"processor"),cli:"-e, --max-expand <n>",cliProcessor:o(t=>t==="Infinity"?1/0:parseInt(t),"cliProcessor")},globalGroup:{type:"boolean",cli:!1}};o(cbe,"getDefaultValue");zy=class{static{o(this,"Settings")}constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(var r in c3)if(c3.hasOwnProperty(r)){var n=c3[r];this[r]=e[r]!==void 0?n.processor?n.processor(e[r]):e[r]:cbe(n)}}reportNonstrict(e,r,n){var i=this.strict;if(typeof i=="function"&&(i=i(e,r,n)),!(!i||i==="ignore")){if(i===!0||i==="error")throw new gt("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+e+"]"),n);i==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]"))}}useStrictBehavior(e,r,n){var i=this.strict;if(typeof i=="function")try{i=i(e,r,n)}catch{i="error"}return!i||i==="ignore"?!1:i===!0||i==="error"?!0:i==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]")),!1)}isTrusted(e){if(e.url&&!e.protocol){var r=Jt.protocolFromUrl(e.url);if(r==null)return!1;e.protocol=r}var n=typeof this.trust=="function"?this.trust(e):this.trust;return!!n}},Yl=class{static{o(this,"Style")}constructor(e,r,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=r,this.cramped=n}sup(){return Xl[ube[this.id]]}sub(){return Xl[hbe[this.id]]}fracNum(){return Xl[fbe[this.id]]}fracDen(){return Xl[dbe[this.id]]}cramp(){return Xl[pbe[this.id]]}text(){return Xl[mbe[this.id]]}isTight(){return this.size>=2}},O7=0,h3=1,f0=2,su=3,Gy=4,Eo=5,d0=6,Qa=7,Xl=[new Yl(O7,0,!1),new Yl(h3,0,!0),new Yl(f0,1,!1),new Yl(su,1,!0),new Yl(Gy,2,!1),new Yl(Eo,2,!0),new Yl(d0,3,!1),new Yl(Qa,3,!0)],ube=[Gy,Eo,Gy,Eo,d0,Qa,d0,Qa],hbe=[Eo,Eo,Eo,Eo,Qa,Qa,Qa,Qa],fbe=[f0,su,Gy,Eo,d0,Qa,d0,Qa],dbe=[su,su,Eo,Eo,Qa,Qa,Qa,Qa],pbe=[h3,h3,su,su,Eo,Eo,Qa,Qa],mbe=[O7,h3,f0,su,f0,su,f0,su],tr={DISPLAY:Xl[O7],TEXT:Xl[f0],SCRIPT:Xl[Gy],SCRIPTSCRIPT:Xl[d0]},k7=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];o(gbe,"scriptFromCodepoint");u3=[];k7.forEach(t=>t.blocks.forEach(e=>u3.push(...e)));o($z,"supportedCodepoint");h0=80,ybe=o(function(e,r){return"M95,"+(622+e+r)+`
16 +c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14
17 +c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54
18 +c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10
19 +s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429
20 +c69,-144,104.5,-217.7,106.5,-221
21 +l`+e/2.075+" -"+e+`
22 +c5.3,-9.3,12,-14,20,-14
23 +H400000v`+(40+e)+`H845.2724
24 +s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7
25 +c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z
26 +M`+(834+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtMain"),vbe=o(function(e,r){return"M263,"+(601+e+r)+`c0.7,0,18,39.7,52,119
27 +c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120
28 +c340,-704.7,510.7,-1060.3,512,-1067
29 +l`+e/2.084+" -"+e+`
30 +c4.7,-7.3,11,-11,19,-11
31 +H40000v`+(40+e)+`H1012.3
32 +s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232
33 +c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1
34 +s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26
35 +c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z
36 +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize1"),xbe=o(function(e,r){return"M983 "+(10+e+r)+`
37 +l`+e/3.13+" -"+e+`
38 +c4,-6.7,10,-10,18,-10 H400000v`+(40+e)+`
39 +H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7
40 +s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744
41 +c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30
42 +c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722
43 +c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5
44 +c53.7,-170.3,84.5,-266.8,92.5,-289.5z
45 +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize2"),bbe=o(function(e,r){return"M424,"+(2398+e+r)+`
46 +c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514
47 +c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20
48 +s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121
49 +s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081
50 +l`+e/4.223+" -"+e+`c4,-6.7,10,-10,18,-10 H400000
51 +v`+(40+e)+`H1014.6
52 +s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185
53 +c-2,6,-10,9,-24,9
54 +c-8,0,-12,-0.7,-12,-2z M`+(1001+e)+" "+r+`
55 +h400000v`+(40+e)+"h-400000z"},"sqrtSize3"),wbe=o(function(e,r){return"M473,"+(2713+e+r)+`
56 +c339.3,-1799.3,509.3,-2700,510,-2702 l`+e/5.298+" -"+e+`
57 +c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+e)+`H1017.7
58 +s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9
59 +c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200
60 +c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26
61 +s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,
62 +606zM`+(1001+e)+" "+r+"h400000v"+(40+e)+"H1017.7z"},"sqrtSize4"),Tbe=o(function(e){var r=e/2;return"M400000 "+e+" H0 L"+r+" 0 l65 45 L145 "+(e-80)+" H400000z"},"phasePath"),kbe=o(function(e,r,n){var i=n-54-r-e;return"M702 "+(e+r)+"H400000"+(40+e)+`
63 +H742v`+i+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1
64 +h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170
65 +c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667
66 +219 661 l218 661zM702 `+r+"H400000v"+(40+e)+"H742z"},"sqrtTall"),Ebe=o(function(e,r,n){r=1e3*r;var i="";switch(e){case"sqrtMain":i=ybe(r,h0);break;case"sqrtSize1":i=vbe(r,h0);break;case"sqrtSize2":i=xbe(r,h0);break;case"sqrtSize3":i=bbe(r,h0);break;case"sqrtSize4":i=wbe(r,h0);break;case"sqrtTall":i=kbe(r,h0,n)}return i},"sqrtPath"),Sbe=o(function(e,r){switch(e){case"\u239C":return"M291 0 H417 V"+r+" H291z M291 0 H417 V"+r+" H291z";case"\u2223":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z";case"\u2225":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z"+("M367 0 H410 V"+r+" H367z M367 0 H410 V"+r+" H367z");case"\u239F":return"M457 0 H583 V"+r+" H457z M457 0 H583 V"+r+" H457z";case"\u23A2":return"M319 0 H403 V"+r+" H319z M319 0 H403 V"+r+" H319z";case"\u23A5":return"M263 0 H347 V"+r+" H263z M263 0 H347 V"+r+" H263z";case"\u23AA":return"M384 0 H504 V"+r+" H384z M384 0 H504 V"+r+" H384z";case"\u23D0":return"M312 0 H355 V"+r+" H312z M312 0 H355 V"+r+" H312z";case"\u2016":return"M257 0 H300 V"+r+" H257z M257 0 H300 V"+r+" H257z"+("M478 0 H521 V"+r+" H478z M478 0 H521 V"+r+" H478z");default:return""}},"innerPath"),oz={doubleleftarrow:`M262 157
67 +l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3
68 + 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28
69 + 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5
70 +c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5
71 + 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87
72 +-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7
73 +-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z
74 +m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l
75 +-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5
76 + 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88
77 +-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68
78 +-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18
79 +-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782
80 +c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3
81 +-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120
82 + 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8
83 +-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247
84 +c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208
85 + 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3
86 + 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202
87 + l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117
88 +-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7
89 + 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13
90 + 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688
91 + 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7
92 +-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80
93 +H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0
94 + 435 0h399565z`,leftgroupunder:`M400000 262
95 +H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219
96 + 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3
97 +-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5
98 +-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7
99 +-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5
100 + 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3
101 +-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7
102 +-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z
103 +m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333
104 + 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5
105 + 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667
106 +-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12
107 + 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7
108 +-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0
109 +v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5
110 +-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3
111 +-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21
112 + 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:`M40 281 V428 H0 V94 H40 V241 H400000 v40z
113 +M40 281 V428 H0 V94 H40 V241 H400000 v40z`,leftmapsto:`M40 281 V448H0V74H40V241H400000v40z
114 +M40 281 V448H0V74H40V241H400000v40z`,leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23
115 +-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8
116 +c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3
117 + 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:`M0 50 h400000 v40H0z m0 194h40000v40H0z
118 +M0 50 h400000 v40H0z m0 194h40000v40H0z`,midbrace:`M200428 334
119 +c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14
120 +-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7
121 + 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11
122 + 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214
123 +c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14
124 + 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3
125 + 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0
126 +-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6
127 +-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z
128 +m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8
129 +60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8
130 +-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z
131 +m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2
132 +c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6
133 +-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z
134 +m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0
135 +85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8
136 +-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z
137 +m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1
138 +c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128
139 +-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20
140 + 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7
141 + 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85
142 +-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5
143 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67
144 + 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l
145 +-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5
146 +s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1
147 +c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3
148 + 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237
149 +-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0
150 + 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18
151 + 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3
152 +-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2
153 +-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58
154 + 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11
155 +-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7
156 + 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z
157 +m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8
158 + 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5
159 +-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95
160 +-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8
161 + 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3
162 + 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3
163 +-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z
164 +m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3
165 + 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0
166 +-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21
167 + 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:`M399960 241 V94 h40 V428 h-40 V281 H0 v-40z
168 +M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`,rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23
169 + 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32
170 +-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142
171 +-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40
172 + 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69
173 +-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3
174 +-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19
175 +-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101
176 + 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167
177 +c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3
178 + 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42
179 + 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333
180 +-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70
181 + 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7
182 +-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0
183 + 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0
184 + 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128
185 +-68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418
186 +-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9
187 + 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114
188 +c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751
189 + 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457
190 +-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0
191 + 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697
192 + 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696
193 + -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345
194 +-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409
195 + 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9
196 + 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409
197 + -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5
198 +3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11
199 +10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63
200 +-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1
201 +-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59
202 +H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359
203 +c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22
204 +c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10
205 +-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10
206 +-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10
207 +-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,
208 +-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,
209 +-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,
210 +-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,
211 +-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202
212 +c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5
213 +c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130
214 +s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47
215 +121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6
216 +s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11
217 +c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z
218 +M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32
219 +-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0
220 +13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39
221 +-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5
222 +-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5
223 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67
224 +151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11
225 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17
226 +c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21
227 +c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40
228 +c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z
229 +M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0
230 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,
231 +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6
232 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z
233 +M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11
234 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,
235 +1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,
236 +-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z
237 +M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0
238 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,
239 +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6
240 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z
241 +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Cbe=o(function(e,r){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 h347 v-84
242 +H403z M403 1759 V0 H319 V1759 v`+r+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v1759 H0 v84 H347z
243 +M347 1759 V0 H263 V1759 v`+r+" v1759 h84z";case"vert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15
244 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15
245 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+" v585 h43z";case"doublevert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15
246 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15
247 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+` v585 h43z
248 +M367 15 v585 v`+r+` v585 c2.667,10,9.667,15,21,15
249 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15
250 +c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+r+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+r+` v1715 h263 v84 H319z
251 +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+r+` v1799 H0 v-84 H319z
252 +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v602 h84z
253 +M403 1759 V0 H319 V1759 v`+r+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v602 h84z
254 +M347 1759 V0 h-84 V1759 v`+r+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1
255 +c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,
256 +-36,557 l0,`+(r+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,
257 +949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9
258 +c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,
259 +-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189
260 +l0,-`+(r+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,
261 +-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,
262 +63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5
263 +c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(r+9)+`
264 +c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664
265 +c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11
266 +c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17
267 +c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558
268 +l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,
269 +-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}},"tallDelim"),ed=class{static{o(this,"DocumentFragment")}constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return Jt.contains(this.classes,e)}toNode(){for(var e=document.createDocumentFragment(),r=0;r<this.children.length;r++)e.appendChild(this.children[r].toNode());return e}toMarkup(){for(var e="",r=0;r<this.children.length;r++)e+=this.children[r].toMarkup();return e}toText(){var e=o(r=>r.toText(),"toText");return this.children.map(e).join("")}},jl={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},Z4={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},lz={\u00C5:"A",\u00D0:"D",\u00DE:"o",\u00E5:"a",\u00F0:"d",\u00FE:"o",\u0410:"A",\u0411:"B",\u0412:"B",\u0413:"F",\u0414:"A",\u0415:"E",\u0416:"K",\u0417:"3",\u0418:"N",\u0419:"N",\u041A:"K",\u041B:"N",\u041C:"M",\u041D:"H",\u041E:"O",\u041F:"N",\u0420:"P",\u0421:"C",\u0422:"T",\u0423:"y",\u0424:"O",\u0425:"X",\u0426:"U",\u0427:"h",\u0428:"W",\u0429:"W",\u042A:"B",\u042B:"X",\u042C:"B",\u042D:"3",\u042E:"X",\u042F:"R",\u0430:"a",\u0431:"b",\u0432:"a",\u0433:"r",\u0434:"y",\u0435:"e",\u0436:"m",\u0437:"e",\u0438:"n",\u0439:"n",\u043A:"n",\u043B:"n",\u043C:"m",\u043D:"n",\u043E:"o",\u043F:"n",\u0440:"p",\u0441:"c",\u0442:"o",\u0443:"y",\u0444:"b",\u0445:"x",\u0446:"n",\u0447:"n",\u0448:"w",\u0449:"w",\u044A:"a",\u044B:"m",\u044C:"a",\u044D:"e",\u044E:"m",\u044F:"r"};o(Abe,"setFontMetrics");o(P7,"getCharacterMetrics");h7={};o(_be,"getGlobalMetrics");Dbe=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],cz=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],uz=o(function(e,r){return r.size<2?e:Dbe[e-1][r.size-1]},"sizeAtStyle"),f3=class t{static{o(this,"Options")}constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||t.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=cz[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var n in e)e.hasOwnProperty(n)&&(r[n]=e[n]);return new t(r)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:uz(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:cz[e-1]})}havingBaseStyle(e){e=e||this.style.text();var r=uz(t.BASESIZE,e);return this.size===r&&this.textSize===t.BASESIZE&&this.style===e?this:this.extend({style:e,size:r})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==t.BASESIZE?["sizing","reset-size"+this.size,"size"+t.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=_be(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}};f3.BASESIZE=6;E7={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},Lbe={ex:!0,em:!0,mu:!0},zz=o(function(e){return typeof e!="string"&&(e=e.unit),e in E7||e in Lbe||e==="ex"},"validUnit"),ti=o(function(e,r){var n;if(e.unit in E7)n=E7[e.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(e.unit==="mu")n=r.fontMetrics().cssEmPerMu;else{var i;if(r.style.isTight()?i=r.havingStyle(r.style.text()):i=r,e.unit==="ex")n=i.fontMetrics().xHeight;else if(e.unit==="em")n=i.fontMetrics().quad;else throw new gt("Invalid unit: '"+e.unit+"'");i!==r&&(n*=i.sizeMultiplier/r.sizeMultiplier)}return Math.min(e.number*n,r.maxSize)},"calculateSize"),kt=o(function(e){return+e.toFixed(4)+"em"},"makeEm"),fh=o(function(e){return e.filter(r=>r).join(" ")},"createClass"),Gz=o(function(e,r,n){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=n||{},r){r.style.isTight()&&this.classes.push("mtight");var i=r.getColor();i&&(this.style.color=i)}},"initNode"),Vz=o(function(e){var r=document.createElement(e);r.className=fh(this.classes);for(var n in this.style)this.style.hasOwnProperty(n)&&(r.style[n]=this.style[n]);for(var i in this.attributes)this.attributes.hasOwnProperty(i)&&r.setAttribute(i,this.attributes[i]);for(var a=0;a<this.children.length;a++)r.appendChild(this.children[a].toNode());return r},"toNode"),Uz=o(function(e){var r="<"+e;this.classes.length&&(r+=' class="'+Jt.escape(fh(this.classes))+'"');var n="";for(var i in this.style)this.style.hasOwnProperty(i)&&(n+=Jt.hyphenate(i)+":"+this.style[i]+";");n&&(r+=' style="'+Jt.escape(n)+'"');for(var a in this.attributes)this.attributes.hasOwnProperty(a)&&(r+=" "+a+'="'+Jt.escape(this.attributes[a])+'"');r+=">";for(var s=0;s<this.children.length;s++)r+=this.children[s].toMarkup();return r+="</"+e+">",r},"toMarkup"),td=class{static{o(this,"Span")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,Gz.call(this,e,n,i),this.children=r||[]}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Jt.contains(this.classes,e)}toNode(){return Vz.call(this,"span")}toMarkup(){return Uz.call(this,"span")}},Vy=class{static{o(this,"Anchor")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,Gz.call(this,r,i),this.children=n||[],this.setAttribute("href",e)}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Jt.contains(this.classes,e)}toNode(){return Vz.call(this,"a")}toMarkup(){return Uz.call(this,"a")}},S7=class{static{o(this,"Img")}constructor(e,r,n){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=e,this.classes=["mord"],this.style=n}hasClass(e){return Jt.contains(this.classes,e)}toNode(){var e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(var r in this.style)this.style.hasOwnProperty(r)&&(e.style[r]=this.style[r]);return e}toMarkup(){var e='<img src="'+Jt.escape(this.src)+'"'+(' alt="'+Jt.escape(this.alt)+'"'),r="";for(var n in this.style)this.style.hasOwnProperty(n)&&(r+=Jt.hyphenate(n)+":"+this.style[n]+";");return r&&(e+=' style="'+Jt.escape(r)+'"'),e+="'/>",e}},Rbe={\u00EE:"\u0131\u0302",\u00EF:"\u0131\u0308",\u00ED:"\u0131\u0301",\u00EC:"\u0131\u0300"},Ts=class{static{o(this,"SymbolNode")}constructor(e,r,n,i,a,s,l,u){this.text=void 0,this.height=void 0,this.depth=void 0,this.italic=void 0,this.skew=void 0,this.width=void 0,this.maxFontSize=void 0,this.classes=void 0,this.style=void 0,this.text=e,this.height=r||0,this.depth=n||0,this.italic=i||0,this.skew=a||0,this.width=s||0,this.classes=l||[],this.style=u||{},this.maxFontSize=0;var h=gbe(this.text.charCodeAt(0));h&&this.classes.push(h+"_fallback"),/[îïíì]/.test(this.text)&&(this.text=Rbe[this.text])}hasClass(e){return Jt.contains(this.classes,e)}toNode(){var e=document.createTextNode(this.text),r=null;this.italic>0&&(r=document.createElement("span"),r.style.marginRight=kt(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=fh(this.classes));for(var n in this.style)this.style.hasOwnProperty(n)&&(r=r||document.createElement("span"),r.style[n]=this.style[n]);return r?(r.appendChild(e),r):e}toMarkup(){var e=!1,r="<span";this.classes.length&&(e=!0,r+=' class="',r+=Jt.escape(fh(this.classes)),r+='"');var n="";this.italic>0&&(n+="margin-right:"+this.italic+"em;");for(var i in this.style)this.style.hasOwnProperty(i)&&(n+=Jt.hyphenate(i)+":"+this.style[i]+";");n&&(e=!0,r+=' style="'+Jt.escape(n)+'"');var a=Jt.escape(this.text);return e?(r+=">",r+=a,r+="</span>",r):a}},ll=class{static{o(this,"SvgNode")}constructor(e,r){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=r||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"svg");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);for(var i=0;i<this.children.length;i++)r.appendChild(this.children[i].toNode());return r}toMarkup(){var e='<svg xmlns="http://www.w3.org/2000/svg"';for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&(e+=" "+r+'="'+Jt.escape(this.attributes[r])+'"');e+=">";for(var n=0;n<this.children.length;n++)e+=this.children[n].toMarkup();return e+="</svg>",e}},Kl=class{static{o(this,"PathNode")}constructor(e,r){this.pathName=void 0,this.alternate=void 0,this.pathName=e,this.alternate=r}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"path");return this.alternate?r.setAttribute("d",this.alternate):r.setAttribute("d",oz[this.pathName]),r}toMarkup(){return this.alternate?'<path d="'+Jt.escape(this.alternate)+'"/>':'<path d="'+Jt.escape(oz[this.pathName])+'"/>'}},Uy=class{static{o(this,"LineNode")}constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"line");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);return r}toMarkup(){var e="<line";for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&(e+=" "+r+'="'+Jt.escape(this.attributes[r])+'"');return e+="/>",e}};o(hz,"assertSymbolDomNode");o(Nbe,"assertSpan");Mbe={bin:1,close:1,inner:1,open:1,punct:1,rel:1},Ibe={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1},An={math:{},text:{}};o(G,"defineSymbol");U="math",it="text",ee="main",ke="ams",Vn="accent-token",It="bin",Za="close",p0="inner",er="mathord",ki="op-token",js="open",x3="punct",Ee="rel",uu="spacing",Le="textord";G(U,ee,Ee,"\u2261","\\equiv",!0);G(U,ee,Ee,"\u227A","\\prec",!0);G(U,ee,Ee,"\u227B","\\succ",!0);G(U,ee,Ee,"\u223C","\\sim",!0);G(U,ee,Ee,"\u22A5","\\perp");G(U,ee,Ee,"\u2AAF","\\preceq",!0);G(U,ee,Ee,"\u2AB0","\\succeq",!0);G(U,ee,Ee,"\u2243","\\simeq",!0);G(U,ee,Ee,"\u2223","\\mid",!0);G(U,ee,Ee,"\u226A","\\ll",!0);G(U,ee,Ee,"\u226B","\\gg",!0);G(U,ee,Ee,"\u224D","\\asymp",!0);G(U,ee,Ee,"\u2225","\\parallel");G(U,ee,Ee,"\u22C8","\\bowtie",!0);G(U,ee,Ee,"\u2323","\\smile",!0);G(U,ee,Ee,"\u2291","\\sqsubseteq",!0);G(U,ee,Ee,"\u2292","\\sqsupseteq",!0);G(U,ee,Ee,"\u2250","\\doteq",!0);G(U,ee,Ee,"\u2322","\\frown",!0);G(U,ee,Ee,"\u220B","\\ni",!0);G(U,ee,Ee,"\u221D","\\propto",!0);G(U,ee,Ee,"\u22A2","\\vdash",!0);G(U,ee,Ee,"\u22A3","\\dashv",!0);G(U,ee,Ee,"\u220B","\\owns");G(U,ee,x3,".","\\ldotp");G(U,ee,x3,"\u22C5","\\cdotp");G(U,ee,Le,"#","\\#");G(it,ee,Le,"#","\\#");G(U,ee,Le,"&","\\&");G(it,ee,Le,"&","\\&");G(U,ee,Le,"\u2135","\\aleph",!0);G(U,ee,Le,"\u2200","\\forall",!0);G(U,ee,Le,"\u210F","\\hbar",!0);G(U,ee,Le,"\u2203","\\exists",!0);G(U,ee,Le,"\u2207","\\nabla",!0);G(U,ee,Le,"\u266D","\\flat",!0);G(U,ee,Le,"\u2113","\\ell",!0);G(U,ee,Le,"\u266E","\\natural",!0);G(U,ee,Le,"\u2663","\\clubsuit",!0);G(U,ee,Le,"\u2118","\\wp",!0);G(U,ee,Le,"\u266F","\\sharp",!0);G(U,ee,Le,"\u2662","\\diamondsuit",!0);G(U,ee,Le,"\u211C","\\Re",!0);G(U,ee,Le,"\u2661","\\heartsuit",!0);G(U,ee,Le,"\u2111","\\Im",!0);G(U,ee,Le,"\u2660","\\spadesuit",!0);G(U,ee,Le,"\xA7","\\S",!0);G(it,ee,Le,"\xA7","\\S");G(U,ee,Le,"\xB6","\\P",!0);G(it,ee,Le,"\xB6","\\P");G(U,ee,Le,"\u2020","\\dag");G(it,ee,Le,"\u2020","\\dag");G(it,ee,Le,"\u2020","\\textdagger");G(U,ee,Le,"\u2021","\\ddag");G(it,ee,Le,"\u2021","\\ddag");G(it,ee,Le,"\u2021","\\textdaggerdbl");G(U,ee,Za,"\u23B1","\\rmoustache",!0);G(U,ee,js,"\u23B0","\\lmoustache",!0);G(U,ee,Za,"\u27EF","\\rgroup",!0);G(U,ee,js,"\u27EE","\\lgroup",!0);G(U,ee,It,"\u2213","\\mp",!0);G(U,ee,It,"\u2296","\\ominus",!0);G(U,ee,It,"\u228E","\\uplus",!0);G(U,ee,It,"\u2293","\\sqcap",!0);G(U,ee,It,"\u2217","\\ast");G(U,ee,It,"\u2294","\\sqcup",!0);G(U,ee,It,"\u25EF","\\bigcirc",!0);G(U,ee,It,"\u2219","\\bullet",!0);G(U,ee,It,"\u2021","\\ddagger");G(U,ee,It,"\u2240","\\wr",!0);G(U,ee,It,"\u2A3F","\\amalg");G(U,ee,It,"&","\\And");G(U,ee,Ee,"\u27F5","\\longleftarrow",!0);G(U,ee,Ee,"\u21D0","\\Leftarrow",!0);G(U,ee,Ee,"\u27F8","\\Longleftarrow",!0);G(U,ee,Ee,"\u27F6","\\longrightarrow",!0);G(U,ee,Ee,"\u21D2","\\Rightarrow",!0);G(U,ee,Ee,"\u27F9","\\Longrightarrow",!0);G(U,ee,Ee,"\u2194","\\leftrightarrow",!0);G(U,ee,Ee,"\u27F7","\\longleftrightarrow",!0);G(U,ee,Ee,"\u21D4","\\Leftrightarrow",!0);G(U,ee,Ee,"\u27FA","\\Longleftrightarrow",!0);G(U,ee,Ee,"\u21A6","\\mapsto",!0);G(U,ee,Ee,"\u27FC","\\longmapsto",!0);G(U,ee,Ee,"\u2197","\\nearrow",!0);G(U,ee,Ee,"\u21A9","\\hookleftarrow",!0);G(U,ee,Ee,"\u21AA","\\hookrightarrow",!0);G(U,ee,Ee,"\u2198","\\searrow",!0);G(U,ee,Ee,"\u21BC","\\leftharpoonup",!0);G(U,ee,Ee,"\u21C0","\\rightharpoonup",!0);G(U,ee,Ee,"\u2199","\\swarrow",!0);G(U,ee,Ee,"\u21BD","\\leftharpoondown",!0);G(U,ee,Ee,"\u21C1","\\rightharpoondown",!0);G(U,ee,Ee,"\u2196","\\nwarrow",!0);G(U,ee,Ee,"\u21CC","\\rightleftharpoons",!0);G(U,ke,Ee,"\u226E","\\nless",!0);G(U,ke,Ee,"\uE010","\\@nleqslant");G(U,ke,Ee,"\uE011","\\@nleqq");G(U,ke,Ee,"\u2A87","\\lneq",!0);G(U,ke,Ee,"\u2268","\\lneqq",!0);G(U,ke,Ee,"\uE00C","\\@lvertneqq");G(U,ke,Ee,"\u22E6","\\lnsim",!0);G(U,ke,Ee,"\u2A89","\\lnapprox",!0);G(U,ke,Ee,"\u2280","\\nprec",!0);G(U,ke,Ee,"\u22E0","\\npreceq",!0);G(U,ke,Ee,"\u22E8","\\precnsim",!0);G(U,ke,Ee,"\u2AB9","\\precnapprox",!0);G(U,ke,Ee,"\u2241","\\nsim",!0);G(U,ke,Ee,"\uE006","\\@nshortmid");G(U,ke,Ee,"\u2224","\\nmid",!0);G(U,ke,Ee,"\u22AC","\\nvdash",!0);G(U,ke,Ee,"\u22AD","\\nvDash",!0);G(U,ke,Ee,"\u22EA","\\ntriangleleft");G(U,ke,Ee,"\u22EC","\\ntrianglelefteq",!0);G(U,ke,Ee,"\u228A","\\subsetneq",!0);G(U,ke,Ee,"\uE01A","\\@varsubsetneq");G(U,ke,Ee,"\u2ACB","\\subsetneqq",!0);G(U,ke,Ee,"\uE017","\\@varsubsetneqq");G(U,ke,Ee,"\u226F","\\ngtr",!0);G(U,ke,Ee,"\uE00F","\\@ngeqslant");G(U,ke,Ee,"\uE00E","\\@ngeqq");G(U,ke,Ee,"\u2A88","\\gneq",!0);G(U,ke,Ee,"\u2269","\\gneqq",!0);G(U,ke,Ee,"\uE00D","\\@gvertneqq");G(U,ke,Ee,"\u22E7","\\gnsim",!0);G(U,ke,Ee,"\u2A8A","\\gnapprox",!0);G(U,ke,Ee,"\u2281","\\nsucc",!0);G(U,ke,Ee,"\u22E1","\\nsucceq",!0);G(U,ke,Ee,"\u22E9","\\succnsim",!0);G(U,ke,Ee,"\u2ABA","\\succnapprox",!0);G(U,ke,Ee,"\u2246","\\ncong",!0);G(U,ke,Ee,"\uE007","\\@nshortparallel");G(U,ke,Ee,"\u2226","\\nparallel",!0);G(U,ke,Ee,"\u22AF","\\nVDash",!0);G(U,ke,Ee,"\u22EB","\\ntriangleright");G(U,ke,Ee,"\u22ED","\\ntrianglerighteq",!0);G(U,ke,Ee,"\uE018","\\@nsupseteqq");G(U,ke,Ee,"\u228B","\\supsetneq",!0);G(U,ke,Ee,"\uE01B","\\@varsupsetneq");G(U,ke,Ee,"\u2ACC","\\supsetneqq",!0);G(U,ke,Ee,"\uE019","\\@varsupsetneqq");G(U,ke,Ee,"\u22AE","\\nVdash",!0);G(U,ke,Ee,"\u2AB5","\\precneqq",!0);G(U,ke,Ee,"\u2AB6","\\succneqq",!0);G(U,ke,Ee,"\uE016","\\@nsubseteqq");G(U,ke,It,"\u22B4","\\unlhd");G(U,ke,It,"\u22B5","\\unrhd");G(U,ke,Ee,"\u219A","\\nleftarrow",!0);G(U,ke,Ee,"\u219B","\\nrightarrow",!0);G(U,ke,Ee,"\u21CD","\\nLeftarrow",!0);G(U,ke,Ee,"\u21CF","\\nRightarrow",!0);G(U,ke,Ee,"\u21AE","\\nleftrightarrow",!0);G(U,ke,Ee,"\u21CE","\\nLeftrightarrow",!0);G(U,ke,Ee,"\u25B3","\\vartriangle");G(U,ke,Le,"\u210F","\\hslash");G(U,ke,Le,"\u25BD","\\triangledown");G(U,ke,Le,"\u25CA","\\lozenge");G(U,ke,Le,"\u24C8","\\circledS");G(U,ke,Le,"\xAE","\\circledR");G(it,ke,Le,"\xAE","\\circledR");G(U,ke,Le,"\u2221","\\measuredangle",!0);G(U,ke,Le,"\u2204","\\nexists");G(U,ke,Le,"\u2127","\\mho");G(U,ke,Le,"\u2132","\\Finv",!0);G(U,ke,Le,"\u2141","\\Game",!0);G(U,ke,Le,"\u2035","\\backprime");G(U,ke,Le,"\u25B2","\\blacktriangle");G(U,ke,Le,"\u25BC","\\blacktriangledown");G(U,ke,Le,"\u25A0","\\blacksquare");G(U,ke,Le,"\u29EB","\\blacklozenge");G(U,ke,Le,"\u2605","\\bigstar");G(U,ke,Le,"\u2222","\\sphericalangle",!0);G(U,ke,Le,"\u2201","\\complement",!0);G(U,ke,Le,"\xF0","\\eth",!0);G(it,ee,Le,"\xF0","\xF0");G(U,ke,Le,"\u2571","\\diagup");G(U,ke,Le,"\u2572","\\diagdown");G(U,ke,Le,"\u25A1","\\square");G(U,ke,Le,"\u25A1","\\Box");G(U,ke,Le,"\u25CA","\\Diamond");G(U,ke,Le,"\xA5","\\yen",!0);G(it,ke,Le,"\xA5","\\yen",!0);G(U,ke,Le,"\u2713","\\checkmark",!0);G(it,ke,Le,"\u2713","\\checkmark");G(U,ke,Le,"\u2136","\\beth",!0);G(U,ke,Le,"\u2138","\\daleth",!0);G(U,ke,Le,"\u2137","\\gimel",!0);G(U,ke,Le,"\u03DD","\\digamma",!0);G(U,ke,Le,"\u03F0","\\varkappa");G(U,ke,js,"\u250C","\\@ulcorner",!0);G(U,ke,Za,"\u2510","\\@urcorner",!0);G(U,ke,js,"\u2514","\\@llcorner",!0);G(U,ke,Za,"\u2518","\\@lrcorner",!0);G(U,ke,Ee,"\u2266","\\leqq",!0);G(U,ke,Ee,"\u2A7D","\\leqslant",!0);G(U,ke,Ee,"\u2A95","\\eqslantless",!0);G(U,ke,Ee,"\u2272","\\lesssim",!0);G(U,ke,Ee,"\u2A85","\\lessapprox",!0);G(U,ke,Ee,"\u224A","\\approxeq",!0);G(U,ke,It,"\u22D6","\\lessdot");G(U,ke,Ee,"\u22D8","\\lll",!0);G(U,ke,Ee,"\u2276","\\lessgtr",!0);G(U,ke,Ee,"\u22DA","\\lesseqgtr",!0);G(U,ke,Ee,"\u2A8B","\\lesseqqgtr",!0);G(U,ke,Ee,"\u2251","\\doteqdot");G(U,ke,Ee,"\u2253","\\risingdotseq",!0);G(U,ke,Ee,"\u2252","\\fallingdotseq",!0);G(U,ke,Ee,"\u223D","\\backsim",!0);G(U,ke,Ee,"\u22CD","\\backsimeq",!0);G(U,ke,Ee,"\u2AC5","\\subseteqq",!0);G(U,ke,Ee,"\u22D0","\\Subset",!0);G(U,ke,Ee,"\u228F","\\sqsubset",!0);G(U,ke,Ee,"\u227C","\\preccurlyeq",!0);G(U,ke,Ee,"\u22DE","\\curlyeqprec",!0);G(U,ke,Ee,"\u227E","\\precsim",!0);G(U,ke,Ee,"\u2AB7","\\precapprox",!0);G(U,ke,Ee,"\u22B2","\\vartriangleleft");G(U,ke,Ee,"\u22B4","\\trianglelefteq");G(U,ke,Ee,"\u22A8","\\vDash",!0);G(U,ke,Ee,"\u22AA","\\Vvdash",!0);G(U,ke,Ee,"\u2323","\\smallsmile");G(U,ke,Ee,"\u2322","\\smallfrown");G(U,ke,Ee,"\u224F","\\bumpeq",!0);G(U,ke,Ee,"\u224E","\\Bumpeq",!0);G(U,ke,Ee,"\u2267","\\geqq",!0);G(U,ke,Ee,"\u2A7E","\\geqslant",!0);G(U,ke,Ee,"\u2A96","\\eqslantgtr",!0);G(U,ke,Ee,"\u2273","\\gtrsim",!0);G(U,ke,Ee,"\u2A86","\\gtrapprox",!0);G(U,ke,It,"\u22D7","\\gtrdot");G(U,ke,Ee,"\u22D9","\\ggg",!0);G(U,ke,Ee,"\u2277","\\gtrless",!0);G(U,ke,Ee,"\u22DB","\\gtreqless",!0);G(U,ke,Ee,"\u2A8C","\\gtreqqless",!0);G(U,ke,Ee,"\u2256","\\eqcirc",!0);G(U,ke,Ee,"\u2257","\\circeq",!0);G(U,ke,Ee,"\u225C","\\triangleq",!0);G(U,ke,Ee,"\u223C","\\thicksim");G(U,ke,Ee,"\u2248","\\thickapprox");G(U,ke,Ee,"\u2AC6","\\supseteqq",!0);G(U,ke,Ee,"\u22D1","\\Supset",!0);G(U,ke,Ee,"\u2290","\\sqsupset",!0);G(U,ke,Ee,"\u227D","\\succcurlyeq",!0);G(U,ke,Ee,"\u22DF","\\curlyeqsucc",!0);G(U,ke,Ee,"\u227F","\\succsim",!0);G(U,ke,Ee,"\u2AB8","\\succapprox",!0);G(U,ke,Ee,"\u22B3","\\vartriangleright");G(U,ke,Ee,"\u22B5","\\trianglerighteq");G(U,ke,Ee,"\u22A9","\\Vdash",!0);G(U,ke,Ee,"\u2223","\\shortmid");G(U,ke,Ee,"\u2225","\\shortparallel");G(U,ke,Ee,"\u226C","\\between",!0);G(U,ke,Ee,"\u22D4","\\pitchfork",!0);G(U,ke,Ee,"\u221D","\\varpropto");G(U,ke,Ee,"\u25C0","\\blacktriangleleft");G(U,ke,Ee,"\u2234","\\therefore",!0);G(U,ke,Ee,"\u220D","\\backepsilon");G(U,ke,Ee,"\u25B6","\\blacktriangleright");G(U,ke,Ee,"\u2235","\\because",!0);G(U,ke,Ee,"\u22D8","\\llless");G(U,ke,Ee,"\u22D9","\\gggtr");G(U,ke,It,"\u22B2","\\lhd");G(U,ke,It,"\u22B3","\\rhd");G(U,ke,Ee,"\u2242","\\eqsim",!0);G(U,ee,Ee,"\u22C8","\\Join");G(U,ke,Ee,"\u2251","\\Doteq",!0);G(U,ke,It,"\u2214","\\dotplus",!0);G(U,ke,It,"\u2216","\\smallsetminus");G(U,ke,It,"\u22D2","\\Cap",!0);G(U,ke,It,"\u22D3","\\Cup",!0);G(U,ke,It,"\u2A5E","\\doublebarwedge",!0);G(U,ke,It,"\u229F","\\boxminus",!0);G(U,ke,It,"\u229E","\\boxplus",!0);G(U,ke,It,"\u22C7","\\divideontimes",!0);G(U,ke,It,"\u22C9","\\ltimes",!0);G(U,ke,It,"\u22CA","\\rtimes",!0);G(U,ke,It,"\u22CB","\\leftthreetimes",!0);G(U,ke,It,"\u22CC","\\rightthreetimes",!0);G(U,ke,It,"\u22CF","\\curlywedge",!0);G(U,ke,It,"\u22CE","\\curlyvee",!0);G(U,ke,It,"\u229D","\\circleddash",!0);G(U,ke,It,"\u229B","\\circledast",!0);G(U,ke,It,"\u22C5","\\centerdot");G(U,ke,It,"\u22BA","\\intercal",!0);G(U,ke,It,"\u22D2","\\doublecap");G(U,ke,It,"\u22D3","\\doublecup");G(U,ke,It,"\u22A0","\\boxtimes",!0);G(U,ke,Ee,"\u21E2","\\dashrightarrow",!0);G(U,ke,Ee,"\u21E0","\\dashleftarrow",!0);G(U,ke,Ee,"\u21C7","\\leftleftarrows",!0);G(U,ke,Ee,"\u21C6","\\leftrightarrows",!0);G(U,ke,Ee,"\u21DA","\\Lleftarrow",!0);G(U,ke,Ee,"\u219E","\\twoheadleftarrow",!0);G(U,ke,Ee,"\u21A2","\\leftarrowtail",!0);G(U,ke,Ee,"\u21AB","\\looparrowleft",!0);G(U,ke,Ee,"\u21CB","\\leftrightharpoons",!0);G(U,ke,Ee,"\u21B6","\\curvearrowleft",!0);G(U,ke,Ee,"\u21BA","\\circlearrowleft",!0);G(U,ke,Ee,"\u21B0","\\Lsh",!0);G(U,ke,Ee,"\u21C8","\\upuparrows",!0);G(U,ke,Ee,"\u21BF","\\upharpoonleft",!0);G(U,ke,Ee,"\u21C3","\\downharpoonleft",!0);G(U,ee,Ee,"\u22B6","\\origof",!0);G(U,ee,Ee,"\u22B7","\\imageof",!0);G(U,ke,Ee,"\u22B8","\\multimap",!0);G(U,ke,Ee,"\u21AD","\\leftrightsquigarrow",!0);G(U,ke,Ee,"\u21C9","\\rightrightarrows",!0);G(U,ke,Ee,"\u21C4","\\rightleftarrows",!0);G(U,ke,Ee,"\u21A0","\\twoheadrightarrow",!0);G(U,ke,Ee,"\u21A3","\\rightarrowtail",!0);G(U,ke,Ee,"\u21AC","\\looparrowright",!0);G(U,ke,Ee,"\u21B7","\\curvearrowright",!0);G(U,ke,Ee,"\u21BB","\\circlearrowright",!0);G(U,ke,Ee,"\u21B1","\\Rsh",!0);G(U,ke,Ee,"\u21CA","\\downdownarrows",!0);G(U,ke,Ee,"\u21BE","\\upharpoonright",!0);G(U,ke,Ee,"\u21C2","\\downharpoonright",!0);G(U,ke,Ee,"\u21DD","\\rightsquigarrow",!0);G(U,ke,Ee,"\u21DD","\\leadsto");G(U,ke,Ee,"\u21DB","\\Rrightarrow",!0);G(U,ke,Ee,"\u21BE","\\restriction");G(U,ee,Le,"\u2018","`");G(U,ee,Le,"$","\\$");G(it,ee,Le,"$","\\$");G(it,ee,Le,"$","\\textdollar");G(U,ee,Le,"%","\\%");G(it,ee,Le,"%","\\%");G(U,ee,Le,"_","\\_");G(it,ee,Le,"_","\\_");G(it,ee,Le,"_","\\textunderscore");G(U,ee,Le,"\u2220","\\angle",!0);G(U,ee,Le,"\u221E","\\infty",!0);G(U,ee,Le,"\u2032","\\prime");G(U,ee,Le,"\u25B3","\\triangle");G(U,ee,Le,"\u0393","\\Gamma",!0);G(U,ee,Le,"\u0394","\\Delta",!0);G(U,ee,Le,"\u0398","\\Theta",!0);G(U,ee,Le,"\u039B","\\Lambda",!0);G(U,ee,Le,"\u039E","\\Xi",!0);G(U,ee,Le,"\u03A0","\\Pi",!0);G(U,ee,Le,"\u03A3","\\Sigma",!0);G(U,ee,Le,"\u03A5","\\Upsilon",!0);G(U,ee,Le,"\u03A6","\\Phi",!0);G(U,ee,Le,"\u03A8","\\Psi",!0);G(U,ee,Le,"\u03A9","\\Omega",!0);G(U,ee,Le,"A","\u0391");G(U,ee,Le,"B","\u0392");G(U,ee,Le,"E","\u0395");G(U,ee,Le,"Z","\u0396");G(U,ee,Le,"H","\u0397");G(U,ee,Le,"I","\u0399");G(U,ee,Le,"K","\u039A");G(U,ee,Le,"M","\u039C");G(U,ee,Le,"N","\u039D");G(U,ee,Le,"O","\u039F");G(U,ee,Le,"P","\u03A1");G(U,ee,Le,"T","\u03A4");G(U,ee,Le,"X","\u03A7");G(U,ee,Le,"\xAC","\\neg",!0);G(U,ee,Le,"\xAC","\\lnot");G(U,ee,Le,"\u22A4","\\top");G(U,ee,Le,"\u22A5","\\bot");G(U,ee,Le,"\u2205","\\emptyset");G(U,ke,Le,"\u2205","\\varnothing");G(U,ee,er,"\u03B1","\\alpha",!0);G(U,ee,er,"\u03B2","\\beta",!0);G(U,ee,er,"\u03B3","\\gamma",!0);G(U,ee,er,"\u03B4","\\delta",!0);G(U,ee,er,"\u03F5","\\epsilon",!0);G(U,ee,er,"\u03B6","\\zeta",!0);G(U,ee,er,"\u03B7","\\eta",!0);G(U,ee,er,"\u03B8","\\theta",!0);G(U,ee,er,"\u03B9","\\iota",!0);G(U,ee,er,"\u03BA","\\kappa",!0);G(U,ee,er,"\u03BB","\\lambda",!0);G(U,ee,er,"\u03BC","\\mu",!0);G(U,ee,er,"\u03BD","\\nu",!0);G(U,ee,er,"\u03BE","\\xi",!0);G(U,ee,er,"\u03BF","\\omicron",!0);G(U,ee,er,"\u03C0","\\pi",!0);G(U,ee,er,"\u03C1","\\rho",!0);G(U,ee,er,"\u03C3","\\sigma",!0);G(U,ee,er,"\u03C4","\\tau",!0);G(U,ee,er,"\u03C5","\\upsilon",!0);G(U,ee,er,"\u03D5","\\phi",!0);G(U,ee,er,"\u03C7","\\chi",!0);G(U,ee,er,"\u03C8","\\psi",!0);G(U,ee,er,"\u03C9","\\omega",!0);G(U,ee,er,"\u03B5","\\varepsilon",!0);G(U,ee,er,"\u03D1","\\vartheta",!0);G(U,ee,er,"\u03D6","\\varpi",!0);G(U,ee,er,"\u03F1","\\varrho",!0);G(U,ee,er,"\u03C2","\\varsigma",!0);G(U,ee,er,"\u03C6","\\varphi",!0);G(U,ee,It,"\u2217","*",!0);G(U,ee,It,"+","+");G(U,ee,It,"\u2212","-",!0);G(U,ee,It,"\u22C5","\\cdot",!0);G(U,ee,It,"\u2218","\\circ",!0);G(U,ee,It,"\xF7","\\div",!0);G(U,ee,It,"\xB1","\\pm",!0);G(U,ee,It,"\xD7","\\times",!0);G(U,ee,It,"\u2229","\\cap",!0);G(U,ee,It,"\u222A","\\cup",!0);G(U,ee,It,"\u2216","\\setminus",!0);G(U,ee,It,"\u2227","\\land");G(U,ee,It,"\u2228","\\lor");G(U,ee,It,"\u2227","\\wedge",!0);G(U,ee,It,"\u2228","\\vee",!0);G(U,ee,Le,"\u221A","\\surd");G(U,ee,js,"\u27E8","\\langle",!0);G(U,ee,js,"\u2223","\\lvert");G(U,ee,js,"\u2225","\\lVert");G(U,ee,Za,"?","?");G(U,ee,Za,"!","!");G(U,ee,Za,"\u27E9","\\rangle",!0);G(U,ee,Za,"\u2223","\\rvert");G(U,ee,Za,"\u2225","\\rVert");G(U,ee,Ee,"=","=");G(U,ee,Ee,":",":");G(U,ee,Ee,"\u2248","\\approx",!0);G(U,ee,Ee,"\u2245","\\cong",!0);G(U,ee,Ee,"\u2265","\\ge");G(U,ee,Ee,"\u2265","\\geq",!0);G(U,ee,Ee,"\u2190","\\gets");G(U,ee,Ee,">","\\gt",!0);G(U,ee,Ee,"\u2208","\\in",!0);G(U,ee,Ee,"\uE020","\\@not");G(U,ee,Ee,"\u2282","\\subset",!0);G(U,ee,Ee,"\u2283","\\supset",!0);G(U,ee,Ee,"\u2286","\\subseteq",!0);G(U,ee,Ee,"\u2287","\\supseteq",!0);G(U,ke,Ee,"\u2288","\\nsubseteq",!0);G(U,ke,Ee,"\u2289","\\nsupseteq",!0);G(U,ee,Ee,"\u22A8","\\models");G(U,ee,Ee,"\u2190","\\leftarrow",!0);G(U,ee,Ee,"\u2264","\\le");G(U,ee,Ee,"\u2264","\\leq",!0);G(U,ee,Ee,"<","\\lt",!0);G(U,ee,Ee,"\u2192","\\rightarrow",!0);G(U,ee,Ee,"\u2192","\\to");G(U,ke,Ee,"\u2271","\\ngeq",!0);G(U,ke,Ee,"\u2270","\\nleq",!0);G(U,ee,uu,"\xA0","\\ ");G(U,ee,uu,"\xA0","\\space");G(U,ee,uu,"\xA0","\\nobreakspace");G(it,ee,uu,"\xA0","\\ ");G(it,ee,uu,"\xA0"," ");G(it,ee,uu,"\xA0","\\space");G(it,ee,uu,"\xA0","\\nobreakspace");G(U,ee,uu,null,"\\nobreak");G(U,ee,uu,null,"\\allowbreak");G(U,ee,x3,",",",");G(U,ee,x3,";",";");G(U,ke,It,"\u22BC","\\barwedge",!0);G(U,ke,It,"\u22BB","\\veebar",!0);G(U,ee,It,"\u2299","\\odot",!0);G(U,ee,It,"\u2295","\\oplus",!0);G(U,ee,It,"\u2297","\\otimes",!0);G(U,ee,Le,"\u2202","\\partial",!0);G(U,ee,It,"\u2298","\\oslash",!0);G(U,ke,It,"\u229A","\\circledcirc",!0);G(U,ke,It,"\u22A1","\\boxdot",!0);G(U,ee,It,"\u25B3","\\bigtriangleup");G(U,ee,It,"\u25BD","\\bigtriangledown");G(U,ee,It,"\u2020","\\dagger");G(U,ee,It,"\u22C4","\\diamond");G(U,ee,It,"\u22C6","\\star");G(U,ee,It,"\u25C3","\\triangleleft");G(U,ee,It,"\u25B9","\\triangleright");G(U,ee,js,"{","\\{");G(it,ee,Le,"{","\\{");G(it,ee,Le,"{","\\textbraceleft");G(U,ee,Za,"}","\\}");G(it,ee,Le,"}","\\}");G(it,ee,Le,"}","\\textbraceright");G(U,ee,js,"{","\\lbrace");G(U,ee,Za,"}","\\rbrace");G(U,ee,js,"[","\\lbrack",!0);G(it,ee,Le,"[","\\lbrack",!0);G(U,ee,Za,"]","\\rbrack",!0);G(it,ee,Le,"]","\\rbrack",!0);G(U,ee,js,"(","\\lparen",!0);G(U,ee,Za,")","\\rparen",!0);G(it,ee,Le,"<","\\textless",!0);G(it,ee,Le,">","\\textgreater",!0);G(U,ee,js,"\u230A","\\lfloor",!0);G(U,ee,Za,"\u230B","\\rfloor",!0);G(U,ee,js,"\u2308","\\lceil",!0);G(U,ee,Za,"\u2309","\\rceil",!0);G(U,ee,Le,"\\","\\backslash");G(U,ee,Le,"\u2223","|");G(U,ee,Le,"\u2223","\\vert");G(it,ee,Le,"|","\\textbar",!0);G(U,ee,Le,"\u2225","\\|");G(U,ee,Le,"\u2225","\\Vert");G(it,ee,Le,"\u2225","\\textbardbl");G(it,ee,Le,"~","\\textasciitilde");G(it,ee,Le,"\\","\\textbackslash");G(it,ee,Le,"^","\\textasciicircum");G(U,ee,Ee,"\u2191","\\uparrow",!0);G(U,ee,Ee,"\u21D1","\\Uparrow",!0);G(U,ee,Ee,"\u2193","\\downarrow",!0);G(U,ee,Ee,"\u21D3","\\Downarrow",!0);G(U,ee,Ee,"\u2195","\\updownarrow",!0);G(U,ee,Ee,"\u21D5","\\Updownarrow",!0);G(U,ee,ki,"\u2210","\\coprod");G(U,ee,ki,"\u22C1","\\bigvee");G(U,ee,ki,"\u22C0","\\bigwedge");G(U,ee,ki,"\u2A04","\\biguplus");G(U,ee,ki,"\u22C2","\\bigcap");G(U,ee,ki,"\u22C3","\\bigcup");G(U,ee,ki,"\u222B","\\int");G(U,ee,ki,"\u222B","\\intop");G(U,ee,ki,"\u222C","\\iint");G(U,ee,ki,"\u222D","\\iiint");G(U,ee,ki,"\u220F","\\prod");G(U,ee,ki,"\u2211","\\sum");G(U,ee,ki,"\u2A02","\\bigotimes");G(U,ee,ki,"\u2A01","\\bigoplus");G(U,ee,ki,"\u2A00","\\bigodot");G(U,ee,ki,"\u222E","\\oint");G(U,ee,ki,"\u222F","\\oiint");G(U,ee,ki,"\u2230","\\oiiint");G(U,ee,ki,"\u2A06","\\bigsqcup");G(U,ee,ki,"\u222B","\\smallint");G(it,ee,p0,"\u2026","\\textellipsis");G(U,ee,p0,"\u2026","\\mathellipsis");G(it,ee,p0,"\u2026","\\ldots",!0);G(U,ee,p0,"\u2026","\\ldots",!0);G(U,ee,p0,"\u22EF","\\@cdots",!0);G(U,ee,p0,"\u22F1","\\ddots",!0);G(U,ee,Le,"\u22EE","\\varvdots");G(U,ee,Vn,"\u02CA","\\acute");G(U,ee,Vn,"\u02CB","\\grave");G(U,ee,Vn,"\xA8","\\ddot");G(U,ee,Vn,"~","\\tilde");G(U,ee,Vn,"\u02C9","\\bar");G(U,ee,Vn,"\u02D8","\\breve");G(U,ee,Vn,"\u02C7","\\check");G(U,ee,Vn,"^","\\hat");G(U,ee,Vn,"\u20D7","\\vec");G(U,ee,Vn,"\u02D9","\\dot");G(U,ee,Vn,"\u02DA","\\mathring");G(U,ee,er,"\uE131","\\@imath");G(U,ee,er,"\uE237","\\@jmath");G(U,ee,Le,"\u0131","\u0131");G(U,ee,Le,"\u0237","\u0237");G(it,ee,Le,"\u0131","\\i",!0);G(it,ee,Le,"\u0237","\\j",!0);G(it,ee,Le,"\xDF","\\ss",!0);G(it,ee,Le,"\xE6","\\ae",!0);G(it,ee,Le,"\u0153","\\oe",!0);G(it,ee,Le,"\xF8","\\o",!0);G(it,ee,Le,"\xC6","\\AE",!0);G(it,ee,Le,"\u0152","\\OE",!0);G(it,ee,Le,"\xD8","\\O",!0);G(it,ee,Vn,"\u02CA","\\'");G(it,ee,Vn,"\u02CB","\\`");G(it,ee,Vn,"\u02C6","\\^");G(it,ee,Vn,"\u02DC","\\~");G(it,ee,Vn,"\u02C9","\\=");G(it,ee,Vn,"\u02D8","\\u");G(it,ee,Vn,"\u02D9","\\.");G(it,ee,Vn,"\xB8","\\c");G(it,ee,Vn,"\u02DA","\\r");G(it,ee,Vn,"\u02C7","\\v");G(it,ee,Vn,"\xA8",'\\"');G(it,ee,Vn,"\u02DD","\\H");G(it,ee,Vn,"\u25EF","\\textcircled");Hz={"--":!0,"---":!0,"``":!0,"''":!0};G(it,ee,Le,"\u2013","--",!0);G(it,ee,Le,"\u2013","\\textendash");G(it,ee,Le,"\u2014","---",!0);G(it,ee,Le,"\u2014","\\textemdash");G(it,ee,Le,"\u2018","`",!0);G(it,ee,Le,"\u2018","\\textquoteleft");G(it,ee,Le,"\u2019","'",!0);G(it,ee,Le,"\u2019","\\textquoteright");G(it,ee,Le,"\u201C","``",!0);G(it,ee,Le,"\u201C","\\textquotedblleft");G(it,ee,Le,"\u201D","''",!0);G(it,ee,Le,"\u201D","\\textquotedblright");G(U,ee,Le,"\xB0","\\degree",!0);G(it,ee,Le,"\xB0","\\degree");G(it,ee,Le,"\xB0","\\textdegree",!0);G(U,ee,Le,"\xA3","\\pounds");G(U,ee,Le,"\xA3","\\mathsterling",!0);G(it,ee,Le,"\xA3","\\pounds");G(it,ee,Le,"\xA3","\\textsterling",!0);G(U,ke,Le,"\u2720","\\maltese");G(it,ke,Le,"\u2720","\\maltese");fz='0123456789/@."';for(J4=0;J4<fz.length;J4++)f7=fz.charAt(J4),G(U,ee,Le,f7,f7);dz='0123456789!@*()-=+";:?/.,';for(e3=0;e3<dz.length;e3++)d7=dz.charAt(e3),G(it,ee,Le,d7,d7);d3="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";for(t3=0;t3<d3.length;t3++)Py=d3.charAt(t3),G(U,ee,er,Py,Py),G(it,ee,Le,Py,Py);G(U,ke,Le,"C","\u2102");G(it,ke,Le,"C","\u2102");G(U,ke,Le,"H","\u210D");G(it,ke,Le,"H","\u210D");G(U,ke,Le,"N","\u2115");G(it,ke,Le,"N","\u2115");G(U,ke,Le,"P","\u2119");G(it,ke,Le,"P","\u2119");G(U,ke,Le,"Q","\u211A");G(it,ke,Le,"Q","\u211A");G(U,ke,Le,"R","\u211D");G(it,ke,Le,"R","\u211D");G(U,ke,Le,"Z","\u2124");G(it,ke,Le,"Z","\u2124");G(U,ee,er,"h","\u210E");G(it,ee,er,"h","\u210E");sr="";for(Ca=0;Ca<d3.length;Ca++)Jn=d3.charAt(Ca),sr=String.fromCharCode(55349,56320+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56372+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56424+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56580+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56684+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56736+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56788+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56840+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56944+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),Ca<26&&(sr=String.fromCharCode(55349,56632+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56476+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr));sr="\u{1D55C}";G(U,ee,er,"k",sr);G(it,ee,Le,"k",sr);for(uh=0;uh<10;uh++)iu=uh.toString(),sr=String.fromCharCode(55349,57294+uh),G(U,ee,er,iu,sr),G(it,ee,Le,iu,sr),sr=String.fromCharCode(55349,57314+uh),G(U,ee,er,iu,sr),G(it,ee,Le,iu,sr),sr=String.fromCharCode(55349,57324+uh),G(U,ee,er,iu,sr),G(it,ee,Le,iu,sr),sr=String.fromCharCode(55349,57334+uh),G(U,ee,er,iu,sr),G(it,ee,Le,iu,sr);C7="\xD0\xDE\xFE";for(r3=0;r3<C7.length;r3++)By=C7.charAt(r3),G(U,ee,er,By,By),G(it,ee,Le,By,By);n3=[["mathbf","textbf","Main-Bold"],["mathbf","textbf","Main-Bold"],["mathnormal","textit","Math-Italic"],["mathnormal","textit","Math-Italic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["mathscr","textscr","Script-Regular"],["","",""],["","",""],["","",""],["mathfrak","textfrak","Fraktur-Regular"],["mathfrak","textfrak","Fraktur-Regular"],["mathbb","textbb","AMS-Regular"],["mathbb","textbb","AMS-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathitsf","textitsf","SansSerif-Italic"],["mathitsf","textitsf","SansSerif-Italic"],["","",""],["","",""],["mathtt","texttt","Typewriter-Regular"],["mathtt","texttt","Typewriter-Regular"]],pz=[["mathbf","textbf","Main-Bold"],["","",""],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathtt","texttt","Typewriter-Regular"]],Obe=o(function(e,r){var n=e.charCodeAt(0),i=e.charCodeAt(1),a=(n-55296)*1024+(i-56320)+65536,s=r==="math"?0:1;if(119808<=a&&a<120484){var l=Math.floor((a-119808)/26);return[n3[l][2],n3[l][s]]}else if(120782<=a&&a<=120831){var u=Math.floor((a-120782)/10);return[pz[u][2],pz[u][s]]}else{if(a===120485||a===120486)return[n3[0][2],n3[0][s]];if(120486<a&&a<120782)return["",""];throw new gt("Unsupported character: "+e)}},"wideCharacterFont"),b3=o(function(e,r,n){return An[n][e]&&An[n][e].replace&&(e=An[n][e].replace),{value:e,metrics:P7(e,r,n)}},"lookupSymbol"),ol=o(function(e,r,n,i,a){var s=b3(e,r,n),l=s.metrics;e=s.value;var u;if(l){var h=l.italic;(n==="text"||i&&i.font==="mathit")&&(h=0),u=new Ts(e,l.height,l.depth,h,l.skew,l.width,a)}else typeof console<"u"&&console.warn("No character metrics "+("for '"+e+"' in style '"+r+"' and mode '"+n+"'")),u=new Ts(e,0,0,0,0,0,a);if(i){u.maxFontSize=i.sizeMultiplier,i.style.isTight()&&u.classes.push("mtight");var f=i.getColor();f&&(u.style.color=f)}return u},"makeSymbol"),Pbe=o(function(e,r,n,i){return i===void 0&&(i=[]),n.font==="boldsymbol"&&b3(e,"Main-Bold",r).metrics?ol(e,"Main-Bold",r,n,i.concat(["mathbf"])):e==="\\"||An[r][e].font==="main"?ol(e,"Main-Regular",r,n,i):ol(e,"AMS-Regular",r,n,i.concat(["amsrm"]))},"mathsym"),Bbe=o(function(e,r,n,i,a){return a!=="textord"&&b3(e,"Math-BoldItalic",r).metrics?{fontName:"Math-BoldItalic",fontClass:"boldsymbol"}:{fontName:"Main-Bold",fontClass:"mathbf"}},"boldsymbol"),Fbe=o(function(e,r,n){var i=e.mode,a=e.text,s=["mord"],l=i==="math"||i==="text"&&r.font,u=l?r.font:r.fontFamily,h="",f="";if(a.charCodeAt(0)===55349&&([h,f]=Obe(a,i)),h.length>0)return ol(a,h,i,r,s.concat(f));if(u){var d,p;if(u==="boldsymbol"){var m=Bbe(a,i,r,s,n);d=m.fontName,p=[m.fontClass]}else l?(d=Yz[u].fontName,p=[u]):(d=i3(u,r.fontWeight,r.fontShape),p=[u,r.fontWeight,r.fontShape]);if(b3(a,d,i).metrics)return ol(a,d,i,r,s.concat(p));if(Hz.hasOwnProperty(a)&&d.slice(0,10)==="Typewriter"){for(var g=[],y=0;y<a.length;y++)g.push(ol(a[y],d,i,r,s.concat(p)));return qz(g)}}if(n==="mathord")return ol(a,"Math-Italic",i,r,s.concat(["mathnormal"]));if(n==="textord"){var v=An[i][a]&&An[i][a].font;if(v==="ams"){var x=i3("amsrm",r.fontWeight,r.fontShape);return ol(a,x,i,r,s.concat("amsrm",r.fontWeight,r.fontShape))}else if(v==="main"||!v){var b=i3("textrm",r.fontWeight,r.fontShape);return ol(a,b,i,r,s.concat(r.fontWeight,r.fontShape))}else{var w=i3(v,r.fontWeight,r.fontShape);return ol(a,w,i,r,s.concat(w,r.fontWeight,r.fontShape))}}else throw new Error("unexpected type: "+n+" in makeOrd")},"makeOrd"),$be=o((t,e)=>{if(fh(t.classes)!==fh(e.classes)||t.skew!==e.skew||t.maxFontSize!==e.maxFontSize)return!1;if(t.classes.length===1){var r=t.classes[0];if(r==="mbin"||r==="mord")return!1}for(var n in t.style)if(t.style.hasOwnProperty(n)&&t.style[n]!==e.style[n])return!1;for(var i in e.style)if(e.style.hasOwnProperty(i)&&t.style[i]!==e.style[i])return!1;return!0},"canCombine"),zbe=o(t=>{for(var e=0;e<t.length-1;e++){var r=t[e],n=t[e+1];r instanceof Ts&&n instanceof Ts&&$be(r,n)&&(r.text+=n.text,r.height=Math.max(r.height,n.height),r.depth=Math.max(r.depth,n.depth),r.italic=n.italic,t.splice(e+1,1),e--)}return t},"tryCombineChars"),B7=o(function(e){for(var r=0,n=0,i=0,a=0;a<e.children.length;a++){var s=e.children[a];s.height>r&&(r=s.height),s.depth>n&&(n=s.depth),s.maxFontSize>i&&(i=s.maxFontSize)}e.height=r,e.depth=n,e.maxFontSize=i},"sizeElementFromChildren"),bs=o(function(e,r,n,i){var a=new td(e,r,n,i);return B7(a),a},"makeSpan"),Wz=o((t,e,r,n)=>new td(t,e,r,n),"makeSvgSpan"),Gbe=o(function(e,r,n){var i=bs([e],[],r);return i.height=Math.max(n||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),i.style.borderBottomWidth=kt(i.height),i.maxFontSize=1,i},"makeLineSpan"),Vbe=o(function(e,r,n,i){var a=new Vy(e,r,n,i);return B7(a),a},"makeAnchor"),qz=o(function(e){var r=new ed(e);return B7(r),r},"makeFragment"),Ube=o(function(e,r){return e instanceof ed?bs([],[e],r):e},"wrapFragment"),Hbe=o(function(e){if(e.positionType==="individualShift"){for(var r=e.children,n=[r[0]],i=-r[0].shift-r[0].elem.depth,a=i,s=1;s<r.length;s++){var l=-r[s].shift-a-r[s].elem.depth,u=l-(r[s-1].elem.height+r[s-1].elem.depth);a=a+l,n.push({type:"kern",size:u}),n.push(r[s])}return{children:n,depth:i}}var h;if(e.positionType==="top"){for(var f=e.positionData,d=0;d<e.children.length;d++){var p=e.children[d];f-=p.type==="kern"?p.size:p.elem.height+p.elem.depth}h=f}else if(e.positionType==="bottom")h=-e.positionData;else{var m=e.children[0];if(m.type!=="elem")throw new Error('First child must have type "elem".');if(e.positionType==="shift")h=-m.elem.depth-e.positionData;else if(e.positionType==="firstBaseline")h=-m.elem.depth;else throw new Error("Invalid positionType "+e.positionType+".")}return{children:e.children,depth:h}},"getVListChildrenAndDepth"),Wbe=o(function(e,r){for(var{children:n,depth:i}=Hbe(e),a=0,s=0;s<n.length;s++){var l=n[s];if(l.type==="elem"){var u=l.elem;a=Math.max(a,u.maxFontSize,u.height)}}a+=2;var h=bs(["pstrut"],[]);h.style.height=kt(a);for(var f=[],d=i,p=i,m=i,g=0;g<n.length;g++){var y=n[g];if(y.type==="kern")m+=y.size;else{var v=y.elem,x=y.wrapperClasses||[],b=y.wrapperStyle||{},w=bs(x,[h,v],void 0,b);w.style.top=kt(-a-m-v.depth),y.marginLeft&&(w.style.marginLeft=y.marginLeft),y.marginRight&&(w.style.marginRight=y.marginRight),f.push(w),m+=v.height+v.depth}d=Math.min(d,m),p=Math.max(p,m)}var C=bs(["vlist"],f);C.style.height=kt(p);var T;if(d<0){var E=bs([],[]),A=bs(["vlist"],[E]);A.style.height=kt(-d);var S=bs(["vlist-s"],[new Ts("\u200B")]);T=[bs(["vlist-r"],[C,S]),bs(["vlist-r"],[A])]}else T=[bs(["vlist-r"],[C])];var _=bs(["vlist-t"],T);return T.length===2&&_.classes.push("vlist-t2"),_.height=p,_.depth=-d,_},"makeVList"),qbe=o((t,e)=>{var r=bs(["mspace"],[],e),n=ti(t,e);return r.style.marginRight=kt(n),r},"makeGlue"),i3=o(function(e,r,n){var i="";switch(e){case"amsrm":i="AMS";break;case"textrm":i="Main";break;case"textsf":i="SansSerif";break;case"texttt":i="Typewriter";break;default:i=e}var a;return r==="textbf"&&n==="textit"?a="BoldItalic":r==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",i+"-"+a},"retrieveTextFontName"),Yz={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Xz={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Ybe=o(function(e,r){var[n,i,a]=Xz[e],s=new Kl(n),l=new ll([s],{width:kt(i),height:kt(a),style:"width:"+kt(i),viewBox:"0 0 "+1e3*i+" "+1e3*a,preserveAspectRatio:"xMinYMin"}),u=Wz(["overlay"],[l],r);return u.height=a,u.style.height=kt(a),u.style.width=kt(i),u},"staticSvg"),Be={fontMap:Yz,makeSymbol:ol,mathsym:Pbe,makeSpan:bs,makeSvgSpan:Wz,makeLineSpan:Gbe,makeAnchor:Vbe,makeFragment:qz,wrapFragment:Ube,makeVList:Wbe,makeOrd:Fbe,makeGlue:qbe,staticSvg:Ybe,svgData:Xz,tryCombineChars:zbe},ei={number:3,unit:"mu"},Zf={number:4,unit:"mu"},au={number:5,unit:"mu"},Xbe={mord:{mop:ei,mbin:Zf,mrel:au,minner:ei},mop:{mord:ei,mop:ei,mrel:au,minner:ei},mbin:{mord:Zf,mop:Zf,mopen:Zf,minner:Zf},mrel:{mord:au,mop:au,mopen:au,minner:au},mopen:{},mclose:{mop:ei,mbin:Zf,mrel:au,minner:ei},mpunct:{mord:ei,mop:ei,mrel:au,mopen:ei,mclose:ei,mpunct:ei,minner:ei},minner:{mord:ei,mop:ei,mbin:Zf,mrel:au,mopen:ei,mpunct:ei,minner:ei}},jbe={mord:{mop:ei},mop:{mord:ei,mop:ei},mbin:{},mrel:{},mopen:{},mclose:{mop:ei},mpunct:{},minner:{mop:ei}},jz={},p3={},m3={};o(Nt,"defineFunction");o(rd,"defineFunctionBuilders");g3=o(function(e){return e.type==="ordgroup"&&e.body.length===1?e.body[0]:e},"normalizeArgument"),di=o(function(e){return e.type==="ordgroup"?e.body:[e]},"ordargument"),lu=Be.makeSpan,Kbe=["leftmost","mbin","mopen","mrel","mop","mpunct"],Qbe=["rightmost","mrel","mclose","mpunct"],Zbe={display:tr.DISPLAY,text:tr.TEXT,script:tr.SCRIPT,scriptscript:tr.SCRIPTSCRIPT},Jbe={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},Pi=o(function(e,r,n,i){i===void 0&&(i=[null,null]);for(var a=[],s=0;s<e.length;s++){var l=Fr(e[s],r);if(l instanceof ed){var u=l.children;a.push(...u)}else a.push(l)}if(Be.tryCombineChars(a),!n)return a;var h=r;if(e.length===1){var f=e[0];f.type==="sizing"?h=r.havingSize(f.size):f.type==="styling"&&(h=r.havingStyle(Zbe[f.style]))}var d=lu([i[0]||"leftmost"],[],r),p=lu([i[1]||"rightmost"],[],r),m=n==="root";return mz(a,(g,y)=>{var v=y.classes[0],x=g.classes[0];v==="mbin"&&Jt.contains(Qbe,x)?y.classes[0]="mord":x==="mbin"&&Jt.contains(Kbe,v)&&(g.classes[0]="mord")},{node:d},p,m),mz(a,(g,y)=>{var v=A7(y),x=A7(g),b=v&&x?g.hasClass("mtight")?jbe[v][x]:Xbe[v][x]:null;if(b)return Be.makeGlue(b,h)},{node:d},p,m),a},"buildExpression"),mz=o(function t(e,r,n,i,a){i&&e.push(i);for(var s=0;s<e.length;s++){var l=e[s],u=Kz(l);if(u){t(u.children,r,n,null,a);continue}var h=!l.hasClass("mspace");if(h){var f=r(l,n.node);f&&(n.insertAfter?n.insertAfter(f):(e.unshift(f),s++))}h?n.node=l:a&&l.hasClass("newline")&&(n.node=lu(["leftmost"])),n.insertAfter=(d=>p=>{e.splice(d+1,0,p),s++})(s)}i&&e.pop()},"traverseNonSpaceNodes"),Kz=o(function(e){return e instanceof ed||e instanceof Vy||e instanceof td&&e.hasClass("enclosing")?e:null},"checkPartialGroup"),e4e=o(function t(e,r){var n=Kz(e);if(n){var i=n.children;if(i.length){if(r==="right")return t(i[i.length-1],"right");if(r==="left")return t(i[0],"left")}}return e},"getOutermostNode"),A7=o(function(e,r){return e?(r&&(e=e4e(e,r)),Jbe[e.classes[0]]||null):null},"getTypeOfDomTree"),Hy=o(function(e,r){var n=["nulldelimiter"].concat(e.baseSizingClasses());return lu(r.concat(n))},"makeNullDelimiter"),Fr=o(function(e,r,n){if(!e)return lu();if(p3[e.type]){var i=p3[e.type](e,r);if(n&&r.size!==n.size){i=lu(r.sizingClasses(n),[i],r);var a=r.sizeMultiplier/n.sizeMultiplier;i.height*=a,i.depth*=a}return i}else throw new gt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(a3,"buildHTMLUnbreakable");o(_7,"buildHTML");o(Qz,"newDocumentFragment");ws=class{static{o(this,"MathNode")}constructor(e,r,n){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=r||[],this.classes=n||[]}setAttribute(e,r){this.attributes[e]=r}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&e.setAttribute(r,this.attributes[r]);this.classes.length>0&&(e.className=fh(this.classes));for(var n=0;n<this.children.length;n++)e.appendChild(this.children[n].toNode());return e}toMarkup(){var e="<"+this.type;for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&(e+=" "+r+'="',e+=Jt.escape(this.attributes[r]),e+='"');this.classes.length>0&&(e+=' class ="'+Jt.escape(fh(this.classes))+'"'),e+=">";for(var n=0;n<this.children.length;n++)e+=this.children[n].toMarkup();return e+="</"+this.type+">",e}toText(){return this.children.map(e=>e.toText()).join("")}},Jf=class{static{o(this,"TextNode")}constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return Jt.escape(this.toText())}toText(){return this.text}},D7=class{static{o(this,"SpaceNode")}constructor(e){this.width=void 0,this.character=void 0,this.width=e,e>=.05555&&e<=.05556?this.character="\u200A":e>=.1666&&e<=.1667?this.character="\u2009":e>=.2222&&e<=.2223?this.character="\u2005":e>=.2777&&e<=.2778?this.character="\u2005\u200A":e>=-.05556&&e<=-.05555?this.character="\u200A\u2063":e>=-.1667&&e<=-.1666?this.character="\u2009\u2063":e>=-.2223&&e<=-.2222?this.character="\u205F\u2063":e>=-.2778&&e<=-.2777?this.character="\u2005\u2063":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",kt(this.width)),e}toMarkup(){return this.character?"<mtext>"+this.character+"</mtext>":'<mspace width="'+kt(this.width)+'"/>'}toText(){return this.character?this.character:" "}},dt={MathNode:ws,TextNode:Jf,SpaceNode:D7,newDocumentFragment:Qz},Co=o(function(e,r,n){return An[r][e]&&An[r][e].replace&&e.charCodeAt(0)!==55349&&!(Hz.hasOwnProperty(e)&&n&&(n.fontFamily&&n.fontFamily.slice(4,6)==="tt"||n.font&&n.font.slice(4,6)==="tt"))&&(e=An[r][e].replace),new dt.TextNode(e)},"makeText"),F7=o(function(e){return e.length===1?e[0]:new dt.MathNode("mrow",e)},"makeRow"),$7=o(function(e,r){if(r.fontFamily==="texttt")return"monospace";if(r.fontFamily==="textsf")return r.fontShape==="textit"&&r.fontWeight==="textbf"?"sans-serif-bold-italic":r.fontShape==="textit"?"sans-serif-italic":r.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(r.fontShape==="textit"&&r.fontWeight==="textbf")return"bold-italic";if(r.fontShape==="textit")return"italic";if(r.fontWeight==="textbf")return"bold";var n=r.font;if(!n||n==="mathnormal")return null;var i=e.mode;if(n==="mathit")return"italic";if(n==="boldsymbol")return e.type==="textord"?"bold":"bold-italic";if(n==="mathbf")return"bold";if(n==="mathbb")return"double-struck";if(n==="mathfrak")return"fraktur";if(n==="mathscr"||n==="mathcal")return"script";if(n==="mathsf")return"sans-serif";if(n==="mathtt")return"monospace";var a=e.text;if(Jt.contains(["\\imath","\\jmath"],a))return null;An[i][a]&&An[i][a].replace&&(a=An[i][a].replace);var s=Be.fontMap[n].fontName;return P7(a,s,i)?Be.fontMap[n].variant:null},"getVariant"),ks=o(function(e,r,n){if(e.length===1){var i=yn(e[0],r);return n&&i instanceof ws&&i.type==="mo"&&(i.setAttribute("lspace","0em"),i.setAttribute("rspace","0em")),[i]}for(var a=[],s,l=0;l<e.length;l++){var u=yn(e[l],r);if(u instanceof ws&&s instanceof ws){if(u.type==="mtext"&&s.type==="mtext"&&u.getAttribute("mathvariant")===s.getAttribute("mathvariant")){s.children.push(...u.children);continue}else if(u.type==="mn"&&s.type==="mn"){s.children.push(...u.children);continue}else if(u.type==="mi"&&u.children.length===1&&s.type==="mn"){var h=u.children[0];if(h instanceof Jf&&h.text==="."){s.children.push(...u.children);continue}}else if(s.type==="mi"&&s.children.length===1){var f=s.children[0];if(f instanceof Jf&&f.text==="\u0338"&&(u.type==="mo"||u.type==="mi"||u.type==="mn")){var d=u.children[0];d instanceof Jf&&d.text.length>0&&(d.text=d.text.slice(0,1)+"\u0338"+d.text.slice(1),a.pop())}}}a.push(u),s=u}return a},"buildExpression"),dh=o(function(e,r,n){return F7(ks(e,r,n))},"buildExpressionRow"),yn=o(function(e,r){if(!e)return new dt.MathNode("mrow");if(m3[e.type]){var n=m3[e.type](e,r);return n}else throw new gt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(gz,"buildMathML");Zz=o(function(e){return new f3({style:e.displayMode?tr.DISPLAY:tr.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},"optionsFromSettings"),Jz=o(function(e,r){if(r.displayMode){var n=["katex-display"];r.leqno&&n.push("leqno"),r.fleqn&&n.push("fleqn"),e=Be.makeSpan(n,[e])}return e},"displayWrap"),t4e=o(function(e,r,n){var i=Zz(n),a;if(n.output==="mathml")return gz(e,r,i,n.displayMode,!0);if(n.output==="html"){var s=_7(e,i);a=Be.makeSpan(["katex"],[s])}else{var l=gz(e,r,i,n.displayMode,!1),u=_7(e,i);a=Be.makeSpan(["katex"],[l,u])}return Jz(a,n)},"buildTree"),r4e=o(function(e,r,n){var i=Zz(n),a=_7(e,i),s=Be.makeSpan(["katex"],[a]);return Jz(s,n)},"buildHTMLTree"),n4e={widehat:"^",widecheck:"\u02C7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23DF",overbrace:"\u23DE",overgroup:"\u23E0",undergroup:"\u23E1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21D2",xRightarrow:"\u21D2",overleftharpoon:"\u21BC",xleftharpoonup:"\u21BC",overrightharpoon:"\u21C0",xrightharpoonup:"\u21C0",xLeftarrow:"\u21D0",xLeftrightarrow:"\u21D4",xhookleftarrow:"\u21A9",xhookrightarrow:"\u21AA",xmapsto:"\u21A6",xrightharpoondown:"\u21C1",xleftharpoondown:"\u21BD",xrightleftharpoons:"\u21CC",xleftrightharpoons:"\u21CB",xtwoheadleftarrow:"\u219E",xtwoheadrightarrow:"\u21A0",xlongequal:"=",xtofrom:"\u21C4",xrightleftarrows:"\u21C4",xrightequilibrium:"\u21CC",xleftequilibrium:"\u21CB","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},i4e=o(function(e){var r=new dt.MathNode("mo",[new dt.TextNode(n4e[e.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},"mathMLnode"),a4e={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},s4e=o(function(e){return e.type==="ordgroup"?e.body.length:1},"groupLength"),o4e=o(function(e,r){function n(){var l=4e5,u=e.label.slice(1);if(Jt.contains(["widehat","widecheck","widetilde","utilde"],u)){var h=e,f=s4e(h.base),d,p,m;if(f>5)u==="widehat"||u==="widecheck"?(d=420,l=2364,m=.42,p=u+"4"):(d=312,l=2340,m=.34,p="tilde4");else{var g=[1,1,2,2,3,3][f];u==="widehat"||u==="widecheck"?(l=[0,1062,2364,2364,2364][g],d=[0,239,300,360,420][g],m=[0,.24,.3,.3,.36,.42][g],p=u+g):(l=[0,600,1033,2339,2340][g],d=[0,260,286,306,312][g],m=[0,.26,.286,.3,.306,.34][g],p="tilde"+g)}var y=new Kl(p),v=new ll([y],{width:"100%",height:kt(m),viewBox:"0 0 "+l+" "+d,preserveAspectRatio:"none"});return{span:Be.makeSvgSpan([],[v],r),minWidth:0,height:m}}else{var x=[],b=a4e[u],[w,C,T]=b,E=T/1e3,A=w.length,S,_;if(A===1){var I=b[3];S=["hide-tail"],_=[I]}else if(A===2)S=["halfarrow-left","halfarrow-right"],_=["xMinYMin","xMaxYMin"];else if(A===3)S=["brace-left","brace-center","brace-right"],_=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support
270 + `+A+" children.");for(var D=0;D<A;D++){var k=new Kl(w[D]),L=new ll([k],{width:"400em",height:kt(E),viewBox:"0 0 "+l+" "+T,preserveAspectRatio:_[D]+" slice"}),R=Be.makeSvgSpan([S[D]],[L],r);if(A===1)return{span:R,minWidth:C,height:E};R.style.height=kt(E),x.push(R)}return{span:Be.makeSpan(["stretchy"],x,r),minWidth:C,height:E}}}o(n,"buildSvgSpan_");var{span:i,minWidth:a,height:s}=n();return i.height=s,i.style.height=kt(s),a>0&&(i.style.minWidth=kt(a)),i},"svgSpan"),l4e=o(function(e,r,n,i,a){var s,l=e.height+e.depth+n+i;if(/fbox|color|angl/.test(r)){if(s=Be.makeSpan(["stretchy",r],[],a),r==="fbox"){var u=a.color&&a.getColor();u&&(s.style.borderColor=u)}}else{var h=[];/^[bx]cancel$/.test(r)&&h.push(new Uy({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&h.push(new Uy({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var f=new ll(h,{width:"100%",height:kt(l)});s=Be.makeSvgSpan([],[f],a)}return s.height=l,s.style.height=kt(l),s},"encloseSpan"),cu={encloseSpan:l4e,mathMLnode:i4e,svgSpan:o4e};o(xr,"assertNodeType");o(z7,"assertSymbolNodeType");o(w3,"checkSymbolNodeType");G7=o((t,e)=>{var r,n,i;t&&t.type==="supsub"?(n=xr(t.base,"accent"),r=n.base,t.base=r,i=Nbe(Fr(t,e)),t.base=n):(n=xr(t,"accent"),r=n.base);var a=Fr(r,e.havingCrampedStyle()),s=n.isShifty&&Jt.isCharacterBox(r),l=0;if(s){var u=Jt.getBaseElem(r),h=Fr(u,e.havingCrampedStyle());l=hz(h).skew}var f=n.label==="\\c",d=f?a.height+a.depth:Math.min(a.height,e.fontMetrics().xHeight),p;if(n.isStretchy)p=cu.svgSpan(n,e),p=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"elem",elem:p,wrapperClasses:["svg-align"],wrapperStyle:l>0?{width:"calc(100% - "+kt(2*l)+")",marginLeft:kt(2*l)}:void 0}]},e);else{var m,g;n.label==="\\vec"?(m=Be.staticSvg("vec",e),g=Be.svgData.vec[1]):(m=Be.makeOrd({mode:n.mode,text:n.label},e,"textord"),m=hz(m),m.italic=0,g=m.width,f&&(d+=m.depth)),p=Be.makeSpan(["accent-body"],[m]);var y=n.label==="\\textcircled";y&&(p.classes.push("accent-full"),d=a.height);var v=l;y||(v-=g/2),p.style.left=kt(v),n.label==="\\textcircled"&&(p.style.top=".2em"),p=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:-d},{type:"elem",elem:p}]},e)}var x=Be.makeSpan(["mord","accent"],[p],e);return i?(i.children[0]=x,i.height=Math.max(x.height,i.height),i.classes[0]="mord",i):x},"htmlBuilder$a"),eG=o((t,e)=>{var r=t.isStretchy?cu.mathMLnode(t.label):new dt.MathNode("mo",[Co(t.label,t.mode)]),n=new dt.MathNode("mover",[yn(t.base,e),r]);return n.setAttribute("accent","true"),n},"mathmlBuilder$9"),c4e=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(t=>"\\"+t).join("|"));Nt({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:o((t,e)=>{var r=g3(e[0]),n=!c4e.test(t.funcName),i=!n||t.funcName==="\\widehat"||t.funcName==="\\widetilde"||t.funcName==="\\widecheck";return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:n,isShifty:i,base:r}},"handler"),htmlBuilder:G7,mathmlBuilder:eG});Nt({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:o((t,e)=>{var r=e[0],n=t.parser.mode;return n==="math"&&(t.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+t.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:t.funcName,isStretchy:!1,isShifty:!0,base:r}},"handler"),htmlBuilder:G7,mathmlBuilder:eG});Nt({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"accentUnder",mode:r.mode,label:n,base:i}},"handler"),htmlBuilder:o((t,e)=>{var r=Fr(t.base,e),n=cu.svgSpan(t,e),i=t.label==="\\utilde"?.12:0,a=Be.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:i},{type:"elem",elem:r}]},e);return Be.makeSpan(["mord","accentunder"],[a],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=cu.mathMLnode(t.label),n=new dt.MathNode("munder",[yn(t.base,e),r]);return n.setAttribute("accentunder","true"),n},"mathmlBuilder")});s3=o(t=>{var e=new dt.MathNode("mpadded",t?[t]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e},"paddedNode");Nt({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n,funcName:i}=t;return{type:"xArrow",mode:n.mode,label:i,body:e[0],below:r[0]}},htmlBuilder(t,e){var r=e.style,n=e.havingStyle(r.sup()),i=Be.wrapFragment(Fr(t.body,n,e),e),a=t.label.slice(0,2)==="\\x"?"x":"cd";i.classes.push(a+"-arrow-pad");var s;t.below&&(n=e.havingStyle(r.sub()),s=Be.wrapFragment(Fr(t.below,n,e),e),s.classes.push(a+"-arrow-pad"));var l=cu.svgSpan(t,e),u=-e.fontMetrics().axisHeight+.5*l.height,h=-e.fontMetrics().axisHeight-.5*l.height-.111;(i.depth>.25||t.label==="\\xleftequilibrium")&&(h-=i.depth);var f;if(s){var d=-e.fontMetrics().axisHeight+s.height+.5*l.height+.111;f=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u},{type:"elem",elem:s,shift:d}]},e)}else f=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u}]},e);return f.children[0].children[0].children[1].classes.push("svg-align"),Be.makeSpan(["mrel","x-arrow"],[f],e)},mathmlBuilder(t,e){var r=cu.mathMLnode(t.label);r.setAttribute("minsize",t.label.charAt(0)==="x"?"1.75em":"3.0em");var n;if(t.body){var i=s3(yn(t.body,e));if(t.below){var a=s3(yn(t.below,e));n=new dt.MathNode("munderover",[r,a,i])}else n=new dt.MathNode("mover",[r,i])}else if(t.below){var s=s3(yn(t.below,e));n=new dt.MathNode("munder",[r,s])}else n=s3(),n=new dt.MathNode("mover",[r,n]);return n}});u4e=Be.makeSpan;o(tG,"htmlBuilder$9");o(rG,"mathmlBuilder$8");Nt({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:di(i),isCharacterBox:Jt.isCharacterBox(i)}},htmlBuilder:tG,mathmlBuilder:rG});T3=o(t=>{var e=t.type==="ordgroup"&&t.body.length?t.body[0]:t;return e.type==="atom"&&(e.family==="bin"||e.family==="rel")?"m"+e.family:"mord"},"binrelClass");Nt({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(t,e){var{parser:r}=t;return{type:"mclass",mode:r.mode,mclass:T3(e[0]),body:di(e[1]),isCharacterBox:Jt.isCharacterBox(e[1])}}});Nt({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(t,e){var{parser:r,funcName:n}=t,i=e[1],a=e[0],s;n!=="\\stackrel"?s=T3(i):s="mrel";var l={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:n!=="\\stackrel",body:di(i)},u={type:"supsub",mode:a.mode,base:l,sup:n==="\\underset"?null:a,sub:n==="\\underset"?a:null};return{type:"mclass",mode:r.mode,mclass:s,body:[u],isCharacterBox:Jt.isCharacterBox(u)}},htmlBuilder:tG,mathmlBuilder:rG});Nt({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"pmb",mode:r.mode,mclass:T3(e[0]),body:di(e[0])}},htmlBuilder(t,e){var r=Pi(t.body,e,!0),n=Be.makeSpan([t.mclass],r,e);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(t,e){var r=ks(t.body,e),n=new dt.MathNode("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});h4e={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},yz=o(()=>({type:"styling",body:[],mode:"math",style:"display"}),"newCell"),vz=o(t=>t.type==="textord"&&t.text==="@","isStartOfArrow"),f4e=o((t,e)=>(t.type==="mathord"||t.type==="atom")&&t.text===e,"isLabelEnd");o(d4e,"cdArrow");o(p4e,"parseCD");Nt({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:e[0]}},htmlBuilder(t,e){var r=e.havingStyle(e.style.sup()),n=Be.wrapFragment(Fr(t.label,r,e),e);return n.classes.push("cd-label-"+t.side),n.style.bottom=kt(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(t,e){var r=new dt.MathNode("mrow",[yn(t.label,e)]);return r=new dt.MathNode("mpadded",[r]),r.setAttribute("width","0"),t.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new dt.MathNode("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});Nt({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(t,e){var{parser:r}=t;return{type:"cdlabelparent",mode:r.mode,fragment:e[0]}},htmlBuilder(t,e){var r=Be.wrapFragment(Fr(t.fragment,e),e);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(t,e){return new dt.MathNode("mrow",[yn(t.fragment,e)])}});Nt({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(t,e){for(var{parser:r}=t,n=xr(e[0],"ordgroup"),i=n.body,a="",s=0;s<i.length;s++){var l=xr(i[s],"textord");a+=l.text}var u=parseInt(a),h;if(isNaN(u))throw new gt("\\@char has non-numeric argument "+a);if(u<0||u>=1114111)throw new gt("\\@char with invalid code point "+a);return u<=65535?h=String.fromCharCode(u):(u-=65536,h=String.fromCharCode((u>>10)+55296,(u&1023)+56320)),{type:"textord",mode:r.mode,text:h}}});nG=o((t,e)=>{var r=Pi(t.body,e.withColor(t.color),!1);return Be.makeFragment(r)},"htmlBuilder$8"),iG=o((t,e)=>{var r=ks(t.body,e.withColor(t.color)),n=new dt.MathNode("mstyle",r);return n.setAttribute("mathcolor",t.color),n},"mathmlBuilder$7");Nt({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(t,e){var{parser:r}=t,n=xr(e[0],"color-token").color,i=e[1];return{type:"color",mode:r.mode,color:n,body:di(i)}},htmlBuilder:nG,mathmlBuilder:iG});Nt({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(t,e){var{parser:r,breakOnTokenText:n}=t,i=xr(e[0],"color-token").color;r.gullet.macros.set("\\current@color",i);var a=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:i,body:a}},htmlBuilder:nG,mathmlBuilder:iG});Nt({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(t,e,r){var{parser:n}=t,i=n.gullet.future().text==="["?n.parseSizeGroup(!0):null,a=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:a,size:i&&xr(i,"size").value}},htmlBuilder(t,e){var r=Be.makeSpan(["mspace"],[],e);return t.newLine&&(r.classes.push("newline"),t.size&&(r.style.marginTop=kt(ti(t.size,e)))),r},mathmlBuilder(t,e){var r=new dt.MathNode("mspace");return t.newLine&&(r.setAttribute("linebreak","newline"),t.size&&r.setAttribute("height",kt(ti(t.size,e)))),r}});L7={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},aG=o(t=>{var e=t.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(e))throw new gt("Expected a control sequence",t);return e},"checkControlSequence"),m4e=o(t=>{var e=t.gullet.popToken();return e.text==="="&&(e=t.gullet.popToken(),e.text===" "&&(e=t.gullet.popToken())),e},"getRHS"),sG=o((t,e,r,n)=>{var i=t.gullet.macros.get(r.text);i==null&&(r.noexpand=!0,i={tokens:[r],numArgs:0,unexpandable:!t.gullet.isExpandable(r.text)}),t.gullet.macros.set(e,i,n)},"letCommand");Nt({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e,funcName:r}=t;e.consumeSpaces();var n=e.fetch();if(L7[n.text])return(r==="\\global"||r==="\\\\globallong")&&(n.text=L7[n.text]),xr(e.parseFunction(),"internal");throw new gt("Invalid token after macro prefix",n)}});Nt({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=e.gullet.popToken(),i=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new gt("Expected a control sequence",n);for(var a=0,s,l=[[]];e.gullet.future().text!=="{";)if(n=e.gullet.popToken(),n.text==="#"){if(e.gullet.future().text==="{"){s=e.gullet.future(),l[a].push("{");break}if(n=e.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new gt('Invalid argument number "'+n.text+'"');if(parseInt(n.text)!==a+1)throw new gt('Argument number "'+n.text+'" out of order');a++,l.push([])}else{if(n.text==="EOF")throw new gt("Expected a macro definition");l[a].push(n.text)}var{tokens:u}=e.gullet.consumeArg();return s&&u.unshift(s),(r==="\\edef"||r==="\\xdef")&&(u=e.gullet.expandTokens(u),u.reverse()),e.gullet.macros.set(i,{tokens:u,numArgs:a,delimiters:l},r===L7[r]),{type:"internal",mode:e.mode}}});Nt({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=aG(e.gullet.popToken());e.gullet.consumeSpaces();var i=m4e(e);return sG(e,n,i,r==="\\\\globallet"),{type:"internal",mode:e.mode}}});Nt({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=aG(e.gullet.popToken()),i=e.gullet.popToken(),a=e.gullet.popToken();return sG(e,n,a,r==="\\\\globalfuture"),e.gullet.pushToken(a),e.gullet.pushToken(i),{type:"internal",mode:e.mode}}});Fy=o(function(e,r,n){var i=An.math[e]&&An.math[e].replace,a=P7(i||e,r,n);if(!a)throw new Error("Unsupported symbol "+e+" and font size "+r+".");return a},"getMetrics"),V7=o(function(e,r,n,i){var a=n.havingBaseStyle(r),s=Be.makeSpan(i.concat(a.sizingClasses(n)),[e],n),l=a.sizeMultiplier/n.sizeMultiplier;return s.height*=l,s.depth*=l,s.maxFontSize=a.sizeMultiplier,s},"styleWrap"),oG=o(function(e,r,n){var i=r.havingBaseStyle(n),a=(1-r.sizeMultiplier/i.sizeMultiplier)*r.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=kt(a),e.height-=a,e.depth+=a},"centerSpan"),g4e=o(function(e,r,n,i,a,s){var l=Be.makeSymbol(e,"Main-Regular",a,i),u=V7(l,r,i,s);return n&&oG(u,i,r),u},"makeSmallDelim"),y4e=o(function(e,r,n,i){return Be.makeSymbol(e,"Size"+r+"-Regular",n,i)},"mathrmSize"),lG=o(function(e,r,n,i,a,s){var l=y4e(e,r,a,i),u=V7(Be.makeSpan(["delimsizing","size"+r],[l],i),tr.TEXT,i,s);return n&&oG(u,i,tr.TEXT),u},"makeLargeDelim"),p7=o(function(e,r,n){var i;r==="Size1-Regular"?i="delim-size1":i="delim-size4";var a=Be.makeSpan(["delimsizinginner",i],[Be.makeSpan([],[Be.makeSymbol(e,r,n)])]);return{type:"elem",elem:a}},"makeGlyphSpan"),m7=o(function(e,r,n){var i=jl["Size4-Regular"][e.charCodeAt(0)]?jl["Size4-Regular"][e.charCodeAt(0)][4]:jl["Size1-Regular"][e.charCodeAt(0)][4],a=new Kl("inner",Sbe(e,Math.round(1e3*r))),s=new ll([a],{width:kt(i),height:kt(r),style:"width:"+kt(i),viewBox:"0 0 "+1e3*i+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),l=Be.makeSvgSpan([],[s],n);return l.height=r,l.style.height=kt(r),l.style.width=kt(i),{type:"elem",elem:l}},"makeInner"),R7=.008,o3={type:"kern",size:-1*R7},v4e=["|","\\lvert","\\rvert","\\vert"],x4e=["\\|","\\lVert","\\rVert","\\Vert"],cG=o(function(e,r,n,i,a,s){var l,u,h,f,d="",p=0;l=h=f=e,u=null;var m="Size1-Regular";e==="\\uparrow"?h=f="\u23D0":e==="\\Uparrow"?h=f="\u2016":e==="\\downarrow"?l=h="\u23D0":e==="\\Downarrow"?l=h="\u2016":e==="\\updownarrow"?(l="\\uparrow",h="\u23D0",f="\\downarrow"):e==="\\Updownarrow"?(l="\\Uparrow",h="\u2016",f="\\Downarrow"):Jt.contains(v4e,e)?(h="\u2223",d="vert",p=333):Jt.contains(x4e,e)?(h="\u2225",d="doublevert",p=556):e==="["||e==="\\lbrack"?(l="\u23A1",h="\u23A2",f="\u23A3",m="Size4-Regular",d="lbrack",p=667):e==="]"||e==="\\rbrack"?(l="\u23A4",h="\u23A5",f="\u23A6",m="Size4-Regular",d="rbrack",p=667):e==="\\lfloor"||e==="\u230A"?(h=l="\u23A2",f="\u23A3",m="Size4-Regular",d="lfloor",p=667):e==="\\lceil"||e==="\u2308"?(l="\u23A1",h=f="\u23A2",m="Size4-Regular",d="lceil",p=667):e==="\\rfloor"||e==="\u230B"?(h=l="\u23A5",f="\u23A6",m="Size4-Regular",d="rfloor",p=667):e==="\\rceil"||e==="\u2309"?(l="\u23A4",h=f="\u23A5",m="Size4-Regular",d="rceil",p=667):e==="("||e==="\\lparen"?(l="\u239B",h="\u239C",f="\u239D",m="Size4-Regular",d="lparen",p=875):e===")"||e==="\\rparen"?(l="\u239E",h="\u239F",f="\u23A0",m="Size4-Regular",d="rparen",p=875):e==="\\{"||e==="\\lbrace"?(l="\u23A7",u="\u23A8",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\}"||e==="\\rbrace"?(l="\u23AB",u="\u23AC",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lgroup"||e==="\u27EE"?(l="\u23A7",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\rgroup"||e==="\u27EF"?(l="\u23AB",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lmoustache"||e==="\u23B0"?(l="\u23A7",f="\u23AD",h="\u23AA",m="Size4-Regular"):(e==="\\rmoustache"||e==="\u23B1")&&(l="\u23AB",f="\u23A9",h="\u23AA",m="Size4-Regular");var g=Fy(l,m,a),y=g.height+g.depth,v=Fy(h,m,a),x=v.height+v.depth,b=Fy(f,m,a),w=b.height+b.depth,C=0,T=1;if(u!==null){var E=Fy(u,m,a);C=E.height+E.depth,T=2}var A=y+w+C,S=Math.max(0,Math.ceil((r-A)/(T*x))),_=A+S*T*x,I=i.fontMetrics().axisHeight;n&&(I*=i.sizeMultiplier);var D=_/2-I,k=[];if(d.length>0){var L=_-y-w,R=Math.round(_*1e3),O=Cbe(d,Math.round(L*1e3)),M=new Kl(d,O),B=(p/1e3).toFixed(3)+"em",F=(R/1e3).toFixed(3)+"em",P=new ll([M],{width:B,height:F,viewBox:"0 0 "+p+" "+R}),z=Be.makeSvgSpan([],[P],i);z.height=R/1e3,z.style.width=B,z.style.height=F,k.push({type:"elem",elem:z})}else{if(k.push(p7(f,m,a)),k.push(o3),u===null){var $=_-y-w+2*R7;k.push(m7(h,$,i))}else{var H=(_-y-w-C)/2+2*R7;k.push(m7(h,H,i)),k.push(o3),k.push(p7(u,m,a)),k.push(o3),k.push(m7(h,H,i))}k.push(o3),k.push(p7(l,m,a))}var Q=i.havingBaseStyle(tr.TEXT),j=Be.makeVList({positionType:"bottom",positionData:D,children:k},Q);return V7(Be.makeSpan(["delimsizing","mult"],[j],Q),tr.TEXT,i,s)},"makeStackedDelim"),g7=80,y7=.08,v7=o(function(e,r,n,i,a){var s=Ebe(e,i,n),l=new Kl(e,s),u=new ll([l],{width:"400em",height:kt(r),viewBox:"0 0 400000 "+n,preserveAspectRatio:"xMinYMin slice"});return Be.makeSvgSpan(["hide-tail"],[u],a)},"sqrtSvg"),b4e=o(function(e,r){var n=r.havingBaseSizing(),i=dG("\\surd",e*n.sizeMultiplier,fG,n),a=n.sizeMultiplier,s=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),l,u=0,h=0,f=0,d;return i.type==="small"?(f=1e3+1e3*s+g7,e<1?a=1:e<1.4&&(a=.7),u=(1+s+y7)/a,h=(1+s)/a,l=v7("sqrtMain",u,f,s,r),l.style.minWidth="0.853em",d=.833/a):i.type==="large"?(f=(1e3+g7)*$y[i.size],h=($y[i.size]+s)/a,u=($y[i.size]+s+y7)/a,l=v7("sqrtSize"+i.size,u,f,s,r),l.style.minWidth="1.02em",d=1/a):(u=e+s+y7,h=e+s,f=Math.floor(1e3*e+s)+g7,l=v7("sqrtTall",u,f,s,r),l.style.minWidth="0.742em",d=1.056),l.height=h,l.style.height=kt(u),{span:l,advanceWidth:d,ruleWidth:(r.fontMetrics().sqrtRuleThickness+s)*a}},"makeSqrtImage"),uG=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","\\surd"],w4e=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1"],hG=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],$y=[0,1.2,1.8,2.4,3],T4e=o(function(e,r,n,i,a){if(e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle"),Jt.contains(uG,e)||Jt.contains(hG,e))return lG(e,r,!1,n,i,a);if(Jt.contains(w4e,e))return cG(e,$y[r],!1,n,i,a);throw new gt("Illegal delimiter: '"+e+"'")},"makeSizedDelim"),k4e=[{type:"small",style:tr.SCRIPTSCRIPT},{type:"small",style:tr.SCRIPT},{type:"small",style:tr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],E4e=[{type:"small",style:tr.SCRIPTSCRIPT},{type:"small",style:tr.SCRIPT},{type:"small",style:tr.TEXT},{type:"stack"}],fG=[{type:"small",style:tr.SCRIPTSCRIPT},{type:"small",style:tr.SCRIPT},{type:"small",style:tr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],S4e=o(function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},"delimTypeToFont"),dG=o(function(e,r,n,i){for(var a=Math.min(2,3-i.style.size),s=a;s<n.length&&n[s].type!=="stack";s++){var l=Fy(e,S4e(n[s]),"math"),u=l.height+l.depth;if(n[s].type==="small"){var h=i.havingBaseStyle(n[s].style);u*=h.sizeMultiplier}if(u>r)return n[s]}return n[n.length-1]},"traverseSequence"),pG=o(function(e,r,n,i,a,s){e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle");var l;Jt.contains(hG,e)?l=k4e:Jt.contains(uG,e)?l=fG:l=E4e;var u=dG(e,r,l,i);return u.type==="small"?g4e(e,u.style,n,i,a,s):u.type==="large"?lG(e,u.size,n,i,a,s):cG(e,r,n,i,a,s)},"makeCustomSizedDelim"),C4e=o(function(e,r,n,i,a,s){var l=i.fontMetrics().axisHeight*i.sizeMultiplier,u=901,h=5/i.fontMetrics().ptPerEm,f=Math.max(r-l,n+l),d=Math.max(f/500*u,2*f-h);return pG(e,d,!0,i,a,s)},"makeLeftRightDelim"),ou={sqrtImage:b4e,sizedDelim:T4e,sizeToMaxHeight:$y,customSizedDelim:pG,leftRightDelim:C4e},xz={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},A4e=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27E8","\\rangle","\u27E9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];o(k3,"checkDelimiter");Nt({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:o((t,e)=>{var r=k3(e[0],t);return{type:"delimsizing",mode:t.parser.mode,size:xz[t.funcName].size,mclass:xz[t.funcName].mclass,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>t.delim==="."?Be.makeSpan([t.mclass]):ou.sizedDelim(t.delim,t.size,e,t.mode,[t.mclass]),"htmlBuilder"),mathmlBuilder:o(t=>{var e=[];t.delim!=="."&&e.push(Co(t.delim,t.mode));var r=new dt.MathNode("mo",e);t.mclass==="mopen"||t.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=kt(ou.sizeToMaxHeight[t.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r},"mathmlBuilder")});o(bz,"assertParsed");Nt({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=t.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new gt("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:t.parser.mode,delim:k3(e[0],t).text,color:r}},"handler")});Nt({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=k3(e[0],t),n=t.parser;++n.leftrightDepth;var i=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var a=xr(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:i,left:r.text,right:a.delim,rightColor:a.color}},"handler"),htmlBuilder:o((t,e)=>{bz(t);for(var r=Pi(t.body,e,!0,["mopen","mclose"]),n=0,i=0,a=!1,s=0;s<r.length;s++)r[s].isMiddle?a=!0:(n=Math.max(r[s].height,n),i=Math.max(r[s].depth,i));n*=e.sizeMultiplier,i*=e.sizeMultiplier;var l;if(t.left==="."?l=Hy(e,["mopen"]):l=ou.leftRightDelim(t.left,n,i,e,t.mode,["mopen"]),r.unshift(l),a)for(var u=1;u<r.length;u++){var h=r[u],f=h.isMiddle;f&&(r[u]=ou.leftRightDelim(f.delim,n,i,f.options,t.mode,[]))}var d;if(t.right===".")d=Hy(e,["mclose"]);else{var p=t.rightColor?e.withColor(t.rightColor):e;d=ou.leftRightDelim(t.right,n,i,p,t.mode,["mclose"])}return r.push(d),Be.makeSpan(["minner"],r,e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{bz(t);var r=ks(t.body,e);if(t.left!=="."){var n=new dt.MathNode("mo",[Co(t.left,t.mode)]);n.setAttribute("fence","true"),r.unshift(n)}if(t.right!=="."){var i=new dt.MathNode("mo",[Co(t.right,t.mode)]);i.setAttribute("fence","true"),t.rightColor&&i.setAttribute("mathcolor",t.rightColor),r.push(i)}return F7(r)},"mathmlBuilder")});Nt({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=k3(e[0],t);if(!t.parser.leftrightDepth)throw new gt("\\middle without preceding \\left",r);return{type:"middle",mode:t.parser.mode,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>{var r;if(t.delim===".")r=Hy(e,[]);else{r=ou.sizedDelim(t.delim,1,e,t.mode,[]);var n={delim:t.delim,options:e};r.isMiddle=n}return r},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=t.delim==="\\vert"||t.delim==="|"?Co("|","text"):Co(t.delim,t.mode),n=new dt.MathNode("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n},"mathmlBuilder")});U7=o((t,e)=>{var r=Be.wrapFragment(Fr(t.body,e),e),n=t.label.slice(1),i=e.sizeMultiplier,a,s=0,l=Jt.isCharacterBox(t.body);if(n==="sout")a=Be.makeSpan(["stretchy","sout"]),a.height=e.fontMetrics().defaultRuleThickness/i,s=-.5*e.fontMetrics().xHeight;else if(n==="phase"){var u=ti({number:.6,unit:"pt"},e),h=ti({number:.35,unit:"ex"},e),f=e.havingBaseSizing();i=i/f.sizeMultiplier;var d=r.height+r.depth+u+h;r.style.paddingLeft=kt(d/2+u);var p=Math.floor(1e3*d*i),m=Tbe(p),g=new ll([new Kl("phase",m)],{width:"400em",height:kt(p/1e3),viewBox:"0 0 400000 "+p,preserveAspectRatio:"xMinYMin slice"});a=Be.makeSvgSpan(["hide-tail"],[g],e),a.style.height=kt(d),s=r.depth+u+h}else{/cancel/.test(n)?l||r.classes.push("cancel-pad"):n==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var y=0,v=0,x=0;/box/.test(n)?(x=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),y=e.fontMetrics().fboxsep+(n==="colorbox"?0:x),v=y):n==="angl"?(x=Math.max(e.fontMetrics().defaultRuleThickness,e.minRuleThickness),y=4*x,v=Math.max(0,.25-r.depth)):(y=l?.2:0,v=y),a=cu.encloseSpan(r,n,y,v,e),/fbox|boxed|fcolorbox/.test(n)?(a.style.borderStyle="solid",a.style.borderWidth=kt(x)):n==="angl"&&x!==.049&&(a.style.borderTopWidth=kt(x),a.style.borderRightWidth=kt(x)),s=r.depth+v,t.backgroundColor&&(a.style.backgroundColor=t.backgroundColor,t.borderColor&&(a.style.borderColor=t.borderColor))}var b;if(t.backgroundColor)b=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:a,shift:s},{type:"elem",elem:r,shift:0}]},e);else{var w=/cancel|phase/.test(n)?["svg-align"]:[];b=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:a,shift:s,wrapperClasses:w}]},e)}return/cancel/.test(n)&&(b.height=r.height,b.depth=r.depth),/cancel/.test(n)&&!l?Be.makeSpan(["mord","cancel-lap"],[b],e):Be.makeSpan(["mord"],[b],e)},"htmlBuilder$7"),H7=o((t,e)=>{var r=0,n=new dt.MathNode(t.label.indexOf("colorbox")>-1?"mpadded":"menclose",[yn(t.body,e)]);switch(t.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),t.label==="\\fcolorbox"){var i=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);n.setAttribute("style","border: "+i+"em solid "+String(t.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return t.backgroundColor&&n.setAttribute("mathbackground",t.backgroundColor),n},"mathmlBuilder$6");Nt({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=xr(e[0],"color-token").color,s=e[1];return{type:"enclose",mode:n.mode,label:i,backgroundColor:a,body:s}},htmlBuilder:U7,mathmlBuilder:H7});Nt({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=xr(e[0],"color-token").color,s=xr(e[1],"color-token").color,l=e[2];return{type:"enclose",mode:n.mode,label:i,backgroundColor:s,borderColor:a,body:l}},htmlBuilder:U7,mathmlBuilder:H7});Nt({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\fbox",body:e[0]}}});Nt({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"enclose",mode:r.mode,label:n,body:i}},htmlBuilder:U7,mathmlBuilder:H7});Nt({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\angl",body:e[0]}}});mG={};o(Ql,"defineEnvironment");gG={};o(fe,"defineMacro");o(wz,"getHLines");E3=o(t=>{var e=t.parser.settings;if(!e.displayMode)throw new gt("{"+t.envName+"} can be used only in display mode.")},"validateAmsEnvironmentContext");o(W7,"getAutoTag");o(ph,"parseArray");o(q7,"dCellStyle");Zl=o(function(e,r){var n,i,a=e.body.length,s=e.hLinesBeforeRow,l=0,u=new Array(a),h=[],f=Math.max(r.fontMetrics().arrayRuleWidth,r.minRuleThickness),d=1/r.fontMetrics().ptPerEm,p=5*d;if(e.colSeparationType&&e.colSeparationType==="small"){var m=r.havingStyle(tr.SCRIPT).sizeMultiplier;p=.2778*(m/r.sizeMultiplier)}var g=e.colSeparationType==="CD"?ti({number:3,unit:"ex"},r):12*d,y=3*d,v=e.arraystretch*g,x=.7*v,b=.3*v,w=0;function C(ae){for(var Oe=0;Oe<ae.length;++Oe)Oe>0&&(w+=.25),h.push({pos:w,isDashed:ae[Oe]})}for(o(C,"setHLinePos"),C(s[0]),n=0;n<e.body.length;++n){var T=e.body[n],E=x,A=b;l<T.length&&(l=T.length);var S=new Array(T.length);for(i=0;i<T.length;++i){var _=Fr(T[i],r);A<_.depth&&(A=_.depth),E<_.height&&(E=_.height),S[i]=_}var I=e.rowGaps[n],D=0;I&&(D=ti(I,r),D>0&&(D+=b,A<D&&(A=D),D=0)),e.addJot&&(A+=y),S.height=E,S.depth=A,w+=E,S.pos=w,w+=A+D,u[n]=S,C(s[n+1])}var k=w/2+r.fontMetrics().axisHeight,L=e.cols||[],R=[],O,M,B=[];if(e.tags&&e.tags.some(ae=>ae))for(n=0;n<a;++n){var F=u[n],P=F.pos-k,z=e.tags[n],$=void 0;z===!0?$=Be.makeSpan(["eqn-num"],[],r):z===!1?$=Be.makeSpan([],[],r):$=Be.makeSpan([],Pi(z,r,!0),r),$.depth=F.depth,$.height=F.height,B.push({type:"elem",elem:$,shift:P})}for(i=0,M=0;i<l||M<L.length;++i,++M){for(var H=L[M]||{},Q=!0;H.type==="separator";){if(Q||(O=Be.makeSpan(["arraycolsep"],[]),O.style.width=kt(r.fontMetrics().doubleRuleSep),R.push(O)),H.separator==="|"||H.separator===":"){var j=H.separator==="|"?"solid":"dashed",ie=Be.makeSpan(["vertical-separator"],[],r);ie.style.height=kt(w),ie.style.borderRightWidth=kt(f),ie.style.borderRightStyle=j,ie.style.margin="0 "+kt(-f/2);var ne=w-k;ne&&(ie.style.verticalAlign=kt(-ne)),R.push(ie)}else throw new gt("Invalid separator type: "+H.separator);M++,H=L[M]||{},Q=!1}if(!(i>=l)){var le=void 0;(i>0||e.hskipBeforeAndAfter)&&(le=Jt.deflt(H.pregap,p),le!==0&&(O=Be.makeSpan(["arraycolsep"],[]),O.style.width=kt(le),R.push(O)));var he=[];for(n=0;n<a;++n){var K=u[n],X=K[i];if(X){var te=K.pos-k;X.depth=K.depth,X.height=K.height,he.push({type:"elem",elem:X,shift:te})}}he=Be.makeVList({positionType:"individualShift",children:he},r),he=Be.makeSpan(["col-align-"+(H.align||"c")],[he]),R.push(he),(i<l-1||e.hskipBeforeAndAfter)&&(le=Jt.deflt(H.postgap,p),le!==0&&(O=Be.makeSpan(["arraycolsep"],[]),O.style.width=kt(le),R.push(O)))}}if(u=Be.makeSpan(["mtable"],R),h.length>0){for(var J=Be.makeLineSpan("hline",r,f),se=Be.makeLineSpan("hdashline",r,f),ue=[{type:"elem",elem:u,shift:0}];h.length>0;){var Z=h.pop(),Se=Z.pos-k;Z.isDashed?ue.push({type:"elem",elem:se,shift:Se}):ue.push({type:"elem",elem:J,shift:Se})}u=Be.makeVList({positionType:"individualShift",children:ue},r)}if(B.length===0)return Be.makeSpan(["mord"],[u],r);var ce=Be.makeVList({positionType:"individualShift",children:B},r);return ce=Be.makeSpan(["tag"],[ce],r),Be.makeFragment([u,ce])},"htmlBuilder"),_4e={c:"center ",l:"left ",r:"right "},Jl=o(function(e,r){for(var n=[],i=new dt.MathNode("mtd",[],["mtr-glue"]),a=new dt.MathNode("mtd",[],["mml-eqn-num"]),s=0;s<e.body.length;s++){for(var l=e.body[s],u=[],h=0;h<l.length;h++)u.push(new dt.MathNode("mtd",[yn(l[h],r)]));e.tags&&e.tags[s]&&(u.unshift(i),u.push(i),e.leqno?u.unshift(a):u.push(a)),n.push(new dt.MathNode("mtr",u))}var f=new dt.MathNode("mtable",n),d=e.arraystretch===.5?.1:.16+e.arraystretch-1+(e.addJot?.09:0);f.setAttribute("rowspacing",kt(d));var p="",m="";if(e.cols&&e.cols.length>0){var g=e.cols,y="",v=!1,x=0,b=g.length;g[0].type==="separator"&&(p+="top ",x=1),g[g.length-1].type==="separator"&&(p+="bottom ",b-=1);for(var w=x;w<b;w++)g[w].type==="align"?(m+=_4e[g[w].align],v&&(y+="none "),v=!0):g[w].type==="separator"&&v&&(y+=g[w].separator==="|"?"solid ":"dashed ",v=!1);f.setAttribute("columnalign",m.trim()),/[sd]/.test(y)&&f.setAttribute("columnlines",y.trim())}if(e.colSeparationType==="align"){for(var C=e.cols||[],T="",E=1;E<C.length;E++)T+=E%2?"0em ":"1em ";f.setAttribute("columnspacing",T.trim())}else e.colSeparationType==="alignat"||e.colSeparationType==="gather"?f.setAttribute("columnspacing","0em"):e.colSeparationType==="small"?f.setAttribute("columnspacing","0.2778em"):e.colSeparationType==="CD"?f.setAttribute("columnspacing","0.5em"):f.setAttribute("columnspacing","1em");var A="",S=e.hLinesBeforeRow;p+=S[0].length>0?"left ":"",p+=S[S.length-1].length>0?"right ":"";for(var _=1;_<S.length-1;_++)A+=S[_].length===0?"none ":S[_][0]?"dashed ":"solid ";return/[sd]/.test(A)&&f.setAttribute("rowlines",A.trim()),p!==""&&(f=new dt.MathNode("menclose",[f]),f.setAttribute("notation",p.trim())),e.arraystretch&&e.arraystretch<1&&(f=new dt.MathNode("mstyle",[f]),f.setAttribute("scriptlevel","1")),f},"mathmlBuilder"),yG=o(function(e,r){e.envName.indexOf("ed")===-1&&E3(e);var n=[],i=e.envName.indexOf("at")>-1?"alignat":"align",a=e.envName==="split",s=ph(e.parser,{cols:n,addJot:!0,autoTag:a?void 0:W7(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:a?2:void 0,leqno:e.parser.settings.leqno},"display"),l,u=0,h={type:"ordgroup",mode:e.mode,body:[]};if(r[0]&&r[0].type==="ordgroup"){for(var f="",d=0;d<r[0].body.length;d++){var p=xr(r[0].body[d],"textord");f+=p.text}l=Number(f),u=l*2}var m=!u;s.body.forEach(function(x){for(var b=1;b<x.length;b+=2){var w=xr(x[b],"styling"),C=xr(w.body[0],"ordgroup");C.body.unshift(h)}if(m)u<x.length&&(u=x.length);else{var T=x.length/2;if(l<T)throw new gt("Too many math in a row: "+("expected "+l+", but got "+T),x[0])}});for(var g=0;g<u;++g){var y="r",v=0;g%2===1?y="l":g>0&&m&&(v=1),n[g]={type:"align",align:y,pregap:v,postgap:0}}return s.colSeparationType=m?"align":"alignat",s},"alignedHandler");Ql({type:"array",names:["array","darray"],props:{numArgs:1},handler(t,e){var r=w3(e[0]),n=r?[e[0]]:xr(e[0],"ordgroup").body,i=n.map(function(s){var l=z7(s),u=l.text;if("lcr".indexOf(u)!==-1)return{type:"align",align:u};if(u==="|")return{type:"separator",separator:"|"};if(u===":")return{type:"separator",separator:":"};throw new gt("Unknown column alignment: "+u,s)}),a={cols:i,hskipBeforeAndAfter:!0,maxNumCols:i.length};return ph(t.parser,a,q7(t.envName))},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(t){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[t.envName.replace("*","")],r="c",n={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(t.envName.charAt(t.envName.length-1)==="*"){var i=t.parser;if(i.consumeSpaces(),i.fetch().text==="["){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,"lcr".indexOf(r)===-1)throw new gt("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),n.cols=[{type:"align",align:r}]}}var a=ph(t.parser,n,q7(t.envName)),s=Math.max(0,...a.body.map(l=>l.length));return a.cols=new Array(s).fill({type:"align",align:r}),e?{type:"leftright",mode:t.mode,body:[a],left:e[0],right:e[1],rightColor:void 0}:a},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(t){var e={arraystretch:.5},r=ph(t.parser,e,"script");return r.colSeparationType="small",r},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["subarray"],props:{numArgs:1},handler(t,e){var r=w3(e[0]),n=r?[e[0]]:xr(e[0],"ordgroup").body,i=n.map(function(s){var l=z7(s),u=l.text;if("lc".indexOf(u)!==-1)return{type:"align",align:u};throw new gt("Unknown column alignment: "+u,s)});if(i.length>1)throw new gt("{subarray} can contain only one column");var a={cols:i,hskipBeforeAndAfter:!1,arraystretch:.5};if(a=ph(t.parser,a,"script"),a.body.length>0&&a.body[0].length>1)throw new gt("{subarray} can contain only one column");return a},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(t){var e={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=ph(t.parser,e,q7(t.envName));return{type:"leftright",mode:t.mode,body:[r],left:t.envName.indexOf("r")>-1?".":"\\{",right:t.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:yG,htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(t){Jt.contains(["gather","gather*"],t.envName)&&E3(t);var e={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:W7(t.envName),emptySingleRow:!0,leqno:t.parser.settings.leqno};return ph(t.parser,e,"display")},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:yG,htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(t){E3(t);var e={autoTag:W7(t.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:t.parser.settings.leqno};return ph(t.parser,e,"display")},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["CD"],props:{numArgs:0},handler(t){return E3(t),p4e(t.parser)},htmlBuilder:Zl,mathmlBuilder:Jl});fe("\\nonumber","\\gdef\\@eqnsw{0}");fe("\\notag","\\nonumber");Nt({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(t,e){throw new gt(t.funcName+" valid only within array environment")}});Tz=mG;Nt({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];if(i.type!=="ordgroup")throw new gt("Invalid environment name",i);for(var a="",s=0;s<i.body.length;++s)a+=xr(i.body[s],"textord").text;if(n==="\\begin"){if(!Tz.hasOwnProperty(a))throw new gt("No such environment: "+a,i);var l=Tz[a],{args:u,optArgs:h}=r.parseArguments("\\begin{"+a+"}",l),f={mode:r.mode,envName:a,parser:r},d=l.handler(f,u,h);r.expect("\\end",!1);var p=r.nextToken,m=xr(r.parseFunction(),"environment");if(m.name!==a)throw new gt("Mismatch: \\begin{"+a+"} matched by \\end{"+m.name+"}",p);return d}return{type:"environment",mode:r.mode,name:a,nameGroup:i}}});vG=o((t,e)=>{var r=t.font,n=e.withFont(r);return Fr(t.body,n)},"htmlBuilder$5"),xG=o((t,e)=>{var r=t.font,n=e.withFont(r);return yn(t.body,n)},"mathmlBuilder$4"),kz={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};Nt({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=g3(e[0]),a=n;return a in kz&&(a=kz[a]),{type:"font",mode:r.mode,font:a.slice(1),body:i}},"handler"),htmlBuilder:vG,mathmlBuilder:xG});Nt({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r}=t,n=e[0],i=Jt.isCharacterBox(n);return{type:"mclass",mode:r.mode,mclass:T3(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:i}},"handler")});Nt({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n,breakOnTokenText:i}=t,{mode:a}=r,s=r.parseExpression(!0,i),l="math"+n.slice(1);return{type:"font",mode:a,font:l,body:{type:"ordgroup",mode:r.mode,body:s}}},"handler"),htmlBuilder:vG,mathmlBuilder:xG});bG=o((t,e)=>{var r=e;return t==="display"?r=r.id>=tr.SCRIPT.id?r.text():tr.DISPLAY:t==="text"&&r.size===tr.DISPLAY.size?r=tr.TEXT:t==="script"?r=tr.SCRIPT:t==="scriptscript"&&(r=tr.SCRIPTSCRIPT),r},"adjustStyle"),Y7=o((t,e)=>{var r=bG(t.size,e.style),n=r.fracNum(),i=r.fracDen(),a;a=e.havingStyle(n);var s=Fr(t.numer,a,e);if(t.continued){var l=8.5/e.fontMetrics().ptPerEm,u=3.5/e.fontMetrics().ptPerEm;s.height=s.height<l?l:s.height,s.depth=s.depth<u?u:s.depth}a=e.havingStyle(i);var h=Fr(t.denom,a,e),f,d,p;t.hasBarLine?(t.barSize?(d=ti(t.barSize,e),f=Be.makeLineSpan("frac-line",e,d)):f=Be.makeLineSpan("frac-line",e),d=f.height,p=f.height):(f=null,d=0,p=e.fontMetrics().defaultRuleThickness);var m,g,y;r.size===tr.DISPLAY.size||t.size==="display"?(m=e.fontMetrics().num1,d>0?g=3*p:g=7*p,y=e.fontMetrics().denom1):(d>0?(m=e.fontMetrics().num2,g=p):(m=e.fontMetrics().num3,g=3*p),y=e.fontMetrics().denom2);var v;if(f){var b=e.fontMetrics().axisHeight;m-s.depth-(b+.5*d)<g&&(m+=g-(m-s.depth-(b+.5*d))),b-.5*d-(h.height-y)<g&&(y+=g-(b-.5*d-(h.height-y)));var w=-(b-.5*d);v=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:h,shift:y},{type:"elem",elem:f,shift:w},{type:"elem",elem:s,shift:-m}]},e)}else{var x=m-s.depth-(h.height-y);x<g&&(m+=.5*(g-x),y+=.5*(g-x)),v=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:h,shift:y},{type:"elem",elem:s,shift:-m}]},e)}a=e.havingStyle(r),v.height*=a.sizeMultiplier/e.sizeMultiplier,v.depth*=a.sizeMultiplier/e.sizeMultiplier;var C;r.size===tr.DISPLAY.size?C=e.fontMetrics().delim1:r.size===tr.SCRIPTSCRIPT.size?C=e.havingStyle(tr.SCRIPT).fontMetrics().delim2:C=e.fontMetrics().delim2;var T,E;return t.leftDelim==null?T=Hy(e,["mopen"]):T=ou.customSizedDelim(t.leftDelim,C,!0,e.havingStyle(r),t.mode,["mopen"]),t.continued?E=Be.makeSpan([]):t.rightDelim==null?E=Hy(e,["mclose"]):E=ou.customSizedDelim(t.rightDelim,C,!0,e.havingStyle(r),t.mode,["mclose"]),Be.makeSpan(["mord"].concat(a.sizingClasses(e)),[T,Be.makeSpan(["mfrac"],[v]),E],e)},"htmlBuilder$4"),X7=o((t,e)=>{var r=new dt.MathNode("mfrac",[yn(t.numer,e),yn(t.denom,e)]);if(!t.hasBarLine)r.setAttribute("linethickness","0px");else if(t.barSize){var n=ti(t.barSize,e);r.setAttribute("linethickness",kt(n))}var i=bG(t.size,e.style);if(i.size!==e.style.size){r=new dt.MathNode("mstyle",[r]);var a=i.size===tr.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",a),r.setAttribute("scriptlevel","0")}if(t.leftDelim!=null||t.rightDelim!=null){var s=[];if(t.leftDelim!=null){var l=new dt.MathNode("mo",[new dt.TextNode(t.leftDelim.replace("\\",""))]);l.setAttribute("fence","true"),s.push(l)}if(s.push(r),t.rightDelim!=null){var u=new dt.MathNode("mo",[new dt.TextNode(t.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),s.push(u)}return F7(s)}return r},"mathmlBuilder$3");Nt({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1],s,l=null,u=null,h="auto";switch(n){case"\\dfrac":case"\\frac":case"\\tfrac":s=!0;break;case"\\\\atopfrac":s=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":s=!1,l="(",u=")";break;case"\\\\bracefrac":s=!1,l="\\{",u="\\}";break;case"\\\\brackfrac":s=!1,l="[",u="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text";break}return{type:"genfrac",mode:r.mode,continued:!1,numer:i,denom:a,hasBarLine:s,leftDelim:l,rightDelim:u,size:h,barSize:null}},"handler"),htmlBuilder:Y7,mathmlBuilder:X7});Nt({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:i,denom:a,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}},"handler")});Nt({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(t){var{parser:e,funcName:r,token:n}=t,i;switch(r){case"\\over":i="\\frac";break;case"\\choose":i="\\binom";break;case"\\atop":i="\\\\atopfrac";break;case"\\brace":i="\\\\bracefrac";break;case"\\brack":i="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:i,token:n}}});Ez=["display","text","script","scriptscript"],Sz=o(function(e){var r=null;return e.length>0&&(r=e,r=r==="."?null:r),r},"delimFromValue");Nt({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(t,e){var{parser:r}=t,n=e[4],i=e[5],a=g3(e[0]),s=a.type==="atom"&&a.family==="open"?Sz(a.text):null,l=g3(e[1]),u=l.type==="atom"&&l.family==="close"?Sz(l.text):null,h=xr(e[2],"size"),f,d=null;h.isBlank?f=!0:(d=h.value,f=d.number>0);var p="auto",m=e[3];if(m.type==="ordgroup"){if(m.body.length>0){var g=xr(m.body[0],"textord");p=Ez[Number(g.text)]}}else m=xr(m,"textord"),p=Ez[Number(m.text)];return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:f,barSize:d,leftDelim:s,rightDelim:u,size:p}},htmlBuilder:Y7,mathmlBuilder:X7});Nt({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(t,e){var{parser:r,funcName:n,token:i}=t;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:xr(e[0],"size").value,token:i}}});Nt({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=obe(xr(e[1],"infix").size),s=e[2],l=a.number>0;return{type:"genfrac",mode:r.mode,numer:i,denom:s,continued:!1,hasBarLine:l,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},"handler"),htmlBuilder:Y7,mathmlBuilder:X7});wG=o((t,e)=>{var r=e.style,n,i;t.type==="supsub"?(n=t.sup?Fr(t.sup,e.havingStyle(r.sup()),e):Fr(t.sub,e.havingStyle(r.sub()),e),i=xr(t.base,"horizBrace")):i=xr(t,"horizBrace");var a=Fr(i.base,e.havingBaseStyle(tr.DISPLAY)),s=cu.svgSpan(i,e),l;if(i.isOver?(l=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:.1},{type:"elem",elem:s}]},e),l.children[0].children[0].children[1].classes.push("svg-align")):(l=Be.makeVList({positionType:"bottom",positionData:a.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:a}]},e),l.children[0].children[0].children[0].classes.push("svg-align")),n){var u=Be.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e);i.isOver?l=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:u},{type:"kern",size:.2},{type:"elem",elem:n}]},e):l=Be.makeVList({positionType:"bottom",positionData:u.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:u}]},e)}return Be.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e)},"htmlBuilder$3"),D4e=o((t,e)=>{var r=cu.mathMLnode(t.label);return new dt.MathNode(t.isOver?"mover":"munder",[yn(t.base,e),r])},"mathmlBuilder$2");Nt({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:e[0]}},htmlBuilder:wG,mathmlBuilder:D4e});Nt({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[1],i=xr(e[0],"url").url;return r.settings.isTrusted({command:"\\href",url:i})?{type:"href",mode:r.mode,href:i,body:di(n)}:r.formatUnsupportedCmd("\\href")},"handler"),htmlBuilder:o((t,e)=>{var r=Pi(t.body,e,!1);return Be.makeAnchor(t.href,[],r,e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=dh(t.body,e);return r instanceof ws||(r=new ws("mrow",[r])),r.setAttribute("href",t.href),r},"mathmlBuilder")});Nt({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=xr(e[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var i=[],a=0;a<n.length;a++){var s=n[a];s==="~"&&(s="\\textasciitilde"),i.push({type:"textord",mode:"text",text:s})}var l={type:"text",mode:r.mode,font:"\\texttt",body:i};return{type:"href",mode:r.mode,href:n,body:di(l)}},"handler")});Nt({type:"hbox",names:["\\hbox"],props:{numArgs:1,argTypes:["text"],allowedInText:!0,primitive:!0},handler(t,e){var{parser:r}=t;return{type:"hbox",mode:r.mode,body:di(e[0])}},htmlBuilder(t,e){var r=Pi(t.body,e,!1);return Be.makeFragment(r)},mathmlBuilder(t,e){return new dt.MathNode("mrow",ks(t.body,e))}});Nt({type:"html",names:["\\htmlClass","\\htmlId","\\htmlStyle","\\htmlData"],props:{numArgs:2,argTypes:["raw","original"],allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n,token:i}=t,a=xr(e[0],"raw").string,s=e[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var l,u={};switch(n){case"\\htmlClass":u.class=a,l={command:"\\htmlClass",class:a};break;case"\\htmlId":u.id=a,l={command:"\\htmlId",id:a};break;case"\\htmlStyle":u.style=a,l={command:"\\htmlStyle",style:a};break;case"\\htmlData":{for(var h=a.split(","),f=0;f<h.length;f++){var d=h[f].split("=");if(d.length!==2)throw new gt("Error parsing key-value for \\htmlData");u["data-"+d[0].trim()]=d[1].trim()}l={command:"\\htmlData",attributes:u};break}default:throw new Error("Unrecognized html command")}return r.settings.isTrusted(l)?{type:"html",mode:r.mode,attributes:u,body:di(s)}:r.formatUnsupportedCmd(n)},"handler"),htmlBuilder:o((t,e)=>{var r=Pi(t.body,e,!1),n=["enclosing"];t.attributes.class&&n.push(...t.attributes.class.trim().split(/\s+/));var i=Be.makeSpan(n,r,e);for(var a in t.attributes)a!=="class"&&t.attributes.hasOwnProperty(a)&&i.setAttribute(a,t.attributes[a]);return i},"htmlBuilder"),mathmlBuilder:o((t,e)=>dh(t.body,e),"mathmlBuilder")});Nt({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"htmlmathml",mode:r.mode,html:di(e[0]),mathml:di(e[1])}},"handler"),htmlBuilder:o((t,e)=>{var r=Pi(t.html,e,!1);return Be.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>dh(t.mathml,e),"mathmlBuilder")});x7=o(function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!r)throw new gt("Invalid size: '"+e+"' in \\includegraphics");var n={number:+(r[1]+r[2]),unit:r[3]};if(!zz(n))throw new gt("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n},"sizeData");Nt({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:o((t,e,r)=>{var{parser:n}=t,i={number:0,unit:"em"},a={number:.9,unit:"em"},s={number:0,unit:"em"},l="";if(r[0])for(var u=xr(r[0],"raw").string,h=u.split(","),f=0;f<h.length;f++){var d=h[f].split("=");if(d.length===2){var p=d[1].trim();switch(d[0].trim()){case"alt":l=p;break;case"width":i=x7(p);break;case"height":a=x7(p);break;case"totalheight":s=x7(p);break;default:throw new gt("Invalid key: '"+d[0]+"' in \\includegraphics.")}}}var m=xr(e[0],"url").url;return l===""&&(l=m,l=l.replace(/^.*[\\/]/,""),l=l.substring(0,l.lastIndexOf("."))),n.settings.isTrusted({command:"\\includegraphics",url:m})?{type:"includegraphics",mode:n.mode,alt:l,width:i,height:a,totalheight:s,src:m}:n.formatUnsupportedCmd("\\includegraphics")},"handler"),htmlBuilder:o((t,e)=>{var r=ti(t.height,e),n=0;t.totalheight.number>0&&(n=ti(t.totalheight,e)-r);var i=0;t.width.number>0&&(i=ti(t.width,e));var a={height:kt(r+n)};i>0&&(a.width=kt(i)),n>0&&(a.verticalAlign=kt(-n));var s=new S7(t.src,t.alt,a);return s.height=r,s.depth=n,s},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new dt.MathNode("mglyph",[]);r.setAttribute("alt",t.alt);var n=ti(t.height,e),i=0;if(t.totalheight.number>0&&(i=ti(t.totalheight,e)-n,r.setAttribute("valign",kt(-i))),r.setAttribute("height",kt(n+i)),t.width.number>0){var a=ti(t.width,e);r.setAttribute("width",kt(a))}return r.setAttribute("src",t.src),r},"mathmlBuilder")});Nt({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=xr(e[0],"size");if(r.settings.strict){var a=n[1]==="m",s=i.value.unit==="mu";a?(s||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, "+("not "+i.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):s&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:i.value}},htmlBuilder(t,e){return Be.makeGlue(t.dimension,e)},mathmlBuilder(t,e){var r=ti(t.dimension,e);return new dt.SpaceNode(r)}});Nt({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:i}},"handler"),htmlBuilder:o((t,e)=>{var r;t.alignment==="clap"?(r=Be.makeSpan([],[Fr(t.body,e)]),r=Be.makeSpan(["inner"],[r],e)):r=Be.makeSpan(["inner"],[Fr(t.body,e)]);var n=Be.makeSpan(["fix"],[]),i=Be.makeSpan([t.alignment],[r,n],e),a=Be.makeSpan(["strut"]);return a.style.height=kt(i.height+i.depth),i.depth&&(a.style.verticalAlign=kt(-i.depth)),i.children.unshift(a),i=Be.makeSpan(["thinbox"],[i],e),Be.makeSpan(["mord","vbox"],[i],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new dt.MathNode("mpadded",[yn(t.body,e)]);if(t.alignment!=="rlap"){var n=t.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r},"mathmlBuilder")});Nt({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){var{funcName:r,parser:n}=t,i=n.mode;n.switchMode("math");var a=r==="\\("?"\\)":"$",s=n.parseExpression(!1,a);return n.expect(a),n.switchMode(i),{type:"styling",mode:n.mode,style:"text",body:s}}});Nt({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){throw new gt("Mismatched "+t.funcName)}});Cz=o((t,e)=>{switch(e.style.size){case tr.DISPLAY.size:return t.display;case tr.TEXT.size:return t.text;case tr.SCRIPT.size:return t.script;case tr.SCRIPTSCRIPT.size:return t.scriptscript;default:return t.text}},"chooseMathStyle");Nt({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"mathchoice",mode:r.mode,display:di(e[0]),text:di(e[1]),script:di(e[2]),scriptscript:di(e[3])}},"handler"),htmlBuilder:o((t,e)=>{var r=Cz(t,e),n=Pi(r,e,!1);return Be.makeFragment(n)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=Cz(t,e);return dh(r,e)},"mathmlBuilder")});TG=o((t,e,r,n,i,a,s)=>{t=Be.makeSpan([],[t]);var l=r&&Jt.isCharacterBox(r),u,h;if(e){var f=Fr(e,n.havingStyle(i.sup()),n);h={elem:f,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-f.depth)}}if(r){var d=Fr(r,n.havingStyle(i.sub()),n);u={elem:d,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-d.height)}}var p;if(h&&u){var m=n.fontMetrics().bigOpSpacing5+u.elem.height+u.elem.depth+u.kern+t.depth+s;p=Be.makeVList({positionType:"bottom",positionData:m,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:kt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:kt(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(u){var g=t.height-s;p=Be.makeVList({positionType:"top",positionData:g,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:kt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t}]},n)}else if(h){var y=t.depth+s;p=Be.makeVList({positionType:"bottom",positionData:y,children:[{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:kt(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else return t;var v=[p];if(u&&a!==0&&!l){var x=Be.makeSpan(["mspace"],[],n);x.style.marginRight=kt(a),v.unshift(x)}return Be.makeSpan(["mop","op-limits"],v,n)},"assembleSupSub"),kG=["\\smallint"],m0=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=xr(t.base,"op"),i=!0):a=xr(t,"op");var s=e.style,l=!1;s.size===tr.DISPLAY.size&&a.symbol&&!Jt.contains(kG,a.name)&&(l=!0);var u;if(a.symbol){var h=l?"Size2-Regular":"Size1-Regular",f="";if((a.name==="\\oiint"||a.name==="\\oiiint")&&(f=a.name.slice(1),a.name=f==="oiint"?"\\iint":"\\iiint"),u=Be.makeSymbol(a.name,h,"math",e,["mop","op-symbol",l?"large-op":"small-op"]),f.length>0){var d=u.italic,p=Be.staticSvg(f+"Size"+(l?"2":"1"),e);u=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:u,shift:0},{type:"elem",elem:p,shift:l?.08:0}]},e),a.name="\\"+f,u.classes.unshift("mop"),u.italic=d}}else if(a.body){var m=Pi(a.body,e,!0);m.length===1&&m[0]instanceof Ts?(u=m[0],u.classes[0]="mop"):u=Be.makeSpan(["mop"],m,e)}else{for(var g=[],y=1;y<a.name.length;y++)g.push(Be.mathsym(a.name[y],a.mode,e));u=Be.makeSpan(["mop"],g,e)}var v=0,x=0;return(u instanceof Ts||a.name==="\\oiint"||a.name==="\\oiiint")&&!a.suppressBaseShift&&(v=(u.height-u.depth)/2-e.fontMetrics().axisHeight,x=u.italic),i?TG(u,r,n,e,s,x,v):(v&&(u.style.position="relative",u.style.top=kt(v)),u)},"htmlBuilder$2"),Wy=o((t,e)=>{var r;if(t.symbol)r=new ws("mo",[Co(t.name,t.mode)]),Jt.contains(kG,t.name)&&r.setAttribute("largeop","false");else if(t.body)r=new ws("mo",ks(t.body,e));else{r=new ws("mi",[new Jf(t.name.slice(1))]);var n=new ws("mo",[Co("\u2061","text")]);t.parentIsSupSub?r=new ws("mrow",[r,n]):r=Qz([r,n])}return r},"mathmlBuilder$1"),L4e={"\u220F":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22C0":"\\bigwedge","\u22C1":"\\bigvee","\u22C2":"\\bigcap","\u22C3":"\\bigcup","\u2A00":"\\bigodot","\u2A01":"\\bigoplus","\u2A02":"\\bigotimes","\u2A04":"\\biguplus","\u2A06":"\\bigsqcup"};Nt({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220F","\u2210","\u2211","\u22C0","\u22C1","\u22C2","\u22C3","\u2A00","\u2A01","\u2A02","\u2A04","\u2A06"],props:{numArgs:0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=n;return i.length===1&&(i=L4e[i]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:i}},"handler"),htmlBuilder:m0,mathmlBuilder:Wy});Nt({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:di(n)}},"handler"),htmlBuilder:m0,mathmlBuilder:Wy});R4e={"\u222B":"\\int","\u222C":"\\iint","\u222D":"\\iiint","\u222E":"\\oint","\u222F":"\\oiint","\u2230":"\\oiiint"};Nt({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:m0,mathmlBuilder:Wy});Nt({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:m0,mathmlBuilder:Wy});Nt({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222B","\u222C","\u222D","\u222E","\u222F","\u2230"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t,n=r;return n.length===1&&(n=R4e[n]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:m0,mathmlBuilder:Wy});EG=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=xr(t.base,"operatorname"),i=!0):a=xr(t,"operatorname");var s;if(a.body.length>0){for(var l=a.body.map(d=>{var p=d.text;return typeof p=="string"?{type:"textord",mode:d.mode,text:p}:d}),u=Pi(l,e.withFont("mathrm"),!0),h=0;h<u.length;h++){var f=u[h];f instanceof Ts&&(f.text=f.text.replace(/\u2212/,"-").replace(/\u2217/,"*"))}s=Be.makeSpan(["mop"],u,e)}else s=Be.makeSpan(["mop"],[],e);return i?TG(s,r,n,e,e.style,0,0):s},"htmlBuilder$1"),N4e=o((t,e)=>{for(var r=ks(t.body,e.withFont("mathrm")),n=!0,i=0;i<r.length;i++){var a=r[i];if(!(a instanceof dt.SpaceNode))if(a instanceof dt.MathNode)switch(a.type){case"mi":case"mn":case"ms":case"mspace":case"mtext":break;case"mo":{var s=a.children[0];a.children.length===1&&s instanceof dt.TextNode?s.text=s.text.replace(/\u2212/,"-").replace(/\u2217/,"*"):n=!1;break}default:n=!1}else n=!1}if(n){var l=r.map(f=>f.toText()).join("");r=[new dt.TextNode(l)]}var u=new dt.MathNode("mi",r);u.setAttribute("mathvariant","normal");var h=new dt.MathNode("mo",[Co("\u2061","text")]);return t.parentIsSupSub?new dt.MathNode("mrow",[u,h]):dt.newDocumentFragment([u,h])},"mathmlBuilder");Nt({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"operatorname",mode:r.mode,body:di(i),alwaysHandleSupSub:n==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},"handler"),htmlBuilder:EG,mathmlBuilder:N4e});fe("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");rd({type:"ordgroup",htmlBuilder(t,e){return t.semisimple?Be.makeFragment(Pi(t.body,e,!1)):Be.makeSpan(["mord"],Pi(t.body,e,!0),e)},mathmlBuilder(t,e){return dh(t.body,e,!0)}});Nt({type:"overline",names:["\\overline"],props:{numArgs:1},handler(t,e){var{parser:r}=t,n=e[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(t,e){var r=Fr(t.body,e.havingCrampedStyle()),n=Be.makeLineSpan("overline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*i},{type:"elem",elem:n},{type:"kern",size:i}]},e);return Be.makeSpan(["mord","overline"],[a],e)},mathmlBuilder(t,e){var r=new dt.MathNode("mo",[new dt.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new dt.MathNode("mover",[yn(t.body,e),r]);return n.setAttribute("accent","true"),n}});Nt({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"phantom",mode:r.mode,body:di(n)}},"handler"),htmlBuilder:o((t,e)=>{var r=Pi(t.body,e.withPhantom(),!1);return Be.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ks(t.body,e);return new dt.MathNode("mphantom",r)},"mathmlBuilder")});Nt({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"hphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Be.makeSpan([],[Fr(t.body,e.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var n=0;n<r.children.length;n++)r.children[n].height=0,r.children[n].depth=0;return r=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r}]},e),Be.makeSpan(["mord"],[r],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ks(di(t.body),e),n=new dt.MathNode("mphantom",r),i=new dt.MathNode("mpadded",[n]);return i.setAttribute("height","0px"),i.setAttribute("depth","0px"),i},"mathmlBuilder")});Nt({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"vphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Be.makeSpan(["inner"],[Fr(t.body,e.withPhantom())]),n=Be.makeSpan(["fix"],[]);return Be.makeSpan(["mord","rlap"],[r,n],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ks(di(t.body),e),n=new dt.MathNode("mphantom",r),i=new dt.MathNode("mpadded",[n]);return i.setAttribute("width","0px"),i},"mathmlBuilder")});Nt({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t,n=xr(e[0],"size").value,i=e[1];return{type:"raisebox",mode:r.mode,dy:n,body:i}},htmlBuilder(t,e){var r=Fr(t.body,e),n=ti(t.dy,e);return Be.makeVList({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){var r=new dt.MathNode("mpadded",[yn(t.body,e)]),n=t.dy.number+t.dy.unit;return r.setAttribute("voffset",n),r}});Nt({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e}=t;return{type:"internal",mode:e.mode}}});Nt({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},handler(t,e,r){var{parser:n}=t,i=r[0],a=xr(e[0],"size"),s=xr(e[1],"size");return{type:"rule",mode:n.mode,shift:i&&xr(i,"size").value,width:a.value,height:s.value}},htmlBuilder(t,e){var r=Be.makeSpan(["mord","rule"],[],e),n=ti(t.width,e),i=ti(t.height,e),a=t.shift?ti(t.shift,e):0;return r.style.borderRightWidth=kt(n),r.style.borderTopWidth=kt(i),r.style.bottom=kt(a),r.width=n,r.height=i+a,r.depth=-a,r.maxFontSize=i*1.125*e.sizeMultiplier,r},mathmlBuilder(t,e){var r=ti(t.width,e),n=ti(t.height,e),i=t.shift?ti(t.shift,e):0,a=e.color&&e.getColor()||"black",s=new dt.MathNode("mspace");s.setAttribute("mathbackground",a),s.setAttribute("width",kt(r)),s.setAttribute("height",kt(n));var l=new dt.MathNode("mpadded",[s]);return i>=0?l.setAttribute("height",kt(i)):(l.setAttribute("height",kt(i)),l.setAttribute("depth",kt(-i))),l.setAttribute("voffset",kt(i)),l}});o(SG,"sizingGroup");Az=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],M4e=o((t,e)=>{var r=e.havingSize(t.size);return SG(t.body,r,e)},"htmlBuilder");Nt({type:"sizing",names:Az,props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!1,r);return{type:"sizing",mode:i.mode,size:Az.indexOf(n)+1,body:a}},"handler"),htmlBuilder:M4e,mathmlBuilder:o((t,e)=>{var r=e.havingSize(t.size),n=ks(t.body,r),i=new dt.MathNode("mstyle",n);return i.setAttribute("mathsize",kt(r.sizeMultiplier)),i},"mathmlBuilder")});Nt({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:o((t,e,r)=>{var{parser:n}=t,i=!1,a=!1,s=r[0]&&xr(r[0],"ordgroup");if(s)for(var l="",u=0;u<s.body.length;++u){var h=s.body[u];if(l=h.text,l==="t")i=!0;else if(l==="b")a=!0;else{i=!1,a=!1;break}}else i=!0,a=!0;var f=e[0];return{type:"smash",mode:n.mode,body:f,smashHeight:i,smashDepth:a}},"handler"),htmlBuilder:o((t,e)=>{var r=Be.makeSpan([],[Fr(t.body,e)]);if(!t.smashHeight&&!t.smashDepth)return r;if(t.smashHeight&&(r.height=0,r.children))for(var n=0;n<r.children.length;n++)r.children[n].height=0;if(t.smashDepth&&(r.depth=0,r.children))for(var i=0;i<r.children.length;i++)r.children[i].depth=0;var a=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r}]},e);return Be.makeSpan(["mord"],[a],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new dt.MathNode("mpadded",[yn(t.body,e)]);return t.smashHeight&&r.setAttribute("height","0px"),t.smashDepth&&r.setAttribute("depth","0px"),r},"mathmlBuilder")});Nt({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n}=t,i=r[0],a=e[0];return{type:"sqrt",mode:n.mode,body:a,index:i}},htmlBuilder(t,e){var r=Fr(t.body,e.havingCrampedStyle());r.height===0&&(r.height=e.fontMetrics().xHeight),r=Be.wrapFragment(r,e);var n=e.fontMetrics(),i=n.defaultRuleThickness,a=i;e.style.id<tr.TEXT.id&&(a=e.fontMetrics().xHeight);var s=i+a/4,l=r.height+r.depth+s+i,{span:u,ruleWidth:h,advanceWidth:f}=ou.sqrtImage(l,e),d=u.height-h;d>r.height+r.depth+s&&(s=(s+d-r.height-r.depth)/2);var p=u.height-r.height-s-h;r.style.paddingLeft=kt(f);var m=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+p)},{type:"elem",elem:u},{type:"kern",size:h}]},e);if(t.index){var g=e.havingStyle(tr.SCRIPTSCRIPT),y=Fr(t.index,g,e),v=.6*(m.height-m.depth),x=Be.makeVList({positionType:"shift",positionData:-v,children:[{type:"elem",elem:y}]},e),b=Be.makeSpan(["root"],[x]);return Be.makeSpan(["mord","sqrt"],[b,m],e)}else return Be.makeSpan(["mord","sqrt"],[m],e)},mathmlBuilder(t,e){var{body:r,index:n}=t;return n?new dt.MathNode("mroot",[yn(r,e),yn(n,e)]):new dt.MathNode("msqrt",[yn(r,e)])}});_z={display:tr.DISPLAY,text:tr.TEXT,script:tr.SCRIPT,scriptscript:tr.SCRIPTSCRIPT};Nt({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t,e){var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!0,r),s=n.slice(1,n.length-5);return{type:"styling",mode:i.mode,style:s,body:a}},htmlBuilder(t,e){var r=_z[t.style],n=e.havingStyle(r).withFont("");return SG(t.body,n,e)},mathmlBuilder(t,e){var r=_z[t.style],n=e.havingStyle(r),i=ks(t.body,n),a=new dt.MathNode("mstyle",i),s={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},l=s[t.style];return a.setAttribute("scriptlevel",l[0]),a.setAttribute("displaystyle",l[1]),a}});I4e=o(function(e,r){var n=e.base;if(n)if(n.type==="op"){var i=n.limits&&(r.style.size===tr.DISPLAY.size||n.alwaysHandleSupSub);return i?m0:null}else if(n.type==="operatorname"){var a=n.alwaysHandleSupSub&&(r.style.size===tr.DISPLAY.size||n.limits);return a?EG:null}else{if(n.type==="accent")return Jt.isCharacterBox(n.base)?G7:null;if(n.type==="horizBrace"){var s=!e.sub;return s===n.isOver?wG:null}else return null}else return null},"htmlBuilderDelegate");rd({type:"supsub",htmlBuilder(t,e){var r=I4e(t,e);if(r)return r(t,e);var{base:n,sup:i,sub:a}=t,s=Fr(n,e),l,u,h=e.fontMetrics(),f=0,d=0,p=n&&Jt.isCharacterBox(n);if(i){var m=e.havingStyle(e.style.sup());l=Fr(i,m,e),p||(f=s.height-m.fontMetrics().supDrop*m.sizeMultiplier/e.sizeMultiplier)}if(a){var g=e.havingStyle(e.style.sub());u=Fr(a,g,e),p||(d=s.depth+g.fontMetrics().subDrop*g.sizeMultiplier/e.sizeMultiplier)}var y;e.style===tr.DISPLAY?y=h.sup1:e.style.cramped?y=h.sup3:y=h.sup2;var v=e.sizeMultiplier,x=kt(.5/h.ptPerEm/v),b=null;if(u){var w=t.base&&t.base.type==="op"&&t.base.name&&(t.base.name==="\\oiint"||t.base.name==="\\oiiint");(s instanceof Ts||w)&&(b=kt(-s.italic))}var C;if(l&&u){f=Math.max(f,y,l.depth+.25*h.xHeight),d=Math.max(d,h.sub2);var T=h.defaultRuleThickness,E=4*T;if(f-l.depth-(u.height-d)<E){d=E-(f-l.depth)+u.height;var A=.8*h.xHeight-(f-l.depth);A>0&&(f+=A,d-=A)}var S=[{type:"elem",elem:u,shift:d,marginRight:x,marginLeft:b},{type:"elem",elem:l,shift:-f,marginRight:x}];C=Be.makeVList({positionType:"individualShift",children:S},e)}else if(u){d=Math.max(d,h.sub1,u.height-.8*h.xHeight);var _=[{type:"elem",elem:u,marginLeft:b,marginRight:x}];C=Be.makeVList({positionType:"shift",positionData:d,children:_},e)}else if(l)f=Math.max(f,y,l.depth+.25*h.xHeight),C=Be.makeVList({positionType:"shift",positionData:-f,children:[{type:"elem",elem:l,marginRight:x}]},e);else throw new Error("supsub must have either sup or sub.");var I=A7(s,"right")||"mord";return Be.makeSpan([I],[s,Be.makeSpan(["msupsub"],[C])],e)},mathmlBuilder(t,e){var r=!1,n,i;t.base&&t.base.type==="horizBrace"&&(i=!!t.sup,i===t.base.isOver&&(r=!0,n=t.base.isOver)),t.base&&(t.base.type==="op"||t.base.type==="operatorname")&&(t.base.parentIsSupSub=!0);var a=[yn(t.base,e)];t.sub&&a.push(yn(t.sub,e)),t.sup&&a.push(yn(t.sup,e));var s;if(r)s=n?"mover":"munder";else if(t.sub)if(t.sup){var h=t.base;h&&h.type==="op"&&h.limits&&e.style===tr.DISPLAY||h&&h.type==="operatorname"&&h.alwaysHandleSupSub&&(e.style===tr.DISPLAY||h.limits)?s="munderover":s="msubsup"}else{var u=t.base;u&&u.type==="op"&&u.limits&&(e.style===tr.DISPLAY||u.alwaysHandleSupSub)||u&&u.type==="operatorname"&&u.alwaysHandleSupSub&&(u.limits||e.style===tr.DISPLAY)?s="munder":s="msub"}else{var l=t.base;l&&l.type==="op"&&l.limits&&(e.style===tr.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||e.style===tr.DISPLAY)?s="mover":s="msup"}return new dt.MathNode(s,a)}});rd({type:"atom",htmlBuilder(t,e){return Be.mathsym(t.text,t.mode,e,["m"+t.family])},mathmlBuilder(t,e){var r=new dt.MathNode("mo",[Co(t.text,t.mode)]);if(t.family==="bin"){var n=$7(t,e);n==="bold-italic"&&r.setAttribute("mathvariant",n)}else t.family==="punct"?r.setAttribute("separator","true"):(t.family==="open"||t.family==="close")&&r.setAttribute("stretchy","false");return r}});CG={mi:"italic",mn:"normal",mtext:"normal"};rd({type:"mathord",htmlBuilder(t,e){return Be.makeOrd(t,e,"mathord")},mathmlBuilder(t,e){var r=new dt.MathNode("mi",[Co(t.text,t.mode,e)]),n=$7(t,e)||"italic";return n!==CG[r.type]&&r.setAttribute("mathvariant",n),r}});rd({type:"textord",htmlBuilder(t,e){return Be.makeOrd(t,e,"textord")},mathmlBuilder(t,e){var r=Co(t.text,t.mode,e),n=$7(t,e)||"normal",i;return t.mode==="text"?i=new dt.MathNode("mtext",[r]):/[0-9]/.test(t.text)?i=new dt.MathNode("mn",[r]):t.text==="\\prime"?i=new dt.MathNode("mo",[r]):i=new dt.MathNode("mi",[r]),n!==CG[i.type]&&i.setAttribute("mathvariant",n),i}});b7={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},w7={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};rd({type:"spacing",htmlBuilder(t,e){if(w7.hasOwnProperty(t.text)){var r=w7[t.text].className||"";if(t.mode==="text"){var n=Be.makeOrd(t,e,"textord");return n.classes.push(r),n}else return Be.makeSpan(["mspace",r],[Be.mathsym(t.text,t.mode,e)],e)}else{if(b7.hasOwnProperty(t.text))return Be.makeSpan(["mspace",b7[t.text]],[],e);throw new gt('Unknown type of space "'+t.text+'"')}},mathmlBuilder(t,e){var r;if(w7.hasOwnProperty(t.text))r=new dt.MathNode("mtext",[new dt.TextNode("\xA0")]);else{if(b7.hasOwnProperty(t.text))return new dt.MathNode("mspace");throw new gt('Unknown type of space "'+t.text+'"')}return r}});Dz=o(()=>{var t=new dt.MathNode("mtd",[]);return t.setAttribute("width","50%"),t},"pad");rd({type:"tag",mathmlBuilder(t,e){var r=new dt.MathNode("mtable",[new dt.MathNode("mtr",[Dz(),new dt.MathNode("mtd",[dh(t.body,e)]),Dz(),new dt.MathNode("mtd",[dh(t.tag,e)])])]);return r.setAttribute("width","100%"),r}});Lz={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},Rz={"\\textbf":"textbf","\\textmd":"textmd"},O4e={"\\textit":"textit","\\textup":"textup"},Nz=o((t,e)=>{var r=t.font;if(r){if(Lz[r])return e.withTextFontFamily(Lz[r]);if(Rz[r])return e.withTextFontWeight(Rz[r]);if(r==="\\emph")return e.fontShape==="textit"?e.withTextFontShape("textup"):e.withTextFontShape("textit")}else return e;return e.withTextFontShape(O4e[r])},"optionsWithFont");Nt({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"text",mode:r.mode,body:di(i),font:n}},htmlBuilder(t,e){var r=Nz(t,e),n=Pi(t.body,r,!0);return Be.makeSpan(["mord","text"],n,r)},mathmlBuilder(t,e){var r=Nz(t,e);return dh(t.body,r)}});Nt({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"underline",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Fr(t.body,e),n=Be.makeLineSpan("underline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Be.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:i},{type:"elem",elem:n},{type:"kern",size:3*i},{type:"elem",elem:r}]},e);return Be.makeSpan(["mord","underline"],[a],e)},mathmlBuilder(t,e){var r=new dt.MathNode("mo",[new dt.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new dt.MathNode("munder",[yn(t.body,e),r]);return n.setAttribute("accentunder","true"),n}});Nt({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"vcenter",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Fr(t.body,e),n=e.fontMetrics().axisHeight,i=.5*(r.height-n-(r.depth+n));return Be.makeVList({positionType:"shift",positionData:i,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){return new dt.MathNode("mpadded",[yn(t.body,e)],["vcenter"])}});Nt({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(t,e,r){throw new gt("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(t,e){for(var r=Mz(t),n=[],i=e.havingStyle(e.style.text()),a=0;a<r.length;a++){var s=r[a];s==="~"&&(s="\\textasciitilde"),n.push(Be.makeSymbol(s,"Typewriter-Regular",t.mode,i,["mord","texttt"]))}return Be.makeSpan(["mord","text"].concat(i.sizingClasses(e)),Be.tryCombineChars(n),i)},mathmlBuilder(t,e){var r=new dt.TextNode(Mz(t)),n=new dt.MathNode("mtext",[r]);return n.setAttribute("mathvariant","monospace"),n}});Mz=o(t=>t.body.replace(/ /g,t.star?"\u2423":"\xA0"),"makeVerb"),hh=jz,AG=`[ \r
271 + ]`,P4e="\\\\[a-zA-Z@]+",B4e="\\\\[^\uD800-\uDFFF]",F4e="("+P4e+")"+AG+"*",$4e=`\\\\(
272 +|[ \r ]+
273 +?)[ \r ]*`,N7="[\u0300-\u036F]",z4e=new RegExp(N7+"+$"),G4e="("+AG+"+)|"+($4e+"|")+"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]"+(N7+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(N7+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+F4e)+("|"+B4e+")"),y3=class{static{o(this,"Lexer")}constructor(e,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=r,this.tokenRegex=new RegExp(G4e,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,r){this.catcodes[e]=r}lex(){var e=this.input,r=this.tokenRegex.lastIndex;if(r===e.length)return new So("EOF",new Xs(this,r,r));var n=this.tokenRegex.exec(e);if(n===null||n.index!==r)throw new gt("Unexpected character: '"+e[r]+"'",new So(e[r],new Xs(this,r,r+1)));var i=n[6]||n[3]||(n[2]?"\\ ":" ");if(this.catcodes[i]===14){var a=e.indexOf(`
274 +`,this.tokenRegex.lastIndex);return a===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=a+1,this.lex()}return new So(i,new Xs(this,r,this.tokenRegex.lastIndex))}},M7=class{static{o(this,"Namespace")}constructor(e,r){e===void 0&&(e={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new gt("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var r in e)e.hasOwnProperty(r)&&(e[r]==null?delete this.current[r]:this.current[r]=e[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,r,n){if(n===void 0&&(n=!1),n){for(var i=0;i<this.undefStack.length;i++)delete this.undefStack[i][e];this.undefStack.length>0&&(this.undefStack[this.undefStack.length-1][e]=r)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}r==null?delete this.current[e]:this.current[e]=r}},V4e=gG;fe("\\noexpand",function(t){var e=t.popToken();return t.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}});fe("\\expandafter",function(t){var e=t.popToken();return t.expandOnce(!0),{tokens:[e],numArgs:0}});fe("\\@firstoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[0],numArgs:0}});fe("\\@secondoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[1],numArgs:0}});fe("\\@ifnextchar",function(t){var e=t.consumeArgs(3);t.consumeSpaces();var r=t.future();return e[0].length===1&&e[0][0].text===r.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}});fe("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");fe("\\TextOrMath",function(t){var e=t.consumeArgs(2);return t.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});Iz={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};fe("\\char",function(t){var e=t.popToken(),r,n="";if(e.text==="'")r=8,e=t.popToken();else if(e.text==='"')r=16,e=t.popToken();else if(e.text==="`")if(e=t.popToken(),e.text[0]==="\\")n=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new gt("\\char` missing argument");n=e.text.charCodeAt(0)}else r=10;if(r){if(n=Iz[e.text],n==null||n>=r)throw new gt("Invalid base-"+r+" digit "+e.text);for(var i;(i=Iz[t.future().text])!=null&&i<r;)n*=r,n+=i,t.popToken()}return"\\@char{"+n+"}"});j7=o((t,e,r)=>{var n=t.consumeArg().tokens;if(n.length!==1)throw new gt("\\newcommand's first argument must be a macro name");var i=n[0].text,a=t.isDefined(i);if(a&&!e)throw new gt("\\newcommand{"+i+"} attempting to redefine "+(i+"; use \\renewcommand"));if(!a&&!r)throw new gt("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");var s=0;if(n=t.consumeArg().tokens,n.length===1&&n[0].text==="["){for(var l="",u=t.expandNextToken();u.text!=="]"&&u.text!=="EOF";)l+=u.text,u=t.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new gt("Invalid number of arguments: "+l);s=parseInt(l),n=t.consumeArg().tokens}return t.macros.set(i,{tokens:n,numArgs:s}),""},"newcommand");fe("\\newcommand",t=>j7(t,!1,!0));fe("\\renewcommand",t=>j7(t,!0,!1));fe("\\providecommand",t=>j7(t,!0,!0));fe("\\message",t=>{var e=t.consumeArgs(1)[0];return console.log(e.reverse().map(r=>r.text).join("")),""});fe("\\errmessage",t=>{var e=t.consumeArgs(1)[0];return console.error(e.reverse().map(r=>r.text).join("")),""});fe("\\show",t=>{var e=t.popToken(),r=e.text;return console.log(e,t.macros.get(r),hh[r],An.math[r],An.text[r]),""});fe("\\bgroup","{");fe("\\egroup","}");fe("~","\\nobreakspace");fe("\\lq","`");fe("\\rq","'");fe("\\aa","\\r a");fe("\\AA","\\r A");fe("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xA9}");fe("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");fe("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xAE}");fe("\u212C","\\mathscr{B}");fe("\u2130","\\mathscr{E}");fe("\u2131","\\mathscr{F}");fe("\u210B","\\mathscr{H}");fe("\u2110","\\mathscr{I}");fe("\u2112","\\mathscr{L}");fe("\u2133","\\mathscr{M}");fe("\u211B","\\mathscr{R}");fe("\u212D","\\mathfrak{C}");fe("\u210C","\\mathfrak{H}");fe("\u2128","\\mathfrak{Z}");fe("\\Bbbk","\\Bbb{k}");fe("\xB7","\\cdotp");fe("\\llap","\\mathllap{\\textrm{#1}}");fe("\\rlap","\\mathrlap{\\textrm{#1}}");fe("\\clap","\\mathclap{\\textrm{#1}}");fe("\\mathstrut","\\vphantom{(}");fe("\\underbar","\\underline{\\text{#1}}");fe("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}');fe("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}");fe("\\ne","\\neq");fe("\u2260","\\neq");fe("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}");fe("\u2209","\\notin");fe("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}");fe("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");fe("\u225A","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");fe("\u225B","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225B}}");fe("\u225D","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225D}}");fe("\u225E","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225E}}");fe("\u225F","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}");fe("\u27C2","\\perp");fe("\u203C","\\mathclose{!\\mkern-0.8mu!}");fe("\u220C","\\notni");fe("\u231C","\\ulcorner");fe("\u231D","\\urcorner");fe("\u231E","\\llcorner");fe("\u231F","\\lrcorner");fe("\xA9","\\copyright");fe("\xAE","\\textregistered");fe("\uFE0F","\\textregistered");fe("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');fe("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');fe("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');fe("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');fe("\\vdots","\\mathord{\\varvdots\\rule{0pt}{15pt}}");fe("\u22EE","\\vdots");fe("\\varGamma","\\mathit{\\Gamma}");fe("\\varDelta","\\mathit{\\Delta}");fe("\\varTheta","\\mathit{\\Theta}");fe("\\varLambda","\\mathit{\\Lambda}");fe("\\varXi","\\mathit{\\Xi}");fe("\\varPi","\\mathit{\\Pi}");fe("\\varSigma","\\mathit{\\Sigma}");fe("\\varUpsilon","\\mathit{\\Upsilon}");fe("\\varPhi","\\mathit{\\Phi}");fe("\\varPsi","\\mathit{\\Psi}");fe("\\varOmega","\\mathit{\\Omega}");fe("\\substack","\\begin{subarray}{c}#1\\end{subarray}");fe("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");fe("\\boxed","\\fbox{$\\displaystyle{#1}$}");fe("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");fe("\\implies","\\DOTSB\\;\\Longrightarrow\\;");fe("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");Oz={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};fe("\\dots",function(t){var e="\\dotso",r=t.expandAfterFuture().text;return r in Oz?e=Oz[r]:(r.slice(0,4)==="\\not"||r in An.math&&Jt.contains(["bin","rel"],An.math[r].group))&&(e="\\dotsb"),e});K7={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};fe("\\dotso",function(t){var e=t.future().text;return e in K7?"\\ldots\\,":"\\ldots"});fe("\\dotsc",function(t){var e=t.future().text;return e in K7&&e!==","?"\\ldots\\,":"\\ldots"});fe("\\cdots",function(t){var e=t.future().text;return e in K7?"\\@cdots\\,":"\\@cdots"});fe("\\dotsb","\\cdots");fe("\\dotsm","\\cdots");fe("\\dotsi","\\!\\cdots");fe("\\dotsx","\\ldots\\,");fe("\\DOTSI","\\relax");fe("\\DOTSB","\\relax");fe("\\DOTSX","\\relax");fe("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");fe("\\,","\\tmspace+{3mu}{.1667em}");fe("\\thinspace","\\,");fe("\\>","\\mskip{4mu}");fe("\\:","\\tmspace+{4mu}{.2222em}");fe("\\medspace","\\:");fe("\\;","\\tmspace+{5mu}{.2777em}");fe("\\thickspace","\\;");fe("\\!","\\tmspace-{3mu}{.1667em}");fe("\\negthinspace","\\!");fe("\\negmedspace","\\tmspace-{4mu}{.2222em}");fe("\\negthickspace","\\tmspace-{5mu}{.277em}");fe("\\enspace","\\kern.5em ");fe("\\enskip","\\hskip.5em\\relax");fe("\\quad","\\hskip1em\\relax");fe("\\qquad","\\hskip2em\\relax");fe("\\tag","\\@ifstar\\tag@literal\\tag@paren");fe("\\tag@paren","\\tag@literal{({#1})}");fe("\\tag@literal",t=>{if(t.macros.get("\\df@tag"))throw new gt("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});fe("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");fe("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");fe("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");fe("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");fe("\\newline","\\\\\\relax");fe("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");_G=kt(jl["Main-Regular"][84][1]-.7*jl["Main-Regular"][65][1]);fe("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+_G+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");fe("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+_G+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");fe("\\hspace","\\@ifstar\\@hspacer\\@hspace");fe("\\@hspace","\\hskip #1\\relax");fe("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");fe("\\ordinarycolon",":");fe("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");fe("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');fe("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');fe("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');fe("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');fe("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');fe("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');fe("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');fe("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');fe("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');fe("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');fe("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');fe("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');fe("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');fe("\u2237","\\dblcolon");fe("\u2239","\\eqcolon");fe("\u2254","\\coloneqq");fe("\u2255","\\eqqcolon");fe("\u2A74","\\Coloneqq");fe("\\ratio","\\vcentcolon");fe("\\coloncolon","\\dblcolon");fe("\\colonequals","\\coloneqq");fe("\\coloncolonequals","\\Coloneqq");fe("\\equalscolon","\\eqqcolon");fe("\\equalscoloncolon","\\Eqqcolon");fe("\\colonminus","\\coloneq");fe("\\coloncolonminus","\\Coloneq");fe("\\minuscolon","\\eqcolon");fe("\\minuscoloncolon","\\Eqcolon");fe("\\coloncolonapprox","\\Colonapprox");fe("\\coloncolonsim","\\Colonsim");fe("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");fe("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");fe("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");fe("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");fe("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");fe("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");fe("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");fe("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");fe("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");fe("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");fe("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");fe("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");fe("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");fe("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}");fe("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}");fe("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}");fe("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}");fe("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}");fe("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}");fe("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}");fe("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}");fe("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}");fe("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}");fe("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228A}");fe("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2ACB}");fe("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228B}");fe("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2ACC}");fe("\\imath","\\html@mathml{\\@imath}{\u0131}");fe("\\jmath","\\html@mathml{\\@jmath}{\u0237}");fe("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27E6}}");fe("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27E7}}");fe("\u27E6","\\llbracket");fe("\u27E7","\\rrbracket");fe("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}");fe("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}");fe("\u2983","\\lBrace");fe("\u2984","\\rBrace");fe("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29B5}}");fe("\u29B5","\\minuso");fe("\\darr","\\downarrow");fe("\\dArr","\\Downarrow");fe("\\Darr","\\Downarrow");fe("\\lang","\\langle");fe("\\rang","\\rangle");fe("\\uarr","\\uparrow");fe("\\uArr","\\Uparrow");fe("\\Uarr","\\Uparrow");fe("\\N","\\mathbb{N}");fe("\\R","\\mathbb{R}");fe("\\Z","\\mathbb{Z}");fe("\\alef","\\aleph");fe("\\alefsym","\\aleph");fe("\\Alpha","\\mathrm{A}");fe("\\Beta","\\mathrm{B}");fe("\\bull","\\bullet");fe("\\Chi","\\mathrm{X}");fe("\\clubs","\\clubsuit");fe("\\cnums","\\mathbb{C}");fe("\\Complex","\\mathbb{C}");fe("\\Dagger","\\ddagger");fe("\\diamonds","\\diamondsuit");fe("\\empty","\\emptyset");fe("\\Epsilon","\\mathrm{E}");fe("\\Eta","\\mathrm{H}");fe("\\exist","\\exists");fe("\\harr","\\leftrightarrow");fe("\\hArr","\\Leftrightarrow");fe("\\Harr","\\Leftrightarrow");fe("\\hearts","\\heartsuit");fe("\\image","\\Im");fe("\\infin","\\infty");fe("\\Iota","\\mathrm{I}");fe("\\isin","\\in");fe("\\Kappa","\\mathrm{K}");fe("\\larr","\\leftarrow");fe("\\lArr","\\Leftarrow");fe("\\Larr","\\Leftarrow");fe("\\lrarr","\\leftrightarrow");fe("\\lrArr","\\Leftrightarrow");fe("\\Lrarr","\\Leftrightarrow");fe("\\Mu","\\mathrm{M}");fe("\\natnums","\\mathbb{N}");fe("\\Nu","\\mathrm{N}");fe("\\Omicron","\\mathrm{O}");fe("\\plusmn","\\pm");fe("\\rarr","\\rightarrow");fe("\\rArr","\\Rightarrow");fe("\\Rarr","\\Rightarrow");fe("\\real","\\Re");fe("\\reals","\\mathbb{R}");fe("\\Reals","\\mathbb{R}");fe("\\Rho","\\mathrm{P}");fe("\\sdot","\\cdot");fe("\\sect","\\S");fe("\\spades","\\spadesuit");fe("\\sub","\\subset");fe("\\sube","\\subseteq");fe("\\supe","\\supseteq");fe("\\Tau","\\mathrm{T}");fe("\\thetasym","\\vartheta");fe("\\weierp","\\wp");fe("\\Zeta","\\mathrm{Z}");fe("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");fe("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");fe("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");fe("\\bra","\\mathinner{\\langle{#1}|}");fe("\\ket","\\mathinner{|{#1}\\rangle}");fe("\\braket","\\mathinner{\\langle{#1}\\rangle}");fe("\\Bra","\\left\\langle#1\\right|");fe("\\Ket","\\left|#1\\right\\rangle");DG=o(t=>e=>{var r=e.consumeArg().tokens,n=e.consumeArg().tokens,i=e.consumeArg().tokens,a=e.consumeArg().tokens,s=e.macros.get("|"),l=e.macros.get("\\|");e.macros.beginGroup();var u=o(d=>p=>{t&&(p.macros.set("|",s),i.length&&p.macros.set("\\|",l));var m=d;if(!d&&i.length){var g=p.future();g.text==="|"&&(p.popToken(),m=!0)}return{tokens:m?i:n,numArgs:0}},"midMacro");e.macros.set("|",u(!1)),i.length&&e.macros.set("\\|",u(!0));var h=e.consumeArg().tokens,f=e.expandTokens([...a,...h,...r]);return e.macros.endGroup(),{tokens:f.reverse(),numArgs:0}},"braketHelper");fe("\\bra@ket",DG(!1));fe("\\bra@set",DG(!0));fe("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");fe("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");fe("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");fe("\\angln","{\\angl n}");fe("\\blue","\\textcolor{##6495ed}{#1}");fe("\\orange","\\textcolor{##ffa500}{#1}");fe("\\pink","\\textcolor{##ff00af}{#1}");fe("\\red","\\textcolor{##df0030}{#1}");fe("\\green","\\textcolor{##28ae7b}{#1}");fe("\\gray","\\textcolor{gray}{#1}");fe("\\purple","\\textcolor{##9d38bd}{#1}");fe("\\blueA","\\textcolor{##ccfaff}{#1}");fe("\\blueB","\\textcolor{##80f6ff}{#1}");fe("\\blueC","\\textcolor{##63d9ea}{#1}");fe("\\blueD","\\textcolor{##11accd}{#1}");fe("\\blueE","\\textcolor{##0c7f99}{#1}");fe("\\tealA","\\textcolor{##94fff5}{#1}");fe("\\tealB","\\textcolor{##26edd5}{#1}");fe("\\tealC","\\textcolor{##01d1c1}{#1}");fe("\\tealD","\\textcolor{##01a995}{#1}");fe("\\tealE","\\textcolor{##208170}{#1}");fe("\\greenA","\\textcolor{##b6ffb0}{#1}");fe("\\greenB","\\textcolor{##8af281}{#1}");fe("\\greenC","\\textcolor{##74cf70}{#1}");fe("\\greenD","\\textcolor{##1fab54}{#1}");fe("\\greenE","\\textcolor{##0d923f}{#1}");fe("\\goldA","\\textcolor{##ffd0a9}{#1}");fe("\\goldB","\\textcolor{##ffbb71}{#1}");fe("\\goldC","\\textcolor{##ff9c39}{#1}");fe("\\goldD","\\textcolor{##e07d10}{#1}");fe("\\goldE","\\textcolor{##a75a05}{#1}");fe("\\redA","\\textcolor{##fca9a9}{#1}");fe("\\redB","\\textcolor{##ff8482}{#1}");fe("\\redC","\\textcolor{##f9685d}{#1}");fe("\\redD","\\textcolor{##e84d39}{#1}");fe("\\redE","\\textcolor{##bc2612}{#1}");fe("\\maroonA","\\textcolor{##ffbde0}{#1}");fe("\\maroonB","\\textcolor{##ff92c6}{#1}");fe("\\maroonC","\\textcolor{##ed5fa6}{#1}");fe("\\maroonD","\\textcolor{##ca337c}{#1}");fe("\\maroonE","\\textcolor{##9e034e}{#1}");fe("\\purpleA","\\textcolor{##ddd7ff}{#1}");fe("\\purpleB","\\textcolor{##c6b9fc}{#1}");fe("\\purpleC","\\textcolor{##aa87ff}{#1}");fe("\\purpleD","\\textcolor{##7854ab}{#1}");fe("\\purpleE","\\textcolor{##543b78}{#1}");fe("\\mintA","\\textcolor{##f5f9e8}{#1}");fe("\\mintB","\\textcolor{##edf2df}{#1}");fe("\\mintC","\\textcolor{##e0e5cc}{#1}");fe("\\grayA","\\textcolor{##f6f7f7}{#1}");fe("\\grayB","\\textcolor{##f0f1f2}{#1}");fe("\\grayC","\\textcolor{##e3e5e6}{#1}");fe("\\grayD","\\textcolor{##d6d8da}{#1}");fe("\\grayE","\\textcolor{##babec2}{#1}");fe("\\grayF","\\textcolor{##888d93}{#1}");fe("\\grayG","\\textcolor{##626569}{#1}");fe("\\grayH","\\textcolor{##3b3e40}{#1}");fe("\\grayI","\\textcolor{##21242c}{#1}");fe("\\kaBlue","\\textcolor{##314453}{#1}");fe("\\kaGreen","\\textcolor{##71B307}{#1}");LG={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},I7=class{static{o(this,"MacroExpander")}constructor(e,r,n){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(e),this.macros=new M7(V4e,r.macros),this.mode=n,this.stack=[]}feed(e){this.lexer=new y3(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var r,n,i;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:i,end:n}=this.consumeArg(["]"])}else({tokens:i,start:r,end:n}=this.consumeArg());return this.pushToken(new So("EOF",n.loc)),this.pushTokens(i),r.range(n,"")}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var r=[],n=e&&e.length>0;n||this.consumeSpaces();var i=this.future(),a,s=0,l=0;do{if(a=this.popToken(),r.push(a),a.text==="{")++s;else if(a.text==="}"){if(--s,s===-1)throw new gt("Extra }",a)}else if(a.text==="EOF")throw new gt("Unexpected end of input in a macro argument, expected '"+(e&&n?e[l]:"}")+"'",a);if(e&&n)if((s===0||s===1&&e[l]==="{")&&a.text===e[l]){if(++l,l===e.length){r.splice(-l,l);break}}else l=0}while(s!==0||n);return i.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:i,end:a}}consumeArgs(e,r){if(r){if(r.length!==e+1)throw new gt("The length of delimiters doesn't match the number of args!");for(var n=r[0],i=0;i<n.length;i++){var a=this.popToken();if(n[i]!==a.text)throw new gt("Use of the macro doesn't match its definition",a)}}for(var s=[],l=0;l<e;l++)s.push(this.consumeArg(r&&r[l+1]).tokens);return s}countExpansion(e){if(this.expansionCount+=e,this.expansionCount>this.settings.maxExpand)throw new gt("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var r=this.popToken(),n=r.text,i=r.noexpand?null:this._getExpansion(n);if(i==null||e&&i.unexpandable){if(e&&i==null&&n[0]==="\\"&&!this.isDefined(n))throw new gt("Undefined control sequence: "+n);return this.pushToken(r),!1}this.countExpansion(1);var a=i.tokens,s=this.consumeArgs(i.numArgs,i.delimiters);if(i.numArgs){a=a.slice();for(var l=a.length-1;l>=0;--l){var u=a[l];if(u.text==="#"){if(l===0)throw new gt("Incomplete placeholder at end of macro body",u);if(u=a[--l],u.text==="#")a.splice(l+1,1);else if(/^[1-9]$/.test(u.text))a.splice(l,2,...s[+u.text-1]);else throw new gt("Not a valid argument number",u)}}}return this.pushTokens(a),a.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new So(e)]):void 0}expandTokens(e){var r=[],n=this.stack.length;for(this.pushTokens(e);this.stack.length>n;)if(this.expandOnce(!0)===!1){var i=this.stack.pop();i.treatAsRelax&&(i.noexpand=!1,i.treatAsRelax=!1),r.push(i)}return this.countExpansion(r.length),r}expandMacroAsText(e){var r=this.expandMacro(e);return r&&r.map(n=>n.text).join("")}_getExpansion(e){var r=this.macros.get(e);if(r==null)return r;if(e.length===1){var n=this.lexer.catcodes[e];if(n!=null&&n!==13)return}var i=typeof r=="function"?r(this):r;if(typeof i=="string"){var a=0;if(i.indexOf("#")!==-1)for(var s=i.replace(/##/g,"");s.indexOf("#"+(a+1))!==-1;)++a;for(var l=new y3(i,this.settings),u=[],h=l.lex();h.text!=="EOF";)u.push(h),h=l.lex();u.reverse();var f={tokens:u,numArgs:a};return f}return i}isDefined(e){return this.macros.has(e)||hh.hasOwnProperty(e)||An.math.hasOwnProperty(e)||An.text.hasOwnProperty(e)||LG.hasOwnProperty(e)}isExpandable(e){var r=this.macros.get(e);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:hh.hasOwnProperty(e)&&!hh[e].primitive}},Pz=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,l3=Object.freeze({"\u208A":"+","\u208B":"-","\u208C":"=","\u208D":"(","\u208E":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1D62":"i","\u2C7C":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209A":"p","\u1D63":"r","\u209B":"s","\u209C":"t","\u1D64":"u","\u1D65":"v","\u2093":"x","\u1D66":"\u03B2","\u1D67":"\u03B3","\u1D68":"\u03C1","\u1D69":"\u03D5","\u1D6A":"\u03C7","\u207A":"+","\u207B":"-","\u207C":"=","\u207D":"(","\u207E":")","\u2070":"0","\xB9":"1","\xB2":"2","\xB3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1D2C":"A","\u1D2E":"B","\u1D30":"D","\u1D31":"E","\u1D33":"G","\u1D34":"H","\u1D35":"I","\u1D36":"J","\u1D37":"K","\u1D38":"L","\u1D39":"M","\u1D3A":"N","\u1D3C":"O","\u1D3E":"P","\u1D3F":"R","\u1D40":"T","\u1D41":"U","\u2C7D":"V","\u1D42":"W","\u1D43":"a","\u1D47":"b","\u1D9C":"c","\u1D48":"d","\u1D49":"e","\u1DA0":"f","\u1D4D":"g",\u02B0:"h","\u2071":"i",\u02B2:"j","\u1D4F":"k",\u02E1:"l","\u1D50":"m",\u207F:"n","\u1D52":"o","\u1D56":"p",\u02B3:"r",\u02E2:"s","\u1D57":"t","\u1D58":"u","\u1D5B":"v",\u02B7:"w",\u02E3:"x",\u02B8:"y","\u1DBB":"z","\u1D5D":"\u03B2","\u1D5E":"\u03B3","\u1D5F":"\u03B4","\u1D60":"\u03D5","\u1D61":"\u03C7","\u1DBF":"\u03B8"}),T7={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030C":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030A":{text:"\\r",math:"\\mathring"},"\u030B":{text:"\\H"},"\u0327":{text:"\\c"}},Bz={\u00E1:"a\u0301",\u00E0:"a\u0300",\u00E4:"a\u0308",\u01DF:"a\u0308\u0304",\u00E3:"a\u0303",\u0101:"a\u0304",\u0103:"a\u0306",\u1EAF:"a\u0306\u0301",\u1EB1:"a\u0306\u0300",\u1EB5:"a\u0306\u0303",\u01CE:"a\u030C",\u00E2:"a\u0302",\u1EA5:"a\u0302\u0301",\u1EA7:"a\u0302\u0300",\u1EAB:"a\u0302\u0303",\u0227:"a\u0307",\u01E1:"a\u0307\u0304",\u00E5:"a\u030A",\u01FB:"a\u030A\u0301",\u1E03:"b\u0307",\u0107:"c\u0301",\u1E09:"c\u0327\u0301",\u010D:"c\u030C",\u0109:"c\u0302",\u010B:"c\u0307",\u00E7:"c\u0327",\u010F:"d\u030C",\u1E0B:"d\u0307",\u1E11:"d\u0327",\u00E9:"e\u0301",\u00E8:"e\u0300",\u00EB:"e\u0308",\u1EBD:"e\u0303",\u0113:"e\u0304",\u1E17:"e\u0304\u0301",\u1E15:"e\u0304\u0300",\u0115:"e\u0306",\u1E1D:"e\u0327\u0306",\u011B:"e\u030C",\u00EA:"e\u0302",\u1EBF:"e\u0302\u0301",\u1EC1:"e\u0302\u0300",\u1EC5:"e\u0302\u0303",\u0117:"e\u0307",\u0229:"e\u0327",\u1E1F:"f\u0307",\u01F5:"g\u0301",\u1E21:"g\u0304",\u011F:"g\u0306",\u01E7:"g\u030C",\u011D:"g\u0302",\u0121:"g\u0307",\u0123:"g\u0327",\u1E27:"h\u0308",\u021F:"h\u030C",\u0125:"h\u0302",\u1E23:"h\u0307",\u1E29:"h\u0327",\u00ED:"i\u0301",\u00EC:"i\u0300",\u00EF:"i\u0308",\u1E2F:"i\u0308\u0301",\u0129:"i\u0303",\u012B:"i\u0304",\u012D:"i\u0306",\u01D0:"i\u030C",\u00EE:"i\u0302",\u01F0:"j\u030C",\u0135:"j\u0302",\u1E31:"k\u0301",\u01E9:"k\u030C",\u0137:"k\u0327",\u013A:"l\u0301",\u013E:"l\u030C",\u013C:"l\u0327",\u1E3F:"m\u0301",\u1E41:"m\u0307",\u0144:"n\u0301",\u01F9:"n\u0300",\u00F1:"n\u0303",\u0148:"n\u030C",\u1E45:"n\u0307",\u0146:"n\u0327",\u00F3:"o\u0301",\u00F2:"o\u0300",\u00F6:"o\u0308",\u022B:"o\u0308\u0304",\u00F5:"o\u0303",\u1E4D:"o\u0303\u0301",\u1E4F:"o\u0303\u0308",\u022D:"o\u0303\u0304",\u014D:"o\u0304",\u1E53:"o\u0304\u0301",\u1E51:"o\u0304\u0300",\u014F:"o\u0306",\u01D2:"o\u030C",\u00F4:"o\u0302",\u1ED1:"o\u0302\u0301",\u1ED3:"o\u0302\u0300",\u1ED7:"o\u0302\u0303",\u022F:"o\u0307",\u0231:"o\u0307\u0304",\u0151:"o\u030B",\u1E55:"p\u0301",\u1E57:"p\u0307",\u0155:"r\u0301",\u0159:"r\u030C",\u1E59:"r\u0307",\u0157:"r\u0327",\u015B:"s\u0301",\u1E65:"s\u0301\u0307",\u0161:"s\u030C",\u1E67:"s\u030C\u0307",\u015D:"s\u0302",\u1E61:"s\u0307",\u015F:"s\u0327",\u1E97:"t\u0308",\u0165:"t\u030C",\u1E6B:"t\u0307",\u0163:"t\u0327",\u00FA:"u\u0301",\u00F9:"u\u0300",\u00FC:"u\u0308",\u01D8:"u\u0308\u0301",\u01DC:"u\u0308\u0300",\u01D6:"u\u0308\u0304",\u01DA:"u\u0308\u030C",\u0169:"u\u0303",\u1E79:"u\u0303\u0301",\u016B:"u\u0304",\u1E7B:"u\u0304\u0308",\u016D:"u\u0306",\u01D4:"u\u030C",\u00FB:"u\u0302",\u016F:"u\u030A",\u0171:"u\u030B",\u1E7D:"v\u0303",\u1E83:"w\u0301",\u1E81:"w\u0300",\u1E85:"w\u0308",\u0175:"w\u0302",\u1E87:"w\u0307",\u1E98:"w\u030A",\u1E8D:"x\u0308",\u1E8B:"x\u0307",\u00FD:"y\u0301",\u1EF3:"y\u0300",\u00FF:"y\u0308",\u1EF9:"y\u0303",\u0233:"y\u0304",\u0177:"y\u0302",\u1E8F:"y\u0307",\u1E99:"y\u030A",\u017A:"z\u0301",\u017E:"z\u030C",\u1E91:"z\u0302",\u017C:"z\u0307",\u00C1:"A\u0301",\u00C0:"A\u0300",\u00C4:"A\u0308",\u01DE:"A\u0308\u0304",\u00C3:"A\u0303",\u0100:"A\u0304",\u0102:"A\u0306",\u1EAE:"A\u0306\u0301",\u1EB0:"A\u0306\u0300",\u1EB4:"A\u0306\u0303",\u01CD:"A\u030C",\u00C2:"A\u0302",\u1EA4:"A\u0302\u0301",\u1EA6:"A\u0302\u0300",\u1EAA:"A\u0302\u0303",\u0226:"A\u0307",\u01E0:"A\u0307\u0304",\u00C5:"A\u030A",\u01FA:"A\u030A\u0301",\u1E02:"B\u0307",\u0106:"C\u0301",\u1E08:"C\u0327\u0301",\u010C:"C\u030C",\u0108:"C\u0302",\u010A:"C\u0307",\u00C7:"C\u0327",\u010E:"D\u030C",\u1E0A:"D\u0307",\u1E10:"D\u0327",\u00C9:"E\u0301",\u00C8:"E\u0300",\u00CB:"E\u0308",\u1EBC:"E\u0303",\u0112:"E\u0304",\u1E16:"E\u0304\u0301",\u1E14:"E\u0304\u0300",\u0114:"E\u0306",\u1E1C:"E\u0327\u0306",\u011A:"E\u030C",\u00CA:"E\u0302",\u1EBE:"E\u0302\u0301",\u1EC0:"E\u0302\u0300",\u1EC4:"E\u0302\u0303",\u0116:"E\u0307",\u0228:"E\u0327",\u1E1E:"F\u0307",\u01F4:"G\u0301",\u1E20:"G\u0304",\u011E:"G\u0306",\u01E6:"G\u030C",\u011C:"G\u0302",\u0120:"G\u0307",\u0122:"G\u0327",\u1E26:"H\u0308",\u021E:"H\u030C",\u0124:"H\u0302",\u1E22:"H\u0307",\u1E28:"H\u0327",\u00CD:"I\u0301",\u00CC:"I\u0300",\u00CF:"I\u0308",\u1E2E:"I\u0308\u0301",\u0128:"I\u0303",\u012A:"I\u0304",\u012C:"I\u0306",\u01CF:"I\u030C",\u00CE:"I\u0302",\u0130:"I\u0307",\u0134:"J\u0302",\u1E30:"K\u0301",\u01E8:"K\u030C",\u0136:"K\u0327",\u0139:"L\u0301",\u013D:"L\u030C",\u013B:"L\u0327",\u1E3E:"M\u0301",\u1E40:"M\u0307",\u0143:"N\u0301",\u01F8:"N\u0300",\u00D1:"N\u0303",\u0147:"N\u030C",\u1E44:"N\u0307",\u0145:"N\u0327",\u00D3:"O\u0301",\u00D2:"O\u0300",\u00D6:"O\u0308",\u022A:"O\u0308\u0304",\u00D5:"O\u0303",\u1E4C:"O\u0303\u0301",\u1E4E:"O\u0303\u0308",\u022C:"O\u0303\u0304",\u014C:"O\u0304",\u1E52:"O\u0304\u0301",\u1E50:"O\u0304\u0300",\u014E:"O\u0306",\u01D1:"O\u030C",\u00D4:"O\u0302",\u1ED0:"O\u0302\u0301",\u1ED2:"O\u0302\u0300",\u1ED6:"O\u0302\u0303",\u022E:"O\u0307",\u0230:"O\u0307\u0304",\u0150:"O\u030B",\u1E54:"P\u0301",\u1E56:"P\u0307",\u0154:"R\u0301",\u0158:"R\u030C",\u1E58:"R\u0307",\u0156:"R\u0327",\u015A:"S\u0301",\u1E64:"S\u0301\u0307",\u0160:"S\u030C",\u1E66:"S\u030C\u0307",\u015C:"S\u0302",\u1E60:"S\u0307",\u015E:"S\u0327",\u0164:"T\u030C",\u1E6A:"T\u0307",\u0162:"T\u0327",\u00DA:"U\u0301",\u00D9:"U\u0300",\u00DC:"U\u0308",\u01D7:"U\u0308\u0301",\u01DB:"U\u0308\u0300",\u01D5:"U\u0308\u0304",\u01D9:"U\u0308\u030C",\u0168:"U\u0303",\u1E78:"U\u0303\u0301",\u016A:"U\u0304",\u1E7A:"U\u0304\u0308",\u016C:"U\u0306",\u01D3:"U\u030C",\u00DB:"U\u0302",\u016E:"U\u030A",\u0170:"U\u030B",\u1E7C:"V\u0303",\u1E82:"W\u0301",\u1E80:"W\u0300",\u1E84:"W\u0308",\u0174:"W\u0302",\u1E86:"W\u0307",\u1E8C:"X\u0308",\u1E8A:"X\u0307",\u00DD:"Y\u0301",\u1EF2:"Y\u0300",\u0178:"Y\u0308",\u1EF8:"Y\u0303",\u0232:"Y\u0304",\u0176:"Y\u0302",\u1E8E:"Y\u0307",\u0179:"Z\u0301",\u017D:"Z\u030C",\u1E90:"Z\u0302",\u017B:"Z\u0307",\u03AC:"\u03B1\u0301",\u1F70:"\u03B1\u0300",\u1FB1:"\u03B1\u0304",\u1FB0:"\u03B1\u0306",\u03AD:"\u03B5\u0301",\u1F72:"\u03B5\u0300",\u03AE:"\u03B7\u0301",\u1F74:"\u03B7\u0300",\u03AF:"\u03B9\u0301",\u1F76:"\u03B9\u0300",\u03CA:"\u03B9\u0308",\u0390:"\u03B9\u0308\u0301",\u1FD2:"\u03B9\u0308\u0300",\u1FD1:"\u03B9\u0304",\u1FD0:"\u03B9\u0306",\u03CC:"\u03BF\u0301",\u1F78:"\u03BF\u0300",\u03CD:"\u03C5\u0301",\u1F7A:"\u03C5\u0300",\u03CB:"\u03C5\u0308",\u03B0:"\u03C5\u0308\u0301",\u1FE2:"\u03C5\u0308\u0300",\u1FE1:"\u03C5\u0304",\u1FE0:"\u03C5\u0306",\u03CE:"\u03C9\u0301",\u1F7C:"\u03C9\u0300",\u038E:"\u03A5\u0301",\u1FEA:"\u03A5\u0300",\u03AB:"\u03A5\u0308",\u1FE9:"\u03A5\u0304",\u1FE8:"\u03A5\u0306",\u038F:"\u03A9\u0301",\u1FFA:"\u03A9\u0300"},v3=class t{static{o(this,"Parser")}constructor(e,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new I7(e,r,this.mode),this.settings=r,this.leftrightDepth=0}expect(e,r){if(r===void 0&&(r=!0),this.fetch().text!==e)throw new gt("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var r=this.nextToken;this.consume(),this.gullet.pushToken(new So("}")),this.gullet.pushTokens(e);var n=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,n}parseExpression(e,r){for(var n=[];;){this.mode==="math"&&this.consumeSpaces();var i=this.fetch();if(t.endOfExpression.indexOf(i.text)!==-1||r&&i.text===r||e&&hh[i.text]&&hh[i.text].infix)break;var a=this.parseAtom(r);if(a){if(a.type==="internal")continue}else break;n.push(a)}return this.mode==="text"&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(e){for(var r=-1,n,i=0;i<e.length;i++)if(e[i].type==="infix"){if(r!==-1)throw new gt("only one infix operator per group",e[i].token);r=i,n=e[i].replaceWith}if(r!==-1&&n){var a,s,l=e.slice(0,r),u=e.slice(r+1);l.length===1&&l[0].type==="ordgroup"?a=l[0]:a={type:"ordgroup",mode:this.mode,body:l},u.length===1&&u[0].type==="ordgroup"?s=u[0]:s={type:"ordgroup",mode:this.mode,body:u};var h;return n==="\\\\abovefrac"?h=this.callFunction(n,[a,e[r],s],[]):h=this.callFunction(n,[a,s],[]),[h]}else return e}handleSupSubscript(e){var r=this.fetch(),n=r.text;this.consume(),this.consumeSpaces();var i=this.parseGroup(e);if(!i)throw new gt("Expected group after '"+n+"'",r);return i}formatUnsupportedCmd(e){for(var r=[],n=0;n<e.length;n++)r.push({type:"textord",mode:"text",text:e[n]});var i={type:"text",mode:this.mode,body:r},a={type:"color",mode:this.mode,color:this.settings.errorColor,body:[i]};return a}parseAtom(e){var r=this.parseGroup("atom",e);if(this.mode==="text")return r;for(var n,i;;){this.consumeSpaces();var a=this.fetch();if(a.text==="\\limits"||a.text==="\\nolimits"){if(r&&r.type==="op"){var s=a.text==="\\limits";r.limits=s,r.alwaysHandleSupSub=!0}else if(r&&r.type==="operatorname")r.alwaysHandleSupSub&&(r.limits=a.text==="\\limits");else throw new gt("Limit controls must follow a math operator",a);this.consume()}else if(a.text==="^"){if(n)throw new gt("Double superscript",a);n=this.handleSupSubscript("superscript")}else if(a.text==="_"){if(i)throw new gt("Double subscript",a);i=this.handleSupSubscript("subscript")}else if(a.text==="'"){if(n)throw new gt("Double superscript",a);var l={type:"textord",mode:this.mode,text:"\\prime"},u=[l];for(this.consume();this.fetch().text==="'";)u.push(l),this.consume();this.fetch().text==="^"&&u.push(this.handleSupSubscript("superscript")),n={type:"ordgroup",mode:this.mode,body:u}}else if(l3[a.text]){var h=Pz.test(a.text),f=[];for(f.push(new So(l3[a.text])),this.consume();;){var d=this.fetch().text;if(!l3[d]||Pz.test(d)!==h)break;f.unshift(new So(l3[d])),this.consume()}var p=this.subparse(f);h?i={type:"ordgroup",mode:"math",body:p}:n={type:"ordgroup",mode:"math",body:p}}else break}return n||i?{type:"supsub",mode:this.mode,base:r,sup:n,sub:i}:r}parseFunction(e,r){var n=this.fetch(),i=n.text,a=hh[i];if(!a)return null;if(this.consume(),r&&r!=="atom"&&!a.allowedInArgument)throw new gt("Got function '"+i+"' with no arguments"+(r?" as "+r:""),n);if(this.mode==="text"&&!a.allowedInText)throw new gt("Can't use function '"+i+"' in text mode",n);if(this.mode==="math"&&a.allowedInMath===!1)throw new gt("Can't use function '"+i+"' in math mode",n);var{args:s,optArgs:l}=this.parseArguments(i,a);return this.callFunction(i,s,l,n,e)}callFunction(e,r,n,i,a){var s={funcName:e,parser:this,token:i,breakOnTokenText:a},l=hh[e];if(l&&l.handler)return l.handler(s,r,n);throw new gt("No function handler for "+e)}parseArguments(e,r){var n=r.numArgs+r.numOptionalArgs;if(n===0)return{args:[],optArgs:[]};for(var i=[],a=[],s=0;s<n;s++){var l=r.argTypes&&r.argTypes[s],u=s<r.numOptionalArgs;(r.primitive&&l==null||r.type==="sqrt"&&s===1&&a[0]==null)&&(l="primitive");var h=this.parseGroupOfType("argument to '"+e+"'",l,u);if(u)a.push(h);else if(h!=null)i.push(h);else throw new gt("Null argument, please report this as a bug")}return{args:i,optArgs:a}}parseGroupOfType(e,r,n){switch(r){case"color":return this.parseColorGroup(n);case"size":return this.parseSizeGroup(n);case"url":return this.parseUrlGroup(n);case"math":case"text":return this.parseArgumentGroup(n,r);case"hbox":{var i=this.parseArgumentGroup(n,"text");return i!=null?{type:"styling",mode:i.mode,body:[i],style:"text"}:null}case"raw":{var a=this.parseStringGroup("raw",n);return a!=null?{type:"raw",mode:"text",string:a.text}:null}case"primitive":{if(n)throw new gt("A primitive argument cannot be optional");var s=this.parseGroup(e);if(s==null)throw new gt("Expected group as "+e,this.fetch());return s}case"original":case null:case void 0:return this.parseArgumentGroup(n);default:throw new gt("Unknown group type as "+e,this.fetch())}}consumeSpaces(){for(;this.fetch().text===" ";)this.consume()}parseStringGroup(e,r){var n=this.gullet.scanArgument(r);if(n==null)return null;for(var i="",a;(a=this.fetch()).text!=="EOF";)i+=a.text,this.consume();return this.consume(),n.text=i,n}parseRegexGroup(e,r){for(var n=this.fetch(),i=n,a="",s;(s=this.fetch()).text!=="EOF"&&e.test(a+s.text);)i=s,a+=i.text,this.consume();if(a==="")throw new gt("Invalid "+r+": '"+n.text+"'",n);return n.range(i,a)}parseColorGroup(e){var r=this.parseStringGroup("color",e);if(r==null)return null;var n=/^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(r.text);if(!n)throw new gt("Invalid color: '"+r.text+"'",r);var i=n[0];return/^[0-9a-f]{6}$/i.test(i)&&(i="#"+i),{type:"color-token",mode:this.mode,color:i}}parseSizeGroup(e){var r,n=!1;if(this.gullet.consumeSpaces(),!e&&this.gullet.future().text!=="{"?r=this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/,"size"):r=this.parseStringGroup("size",e),!r)return null;!e&&r.text.length===0&&(r.text="0pt",n=!0);var i=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(r.text);if(!i)throw new gt("Invalid size: '"+r.text+"'",r);var a={number:+(i[1]+i[2]),unit:i[3]};if(!zz(a))throw new gt("Invalid unit: '"+a.unit+"'",r);return{type:"size",mode:this.mode,value:a,isBlank:n}}parseUrlGroup(e){this.gullet.lexer.setCatcode("%",13),this.gullet.lexer.setCatcode("~",12);var r=this.parseStringGroup("url",e);if(this.gullet.lexer.setCatcode("%",14),this.gullet.lexer.setCatcode("~",13),r==null)return null;var n=r.text.replace(/\\([#$%&~_^{}])/g,"$1");return{type:"url",mode:this.mode,url:n}}parseArgumentGroup(e,r){var n=this.gullet.scanArgument(e);if(n==null)return null;var i=this.mode;r&&this.switchMode(r),this.gullet.beginGroup();var a=this.parseExpression(!1,"EOF");this.expect("EOF"),this.gullet.endGroup();var s={type:"ordgroup",mode:this.mode,loc:n.loc,body:a};return r&&this.switchMode(i),s}parseGroup(e,r){var n=this.fetch(),i=n.text,a;if(i==="{"||i==="\\begingroup"){this.consume();var s=i==="{"?"}":"\\endgroup";this.gullet.beginGroup();var l=this.parseExpression(!1,s),u=this.fetch();this.expect(s),this.gullet.endGroup(),a={type:"ordgroup",mode:this.mode,loc:Xs.range(n,u),body:l,semisimple:i==="\\begingroup"||void 0}}else if(a=this.parseFunction(r,e)||this.parseSymbol(),a==null&&i[0]==="\\"&&!LG.hasOwnProperty(i)){if(this.settings.throwOnError)throw new gt("Undefined control sequence: "+i,n);a=this.formatUnsupportedCmd(i),this.consume()}return a}formLigatures(e){for(var r=e.length-1,n=0;n<r;++n){var i=e[n],a=i.text;a==="-"&&e[n+1].text==="-"&&(n+1<r&&e[n+2].text==="-"?(e.splice(n,3,{type:"textord",mode:"text",loc:Xs.range(i,e[n+2]),text:"---"}),r-=2):(e.splice(n,2,{type:"textord",mode:"text",loc:Xs.range(i,e[n+1]),text:"--"}),r-=1)),(a==="'"||a==="`")&&e[n+1].text===a&&(e.splice(n,2,{type:"textord",mode:"text",loc:Xs.range(i,e[n+1]),text:a+a}),r-=1)}}parseSymbol(){var e=this.fetch(),r=e.text;if(/^\\verb[^a-zA-Z]/.test(r)){this.consume();var n=r.slice(5),i=n.charAt(0)==="*";if(i&&(n=n.slice(1)),n.length<2||n.charAt(0)!==n.slice(-1))throw new gt(`\\verb assertion failed --
275 + please report what input caused this bug`);return n=n.slice(1,-1),{type:"verb",mode:"text",body:n,star:i}}Bz.hasOwnProperty(r[0])&&!An[this.mode][r[0]]&&(this.settings.strict&&this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Accented Unicode text character "'+r[0]+'" used in math mode',e),r=Bz[r[0]]+r.slice(1));var a=z4e.exec(r);a&&(r=r.substring(0,a.index),r==="i"?r="\u0131":r==="j"&&(r="\u0237"));var s;if(An[this.mode][r]){this.settings.strict&&this.mode==="math"&&C7.indexOf(r)>=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+r[0]+'" used in math mode',e);var l=An[this.mode][r].group,u=Xs.range(e),h;if(Mbe.hasOwnProperty(l)){var f=l;h={type:"atom",mode:this.mode,family:f,loc:u,text:r}}else h={type:l,mode:this.mode,loc:u,text:r};s=h}else if(r.charCodeAt(0)>=128)this.settings.strict&&($z(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),e)),s={type:"textord",mode:"text",loc:Xs.range(e),text:r};else return null;if(this.consume(),a)for(var d=0;d<a[0].length;d++){var p=a[0][d];if(!T7[p])throw new gt("Unknown accent ' "+p+"'",e);var m=T7[p][this.mode]||T7[p].text;if(!m)throw new gt("Accent "+p+" unsupported in "+this.mode+" mode",e);s={type:"accent",mode:this.mode,loc:Xs.range(e),label:m,isStretchy:!1,isShifty:!0,base:s}}return s}};v3.endOfExpression=["}","\\endgroup","\\end","\\right","&"];Q7=o(function(e,r){if(!(typeof e=="string"||e instanceof String))throw new TypeError("KaTeX can only parse string typed expression");var n=new v3(e,r);delete n.gullet.macros.current["\\df@tag"];var i=n.parse();if(delete n.gullet.macros.current["\\current@color"],delete n.gullet.macros.current["\\color"],n.gullet.macros.get("\\df@tag")){if(!r.displayMode)throw new gt("\\tag works only in display equations");i=[{type:"tag",mode:"text",body:i,tag:n.subparse([new So("\\df@tag")])}]}return i},"parseTree"),RG=o(function(e,r,n){r.textContent="";var i=Z7(e,n).toNode();r.appendChild(i)},"render");typeof document<"u"&&document.compatMode!=="CSS1Compat"&&(typeof console<"u"&&console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype."),RG=o(function(){throw new gt("KaTeX doesn't work in quirks mode.")},"render"));U4e=o(function(e,r){var n=Z7(e,r).toMarkup();return n},"renderToString"),H4e=o(function(e,r){var n=new zy(r);return Q7(e,n)},"generateParseTree"),NG=o(function(e,r,n){if(n.throwOnError||!(e instanceof gt))throw e;var i=Be.makeSpan(["katex-error"],[new Ts(r)]);return i.setAttribute("title",e.toString()),i.setAttribute("style","color:"+n.errorColor),i},"renderError"),Z7=o(function(e,r){var n=new zy(r);try{var i=Q7(e,n);return t4e(i,e,n)}catch(a){return NG(a,e,n)}},"renderToDomTree"),W4e=o(function(e,r){var n=new zy(r);try{var i=Q7(e,n);return r4e(i,e,n)}catch(a){return NG(a,e,n)}},"renderToHTMLTree"),q4e={version:"0.16.11",render:RG,renderToString:U4e,ParseError:gt,SETTINGS_SCHEMA:c3,__parse:H4e,__renderToDomTree:Z7,__renderToHTMLTree:W4e,__setFontMetrics:Abe,__defineSymbol:G,__defineFunction:Nt,__defineMacro:fe,__domTree:{Span:td,Anchor:Vy,SymbolNode:Ts,SvgNode:ll,PathNode:Kl,LineNode:Uy}}});function j4e(){let t="data-temp-href-target";ch.addHook("beforeSanitizeAttributes",e=>{e instanceof Element&&e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")??"")}),ch.addHook("afterSanitizeAttributes",e=>{e instanceof Element&&e.tagName==="A"&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)??""),e.removeAttribute(t),e.getAttribute("target")==="_blank"&&e.setAttribute("rel","noopener"))})}var nd,Y4e,X4e,BG,OG,Tr,K4e,Q4e,Z4e,J4e,FG,e3e,fr,t3e,r3e,ec,J7,n3e,i3e,PG,eA,pi,id,mh,Ze,gr=N(()=>{"use strict";u7();nd=/<br\s*\/?>/gi,Y4e=o(t=>t?FG(t).replace(/\\n/g,"#br#").split("#br#"):[""],"getRows"),X4e=(()=>{let t=!1;return()=>{t||(j4e(),t=!0)}})();o(j4e,"setupDompurifyHooks");BG=o(t=>(X4e(),ch.sanitize(t)),"removeScript"),OG=o((t,e)=>{if(e.flowchart?.htmlLabels!==!1){let r=e.securityLevel;r==="antiscript"||r==="strict"?t=BG(t):r!=="loose"&&(t=FG(t),t=t.replace(/</g,"&lt;").replace(/>/g,"&gt;"),t=t.replace(/=/g,"&equals;"),t=J4e(t))}return t},"sanitizeMore"),Tr=o((t,e)=>t&&(e.dompurifyConfig?t=ch.sanitize(OG(t,e),e.dompurifyConfig).toString():t=ch.sanitize(OG(t,e),{FORBID_TAGS:["style"]}).toString(),t),"sanitizeText"),K4e=o((t,e)=>typeof t=="string"?Tr(t,e):t.flat().map(r=>Tr(r,e)),"sanitizeTextOrArray"),Q4e=o(t=>nd.test(t),"hasBreaks"),Z4e=o(t=>t.split(nd),"splitBreaks"),J4e=o(t=>t.replace(/#br#/g,"<br/>"),"placeholderToBreak"),FG=o(t=>t.replace(nd,"#br#"),"breakToPlaceholder"),e3e=o(t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=e.replaceAll(/\(/g,"\\("),e=e.replaceAll(/\)/g,"\\)")),e},"getUrl"),fr=o(t=>!(t===!1||["false","null","0"].includes(String(t).trim().toLowerCase())),"evaluate"),t3e=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.max(...e)},"getMax"),r3e=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.min(...e)},"getMin"),ec=o(function(t){let e=t.split(/(,)/),r=[];for(let n=0;n<e.length;n++){let i=e[n];if(i===","&&n>0&&n+1<e.length){let a=e[n-1],s=e[n+1];n3e(a,s)&&(i=a+","+s,n++,r.pop())}r.push(i3e(i))}return r.join("")},"parseGenericTypes"),J7=o((t,e)=>Math.max(0,t.split(e).length-1),"countOccurrence"),n3e=o((t,e)=>{let r=J7(t,"~"),n=J7(e,"~");return r===1&&n===1},"shouldCombineSets"),i3e=o(t=>{let e=J7(t,"~"),r=!1;if(e<=1)return t;e%2!==0&&t.startsWith("~")&&(t=t.substring(1),r=!0);let n=[...t],i=n.indexOf("~"),a=n.lastIndexOf("~");for(;i!==-1&&a!==-1&&i!==a;)n[i]="<",n[a]=">",i=n.indexOf("~"),a=n.lastIndexOf("~");return r&&n.unshift("~"),n.join("")},"processSet"),PG=o(()=>window.MathMLElement!==void 0,"isMathMLSupported"),eA=/\$\$(.*)\$\$/g,pi=o(t=>(t.match(eA)?.length??0)>0,"hasKatex"),id=o(async(t,e)=>{t=await mh(t,e);let r=document.createElement("div");r.innerHTML=t,r.id="katex-temp",r.style.visibility="hidden",r.style.position="absolute",r.style.top="0",document.querySelector("body")?.insertAdjacentElement("beforeend",r);let i={width:r.clientWidth,height:r.clientHeight};return r.remove(),i},"calculateMathMLDimensions"),mh=o(async(t,e)=>{if(!pi(t))return t;if(!(PG()||e.legacyMathML||e.forceLegacyMathML))return t.replace(eA,"MathML is unsupported in this environment.");let{default:r}=await Promise.resolve().then(()=>(IG(),MG)),n=e.forceLegacyMathML||!PG()&&e.legacyMathML?"htmlAndMathml":"mathml";return t.split(nd).map(i=>pi(i)?`<div style="display: flex; align-items: center; justify-content: center; white-space: nowrap;">${i}</div>`:`<div>${i}</div>`).join("").replace(eA,(i,a)=>r.renderToString(a,{throwOnError:!0,displayMode:!0,output:n}).replace(/\n/g," ").replace(/<annotation.*<\/annotation>/g,""))},"renderKatex"),Ze={getRows:Y4e,sanitizeText:Tr,sanitizeTextOrArray:K4e,hasBreaks:Q4e,splitBreaks:Z4e,lineBreakRegex:nd,removeScript:BG,getUrl:e3e,evaluate:fr,getMax:t3e,getMin:r3e}});var a3e,s3e,vn,Ao,Ei=N(()=>{"use strict";vt();a3e=o(function(t,e){for(let r of e)t.attr(r[0],r[1])},"d3Attrs"),s3e=o(function(t,e,r){let n=new Map;return r?(n.set("width","100%"),n.set("style",`max-width: ${e}px;`)):(n.set("height",t),n.set("width",e)),n},"calculateSvgSizeAttrs"),vn=o(function(t,e,r,n){let i=s3e(e,r,n);a3e(t,i)},"configureSvgSize"),Ao=o(function(t,e,r,n){let i=e.node().getBBox(),a=i.width,s=i.height;Y.info(`SVG bounds: ${a}x${s}`,i);let l=0,u=0;Y.info(`Graph bounds: ${l}x${u}`,t),l=a+r*2,u=s+r*2,Y.info(`Calculated bounds: ${l}x${u}`),vn(e,u,l,n);let h=`${i.x-r} ${i.y-r} ${i.width+2*r} ${i.height+2*r}`;e.attr("viewBox",h)},"setupGraphViewbox")});var S3,o3e,$G,zG,tA=N(()=>{"use strict";vt();S3={},o3e=o((t,e,r)=>{let n="";return t in S3&&S3[t]?n=S3[t](r):Y.warn(`No theme found for ${t}`),` & {
276 + font-family: ${r.fontFamily};
277 + font-size: ${r.fontSize};
278 + fill: ${r.textColor}
279 + }
280 + @keyframes edge-animation-frame {
281 + from {
282 + stroke-dashoffset: 0;
283 + }
284 + }
285 + @keyframes dash {
286 + to {
287 + stroke-dashoffset: 0;
288 + }
289 + }
290 + & .edge-animation-slow {
291 + stroke-dasharray: 9,5 !important;
292 + stroke-dashoffset: 900;
293 + animation: dash 50s linear infinite;
294 + stroke-linecap: round;
295 + }
296 + & .edge-animation-fast {
297 + stroke-dasharray: 9,5 !important;
298 + stroke-dashoffset: 900;
299 + animation: dash 20s linear infinite;
300 + stroke-linecap: round;
301 + }
302 + /* Classes common for multiple diagrams */
303 +
304 + & .error-icon {
305 + fill: ${r.errorBkgColor};
306 + }
307 + & .error-text {
308 + fill: ${r.errorTextColor};
309 + stroke: ${r.errorTextColor};
310 + }
311 +
312 + & .edge-thickness-normal {
313 + stroke-width: 1px;
314 + }
315 + & .edge-thickness-thick {
316 + stroke-width: 3.5px
317 + }
318 + & .edge-pattern-solid {
319 + stroke-dasharray: 0;
320 + }
321 + & .edge-thickness-invisible {
322 + stroke-width: 0;
323 + fill: none;
324 + }
325 + & .edge-pattern-dashed{
326 + stroke-dasharray: 3;
327 + }
328 + .edge-pattern-dotted {
329 + stroke-dasharray: 2;
330 + }
331 +
332 + & .marker {
333 + fill: ${r.lineColor};
334 + stroke: ${r.lineColor};
335 + }
336 + & .marker.cross {
337 + stroke: ${r.lineColor};
338 + }
339 +
340 + & svg {
341 + font-family: ${r.fontFamily};
342 + font-size: ${r.fontSize};
343 + }
344 + & p {
345 + margin: 0
346 + }
347 +
348 + ${n}
349 +
350 + ${e}
351 +`},"getStyles"),$G=o((t,e)=>{e!==void 0&&(S3[t]=e)},"addStylesForDiagram"),zG=o3e});var qy={};hr(qy,{clear:()=>Ar,getAccDescription:()=>Mr,getAccTitle:()=>Rr,getDiagramTitle:()=>Ir,setAccDescription:()=>Nr,setAccTitle:()=>Lr,setDiagramTitle:()=>$r});var rA,nA,iA,aA,Ar,Lr,Rr,Nr,Mr,$r,Ir,mi=N(()=>{"use strict";gr();ji();rA="",nA="",iA="",aA=o(t=>Tr(t,cr()),"sanitizeText"),Ar=o(()=>{rA="",iA="",nA=""},"clear"),Lr=o(t=>{rA=aA(t).replace(/^\s+/g,"")},"setAccTitle"),Rr=o(()=>rA,"getAccTitle"),Nr=o(t=>{iA=aA(t).replace(/\n\s+/g,`
352 +`)},"setAccDescription"),Mr=o(()=>iA,"getAccDescription"),$r=o(t=>{nA=aA(t)},"setDiagramTitle"),Ir=o(()=>nA,"getDiagramTitle")});var GG,l3e,me,Yy,A3,Xy,oA,c3e,C3,ad,jy,sA,zt=N(()=>{"use strict";Xf();vt();ji();gr();Ei();tA();mi();GG=Y,l3e=wy,me=cr,Yy=X4,A3=lh,Xy=o(t=>Tr(t,me()),"sanitizeText"),oA=Ao,c3e=o(()=>qy,"getCommonDb"),C3={},ad=o((t,e,r)=>{C3[t]&&GG.warn(`Diagram with id ${t} already registered. Overwriting.`),C3[t]=e,r&&FC(t,r),$G(t,e.styles),e.injectUtils?.(GG,l3e,me,Xy,oA,c3e(),()=>{})},"registerDiagram"),jy=o(t=>{if(t in C3)return C3[t];throw new sA(t)},"getDiagram"),sA=class extends Error{static{o(this,"DiagramNotFoundError")}constructor(e){super(`Diagram ${e} not found.`)}}});var ul,gh,Ja,cl,tc,Ky,lA,cA,_3,D3,VG,u3e,h3e,f3e,d3e,p3e,m3e,g3e,y3e,v3e,x3e,b3e,w3e,T3e,k3e,E3e,S3e,C3e,UG,A3e,_3e,HG,D3e,L3e,R3e,N3e,yh,M3e,I3e,O3e,P3e,B3e,Qy,uA=N(()=>{"use strict";zt();gr();mi();ul=[],gh=[""],Ja="global",cl="",tc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],Ky=[],lA="",cA=!1,_3=4,D3=2,u3e=o(function(){return VG},"getC4Type"),h3e=o(function(t){VG=Tr(t,me())},"setC4Type"),f3e=o(function(t,e,r,n,i,a,s,l,u){if(t==null||e===void 0||e===null||r===void 0||r===null||n===void 0||n===null)return;let h={},f=Ky.find(d=>d.from===e&&d.to===r);if(f?h=f:Ky.push(h),h.type=t,h.from=e,h.to=r,h.label={text:n},i==null)h.techn={text:""};else if(typeof i=="object"){let[d,p]=Object.entries(i)[0];h[d]={text:p}}else h.techn={text:i};if(a==null)h.descr={text:""};else if(typeof a=="object"){let[d,p]=Object.entries(a)[0];h[d]={text:p}}else h.descr={text:a};if(typeof s=="object"){let[d,p]=Object.entries(s)[0];h[d]=p}else h.sprite=s;if(typeof l=="object"){let[d,p]=Object.entries(l)[0];h[d]=p}else h.tags=l;if(typeof u=="object"){let[d,p]=Object.entries(u)[0];h[d]=p}else h.link=u;h.wrap=yh()},"addRel"),d3e=o(function(t,e,r,n,i,a,s){if(e===null||r===null)return;let l={},u=ul.find(h=>h.alias===e);if(u&&e===u.alias?l=u:(l.alias=e,ul.push(l)),r==null?l.label={text:""}:l.label={text:r},n==null)l.descr={text:""};else if(typeof n=="object"){let[h,f]=Object.entries(n)[0];l[h]={text:f}}else l.descr={text:n};if(typeof i=="object"){let[h,f]=Object.entries(i)[0];l[h]=f}else l.sprite=i;if(typeof a=="object"){let[h,f]=Object.entries(a)[0];l[h]=f}else l.tags=a;if(typeof s=="object"){let[h,f]=Object.entries(s)[0];l[h]=f}else l.link=s;l.typeC4Shape={text:t},l.parentBoundary=Ja,l.wrap=yh()},"addPersonOrSystem"),p3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=ul.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,ul.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=yh(),u.typeC4Shape={text:t},u.parentBoundary=Ja},"addContainer"),m3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=ul.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,ul.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=yh(),u.typeC4Shape={text:t},u.parentBoundary=Ja},"addComponent"),g3e=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=tc.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,tc.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"system"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=Ja,a.wrap=yh(),cl=Ja,Ja=t,gh.push(cl)},"addPersonOrSystemBoundary"),y3e=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=tc.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,tc.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"container"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=Ja,a.wrap=yh(),cl=Ja,Ja=t,gh.push(cl)},"addContainerBoundary"),v3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=tc.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,tc.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.type={text:"node"};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.type={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.nodeType=t,u.parentBoundary=Ja,u.wrap=yh(),cl=Ja,Ja=e,gh.push(cl)},"addDeploymentNode"),x3e=o(function(){Ja=cl,gh.pop(),cl=gh.pop(),gh.push(cl)},"popBoundaryParseStack"),b3e=o(function(t,e,r,n,i,a,s,l,u,h,f){let d=ul.find(p=>p.alias===e);if(!(d===void 0&&(d=tc.find(p=>p.alias===e),d===void 0))){if(r!=null)if(typeof r=="object"){let[p,m]=Object.entries(r)[0];d[p]=m}else d.bgColor=r;if(n!=null)if(typeof n=="object"){let[p,m]=Object.entries(n)[0];d[p]=m}else d.fontColor=n;if(i!=null)if(typeof i=="object"){let[p,m]=Object.entries(i)[0];d[p]=m}else d.borderColor=i;if(a!=null)if(typeof a=="object"){let[p,m]=Object.entries(a)[0];d[p]=m}else d.shadowing=a;if(s!=null)if(typeof s=="object"){let[p,m]=Object.entries(s)[0];d[p]=m}else d.shape=s;if(l!=null)if(typeof l=="object"){let[p,m]=Object.entries(l)[0];d[p]=m}else d.sprite=l;if(u!=null)if(typeof u=="object"){let[p,m]=Object.entries(u)[0];d[p]=m}else d.techn=u;if(h!=null)if(typeof h=="object"){let[p,m]=Object.entries(h)[0];d[p]=m}else d.legendText=h;if(f!=null)if(typeof f=="object"){let[p,m]=Object.entries(f)[0];d[p]=m}else d.legendSprite=f}},"updateElStyle"),w3e=o(function(t,e,r,n,i,a,s){let l=Ky.find(u=>u.from===e&&u.to===r);if(l!==void 0){if(n!=null)if(typeof n=="object"){let[u,h]=Object.entries(n)[0];l[u]=h}else l.textColor=n;if(i!=null)if(typeof i=="object"){let[u,h]=Object.entries(i)[0];l[u]=h}else l.lineColor=i;if(a!=null)if(typeof a=="object"){let[u,h]=Object.entries(a)[0];l[u]=parseInt(h)}else l.offsetX=parseInt(a);if(s!=null)if(typeof s=="object"){let[u,h]=Object.entries(s)[0];l[u]=parseInt(h)}else l.offsetY=parseInt(s)}},"updateRelStyle"),T3e=o(function(t,e,r){let n=_3,i=D3;if(typeof e=="object"){let a=Object.values(e)[0];n=parseInt(a)}else n=parseInt(e);if(typeof r=="object"){let a=Object.values(r)[0];i=parseInt(a)}else i=parseInt(r);n>=1&&(_3=n),i>=1&&(D3=i)},"updateLayoutConfig"),k3e=o(function(){return _3},"getC4ShapeInRow"),E3e=o(function(){return D3},"getC4BoundaryInRow"),S3e=o(function(){return Ja},"getCurrentBoundaryParse"),C3e=o(function(){return cl},"getParentBoundaryParse"),UG=o(function(t){return t==null?ul:ul.filter(e=>e.parentBoundary===t)},"getC4ShapeArray"),A3e=o(function(t){return ul.find(e=>e.alias===t)},"getC4Shape"),_3e=o(function(t){return Object.keys(UG(t))},"getC4ShapeKeys"),HG=o(function(t){return t==null?tc:tc.filter(e=>e.parentBoundary===t)},"getBoundaries"),D3e=HG,L3e=o(function(){return Ky},"getRels"),R3e=o(function(){return lA},"getTitle"),N3e=o(function(t){cA=t},"setWrap"),yh=o(function(){return cA},"autoWrap"),M3e=o(function(){ul=[],tc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],cl="",Ja="global",gh=[""],Ky=[],gh=[""],lA="",cA=!1,_3=4,D3=2},"clear"),I3e={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},O3e={FILLED:0,OPEN:1},P3e={LEFTOF:0,RIGHTOF:1,OVER:2},B3e=o(function(t){lA=Tr(t,me())},"setTitle"),Qy={addPersonOrSystem:d3e,addPersonOrSystemBoundary:g3e,addContainer:p3e,addContainerBoundary:y3e,addComponent:m3e,addDeploymentNode:v3e,popBoundaryParseStack:x3e,addRel:f3e,updateElStyle:b3e,updateRelStyle:w3e,updateLayoutConfig:T3e,autoWrap:yh,setWrap:N3e,getC4ShapeArray:UG,getC4Shape:A3e,getC4ShapeKeys:_3e,getBoundaries:HG,getBoundarys:D3e,getCurrentBoundaryParse:S3e,getParentBoundaryParse:C3e,getRels:L3e,getTitle:R3e,getC4Type:u3e,getC4ShapeInRow:k3e,getC4BoundaryInRow:E3e,setAccTitle:Lr,getAccTitle:Rr,getAccDescription:Mr,setAccDescription:Nr,getConfig:o(()=>me().c4,"getConfig"),clear:M3e,LINETYPE:I3e,ARROWTYPE:O3e,PLACEMENT:P3e,setTitle:B3e,setC4Type:h3e}});function sd(t,e){return t==null||e==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}var hA=N(()=>{"use strict";o(sd,"ascending")});function fA(t,e){return t==null||e==null?NaN:e<t?-1:e>t?1:e>=t?0:NaN}var WG=N(()=>{"use strict";o(fA,"descending")});function od(t){let e,r,n;t.length!==2?(e=sd,r=o((l,u)=>sd(t(l),u),"compare2"),n=o((l,u)=>t(l)-u,"delta")):(e=t===sd||t===fA?t:F3e,r=t,n=t);function i(l,u,h=0,f=l.length){if(h<f){if(e(u,u)!==0)return f;do{let d=h+f>>>1;r(l[d],u)<0?h=d+1:f=d}while(h<f)}return h}o(i,"left");function a(l,u,h=0,f=l.length){if(h<f){if(e(u,u)!==0)return f;do{let d=h+f>>>1;r(l[d],u)<=0?h=d+1:f=d}while(h<f)}return h}o(a,"right");function s(l,u,h=0,f=l.length){let d=i(l,u,h,f-1);return d>h&&n(l[d-1],u)>-n(l[d],u)?d-1:d}return o(s,"center"),{left:i,center:s,right:a}}function F3e(){return 0}var dA=N(()=>{"use strict";hA();WG();o(od,"bisector");o(F3e,"zero")});function pA(t){return t===null?NaN:+t}var qG=N(()=>{"use strict";o(pA,"number")});var YG,XG,$3e,z3e,mA,jG=N(()=>{"use strict";hA();dA();qG();YG=od(sd),XG=YG.right,$3e=YG.left,z3e=od(pA).center,mA=XG});function KG({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):r}function G3e({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):(t.set(n,r),r)}function V3e({_intern:t,_key:e},r){let n=e(r);return t.has(n)&&(r=t.get(n),t.delete(n)),r}function U3e(t){return t!==null&&typeof t=="object"?t.valueOf():t}var g0,QG=N(()=>{"use strict";g0=class extends Map{static{o(this,"InternMap")}constructor(e,r=U3e){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),e!=null)for(let[n,i]of e)this.set(n,i)}get(e){return super.get(KG(this,e))}has(e){return super.has(KG(this,e))}set(e,r){return super.set(G3e(this,e),r)}delete(e){return super.delete(V3e(this,e))}};o(KG,"intern_get");o(G3e,"intern_set");o(V3e,"intern_delete");o(U3e,"keyof")});function L3(t,e,r){let n=(e-t)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),s=a>=H3e?10:a>=W3e?5:a>=q3e?2:1,l,u,h;return i<0?(h=Math.pow(10,-i)/s,l=Math.round(t*h),u=Math.round(e*h),l/h<t&&++l,u/h>e&&--u,h=-h):(h=Math.pow(10,i)*s,l=Math.round(t/h),u=Math.round(e/h),l*h<t&&++l,u*h>e&&--u),u<l&&.5<=r&&r<2?L3(t,e,r*2):[l,u,h]}function R3(t,e,r){if(e=+e,t=+t,r=+r,!(r>0))return[];if(t===e)return[t];let n=e<t,[i,a,s]=n?L3(e,t,r):L3(t,e,r);if(!(a>=i))return[];let l=a-i+1,u=new Array(l);if(n)if(s<0)for(let h=0;h<l;++h)u[h]=(a-h)/-s;else for(let h=0;h<l;++h)u[h]=(a-h)*s;else if(s<0)for(let h=0;h<l;++h)u[h]=(i+h)/-s;else for(let h=0;h<l;++h)u[h]=(i+h)*s;return u}function Zy(t,e,r){return e=+e,t=+t,r=+r,L3(t,e,r)[2]}function y0(t,e,r){e=+e,t=+t,r=+r;let n=e<t,i=n?Zy(e,t,r):Zy(t,e,r);return(n?-1:1)*(i<0?1/-i:i)}var H3e,W3e,q3e,ZG=N(()=>{"use strict";H3e=Math.sqrt(50),W3e=Math.sqrt(10),q3e=Math.sqrt(2);o(L3,"tickSpec");o(R3,"ticks");o(Zy,"tickIncrement");o(y0,"tickStep")});function N3(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r<n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r<i||r===void 0&&i>=i)&&(r=i)}return r}var JG=N(()=>{"use strict";o(N3,"max")});function M3(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var eV=N(()=>{"use strict";o(M3,"min")});function I3(t,e,r){t=+t,e=+e,r=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((e-t)/r))|0,a=new Array(i);++n<i;)a[n]=t+n*r;return a}var tV=N(()=>{"use strict";o(I3,"range")});var vh=N(()=>{"use strict";jG();dA();JG();eV();tV();ZG();QG()});function gA(t){return t}var rV=N(()=>{"use strict";o(gA,"default")});function Y3e(t){return"translate("+t+",0)"}function X3e(t){return"translate(0,"+t+")"}function j3e(t){return e=>+t(e)}function K3e(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function Q3e(){return!this.__axis}function iV(t,e){var r=[],n=null,i=null,a=6,s=6,l=3,u=typeof window<"u"&&window.devicePixelRatio>1?0:.5,h=t===P3||t===O3?-1:1,f=t===O3||t===yA?"x":"y",d=t===P3||t===vA?Y3e:X3e;function p(m){var g=n??(e.ticks?e.ticks.apply(e,r):e.domain()),y=i??(e.tickFormat?e.tickFormat.apply(e,r):gA),v=Math.max(a,0)+l,x=e.range(),b=+x[0]+u,w=+x[x.length-1]+u,C=(e.bandwidth?K3e:j3e)(e.copy(),u),T=m.selection?m.selection():m,E=T.selectAll(".domain").data([null]),A=T.selectAll(".tick").data(g,e).order(),S=A.exit(),_=A.enter().append("g").attr("class","tick"),I=A.select("line"),D=A.select("text");E=E.merge(E.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),A=A.merge(_),I=I.merge(_.append("line").attr("stroke","currentColor").attr(f+"2",h*a)),D=D.merge(_.append("text").attr("fill","currentColor").attr(f,h*v).attr("dy",t===P3?"0em":t===vA?"0.71em":"0.32em")),m!==T&&(E=E.transition(m),A=A.transition(m),I=I.transition(m),D=D.transition(m),S=S.transition(m).attr("opacity",nV).attr("transform",function(k){return isFinite(k=C(k))?d(k+u):this.getAttribute("transform")}),_.attr("opacity",nV).attr("transform",function(k){var L=this.parentNode.__axis;return d((L&&isFinite(L=L(k))?L:C(k))+u)})),S.remove(),E.attr("d",t===O3||t===yA?s?"M"+h*s+","+b+"H"+u+"V"+w+"H"+h*s:"M"+u+","+b+"V"+w:s?"M"+b+","+h*s+"V"+u+"H"+w+"V"+h*s:"M"+b+","+u+"H"+w),A.attr("opacity",1).attr("transform",function(k){return d(C(k)+u)}),I.attr(f+"2",h*a),D.attr(f,h*v).text(y),T.filter(Q3e).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===yA?"start":t===O3?"end":"middle"),T.each(function(){this.__axis=C})}return o(p,"axis"),p.scale=function(m){return arguments.length?(e=m,p):e},p.ticks=function(){return r=Array.from(arguments),p},p.tickArguments=function(m){return arguments.length?(r=m==null?[]:Array.from(m),p):r.slice()},p.tickValues=function(m){return arguments.length?(n=m==null?null:Array.from(m),p):n&&n.slice()},p.tickFormat=function(m){return arguments.length?(i=m,p):i},p.tickSize=function(m){return arguments.length?(a=s=+m,p):a},p.tickSizeInner=function(m){return arguments.length?(a=+m,p):a},p.tickSizeOuter=function(m){return arguments.length?(s=+m,p):s},p.tickPadding=function(m){return arguments.length?(l=+m,p):l},p.offset=function(m){return arguments.length?(u=+m,p):u},p}function xA(t){return iV(P3,t)}function bA(t){return iV(vA,t)}var P3,yA,vA,O3,nV,aV=N(()=>{"use strict";rV();P3=1,yA=2,vA=3,O3=4,nV=1e-6;o(Y3e,"translateX");o(X3e,"translateY");o(j3e,"number");o(K3e,"center");o(Q3e,"entering");o(iV,"axis");o(xA,"axisTop");o(bA,"axisBottom")});var sV=N(()=>{"use strict";aV()});function lV(){for(var t=0,e=arguments.length,r={},n;t<e;++t){if(!(n=arguments[t]+"")||n in r||/[\s.]/.test(n))throw new Error("illegal type: "+n);r[n]=[]}return new B3(r)}function B3(t){this._=t}function J3e(t,e){return t.trim().split(/^|\s+/).map(function(r){var n="",i=r.indexOf(".");if(i>=0&&(n=r.slice(i+1),r=r.slice(0,i)),r&&!e.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:n}})}function e5e(t,e){for(var r=0,n=t.length,i;r<n;++r)if((i=t[r]).name===e)return i.value}function oV(t,e,r){for(var n=0,i=t.length;n<i;++n)if(t[n].name===e){t[n]=Z3e,t=t.slice(0,n).concat(t.slice(n+1));break}return r!=null&&t.push({name:e,value:r}),t}var Z3e,wA,cV=N(()=>{"use strict";Z3e={value:o(()=>{},"value")};o(lV,"dispatch");o(B3,"Dispatch");o(J3e,"parseTypenames");B3.prototype=lV.prototype={constructor:B3,on:o(function(t,e){var r=this._,n=J3e(t+"",r),i,a=-1,s=n.length;if(arguments.length<2){for(;++a<s;)if((i=(t=n[a]).type)&&(i=e5e(r[i],t.name)))return i;return}if(e!=null&&typeof e!="function")throw new Error("invalid callback: "+e);for(;++a<s;)if(i=(t=n[a]).type)r[i]=oV(r[i],t.name,e);else if(e==null)for(i in r)r[i]=oV(r[i],t.name,null);return this},"on"),copy:o(function(){var t={},e=this._;for(var r in e)t[r]=e[r].slice();return new B3(t)},"copy"),call:o(function(t,e){if((i=arguments.length-2)>0)for(var r=new Array(i),n=0,i,a;n<i;++n)r[n]=arguments[n+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(a=this._[t],n=0,i=a.length;n<i;++n)a[n].value.apply(e,r)},"call"),apply:o(function(t,e,r){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var n=this._[t],i=0,a=n.length;i<a;++i)n[i].value.apply(e,r)},"apply")};o(e5e,"get");o(oV,"set");wA=lV});var TA=N(()=>{"use strict";cV()});var F3,kA,EA=N(()=>{"use strict";F3="http://www.w3.org/1999/xhtml",kA={svg:"http://www.w3.org/2000/svg",xhtml:F3,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"}});function rc(t){var e=t+="",r=e.indexOf(":");return r>=0&&(e=t.slice(0,r))!=="xmlns"&&(t=t.slice(r+1)),kA.hasOwnProperty(e)?{space:kA[e],local:t}:t}var $3=N(()=>{"use strict";EA();o(rc,"default")});function t5e(t){return function(){var e=this.ownerDocument,r=this.namespaceURI;return r===F3&&e.documentElement.namespaceURI===F3?e.createElement(t):e.createElementNS(r,t)}}function r5e(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function Jy(t){var e=rc(t);return(e.local?r5e:t5e)(e)}var SA=N(()=>{"use strict";$3();EA();o(t5e,"creatorInherit");o(r5e,"creatorFixed");o(Jy,"default")});function n5e(){}function xh(t){return t==null?n5e:function(){return this.querySelector(t)}}var z3=N(()=>{"use strict";o(n5e,"none");o(xh,"default")});function CA(t){typeof t!="function"&&(t=xh(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i<r;++i)for(var a=e[i],s=a.length,l=n[i]=new Array(s),u,h,f=0;f<s;++f)(u=a[f])&&(h=t.call(u,u.__data__,f,a))&&("__data__"in u&&(h.__data__=u.__data__),l[f]=h);return new oi(n,this._parents)}var uV=N(()=>{"use strict";hl();z3();o(CA,"default")});function AA(t){return t==null?[]:Array.isArray(t)?t:Array.from(t)}var hV=N(()=>{"use strict";o(AA,"array")});function i5e(){return[]}function v0(t){return t==null?i5e:function(){return this.querySelectorAll(t)}}var _A=N(()=>{"use strict";o(i5e,"empty");o(v0,"default")});function a5e(t){return function(){return AA(t.apply(this,arguments))}}function DA(t){typeof t=="function"?t=a5e(t):t=v0(t);for(var e=this._groups,r=e.length,n=[],i=[],a=0;a<r;++a)for(var s=e[a],l=s.length,u,h=0;h<l;++h)(u=s[h])&&(n.push(t.call(u,u.__data__,h,s)),i.push(u));return new oi(n,i)}var fV=N(()=>{"use strict";hl();hV();_A();o(a5e,"arrayAll");o(DA,"default")});function x0(t){return function(){return this.matches(t)}}function G3(t){return function(e){return e.matches(t)}}var ev=N(()=>{"use strict";o(x0,"default");o(G3,"childMatcher")});function o5e(t){return function(){return s5e.call(this.children,t)}}function l5e(){return this.firstElementChild}function LA(t){return this.select(t==null?l5e:o5e(typeof t=="function"?t:G3(t)))}var s5e,dV=N(()=>{"use strict";ev();s5e=Array.prototype.find;o(o5e,"childFind");o(l5e,"childFirst");o(LA,"default")});function u5e(){return Array.from(this.children)}function h5e(t){return function(){return c5e.call(this.children,t)}}function RA(t){return this.selectAll(t==null?u5e:h5e(typeof t=="function"?t:G3(t)))}var c5e,pV=N(()=>{"use strict";ev();c5e=Array.prototype.filter;o(u5e,"children");o(h5e,"childrenFilter");o(RA,"default")});function NA(t){typeof t!="function"&&(t=x0(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i<r;++i)for(var a=e[i],s=a.length,l=n[i]=[],u,h=0;h<s;++h)(u=a[h])&&t.call(u,u.__data__,h,a)&&l.push(u);return new oi(n,this._parents)}var mV=N(()=>{"use strict";hl();ev();o(NA,"default")});function tv(t){return new Array(t.length)}var MA=N(()=>{"use strict";o(tv,"default")});function IA(){return new oi(this._enter||this._groups.map(tv),this._parents)}function rv(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}var OA=N(()=>{"use strict";MA();hl();o(IA,"default");o(rv,"EnterNode");rv.prototype={constructor:rv,appendChild:o(function(t){return this._parent.insertBefore(t,this._next)},"appendChild"),insertBefore:o(function(t,e){return this._parent.insertBefore(t,e)},"insertBefore"),querySelector:o(function(t){return this._parent.querySelector(t)},"querySelector"),querySelectorAll:o(function(t){return this._parent.querySelectorAll(t)},"querySelectorAll")}});function PA(t){return function(){return t}}var gV=N(()=>{"use strict";o(PA,"default")});function f5e(t,e,r,n,i,a){for(var s=0,l,u=e.length,h=a.length;s<h;++s)(l=e[s])?(l.__data__=a[s],n[s]=l):r[s]=new rv(t,a[s]);for(;s<u;++s)(l=e[s])&&(i[s]=l)}function d5e(t,e,r,n,i,a,s){var l,u,h=new Map,f=e.length,d=a.length,p=new Array(f),m;for(l=0;l<f;++l)(u=e[l])&&(p[l]=m=s.call(u,u.__data__,l,e)+"",h.has(m)?i[l]=u:h.set(m,u));for(l=0;l<d;++l)m=s.call(t,a[l],l,a)+"",(u=h.get(m))?(n[l]=u,u.__data__=a[l],h.delete(m)):r[l]=new rv(t,a[l]);for(l=0;l<f;++l)(u=e[l])&&h.get(p[l])===u&&(i[l]=u)}function p5e(t){return t.__data__}function BA(t,e){if(!arguments.length)return Array.from(this,p5e);var r=e?d5e:f5e,n=this._parents,i=this._groups;typeof t!="function"&&(t=PA(t));for(var a=i.length,s=new Array(a),l=new Array(a),u=new Array(a),h=0;h<a;++h){var f=n[h],d=i[h],p=d.length,m=m5e(t.call(f,f&&f.__data__,h,n)),g=m.length,y=l[h]=new Array(g),v=s[h]=new Array(g),x=u[h]=new Array(p);r(f,d,y,v,x,m,e);for(var b=0,w=0,C,T;b<g;++b)if(C=y[b]){for(b>=w&&(w=b+1);!(T=v[w])&&++w<g;);C._next=T||null}}return s=new oi(s,n),s._enter=l,s._exit=u,s}function m5e(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}var yV=N(()=>{"use strict";hl();OA();gV();o(f5e,"bindIndex");o(d5e,"bindKey");o(p5e,"datum");o(BA,"default");o(m5e,"arraylike")});function FA(){return new oi(this._exit||this._groups.map(tv),this._parents)}var vV=N(()=>{"use strict";MA();hl();o(FA,"default")});function $A(t,e,r){var n=this.enter(),i=this,a=this.exit();return typeof t=="function"?(n=t(n),n&&(n=n.selection())):n=n.append(t+""),e!=null&&(i=e(i),i&&(i=i.selection())),r==null?a.remove():r(a),n&&i?n.merge(i).order():i}var xV=N(()=>{"use strict";o($A,"default")});function zA(t){for(var e=t.selection?t.selection():t,r=this._groups,n=e._groups,i=r.length,a=n.length,s=Math.min(i,a),l=new Array(i),u=0;u<s;++u)for(var h=r[u],f=n[u],d=h.length,p=l[u]=new Array(d),m,g=0;g<d;++g)(m=h[g]||f[g])&&(p[g]=m);for(;u<i;++u)l[u]=r[u];return new oi(l,this._parents)}var bV=N(()=>{"use strict";hl();o(zA,"default")});function GA(){for(var t=this._groups,e=-1,r=t.length;++e<r;)for(var n=t[e],i=n.length-1,a=n[i],s;--i>=0;)(s=n[i])&&(a&&s.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(s,a),a=s);return this}var wV=N(()=>{"use strict";o(GA,"default")});function VA(t){t||(t=g5e);function e(d,p){return d&&p?t(d.__data__,p.__data__):!d-!p}o(e,"compareNode");for(var r=this._groups,n=r.length,i=new Array(n),a=0;a<n;++a){for(var s=r[a],l=s.length,u=i[a]=new Array(l),h,f=0;f<l;++f)(h=s[f])&&(u[f]=h);u.sort(e)}return new oi(i,this._parents).order()}function g5e(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}var TV=N(()=>{"use strict";hl();o(VA,"default");o(g5e,"ascending")});function UA(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}var kV=N(()=>{"use strict";o(UA,"default")});function HA(){return Array.from(this)}var EV=N(()=>{"use strict";o(HA,"default")});function WA(){for(var t=this._groups,e=0,r=t.length;e<r;++e)for(var n=t[e],i=0,a=n.length;i<a;++i){var s=n[i];if(s)return s}return null}var SV=N(()=>{"use strict";o(WA,"default")});function qA(){let t=0;for(let e of this)++t;return t}var CV=N(()=>{"use strict";o(qA,"default")});function YA(){return!this.node()}var AV=N(()=>{"use strict";o(YA,"default")});function XA(t){for(var e=this._groups,r=0,n=e.length;r<n;++r)for(var i=e[r],a=0,s=i.length,l;a<s;++a)(l=i[a])&&t.call(l,l.__data__,a,i);return this}var _V=N(()=>{"use strict";o(XA,"default")});function y5e(t){return function(){this.removeAttribute(t)}}function v5e(t){return function(){this.removeAttributeNS(t.space,t.local)}}function x5e(t,e){return function(){this.setAttribute(t,e)}}function b5e(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function w5e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttribute(t):this.setAttribute(t,r)}}function T5e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function jA(t,e){var r=rc(t);if(arguments.length<2){var n=this.node();return r.local?n.getAttributeNS(r.space,r.local):n.getAttribute(r)}return this.each((e==null?r.local?v5e:y5e:typeof e=="function"?r.local?T5e:w5e:r.local?b5e:x5e)(r,e))}var DV=N(()=>{"use strict";$3();o(y5e,"attrRemove");o(v5e,"attrRemoveNS");o(x5e,"attrConstant");o(b5e,"attrConstantNS");o(w5e,"attrFunction");o(T5e,"attrFunctionNS");o(jA,"default")});function nv(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}var KA=N(()=>{"use strict";o(nv,"default")});function k5e(t){return function(){this.style.removeProperty(t)}}function E5e(t,e,r){return function(){this.style.setProperty(t,e,r)}}function S5e(t,e,r){return function(){var n=e.apply(this,arguments);n==null?this.style.removeProperty(t):this.style.setProperty(t,n,r)}}function QA(t,e,r){return arguments.length>1?this.each((e==null?k5e:typeof e=="function"?S5e:E5e)(t,e,r??"")):bh(this.node(),t)}function bh(t,e){return t.style.getPropertyValue(e)||nv(t).getComputedStyle(t,null).getPropertyValue(e)}var ZA=N(()=>{"use strict";KA();o(k5e,"styleRemove");o(E5e,"styleConstant");o(S5e,"styleFunction");o(QA,"default");o(bh,"styleValue")});function C5e(t){return function(){delete this[t]}}function A5e(t,e){return function(){this[t]=e}}function _5e(t,e){return function(){var r=e.apply(this,arguments);r==null?delete this[t]:this[t]=r}}function JA(t,e){return arguments.length>1?this.each((e==null?C5e:typeof e=="function"?_5e:A5e)(t,e)):this.node()[t]}var LV=N(()=>{"use strict";o(C5e,"propertyRemove");o(A5e,"propertyConstant");o(_5e,"propertyFunction");o(JA,"default")});function RV(t){return t.trim().split(/^|\s+/)}function e8(t){return t.classList||new NV(t)}function NV(t){this._node=t,this._names=RV(t.getAttribute("class")||"")}function MV(t,e){for(var r=e8(t),n=-1,i=e.length;++n<i;)r.add(e[n])}function IV(t,e){for(var r=e8(t),n=-1,i=e.length;++n<i;)r.remove(e[n])}function D5e(t){return function(){MV(this,t)}}function L5e(t){return function(){IV(this,t)}}function R5e(t,e){return function(){(e.apply(this,arguments)?MV:IV)(this,t)}}function t8(t,e){var r=RV(t+"");if(arguments.length<2){for(var n=e8(this.node()),i=-1,a=r.length;++i<a;)if(!n.contains(r[i]))return!1;return!0}return this.each((typeof e=="function"?R5e:e?D5e:L5e)(r,e))}var OV=N(()=>{"use strict";o(RV,"classArray");o(e8,"classList");o(NV,"ClassList");NV.prototype={add:o(function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},"add"),remove:o(function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},"remove"),contains:o(function(t){return this._names.indexOf(t)>=0},"contains")};o(MV,"classedAdd");o(IV,"classedRemove");o(D5e,"classedTrue");o(L5e,"classedFalse");o(R5e,"classedFunction");o(t8,"default")});function N5e(){this.textContent=""}function M5e(t){return function(){this.textContent=t}}function I5e(t){return function(){var e=t.apply(this,arguments);this.textContent=e??""}}function r8(t){return arguments.length?this.each(t==null?N5e:(typeof t=="function"?I5e:M5e)(t)):this.node().textContent}var PV=N(()=>{"use strict";o(N5e,"textRemove");o(M5e,"textConstant");o(I5e,"textFunction");o(r8,"default")});function O5e(){this.innerHTML=""}function P5e(t){return function(){this.innerHTML=t}}function B5e(t){return function(){var e=t.apply(this,arguments);this.innerHTML=e??""}}function n8(t){return arguments.length?this.each(t==null?O5e:(typeof t=="function"?B5e:P5e)(t)):this.node().innerHTML}var BV=N(()=>{"use strict";o(O5e,"htmlRemove");o(P5e,"htmlConstant");o(B5e,"htmlFunction");o(n8,"default")});function F5e(){this.nextSibling&&this.parentNode.appendChild(this)}function i8(){return this.each(F5e)}var FV=N(()=>{"use strict";o(F5e,"raise");o(i8,"default")});function $5e(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function a8(){return this.each($5e)}var $V=N(()=>{"use strict";o($5e,"lower");o(a8,"default")});function s8(t){var e=typeof t=="function"?t:Jy(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})}var zV=N(()=>{"use strict";SA();o(s8,"default")});function z5e(){return null}function o8(t,e){var r=typeof t=="function"?t:Jy(t),n=e==null?z5e:typeof e=="function"?e:xh(e);return this.select(function(){return this.insertBefore(r.apply(this,arguments),n.apply(this,arguments)||null)})}var GV=N(()=>{"use strict";SA();z3();o(z5e,"constantNull");o(o8,"default")});function G5e(){var t=this.parentNode;t&&t.removeChild(this)}function l8(){return this.each(G5e)}var VV=N(()=>{"use strict";o(G5e,"remove");o(l8,"default")});function V5e(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function U5e(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function c8(t){return this.select(t?U5e:V5e)}var UV=N(()=>{"use strict";o(V5e,"selection_cloneShallow");o(U5e,"selection_cloneDeep");o(c8,"default")});function u8(t){return arguments.length?this.property("__data__",t):this.node().__data__}var HV=N(()=>{"use strict";o(u8,"default")});function H5e(t){return function(e){t.call(this,e,this.__data__)}}function W5e(t){return t.trim().split(/^|\s+/).map(function(e){var r="",n=e.indexOf(".");return n>=0&&(r=e.slice(n+1),e=e.slice(0,n)),{type:e,name:r}})}function q5e(t){return function(){var e=this.__on;if(e){for(var r=0,n=-1,i=e.length,a;r<i;++r)a=e[r],(!t.type||a.type===t.type)&&a.name===t.name?this.removeEventListener(a.type,a.listener,a.options):e[++n]=a;++n?e.length=n:delete this.__on}}}function Y5e(t,e,r){return function(){var n=this.__on,i,a=H5e(e);if(n){for(var s=0,l=n.length;s<l;++s)if((i=n[s]).type===t.type&&i.name===t.name){this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=a,i.options=r),i.value=e;return}}this.addEventListener(t.type,a,r),i={type:t.type,name:t.name,value:e,listener:a,options:r},n?n.push(i):this.__on=[i]}}function h8(t,e,r){var n=W5e(t+""),i,a=n.length,s;if(arguments.length<2){var l=this.node().__on;if(l){for(var u=0,h=l.length,f;u<h;++u)for(i=0,f=l[u];i<a;++i)if((s=n[i]).type===f.type&&s.name===f.name)return f.value}return}for(l=e?Y5e:q5e,i=0;i<a;++i)this.each(l(n[i],e,r));return this}var WV=N(()=>{"use strict";o(H5e,"contextListener");o(W5e,"parseTypenames");o(q5e,"onRemove");o(Y5e,"onAdd");o(h8,"default")});function qV(t,e,r){var n=nv(t),i=n.CustomEvent;typeof i=="function"?i=new i(e,r):(i=n.document.createEvent("Event"),r?(i.initEvent(e,r.bubbles,r.cancelable),i.detail=r.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function X5e(t,e){return function(){return qV(this,t,e)}}function j5e(t,e){return function(){return qV(this,t,e.apply(this,arguments))}}function f8(t,e){return this.each((typeof e=="function"?j5e:X5e)(t,e))}var YV=N(()=>{"use strict";KA();o(qV,"dispatchEvent");o(X5e,"dispatchConstant");o(j5e,"dispatchFunction");o(f8,"default")});function*d8(){for(var t=this._groups,e=0,r=t.length;e<r;++e)for(var n=t[e],i=0,a=n.length,s;i<a;++i)(s=n[i])&&(yield s)}var XV=N(()=>{"use strict";o(d8,"default")});function oi(t,e){this._groups=t,this._parents=e}function jV(){return new oi([[document.documentElement]],p8)}function K5e(){return this}var p8,hu,hl=N(()=>{"use strict";uV();fV();dV();pV();mV();yV();OA();vV();xV();bV();wV();TV();kV();EV();SV();CV();AV();_V();DV();ZA();LV();OV();PV();BV();FV();$V();zV();GV();VV();UV();HV();WV();YV();XV();p8=[null];o(oi,"Selection");o(jV,"selection");o(K5e,"selection_selection");oi.prototype=jV.prototype={constructor:oi,select:CA,selectAll:DA,selectChild:LA,selectChildren:RA,filter:NA,data:BA,enter:IA,exit:FA,join:$A,merge:zA,selection:K5e,order:GA,sort:VA,call:UA,nodes:HA,node:WA,size:qA,empty:YA,each:XA,attr:jA,style:QA,property:JA,classed:t8,text:r8,html:n8,raise:i8,lower:a8,append:s8,insert:o8,remove:l8,clone:c8,datum:u8,on:h8,dispatch:f8,[Symbol.iterator]:d8};hu=jV});function Ge(t){return typeof t=="string"?new oi([[document.querySelector(t)]],[document.documentElement]):new oi([[t]],p8)}var KV=N(()=>{"use strict";hl();o(Ge,"default")});var fl=N(()=>{"use strict";ev();$3();KV();hl();z3();_A();ZA()});var QV=N(()=>{"use strict"});function wh(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function b0(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}var m8=N(()=>{"use strict";o(wh,"default");o(b0,"extend")});function Th(){}function JV(){return this.rgb().formatHex()}function iwe(){return this.rgb().formatHex8()}function awe(){return sU(this).formatHsl()}function eU(){return this.rgb().formatRgb()}function pl(t){var e,r;return t=(t+"").trim().toLowerCase(),(e=Q5e.exec(t))?(r=e[1].length,e=parseInt(e[1],16),r===6?tU(e):r===3?new ua(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?V3(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?V3(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=Z5e.exec(t))?new ua(e[1],e[2],e[3],1):(e=J5e.exec(t))?new ua(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=ewe.exec(t))?V3(e[1],e[2],e[3],e[4]):(e=twe.exec(t))?V3(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=rwe.exec(t))?iU(e[1],e[2]/100,e[3]/100,1):(e=nwe.exec(t))?iU(e[1],e[2]/100,e[3]/100,e[4]):ZV.hasOwnProperty(t)?tU(ZV[t]):t==="transparent"?new ua(NaN,NaN,NaN,0):null}function tU(t){return new ua(t>>16&255,t>>8&255,t&255,1)}function V3(t,e,r,n){return n<=0&&(t=e=r=NaN),new ua(t,e,r,n)}function y8(t){return t instanceof Th||(t=pl(t)),t?(t=t.rgb(),new ua(t.r,t.g,t.b,t.opacity)):new ua}function T0(t,e,r,n){return arguments.length===1?y8(t):new ua(t,e,r,n??1)}function ua(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function rU(){return`#${ld(this.r)}${ld(this.g)}${ld(this.b)}`}function swe(){return`#${ld(this.r)}${ld(this.g)}${ld(this.b)}${ld((isNaN(this.opacity)?1:this.opacity)*255)}`}function nU(){let t=W3(this.opacity);return`${t===1?"rgb(":"rgba("}${cd(this.r)}, ${cd(this.g)}, ${cd(this.b)}${t===1?")":`, ${t})`}`}function W3(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function cd(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function ld(t){return t=cd(t),(t<16?"0":"")+t.toString(16)}function iU(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new dl(t,e,r,n)}function sU(t){if(t instanceof dl)return new dl(t.h,t.s,t.l,t.opacity);if(t instanceof Th||(t=pl(t)),!t)return new dl;if(t instanceof dl)return t;t=t.rgb();var e=t.r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),a=Math.max(e,r,n),s=NaN,l=a-i,u=(a+i)/2;return l?(e===a?s=(r-n)/l+(r<n)*6:r===a?s=(n-e)/l+2:s=(e-r)/l+4,l/=u<.5?a+i:2-a-i,s*=60):l=u>0&&u<1?0:s,new dl(s,l,u,t.opacity)}function oU(t,e,r,n){return arguments.length===1?sU(t):new dl(t,e,r,n??1)}function dl(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function aU(t){return t=(t||0)%360,t<0?t+360:t}function U3(t){return Math.max(0,Math.min(1,t||0))}function g8(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}var iv,H3,w0,av,nc,Q5e,Z5e,J5e,ewe,twe,rwe,nwe,ZV,v8=N(()=>{"use strict";m8();o(Th,"Color");iv=.7,H3=1/iv,w0="\\s*([+-]?\\d+)\\s*",av="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",nc="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Q5e=/^#([0-9a-f]{3,8})$/,Z5e=new RegExp(`^rgb\\(${w0},${w0},${w0}\\)$`),J5e=new RegExp(`^rgb\\(${nc},${nc},${nc}\\)$`),ewe=new RegExp(`^rgba\\(${w0},${w0},${w0},${av}\\)$`),twe=new RegExp(`^rgba\\(${nc},${nc},${nc},${av}\\)$`),rwe=new RegExp(`^hsl\\(${av},${nc},${nc}\\)$`),nwe=new RegExp(`^hsla\\(${av},${nc},${nc},${av}\\)$`),ZV={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};wh(Th,pl,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:JV,formatHex:JV,formatHex8:iwe,formatHsl:awe,formatRgb:eU,toString:eU});o(JV,"color_formatHex");o(iwe,"color_formatHex8");o(awe,"color_formatHsl");o(eU,"color_formatRgb");o(pl,"color");o(tU,"rgbn");o(V3,"rgba");o(y8,"rgbConvert");o(T0,"rgb");o(ua,"Rgb");wh(ua,T0,b0(Th,{brighter(t){return t=t==null?H3:Math.pow(H3,t),new ua(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?iv:Math.pow(iv,t),new ua(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new ua(cd(this.r),cd(this.g),cd(this.b),W3(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:rU,formatHex:rU,formatHex8:swe,formatRgb:nU,toString:nU}));o(rU,"rgb_formatHex");o(swe,"rgb_formatHex8");o(nU,"rgb_formatRgb");o(W3,"clampa");o(cd,"clampi");o(ld,"hex");o(iU,"hsla");o(sU,"hslConvert");o(oU,"hsl");o(dl,"Hsl");wh(dl,oU,b0(Th,{brighter(t){return t=t==null?H3:Math.pow(H3,t),new dl(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?iv:Math.pow(iv,t),new dl(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new ua(g8(t>=240?t-240:t+120,i,n),g8(t,i,n),g8(t<120?t+240:t-120,i,n),this.opacity)},clamp(){return new dl(aU(this.h),U3(this.s),U3(this.l),W3(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let t=W3(this.opacity);return`${t===1?"hsl(":"hsla("}${aU(this.h)}, ${U3(this.s)*100}%, ${U3(this.l)*100}%${t===1?")":`, ${t})`}`}}));o(aU,"clamph");o(U3,"clampt");o(g8,"hsl2rgb")});var lU,cU,uU=N(()=>{"use strict";lU=Math.PI/180,cU=180/Math.PI});function gU(t){if(t instanceof ic)return new ic(t.l,t.a,t.b,t.opacity);if(t instanceof fu)return yU(t);t instanceof ua||(t=y8(t));var e=T8(t.r),r=T8(t.g),n=T8(t.b),i=x8((.2225045*e+.7168786*r+.0606169*n)/fU),a,s;return e===r&&r===n?a=s=i:(a=x8((.4360747*e+.3850649*r+.1430804*n)/hU),s=x8((.0139322*e+.0971045*r+.7141733*n)/dU)),new ic(116*i-16,500*(a-i),200*(i-s),t.opacity)}function k8(t,e,r,n){return arguments.length===1?gU(t):new ic(t,e,r,n??1)}function ic(t,e,r,n){this.l=+t,this.a=+e,this.b=+r,this.opacity=+n}function x8(t){return t>owe?Math.pow(t,1/3):t/mU+pU}function b8(t){return t>k0?t*t*t:mU*(t-pU)}function w8(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function T8(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function lwe(t){if(t instanceof fu)return new fu(t.h,t.c,t.l,t.opacity);if(t instanceof ic||(t=gU(t)),t.a===0&&t.b===0)return new fu(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*cU;return new fu(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function sv(t,e,r,n){return arguments.length===1?lwe(t):new fu(t,e,r,n??1)}function fu(t,e,r,n){this.h=+t,this.c=+e,this.l=+r,this.opacity=+n}function yU(t){if(isNaN(t.h))return new ic(t.l,0,0,t.opacity);var e=t.h*lU;return new ic(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}var q3,hU,fU,dU,pU,k0,mU,owe,vU=N(()=>{"use strict";m8();v8();uU();q3=18,hU=.96422,fU=1,dU=.82521,pU=4/29,k0=6/29,mU=3*k0*k0,owe=k0*k0*k0;o(gU,"labConvert");o(k8,"lab");o(ic,"Lab");wh(ic,k8,b0(Th,{brighter(t){return new ic(this.l+q3*(t??1),this.a,this.b,this.opacity)},darker(t){return new ic(this.l-q3*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return e=hU*b8(e),t=fU*b8(t),r=dU*b8(r),new ua(w8(3.1338561*e-1.6168667*t-.4906146*r),w8(-.9787684*e+1.9161415*t+.033454*r),w8(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}}));o(x8,"xyz2lab");o(b8,"lab2xyz");o(w8,"lrgb2rgb");o(T8,"rgb2lrgb");o(lwe,"hclConvert");o(sv,"hcl");o(fu,"Hcl");o(yU,"hcl2lab");wh(fu,sv,b0(Th,{brighter(t){return new fu(this.h,this.c,this.l+q3*(t??1),this.opacity)},darker(t){return new fu(this.h,this.c,this.l-q3*(t??1),this.opacity)},rgb(){return yU(this).rgb()}}))});var E0=N(()=>{"use strict";v8();vU()});function E8(t,e,r,n,i){var a=t*t,s=a*t;return((1-3*t+3*a-s)*e+(4-6*a+3*s)*r+(1+3*t+3*a-3*s)*n+s*i)/6}function S8(t){var e=t.length-1;return function(r){var n=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),i=t[n],a=t[n+1],s=n>0?t[n-1]:2*i-a,l=n<e-1?t[n+2]:2*a-i;return E8((r-n/e)*e,s,i,a,l)}}var C8=N(()=>{"use strict";o(E8,"basis");o(S8,"default")});function A8(t){var e=t.length;return function(r){var n=Math.floor(((r%=1)<0?++r:r)*e),i=t[(n+e-1)%e],a=t[n%e],s=t[(n+1)%e],l=t[(n+2)%e];return E8((r-n/e)*e,i,a,s,l)}}var xU=N(()=>{"use strict";C8();o(A8,"default")});var S0,_8=N(()=>{"use strict";S0=o(t=>()=>t,"default")});function bU(t,e){return function(r){return t+r*e}}function cwe(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}function wU(t,e){var r=e-t;return r?bU(t,r>180||r<-180?r-360*Math.round(r/360):r):S0(isNaN(t)?e:t)}function TU(t){return(t=+t)==1?du:function(e,r){return r-e?cwe(e,r,t):S0(isNaN(e)?r:e)}}function du(t,e){var r=e-t;return r?bU(t,r):S0(isNaN(t)?e:t)}var D8=N(()=>{"use strict";_8();o(bU,"linear");o(cwe,"exponential");o(wU,"hue");o(TU,"gamma");o(du,"nogamma")});function kU(t){return function(e){var r=e.length,n=new Array(r),i=new Array(r),a=new Array(r),s,l;for(s=0;s<r;++s)l=T0(e[s]),n[s]=l.r||0,i[s]=l.g||0,a[s]=l.b||0;return n=t(n),i=t(i),a=t(a),l.opacity=1,function(u){return l.r=n(u),l.g=i(u),l.b=a(u),l+""}}}var ud,uwe,hwe,L8=N(()=>{"use strict";E0();C8();xU();D8();ud=o(function t(e){var r=TU(e);function n(i,a){var s=r((i=T0(i)).r,(a=T0(a)).r),l=r(i.g,a.g),u=r(i.b,a.b),h=du(i.opacity,a.opacity);return function(f){return i.r=s(f),i.g=l(f),i.b=u(f),i.opacity=h(f),i+""}}return o(n,"rgb"),n.gamma=t,n},"rgbGamma")(1);o(kU,"rgbSpline");uwe=kU(S8),hwe=kU(A8)});function R8(t,e){e||(e=[]);var r=t?Math.min(e.length,t.length):0,n=e.slice(),i;return function(a){for(i=0;i<r;++i)n[i]=t[i]*(1-a)+e[i]*a;return n}}function EU(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}var SU=N(()=>{"use strict";o(R8,"default");o(EU,"isNumberArray")});function CU(t,e){var r=e?e.length:0,n=t?Math.min(r,t.length):0,i=new Array(n),a=new Array(r),s;for(s=0;s<n;++s)i[s]=kh(t[s],e[s]);for(;s<r;++s)a[s]=e[s];return function(l){for(s=0;s<n;++s)a[s]=i[s](l);return a}}var AU=N(()=>{"use strict";Y3();o(CU,"genericArray")});function N8(t,e){var r=new Date;return t=+t,e=+e,function(n){return r.setTime(t*(1-n)+e*n),r}}var _U=N(()=>{"use strict";o(N8,"default")});function Ki(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}var ov=N(()=>{"use strict";o(Ki,"default")});function M8(t,e){var r={},n={},i;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(i in e)i in t?r[i]=kh(t[i],e[i]):n[i]=e[i];return function(a){for(i in r)n[i]=r[i](a);return n}}var DU=N(()=>{"use strict";Y3();o(M8,"default")});function fwe(t){return function(){return t}}function dwe(t){return function(e){return t(e)+""}}function C0(t,e){var r=O8.lastIndex=I8.lastIndex=0,n,i,a,s=-1,l=[],u=[];for(t=t+"",e=e+"";(n=O8.exec(t))&&(i=I8.exec(e));)(a=i.index)>r&&(a=e.slice(r,a),l[s]?l[s]+=a:l[++s]=a),(n=n[0])===(i=i[0])?l[s]?l[s]+=i:l[++s]=i:(l[++s]=null,u.push({i:s,x:Ki(n,i)})),r=I8.lastIndex;return r<e.length&&(a=e.slice(r),l[s]?l[s]+=a:l[++s]=a),l.length<2?u[0]?dwe(u[0].x):fwe(e):(e=u.length,function(h){for(var f=0,d;f<e;++f)l[(d=u[f]).i]=d.x(h);return l.join("")})}var O8,I8,P8=N(()=>{"use strict";ov();O8=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,I8=new RegExp(O8.source,"g");o(fwe,"zero");o(dwe,"one");o(C0,"default")});function kh(t,e){var r=typeof e,n;return e==null||r==="boolean"?S0(e):(r==="number"?Ki:r==="string"?(n=pl(e))?(e=n,ud):C0:e instanceof pl?ud:e instanceof Date?N8:EU(e)?R8:Array.isArray(e)?CU:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?M8:Ki)(t,e)}var Y3=N(()=>{"use strict";E0();L8();AU();_U();ov();DU();P8();_8();SU();o(kh,"default")});function X3(t,e){return t=+t,e=+e,function(r){return Math.round(t*(1-r)+e*r)}}var LU=N(()=>{"use strict";o(X3,"default")});function K3(t,e,r,n,i,a){var s,l,u;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(u=t*r+e*n)&&(r-=t*u,n-=e*u),(l=Math.sqrt(r*r+n*n))&&(r/=l,n/=l,u/=l),t*n<e*r&&(t=-t,e=-e,u=-u,s=-s),{translateX:i,translateY:a,rotate:Math.atan2(e,t)*RU,skewX:Math.atan(u)*RU,scaleX:s,scaleY:l}}var RU,j3,NU=N(()=>{"use strict";RU=180/Math.PI,j3={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};o(K3,"default")});function MU(t){let e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?j3:K3(e.a,e.b,e.c,e.d,e.e,e.f)}function IU(t){return t==null?j3:(Q3||(Q3=document.createElementNS("http://www.w3.org/2000/svg","g")),Q3.setAttribute("transform",t),(t=Q3.transform.baseVal.consolidate())?(t=t.matrix,K3(t.a,t.b,t.c,t.d,t.e,t.f)):j3)}var Q3,OU=N(()=>{"use strict";NU();o(MU,"parseCss");o(IU,"parseSvg")});function PU(t,e,r,n){function i(h){return h.length?h.pop()+" ":""}o(i,"pop");function a(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push("translate(",null,e,null,r);g.push({i:y-4,x:Ki(h,d)},{i:y-2,x:Ki(f,p)})}else(d||p)&&m.push("translate("+d+e+p+r)}o(a,"translate");function s(h,f,d,p){h!==f?(h-f>180?f+=360:f-h>180&&(h+=360),p.push({i:d.push(i(d)+"rotate(",null,n)-2,x:Ki(h,f)})):f&&d.push(i(d)+"rotate("+f+n)}o(s,"rotate");function l(h,f,d,p){h!==f?p.push({i:d.push(i(d)+"skewX(",null,n)-2,x:Ki(h,f)}):f&&d.push(i(d)+"skewX("+f+n)}o(l,"skewX");function u(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push(i(m)+"scale(",null,",",null,")");g.push({i:y-4,x:Ki(h,d)},{i:y-2,x:Ki(f,p)})}else(d!==1||p!==1)&&m.push(i(m)+"scale("+d+","+p+")")}return o(u,"scale"),function(h,f){var d=[],p=[];return h=t(h),f=t(f),a(h.translateX,h.translateY,f.translateX,f.translateY,d,p),s(h.rotate,f.rotate,d,p),l(h.skewX,f.skewX,d,p),u(h.scaleX,h.scaleY,f.scaleX,f.scaleY,d,p),h=f=null,function(m){for(var g=-1,y=p.length,v;++g<y;)d[(v=p[g]).i]=v.x(m);return d.join("")}}}var B8,F8,BU=N(()=>{"use strict";ov();OU();o(PU,"interpolateTransform");B8=PU(MU,"px, ","px)","deg)"),F8=PU(IU,", ",")",")")});function FU(t){return function(e,r){var n=t((e=sv(e)).h,(r=sv(r)).h),i=du(e.c,r.c),a=du(e.l,r.l),s=du(e.opacity,r.opacity);return function(l){return e.h=n(l),e.c=i(l),e.l=a(l),e.opacity=s(l),e+""}}}var $8,pwe,$U=N(()=>{"use strict";E0();D8();o(FU,"hcl");$8=FU(wU),pwe=FU(du)});var A0=N(()=>{"use strict";Y3();ov();LU();P8();BU();L8();$U()});function dv(){return hd||(VU(mwe),hd=hv.now()+e5)}function mwe(){hd=0}function fv(){this._call=this._time=this._next=null}function t5(t,e,r){var n=new fv;return n.restart(t,e,r),n}function UU(){dv(),++_0;for(var t=Z3,e;t;)(e=hd-t._time)>=0&&t._call.call(void 0,e),t=t._next;--_0}function zU(){hd=(J3=hv.now())+e5,_0=cv=0;try{UU()}finally{_0=0,ywe(),hd=0}}function gwe(){var t=hv.now(),e=t-J3;e>GU&&(e5-=e,J3=t)}function ywe(){for(var t,e=Z3,r,n=1/0;e;)e._call?(n>e._time&&(n=e._time),t=e,e=e._next):(r=e._next,e._next=null,e=t?t._next=r:Z3=r);uv=t,z8(n)}function z8(t){if(!_0){cv&&(cv=clearTimeout(cv));var e=t-hd;e>24?(t<1/0&&(cv=setTimeout(zU,t-hv.now()-e5)),lv&&(lv=clearInterval(lv))):(lv||(J3=hv.now(),lv=setInterval(gwe,GU)),_0=1,VU(zU))}}var _0,cv,lv,GU,Z3,uv,J3,hd,e5,hv,VU,G8=N(()=>{"use strict";_0=0,cv=0,lv=0,GU=1e3,J3=0,hd=0,e5=0,hv=typeof performance=="object"&&performance.now?performance:Date,VU=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};o(dv,"now");o(mwe,"clearNow");o(fv,"Timer");fv.prototype=t5.prototype={constructor:fv,restart:o(function(t,e,r){if(typeof t!="function")throw new TypeError("callback is not a function");r=(r==null?dv():+r)+(e==null?0:+e),!this._next&&uv!==this&&(uv?uv._next=this:Z3=this,uv=this),this._call=t,this._time=r,z8()},"restart"),stop:o(function(){this._call&&(this._call=null,this._time=1/0,z8())},"stop")};o(t5,"timer");o(UU,"timerFlush");o(zU,"wake");o(gwe,"poke");o(ywe,"nap");o(z8,"sleep")});function pv(t,e,r){var n=new fv;return e=e==null?0:+e,n.restart(i=>{n.stop(),t(i+e)},e,r),n}var HU=N(()=>{"use strict";G8();o(pv,"default")});var r5=N(()=>{"use strict";G8();HU()});function pu(t,e,r,n,i,a){var s=t.__transition;if(!s)t.__transition={};else if(r in s)return;bwe(t,r,{name:e,index:n,group:i,on:vwe,tween:xwe,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:YU})}function gv(t,e){var r=Bi(t,e);if(r.state>YU)throw new Error("too late; already scheduled");return r}function ha(t,e){var r=Bi(t,e);if(r.state>n5)throw new Error("too late; already running");return r}function Bi(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function bwe(t,e,r){var n=t.__transition,i;n[e]=r,r.timer=t5(a,0,r.time);function a(h){r.state=WU,r.timer.restart(s,r.delay,r.time),r.delay<=h&&s(h-r.delay)}o(a,"schedule");function s(h){var f,d,p,m;if(r.state!==WU)return u();for(f in n)if(m=n[f],m.name===r.name){if(m.state===n5)return pv(s);m.state===qU?(m.state=mv,m.timer.stop(),m.on.call("interrupt",t,t.__data__,m.index,m.group),delete n[f]):+f<e&&(m.state=mv,m.timer.stop(),m.on.call("cancel",t,t.__data__,m.index,m.group),delete n[f])}if(pv(function(){r.state===n5&&(r.state=qU,r.timer.restart(l,r.delay,r.time),l(h))}),r.state=i5,r.on.call("start",t,t.__data__,r.index,r.group),r.state===i5){for(r.state=n5,i=new Array(p=r.tween.length),f=0,d=-1;f<p;++f)(m=r.tween[f].value.call(t,t.__data__,r.index,r.group))&&(i[++d]=m);i.length=d+1}}o(s,"start");function l(h){for(var f=h<r.duration?r.ease.call(null,h/r.duration):(r.timer.restart(u),r.state=a5,1),d=-1,p=i.length;++d<p;)i[d].call(t,f);r.state===a5&&(r.on.call("end",t,t.__data__,r.index,r.group),u())}o(l,"tick");function u(){r.state=mv,r.timer.stop(),delete n[e];for(var h in n)return;delete t.__transition}o(u,"stop")}var vwe,xwe,YU,WU,i5,n5,qU,a5,mv,Es=N(()=>{"use strict";TA();r5();vwe=wA("start","end","cancel","interrupt"),xwe=[],YU=0,WU=1,i5=2,n5=3,qU=4,a5=5,mv=6;o(pu,"default");o(gv,"init");o(ha,"set");o(Bi,"get");o(bwe,"create")});function yv(t,e){var r=t.__transition,n,i,a=!0,s;if(r){e=e==null?null:e+"";for(s in r){if((n=r[s]).name!==e){a=!1;continue}i=n.state>i5&&n.state<a5,n.state=mv,n.timer.stop(),n.on.call(i?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete r[s]}a&&delete t.__transition}}var XU=N(()=>{"use strict";Es();o(yv,"default")});function V8(t){return this.each(function(){yv(this,t)})}var jU=N(()=>{"use strict";XU();o(V8,"default")});function wwe(t,e){var r,n;return function(){var i=ha(this,t),a=i.tween;if(a!==r){n=r=a;for(var s=0,l=n.length;s<l;++s)if(n[s].name===e){n=n.slice(),n.splice(s,1);break}}i.tween=n}}function Twe(t,e,r){var n,i;if(typeof r!="function")throw new Error;return function(){var a=ha(this,t),s=a.tween;if(s!==n){i=(n=s).slice();for(var l={name:e,value:r},u=0,h=i.length;u<h;++u)if(i[u].name===e){i[u]=l;break}u===h&&i.push(l)}a.tween=i}}function U8(t,e){var r=this._id;if(t+="",arguments.length<2){for(var n=Bi(this.node(),r).tween,i=0,a=n.length,s;i<a;++i)if((s=n[i]).name===t)return s.value;return null}return this.each((e==null?wwe:Twe)(r,t,e))}function D0(t,e,r){var n=t._id;return t.each(function(){var i=ha(this,n);(i.value||(i.value={}))[e]=r.apply(this,arguments)}),function(i){return Bi(i,n).value[e]}}var vv=N(()=>{"use strict";Es();o(wwe,"tweenRemove");o(Twe,"tweenFunction");o(U8,"default");o(D0,"tweenValue")});function xv(t,e){var r;return(typeof e=="number"?Ki:e instanceof pl?ud:(r=pl(e))?(e=r,ud):C0)(t,e)}var H8=N(()=>{"use strict";E0();A0();o(xv,"default")});function kwe(t){return function(){this.removeAttribute(t)}}function Ewe(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Swe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttribute(t);return s===i?null:s===n?a:a=e(n=s,r)}}function Cwe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttributeNS(t.space,t.local);return s===i?null:s===n?a:a=e(n=s,r)}}function Awe(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttribute(t):(s=this.getAttribute(t),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function _we(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttributeNS(t.space,t.local):(s=this.getAttributeNS(t.space,t.local),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function W8(t,e){var r=rc(t),n=r==="transform"?F8:xv;return this.attrTween(t,typeof e=="function"?(r.local?_we:Awe)(r,n,D0(this,"attr."+t,e)):e==null?(r.local?Ewe:kwe)(r):(r.local?Cwe:Swe)(r,n,e))}var KU=N(()=>{"use strict";A0();fl();vv();H8();o(kwe,"attrRemove");o(Ewe,"attrRemoveNS");o(Swe,"attrConstant");o(Cwe,"attrConstantNS");o(Awe,"attrFunction");o(_we,"attrFunctionNS");o(W8,"default")});function Dwe(t,e){return function(r){this.setAttribute(t,e.call(this,r))}}function Lwe(t,e){return function(r){this.setAttributeNS(t.space,t.local,e.call(this,r))}}function Rwe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&Lwe(t,a)),r}return o(i,"tween"),i._value=e,i}function Nwe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&Dwe(t,a)),r}return o(i,"tween"),i._value=e,i}function q8(t,e){var r="attr."+t;if(arguments.length<2)return(r=this.tween(r))&&r._value;if(e==null)return this.tween(r,null);if(typeof e!="function")throw new Error;var n=rc(t);return this.tween(r,(n.local?Rwe:Nwe)(n,e))}var QU=N(()=>{"use strict";fl();o(Dwe,"attrInterpolate");o(Lwe,"attrInterpolateNS");o(Rwe,"attrTweenNS");o(Nwe,"attrTween");o(q8,"default")});function Mwe(t,e){return function(){gv(this,t).delay=+e.apply(this,arguments)}}function Iwe(t,e){return e=+e,function(){gv(this,t).delay=e}}function Y8(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?Mwe:Iwe)(e,t)):Bi(this.node(),e).delay}var ZU=N(()=>{"use strict";Es();o(Mwe,"delayFunction");o(Iwe,"delayConstant");o(Y8,"default")});function Owe(t,e){return function(){ha(this,t).duration=+e.apply(this,arguments)}}function Pwe(t,e){return e=+e,function(){ha(this,t).duration=e}}function X8(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?Owe:Pwe)(e,t)):Bi(this.node(),e).duration}var JU=N(()=>{"use strict";Es();o(Owe,"durationFunction");o(Pwe,"durationConstant");o(X8,"default")});function Bwe(t,e){if(typeof e!="function")throw new Error;return function(){ha(this,t).ease=e}}function j8(t){var e=this._id;return arguments.length?this.each(Bwe(e,t)):Bi(this.node(),e).ease}var eH=N(()=>{"use strict";Es();o(Bwe,"easeConstant");o(j8,"default")});function Fwe(t,e){return function(){var r=e.apply(this,arguments);if(typeof r!="function")throw new Error;ha(this,t).ease=r}}function K8(t){if(typeof t!="function")throw new Error;return this.each(Fwe(this._id,t))}var tH=N(()=>{"use strict";Es();o(Fwe,"easeVarying");o(K8,"default")});function Q8(t){typeof t!="function"&&(t=x0(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i<r;++i)for(var a=e[i],s=a.length,l=n[i]=[],u,h=0;h<s;++h)(u=a[h])&&t.call(u,u.__data__,h,a)&&l.push(u);return new es(n,this._parents,this._name,this._id)}var rH=N(()=>{"use strict";fl();fd();o(Q8,"default")});function Z8(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,r=t._groups,n=e.length,i=r.length,a=Math.min(n,i),s=new Array(n),l=0;l<a;++l)for(var u=e[l],h=r[l],f=u.length,d=s[l]=new Array(f),p,m=0;m<f;++m)(p=u[m]||h[m])&&(d[m]=p);for(;l<n;++l)s[l]=e[l];return new es(s,this._parents,this._name,this._id)}var nH=N(()=>{"use strict";fd();o(Z8,"default")});function $we(t){return(t+"").trim().split(/^|\s+/).every(function(e){var r=e.indexOf(".");return r>=0&&(e=e.slice(0,r)),!e||e==="start"})}function zwe(t,e,r){var n,i,a=$we(e)?gv:ha;return function(){var s=a(this,t),l=s.on;l!==n&&(i=(n=l).copy()).on(e,r),s.on=i}}function J8(t,e){var r=this._id;return arguments.length<2?Bi(this.node(),r).on.on(t):this.each(zwe(r,t,e))}var iH=N(()=>{"use strict";Es();o($we,"start");o(zwe,"onFunction");o(J8,"default")});function Gwe(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}function e_(){return this.on("end.remove",Gwe(this._id))}var aH=N(()=>{"use strict";o(Gwe,"removeFunction");o(e_,"default")});function t_(t){var e=this._name,r=this._id;typeof t!="function"&&(t=xh(t));for(var n=this._groups,i=n.length,a=new Array(i),s=0;s<i;++s)for(var l=n[s],u=l.length,h=a[s]=new Array(u),f,d,p=0;p<u;++p)(f=l[p])&&(d=t.call(f,f.__data__,p,l))&&("__data__"in f&&(d.__data__=f.__data__),h[p]=d,pu(h[p],e,r,p,h,Bi(f,r)));return new es(a,this._parents,e,r)}var sH=N(()=>{"use strict";fl();fd();Es();o(t_,"default")});function r_(t){var e=this._name,r=this._id;typeof t!="function"&&(t=v0(t));for(var n=this._groups,i=n.length,a=[],s=[],l=0;l<i;++l)for(var u=n[l],h=u.length,f,d=0;d<h;++d)if(f=u[d]){for(var p=t.call(f,f.__data__,d,u),m,g=Bi(f,r),y=0,v=p.length;y<v;++y)(m=p[y])&&pu(m,e,r,y,p,g);a.push(p),s.push(f)}return new es(a,s,e,r)}var oH=N(()=>{"use strict";fl();fd();Es();o(r_,"default")});function n_(){return new Vwe(this._groups,this._parents)}var Vwe,lH=N(()=>{"use strict";fl();Vwe=hu.prototype.constructor;o(n_,"default")});function Uwe(t,e){var r,n,i;return function(){var a=bh(this,t),s=(this.style.removeProperty(t),bh(this,t));return a===s?null:a===r&&s===n?i:i=e(r=a,n=s)}}function cH(t){return function(){this.style.removeProperty(t)}}function Hwe(t,e,r){var n,i=r+"",a;return function(){var s=bh(this,t);return s===i?null:s===n?a:a=e(n=s,r)}}function Wwe(t,e,r){var n,i,a;return function(){var s=bh(this,t),l=r(this),u=l+"";return l==null&&(u=l=(this.style.removeProperty(t),bh(this,t))),s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l))}}function qwe(t,e){var r,n,i,a="style."+e,s="end."+a,l;return function(){var u=ha(this,t),h=u.on,f=u.value[a]==null?l||(l=cH(e)):void 0;(h!==r||i!==f)&&(n=(r=h).copy()).on(s,i=f),u.on=n}}function i_(t,e,r){var n=(t+="")=="transform"?B8:xv;return e==null?this.styleTween(t,Uwe(t,n)).on("end.style."+t,cH(t)):typeof e=="function"?this.styleTween(t,Wwe(t,n,D0(this,"style."+t,e))).each(qwe(this._id,t)):this.styleTween(t,Hwe(t,n,e),r).on("end.style."+t,null)}var uH=N(()=>{"use strict";A0();fl();Es();vv();H8();o(Uwe,"styleNull");o(cH,"styleRemove");o(Hwe,"styleConstant");o(Wwe,"styleFunction");o(qwe,"styleMaybeRemove");o(i_,"default")});function Ywe(t,e,r){return function(n){this.style.setProperty(t,e.call(this,n),r)}}function Xwe(t,e,r){var n,i;function a(){var s=e.apply(this,arguments);return s!==i&&(n=(i=s)&&Ywe(t,s,r)),n}return o(a,"tween"),a._value=e,a}function a_(t,e,r){var n="style."+(t+="");if(arguments.length<2)return(n=this.tween(n))&&n._value;if(e==null)return this.tween(n,null);if(typeof e!="function")throw new Error;return this.tween(n,Xwe(t,e,r??""))}var hH=N(()=>{"use strict";o(Ywe,"styleInterpolate");o(Xwe,"styleTween");o(a_,"default")});function jwe(t){return function(){this.textContent=t}}function Kwe(t){return function(){var e=t(this);this.textContent=e??""}}function s_(t){return this.tween("text",typeof t=="function"?Kwe(D0(this,"text",t)):jwe(t==null?"":t+""))}var fH=N(()=>{"use strict";vv();o(jwe,"textConstant");o(Kwe,"textFunction");o(s_,"default")});function Qwe(t){return function(e){this.textContent=t.call(this,e)}}function Zwe(t){var e,r;function n(){var i=t.apply(this,arguments);return i!==r&&(e=(r=i)&&Qwe(i)),e}return o(n,"tween"),n._value=t,n}function o_(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(t==null)return this.tween(e,null);if(typeof t!="function")throw new Error;return this.tween(e,Zwe(t))}var dH=N(()=>{"use strict";o(Qwe,"textInterpolate");o(Zwe,"textTween");o(o_,"default")});function l_(){for(var t=this._name,e=this._id,r=s5(),n=this._groups,i=n.length,a=0;a<i;++a)for(var s=n[a],l=s.length,u,h=0;h<l;++h)if(u=s[h]){var f=Bi(u,e);pu(u,t,r,h,s,{time:f.time+f.delay+f.duration,delay:0,duration:f.duration,ease:f.ease})}return new es(n,this._parents,t,r)}var pH=N(()=>{"use strict";fd();Es();o(l_,"default")});function c_(){var t,e,r=this,n=r._id,i=r.size();return new Promise(function(a,s){var l={value:s},u={value:o(function(){--i===0&&a()},"value")};r.each(function(){var h=ha(this,n),f=h.on;f!==t&&(e=(t=f).copy(),e._.cancel.push(l),e._.interrupt.push(l),e._.end.push(u)),h.on=e}),i===0&&a()})}var mH=N(()=>{"use strict";Es();o(c_,"default")});function es(t,e,r,n){this._groups=t,this._parents=e,this._name=r,this._id=n}function gH(t){return hu().transition(t)}function s5(){return++Jwe}var Jwe,mu,fd=N(()=>{"use strict";fl();KU();QU();ZU();JU();eH();tH();rH();nH();iH();aH();sH();oH();lH();uH();hH();fH();dH();pH();vv();mH();Jwe=0;o(es,"Transition");o(gH,"transition");o(s5,"newId");mu=hu.prototype;es.prototype=gH.prototype={constructor:es,select:t_,selectAll:r_,selectChild:mu.selectChild,selectChildren:mu.selectChildren,filter:Q8,merge:Z8,selection:n_,transition:l_,call:mu.call,nodes:mu.nodes,node:mu.node,size:mu.size,empty:mu.empty,each:mu.each,on:J8,attr:W8,attrTween:q8,style:i_,styleTween:a_,text:s_,textTween:o_,remove:e_,tween:U8,delay:Y8,duration:X8,ease:j8,easeVarying:K8,end:c_,[Symbol.iterator]:mu[Symbol.iterator]}});function o5(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}var yH=N(()=>{"use strict";o(o5,"cubicInOut")});var u_=N(()=>{"use strict";yH()});function tTe(t,e){for(var r;!(r=t.__transition)||!(r=r[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return r}function h_(t){var e,r;t instanceof es?(e=t._id,t=t._name):(e=s5(),(r=eTe).time=dv(),t=t==null?null:t+"");for(var n=this._groups,i=n.length,a=0;a<i;++a)for(var s=n[a],l=s.length,u,h=0;h<l;++h)(u=s[h])&&pu(u,t,e,h,s,r||tTe(u,e));return new es(n,this._parents,t,e)}var eTe,vH=N(()=>{"use strict";fd();Es();u_();r5();eTe={time:null,delay:0,duration:250,ease:o5};o(tTe,"inherit");o(h_,"default")});var xH=N(()=>{"use strict";fl();jU();vH();hu.prototype.interrupt=V8;hu.prototype.transition=h_});var l5=N(()=>{"use strict";xH()});var bH=N(()=>{"use strict"});var wH=N(()=>{"use strict"});var TH=N(()=>{"use strict"});function kH(t){return[+t[0],+t[1]]}function rTe(t){return[kH(t[0]),kH(t[1])]}function f_(t){return{type:t}}var Z0t,J0t,emt,tmt,rmt,nmt,EH=N(()=>{"use strict";l5();bH();wH();TH();({abs:Z0t,max:J0t,min:emt}=Math);o(kH,"number1");o(rTe,"number2");tmt={name:"x",handles:["w","e"].map(f_),input:o(function(t,e){return t==null?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},"input"),output:o(function(t){return t&&[t[0][0],t[1][0]]},"output")},rmt={name:"y",handles:["n","s"].map(f_),input:o(function(t,e){return t==null?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},"input"),output:o(function(t){return t&&[t[0][1],t[1][1]]},"output")},nmt={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(f_),input:o(function(t){return t==null?null:rTe(t)},"input"),output:o(function(t){return t},"output")};o(f_,"type")});var SH=N(()=>{"use strict";EH()});function CH(t){this._+=t[0];for(let e=1,r=t.length;e<r;++e)this._+=arguments[e]+t[e]}function iTe(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return CH;let r=10**e;return function(n){this._+=n[0];for(let i=1,a=n.length;i<a;++i)this._+=Math.round(arguments[i]*r)/r+n[i]}}function AH(){return new pd}var d_,p_,dd,nTe,pd,_H=N(()=>{"use strict";d_=Math.PI,p_=2*d_,dd=1e-6,nTe=p_-dd;o(CH,"append");o(iTe,"appendRound");pd=class{static{o(this,"Path")}constructor(e){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=e==null?CH:iTe(e)}moveTo(e,r){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(e,r){this._append`L${this._x1=+e},${this._y1=+r}`}quadraticCurveTo(e,r,n,i){this._append`Q${+e},${+r},${this._x1=+n},${this._y1=+i}`}bezierCurveTo(e,r,n,i,a,s){this._append`C${+e},${+r},${+n},${+i},${this._x1=+a},${this._y1=+s}`}arcTo(e,r,n,i,a){if(e=+e,r=+r,n=+n,i=+i,a=+a,a<0)throw new Error(`negative radius: ${a}`);let s=this._x1,l=this._y1,u=n-e,h=i-r,f=s-e,d=l-r,p=f*f+d*d;if(this._x1===null)this._append`M${this._x1=e},${this._y1=r}`;else if(p>dd)if(!(Math.abs(d*u-h*f)>dd)||!a)this._append`L${this._x1=e},${this._y1=r}`;else{let m=n-s,g=i-l,y=u*u+h*h,v=m*m+g*g,x=Math.sqrt(y),b=Math.sqrt(p),w=a*Math.tan((d_-Math.acos((y+p-v)/(2*x*b)))/2),C=w/b,T=w/x;Math.abs(C-1)>dd&&this._append`L${e+C*f},${r+C*d}`,this._append`A${a},${a},0,0,${+(d*m>f*g)},${this._x1=e+T*u},${this._y1=r+T*h}`}}arc(e,r,n,i,a,s){if(e=+e,r=+r,n=+n,s=!!s,n<0)throw new Error(`negative radius: ${n}`);let l=n*Math.cos(i),u=n*Math.sin(i),h=e+l,f=r+u,d=1^s,p=s?i-a:a-i;this._x1===null?this._append`M${h},${f}`:(Math.abs(this._x1-h)>dd||Math.abs(this._y1-f)>dd)&&this._append`L${h},${f}`,n&&(p<0&&(p=p%p_+p_),p>nTe?this._append`A${n},${n},0,1,${d},${e-l},${r-u}A${n},${n},0,1,${d},${this._x1=h},${this._y1=f}`:p>dd&&this._append`A${n},${n},0,${+(p>=d_)},${d},${this._x1=e+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(e,r,n,i){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}};o(AH,"path");AH.prototype=pd.prototype});var m_=N(()=>{"use strict";_H()});var DH=N(()=>{"use strict"});var LH=N(()=>{"use strict"});var RH=N(()=>{"use strict"});var NH=N(()=>{"use strict"});var MH=N(()=>{"use strict"});var IH=N(()=>{"use strict"});var OH=N(()=>{"use strict"});function g_(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function md(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}var bv=N(()=>{"use strict";o(g_,"default");o(md,"formatDecimalParts")});function ml(t){return t=md(Math.abs(t)),t?t[1]:NaN}var wv=N(()=>{"use strict";bv();o(ml,"default")});function y_(t,e){return function(r,n){for(var i=r.length,a=[],s=0,l=t[0],u=0;i>0&&l>0&&(u+l+1>n&&(l=Math.max(1,n-u)),a.push(r.substring(i-=l,i+l)),!((u+=l+1)>n));)l=t[s=(s+1)%t.length];return a.reverse().join(e)}}var PH=N(()=>{"use strict";o(y_,"default")});function v_(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var BH=N(()=>{"use strict";o(v_,"default")});function Eh(t){if(!(e=aTe.exec(t)))throw new Error("invalid format: "+t);var e;return new c5({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function c5(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}var aTe,x_=N(()=>{"use strict";aTe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;o(Eh,"formatSpecifier");Eh.prototype=c5.prototype;o(c5,"FormatSpecifier");c5.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type}});function b_(t){e:for(var e=t.length,r=1,n=-1,i;r<e;++r)switch(t[r]){case".":n=i=r;break;case"0":n===0&&(n=r),i=r;break;default:if(!+t[r])break e;n>0&&(n=0);break}return n>0?t.slice(0,n)+t.slice(i+1):t}var FH=N(()=>{"use strict";o(b_,"default")});function T_(t,e){var r=md(t,e);if(!r)return t+"";var n=r[0],i=r[1],a=i-(w_=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=n.length;return a===s?n:a>s?n+new Array(a-s+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+md(t,Math.max(0,e+a-1))[0]}var w_,k_=N(()=>{"use strict";bv();o(T_,"default")});function u5(t,e){var r=md(t,e);if(!r)return t+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}var $H=N(()=>{"use strict";bv();o(u5,"default")});var E_,zH=N(()=>{"use strict";bv();k_();$H();E_={"%":o((t,e)=>(t*100).toFixed(e),"%"),b:o(t=>Math.round(t).toString(2),"b"),c:o(t=>t+"","c"),d:g_,e:o((t,e)=>t.toExponential(e),"e"),f:o((t,e)=>t.toFixed(e),"f"),g:o((t,e)=>t.toPrecision(e),"g"),o:o(t=>Math.round(t).toString(8),"o"),p:o((t,e)=>u5(t*100,e),"p"),r:u5,s:T_,X:o(t=>Math.round(t).toString(16).toUpperCase(),"X"),x:o(t=>Math.round(t).toString(16),"x")}});function h5(t){return t}var GH=N(()=>{"use strict";o(h5,"default")});function S_(t){var e=t.grouping===void 0||t.thousands===void 0?h5:y_(VH.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",n=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",a=t.numerals===void 0?h5:v_(VH.call(t.numerals,String)),s=t.percent===void 0?"%":t.percent+"",l=t.minus===void 0?"\u2212":t.minus+"",u=t.nan===void 0?"NaN":t.nan+"";function h(d){d=Eh(d);var p=d.fill,m=d.align,g=d.sign,y=d.symbol,v=d.zero,x=d.width,b=d.comma,w=d.precision,C=d.trim,T=d.type;T==="n"?(b=!0,T="g"):E_[T]||(w===void 0&&(w=12),C=!0,T="g"),(v||p==="0"&&m==="=")&&(v=!0,p="0",m="=");var E=y==="$"?r:y==="#"&&/[boxX]/.test(T)?"0"+T.toLowerCase():"",A=y==="$"?n:/[%p]/.test(T)?s:"",S=E_[T],_=/[defgprs%]/.test(T);w=w===void 0?6:/[gprs]/.test(T)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function I(D){var k=E,L=A,R,O,M;if(T==="c")L=S(D)+L,D="";else{D=+D;var B=D<0||1/D<0;if(D=isNaN(D)?u:S(Math.abs(D),w),C&&(D=b_(D)),B&&+D==0&&g!=="+"&&(B=!1),k=(B?g==="("?g:l:g==="-"||g==="("?"":g)+k,L=(T==="s"?UH[8+w_/3]:"")+L+(B&&g==="("?")":""),_){for(R=-1,O=D.length;++R<O;)if(M=D.charCodeAt(R),48>M||M>57){L=(M===46?i+D.slice(R+1):D.slice(R))+L,D=D.slice(0,R);break}}}b&&!v&&(D=e(D,1/0));var F=k.length+D.length+L.length,P=F<x?new Array(x-F+1).join(p):"";switch(b&&v&&(D=e(P+D,P.length?x-L.length:1/0),P=""),m){case"<":D=k+D+L+P;break;case"=":D=k+P+D+L;break;case"^":D=P.slice(0,F=P.length>>1)+k+D+L+P.slice(F);break;default:D=P+k+D+L;break}return a(D)}return o(I,"format"),I.toString=function(){return d+""},I}o(h,"newFormat");function f(d,p){var m=h((d=Eh(d),d.type="f",d)),g=Math.max(-8,Math.min(8,Math.floor(ml(p)/3)))*3,y=Math.pow(10,-g),v=UH[8+g/3];return function(x){return m(y*x)+v}}return o(f,"formatPrefix"),{format:h,formatPrefix:f}}var VH,UH,HH=N(()=>{"use strict";wv();PH();BH();x_();FH();zH();k_();GH();VH=Array.prototype.map,UH=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];o(S_,"default")});function C_(t){return f5=S_(t),d5=f5.format,p5=f5.formatPrefix,f5}var f5,d5,p5,WH=N(()=>{"use strict";HH();C_({thousands:",",grouping:[3],currency:["$",""]});o(C_,"defaultLocale")});function m5(t){return Math.max(0,-ml(Math.abs(t)))}var qH=N(()=>{"use strict";wv();o(m5,"default")});function g5(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(ml(e)/3)))*3-ml(Math.abs(t)))}var YH=N(()=>{"use strict";wv();o(g5,"default")});function y5(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,ml(e)-ml(t))+1}var XH=N(()=>{"use strict";wv();o(y5,"default")});var A_=N(()=>{"use strict";WH();x_();qH();YH();XH()});var jH=N(()=>{"use strict"});var KH=N(()=>{"use strict"});var QH=N(()=>{"use strict"});var ZH=N(()=>{"use strict"});function Sh(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}var Tv=N(()=>{"use strict";o(Sh,"initRange")});function gu(){var t=new g0,e=[],r=[],n=__;function i(a){let s=t.get(a);if(s===void 0){if(n!==__)return n;t.set(a,s=e.push(a)-1)}return r[s%r.length]}return o(i,"scale"),i.domain=function(a){if(!arguments.length)return e.slice();e=[],t=new g0;for(let s of a)t.has(s)||t.set(s,e.push(s)-1);return i},i.range=function(a){return arguments.length?(r=Array.from(a),i):r.slice()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return gu(e,r).unknown(n)},Sh.apply(i,arguments),i}var __,D_=N(()=>{"use strict";vh();Tv();__=Symbol("implicit");o(gu,"ordinal")});function L0(){var t=gu().unknown(void 0),e=t.domain,r=t.range,n=0,i=1,a,s,l=!1,u=0,h=0,f=.5;delete t.unknown;function d(){var p=e().length,m=i<n,g=m?i:n,y=m?n:i;a=(y-g)/Math.max(1,p-u+h*2),l&&(a=Math.floor(a)),g+=(y-g-a*(p-u))*f,s=a*(1-u),l&&(g=Math.round(g),s=Math.round(s));var v=I3(p).map(function(x){return g+a*x});return r(m?v.reverse():v)}return o(d,"rescale"),t.domain=function(p){return arguments.length?(e(p),d()):e()},t.range=function(p){return arguments.length?([n,i]=p,n=+n,i=+i,d()):[n,i]},t.rangeRound=function(p){return[n,i]=p,n=+n,i=+i,l=!0,d()},t.bandwidth=function(){return s},t.step=function(){return a},t.round=function(p){return arguments.length?(l=!!p,d()):l},t.padding=function(p){return arguments.length?(u=Math.min(1,h=+p),d()):u},t.paddingInner=function(p){return arguments.length?(u=Math.min(1,p),d()):u},t.paddingOuter=function(p){return arguments.length?(h=+p,d()):h},t.align=function(p){return arguments.length?(f=Math.max(0,Math.min(1,p)),d()):f},t.copy=function(){return L0(e(),[n,i]).round(l).paddingInner(u).paddingOuter(h).align(f)},Sh.apply(d(),arguments)}var JH=N(()=>{"use strict";vh();Tv();D_();o(L0,"band")});function L_(t){return function(){return t}}var eW=N(()=>{"use strict";o(L_,"constants")});function R_(t){return+t}var tW=N(()=>{"use strict";o(R_,"number")});function R0(t){return t}function N_(t,e){return(e-=t=+t)?function(r){return(r-t)/e}:L_(isNaN(e)?NaN:.5)}function sTe(t,e){var r;return t>e&&(r=t,t=e,e=r),function(n){return Math.max(t,Math.min(e,n))}}function oTe(t,e,r){var n=t[0],i=t[1],a=e[0],s=e[1];return i<n?(n=N_(i,n),a=r(s,a)):(n=N_(n,i),a=r(a,s)),function(l){return a(n(l))}}function lTe(t,e,r){var n=Math.min(t.length,e.length)-1,i=new Array(n),a=new Array(n),s=-1;for(t[n]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++s<n;)i[s]=N_(t[s],t[s+1]),a[s]=r(e[s],e[s+1]);return function(l){var u=mA(t,l,1,n)-1;return a[u](i[u](l))}}function v5(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function cTe(){var t=rW,e=rW,r=kh,n,i,a,s=R0,l,u,h;function f(){var p=Math.min(t.length,e.length);return s!==R0&&(s=sTe(t[0],t[p-1])),l=p>2?lTe:oTe,u=h=null,d}o(f,"rescale");function d(p){return p==null||isNaN(p=+p)?a:(u||(u=l(t.map(n),e,r)))(n(s(p)))}return o(d,"scale"),d.invert=function(p){return s(i((h||(h=l(e,t.map(n),Ki)))(p)))},d.domain=function(p){return arguments.length?(t=Array.from(p,R_),f()):t.slice()},d.range=function(p){return arguments.length?(e=Array.from(p),f()):e.slice()},d.rangeRound=function(p){return e=Array.from(p),r=X3,f()},d.clamp=function(p){return arguments.length?(s=p?!0:R0,f()):s!==R0},d.interpolate=function(p){return arguments.length?(r=p,f()):r},d.unknown=function(p){return arguments.length?(a=p,d):a},function(p,m){return n=p,i=m,f()}}function kv(){return cTe()(R0,R0)}var rW,M_=N(()=>{"use strict";vh();A0();eW();tW();rW=[0,1];o(R0,"identity");o(N_,"normalize");o(sTe,"clamper");o(oTe,"bimap");o(lTe,"polymap");o(v5,"copy");o(cTe,"transformer");o(kv,"continuous")});function I_(t,e,r,n){var i=y0(t,e,r),a;switch(n=Eh(n??",f"),n.type){case"s":{var s=Math.max(Math.abs(t),Math.abs(e));return n.precision==null&&!isNaN(a=g5(i,s))&&(n.precision=a),p5(n,s)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=y5(i,Math.max(Math.abs(t),Math.abs(e))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=m5(i))&&(n.precision=a-(n.type==="%")*2);break}}return d5(n)}var nW=N(()=>{"use strict";vh();A_();o(I_,"tickFormat")});function uTe(t){var e=t.domain;return t.ticks=function(r){var n=e();return R3(n[0],n[n.length-1],r??10)},t.tickFormat=function(r,n){var i=e();return I_(i[0],i[i.length-1],r??10,n)},t.nice=function(r){r==null&&(r=10);var n=e(),i=0,a=n.length-1,s=n[i],l=n[a],u,h,f=10;for(l<s&&(h=s,s=l,l=h,h=i,i=a,a=h);f-- >0;){if(h=Zy(s,l,r),h===u)return n[i]=s,n[a]=l,e(n);if(h>0)s=Math.floor(s/h)*h,l=Math.ceil(l/h)*h;else if(h<0)s=Math.ceil(s*h)/h,l=Math.floor(l*h)/h;else break;u=h}return t},t}function gl(){var t=kv();return t.copy=function(){return v5(t,gl())},Sh.apply(t,arguments),uTe(t)}var iW=N(()=>{"use strict";vh();M_();Tv();nW();o(uTe,"linearish");o(gl,"linear")});function O_(t,e){t=t.slice();var r=0,n=t.length-1,i=t[r],a=t[n],s;return a<i&&(s=r,r=n,n=s,s=i,i=a,a=s),t[r]=e.floor(i),t[n]=e.ceil(a),t}var aW=N(()=>{"use strict";o(O_,"nice")});function xn(t,e,r,n){function i(a){return t(a=arguments.length===0?new Date:new Date(+a)),a}return o(i,"interval"),i.floor=a=>(t(a=new Date(+a)),a),i.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),i.round=a=>{let s=i(a),l=i.ceil(a);return a-s<l-a?s:l},i.offset=(a,s)=>(e(a=new Date(+a),s==null?1:Math.floor(s)),a),i.range=(a,s,l)=>{let u=[];if(a=i.ceil(a),l=l==null?1:Math.floor(l),!(a<s)||!(l>0))return u;let h;do u.push(h=new Date(+a)),e(a,l),t(a);while(h<a&&a<s);return u},i.filter=a=>xn(s=>{if(s>=s)for(;t(s),!a(s);)s.setTime(s-1)},(s,l)=>{if(s>=s)if(l<0)for(;++l<=0;)for(;e(s,-1),!a(s););else for(;--l>=0;)for(;e(s,1),!a(s););}),r&&(i.count=(a,s)=>(P_.setTime(+a),B_.setTime(+s),t(P_),t(B_),Math.floor(r(P_,B_))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?s=>n(s)%a===0:s=>i.count(0,s)%a===0):i)),i}var P_,B_,yu=N(()=>{"use strict";P_=new Date,B_=new Date;o(xn,"timeInterval")});var ac,sW,F_=N(()=>{"use strict";yu();ac=xn(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);ac.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?xn(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):ac);sW=ac.range});var Ks,oW,$_=N(()=>{"use strict";yu();Ks=xn(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*1e3)},(t,e)=>(e-t)/1e3,t=>t.getUTCSeconds()),oW=Ks.range});var vu,hTe,x5,fTe,z_=N(()=>{"use strict";yu();vu=xn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getMinutes()),hTe=vu.range,x5=xn(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getUTCMinutes()),fTe=x5.range});var xu,dTe,b5,pTe,G_=N(()=>{"use strict";yu();xu=xn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3-t.getMinutes()*6e4)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getHours()),dTe=xu.range,b5=xn(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getUTCHours()),pTe=b5.range});var _o,mTe,Sv,gTe,w5,yTe,V_=N(()=>{"use strict";yu();_o=xn(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5,t=>t.getDate()-1),mTe=_o.range,Sv=xn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>t.getUTCDate()-1),gTe=Sv.range,w5=xn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>Math.floor(t/864e5)),yTe=w5.range});function vd(t){return xn(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,r)=>{e.setDate(e.getDate()+r*7)},(e,r)=>(r-e-(r.getTimezoneOffset()-e.getTimezoneOffset())*6e4)/6048e5)}function xd(t){return xn(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCDate(e.getUTCDate()+r*7)},(e,r)=>(r-e)/6048e5)}var yl,Ch,T5,k5,oc,E5,S5,cW,vTe,xTe,bTe,wTe,TTe,kTe,bd,N0,uW,hW,Ah,fW,dW,pW,ETe,STe,CTe,ATe,_Te,DTe,U_=N(()=>{"use strict";yu();o(vd,"timeWeekday");yl=vd(0),Ch=vd(1),T5=vd(2),k5=vd(3),oc=vd(4),E5=vd(5),S5=vd(6),cW=yl.range,vTe=Ch.range,xTe=T5.range,bTe=k5.range,wTe=oc.range,TTe=E5.range,kTe=S5.range;o(xd,"utcWeekday");bd=xd(0),N0=xd(1),uW=xd(2),hW=xd(3),Ah=xd(4),fW=xd(5),dW=xd(6),pW=bd.range,ETe=N0.range,STe=uW.range,CTe=hW.range,ATe=Ah.range,_Te=fW.range,DTe=dW.range});var bu,LTe,C5,RTe,H_=N(()=>{"use strict";yu();bu=xn(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth()),LTe=bu.range,C5=xn(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth()),RTe=C5.range});var Qs,NTe,vl,MTe,W_=N(()=>{"use strict";yu();Qs=xn(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());Qs.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:xn(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)});NTe=Qs.range,vl=xn(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());vl.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:xn(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)});MTe=vl.range});function gW(t,e,r,n,i,a){let s=[[Ks,1,1e3],[Ks,5,5*1e3],[Ks,15,15*1e3],[Ks,30,30*1e3],[a,1,6e4],[a,5,5*6e4],[a,15,15*6e4],[a,30,30*6e4],[i,1,36e5],[i,3,3*36e5],[i,6,6*36e5],[i,12,12*36e5],[n,1,864e5],[n,2,2*864e5],[r,1,6048e5],[e,1,2592e6],[e,3,3*2592e6],[t,1,31536e6]];function l(h,f,d){let p=f<h;p&&([h,f]=[f,h]);let m=d&&typeof d.range=="function"?d:u(h,f,d),g=m?m.range(h,+f+1):[];return p?g.reverse():g}o(l,"ticks");function u(h,f,d){let p=Math.abs(f-h)/d,m=od(([,,v])=>v).right(s,p);if(m===s.length)return t.every(y0(h/31536e6,f/31536e6,d));if(m===0)return ac.every(Math.max(y0(h,f,d),1));let[g,y]=s[p/s[m-1][2]<s[m][2]/p?m-1:m];return g.every(y)}return o(u,"tickInterval"),[l,u]}var OTe,PTe,q_,Y_,yW=N(()=>{"use strict";vh();F_();$_();z_();G_();V_();U_();H_();W_();o(gW,"ticker");[OTe,PTe]=gW(vl,C5,bd,w5,b5,x5),[q_,Y_]=gW(Qs,bu,yl,_o,xu,vu)});var A5=N(()=>{"use strict";F_();$_();z_();G_();V_();U_();H_();W_();yW()});function X_(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function j_(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Cv(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function K_(t){var e=t.dateTime,r=t.date,n=t.time,i=t.periods,a=t.days,s=t.shortDays,l=t.months,u=t.shortMonths,h=Av(i),f=_v(i),d=Av(a),p=_v(a),m=Av(s),g=_v(s),y=Av(l),v=_v(l),x=Av(u),b=_v(u),w={a:B,A:F,b:P,B:z,c:null,d:kW,e:kW,f:ake,g:mke,G:yke,H:rke,I:nke,j:ike,L:_W,m:ske,M:oke,p:$,q:H,Q:CW,s:AW,S:lke,u:cke,U:uke,V:hke,w:fke,W:dke,x:null,X:null,y:pke,Y:gke,Z:vke,"%":SW},C={a:Q,A:j,b:ie,B:ne,c:null,d:EW,e:EW,f:Tke,g:Nke,G:Ike,H:xke,I:bke,j:wke,L:LW,m:kke,M:Eke,p:le,q:he,Q:CW,s:AW,S:Ske,u:Cke,U:Ake,V:_ke,w:Dke,W:Lke,x:null,X:null,y:Rke,Y:Mke,Z:Oke,"%":SW},T={a:I,A:D,b:k,B:L,c:R,d:wW,e:wW,f:ZTe,g:bW,G:xW,H:TW,I:TW,j:XTe,L:QTe,m:YTe,M:jTe,p:_,q:qTe,Q:eke,s:tke,S:KTe,u:GTe,U:VTe,V:UTe,w:zTe,W:HTe,x:O,X:M,y:bW,Y:xW,Z:WTe,"%":JTe};w.x=E(r,w),w.X=E(n,w),w.c=E(e,w),C.x=E(r,C),C.X=E(n,C),C.c=E(e,C);function E(K,X){return function(te){var J=[],se=-1,ue=0,Z=K.length,Se,ce,ae;for(te instanceof Date||(te=new Date(+te));++se<Z;)K.charCodeAt(se)===37&&(J.push(K.slice(ue,se)),(ce=vW[Se=K.charAt(++se)])!=null?Se=K.charAt(++se):ce=Se==="e"?" ":"0",(ae=X[Se])&&(Se=ae(te,ce)),J.push(Se),ue=se+1);return J.push(K.slice(ue,se)),J.join("")}}o(E,"newFormat");function A(K,X){return function(te){var J=Cv(1900,void 0,1),se=S(J,K,te+="",0),ue,Z;if(se!=te.length)return null;if("Q"in J)return new Date(J.Q);if("s"in J)return new Date(J.s*1e3+("L"in J?J.L:0));if(X&&!("Z"in J)&&(J.Z=0),"p"in J&&(J.H=J.H%12+J.p*12),J.m===void 0&&(J.m="q"in J?J.q:0),"V"in J){if(J.V<1||J.V>53)return null;"w"in J||(J.w=1),"Z"in J?(ue=j_(Cv(J.y,0,1)),Z=ue.getUTCDay(),ue=Z>4||Z===0?N0.ceil(ue):N0(ue),ue=Sv.offset(ue,(J.V-1)*7),J.y=ue.getUTCFullYear(),J.m=ue.getUTCMonth(),J.d=ue.getUTCDate()+(J.w+6)%7):(ue=X_(Cv(J.y,0,1)),Z=ue.getDay(),ue=Z>4||Z===0?Ch.ceil(ue):Ch(ue),ue=_o.offset(ue,(J.V-1)*7),J.y=ue.getFullYear(),J.m=ue.getMonth(),J.d=ue.getDate()+(J.w+6)%7)}else("W"in J||"U"in J)&&("w"in J||(J.w="u"in J?J.u%7:"W"in J?1:0),Z="Z"in J?j_(Cv(J.y,0,1)).getUTCDay():X_(Cv(J.y,0,1)).getDay(),J.m=0,J.d="W"in J?(J.w+6)%7+J.W*7-(Z+5)%7:J.w+J.U*7-(Z+6)%7);return"Z"in J?(J.H+=J.Z/100|0,J.M+=J.Z%100,j_(J)):X_(J)}}o(A,"newParse");function S(K,X,te,J){for(var se=0,ue=X.length,Z=te.length,Se,ce;se<ue;){if(J>=Z)return-1;if(Se=X.charCodeAt(se++),Se===37){if(Se=X.charAt(se++),ce=T[Se in vW?X.charAt(se++):Se],!ce||(J=ce(K,te,J))<0)return-1}else if(Se!=te.charCodeAt(J++))return-1}return J}o(S,"parseSpecifier");function _(K,X,te){var J=h.exec(X.slice(te));return J?(K.p=f.get(J[0].toLowerCase()),te+J[0].length):-1}o(_,"parsePeriod");function I(K,X,te){var J=m.exec(X.slice(te));return J?(K.w=g.get(J[0].toLowerCase()),te+J[0].length):-1}o(I,"parseShortWeekday");function D(K,X,te){var J=d.exec(X.slice(te));return J?(K.w=p.get(J[0].toLowerCase()),te+J[0].length):-1}o(D,"parseWeekday");function k(K,X,te){var J=x.exec(X.slice(te));return J?(K.m=b.get(J[0].toLowerCase()),te+J[0].length):-1}o(k,"parseShortMonth");function L(K,X,te){var J=y.exec(X.slice(te));return J?(K.m=v.get(J[0].toLowerCase()),te+J[0].length):-1}o(L,"parseMonth");function R(K,X,te){return S(K,e,X,te)}o(R,"parseLocaleDateTime");function O(K,X,te){return S(K,r,X,te)}o(O,"parseLocaleDate");function M(K,X,te){return S(K,n,X,te)}o(M,"parseLocaleTime");function B(K){return s[K.getDay()]}o(B,"formatShortWeekday");function F(K){return a[K.getDay()]}o(F,"formatWeekday");function P(K){return u[K.getMonth()]}o(P,"formatShortMonth");function z(K){return l[K.getMonth()]}o(z,"formatMonth");function $(K){return i[+(K.getHours()>=12)]}o($,"formatPeriod");function H(K){return 1+~~(K.getMonth()/3)}o(H,"formatQuarter");function Q(K){return s[K.getUTCDay()]}o(Q,"formatUTCShortWeekday");function j(K){return a[K.getUTCDay()]}o(j,"formatUTCWeekday");function ie(K){return u[K.getUTCMonth()]}o(ie,"formatUTCShortMonth");function ne(K){return l[K.getUTCMonth()]}o(ne,"formatUTCMonth");function le(K){return i[+(K.getUTCHours()>=12)]}o(le,"formatUTCPeriod");function he(K){return 1+~~(K.getUTCMonth()/3)}return o(he,"formatUTCQuarter"),{format:o(function(K){var X=E(K+="",w);return X.toString=function(){return K},X},"format"),parse:o(function(K){var X=A(K+="",!1);return X.toString=function(){return K},X},"parse"),utcFormat:o(function(K){var X=E(K+="",C);return X.toString=function(){return K},X},"utcFormat"),utcParse:o(function(K){var X=A(K+="",!0);return X.toString=function(){return K},X},"utcParse")}}function Wr(t,e,r){var n=t<0?"-":"",i=(n?-t:t)+"",a=i.length;return n+(a<r?new Array(r-a+1).join(e)+i:i)}function $Te(t){return t.replace(FTe,"\\$&")}function Av(t){return new RegExp("^(?:"+t.map($Te).join("|")+")","i")}function _v(t){return new Map(t.map((e,r)=>[e.toLowerCase(),r]))}function zTe(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function GTe(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function VTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function UTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function HTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function xW(t,e,r){var n=Qi.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function bW(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function WTe(t,e,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function qTe(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.q=n[0]*3-3,r+n[0].length):-1}function YTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function wW(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function XTe(t,e,r){var n=Qi.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function TW(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function jTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function KTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function QTe(t,e,r){var n=Qi.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function ZTe(t,e,r){var n=Qi.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function JTe(t,e,r){var n=BTe.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function eke(t,e,r){var n=Qi.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function tke(t,e,r){var n=Qi.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function kW(t,e){return Wr(t.getDate(),e,2)}function rke(t,e){return Wr(t.getHours(),e,2)}function nke(t,e){return Wr(t.getHours()%12||12,e,2)}function ike(t,e){return Wr(1+_o.count(Qs(t),t),e,3)}function _W(t,e){return Wr(t.getMilliseconds(),e,3)}function ake(t,e){return _W(t,e)+"000"}function ske(t,e){return Wr(t.getMonth()+1,e,2)}function oke(t,e){return Wr(t.getMinutes(),e,2)}function lke(t,e){return Wr(t.getSeconds(),e,2)}function cke(t){var e=t.getDay();return e===0?7:e}function uke(t,e){return Wr(yl.count(Qs(t)-1,t),e,2)}function DW(t){var e=t.getDay();return e>=4||e===0?oc(t):oc.ceil(t)}function hke(t,e){return t=DW(t),Wr(oc.count(Qs(t),t)+(Qs(t).getDay()===4),e,2)}function fke(t){return t.getDay()}function dke(t,e){return Wr(Ch.count(Qs(t)-1,t),e,2)}function pke(t,e){return Wr(t.getFullYear()%100,e,2)}function mke(t,e){return t=DW(t),Wr(t.getFullYear()%100,e,2)}function gke(t,e){return Wr(t.getFullYear()%1e4,e,4)}function yke(t,e){var r=t.getDay();return t=r>=4||r===0?oc(t):oc.ceil(t),Wr(t.getFullYear()%1e4,e,4)}function vke(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Wr(e/60|0,"0",2)+Wr(e%60,"0",2)}function EW(t,e){return Wr(t.getUTCDate(),e,2)}function xke(t,e){return Wr(t.getUTCHours(),e,2)}function bke(t,e){return Wr(t.getUTCHours()%12||12,e,2)}function wke(t,e){return Wr(1+Sv.count(vl(t),t),e,3)}function LW(t,e){return Wr(t.getUTCMilliseconds(),e,3)}function Tke(t,e){return LW(t,e)+"000"}function kke(t,e){return Wr(t.getUTCMonth()+1,e,2)}function Eke(t,e){return Wr(t.getUTCMinutes(),e,2)}function Ske(t,e){return Wr(t.getUTCSeconds(),e,2)}function Cke(t){var e=t.getUTCDay();return e===0?7:e}function Ake(t,e){return Wr(bd.count(vl(t)-1,t),e,2)}function RW(t){var e=t.getUTCDay();return e>=4||e===0?Ah(t):Ah.ceil(t)}function _ke(t,e){return t=RW(t),Wr(Ah.count(vl(t),t)+(vl(t).getUTCDay()===4),e,2)}function Dke(t){return t.getUTCDay()}function Lke(t,e){return Wr(N0.count(vl(t)-1,t),e,2)}function Rke(t,e){return Wr(t.getUTCFullYear()%100,e,2)}function Nke(t,e){return t=RW(t),Wr(t.getUTCFullYear()%100,e,2)}function Mke(t,e){return Wr(t.getUTCFullYear()%1e4,e,4)}function Ike(t,e){var r=t.getUTCDay();return t=r>=4||r===0?Ah(t):Ah.ceil(t),Wr(t.getUTCFullYear()%1e4,e,4)}function Oke(){return"+0000"}function SW(){return"%"}function CW(t){return+t}function AW(t){return Math.floor(+t/1e3)}var vW,Qi,BTe,FTe,NW=N(()=>{"use strict";A5();o(X_,"localDate");o(j_,"utcDate");o(Cv,"newDate");o(K_,"formatLocale");vW={"-":"",_:" ",0:"0"},Qi=/^\s*\d+/,BTe=/^%/,FTe=/[\\^$*+?|[\]().{}]/g;o(Wr,"pad");o($Te,"requote");o(Av,"formatRe");o(_v,"formatLookup");o(zTe,"parseWeekdayNumberSunday");o(GTe,"parseWeekdayNumberMonday");o(VTe,"parseWeekNumberSunday");o(UTe,"parseWeekNumberISO");o(HTe,"parseWeekNumberMonday");o(xW,"parseFullYear");o(bW,"parseYear");o(WTe,"parseZone");o(qTe,"parseQuarter");o(YTe,"parseMonthNumber");o(wW,"parseDayOfMonth");o(XTe,"parseDayOfYear");o(TW,"parseHour24");o(jTe,"parseMinutes");o(KTe,"parseSeconds");o(QTe,"parseMilliseconds");o(ZTe,"parseMicroseconds");o(JTe,"parseLiteralPercent");o(eke,"parseUnixTimestamp");o(tke,"parseUnixTimestampSeconds");o(kW,"formatDayOfMonth");o(rke,"formatHour24");o(nke,"formatHour12");o(ike,"formatDayOfYear");o(_W,"formatMilliseconds");o(ake,"formatMicroseconds");o(ske,"formatMonthNumber");o(oke,"formatMinutes");o(lke,"formatSeconds");o(cke,"formatWeekdayNumberMonday");o(uke,"formatWeekNumberSunday");o(DW,"dISO");o(hke,"formatWeekNumberISO");o(fke,"formatWeekdayNumberSunday");o(dke,"formatWeekNumberMonday");o(pke,"formatYear");o(mke,"formatYearISO");o(gke,"formatFullYear");o(yke,"formatFullYearISO");o(vke,"formatZone");o(EW,"formatUTCDayOfMonth");o(xke,"formatUTCHour24");o(bke,"formatUTCHour12");o(wke,"formatUTCDayOfYear");o(LW,"formatUTCMilliseconds");o(Tke,"formatUTCMicroseconds");o(kke,"formatUTCMonthNumber");o(Eke,"formatUTCMinutes");o(Ske,"formatUTCSeconds");o(Cke,"formatUTCWeekdayNumberMonday");o(Ake,"formatUTCWeekNumberSunday");o(RW,"UTCdISO");o(_ke,"formatUTCWeekNumberISO");o(Dke,"formatUTCWeekdayNumberSunday");o(Lke,"formatUTCWeekNumberMonday");o(Rke,"formatUTCYear");o(Nke,"formatUTCYearISO");o(Mke,"formatUTCFullYear");o(Ike,"formatUTCFullYearISO");o(Oke,"formatUTCZone");o(SW,"formatLiteralPercent");o(CW,"formatUnixTimestamp");o(AW,"formatUnixTimestampSeconds")});function Q_(t){return M0=K_(t),wd=M0.format,MW=M0.parse,IW=M0.utcFormat,OW=M0.utcParse,M0}var M0,wd,MW,IW,OW,PW=N(()=>{"use strict";NW();Q_({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});o(Q_,"defaultLocale")});var Z_=N(()=>{"use strict";PW()});function Pke(t){return new Date(t)}function Bke(t){return t instanceof Date?+t:+new Date(+t)}function BW(t,e,r,n,i,a,s,l,u,h){var f=kv(),d=f.invert,p=f.domain,m=h(".%L"),g=h(":%S"),y=h("%I:%M"),v=h("%I %p"),x=h("%a %d"),b=h("%b %d"),w=h("%B"),C=h("%Y");function T(E){return(u(E)<E?m:l(E)<E?g:s(E)<E?y:a(E)<E?v:n(E)<E?i(E)<E?x:b:r(E)<E?w:C)(E)}return o(T,"tickFormat"),f.invert=function(E){return new Date(d(E))},f.domain=function(E){return arguments.length?p(Array.from(E,Bke)):p().map(Pke)},f.ticks=function(E){var A=p();return t(A[0],A[A.length-1],E??10)},f.tickFormat=function(E,A){return A==null?T:h(A)},f.nice=function(E){var A=p();return(!E||typeof E.range!="function")&&(E=e(A[0],A[A.length-1],E??10)),E?p(O_(A,E)):f},f.copy=function(){return v5(f,BW(t,e,r,n,i,a,s,l,u,h))},f}function _5(){return Sh.apply(BW(q_,Y_,Qs,bu,yl,_o,xu,vu,Ks,wd).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}var FW=N(()=>{"use strict";A5();Z_();M_();Tv();aW();o(Pke,"date");o(Bke,"number");o(BW,"calendar");o(_5,"time")});var $W=N(()=>{"use strict";JH();iW();D_();FW()});function J_(t){for(var e=t.length/6|0,r=new Array(e),n=0;n<e;)r[n]="#"+t.slice(n*6,++n*6);return r}var zW=N(()=>{"use strict";o(J_,"default")});var e9,GW=N(()=>{"use strict";zW();e9=J_("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab")});var VW=N(()=>{"use strict";GW()});function Bn(t){return o(function(){return t},"constant")}var D5=N(()=>{"use strict";o(Bn,"default")});function HW(t){return t>1?0:t<-1?I0:Math.acos(t)}function r9(t){return t>=1?Dv:t<=-1?-Dv:Math.asin(t)}var t9,fa,_h,UW,L5,xl,Td,Zi,I0,Dv,O0,R5=N(()=>{"use strict";t9=Math.abs,fa=Math.atan2,_h=Math.cos,UW=Math.max,L5=Math.min,xl=Math.sin,Td=Math.sqrt,Zi=1e-12,I0=Math.PI,Dv=I0/2,O0=2*I0;o(HW,"acos");o(r9,"asin")});function N5(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(r==null)e=null;else{let n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);e=n}return t},()=>new pd(e)}var n9=N(()=>{"use strict";m_();o(N5,"withPath")});function Fke(t){return t.innerRadius}function $ke(t){return t.outerRadius}function zke(t){return t.startAngle}function Gke(t){return t.endAngle}function Vke(t){return t&&t.padAngle}function Uke(t,e,r,n,i,a,s,l){var u=r-t,h=n-e,f=s-i,d=l-a,p=d*u-f*h;if(!(p*p<Zi))return p=(f*(e-a)-d*(t-i))/p,[t+p*u,e+p*h]}function M5(t,e,r,n,i,a,s){var l=t-r,u=e-n,h=(s?a:-a)/Td(l*l+u*u),f=h*u,d=-h*l,p=t+f,m=e+d,g=r+f,y=n+d,v=(p+g)/2,x=(m+y)/2,b=g-p,w=y-m,C=b*b+w*w,T=i-a,E=p*y-g*m,A=(w<0?-1:1)*Td(UW(0,T*T*C-E*E)),S=(E*w-b*A)/C,_=(-E*b-w*A)/C,I=(E*w+b*A)/C,D=(-E*b+w*A)/C,k=S-v,L=_-x,R=I-v,O=D-x;return k*k+L*L>R*R+O*O&&(S=I,_=D),{cx:S,cy:_,x01:-f,y01:-d,x11:S*(i/T-1),y11:_*(i/T-1)}}function bl(){var t=Fke,e=$ke,r=Bn(0),n=null,i=zke,a=Gke,s=Vke,l=null,u=N5(h);function h(){var f,d,p=+t.apply(this,arguments),m=+e.apply(this,arguments),g=i.apply(this,arguments)-Dv,y=a.apply(this,arguments)-Dv,v=t9(y-g),x=y>g;if(l||(l=f=u()),m<p&&(d=m,m=p,p=d),!(m>Zi))l.moveTo(0,0);else if(v>O0-Zi)l.moveTo(m*_h(g),m*xl(g)),l.arc(0,0,m,g,y,!x),p>Zi&&(l.moveTo(p*_h(y),p*xl(y)),l.arc(0,0,p,y,g,x));else{var b=g,w=y,C=g,T=y,E=v,A=v,S=s.apply(this,arguments)/2,_=S>Zi&&(n?+n.apply(this,arguments):Td(p*p+m*m)),I=L5(t9(m-p)/2,+r.apply(this,arguments)),D=I,k=I,L,R;if(_>Zi){var O=r9(_/p*xl(S)),M=r9(_/m*xl(S));(E-=O*2)>Zi?(O*=x?1:-1,C+=O,T-=O):(E=0,C=T=(g+y)/2),(A-=M*2)>Zi?(M*=x?1:-1,b+=M,w-=M):(A=0,b=w=(g+y)/2)}var B=m*_h(b),F=m*xl(b),P=p*_h(T),z=p*xl(T);if(I>Zi){var $=m*_h(w),H=m*xl(w),Q=p*_h(C),j=p*xl(C),ie;if(v<I0)if(ie=Uke(B,F,Q,j,$,H,P,z)){var ne=B-ie[0],le=F-ie[1],he=$-ie[0],K=H-ie[1],X=1/xl(HW((ne*he+le*K)/(Td(ne*ne+le*le)*Td(he*he+K*K)))/2),te=Td(ie[0]*ie[0]+ie[1]*ie[1]);D=L5(I,(p-te)/(X-1)),k=L5(I,(m-te)/(X+1))}else D=k=0}A>Zi?k>Zi?(L=M5(Q,j,B,F,m,k,x),R=M5($,H,P,z,m,k,x),l.moveTo(L.cx+L.x01,L.cy+L.y01),k<I?l.arc(L.cx,L.cy,k,fa(L.y01,L.x01),fa(R.y01,R.x01),!x):(l.arc(L.cx,L.cy,k,fa(L.y01,L.x01),fa(L.y11,L.x11),!x),l.arc(0,0,m,fa(L.cy+L.y11,L.cx+L.x11),fa(R.cy+R.y11,R.cx+R.x11),!x),l.arc(R.cx,R.cy,k,fa(R.y11,R.x11),fa(R.y01,R.x01),!x))):(l.moveTo(B,F),l.arc(0,0,m,b,w,!x)):l.moveTo(B,F),!(p>Zi)||!(E>Zi)?l.lineTo(P,z):D>Zi?(L=M5(P,z,$,H,p,-D,x),R=M5(B,F,Q,j,p,-D,x),l.lineTo(L.cx+L.x01,L.cy+L.y01),D<I?l.arc(L.cx,L.cy,D,fa(L.y01,L.x01),fa(R.y01,R.x01),!x):(l.arc(L.cx,L.cy,D,fa(L.y01,L.x01),fa(L.y11,L.x11),!x),l.arc(0,0,p,fa(L.cy+L.y11,L.cx+L.x11),fa(R.cy+R.y11,R.cx+R.x11),x),l.arc(R.cx,R.cy,D,fa(R.y11,R.x11),fa(R.y01,R.x01),!x))):l.arc(0,0,p,T,C,x)}if(l.closePath(),f)return l=null,f+""||null}return o(h,"arc"),h.centroid=function(){var f=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,d=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-I0/2;return[_h(d)*f,xl(d)*f]},h.innerRadius=function(f){return arguments.length?(t=typeof f=="function"?f:Bn(+f),h):t},h.outerRadius=function(f){return arguments.length?(e=typeof f=="function"?f:Bn(+f),h):e},h.cornerRadius=function(f){return arguments.length?(r=typeof f=="function"?f:Bn(+f),h):r},h.padRadius=function(f){return arguments.length?(n=f==null?null:typeof f=="function"?f:Bn(+f),h):n},h.startAngle=function(f){return arguments.length?(i=typeof f=="function"?f:Bn(+f),h):i},h.endAngle=function(f){return arguments.length?(a=typeof f=="function"?f:Bn(+f),h):a},h.padAngle=function(f){return arguments.length?(s=typeof f=="function"?f:Bn(+f),h):s},h.context=function(f){return arguments.length?(l=f??null,h):l},h}var WW=N(()=>{"use strict";D5();R5();n9();o(Fke,"arcInnerRadius");o($ke,"arcOuterRadius");o(zke,"arcStartAngle");o(Gke,"arcEndAngle");o(Vke,"arcPadAngle");o(Uke,"intersect");o(M5,"cornerTangents");o(bl,"default")});function Lv(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}var Nyt,i9=N(()=>{"use strict";Nyt=Array.prototype.slice;o(Lv,"default")});function qW(t){this._context=t}function wu(t){return new qW(t)}var a9=N(()=>{"use strict";o(qW,"Linear");qW.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e);break}},"point")};o(wu,"default")});function YW(t){return t[0]}function XW(t){return t[1]}var jW=N(()=>{"use strict";o(YW,"x");o(XW,"y")});function wl(t,e){var r=Bn(!0),n=null,i=wu,a=null,s=N5(l);t=typeof t=="function"?t:t===void 0?YW:Bn(t),e=typeof e=="function"?e:e===void 0?XW:Bn(e);function l(u){var h,f=(u=Lv(u)).length,d,p=!1,m;for(n==null&&(a=i(m=s())),h=0;h<=f;++h)!(h<f&&r(d=u[h],h,u))===p&&((p=!p)?a.lineStart():a.lineEnd()),p&&a.point(+t(d,h,u),+e(d,h,u));if(m)return a=null,m+""||null}return o(l,"line"),l.x=function(u){return arguments.length?(t=typeof u=="function"?u:Bn(+u),l):t},l.y=function(u){return arguments.length?(e=typeof u=="function"?u:Bn(+u),l):e},l.defined=function(u){return arguments.length?(r=typeof u=="function"?u:Bn(!!u),l):r},l.curve=function(u){return arguments.length?(i=u,n!=null&&(a=i(n)),l):i},l.context=function(u){return arguments.length?(u==null?n=a=null:a=i(n=u),l):n},l}var KW=N(()=>{"use strict";i9();D5();a9();n9();jW();o(wl,"default")});function s9(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}var QW=N(()=>{"use strict";o(s9,"default")});function o9(t){return t}var ZW=N(()=>{"use strict";o(o9,"default")});function I5(){var t=o9,e=s9,r=null,n=Bn(0),i=Bn(O0),a=Bn(0);function s(l){var u,h=(l=Lv(l)).length,f,d,p=0,m=new Array(h),g=new Array(h),y=+n.apply(this,arguments),v=Math.min(O0,Math.max(-O0,i.apply(this,arguments)-y)),x,b=Math.min(Math.abs(v)/h,a.apply(this,arguments)),w=b*(v<0?-1:1),C;for(u=0;u<h;++u)(C=g[m[u]=u]=+t(l[u],u,l))>0&&(p+=C);for(e!=null?m.sort(function(T,E){return e(g[T],g[E])}):r!=null&&m.sort(function(T,E){return r(l[T],l[E])}),u=0,d=p?(v-h*w)/p:0;u<h;++u,y=x)f=m[u],C=g[f],x=y+(C>0?C*d:0)+w,g[f]={data:l[f],index:u,value:C,startAngle:y,endAngle:x,padAngle:b};return g}return o(s,"pie"),s.value=function(l){return arguments.length?(t=typeof l=="function"?l:Bn(+l),s):t},s.sortValues=function(l){return arguments.length?(e=l,r=null,s):e},s.sort=function(l){return arguments.length?(r=l,e=null,s):r},s.startAngle=function(l){return arguments.length?(n=typeof l=="function"?l:Bn(+l),s):n},s.endAngle=function(l){return arguments.length?(i=typeof l=="function"?l:Bn(+l),s):i},s.padAngle=function(l){return arguments.length?(a=typeof l=="function"?l:Bn(+l),s):a},s}var JW=N(()=>{"use strict";i9();D5();QW();ZW();R5();o(I5,"default")});function Rv(t){return new O5(t,!0)}function Nv(t){return new O5(t,!1)}var O5,eq=N(()=>{"use strict";O5=class{static{o(this,"Bump")}constructor(e,r){this._context=e,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,r){switch(e=+e,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,r,e,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,e,this._y0,e,r);break}}this._x0=e,this._y0=r}};o(Rv,"bumpX");o(Nv,"bumpY")});function Zs(){}var Mv=N(()=>{"use strict";o(Zs,"default")});function P0(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function Iv(t){this._context=t}function Do(t){return new Iv(t)}var Ov=N(()=>{"use strict";o(P0,"point");o(Iv,"Basis");Iv.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 3:P0(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:P0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(Do,"default")});function tq(t){this._context=t}function P5(t){return new tq(t)}var rq=N(()=>{"use strict";Mv();Ov();o(tq,"BasisClosed");tq.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:P0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(P5,"default")});function nq(t){this._context=t}function B5(t){return new nq(t)}var iq=N(()=>{"use strict";Ov();o(nq,"BasisOpen");nq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:P0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(B5,"default")});function aq(t,e){this._basis=new Iv(t),this._beta=e}var l9,sq=N(()=>{"use strict";Ov();o(aq,"Bundle");aq.prototype={lineStart:o(function(){this._x=[],this._y=[],this._basis.lineStart()},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var n=t[0],i=e[0],a=t[r]-n,s=e[r]-i,l=-1,u;++l<=r;)u=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(n+u*a),this._beta*e[l]+(1-this._beta)*(i+u*s));this._x=this._y=null,this._basis.lineEnd()},"lineEnd"),point:o(function(t,e){this._x.push(+t),this._y.push(+e)},"point")};l9=o(function t(e){function r(n){return e===1?new Iv(n):new aq(n,e)}return o(r,"bundle"),r.beta=function(n){return t(+n)},r},"custom")(.85)});function B0(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function F5(t,e){this._context=t,this._k=(1-e)/6}var Pv,Bv=N(()=>{"use strict";o(B0,"point");o(F5,"Cardinal");F5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:B0(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:B0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};Pv=o(function t(e){function r(n){return new F5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function $5(t,e){this._context=t,this._k=(1-e)/6}var c9,u9=N(()=>{"use strict";Mv();Bv();o($5,"CardinalClosed");$5.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:B0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};c9=o(function t(e){function r(n){return new $5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function z5(t,e){this._context=t,this._k=(1-e)/6}var h9,f9=N(()=>{"use strict";Bv();o(z5,"CardinalOpen");z5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:B0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};h9=o(function t(e){function r(n){return new z5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function Fv(t,e,r){var n=t._x1,i=t._y1,a=t._x2,s=t._y2;if(t._l01_a>Zi){var l=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,u=3*t._l01_a*(t._l01_a+t._l12_a);n=(n*l-t._x0*t._l12_2a+t._x2*t._l01_2a)/u,i=(i*l-t._y0*t._l12_2a+t._y2*t._l01_2a)/u}if(t._l23_a>Zi){var h=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*h+t._x1*t._l23_2a-e*t._l12_2a)/f,s=(s*h+t._y1*t._l23_2a-r*t._l12_2a)/f}t._context.bezierCurveTo(n,i,a,s,t._x2,t._y2)}function oq(t,e){this._context=t,this._alpha=e}var $v,G5=N(()=>{"use strict";R5();Bv();o(Fv,"point");o(oq,"CatmullRom");oq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Fv(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};$v=o(function t(e){function r(n){return e?new oq(n,e):new F5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function lq(t,e){this._context=t,this._alpha=e}var d9,cq=N(()=>{"use strict";u9();Mv();G5();o(lq,"CatmullRomClosed");lq.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Fv(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};d9=o(function t(e){function r(n){return e?new lq(n,e):new $5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function uq(t,e){this._context=t,this._alpha=e}var p9,hq=N(()=>{"use strict";f9();G5();o(uq,"CatmullRomOpen");uq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Fv(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};p9=o(function t(e){function r(n){return e?new uq(n,e):new z5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function fq(t){this._context=t}function V5(t){return new fq(t)}var dq=N(()=>{"use strict";Mv();o(fq,"LinearClosed");fq.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){this._point&&this._context.closePath()},"lineEnd"),point:o(function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))},"point")};o(V5,"default")});function pq(t){return t<0?-1:1}function mq(t,e,r){var n=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(n||i<0&&-0),s=(r-t._y1)/(i||n<0&&-0),l=(a*i+s*n)/(n+i);return(pq(a)+pq(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(l))||0}function gq(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function m9(t,e,r){var n=t._x0,i=t._y0,a=t._x1,s=t._y1,l=(a-n)/3;t._context.bezierCurveTo(n+l,i+l*e,a-l,s-l*r,a,s)}function U5(t){this._context=t}function yq(t){this._context=new vq(t)}function vq(t){this._context=t}function zv(t){return new U5(t)}function Gv(t){return new yq(t)}var xq=N(()=>{"use strict";o(pq,"sign");o(mq,"slope3");o(gq,"slope2");o(m9,"point");o(U5,"MonotoneX");U5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:m9(this,this._t0,gq(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){var r=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,m9(this,gq(this,r=mq(this,t,e)),r);break;default:m9(this,this._t0,r=mq(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}},"point")};o(yq,"MonotoneY");(yq.prototype=Object.create(U5.prototype)).point=function(t,e){U5.prototype.point.call(this,e,t)};o(vq,"ReflectContext");vq.prototype={moveTo:o(function(t,e){this._context.moveTo(e,t)},"moveTo"),closePath:o(function(){this._context.closePath()},"closePath"),lineTo:o(function(t,e){this._context.lineTo(e,t)},"lineTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._context.bezierCurveTo(e,t,n,r,a,i)},"bezierCurveTo")};o(zv,"monotoneX");o(Gv,"monotoneY")});function wq(t){this._context=t}function bq(t){var e,r=t.length-1,n,i=new Array(r),a=new Array(r),s=new Array(r);for(i[0]=0,a[0]=2,s[0]=t[0]+2*t[1],e=1;e<r-1;++e)i[e]=1,a[e]=4,s[e]=4*t[e]+2*t[e+1];for(i[r-1]=2,a[r-1]=7,s[r-1]=8*t[r-1]+t[r],e=1;e<r;++e)n=i[e]/a[e-1],a[e]-=n,s[e]-=n*s[e-1];for(i[r-1]=s[r-1]/a[r-1],e=r-2;e>=0;--e)i[e]=(s[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e<r-1;++e)a[e]=2*t[e+1]-i[e+1];return[i,a]}function F0(t){return new wq(t)}var Tq=N(()=>{"use strict";o(wq,"Natural");wq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=[],this._y=[]},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),r===2)this._context.lineTo(t[1],e[1]);else for(var n=bq(t),i=bq(e),a=0,s=1;s<r;++a,++s)this._context.bezierCurveTo(n[0][a],i[0][a],n[1][a],i[1][a],t[s],e[s]);(this._line||this._line!==0&&r===1)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},"lineEnd"),point:o(function(t,e){this._x.push(+t),this._y.push(+e)},"point")};o(bq,"controlPoints");o(F0,"default")});function H5(t,e){this._context=t,this._t=e}function $0(t){return new H5(t,.5)}function Vv(t){return new H5(t,0)}function Uv(t){return new H5(t,1)}var kq=N(()=>{"use strict";o(H5,"Step");H5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=this._y=NaN,this._point=0},"lineStart"),lineEnd:o(function(){0<this._t&&this._t<1&&this._point===2&&this._context.lineTo(this._x,this._y),(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}break}}this._x=t,this._y=e},"point")};o($0,"default");o(Vv,"stepBefore");o(Uv,"stepAfter")});var Eq=N(()=>{"use strict";WW();KW();JW();rq();iq();Ov();eq();sq();u9();f9();Bv();cq();hq();G5();dq();a9();xq();Tq();kq()});var Sq=N(()=>{"use strict"});var Cq=N(()=>{"use strict"});function Dh(t,e,r){this.k=t,this.x=e,this.y=r}function y9(t){for(;!t.__zoom;)if(!(t=t.parentNode))return g9;return t.__zoom}var g9,v9=N(()=>{"use strict";o(Dh,"Transform");Dh.prototype={constructor:Dh,scale:o(function(t){return t===1?this:new Dh(this.k*t,this.x,this.y)},"scale"),translate:o(function(t,e){return t===0&e===0?this:new Dh(this.k,this.x+this.k*t,this.y+this.k*e)},"translate"),apply:o(function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},"apply"),applyX:o(function(t){return t*this.k+this.x},"applyX"),applyY:o(function(t){return t*this.k+this.y},"applyY"),invert:o(function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},"invert"),invertX:o(function(t){return(t-this.x)/this.k},"invertX"),invertY:o(function(t){return(t-this.y)/this.k},"invertY"),rescaleX:o(function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},"rescaleX"),rescaleY:o(function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},"rescaleY"),toString:o(function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"},"toString")};g9=new Dh(1,0,0);y9.prototype=Dh.prototype;o(y9,"transform")});var Aq=N(()=>{"use strict"});var _q=N(()=>{"use strict";l5();Sq();Cq();v9();Aq()});var Dq=N(()=>{"use strict";_q();v9()});var dr=N(()=>{"use strict";vh();sV();SH();DH();E0();LH();RH();TA();QV();NH();u_();MH();OH();A_();jH();KH();A0();m_();QH();IH();ZH();$W();VW();fl();Eq();A5();Z_();r5();l5();Dq()});var Lq=Mi(Ji=>{"use strict";Object.defineProperty(Ji,"__esModule",{value:!0});Ji.BLANK_URL=Ji.relativeFirstCharacters=Ji.whitespaceEscapeCharsRegex=Ji.urlSchemeRegex=Ji.ctrlCharactersRegex=Ji.htmlCtrlEntityRegex=Ji.htmlEntitiesRegex=Ji.invalidProtocolRegex=void 0;Ji.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im;Ji.htmlEntitiesRegex=/&#(\w+)(^\w|;)?/g;Ji.htmlCtrlEntityRegex=/&(newline|tab);/gi;Ji.ctrlCharactersRegex=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;Ji.urlSchemeRegex=/^.+(:|&colon;)/gim;Ji.whitespaceEscapeCharsRegex=/(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;Ji.relativeFirstCharacters=[".","/"];Ji.BLANK_URL="about:blank"});var z0=Mi(W5=>{"use strict";Object.defineProperty(W5,"__esModule",{value:!0});W5.sanitizeUrl=void 0;var Aa=Lq();function Hke(t){return Aa.relativeFirstCharacters.indexOf(t[0])>-1}o(Hke,"isRelativeUrlWithoutProtocol");function Wke(t){var e=t.replace(Aa.ctrlCharactersRegex,"");return e.replace(Aa.htmlEntitiesRegex,function(r,n){return String.fromCharCode(n)})}o(Wke,"decodeHtmlCharacters");function qke(t){return URL.canParse(t)}o(qke,"isValidUrl");function Rq(t){try{return decodeURIComponent(t)}catch{return t}}o(Rq,"decodeURI");function Yke(t){if(!t)return Aa.BLANK_URL;var e,r=Rq(t.trim());do r=Wke(r).replace(Aa.htmlCtrlEntityRegex,"").replace(Aa.ctrlCharactersRegex,"").replace(Aa.whitespaceEscapeCharsRegex,"").trim(),r=Rq(r),e=r.match(Aa.ctrlCharactersRegex)||r.match(Aa.htmlEntitiesRegex)||r.match(Aa.htmlCtrlEntityRegex)||r.match(Aa.whitespaceEscapeCharsRegex);while(e&&e.length>0);var n=r;if(!n)return Aa.BLANK_URL;if(Hke(n))return n;var i=n.trimStart(),a=i.match(Aa.urlSchemeRegex);if(!a)return n;var s=a[0].toLowerCase().trim();if(Aa.invalidProtocolRegex.test(s))return Aa.BLANK_URL;var l=i.replace(/\\/g,"/");if(s==="mailto:"||s.includes("://"))return l;if(s==="http:"||s==="https:"){if(!qke(l))return Aa.BLANK_URL;var u=new URL(l);return u.protocol=u.protocol.toLowerCase(),u.hostname=u.hostname.toLowerCase(),u.toString()}return l}o(Yke,"sanitizeUrl");W5.sanitizeUrl=Yke});var x9,kd,q5,Nq,Mq,Iq,Tl,Hv,Wv=N(()=>{"use strict";x9=Sa(z0(),1);gr();kd=o((t,e)=>{let r=t.append("rect");if(r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),e.name&&r.attr("name",e.name),e.rx&&r.attr("rx",e.rx),e.ry&&r.attr("ry",e.ry),e.attrs!==void 0)for(let n in e.attrs)r.attr(n,e.attrs[n]);return e.class&&r.attr("class",e.class),r},"drawRect"),q5=o((t,e)=>{let r={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};kd(t,r).lower()},"drawBackgroundRect"),Nq=o((t,e)=>{let r=e.text.replace(nd," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),Mq=o((t,e,r,n)=>{let i=t.append("image");i.attr("x",e),i.attr("y",r);let a=(0,x9.sanitizeUrl)(n);i.attr("xlink:href",a)},"drawImage"),Iq=o((t,e,r,n)=>{let i=t.append("use");i.attr("x",e),i.attr("y",r);let a=(0,x9.sanitizeUrl)(n);i.attr("xlink:href",`#${a}`)},"drawEmbeddedImage"),Tl=o(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),Hv=o(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj")});var Oq,b9,Pq,Xke,jke,Kke,Qke,Zke,Jke,eEe,tEe,rEe,nEe,iEe,aEe,Tu,kl,Bq=N(()=>{"use strict";gr();Wv();Oq=Sa(z0(),1),b9=o(function(t,e){return kd(t,e)},"drawRect"),Pq=o(function(t,e,r,n,i,a){let s=t.append("image");s.attr("width",e),s.attr("height",r),s.attr("x",n),s.attr("y",i);let l=a.startsWith("data:image/png;base64")?a:(0,Oq.sanitizeUrl)(a);s.attr("xlink:href",l)},"drawImage"),Xke=o((t,e,r)=>{let n=t.append("g"),i=0;for(let a of e){let s=a.textColor?a.textColor:"#444444",l=a.lineColor?a.lineColor:"#444444",u=a.offsetX?parseInt(a.offsetX):0,h=a.offsetY?parseInt(a.offsetY):0,f="";if(i===0){let p=n.append("line");p.attr("x1",a.startPoint.x),p.attr("y1",a.startPoint.y),p.attr("x2",a.endPoint.x),p.attr("y2",a.endPoint.y),p.attr("stroke-width","1"),p.attr("stroke",l),p.style("fill","none"),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)"),i=-1}else{let p=n.append("path");p.attr("fill","none").attr("stroke-width","1").attr("stroke",l).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",a.startPoint.x).replaceAll("starty",a.startPoint.y).replaceAll("controlx",a.startPoint.x+(a.endPoint.x-a.startPoint.x)/2-(a.endPoint.x-a.startPoint.x)/4).replaceAll("controly",a.startPoint.y+(a.endPoint.y-a.startPoint.y)/2).replaceAll("stopx",a.endPoint.x).replaceAll("stopy",a.endPoint.y)),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)")}let d=r.messageFont();Tu(r)(a.label.text,n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+h,a.label.width,a.label.height,{fill:s},d),a.techn&&a.techn.text!==""&&(d=r.messageFont(),Tu(r)("["+a.techn.text+"]",n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+r.messageFontSize+5+h,Math.max(a.label.width,a.techn.width),a.techn.height,{fill:s,"font-style":"italic"},d))}},"drawRels"),jke=o(function(t,e,r){let n=t.append("g"),i=e.bgColor?e.bgColor:"none",a=e.borderColor?e.borderColor:"#444444",s=e.fontColor?e.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(l={"stroke-width":1});let u={x:e.x,y:e.y,fill:i,stroke:a,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};b9(n,u);let h=r.boundaryFont();h.fontWeight="bold",h.fontSize=h.fontSize+2,h.fontColor=s,Tu(r)(e.label.text,n,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},h),e.type&&e.type.text!==""&&(h=r.boundaryFont(),h.fontColor=s,Tu(r)(e.type.text,n,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},h)),e.descr&&e.descr.text!==""&&(h=r.boundaryFont(),h.fontSize=h.fontSize-2,h.fontColor=s,Tu(r)(e.descr.text,n,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},h))},"drawBoundary"),Kke=o(function(t,e,r){let n=e.bgColor?e.bgColor:r[e.typeC4Shape.text+"_bg_color"],i=e.borderColor?e.borderColor:r[e.typeC4Shape.text+"_border_color"],a=e.fontColor?e.fontColor:"#FFFFFF",s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}let l=t.append("g");l.attr("class","person-man");let u=Tl();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":u.x=e.x,u.y=e.y,u.fill=n,u.width=e.width,u.height=e.height,u.stroke=i,u.rx=2.5,u.ry=2.5,u.attrs={"stroke-width":.5},b9(l,u);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2));break}let h=aEe(r,e.typeC4Shape.text);switch(l.append("text").attr("fill",a).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":Pq(l,48,48,e.x+e.width/2-24,e.y+e.image.Y,s);break}let f=r[e.typeC4Shape.text+"Font"]();return f.fontWeight="bold",f.fontSize=f.fontSize+2,f.fontColor=a,Tu(r)(e.label.text,l,e.x,e.y+e.label.Y,e.width,e.height,{fill:a},f),f=r[e.typeC4Shape.text+"Font"](),f.fontColor=a,e.techn&&e.techn?.text!==""?Tu(r)(e.techn.text,l,e.x,e.y+e.techn.Y,e.width,e.height,{fill:a,"font-style":"italic"},f):e.type&&e.type.text!==""&&Tu(r)(e.type.text,l,e.x,e.y+e.type.Y,e.width,e.height,{fill:a,"font-style":"italic"},f),e.descr&&e.descr.text!==""&&(f=r.personFont(),f.fontColor=a,Tu(r)(e.descr.text,l,e.x,e.y+e.descr.Y,e.width,e.height,{fill:a},f)),e.height},"drawC4Shape"),Qke=o(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),Zke=o(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),Jke=o(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),eEe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},"insertArrowHead"),tEe=o(function(t){t.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},"insertArrowEnd"),rEe=o(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),nEe=o(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertDynamicNumber"),iEe=o(function(t){let r=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);r.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),r.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},"insertArrowCrossHead"),aEe=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"getC4ShapeFont"),Tu=function(){function t(i,a,s,l,u,h,f){let d=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("text-anchor","middle").text(i);n(d,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d){let{fontSize:p,fontFamily:m,fontWeight:g}=d,y=i.split(Ze.lineBreakRegex);for(let v=0;v<y.length;v++){let x=v*p-p*(y.length-1)/2,b=a.append("text").attr("x",s+u/2).attr("y",l).style("text-anchor","middle").attr("dominant-baseline","middle").style("font-size",p).style("font-weight",g).style("font-family",m);b.append("tspan").attr("dy",x).text(y[v]).attr("alignment-baseline","mathematical"),n(b,f)}}o(e,"byTspan");function r(i,a,s,l,u,h,f,d){let p=a.append("switch"),g=p.append("foreignObject").attr("x",s).attr("y",l).attr("width",u).attr("height",h).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");g.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,p,s,l,u,h,f,d),n(g,f)}o(r,"byFo");function n(i,a){for(let s in a)a.hasOwnProperty(s)&&i.attr(s,a[s])}return o(n,"_setTextAttrs"),function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),kl={drawRect:b9,drawBoundary:jke,drawC4Shape:Kke,drawRels:Xke,drawImage:Pq,insertArrowHead:eEe,insertArrowEnd:tEe,insertArrowFilledHead:rEe,insertDynamicNumber:nEe,insertArrowCrossHead:iEe,insertDatabaseIcon:Qke,insertComputerIcon:Zke,insertClockIcon:Jke}});var sEe,X5,w9=N(()=>{"use strict";sEe=typeof global=="object"&&global&&global.Object===Object&&global,X5=sEe});var oEe,lEe,li,Lo=N(()=>{"use strict";w9();oEe=typeof self=="object"&&self&&self.Object===Object&&self,lEe=X5||oEe||Function("return this")(),li=lEe});var cEe,ea,Ed=N(()=>{"use strict";Lo();cEe=li.Symbol,ea=cEe});function fEe(t){var e=uEe.call(t,qv),r=t[qv];try{t[qv]=void 0;var n=!0}catch{}var i=hEe.call(t);return n&&(e?t[qv]=r:delete t[qv]),i}var Fq,uEe,hEe,qv,$q,zq=N(()=>{"use strict";Ed();Fq=Object.prototype,uEe=Fq.hasOwnProperty,hEe=Fq.toString,qv=ea?ea.toStringTag:void 0;o(fEe,"getRawTag");$q=fEe});function mEe(t){return pEe.call(t)}var dEe,pEe,Gq,Vq=N(()=>{"use strict";dEe=Object.prototype,pEe=dEe.toString;o(mEe,"objectToString");Gq=mEe});function vEe(t){return t==null?t===void 0?yEe:gEe:Uq&&Uq in Object(t)?$q(t):Gq(t)}var gEe,yEe,Uq,da,ku=N(()=>{"use strict";Ed();zq();Vq();gEe="[object Null]",yEe="[object Undefined]",Uq=ea?ea.toStringTag:void 0;o(vEe,"baseGetTag");da=vEe});function xEe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var bn,Js=N(()=>{"use strict";o(xEe,"isObject");bn=xEe});function EEe(t){if(!bn(t))return!1;var e=da(t);return e==wEe||e==TEe||e==bEe||e==kEe}var bEe,wEe,TEe,kEe,Si,Yv=N(()=>{"use strict";ku();Js();bEe="[object AsyncFunction]",wEe="[object Function]",TEe="[object GeneratorFunction]",kEe="[object Proxy]";o(EEe,"isFunction");Si=EEe});var SEe,j5,Hq=N(()=>{"use strict";Lo();SEe=li["__core-js_shared__"],j5=SEe});function CEe(t){return!!Wq&&Wq in t}var Wq,qq,Yq=N(()=>{"use strict";Hq();Wq=function(){var t=/[^.]+$/.exec(j5&&j5.keys&&j5.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();o(CEe,"isMasked");qq=CEe});function DEe(t){if(t!=null){try{return _Ee.call(t)}catch{}try{return t+""}catch{}}return""}var AEe,_Ee,Eu,T9=N(()=>{"use strict";AEe=Function.prototype,_Ee=AEe.toString;o(DEe,"toSource");Eu=DEe});function BEe(t){if(!bn(t)||qq(t))return!1;var e=Si(t)?PEe:REe;return e.test(Eu(t))}var LEe,REe,NEe,MEe,IEe,OEe,PEe,Xq,jq=N(()=>{"use strict";Yv();Yq();Js();T9();LEe=/[\\^$.*+?()[\]{}|]/g,REe=/^\[object .+?Constructor\]$/,NEe=Function.prototype,MEe=Object.prototype,IEe=NEe.toString,OEe=MEe.hasOwnProperty,PEe=RegExp("^"+IEe.call(OEe).replace(LEe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(BEe,"baseIsNative");Xq=BEe});function FEe(t,e){return t?.[e]}var Kq,Qq=N(()=>{"use strict";o(FEe,"getValue");Kq=FEe});function $Ee(t,e){var r=Kq(t,e);return Xq(r)?r:void 0}var Ss,Lh=N(()=>{"use strict";jq();Qq();o($Ee,"getNative");Ss=$Ee});var zEe,Su,Xv=N(()=>{"use strict";Lh();zEe=Ss(Object,"create"),Su=zEe});function GEe(){this.__data__=Su?Su(null):{},this.size=0}var Zq,Jq=N(()=>{"use strict";Xv();o(GEe,"hashClear");Zq=GEe});function VEe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var eY,tY=N(()=>{"use strict";o(VEe,"hashDelete");eY=VEe});function qEe(t){var e=this.__data__;if(Su){var r=e[t];return r===UEe?void 0:r}return WEe.call(e,t)?e[t]:void 0}var UEe,HEe,WEe,rY,nY=N(()=>{"use strict";Xv();UEe="__lodash_hash_undefined__",HEe=Object.prototype,WEe=HEe.hasOwnProperty;o(qEe,"hashGet");rY=qEe});function jEe(t){var e=this.__data__;return Su?e[t]!==void 0:XEe.call(e,t)}var YEe,XEe,iY,aY=N(()=>{"use strict";Xv();YEe=Object.prototype,XEe=YEe.hasOwnProperty;o(jEe,"hashHas");iY=jEe});function QEe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Su&&e===void 0?KEe:e,this}var KEe,sY,oY=N(()=>{"use strict";Xv();KEe="__lodash_hash_undefined__";o(QEe,"hashSet");sY=QEe});function G0(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}var k9,lY=N(()=>{"use strict";Jq();tY();nY();aY();oY();o(G0,"Hash");G0.prototype.clear=Zq;G0.prototype.delete=eY;G0.prototype.get=rY;G0.prototype.has=iY;G0.prototype.set=sY;k9=G0});function ZEe(){this.__data__=[],this.size=0}var cY,uY=N(()=>{"use strict";o(ZEe,"listCacheClear");cY=ZEe});function JEe(t,e){return t===e||t!==t&&e!==e}var Ro,Sd=N(()=>{"use strict";o(JEe,"eq");Ro=JEe});function e6e(t,e){for(var r=t.length;r--;)if(Ro(t[r][0],e))return r;return-1}var Rh,jv=N(()=>{"use strict";Sd();o(e6e,"assocIndexOf");Rh=e6e});function n6e(t){var e=this.__data__,r=Rh(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():r6e.call(e,r,1),--this.size,!0}var t6e,r6e,hY,fY=N(()=>{"use strict";jv();t6e=Array.prototype,r6e=t6e.splice;o(n6e,"listCacheDelete");hY=n6e});function i6e(t){var e=this.__data__,r=Rh(e,t);return r<0?void 0:e[r][1]}var dY,pY=N(()=>{"use strict";jv();o(i6e,"listCacheGet");dY=i6e});function a6e(t){return Rh(this.__data__,t)>-1}var mY,gY=N(()=>{"use strict";jv();o(a6e,"listCacheHas");mY=a6e});function s6e(t,e){var r=this.__data__,n=Rh(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}var yY,vY=N(()=>{"use strict";jv();o(s6e,"listCacheSet");yY=s6e});function V0(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}var Nh,Kv=N(()=>{"use strict";uY();fY();pY();gY();vY();o(V0,"ListCache");V0.prototype.clear=cY;V0.prototype.delete=hY;V0.prototype.get=dY;V0.prototype.has=mY;V0.prototype.set=yY;Nh=V0});var o6e,Mh,K5=N(()=>{"use strict";Lh();Lo();o6e=Ss(li,"Map"),Mh=o6e});function l6e(){this.size=0,this.__data__={hash:new k9,map:new(Mh||Nh),string:new k9}}var xY,bY=N(()=>{"use strict";lY();Kv();K5();o(l6e,"mapCacheClear");xY=l6e});function c6e(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}var wY,TY=N(()=>{"use strict";o(c6e,"isKeyable");wY=c6e});function u6e(t,e){var r=t.__data__;return wY(e)?r[typeof e=="string"?"string":"hash"]:r.map}var Ih,Qv=N(()=>{"use strict";TY();o(u6e,"getMapData");Ih=u6e});function h6e(t){var e=Ih(this,t).delete(t);return this.size-=e?1:0,e}var kY,EY=N(()=>{"use strict";Qv();o(h6e,"mapCacheDelete");kY=h6e});function f6e(t){return Ih(this,t).get(t)}var SY,CY=N(()=>{"use strict";Qv();o(f6e,"mapCacheGet");SY=f6e});function d6e(t){return Ih(this,t).has(t)}var AY,_Y=N(()=>{"use strict";Qv();o(d6e,"mapCacheHas");AY=d6e});function p6e(t,e){var r=Ih(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}var DY,LY=N(()=>{"use strict";Qv();o(p6e,"mapCacheSet");DY=p6e});function U0(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}var Cd,Q5=N(()=>{"use strict";bY();EY();CY();_Y();LY();o(U0,"MapCache");U0.prototype.clear=xY;U0.prototype.delete=kY;U0.prototype.get=SY;U0.prototype.has=AY;U0.prototype.set=DY;Cd=U0});function E9(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(m6e);var r=o(function(){var n=arguments,i=e?e.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var s=t.apply(this,n);return r.cache=a.set(i,s)||a,s},"memoized");return r.cache=new(E9.Cache||Cd),r}var m6e,H0,S9=N(()=>{"use strict";Q5();m6e="Expected a function";o(E9,"memoize");E9.Cache=Cd;H0=E9});function g6e(){this.__data__=new Nh,this.size=0}var RY,NY=N(()=>{"use strict";Kv();o(g6e,"stackClear");RY=g6e});function y6e(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}var MY,IY=N(()=>{"use strict";o(y6e,"stackDelete");MY=y6e});function v6e(t){return this.__data__.get(t)}var OY,PY=N(()=>{"use strict";o(v6e,"stackGet");OY=v6e});function x6e(t){return this.__data__.has(t)}var BY,FY=N(()=>{"use strict";o(x6e,"stackHas");BY=x6e});function w6e(t,e){var r=this.__data__;if(r instanceof Nh){var n=r.__data__;if(!Mh||n.length<b6e-1)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new Cd(n)}return r.set(t,e),this.size=r.size,this}var b6e,$Y,zY=N(()=>{"use strict";Kv();K5();Q5();b6e=200;o(w6e,"stackSet");$Y=w6e});function W0(t){var e=this.__data__=new Nh(t);this.size=e.size}var lc,Zv=N(()=>{"use strict";Kv();NY();IY();PY();FY();zY();o(W0,"Stack");W0.prototype.clear=RY;W0.prototype.delete=MY;W0.prototype.get=OY;W0.prototype.has=BY;W0.prototype.set=$Y;lc=W0});var T6e,q0,C9=N(()=>{"use strict";Lh();T6e=function(){try{var t=Ss(Object,"defineProperty");return t({},"",{}),t}catch{}}(),q0=T6e});function k6e(t,e,r){e=="__proto__"&&q0?q0(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var cc,Y0=N(()=>{"use strict";C9();o(k6e,"baseAssignValue");cc=k6e});function E6e(t,e,r){(r!==void 0&&!Ro(t[e],r)||r===void 0&&!(e in t))&&cc(t,e,r)}var Jv,A9=N(()=>{"use strict";Y0();Sd();o(E6e,"assignMergeValue");Jv=E6e});function S6e(t){return function(e,r,n){for(var i=-1,a=Object(e),s=n(e),l=s.length;l--;){var u=s[t?l:++i];if(r(a[u],u,a)===!1)break}return e}}var GY,VY=N(()=>{"use strict";o(S6e,"createBaseFor");GY=S6e});var C6e,X0,Z5=N(()=>{"use strict";VY();C6e=GY(),X0=C6e});function _6e(t,e){if(e)return t.slice();var r=t.length,n=WY?WY(r):new t.constructor(r);return t.copy(n),n}var qY,UY,A6e,HY,WY,J5,_9=N(()=>{"use strict";Lo();qY=typeof exports=="object"&&exports&&!exports.nodeType&&exports,UY=qY&&typeof module=="object"&&module&&!module.nodeType&&module,A6e=UY&&UY.exports===qY,HY=A6e?li.Buffer:void 0,WY=HY?HY.allocUnsafe:void 0;o(_6e,"cloneBuffer");J5=_6e});var D6e,j0,D9=N(()=>{"use strict";Lo();D6e=li.Uint8Array,j0=D6e});function L6e(t){var e=new t.constructor(t.byteLength);return new j0(e).set(new j0(t)),e}var K0,ew=N(()=>{"use strict";D9();o(L6e,"cloneArrayBuffer");K0=L6e});function R6e(t,e){var r=e?K0(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}var tw,L9=N(()=>{"use strict";ew();o(R6e,"cloneTypedArray");tw=R6e});function N6e(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}var rw,R9=N(()=>{"use strict";o(N6e,"copyArray");rw=N6e});var YY,M6e,XY,jY=N(()=>{"use strict";Js();YY=Object.create,M6e=function(){function t(){}return o(t,"object"),function(e){if(!bn(e))return{};if(YY)return YY(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}(),XY=M6e});function I6e(t,e){return function(r){return t(e(r))}}var nw,N9=N(()=>{"use strict";o(I6e,"overArg");nw=I6e});var O6e,Q0,iw=N(()=>{"use strict";N9();O6e=nw(Object.getPrototypeOf,Object),Q0=O6e});function B6e(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||P6e;return t===r}var P6e,uc,Z0=N(()=>{"use strict";P6e=Object.prototype;o(B6e,"isPrototype");uc=B6e});function F6e(t){return typeof t.constructor=="function"&&!uc(t)?XY(Q0(t)):{}}var aw,M9=N(()=>{"use strict";jY();iw();Z0();o(F6e,"initCloneObject");aw=F6e});function $6e(t){return t!=null&&typeof t=="object"}var ri,No=N(()=>{"use strict";o($6e,"isObjectLike");ri=$6e});function G6e(t){return ri(t)&&da(t)==z6e}var z6e,I9,KY=N(()=>{"use strict";ku();No();z6e="[object Arguments]";o(G6e,"baseIsArguments");I9=G6e});var QY,V6e,U6e,H6e,El,J0=N(()=>{"use strict";KY();No();QY=Object.prototype,V6e=QY.hasOwnProperty,U6e=QY.propertyIsEnumerable,H6e=I9(function(){return arguments}())?I9:function(t){return ri(t)&&V6e.call(t,"callee")&&!U6e.call(t,"callee")},El=H6e});var W6e,Pt,Un=N(()=>{"use strict";W6e=Array.isArray,Pt=W6e});function Y6e(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=q6e}var q6e,em,sw=N(()=>{"use strict";q6e=9007199254740991;o(Y6e,"isLength");em=Y6e});function X6e(t){return t!=null&&em(t.length)&&!Si(t)}var ci,Mo=N(()=>{"use strict";Yv();sw();o(X6e,"isArrayLike");ci=X6e});function j6e(t){return ri(t)&&ci(t)}var Ad,ow=N(()=>{"use strict";Mo();No();o(j6e,"isArrayLikeObject");Ad=j6e});function K6e(){return!1}var ZY,JY=N(()=>{"use strict";o(K6e,"stubFalse");ZY=K6e});var rX,eX,Q6e,tX,Z6e,J6e,Sl,tm=N(()=>{"use strict";Lo();JY();rX=typeof exports=="object"&&exports&&!exports.nodeType&&exports,eX=rX&&typeof module=="object"&&module&&!module.nodeType&&module,Q6e=eX&&eX.exports===rX,tX=Q6e?li.Buffer:void 0,Z6e=tX?tX.isBuffer:void 0,J6e=Z6e||ZY,Sl=J6e});function aSe(t){if(!ri(t)||da(t)!=eSe)return!1;var e=Q0(t);if(e===null)return!0;var r=nSe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&nX.call(r)==iSe}var eSe,tSe,rSe,nX,nSe,iSe,iX,aX=N(()=>{"use strict";ku();iw();No();eSe="[object Object]",tSe=Function.prototype,rSe=Object.prototype,nX=tSe.toString,nSe=rSe.hasOwnProperty,iSe=nX.call(Object);o(aSe,"isPlainObject");iX=aSe});function LSe(t){return ri(t)&&em(t.length)&&!!Fn[da(t)]}var sSe,oSe,lSe,cSe,uSe,hSe,fSe,dSe,pSe,mSe,gSe,ySe,vSe,xSe,bSe,wSe,TSe,kSe,ESe,SSe,CSe,ASe,_Se,DSe,Fn,sX,oX=N(()=>{"use strict";ku();sw();No();sSe="[object Arguments]",oSe="[object Array]",lSe="[object Boolean]",cSe="[object Date]",uSe="[object Error]",hSe="[object Function]",fSe="[object Map]",dSe="[object Number]",pSe="[object Object]",mSe="[object RegExp]",gSe="[object Set]",ySe="[object String]",vSe="[object WeakMap]",xSe="[object ArrayBuffer]",bSe="[object DataView]",wSe="[object Float32Array]",TSe="[object Float64Array]",kSe="[object Int8Array]",ESe="[object Int16Array]",SSe="[object Int32Array]",CSe="[object Uint8Array]",ASe="[object Uint8ClampedArray]",_Se="[object Uint16Array]",DSe="[object Uint32Array]",Fn={};Fn[wSe]=Fn[TSe]=Fn[kSe]=Fn[ESe]=Fn[SSe]=Fn[CSe]=Fn[ASe]=Fn[_Se]=Fn[DSe]=!0;Fn[sSe]=Fn[oSe]=Fn[xSe]=Fn[lSe]=Fn[bSe]=Fn[cSe]=Fn[uSe]=Fn[hSe]=Fn[fSe]=Fn[dSe]=Fn[pSe]=Fn[mSe]=Fn[gSe]=Fn[ySe]=Fn[vSe]=!1;o(LSe,"baseIsTypedArray");sX=LSe});function RSe(t){return function(e){return t(e)}}var Io,_d=N(()=>{"use strict";o(RSe,"baseUnary");Io=RSe});var lX,e2,NSe,O9,MSe,Oo,t2=N(()=>{"use strict";w9();lX=typeof exports=="object"&&exports&&!exports.nodeType&&exports,e2=lX&&typeof module=="object"&&module&&!module.nodeType&&module,NSe=e2&&e2.exports===lX,O9=NSe&&X5.process,MSe=function(){try{var t=e2&&e2.require&&e2.require("util").types;return t||O9&&O9.binding&&O9.binding("util")}catch{}}(),Oo=MSe});var cX,ISe,Oh,r2=N(()=>{"use strict";oX();_d();t2();cX=Oo&&Oo.isTypedArray,ISe=cX?Io(cX):sX,Oh=ISe});function OSe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}var n2,P9=N(()=>{"use strict";o(OSe,"safeGet");n2=OSe});function FSe(t,e,r){var n=t[e];(!(BSe.call(t,e)&&Ro(n,r))||r===void 0&&!(e in t))&&cc(t,e,r)}var PSe,BSe,hc,rm=N(()=>{"use strict";Y0();Sd();PSe=Object.prototype,BSe=PSe.hasOwnProperty;o(FSe,"assignValue");hc=FSe});function $Se(t,e,r,n){var i=!r;r||(r={});for(var a=-1,s=e.length;++a<s;){var l=e[a],u=n?n(r[l],t[l],l,r,t):void 0;u===void 0&&(u=t[l]),i?cc(r,l,u):hc(r,l,u)}return r}var Po,Dd=N(()=>{"use strict";rm();Y0();o($Se,"copyObject");Po=$Se});function zSe(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}var uX,hX=N(()=>{"use strict";o(zSe,"baseTimes");uX=zSe});function USe(t,e){var r=typeof t;return e=e??GSe,!!e&&(r=="number"||r!="symbol"&&VSe.test(t))&&t>-1&&t%1==0&&t<e}var GSe,VSe,Ph,i2=N(()=>{"use strict";GSe=9007199254740991,VSe=/^(?:0|[1-9]\d*)$/;o(USe,"isIndex");Ph=USe});function qSe(t,e){var r=Pt(t),n=!r&&El(t),i=!r&&!n&&Sl(t),a=!r&&!n&&!i&&Oh(t),s=r||n||i||a,l=s?uX(t.length,String):[],u=l.length;for(var h in t)(e||WSe.call(t,h))&&!(s&&(h=="length"||i&&(h=="offset"||h=="parent")||a&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||Ph(h,u)))&&l.push(h);return l}var HSe,WSe,lw,B9=N(()=>{"use strict";hX();J0();Un();tm();i2();r2();HSe=Object.prototype,WSe=HSe.hasOwnProperty;o(qSe,"arrayLikeKeys");lw=qSe});function YSe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}var fX,dX=N(()=>{"use strict";o(YSe,"nativeKeysIn");fX=YSe});function KSe(t){if(!bn(t))return fX(t);var e=uc(t),r=[];for(var n in t)n=="constructor"&&(e||!jSe.call(t,n))||r.push(n);return r}var XSe,jSe,pX,mX=N(()=>{"use strict";Js();Z0();dX();XSe=Object.prototype,jSe=XSe.hasOwnProperty;o(KSe,"baseKeysIn");pX=KSe});function QSe(t){return ci(t)?lw(t,!0):pX(t)}var Cs,Bh=N(()=>{"use strict";B9();mX();Mo();o(QSe,"keysIn");Cs=QSe});function ZSe(t){return Po(t,Cs(t))}var gX,yX=N(()=>{"use strict";Dd();Bh();o(ZSe,"toPlainObject");gX=ZSe});function JSe(t,e,r,n,i,a,s){var l=n2(t,r),u=n2(e,r),h=s.get(u);if(h){Jv(t,r,h);return}var f=a?a(l,u,r+"",t,e,s):void 0,d=f===void 0;if(d){var p=Pt(u),m=!p&&Sl(u),g=!p&&!m&&Oh(u);f=u,p||m||g?Pt(l)?f=l:Ad(l)?f=rw(l):m?(d=!1,f=J5(u,!0)):g?(d=!1,f=tw(u,!0)):f=[]:iX(u)||El(u)?(f=l,El(l)?f=gX(l):(!bn(l)||Si(l))&&(f=aw(u))):d=!1}d&&(s.set(u,f),i(f,u,n,a,s),s.delete(u)),Jv(t,r,f)}var vX,xX=N(()=>{"use strict";A9();_9();L9();R9();M9();J0();Un();ow();tm();Yv();Js();aX();r2();P9();yX();o(JSe,"baseMergeDeep");vX=JSe});function bX(t,e,r,n,i){t!==e&&X0(e,function(a,s){if(i||(i=new lc),bn(a))vX(t,e,s,r,bX,n,i);else{var l=n?n(n2(t,s),a,s+"",t,e,i):void 0;l===void 0&&(l=a),Jv(t,s,l)}},Cs)}var wX,TX=N(()=>{"use strict";Zv();A9();Z5();xX();Js();Bh();P9();o(bX,"baseMerge");wX=bX});function eCe(t){return t}var ta,Cu=N(()=>{"use strict";o(eCe,"identity");ta=eCe});function tCe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}var kX,EX=N(()=>{"use strict";o(tCe,"apply");kX=tCe});function rCe(t,e,r){return e=SX(e===void 0?t.length-1:e,0),function(){for(var n=arguments,i=-1,a=SX(n.length-e,0),s=Array(a);++i<a;)s[i]=n[e+i];i=-1;for(var l=Array(e+1);++i<e;)l[i]=n[i];return l[e]=r(s),kX(t,this,l)}}var SX,cw,F9=N(()=>{"use strict";EX();SX=Math.max;o(rCe,"overRest");cw=rCe});function nCe(t){return function(){return t}}var As,$9=N(()=>{"use strict";o(nCe,"constant");As=nCe});var iCe,CX,AX=N(()=>{"use strict";$9();C9();Cu();iCe=q0?function(t,e){return q0(t,"toString",{configurable:!0,enumerable:!1,value:As(e),writable:!0})}:ta,CX=iCe});function lCe(t){var e=0,r=0;return function(){var n=oCe(),i=sCe-(n-r);if(r=n,i>0){if(++e>=aCe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var aCe,sCe,oCe,_X,DX=N(()=>{"use strict";aCe=800,sCe=16,oCe=Date.now;o(lCe,"shortOut");_X=lCe});var cCe,uw,z9=N(()=>{"use strict";AX();DX();cCe=_X(CX),uw=cCe});function uCe(t,e){return uw(cw(t,e,ta),t+"")}var fc,nm=N(()=>{"use strict";Cu();F9();z9();o(uCe,"baseRest");fc=uCe});function hCe(t,e,r){if(!bn(r))return!1;var n=typeof e;return(n=="number"?ci(r)&&Ph(e,r.length):n=="string"&&e in r)?Ro(r[e],t):!1}var eo,Ld=N(()=>{"use strict";Sd();Mo();i2();Js();o(hCe,"isIterateeCall");eo=hCe});function fCe(t){return fc(function(e,r){var n=-1,i=r.length,a=i>1?r[i-1]:void 0,s=i>2?r[2]:void 0;for(a=t.length>3&&typeof a=="function"?(i--,a):void 0,s&&eo(r[0],r[1],s)&&(a=i<3?void 0:a,i=1),e=Object(e);++n<i;){var l=r[n];l&&t(e,l,n,a)}return e})}var hw,G9=N(()=>{"use strict";nm();Ld();o(fCe,"createAssigner");hw=fCe});var dCe,Fh,V9=N(()=>{"use strict";TX();G9();dCe=hw(function(t,e,r){wX(t,e,r)}),Fh=dCe});function W9(t,e){if(!t)return e;let r=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return pCe[r]??e}function vCe(t,e){let r=t.trim();if(r)return e.securityLevel!=="loose"?(0,NX.sanitizeUrl)(r):r}function OX(t,e){return!t||!e?0:Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function bCe(t){let e,r=0;t.forEach(i=>{r+=OX(i,e),e=i});let n=r/2;return q9(t,n)}function wCe(t){return t.length===1?t[0]:bCe(t)}function kCe(t,e,r){let n=structuredClone(r);Y.info("our points",n),e!=="start_left"&&e!=="start_right"&&n.reverse();let i=25+t,a=q9(n,i),s=10+t*.5,l=Math.atan2(n[0].y-a.y,n[0].x-a.x),u={x:0,y:0};return e==="start_left"?(u.x=Math.sin(l+Math.PI)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l+Math.PI)*s+(n[0].y+a.y)/2):e==="end_right"?(u.x=Math.sin(l-Math.PI)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l-Math.PI)*s+(n[0].y+a.y)/2-5):e==="end_left"?(u.x=Math.sin(l)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2-5):(u.x=Math.sin(l)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2),u}function Y9(t){let e="",r="";for(let n of t)n!==void 0&&(n.startsWith("color:")||n.startsWith("text-align:")?r=r+n+";":e=e+n+";");return{style:e,labelStyle:r}}function ECe(t){let e="",r="0123456789abcdef",n=r.length;for(let i=0;i<t;i++)e+=r.charAt(Math.floor(Math.random()*n));return e}function dw(t,e){return Q9(t,e).height}function ra(t,e){return Q9(t,e).width}function Z9(t){return"str"in t}function Fi(t,e){return Fh({},t,e)}function $n(t){return t??null}var NX,H9,pCe,mCe,gCe,MX,IX,yCe,xCe,LX,q9,TCe,RX,X9,j9,SCe,CCe,K9,ACe,Q9,U9,fw,_Ce,DCe,Bo,Gt,PX,na,$h,ir=N(()=>{"use strict";NX=Sa(z0(),1);dr();gr();e7();vt();Xf();s0();S9();V9();$4();H9="\u200B",pCe={curveBasis:Do,curveBasisClosed:P5,curveBasisOpen:B5,curveBumpX:Rv,curveBumpY:Nv,curveBundle:l9,curveCardinalClosed:c9,curveCardinalOpen:h9,curveCardinal:Pv,curveCatmullRomClosed:d9,curveCatmullRomOpen:p9,curveCatmullRom:$v,curveLinear:wu,curveLinearClosed:V5,curveMonotoneX:zv,curveMonotoneY:Gv,curveNatural:F0,curveStep:$0,curveStepAfter:Uv,curveStepBefore:Vv},mCe=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,gCe=o(function(t,e){let r=MX(t,/(?:init\b)|(?:initialize\b)/),n={};if(Array.isArray(r)){let s=r.map(l=>l.args);l0(s),n=Gn(n,[...s])}else n=r.args;if(!n)return;let i=a0(t,e),a="config";return n[a]!==void 0&&(i==="flowchart-v2"&&(i="flowchart"),n[i]=n[a],delete n[a]),n},"detectInit"),MX=o(function(t,e=null){try{let r=new RegExp(`[%]{2}(?![{]${mCe.source})(?=[}][%]{2}).*
353 +`,"ig");t=t.trim().replace(r,"").replace(/'/gm,'"'),Y.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let n,i=[];for(;(n=qf.exec(t))!==null;)if(n.index===qf.lastIndex&&qf.lastIndex++,n&&!e||e&&n[1]?.match(e)||e&&n[2]?.match(e)){let a=n[1]?n[1]:n[2],s=n[3]?n[3].trim():n[4]?JSON.parse(n[4].trim()):null;i.push({type:a,args:s})}return i.length===0?{type:t,args:null}:i.length===1?i[0]:i}catch(r){return Y.error(`ERROR: ${r.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},"detectDirective"),IX=o(function(t){return t.replace(qf,"")},"removeDirectives"),yCe=o(function(t,e){for(let[r,n]of e.entries())if(n.match(t))return r;return-1},"isSubstringInArray");o(W9,"interpolateToCurve");o(vCe,"formatUrl");xCe=o((t,...e)=>{let r=t.split("."),n=r.length-1,i=r[n],a=window;for(let s=0;s<n;s++)if(a=a[r[s]],!a){Y.error(`Function name: ${t} not found in window`);return}a[i](...e)},"runFunc");o(OX,"distance");o(bCe,"traverseEdge");o(wCe,"calcLabelPosition");LX=o((t,e=2)=>{let r=Math.pow(10,e);return Math.round(t*r)/r},"roundNumber"),q9=o((t,e)=>{let r,n=e;for(let i of t){if(r){let a=OX(i,r);if(a===0)return r;if(a<n)n-=a;else{let s=n/a;if(s<=0)return r;if(s>=1)return{x:i.x,y:i.y};if(s>0&&s<1)return{x:LX((1-s)*r.x+s*i.x,5),y:LX((1-s)*r.y+s*i.y,5)}}}r=i}throw new Error("Could not find a suitable point for the given distance")},"calculatePoint"),TCe=o((t,e,r)=>{Y.info(`our points ${JSON.stringify(e)}`),e[0]!==r&&(e=e.reverse());let i=q9(e,25),a=t?10:5,s=Math.atan2(e[0].y-i.y,e[0].x-i.x),l={x:0,y:0};return l.x=Math.sin(s)*a+(e[0].x+i.x)/2,l.y=-Math.cos(s)*a+(e[0].y+i.y)/2,l},"calcCardinalityPosition");o(kCe,"calcTerminalLabelPosition");o(Y9,"getStylesFromArray");RX=0,X9=o(()=>(RX++,"id-"+Math.random().toString(36).substr(2,12)+"-"+RX),"generateId");o(ECe,"makeRandomHex");j9=o(t=>ECe(t.length),"random"),SCe=o(function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},"getTextObj"),CCe=o(function(t,e){let r=e.text.replace(Ze.lineBreakRegex," "),[,n]=Bo(e.fontSize),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.style("font-family",e.fontFamily),i.style("font-size",n),i.style("font-weight",e.fontWeight),i.attr("fill",e.fill),e.class!==void 0&&i.attr("class",e.class);let a=i.append("tspan");return a.attr("x",e.x+e.textMargin*2),a.attr("fill",e.fill),a.text(r),i},"drawSimpleText"),K9=H0((t,e,r)=>{if(!t||(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},r),Ze.lineBreakRegex.test(t)))return t;let n=t.split(" ").filter(Boolean),i=[],a="";return n.forEach((s,l)=>{let u=ra(`${s} `,r),h=ra(a,r);if(u>e){let{hyphenatedStrings:p,remainingWord:m}=ACe(s,e,"-",r);i.push(a,...p),a=m}else h+u>=e?(i.push(a),a=s):a=[a,s].filter(Boolean).join(" ");l+1===n.length&&i.push(a)}),i.filter(s=>s!=="").join(r.joinWith)},(t,e,r)=>`${t}${e}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),ACe=H0((t,e,r="-",n)=>{n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},n);let i=[...t],a=[],s="";return i.forEach((l,u)=>{let h=`${s}${l}`;if(ra(h,n)>=e){let d=u+1,p=i.length===d,m=`${h}${r}`;a.push(p?h:m),s=""}else s=h}),{hyphenatedStrings:a,remainingWord:s}},(t,e,r="-",n)=>`${t}${e}${r}${n.fontSize}${n.fontWeight}${n.fontFamily}`);o(dw,"calculateTextHeight");o(ra,"calculateTextWidth");Q9=H0((t,e)=>{let{fontSize:r=12,fontFamily:n="Arial",fontWeight:i=400}=e;if(!t)return{width:0,height:0};let[,a]=Bo(r),s=["sans-serif",n],l=t.split(Ze.lineBreakRegex),u=[],h=Ge("body");if(!h.remove)return{width:0,height:0,lineHeight:0};let f=h.append("svg");for(let p of s){let m=0,g={width:0,height:0,lineHeight:0};for(let y of l){let v=SCe();v.text=y||H9;let x=CCe(f,v).style("font-size",a).style("font-weight",i).style("font-family",p),b=(x._groups||x)[0][0].getBBox();if(b.width===0&&b.height===0)throw new Error("svg element not in render tree");g.width=Math.round(Math.max(g.width,b.width)),m=Math.round(b.height),g.height+=m,g.lineHeight=Math.round(Math.max(g.lineHeight,m))}u.push(g)}f.remove();let d=isNaN(u[1].height)||isNaN(u[1].width)||isNaN(u[1].lineHeight)||u[0].height>u[1].height&&u[0].width>u[1].width&&u[0].lineHeight>u[1].lineHeight?0:1;return u[d]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`),U9=class{constructor(e=!1,r){this.count=0;this.count=r?r.length:0,this.next=e?()=>this.count++:()=>Date.now()}static{o(this,"InitIDGenerator")}},_Ce=o(function(t){return fw=fw||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),fw.innerHTML=t,unescape(fw.textContent)},"entityDecode");o(Z9,"isDetailedError");DCe=o((t,e,r,n)=>{if(!n)return;let i=t.node()?.getBBox();i&&t.append("text").text(n).attr("text-anchor","middle").attr("x",i.x+i.width/2).attr("y",-r).attr("class",e)},"insertTitle"),Bo=o(t=>{if(typeof t=="number")return[t,t+"px"];let e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]},"parseFontSize");o(Fi,"cleanAndMerge");Gt={assignWithDepth:Gn,wrapLabel:K9,calculateTextHeight:dw,calculateTextWidth:ra,calculateTextDimensions:Q9,cleanAndMerge:Fi,detectInit:gCe,detectDirective:MX,isSubstringInArray:yCe,interpolateToCurve:W9,calcLabelPosition:wCe,calcCardinalityPosition:TCe,calcTerminalLabelPosition:kCe,formatUrl:vCe,getStylesFromArray:Y9,generateId:X9,random:j9,runFunc:xCe,entityDecode:_Ce,insertTitle:DCe,parseFontSize:Bo,InitIDGenerator:U9},PX=o(function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/#\w+;/g,function(r){let n=r.substring(1,r.length-1);return/^\+?\d+$/.test(n)?"\uFB02\xB0\xB0"+n+"\xB6\xDF":"\uFB02\xB0"+n+"\xB6\xDF"}),e},"encodeEntities"),na=o(function(t){return t.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},"decodeEntities"),$h=o((t,e,{counter:r=0,prefix:n,suffix:i},a)=>a||`${n?`${n}_`:""}${t}_${e}_${r}${i?`_${i}`:""}`,"getEdgeId");o($n,"handleUndefinedAttr")});function Cl(t,e,r,n,i){if(!e[t].width)if(r)e[t].text=K9(e[t].text,i,n),e[t].textLines=e[t].text.split(Ze.lineBreakRegex).length,e[t].width=i,e[t].height=dw(e[t].text,n);else{let a=e[t].text.split(Ze.lineBreakRegex);e[t].textLines=a.length;let s=0;e[t].height=0,e[t].width=0;for(let l of a)e[t].width=Math.max(ra(l,n),e[t].width),s=dw(l,n),e[t].height=e[t].height+s}}function GX(t,e,r,n,i){let a=new yw(i);a.data.widthLimit=r.data.widthLimit/Math.min(J9,n.length);for(let[s,l]of n.entries()){let u=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=u,u=l.image.Y+l.image.height);let h=l.wrap&&Vt.wrap,f=pw(Vt);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Cl("label",l,h,f,a.data.widthLimit),l.label.Y=u+8,u=l.label.Y+l.label.height,l.type&&l.type.text!==""){l.type.text="["+l.type.text+"]";let g=pw(Vt);Cl("type",l,h,g,a.data.widthLimit),l.type.Y=u+5,u=l.type.Y+l.type.height}if(l.descr&&l.descr.text!==""){let g=pw(Vt);g.fontSize=g.fontSize-2,Cl("descr",l,h,g,a.data.widthLimit),l.descr.Y=u+20,u=l.descr.Y+l.descr.height}if(s==0||s%J9===0){let g=r.data.startx+Vt.diagramMarginX,y=r.data.stopy+Vt.diagramMarginY+u;a.setData(g,g,y,y)}else{let g=a.data.stopx!==a.data.startx?a.data.stopx+Vt.diagramMarginX:a.data.startx,y=a.data.starty;a.setData(g,g,y,y)}a.name=l.alias;let d=i.db.getC4ShapeArray(l.alias),p=i.db.getC4ShapeKeys(l.alias);p.length>0&&zX(a,t,d,p),e=l.alias;let m=i.db.getBoundarys(e);m.length>0&&GX(t,e,a,m,i),l.alias!=="global"&&$X(t,l,a),r.data.stopy=Math.max(a.data.stopy+Vt.c4ShapeMargin,r.data.stopy),r.data.stopx=Math.max(a.data.stopx+Vt.c4ShapeMargin,r.data.stopx),mw=Math.max(mw,r.data.stopx),gw=Math.max(gw,r.data.stopy)}}var mw,gw,FX,J9,Vt,yw,eD,a2,pw,LCe,$X,zX,_s,BX,RCe,NCe,MCe,tD,VX=N(()=>{"use strict";dr();Bq();vt();$C();gr();uA();zt();s0();ir();Ei();mw=0,gw=0,FX=4,J9=2;Ty.yy=Qy;Vt={},yw=class{static{o(this,"Bounds")}constructor(e){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,eD(e.db.getConfig())}setData(e,r,n,i){this.nextData.startx=this.data.startx=e,this.nextData.stopx=this.data.stopx=r,this.nextData.starty=this.data.starty=n,this.nextData.stopy=this.data.stopy=i}updateVal(e,r,n,i){e[r]===void 0?e[r]=n:e[r]=i(n,e[r])}insert(e){this.nextData.cnt=this.nextData.cnt+1;let r=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+e.margin:this.nextData.stopx+e.margin*2,n=r+e.width,i=this.nextData.starty+e.margin*2,a=i+e.height;(r>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>FX)&&(r=this.nextData.startx+e.margin+Vt.nextLinePaddingX,i=this.nextData.stopy+e.margin*2,this.nextData.stopx=n=r+e.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=i+e.height,this.nextData.cnt=1),e.x=r,e.y=i,this.updateVal(this.data,"startx",r,Math.min),this.updateVal(this.data,"starty",i,Math.min),this.updateVal(this.data,"stopx",n,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",r,Math.min),this.updateVal(this.nextData,"starty",i,Math.min),this.updateVal(this.nextData,"stopx",n,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(e){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},eD(e.db.getConfig())}bumpLastMargin(e){this.data.stopx+=e,this.data.stopy+=e}},eD=o(function(t){Gn(Vt,t),t.fontFamily&&(Vt.personFontFamily=Vt.systemFontFamily=Vt.messageFontFamily=t.fontFamily),t.fontSize&&(Vt.personFontSize=Vt.systemFontSize=Vt.messageFontSize=t.fontSize),t.fontWeight&&(Vt.personFontWeight=Vt.systemFontWeight=Vt.messageFontWeight=t.fontWeight)},"setConf"),a2=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"c4ShapeFont"),pw=o(t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight}),"boundaryFont"),LCe=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont");o(Cl,"calcC4ShapeTextWH");$X=o(function(t,e,r){e.x=r.data.startx,e.y=r.data.starty,e.width=r.data.stopx-r.data.startx,e.height=r.data.stopy-r.data.starty,e.label.y=Vt.c4ShapeMargin-35;let n=e.wrap&&Vt.wrap,i=pw(Vt);i.fontSize=i.fontSize+2,i.fontWeight="bold";let a=ra(e.label.text,i);Cl("label",e,n,i,a),kl.drawBoundary(t,e,Vt)},"drawBoundary"),zX=o(function(t,e,r,n){let i=0;for(let a of n){i=0;let s=r[a],l=a2(Vt,s.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,s.typeC4Shape.width=ra("\xAB"+s.typeC4Shape.text+"\xBB",l),s.typeC4Shape.height=l.fontSize+2,s.typeC4Shape.Y=Vt.c4ShapePadding,i=s.typeC4Shape.Y+s.typeC4Shape.height-4,s.image={width:0,height:0,Y:0},s.typeC4Shape.text){case"person":case"external_person":s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height;break}s.sprite&&(s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height);let u=s.wrap&&Vt.wrap,h=Vt.width-Vt.c4ShapePadding*2,f=a2(Vt,s.typeC4Shape.text);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Cl("label",s,u,f,h),s.label.Y=i+8,i=s.label.Y+s.label.height,s.type&&s.type.text!==""){s.type.text="["+s.type.text+"]";let m=a2(Vt,s.typeC4Shape.text);Cl("type",s,u,m,h),s.type.Y=i+5,i=s.type.Y+s.type.height}else if(s.techn&&s.techn.text!==""){s.techn.text="["+s.techn.text+"]";let m=a2(Vt,s.techn.text);Cl("techn",s,u,m,h),s.techn.Y=i+5,i=s.techn.Y+s.techn.height}let d=i,p=s.label.width;if(s.descr&&s.descr.text!==""){let m=a2(Vt,s.typeC4Shape.text);Cl("descr",s,u,m,h),s.descr.Y=i+20,i=s.descr.Y+s.descr.height,p=Math.max(s.label.width,s.descr.width),d=i-s.descr.textLines*5}p=p+Vt.c4ShapePadding,s.width=Math.max(s.width||Vt.width,p,Vt.width),s.height=Math.max(s.height||Vt.height,d,Vt.height),s.margin=s.margin||Vt.c4ShapeMargin,t.insert(s),kl.drawC4Shape(e,s,Vt)}t.bumpLastMargin(Vt.c4ShapeMargin)},"drawC4ShapeArray"),_s=class{static{o(this,"Point")}constructor(e,r){this.x=e,this.y=r}},BX=o(function(t,e){let r=t.x,n=t.y,i=e.x,a=e.y,s=r+t.width/2,l=n+t.height/2,u=Math.abs(r-i),h=Math.abs(n-a),f=h/u,d=t.height/t.width,p=null;return n==a&&r<i?p=new _s(r+t.width,l):n==a&&r>i?p=new _s(r,l):r==i&&n<a?p=new _s(s,n+t.height):r==i&&n>a&&(p=new _s(s,n)),r>i&&n<a?d>=f?p=new _s(r,l+f*t.width/2):p=new _s(s-u/h*t.height/2,n+t.height):r<i&&n<a?d>=f?p=new _s(r+t.width,l+f*t.width/2):p=new _s(s+u/h*t.height/2,n+t.height):r<i&&n>a?d>=f?p=new _s(r+t.width,l-f*t.width/2):p=new _s(s+t.height/2*u/h,n):r>i&&n>a&&(d>=f?p=new _s(r,l-t.width/2*f):p=new _s(s-t.height/2*u/h,n)),p},"getIntersectPoint"),RCe=o(function(t,e){let r={x:0,y:0};r.x=e.x+e.width/2,r.y=e.y+e.height/2;let n=BX(t,r);r.x=t.x+t.width/2,r.y=t.y+t.height/2;let i=BX(e,r);return{startPoint:n,endPoint:i}},"getIntersectPoints"),NCe=o(function(t,e,r,n){let i=0;for(let a of e){i=i+1;let s=a.wrap&&Vt.wrap,l=LCe(Vt);n.db.getC4Type()==="C4Dynamic"&&(a.label.text=i+": "+a.label.text);let h=ra(a.label.text,l);Cl("label",a,s,l,h),a.techn&&a.techn.text!==""&&(h=ra(a.techn.text,l),Cl("techn",a,s,l,h)),a.descr&&a.descr.text!==""&&(h=ra(a.descr.text,l),Cl("descr",a,s,l,h));let f=r(a.from),d=r(a.to),p=RCe(f,d);a.startPoint=p.startPoint,a.endPoint=p.endPoint}kl.drawRels(t,e,Vt)},"drawRels");o(GX,"drawInsideBoundary");MCe=o(function(t,e,r,n){Vt=me().c4;let i=me().securityLevel,a;i==="sandbox"&&(a=Ge("#i"+e));let s=i==="sandbox"?Ge(a.nodes()[0].contentDocument.body):Ge("body"),l=n.db;n.db.setWrap(Vt.wrap),FX=l.getC4ShapeInRow(),J9=l.getC4BoundaryInRow(),Y.debug(`C:${JSON.stringify(Vt,null,2)}`);let u=i==="sandbox"?s.select(`[id="${e}"]`):Ge(`[id="${e}"]`);kl.insertComputerIcon(u),kl.insertDatabaseIcon(u),kl.insertClockIcon(u);let h=new yw(n);h.setData(Vt.diagramMarginX,Vt.diagramMarginX,Vt.diagramMarginY,Vt.diagramMarginY),h.data.widthLimit=screen.availWidth,mw=Vt.diagramMarginX,gw=Vt.diagramMarginY;let f=n.db.getTitle(),d=n.db.getBoundarys("");GX(u,"",h,d,n),kl.insertArrowHead(u),kl.insertArrowEnd(u),kl.insertArrowCrossHead(u),kl.insertArrowFilledHead(u),NCe(u,n.db.getRels(),n.db.getC4Shape,n),h.data.stopx=mw,h.data.stopy=gw;let p=h.data,g=p.stopy-p.starty+2*Vt.diagramMarginY,v=p.stopx-p.startx+2*Vt.diagramMarginX;f&&u.append("text").text(f).attr("x",(p.stopx-p.startx)/2-4*Vt.diagramMarginX).attr("y",p.starty+Vt.diagramMarginY),vn(u,g,v,Vt.useMaxWidth);let x=f?60:0;u.attr("viewBox",p.startx-Vt.diagramMarginX+" -"+(Vt.diagramMarginY+x)+" "+v+" "+(g+x)),Y.debug("models:",p)},"draw"),tD={drawPersonOrSystemArray:zX,drawBoundary:$X,setConf:eD,draw:MCe}});var ICe,UX,HX=N(()=>{"use strict";ICe=o(t=>`.person {
354 + stroke: ${t.personBorder};
355 + fill: ${t.personBkg};
356 + }
357 +`,"getStyles"),UX=ICe});var WX={};hr(WX,{diagram:()=>OCe});var OCe,qX=N(()=>{"use strict";$C();uA();VX();HX();OCe={parser:JF,db:Qy,renderer:tD,styles:UX,init:o(({c4:t,wrap:e})=>{tD.setConf(t),Qy.setWrap(e)},"init")}});function uj(t){return typeof t>"u"||t===null}function $Ce(t){return typeof t=="object"&&t!==null}function zCe(t){return Array.isArray(t)?t:uj(t)?[]:[t]}function GCe(t,e){var r,n,i,a;if(e)for(a=Object.keys(e),r=0,n=a.length;r<n;r+=1)i=a[r],t[i]=e[i];return t}function VCe(t,e){var r="",n;for(n=0;n<e;n+=1)r+=t;return r}function UCe(t){return t===0&&Number.NEGATIVE_INFINITY===1/t}function hj(t,e){var r="",n=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(r+='in "'+t.mark.name+'" '),r+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!e&&t.mark.snippet&&(r+=`
358 +
359 +`+t.mark.snippet),n+" "+r):n}function o2(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=hj(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}function rD(t,e,r,n,i){var a="",s="",l=Math.floor(i/2)-1;return n-e>l&&(a=" ... ",e=n-l+a.length),r-n>l&&(s=" ...",r=n+l-s.length),{str:a+t.slice(e,r).replace(/\t/g,"\u2192")+s,pos:n-e+a.length}}function nD(t,e){return $i.repeat(" ",e-t.length)+t}function KCe(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var r=/\r?\n|\r|\0/g,n=[0],i=[],a,s=-1;a=r.exec(t.buffer);)i.push(a.index),n.push(a.index+a[0].length),t.position<=a.index&&s<0&&(s=n.length-2);s<0&&(s=n.length-1);var l="",u,h,f=Math.min(t.line+e.linesAfter,i.length).toString().length,d=e.maxLength-(e.indent+f+3);for(u=1;u<=e.linesBefore&&!(s-u<0);u++)h=rD(t.buffer,n[s-u],i[s-u],t.position-(n[s]-n[s-u]),d),l=$i.repeat(" ",e.indent)+nD((t.line-u+1).toString(),f)+" | "+h.str+`
360 +`+l;for(h=rD(t.buffer,n[s],i[s],t.position,d),l+=$i.repeat(" ",e.indent)+nD((t.line+1).toString(),f)+" | "+h.str+`
361 +`,l+=$i.repeat("-",e.indent+f+3+h.pos)+`^
362 +`,u=1;u<=e.linesAfter&&!(s+u>=i.length);u++)h=rD(t.buffer,n[s+u],i[s+u],t.position-(n[s]-n[s+u]),d),l+=$i.repeat(" ",e.indent)+nD((t.line+u+1).toString(),f)+" | "+h.str+`
363 +`;return l.replace(/\n$/,"")}function e7e(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(n){e[String(n)]=r})}),e}function t7e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(ZCe.indexOf(r)===-1)throw new Ds('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=e7e(e.styleAliases||null),JCe.indexOf(this.kind)===-1)throw new Ds('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}function jX(t,e){var r=[];return t[e].forEach(function(n){var i=r.length;r.forEach(function(a,s){a.tag===n.tag&&a.kind===n.kind&&a.multi===n.multi&&(i=s)}),r[i]=n}),r}function r7e(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},e,r;function n(i){i.multi?(t.multi[i.kind].push(i),t.multi.fallback.push(i)):t[i.kind][i.tag]=t.fallback[i.tag]=i}for(o(n,"collectType"),e=0,r=arguments.length;e<r;e+=1)arguments[e].forEach(n);return t}function aD(t){return this.extend(t)}function l7e(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function c7e(){return null}function u7e(t){return t===null}function f7e(t){if(t===null)return!1;var e=t.length;return e===4&&(t==="true"||t==="True"||t==="TRUE")||e===5&&(t==="false"||t==="False"||t==="FALSE")}function d7e(t){return t==="true"||t==="True"||t==="TRUE"}function p7e(t){return Object.prototype.toString.call(t)==="[object Boolean]"}function g7e(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function y7e(t){return 48<=t&&t<=55}function v7e(t){return 48<=t&&t<=57}function x7e(t){if(t===null)return!1;var e=t.length,r=0,n=!1,i;if(!e)return!1;if(i=t[r],(i==="-"||i==="+")&&(i=t[++r]),i==="0"){if(r+1===e)return!0;if(i=t[++r],i==="b"){for(r++;r<e;r++)if(i=t[r],i!=="_"){if(i!=="0"&&i!=="1")return!1;n=!0}return n&&i!=="_"}if(i==="x"){for(r++;r<e;r++)if(i=t[r],i!=="_"){if(!g7e(t.charCodeAt(r)))return!1;n=!0}return n&&i!=="_"}if(i==="o"){for(r++;r<e;r++)if(i=t[r],i!=="_"){if(!y7e(t.charCodeAt(r)))return!1;n=!0}return n&&i!=="_"}}if(i==="_")return!1;for(;r<e;r++)if(i=t[r],i!=="_"){if(!v7e(t.charCodeAt(r)))return!1;n=!0}return!(!n||i==="_")}function b7e(t){var e=t,r=1,n;if(e.indexOf("_")!==-1&&(e=e.replace(/_/g,"")),n=e[0],(n==="-"||n==="+")&&(n==="-"&&(r=-1),e=e.slice(1),n=e[0]),e==="0")return 0;if(n==="0"){if(e[1]==="b")return r*parseInt(e.slice(2),2);if(e[1]==="x")return r*parseInt(e.slice(2),16);if(e[1]==="o")return r*parseInt(e.slice(2),8)}return r*parseInt(e,10)}function w7e(t){return Object.prototype.toString.call(t)==="[object Number]"&&t%1===0&&!$i.isNegativeZero(t)}function E7e(t){return!(t===null||!k7e.test(t)||t[t.length-1]==="_")}function S7e(t){var e,r;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:r*parseFloat(e,10)}function A7e(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if($i.isNegativeZero(t))return"-0.0";return r=t.toString(10),C7e.test(r)?r.replace("e",".e"):r}function _7e(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||$i.isNegativeZero(t))}function R7e(t){return t===null?!1:dj.exec(t)!==null||pj.exec(t)!==null}function N7e(t){var e,r,n,i,a,s,l,u=0,h=null,f,d,p;if(e=dj.exec(t),e===null&&(e=pj.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],n=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(r,n,i));if(a=+e[4],s=+e[5],l=+e[6],e[7]){for(u=e[7].slice(0,3);u.length<3;)u+="0";u=+u}return e[9]&&(f=+e[10],d=+(e[11]||0),h=(f*60+d)*6e4,e[9]==="-"&&(h=-h)),p=new Date(Date.UTC(r,n,i,a,s,l,u)),h&&p.setTime(p.getTime()-h),p}function M7e(t){return t.toISOString()}function O7e(t){return t==="<<"||t===null}function B7e(t){if(t===null)return!1;var e,r,n=0,i=t.length,a=uD;for(r=0;r<i;r++)if(e=a.indexOf(t.charAt(r)),!(e>64)){if(e<0)return!1;n+=6}return n%8===0}function F7e(t){var e,r,n=t.replace(/[\r\n=]/g,""),i=n.length,a=uD,s=0,l=[];for(e=0;e<i;e++)e%4===0&&e&&(l.push(s>>16&255),l.push(s>>8&255),l.push(s&255)),s=s<<6|a.indexOf(n.charAt(e));return r=i%4*6,r===0?(l.push(s>>16&255),l.push(s>>8&255),l.push(s&255)):r===18?(l.push(s>>10&255),l.push(s>>2&255)):r===12&&l.push(s>>4&255),new Uint8Array(l)}function $7e(t){var e="",r=0,n,i,a=t.length,s=uD;for(n=0;n<a;n++)n%3===0&&n&&(e+=s[r>>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]),r=(r<<8)+t[n];return i=a%3,i===0?(e+=s[r>>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]):i===2?(e+=s[r>>10&63],e+=s[r>>4&63],e+=s[r<<2&63],e+=s[64]):i===1&&(e+=s[r>>2&63],e+=s[r<<4&63],e+=s[64],e+=s[64]),e}function z7e(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}function H7e(t){if(t===null)return!0;var e=[],r,n,i,a,s,l=t;for(r=0,n=l.length;r<n;r+=1){if(i=l[r],s=!1,U7e.call(i)!=="[object Object]")return!1;for(a in i)if(V7e.call(i,a))if(!s)s=!0;else return!1;if(!s)return!1;if(e.indexOf(a)===-1)e.push(a);else return!1}return!0}function W7e(t){return t!==null?t:[]}function X7e(t){if(t===null)return!0;var e,r,n,i,a,s=t;for(a=new Array(s.length),e=0,r=s.length;e<r;e+=1){if(n=s[e],Y7e.call(n)!=="[object Object]"||(i=Object.keys(n),i.length!==1))return!1;a[e]=[i[0],n[i[0]]]}return!0}function j7e(t){if(t===null)return[];var e,r,n,i,a,s=t;for(a=new Array(s.length),e=0,r=s.length;e<r;e+=1)n=s[e],i=Object.keys(n),a[e]=[i[0],n[i[0]]];return a}function Z7e(t){if(t===null)return!0;var e,r=t;for(e in r)if(Q7e.call(r,e)&&r[e]!==null)return!1;return!0}function J7e(t){return t!==null?t:{}}function QX(t){return Object.prototype.toString.call(t)}function dc(t){return t===10||t===13}function Nd(t){return t===9||t===32}function Ls(t){return t===9||t===32||t===10||t===13}function am(t){return t===44||t===91||t===93||t===123||t===125}function aAe(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function sAe(t){return t===120?2:t===117?4:t===85?8:0}function oAe(t){return 48<=t&&t<=57?t-48:-1}function ZX(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?`
364 +`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"\x85":t===95?"\xA0":t===76?"\u2028":t===80?"\u2029":""}function lAe(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}function cAe(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||mj,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function Tj(t,e){var r={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return r.snippet=QCe(r),new Ds(e,r)}function Qt(t,e){throw Tj(t,e)}function bw(t,e){t.onWarning&&t.onWarning.call(null,Tj(t,e))}function zh(t,e,r,n){var i,a,s,l;if(e<r){if(l=t.input.slice(e,r),n)for(i=0,a=l.length;i<a;i+=1)s=l.charCodeAt(i),s===9||32<=s&&s<=1114111||Qt(t,"expected valid JSON character");else rAe.test(l)&&Qt(t,"the stream contains non-printable characters");t.result+=l}}function ej(t,e,r,n){var i,a,s,l;for($i.isObject(r)||Qt(t,"cannot merge mappings; the provided source object is unacceptable"),i=Object.keys(r),s=0,l=i.length;s<l;s+=1)a=i[s],Gh.call(e,a)||(e[a]=r[a],n[a]=!0)}function sm(t,e,r,n,i,a,s,l,u){var h,f;if(Array.isArray(i))for(i=Array.prototype.slice.call(i),h=0,f=i.length;h<f;h+=1)Array.isArray(i[h])&&Qt(t,"nested arrays are not supported inside keys"),typeof i=="object"&&QX(i[h])==="[object Object]"&&(i[h]="[object Object]");if(typeof i=="object"&&QX(i)==="[object Object]"&&(i="[object Object]"),i=String(i),e===null&&(e={}),n==="tag:yaml.org,2002:merge")if(Array.isArray(a))for(h=0,f=a.length;h<f;h+=1)ej(t,e,a[h],r);else ej(t,e,a,r);else!t.json&&!Gh.call(r,i)&&Gh.call(e,i)&&(t.line=s||t.line,t.lineStart=l||t.lineStart,t.position=u||t.position,Qt(t,"duplicated mapping key")),i==="__proto__"?Object.defineProperty(e,i,{configurable:!0,enumerable:!0,writable:!0,value:a}):e[i]=a,delete r[i];return e}function hD(t){var e;e=t.input.charCodeAt(t.position),e===10?t.position++:e===13?(t.position++,t.input.charCodeAt(t.position)===10&&t.position++):Qt(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function Ci(t,e,r){for(var n=0,i=t.input.charCodeAt(t.position);i!==0;){for(;Nd(i);)i===9&&t.firstTabInLine===-1&&(t.firstTabInLine=t.position),i=t.input.charCodeAt(++t.position);if(e&&i===35)do i=t.input.charCodeAt(++t.position);while(i!==10&&i!==13&&i!==0);if(dc(i))for(hD(t),i=t.input.charCodeAt(t.position),n++,t.lineIndent=0;i===32;)t.lineIndent++,i=t.input.charCodeAt(++t.position);else break}return r!==-1&&n!==0&&t.lineIndent<r&&bw(t,"deficient indentation"),n}function kw(t){var e=t.position,r;return r=t.input.charCodeAt(e),!!((r===45||r===46)&&r===t.input.charCodeAt(e+1)&&r===t.input.charCodeAt(e+2)&&(e+=3,r=t.input.charCodeAt(e),r===0||Ls(r)))}function fD(t,e){e===1?t.result+=" ":e>1&&(t.result+=$i.repeat(`
365 +`,e-1))}function uAe(t,e,r){var n,i,a,s,l,u,h,f,d=t.kind,p=t.result,m;if(m=t.input.charCodeAt(t.position),Ls(m)||am(m)||m===35||m===38||m===42||m===33||m===124||m===62||m===39||m===34||m===37||m===64||m===96||(m===63||m===45)&&(i=t.input.charCodeAt(t.position+1),Ls(i)||r&&am(i)))return!1;for(t.kind="scalar",t.result="",a=s=t.position,l=!1;m!==0;){if(m===58){if(i=t.input.charCodeAt(t.position+1),Ls(i)||r&&am(i))break}else if(m===35){if(n=t.input.charCodeAt(t.position-1),Ls(n))break}else{if(t.position===t.lineStart&&kw(t)||r&&am(m))break;if(dc(m))if(u=t.line,h=t.lineStart,f=t.lineIndent,Ci(t,!1,-1),t.lineIndent>=e){l=!0,m=t.input.charCodeAt(t.position);continue}else{t.position=s,t.line=u,t.lineStart=h,t.lineIndent=f;break}}l&&(zh(t,a,s,!1),fD(t,t.line-u),a=s=t.position,l=!1),Nd(m)||(s=t.position+1),m=t.input.charCodeAt(++t.position)}return zh(t,a,s,!1),t.result?!0:(t.kind=d,t.result=p,!1)}function hAe(t,e){var r,n,i;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,n=i=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(zh(t,n,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)n=t.position,t.position++,i=t.position;else return!0;else dc(r)?(zh(t,n,i,!0),fD(t,Ci(t,!1,e)),n=i=t.position):t.position===t.lineStart&&kw(t)?Qt(t,"unexpected end of the document within a single quoted scalar"):(t.position++,i=t.position);Qt(t,"unexpected end of the stream within a single quoted scalar")}function fAe(t,e){var r,n,i,a,s,l;if(l=t.input.charCodeAt(t.position),l!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;(l=t.input.charCodeAt(t.position))!==0;){if(l===34)return zh(t,r,t.position,!0),t.position++,!0;if(l===92){if(zh(t,r,t.position,!0),l=t.input.charCodeAt(++t.position),dc(l))Ci(t,!1,e);else if(l<256&&bj[l])t.result+=wj[l],t.position++;else if((s=sAe(l))>0){for(i=s,a=0;i>0;i--)l=t.input.charCodeAt(++t.position),(s=aAe(l))>=0?a=(a<<4)+s:Qt(t,"expected hexadecimal character");t.result+=lAe(a),t.position++}else Qt(t,"unknown escape sequence");r=n=t.position}else dc(l)?(zh(t,r,n,!0),fD(t,Ci(t,!1,e)),r=n=t.position):t.position===t.lineStart&&kw(t)?Qt(t,"unexpected end of the document within a double quoted scalar"):(t.position++,n=t.position)}Qt(t,"unexpected end of the stream within a double quoted scalar")}function dAe(t,e){var r=!0,n,i,a,s=t.tag,l,u=t.anchor,h,f,d,p,m,g=Object.create(null),y,v,x,b;if(b=t.input.charCodeAt(t.position),b===91)f=93,m=!1,l=[];else if(b===123)f=125,m=!0,l={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=l),b=t.input.charCodeAt(++t.position);b!==0;){if(Ci(t,!0,e),b=t.input.charCodeAt(t.position),b===f)return t.position++,t.tag=s,t.anchor=u,t.kind=m?"mapping":"sequence",t.result=l,!0;r?b===44&&Qt(t,"expected the node content, but found ','"):Qt(t,"missed comma between flow collection entries"),v=y=x=null,d=p=!1,b===63&&(h=t.input.charCodeAt(t.position+1),Ls(h)&&(d=p=!0,t.position++,Ci(t,!0,e))),n=t.line,i=t.lineStart,a=t.position,om(t,e,vw,!1,!0),v=t.tag,y=t.result,Ci(t,!0,e),b=t.input.charCodeAt(t.position),(p||t.line===n)&&b===58&&(d=!0,b=t.input.charCodeAt(++t.position),Ci(t,!0,e),om(t,e,vw,!1,!0),x=t.result),m?sm(t,l,g,v,y,x,n,i,a):d?l.push(sm(t,null,g,v,y,x,n,i,a)):l.push(y),Ci(t,!0,e),b=t.input.charCodeAt(t.position),b===44?(r=!0,b=t.input.charCodeAt(++t.position)):r=!1}Qt(t,"unexpected end of the stream within a flow collection")}function pAe(t,e){var r,n,i=iD,a=!1,s=!1,l=e,u=0,h=!1,f,d;if(d=t.input.charCodeAt(t.position),d===124)n=!1;else if(d===62)n=!0;else return!1;for(t.kind="scalar",t.result="";d!==0;)if(d=t.input.charCodeAt(++t.position),d===43||d===45)iD===i?i=d===43?KX:tAe:Qt(t,"repeat of a chomping mode identifier");else if((f=oAe(d))>=0)f===0?Qt(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?Qt(t,"repeat of an indentation width identifier"):(l=e+f-1,s=!0);else break;if(Nd(d)){do d=t.input.charCodeAt(++t.position);while(Nd(d));if(d===35)do d=t.input.charCodeAt(++t.position);while(!dc(d)&&d!==0)}for(;d!==0;){for(hD(t),t.lineIndent=0,d=t.input.charCodeAt(t.position);(!s||t.lineIndent<l)&&d===32;)t.lineIndent++,d=t.input.charCodeAt(++t.position);if(!s&&t.lineIndent>l&&(l=t.lineIndent),dc(d)){u++;continue}if(t.lineIndent<l){i===KX?t.result+=$i.repeat(`
366 +`,a?1+u:u):i===iD&&a&&(t.result+=`
367 +`);break}for(n?Nd(d)?(h=!0,t.result+=$i.repeat(`
368 +`,a?1+u:u)):h?(h=!1,t.result+=$i.repeat(`
369 +`,u+1)):u===0?a&&(t.result+=" "):t.result+=$i.repeat(`
370 +`,u):t.result+=$i.repeat(`
371 +`,a?1+u:u),a=!0,s=!0,u=0,r=t.position;!dc(d)&&d!==0;)d=t.input.charCodeAt(++t.position);zh(t,r,t.position,!1)}return!0}function tj(t,e){var r,n=t.tag,i=t.anchor,a=[],s,l=!1,u;if(t.firstTabInLine!==-1)return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=a),u=t.input.charCodeAt(t.position);u!==0&&(t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,Qt(t,"tab characters must not be used in indentation")),!(u!==45||(s=t.input.charCodeAt(t.position+1),!Ls(s))));){if(l=!0,t.position++,Ci(t,!0,-1)&&t.lineIndent<=e){a.push(null),u=t.input.charCodeAt(t.position);continue}if(r=t.line,om(t,e,yj,!1,!0),a.push(t.result),Ci(t,!0,-1),u=t.input.charCodeAt(t.position),(t.line===r||t.lineIndent>e)&&u!==0)Qt(t,"bad indentation of a sequence entry");else if(t.lineIndent<e)break}return l?(t.tag=n,t.anchor=i,t.kind="sequence",t.result=a,!0):!1}function mAe(t,e,r){var n,i,a,s,l,u,h=t.tag,f=t.anchor,d={},p=Object.create(null),m=null,g=null,y=null,v=!1,x=!1,b;if(t.firstTabInLine!==-1)return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=d),b=t.input.charCodeAt(t.position);b!==0;){if(!v&&t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,Qt(t,"tab characters must not be used in indentation")),n=t.input.charCodeAt(t.position+1),a=t.line,(b===63||b===58)&&Ls(n))b===63?(v&&(sm(t,d,p,m,g,null,s,l,u),m=g=y=null),x=!0,v=!0,i=!0):v?(v=!1,i=!0):Qt(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,b=n;else{if(s=t.line,l=t.lineStart,u=t.position,!om(t,r,gj,!1,!0))break;if(t.line===a){for(b=t.input.charCodeAt(t.position);Nd(b);)b=t.input.charCodeAt(++t.position);if(b===58)b=t.input.charCodeAt(++t.position),Ls(b)||Qt(t,"a whitespace character is expected after the key-value separator within a block mapping"),v&&(sm(t,d,p,m,g,null,s,l,u),m=g=y=null),x=!0,v=!1,i=!1,m=t.tag,g=t.result;else if(x)Qt(t,"can not read an implicit mapping pair; a colon is missed");else return t.tag=h,t.anchor=f,!0}else if(x)Qt(t,"can not read a block mapping entry; a multiline key may not be an implicit key");else return t.tag=h,t.anchor=f,!0}if((t.line===a||t.lineIndent>e)&&(v&&(s=t.line,l=t.lineStart,u=t.position),om(t,e,xw,!0,i)&&(v?g=t.result:y=t.result),v||(sm(t,d,p,m,g,y,s,l,u),m=g=y=null),Ci(t,!0,-1),b=t.input.charCodeAt(t.position)),(t.line===a||t.lineIndent>e)&&b!==0)Qt(t,"bad indentation of a mapping entry");else if(t.lineIndent<e)break}return v&&sm(t,d,p,m,g,null,s,l,u),x&&(t.tag=h,t.anchor=f,t.kind="mapping",t.result=d),x}function gAe(t){var e,r=!1,n=!1,i,a,s;if(s=t.input.charCodeAt(t.position),s!==33)return!1;if(t.tag!==null&&Qt(t,"duplication of a tag property"),s=t.input.charCodeAt(++t.position),s===60?(r=!0,s=t.input.charCodeAt(++t.position)):s===33?(n=!0,i="!!",s=t.input.charCodeAt(++t.position)):i="!",e=t.position,r){do s=t.input.charCodeAt(++t.position);while(s!==0&&s!==62);t.position<t.length?(a=t.input.slice(e,t.position),s=t.input.charCodeAt(++t.position)):Qt(t,"unexpected end of the stream within a verbatim tag")}else{for(;s!==0&&!Ls(s);)s===33&&(n?Qt(t,"tag suffix cannot contain exclamation marks"):(i=t.input.slice(e-1,t.position+1),vj.test(i)||Qt(t,"named tag handle cannot contain such characters"),n=!0,e=t.position+1)),s=t.input.charCodeAt(++t.position);a=t.input.slice(e,t.position),iAe.test(a)&&Qt(t,"tag suffix cannot contain flow indicator characters")}a&&!xj.test(a)&&Qt(t,"tag name cannot contain such characters: "+a);try{a=decodeURIComponent(a)}catch{Qt(t,"tag name is malformed: "+a)}return r?t.tag=a:Gh.call(t.tagMap,i)?t.tag=t.tagMap[i]+a:i==="!"?t.tag="!"+a:i==="!!"?t.tag="tag:yaml.org,2002:"+a:Qt(t,'undeclared tag handle "'+i+'"'),!0}function yAe(t){var e,r;if(r=t.input.charCodeAt(t.position),r!==38)return!1;for(t.anchor!==null&&Qt(t,"duplication of an anchor property"),r=t.input.charCodeAt(++t.position),e=t.position;r!==0&&!Ls(r)&&!am(r);)r=t.input.charCodeAt(++t.position);return t.position===e&&Qt(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(e,t.position),!0}function vAe(t){var e,r,n;if(n=t.input.charCodeAt(t.position),n!==42)return!1;for(n=t.input.charCodeAt(++t.position),e=t.position;n!==0&&!Ls(n)&&!am(n);)n=t.input.charCodeAt(++t.position);return t.position===e&&Qt(t,"name of an alias node must contain at least one character"),r=t.input.slice(e,t.position),Gh.call(t.anchorMap,r)||Qt(t,'unidentified alias "'+r+'"'),t.result=t.anchorMap[r],Ci(t,!0,-1),!0}function om(t,e,r,n,i){var a,s,l,u=1,h=!1,f=!1,d,p,m,g,y,v;if(t.listener!==null&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,a=s=l=xw===r||yj===r,n&&Ci(t,!0,-1)&&(h=!0,t.lineIndent>e?u=1:t.lineIndent===e?u=0:t.lineIndent<e&&(u=-1)),u===1)for(;gAe(t)||yAe(t);)Ci(t,!0,-1)?(h=!0,l=a,t.lineIndent>e?u=1:t.lineIndent===e?u=0:t.lineIndent<e&&(u=-1)):l=!1;if(l&&(l=h||i),(u===1||xw===r)&&(vw===r||gj===r?y=e:y=e+1,v=t.position-t.lineStart,u===1?l&&(tj(t,v)||mAe(t,v,y))||dAe(t,y)?f=!0:(s&&pAe(t,y)||hAe(t,y)||fAe(t,y)?f=!0:vAe(t)?(f=!0,(t.tag!==null||t.anchor!==null)&&Qt(t,"alias node should not have any properties")):uAe(t,y,vw===r)&&(f=!0,t.tag===null&&(t.tag="?")),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):u===0&&(f=l&&tj(t,v))),t.tag===null)t.anchor!==null&&(t.anchorMap[t.anchor]=t.result);else if(t.tag==="?"){for(t.result!==null&&t.kind!=="scalar"&&Qt(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),d=0,p=t.implicitTypes.length;d<p;d+=1)if(g=t.implicitTypes[d],g.resolve(t.result)){t.result=g.construct(t.result),t.tag=g.tag,t.anchor!==null&&(t.anchorMap[t.anchor]=t.result);break}}else if(t.tag!=="!"){if(Gh.call(t.typeMap[t.kind||"fallback"],t.tag))g=t.typeMap[t.kind||"fallback"][t.tag];else for(g=null,m=t.typeMap.multi[t.kind||"fallback"],d=0,p=m.length;d<p;d+=1)if(t.tag.slice(0,m[d].tag.length)===m[d].tag){g=m[d];break}g||Qt(t,"unknown tag !<"+t.tag+">"),t.result!==null&&g.kind!==t.kind&&Qt(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+g.kind+'", not "'+t.kind+'"'),g.resolve(t.result,t.tag)?(t.result=g.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Qt(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||f}function xAe(t){var e=t.position,r,n,i,a=!1,s;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(s=t.input.charCodeAt(t.position))!==0&&(Ci(t,!0,-1),s=t.input.charCodeAt(t.position),!(t.lineIndent>0||s!==37));){for(a=!0,s=t.input.charCodeAt(++t.position),r=t.position;s!==0&&!Ls(s);)s=t.input.charCodeAt(++t.position);for(n=t.input.slice(r,t.position),i=[],n.length<1&&Qt(t,"directive name must not be less than one character in length");s!==0;){for(;Nd(s);)s=t.input.charCodeAt(++t.position);if(s===35){do s=t.input.charCodeAt(++t.position);while(s!==0&&!dc(s));break}if(dc(s))break;for(r=t.position;s!==0&&!Ls(s);)s=t.input.charCodeAt(++t.position);i.push(t.input.slice(r,t.position))}s!==0&&hD(t),Gh.call(JX,n)?JX[n](t,n,i):bw(t,'unknown document directive "'+n+'"')}if(Ci(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Ci(t,!0,-1)):a&&Qt(t,"directives end mark is expected"),om(t,t.lineIndent-1,xw,!1,!0),Ci(t,!0,-1),t.checkLineBreaks&&nAe.test(t.input.slice(e,t.position))&&bw(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&kw(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Ci(t,!0,-1));return}if(t.position<t.length-1)Qt(t,"end of the stream or a document separator is expected");else return}function kj(t,e){t=String(t),e=e||{},t.length!==0&&(t.charCodeAt(t.length-1)!==10&&t.charCodeAt(t.length-1)!==13&&(t+=`
372 +`),t.charCodeAt(0)===65279&&(t=t.slice(1)));var r=new cAe(t,e),n=t.indexOf("\0");for(n!==-1&&(r.position=n,Qt(r,"null byte is not allowed in input")),r.input+="\0";r.input.charCodeAt(r.position)===32;)r.lineIndent+=1,r.position+=1;for(;r.position<r.length-1;)xAe(r);return r.documents}function bAe(t,e,r){e!==null&&typeof e=="object"&&typeof r>"u"&&(r=e,e=null);var n=kj(t,r);if(typeof e!="function")return n;for(var i=0,a=n.length;i<a;i+=1)e(n[i])}function wAe(t,e){var r=kj(t,e);if(r.length!==0){if(r.length===1)return r[0];throw new Ds("expected a single document in the stream, but found more")}}function VAe(t,e){var r,n,i,a,s,l,u;if(e===null)return{};for(r={},n=Object.keys(e),i=0,a=n.length;i<a;i+=1)s=n[i],l=String(e[s]),s.slice(0,2)==="!!"&&(s="tag:yaml.org,2002:"+s.slice(2)),u=t.compiledTypeMap.fallback[s],u&&Cj.call(u.styleAliases,l)&&(l=u.styleAliases[l]),r[s]=l;return r}function UAe(t){var e,r,n;if(e=t.toString(16).toUpperCase(),t<=255)r="x",n=2;else if(t<=65535)r="u",n=4;else if(t<=4294967295)r="U",n=8;else throw new Ds("code point within a string may not be greater than 0xFFFFFFFF");return"\\"+r+$i.repeat("0",n-e.length)+e}function WAe(t){this.schema=t.schema||mj,this.indent=Math.max(1,t.indent||2),this.noArrayIndent=t.noArrayIndent||!1,this.skipInvalid=t.skipInvalid||!1,this.flowLevel=$i.isNothing(t.flowLevel)?-1:t.flowLevel,this.styleMap=VAe(this.schema,t.styles||null),this.sortKeys=t.sortKeys||!1,this.lineWidth=t.lineWidth||80,this.noRefs=t.noRefs||!1,this.noCompatMode=t.noCompatMode||!1,this.condenseFlow=t.condenseFlow||!1,this.quotingType=t.quotingType==='"'?c2:HAe,this.forceQuotes=t.forceQuotes||!1,this.replacer=typeof t.replacer=="function"?t.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function rj(t,e){for(var r=$i.repeat(" ",e),n=0,i=-1,a="",s,l=t.length;n<l;)i=t.indexOf(`
373 +`,n),i===-1?(s=t.slice(n),n=l):(s=t.slice(n,i+1),n=i+1),s.length&&s!==`
374 +`&&(a+=r),a+=s;return a}function oD(t,e){return`
375 +`+$i.repeat(" ",t.indent*e)}function qAe(t,e){var r,n,i;for(r=0,n=t.implicitTypes.length;r<n;r+=1)if(i=t.implicitTypes[r],i.resolve(e))return!0;return!1}function Tw(t){return t===CAe||t===EAe}function u2(t){return 32<=t&&t<=126||161<=t&&t<=55295&&t!==8232&&t!==8233||57344<=t&&t<=65533&&t!==dD||65536<=t&&t<=1114111}function nj(t){return u2(t)&&t!==dD&&t!==SAe&&t!==l2}function ij(t,e,r){var n=nj(t),i=n&&!Tw(t);return(r?n:n&&t!==Aj&&t!==_j&&t!==Dj&&t!==Lj&&t!==Rj)&&t!==sD&&!(e===ww&&!i)||nj(e)&&!Tw(e)&&t===sD||e===ww&&i}function YAe(t){return u2(t)&&t!==dD&&!Tw(t)&&t!==MAe&&t!==PAe&&t!==ww&&t!==Aj&&t!==_j&&t!==Dj&&t!==Lj&&t!==Rj&&t!==sD&&t!==LAe&&t!==NAe&&t!==AAe&&t!==$Ae&&t!==IAe&&t!==OAe&&t!==RAe&&t!==_Ae&&t!==DAe&&t!==BAe&&t!==FAe}function XAe(t){return!Tw(t)&&t!==ww}function s2(t,e){var r=t.charCodeAt(e),n;return r>=55296&&r<=56319&&e+1<t.length&&(n=t.charCodeAt(e+1),n>=56320&&n<=57343)?(r-55296)*1024+n-56320+65536:r}function Nj(t){var e=/^\n* /;return e.test(t)}function jAe(t,e,r,n,i,a,s,l){var u,h=0,f=null,d=!1,p=!1,m=n!==-1,g=-1,y=YAe(s2(t,0))&&XAe(s2(t,t.length-1));if(e||s)for(u=0;u<t.length;h>=65536?u+=2:u++){if(h=s2(t,u),!u2(h))return im;y=y&&ij(h,f,l),f=h}else{for(u=0;u<t.length;h>=65536?u+=2:u++){if(h=s2(t,u),h===l2)d=!0,m&&(p=p||u-g-1>n&&t[g+1]!==" ",g=u);else if(!u2(h))return im;y=y&&ij(h,f,l),f=h}p=p||m&&u-g-1>n&&t[g+1]!==" "}return!d&&!p?y&&!s&&!i(t)?Mj:a===c2?im:lD:r>9&&Nj(t)?im:s?a===c2?im:lD:p?Oj:Ij}function KAe(t,e,r,n,i){t.dump=function(){if(e.length===0)return t.quotingType===c2?'""':"''";if(!t.noCompatMode&&(zAe.indexOf(e)!==-1||GAe.test(e)))return t.quotingType===c2?'"'+e+'"':"'"+e+"'";var a=t.indent*Math.max(1,r),s=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),l=n||t.flowLevel>-1&&r>=t.flowLevel;function u(h){return qAe(t,h)}switch(o(u,"testAmbiguity"),jAe(e,l,t.indent,s,u,t.quotingType,t.forceQuotes&&!n,i)){case Mj:return e;case lD:return"'"+e.replace(/'/g,"''")+"'";case Ij:return"|"+aj(e,t.indent)+sj(rj(e,a));case Oj:return">"+aj(e,t.indent)+sj(rj(QAe(e,s),a));case im:return'"'+ZAe(e)+'"';default:throw new Ds("impossible error: invalid scalar style")}}()}function aj(t,e){var r=Nj(t)?String(e):"",n=t[t.length-1]===`
376 +`,i=n&&(t[t.length-2]===`
377 +`||t===`
378 +`),a=i?"+":n?"":"-";return r+a+`
379 +`}function sj(t){return t[t.length-1]===`
380 +`?t.slice(0,-1):t}function QAe(t,e){for(var r=/(\n+)([^\n]*)/g,n=function(){var h=t.indexOf(`
381 +`);return h=h!==-1?h:t.length,r.lastIndex=h,oj(t.slice(0,h),e)}(),i=t[0]===`
382 +`||t[0]===" ",a,s;s=r.exec(t);){var l=s[1],u=s[2];a=u[0]===" ",n+=l+(!i&&!a&&u!==""?`
383 +`:"")+oj(u,e),i=a}return n}function oj(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,n,i=0,a,s=0,l=0,u="";n=r.exec(t);)l=n.index,l-i>e&&(a=s>i?s:l,u+=`
384 +`+t.slice(i,a),i=a+1),s=l;return u+=`
385 +`,t.length-i>e&&s>i?u+=t.slice(i,s)+`
386 +`+t.slice(s+1):u+=t.slice(i),u.slice(1)}function ZAe(t){for(var e="",r=0,n,i=0;i<t.length;r>=65536?i+=2:i++)r=s2(t,i),n=Da[r],!n&&u2(r)?(e+=t[i],r>=65536&&(e+=t[i+1])):e+=n||UAe(r);return e}function JAe(t,e,r){var n="",i=t.tag,a,s,l;for(a=0,s=r.length;a<s;a+=1)l=r[a],t.replacer&&(l=t.replacer.call(r,String(a),l)),(Au(t,e,l,!1,!1)||typeof l>"u"&&Au(t,e,null,!1,!1))&&(n!==""&&(n+=","+(t.condenseFlow?"":" ")),n+=t.dump);t.tag=i,t.dump="["+n+"]"}function lj(t,e,r,n){var i="",a=t.tag,s,l,u;for(s=0,l=r.length;s<l;s+=1)u=r[s],t.replacer&&(u=t.replacer.call(r,String(s),u)),(Au(t,e+1,u,!0,!0,!1,!0)||typeof u>"u"&&Au(t,e+1,null,!0,!0,!1,!0))&&((!n||i!=="")&&(i+=oD(t,e)),t.dump&&l2===t.dump.charCodeAt(0)?i+="-":i+="- ",i+=t.dump);t.tag=a,t.dump=i||"[]"}function e8e(t,e,r){var n="",i=t.tag,a=Object.keys(r),s,l,u,h,f;for(s=0,l=a.length;s<l;s+=1)f="",n!==""&&(f+=", "),t.condenseFlow&&(f+='"'),u=a[s],h=r[u],t.replacer&&(h=t.replacer.call(r,u,h)),Au(t,e,u,!1,!1)&&(t.dump.length>1024&&(f+="? "),f+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Au(t,e,h,!1,!1)&&(f+=t.dump,n+=f));t.tag=i,t.dump="{"+n+"}"}function t8e(t,e,r,n){var i="",a=t.tag,s=Object.keys(r),l,u,h,f,d,p;if(t.sortKeys===!0)s.sort();else if(typeof t.sortKeys=="function")s.sort(t.sortKeys);else if(t.sortKeys)throw new Ds("sortKeys must be a boolean or a function");for(l=0,u=s.length;l<u;l+=1)p="",(!n||i!=="")&&(p+=oD(t,e)),h=s[l],f=r[h],t.replacer&&(f=t.replacer.call(r,h,f)),Au(t,e+1,h,!0,!0,!0)&&(d=t.tag!==null&&t.tag!=="?"||t.dump&&t.dump.length>1024,d&&(t.dump&&l2===t.dump.charCodeAt(0)?p+="?":p+="? "),p+=t.dump,d&&(p+=oD(t,e)),Au(t,e+1,f,!0,d)&&(t.dump&&l2===t.dump.charCodeAt(0)?p+=":":p+=": ",p+=t.dump,i+=p));t.tag=a,t.dump=i||"{}"}function cj(t,e,r){var n,i,a,s,l,u;for(i=r?t.explicitTypes:t.implicitTypes,a=0,s=i.length;a<s;a+=1)if(l=i[a],(l.instanceOf||l.predicate)&&(!l.instanceOf||typeof e=="object"&&e instanceof l.instanceOf)&&(!l.predicate||l.predicate(e))){if(r?l.multi&&l.representName?t.tag=l.representName(e):t.tag=l.tag:t.tag="?",l.represent){if(u=t.styleMap[l.tag]||l.defaultStyle,Sj.call(l.represent)==="[object Function]")n=l.represent(e,u);else if(Cj.call(l.represent,u))n=l.represent[u](e,u);else throw new Ds("!<"+l.tag+'> tag resolver accepts not "'+u+'" style');t.dump=n}return!0}return!1}function Au(t,e,r,n,i,a,s){t.tag=null,t.dump=r,cj(t,r,!1)||cj(t,r,!0);var l=Sj.call(t.dump),u=n,h;n&&(n=t.flowLevel<0||t.flowLevel>e);var f=l==="[object Object]"||l==="[object Array]",d,p;if(f&&(d=t.duplicates.indexOf(r),p=d!==-1),(t.tag!==null&&t.tag!=="?"||p||t.indent!==2&&e>0)&&(i=!1),p&&t.usedDuplicates[d])t.dump="*ref_"+d;else{if(f&&p&&!t.usedDuplicates[d]&&(t.usedDuplicates[d]=!0),l==="[object Object]")n&&Object.keys(t.dump).length!==0?(t8e(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(e8e(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object Array]")n&&t.dump.length!==0?(t.noArrayIndent&&!s&&e>0?lj(t,e-1,t.dump,i):lj(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(JAe(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object String]")t.tag!=="?"&&KAe(t,t.dump,e,a,u);else{if(l==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new Ds("unacceptable kind of an object to dump "+l)}t.tag!==null&&t.tag!=="?"&&(h=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?h="!"+h:h.slice(0,18)==="tag:yaml.org,2002:"?h="!!"+h.slice(18):h="!<"+h+">",t.dump=h+" "+t.dump)}return!0}function r8e(t,e){var r=[],n=[],i,a;for(cD(t,r,n),i=0,a=n.length;i<a;i+=1)e.duplicates.push(r[n[i]]);e.usedDuplicates=new Array(a)}function cD(t,e,r){var n,i,a;if(t!==null&&typeof t=="object")if(i=e.indexOf(t),i!==-1)r.indexOf(i)===-1&&r.push(i);else if(e.push(t),Array.isArray(t))for(i=0,a=t.length;i<a;i+=1)cD(t[i],e,r);else for(n=Object.keys(t),i=0,a=n.length;i<a;i+=1)cD(t[n[i]],e,r)}function n8e(t,e){e=e||{};var r=new WAe(e);r.noRefs||r8e(t,r);var n=t;return r.replacer&&(n=r.replacer.call({"":n},"",n)),Au(r,0,n,!0,!0)?r.dump+`
387 +`:""}function pD(t,e){return function(){throw new Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+e+" instead, which is now safe by default.")}}var HCe,WCe,qCe,YCe,XCe,jCe,$i,Ds,QCe,ZCe,JCe,_a,n7e,i7e,a7e,s7e,o7e,h7e,m7e,T7e,k7e,C7e,D7e,fj,L7e,dj,pj,I7e,P7e,uD,G7e,V7e,U7e,q7e,Y7e,K7e,Q7e,eAe,mj,Gh,vw,gj,yj,xw,iD,tAe,KX,rAe,nAe,iAe,vj,xj,bj,wj,Rd,JX,TAe,kAe,Ej,Sj,Cj,dD,EAe,l2,SAe,CAe,AAe,_Ae,sD,DAe,LAe,RAe,NAe,Aj,MAe,ww,IAe,OAe,PAe,BAe,_j,Dj,FAe,Lj,$Ae,Rj,Da,zAe,GAe,HAe,c2,Mj,lD,Ij,Oj,im,i8e,a8e,lm,cm,okt,lkt,ckt,ukt,hkt,Ew=N(()=>{"use strict";o(uj,"isNothing");o($Ce,"isObject");o(zCe,"toArray");o(GCe,"extend");o(VCe,"repeat");o(UCe,"isNegativeZero");HCe=uj,WCe=$Ce,qCe=zCe,YCe=VCe,XCe=UCe,jCe=GCe,$i={isNothing:HCe,isObject:WCe,toArray:qCe,repeat:YCe,isNegativeZero:XCe,extend:jCe};o(hj,"formatError");o(o2,"YAMLException$1");o2.prototype=Object.create(Error.prototype);o2.prototype.constructor=o2;o2.prototype.toString=o(function(e){return this.name+": "+hj(this,e)},"toString");Ds=o2;o(rD,"getLine");o(nD,"padStart");o(KCe,"makeSnippet");QCe=KCe,ZCe=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],JCe=["scalar","sequence","mapping"];o(e7e,"compileStyleAliases");o(t7e,"Type$1");_a=t7e;o(jX,"compileList");o(r7e,"compileMap");o(aD,"Schema$1");aD.prototype.extend=o(function(e){var r=[],n=[];if(e instanceof _a)n.push(e);else if(Array.isArray(e))n=n.concat(e);else if(e&&(Array.isArray(e.implicit)||Array.isArray(e.explicit)))e.implicit&&(r=r.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit));else throw new Ds("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");r.forEach(function(a){if(!(a instanceof _a))throw new Ds("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(a.loadKind&&a.loadKind!=="scalar")throw new Ds("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(a.multi)throw new Ds("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),n.forEach(function(a){if(!(a instanceof _a))throw new Ds("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var i=Object.create(aD.prototype);return i.implicit=(this.implicit||[]).concat(r),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=jX(i,"implicit"),i.compiledExplicit=jX(i,"explicit"),i.compiledTypeMap=r7e(i.compiledImplicit,i.compiledExplicit),i},"extend");n7e=aD,i7e=new _a("tag:yaml.org,2002:str",{kind:"scalar",construct:o(function(t){return t!==null?t:""},"construct")}),a7e=new _a("tag:yaml.org,2002:seq",{kind:"sequence",construct:o(function(t){return t!==null?t:[]},"construct")}),s7e=new _a("tag:yaml.org,2002:map",{kind:"mapping",construct:o(function(t){return t!==null?t:{}},"construct")}),o7e=new n7e({explicit:[i7e,a7e,s7e]});o(l7e,"resolveYamlNull");o(c7e,"constructYamlNull");o(u7e,"isNull");h7e=new _a("tag:yaml.org,2002:null",{kind:"scalar",resolve:l7e,construct:c7e,predicate:u7e,represent:{canonical:o(function(){return"~"},"canonical"),lowercase:o(function(){return"null"},"lowercase"),uppercase:o(function(){return"NULL"},"uppercase"),camelcase:o(function(){return"Null"},"camelcase"),empty:o(function(){return""},"empty")},defaultStyle:"lowercase"});o(f7e,"resolveYamlBoolean");o(d7e,"constructYamlBoolean");o(p7e,"isBoolean");m7e=new _a("tag:yaml.org,2002:bool",{kind:"scalar",resolve:f7e,construct:d7e,predicate:p7e,represent:{lowercase:o(function(t){return t?"true":"false"},"lowercase"),uppercase:o(function(t){return t?"TRUE":"FALSE"},"uppercase"),camelcase:o(function(t){return t?"True":"False"},"camelcase")},defaultStyle:"lowercase"});o(g7e,"isHexCode");o(y7e,"isOctCode");o(v7e,"isDecCode");o(x7e,"resolveYamlInteger");o(b7e,"constructYamlInteger");o(w7e,"isInteger");T7e=new _a("tag:yaml.org,2002:int",{kind:"scalar",resolve:x7e,construct:b7e,predicate:w7e,represent:{binary:o(function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},"binary"),octal:o(function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},"octal"),decimal:o(function(t){return t.toString(10)},"decimal"),hexadecimal:o(function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)},"hexadecimal")},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),k7e=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");o(E7e,"resolveYamlFloat");o(S7e,"constructYamlFloat");C7e=/^[-+]?[0-9]+e/;o(A7e,"representYamlFloat");o(_7e,"isFloat");D7e=new _a("tag:yaml.org,2002:float",{kind:"scalar",resolve:E7e,construct:S7e,predicate:_7e,represent:A7e,defaultStyle:"lowercase"}),fj=o7e.extend({implicit:[h7e,m7e,T7e,D7e]}),L7e=fj,dj=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),pj=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");o(R7e,"resolveYamlTimestamp");o(N7e,"constructYamlTimestamp");o(M7e,"representYamlTimestamp");I7e=new _a("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:R7e,construct:N7e,instanceOf:Date,represent:M7e});o(O7e,"resolveYamlMerge");P7e=new _a("tag:yaml.org,2002:merge",{kind:"scalar",resolve:O7e}),uD=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
388 +\r`;o(B7e,"resolveYamlBinary");o(F7e,"constructYamlBinary");o($7e,"representYamlBinary");o(z7e,"isBinary");G7e=new _a("tag:yaml.org,2002:binary",{kind:"scalar",resolve:B7e,construct:F7e,predicate:z7e,represent:$7e}),V7e=Object.prototype.hasOwnProperty,U7e=Object.prototype.toString;o(H7e,"resolveYamlOmap");o(W7e,"constructYamlOmap");q7e=new _a("tag:yaml.org,2002:omap",{kind:"sequence",resolve:H7e,construct:W7e}),Y7e=Object.prototype.toString;o(X7e,"resolveYamlPairs");o(j7e,"constructYamlPairs");K7e=new _a("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:X7e,construct:j7e}),Q7e=Object.prototype.hasOwnProperty;o(Z7e,"resolveYamlSet");o(J7e,"constructYamlSet");eAe=new _a("tag:yaml.org,2002:set",{kind:"mapping",resolve:Z7e,construct:J7e}),mj=L7e.extend({implicit:[I7e,P7e],explicit:[G7e,q7e,K7e,eAe]}),Gh=Object.prototype.hasOwnProperty,vw=1,gj=2,yj=3,xw=4,iD=1,tAe=2,KX=3,rAe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,nAe=/[\x85\u2028\u2029]/,iAe=/[,\[\]\{\}]/,vj=/^(?:!|!!|![a-z\-]+!)$/i,xj=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;o(QX,"_class");o(dc,"is_EOL");o(Nd,"is_WHITE_SPACE");o(Ls,"is_WS_OR_EOL");o(am,"is_FLOW_INDICATOR");o(aAe,"fromHexCode");o(sAe,"escapedHexLen");o(oAe,"fromDecimalCode");o(ZX,"simpleEscapeSequence");o(lAe,"charFromCodepoint");bj=new Array(256),wj=new Array(256);for(Rd=0;Rd<256;Rd++)bj[Rd]=ZX(Rd)?1:0,wj[Rd]=ZX(Rd);o(cAe,"State$1");o(Tj,"generateError");o(Qt,"throwError");o(bw,"throwWarning");JX={YAML:o(function(e,r,n){var i,a,s;e.version!==null&&Qt(e,"duplication of %YAML directive"),n.length!==1&&Qt(e,"YAML directive accepts exactly one argument"),i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),i===null&&Qt(e,"ill-formed argument of the YAML directive"),a=parseInt(i[1],10),s=parseInt(i[2],10),a!==1&&Qt(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=s<2,s!==1&&s!==2&&bw(e,"unsupported YAML version of the document")},"handleYamlDirective"),TAG:o(function(e,r,n){var i,a;n.length!==2&&Qt(e,"TAG directive accepts exactly two arguments"),i=n[0],a=n[1],vj.test(i)||Qt(e,"ill-formed tag handle (first argument) of the TAG directive"),Gh.call(e.tagMap,i)&&Qt(e,'there is a previously declared suffix for "'+i+'" tag handle'),xj.test(a)||Qt(e,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch{Qt(e,"tag prefix is malformed: "+a)}e.tagMap[i]=a},"handleTagDirective")};o(zh,"captureSegment");o(ej,"mergeMappings");o(sm,"storeMappingPair");o(hD,"readLineBreak");o(Ci,"skipSeparationSpace");o(kw,"testDocumentSeparator");o(fD,"writeFoldedLines");o(uAe,"readPlainScalar");o(hAe,"readSingleQuotedScalar");o(fAe,"readDoubleQuotedScalar");o(dAe,"readFlowCollection");o(pAe,"readBlockScalar");o(tj,"readBlockSequence");o(mAe,"readBlockMapping");o(gAe,"readTagProperty");o(yAe,"readAnchorProperty");o(vAe,"readAlias");o(om,"composeNode");o(xAe,"readDocument");o(kj,"loadDocuments");o(bAe,"loadAll$1");o(wAe,"load$1");TAe=bAe,kAe=wAe,Ej={loadAll:TAe,load:kAe},Sj=Object.prototype.toString,Cj=Object.prototype.hasOwnProperty,dD=65279,EAe=9,l2=10,SAe=13,CAe=32,AAe=33,_Ae=34,sD=35,DAe=37,LAe=38,RAe=39,NAe=42,Aj=44,MAe=45,ww=58,IAe=61,OAe=62,PAe=63,BAe=64,_j=91,Dj=93,FAe=96,Lj=123,$Ae=124,Rj=125,Da={};Da[0]="\\0";Da[7]="\\a";Da[8]="\\b";Da[9]="\\t";Da[10]="\\n";Da[11]="\\v";Da[12]="\\f";Da[13]="\\r";Da[27]="\\e";Da[34]='\\"';Da[92]="\\\\";Da[133]="\\N";Da[160]="\\_";Da[8232]="\\L";Da[8233]="\\P";zAe=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],GAe=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;o(VAe,"compileStyleMap");o(UAe,"encodeHex");HAe=1,c2=2;o(WAe,"State");o(rj,"indentString");o(oD,"generateNextLine");o(qAe,"testImplicitResolving");o(Tw,"isWhitespace");o(u2,"isPrintable");o(nj,"isNsCharOrWhitespace");o(ij,"isPlainSafe");o(YAe,"isPlainSafeFirst");o(XAe,"isPlainSafeLast");o(s2,"codePointAt");o(Nj,"needIndentIndicator");Mj=1,lD=2,Ij=3,Oj=4,im=5;o(jAe,"chooseScalarStyle");o(KAe,"writeScalar");o(aj,"blockHeader");o(sj,"dropEndingNewline");o(QAe,"foldString");o(oj,"foldLine");o(ZAe,"escapeString");o(JAe,"writeFlowSequence");o(lj,"writeBlockSequence");o(e8e,"writeFlowMapping");o(t8e,"writeBlockMapping");o(cj,"detectType");o(Au,"writeNode");o(r8e,"getDuplicateReferences");o(cD,"inspectNode");o(n8e,"dump$1");i8e=n8e,a8e={dump:i8e};o(pD,"renamed");lm=fj,cm=Ej.load,okt=Ej.loadAll,lkt=a8e.dump,ckt=pD("safeLoad","load"),ukt=pD("safeLoadAll","loadAll"),hkt=pD("safeDump","dump")});function vD(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function Gj(t){Id=t}function nn(t,e=""){let r=typeof t=="string"?t:t.source,n={replace:o((i,a)=>{let s=typeof a=="string"?a:a.source;return s=s.replace(ts.caret,"$1"),r=r.replace(i,s),n},"replace"),getRegex:o(()=>new RegExp(r,e),"getRegex")};return n}function pc(t,e){if(e){if(ts.escapeTest.test(t))return t.replace(ts.escapeReplace,Bj)}else if(ts.escapeTestNoEncode.test(t))return t.replace(ts.escapeReplaceNoEncode,Bj);return t}function Fj(t){try{t=encodeURI(t).replace(ts.percentDecode,"%")}catch{return null}return t}function $j(t,e){let r=t.replace(ts.findPipe,(a,s,l)=>{let u=!1,h=s;for(;--h>=0&&l[h]==="\\";)u=!u;return u?"|":" |"}),n=r.split(ts.splitPipe),i=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push("");for(;i<n.length;i++)n[i]=n[i].trim().replace(ts.slashPipe,"|");return n}function f2(t,e,r){let n=t.length;if(n===0)return"";let i=0;for(;i<n&&t.charAt(n-i-1)===e;)i++;return t.slice(0,n-i)}function $8e(t,e){if(t.indexOf(e[1])===-1)return-1;let r=0;for(let n=0;n<t.length;n++)if(t[n]==="\\")n++;else if(t[n]===e[0])r++;else if(t[n]===e[1]&&(r--,r<0))return n;return-1}function zj(t,e,r,n,i){let a=e.href,s=e.title||null,l=t[1].replace(i.other.outputLinkReplace,"$1");if(t[0].charAt(0)!=="!"){n.state.inLink=!0;let u={type:"link",raw:r,href:a,title:s,text:l,tokens:n.inlineTokens(l)};return n.state.inLink=!1,u}return{type:"image",raw:r,href:a,title:s,text:l}}function z8e(t,e,r){let n=t.match(r.other.indentCodeCompensation);if(n===null)return e;let i=n[1];return e.split(`
389 +`).map(a=>{let s=a.match(r.other.beginningSpace);if(s===null)return a;let[l]=s;return l.length>=i.length?a.slice(i.length):a}).join(`
390 +`)}function Jr(t,e){return Md.parse(t,e)}var Id,d2,ts,s8e,o8e,l8e,m2,c8e,xD,Vj,Uj,u8e,bD,h8e,wD,f8e,d8e,Aw,TD,p8e,Hj,m8e,kD,Pj,g8e,y8e,v8e,x8e,Wj,b8e,_w,ED,qj,w8e,Yj,T8e,k8e,E8e,Xj,S8e,C8e,jj,A8e,_8e,D8e,L8e,R8e,N8e,M8e,Cw,I8e,Kj,Qj,O8e,SD,P8e,gD,B8e,Sw,h2,F8e,Bj,hm,Al,fm,p2,_l,um,yD,Md,dkt,pkt,mkt,gkt,ykt,vkt,xkt,Zj=N(()=>{"use strict";o(vD,"_getDefaults");Id=vD();o(Gj,"changeDefaults");d2={exec:o(()=>null,"exec")};o(nn,"edit");ts={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:o(t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),"listItemRegex"),nextBulletRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),"nextBulletRegex"),hrRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),"hrRegex"),fencesBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:\`\`\`|~~~)`),"fencesBeginRegex"),headingBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}#`),"headingBeginRegex"),htmlBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}<(?:[a-z].*>|!--)`,"i"),"htmlBeginRegex")},s8e=/^(?:[ \t]*(?:\n|$))+/,o8e=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,l8e=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,m2=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,c8e=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,xD=/(?:[*+-]|\d{1,9}[.)])/,Vj=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Uj=nn(Vj).replace(/bull/g,xD).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),u8e=nn(Vj).replace(/bull/g,xD).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),bD=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,h8e=/^[^\n]+/,wD=/(?!\s*\])(?:\\.|[^\[\]\\])+/,f8e=nn(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",wD).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),d8e=nn(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,xD).getRegex(),Aw="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",TD=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,p8e=nn("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",TD).replace("tag",Aw).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Hj=nn(bD).replace("hr",m2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Aw).getRegex(),m8e=nn(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Hj).getRegex(),kD={blockquote:m8e,code:o8e,def:f8e,fences:l8e,heading:c8e,hr:m2,html:p8e,lheading:Uj,list:d8e,newline:s8e,paragraph:Hj,table:d2,text:h8e},Pj=nn("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",m2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Aw).getRegex(),g8e={...kD,lheading:u8e,table:Pj,paragraph:nn(bD).replace("hr",m2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Pj).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Aw).getRegex()},y8e={...kD,html:nn(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",TD).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:d2,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:nn(bD).replace("hr",m2).replace("heading",` *#{1,6} *[^
391 +]`).replace("lheading",Uj).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},v8e=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,x8e=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Wj=/^( {2,}|\\)\n(?!\s*$)/,b8e=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,_w=/[\p{P}\p{S}]/u,ED=/[\s\p{P}\p{S}]/u,qj=/[^\s\p{P}\p{S}]/u,w8e=nn(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,ED).getRegex(),Yj=/(?!~)[\p{P}\p{S}]/u,T8e=/(?!~)[\s\p{P}\p{S}]/u,k8e=/(?:[^\s\p{P}\p{S}]|~)/u,E8e=/\[[^[\]]*?\]\((?:\\.|[^\\\(\)]|\((?:\\.|[^\\\(\)])*\))*\)|`[^`]*?`|<[^<>]*?>/g,Xj=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,S8e=nn(Xj,"u").replace(/punct/g,_w).getRegex(),C8e=nn(Xj,"u").replace(/punct/g,Yj).getRegex(),jj="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",A8e=nn(jj,"gu").replace(/notPunctSpace/g,qj).replace(/punctSpace/g,ED).replace(/punct/g,_w).getRegex(),_8e=nn(jj,"gu").replace(/notPunctSpace/g,k8e).replace(/punctSpace/g,T8e).replace(/punct/g,Yj).getRegex(),D8e=nn("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,qj).replace(/punctSpace/g,ED).replace(/punct/g,_w).getRegex(),L8e=nn(/\\(punct)/,"gu").replace(/punct/g,_w).getRegex(),R8e=nn(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),N8e=nn(TD).replace("(?:-->|$)","-->").getRegex(),M8e=nn("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",N8e).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Cw=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,I8e=nn(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",Cw).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Kj=nn(/^!?\[(label)\]\[(ref)\]/).replace("label",Cw).replace("ref",wD).getRegex(),Qj=nn(/^!?\[(ref)\](?:\[\])?/).replace("ref",wD).getRegex(),O8e=nn("reflink|nolink(?!\\()","g").replace("reflink",Kj).replace("nolink",Qj).getRegex(),SD={_backpedal:d2,anyPunctuation:L8e,autolink:R8e,blockSkip:E8e,br:Wj,code:x8e,del:d2,emStrongLDelim:S8e,emStrongRDelimAst:A8e,emStrongRDelimUnd:D8e,escape:v8e,link:I8e,nolink:Qj,punctuation:w8e,reflink:Kj,reflinkSearch:O8e,tag:M8e,text:b8e,url:d2},P8e={...SD,link:nn(/^!?\[(label)\]\((.*?)\)/).replace("label",Cw).getRegex(),reflink:nn(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Cw).getRegex()},gD={...SD,emStrongRDelimAst:_8e,emStrongLDelim:C8e,url:nn(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/},B8e={...gD,br:nn(Wj).replace("{2,}","*").getRegex(),text:nn(gD.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},Sw={normal:kD,gfm:g8e,pedantic:y8e},h2={normal:SD,gfm:gD,breaks:B8e,pedantic:P8e},F8e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Bj=o(t=>F8e[t],"getEscapeReplacement");o(pc,"escape");o(Fj,"cleanUrl");o($j,"splitCells");o(f2,"rtrim");o($8e,"findClosingBracket");o(zj,"outputLink");o(z8e,"indentCodeCompensation");hm=class{static{o(this,"_Tokenizer")}options;rules;lexer;constructor(e){this.options=e||Id}space(e){let r=this.rules.block.newline.exec(e);if(r&&r[0].length>0)return{type:"space",raw:r[0]}}code(e){let r=this.rules.block.code.exec(e);if(r){let n=r[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:r[0],codeBlockStyle:"indented",text:this.options.pedantic?n:f2(n,`
392 +`)}}}fences(e){let r=this.rules.block.fences.exec(e);if(r){let n=r[0],i=z8e(n,r[3]||"",this.rules);return{type:"code",raw:n,lang:r[2]?r[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):r[2],text:i}}}heading(e){let r=this.rules.block.heading.exec(e);if(r){let n=r[2].trim();if(this.rules.other.endingHash.test(n)){let i=f2(n,"#");(this.options.pedantic||!i||this.rules.other.endingSpaceChar.test(i))&&(n=i.trim())}return{type:"heading",raw:r[0],depth:r[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let r=this.rules.block.hr.exec(e);if(r)return{type:"hr",raw:f2(r[0],`
393 +`)}}blockquote(e){let r=this.rules.block.blockquote.exec(e);if(r){let n=f2(r[0],`
394 +`).split(`
395 +`),i="",a="",s=[];for(;n.length>0;){let l=!1,u=[],h;for(h=0;h<n.length;h++)if(this.rules.other.blockquoteStart.test(n[h]))u.push(n[h]),l=!0;else if(!l)u.push(n[h]);else break;n=n.slice(h);let f=u.join(`
396 +`),d=f.replace(this.rules.other.blockquoteSetextReplace,`
397 + $1`).replace(this.rules.other.blockquoteSetextReplace2,"");i=i?`${i}
398 +${f}`:f,a=a?`${a}
399 +${d}`:d;let p=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(d,s,!0),this.lexer.state.top=p,n.length===0)break;let m=s.at(-1);if(m?.type==="code")break;if(m?.type==="blockquote"){let g=m,y=g.raw+`
400 +`+n.join(`
401 +`),v=this.blockquote(y);s[s.length-1]=v,i=i.substring(0,i.length-g.raw.length)+v.raw,a=a.substring(0,a.length-g.text.length)+v.text;break}else if(m?.type==="list"){let g=m,y=g.raw+`
402 +`+n.join(`
403 +`),v=this.list(y);s[s.length-1]=v,i=i.substring(0,i.length-m.raw.length)+v.raw,a=a.substring(0,a.length-g.raw.length)+v.raw,n=y.substring(s.at(-1).raw.length).split(`
404 +`);continue}}return{type:"blockquote",raw:i,tokens:s,text:a}}}list(e){let r=this.rules.block.list.exec(e);if(r){let n=r[1].trim(),i=n.length>1,a={type:"list",raw:"",ordered:i,start:i?+n.slice(0,-1):"",loose:!1,items:[]};n=i?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=i?n:"[*+-]");let s=this.rules.other.listItemRegex(n),l=!1;for(;e;){let h=!1,f="",d="";if(!(r=s.exec(e))||this.rules.block.hr.test(e))break;f=r[0],e=e.substring(f.length);let p=r[2].split(`
405 +`,1)[0].replace(this.rules.other.listReplaceTabs,b=>" ".repeat(3*b.length)),m=e.split(`
406 +`,1)[0],g=!p.trim(),y=0;if(this.options.pedantic?(y=2,d=p.trimStart()):g?y=r[1].length+1:(y=r[2].search(this.rules.other.nonSpaceChar),y=y>4?1:y,d=p.slice(y),y+=r[1].length),g&&this.rules.other.blankLine.test(m)&&(f+=m+`
407 +`,e=e.substring(m.length+1),h=!0),!h){let b=this.rules.other.nextBulletRegex(y),w=this.rules.other.hrRegex(y),C=this.rules.other.fencesBeginRegex(y),T=this.rules.other.headingBeginRegex(y),E=this.rules.other.htmlBeginRegex(y);for(;e;){let A=e.split(`
408 +`,1)[0],S;if(m=A,this.options.pedantic?(m=m.replace(this.rules.other.listReplaceNesting," "),S=m):S=m.replace(this.rules.other.tabCharGlobal," "),C.test(m)||T.test(m)||E.test(m)||b.test(m)||w.test(m))break;if(S.search(this.rules.other.nonSpaceChar)>=y||!m.trim())d+=`
409 +`+S.slice(y);else{if(g||p.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||C.test(p)||T.test(p)||w.test(p))break;d+=`
410 +`+m}!g&&!m.trim()&&(g=!0),f+=A+`
411 +`,e=e.substring(A.length+1),p=S.slice(y)}}a.loose||(l?a.loose=!0:this.rules.other.doubleBlankLine.test(f)&&(l=!0));let v=null,x;this.options.gfm&&(v=this.rules.other.listIsTask.exec(d),v&&(x=v[0]!=="[ ] ",d=d.replace(this.rules.other.listReplaceTask,""))),a.items.push({type:"list_item",raw:f,task:!!v,checked:x,loose:!1,text:d,tokens:[]}),a.raw+=f}let u=a.items.at(-1);if(u)u.raw=u.raw.trimEnd(),u.text=u.text.trimEnd();else return;a.raw=a.raw.trimEnd();for(let h=0;h<a.items.length;h++)if(this.lexer.state.top=!1,a.items[h].tokens=this.lexer.blockTokens(a.items[h].text,[]),!a.loose){let f=a.items[h].tokens.filter(p=>p.type==="space"),d=f.length>0&&f.some(p=>this.rules.other.anyLine.test(p.raw));a.loose=d}if(a.loose)for(let h=0;h<a.items.length;h++)a.items[h].loose=!0;return a}}html(e){let r=this.rules.block.html.exec(e);if(r)return{type:"html",block:!0,raw:r[0],pre:r[1]==="pre"||r[1]==="script"||r[1]==="style",text:r[0]}}def(e){let r=this.rules.block.def.exec(e);if(r){let n=r[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),i=r[2]?r[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",a=r[3]?r[3].substring(1,r[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):r[3];return{type:"def",tag:n,raw:r[0],href:i,title:a}}}table(e){let r=this.rules.block.table.exec(e);if(!r||!this.rules.other.tableDelimiter.test(r[2]))return;let n=$j(r[1]),i=r[2].replace(this.rules.other.tableAlignChars,"").split("|"),a=r[3]?.trim()?r[3].replace(this.rules.other.tableRowBlankLine,"").split(`
412 +`):[],s={type:"table",raw:r[0],header:[],align:[],rows:[]};if(n.length===i.length){for(let l of i)this.rules.other.tableAlignRight.test(l)?s.align.push("right"):this.rules.other.tableAlignCenter.test(l)?s.align.push("center"):this.rules.other.tableAlignLeft.test(l)?s.align.push("left"):s.align.push(null);for(let l=0;l<n.length;l++)s.header.push({text:n[l],tokens:this.lexer.inline(n[l]),header:!0,align:s.align[l]});for(let l of a)s.rows.push($j(l,s.header.length).map((u,h)=>({text:u,tokens:this.lexer.inline(u),header:!1,align:s.align[h]})));return s}}lheading(e){let r=this.rules.block.lheading.exec(e);if(r)return{type:"heading",raw:r[0],depth:r[2].charAt(0)==="="?1:2,text:r[1],tokens:this.lexer.inline(r[1])}}paragraph(e){let r=this.rules.block.paragraph.exec(e);if(r){let n=r[1].charAt(r[1].length-1)===`
413 +`?r[1].slice(0,-1):r[1];return{type:"paragraph",raw:r[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let r=this.rules.block.text.exec(e);if(r)return{type:"text",raw:r[0],text:r[0],tokens:this.lexer.inline(r[0])}}escape(e){let r=this.rules.inline.escape.exec(e);if(r)return{type:"escape",raw:r[0],text:r[1]}}tag(e){let r=this.rules.inline.tag.exec(e);if(r)return!this.lexer.state.inLink&&this.rules.other.startATag.test(r[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(r[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(r[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(r[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:r[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:r[0]}}link(e){let r=this.rules.inline.link.exec(e);if(r){let n=r[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=f2(n.slice(0,-1),"\\");if((n.length-s.length)%2===0)return}else{let s=$8e(r[2],"()");if(s>-1){let u=(r[0].indexOf("!")===0?5:4)+r[1].length+s;r[2]=r[2].substring(0,s),r[0]=r[0].substring(0,u).trim(),r[3]=""}}let i=r[2],a="";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(i);s&&(i=s[1],a=s[3])}else a=r[3]?r[3].slice(1,-1):"";return i=i.trim(),this.rules.other.startAngleBracket.test(i)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?i=i.slice(1):i=i.slice(1,-1)),zj(r,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:a&&a.replace(this.rules.inline.anyPunctuation,"$1")},r[0],this.lexer,this.rules)}}reflink(e,r){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let i=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),a=r[i.toLowerCase()];if(!a){let s=n[0].charAt(0);return{type:"text",raw:s,text:s}}return zj(n,a,n[0],this.lexer,this.rules)}}emStrong(e,r,n=""){let i=this.rules.inline.emStrongLDelim.exec(e);if(!i||i[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(i[1]||i[2]||"")||!n||this.rules.inline.punctuation.exec(n)){let s=[...i[0]].length-1,l,u,h=s,f=0,d=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(d.lastIndex=0,r=r.slice(-1*e.length+s);(i=d.exec(r))!=null;){if(l=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!l)continue;if(u=[...l].length,i[3]||i[4]){h+=u;continue}else if((i[5]||i[6])&&s%3&&!((s+u)%3)){f+=u;continue}if(h-=u,h>0)continue;u=Math.min(u,u+h+f);let p=[...i[0]][0].length,m=e.slice(0,s+i.index+p+u);if(Math.min(s,u)%2){let y=m.slice(1,-1);return{type:"em",raw:m,text:y,tokens:this.lexer.inlineTokens(y)}}let g=m.slice(2,-2);return{type:"strong",raw:m,text:g,tokens:this.lexer.inlineTokens(g)}}}}codespan(e){let r=this.rules.inline.code.exec(e);if(r){let n=r[2].replace(this.rules.other.newLineCharGlobal," "),i=this.rules.other.nonSpaceChar.test(n),a=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return i&&a&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:r[0],text:n}}}br(e){let r=this.rules.inline.br.exec(e);if(r)return{type:"br",raw:r[0]}}del(e){let r=this.rules.inline.del.exec(e);if(r)return{type:"del",raw:r[0],text:r[2],tokens:this.lexer.inlineTokens(r[2])}}autolink(e){let r=this.rules.inline.autolink.exec(e);if(r){let n,i;return r[2]==="@"?(n=r[1],i="mailto:"+n):(n=r[1],i=n),{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let r;if(r=this.rules.inline.url.exec(e)){let n,i;if(r[2]==="@")n=r[0],i="mailto:"+n;else{let a;do a=r[0],r[0]=this.rules.inline._backpedal.exec(r[0])?.[0]??"";while(a!==r[0]);n=r[0],r[1]==="www."?i="http://"+r[0]:i=r[0]}return{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let r=this.rules.inline.text.exec(e);if(r){let n=this.lexer.state.inRawBlock;return{type:"text",raw:r[0],text:r[0],escaped:n}}}},Al=class t{static{o(this,"_Lexer")}tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||Id,this.options.tokenizer=this.options.tokenizer||new hm,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let r={other:ts,block:Sw.normal,inline:h2.normal};this.options.pedantic?(r.block=Sw.pedantic,r.inline=h2.pedantic):this.options.gfm&&(r.block=Sw.gfm,this.options.breaks?r.inline=h2.breaks:r.inline=h2.gfm),this.tokenizer.rules=r}static get rules(){return{block:Sw,inline:h2}}static lex(e,r){return new t(r).lex(e)}static lexInline(e,r){return new t(r).inlineTokens(e)}lex(e){e=e.replace(ts.carriageReturn,`
414 +`),this.blockTokens(e,this.tokens);for(let r=0;r<this.inlineQueue.length;r++){let n=this.inlineQueue[r];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,r=[],n=!1){for(this.options.pedantic&&(e=e.replace(ts.tabCharGlobal," ").replace(ts.spaceLine,""));e;){let i;if(this.options.extensions?.block?.some(s=>(i=s.call({lexer:this},e,r))?(e=e.substring(i.raw.length),r.push(i),!0):!1))continue;if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length);let s=r.at(-1);i.raw.length===1&&s!==void 0?s.raw+=`
415 +`:r.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=`
416 +`+i.raw,s.text+=`
417 +`+i.text,this.inlineQueue.at(-1).src=s.text):r.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=`
418 +`+i.raw,s.text+=`
419 +`+i.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title});continue}if(i=this.tokenizer.table(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.lheading(e)){e=e.substring(i.raw.length),r.push(i);continue}let a=e;if(this.options.extensions?.startBlock){let s=1/0,l=e.slice(1),u;this.options.extensions.startBlock.forEach(h=>{u=h.call({lexer:this},l),typeof u=="number"&&u>=0&&(s=Math.min(s,u))}),s<1/0&&s>=0&&(a=e.substring(0,s+1))}if(this.state.top&&(i=this.tokenizer.paragraph(a))){let s=r.at(-1);n&&s?.type==="paragraph"?(s.raw+=`
420 +`+i.raw,s.text+=`
421 +`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(i),n=a.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length);let s=r.at(-1);s?.type==="text"?(s.raw+=`
422 +`+i.raw,s.text+=`
423 +`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(i);continue}if(e){let s="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,r}inline(e,r=[]){return this.inlineQueue.push({src:e,tokens:r}),r}inlineTokens(e,r=[]){let n=e,i=null;if(this.tokens.links){let l=Object.keys(this.tokens.links);if(l.length>0)for(;(i=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)l.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(n=n.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(i=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(i=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,i.index)+"++"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let a=!1,s="";for(;e;){a||(s=""),a=!1;let l;if(this.options.extensions?.inline?.some(h=>(l=h.call({lexer:this},e,r))?(e=e.substring(l.raw.length),r.push(l),!0):!1))continue;if(l=this.tokenizer.escape(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.tag(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.link(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(l.raw.length);let h=r.at(-1);l.type==="text"&&h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(l=this.tokenizer.emStrong(e,n,s)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.codespan(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.br(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.del(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.autolink(e)){e=e.substring(l.raw.length),r.push(l);continue}if(!this.state.inLink&&(l=this.tokenizer.url(e))){e=e.substring(l.raw.length),r.push(l);continue}let u=e;if(this.options.extensions?.startInline){let h=1/0,f=e.slice(1),d;this.options.extensions.startInline.forEach(p=>{d=p.call({lexer:this},f),typeof d=="number"&&d>=0&&(h=Math.min(h,d))}),h<1/0&&h>=0&&(u=e.substring(0,h+1))}if(l=this.tokenizer.inlineText(u)){e=e.substring(l.raw.length),l.raw.slice(-1)!=="_"&&(s=l.raw.slice(-1)),a=!0;let h=r.at(-1);h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(e){let h="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(h);break}else throw new Error(h)}}return r}},fm=class{static{o(this,"_Renderer")}options;parser;constructor(e){this.options=e||Id}space(e){return""}code({text:e,lang:r,escaped:n}){let i=(r||"").match(ts.notSpaceStart)?.[0],a=e.replace(ts.endingNewline,"")+`
424 +`;return i?'<pre><code class="language-'+pc(i)+'">'+(n?a:pc(a,!0))+`</code></pre>
425 +`:"<pre><code>"+(n?a:pc(a,!0))+`</code></pre>
426 +`}blockquote({tokens:e}){return`<blockquote>
427 +${this.parser.parse(e)}</blockquote>
428 +`}html({text:e}){return e}heading({tokens:e,depth:r}){return`<h${r}>${this.parser.parseInline(e)}</h${r}>
429 +`}hr(e){return`<hr>
430 +`}list(e){let r=e.ordered,n=e.start,i="";for(let l=0;l<e.items.length;l++){let u=e.items[l];i+=this.listitem(u)}let a=r?"ol":"ul",s=r&&n!==1?' start="'+n+'"':"";return"<"+a+s+`>
431 +`+i+"</"+a+`>
432 +`}listitem(e){let r="";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type==="paragraph"?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type==="text"&&(e.tokens[0].tokens[0].text=n+" "+pc(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" ",escaped:!0}):r+=n+" "}return r+=this.parser.parse(e.tokens,!!e.loose),`<li>${r}</li>
433 +`}checkbox({checked:e}){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox">'}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>
434 +`}table(e){let r="",n="";for(let a=0;a<e.header.length;a++)n+=this.tablecell(e.header[a]);r+=this.tablerow({text:n});let i="";for(let a=0;a<e.rows.length;a++){let s=e.rows[a];n="";for(let l=0;l<s.length;l++)n+=this.tablecell(s[l]);i+=this.tablerow({text:n})}return i&&(i=`<tbody>${i}</tbody>`),`<table>
435 +<thead>
436 +`+r+`</thead>
437 +`+i+`</table>
438 +`}tablerow({text:e}){return`<tr>
439 +${e}</tr>
440 +`}tablecell(e){let r=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+r+`</${n}>
441 +`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${pc(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:r,tokens:n}){let i=this.parser.parseInline(n),a=Fj(e);if(a===null)return i;e=a;let s='<a href="'+e+'"';return r&&(s+=' title="'+pc(r)+'"'),s+=">"+i+"</a>",s}image({href:e,title:r,text:n}){let i=Fj(e);if(i===null)return pc(n);e=i;let a=`<img src="${e}" alt="${n}"`;return r&&(a+=` title="${pc(r)}"`),a+=">",a}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:pc(e.text)}},p2=class{static{o(this,"_TextRenderer")}strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}},_l=class t{static{o(this,"_Parser")}options;renderer;textRenderer;constructor(e){this.options=e||Id,this.options.renderer=this.options.renderer||new fm,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new p2}static parse(e,r){return new t(r).parse(e)}static parseInline(e,r){return new t(r).parseInline(e)}parse(e,r=!0){let n="";for(let i=0;i<e.length;i++){let a=e[i];if(this.options.extensions?.renderers?.[a.type]){let l=a,u=this.options.extensions.renderers[l.type].call({parser:this},l);if(u!==!1||!["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(l.type)){n+=u||"";continue}}let s=a;switch(s.type){case"space":{n+=this.renderer.space(s);continue}case"hr":{n+=this.renderer.hr(s);continue}case"heading":{n+=this.renderer.heading(s);continue}case"code":{n+=this.renderer.code(s);continue}case"table":{n+=this.renderer.table(s);continue}case"blockquote":{n+=this.renderer.blockquote(s);continue}case"list":{n+=this.renderer.list(s);continue}case"html":{n+=this.renderer.html(s);continue}case"paragraph":{n+=this.renderer.paragraph(s);continue}case"text":{let l=s,u=this.renderer.text(l);for(;i+1<e.length&&e[i+1].type==="text";)l=e[++i],u+=`
442 +`+this.renderer.text(l);r?n+=this.renderer.paragraph({type:"paragraph",raw:u,text:u,tokens:[{type:"text",raw:u,text:u,escaped:!0}]}):n+=u;continue}default:{let l='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(l),"";throw new Error(l)}}}return n}parseInline(e,r=this.renderer){let n="";for(let i=0;i<e.length;i++){let a=e[i];if(this.options.extensions?.renderers?.[a.type]){let l=this.options.extensions.renderers[a.type].call({parser:this},a);if(l!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(a.type)){n+=l||"";continue}}let s=a;switch(s.type){case"escape":{n+=r.text(s);break}case"html":{n+=r.html(s);break}case"link":{n+=r.link(s);break}case"image":{n+=r.image(s);break}case"strong":{n+=r.strong(s);break}case"em":{n+=r.em(s);break}case"codespan":{n+=r.codespan(s);break}case"br":{n+=r.br(s);break}case"del":{n+=r.del(s);break}case"text":{n+=r.text(s);break}default:{let l='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(l),"";throw new Error(l)}}}return n}},um=class{static{o(this,"_Hooks")}options;block;constructor(e){this.options=e||Id}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}provideLexer(){return this.block?Al.lex:Al.lexInline}provideParser(){return this.block?_l.parse:_l.parseInline}},yD=class{static{o(this,"Marked")}defaults=vD();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=_l;Renderer=fm;TextRenderer=p2;Lexer=Al;Tokenizer=hm;Hooks=um;constructor(...e){this.use(...e)}walkTokens(e,r){let n=[];for(let i of e)switch(n=n.concat(r.call(this,i)),i.type){case"table":{let a=i;for(let s of a.header)n=n.concat(this.walkTokens(s.tokens,r));for(let s of a.rows)for(let l of s)n=n.concat(this.walkTokens(l.tokens,r));break}case"list":{let a=i;n=n.concat(this.walkTokens(a.items,r));break}default:{let a=i;this.defaults.extensions?.childTokens?.[a.type]?this.defaults.extensions.childTokens[a.type].forEach(s=>{let l=a[s].flat(1/0);n=n.concat(this.walkTokens(l,r))}):a.tokens&&(n=n.concat(this.walkTokens(a.tokens,r)))}}return n}use(...e){let r=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let i={...n};if(i.async=this.defaults.async||i.async||!1,n.extensions&&(n.extensions.forEach(a=>{if(!a.name)throw new Error("extension name required");if("renderer"in a){let s=r.renderers[a.name];s?r.renderers[a.name]=function(...l){let u=a.renderer.apply(this,l);return u===!1&&(u=s.apply(this,l)),u}:r.renderers[a.name]=a.renderer}if("tokenizer"in a){if(!a.level||a.level!=="block"&&a.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let s=r[a.level];s?s.unshift(a.tokenizer):r[a.level]=[a.tokenizer],a.start&&(a.level==="block"?r.startBlock?r.startBlock.push(a.start):r.startBlock=[a.start]:a.level==="inline"&&(r.startInline?r.startInline.push(a.start):r.startInline=[a.start]))}"childTokens"in a&&a.childTokens&&(r.childTokens[a.name]=a.childTokens)}),i.extensions=r),n.renderer){let a=this.defaults.renderer||new fm(this.defaults);for(let s in n.renderer){if(!(s in a))throw new Error(`renderer '${s}' does not exist`);if(["options","parser"].includes(s))continue;let l=s,u=n.renderer[l],h=a[l];a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d||""}}i.renderer=a}if(n.tokenizer){let a=this.defaults.tokenizer||new hm(this.defaults);for(let s in n.tokenizer){if(!(s in a))throw new Error(`tokenizer '${s}' does not exist`);if(["options","rules","lexer"].includes(s))continue;let l=s,u=n.tokenizer[l],h=a[l];a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d}}i.tokenizer=a}if(n.hooks){let a=this.defaults.hooks||new um;for(let s in n.hooks){if(!(s in a))throw new Error(`hook '${s}' does not exist`);if(["options","block"].includes(s))continue;let l=s,u=n.hooks[l],h=a[l];um.passThroughHooks.has(s)?a[l]=f=>{if(this.defaults.async)return Promise.resolve(u.call(a,f)).then(p=>h.call(a,p));let d=u.call(a,f);return h.call(a,d)}:a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d}}i.hooks=a}if(n.walkTokens){let a=this.defaults.walkTokens,s=n.walkTokens;i.walkTokens=function(l){let u=[];return u.push(s.call(this,l)),a&&(u=u.concat(a.call(this,l))),u}}this.defaults={...this.defaults,...i}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,r){return Al.lex(e,r??this.defaults)}parser(e,r){return _l.parse(e,r??this.defaults)}parseMarkdown(e){return o((n,i)=>{let a={...i},s={...this.defaults,...a},l=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&a.async===!1)return l(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof n>"u"||n===null)return l(new Error("marked(): input parameter is undefined or null"));if(typeof n!="string")return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));s.hooks&&(s.hooks.options=s,s.hooks.block=e);let u=s.hooks?s.hooks.provideLexer():e?Al.lex:Al.lexInline,h=s.hooks?s.hooks.provideParser():e?_l.parse:_l.parseInline;if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then(f=>u(f,s)).then(f=>s.hooks?s.hooks.processAllTokens(f):f).then(f=>s.walkTokens?Promise.all(this.walkTokens(f,s.walkTokens)).then(()=>f):f).then(f=>h(f,s)).then(f=>s.hooks?s.hooks.postprocess(f):f).catch(l);try{s.hooks&&(n=s.hooks.preprocess(n));let f=u(n,s);s.hooks&&(f=s.hooks.processAllTokens(f)),s.walkTokens&&this.walkTokens(f,s.walkTokens);let d=h(f,s);return s.hooks&&(d=s.hooks.postprocess(d)),d}catch(f){return l(f)}},"parse")}onError(e,r){return n=>{if(n.message+=`
443 +Please report this to https://github.com/markedjs/marked.`,e){let i="<p>An error occurred:</p><pre>"+pc(n.message+"",!0)+"</pre>";return r?Promise.resolve(i):i}if(r)return Promise.reject(n);throw n}}},Md=new yD;o(Jr,"marked");Jr.options=Jr.setOptions=function(t){return Md.setOptions(t),Jr.defaults=Md.defaults,Gj(Jr.defaults),Jr};Jr.getDefaults=vD;Jr.defaults=Id;Jr.use=function(...t){return Md.use(...t),Jr.defaults=Md.defaults,Gj(Jr.defaults),Jr};Jr.walkTokens=function(t,e){return Md.walkTokens(t,e)};Jr.parseInline=Md.parseInline;Jr.Parser=_l;Jr.parser=_l.parse;Jr.Renderer=fm;Jr.TextRenderer=p2;Jr.Lexer=Al;Jr.lexer=Al.lex;Jr.Tokenizer=hm;Jr.Hooks=um;Jr.parse=Jr;dkt=Jr.options,pkt=Jr.setOptions,mkt=Jr.use,gkt=Jr.walkTokens,ykt=Jr.parseInline,vkt=_l.parse,xkt=Al.lex});function G8e(t,{markdownAutoWrap:e}){let n=t.replace(/<br\/>/g,`
444 +`).replace(/\n{2,}/g,`
445 +`),i=B4(n);return e===!1?i.replace(/ /g,"&nbsp;"):i}function Jj(t,e={}){let r=G8e(t,e),n=Jr.lexer(r),i=[[]],a=0;function s(l,u="normal"){l.type==="text"?l.text.split(`
446 +`).forEach((f,d)=>{d!==0&&(a++,i.push([])),f.split(" ").forEach(p=>{p=p.replace(/&#39;/g,"'"),p&&i[a].push({content:p,type:u})})}):l.type==="strong"||l.type==="em"?l.tokens.forEach(h=>{s(h,l.type)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}return o(s,"processNode"),n.forEach(l=>{l.type==="paragraph"?l.tokens?.forEach(u=>{s(u)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}),i}function eK(t,{markdownAutoWrap:e}={}){let r=Jr.lexer(t);function n(i){return i.type==="text"?e===!1?i.text.replace(/\n */g,"<br/>").replace(/ /g,"&nbsp;"):i.text.replace(/\n */g,"<br/>"):i.type==="strong"?`<strong>${i.tokens?.map(n).join("")}</strong>`:i.type==="em"?`<em>${i.tokens?.map(n).join("")}</em>`:i.type==="paragraph"?`<p>${i.tokens?.map(n).join("")}</p>`:i.type==="space"?"":i.type==="html"?`${i.text}`:i.type==="escape"?i.text:`Unsupported markdown: ${i.type}`}return o(n,"output"),r.map(n).join("")}var tK=N(()=>{"use strict";Zj();PC();o(G8e,"preprocessMarkdown");o(Jj,"markdownToLines");o(eK,"markdownToHTML")});function V8e(t){return Intl.Segmenter?[...new Intl.Segmenter().segment(t)].map(e=>e.segment):[...t]}function U8e(t,e){let r=V8e(e.content);return rK(t,[],r,e.type)}function rK(t,e,r,n){if(r.length===0)return[{content:e.join(""),type:n},{content:"",type:n}];let[i,...a]=r,s=[...e,i];return t([{content:s.join(""),type:n}])?rK(t,s,a,n):(e.length===0&&i&&(e.push(i),r.shift()),[{content:e.join(""),type:n},{content:r.join(""),type:n}])}function nK(t,e){if(t.some(({content:r})=>r.includes(`
447 +`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return CD(t,e)}function CD(t,e,r=[],n=[]){if(t.length===0)return n.length>0&&r.push(n),r.length>0?r:[];let i="";t[0].content===" "&&(i=" ",t.shift());let a=t.shift()??{content:" ",type:"normal"},s=[...n];if(i!==""&&s.push({content:i,type:"normal"}),s.push(a),e(s))return CD(t,e,r,s);if(n.length>0)r.push(n),t.unshift(a);else if(a.content){let[l,u]=U8e(e,a);r.push([l]),u.content&&t.unshift(u)}return CD(t,e,r)}var iK=N(()=>{"use strict";o(V8e,"splitTextToChars");o(U8e,"splitWordToFitWidth");o(rK,"splitWordToFitWidthRecursion");o(nK,"splitLineToFitWidth");o(CD,"splitLineToFitWidthRecursion")});function aK(t,e){e&&t.attr("style",e)}async function H8e(t,e,r,n,i=!1){let a=t.append("foreignObject");a.attr("width",`${10*r}px`),a.attr("height",`${10*r}px`);let s=a.append("xhtml:div"),l=e.label;e.label&&pi(e.label)&&(l=await mh(e.label.replace(Ze.lineBreakRegex,`
448 +`),me()));let u=e.isNode?"nodeLabel":"edgeLabel",h=s.append("span");h.html(l),aK(h,e.labelStyle),h.attr("class",`${u} ${n}`),aK(s,e.labelStyle),s.style("display","table-cell"),s.style("white-space","nowrap"),s.style("line-height","1.5"),s.style("max-width",r+"px"),s.style("text-align","center"),s.attr("xmlns","http://www.w3.org/1999/xhtml"),i&&s.attr("class","labelBkg");let f=s.node().getBoundingClientRect();return f.width===r&&(s.style("display","table"),s.style("white-space","break-spaces"),s.style("width",r+"px"),f=s.node().getBoundingClientRect()),a.node()}function AD(t,e,r){return t.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",e*r-.1+"em").attr("dy",r+"em")}function W8e(t,e,r){let n=t.append("text"),i=AD(n,1,e);_D(i,r);let a=i.node().getComputedTextLength();return n.remove(),a}function sK(t,e,r){let n=t.append("text"),i=AD(n,1,e);_D(i,[{content:r,type:"normal"}]);let a=i.node()?.getBoundingClientRect();return a&&n.remove(),a}function q8e(t,e,r,n=!1){let a=e.append("g"),s=a.insert("rect").attr("class","background").attr("style","stroke: none"),l=a.append("text").attr("y","-10.1"),u=0;for(let h of r){let f=o(p=>W8e(a,1.1,p)<=t,"checkWidth"),d=f(h)?[h]:nK(h,f);for(let p of d){let m=AD(l,u,1.1);_D(m,p),u++}}if(n){let h=l.node().getBBox(),f=2;return s.attr("x",h.x-f).attr("y",h.y-f).attr("width",h.width+2*f).attr("height",h.height+2*f),a.node()}else return l.node()}function _D(t,e){t.text(""),e.forEach((r,n)=>{let i=t.append("tspan").attr("font-style",r.type==="em"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",r.type==="strong"?"bold":"normal");n===0?i.text(r.content):i.text(" "+r.content)})}function DD(t){return t.replace(/fa[bklrs]?:fa-[\w-]+/g,e=>`<i class='${e.replace(":"," ")}'></i>`)}var Hn,to=N(()=>{"use strict";zt();gr();dr();vt();tK();ir();iK();o(aK,"applyStyle");o(H8e,"addHtmlSpan");o(AD,"createTspan");o(W8e,"computeWidthOfText");o(sK,"computeDimensionOfText");o(q8e,"createFormattedText");o(_D,"updateTextContentAndStyles");o(DD,"replaceIconSubstring");Hn=o(async(t,e="",{style:r="",isTitle:n=!1,classes:i="",useHtmlLabels:a=!0,isNode:s=!0,width:l=200,addSvgBackground:u=!1}={},h)=>{if(Y.debug("XYZ createText",e,r,n,i,a,s,"addSvgBackground: ",u),a){let f=eK(e,h),d=DD(na(f)),p=e.replace(/\\\\/g,"\\"),m={isNode:s,label:pi(e)?p:d,labelStyle:r.replace("fill:","color:")};return await H8e(t,m,l,i,u)}else{let f=e.replace(/<br\s*\/?>/g,"<br/>"),d=Jj(f.replace("<br>","<br/>"),h),p=q8e(l,t,d,e?u:!1);if(s){/stroke:/.exec(r)&&(r=r.replace("stroke:","lineColor:"));let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ge(p).attr("style",m)}else{let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/background:/g,"fill:");Ge(p).select("rect").attr("style",m.replace(/background:/g,"fill:"));let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ge(p).select("text").attr("style",g)}return p}},"createText")});function Xt(t){let e=t.map((r,n)=>`${n===0?"M":"L"}${r.x},${r.y}`);return e.push("Z"),e.join(" ")}function Fo(t,e,r,n,i,a){let s=[],u=r-t,h=n-e,f=u/a,d=2*Math.PI/f,p=e+h/2;for(let m=0;m<=50;m++){let g=m/50,y=t+g*u,v=p+i*Math.sin(d*(y-t));s.push({x:y,y:v})}return s}function Lw(t,e,r,n,i,a){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d<n;d++){let p=l+d*f,m=t+r*Math.cos(p),g=e+r*Math.sin(p);s.push({x:-m,y:-g})}return s}var pt,Dw,je,ht,Ft=N(()=>{"use strict";to();zt();dr();Ya();gr();ir();pt=o(async(t,e,r)=>{let n,i=e.useHtmlLabels||fr(me()?.htmlLabels);r?n=r:n="node default";let a=t.insert("g").attr("class",n).attr("id",e.domId||e.id),s=a.insert("g").attr("class","label").attr("style",$n(e.labelStyle)),l;e.label===void 0?l="":l=typeof e.label=="string"?e.label:e.label[0];let u=await Hn(s,Tr(na(l),me()),{useHtmlLabels:i,width:e.width||me().flowchart?.wrappingWidth,cssClasses:"markdown-node-label",style:e.labelStyle,addSvgBackground:!!e.icon||!!e.img}),h=u.getBBox(),f=(e?.padding??0)/2;if(i){let d=u.children[0],p=Ge(u),m=d.getElementsByTagName("img");if(m){let g=l.replace(/<img[^>]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=me().fontSize?me().fontSize:window.getComputedStyle(document.body).fontSize,w=5,[C=or.fontSize]=Bo(b),T=C*w+"px";y.style.minWidth=T,y.style.maxWidth=T}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}return i?s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"):s.attr("transform","translate(0, "+-h.height/2+")"),e.centerLabel&&s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),s.insert("rect",":first-child"),{shapeSvg:a,bbox:h,halfPadding:f,label:s}},"labelHelper"),Dw=o(async(t,e,r)=>{let n=r.useHtmlLabels||fr(me()?.flowchart?.htmlLabels),i=t.insert("g").attr("class","label").attr("style",r.labelStyle||""),a=await Hn(i,Tr(na(e),me()),{useHtmlLabels:n,width:r.width||me()?.flowchart?.wrappingWidth,style:r.labelStyle,addSvgBackground:!!r.icon||!!r.img}),s=a.getBBox(),l=r.padding/2;if(fr(me()?.flowchart?.htmlLabels)){let u=a.children[0],h=Ge(a);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}return n?i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"):i.attr("transform","translate(0, "+-s.height/2+")"),r.centerLabel&&i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),i.insert("rect",":first-child"),{shapeSvg:t,bbox:s,halfPadding:l,label:i}},"insertLabel"),je=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds"),ht=o((t,e)=>(t.look==="handDrawn"?"rough-node":"node")+" "+t.cssClasses+" "+(e||""),"getNodeClasses");o(Xt,"createPathFromPoints");o(Fo,"generateFullSineWavePoints");o(Lw,"generateCirclePoints")});function Y8e(t,e){return t.intersect(e)}var oK,lK=N(()=>{"use strict";o(Y8e,"intersectNode");oK=Y8e});function X8e(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x<i&&(h=-h);var f=Math.abs(e*r*l/u);return n.y<a&&(f=-f),{x:i+h,y:a+f}}var Rw,LD=N(()=>{"use strict";o(X8e,"intersectEllipse");Rw=X8e});function j8e(t,e,r){return Rw(t,e,e,r)}var cK,uK=N(()=>{"use strict";LD();o(j8e,"intersectCircle");cK=j8e});function K8e(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&hK(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&hK(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function hK(t,e){return t*e>0}var fK,dK=N(()=>{"use strict";o(K8e,"intersectLine");o(hK,"sameSign");fK=K8e});function Q8e(t,e,r){let n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(f){s=Math.min(s,f.x),l=Math.min(l,f.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));let u=n-t.width/2-s,h=i-t.height/2-l;for(let f=0;f<e.length;f++){let d=e[f],p=e[f<e.length-1?f+1:0],m=fK(t,r,{x:u+d.x,y:h+d.y},{x:u+p.x,y:h+p.y});m&&a.push(m)}return a.length?(a.length>1&&a.sort(function(f,d){let p=f.x-r.x,m=f.y-r.y,g=Math.sqrt(p*p+m*m),y=d.x-r.x,v=d.y-r.y,x=Math.sqrt(y*y+v*v);return g<x?-1:g===x?0:1}),a[0]):t}var pK,mK=N(()=>{"use strict";dK();o(Q8e,"intersectPolygon");pK=Q8e});var Z8e,Vh,RD=N(()=>{"use strict";Z8e=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),Vh=Z8e});var Ye,Ht=N(()=>{"use strict";lK();uK();LD();mK();RD();Ye={node:oK,circle:cK,ellipse:Rw,polygon:pK,rect:Vh}});var gK,mc,J8e,ND,Qe,Ke,Ut=N(()=>{"use strict";zt();gK=o(t=>{let{handDrawnSeed:e}=me();return{fill:t,hachureAngle:120,hachureGap:4,fillWeight:2,roughness:.7,stroke:t,seed:e}},"solidStateFill"),mc=o(t=>{let e=J8e([...t.cssCompiledStyles||[],...t.cssStyles||[]]);return{stylesMap:e,stylesArray:[...e]}},"compileStyles"),J8e=o(t=>{let e=new Map;return t.forEach(r=>{let[n,i]=r.split(":");e.set(n.trim(),i?.trim())}),e},"styles2Map"),ND=o(t=>t==="color"||t==="font-size"||t==="font-family"||t==="font-weight"||t==="font-style"||t==="text-decoration"||t==="text-align"||t==="text-transform"||t==="line-height"||t==="letter-spacing"||t==="word-spacing"||t==="text-shadow"||t==="text-overflow"||t==="white-space"||t==="word-wrap"||t==="word-break"||t==="overflow-wrap"||t==="hyphens","isLabelStyle"),Qe=o(t=>{let{stylesArray:e}=mc(t),r=[],n=[],i=[],a=[];return e.forEach(s=>{let l=s[0];ND(l)?r.push(s.join(":")+" !important"):(n.push(s.join(":")+" !important"),l.includes("stroke")&&i.push(s.join(":")+" !important"),l==="fill"&&a.push(s.join(":")+" !important"))}),{labelStyles:r.join(";"),nodeStyles:n.join(";"),stylesArray:e,borderStyles:i,backgroundStyles:a}},"styles2String"),Ke=o((t,e)=>{let{themeVariables:r,handDrawnSeed:n}=me(),{nodeBorder:i,mainBkg:a}=r,{stylesMap:s}=mc(t);return Object.assign({roughness:.7,fill:s.get("fill")||a,fillStyle:"hachure",fillWeight:4,hachureGap:5.2,stroke:s.get("stroke")||i,seed:n,strokeWidth:s.get("stroke-width")?.replace("px","")||1.3,fillLineDash:[0,0]},e)},"userNodeOverrides")});function MD(t,e,r){if(t&&t.length){let[n,i]=e,a=Math.PI/180*r,s=Math.cos(a),l=Math.sin(a);for(let u of t){let[h,f]=u;u[0]=(h-n)*s-(f-i)*l+n,u[1]=(h-n)*l+(f-i)*s+i}}}function e_e(t,e){return t[0]===e[0]&&t[1]===e[1]}function t_e(t,e,r,n=1){let i=r,a=Math.max(e,.1),s=t[0]&&t[0][0]&&typeof t[0][0]=="number"?[t]:t,l=[0,0];if(i)for(let h of s)MD(h,l,i);let u=function(h,f,d){let p=[];for(let b of h){let w=[...b];e_e(w[0],w[w.length-1])||w.push([w[0][0],w[0][1]]),w.length>2&&p.push(w)}let m=[];f=Math.max(f,.1);let g=[];for(let b of p)for(let w=0;w<b.length-1;w++){let C=b[w],T=b[w+1];if(C[1]!==T[1]){let E=Math.min(C[1],T[1]);g.push({ymin:E,ymax:Math.max(C[1],T[1]),x:E===C[1]?C[0]:T[0],islope:(T[0]-C[0])/(T[1]-C[1])})}}if(g.sort((b,w)=>b.ymin<w.ymin?-1:b.ymin>w.ymin?1:b.x<w.x?-1:b.x>w.x?1:b.ymax===w.ymax?0:(b.ymax-w.ymax)/Math.abs(b.ymax-w.ymax)),!g.length)return m;let y=[],v=g[0].ymin,x=0;for(;y.length||g.length;){if(g.length){let b=-1;for(let w=0;w<g.length&&!(g[w].ymin>v);w++)b=w;g.splice(0,b+1).forEach(w=>{y.push({s:v,edge:w})})}if(y=y.filter(b=>!(b.edge.ymax<=v)),y.sort((b,w)=>b.edge.x===w.edge.x?0:(b.edge.x-w.edge.x)/Math.abs(b.edge.x-w.edge.x)),(d!==1||x%f==0)&&y.length>1)for(let b=0;b<y.length;b+=2){let w=b+1;if(w>=y.length)break;let C=y[b].edge,T=y[w].edge;m.push([[Math.round(C.x),v],[Math.round(T.x),v]])}v+=d,y.forEach(b=>{b.edge.x=b.edge.x+d*b.edge.islope}),x++}return m}(s,a,n);if(i){for(let h of s)MD(h,l,-i);(function(h,f,d){let p=[];h.forEach(m=>p.push(...m)),MD(p,f,d)})(u,l,-i)}return u}function x2(t,e){var r;let n=e.hachureAngle+90,i=e.hachureGap;i<0&&(i=4*e.strokeWidth),i=Math.round(Math.max(i,.1));let a=1;return e.roughness>=1&&(((r=e.randomizer)===null||r===void 0?void 0:r.next())||Math.random())>.7&&(a=i),t_e(t,i,n,a||1)}function zw(t){let e=t[0],r=t[1];return Math.sqrt(Math.pow(e[0]-r[0],2)+Math.pow(e[1]-r[1],2))}function OD(t,e){return t.type===e}function jD(t){let e=[],r=function(s){let l=new Array;for(;s!=="";)if(s.match(/^([ \t\r\n,]+)/))s=s.substr(RegExp.$1.length);else if(s.match(/^([aAcChHlLmMqQsStTvVzZ])/))l[l.length]={type:r_e,text:RegExp.$1},s=s.substr(RegExp.$1.length);else{if(!s.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))return[];l[l.length]={type:ID,text:`${parseFloat(RegExp.$1)}`},s=s.substr(RegExp.$1.length)}return l[l.length]={type:yK,text:""},l}(t),n="BOD",i=0,a=r[i];for(;!OD(a,yK);){let s=0,l=[];if(n==="BOD"){if(a.text!=="M"&&a.text!=="m")return jD("M0,0"+t);i++,s=Nw[a.text],n=a.text}else OD(a,ID)?s=Nw[n]:(i++,s=Nw[a.text],n=a.text);if(!(i+s<r.length))throw new Error("Path data ended short");for(let u=i;u<i+s;u++){let h=r[u];if(!OD(h,ID))throw new Error("Param not a number: "+n+","+h.text);l[l.length]=+h.text}if(typeof Nw[n]!="number")throw new Error("Bad segment: "+n);{let u={key:n,data:l};e.push(u),i+=s,a=r[i],n==="M"&&(n="L"),n==="m"&&(n="l")}}return e}function SK(t){let e=0,r=0,n=0,i=0,a=[];for(let{key:s,data:l}of t)switch(s){case"M":a.push({key:"M",data:[...l]}),[e,r]=l,[n,i]=l;break;case"m":e+=l[0],r+=l[1],a.push({key:"M",data:[e,r]}),n=e,i=r;break;case"L":a.push({key:"L",data:[...l]}),[e,r]=l;break;case"l":e+=l[0],r+=l[1],a.push({key:"L",data:[e,r]});break;case"C":a.push({key:"C",data:[...l]}),e=l[4],r=l[5];break;case"c":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"C",data:u}),e=u[4],r=u[5];break}case"Q":a.push({key:"Q",data:[...l]}),e=l[2],r=l[3];break;case"q":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"Q",data:u}),e=u[2],r=u[3];break}case"A":a.push({key:"A",data:[...l]}),e=l[5],r=l[6];break;case"a":e+=l[5],r+=l[6],a.push({key:"A",data:[l[0],l[1],l[2],l[3],l[4],e,r]});break;case"H":a.push({key:"H",data:[...l]}),e=l[0];break;case"h":e+=l[0],a.push({key:"H",data:[e]});break;case"V":a.push({key:"V",data:[...l]}),r=l[0];break;case"v":r+=l[0],a.push({key:"V",data:[r]});break;case"S":a.push({key:"S",data:[...l]}),e=l[2],r=l[3];break;case"s":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"S",data:u}),e=u[2],r=u[3];break}case"T":a.push({key:"T",data:[...l]}),e=l[0],r=l[1];break;case"t":e+=l[0],r+=l[1],a.push({key:"T",data:[e,r]});break;case"Z":case"z":a.push({key:"Z",data:[]}),e=n,r=i}return a}function CK(t){let e=[],r="",n=0,i=0,a=0,s=0,l=0,u=0;for(let{key:h,data:f}of t){switch(h){case"M":e.push({key:"M",data:[...f]}),[n,i]=f,[a,s]=f;break;case"C":e.push({key:"C",data:[...f]}),n=f[4],i=f[5],l=f[2],u=f[3];break;case"L":e.push({key:"L",data:[...f]}),[n,i]=f;break;case"H":n=f[0],e.push({key:"L",data:[n,i]});break;case"V":i=f[0],e.push({key:"L",data:[n,i]});break;case"S":{let d=0,p=0;r==="C"||r==="S"?(d=n+(n-l),p=i+(i-u)):(d=n,p=i),e.push({key:"C",data:[d,p,...f]}),l=f[0],u=f[1],n=f[2],i=f[3];break}case"T":{let[d,p]=f,m=0,g=0;r==="Q"||r==="T"?(m=n+(n-l),g=i+(i-u)):(m=n,g=i);let y=n+2*(m-n)/3,v=i+2*(g-i)/3,x=d+2*(m-d)/3,b=p+2*(g-p)/3;e.push({key:"C",data:[y,v,x,b,d,p]}),l=m,u=g,n=d,i=p;break}case"Q":{let[d,p,m,g]=f,y=n+2*(d-n)/3,v=i+2*(p-i)/3,x=m+2*(d-m)/3,b=g+2*(p-g)/3;e.push({key:"C",data:[y,v,x,b,m,g]}),l=d,u=p,n=m,i=g;break}case"A":{let d=Math.abs(f[0]),p=Math.abs(f[1]),m=f[2],g=f[3],y=f[4],v=f[5],x=f[6];d===0||p===0?(e.push({key:"C",data:[n,i,v,x,v,x]}),n=v,i=x):(n!==v||i!==x)&&(AK(n,i,v,x,d,p,m,g,y).forEach(function(b){e.push({key:"C",data:b})}),n=v,i=x);break}case"Z":e.push({key:"Z",data:[]}),n=a,i=s}r=h}return e}function g2(t,e,r){return[t*Math.cos(r)-e*Math.sin(r),t*Math.sin(r)+e*Math.cos(r)]}function AK(t,e,r,n,i,a,s,l,u,h){let f=(d=s,Math.PI*d/180);var d;let p=[],m=0,g=0,y=0,v=0;if(h)[m,g,y,v]=h;else{[t,e]=g2(t,e,-f),[r,n]=g2(r,n,-f);let L=(t-r)/2,R=(e-n)/2,O=L*L/(i*i)+R*R/(a*a);O>1&&(O=Math.sqrt(O),i*=O,a*=O);let M=i*i,B=a*a,F=M*B-M*R*R-B*L*L,P=M*R*R+B*L*L,z=(l===u?-1:1)*Math.sqrt(Math.abs(F/P));y=z*i*R/a+(t+r)/2,v=z*-a*L/i+(e+n)/2,m=Math.asin(parseFloat(((e-v)/a).toFixed(9))),g=Math.asin(parseFloat(((n-v)/a).toFixed(9))),t<y&&(m=Math.PI-m),r<y&&(g=Math.PI-g),m<0&&(m=2*Math.PI+m),g<0&&(g=2*Math.PI+g),u&&m>g&&(m-=2*Math.PI),!u&&g>m&&(g-=2*Math.PI)}let x=g-m;if(Math.abs(x)>120*Math.PI/180){let L=g,R=r,O=n;g=u&&g>m?m+120*Math.PI/180*1:m+120*Math.PI/180*-1,p=AK(r=y+i*Math.cos(g),n=v+a*Math.sin(g),R,O,i,a,s,0,u,[g,L,y,v])}x=g-m;let b=Math.cos(m),w=Math.sin(m),C=Math.cos(g),T=Math.sin(g),E=Math.tan(x/4),A=4/3*i*E,S=4/3*a*E,_=[t,e],I=[t+A*w,e-S*b],D=[r+A*T,n-S*C],k=[r,n];if(I[0]=2*_[0]-I[0],I[1]=2*_[1]-I[1],h)return[I,D,k].concat(p);{p=[I,D,k].concat(p);let L=[];for(let R=0;R<p.length;R+=3){let O=g2(p[R][0],p[R][1],f),M=g2(p[R+1][0],p[R+1][1],f),B=g2(p[R+2][0],p[R+2][1],f);L.push([O[0],O[1],M[0],M[1],B[0],B[1]])}return L}}function _K(t,e,r,n,i){return{type:"path",ops:Uh(t,e,r,n,i)}}function Ow(t,e,r){let n=(t||[]).length;if(n>2){let i=[];for(let a=0;a<n-1;a++)i.push(...Uh(t[a][0],t[a][1],t[a+1][0],t[a+1][1],r));return e&&i.push(...Uh(t[n-1][0],t[n-1][1],t[0][0],t[0][1],r)),{type:"path",ops:i}}return n===2?_K(t[0][0],t[0][1],t[1][0],t[1][1],r):{type:"path",ops:[]}}function i_e(t,e,r,n,i){return function(a,s){return Ow(a,!0,s)}([[t,e],[t+r,e],[t+r,e+n],[t,e+n]],i)}function vK(t,e){if(t.length){let r=typeof t[0][0]=="number"?[t]:t,n=Mw(r[0],1*(1+.2*e.roughness),e),i=e.disableMultiStroke?[]:Mw(r[0],1.5*(1+.22*e.roughness),wK(e));for(let a=1;a<r.length;a++){let s=r[a];if(s.length){let l=Mw(s,1*(1+.2*e.roughness),e),u=e.disableMultiStroke?[]:Mw(s,1.5*(1+.22*e.roughness),wK(e));for(let h of l)h.op!=="move"&&n.push(h);for(let h of u)h.op!=="move"&&i.push(h)}}return{type:"path",ops:n.concat(i)}}return{type:"path",ops:[]}}function DK(t,e,r){let n=Math.sqrt(2*Math.PI*Math.sqrt((Math.pow(t/2,2)+Math.pow(e/2,2))/2)),i=Math.ceil(Math.max(r.curveStepCount,r.curveStepCount/Math.sqrt(200)*n)),a=2*Math.PI/i,s=Math.abs(t/2),l=Math.abs(e/2),u=1-r.curveFitting;return s+=nr(s*u,r),l+=nr(l*u,r),{increment:a,rx:s,ry:l}}function HD(t,e,r,n){let[i,a]=TK(n.increment,t,e,n.rx,n.ry,1,n.increment*Bw(.1,Bw(.4,1,r),r),r),s=Fw(i,null,r);if(!r.disableMultiStroke&&r.roughness!==0){let[l]=TK(n.increment,t,e,n.rx,n.ry,1.5,0,r),u=Fw(l,null,r);s=s.concat(u)}return{estimatedPoints:a,opset:{type:"path",ops:s}}}function xK(t,e,r,n,i,a,s,l,u){let h=t,f=e,d=Math.abs(r/2),p=Math.abs(n/2);d+=nr(.01*d,u),p+=nr(.01*p,u);let m=i,g=a;for(;m<0;)m+=2*Math.PI,g+=2*Math.PI;g-m>2*Math.PI&&(m=0,g=2*Math.PI);let y=2*Math.PI/u.curveStepCount,v=Math.min(y/2,(g-m)/2),x=kK(v,h,f,d,p,m,g,1,u);if(!u.disableMultiStroke){let b=kK(v,h,f,d,p,m,g,1.5,u);x.push(...b)}return s&&(l?x.push(...Uh(h,f,h+d*Math.cos(m),f+p*Math.sin(m),u),...Uh(h,f,h+d*Math.cos(g),f+p*Math.sin(g),u)):x.push({op:"lineTo",data:[h,f]},{op:"lineTo",data:[h+d*Math.cos(m),f+p*Math.sin(m)]})),{type:"path",ops:x}}function bK(t,e){let r=CK(SK(jD(t))),n=[],i=[0,0],a=[0,0];for(let{key:s,data:l}of r)switch(s){case"M":a=[l[0],l[1]],i=[l[0],l[1]];break;case"L":n.push(...Uh(a[0],a[1],l[0],l[1],e)),a=[l[0],l[1]];break;case"C":{let[u,h,f,d,p,m]=l;n.push(...a_e(u,h,f,d,p,m,a,e)),a=[p,m];break}case"Z":n.push(...Uh(a[0],a[1],i[0],i[1],e)),a=[i[0],i[1]]}return{type:"path",ops:n}}function PD(t,e){let r=[];for(let n of t)if(n.length){let i=e.maxRandomnessOffset||0,a=n.length;if(a>2){r.push({op:"move",data:[n[0][0]+nr(i,e),n[0][1]+nr(i,e)]});for(let s=1;s<a;s++)r.push({op:"lineTo",data:[n[s][0]+nr(i,e),n[s][1]+nr(i,e)]})}}return{type:"fillPath",ops:r}}function dm(t,e){return function(r,n){let i=r.fillStyle||"hachure";if(!Rs[i])switch(i){case"zigzag":Rs[i]||(Rs[i]=new FD(n));break;case"cross-hatch":Rs[i]||(Rs[i]=new $D(n));break;case"dots":Rs[i]||(Rs[i]=new zD(n));break;case"dashed":Rs[i]||(Rs[i]=new GD(n));break;case"zigzag-line":Rs[i]||(Rs[i]=new VD(n));break;default:i="hachure",Rs[i]||(Rs[i]=new v2(n))}return Rs[i]}(e,n_e).fillPolygons(t,e)}function wK(t){let e=Object.assign({},t);return e.randomizer=void 0,t.seed&&(e.seed=t.seed+1),e}function LK(t){return t.randomizer||(t.randomizer=new UD(t.seed||0)),t.randomizer.next()}function Bw(t,e,r,n=1){return r.roughness*n*(LK(r)*(e-t)+t)}function nr(t,e,r=1){return Bw(-t,t,e,r)}function Uh(t,e,r,n,i,a=!1){let s=a?i.disableMultiStrokeFill:i.disableMultiStroke,l=WD(t,e,r,n,i,!0,!1);if(s)return l;let u=WD(t,e,r,n,i,!0,!0);return l.concat(u)}function WD(t,e,r,n,i,a,s){let l=Math.pow(t-r,2)+Math.pow(e-n,2),u=Math.sqrt(l),h=1;h=u<200?1:u>500?.4:-.0016668*u+1.233334;let f=i.maxRandomnessOffset||0;f*f*100>l&&(f=u/10);let d=f/2,p=.2+.2*LK(i),m=i.bowing*i.maxRandomnessOffset*(n-e)/200,g=i.bowing*i.maxRandomnessOffset*(t-r)/200;m=nr(m,i,h),g=nr(g,i,h);let y=[],v=o(()=>nr(d,i,h),"M"),x=o(()=>nr(f,i,h),"k"),b=i.preserveVertices;return a&&(s?y.push({op:"move",data:[t+(b?0:v()),e+(b?0:v())]}):y.push({op:"move",data:[t+(b?0:nr(f,i,h)),e+(b?0:nr(f,i,h))]})),s?y.push({op:"bcurveTo",data:[m+t+(r-t)*p+v(),g+e+(n-e)*p+v(),m+t+2*(r-t)*p+v(),g+e+2*(n-e)*p+v(),r+(b?0:v()),n+(b?0:v())]}):y.push({op:"bcurveTo",data:[m+t+(r-t)*p+x(),g+e+(n-e)*p+x(),m+t+2*(r-t)*p+x(),g+e+2*(n-e)*p+x(),r+(b?0:x()),n+(b?0:x())]}),y}function Mw(t,e,r){if(!t.length)return[];let n=[];n.push([t[0][0]+nr(e,r),t[0][1]+nr(e,r)]),n.push([t[0][0]+nr(e,r),t[0][1]+nr(e,r)]);for(let i=1;i<t.length;i++)n.push([t[i][0]+nr(e,r),t[i][1]+nr(e,r)]),i===t.length-1&&n.push([t[i][0]+nr(e,r),t[i][1]+nr(e,r)]);return Fw(n,null,r)}function Fw(t,e,r){let n=t.length,i=[];if(n>3){let a=[],s=1-r.curveTightness;i.push({op:"move",data:[t[1][0],t[1][1]]});for(let l=1;l+2<n;l++){let u=t[l];a[0]=[u[0],u[1]],a[1]=[u[0]+(s*t[l+1][0]-s*t[l-1][0])/6,u[1]+(s*t[l+1][1]-s*t[l-1][1])/6],a[2]=[t[l+1][0]+(s*t[l][0]-s*t[l+2][0])/6,t[l+1][1]+(s*t[l][1]-s*t[l+2][1])/6],a[3]=[t[l+1][0],t[l+1][1]],i.push({op:"bcurveTo",data:[a[1][0],a[1][1],a[2][0],a[2][1],a[3][0],a[3][1]]})}if(e&&e.length===2){let l=r.maxRandomnessOffset;i.push({op:"lineTo",data:[e[0]+nr(l,r),e[1]+nr(l,r)]})}}else n===3?(i.push({op:"move",data:[t[1][0],t[1][1]]}),i.push({op:"bcurveTo",data:[t[1][0],t[1][1],t[2][0],t[2][1],t[2][0],t[2][1]]})):n===2&&i.push(...WD(t[0][0],t[0][1],t[1][0],t[1][1],r,!0,!0));return i}function TK(t,e,r,n,i,a,s,l){let u=[],h=[];if(l.roughness===0){t/=4,h.push([e+n*Math.cos(-t),r+i*Math.sin(-t)]);for(let f=0;f<=2*Math.PI;f+=t){let d=[e+n*Math.cos(f),r+i*Math.sin(f)];u.push(d),h.push(d)}h.push([e+n*Math.cos(0),r+i*Math.sin(0)]),h.push([e+n*Math.cos(t),r+i*Math.sin(t)])}else{let f=nr(.5,l)-Math.PI/2;h.push([nr(a,l)+e+.9*n*Math.cos(f-t),nr(a,l)+r+.9*i*Math.sin(f-t)]);let d=2*Math.PI+f-.01;for(let p=f;p<d;p+=t){let m=[nr(a,l)+e+n*Math.cos(p),nr(a,l)+r+i*Math.sin(p)];u.push(m),h.push(m)}h.push([nr(a,l)+e+n*Math.cos(f+2*Math.PI+.5*s),nr(a,l)+r+i*Math.sin(f+2*Math.PI+.5*s)]),h.push([nr(a,l)+e+.98*n*Math.cos(f+s),nr(a,l)+r+.98*i*Math.sin(f+s)]),h.push([nr(a,l)+e+.9*n*Math.cos(f+.5*s),nr(a,l)+r+.9*i*Math.sin(f+.5*s)])}return[h,u]}function kK(t,e,r,n,i,a,s,l,u){let h=a+nr(.1,u),f=[];f.push([nr(l,u)+e+.9*n*Math.cos(h-t),nr(l,u)+r+.9*i*Math.sin(h-t)]);for(let d=h;d<=s;d+=t)f.push([nr(l,u)+e+n*Math.cos(d),nr(l,u)+r+i*Math.sin(d)]);return f.push([e+n*Math.cos(s),r+i*Math.sin(s)]),f.push([e+n*Math.cos(s),r+i*Math.sin(s)]),Fw(f,null,u)}function a_e(t,e,r,n,i,a,s,l){let u=[],h=[l.maxRandomnessOffset||1,(l.maxRandomnessOffset||1)+.3],f=[0,0],d=l.disableMultiStroke?1:2,p=l.preserveVertices;for(let m=0;m<d;m++)m===0?u.push({op:"move",data:[s[0],s[1]]}):u.push({op:"move",data:[s[0]+(p?0:nr(h[0],l)),s[1]+(p?0:nr(h[0],l))]}),f=p?[i,a]:[i+nr(h[m],l),a+nr(h[m],l)],u.push({op:"bcurveTo",data:[t+nr(h[m],l),e+nr(h[m],l),r+nr(h[m],l),n+nr(h[m],l),f[0],f[1]]});return u}function y2(t){return[...t]}function EK(t,e=0){let r=t.length;if(r<3)throw new Error("A curve must have at least three points.");let n=[];if(r===3)n.push(y2(t[0]),y2(t[1]),y2(t[2]),y2(t[2]));else{let i=[];i.push(t[0],t[0]);for(let l=1;l<t.length;l++)i.push(t[l]),l===t.length-1&&i.push(t[l]);let a=[],s=1-e;n.push(y2(i[0]));for(let l=1;l+2<i.length;l++){let u=i[l];a[0]=[u[0],u[1]],a[1]=[u[0]+(s*i[l+1][0]-s*i[l-1][0])/6,u[1]+(s*i[l+1][1]-s*i[l-1][1])/6],a[2]=[i[l+1][0]+(s*i[l][0]-s*i[l+2][0])/6,i[l+1][1]+(s*i[l][1]-s*i[l+2][1])/6],a[3]=[i[l+1][0],i[l+1][1]],n.push(a[1],a[2],a[3])}}return n}function Pw(t,e){return Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2)}function s_e(t,e,r){let n=Pw(e,r);if(n===0)return Pw(t,e);let i=((t[0]-e[0])*(r[0]-e[0])+(t[1]-e[1])*(r[1]-e[1]))/n;return i=Math.max(0,Math.min(1,i)),Pw(t,Od(e,r,i))}function Od(t,e,r){return[t[0]+(e[0]-t[0])*r,t[1]+(e[1]-t[1])*r]}function qD(t,e,r,n){let i=n||[];if(function(l,u){let h=l[u+0],f=l[u+1],d=l[u+2],p=l[u+3],m=3*f[0]-2*h[0]-p[0];m*=m;let g=3*f[1]-2*h[1]-p[1];g*=g;let y=3*d[0]-2*p[0]-h[0];y*=y;let v=3*d[1]-2*p[1]-h[1];return v*=v,m<y&&(m=y),g<v&&(g=v),m+g}(t,e)<r){let l=t[e+0];i.length?(a=i[i.length-1],s=l,Math.sqrt(Pw(a,s))>1&&i.push(l)):i.push(l),i.push(t[e+3])}else{let u=t[e+0],h=t[e+1],f=t[e+2],d=t[e+3],p=Od(u,h,.5),m=Od(h,f,.5),g=Od(f,d,.5),y=Od(p,m,.5),v=Od(m,g,.5),x=Od(y,v,.5);qD([u,p,y,x],0,r,i),qD([x,v,g,d],0,r,i)}var a,s;return i}function o_e(t,e){return $w(t,0,t.length,e)}function $w(t,e,r,n,i){let a=i||[],s=t[e],l=t[r-1],u=0,h=1;for(let f=e+1;f<r-1;++f){let d=s_e(t[f],s,l);d>u&&(u=d,h=f)}return Math.sqrt(u)>n?($w(t,e,h+1,n,a),$w(t,h,r,n,a)):(a.length||a.push(s),a.push(l)),a}function BD(t,e=.15,r){let n=[],i=(t.length-1)/3;for(let a=0;a<i;a++)qD(t,3*a,e,n);return r&&r>0?$w(n,0,n.length,r):n}var v2,FD,$D,zD,GD,VD,Rs,UD,r_e,ID,yK,Nw,n_e,ro,pm,YD,Iw,XD,Xe,Wt=N(()=>{"use strict";o(MD,"t");o(e_e,"e");o(t_e,"s");o(x2,"n");v2=class{static{o(this,"o")}constructor(e){this.helper=e}fillPolygons(e,r){return this._fillPolygons(e,r)}_fillPolygons(e,r){let n=x2(e,r);return{type:"fillSketch",ops:this.renderLines(n,r)}}renderLines(e,r){let n=[];for(let i of e)n.push(...this.helper.doubleLineOps(i[0][0],i[0][1],i[1][0],i[1][1],r));return n}};o(zw,"a");FD=class extends v2{static{o(this,"h")}fillPolygons(e,r){let n=r.hachureGap;n<0&&(n=4*r.strokeWidth),n=Math.max(n,.1);let i=x2(e,Object.assign({},r,{hachureGap:n})),a=Math.PI/180*r.hachureAngle,s=[],l=.5*n*Math.cos(a),u=.5*n*Math.sin(a);for(let[h,f]of i)zw([h,f])&&s.push([[h[0]-l,h[1]+u],[...f]],[[h[0]+l,h[1]-u],[...f]]);return{type:"fillSketch",ops:this.renderLines(s,r)}}},$D=class extends v2{static{o(this,"r")}fillPolygons(e,r){let n=this._fillPolygons(e,r),i=Object.assign({},r,{hachureAngle:r.hachureAngle+90}),a=this._fillPolygons(e,i);return n.ops=n.ops.concat(a.ops),n}},zD=class{static{o(this,"i")}constructor(e){this.helper=e}fillPolygons(e,r){let n=x2(e,r=Object.assign({},r,{hachureAngle:0}));return this.dotsOnLines(n,r)}dotsOnLines(e,r){let n=[],i=r.hachureGap;i<0&&(i=4*r.strokeWidth),i=Math.max(i,.1);let a=r.fillWeight;a<0&&(a=r.strokeWidth/2);let s=i/4;for(let l of e){let u=zw(l),h=u/i,f=Math.ceil(h)-1,d=u-f*i,p=(l[0][0]+l[1][0])/2-i/4,m=Math.min(l[0][1],l[1][1]);for(let g=0;g<f;g++){let y=m+d+g*i,v=p-s+2*Math.random()*s,x=y-s+2*Math.random()*s,b=this.helper.ellipse(v,x,a,a,r);n.push(...b.ops)}}return{type:"fillSketch",ops:n}}},GD=class{static{o(this,"c")}constructor(e){this.helper=e}fillPolygons(e,r){let n=x2(e,r);return{type:"fillSketch",ops:this.dashedLine(n,r)}}dashedLine(e,r){let n=r.dashOffset<0?r.hachureGap<0?4*r.strokeWidth:r.hachureGap:r.dashOffset,i=r.dashGap<0?r.hachureGap<0?4*r.strokeWidth:r.hachureGap:r.dashGap,a=[];return e.forEach(s=>{let l=zw(s),u=Math.floor(l/(n+i)),h=(l+i-u*(n+i))/2,f=s[0],d=s[1];f[0]>d[0]&&(f=s[1],d=s[0]);let p=Math.atan((d[1]-f[1])/(d[0]-f[0]));for(let m=0;m<u;m++){let g=m*(n+i),y=g+n,v=[f[0]+g*Math.cos(p)+h*Math.cos(p),f[1]+g*Math.sin(p)+h*Math.sin(p)],x=[f[0]+y*Math.cos(p)+h*Math.cos(p),f[1]+y*Math.sin(p)+h*Math.sin(p)];a.push(...this.helper.doubleLineOps(v[0],v[1],x[0],x[1],r))}}),a}},VD=class{static{o(this,"l")}constructor(e){this.helper=e}fillPolygons(e,r){let n=r.hachureGap<0?4*r.strokeWidth:r.hachureGap,i=r.zigzagOffset<0?n:r.zigzagOffset,a=x2(e,r=Object.assign({},r,{hachureGap:n+i}));return{type:"fillSketch",ops:this.zigzagLines(a,i,r)}}zigzagLines(e,r,n){let i=[];return e.forEach(a=>{let s=zw(a),l=Math.round(s/(2*r)),u=a[0],h=a[1];u[0]>h[0]&&(u=a[1],h=a[0]);let f=Math.atan((h[1]-u[1])/(h[0]-u[0]));for(let d=0;d<l;d++){let p=2*d*r,m=2*(d+1)*r,g=Math.sqrt(2*Math.pow(r,2)),y=[u[0]+p*Math.cos(f),u[1]+p*Math.sin(f)],v=[u[0]+m*Math.cos(f),u[1]+m*Math.sin(f)],x=[y[0]+g*Math.cos(f+Math.PI/4),y[1]+g*Math.sin(f+Math.PI/4)];i.push(...this.helper.doubleLineOps(y[0],y[1],x[0],x[1],n),...this.helper.doubleLineOps(x[0],x[1],v[0],v[1],n))}}),i}},Rs={},UD=class{static{o(this,"p")}constructor(e){this.seed=e}next(){return this.seed?(2**31-1&(this.seed=Math.imul(48271,this.seed)))/2**31:Math.random()}},r_e=0,ID=1,yK=2,Nw={A:7,a:7,C:6,c:6,H:1,h:1,L:2,l:2,M:2,m:2,Q:4,q:4,S:4,s:4,T:2,t:2,V:1,v:1,Z:0,z:0};o(OD,"k");o(jD,"b");o(SK,"y");o(CK,"m");o(g2,"w");o(AK,"x");n_e={randOffset:o(function(t,e){return nr(t,e)},"randOffset"),randOffsetWithRange:o(function(t,e,r){return Bw(t,e,r)},"randOffsetWithRange"),ellipse:o(function(t,e,r,n,i){let a=DK(r,n,i);return HD(t,e,i,a).opset},"ellipse"),doubleLineOps:o(function(t,e,r,n,i){return Uh(t,e,r,n,i,!0)},"doubleLineOps")};o(_K,"v");o(Ow,"S");o(i_e,"O");o(vK,"L");o(DK,"T");o(HD,"D");o(xK,"A");o(bK,"_");o(PD,"I");o(dm,"C");o(wK,"z");o(LK,"W");o(Bw,"E");o(nr,"G");o(Uh,"$");o(WD,"R");o(Mw,"j");o(Fw,"q");o(TK,"F");o(kK,"V");o(a_e,"Z");o(y2,"Q");o(EK,"H");o(Pw,"N");o(s_e,"B");o(Od,"J");o(qD,"K");o(o_e,"U");o($w,"X");o(BD,"Y");ro="none",pm=class{static{o(this,"et")}constructor(e){this.defaultOptions={maxRandomnessOffset:2,roughness:1,bowing:1,stroke:"#000",strokeWidth:1,curveTightness:0,curveFitting:.95,curveStepCount:9,fillStyle:"hachure",fillWeight:-1,hachureAngle:-41,hachureGap:-1,dashOffset:-1,dashGap:-1,zigzagOffset:-1,seed:0,disableMultiStroke:!1,disableMultiStrokeFill:!1,preserveVertices:!1,fillShapeRoughnessGain:.8},this.config=e||{},this.config.options&&(this.defaultOptions=this._o(this.config.options))}static newSeed(){return Math.floor(Math.random()*2**31)}_o(e){return e?Object.assign({},this.defaultOptions,e):this.defaultOptions}_d(e,r,n){return{shape:e,sets:r||[],options:n||this.defaultOptions}}line(e,r,n,i,a){let s=this._o(a);return this._d("line",[_K(e,r,n,i,s)],s)}rectangle(e,r,n,i,a){let s=this._o(a),l=[],u=i_e(e,r,n,i,s);if(s.fill){let h=[[e,r],[e+n,r],[e+n,r+i],[e,r+i]];s.fillStyle==="solid"?l.push(PD([h],s)):l.push(dm([h],s))}return s.stroke!==ro&&l.push(u),this._d("rectangle",l,s)}ellipse(e,r,n,i,a){let s=this._o(a),l=[],u=DK(n,i,s),h=HD(e,r,s,u);if(s.fill)if(s.fillStyle==="solid"){let f=HD(e,r,s,u).opset;f.type="fillPath",l.push(f)}else l.push(dm([h.estimatedPoints],s));return s.stroke!==ro&&l.push(h.opset),this._d("ellipse",l,s)}circle(e,r,n,i){let a=this.ellipse(e,r,n,n,i);return a.shape="circle",a}linearPath(e,r){let n=this._o(r);return this._d("linearPath",[Ow(e,!1,n)],n)}arc(e,r,n,i,a,s,l=!1,u){let h=this._o(u),f=[],d=xK(e,r,n,i,a,s,l,!0,h);if(l&&h.fill)if(h.fillStyle==="solid"){let p=Object.assign({},h);p.disableMultiStroke=!0;let m=xK(e,r,n,i,a,s,!0,!1,p);m.type="fillPath",f.push(m)}else f.push(function(p,m,g,y,v,x,b){let w=p,C=m,T=Math.abs(g/2),E=Math.abs(y/2);T+=nr(.01*T,b),E+=nr(.01*E,b);let A=v,S=x;for(;A<0;)A+=2*Math.PI,S+=2*Math.PI;S-A>2*Math.PI&&(A=0,S=2*Math.PI);let _=(S-A)/b.curveStepCount,I=[];for(let D=A;D<=S;D+=_)I.push([w+T*Math.cos(D),C+E*Math.sin(D)]);return I.push([w+T*Math.cos(S),C+E*Math.sin(S)]),I.push([w,C]),dm([I],b)}(e,r,n,i,a,s,h));return h.stroke!==ro&&f.push(d),this._d("arc",f,h)}curve(e,r){let n=this._o(r),i=[],a=vK(e,n);if(n.fill&&n.fill!==ro)if(n.fillStyle==="solid"){let s=vK(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(s.ops)})}else{let s=[],l=e;if(l.length){let u=typeof l[0][0]=="number"?[l]:l;for(let h of u)h.length<3?s.push(...h):h.length===3?s.push(...BD(EK([h[0],h[0],h[1],h[2]]),10,(1+n.roughness)/2)):s.push(...BD(EK(h),10,(1+n.roughness)/2))}s.length&&i.push(dm([s],n))}return n.stroke!==ro&&i.push(a),this._d("curve",i,n)}polygon(e,r){let n=this._o(r),i=[],a=Ow(e,!0,n);return n.fill&&(n.fillStyle==="solid"?i.push(PD([e],n)):i.push(dm([e],n))),n.stroke!==ro&&i.push(a),this._d("polygon",i,n)}path(e,r){let n=this._o(r),i=[];if(!e)return this._d("path",i,n);e=(e||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");let a=n.fill&&n.fill!=="transparent"&&n.fill!==ro,s=n.stroke!==ro,l=!!(n.simplification&&n.simplification<1),u=function(f,d,p){let m=CK(SK(jD(f))),g=[],y=[],v=[0,0],x=[],b=o(()=>{x.length>=4&&y.push(...BD(x,d)),x=[]},"i"),w=o(()=>{b(),y.length&&(g.push(y),y=[])},"c");for(let{key:T,data:E}of m)switch(T){case"M":w(),v=[E[0],E[1]],y.push(v);break;case"L":b(),y.push([E[0],E[1]]);break;case"C":if(!x.length){let A=y.length?y[y.length-1]:v;x.push([A[0],A[1]])}x.push([E[0],E[1]]),x.push([E[2],E[3]]),x.push([E[4],E[5]]);break;case"Z":b(),y.push([v[0],v[1]])}if(w(),!p)return g;let C=[];for(let T of g){let E=o_e(T,p);E.length&&C.push(E)}return C}(e,1,l?4-4*(n.simplification||1):(1+n.roughness)/2),h=bK(e,n);if(a)if(n.fillStyle==="solid")if(u.length===1){let f=bK(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(f.ops)})}else i.push(PD(u,n));else i.push(dm(u,n));return s&&(l?u.forEach(f=>{i.push(Ow(f,!1,n))}):i.push(h)),this._d("path",i,n)}opsToPath(e,r){let n="";for(let i of e.ops){let a=typeof r=="number"&&r>=0?i.data.map(s=>+s.toFixed(r)):i.data;switch(i.op){case"move":n+=`M${a[0]} ${a[1]} `;break;case"bcurveTo":n+=`C${a[0]} ${a[1]}, ${a[2]} ${a[3]}, ${a[4]} ${a[5]} `;break;case"lineTo":n+=`L${a[0]} ${a[1]} `}}return n.trim()}toPaths(e){let r=e.sets||[],n=e.options||this.defaultOptions,i=[];for(let a of r){let s=null;switch(a.type){case"path":s={d:this.opsToPath(a),stroke:n.stroke,strokeWidth:n.strokeWidth,fill:ro};break;case"fillPath":s={d:this.opsToPath(a),stroke:ro,strokeWidth:0,fill:n.fill||ro};break;case"fillSketch":s=this.fillSketch(a,n)}s&&i.push(s)}return i}fillSketch(e,r){let n=r.fillWeight;return n<0&&(n=r.strokeWidth/2),{d:this.opsToPath(e),stroke:r.fill||ro,strokeWidth:n,fill:ro}}_mergedShape(e){return e.filter((r,n)=>n===0||r.op!=="move")}},YD=class{static{o(this,"st")}constructor(e,r){this.canvas=e,this.ctx=this.canvas.getContext("2d"),this.gen=new pm(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.ctx,a=e.options.fixedDecimalPlaceDigits;for(let s of r)switch(s.type){case"path":i.save(),i.strokeStyle=n.stroke==="none"?"transparent":n.stroke,i.lineWidth=n.strokeWidth,n.strokeLineDash&&i.setLineDash(n.strokeLineDash),n.strokeLineDashOffset&&(i.lineDashOffset=n.strokeLineDashOffset),this._drawToContext(i,s,a),i.restore();break;case"fillPath":{i.save(),i.fillStyle=n.fill||"";let l=e.shape==="curve"||e.shape==="polygon"||e.shape==="path"?"evenodd":"nonzero";this._drawToContext(i,s,a,l),i.restore();break}case"fillSketch":this.fillSketch(i,s,n)}}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2),e.save(),n.fillLineDash&&e.setLineDash(n.fillLineDash),n.fillLineDashOffset&&(e.lineDashOffset=n.fillLineDashOffset),e.strokeStyle=n.fill||"",e.lineWidth=i,this._drawToContext(e,r,n.fixedDecimalPlaceDigits),e.restore()}_drawToContext(e,r,n,i="nonzero"){e.beginPath();for(let a of r.ops){let s=typeof n=="number"&&n>=0?a.data.map(l=>+l.toFixed(n)):a.data;switch(a.op){case"move":e.moveTo(s[0],s[1]);break;case"bcurveTo":e.bezierCurveTo(s[0],s[1],s[2],s[3],s[4],s[5]);break;case"lineTo":e.lineTo(s[0],s[1])}}r.type==="fillPath"?e.fill(i):e.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s),s}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s),s}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s),s}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a),a}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n),n}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n),n}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h),h}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n),n}path(e,r){let n=this.gen.path(e,r);return this.draw(n),n}},Iw="http://www.w3.org/2000/svg",XD=class{static{o(this,"ot")}constructor(e,r){this.svg=e,this.gen=new pm(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.svg.ownerDocument||window.document,a=i.createElementNS(Iw,"g"),s=e.options.fixedDecimalPlaceDigits;for(let l of r){let u=null;switch(l.type){case"path":u=i.createElementNS(Iw,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke",n.stroke),u.setAttribute("stroke-width",n.strokeWidth+""),u.setAttribute("fill","none"),n.strokeLineDash&&u.setAttribute("stroke-dasharray",n.strokeLineDash.join(" ").trim()),n.strokeLineDashOffset&&u.setAttribute("stroke-dashoffset",`${n.strokeLineDashOffset}`);break;case"fillPath":u=i.createElementNS(Iw,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke","none"),u.setAttribute("stroke-width","0"),u.setAttribute("fill",n.fill||""),e.shape!=="curve"&&e.shape!=="polygon"||u.setAttribute("fill-rule","evenodd");break;case"fillSketch":u=this.fillSketch(i,l,n)}u&&a.appendChild(u)}return a}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2);let a=e.createElementNS(Iw,"path");return a.setAttribute("d",this.opsToPath(r,n.fixedDecimalPlaceDigits)),a.setAttribute("stroke",n.fill||""),a.setAttribute("stroke-width",i+""),a.setAttribute("fill","none"),n.fillLineDash&&a.setAttribute("stroke-dasharray",n.fillLineDash.join(" ").trim()),n.fillLineDashOffset&&a.setAttribute("stroke-dashoffset",`${n.fillLineDashOffset}`),a}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(e,r){return this.gen.opsToPath(e,r)}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s)}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s)}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s)}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a)}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n)}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n)}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h)}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n)}path(e,r){let n=this.gen.path(e,r);return this.draw(n)}},Xe={canvas:o((t,e)=>new YD(t,e),"canvas"),svg:o((t,e)=>new XD(t,e),"svg"),generator:o(t=>new pm(t),"generator"),newSeed:o(()=>pm.newSeed(),"newSeed")}});function RK(t,e){let{labelStyles:r}=Qe(e);e.labelStyle=r;let n=ht(e),i=n;n||(i="anchor");let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=1,{cssStyles:l}=e,u=Xe.svg(a),h=Ke(e,{fill:"black",stroke:"none",fillStyle:"solid"});e.look!=="handDrawn"&&(h.roughness=0);let f=u.circle(0,0,s*2,h),d=a.insert(()=>f,":first-child");return d.attr("class","anchor").attr("style",$n(l)),je(e,d),e.intersect=function(p){return Y.info("Circle intersect",e,s,p),Ye.circle(e,s,p)},a}var NK=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();ir();o(RK,"anchor")});function MK(t,e,r,n,i,a,s){let u=(t+r)/2,h=(e+n)/2,f=Math.atan2(n-e,r-t),d=(r-t)/2,p=(n-e)/2,m=d/i,g=p/a,y=Math.sqrt(m**2+g**2);if(y>1)throw new Error("The given radii are too small to create an arc between the points.");let v=Math.sqrt(1-y**2),x=u+v*a*Math.sin(f)*(s?-1:1),b=h-v*i*Math.cos(f)*(s?-1:1),w=Math.atan2((e-b)/a,(t-x)/i),T=Math.atan2((n-b)/a,(r-x)/i)-w;s&&T<0&&(T+=2*Math.PI),!s&&T>0&&(T-=2*Math.PI);let E=[];for(let A=0;A<20;A++){let S=A/19,_=w+S*T,I=x+i*Math.cos(_),D=b+a*Math.sin(_);E.push({x:I,y:D})}return E}async function IK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.width+e.padding+20,l=a.height+e.padding,u=l/2,h=u/(2.5+l/50),{cssStyles:f}=e,d=[{x:s/2,y:-l/2},{x:-s/2,y:-l/2},...MK(-s/2,-l/2,-s/2,l/2,h,u,!1),{x:s/2,y:l/2},...MK(s/2,l/2,s/2,-l/2,h,u,!0)],p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Xt(d),y=p.path(g,m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(${h/2}, 0)`),je(e,v),e.intersect=function(x){return Ye.polygon(e,d,x)},i}var OK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(MK,"generateArcPoints");o(IK,"bowTieRect")});function La(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var _u=N(()=>{"use strict";o(La,"insertPolygonShape")});async function PK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.height+e.padding,l=12,u=a.width+e.padding+l,h=0,f=u,d=-s,p=0,m=[{x:h+l,y:d},{x:f,y:d},{x:f,y:p},{x:h,y:p},{x:h,y:d+l},{x:h+l,y:d}],g,{cssStyles:y}=e;if(e.look==="handDrawn"){let v=Xe.svg(i),x=Ke(e,{}),b=Xt(m),w=v.path(b,x);g=i.insert(()=>w,":first-child").attr("transform",`translate(${-u/2}, ${s/2})`),y&&g.attr("style",y)}else g=La(i,u,s,m);return n&&g.attr("style",n),je(e,g),e.intersect=function(v){return Ye.polygon(e,m,v)},i}var BK=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();Ft();o(PK,"card")});function FK(t,e){let{nodeStyles:r}=Qe(e);e.label="";let n=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),{cssStyles:i}=e,a=Math.max(28,e.width??0),s=[{x:0,y:a/2},{x:a/2,y:0},{x:0,y:-a/2},{x:-a/2,y:0}],l=Xe.svg(n),u=Ke(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=Xt(s),f=l.path(h,u),d=n.insert(()=>f,":first-child");return i&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",i),r&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",r),e.width=28,e.height=28,e.intersect=function(p){return Ye.polygon(e,s,p)},n}var $K=N(()=>{"use strict";Ht();Wt();Ut();Ft();o(FK,"choice")});async function zK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await pt(t,e,ht(e)),l=a.width/2+s,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=Xe.svg(i),d=Ke(e,{}),p=f.circle(0,0,l*2,d);u=i.insert(()=>p,":first-child"),u.attr("class","basic label-container").attr("style",$n(h))}else u=i.insert("circle",":first-child").attr("class","basic label-container").attr("style",n).attr("r",l).attr("cx",0).attr("cy",0);return je(e,u),e.intersect=function(f){return Y.info("Circle intersect",e,l,f),Ye.circle(e,l,f)},i}var GK=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();ir();o(zK,"circle")});function l_e(t){let e=Math.cos(Math.PI/4),r=Math.sin(Math.PI/4),n=t*2,i={x:n/2*e,y:n/2*r},a={x:-(n/2)*e,y:n/2*r},s={x:-(n/2)*e,y:-(n/2)*r},l={x:n/2*e,y:-(n/2)*r};return`M ${a.x},${a.y} L ${l.x},${l.y}
449 + M ${i.x},${i.y} L ${s.x},${s.y}`}function VK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r,e.label="";let i=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),a=Math.max(30,e?.width??0),{cssStyles:s}=e,l=Xe.svg(i),u=Ke(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=l.circle(0,0,a*2,u),f=l_e(a),d=l.path(f,u),p=i.insert(()=>h,":first-child");return p.insert(()=>d),s&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",s),n&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",n),je(e,p),e.intersect=function(m){return Y.info("crossedCircle intersect",e,{radius:a,point:m}),Ye.circle(e,a,m)},i}var UK=N(()=>{"use strict";vt();Ft();Ut();Wt();Ht();o(l_e,"createLine");o(VK,"crossedCircle")});function Hh(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d<n;d++){let p=l+d*f,m=t+r*Math.cos(p),g=e+r*Math.sin(p);s.push({x:-m,y:-g})}return s}async function HK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+(e.padding??0),u=a.height+(e.padding??0),h=Math.max(5,u*.1),{cssStyles:f}=e,d=[...Hh(l/2,-u/2,h,30,-90,0),{x:-l/2-h,y:h},...Hh(l/2+h*2,-h,h,20,-180,-270),...Hh(l/2+h*2,h,h,20,-90,-180),{x:-l/2-h,y:-u/2},...Hh(l/2,u/2,h,20,0,90)],p=[{x:l/2,y:-u/2-h},{x:-l/2,y:-u/2-h},...Hh(l/2,-u/2,h,20,-90,0),{x:-l/2-h,y:-h},...Hh(l/2+l*.1,-h,h,20,-180,-270),...Hh(l/2+l*.1,h,h,20,-90,-180),{x:-l/2-h,y:u/2},...Hh(l/2,u/2,h,20,0,90),{x:-l/2,y:u/2+h},{x:l/2,y:u/2+h}],m=Xe.svg(i),g=Ke(e,{fill:"none"});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let v=Xt(d).replace("Z",""),x=m.path(v,g),b=Xt(p),w=m.path(b,{...g}),C=i.insert("g",":first-child");return C.insert(()=>w,":first-child").attr("stroke-opacity",0),C.insert(()=>x,":first-child"),C.attr("class","text"),f&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(${h}, 0)`),s.attr("transform",`translate(${-l/2+h-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,C),e.intersect=function(T){return Ye.polygon(e,p,T)},i}var WK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(Hh,"generateCirclePoints");o(HK,"curlyBraceLeft")});function Wh(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d<n;d++){let p=l+d*f,m=t+r*Math.cos(p),g=e+r*Math.sin(p);s.push({x:m,y:g})}return s}async function qK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+(e.padding??0),u=a.height+(e.padding??0),h=Math.max(5,u*.1),{cssStyles:f}=e,d=[...Wh(l/2,-u/2,h,20,-90,0),{x:l/2+h,y:-h},...Wh(l/2+h*2,-h,h,20,-180,-270),...Wh(l/2+h*2,h,h,20,-90,-180),{x:l/2+h,y:u/2},...Wh(l/2,u/2,h,20,0,90)],p=[{x:-l/2,y:-u/2-h},{x:l/2,y:-u/2-h},...Wh(l/2,-u/2,h,20,-90,0),{x:l/2+h,y:-h},...Wh(l/2+h*2,-h,h,20,-180,-270),...Wh(l/2+h*2,h,h,20,-90,-180),{x:l/2+h,y:u/2},...Wh(l/2,u/2,h,20,0,90),{x:l/2,y:u/2+h},{x:-l/2,y:u/2+h}],m=Xe.svg(i),g=Ke(e,{fill:"none"});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let v=Xt(d).replace("Z",""),x=m.path(v,g),b=Xt(p),w=m.path(b,{...g}),C=i.insert("g",":first-child");return C.insert(()=>w,":first-child").attr("stroke-opacity",0),C.insert(()=>x,":first-child"),C.attr("class","text"),f&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(${-h}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,C),e.intersect=function(T){return Ye.polygon(e,p,T)},i}var YK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(Wh,"generateCirclePoints");o(qK,"curlyBraceRight")});function Ra(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d<n;d++){let p=l+d*f,m=t+r*Math.cos(p),g=e+r*Math.sin(p);s.push({x:-m,y:-g})}return s}async function XK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+(e.padding??0),u=a.height+(e.padding??0),h=Math.max(5,u*.1),{cssStyles:f}=e,d=[...Ra(l/2,-u/2,h,30,-90,0),{x:-l/2-h,y:h},...Ra(l/2+h*2,-h,h,20,-180,-270),...Ra(l/2+h*2,h,h,20,-90,-180),{x:-l/2-h,y:-u/2},...Ra(l/2,u/2,h,20,0,90)],p=[...Ra(-l/2+h+h/2,-u/2,h,20,-90,-180),{x:l/2-h/2,y:h},...Ra(-l/2-h/2,-h,h,20,0,90),...Ra(-l/2-h/2,h,h,20,-90,0),{x:l/2-h/2,y:-h},...Ra(-l/2+h+h/2,u/2,h,30,-180,-270)],m=[{x:l/2,y:-u/2-h},{x:-l/2,y:-u/2-h},...Ra(l/2,-u/2,h,20,-90,0),{x:-l/2-h,y:-h},...Ra(l/2+h*2,-h,h,20,-180,-270),...Ra(l/2+h*2,h,h,20,-90,-180),{x:-l/2-h,y:u/2},...Ra(l/2,u/2,h,20,0,90),{x:-l/2,y:u/2+h},{x:l/2-h-h/2,y:u/2+h},...Ra(-l/2+h+h/2,-u/2,h,20,-90,-180),{x:l/2-h/2,y:h},...Ra(-l/2-h/2,-h,h,20,0,90),...Ra(-l/2-h/2,h,h,20,-90,0),{x:l/2-h/2,y:-h},...Ra(-l/2+h+h/2,u/2,h,30,-180,-270)],g=Xe.svg(i),y=Ke(e,{fill:"none"});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let x=Xt(d).replace("Z",""),b=g.path(x,y),C=Xt(p).replace("Z",""),T=g.path(C,y),E=Xt(m),A=g.path(E,{...y}),S=i.insert("g",":first-child");return S.insert(()=>A,":first-child").attr("stroke-opacity",0),S.insert(()=>b,":first-child"),S.insert(()=>T,":first-child"),S.attr("class","text"),f&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(${h-h/4}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,S),e.intersect=function(_){return Ye.polygon(e,m,_)},i}var jK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(Ra,"generateCirclePoints");o(XK,"curlyBraces")});async function KK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=80,l=20,u=Math.max(s,(a.width+(e.padding??0)*2)*1.25,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=u,y=h,v=g-f,x=y/4,b=[{x:v,y:0},{x,y:0},{x:0,y:y/2},{x,y},{x:v,y},...Lw(-v,-y/2,f,50,270,90)],w=Xt(b),C=p.path(w,m),T=i.insert(()=>C,":first-child");return T.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",n),T.attr("transform",`translate(${-u/2}, ${-h/2})`),je(e,T),e.intersect=function(E){return Ye.polygon(e,b,E)},i}var QK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(KK,"curvedTrapezoid")});async function ZK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+e.padding,e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+e.padding,e.height??0),d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Xe.svg(i),g=u_e(0,0,l,f,u,h),y=h_e(0,h,l,f,u,h),v=m.path(g,Ke(e,{})),x=m.path(y,Ke(e,{fill:"none"}));d=i.insert(()=>x,":first-child"),d=i.insert(()=>v,":first-child"),d.attr("class","basic label-container"),p&&d.attr("style",p)}else{let m=c_e(0,0,l,f,u,h);d=i.insert("path",":first-child").attr("d",m).attr("class","basic label-container").attr("style",$n(p)).attr("style",n)}return d.attr("label-offset-y",h),d.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),je(e,d),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+(e.padding??0)/1.5-(a.y-(a.top??0))})`),e.intersect=function(m){let g=Ye.rect(e,m),y=g.x-(e.x??0);if(u!=0&&(Math.abs(y)<(e.width??0)/2||Math.abs(y)==(e.width??0)/2&&Math.abs(g.y-(e.y??0))>(e.height??0)/2-h)){let v=h*h*(1-y*y/(u*u));v>0&&(v=Math.sqrt(v)),v=h-v,m.y-(e.y??0)>0&&(v=-v),g.y+=v}return g},i}var c_e,u_e,h_e,JK=N(()=>{"use strict";Ft();Ht();Ut();Wt();ir();c_e=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createCylinderPathD"),u_e=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createOuterCylinderPathD"),h_e=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(ZK,"cylinder")});async function eQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+e.padding,u=a.height+e.padding,h=u*.2,f=-l/2,d=-u/2-h/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d+h},{x:-f,y:d+h},{x:-f,y:-d},{x:f,y:-d},{x:f,y:d},{x:-f,y:d},{x:-f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${f+(e.padding??0)/2-(a.x-(a.left??0))}, ${d+h+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.rect(e,b)},i}var tQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(eQ,"dividedRectangle")});async function rQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await pt(t,e,ht(e)),u=a.width/2+s+5,h=a.width/2+s,f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{roughness:.2,strokeWidth:2.5}),g=Ke(e,{roughness:.2,strokeWidth:1.5}),y=p.circle(0,0,u*2,m),v=p.circle(0,0,h*2,g);f=i.insert("g",":first-child"),f.attr("class",$n(e.cssClasses)).attr("style",$n(d)),f.node()?.appendChild(y),f.node()?.appendChild(v)}else{f=i.insert("g",":first-child");let p=f.insert("circle",":first-child"),m=f.insert("circle");f.attr("class","basic label-container").attr("style",n),p.attr("class","outer-circle").attr("style",n).attr("r",u).attr("cx",0).attr("cy",0),m.attr("class","inner-circle").attr("style",n).attr("r",h).attr("cx",0).attr("cy",0)}return je(e,f),e.intersect=function(p){return Y.info("DoubleCircle intersect",e,u,p),Ye.circle(e,u,p)},i}var nQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();ir();o(rQ,"doublecircle")});function iQ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.label="",e.labelStyle=n;let a=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),s=7,{cssStyles:l}=e,u=Xe.svg(a),{nodeBorder:h}=r,f=Ke(e,{fillStyle:"solid"});e.look!=="handDrawn"&&(f.roughness=0);let d=u.circle(0,0,s*2,f),p=a.insert(()=>d,":first-child");return p.selectAll("path").attr("style",`fill: ${h} !important;`),l&&l.length>0&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",l),i&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",i),je(e,p),e.intersect=function(m){return Y.info("filledCircle intersect",e,{radius:s,point:m}),Ye.circle(e,s,m)},a}var aQ=N(()=>{"use strict";Wt();vt();Ht();Ut();Ft();o(iQ,"filledCircle")});async function sQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+(e.padding??0),u=l+a.height,h=l+a.height,f=[{x:0,y:-u},{x:h,y:-u},{x:h/2,y:0}],{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Xt(f),y=p.path(g,m),v=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`);return d&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),e.width=l,e.height=u,je(e,v),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${-u/2+(e.padding??0)/2+(a.y-(a.top??0))})`),e.intersect=function(x){return Y.info("Triangle intersect",e,f,x),Ye.polygon(e,f,x)},i}var oQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();Ft();o(sQ,"flippedTriangle")});function lQ(t,e,{dir:r,config:{state:n,themeVariables:i}}){let{nodeStyles:a}=Qe(e);e.label="";let s=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),{cssStyles:l}=e,u=Math.max(70,e?.width??0),h=Math.max(10,e?.height??0);r==="LR"&&(u=Math.max(10,e?.width??0),h=Math.max(70,e?.height??0));let f=-1*u/2,d=-1*h/2,p=Xe.svg(s),m=Ke(e,{stroke:i.lineColor,fill:i.lineColor});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=p.rectangle(f,d,u,h,m),y=s.insert(()=>g,":first-child");l&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",l),a&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",a),je(e,y);let v=n?.padding??0;return e.width&&e.height&&(e.width+=v/2||0,e.height+=v/2||0),e.intersect=function(x){return Ye.rect(e,x)},s}var cQ=N(()=>{"use strict";Wt();Ht();Ut();Ft();o(lQ,"forkJoin")});async function uQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let i=80,a=50,{shapeSvg:s,bbox:l}=await pt(t,e,ht(e)),u=Math.max(i,l.width+(e.padding??0)*2,e?.width??0),h=Math.max(a,l.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=Xe.svg(s),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-u/2,y:-h/2},{x:u/2-f,y:-h/2},...Lw(-u/2+f,0,f,50,90,270),{x:u/2-f,y:h/2},{x:-u/2,y:h/2}],y=Xt(g),v=p.path(y,m),x=s.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),je(e,x),e.intersect=function(b){return Y.info("Pill intersect",e,{radius:f,point:b}),Ye.polygon(e,g,b)},s}var hQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();o(uQ,"halfRoundedRectangle")});async function fQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=4,l=a.height+e.padding,u=l/s,h=a.width+2*u+e.padding,f=[{x:u,y:0},{x:h-u,y:0},{x:h,y:-l/2},{x:h-u,y:-l},{x:u,y:-l},{x:0,y:-l/2}],d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Xe.svg(i),g=Ke(e,{}),y=f_e(0,0,h,l,u),v=m.path(y,g);d=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${l/2})`),p&&d.attr("style",p)}else d=La(i,h,l,f);return n&&d.attr("style",n),e.width=h,e.height=l,je(e,d),e.intersect=function(m){return Ye.polygon(e,f,m)},i}var f_e,dQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();f_e=o((t,e,r,n,i)=>[`M${t+i},${e}`,`L${t+r-i},${e}`,`L${t+r},${e-n/2}`,`L${t+r-i},${e-n}`,`L${t+i},${e-n}`,`L${t},${e-n/2}`,"Z"].join(" "),"createHexagonPathD");o(fQ,"hexagon")});async function pQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.label="",e.labelStyle=r;let{shapeSvg:i}=await pt(t,e,ht(e)),a=Math.max(30,e?.width??0),s=Math.max(30,e?.height??0),{cssStyles:l}=e,u=Xe.svg(i),h=Ke(e,{});e.look!=="handDrawn"&&(h.roughness=0,h.fillStyle="solid");let f=[{x:0,y:0},{x:a,y:0},{x:0,y:s},{x:a,y:s}],d=Xt(f),p=u.path(d,h),m=i.insert(()=>p,":first-child");return m.attr("class","basic label-container"),l&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",l),n&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",n),m.attr("transform",`translate(${-a/2}, ${-s/2})`),je(e,m),e.intersect=function(g){return Y.info("Pill intersect",e,{points:f}),Ye.polygon(e,f,g)},i}var mQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();o(pQ,"hourglass")});async function gQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await pt(t,e,"icon-shape default"),p=e.pos==="t",m=l,g=l,{nodeBorder:y}=r,{stylesMap:v}=mc(e),x=-g/2,b=-m/2,w=e.label?8:0,C=Xe.svg(h),T=Ke(e,{stroke:"none",fill:"none"});e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let E=C.rectangle(x,b,g,m,T),A=Math.max(g,f.width),S=m+f.height+w,_=C.rectangle(-A/2,-S/2,A,S,{...T,fill:"transparent",stroke:"none"}),I=h.insert(()=>E,":first-child"),D=h.insert(()=>_);if(e.icon){let k=h.append("g");k.html(`<g>${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}</g>`);let L=k.node().getBBox(),R=L.width,O=L.height,M=L.x,B=L.y;k.attr("transform",`translate(${-R/2-M},${p?f.height/2+w/2-O/2-B:-f.height/2-w/2-O/2-B})`),k.attr("style",`color: ${v.get("stroke")??y};`)}return d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${p?-S/2:S/2-f.height})`),I.attr("transform",`translate(0,${p?f.height/2+w/2:-f.height/2-w/2})`),je(e,D),e.intersect=function(k){if(Y.info("iconSquare intersect",e,k),!e.label)return Ye.rect(e,k);let L=e.x??0,R=e.y??0,O=e.height??0,M=[];return p?M=[{x:L-f.width/2,y:R-O/2},{x:L+f.width/2,y:R-O/2},{x:L+f.width/2,y:R-O/2+f.height+w},{x:L+g/2,y:R-O/2+f.height+w},{x:L+g/2,y:R+O/2},{x:L-g/2,y:R+O/2},{x:L-g/2,y:R-O/2+f.height+w},{x:L-f.width/2,y:R-O/2+f.height+w}]:M=[{x:L-g/2,y:R-O/2},{x:L+g/2,y:R-O/2},{x:L+g/2,y:R-O/2+m},{x:L+f.width/2,y:R-O/2+m},{x:L+f.width/2/2,y:R+O/2},{x:L-f.width/2,y:R+O/2},{x:L-f.width/2,y:R-O/2+m},{x:L-g/2,y:R-O/2+m}],Ye.polygon(e,M,k)},h}var yQ=N(()=>{"use strict";Wt();vt();tu();Ht();Ut();Ft();o(gQ,"icon")});async function vQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await pt(t,e,"icon-shape default"),p=20,m=e.label?8:0,g=e.pos==="t",{nodeBorder:y,mainBkg:v}=r,{stylesMap:x}=mc(e),b=Xe.svg(h),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let C=x.get("fill");w.stroke=C??v;let T=h.append("g");e.icon&&T.html(`<g>${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}</g>`);let E=T.node().getBBox(),A=E.width,S=E.height,_=E.x,I=E.y,D=Math.max(A,S)*Math.SQRT2+p*2,k=b.circle(0,0,D,w),L=Math.max(D,f.width),R=D+f.height+m,O=b.rectangle(-L/2,-R/2,L,R,{...w,fill:"transparent",stroke:"none"}),M=h.insert(()=>k,":first-child"),B=h.insert(()=>O);return T.attr("transform",`translate(${-A/2-_},${g?f.height/2+m/2-S/2-I:-f.height/2-m/2-S/2-I})`),T.attr("style",`color: ${x.get("stroke")??y};`),d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${g?-R/2:R/2-f.height})`),M.attr("transform",`translate(0,${g?f.height/2+m/2:-f.height/2-m/2})`),je(e,B),e.intersect=function(F){return Y.info("iconSquare intersect",e,F),Ye.rect(e,F)},h}var xQ=N(()=>{"use strict";Wt();vt();tu();Ht();Ut();Ft();o(vQ,"iconCircle")});var Na,qh=N(()=>{"use strict";Na=o((t,e,r,n,i)=>["M",t+i,e,"H",t+r-i,"A",i,i,0,0,1,t+r,e+i,"V",e+n-i,"A",i,i,0,0,1,t+r-i,e+n,"H",t+i,"A",i,i,0,0,1,t,e+n-i,"V",e+i,"A",i,i,0,0,1,t+i,e,"Z"].join(" "),"createRoundedRectPathD")});async function bQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await pt(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=mc(e),w=-y/2,C=-g/2,T=e.label?8:0,E=Xe.svg(h),A=Ke(e,{});e.look!=="handDrawn"&&(A.roughness=0,A.fillStyle="solid");let S=b.get("fill");A.stroke=S??x;let _=E.path(Na(w,C,y,g,5),A),I=Math.max(y,f.width),D=g+f.height+T,k=E.rectangle(-I/2,-D/2,I,D,{...A,fill:"transparent",stroke:"none"}),L=h.insert(()=>_,":first-child").attr("class","icon-shape2"),R=h.insert(()=>k);if(e.icon){let O=h.append("g");O.html(`<g>${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}</g>`);let M=O.node().getBBox(),B=M.width,F=M.height,P=M.x,z=M.y;O.attr("transform",`translate(${-B/2-P},${m?f.height/2+T/2-F/2-z:-f.height/2-T/2-F/2-z})`),O.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-D/2:D/2-f.height})`),L.attr("transform",`translate(0,${m?f.height/2+T/2:-f.height/2-T/2})`),je(e,R),e.intersect=function(O){if(Y.info("iconSquare intersect",e,O),!e.label)return Ye.rect(e,O);let M=e.x??0,B=e.y??0,F=e.height??0,P=[];return m?P=[{x:M-f.width/2,y:B-F/2},{x:M+f.width/2,y:B-F/2},{x:M+f.width/2,y:B-F/2+f.height+T},{x:M+y/2,y:B-F/2+f.height+T},{x:M+y/2,y:B+F/2},{x:M-y/2,y:B+F/2},{x:M-y/2,y:B-F/2+f.height+T},{x:M-f.width/2,y:B-F/2+f.height+T}]:P=[{x:M-y/2,y:B-F/2},{x:M+y/2,y:B-F/2},{x:M+y/2,y:B-F/2+g},{x:M+f.width/2,y:B-F/2+g},{x:M+f.width/2/2,y:B+F/2},{x:M-f.width/2,y:B+F/2},{x:M-f.width/2,y:B-F/2+g},{x:M-y/2,y:B-F/2+g}],Ye.polygon(e,P,O)},h}var wQ=N(()=>{"use strict";Wt();vt();tu();Ht();Ut();qh();Ft();o(bQ,"iconRounded")});async function TQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await pt(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=mc(e),w=-y/2,C=-g/2,T=e.label?8:0,E=Xe.svg(h),A=Ke(e,{});e.look!=="handDrawn"&&(A.roughness=0,A.fillStyle="solid");let S=b.get("fill");A.stroke=S??x;let _=E.path(Na(w,C,y,g,.1),A),I=Math.max(y,f.width),D=g+f.height+T,k=E.rectangle(-I/2,-D/2,I,D,{...A,fill:"transparent",stroke:"none"}),L=h.insert(()=>_,":first-child"),R=h.insert(()=>k);if(e.icon){let O=h.append("g");O.html(`<g>${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}</g>`);let M=O.node().getBBox(),B=M.width,F=M.height,P=M.x,z=M.y;O.attr("transform",`translate(${-B/2-P},${m?f.height/2+T/2-F/2-z:-f.height/2-T/2-F/2-z})`),O.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-D/2:D/2-f.height})`),L.attr("transform",`translate(0,${m?f.height/2+T/2:-f.height/2-T/2})`),je(e,R),e.intersect=function(O){if(Y.info("iconSquare intersect",e,O),!e.label)return Ye.rect(e,O);let M=e.x??0,B=e.y??0,F=e.height??0,P=[];return m?P=[{x:M-f.width/2,y:B-F/2},{x:M+f.width/2,y:B-F/2},{x:M+f.width/2,y:B-F/2+f.height+T},{x:M+y/2,y:B-F/2+f.height+T},{x:M+y/2,y:B+F/2},{x:M-y/2,y:B+F/2},{x:M-y/2,y:B-F/2+f.height+T},{x:M-f.width/2,y:B-F/2+f.height+T}]:P=[{x:M-y/2,y:B-F/2},{x:M+y/2,y:B-F/2},{x:M+y/2,y:B-F/2+g},{x:M+f.width/2,y:B-F/2+g},{x:M+f.width/2/2,y:B+F/2},{x:M-f.width/2,y:B+F/2},{x:M-f.width/2,y:B-F/2+g},{x:M-y/2,y:B-F/2+g}],Ye.polygon(e,P,O)},h}var kQ=N(()=>{"use strict";Wt();vt();tu();Ht();qh();Ut();Ft();o(TQ,"iconSquare")});async function EQ(t,e,{config:{flowchart:r}}){let n=new Image;n.src=e?.img??"",await n.decode();let i=Number(n.naturalWidth.toString().replace("px","")),a=Number(n.naturalHeight.toString().replace("px",""));e.imageAspectRatio=i/a;let{labelStyles:s}=Qe(e);e.labelStyle=s;let l=r?.wrappingWidth;e.defaultWidth=r?.wrappingWidth;let u=Math.max(e.label?l??0:0,e?.assetWidth??i),h=e.constraint==="on"&&e?.assetHeight?e.assetHeight*e.imageAspectRatio:u,f=e.constraint==="on"?h/e.imageAspectRatio:e?.assetHeight??a;e.width=Math.max(h,l??0);let{shapeSvg:d,bbox:p,label:m}=await pt(t,e,"image-shape default"),g=e.pos==="t",y=-h/2,v=-f/2,x=e.label?8:0,b=Xe.svg(d),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let C=b.rectangle(y,v,h,f,w),T=Math.max(h,p.width),E=f+p.height+x,A=b.rectangle(-T/2,-E/2,T,E,{...w,fill:"none",stroke:"none"}),S=d.insert(()=>C,":first-child"),_=d.insert(()=>A);if(e.img){let I=d.append("image");I.attr("href",e.img),I.attr("width",h),I.attr("height",f),I.attr("preserveAspectRatio","none"),I.attr("transform",`translate(${-h/2},${g?E/2-f:-E/2})`)}return m.attr("transform",`translate(${-p.width/2-(p.x-(p.left??0))},${g?-f/2-p.height/2-x/2:f/2-p.height/2+x/2})`),S.attr("transform",`translate(0,${g?p.height/2+x/2:-p.height/2-x/2})`),je(e,_),e.intersect=function(I){if(Y.info("iconSquare intersect",e,I),!e.label)return Ye.rect(e,I);let D=e.x??0,k=e.y??0,L=e.height??0,R=[];return g?R=[{x:D-p.width/2,y:k-L/2},{x:D+p.width/2,y:k-L/2},{x:D+p.width/2,y:k-L/2+p.height+x},{x:D+h/2,y:k-L/2+p.height+x},{x:D+h/2,y:k+L/2},{x:D-h/2,y:k+L/2},{x:D-h/2,y:k-L/2+p.height+x},{x:D-p.width/2,y:k-L/2+p.height+x}]:R=[{x:D-h/2,y:k-L/2},{x:D+h/2,y:k-L/2},{x:D+h/2,y:k-L/2+f},{x:D+p.width/2,y:k-L/2+f},{x:D+p.width/2/2,y:k+L/2},{x:D-p.width/2,y:k+L/2},{x:D-p.width/2,y:k-L/2+f},{x:D-h/2,y:k-L/2+f}],Ye.polygon(e,R,I)},d}var SQ=N(()=>{"use strict";Wt();vt();Ht();Ut();Ft();o(EQ,"imageSquare")});async function CQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=[{x:0,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:-3*l/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var AQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();o(CQ,"inv_trapezoid")});async function Du(t,e,r){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n;let{shapeSvg:a,bbox:s}=await pt(t,e,ht(e)),l=Math.max(s.width+r.labelPaddingX*2,e?.width||0),u=Math.max(s.height+r.labelPaddingY*2,e?.height||0),h=-l/2,f=-u/2,d,{rx:p,ry:m}=e,{cssStyles:g}=e;if(r?.rx&&r.ry&&(p=r.rx,m=r.ry),e.look==="handDrawn"){let y=Xe.svg(a),v=Ke(e,{}),x=p||m?y.path(Na(h,f,l,u,p||0),v):y.rectangle(h,f,l,u,v);d=a.insert(()=>x,":first-child"),d.attr("class","basic label-container").attr("style",$n(g))}else d=a.insert("rect",":first-child"),d.attr("class","basic label-container").attr("style",i).attr("rx",$n(p)).attr("ry",$n(m)).attr("x",h).attr("y",f).attr("width",l).attr("height",u);return je(e,d),e.intersect=function(y){return Ye.rect(e,y)},a}var mm=N(()=>{"use strict";Ft();Ht();qh();Ut();Wt();ir();o(Du,"drawRect")});async function _Q(t,e){let{shapeSvg:r,bbox:n,label:i}=await pt(t,e,"label"),a=r.insert("rect",":first-child");return a.attr("width",.1).attr("height",.1),r.attr("class","label edgeLabel"),i.attr("transform",`translate(${-(n.width/2)-(n.x-(n.left??0))}, ${-(n.height/2)-(n.y-(n.top??0))})`),je(e,a),e.intersect=function(u){return Ye.rect(e,u)},r}var DQ=N(()=>{"use strict";mm();Ft();Ht();o(_Q,"labelRect")});async function LQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:0,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:-(3*l)/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var RQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();o(LQ,"lean_left")});async function NQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:-3*l/6,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var MQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();o(NQ,"lean_right")});function IQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.label="",e.labelStyle=r;let i=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),{cssStyles:a}=e,s=Math.max(35,e?.width??0),l=Math.max(35,e?.height??0),u=7,h=[{x:s,y:0},{x:0,y:l+u/2},{x:s-2*u,y:l+u/2},{x:0,y:2*l},{x:s,y:l-u/2},{x:2*u,y:l-u/2}],f=Xe.svg(i),d=Ke(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=Xt(h),m=f.path(p,d),g=i.insert(()=>m,":first-child");return a&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",a),n&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",n),g.attr("transform",`translate(-${s/2},${-l})`),je(e,g),e.intersect=function(y){return Y.info("lightningBolt intersect",e,y),Ye.polygon(e,h,y)},i}var OQ=N(()=>{"use strict";vt();Ft();Ut();Wt();Ht();Ft();o(IQ,"lightningBolt")});async function PQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0),e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+(e.padding??0),e.height??0),d=f*.1,p,{cssStyles:m}=e;if(e.look==="handDrawn"){let g=Xe.svg(i),y=p_e(0,0,l,f,u,h,d),v=m_e(0,h,l,f,u,h),x=Ke(e,{}),b=g.path(y,x),w=g.path(v,x);i.insert(()=>w,":first-child").attr("class","line"),p=i.insert(()=>b,":first-child"),p.attr("class","basic label-container"),m&&p.attr("style",m)}else{let g=d_e(0,0,l,f,u,h,d);p=i.insert("path",":first-child").attr("d",g).attr("class","basic label-container").attr("style",$n(m)).attr("style",n)}return p.attr("label-offset-y",h),p.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),je(e,p),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),e.intersect=function(g){let y=Ye.rect(e,g),v=y.x-(e.x??0);if(u!=0&&(Math.abs(v)<(e.width??0)/2||Math.abs(v)==(e.width??0)/2&&Math.abs(y.y-(e.y??0))>(e.height??0)/2-h)){let x=h*h*(1-v*v/(u*u));x>0&&(x=Math.sqrt(x)),x=h-x,g.y-(e.y??0)>0&&(x=-x),y.y+=x}return y},i}var d_e,p_e,m_e,BQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();ir();d_e=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createCylinderPathD"),p_e=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createOuterCylinderPathD"),m_e=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(PQ,"linedCylinder")});async function FQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-l/2-l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:f/2},...Fo(-l/2-l/2*.1,f/2,l/2+l/2*.1,f/2,h,.8),{x:l/2+l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:-f/2},{x:-l/2,y:-f/2},{x:-l/2,y:f/2*1.1},{x:-l/2,y:-f/2}],y=p.polygon(g.map(x=>[x.x,x.y]),m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)+l/2*.1/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),je(e,v),e.intersect=function(x){return Ye.polygon(e,g,x)},i}var $Q=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(FQ,"linedWaveEdgedRect")});async function zQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:f-h,y:d+h},{x:f-h,y:d+u+h},{x:f+l-h,y:d+u+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d+u-h},{x:f+l+h,y:d+u-h},{x:f+l+h,y:d-h},{x:f+h,y:d-h},{x:f+h,y:d},{x:f,y:d},{x:f,y:d+h}],v=[{x:f,y:d+h},{x:f+l-h,y:d+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d},{x:f,y:d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Xt(y),b=m.path(x,g),w=Xt(v),C=m.path(w,{...g,fill:"none"}),T=i.insert(()=>C,":first-child");return T.insert(()=>b,":first-child"),T.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)-h-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),je(e,T),e.intersect=function(E){return Ye.polygon(e,y,E)},i}var GQ=N(()=>{"use strict";Ft();Ut();Wt();Ht();o(zQ,"multiRect")});async function VQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,d=-l/2,p=-f/2,m=5,{cssStyles:g}=e,y=Fo(d-m,p+f+m,d+l-m,p+f+m,h,.8),v=y?.[y.length-1],x=[{x:d-m,y:p+m},{x:d-m,y:p+f+m},...y,{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:v.y-2*m},{x:d+l+m,y:v.y-2*m},{x:d+l+m,y:p-m},{x:d+m,y:p-m},{x:d+m,y:p},{x:d,y:p},{x:d,y:p+m}],b=[{x:d,y:p+m},{x:d+l-m,y:p+m},{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:p},{x:d,y:p}],w=Xe.svg(i),C=Ke(e,{});e.look!=="handDrawn"&&(C.roughness=0,C.fillStyle="solid");let T=Xt(x),E=w.path(T,C),A=Xt(b),S=w.path(A,C),_=i.insert(()=>E,":first-child");return _.insert(()=>S),_.attr("class","basic label-container"),g&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",g),n&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",n),_.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-(a.width/2)-m-(a.x-(a.left??0))}, ${-(a.height/2)+m-h/2-(a.y-(a.top??0))})`),je(e,_),e.intersect=function(I){return Ye.polygon(e,x,I)},i}var UQ=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(VQ,"multiWaveEdgedRectangle")});async function HQ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n,e.useHtmlLabels||cr().flowchart?.htmlLabels!==!1||(e.centerLabel=!0);let{shapeSvg:s,bbox:l}=await pt(t,e,ht(e)),u=Math.max(l.width+(e.padding??0)*2,e?.width??0),h=Math.max(l.height+(e.padding??0)*2,e?.height??0),f=-u/2,d=-h/2,{cssStyles:p}=e,m=Xe.svg(s),g=Ke(e,{fill:r.noteBkgColor,stroke:r.noteBorderColor});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=m.rectangle(f,d,u,h,g),v=s.insert(()=>y,":first-child");return v.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",p),i&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",i),je(e,v),e.intersect=function(x){return Ye.rect(e,x)},s}var WQ=N(()=>{"use strict";Wt();Ht();Ut();Ft();ji();o(HQ,"note")});async function qQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.width+e.padding,l=a.height+e.padding,u=s+l,h=[{x:u/2,y:0},{x:u,y:-u/2},{x:u/2,y:-u},{x:0,y:-u/2}],f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{}),g=g_e(0,0,u),y=p.path(g,m);f=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`),d&&f.attr("style",d)}else f=La(i,u,u,h);return n&&f.attr("style",n),je(e,f),e.intersect=function(p){return Y.debug(`APA12 Intersect called SPLIT
450 +point:`,p,`
451 +node:
452 +`,e,`
453 +res:`,Ye.polygon(e,h,p)),Ye.polygon(e,h,p)},i}var g_e,YQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();_u();g_e=o((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD");o(qQ,"question")});async function XQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0),e?.width??0),u=Math.max(a.height+(e.padding??0),e?.height??0),h=-l/2,f=-u/2,d=f/2,p=[{x:h+d,y:f},{x:h,y:0},{x:h+d,y:-f},{x:-h,y:-f},{x:-h,y:f}],{cssStyles:m}=e,g=Xe.svg(i),y=Ke(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=Xt(p),x=g.path(v,y),b=i.insert(()=>x,":first-child");return b.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),b.attr("transform",`translate(${-d/2},0)`),s.attr("transform",`translate(${-d/2-a.width/2-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),je(e,b),e.intersect=function(w){return Ye.polygon(e,p,w)},i}var jQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(XQ,"rect_left_inv_arrow")});function y_e(t,e){e&&t.attr("style",e)}async function v_e(t){let e=Ge(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label;t.label&&pi(t.label)&&(n=await mh(t.label.replace(Ze.lineBreakRegex,`
454 +`),me()));let i=t.isNode?"nodeLabel":"edgeLabel";return r.html('<span class="'+i+'" '+(t.labelStyle?'style="'+t.labelStyle+'"':"")+">"+n+"</span>"),y_e(r,t.labelStyle),r.style("display","inline-block"),r.style("padding-right","1px"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var x_e,gc,Gw=N(()=>{"use strict";dr();vt();zt();gr();ir();o(y_e,"applyStyle");o(v_e,"addHtmlLabel");x_e=o(async(t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),fr(me().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"<br />"),Y.info("vertexText"+i);let a={isNode:n,label:na(i).replace(/fa[blrs]?:fa-[\w-]+/g,l=>`<i class='${l.replace(":"," ")}'></i>`),labelStyle:e&&e.replace("fill:","color:")};return await v_e(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),gc=x_e});async function KQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let i;e.cssClasses?i="node "+e.cssClasses:i="node default";let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=a.insert("g"),l=a.insert("g").attr("class","label").attr("style",n),u=e.description,h=e.label,f=l.node().appendChild(await gc(h,e.labelStyle,!0,!0)),d={width:0,height:0};if(fr(me()?.flowchart?.htmlLabels)){let S=f.children[0],_=Ge(f);d=S.getBoundingClientRect(),_.attr("width",d.width),_.attr("height",d.height)}Y.info("Text 2",u);let p=u||[],m=f.getBBox(),g=l.node().appendChild(await gc(p.join?p.join("<br/>"):p,e.labelStyle,!0,!0)),y=g.children[0],v=Ge(g);d=y.getBoundingClientRect(),v.attr("width",d.width),v.attr("height",d.height);let x=(e.padding||0)/2;Ge(g).attr("transform","translate( "+(d.width>m.width?0:(m.width-d.width)/2)+", "+(m.height+x+5)+")"),Ge(f).attr("transform","translate( "+(d.width<m.width?0:-(m.width-d.width)/2)+", 0)"),d=l.node().getBBox(),l.attr("transform","translate("+-d.width/2+", "+(-d.height/2-x+3)+")");let b=d.width+(e.padding||0),w=d.height+(e.padding||0),C=-d.width/2-x,T=-d.height/2-x,E,A;if(e.look==="handDrawn"){let S=Xe.svg(a),_=Ke(e,{}),I=S.path(Na(C,T,b,w,e.rx||0),_),D=S.line(-d.width/2-x,-d.height/2-x+m.height+x,d.width/2+x,-d.height/2-x+m.height+x,_);A=a.insert(()=>(Y.debug("Rough node insert CXC",I),D),":first-child"),E=a.insert(()=>(Y.debug("Rough node insert CXC",I),I),":first-child")}else E=s.insert("rect",":first-child"),A=s.insert("line"),E.attr("class","outer title-state").attr("style",n).attr("x",-d.width/2-x).attr("y",-d.height/2-x).attr("width",d.width+(e.padding||0)).attr("height",d.height+(e.padding||0)),A.attr("class","divider").attr("x1",-d.width/2-x).attr("x2",d.width/2+x).attr("y1",-d.height/2-x+m.height+x).attr("y2",-d.height/2-x+m.height+x);return je(e,E),e.intersect=function(S){return Ye.rect(e,S)},a}var QQ=N(()=>{"use strict";dr();gr();Ft();Gw();Ht();Ut();Wt();zt();qh();vt();o(KQ,"rectWithTitle")});async function ZQ(t,e){let r={rx:5,ry:5,classes:"",labelPaddingX:(e?.padding||0)*1,labelPaddingY:(e?.padding||0)*1};return Du(t,e,r)}var JQ=N(()=>{"use strict";mm();o(ZQ,"roundedRect")});async function eZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=e?.padding??0,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=-a.width/2-l,d=-a.height/2-l,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d},{x:f+u+8,y:d},{x:f+u+8,y:d+h},{x:f-8,y:d+h},{x:f-8,y:d},{x:f,y:d},{x:f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container").attr("style",$n(p)),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${-u/2+4+(e.padding??0)-(a.x-(a.left??0))},${-h/2+(e.padding??0)-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.rect(e,b)},i}var tZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();ir();o(eZ,"shadedProcess")});async function rZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=-l/2,f=-u/2,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:h,y:f},{x:h,y:f+u},{x:h+l,y:f+u},{x:h+l,y:f-u/2}],y=Xt(g),v=p.path(y,m),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),x.attr("transform",`translate(0, ${u/4})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))}, ${-u/4+(e.padding??0)-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.polygon(e,g,b)},i}var nZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(rZ,"slopedRect")});async function iZ(t,e){let r={rx:0,ry:0,classes:"",labelPaddingX:(e?.padding||0)*2,labelPaddingY:(e?.padding||0)*1};return Du(t,e,r)}var aZ=N(()=>{"use strict";mm();o(iZ,"squareRect")});async function sZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.height+e.padding,l=a.width+s/4+e.padding,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=Xe.svg(i),d=Ke(e,{}),p=Na(-l/2,-s/2,l,s,s/2),m=f.path(p,d);u=i.insert(()=>m,":first-child"),u.attr("class","basic label-container").attr("style",$n(h))}else u=i.insert("rect",":first-child"),u.attr("class","basic label-container").attr("style",n).attr("rx",s/2).attr("ry",s/2).attr("x",-l/2).attr("y",-s/2).attr("width",l).attr("height",s);return je(e,u),e.intersect=function(f){return Ye.rect(e,f)},i}var oZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();qh();ir();o(sZ,"stadium")});async function lZ(t,e){return Du(t,e,{rx:5,ry:5,classes:"flowchart-node"})}var cZ=N(()=>{"use strict";mm();o(lZ,"state")});function uZ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n;let{cssStyles:a}=e,{lineColor:s,stateBorder:l,nodeBorder:u}=r,h=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),f=Xe.svg(h),d=Ke(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=f.circle(0,0,14,{...d,stroke:s,strokeWidth:2}),m=l??u,g=f.circle(0,0,5,{...d,fill:m,stroke:m,strokeWidth:2,fillStyle:"solid"}),y=h.insert(()=>p,":first-child");return y.insert(()=>g),a&&y.selectAll("path").attr("style",a),i&&y.selectAll("path").attr("style",i),je(e,y),e.intersect=function(v){return Ye.circle(e,7,v)},h}var hZ=N(()=>{"use strict";Wt();Ht();Ut();Ft();o(uZ,"stateEnd")});function fZ(t,e,{config:{themeVariables:r}}){let{lineColor:n}=r,i=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),a;if(e.look==="handDrawn"){let l=Xe.svg(i).circle(0,0,14,gK(n));a=i.insert(()=>l),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14)}else a=i.insert("circle",":first-child"),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14);return je(e,a),e.intersect=function(s){return Ye.circle(e,7,s)},i}var dZ=N(()=>{"use strict";Wt();Ht();Ut();Ft();o(fZ,"stateStart")});async function pZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=(e?.padding||0)/2,l=a.width+e.padding,u=a.height+e.padding,h=-a.width/2-s,f=-a.height/2-s,d=[{x:0,y:0},{x:l,y:0},{x:l,y:-u},{x:0,y:-u},{x:0,y:0},{x:-8,y:0},{x:l+8,y:0},{x:l+8,y:-u},{x:-8,y:-u},{x:-8,y:0}];if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{}),g=p.rectangle(h-8,f,l+16,u,m),y=p.line(h,f,h,f+u,m),v=p.line(h+l,f,h+l,f+u,m);i.insert(()=>y,":first-child"),i.insert(()=>v,":first-child");let x=i.insert(()=>g,":first-child"),{cssStyles:b}=e;x.attr("class","basic label-container").attr("style",$n(b)),je(e,x)}else{let p=La(i,l,u,d);n&&p.attr("style",n),je(e,p)}return e.intersect=function(p){return Ye.polygon(e,d,p)},i}var mZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();ir();o(pZ,"subroutine")});async function gZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=-s/2,h=-l/2,f=.2*l,d=.2*l,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:u-f/2,y:h},{x:u+s+f/2,y:h},{x:u+s+f/2,y:h+l},{x:u-f/2,y:h+l}],v=[{x:u+s-f/2,y:h+l},{x:u+s+f/2,y:h+l},{x:u+s+f/2,y:h+l-d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Xt(y),b=m.path(x,g),w=Xt(v),C=m.path(w,{...g,fillStyle:"solid"}),T=i.insert(()=>C,":first-child");return T.insert(()=>b,":first-child"),T.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),je(e,T),e.intersect=function(E){return Ye.polygon(e,y,E)},i}var yZ=N(()=>{"use strict";Ft();Ut();Wt();Ht();o(gZ,"taggedRect")});async function vZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=.2*l,d=.2*u,p=u+h,{cssStyles:m}=e,g=Xe.svg(i),y=Ke(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=[{x:-l/2-l/2*.1,y:p/2},...Fo(-l/2-l/2*.1,p/2,l/2+l/2*.1,p/2,h,.8),{x:l/2+l/2*.1,y:-p/2},{x:-l/2-l/2*.1,y:-p/2}],x=-l/2+l/2*.1,b=-p/2-d*.4,w=[{x:x+l-f,y:(b+u)*1.4},{x:x+l,y:b+u-d},{x:x+l,y:(b+u)*.9},...Fo(x+l,(b+u)*1.3,x+l-f,(b+u)*1.5,-u*.03,.5)],C=Xt(v),T=g.path(C,y),E=Xt(w),A=g.path(E,{...y,fillStyle:"solid"}),S=i.insert(()=>A,":first-child");return S.insert(()=>T,":first-child"),S.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),je(e,S),e.intersect=function(_){return Ye.polygon(e,v,_)},i}var xZ=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(vZ,"taggedWaveEdgedRectangle")});async function bZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+e.padding,e?.width||0),l=Math.max(a.height+e.padding,e?.height||0),u=-s/2,h=-l/2,f=i.insert("rect",":first-child");return f.attr("class","text").attr("style",n).attr("rx",0).attr("ry",0).attr("x",u).attr("y",h).attr("width",s).attr("height",l),je(e,f),e.intersect=function(d){return Ye.rect(e,d)},i}var wZ=N(()=>{"use strict";Ft();Ht();Ut();o(bZ,"text")});async function TZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s,halfPadding:l}=await pt(t,e,ht(e)),u=e.look==="neo"?l*2:l,h=a.height+u,f=h/2,d=f/(2.5+h/50),p=a.width+d+u,{cssStyles:m}=e,g;if(e.look==="handDrawn"){let y=Xe.svg(i),v=w_e(0,0,p,h,d,f),x=T_e(0,0,p,h,d,f),b=y.path(v,Ke(e,{})),w=y.path(x,Ke(e,{fill:"none"}));g=i.insert(()=>w,":first-child"),g=i.insert(()=>b,":first-child"),g.attr("class","basic label-container"),m&&g.attr("style",m)}else{let y=b_e(0,0,p,h,d,f);g=i.insert("path",":first-child").attr("d",y).attr("class","basic label-container").attr("style",$n(m)).attr("style",n),g.attr("class","basic label-container"),m&&g.selectAll("path").attr("style",m),n&&g.selectAll("path").attr("style",n)}return g.attr("label-offset-x",d),g.attr("transform",`translate(${-p/2}, ${h/2} )`),s.attr("transform",`translate(${-(a.width/2)-d-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),je(e,g),e.intersect=function(y){let v=Ye.rect(e,y),x=v.y-(e.y??0);if(f!=0&&(Math.abs(x)<(e.height??0)/2||Math.abs(x)==(e.height??0)/2&&Math.abs(v.x-(e.x??0))>(e.width??0)/2-d)){let b=d*d*(1-x*x/(f*f));b!=0&&(b=Math.sqrt(Math.abs(b))),b=d-b,y.x-(e.x??0)>0&&(b=-b),v.x+=b}return v},i}var b_e,w_e,T_e,kZ=N(()=>{"use strict";Ft();Ut();Wt();Ht();ir();b_e=o((t,e,r,n,i,a)=>`M${t},${e}
455 + a${i},${a} 0,0,1 0,${-n}
456 + l${r},0
457 + a${i},${a} 0,0,1 0,${n}
458 + M${r},${-n}
459 + a${i},${a} 0,0,0 0,${n}
460 + l${-r},0`,"createCylinderPathD"),w_e=o((t,e,r,n,i,a)=>[`M${t},${e}`,`M${t+r},${e}`,`a${i},${a} 0,0,0 0,${-n}`,`l${-r},0`,`a${i},${a} 0,0,0 0,${n}`,`l${r},0`].join(" "),"createOuterCylinderPathD"),T_e=o((t,e,r,n,i,a)=>[`M${t+r/2},${-n/2}`,`a${i},${a} 0,0,0 0,${n}`].join(" "),"createInnerCylinderPathD");o(TZ,"tiltedCylinder")});async function EZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.width+e.padding,l=a.height+e.padding,u=[{x:-3*l/6,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var SZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();o(EZ,"trapezoid")});async function CZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=60,l=20,u=Math.max(s,a.width+(e.padding??0)*2,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),{cssStyles:f}=e,d=Xe.svg(i),p=Ke(e,{});e.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");let m=[{x:-u/2*.8,y:-h/2},{x:u/2*.8,y:-h/2},{x:u/2,y:-h/2*.6},{x:u/2,y:h/2},{x:-u/2,y:h/2},{x:-u/2,y:-h/2*.6}],g=Xt(m),y=d.path(g,p),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),je(e,v),e.intersect=function(x){return Ye.polygon(e,m,x)},i}var AZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(CZ,"trapezoidalPentagon")});async function _Z(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=fr(me().flowchart?.htmlLabels),u=a.width+(e.padding??0),h=u+a.height,f=u+a.height,d=[{x:0,y:0},{x:f,y:0},{x:f/2,y:-h}],{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=Xt(d),v=m.path(y,g),x=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${h/2})`);return p&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),e.width=u,e.height=h,je(e,x),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${h/2-(a.height+(e.padding??0)/(l?2:1)-(a.y-(a.top??0)))})`),e.intersect=function(b){return Y.info("Triangle intersect",e,d,b),Ye.polygon(e,d,b)},i}var DZ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();Ft();gr();zt();o(_Z,"triangle")});async function LZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/8,f=u+h,{cssStyles:d}=e,m=70-l,g=m>0?m/2:0,y=Xe.svg(i),v=Ke(e,{});e.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=[{x:-l/2-g,y:f/2},...Fo(-l/2-g,f/2,l/2+g,f/2,h,.8),{x:l/2+g,y:-f/2},{x:-l/2-g,y:-f/2}],b=Xt(x),w=y.path(b,v),C=i.insert(()=>w,":first-child");return C.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h-(a.y-(a.top??0))})`),je(e,C),e.intersect=function(T){return Ye.polygon(e,x,T)},i}var RZ=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(LZ,"waveEdgedRectangle")});async function NZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=100,l=50,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=u/h,d=u,p=h;d>p*f?p=d/f:d=p*f,d=Math.max(d,s),p=Math.max(p,l);let m=Math.min(p*.2,p/4),g=p+m*2,{cssStyles:y}=e,v=Xe.svg(i),x=Ke(e,{});e.look!=="handDrawn"&&(x.roughness=0,x.fillStyle="solid");let b=[{x:-d/2,y:g/2},...Fo(-d/2,g/2,d/2,g/2,m,1),{x:d/2,y:-g/2},...Fo(d/2,-g/2,-d/2,-g/2,m,-1)],w=Xt(b),C=v.path(w,x),T=i.insert(()=>C,":first-child");return T.attr("class","basic label-container"),y&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",y),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),je(e,T),e.intersect=function(E){return Ye.polygon(e,b,E)},i}var MZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(NZ,"waveRectangle")});async function IZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:f-h,y:d-h},{x:f-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d-h}],v=`M${f-h},${d-h} L${f+l},${d-h} L${f+l},${d+u} L${f-h},${d+u} L${f-h},${d-h}
461 + M${f-h},${d} L${f+l},${d}
462 + M${f},${d-h} L${f},${d+u}`;e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=m.path(v,g),b=i.insert(()=>x,":first-child");return b.attr("transform",`translate(${h/2}, ${h/2})`),b.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)+h/2-(a.x-(a.left??0))}, ${-(a.height/2)+h/2-(a.y-(a.top??0))})`),je(e,b),e.intersect=function(w){return Ye.polygon(e,y,w)},i}var OZ=N(()=>{"use strict";Ft();Ut();Wt();Ht();o(IZ,"windowPane")});async function KD(t,e){let r=e;if(r.alias&&(e.label=r.alias),e.look==="handDrawn"){let{themeVariables:P}=cr(),{background:z}=P,$={...e,id:e.id+"-background",look:"default",cssStyles:["stroke: none",`fill: ${z}`]};await KD(t,$)}let n=cr();e.useHtmlLabels=n.htmlLabels;let i=n.er?.diagramPadding??10,a=n.er?.entityPadding??6,{cssStyles:s}=e,{labelStyles:l}=Qe(e);if(r.attributes.length===0&&e.label){let P={rx:0,ry:0,labelPaddingX:i,labelPaddingY:i*1.5,classes:""};ra(e.label,n)+P.labelPaddingX*2<n.er.minEntityWidth&&(e.width=n.er.minEntityWidth);let z=await Du(t,e,P);if(!fr(n.htmlLabels)){let $=z.select("text"),H=$.node()?.getBBox();$.attr("transform",`translate(${-H.width/2}, 0)`)}return z}n.htmlLabels||(i*=1.25,a*=1.25);let u=ht(e);u||(u="node default");let h=t.insert("g").attr("class",u).attr("id",e.domId||e.id),f=await b2(h,e.label??"",n,0,0,["name"],l);f.height+=a;let d=0,p=[],m=0,g=0,y=0,v=0,x=!0,b=!0;for(let P of r.attributes){let z=await b2(h,P.type,n,0,d,["attribute-type"],l);m=Math.max(m,z.width+i);let $=await b2(h,P.name,n,0,d,["attribute-name"],l);g=Math.max(g,$.width+i);let H=await b2(h,P.keys.join(),n,0,d,["attribute-keys"],l);y=Math.max(y,H.width+i);let Q=await b2(h,P.comment,n,0,d,["attribute-comment"],l);v=Math.max(v,Q.width+i),d+=Math.max(z.height,$.height,H.height,Q.height)+a,p.push(d)}p.pop();let w=4;y<=i&&(x=!1,y=0,w--),v<=i&&(b=!1,v=0,w--);let C=h.node().getBBox();if(f.width+i*2-(m+g+y+v)>0){let P=f.width+i*2-(m+g+y+v);m+=P/w,g+=P/w,y>0&&(y+=P/w),v>0&&(v+=P/w)}let T=m+g+y+v,E=Xe.svg(h),A=Ke(e,{});e.look!=="handDrawn"&&(A.roughness=0,A.fillStyle="solid");let S=Math.max(C.width+i*2,e?.width||0,T),_=Math.max(C.height+(p[0]||d)+a,e?.height||0),I=-S/2,D=-_/2;h.selectAll("g:not(:first-child)").each((P,z,$)=>{let H=Ge($[z]),Q=H.attr("transform"),j=0,ie=0;if(Q){let le=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(Q);le&&(j=parseFloat(le[1]),ie=parseFloat(le[2]),H.attr("class").includes("attribute-name")?j+=m:H.attr("class").includes("attribute-keys")?j+=m+g:H.attr("class").includes("attribute-comment")&&(j+=m+g+y))}H.attr("transform",`translate(${I+i/2+j}, ${ie+D+f.height+a/2})`)}),h.select(".name").attr("transform","translate("+-f.width/2+", "+(D+a/2)+")");let k=E.rectangle(I,D,S,_,A),L=h.insert(()=>k,":first-child").attr("style",s.join("")),{themeVariables:R}=cr(),{rowEven:O,rowOdd:M,nodeBorder:B}=R;p.push(0);for(let[P,z]of p.entries()){if(P===0&&p.length>1)continue;let $=P%2===0&&z!==0,H=E.rectangle(I,f.height+D+z,S,f.height,{...A,fill:$?O:M,stroke:B});h.insert(()=>H,"g.label").attr("style",s.join("")).attr("class",`row-rect-${P%2===0?"even":"odd"}`)}let F=E.line(I,f.height+D,S+I,f.height+D,A);h.insert(()=>F).attr("class","divider"),F=E.line(m+I,f.height+D,m+I,_+D,A),h.insert(()=>F).attr("class","divider"),x&&(F=E.line(m+g+I,f.height+D,m+g+I,_+D,A),h.insert(()=>F).attr("class","divider")),b&&(F=E.line(m+g+y+I,f.height+D,m+g+y+I,_+D,A),h.insert(()=>F).attr("class","divider"));for(let P of p)F=E.line(I,f.height+D+P,S+I,f.height+D+P,A),h.insert(()=>F).attr("class","divider");return je(e,L),e.intersect=function(P){return Ye.rect(e,P)},h}async function b2(t,e,r,n=0,i=0,a=[],s=""){let l=t.insert("g").attr("class",`label ${a.join(" ")}`).attr("transform",`translate(${n}, ${i})`).attr("style",s);e!==ec(e)&&(e=ec(e),e=e.replaceAll("<","&lt;").replaceAll(">","&gt;"));let u=l.node().appendChild(await Hn(l,e,{width:ra(e,r)+100,style:s,useHtmlLabels:r.htmlLabels},r));if(e.includes("&lt;")||e.includes("&gt;")){let f=u.children[0];for(f.textContent=f.textContent.replaceAll("&lt;","<").replaceAll("&gt;",">");f.childNodes[0];)f=f.childNodes[0],f.textContent=f.textContent.replaceAll("&lt;","<").replaceAll("&gt;",">")}let h=u.getBBox();if(fr(r.htmlLabels)){let f=u.children[0];f.style.textAlign="start";let d=Ge(u);h=f.getBoundingClientRect(),d.attr("width",h.width),d.attr("height",h.height)}return h}var PZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();mm();ji();to();gr();dr();ir();o(KD,"erBox");o(b2,"addText")});async function BZ(t,e,r,n,i=r.class.padding??12){let a=n?0:3,s=t.insert("g").attr("class",ht(e)).attr("id",e.domId||e.id),l=null,u=null,h=null,f=null,d=0,p=0,m=0;if(l=s.insert("g").attr("class","annotation-group text"),e.annotations.length>0){let b=e.annotations[0];await Vw(l,{text:`\xAB${b}\xBB`},0),d=l.node().getBBox().height}u=s.insert("g").attr("class","label-group text"),await Vw(u,e,0,["font-weight: bolder"]);let g=u.node().getBBox();p=g.height,h=s.insert("g").attr("class","members-group text");let y=0;for(let b of e.members){let w=await Vw(h,b,y,[b.parseClassifier()]);y+=w+a}m=h.node().getBBox().height,m<=0&&(m=i/2),f=s.insert("g").attr("class","methods-group text");let v=0;for(let b of e.methods){let w=await Vw(f,b,v,[b.parseClassifier()]);v+=w+a}let x=s.node().getBBox();if(l!==null){let b=l.node().getBBox();l.attr("transform",`translate(${-b.width/2})`)}return u.attr("transform",`translate(${-g.width/2}, ${d})`),x=s.node().getBBox(),h.attr("transform",`translate(0, ${d+p+i*2})`),x=s.node().getBBox(),f.attr("transform",`translate(0, ${d+p+(m?m+i*4:i*2)})`),x=s.node().getBBox(),{shapeSvg:s,bbox:x}}async function Vw(t,e,r,n=[]){let i=t.insert("g").attr("class","label").attr("style",n.join("; ")),a=cr(),s="useHtmlLabels"in e?e.useHtmlLabels:fr(a.htmlLabels)??!0,l="";"text"in e?l=e.text:l=e.label,!s&&l.startsWith("\\")&&(l=l.substring(1)),pi(l)&&(s=!0);let u=await Hn(i,Xy(na(l)),{width:ra(l,a)+50,classes:"markdown-node-label",useHtmlLabels:s},a),h,f=1;if(s){let d=u.children[0],p=Ge(u);f=d.innerHTML.split("<br>").length,d.innerHTML.includes("</math>")&&(f+=d.innerHTML.split("<mrow>").length-1);let m=d.getElementsByTagName("img");if(m){let g=l.replace(/<img[^>]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=a.fontSize?.toString()??window.getComputedStyle(document.body).fontSize,C=parseInt(b,10)*5+"px";y.style.minWidth=C,y.style.maxWidth=C}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}else{n.includes("font-weight: bolder")&&Ge(u).selectAll("tspan").attr("font-weight",""),f=u.children.length;let d=u.children[0];(u.textContent===""||u.textContent.includes("&gt"))&&(d.textContent=l[0]+l.substring(1).replaceAll("&gt;",">").replaceAll("&lt;","<").trim(),l[1]===" "&&(d.textContent=d.textContent[0]+" "+d.textContent.substring(1))),d.textContent==="undefined"&&(d.textContent=""),h=u.getBBox()}return i.attr("transform","translate(0,"+(-h.height/(2*f)+r)+")"),h.height}var FZ=N(()=>{"use strict";dr();ji();Ft();ir();zt();to();gr();o(BZ,"textHelper");o(Vw,"addText")});async function $Z(t,e){let r=me(),n=r.class.padding??12,i=n,a=e.useHtmlLabels??fr(r.htmlLabels)??!0,s=e;s.annotations=s.annotations??[],s.members=s.members??[],s.methods=s.methods??[];let{shapeSvg:l,bbox:u}=await BZ(t,e,r,a,i),{labelStyles:h,nodeStyles:f}=Qe(e);e.labelStyle=h,e.cssStyles=s.styles||"";let d=s.styles?.join(";")||f||"";e.cssStyles||(e.cssStyles=d.replaceAll("!important","").split(";"));let p=s.members.length===0&&s.methods.length===0&&!r.class?.hideEmptyMembersBox,m=Xe.svg(l),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=u.width,v=u.height;s.members.length===0&&s.methods.length===0?v+=i:s.members.length>0&&s.methods.length===0&&(v+=i*2);let x=-y/2,b=-v/2,w=m.rectangle(x-n,b-n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0),y+2*n,v+2*n+(p?n*2:s.members.length===0&&s.methods.length===0?-n:0),g),C=l.insert(()=>w,":first-child");C.attr("class","basic label-container");let T=C.node().getBBox();l.selectAll(".text").each((_,I,D)=>{let k=Ge(D[I]),L=k.attr("transform"),R=0;if(L){let F=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(L);F&&(R=parseFloat(F[2]))}let O=R+b+n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0);a||(O-=4);let M=x;(k.attr("class").includes("label-group")||k.attr("class").includes("annotation-group"))&&(M=-k.node()?.getBBox().width/2||0,l.selectAll("text").each(function(B,F,P){window.getComputedStyle(P[F]).textAnchor==="middle"&&(M=0)})),k.attr("transform",`translate(${M}, ${O})`)});let E=l.select(".annotation-group").node().getBBox().height-(p?n/2:0)||0,A=l.select(".label-group").node().getBBox().height-(p?n/2:0)||0,S=l.select(".members-group").node().getBBox().height-(p?n/2:0)||0;if(s.members.length>0||s.methods.length>0||p){let _=m.line(T.x,E+A+b+n,T.x+T.width,E+A+b+n,g);l.insert(()=>_).attr("class","divider").attr("style",d)}if(p||s.members.length>0||s.methods.length>0){let _=m.line(T.x,E+A+S+b+i*2+n,T.x+T.width,E+A+S+b+n+i*2,g);l.insert(()=>_).attr("class","divider").attr("style",d)}if(s.look!=="handDrawn"&&l.selectAll("path").attr("style",d),C.select(":nth-child(2)").attr("style",d),l.selectAll(".divider").select("path").attr("style",d),e.labelStyle?l.selectAll("span").attr("style",e.labelStyle):l.selectAll("span").attr("style",d),!a){let _=RegExp(/color\s*:\s*([^;]*)/),I=_.exec(d);if(I){let D=I[0].replace("color","fill");l.selectAll("tspan").attr("style",D)}else if(h){let D=_.exec(h);if(D){let k=D[0].replace("color","fill");l.selectAll("tspan").attr("style",k)}}}return je(e,C),e.intersect=function(_){return Ye.rect(e,_)},l}var zZ=N(()=>{"use strict";Ft();zt();dr();Wt();Ut();Ht();FZ();gr();o($Z,"classBox")});async function GZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let i=e,a=e,s=20,l=20,u="verifyMethod"in e,h=ht(e),f=t.insert("g").attr("class",h).attr("id",e.domId??e.id),d;u?d=await Lu(f,`&lt;&lt;${i.type}&gt;&gt;`,0,e.labelStyle):d=await Lu(f,"&lt;&lt;Element&gt;&gt;",0,e.labelStyle);let p=d,m=await Lu(f,i.name,p,e.labelStyle+"; font-weight: bold;");if(p+=m+l,u){let E=await Lu(f,`${i.requirementId?`Id: ${i.requirementId}`:""}`,p,e.labelStyle);p+=E;let A=await Lu(f,`${i.text?`Text: ${i.text}`:""}`,p,e.labelStyle);p+=A;let S=await Lu(f,`${i.risk?`Risk: ${i.risk}`:""}`,p,e.labelStyle);p+=S,await Lu(f,`${i.verifyMethod?`Verification: ${i.verifyMethod}`:""}`,p,e.labelStyle)}else{let E=await Lu(f,`${a.type?`Type: ${a.type}`:""}`,p,e.labelStyle);p+=E,await Lu(f,`${a.docRef?`Doc Ref: ${a.docRef}`:""}`,p,e.labelStyle)}let g=(f.node()?.getBBox().width??200)+s,y=(f.node()?.getBBox().height??200)+s,v=-g/2,x=-y/2,b=Xe.svg(f),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let C=b.rectangle(v,x,g,y,w),T=f.insert(()=>C,":first-child");if(T.attr("class","basic label-container").attr("style",n),f.selectAll(".label").each((E,A,S)=>{let _=Ge(S[A]),I=_.attr("transform"),D=0,k=0;if(I){let M=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(I);M&&(D=parseFloat(M[1]),k=parseFloat(M[2]))}let L=k-y/2,R=v+s/2;(A===0||A===1)&&(R=D),_.attr("transform",`translate(${R}, ${L+s})`)}),p>d+m+l){let E=b.line(v,x+d+m+l,v+g,x+d+m+l,w);f.insert(()=>E).attr("style",n)}return je(e,T),e.intersect=function(E){return Ye.rect(e,E)},f}async function Lu(t,e,r,n=""){if(e==="")return 0;let i=t.insert("g").attr("class","label").attr("style",n),a=me(),s=a.htmlLabels??!0,l=await Hn(i,Xy(na(e)),{width:ra(e,a)+50,classes:"markdown-node-label",useHtmlLabels:s,style:n},a),u;if(s){let h=l.children[0],f=Ge(l);u=h.getBoundingClientRect(),f.attr("width",u.width),f.attr("height",u.height)}else{let h=l.children[0];for(let f of h.children)f.textContent=f.textContent.replaceAll("&gt;",">").replaceAll("&lt;","<"),n&&f.setAttribute("style",n);u=l.getBBox(),u.height+=6}return i.attr("transform",`translate(${-u.width/2},${-u.height/2+r})`),u.height}var VZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();ir();zt();to();dr();o(GZ,"requirementBox");o(Lu,"addText")});async function UZ(t,e,{config:r}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n||"";let a=10,s=e.width;e.width=(e.width??200)-10;let{shapeSvg:l,bbox:u,label:h}=await pt(t,e,ht(e)),f=e.padding||10,d="",p;"ticket"in e&&e.ticket&&r?.kanban?.ticketBaseUrl&&(d=r?.kanban?.ticketBaseUrl.replace("#TICKET#",e.ticket),p=l.insert("svg:a",":first-child").attr("class","kanban-ticket-link").attr("xlink:href",d).attr("target","_blank"));let m={useHtmlLabels:e.useHtmlLabels,labelStyle:e.labelStyle||"",width:e.width,img:e.img,padding:e.padding||8,centerLabel:!1},g,y;p?{label:g,bbox:y}=await Dw(p,"ticket"in e&&e.ticket||"",m):{label:g,bbox:y}=await Dw(l,"ticket"in e&&e.ticket||"",m);let{label:v,bbox:x}=await Dw(l,"assigned"in e&&e.assigned||"",m);e.width=s;let b=10,w=e?.width||0,C=Math.max(y.height,x.height)/2,T=Math.max(u.height+b*2,e?.height||0)+C,E=-w/2,A=-T/2;h.attr("transform","translate("+(f-w/2)+", "+(-C-u.height/2)+")"),g.attr("transform","translate("+(f-w/2)+", "+(-C+u.height/2)+")"),v.attr("transform","translate("+(f+w/2-x.width-2*a)+", "+(-C+u.height/2)+")");let S,{rx:_,ry:I}=e,{cssStyles:D}=e;if(e.look==="handDrawn"){let k=Xe.svg(l),L=Ke(e,{}),R=_||I?k.path(Na(E,A,w,T,_||0),L):k.rectangle(E,A,w,T,L);S=l.insert(()=>R,":first-child"),S.attr("class","basic label-container").attr("style",D||null)}else{S=l.insert("rect",":first-child"),S.attr("class","basic label-container __APA__").attr("style",i).attr("rx",_??5).attr("ry",I??5).attr("x",E).attr("y",A).attr("width",w).attr("height",T);let k="priority"in e&&e.priority;if(k){let L=l.append("line"),R=E+2,O=A+Math.floor((_??0)/2),M=A+T-Math.floor((_??0)/2);L.attr("x1",R).attr("y1",O).attr("x2",R).attr("y2",M).attr("stroke-width","4").attr("stroke",k_e(k))}}return je(e,S),e.height=T,e.intersect=function(k){return Ye.rect(e,k)},l}var k_e,HZ=N(()=>{"use strict";Ft();Ht();qh();Ut();Wt();k_e=o(t=>{switch(t){case"Very High":return"red";case"High":return"orange";case"Medium":return null;case"Low":return"blue";case"Very Low":return"lightblue"}},"colorFromPriority");o(UZ,"kanbanItem")});function WZ(t){return t in QD}var E_e,S_e,QD,ZD=N(()=>{"use strict";NK();OK();BK();$K();GK();UK();WK();YK();jK();QK();JK();tQ();nQ();aQ();oQ();cQ();hQ();dQ();mQ();yQ();xQ();wQ();kQ();SQ();AQ();DQ();RQ();MQ();OQ();BQ();$Q();GQ();UQ();WQ();YQ();jQ();QQ();JQ();tZ();nZ();aZ();oZ();cZ();hZ();dZ();mZ();yZ();xZ();wZ();kZ();SZ();AZ();DZ();RZ();MZ();OZ();PZ();zZ();VZ();HZ();E_e=[{semanticName:"Process",name:"Rectangle",shortName:"rect",description:"Standard process shape",aliases:["proc","process","rectangle"],internalAliases:["squareRect"],handler:iZ},{semanticName:"Event",name:"Rounded Rectangle",shortName:"rounded",description:"Represents an event",aliases:["event"],internalAliases:["roundedRect"],handler:ZQ},{semanticName:"Terminal Point",name:"Stadium",shortName:"stadium",description:"Terminal point",aliases:["terminal","pill"],handler:sZ},{semanticName:"Subprocess",name:"Framed Rectangle",shortName:"fr-rect",description:"Subprocess",aliases:["subprocess","subproc","framed-rectangle","subroutine"],handler:pZ},{semanticName:"Database",name:"Cylinder",shortName:"cyl",description:"Database storage",aliases:["db","database","cylinder"],handler:ZK},{semanticName:"Start",name:"Circle",shortName:"circle",description:"Starting point",aliases:["circ"],handler:zK},{semanticName:"Decision",name:"Diamond",shortName:"diam",description:"Decision-making step",aliases:["decision","diamond","question"],handler:qQ},{semanticName:"Prepare Conditional",name:"Hexagon",shortName:"hex",description:"Preparation or condition step",aliases:["hexagon","prepare"],handler:fQ},{semanticName:"Data Input/Output",name:"Lean Right",shortName:"lean-r",description:"Represents input or output",aliases:["lean-right","in-out"],internalAliases:["lean_right"],handler:NQ},{semanticName:"Data Input/Output",name:"Lean Left",shortName:"lean-l",description:"Represents output or input",aliases:["lean-left","out-in"],internalAliases:["lean_left"],handler:LQ},{semanticName:"Priority Action",name:"Trapezoid Base Bottom",shortName:"trap-b",description:"Priority action",aliases:["priority","trapezoid-bottom","trapezoid"],handler:EZ},{semanticName:"Manual Operation",name:"Trapezoid Base Top",shortName:"trap-t",description:"Represents a manual task",aliases:["manual","trapezoid-top","inv-trapezoid"],internalAliases:["inv_trapezoid"],handler:CQ},{semanticName:"Stop",name:"Double Circle",shortName:"dbl-circ",description:"Represents a stop point",aliases:["double-circle"],internalAliases:["doublecircle"],handler:rQ},{semanticName:"Text Block",name:"Text Block",shortName:"text",description:"Text block",handler:bZ},{semanticName:"Card",name:"Notched Rectangle",shortName:"notch-rect",description:"Represents a card",aliases:["card","notched-rectangle"],handler:PK},{semanticName:"Lined/Shaded Process",name:"Lined Rectangle",shortName:"lin-rect",description:"Lined process shape",aliases:["lined-rectangle","lined-process","lin-proc","shaded-process"],handler:eZ},{semanticName:"Start",name:"Small Circle",shortName:"sm-circ",description:"Small starting point",aliases:["start","small-circle"],internalAliases:["stateStart"],handler:fZ},{semanticName:"Stop",name:"Framed Circle",shortName:"fr-circ",description:"Stop point",aliases:["stop","framed-circle"],internalAliases:["stateEnd"],handler:uZ},{semanticName:"Fork/Join",name:"Filled Rectangle",shortName:"fork",description:"Fork or join in process flow",aliases:["join"],internalAliases:["forkJoin"],handler:lQ},{semanticName:"Collate",name:"Hourglass",shortName:"hourglass",description:"Represents a collate operation",aliases:["hourglass","collate"],handler:pQ},{semanticName:"Comment",name:"Curly Brace",shortName:"brace",description:"Adds a comment",aliases:["comment","brace-l"],handler:HK},{semanticName:"Comment Right",name:"Curly Brace",shortName:"brace-r",description:"Adds a comment",handler:qK},{semanticName:"Comment with braces on both sides",name:"Curly Braces",shortName:"braces",description:"Adds a comment",handler:XK},{semanticName:"Com Link",name:"Lightning Bolt",shortName:"bolt",description:"Communication link",aliases:["com-link","lightning-bolt"],handler:IQ},{semanticName:"Document",name:"Document",shortName:"doc",description:"Represents a document",aliases:["doc","document"],handler:LZ},{semanticName:"Delay",name:"Half-Rounded Rectangle",shortName:"delay",description:"Represents a delay",aliases:["half-rounded-rectangle"],handler:uQ},{semanticName:"Direct Access Storage",name:"Horizontal Cylinder",shortName:"h-cyl",description:"Direct access storage",aliases:["das","horizontal-cylinder"],handler:TZ},{semanticName:"Disk Storage",name:"Lined Cylinder",shortName:"lin-cyl",description:"Disk storage",aliases:["disk","lined-cylinder"],handler:PQ},{semanticName:"Display",name:"Curved Trapezoid",shortName:"curv-trap",description:"Represents a display",aliases:["curved-trapezoid","display"],handler:KK},{semanticName:"Divided Process",name:"Divided Rectangle",shortName:"div-rect",description:"Divided process shape",aliases:["div-proc","divided-rectangle","divided-process"],handler:eQ},{semanticName:"Extract",name:"Triangle",shortName:"tri",description:"Extraction process",aliases:["extract","triangle"],handler:_Z},{semanticName:"Internal Storage",name:"Window Pane",shortName:"win-pane",description:"Internal storage",aliases:["internal-storage","window-pane"],handler:IZ},{semanticName:"Junction",name:"Filled Circle",shortName:"f-circ",description:"Junction point",aliases:["junction","filled-circle"],handler:iQ},{semanticName:"Loop Limit",name:"Trapezoidal Pentagon",shortName:"notch-pent",description:"Loop limit step",aliases:["loop-limit","notched-pentagon"],handler:CZ},{semanticName:"Manual File",name:"Flipped Triangle",shortName:"flip-tri",description:"Manual file operation",aliases:["manual-file","flipped-triangle"],handler:sQ},{semanticName:"Manual Input",name:"Sloped Rectangle",shortName:"sl-rect",description:"Manual input step",aliases:["manual-input","sloped-rectangle"],handler:rZ},{semanticName:"Multi-Document",name:"Stacked Document",shortName:"docs",description:"Multiple documents",aliases:["documents","st-doc","stacked-document"],handler:VQ},{semanticName:"Multi-Process",name:"Stacked Rectangle",shortName:"st-rect",description:"Multiple processes",aliases:["procs","processes","stacked-rectangle"],handler:zQ},{semanticName:"Stored Data",name:"Bow Tie Rectangle",shortName:"bow-rect",description:"Stored data",aliases:["stored-data","bow-tie-rectangle"],handler:IK},{semanticName:"Summary",name:"Crossed Circle",shortName:"cross-circ",description:"Summary",aliases:["summary","crossed-circle"],handler:VK},{semanticName:"Tagged Document",name:"Tagged Document",shortName:"tag-doc",description:"Tagged document",aliases:["tag-doc","tagged-document"],handler:vZ},{semanticName:"Tagged Process",name:"Tagged Rectangle",shortName:"tag-rect",description:"Tagged process",aliases:["tagged-rectangle","tag-proc","tagged-process"],handler:gZ},{semanticName:"Paper Tape",name:"Flag",shortName:"flag",description:"Paper tape",aliases:["paper-tape"],handler:NZ},{semanticName:"Odd",name:"Odd",shortName:"odd",description:"Odd shape",internalAliases:["rect_left_inv_arrow"],handler:XQ},{semanticName:"Lined Document",name:"Lined Document",shortName:"lin-doc",description:"Lined document",aliases:["lined-document"],handler:FQ}],S_e=o(()=>{let e=[...Object.entries({state:lZ,choice:FK,note:HQ,rectWithTitle:KQ,labelRect:_Q,iconSquare:TQ,iconCircle:vQ,icon:gQ,iconRounded:bQ,imageSquare:EQ,anchor:RK,kanbanItem:UZ,classBox:$Z,erBox:KD,requirementBox:GZ}),...E_e.flatMap(r=>[r.shortName,..."aliases"in r?r.aliases:[],..."internalAliases"in r?r.internalAliases:[]].map(i=>[i,r.handler]))];return Object.fromEntries(e)},"generateShapeMap"),QD=S_e();o(WZ,"isValidShape")});var C_e,Uw,qZ=N(()=>{"use strict";dr();Ew();zt();vt();ZD();ir();gr();mi();C_e="flowchart-",Uw=class{constructor(){this.vertexCounter=0;this.config=me();this.vertices=new Map;this.edges=[];this.classes=new Map;this.subGraphs=[];this.subGraphLookup=new Map;this.tooltips=new Map;this.subCount=0;this.firstGraphFlag=!0;this.secCount=-1;this.posCrossRef=[];this.funs=[];this.setAccTitle=Lr;this.setAccDescription=Nr;this.setDiagramTitle=$r;this.getAccTitle=Rr;this.getAccDescription=Mr;this.getDiagramTitle=Ir;this.funs.push(this.setupToolTips.bind(this)),this.addVertex=this.addVertex.bind(this),this.firstGraph=this.firstGraph.bind(this),this.setDirection=this.setDirection.bind(this),this.addSubGraph=this.addSubGraph.bind(this),this.addLink=this.addLink.bind(this),this.setLink=this.setLink.bind(this),this.updateLink=this.updateLink.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.destructLink=this.destructLink.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setTooltip=this.setTooltip.bind(this),this.updateLinkInterpolate=this.updateLinkInterpolate.bind(this),this.setClickFun=this.setClickFun.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.lex={firstGraph:this.firstGraph.bind(this)},this.clear(),this.setGen("gen-2")}static{o(this,"FlowDB")}sanitizeText(e){return Ze.sanitizeText(e,this.config)}lookUpDomId(e){for(let r of this.vertices.values())if(r.id===e)return r.domId;return e}addVertex(e,r,n,i,a,s,l={},u){if(!e||e.trim().length===0)return;let h;if(u!==void 0){let m;u.includes(`
463 +`)?m=u+`
464 +`:m=`{
465 +`+u+`
466 +}`,h=cm(m,{schema:lm})}let f=this.edges.find(m=>m.id===e);if(f){let m=h;m?.animate!==void 0&&(f.animate=m.animate),m?.animation!==void 0&&(f.animation=m.animation);return}let d,p=this.vertices.get(e);if(p===void 0&&(p={id:e,labelType:"text",domId:C_e+e+"-"+this.vertexCounter,styles:[],classes:[]},this.vertices.set(e,p)),this.vertexCounter++,r!==void 0?(this.config=me(),d=this.sanitizeText(r.text.trim()),p.labelType=r.type,d.startsWith('"')&&d.endsWith('"')&&(d=d.substring(1,d.length-1)),p.text=d):p.text===void 0&&(p.text=e),n!==void 0&&(p.type=n),i?.forEach(m=>{p.styles.push(m)}),a?.forEach(m=>{p.classes.push(m)}),s!==void 0&&(p.dir=s),p.props===void 0?p.props=l:l!==void 0&&Object.assign(p.props,l),h!==void 0){if(h.shape){if(h.shape!==h.shape.toLowerCase()||h.shape.includes("_"))throw new Error(`No such shape: ${h.shape}. Shape names should be lowercase.`);if(!WZ(h.shape))throw new Error(`No such shape: ${h.shape}.`);p.type=h?.shape}h?.label&&(p.text=h?.label),h?.icon&&(p.icon=h?.icon,!h.label?.trim()&&p.text===e&&(p.text="")),h?.form&&(p.form=h?.form),h?.pos&&(p.pos=h?.pos),h?.img&&(p.img=h?.img,!h.label?.trim()&&p.text===e&&(p.text="")),h?.constraint&&(p.constraint=h.constraint),h.w&&(p.assetWidth=Number(h.w)),h.h&&(p.assetHeight=Number(h.h))}}addSingleLink(e,r,n,i){let l={start:e,end:r,type:void 0,text:"",labelType:"text",classes:[],isUserDefinedId:!1,interpolate:this.edges.defaultInterpolate};Y.info("abc78 Got edge...",l);let u=n.text;if(u!==void 0&&(l.text=this.sanitizeText(u.text.trim()),l.text.startsWith('"')&&l.text.endsWith('"')&&(l.text=l.text.substring(1,l.text.length-1)),l.labelType=u.type),n!==void 0&&(l.type=n.type,l.stroke=n.stroke,l.length=n.length>10?10:n.length),i&&!this.edges.some(h=>h.id===i))l.id=i,l.isUserDefinedId=!0;else{let h=this.edges.filter(f=>f.start===l.start&&f.end===l.end);h.length===0?l.id=$h(l.start,l.end,{counter:0,prefix:"L"}):l.id=$h(l.start,l.end,{counter:h.length+1,prefix:"L"})}if(this.edges.length<(this.config.maxEdges??500))Y.info("Pushing edge..."),this.edges.push(l);else throw new Error(`Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}.
467 +
468 +Initialize mermaid with maxEdges set to a higher number to allow more edges.
469 +You cannot set this config via configuration inside the diagram as it is a secure config.
470 +You have to call mermaid.initialize.`)}isLinkData(e){return e!==null&&typeof e=="object"&&"id"in e&&typeof e.id=="string"}addLink(e,r,n){let i=this.isLinkData(n)?n.id.replace("@",""):void 0;Y.info("addLink",e,r,i);for(let a of e)for(let s of r){let l=a===e[e.length-1],u=s===r[0];l&&u?this.addSingleLink(a,s,n,i):this.addSingleLink(a,s,n,void 0)}}updateLinkInterpolate(e,r){e.forEach(n=>{n==="default"?this.edges.defaultInterpolate=r:this.edges[n].interpolate=r})}updateLink(e,r){e.forEach(n=>{if(typeof n=="number"&&n>=this.edges.length)throw new Error(`The index ${n} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${this.edges.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);n==="default"?this.edges.defaultStyle=r:(this.edges[n].style=r,(this.edges[n]?.style?.length??0)>0&&!this.edges[n]?.style?.some(i=>i?.startsWith("fill"))&&this.edges[n]?.style?.push("fill:none"))})}addClass(e,r){let n=r.join().replace(/\\,/g,"\xA7\xA7\xA7").replace(/,/g,";").replace(/§§§/g,",").split(";");e.split(",").forEach(i=>{let a=this.classes.get(i);a===void 0&&(a={id:i,styles:[],textStyles:[]},this.classes.set(i,a)),n?.forEach(s=>{if(/color/.exec(s)){let l=s.replace("fill","bgFill");a.textStyles.push(l)}a.styles.push(s)})})}setDirection(e){this.direction=e,/.*</.exec(this.direction)&&(this.direction="RL"),/.*\^/.exec(this.direction)&&(this.direction="BT"),/.*>/.exec(this.direction)&&(this.direction="LR"),/.*v/.exec(this.direction)&&(this.direction="TB"),this.direction==="TD"&&(this.direction="TB")}setClass(e,r){for(let n of e.split(",")){let i=this.vertices.get(n);i&&i.classes.push(r);let a=this.edges.find(l=>l.id===n);a&&a.classes.push(r);let s=this.subGraphLookup.get(n);s&&s.classes.push(r)}}setTooltip(e,r){if(r!==void 0){r=this.sanitizeText(r);for(let n of e.split(","))this.tooltips.set(this.version==="gen-1"?this.lookUpDomId(n):n,r)}}setClickFun(e,r,n){let i=this.lookUpDomId(e);if(me().securityLevel!=="loose"||r===void 0)return;let a=[];if(typeof n=="string"){a=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let l=0;l<a.length;l++){let u=a[l].trim();u.startsWith('"')&&u.endsWith('"')&&(u=u.substr(1,u.length-2)),a[l]=u}}a.length===0&&a.push(e);let s=this.vertices.get(e);s&&(s.haveCallback=!0,this.funs.push(()=>{let l=document.querySelector(`[id="${i}"]`);l!==null&&l.addEventListener("click",()=>{Gt.runFunc(r,...a)},!1)}))}setLink(e,r,n){e.split(",").forEach(i=>{let a=this.vertices.get(i);a!==void 0&&(a.link=Gt.formatUrl(r,this.config),a.linkTarget=n)}),this.setClass(e,"clickable")}getTooltip(e){return this.tooltips.get(e)}setClickEvent(e,r,n){e.split(",").forEach(i=>{this.setClickFun(i,r,n)}),this.setClass(e,"clickable")}bindFunctions(e){this.funs.forEach(r=>{r(e)})}getDirection(){return this.direction?.trim()}getVertices(){return this.vertices}getEdges(){return this.edges}getClasses(){return this.classes}setupToolTips(e){let r=Ge(".mermaidTooltip");(r._groups||r)[0][0]===null&&(r=Ge("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),Ge(e).select("svg").selectAll("g.node").on("mouseover",a=>{let s=Ge(a.currentTarget);if(s.attr("title")===null)return;let u=a.currentTarget?.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.text(s.attr("title")).style("left",window.scrollX+u.left+(u.right-u.left)/2+"px").style("top",window.scrollY+u.bottom+"px"),r.html(r.html().replace(/&lt;br\/&gt;/g,"<br/>")),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),Ge(a.currentTarget).classed("hover",!1)})}clear(e="gen-2"){this.vertices=new Map,this.classes=new Map,this.edges=[],this.funs=[this.setupToolTips.bind(this)],this.subGraphs=[],this.subGraphLookup=new Map,this.subCount=0,this.tooltips=new Map,this.firstGraphFlag=!0,this.version=e,this.config=me(),Ar()}setGen(e){this.version=e||"gen-2"}defaultStyle(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"}addSubGraph(e,r,n){let i=e.text.trim(),a=n.text;e===n&&/\s/.exec(n.text)&&(i=void 0);let s=o(f=>{let d={boolean:{},number:{},string:{}},p=[],m;return{nodeList:f.filter(function(y){let v=typeof y;return y.stmt&&y.stmt==="dir"?(m=y.value,!1):y.trim()===""?!1:v in d?d[v].hasOwnProperty(y)?!1:d[v][y]=!0:p.includes(y)?!1:p.push(y)}),dir:m}},"uniq"),{nodeList:l,dir:u}=s(r.flat());if(this.version==="gen-1")for(let f=0;f<l.length;f++)l[f]=this.lookUpDomId(l[f]);i=i??"subGraph"+this.subCount,a=a||"",a=this.sanitizeText(a),this.subCount=this.subCount+1;let h={id:i,nodes:l,title:a.trim(),classes:[],dir:u,labelType:n.type};return Y.info("Adding",h.id,h.nodes,h.dir),h.nodes=this.makeUniq(h,this.subGraphs).nodes,this.subGraphs.push(h),this.subGraphLookup.set(i,h),i}getPosForId(e){for(let[r,n]of this.subGraphs.entries())if(n.id===e)return r;return-1}indexNodes2(e,r){let n=this.subGraphs[r].nodes;if(this.secCount=this.secCount+1,this.secCount>2e3)return{result:!1,count:0};if(this.posCrossRef[this.secCount]=r,this.subGraphs[r].id===e)return{result:!0,count:0};let i=0,a=1;for(;i<n.length;){let s=this.getPosForId(n[i]);if(s>=0){let l=this.indexNodes2(e,s);if(l.result)return{result:!0,count:a+l.count};a=a+l.count}i=i+1}return{result:!1,count:a}}getDepthFirstPos(e){return this.posCrossRef[e]}indexNodes(){this.secCount=-1,this.subGraphs.length>0&&this.indexNodes2("none",this.subGraphs.length-1)}getSubGraphs(){return this.subGraphs}firstGraph(){return this.firstGraphFlag?(this.firstGraphFlag=!1,!0):!1}destructStartLink(e){let r=e.trim(),n="arrow_open";switch(r[0]){case"<":n="arrow_point",r=r.slice(1);break;case"x":n="arrow_cross",r=r.slice(1);break;case"o":n="arrow_circle",r=r.slice(1);break}let i="normal";return r.includes("=")&&(i="thick"),r.includes(".")&&(i="dotted"),{type:n,stroke:i}}countChar(e,r){let n=r.length,i=0;for(let a=0;a<n;++a)r[a]===e&&++i;return i}destructEndLink(e){let r=e.trim(),n=r.slice(0,-1),i="arrow_open";switch(r.slice(-1)){case"x":i="arrow_cross",r.startsWith("x")&&(i="double_"+i,n=n.slice(1));break;case">":i="arrow_point",r.startsWith("<")&&(i="double_"+i,n=n.slice(1));break;case"o":i="arrow_circle",r.startsWith("o")&&(i="double_"+i,n=n.slice(1));break}let a="normal",s=n.length-1;n.startsWith("=")&&(a="thick"),n.startsWith("~")&&(a="invisible");let l=this.countChar(".",n);return l&&(a="dotted",s=l),{type:i,stroke:a,length:s}}destructLink(e,r){let n=this.destructEndLink(e),i;if(r){if(i=this.destructStartLink(r),i.stroke!==n.stroke)return{type:"INVALID",stroke:"INVALID"};if(i.type==="arrow_open")i.type=n.type;else{if(i.type!==n.type)return{type:"INVALID",stroke:"INVALID"};i.type="double_"+i.type}return i.type==="double_arrow"&&(i.type="double_arrow_point"),i.length=n.length,i}return n}exists(e,r){for(let n of e)if(n.nodes.includes(r))return!0;return!1}makeUniq(e,r){let n=[];return e.nodes.forEach((i,a)=>{this.exists(r,i)||n.push(e.nodes[a])}),{nodes:n}}getTypeFromVertex(e){if(e.img)return"imageSquare";if(e.icon)return e.form==="circle"?"iconCircle":e.form==="square"?"iconSquare":e.form==="rounded"?"iconRounded":"icon";switch(e.type){case"square":case void 0:return"squareRect";case"round":return"roundedRect";case"ellipse":return"ellipse";default:return e.type}}findNode(e,r){return e.find(n=>n.id===r)}destructEdgeType(e){let r="none",n="arrow_point";switch(e){case"arrow_point":case"arrow_circle":case"arrow_cross":n=e;break;case"double_arrow_point":case"double_arrow_circle":case"double_arrow_cross":r=e.replace("double_",""),n=r;break}return{arrowTypeStart:r,arrowTypeEnd:n}}addNodeFromVertex(e,r,n,i,a,s){let l=n.get(e.id),u=i.get(e.id)??!1,h=this.findNode(r,e.id);if(h)h.cssStyles=e.styles,h.cssCompiledStyles=this.getCompiledStyles(e.classes),h.cssClasses=e.classes.join(" ");else{let f={id:e.id,label:e.text,labelStyle:"",parentId:l,padding:a.flowchart?.padding||8,cssStyles:e.styles,cssCompiledStyles:this.getCompiledStyles(["default","node",...e.classes]),cssClasses:"default "+e.classes.join(" "),dir:e.dir,domId:e.domId,look:s,link:e.link,linkTarget:e.linkTarget,tooltip:this.getTooltip(e.id),icon:e.icon,pos:e.pos,img:e.img,assetWidth:e.assetWidth,assetHeight:e.assetHeight,constraint:e.constraint};u?r.push({...f,isGroup:!0,shape:"rect"}):r.push({...f,isGroup:!1,shape:this.getTypeFromVertex(e)})}}getCompiledStyles(e){let r=[];for(let n of e){let i=this.classes.get(n);i?.styles&&(r=[...r,...i.styles??[]].map(a=>a.trim())),i?.textStyles&&(r=[...r,...i.textStyles??[]].map(a=>a.trim()))}return r}getData(){let e=me(),r=[],n=[],i=this.getSubGraphs(),a=new Map,s=new Map;for(let h=i.length-1;h>=0;h--){let f=i[h];f.nodes.length>0&&s.set(f.id,!0);for(let d of f.nodes)a.set(d,f.id)}for(let h=i.length-1;h>=0;h--){let f=i[h];r.push({id:f.id,label:f.title,labelStyle:"",parentId:a.get(f.id),padding:8,cssCompiledStyles:this.getCompiledStyles(f.classes),cssClasses:f.classes.join(" "),shape:"rect",dir:f.dir,isGroup:!0,look:e.look})}this.getVertices().forEach(h=>{this.addNodeFromVertex(h,r,a,s,e,e.look||"classic")});let u=this.getEdges();return u.forEach((h,f)=>{let{arrowTypeStart:d,arrowTypeEnd:p}=this.destructEdgeType(h.type),m=[...u.defaultStyle??[]];h.style&&m.push(...h.style);let g={id:$h(h.start,h.end,{counter:f,prefix:"L"},h.id),isUserDefinedId:h.isUserDefinedId,start:h.start,end:h.end,type:h.type??"normal",label:h.text,labelpos:"c",thickness:h.stroke,minlen:h.length,classes:h?.stroke==="invisible"?"":"edge-thickness-normal edge-pattern-solid flowchart-link",arrowTypeStart:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":d,arrowTypeEnd:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":p,arrowheadStyle:"fill: #333",cssCompiledStyles:this.getCompiledStyles(h.classes),labelStyle:m,style:m,pattern:h.stroke,look:e.look,animate:h.animate,animation:h.animation,curve:h.interpolate||this.edges.defaultInterpolate||e.flowchart?.curve};n.push(g)}),{nodes:r,edges:n,other:{},config:e}}defaultConfig(){return A3.flowchart}}});var yc,gm=N(()=>{"use strict";dr();yc=o((t,e)=>{let r;return e==="sandbox"&&(r=Ge("#i"+t)),(e==="sandbox"?Ge(r.nodes()[0].contentDocument.body):Ge("body")).select(`[id="${t}"]`)},"getDiagramElement")});var Ru,w2=N(()=>{"use strict";Ru=o(({flowchart:t})=>{let e=t?.subGraphTitleMargin?.top??0,r=t?.subGraphTitleMargin?.bottom??0,n=e+r;return{subGraphTitleTopMargin:e,subGraphTitleBottomMargin:r,subGraphTitleTotalMargin:n}},"getSubGraphTitleMargins")});var YZ,A_e,__e,D_e,L_e,R_e,N_e,XZ,ym,jZ,Hw=N(()=>{"use strict";zt();gr();vt();w2();dr();Wt();to();RD();Gw();qh();Ut();YZ=o(async(t,e)=>{Y.info("Creating subgraph rect for ",e.id,e);let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=Qe(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=fr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await Hn(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0}),y=g.getBBox();if(fr(r.flowchart.htmlLabels)){let A=g.children[0],S=Ge(g);y=A.getBoundingClientRect(),S.attr("width",y.width),S.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,w=e.y-x/2;Y.trace("Data ",e,JSON.stringify(e));let C;if(e.look==="handDrawn"){let A=Xe.svg(d),S=Ke(e,{roughness:.7,fill:a,stroke:s,fillWeight:3,seed:i}),_=A.path(Na(b,w,v,x,0),S);C=d.insert(()=>(Y.debug("Rough node insert CXC",_),_),":first-child"),C.select("path:nth-child(2)").attr("style",h.join(";")),C.select("path").attr("style",f.join(";").replace("fill","stroke"))}else C=d.insert("rect",":first-child"),C.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",w).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:T}=Ru(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+T})`),l){let A=m.select("span");A&&A.attr("style",l)}let E=C.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(A){return Vh(e,A)},{cluster:d,labelBBox:y}},"rect"),A_e=o((t,e)=>{let r=t.insert("g").attr("class","note-cluster").attr("id",e.id),n=r.insert("rect",":first-child"),i=0*e.padding,a=i/2;n.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");let s=n.node().getBBox();return e.width=s.width,e.height=s.height,e.intersect=function(l){return Vh(e,l)},{cluster:r,labelBBox:{width:0,height:0}}},"noteGroup"),__e=o(async(t,e)=>{let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{altBackground:a,compositeBackground:s,compositeTitleBackground:l,nodeBorder:u}=n,h=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-id",e.id).attr("data-look",e.look),f=h.insert("g",":first-child"),d=h.insert("g").attr("class","cluster-label"),p=h.append("rect"),m=d.node().appendChild(await gc(e.label,e.labelStyle,void 0,!0)),g=m.getBBox();if(fr(r.flowchart.htmlLabels)){let _=m.children[0],I=Ge(m);g=_.getBoundingClientRect(),I.attr("width",g.width),I.attr("height",g.height)}let y=0*e.padding,v=y/2,x=(e.width<=g.width+e.padding?g.width+e.padding:e.width)+y;e.width<=g.width+e.padding?e.diff=(x-e.width)/2-e.padding:e.diff=-e.padding;let b=e.height+y,w=e.height+y-g.height-6,C=e.x-x/2,T=e.y-b/2;e.width=x;let E=e.y-e.height/2-v+g.height+2,A;if(e.look==="handDrawn"){let _=e.cssClasses.includes("statediagram-cluster-alt"),I=Xe.svg(h),D=e.rx||e.ry?I.path(Na(C,T,x,b,10),{roughness:.7,fill:l,fillStyle:"solid",stroke:u,seed:i}):I.rectangle(C,T,x,b,{seed:i});A=h.insert(()=>D,":first-child");let k=I.rectangle(C,E,x,w,{fill:_?a:s,fillStyle:_?"hachure":"solid",stroke:u,seed:i});A=h.insert(()=>D,":first-child"),p=h.insert(()=>k)}else A=f.insert("rect",":first-child"),A.attr("class","outer").attr("x",C).attr("y",T).attr("width",x).attr("height",b).attr("data-look",e.look),p.attr("class","inner").attr("x",C).attr("y",E).attr("width",x).attr("height",w);d.attr("transform",`translate(${e.x-g.width/2}, ${T+1-(fr(r.flowchart.htmlLabels)?0:3)})`);let S=A.node().getBBox();return e.height=S.height,e.offsetX=0,e.offsetY=g.height-e.padding/2,e.labelBBox=g,e.intersect=function(_){return Vh(e,_)},{cluster:h,labelBBox:g}},"roundedWithTitle"),D_e=o(async(t,e)=>{Y.info("Creating subgraph rect for ",e.id,e);let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=Qe(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=fr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await Hn(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0,width:e.width}),y=g.getBBox();if(fr(r.flowchart.htmlLabels)){let A=g.children[0],S=Ge(g);y=A.getBoundingClientRect(),S.attr("width",y.width),S.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,w=e.y-x/2;Y.trace("Data ",e,JSON.stringify(e));let C;if(e.look==="handDrawn"){let A=Xe.svg(d),S=Ke(e,{roughness:.7,fill:a,stroke:s,fillWeight:4,seed:i}),_=A.path(Na(b,w,v,x,e.rx),S);C=d.insert(()=>(Y.debug("Rough node insert CXC",_),_),":first-child"),C.select("path:nth-child(2)").attr("style",h.join(";")),C.select("path").attr("style",f.join(";").replace("fill","stroke"))}else C=d.insert("rect",":first-child"),C.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",w).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:T}=Ru(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+T})`),l){let A=m.select("span");A&&A.attr("style",l)}let E=C.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(A){return Vh(e,A)},{cluster:d,labelBBox:y}},"kanbanSection"),L_e=o((t,e)=>{let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{nodeBorder:a}=n,s=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-look",e.look),l=s.insert("g",":first-child"),u=0*e.padding,h=e.width+u;e.diff=-e.padding;let f=e.height+u,d=e.x-h/2,p=e.y-f/2;e.width=h;let m;if(e.look==="handDrawn"){let v=Xe.svg(s).rectangle(d,p,h,f,{fill:"lightgrey",roughness:.5,strokeLineDash:[5],stroke:a,seed:i});m=s.insert(()=>v,":first-child")}else m=l.insert("rect",":first-child"),m.attr("class","divider").attr("x",d).attr("y",p).attr("width",h).attr("height",f).attr("data-look",e.look);let g=m.node().getBBox();return e.height=g.height,e.offsetX=0,e.offsetY=0,e.intersect=function(y){return Vh(e,y)},{cluster:s,labelBBox:{}}},"divider"),R_e=YZ,N_e={rect:YZ,squareRect:R_e,roundedWithTitle:__e,noteGroup:A_e,divider:L_e,kanbanSection:D_e},XZ=new Map,ym=o(async(t,e)=>{let r=e.shape||"rect",n=await N_e[r](t,e);return XZ.set(e.id,n),n},"insertCluster"),jZ=o(()=>{XZ=new Map},"clear")});function Ww(t,e){if(t===void 0||e===void 0)return{angle:0,deltaX:0,deltaY:0};t=Wn(t),e=Wn(e);let[r,n]=[t.x,t.y],[i,a]=[e.x,e.y],s=i-r,l=a-n;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}var $o,Wn,qw,JD=N(()=>{"use strict";$o={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:4};o(Ww,"calculateDeltaAndAngle");Wn=o(t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,"pointTransformer"),qw=o(t=>({x:o(function(e,r,n){let i=0,a=Wn(n[0]).x<Wn(n[n.length-1]).x?"left":"right";if(r===0&&Object.hasOwn($o,t.arrowTypeStart)){let{angle:m,deltaX:g}=Ww(n[0],n[1]);i=$o[t.arrowTypeStart]*Math.cos(m)*(g>=0?1:-1)}else if(r===n.length-1&&Object.hasOwn($o,t.arrowTypeEnd)){let{angle:m,deltaX:g}=Ww(n[n.length-1],n[n.length-2]);i=$o[t.arrowTypeEnd]*Math.cos(m)*(g>=0?1:-1)}let s=Math.abs(Wn(e).x-Wn(n[n.length-1]).x),l=Math.abs(Wn(e).y-Wn(n[n.length-1]).y),u=Math.abs(Wn(e).x-Wn(n[0]).x),h=Math.abs(Wn(e).y-Wn(n[0]).y),f=$o[t.arrowTypeStart],d=$o[t.arrowTypeEnd],p=1;if(s<d&&s>0&&l<d){let m=d+p-s;m*=a==="right"?-1:1,i-=m}if(u<f&&u>0&&h<f){let m=f+p-u;m*=a==="right"?-1:1,i+=m}return Wn(e).x+i},"x"),y:o(function(e,r,n){let i=0,a=Wn(n[0]).y<Wn(n[n.length-1]).y?"down":"up";if(r===0&&Object.hasOwn($o,t.arrowTypeStart)){let{angle:m,deltaY:g}=Ww(n[0],n[1]);i=$o[t.arrowTypeStart]*Math.abs(Math.sin(m))*(g>=0?1:-1)}else if(r===n.length-1&&Object.hasOwn($o,t.arrowTypeEnd)){let{angle:m,deltaY:g}=Ww(n[n.length-1],n[n.length-2]);i=$o[t.arrowTypeEnd]*Math.abs(Math.sin(m))*(g>=0?1:-1)}let s=Math.abs(Wn(e).y-Wn(n[n.length-1]).y),l=Math.abs(Wn(e).x-Wn(n[n.length-1]).x),u=Math.abs(Wn(e).y-Wn(n[0]).y),h=Math.abs(Wn(e).x-Wn(n[0]).x),f=$o[t.arrowTypeStart],d=$o[t.arrowTypeEnd],p=1;if(s<d&&s>0&&l<d){let m=d+p-s;m*=a==="up"?-1:1,i-=m}if(u<f&&u>0&&h<f){let m=f+p-u;m*=a==="up"?-1:1,i+=m}return Wn(e).y+i},"y")}),"getLineFunctionsWithOffset")});var QZ,M_e,KZ,ZZ=N(()=>{"use strict";vt();QZ=o((t,e,r,n,i,a)=>{e.arrowTypeStart&&KZ(t,"start",e.arrowTypeStart,r,n,i,a),e.arrowTypeEnd&&KZ(t,"end",e.arrowTypeEnd,r,n,i,a)},"addEdgeMarkers"),M_e={arrow_cross:{type:"cross",fill:!1},arrow_point:{type:"point",fill:!0},arrow_barb:{type:"barb",fill:!0},arrow_circle:{type:"circle",fill:!1},aggregation:{type:"aggregation",fill:!1},extension:{type:"extension",fill:!1},composition:{type:"composition",fill:!0},dependency:{type:"dependency",fill:!0},lollipop:{type:"lollipop",fill:!1},only_one:{type:"onlyOne",fill:!1},zero_or_one:{type:"zeroOrOne",fill:!1},one_or_more:{type:"oneOrMore",fill:!1},zero_or_more:{type:"zeroOrMore",fill:!1},requirement_arrow:{type:"requirement_arrow",fill:!1},requirement_contains:{type:"requirement_contains",fill:!1}},KZ=o((t,e,r,n,i,a,s)=>{let l=M_e[r];if(!l){Y.warn(`Unknown arrow type: ${r}`);return}let u=l.type,f=`${i}_${a}-${u}${e==="start"?"Start":"End"}`;if(s&&s.trim()!==""){let d=s.replace(/[^\dA-Za-z]/g,"_"),p=`${f}_${d}`;if(!document.getElementById(p)){let m=document.getElementById(f);if(m){let g=m.cloneNode(!0);g.id=p,g.querySelectorAll("path, circle, line").forEach(v=>{v.setAttribute("stroke",s),l.fill&&v.setAttribute("fill",s)}),m.parentNode?.appendChild(g)}}t.attr(`marker-${e}`,`url(${n}#${p})`)}else t.attr(`marker-${e}`,`url(${n}#${f})`)},"addEdgeMarker")});function Yw(t,e){me().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}function P_e(t){let e=[],r=[];for(let n=1;n<t.length-1;n++){let i=t[n-1],a=t[n],s=t[n+1];(i.x===a.x&&a.y===s.y&&Math.abs(a.x-s.x)>5&&Math.abs(a.y-i.y)>5||i.y===a.y&&a.x===s.x&&Math.abs(a.x-i.x)>5&&Math.abs(a.y-s.y)>5)&&(e.push(a),r.push(n))}return{cornerPoints:e,cornerPointPositions:r}}var Xw,pa,tJ,T2,jw,Kw,I_e,O_e,JZ,eJ,B_e,Qw,eL=N(()=>{"use strict";zt();gr();vt();to();ir();JD();w2();dr();Wt();Gw();ZZ();Ut();Xw=new Map,pa=new Map,tJ=o(()=>{Xw.clear(),pa.clear()},"clear"),T2=o(t=>t?t.reduce((r,n)=>r+";"+n,""):"","getLabelStyles"),jw=o(async(t,e)=>{let r=fr(me().flowchart.htmlLabels),n=await Hn(t,e.label,{style:T2(e.labelStyle),useHtmlLabels:r,addSvgBackground:!0,isNode:!1});Y.info("abc82",e,e.labelType);let i=t.insert("g").attr("class","edgeLabel"),a=i.insert("g").attr("class","label");a.node().appendChild(n);let s=n.getBBox();if(r){let u=n.children[0],h=Ge(n);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}a.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),Xw.set(e.id,i),e.width=s.width,e.height=s.height;let l;if(e.startLabelLeft){let u=await gc(e.startLabelLeft,T2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).startLeft=h,Yw(l,e.startLabelLeft)}if(e.startLabelRight){let u=await gc(e.startLabelRight,T2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=h.node().appendChild(u),f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).startRight=h,Yw(l,e.startLabelRight)}if(e.endLabelLeft){let u=await gc(e.endLabelLeft,T2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).endLeft=h,Yw(l,e.endLabelLeft)}if(e.endLabelRight){let u=await gc(e.endLabelRight,T2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).endRight=h,Yw(l,e.endLabelRight)}return n},"insertEdgeLabel");o(Yw,"setTerminalWidth");Kw=o((t,e)=>{Y.debug("Moving label abc88 ",t.id,t.label,Xw.get(t.id),e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=me(),{subGraphTitleTotalMargin:i}=Ru(n);if(t.label){let a=Xw.get(t.id),s=t.x,l=t.y;if(r){let u=Gt.calcLabelPosition(r);Y.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=pa.get(t.id).startLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=pa.get(t.id).startRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=pa.get(t.id).endLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=pa.get(t.id).endRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),I_e=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),O_e=o((t,e,r)=>{Y.debug(`intersection calc abc89:
471 + outsidePoint: ${JSON.stringify(e)}
472 + insidePoint : ${JSON.stringify(r)}
473 + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.x<e.x?s-a:s+a,u=t.height/2,h=Math.abs(e.y-r.y),f=Math.abs(e.x-r.x);if(Math.abs(i-e.y)*s>Math.abs(n-e.x)*u){let d=r.y<e.y?e.y-u-i:i-u-e.y;l=f*d/h;let p={x:r.x<e.x?r.x+l:r.x-f+l,y:r.y<e.y?r.y+h-d:r.y-h+d};return l===0&&(p.x=e.x,p.y=e.y),f===0&&(p.x=e.x),h===0&&(p.y=e.y),Y.debug(`abc89 top/bottom calc, Q ${h}, q ${d}, R ${f}, r ${l}`,p),p}else{r.x<e.x?l=e.x-s-n:l=n-s-e.x;let d=h*l/f,p=r.x<e.x?r.x+f-l:r.x-f+l,m=r.y<e.y?r.y+d:r.y-d;return Y.debug(`sides calc abc89, Q ${h}, q ${d}, R ${f}, r ${l}`,{_x:p,_y:m}),l===0&&(p=e.x,m=e.y),f===0&&(p=e.x),h===0&&(m=e.y),{x:p,y:m}}},"intersection"),JZ=o((t,e)=>{Y.warn("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(Y.info("abc88 checking point",a,e),!I_e(e,a)&&!i){let s=O_e(e,n,a);Y.debug("abc88 inside",a,n,s),Y.debug("abc88 intersection",s,e);let l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)?Y.warn("abc88 no intersect",s,r):r.push(s),i=!0}else Y.warn("abc88 outside",a,n),n=a,i||r.push(a)}),Y.debug("returning points",r),r},"cutPathAtIntersect");o(P_e,"extractCornerPoints");eJ=o(function(t,e,r){let n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),s=r/a;return{x:e.x-s*n,y:e.y-s*i}},"findAdjacentPoint"),B_e=o(function(t){let{cornerPointPositions:e}=P_e(t),r=[];for(let n=0;n<t.length;n++)if(e.includes(n)){let i=t[n-1],a=t[n+1],s=t[n],l=eJ(i,s,5),u=eJ(a,s,5),h=u.x-l.x,f=u.y-l.y;r.push(l);let d=Math.sqrt(2)*2,p={x:s.x,y:s.y};if(Math.abs(a.x-i.x)>10&&Math.abs(a.y-i.y)>=10){Y.debug("Corner point fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));let m=5;s.x===l.x?p={x:h<0?l.x-m+d:l.x+m-d,y:f<0?l.y-d:l.y+d}:p={x:h<0?l.x-d:l.x+d,y:f<0?l.y-m+d:l.y+m-d}}else Y.debug("Corner point skipping fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));r.push(p,u)}else r.push(t[n]);return r},"fixCorners"),Qw=o(function(t,e,r,n,i,a,s){let{handDrawnSeed:l}=me(),u=e.points,h=!1,f=i;var d=a;let p=[];for(let _ in e.cssCompiledStyles)ND(_)||p.push(e.cssCompiledStyles[_]);d.intersect&&f.intersect&&(u=u.slice(1,e.points.length-1),u.unshift(f.intersect(u[0])),Y.debug("Last point APA12",e.start,"-->",e.end,u[u.length-1],d,d.intersect(u[u.length-1])),u.push(d.intersect(u[u.length-1]))),e.toCluster&&(Y.info("to cluster abc88",r.get(e.toCluster)),u=JZ(e.points,r.get(e.toCluster).node),h=!0),e.fromCluster&&(Y.debug("from cluster abc88",r.get(e.fromCluster),JSON.stringify(u,null,2)),u=JZ(u.reverse(),r.get(e.fromCluster).node).reverse(),h=!0);let m=u.filter(_=>!Number.isNaN(_.y));m=B_e(m);let g=Do;switch(g=wu,e.curve){case"linear":g=wu;break;case"basis":g=Do;break;case"cardinal":g=Pv;break;case"bumpX":g=Rv;break;case"bumpY":g=Nv;break;case"catmullRom":g=$v;break;case"monotoneX":g=zv;break;case"monotoneY":g=Gv;break;case"natural":g=F0;break;case"step":g=$0;break;case"stepAfter":g=Uv;break;case"stepBefore":g=Vv;break;default:g=Do}let{x:y,y:v}=qw(e),x=wl().x(y).y(v).curve(g),b;switch(e.thickness){case"normal":b="edge-thickness-normal";break;case"thick":b="edge-thickness-thick";break;case"invisible":b="edge-thickness-invisible";break;default:b="edge-thickness-normal"}switch(e.pattern){case"solid":b+=" edge-pattern-solid";break;case"dotted":b+=" edge-pattern-dotted";break;case"dashed":b+=" edge-pattern-dashed";break;default:b+=" edge-pattern-solid"}let w,C=x(m),T=Array.isArray(e.style)?e.style:[e.style],E=T.find(_=>_?.startsWith("stroke:"));if(e.look==="handDrawn"){let _=Xe.svg(t);Object.assign([],m);let I=_.path(C,{roughness:.3,seed:l});b+=" transition",w=Ge(I).select("path").attr("id",e.id).attr("class"," "+b+(e.classes?" "+e.classes:"")).attr("style",T?T.reduce((k,L)=>k+";"+L,""):"");let D=w.attr("d");w.attr("d",D),t.node().appendChild(w.node())}else{let _=p.join(";"),I=T?T.reduce((L,R)=>L+R+";",""):"",D="";e.animate&&(D=" edge-animation-fast"),e.animation&&(D=" edge-animation-"+e.animation);let k=_?_+";"+I+";":I;w=t.append("path").attr("d",C).attr("id",e.id).attr("class"," "+b+(e.classes?" "+e.classes:"")+(D??"")).attr("style",k),E=k.match(/stroke:([^;]+)/)?.[1]}let A="";(me().flowchart.arrowMarkerAbsolute||me().state.arrowMarkerAbsolute)&&(A=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,A=A.replace(/\(/g,"\\(").replace(/\)/g,"\\)")),Y.info("arrowTypeStart",e.arrowTypeStart),Y.info("arrowTypeEnd",e.arrowTypeEnd),QZ(w,e,A,s,n,E);let S={};return h&&(S.updatedPath=u),S.originalPath=e.points,S},"insertEdge")});var F_e,$_e,z_e,G_e,V_e,U_e,H_e,W_e,q_e,Y_e,X_e,j_e,K_e,Q_e,Z_e,J_e,e9e,Zw,tL=N(()=>{"use strict";vt();F_e=o((t,e,r,n)=>{e.forEach(i=>{e9e[i](t,r,n)})},"insertMarkers"),$_e=o((t,e,r)=>{Y.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),z_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),G_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),V_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),U_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),H_e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),W_e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),q_e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),Y_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),X_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneStart").attr("class","marker onlyOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneEnd").attr("class","marker onlyOne "+e).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M3,0 L3,18 M9,0 L9,18")},"only_one"),j_e=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneStart").attr("class","marker zeroOrOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("d","M9,0 L9,18");let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneEnd").attr("class","marker zeroOrOne "+e).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),i.append("path").attr("d","M21,0 L21,18")},"zero_or_one"),K_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreStart").attr("class","marker oneOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreEnd").attr("class","marker oneOrMore "+e).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18")},"one_or_more"),Q_e=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreStart").attr("class","marker zeroOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18");let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreEnd").attr("class","marker zeroOrMore "+e).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),i.append("path").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"zero_or_more"),Z_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_arrowEnd").attr("refX",20).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("path").attr("d",`M0,0
474 + L20,10
475 + M20,10
476 + L0,20`)},"requirement_arrow"),J_e=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("g");n.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),n.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),n.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10)},"requirement_contains"),e9e={extension:$_e,composition:z_e,aggregation:G_e,dependency:V_e,lollipop:U_e,point:H_e,circle:W_e,cross:q_e,barb:Y_e,only_one:X_e,zero_or_one:j_e,one_or_more:K_e,zero_or_more:Q_e,requirement_arrow:Z_e,requirement_contains:J_e},Zw=F_e});async function vm(t,e,r){let n,i;e.shape==="rect"&&(e.rx&&e.ry?e.shape="roundedRect":e.shape="squareRect");let a=e.shape?QD[e.shape]:void 0;if(!a)throw new Error(`No such shape: ${e.shape}. Please check your syntax.`);if(e.link){let s;r.config.securityLevel==="sandbox"?s="_top":e.linkTarget&&(s=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",s??null),i=await a(n,e,r)}else i=await a(t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),Jw.set(e.id,n),e.haveCallback&&n.attr("class",n.attr("class")+" clickable"),n}var Jw,rJ,nJ,k2,eT=N(()=>{"use strict";vt();ZD();Jw=new Map;o(vm,"insertNode");rJ=o((t,e)=>{Jw.set(e.id,t)},"setNodeElem"),nJ=o(()=>{Jw.clear()},"clear"),k2=o(t=>{let e=Jw.get(t.id);Y.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});var iJ,aJ=N(()=>{"use strict";ji();gr();vt();Hw();eL();tL();eT();Ft();ir();iJ={common:Ze,getConfig:cr,insertCluster:ym,insertEdge:Qw,insertEdgeLabel:jw,insertMarkers:Zw,insertNode:vm,interpolateToCurve:W9,labelHelper:pt,log:Y,positionEdgeLabel:Kw}});function r9e(t){return typeof t=="symbol"||ri(t)&&da(t)==t9e}var t9e,no,Pd=N(()=>{"use strict";ku();No();t9e="[object Symbol]";o(r9e,"isSymbol");no=r9e});function n9e(t,e){for(var r=-1,n=t==null?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}var Ns,Bd=N(()=>{"use strict";o(n9e,"arrayMap");Ns=n9e});function lJ(t){if(typeof t=="string")return t;if(Pt(t))return Ns(t,lJ)+"";if(no(t))return oJ?oJ.call(t):"";var e=t+"";return e=="0"&&1/t==-i9e?"-0":e}var i9e,sJ,oJ,cJ,uJ=N(()=>{"use strict";Ed();Bd();Un();Pd();i9e=1/0,sJ=ea?ea.prototype:void 0,oJ=sJ?sJ.toString:void 0;o(lJ,"baseToString");cJ=lJ});function s9e(t){for(var e=t.length;e--&&a9e.test(t.charAt(e)););return e}var a9e,hJ,fJ=N(()=>{"use strict";a9e=/\s/;o(s9e,"trimmedEndIndex");hJ=s9e});function l9e(t){return t&&t.slice(0,hJ(t)+1).replace(o9e,"")}var o9e,dJ,pJ=N(()=>{"use strict";fJ();o9e=/^\s+/;o(l9e,"baseTrim");dJ=l9e});function d9e(t){if(typeof t=="number")return t;if(no(t))return mJ;if(bn(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=bn(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=dJ(t);var r=u9e.test(t);return r||h9e.test(t)?f9e(t.slice(2),r?2:8):c9e.test(t)?mJ:+t}var mJ,c9e,u9e,h9e,f9e,gJ,yJ=N(()=>{"use strict";pJ();Js();Pd();mJ=NaN,c9e=/^[-+]0x[0-9a-f]+$/i,u9e=/^0b[01]+$/i,h9e=/^0o[0-7]+$/i,f9e=parseInt;o(d9e,"toNumber");gJ=d9e});function m9e(t){if(!t)return t===0?t:0;if(t=gJ(t),t===vJ||t===-vJ){var e=t<0?-1:1;return e*p9e}return t===t?t:0}var vJ,p9e,xm,rL=N(()=>{"use strict";yJ();vJ=1/0,p9e=17976931348623157e292;o(m9e,"toFinite");xm=m9e});function g9e(t){var e=xm(t),r=e%1;return e===e?r?e-r:e:0}var vc,bm=N(()=>{"use strict";rL();o(g9e,"toInteger");vc=g9e});var y9e,tT,xJ=N(()=>{"use strict";Lh();Lo();y9e=Ss(li,"WeakMap"),tT=y9e});function v9e(){}var ni,nL=N(()=>{"use strict";o(v9e,"noop");ni=v9e});function x9e(t,e){for(var r=-1,n=t==null?0:t.length;++r<n&&e(t[r],r,t)!==!1;);return t}var rT,iL=N(()=>{"use strict";o(x9e,"arrayEach");rT=x9e});function b9e(t,e,r,n){for(var i=t.length,a=r+(n?1:-1);n?a--:++a<i;)if(e(t[a],a,t))return a;return-1}var nT,aL=N(()=>{"use strict";o(b9e,"baseFindIndex");nT=b9e});function w9e(t){return t!==t}var bJ,wJ=N(()=>{"use strict";o(w9e,"baseIsNaN");bJ=w9e});function T9e(t,e,r){for(var n=r-1,i=t.length;++n<i;)if(t[n]===e)return n;return-1}var TJ,kJ=N(()=>{"use strict";o(T9e,"strictIndexOf");TJ=T9e});function k9e(t,e,r){return e===e?TJ(t,e,r):nT(t,bJ,r)}var wm,iT=N(()=>{"use strict";aL();wJ();kJ();o(k9e,"baseIndexOf");wm=k9e});function E9e(t,e){var r=t==null?0:t.length;return!!r&&wm(t,e,0)>-1}var aT,sL=N(()=>{"use strict";iT();o(E9e,"arrayIncludes");aT=E9e});var S9e,EJ,SJ=N(()=>{"use strict";N9();S9e=nw(Object.keys,Object),EJ=S9e});function _9e(t){if(!uc(t))return EJ(t);var e=[];for(var r in Object(t))A9e.call(t,r)&&r!="constructor"&&e.push(r);return e}var C9e,A9e,Tm,sT=N(()=>{"use strict";Z0();SJ();C9e=Object.prototype,A9e=C9e.hasOwnProperty;o(_9e,"baseKeys");Tm=_9e});function D9e(t){return ci(t)?lw(t):Tm(t)}var zr,xc=N(()=>{"use strict";B9();sT();Mo();o(D9e,"keys");zr=D9e});var L9e,R9e,N9e,ma,CJ=N(()=>{"use strict";rm();Dd();G9();Mo();Z0();xc();L9e=Object.prototype,R9e=L9e.hasOwnProperty,N9e=hw(function(t,e){if(uc(e)||ci(e)){Po(e,zr(e),t);return}for(var r in e)R9e.call(e,r)&&hc(t,r,e[r])}),ma=N9e});function O9e(t,e){if(Pt(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||no(t)?!0:I9e.test(t)||!M9e.test(t)||e!=null&&t in Object(e)}var M9e,I9e,km,oT=N(()=>{"use strict";Un();Pd();M9e=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,I9e=/^\w*$/;o(O9e,"isKey");km=O9e});function B9e(t){var e=H0(t,function(n){return r.size===P9e&&r.clear(),n}),r=e.cache;return e}var P9e,AJ,_J=N(()=>{"use strict";S9();P9e=500;o(B9e,"memoizeCapped");AJ=B9e});var F9e,$9e,z9e,DJ,LJ=N(()=>{"use strict";_J();F9e=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$9e=/\\(\\)?/g,z9e=AJ(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(F9e,function(r,n,i,a){e.push(i?a.replace($9e,"$1"):n||r)}),e}),DJ=z9e});function G9e(t){return t==null?"":cJ(t)}var lT,oL=N(()=>{"use strict";uJ();o(G9e,"toString");lT=G9e});function V9e(t,e){return Pt(t)?t:km(t,e)?[t]:DJ(lT(t))}var Yh,E2=N(()=>{"use strict";Un();oT();LJ();oL();o(V9e,"castPath");Yh=V9e});function H9e(t){if(typeof t=="string"||no(t))return t;var e=t+"";return e=="0"&&1/t==-U9e?"-0":e}var U9e,bc,Em=N(()=>{"use strict";Pd();U9e=1/0;o(H9e,"toKey");bc=H9e});function W9e(t,e){e=Yh(e,t);for(var r=0,n=e.length;t!=null&&r<n;)t=t[bc(e[r++])];return r&&r==n?t:void 0}var Xh,S2=N(()=>{"use strict";E2();Em();o(W9e,"baseGet");Xh=W9e});function q9e(t,e,r){var n=t==null?void 0:Xh(t,e);return n===void 0?r:n}var RJ,NJ=N(()=>{"use strict";S2();o(q9e,"get");RJ=q9e});function Y9e(t,e){for(var r=-1,n=e.length,i=t.length;++r<n;)t[i+r]=e[r];return t}var Sm,cT=N(()=>{"use strict";o(Y9e,"arrayPush");Sm=Y9e});function X9e(t){return Pt(t)||El(t)||!!(MJ&&t&&t[MJ])}var MJ,IJ,OJ=N(()=>{"use strict";Ed();J0();Un();MJ=ea?ea.isConcatSpreadable:void 0;o(X9e,"isFlattenable");IJ=X9e});function PJ(t,e,r,n,i){var a=-1,s=t.length;for(r||(r=IJ),i||(i=[]);++a<s;){var l=t[a];e>0&&r(l)?e>1?PJ(l,e-1,r,n,i):Sm(i,l):n||(i[i.length]=l)}return i}var wc,Cm=N(()=>{"use strict";cT();OJ();o(PJ,"baseFlatten");wc=PJ});function j9e(t){var e=t==null?0:t.length;return e?wc(t,1):[]}var qr,uT=N(()=>{"use strict";Cm();o(j9e,"flatten");qr=j9e});function K9e(t){return uw(cw(t,void 0,qr),t+"")}var BJ,FJ=N(()=>{"use strict";uT();F9();z9();o(K9e,"flatRest");BJ=K9e});function Q9e(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),r=r>i?i:r,r<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var a=Array(i);++n<i;)a[n]=t[n+e];return a}var hT,lL=N(()=>{"use strict";o(Q9e,"baseSlice");hT=Q9e});function sDe(t){return aDe.test(t)}var Z9e,J9e,eDe,tDe,rDe,nDe,iDe,aDe,$J,zJ=N(()=>{"use strict";Z9e="\\ud800-\\udfff",J9e="\\u0300-\\u036f",eDe="\\ufe20-\\ufe2f",tDe="\\u20d0-\\u20ff",rDe=J9e+eDe+tDe,nDe="\\ufe0e\\ufe0f",iDe="\\u200d",aDe=RegExp("["+iDe+Z9e+rDe+nDe+"]");o(sDe,"hasUnicode");$J=sDe});function oDe(t,e,r,n){var i=-1,a=t==null?0:t.length;for(n&&a&&(r=t[++i]);++i<a;)r=e(r,t[i],i,t);return r}var GJ,VJ=N(()=>{"use strict";o(oDe,"arrayReduce");GJ=oDe});function lDe(t,e){return t&&Po(e,zr(e),t)}var UJ,HJ=N(()=>{"use strict";Dd();xc();o(lDe,"baseAssign");UJ=lDe});function cDe(t,e){return t&&Po(e,Cs(e),t)}var WJ,qJ=N(()=>{"use strict";Dd();Bh();o(cDe,"baseAssignIn");WJ=cDe});function uDe(t,e){for(var r=-1,n=t==null?0:t.length,i=0,a=[];++r<n;){var s=t[r];e(s,r,t)&&(a[i++]=s)}return a}var Am,fT=N(()=>{"use strict";o(uDe,"arrayFilter");Am=uDe});function hDe(){return[]}var dT,cL=N(()=>{"use strict";o(hDe,"stubArray");dT=hDe});var fDe,dDe,YJ,pDe,_m,pT=N(()=>{"use strict";fT();cL();fDe=Object.prototype,dDe=fDe.propertyIsEnumerable,YJ=Object.getOwnPropertySymbols,pDe=YJ?function(t){return t==null?[]:(t=Object(t),Am(YJ(t),function(e){return dDe.call(t,e)}))}:dT,_m=pDe});function mDe(t,e){return Po(t,_m(t),e)}var XJ,jJ=N(()=>{"use strict";Dd();pT();o(mDe,"copySymbols");XJ=mDe});var gDe,yDe,mT,uL=N(()=>{"use strict";cT();iw();pT();cL();gDe=Object.getOwnPropertySymbols,yDe=gDe?function(t){for(var e=[];t;)Sm(e,_m(t)),t=Q0(t);return e}:dT,mT=yDe});function vDe(t,e){return Po(t,mT(t),e)}var KJ,QJ=N(()=>{"use strict";Dd();uL();o(vDe,"copySymbolsIn");KJ=vDe});function xDe(t,e,r){var n=e(t);return Pt(t)?n:Sm(n,r(t))}var gT,hL=N(()=>{"use strict";cT();Un();o(xDe,"baseGetAllKeys");gT=xDe});function bDe(t){return gT(t,zr,_m)}var C2,fL=N(()=>{"use strict";hL();pT();xc();o(bDe,"getAllKeys");C2=bDe});function wDe(t){return gT(t,Cs,mT)}var yT,dL=N(()=>{"use strict";hL();uL();Bh();o(wDe,"getAllKeysIn");yT=wDe});var TDe,vT,ZJ=N(()=>{"use strict";Lh();Lo();TDe=Ss(li,"DataView"),vT=TDe});var kDe,xT,JJ=N(()=>{"use strict";Lh();Lo();kDe=Ss(li,"Promise"),xT=kDe});var EDe,jh,pL=N(()=>{"use strict";Lh();Lo();EDe=Ss(li,"Set"),jh=EDe});var eee,SDe,tee,ree,nee,iee,CDe,ADe,_De,DDe,LDe,Fd,io,$d=N(()=>{"use strict";ZJ();K5();JJ();pL();xJ();ku();T9();eee="[object Map]",SDe="[object Object]",tee="[object Promise]",ree="[object Set]",nee="[object WeakMap]",iee="[object DataView]",CDe=Eu(vT),ADe=Eu(Mh),_De=Eu(xT),DDe=Eu(jh),LDe=Eu(tT),Fd=da;(vT&&Fd(new vT(new ArrayBuffer(1)))!=iee||Mh&&Fd(new Mh)!=eee||xT&&Fd(xT.resolve())!=tee||jh&&Fd(new jh)!=ree||tT&&Fd(new tT)!=nee)&&(Fd=o(function(t){var e=da(t),r=e==SDe?t.constructor:void 0,n=r?Eu(r):"";if(n)switch(n){case CDe:return iee;case ADe:return eee;case _De:return tee;case DDe:return ree;case LDe:return nee}return e},"getTag"));io=Fd});function MDe(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&NDe.call(t,"index")&&(r.index=t.index,r.input=t.input),r}var RDe,NDe,aee,see=N(()=>{"use strict";RDe=Object.prototype,NDe=RDe.hasOwnProperty;o(MDe,"initCloneArray");aee=MDe});function IDe(t,e){var r=e?K0(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}var oee,lee=N(()=>{"use strict";ew();o(IDe,"cloneDataView");oee=IDe});function PDe(t){var e=new t.constructor(t.source,ODe.exec(t));return e.lastIndex=t.lastIndex,e}var ODe,cee,uee=N(()=>{"use strict";ODe=/\w*$/;o(PDe,"cloneRegExp");cee=PDe});function BDe(t){return fee?Object(fee.call(t)):{}}var hee,fee,dee,pee=N(()=>{"use strict";Ed();hee=ea?ea.prototype:void 0,fee=hee?hee.valueOf:void 0;o(BDe,"cloneSymbol");dee=BDe});function nLe(t,e,r){var n=t.constructor;switch(e){case qDe:return K0(t);case FDe:case $De:return new n(+t);case YDe:return oee(t,r);case XDe:case jDe:case KDe:case QDe:case ZDe:case JDe:case eLe:case tLe:case rLe:return tw(t,r);case zDe:return new n;case GDe:case HDe:return new n(t);case VDe:return cee(t);case UDe:return new n;case WDe:return dee(t)}}var FDe,$De,zDe,GDe,VDe,UDe,HDe,WDe,qDe,YDe,XDe,jDe,KDe,QDe,ZDe,JDe,eLe,tLe,rLe,mee,gee=N(()=>{"use strict";ew();lee();uee();pee();L9();FDe="[object Boolean]",$De="[object Date]",zDe="[object Map]",GDe="[object Number]",VDe="[object RegExp]",UDe="[object Set]",HDe="[object String]",WDe="[object Symbol]",qDe="[object ArrayBuffer]",YDe="[object DataView]",XDe="[object Float32Array]",jDe="[object Float64Array]",KDe="[object Int8Array]",QDe="[object Int16Array]",ZDe="[object Int32Array]",JDe="[object Uint8Array]",eLe="[object Uint8ClampedArray]",tLe="[object Uint16Array]",rLe="[object Uint32Array]";o(nLe,"initCloneByTag");mee=nLe});function aLe(t){return ri(t)&&io(t)==iLe}var iLe,yee,vee=N(()=>{"use strict";$d();No();iLe="[object Map]";o(aLe,"baseIsMap");yee=aLe});var xee,sLe,bee,wee=N(()=>{"use strict";vee();_d();t2();xee=Oo&&Oo.isMap,sLe=xee?Io(xee):yee,bee=sLe});function lLe(t){return ri(t)&&io(t)==oLe}var oLe,Tee,kee=N(()=>{"use strict";$d();No();oLe="[object Set]";o(lLe,"baseIsSet");Tee=lLe});var Eee,cLe,See,Cee=N(()=>{"use strict";kee();_d();t2();Eee=Oo&&Oo.isSet,cLe=Eee?Io(Eee):Tee,See=cLe});function bT(t,e,r,n,i,a){var s,l=e&uLe,u=e&hLe,h=e&fLe;if(r&&(s=i?r(t,n,i,a):r(t)),s!==void 0)return s;if(!bn(t))return t;var f=Pt(t);if(f){if(s=aee(t),!l)return rw(t,s)}else{var d=io(t),p=d==_ee||d==yLe;if(Sl(t))return J5(t,l);if(d==Dee||d==Aee||p&&!i){if(s=u||p?{}:aw(t),!l)return u?KJ(t,WJ(s,t)):XJ(t,UJ(s,t))}else{if(!_n[d])return i?t:{};s=mee(t,d,l)}}a||(a=new lc);var m=a.get(t);if(m)return m;a.set(t,s),See(t)?t.forEach(function(v){s.add(bT(v,e,r,v,t,a))}):bee(t)&&t.forEach(function(v,x){s.set(x,bT(v,e,r,x,t,a))});var g=h?u?yT:C2:u?Cs:zr,y=f?void 0:g(t);return rT(y||t,function(v,x){y&&(x=v,v=t[x]),hc(s,x,bT(v,e,r,x,t,a))}),s}var uLe,hLe,fLe,Aee,dLe,pLe,mLe,gLe,_ee,yLe,vLe,xLe,Dee,bLe,wLe,TLe,kLe,ELe,SLe,CLe,ALe,_Le,DLe,LLe,RLe,NLe,MLe,ILe,OLe,_n,wT,mL=N(()=>{"use strict";Zv();iL();rm();HJ();qJ();_9();R9();jJ();QJ();fL();dL();$d();see();gee();M9();Un();tm();wee();Js();Cee();xc();Bh();uLe=1,hLe=2,fLe=4,Aee="[object Arguments]",dLe="[object Array]",pLe="[object Boolean]",mLe="[object Date]",gLe="[object Error]",_ee="[object Function]",yLe="[object GeneratorFunction]",vLe="[object Map]",xLe="[object Number]",Dee="[object Object]",bLe="[object RegExp]",wLe="[object Set]",TLe="[object String]",kLe="[object Symbol]",ELe="[object WeakMap]",SLe="[object ArrayBuffer]",CLe="[object DataView]",ALe="[object Float32Array]",_Le="[object Float64Array]",DLe="[object Int8Array]",LLe="[object Int16Array]",RLe="[object Int32Array]",NLe="[object Uint8Array]",MLe="[object Uint8ClampedArray]",ILe="[object Uint16Array]",OLe="[object Uint32Array]",_n={};_n[Aee]=_n[dLe]=_n[SLe]=_n[CLe]=_n[pLe]=_n[mLe]=_n[ALe]=_n[_Le]=_n[DLe]=_n[LLe]=_n[RLe]=_n[vLe]=_n[xLe]=_n[Dee]=_n[bLe]=_n[wLe]=_n[TLe]=_n[kLe]=_n[NLe]=_n[MLe]=_n[ILe]=_n[OLe]=!0;_n[gLe]=_n[_ee]=_n[ELe]=!1;o(bT,"baseClone");wT=bT});function BLe(t){return wT(t,PLe)}var PLe,an,gL=N(()=>{"use strict";mL();PLe=4;o(BLe,"clone");an=BLe});function zLe(t){return wT(t,FLe|$Le)}var FLe,$Le,yL,Lee=N(()=>{"use strict";mL();FLe=1,$Le=4;o(zLe,"cloneDeep");yL=zLe});function GLe(t){for(var e=-1,r=t==null?0:t.length,n=0,i=[];++e<r;){var a=t[e];a&&(i[n++]=a)}return i}var Tc,Ree=N(()=>{"use strict";o(GLe,"compact");Tc=GLe});function ULe(t){return this.__data__.set(t,VLe),this}var VLe,Nee,Mee=N(()=>{"use strict";VLe="__lodash_hash_undefined__";o(ULe,"setCacheAdd");Nee=ULe});function HLe(t){return this.__data__.has(t)}var Iee,Oee=N(()=>{"use strict";o(HLe,"setCacheHas");Iee=HLe});function TT(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new Cd;++e<r;)this.add(t[e])}var Dm,kT=N(()=>{"use strict";Q5();Mee();Oee();o(TT,"SetCache");TT.prototype.add=TT.prototype.push=Nee;TT.prototype.has=Iee;Dm=TT});function WLe(t,e){for(var r=-1,n=t==null?0:t.length;++r<n;)if(e(t[r],r,t))return!0;return!1}var ET,vL=N(()=>{"use strict";o(WLe,"arraySome");ET=WLe});function qLe(t,e){return t.has(e)}var Lm,ST=N(()=>{"use strict";o(qLe,"cacheHas");Lm=qLe});function jLe(t,e,r,n,i,a){var s=r&YLe,l=t.length,u=e.length;if(l!=u&&!(s&&u>l))return!1;var h=a.get(t),f=a.get(e);if(h&&f)return h==e&&f==t;var d=-1,p=!0,m=r&XLe?new Dm:void 0;for(a.set(t,e),a.set(e,t);++d<l;){var g=t[d],y=e[d];if(n)var v=s?n(y,g,d,e,t,a):n(g,y,d,t,e,a);if(v!==void 0){if(v)continue;p=!1;break}if(m){if(!ET(e,function(x,b){if(!Lm(m,b)&&(g===x||i(g,x,r,n,a)))return m.push(b)})){p=!1;break}}else if(!(g===y||i(g,y,r,n,a))){p=!1;break}}return a.delete(t),a.delete(e),p}var YLe,XLe,CT,xL=N(()=>{"use strict";kT();vL();ST();YLe=1,XLe=2;o(jLe,"equalArrays");CT=jLe});function KLe(t){var e=-1,r=Array(t.size);return t.forEach(function(n,i){r[++e]=[i,n]}),r}var Pee,Bee=N(()=>{"use strict";o(KLe,"mapToArray");Pee=KLe});function QLe(t){var e=-1,r=Array(t.size);return t.forEach(function(n){r[++e]=n}),r}var Rm,AT=N(()=>{"use strict";o(QLe,"setToArray");Rm=QLe});function hRe(t,e,r,n,i,a,s){switch(r){case uRe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case cRe:return!(t.byteLength!=e.byteLength||!a(new j0(t),new j0(e)));case eRe:case tRe:case iRe:return Ro(+t,+e);case rRe:return t.name==e.name&&t.message==e.message;case aRe:case oRe:return t==e+"";case nRe:var l=Pee;case sRe:var u=n&ZLe;if(l||(l=Rm),t.size!=e.size&&!u)return!1;var h=s.get(t);if(h)return h==e;n|=JLe,s.set(t,e);var f=CT(l(t),l(e),n,i,a,s);return s.delete(t),f;case lRe:if(bL)return bL.call(t)==bL.call(e)}return!1}var ZLe,JLe,eRe,tRe,rRe,nRe,iRe,aRe,sRe,oRe,lRe,cRe,uRe,Fee,bL,$ee,zee=N(()=>{"use strict";Ed();D9();Sd();xL();Bee();AT();ZLe=1,JLe=2,eRe="[object Boolean]",tRe="[object Date]",rRe="[object Error]",nRe="[object Map]",iRe="[object Number]",aRe="[object RegExp]",sRe="[object Set]",oRe="[object String]",lRe="[object Symbol]",cRe="[object ArrayBuffer]",uRe="[object DataView]",Fee=ea?ea.prototype:void 0,bL=Fee?Fee.valueOf:void 0;o(hRe,"equalByTag");$ee=hRe});function mRe(t,e,r,n,i,a){var s=r&fRe,l=C2(t),u=l.length,h=C2(e),f=h.length;if(u!=f&&!s)return!1;for(var d=u;d--;){var p=l[d];if(!(s?p in e:pRe.call(e,p)))return!1}var m=a.get(t),g=a.get(e);if(m&&g)return m==e&&g==t;var y=!0;a.set(t,e),a.set(e,t);for(var v=s;++d<u;){p=l[d];var x=t[p],b=e[p];if(n)var w=s?n(b,x,p,e,t,a):n(x,b,p,t,e,a);if(!(w===void 0?x===b||i(x,b,r,n,a):w)){y=!1;break}v||(v=p=="constructor")}if(y&&!v){var C=t.constructor,T=e.constructor;C!=T&&"constructor"in t&&"constructor"in e&&!(typeof C=="function"&&C instanceof C&&typeof T=="function"&&T instanceof T)&&(y=!1)}return a.delete(t),a.delete(e),y}var fRe,dRe,pRe,Gee,Vee=N(()=>{"use strict";fL();fRe=1,dRe=Object.prototype,pRe=dRe.hasOwnProperty;o(mRe,"equalObjects");Gee=mRe});function vRe(t,e,r,n,i,a){var s=Pt(t),l=Pt(e),u=s?Hee:io(t),h=l?Hee:io(e);u=u==Uee?_T:u,h=h==Uee?_T:h;var f=u==_T,d=h==_T,p=u==h;if(p&&Sl(t)){if(!Sl(e))return!1;s=!0,f=!1}if(p&&!f)return a||(a=new lc),s||Oh(t)?CT(t,e,r,n,i,a):$ee(t,e,u,r,n,i,a);if(!(r&gRe)){var m=f&&Wee.call(t,"__wrapped__"),g=d&&Wee.call(e,"__wrapped__");if(m||g){var y=m?t.value():t,v=g?e.value():e;return a||(a=new lc),i(y,v,r,n,a)}}return p?(a||(a=new lc),Gee(t,e,r,n,i,a)):!1}var gRe,Uee,Hee,_T,yRe,Wee,qee,Yee=N(()=>{"use strict";Zv();xL();zee();Vee();$d();Un();tm();r2();gRe=1,Uee="[object Arguments]",Hee="[object Array]",_T="[object Object]",yRe=Object.prototype,Wee=yRe.hasOwnProperty;o(vRe,"baseIsEqualDeep");qee=vRe});function Xee(t,e,r,n,i){return t===e?!0:t==null||e==null||!ri(t)&&!ri(e)?t!==t&&e!==e:qee(t,e,r,n,Xee,i)}var DT,wL=N(()=>{"use strict";Yee();No();o(Xee,"baseIsEqual");DT=Xee});function wRe(t,e,r,n){var i=r.length,a=i,s=!n;if(t==null)return!a;for(t=Object(t);i--;){var l=r[i];if(s&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++i<a;){l=r[i];var u=l[0],h=t[u],f=l[1];if(s&&l[2]){if(h===void 0&&!(u in t))return!1}else{var d=new lc;if(n)var p=n(h,f,u,t,e,d);if(!(p===void 0?DT(f,h,xRe|bRe,n,d):p))return!1}}return!0}var xRe,bRe,jee,Kee=N(()=>{"use strict";Zv();wL();xRe=1,bRe=2;o(wRe,"baseIsMatch");jee=wRe});function TRe(t){return t===t&&!bn(t)}var LT,TL=N(()=>{"use strict";Js();o(TRe,"isStrictComparable");LT=TRe});function kRe(t){for(var e=zr(t),r=e.length;r--;){var n=e[r],i=t[n];e[r]=[n,i,LT(i)]}return e}var Qee,Zee=N(()=>{"use strict";TL();xc();o(kRe,"getMatchData");Qee=kRe});function ERe(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==void 0||t in Object(r))}}var RT,kL=N(()=>{"use strict";o(ERe,"matchesStrictComparable");RT=ERe});function SRe(t){var e=Qee(t);return e.length==1&&e[0][2]?RT(e[0][0],e[0][1]):function(r){return r===t||jee(r,t,e)}}var Jee,ete=N(()=>{"use strict";Kee();Zee();kL();o(SRe,"baseMatches");Jee=SRe});function CRe(t,e){return t!=null&&e in Object(t)}var tte,rte=N(()=>{"use strict";o(CRe,"baseHasIn");tte=CRe});function ARe(t,e,r){e=Yh(e,t);for(var n=-1,i=e.length,a=!1;++n<i;){var s=bc(e[n]);if(!(a=t!=null&&r(t,s)))break;t=t[s]}return a||++n!=i?a:(i=t==null?0:t.length,!!i&&em(i)&&Ph(s,i)&&(Pt(t)||El(t)))}var NT,EL=N(()=>{"use strict";E2();J0();Un();i2();sw();Em();o(ARe,"hasPath");NT=ARe});function _Re(t,e){return t!=null&&NT(t,e,tte)}var MT,SL=N(()=>{"use strict";rte();EL();o(_Re,"hasIn");MT=_Re});function RRe(t,e){return km(t)&&LT(e)?RT(bc(t),e):function(r){var n=RJ(r,t);return n===void 0&&n===e?MT(r,t):DT(e,n,DRe|LRe)}}var DRe,LRe,nte,ite=N(()=>{"use strict";wL();NJ();SL();oT();TL();kL();Em();DRe=1,LRe=2;o(RRe,"baseMatchesProperty");nte=RRe});function NRe(t){return function(e){return e?.[t]}}var IT,CL=N(()=>{"use strict";o(NRe,"baseProperty");IT=NRe});function MRe(t){return function(e){return Xh(e,t)}}var ate,ste=N(()=>{"use strict";S2();o(MRe,"basePropertyDeep");ate=MRe});function IRe(t){return km(t)?IT(bc(t)):ate(t)}var ote,lte=N(()=>{"use strict";CL();ste();oT();Em();o(IRe,"property");ote=IRe});function ORe(t){return typeof t=="function"?t:t==null?ta:typeof t=="object"?Pt(t)?nte(t[0],t[1]):Jee(t):ote(t)}var pn,rs=N(()=>{"use strict";ete();ite();Cu();Un();lte();o(ORe,"baseIteratee");pn=ORe});function PRe(t,e,r,n){for(var i=-1,a=t==null?0:t.length;++i<a;){var s=t[i];e(n,s,r(s),t)}return n}var cte,ute=N(()=>{"use strict";o(PRe,"arrayAggregator");cte=PRe});function BRe(t,e){return t&&X0(t,e,zr)}var Nm,OT=N(()=>{"use strict";Z5();xc();o(BRe,"baseForOwn");Nm=BRe});function FRe(t,e){return function(r,n){if(r==null)return r;if(!ci(r))return t(r,n);for(var i=r.length,a=e?i:-1,s=Object(r);(e?a--:++a<i)&&n(s[a],a,s)!==!1;);return r}}var hte,fte=N(()=>{"use strict";Mo();o(FRe,"createBaseEach");hte=FRe});var $Re,Ms,Kh=N(()=>{"use strict";OT();fte();$Re=hte(Nm),Ms=$Re});function zRe(t,e,r,n){return Ms(t,function(i,a,s){e(n,i,r(i),s)}),n}var dte,pte=N(()=>{"use strict";Kh();o(zRe,"baseAggregator");dte=zRe});function GRe(t,e){return function(r,n){var i=Pt(r)?cte:dte,a=e?e():{};return i(r,t,pn(n,2),a)}}var mte,gte=N(()=>{"use strict";ute();pte();rs();Un();o(GRe,"createAggregator");mte=GRe});var VRe,PT,yte=N(()=>{"use strict";Lo();VRe=o(function(){return li.Date.now()},"now"),PT=VRe});var vte,URe,HRe,Qh,xte=N(()=>{"use strict";nm();Sd();Ld();Bh();vte=Object.prototype,URe=vte.hasOwnProperty,HRe=fc(function(t,e){t=Object(t);var r=-1,n=e.length,i=n>2?e[2]:void 0;for(i&&eo(e[0],e[1],i)&&(n=1);++r<n;)for(var a=e[r],s=Cs(a),l=-1,u=s.length;++l<u;){var h=s[l],f=t[h];(f===void 0||Ro(f,vte[h])&&!URe.call(t,h))&&(t[h]=a[h])}return t}),Qh=HRe});function WRe(t,e,r){for(var n=-1,i=t==null?0:t.length;++n<i;)if(r(e,t[n]))return!0;return!1}var BT,AL=N(()=>{"use strict";o(WRe,"arrayIncludesWith");BT=WRe});function YRe(t,e,r,n){var i=-1,a=aT,s=!0,l=t.length,u=[],h=e.length;if(!l)return u;r&&(e=Ns(e,Io(r))),n?(a=BT,s=!1):e.length>=qRe&&(a=Lm,s=!1,e=new Dm(e));e:for(;++i<l;){var f=t[i],d=r==null?f:r(f);if(f=n||f!==0?f:0,s&&d===d){for(var p=h;p--;)if(e[p]===d)continue e;u.push(f)}else a(e,d,n)||u.push(f)}return u}var qRe,bte,wte=N(()=>{"use strict";kT();sL();AL();Bd();_d();ST();qRe=200;o(YRe,"baseDifference");bte=YRe});var XRe,Zh,Tte=N(()=>{"use strict";wte();Cm();nm();ow();XRe=fc(function(t,e){return Ad(t)?bte(t,wc(e,1,Ad,!0)):[]}),Zh=XRe});function jRe(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var ga,kte=N(()=>{"use strict";o(jRe,"last");ga=jRe});function KRe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:vc(e),hT(t,e<0?0:e,n)):[]}var gi,Ete=N(()=>{"use strict";lL();bm();o(KRe,"drop");gi=KRe});function QRe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:vc(e),e=n-e,hT(t,0,e<0?0:e)):[]}var Nu,Ste=N(()=>{"use strict";lL();bm();o(QRe,"dropRight");Nu=QRe});function ZRe(t){return typeof t=="function"?t:ta}var Mm,FT=N(()=>{"use strict";Cu();o(ZRe,"castFunction");Mm=ZRe});function JRe(t,e){var r=Pt(t)?rT:Ms;return r(t,Mm(e))}var Ae,$T=N(()=>{"use strict";iL();Kh();FT();Un();o(JRe,"forEach");Ae=JRe});var Cte=N(()=>{"use strict";$T()});function eNe(t,e){for(var r=-1,n=t==null?0:t.length;++r<n;)if(!e(t[r],r,t))return!1;return!0}var Ate,_te=N(()=>{"use strict";o(eNe,"arrayEvery");Ate=eNe});function tNe(t,e){var r=!0;return Ms(t,function(n,i,a){return r=!!e(n,i,a),r}),r}var Dte,Lte=N(()=>{"use strict";Kh();o(tNe,"baseEvery");Dte=tNe});function rNe(t,e,r){var n=Pt(t)?Ate:Dte;return r&&eo(t,e,r)&&(e=void 0),n(t,pn(e,3))}var Ma,Rte=N(()=>{"use strict";_te();Lte();rs();Un();Ld();o(rNe,"every");Ma=rNe});function nNe(t,e){var r=[];return Ms(t,function(n,i,a){e(n,i,a)&&r.push(n)}),r}var zT,_L=N(()=>{"use strict";Kh();o(nNe,"baseFilter");zT=nNe});function iNe(t,e){var r=Pt(t)?Am:zT;return r(t,pn(e,3))}var Yr,DL=N(()=>{"use strict";fT();_L();rs();Un();o(iNe,"filter");Yr=iNe});function aNe(t){return function(e,r,n){var i=Object(e);if(!ci(e)){var a=pn(r,3);e=zr(e),r=o(function(l){return a(i[l],l,i)},"predicate")}var s=t(e,r,n);return s>-1?i[a?e[s]:s]:void 0}}var Nte,Mte=N(()=>{"use strict";rs();Mo();xc();o(aNe,"createFind");Nte=aNe});function oNe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:vc(r);return i<0&&(i=sNe(n+i,0)),nT(t,pn(e,3),i)}var sNe,Ite,Ote=N(()=>{"use strict";aL();rs();bm();sNe=Math.max;o(oNe,"findIndex");Ite=oNe});var lNe,ns,Pte=N(()=>{"use strict";Mte();Ote();lNe=Nte(Ite),ns=lNe});function cNe(t){return t&&t.length?t[0]:void 0}var ia,Bte=N(()=>{"use strict";o(cNe,"head");ia=cNe});var Fte=N(()=>{"use strict";Bte()});function uNe(t,e){var r=-1,n=ci(t)?Array(t.length):[];return Ms(t,function(i,a,s){n[++r]=e(i,a,s)}),n}var GT,LL=N(()=>{"use strict";Kh();Mo();o(uNe,"baseMap");GT=uNe});function hNe(t,e){var r=Pt(t)?Ns:GT;return r(t,pn(e,3))}var Je,Im=N(()=>{"use strict";Bd();rs();LL();Un();o(hNe,"map");Je=hNe});function fNe(t,e){return wc(Je(t,e),1)}var ya,RL=N(()=>{"use strict";Cm();Im();o(fNe,"flatMap");ya=fNe});function dNe(t,e){return t==null?t:X0(t,Mm(e),Cs)}var NL,$te=N(()=>{"use strict";Z5();FT();Bh();o(dNe,"forIn");NL=dNe});function pNe(t,e){return t&&Nm(t,Mm(e))}var ML,zte=N(()=>{"use strict";OT();FT();o(pNe,"forOwn");ML=pNe});var mNe,gNe,yNe,IL,Gte=N(()=>{"use strict";Y0();gte();mNe=Object.prototype,gNe=mNe.hasOwnProperty,yNe=mte(function(t,e,r){gNe.call(t,r)?t[r].push(e):cc(t,r,[e])}),IL=yNe});function vNe(t,e){return t>e}var Vte,Ute=N(()=>{"use strict";o(vNe,"baseGt");Vte=vNe});function wNe(t,e){return t!=null&&bNe.call(t,e)}var xNe,bNe,Hte,Wte=N(()=>{"use strict";xNe=Object.prototype,bNe=xNe.hasOwnProperty;o(wNe,"baseHas");Hte=wNe});function TNe(t,e){return t!=null&&NT(t,e,Hte)}var Bt,qte=N(()=>{"use strict";Wte();EL();o(TNe,"has");Bt=TNe});function ENe(t){return typeof t=="string"||!Pt(t)&&ri(t)&&da(t)==kNe}var kNe,yi,VT=N(()=>{"use strict";ku();Un();No();kNe="[object String]";o(ENe,"isString");yi=ENe});function SNe(t,e){return Ns(e,function(r){return t[r]})}var Yte,Xte=N(()=>{"use strict";Bd();o(SNe,"baseValues");Yte=SNe});function CNe(t){return t==null?[]:Yte(t,zr(t))}var br,OL=N(()=>{"use strict";Xte();xc();o(CNe,"values");br=CNe});function _Ne(t,e,r,n){t=ci(t)?t:br(t),r=r&&!n?vc(r):0;var i=t.length;return r<0&&(r=ANe(i+r,0)),yi(t)?r<=i&&t.indexOf(e,r)>-1:!!i&&wm(t,e,r)>-1}var ANe,qn,jte=N(()=>{"use strict";iT();Mo();VT();bm();OL();ANe=Math.max;o(_Ne,"includes");qn=_Ne});function LNe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:vc(r);return i<0&&(i=DNe(n+i,0)),wm(t,e,i)}var DNe,UT,Kte=N(()=>{"use strict";iT();bm();DNe=Math.max;o(LNe,"indexOf");UT=LNe});function ONe(t){if(t==null)return!0;if(ci(t)&&(Pt(t)||typeof t=="string"||typeof t.splice=="function"||Sl(t)||Oh(t)||El(t)))return!t.length;var e=io(t);if(e==RNe||e==NNe)return!t.size;if(uc(t))return!Tm(t).length;for(var r in t)if(INe.call(t,r))return!1;return!0}var RNe,NNe,MNe,INe,ur,HT=N(()=>{"use strict";sT();$d();J0();Un();Mo();tm();Z0();r2();RNe="[object Map]",NNe="[object Set]",MNe=Object.prototype,INe=MNe.hasOwnProperty;o(ONe,"isEmpty");ur=ONe});function BNe(t){return ri(t)&&da(t)==PNe}var PNe,Qte,Zte=N(()=>{"use strict";ku();No();PNe="[object RegExp]";o(BNe,"baseIsRegExp");Qte=BNe});var Jte,FNe,zo,ere=N(()=>{"use strict";Zte();_d();t2();Jte=Oo&&Oo.isRegExp,FNe=Jte?Io(Jte):Qte,zo=FNe});function $Ne(t){return t===void 0}var pr,tre=N(()=>{"use strict";o($Ne,"isUndefined");pr=$Ne});function zNe(t,e){return t<e}var WT,PL=N(()=>{"use strict";o(zNe,"baseLt");WT=zNe});function GNe(t,e){var r={};return e=pn(e,3),Nm(t,function(n,i,a){cc(r,i,e(n,i,a))}),r}var zd,rre=N(()=>{"use strict";Y0();OT();rs();o(GNe,"mapValues");zd=GNe});function VNe(t,e,r){for(var n=-1,i=t.length;++n<i;){var a=t[n],s=e(a);if(s!=null&&(l===void 0?s===s&&!no(s):r(s,l)))var l=s,u=a}return u}var Om,qT=N(()=>{"use strict";Pd();o(VNe,"baseExtremum");Om=VNe});function UNe(t){return t&&t.length?Om(t,ta,Vte):void 0}var Is,nre=N(()=>{"use strict";qT();Ute();Cu();o(UNe,"max");Is=UNe});function HNe(t){return t&&t.length?Om(t,ta,WT):void 0}var Dl,BL=N(()=>{"use strict";qT();PL();Cu();o(HNe,"min");Dl=HNe});function WNe(t,e){return t&&t.length?Om(t,pn(e,2),WT):void 0}var Gd,ire=N(()=>{"use strict";qT();rs();PL();o(WNe,"minBy");Gd=WNe});function YNe(t){if(typeof t!="function")throw new TypeError(qNe);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}var qNe,are,sre=N(()=>{"use strict";qNe="Expected a function";o(YNe,"negate");are=YNe});function XNe(t,e,r,n){if(!bn(t))return t;e=Yh(e,t);for(var i=-1,a=e.length,s=a-1,l=t;l!=null&&++i<a;){var u=bc(e[i]),h=r;if(u==="__proto__"||u==="constructor"||u==="prototype")return t;if(i!=s){var f=l[u];h=n?n(f,u,l):void 0,h===void 0&&(h=bn(f)?f:Ph(e[i+1])?[]:{})}hc(l,u,h),l=l[u]}return t}var ore,lre=N(()=>{"use strict";rm();E2();i2();Js();Em();o(XNe,"baseSet");ore=XNe});function jNe(t,e,r){for(var n=-1,i=e.length,a={};++n<i;){var s=e[n],l=Xh(t,s);r(l,s)&&ore(a,Yh(s,t),l)}return a}var YT,FL=N(()=>{"use strict";S2();lre();E2();o(jNe,"basePickBy");YT=jNe});function KNe(t,e){if(t==null)return{};var r=Ns(yT(t),function(n){return[n]});return e=pn(e),YT(t,r,function(n,i){return e(n,i[0])})}var Os,cre=N(()=>{"use strict";Bd();rs();FL();dL();o(KNe,"pickBy");Os=KNe});function QNe(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}var ure,hre=N(()=>{"use strict";o(QNe,"baseSortBy");ure=QNe});function ZNe(t,e){if(t!==e){var r=t!==void 0,n=t===null,i=t===t,a=no(t),s=e!==void 0,l=e===null,u=e===e,h=no(e);if(!l&&!h&&!a&&t>e||a&&s&&u&&!l&&!h||n&&s&&u||!r&&u||!i)return 1;if(!n&&!a&&!h&&t<e||h&&r&&i&&!n&&!a||l&&r&&i||!s&&i||!u)return-1}return 0}var fre,dre=N(()=>{"use strict";Pd();o(ZNe,"compareAscending");fre=ZNe});function JNe(t,e,r){for(var n=-1,i=t.criteria,a=e.criteria,s=i.length,l=r.length;++n<s;){var u=fre(i[n],a[n]);if(u){if(n>=l)return u;var h=r[n];return u*(h=="desc"?-1:1)}}return t.index-e.index}var pre,mre=N(()=>{"use strict";dre();o(JNe,"compareMultiple");pre=JNe});function eMe(t,e,r){e.length?e=Ns(e,function(a){return Pt(a)?function(s){return Xh(s,a.length===1?a[0]:a)}:a}):e=[ta];var n=-1;e=Ns(e,Io(pn));var i=GT(t,function(a,s,l){var u=Ns(e,function(h){return h(a)});return{criteria:u,index:++n,value:a}});return ure(i,function(a,s){return pre(a,s,r)})}var gre,yre=N(()=>{"use strict";Bd();S2();rs();LL();hre();_d();mre();Cu();Un();o(eMe,"baseOrderBy");gre=eMe});var tMe,vre,xre=N(()=>{"use strict";CL();tMe=IT("length"),vre=tMe});function dMe(t){for(var e=bre.lastIndex=0;bre.test(t);)++e;return e}var wre,rMe,nMe,iMe,aMe,sMe,oMe,$L,zL,lMe,Tre,kre,Ere,cMe,Sre,Cre,uMe,hMe,fMe,bre,Are,_re=N(()=>{"use strict";wre="\\ud800-\\udfff",rMe="\\u0300-\\u036f",nMe="\\ufe20-\\ufe2f",iMe="\\u20d0-\\u20ff",aMe=rMe+nMe+iMe,sMe="\\ufe0e\\ufe0f",oMe="["+wre+"]",$L="["+aMe+"]",zL="\\ud83c[\\udffb-\\udfff]",lMe="(?:"+$L+"|"+zL+")",Tre="[^"+wre+"]",kre="(?:\\ud83c[\\udde6-\\uddff]){2}",Ere="[\\ud800-\\udbff][\\udc00-\\udfff]",cMe="\\u200d",Sre=lMe+"?",Cre="["+sMe+"]?",uMe="(?:"+cMe+"(?:"+[Tre,kre,Ere].join("|")+")"+Cre+Sre+")*",hMe=Cre+Sre+uMe,fMe="(?:"+[Tre+$L+"?",$L,kre,Ere,oMe].join("|")+")",bre=RegExp(zL+"(?="+zL+")|"+fMe+hMe,"g");o(dMe,"unicodeSize");Are=dMe});function pMe(t){return $J(t)?Are(t):vre(t)}var Dre,Lre=N(()=>{"use strict";xre();zJ();_re();o(pMe,"stringSize");Dre=pMe});function mMe(t,e){return YT(t,e,function(r,n){return MT(t,n)})}var Rre,Nre=N(()=>{"use strict";FL();SL();o(mMe,"basePick");Rre=mMe});var gMe,Vd,Mre=N(()=>{"use strict";Nre();FJ();gMe=BJ(function(t,e){return t==null?{}:Rre(t,e)}),Vd=gMe});function xMe(t,e,r,n){for(var i=-1,a=vMe(yMe((e-t)/(r||1)),0),s=Array(a);a--;)s[n?a:++i]=t,t+=r;return s}var yMe,vMe,Ire,Ore=N(()=>{"use strict";yMe=Math.ceil,vMe=Math.max;o(xMe,"baseRange");Ire=xMe});function bMe(t){return function(e,r,n){return n&&typeof n!="number"&&eo(e,r,n)&&(r=n=void 0),e=xm(e),r===void 0?(r=e,e=0):r=xm(r),n=n===void 0?e<r?1:-1:xm(n),Ire(e,r,n,t)}}var Pre,Bre=N(()=>{"use strict";Ore();Ld();rL();o(bMe,"createRange");Pre=bMe});var wMe,Go,Fre=N(()=>{"use strict";Bre();wMe=Pre(),Go=wMe});function TMe(t,e,r,n,i){return i(t,function(a,s,l){r=n?(n=!1,a):e(r,a,s,l)}),r}var $re,zre=N(()=>{"use strict";o(TMe,"baseReduce");$re=TMe});function kMe(t,e,r){var n=Pt(t)?GJ:$re,i=arguments.length<3;return n(t,pn(e,4),r,i,Ms)}var Xr,GL=N(()=>{"use strict";VJ();Kh();rs();zre();Un();o(kMe,"reduce");Xr=kMe});function EMe(t,e){var r=Pt(t)?Am:zT;return r(t,are(pn(e,3)))}var Jh,Gre=N(()=>{"use strict";fT();_L();rs();Un();sre();o(EMe,"reject");Jh=EMe});function AMe(t){if(t==null)return 0;if(ci(t))return yi(t)?Dre(t):t.length;var e=io(t);return e==SMe||e==CMe?t.size:Tm(t).length}var SMe,CMe,VL,Vre=N(()=>{"use strict";sT();$d();Mo();VT();Lre();SMe="[object Map]",CMe="[object Set]";o(AMe,"size");VL=AMe});function _Me(t,e){var r;return Ms(t,function(n,i,a){return r=e(n,i,a),!r}),!!r}var Ure,Hre=N(()=>{"use strict";Kh();o(_Me,"baseSome");Ure=_Me});function DMe(t,e,r){var n=Pt(t)?ET:Ure;return r&&eo(t,e,r)&&(e=void 0),n(t,pn(e,3))}var A2,Wre=N(()=>{"use strict";vL();rs();Hre();Un();Ld();o(DMe,"some");A2=DMe});var LMe,kc,qre=N(()=>{"use strict";Cm();yre();nm();Ld();LMe=fc(function(t,e){if(t==null)return[];var r=e.length;return r>1&&eo(t,e[0],e[1])?e=[]:r>2&&eo(e[0],e[1],e[2])&&(e=[e[0]]),gre(t,wc(e,1),[])}),kc=LMe});var RMe,NMe,Yre,Xre=N(()=>{"use strict";pL();nL();AT();RMe=1/0,NMe=jh&&1/Rm(new jh([,-0]))[1]==RMe?function(t){return new jh(t)}:ni,Yre=NMe});function IMe(t,e,r){var n=-1,i=aT,a=t.length,s=!0,l=[],u=l;if(r)s=!1,i=BT;else if(a>=MMe){var h=e?null:Yre(t);if(h)return Rm(h);s=!1,i=Lm,u=new Dm}else u=e?[]:l;e:for(;++n<a;){var f=t[n],d=e?e(f):f;if(f=r||f!==0?f:0,s&&d===d){for(var p=u.length;p--;)if(u[p]===d)continue e;e&&u.push(d),l.push(f)}else i(u,d,r)||(u!==l&&u.push(d),l.push(f))}return l}var MMe,Pm,XT=N(()=>{"use strict";kT();sL();AL();ST();Xre();AT();MMe=200;o(IMe,"baseUniq");Pm=IMe});var OMe,UL,jre=N(()=>{"use strict";Cm();nm();XT();ow();OMe=fc(function(t){return Pm(wc(t,1,Ad,!0))}),UL=OMe});function PMe(t){return t&&t.length?Pm(t):[]}var Bm,Kre=N(()=>{"use strict";XT();o(PMe,"uniq");Bm=PMe});function BMe(t,e){return t&&t.length?Pm(t,pn(e,2)):[]}var Qre,Zre=N(()=>{"use strict";rs();XT();o(BMe,"uniqBy");Qre=BMe});function $Me(t){var e=++FMe;return lT(t)+e}var FMe,Ud,Jre=N(()=>{"use strict";oL();FMe=0;o($Me,"uniqueId");Ud=$Me});function zMe(t,e,r){for(var n=-1,i=t.length,a=e.length,s={};++n<i;){var l=n<a?e[n]:void 0;r(s,t[n],l)}return s}var ene,tne=N(()=>{"use strict";o(zMe,"baseZipObject");ene=zMe});function GMe(t,e){return ene(t||[],e||[],hc)}var jT,rne=N(()=>{"use strict";rm();tne();o(GMe,"zipObject");jT=GMe});var qt=N(()=>{"use strict";CJ();gL();Lee();Ree();$9();xte();Tte();Ete();Ste();Cte();Rte();DL();Pte();Fte();RL();uT();$T();$te();zte();Gte();qte();Cu();jte();Kte();Un();HT();Yv();Js();ere();VT();tre();xc();kte();Im();rre();nre();V9();BL();ire();nL();yte();Mre();cre();Fre();GL();Gre();Vre();Wre();qre();jre();Kre();Jre();OL();rne();});function ine(t,e){t[e]?t[e]++:t[e]=1}function ane(t,e){--t[e]||delete t[e]}function _2(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}return i+nne+a+nne+(pr(n)?VMe:n)}function UMe(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}var l={v:i,w:a};return n&&(l.name=n),l}function HL(t,e){return _2(t,e.v,e.w,e.name)}var VMe,Hd,nne,sn,KT=N(()=>{"use strict";qt();VMe="\0",Hd="\0",nne="",sn=class{static{o(this,"Graph")}constructor(e={}){this._isDirected=Object.prototype.hasOwnProperty.call(e,"directed")?e.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(e,"multigraph")?e.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=As(void 0),this._defaultEdgeLabelFn=As(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[Hd]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return Si(e)||(e=As(e)),this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return zr(this._nodes)}sources(){var e=this;return Yr(this.nodes(),function(r){return ur(e._in[r])})}sinks(){var e=this;return Yr(this.nodes(),function(r){return ur(e._out[r])})}setNodes(e,r){var n=arguments,i=this;return Ae(e,function(a){n.length>1?i.setNode(a,r):i.setNode(a)}),this}setNode(e,r){return Object.prototype.hasOwnProperty.call(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=r),this):(this._nodes[e]=arguments.length>1?r:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=Hd,this._children[e]={},this._children[Hd][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return Object.prototype.hasOwnProperty.call(this._nodes,e)}removeNode(e){if(Object.prototype.hasOwnProperty.call(this._nodes,e)){var r=o(n=>this.removeEdge(this._edgeObjs[n]),"removeEdge");delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],Ae(this.children(e),n=>{this.setParent(n)}),delete this._children[e]),Ae(zr(this._in[e]),r),delete this._in[e],delete this._preds[e],Ae(zr(this._out[e]),r),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(pr(r))r=Hd;else{r+="";for(var n=r;!pr(n);n=this.parent(n))if(n===e)throw new Error("Setting "+r+" as parent of "+e+" would create a cycle");this.setNode(r)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=r,this._children[r][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var r=this._parent[e];if(r!==Hd)return r}}children(e){if(pr(e)&&(e=Hd),this._isCompound){var r=this._children[e];if(r)return zr(r)}else{if(e===Hd)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var r=this._preds[e];if(r)return zr(r)}successors(e){var r=this._sucs[e];if(r)return zr(r)}neighbors(e){var r=this.predecessors(e);if(r)return UL(r,this.successors(e))}isLeaf(e){var r;return this.isDirected()?r=this.successors(e):r=this.neighbors(e),r.length===0}filterNodes(e){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var n=this;Ae(this._nodes,function(s,l){e(l)&&r.setNode(l,s)}),Ae(this._edgeObjs,function(s){r.hasNode(s.v)&&r.hasNode(s.w)&&r.setEdge(s,n.edge(s))});var i={};function a(s){var l=n.parent(s);return l===void 0||r.hasNode(l)?(i[s]=l,l):l in i?i[l]:a(l)}return o(a,"findParent"),this._isCompound&&Ae(r.nodes(),function(s){r.setParent(s,a(s))}),r}setDefaultEdgeLabel(e){return Si(e)||(e=As(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return br(this._edgeObjs)}setPath(e,r){var n=this,i=arguments;return Xr(e,function(a,s){return i.length>1?n.setEdge(a,s,r):n.setEdge(a,s),s}),this}setEdge(){var e,r,n,i,a=!1,s=arguments[0];typeof s=="object"&&s!==null&&"v"in s?(e=s.v,r=s.w,n=s.name,arguments.length===2&&(i=arguments[1],a=!0)):(e=s,r=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),e=""+e,r=""+r,pr(n)||(n=""+n);var l=_2(this._isDirected,e,r,n);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,l))return a&&(this._edgeLabels[l]=i),this;if(!pr(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(r),this._edgeLabels[l]=a?i:this._defaultEdgeLabelFn(e,r,n);var u=UMe(this._isDirected,e,r,n);return e=u.v,r=u.w,Object.freeze(u),this._edgeObjs[l]=u,ine(this._preds[r],e),ine(this._sucs[e],r),this._in[r][l]=u,this._out[e][l]=u,this._edgeCount++,this}edge(e,r,n){var i=arguments.length===1?HL(this._isDirected,arguments[0]):_2(this._isDirected,e,r,n);return this._edgeLabels[i]}hasEdge(e,r,n){var i=arguments.length===1?HL(this._isDirected,arguments[0]):_2(this._isDirected,e,r,n);return Object.prototype.hasOwnProperty.call(this._edgeLabels,i)}removeEdge(e,r,n){var i=arguments.length===1?HL(this._isDirected,arguments[0]):_2(this._isDirected,e,r,n),a=this._edgeObjs[i];return a&&(e=a.v,r=a.w,delete this._edgeLabels[i],delete this._edgeObjs[i],ane(this._preds[r],e),ane(this._sucs[e],r),delete this._in[r][i],delete this._out[e][i],this._edgeCount--),this}inEdges(e,r){var n=this._in[e];if(n){var i=br(n);return r?Yr(i,function(a){return a.v===r}):i}}outEdges(e,r){var n=this._out[e];if(n){var i=br(n);return r?Yr(i,function(a){return a.w===r}):i}}nodeEdges(e,r){var n=this.inEdges(e,r);if(n)return n.concat(this.outEdges(e,r))}};sn.prototype._nodeCount=0;sn.prototype._edgeCount=0;o(ine,"incrementOrInitEntry");o(ane,"decrementOrRemoveEntry");o(_2,"edgeArgsToId");o(UMe,"edgeArgsToObj");o(HL,"edgeObjToId")});var Vo=N(()=>{"use strict";KT()});function sne(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function HMe(t,e){if(t!=="_next"&&t!=="_prev")return e}var ZT,one=N(()=>{"use strict";ZT=class{static{o(this,"List")}constructor(){var e={};e._next=e._prev=e,this._sentinel=e}dequeue(){var e=this._sentinel,r=e._prev;if(r!==e)return sne(r),r}enqueue(e){var r=this._sentinel;e._prev&&e._next&&sne(e),e._next=r._next,r._next._prev=e,r._next=e,e._prev=r}toString(){for(var e=[],r=this._sentinel,n=r._prev;n!==r;)e.push(JSON.stringify(n,HMe)),n=n._prev;return"["+e.join(", ")+"]"}};o(sne,"unlink");o(HMe,"filterOutLinks")});function lne(t,e){if(t.nodeCount()<=1)return[];var r=YMe(t,e||WMe),n=qMe(r.graph,r.buckets,r.zeroIdx);return qr(Je(n,function(i){return t.outEdges(i.v,i.w)}))}function qMe(t,e,r){for(var n=[],i=e[e.length-1],a=e[0],s;t.nodeCount();){for(;s=a.dequeue();)WL(t,e,r,s);for(;s=i.dequeue();)WL(t,e,r,s);if(t.nodeCount()){for(var l=e.length-2;l>0;--l)if(s=e[l].dequeue(),s){n=n.concat(WL(t,e,r,s,!0));break}}}return n}function WL(t,e,r,n,i){var a=i?[]:void 0;return Ae(t.inEdges(n.v),function(s){var l=t.edge(s),u=t.node(s.v);i&&a.push({v:s.v,w:s.w}),u.out-=l,qL(e,r,u)}),Ae(t.outEdges(n.v),function(s){var l=t.edge(s),u=s.w,h=t.node(u);h.in-=l,qL(e,r,h)}),t.removeNode(n.v),a}function YMe(t,e){var r=new sn,n=0,i=0;Ae(t.nodes(),function(l){r.setNode(l,{v:l,in:0,out:0})}),Ae(t.edges(),function(l){var u=r.edge(l.v,l.w)||0,h=e(l),f=u+h;r.setEdge(l.v,l.w,f),i=Math.max(i,r.node(l.v).out+=h),n=Math.max(n,r.node(l.w).in+=h)});var a=Go(i+n+3).map(function(){return new ZT}),s=n+1;return Ae(r.nodes(),function(l){qL(a,s,r.node(l))}),{graph:r,buckets:a,zeroIdx:s}}function qL(t,e,r){r.out?r.in?t[r.out-r.in+e].enqueue(r):t[t.length-1].enqueue(r):t[0].enqueue(r)}var WMe,cne=N(()=>{"use strict";qt();Vo();one();WMe=As(1);o(lne,"greedyFAS");o(qMe,"doGreedyFAS");o(WL,"removeNode");o(YMe,"buildState");o(qL,"assignBucket")});function une(t){var e=t.graph().acyclicer==="greedy"?lne(t,r(t)):XMe(t);Ae(e,function(n){var i=t.edge(n);t.removeEdge(n),i.forwardName=n.name,i.reversed=!0,t.setEdge(n.w,n.v,i,Ud("rev"))});function r(n){return function(i){return n.edge(i).weight}}o(r,"weightFn")}function XMe(t){var e=[],r={},n={};function i(a){Object.prototype.hasOwnProperty.call(n,a)||(n[a]=!0,r[a]=!0,Ae(t.outEdges(a),function(s){Object.prototype.hasOwnProperty.call(r,s.w)?e.push(s):i(s.w)}),delete r[a])}return o(i,"dfs"),Ae(t.nodes(),i),e}function hne(t){Ae(t.edges(),function(e){var r=t.edge(e);if(r.reversed){t.removeEdge(e);var n=r.forwardName;delete r.reversed,delete r.forwardName,t.setEdge(e.w,e.v,r,n)}})}var YL=N(()=>{"use strict";qt();cne();o(une,"run");o(XMe,"dfsFAS");o(hne,"undo")});function Ec(t,e,r,n){var i;do i=Ud(n);while(t.hasNode(i));return r.dummy=e,t.setNode(i,r),i}function dne(t){var e=new sn().setGraph(t.graph());return Ae(t.nodes(),function(r){e.setNode(r,t.node(r))}),Ae(t.edges(),function(r){var n=e.edge(r.v,r.w)||{weight:0,minlen:1},i=t.edge(r);e.setEdge(r.v,r.w,{weight:n.weight+i.weight,minlen:Math.max(n.minlen,i.minlen)})}),e}function JT(t){var e=new sn({multigraph:t.isMultigraph()}).setGraph(t.graph());return Ae(t.nodes(),function(r){t.children(r).length||e.setNode(r,t.node(r))}),Ae(t.edges(),function(r){e.setEdge(r,t.edge(r))}),e}function XL(t,e){var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2;if(!i&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=l*i/a,h=l):(i<0&&(s=-s),u=s,h=s*a/i),{x:r+u,y:n+h}}function ef(t){var e=Je(Go(KL(t)+1),function(){return[]});return Ae(t.nodes(),function(r){var n=t.node(r),i=n.rank;pr(i)||(e[i][n.order]=r)}),e}function pne(t){var e=Dl(Je(t.nodes(),function(r){return t.node(r).rank}));Ae(t.nodes(),function(r){var n=t.node(r);Bt(n,"rank")&&(n.rank-=e)})}function mne(t){var e=Dl(Je(t.nodes(),function(a){return t.node(a).rank})),r=[];Ae(t.nodes(),function(a){var s=t.node(a).rank-e;r[s]||(r[s]=[]),r[s].push(a)});var n=0,i=t.graph().nodeRankFactor;Ae(r,function(a,s){pr(a)&&s%i!==0?--n:n&&Ae(a,function(l){t.node(l).rank+=n})})}function jL(t,e,r,n){var i={width:0,height:0};return arguments.length>=4&&(i.rank=r,i.order=n),Ec(t,"border",i,e)}function KL(t){return Is(Je(t.nodes(),function(e){var r=t.node(e).rank;if(!pr(r))return r}))}function gne(t,e){var r={lhs:[],rhs:[]};return Ae(t,function(n){e(n)?r.lhs.push(n):r.rhs.push(n)}),r}function yne(t,e){var r=PT();try{return e()}finally{console.log(t+" time: "+(PT()-r)+"ms")}}function vne(t,e){return e()}var Sc=N(()=>{"use strict";qt();Vo();o(Ec,"addDummyNode");o(dne,"simplify");o(JT,"asNonCompoundGraph");o(XL,"intersectRect");o(ef,"buildLayerMatrix");o(pne,"normalizeRanks");o(mne,"removeEmptyRanks");o(jL,"addBorderNode");o(KL,"maxRank");o(gne,"partition");o(yne,"time");o(vne,"notime")});function bne(t){function e(r){var n=t.children(r),i=t.node(r);if(n.length&&Ae(n,e),Object.prototype.hasOwnProperty.call(i,"minRank")){i.borderLeft=[],i.borderRight=[];for(var a=i.minRank,s=i.maxRank+1;a<s;++a)xne(t,"borderLeft","_bl",r,i,a),xne(t,"borderRight","_br",r,i,a)}}o(e,"dfs"),Ae(t.children(),e)}function xne(t,e,r,n,i,a){var s={width:0,height:0,rank:a,borderType:e},l=i[e][a-1],u=Ec(t,"border",s,r);i[e][a]=u,t.setParent(u,n),l&&t.setEdge(l,u,{weight:1})}var wne=N(()=>{"use strict";qt();Sc();o(bne,"addBorderSegments");o(xne,"addBorderNode")});function kne(t){var e=t.graph().rankdir.toLowerCase();(e==="lr"||e==="rl")&&Sne(t)}function Ene(t){var e=t.graph().rankdir.toLowerCase();(e==="bt"||e==="rl")&&jMe(t),(e==="lr"||e==="rl")&&(KMe(t),Sne(t))}function Sne(t){Ae(t.nodes(),function(e){Tne(t.node(e))}),Ae(t.edges(),function(e){Tne(t.edge(e))})}function Tne(t){var e=t.width;t.width=t.height,t.height=e}function jMe(t){Ae(t.nodes(),function(e){QL(t.node(e))}),Ae(t.edges(),function(e){var r=t.edge(e);Ae(r.points,QL),Object.prototype.hasOwnProperty.call(r,"y")&&QL(r)})}function QL(t){t.y=-t.y}function KMe(t){Ae(t.nodes(),function(e){ZL(t.node(e))}),Ae(t.edges(),function(e){var r=t.edge(e);Ae(r.points,ZL),Object.prototype.hasOwnProperty.call(r,"x")&&ZL(r)})}function ZL(t){var e=t.x;t.x=t.y,t.y=e}var Cne=N(()=>{"use strict";qt();o(kne,"adjust");o(Ene,"undo");o(Sne,"swapWidthHeight");o(Tne,"swapWidthHeightOne");o(jMe,"reverseY");o(QL,"reverseYOne");o(KMe,"swapXY");o(ZL,"swapXYOne")});function Ane(t){t.graph().dummyChains=[],Ae(t.edges(),function(e){ZMe(t,e)})}function ZMe(t,e){var r=e.v,n=t.node(r).rank,i=e.w,a=t.node(i).rank,s=e.name,l=t.edge(e),u=l.labelRank;if(a!==n+1){t.removeEdge(e);var h=void 0,f,d;for(d=0,++n;n<a;++d,++n)l.points=[],h={width:0,height:0,edgeLabel:l,edgeObj:e,rank:n},f=Ec(t,"edge",h,"_d"),n===u&&(h.width=l.width,h.height=l.height,h.dummy="edge-label",h.labelpos=l.labelpos),t.setEdge(r,f,{weight:l.weight},s),d===0&&t.graph().dummyChains.push(f),r=f;t.setEdge(r,i,{weight:l.weight},s)}}function _ne(t){Ae(t.graph().dummyChains,function(e){var r=t.node(e),n=r.edgeLabel,i;for(t.setEdge(r.edgeObj,n);r.dummy;)i=t.successors(e)[0],t.removeNode(e),n.points.push({x:r.x,y:r.y}),r.dummy==="edge-label"&&(n.x=r.x,n.y=r.y,n.width=r.width,n.height=r.height),e=i,r=t.node(e)})}var JL=N(()=>{"use strict";qt();Sc();o(Ane,"run");o(ZMe,"normalizeEdge");o(_ne,"undo")});function D2(t){var e={};function r(n){var i=t.node(n);if(Object.prototype.hasOwnProperty.call(e,n))return i.rank;e[n]=!0;var a=Dl(Je(t.outEdges(n),function(s){return r(s.w)-t.edge(s).minlen}));return(a===Number.POSITIVE_INFINITY||a===void 0||a===null)&&(a=0),i.rank=a}o(r,"dfs"),Ae(t.sources(),r)}function Wd(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}var ek=N(()=>{"use strict";qt();o(D2,"longestPath");o(Wd,"slack")});function tk(t){var e=new sn({directed:!1}),r=t.nodes()[0],n=t.nodeCount();e.setNode(r,{});for(var i,a;JMe(e,t)<n;)i=eIe(e,t),a=e.hasNode(i.v)?Wd(t,i):-Wd(t,i),tIe(e,t,a);return e}function JMe(t,e){function r(n){Ae(e.nodeEdges(n),function(i){var a=i.v,s=n===a?i.w:a;!t.hasNode(s)&&!Wd(e,i)&&(t.setNode(s,{}),t.setEdge(n,s,{}),r(s))})}return o(r,"dfs"),Ae(t.nodes(),r),t.nodeCount()}function eIe(t,e){return Gd(e.edges(),function(r){if(t.hasNode(r.v)!==t.hasNode(r.w))return Wd(e,r)})}function tIe(t,e,r){Ae(t.nodes(),function(n){e.node(n).rank+=r})}var eR=N(()=>{"use strict";qt();Vo();ek();o(tk,"feasibleTree");o(JMe,"tightTree");o(eIe,"findMinSlackEdge");o(tIe,"shiftRanks")});var Lne=N(()=>{"use strict"});var tR=N(()=>{"use strict"});var cWt,rR=N(()=>{"use strict";qt();tR();cWt=As(1)});var Rne=N(()=>{"use strict";rR()});var nR=N(()=>{"use strict"});var Nne=N(()=>{"use strict";nR()});var bWt,Mne=N(()=>{"use strict";qt();bWt=As(1)});function iR(t){var e={},r={},n=[];function i(a){if(Object.prototype.hasOwnProperty.call(r,a))throw new L2;Object.prototype.hasOwnProperty.call(e,a)||(r[a]=!0,e[a]=!0,Ae(t.predecessors(a),i),delete r[a],n.push(a))}if(o(i,"visit"),Ae(t.sinks(),i),VL(e)!==t.nodeCount())throw new L2;return n}function L2(){}var aR=N(()=>{"use strict";qt();iR.CycleException=L2;o(iR,"topsort");o(L2,"CycleException");L2.prototype=new Error});var Ine=N(()=>{"use strict";aR()});function rk(t,e,r){Pt(e)||(e=[e]);var n=(t.isDirected()?t.successors:t.neighbors).bind(t),i=[],a={};return Ae(e,function(s){if(!t.hasNode(s))throw new Error("Graph does not have node: "+s);One(t,s,r==="post",a,n,i)}),i}function One(t,e,r,n,i,a){Object.prototype.hasOwnProperty.call(n,e)||(n[e]=!0,r||a.push(e),Ae(i(e),function(s){One(t,s,r,n,i,a)}),r&&a.push(e))}var sR=N(()=>{"use strict";qt();o(rk,"dfs");o(One,"doDfs")});function oR(t,e){return rk(t,e,"post")}var Pne=N(()=>{"use strict";sR();o(oR,"postorder")});function lR(t,e){return rk(t,e,"pre")}var Bne=N(()=>{"use strict";sR();o(lR,"preorder")});var Fne=N(()=>{"use strict";tR();KT()});var $ne=N(()=>{"use strict";Lne();rR();Rne();Nne();Mne();Ine();Pne();Bne();Fne();nR();aR()});function rf(t){t=dne(t),D2(t);var e=tk(t);uR(e),cR(e,t);for(var r,n;r=Une(e);)n=Hne(e,t,r),Wne(e,t,r,n)}function cR(t,e){var r=oR(t,t.nodes());r=r.slice(0,r.length-1),Ae(r,function(n){sIe(t,e,n)})}function sIe(t,e,r){var n=t.node(r),i=n.parent;t.edge(r,i).cutvalue=Gne(t,e,r)}function Gne(t,e,r){var n=t.node(r),i=n.parent,a=!0,s=e.edge(r,i),l=0;return s||(a=!1,s=e.edge(i,r)),l=s.weight,Ae(e.nodeEdges(r),function(u){var h=u.v===r,f=h?u.w:u.v;if(f!==i){var d=h===a,p=e.edge(u).weight;if(l+=d?p:-p,lIe(t,r,f)){var m=t.edge(r,f).cutvalue;l+=d?-m:m}}}),l}function uR(t,e){arguments.length<2&&(e=t.nodes()[0]),Vne(t,{},1,e)}function Vne(t,e,r,n,i){var a=r,s=t.node(n);return e[n]=!0,Ae(t.neighbors(n),function(l){Object.prototype.hasOwnProperty.call(e,l)||(r=Vne(t,e,r,l,n))}),s.low=a,s.lim=r++,i?s.parent=i:delete s.parent,r}function Une(t){return ns(t.edges(),function(e){return t.edge(e).cutvalue<0})}function Hne(t,e,r){var n=r.v,i=r.w;e.hasEdge(n,i)||(n=r.w,i=r.v);var a=t.node(n),s=t.node(i),l=a,u=!1;a.lim>s.lim&&(l=s,u=!0);var h=Yr(e.edges(),function(f){return u===zne(t,t.node(f.v),l)&&u!==zne(t,t.node(f.w),l)});return Gd(h,function(f){return Wd(e,f)})}function Wne(t,e,r,n){var i=r.v,a=r.w;t.removeEdge(i,a),t.setEdge(n.v,n.w,{}),uR(t),cR(t,e),oIe(t,e)}function oIe(t,e){var r=ns(t.nodes(),function(i){return!e.node(i).parent}),n=lR(t,r);n=n.slice(1),Ae(n,function(i){var a=t.node(i).parent,s=e.edge(i,a),l=!1;s||(s=e.edge(a,i),l=!0),e.node(i).rank=e.node(a).rank+(l?s.minlen:-s.minlen)})}function lIe(t,e,r){return t.hasEdge(e,r)}function zne(t,e,r){return r.low<=e.lim&&e.lim<=r.lim}var qne=N(()=>{"use strict";qt();$ne();Sc();eR();ek();rf.initLowLimValues=uR;rf.initCutValues=cR;rf.calcCutValue=Gne;rf.leaveEdge=Une;rf.enterEdge=Hne;rf.exchangeEdges=Wne;o(rf,"networkSimplex");o(cR,"initCutValues");o(sIe,"assignCutValue");o(Gne,"calcCutValue");o(uR,"initLowLimValues");o(Vne,"dfsAssignLowLim");o(Une,"leaveEdge");o(Hne,"enterEdge");o(Wne,"exchangeEdges");o(oIe,"updateRanks");o(lIe,"isTreeEdge");o(zne,"isDescendant")});function hR(t){switch(t.graph().ranker){case"network-simplex":Yne(t);break;case"tight-tree":uIe(t);break;case"longest-path":cIe(t);break;default:Yne(t)}}function uIe(t){D2(t),tk(t)}function Yne(t){rf(t)}var cIe,fR=N(()=>{"use strict";eR();qne();ek();o(hR,"rank");cIe=D2;o(uIe,"tightTreeRanker");o(Yne,"networkSimplexRanker")});function Xne(t){var e=Ec(t,"root",{},"_root"),r=hIe(t),n=Is(br(r))-1,i=2*n+1;t.graph().nestingRoot=e,Ae(t.edges(),function(s){t.edge(s).minlen*=i});var a=fIe(t)+1;Ae(t.children(),function(s){jne(t,e,i,a,n,r,s)}),t.graph().nodeRankFactor=i}function jne(t,e,r,n,i,a,s){var l=t.children(s);if(!l.length){s!==e&&t.setEdge(e,s,{weight:0,minlen:r});return}var u=jL(t,"_bt"),h=jL(t,"_bb"),f=t.node(s);t.setParent(u,s),f.borderTop=u,t.setParent(h,s),f.borderBottom=h,Ae(l,function(d){jne(t,e,r,n,i,a,d);var p=t.node(d),m=p.borderTop?p.borderTop:d,g=p.borderBottom?p.borderBottom:d,y=p.borderTop?n:2*n,v=m!==g?1:i-a[s]+1;t.setEdge(u,m,{weight:y,minlen:v,nestingEdge:!0}),t.setEdge(g,h,{weight:y,minlen:v,nestingEdge:!0})}),t.parent(s)||t.setEdge(e,u,{weight:0,minlen:i+a[s]})}function hIe(t){var e={};function r(n,i){var a=t.children(n);a&&a.length&&Ae(a,function(s){r(s,i+1)}),e[n]=i}return o(r,"dfs"),Ae(t.children(),function(n){r(n,1)}),e}function fIe(t){return Xr(t.edges(),function(e,r){return e+t.edge(r).weight},0)}function Kne(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,Ae(t.edges(),function(r){var n=t.edge(r);n.nestingEdge&&t.removeEdge(r)})}var Qne=N(()=>{"use strict";qt();Sc();o(Xne,"run");o(jne,"dfs");o(hIe,"treeDepths");o(fIe,"sumWeights");o(Kne,"cleanup")});function Zne(t,e,r){var n={},i;Ae(r,function(a){for(var s=t.parent(a),l,u;s;){if(l=t.parent(s),l?(u=n[l],n[l]=s):(u=i,i=s),u&&u!==s){e.setEdge(u,s);return}s=l}})}var Jne=N(()=>{"use strict";qt();o(Zne,"addSubgraphConstraints")});function eie(t,e,r){var n=pIe(t),i=new sn({compound:!0}).setGraph({root:n}).setDefaultNodeLabel(function(a){return t.node(a)});return Ae(t.nodes(),function(a){var s=t.node(a),l=t.parent(a);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(i.setNode(a),i.setParent(a,l||n),Ae(t[r](a),function(u){var h=u.v===a?u.w:u.v,f=i.edge(h,a),d=pr(f)?0:f.weight;i.setEdge(h,a,{weight:t.edge(u).weight+d})}),Object.prototype.hasOwnProperty.call(s,"minRank")&&i.setNode(a,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))}),i}function pIe(t){for(var e;t.hasNode(e=Ud("_root")););return e}var tie=N(()=>{"use strict";qt();Vo();o(eie,"buildLayerGraph");o(pIe,"createRootNode")});function rie(t,e){for(var r=0,n=1;n<e.length;++n)r+=mIe(t,e[n-1],e[n]);return r}function mIe(t,e,r){for(var n=jT(r,Je(r,function(h,f){return f})),i=qr(Je(e,function(h){return kc(Je(t.outEdges(h),function(f){return{pos:n[f.w],weight:t.edge(f).weight}}),"pos")})),a=1;a<r.length;)a<<=1;var s=2*a-1;a-=1;var l=Je(new Array(s),function(){return 0}),u=0;return Ae(i.forEach(function(h){var f=h.pos+a;l[f]+=h.weight;for(var d=0;f>0;)f%2&&(d+=l[f+1]),f=f-1>>1,l[f]+=h.weight;u+=h.weight*d})),u}var nie=N(()=>{"use strict";qt();o(rie,"crossCount");o(mIe,"twoLayerCrossCount")});function iie(t){var e={},r=Yr(t.nodes(),function(l){return!t.children(l).length}),n=Is(Je(r,function(l){return t.node(l).rank})),i=Je(Go(n+1),function(){return[]});function a(l){if(!Bt(e,l)){e[l]=!0;var u=t.node(l);i[u.rank].push(l),Ae(t.successors(l),a)}}o(a,"dfs");var s=kc(r,function(l){return t.node(l).rank});return Ae(s,a),i}var aie=N(()=>{"use strict";qt();o(iie,"initOrder")});function sie(t,e){return Je(e,function(r){var n=t.inEdges(r);if(n.length){var i=Xr(n,function(a,s){var l=t.edge(s),u=t.node(s.v);return{sum:a.sum+l.weight*u.order,weight:a.weight+l.weight}},{sum:0,weight:0});return{v:r,barycenter:i.sum/i.weight,weight:i.weight}}else return{v:r}})}var oie=N(()=>{"use strict";qt();o(sie,"barycenter")});function lie(t,e){var r={};Ae(t,function(i,a){var s=r[i.v]={indegree:0,in:[],out:[],vs:[i.v],i:a};pr(i.barycenter)||(s.barycenter=i.barycenter,s.weight=i.weight)}),Ae(e.edges(),function(i){var a=r[i.v],s=r[i.w];!pr(a)&&!pr(s)&&(s.indegree++,a.out.push(r[i.w]))});var n=Yr(r,function(i){return!i.indegree});return gIe(n)}function gIe(t){var e=[];function r(a){return function(s){s.merged||(pr(s.barycenter)||pr(a.barycenter)||s.barycenter>=a.barycenter)&&yIe(a,s)}}o(r,"handleIn");function n(a){return function(s){s.in.push(a),--s.indegree===0&&t.push(s)}}for(o(n,"handleOut");t.length;){var i=t.pop();e.push(i),Ae(i.in.reverse(),r(i)),Ae(i.out,n(i))}return Je(Yr(e,function(a){return!a.merged}),function(a){return Vd(a,["vs","i","barycenter","weight"])})}function yIe(t,e){var r=0,n=0;t.weight&&(r+=t.barycenter*t.weight,n+=t.weight),e.weight&&(r+=e.barycenter*e.weight,n+=e.weight),t.vs=e.vs.concat(t.vs),t.barycenter=r/n,t.weight=n,t.i=Math.min(e.i,t.i),e.merged=!0}var cie=N(()=>{"use strict";qt();o(lie,"resolveConflicts");o(gIe,"doResolveConflicts");o(yIe,"mergeEntries")});function hie(t,e){var r=gne(t,function(f){return Object.prototype.hasOwnProperty.call(f,"barycenter")}),n=r.lhs,i=kc(r.rhs,function(f){return-f.i}),a=[],s=0,l=0,u=0;n.sort(vIe(!!e)),u=uie(a,i,u),Ae(n,function(f){u+=f.vs.length,a.push(f.vs),s+=f.barycenter*f.weight,l+=f.weight,u=uie(a,i,u)});var h={vs:qr(a)};return l&&(h.barycenter=s/l,h.weight=l),h}function uie(t,e,r){for(var n;e.length&&(n=ga(e)).i<=r;)e.pop(),t.push(n.vs),r++;return r}function vIe(t){return function(e,r){return e.barycenter<r.barycenter?-1:e.barycenter>r.barycenter?1:t?r.i-e.i:e.i-r.i}}var fie=N(()=>{"use strict";qt();Sc();o(hie,"sort");o(uie,"consumeUnsortable");o(vIe,"compareWithBias")});function dR(t,e,r,n){var i=t.children(e),a=t.node(e),s=a?a.borderLeft:void 0,l=a?a.borderRight:void 0,u={};s&&(i=Yr(i,function(g){return g!==s&&g!==l}));var h=sie(t,i);Ae(h,function(g){if(t.children(g.v).length){var y=dR(t,g.v,r,n);u[g.v]=y,Object.prototype.hasOwnProperty.call(y,"barycenter")&&bIe(g,y)}});var f=lie(h,r);xIe(f,u);var d=hie(f,n);if(s&&(d.vs=qr([s,d.vs,l]),t.predecessors(s).length)){var p=t.node(t.predecessors(s)[0]),m=t.node(t.predecessors(l)[0]);Object.prototype.hasOwnProperty.call(d,"barycenter")||(d.barycenter=0,d.weight=0),d.barycenter=(d.barycenter*d.weight+p.order+m.order)/(d.weight+2),d.weight+=2}return d}function xIe(t,e){Ae(t,function(r){r.vs=qr(r.vs.map(function(n){return e[n]?e[n].vs:n}))})}function bIe(t,e){pr(t.barycenter)?(t.barycenter=e.barycenter,t.weight=e.weight):(t.barycenter=(t.barycenter*t.weight+e.barycenter*e.weight)/(t.weight+e.weight),t.weight+=e.weight)}var die=N(()=>{"use strict";qt();oie();cie();fie();o(dR,"sortSubgraph");o(xIe,"expandSubgraphs");o(bIe,"mergeBarycenters")});function gie(t){var e=KL(t),r=pie(t,Go(1,e+1),"inEdges"),n=pie(t,Go(e-1,-1,-1),"outEdges"),i=iie(t);mie(t,i);for(var a=Number.POSITIVE_INFINITY,s,l=0,u=0;u<4;++l,++u){wIe(l%2?r:n,l%4>=2),i=ef(t);var h=rie(t,i);h<a&&(u=0,s=yL(i),a=h)}mie(t,s)}function pie(t,e,r){return Je(e,function(n){return eie(t,n,r)})}function wIe(t,e){var r=new sn;Ae(t,function(n){var i=n.graph().root,a=dR(n,i,r,e);Ae(a.vs,function(s,l){n.node(s).order=l}),Zne(n,r,a.vs)})}function mie(t,e){Ae(e,function(r){Ae(r,function(n,i){t.node(n).order=i})})}var yie=N(()=>{"use strict";qt();Vo();Sc();Jne();tie();nie();aie();die();o(gie,"order");o(pie,"buildLayerGraphs");o(wIe,"sweepLayerGraphs");o(mie,"assignOrder")});function vie(t){var e=kIe(t);Ae(t.graph().dummyChains,function(r){for(var n=t.node(r),i=n.edgeObj,a=TIe(t,e,i.v,i.w),s=a.path,l=a.lca,u=0,h=s[u],f=!0;r!==i.w;){if(n=t.node(r),f){for(;(h=s[u])!==l&&t.node(h).maxRank<n.rank;)u++;h===l&&(f=!1)}if(!f){for(;u<s.length-1&&t.node(h=s[u+1]).minRank<=n.rank;)u++;h=s[u]}t.setParent(r,h),r=t.successors(r)[0]}})}function TIe(t,e,r,n){var i=[],a=[],s=Math.min(e[r].low,e[n].low),l=Math.max(e[r].lim,e[n].lim),u,h;u=r;do u=t.parent(u),i.push(u);while(u&&(e[u].low>s||l>e[u].lim));for(h=u,u=n;(u=t.parent(u))!==h;)a.push(u);return{path:i.concat(a.reverse()),lca:h}}function kIe(t){var e={},r=0;function n(i){var a=r;Ae(t.children(i),n),e[i]={low:a,lim:r++}}return o(n,"dfs"),Ae(t.children(),n),e}var xie=N(()=>{"use strict";qt();o(vie,"parentDummyChains");o(TIe,"findPath");o(kIe,"postorder")});function EIe(t,e){var r={};function n(i,a){var s=0,l=0,u=i.length,h=ga(a);return Ae(a,function(f,d){var p=CIe(t,f),m=p?t.node(p).order:u;(p||f===h)&&(Ae(a.slice(l,d+1),function(g){Ae(t.predecessors(g),function(y){var v=t.node(y),x=v.order;(x<s||m<x)&&!(v.dummy&&t.node(g).dummy)&&bie(r,y,g)})}),l=d+1,s=m)}),a}return o(n,"visitLayer"),Xr(e,n),r}function SIe(t,e){var r={};function n(a,s,l,u,h){var f;Ae(Go(s,l),function(d){f=a[d],t.node(f).dummy&&Ae(t.predecessors(f),function(p){var m=t.node(p);m.dummy&&(m.order<u||m.order>h)&&bie(r,p,f)})})}o(n,"scan");function i(a,s){var l=-1,u,h=0;return Ae(s,function(f,d){if(t.node(f).dummy==="border"){var p=t.predecessors(f);p.length&&(u=t.node(p[0]).order,n(s,h,d,l,u),h=d,l=u)}n(s,h,s.length,u,a.length)}),s}return o(i,"visitLayer"),Xr(e,i),r}function CIe(t,e){if(t.node(e).dummy)return ns(t.predecessors(e),function(r){return t.node(r).dummy})}function bie(t,e,r){if(e>r){var n=e;e=r,r=n}var i=t[e];i||(t[e]=i={}),i[r]=!0}function AIe(t,e,r){if(e>r){var n=e;e=r,r=n}return!!t[e]&&Object.prototype.hasOwnProperty.call(t[e],r)}function _Ie(t,e,r,n){var i={},a={},s={};return Ae(e,function(l){Ae(l,function(u,h){i[u]=u,a[u]=u,s[u]=h})}),Ae(e,function(l){var u=-1;Ae(l,function(h){var f=n(h);if(f.length){f=kc(f,function(y){return s[y]});for(var d=(f.length-1)/2,p=Math.floor(d),m=Math.ceil(d);p<=m;++p){var g=f[p];a[h]===h&&u<s[g]&&!AIe(r,h,g)&&(a[g]=h,a[h]=i[h]=i[g],u=s[g])}}})}),{root:i,align:a}}function DIe(t,e,r,n,i){var a={},s=LIe(t,e,r,i),l=i?"borderLeft":"borderRight";function u(d,p){for(var m=s.nodes(),g=m.pop(),y={};g;)y[g]?d(g):(y[g]=!0,m.push(g),m=m.concat(p(g))),g=m.pop()}o(u,"iterate");function h(d){a[d]=s.inEdges(d).reduce(function(p,m){return Math.max(p,a[m.v]+s.edge(m))},0)}o(h,"pass1");function f(d){var p=s.outEdges(d).reduce(function(g,y){return Math.min(g,a[y.w]-s.edge(y))},Number.POSITIVE_INFINITY),m=t.node(d);p!==Number.POSITIVE_INFINITY&&m.borderType!==l&&(a[d]=Math.max(a[d],p))}return o(f,"pass2"),u(h,s.predecessors.bind(s)),u(f,s.successors.bind(s)),Ae(n,function(d){a[d]=a[r[d]]}),a}function LIe(t,e,r,n){var i=new sn,a=t.graph(),s=IIe(a.nodesep,a.edgesep,n);return Ae(e,function(l){var u;Ae(l,function(h){var f=r[h];if(i.setNode(f),u){var d=r[u],p=i.edge(d,f);i.setEdge(d,f,Math.max(s(t,h,u),p||0))}u=h})}),i}function RIe(t,e){return Gd(br(e),function(r){var n=Number.NEGATIVE_INFINITY,i=Number.POSITIVE_INFINITY;return NL(r,function(a,s){var l=OIe(t,s)/2;n=Math.max(a+l,n),i=Math.min(a-l,i)}),n-i})}function NIe(t,e){var r=br(e),n=Dl(r),i=Is(r);Ae(["u","d"],function(a){Ae(["l","r"],function(s){var l=a+s,u=t[l],h;if(u!==e){var f=br(u);h=s==="l"?n-Dl(f):i-Is(f),h&&(t[l]=zd(u,function(d){return d+h}))}})})}function MIe(t,e){return zd(t.ul,function(r,n){if(e)return t[e.toLowerCase()][n];var i=kc(Je(t,n));return(i[1]+i[2])/2})}function wie(t){var e=ef(t),r=Fh(EIe(t,e),SIe(t,e)),n={},i;Ae(["u","d"],function(s){i=s==="u"?e:br(e).reverse(),Ae(["l","r"],function(l){l==="r"&&(i=Je(i,function(d){return br(d).reverse()}));var u=(s==="u"?t.predecessors:t.successors).bind(t),h=_Ie(t,i,r,u),f=DIe(t,i,h.root,h.align,l==="r");l==="r"&&(f=zd(f,function(d){return-d})),n[s+l]=f})});var a=RIe(t,n);return NIe(n,a),MIe(n,t.graph().align)}function IIe(t,e,r){return function(n,i,a){var s=n.node(i),l=n.node(a),u=0,h;if(u+=s.width/2,Object.prototype.hasOwnProperty.call(s,"labelpos"))switch(s.labelpos.toLowerCase()){case"l":h=-s.width/2;break;case"r":h=s.width/2;break}if(h&&(u+=r?h:-h),h=0,u+=(s.dummy?e:t)/2,u+=(l.dummy?e:t)/2,u+=l.width/2,Object.prototype.hasOwnProperty.call(l,"labelpos"))switch(l.labelpos.toLowerCase()){case"l":h=l.width/2;break;case"r":h=-l.width/2;break}return h&&(u+=r?h:-h),h=0,u}}function OIe(t,e){return t.node(e).width}var Tie=N(()=>{"use strict";qt();Vo();Sc();o(EIe,"findType1Conflicts");o(SIe,"findType2Conflicts");o(CIe,"findOtherInnerSegmentNode");o(bie,"addConflict");o(AIe,"hasConflict");o(_Ie,"verticalAlignment");o(DIe,"horizontalCompaction");o(LIe,"buildBlockGraph");o(RIe,"findSmallestWidthAlignment");o(NIe,"alignCoordinates");o(MIe,"balance");o(wie,"positionX");o(IIe,"sep");o(OIe,"width")});function kie(t){t=JT(t),PIe(t),ML(wie(t),function(e,r){t.node(r).x=e})}function PIe(t){var e=ef(t),r=t.graph().ranksep,n=0;Ae(e,function(i){var a=Is(Je(i,function(s){return t.node(s).height}));Ae(i,function(s){t.node(s).y=n+a/2}),n+=a+r})}var Eie=N(()=>{"use strict";qt();Sc();Tie();o(kie,"position");o(PIe,"positionY")});function R2(t,e){var r=e&&e.debugTiming?yne:vne;r("layout",()=>{var n=r(" buildLayoutGraph",()=>YIe(t));r(" runLayout",()=>BIe(n,r)),r(" updateInputGraph",()=>FIe(t,n))})}function BIe(t,e){e(" makeSpaceForEdgeLabels",()=>XIe(t)),e(" removeSelfEdges",()=>nOe(t)),e(" acyclic",()=>une(t)),e(" nestingGraph.run",()=>Xne(t)),e(" rank",()=>hR(JT(t))),e(" injectEdgeLabelProxies",()=>jIe(t)),e(" removeEmptyRanks",()=>mne(t)),e(" nestingGraph.cleanup",()=>Kne(t)),e(" normalizeRanks",()=>pne(t)),e(" assignRankMinMax",()=>KIe(t)),e(" removeEdgeLabelProxies",()=>QIe(t)),e(" normalize.run",()=>Ane(t)),e(" parentDummyChains",()=>vie(t)),e(" addBorderSegments",()=>bne(t)),e(" order",()=>gie(t)),e(" insertSelfEdges",()=>iOe(t)),e(" adjustCoordinateSystem",()=>kne(t)),e(" position",()=>kie(t)),e(" positionSelfEdges",()=>aOe(t)),e(" removeBorderNodes",()=>rOe(t)),e(" normalize.undo",()=>_ne(t)),e(" fixupEdgeLabelCoords",()=>eOe(t)),e(" undoCoordinateSystem",()=>Ene(t)),e(" translateGraph",()=>ZIe(t)),e(" assignNodeIntersects",()=>JIe(t)),e(" reversePoints",()=>tOe(t)),e(" acyclic.undo",()=>hne(t))}function FIe(t,e){Ae(t.nodes(),function(r){var n=t.node(r),i=e.node(r);n&&(n.x=i.x,n.y=i.y,e.children(r).length&&(n.width=i.width,n.height=i.height))}),Ae(t.edges(),function(r){var n=t.edge(r),i=e.edge(r);n.points=i.points,Object.prototype.hasOwnProperty.call(i,"x")&&(n.x=i.x,n.y=i.y)}),t.graph().width=e.graph().width,t.graph().height=e.graph().height}function YIe(t){var e=new sn({multigraph:!0,compound:!0}),r=mR(t.graph());return e.setGraph(Fh({},zIe,pR(r,$Ie),Vd(r,GIe))),Ae(t.nodes(),function(n){var i=mR(t.node(n));e.setNode(n,Qh(pR(i,VIe),UIe)),e.setParent(n,t.parent(n))}),Ae(t.edges(),function(n){var i=mR(t.edge(n));e.setEdge(n,Fh({},WIe,pR(i,HIe),Vd(i,qIe)))}),e}function XIe(t){var e=t.graph();e.ranksep/=2,Ae(t.edges(),function(r){var n=t.edge(r);n.minlen*=2,n.labelpos.toLowerCase()!=="c"&&(e.rankdir==="TB"||e.rankdir==="BT"?n.width+=n.labeloffset:n.height+=n.labeloffset)})}function jIe(t){Ae(t.edges(),function(e){var r=t.edge(e);if(r.width&&r.height){var n=t.node(e.v),i=t.node(e.w),a={rank:(i.rank-n.rank)/2+n.rank,e};Ec(t,"edge-proxy",a,"_ep")}})}function KIe(t){var e=0;Ae(t.nodes(),function(r){var n=t.node(r);n.borderTop&&(n.minRank=t.node(n.borderTop).rank,n.maxRank=t.node(n.borderBottom).rank,e=Is(e,n.maxRank))}),t.graph().maxRank=e}function QIe(t){Ae(t.nodes(),function(e){var r=t.node(e);r.dummy==="edge-proxy"&&(t.edge(r.e).labelRank=r.rank,t.removeNode(e))})}function ZIe(t){var e=Number.POSITIVE_INFINITY,r=0,n=Number.POSITIVE_INFINITY,i=0,a=t.graph(),s=a.marginx||0,l=a.marginy||0;function u(h){var f=h.x,d=h.y,p=h.width,m=h.height;e=Math.min(e,f-p/2),r=Math.max(r,f+p/2),n=Math.min(n,d-m/2),i=Math.max(i,d+m/2)}o(u,"getExtremes"),Ae(t.nodes(),function(h){u(t.node(h))}),Ae(t.edges(),function(h){var f=t.edge(h);Object.prototype.hasOwnProperty.call(f,"x")&&u(f)}),e-=s,n-=l,Ae(t.nodes(),function(h){var f=t.node(h);f.x-=e,f.y-=n}),Ae(t.edges(),function(h){var f=t.edge(h);Ae(f.points,function(d){d.x-=e,d.y-=n}),Object.prototype.hasOwnProperty.call(f,"x")&&(f.x-=e),Object.prototype.hasOwnProperty.call(f,"y")&&(f.y-=n)}),a.width=r-e+s,a.height=i-n+l}function JIe(t){Ae(t.edges(),function(e){var r=t.edge(e),n=t.node(e.v),i=t.node(e.w),a,s;r.points?(a=r.points[0],s=r.points[r.points.length-1]):(r.points=[],a=i,s=n),r.points.unshift(XL(n,a)),r.points.push(XL(i,s))})}function eOe(t){Ae(t.edges(),function(e){var r=t.edge(e);if(Object.prototype.hasOwnProperty.call(r,"x"))switch((r.labelpos==="l"||r.labelpos==="r")&&(r.width-=r.labeloffset),r.labelpos){case"l":r.x-=r.width/2+r.labeloffset;break;case"r":r.x+=r.width/2+r.labeloffset;break}})}function tOe(t){Ae(t.edges(),function(e){var r=t.edge(e);r.reversed&&r.points.reverse()})}function rOe(t){Ae(t.nodes(),function(e){if(t.children(e).length){var r=t.node(e),n=t.node(r.borderTop),i=t.node(r.borderBottom),a=t.node(ga(r.borderLeft)),s=t.node(ga(r.borderRight));r.width=Math.abs(s.x-a.x),r.height=Math.abs(i.y-n.y),r.x=a.x+r.width/2,r.y=n.y+r.height/2}}),Ae(t.nodes(),function(e){t.node(e).dummy==="border"&&t.removeNode(e)})}function nOe(t){Ae(t.edges(),function(e){if(e.v===e.w){var r=t.node(e.v);r.selfEdges||(r.selfEdges=[]),r.selfEdges.push({e,label:t.edge(e)}),t.removeEdge(e)}})}function iOe(t){var e=ef(t);Ae(e,function(r){var n=0;Ae(r,function(i,a){var s=t.node(i);s.order=a+n,Ae(s.selfEdges,function(l){Ec(t,"selfedge",{width:l.label.width,height:l.label.height,rank:s.rank,order:a+ ++n,e:l.e,label:l.label},"_se")}),delete s.selfEdges})})}function aOe(t){Ae(t.nodes(),function(e){var r=t.node(e);if(r.dummy==="selfedge"){var n=t.node(r.e.v),i=n.x+n.width/2,a=n.y,s=r.x-i,l=n.height/2;t.setEdge(r.e,r.label),t.removeNode(e),r.label.points=[{x:i+2*s/3,y:a-l},{x:i+5*s/6,y:a-l},{x:i+s,y:a},{x:i+5*s/6,y:a+l},{x:i+2*s/3,y:a+l}],r.label.x=r.x,r.label.y=r.y}})}function pR(t,e){return zd(Vd(t,e),Number)}function mR(t){var e={};return Ae(t,function(r,n){e[n.toLowerCase()]=r}),e}var $Ie,zIe,GIe,VIe,UIe,HIe,WIe,qIe,Sie=N(()=>{"use strict";qt();Vo();wne();Cne();YL();JL();fR();Qne();yie();xie();Eie();Sc();o(R2,"layout");o(BIe,"runLayout");o(FIe,"updateInputGraph");$Ie=["nodesep","edgesep","ranksep","marginx","marginy"],zIe={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},GIe=["acyclicer","ranker","rankdir","align"],VIe=["width","height"],UIe={width:0,height:0},HIe=["minlen","weight","width","height","labeloffset"],WIe={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},qIe=["labelpos"];o(YIe,"buildLayoutGraph");o(XIe,"makeSpaceForEdgeLabels");o(jIe,"injectEdgeLabelProxies");o(KIe,"assignRankMinMax");o(QIe,"removeEdgeLabelProxies");o(ZIe,"translateGraph");o(JIe,"assignNodeIntersects");o(eOe,"fixupEdgeLabelCoords");o(tOe,"reversePointsForReversedEdges");o(rOe,"removeBorderNodes");o(nOe,"removeSelfEdges");o(iOe,"insertSelfEdges");o(aOe,"positionSelfEdges");o(pR,"selectNumberAttrs");o(mR,"canonicalize")});var gR=N(()=>{"use strict";YL();Sie();JL();fR()});function Uo(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:sOe(t),edges:oOe(t)};return pr(t.graph())||(e.value=an(t.graph())),e}function sOe(t){return Je(t.nodes(),function(e){var r=t.node(e),n=t.parent(e),i={v:e};return pr(r)||(i.value=r),pr(n)||(i.parent=n),i})}function oOe(t){return Je(t.edges(),function(e){var r=t.edge(e),n={v:e.v,w:e.w};return pr(e.name)||(n.name=e.name),pr(r)||(n.value=r),n})}var yR=N(()=>{"use strict";qt();KT();o(Uo,"write");o(sOe,"writeNodes");o(oOe,"writeEdges")});var wr,qd,_ie,Die,nk,lOe,Lie,Rie,cOe,Fm,Aie,Nie,Mie,Iie,Oie,Pie=N(()=>{"use strict";vt();Vo();yR();wr=new Map,qd=new Map,_ie=new Map,Die=o(()=>{qd.clear(),_ie.clear(),wr.clear()},"clear"),nk=o((t,e)=>{let r=qd.get(e)||[];return Y.trace("In isDescendant",e," ",t," = ",r.includes(t)),r.includes(t)},"isDescendant"),lOe=o((t,e)=>{let r=qd.get(e)||[];return Y.info("Descendants of ",e," is ",r),Y.info("Edge is ",t),t.v===e||t.w===e?!1:r?r.includes(t.v)||nk(t.v,e)||nk(t.w,e)||r.includes(t.w):(Y.debug("Tilt, ",e,",not in descendants"),!1)},"edgeInCluster"),Lie=o((t,e,r,n)=>{Y.warn("Copying children of ",t,"root",n,"data",e.node(t),n);let i=e.children(t)||[];t!==n&&i.push(t),Y.warn("Copying (nodes) clusterId",t,"nodes",i),i.forEach(a=>{if(e.children(a).length>0)Lie(a,e,r,n);else{let s=e.node(a);Y.info("cp ",a," to ",n," with parent ",t),r.setNode(a,s),n!==e.parent(a)&&(Y.warn("Setting parent",a,e.parent(a)),r.setParent(a,e.parent(a))),t!==n&&a!==t?(Y.debug("Setting parent",a,t),r.setParent(a,t)):(Y.info("In copy ",t,"root",n,"data",e.node(t),n),Y.debug("Not Setting parent for node=",a,"cluster!==rootId",t!==n,"node!==clusterId",a!==t));let l=e.edges(a);Y.debug("Copying Edges",l),l.forEach(u=>{Y.info("Edge",u);let h=e.edge(u.v,u.w,u.name);Y.info("Edge data",h,n);try{lOe(u,n)?(Y.info("Copying as ",u.v,u.w,h,u.name),r.setEdge(u.v,u.w,h,u.name),Y.info("newGraph edges ",r.edges(),r.edge(r.edges()[0]))):Y.info("Skipping copy of edge ",u.v,"-->",u.w," rootId: ",n," clusterId:",t)}catch(f){Y.error(f)}})}Y.debug("Removing node",a),e.removeNode(a)})},"copy"),Rie=o((t,e)=>{let r=e.children(t),n=[...r];for(let i of r)_ie.set(i,t),n=[...n,...Rie(i,e)];return n},"extractDescendants"),cOe=o((t,e,r)=>{let n=t.edges().filter(u=>u.v===e||u.w===e),i=t.edges().filter(u=>u.v===r||u.w===r),a=n.map(u=>({v:u.v===e?r:u.v,w:u.w===e?e:u.w})),s=i.map(u=>({v:u.v,w:u.w}));return a.filter(u=>s.some(h=>u.v===h.v&&u.w===h.w))},"findCommonEdges"),Fm=o((t,e,r)=>{let n=e.children(t);if(Y.trace("Searching children of id ",t,n),n.length<1)return t;let i;for(let a of n){let s=Fm(a,e,r),l=cOe(e,r,s);if(s)if(l.length>0)i=s;else return s}return i},"findNonClusterChild"),Aie=o(t=>!wr.has(t)||!wr.get(t).externalConnections?t:wr.has(t)?wr.get(t).id:t,"getAnchorId"),Nie=o((t,e)=>{if(!t||e>10){Y.debug("Opting out, no graph ");return}else Y.debug("Opting in, graph ");t.nodes().forEach(function(r){t.children(r).length>0&&(Y.warn("Cluster identified",r," Replacement id in edges: ",Fm(r,t,r)),qd.set(r,Rie(r,t)),wr.set(r,{id:Fm(r,t,r),clusterData:t.node(r)}))}),t.nodes().forEach(function(r){let n=t.children(r),i=t.edges();n.length>0?(Y.debug("Cluster identified",r,qd),i.forEach(a=>{let s=nk(a.v,r),l=nk(a.w,r);s^l&&(Y.warn("Edge: ",a," leaves cluster ",r),Y.warn("Descendants of XXX ",r,": ",qd.get(r)),wr.get(r).externalConnections=!0)})):Y.debug("Not a cluster ",r,qd)});for(let r of wr.keys()){let n=wr.get(r).id,i=t.parent(n);i!==r&&wr.has(i)&&!wr.get(i).externalConnections&&(wr.get(r).id=i)}t.edges().forEach(function(r){let n=t.edge(r);Y.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(r)),Y.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(t.edge(r)));let i=r.v,a=r.w;if(Y.warn("Fix XXX",wr,"ids:",r.v,r.w,"Translating: ",wr.get(r.v)," --- ",wr.get(r.w)),wr.get(r.v)||wr.get(r.w)){if(Y.warn("Fixing and trying - removing XXX",r.v,r.w,r.name),i=Aie(r.v),a=Aie(r.w),t.removeEdge(r.v,r.w,r.name),i!==r.v){let s=t.parent(i);wr.get(s).externalConnections=!0,n.fromCluster=r.v}if(a!==r.w){let s=t.parent(a);wr.get(s).externalConnections=!0,n.toCluster=r.w}Y.warn("Fix Replacing with XXX",i,a,r.name),t.setEdge(i,a,n,r.name)}}),Y.warn("Adjusted Graph",Uo(t)),Mie(t,0),Y.trace(wr)},"adjustClustersAndEdges"),Mie=o((t,e)=>{if(Y.warn("extractor - ",e,Uo(t),t.children("D")),e>10){Y.error("Bailing out");return}let r=t.nodes(),n=!1;for(let i of r){let a=t.children(i);n=n||a.length>0}if(!n){Y.debug("Done, no node has children",t.nodes());return}Y.debug("Nodes = ",r,e);for(let i of r)if(Y.debug("Extracting node",i,wr,wr.has(i)&&!wr.get(i).externalConnections,!t.parent(i),t.node(i),t.children("D")," Depth ",e),!wr.has(i))Y.debug("Not a cluster",i,e);else if(!wr.get(i).externalConnections&&t.children(i)&&t.children(i).length>0){Y.warn("Cluster without external connections, without a parent and with children",i,e);let s=t.graph().rankdir==="TB"?"LR":"TB";wr.get(i)?.clusterData?.dir&&(s=wr.get(i).clusterData.dir,Y.warn("Fixing dir",wr.get(i).clusterData.dir,s));let l=new sn({multigraph:!0,compound:!0}).setGraph({rankdir:s,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});Y.warn("Old graph before copy",Uo(t)),Lie(i,t,l,i),t.setNode(i,{clusterNode:!0,id:i,clusterData:wr.get(i).clusterData,label:wr.get(i).label,graph:l}),Y.warn("New graph after copy node: (",i,")",Uo(l)),Y.debug("Old graph after copy",Uo(t))}else Y.warn("Cluster ** ",i," **not meeting the criteria !externalConnections:",!wr.get(i).externalConnections," no parent: ",!t.parent(i)," children ",t.children(i)&&t.children(i).length>0,t.children("D"),e),Y.debug(wr);r=t.nodes(),Y.warn("New list of nodes",r);for(let i of r){let a=t.node(i);Y.warn(" Now next level",i,a),a?.clusterNode&&Mie(a.graph,e+1)}},"extractor"),Iie=o((t,e)=>{if(e.length===0)return[];let r=Object.assign([],e);return e.forEach(n=>{let i=t.children(n),a=Iie(t,i);r=[...r,...a]}),r},"sorter"),Oie=o(t=>Iie(t,t.children()),"sortNodesByHierarchy")});var Fie={};hr(Fie,{render:()=>uOe});var Bie,uOe,$ie=N(()=>{"use strict";gR();yR();Vo();tL();Ft();Pie();eT();Hw();eL();vt();w2();zt();Bie=o(async(t,e,r,n,i,a)=>{Y.warn("Graph in recursive render:XAX",Uo(e),i);let s=e.graph().rankdir;Y.trace("Dir in recursive render - dir:",s);let l=t.insert("g").attr("class","root");e.nodes()?Y.info("Recursive render XXX",e.nodes()):Y.info("No nodes found for",e),e.edges().length>0&&Y.info("Recursive edges",e.edge(e.edges()[0]));let u=l.insert("g").attr("class","clusters"),h=l.insert("g").attr("class","edgePaths"),f=l.insert("g").attr("class","edgeLabels"),d=l.insert("g").attr("class","nodes");await Promise.all(e.nodes().map(async function(y){let v=e.node(y);if(i!==void 0){let x=JSON.parse(JSON.stringify(i.clusterData));Y.trace(`Setting data for parent cluster XXX
477 + Node.id = `,y,`
478 + data=`,x.height,`
479 +Parent cluster`,i.height),e.setNode(i.id,x),e.parent(y)||(Y.trace("Setting parent",y,i.id),e.setParent(y,i.id,x))}if(Y.info("(Insert) Node XXX"+y+": "+JSON.stringify(e.node(y))),v?.clusterNode){Y.info("Cluster identified XBX",y,v.width,e.node(y));let{ranksep:x,nodesep:b}=e.graph();v.graph.setGraph({...v.graph.graph(),ranksep:x+25,nodesep:b});let w=await Bie(d,v.graph,r,n,e.node(y),a),C=w.elem;je(v,C),v.diff=w.diff||0,Y.info("New compound node after recursive render XAX",y,"width",v.width,"height",v.height),rJ(C,v)}else e.children(y).length>0?(Y.trace("Cluster - the non recursive path XBX",y,v.id,v,v.width,"Graph:",e),Y.trace(Fm(v.id,e)),wr.set(v.id,{id:Fm(v.id,e),node:v})):(Y.trace("Node - the non recursive path XAX",y,d,e.node(y),s),await vm(d,e.node(y),{config:a,dir:s}))})),await o(async()=>{let y=e.edges().map(async function(v){let x=e.edge(v.v,v.w,v.name);Y.info("Edge "+v.v+" -> "+v.w+": "+JSON.stringify(v)),Y.info("Edge "+v.v+" -> "+v.w+": ",v," ",JSON.stringify(e.edge(v))),Y.info("Fix",wr,"ids:",v.v,v.w,"Translating: ",wr.get(v.v),wr.get(v.w)),await jw(f,x)});await Promise.all(y)},"processEdges")(),Y.info("Graph before layout:",JSON.stringify(Uo(e))),Y.info("############################################# XXX"),Y.info("### Layout ### XXX"),Y.info("############################################# XXX"),R2(e),Y.info("Graph after layout:",JSON.stringify(Uo(e)));let m=0,{subGraphTitleTotalMargin:g}=Ru(a);return await Promise.all(Oie(e).map(async function(y){let v=e.node(y);if(Y.info("Position XBX => "+y+": ("+v.x,","+v.y,") width: ",v.width," height: ",v.height),v?.clusterNode)v.y+=g,Y.info("A tainted cluster node XBX1",y,v.id,v.width,v.height,v.x,v.y,e.parent(y)),wr.get(v.id).node=v,k2(v);else if(e.children(y).length>0){Y.info("A pure cluster node XBX1",y,v.id,v.x,v.y,v.width,v.height,e.parent(y)),v.height+=g,e.node(v.parentId);let x=v?.padding/2||0,b=v?.labelBBox?.height||0,w=b-x||0;Y.debug("OffsetY",w,"labelHeight",b,"halfPadding",x),await ym(u,v),wr.get(v.id).node=v}else{let x=e.node(v.parentId);v.y+=g/2,Y.info("A regular node XBX1 - using the padding",v.id,"parent",v.parentId,v.width,v.height,v.x,v.y,"offsetY",v.offsetY,"parent",x,x?.offsetY,v),k2(v)}})),e.edges().forEach(function(y){let v=e.edge(y);Y.info("Edge "+y.v+" -> "+y.w+": "+JSON.stringify(v),v),v.points.forEach(C=>C.y+=g/2);let x=e.node(y.v);var b=e.node(y.w);let w=Qw(h,v,wr,r,x,b,n);Kw(v,w)}),e.nodes().forEach(function(y){let v=e.node(y);Y.info(y,v.type,v.diff),v.isGroup&&(m=v.diff)}),Y.warn("Returning from recursive render XAX",l,m),{elem:l,diff:m}},"recursiveRender"),uOe=o(async(t,e)=>{let r=new sn({multigraph:!0,compound:!0}).setGraph({rankdir:t.direction,nodesep:t.config?.nodeSpacing||t.config?.flowchart?.nodeSpacing||t.nodeSpacing,ranksep:t.config?.rankSpacing||t.config?.flowchart?.rankSpacing||t.rankSpacing,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),n=e.select("g");Zw(n,t.markers,t.type,t.diagramId),nJ(),tJ(),jZ(),Die(),t.nodes.forEach(a=>{r.setNode(a.id,{...a}),a.parentId&&r.setParent(a.id,a.parentId)}),Y.debug("Edges:",t.edges),t.edges.forEach(a=>{if(a.start===a.end){let s=a.start,l=s+"---"+s+"---1",u=s+"---"+s+"---2",h=r.node(s);r.setNode(l,{domId:l,id:l,parentId:h.parentId,labelStyle:"",label:"",padding:0,shape:"labelRect",style:"",width:10,height:10}),r.setParent(l,h.parentId),r.setNode(u,{domId:u,id:u,parentId:h.parentId,labelStyle:"",padding:0,shape:"labelRect",label:"",style:"",width:10,height:10}),r.setParent(u,h.parentId);let f=structuredClone(a),d=structuredClone(a),p=structuredClone(a);f.label="",f.arrowTypeEnd="none",f.id=s+"-cyclic-special-1",d.arrowTypeStart="none",d.arrowTypeEnd="none",d.id=s+"-cyclic-special-mid",p.label="",h.isGroup&&(f.fromCluster=s,p.toCluster=s),p.id=s+"-cyclic-special-2",p.arrowTypeStart="none",r.setEdge(s,l,f,s+"-cyclic-special-0"),r.setEdge(l,u,d,s+"-cyclic-special-1"),r.setEdge(u,s,p,s+"-cyc<lic-special-2")}else r.setEdge(a.start,a.end,{...a},a.id)}),Y.warn("Graph at first:",JSON.stringify(Uo(r))),Nie(r),Y.warn("Graph after XAX:",JSON.stringify(Uo(r)));let i=me();await Bie(n,r,t.type,t.diagramId,void 0,i)},"render")});var N2,vR,hOe,Cc,nf,Yd=N(()=>{"use strict";aJ();vt();N2={},vR=o(t=>{for(let e of t)N2[e.name]=e},"registerLayoutLoaders"),hOe=o(()=>{vR([{name:"dagre",loader:o(async()=>await Promise.resolve().then(()=>($ie(),Fie)),"loader")}])},"registerDefaultLayoutLoaders");hOe();Cc=o(async(t,e)=>{if(!(t.layoutAlgorithm in N2))throw new Error(`Unknown layout algorithm: ${t.layoutAlgorithm}`);let r=N2[t.layoutAlgorithm];return(await r.loader()).render(t,e,iJ,{algorithm:r.algorithm})},"render"),nf=o((t="",{fallback:e="dagre"}={})=>{if(t in N2)return t;if(e in N2)return Y.warn(`Layout algorithm ${t} is not registered. Using ${e} as fallback.`),e;throw new Error(`Both layout algorithms ${t} and ${e} are not registered.`)},"getRegisteredLayoutAlgorithm")});var Ac,fOe,dOe,$m=N(()=>{"use strict";Ei();vt();Ac=o((t,e,r,n)=>{t.attr("class",r);let{width:i,height:a,x:s,y:l}=fOe(t,e);vn(t,a,i,n);let u=dOe(s,l,i,a,e);t.attr("viewBox",u),Y.debug(`viewBox configured: ${u} with padding: ${e}`)},"setupViewPortForSVG"),fOe=o((t,e)=>{let r=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:r.width+e*2,height:r.height+e*2,x:r.x,y:r.y}},"calculateDimensionsWithPadding"),dOe=o((t,e,r,n,i)=>`${t-i} ${e-i} ${r} ${n}`,"createViewBox")});var pOe,mOe,zie,Gie=N(()=>{"use strict";dr();zt();vt();gm();Yd();$m();ir();pOe=o(function(t,e){return e.db.getClasses()},"getClasses"),mOe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing state diagram (v2)",e);let{securityLevel:i,flowchart:a,layout:s}=me(),l;i==="sandbox"&&(l=Ge("#i"+e));let u=i==="sandbox"?l.nodes()[0].contentDocument:document;Y.debug("Before getData: ");let h=n.db.getData();Y.debug("Data: ",h);let f=yc(e,i),d=n.db.getDirection();h.type=n.type,h.layoutAlgorithm=nf(s),h.layoutAlgorithm==="dagre"&&s==="elk"&&Y.warn("flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."),h.direction=d,h.nodeSpacing=a?.nodeSpacing||50,h.rankSpacing=a?.rankSpacing||50,h.markers=["point","circle","cross"],h.diagramId=e,Y.debug("REF1:",h),await Cc(h,f);let p=h.config.flowchart?.diagramPadding??8;Gt.insertTitle(f,"flowchartTitleText",a?.titleTopMargin||0,n.db.getDiagramTitle()),Ac(f,p,"flowchart",a?.useMaxWidth||!1);for(let m of h.nodes){let g=Ge(`#${e} [id="${m.id}"]`);if(!g||!m.link)continue;let y=u.createElementNS("http://www.w3.org/2000/svg","a");y.setAttributeNS("http://www.w3.org/2000/svg","class",m.cssClasses),y.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),i==="sandbox"?y.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):m.linkTarget&&y.setAttributeNS("http://www.w3.org/2000/svg","target",m.linkTarget);let v=g.insert(function(){return y},":first-child"),x=g.select(".label-container");x&&v.append(function(){return x.node()});let b=g.select(".label");b&&v.append(function(){return b.node()})}},"draw"),zie={getClasses:pOe,draw:mOe}});var xR,bR,Vie=N(()=>{"use strict";xR=function(){var t=o(function(Hr,et,mt,Kt){for(mt=mt||{},Kt=Hr.length;Kt--;mt[Hr[Kt]]=et);return mt},"o"),e=[1,4],r=[1,3],n=[1,5],i=[1,8,9,10,11,27,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],a=[2,2],s=[1,13],l=[1,14],u=[1,15],h=[1,16],f=[1,23],d=[1,25],p=[1,26],m=[1,27],g=[1,49],y=[1,48],v=[1,29],x=[1,30],b=[1,31],w=[1,32],C=[1,33],T=[1,44],E=[1,46],A=[1,42],S=[1,47],_=[1,43],I=[1,50],D=[1,45],k=[1,51],L=[1,52],R=[1,34],O=[1,35],M=[1,36],B=[1,37],F=[1,57],P=[1,8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],z=[1,61],$=[1,60],H=[1,62],Q=[8,9,11,75,77,78],j=[1,78],ie=[1,91],ne=[1,96],le=[1,95],he=[1,92],K=[1,88],X=[1,94],te=[1,90],J=[1,97],se=[1,93],ue=[1,98],Z=[1,89],Se=[8,9,10,11,40,75,77,78],ce=[8,9,10,11,40,46,75,77,78],ae=[8,9,10,11,29,40,44,46,48,50,52,54,56,58,60,63,65,67,68,70,75,77,78,89,102,105,106,109,111,114,115,116],Oe=[8,9,11,44,60,75,77,78,89,102,105,106,109,111,114,115,116],ge=[44,60,89,102,105,106,109,111,114,115,116],ze=[1,121],He=[1,122],$e=[1,124],Re=[1,123],Ie=[44,60,62,74,89,102,105,106,109,111,114,115,116],be=[1,133],W=[1,147],de=[1,148],re=[1,149],oe=[1,150],V=[1,135],xe=[1,137],q=[1,141],pe=[1,142],ve=[1,143],Pe=[1,144],_e=[1,145],we=[1,146],Ve=[1,151],De=[1,152],qe=[1,131],at=[1,132],Rt=[1,139],st=[1,134],Ue=[1,138],ct=[1,136],We=[8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],ot=[1,154],Yt=[1,156],bt=[8,9,11],Mt=[8,9,10,11,14,44,60,89,105,106,109,111,114,115,116],xt=[1,176],ut=[1,172],Et=[1,173],ft=[1,177],yt=[1,174],nt=[1,175],dn=[77,116,119],Tt=[8,9,10,11,12,14,27,29,32,44,60,75,84,85,86,87,88,89,90,105,109,111,114,115,116],On=[10,106],tn=[31,49,51,53,55,57,62,64,66,67,69,71,116,117,118],_r=[1,247],Dr=[1,245],Pn=[1,249],At=[1,243],Ce=[1,244],tt=[1,246],St=[1,248],mr=[1,250],rn=[1,268],gn=[8,9,11,106],Zr=[8,9,10,11,60,84,105,106,109,110,111,112],Ni={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,shapeData:39,SHAPE_DATA:40,link:41,node:42,styledVertex:43,AMP:44,vertex:45,STYLE_SEPARATOR:46,idString:47,DOUBLECIRCLESTART:48,DOUBLECIRCLEEND:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,VERTEX_WITH_PROPS_START:58,"NODE_STRING[field]":59,COLON:60,"NODE_STRING[value]":61,PIPE:62,CYLINDERSTART:63,CYLINDEREND:64,DIAMOND_START:65,DIAMOND_STOP:66,TAGEND:67,TRAPSTART:68,TRAPEND:69,INVTRAPSTART:70,INVTRAPEND:71,linkStatement:72,arrowText:73,TESTSTR:74,START_LINK:75,edgeText:76,LINK:77,LINK_ID:78,edgeTextToken:79,STR:80,MD_STR:81,textToken:82,keywords:83,STYLE:84,LINKSTYLE:85,CLASSDEF:86,CLASS:87,CLICK:88,DOWN:89,UP:90,textNoTagsToken:91,stylesOpt:92,"idString[vertex]":93,"idString[class]":94,CALLBACKNAME:95,CALLBACKARGS:96,HREF:97,LINK_TARGET:98,"STR[link]":99,"STR[tooltip]":100,alphaNum:101,DEFAULT:102,numList:103,INTERPOLATE:104,NUM:105,COMMA:106,style:107,styleComponent:108,NODE_STRING:109,UNIT:110,BRKT:111,PCT:112,idStringToken:113,MINUS:114,MULT:115,UNICODE_TEXT:116,TEXT:117,TAGSTART:118,EDGE_TEXT:119,alphaNumToken:120,direction_tb:121,direction_bt:122,direction_rl:123,direction_lr:124,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",40:"SHAPE_DATA",44:"AMP",46:"STYLE_SEPARATOR",48:"DOUBLECIRCLESTART",49:"DOUBLECIRCLEEND",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"VERTEX_WITH_PROPS_START",59:"NODE_STRING[field]",60:"COLON",61:"NODE_STRING[value]",62:"PIPE",63:"CYLINDERSTART",64:"CYLINDEREND",65:"DIAMOND_START",66:"DIAMOND_STOP",67:"TAGEND",68:"TRAPSTART",69:"TRAPEND",70:"INVTRAPSTART",71:"INVTRAPEND",74:"TESTSTR",75:"START_LINK",77:"LINK",78:"LINK_ID",80:"STR",81:"MD_STR",84:"STYLE",85:"LINKSTYLE",86:"CLASSDEF",87:"CLASS",88:"CLICK",89:"DOWN",90:"UP",93:"idString[vertex]",94:"idString[class]",95:"CALLBACKNAME",96:"CALLBACKARGS",97:"HREF",98:"LINK_TARGET",99:"STR[link]",100:"STR[tooltip]",102:"DEFAULT",104:"INTERPOLATE",105:"NUM",106:"COMMA",109:"NODE_STRING",110:"UNIT",111:"BRKT",112:"PCT",114:"MINUS",115:"MULT",116:"UNICODE_TEXT",117:"TEXT",118:"TAGSTART",119:"EDGE_TEXT",121:"direction_tb",122:"direction_bt",123:"direction_rl",124:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[39,2],[39,1],[20,4],[20,3],[20,4],[20,2],[20,2],[20,1],[42,1],[42,6],[42,5],[43,1],[43,3],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,8],[45,4],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,4],[45,4],[45,1],[41,2],[41,3],[41,3],[41,1],[41,3],[41,4],[76,1],[76,2],[76,1],[76,1],[72,1],[72,2],[73,3],[30,1],[30,2],[30,1],[30,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[103,1],[103,3],[92,1],[92,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[82,1],[82,1],[82,1],[82,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[79,1],[79,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[47,1],[47,2],[101,1],[101,2],[33,1],[33,1],[33,1],[33,1]],performAction:o(function(et,mt,Kt,lt,Cn,ye,Vf){var Te=ye.length-1;switch(Cn){case 2:this.$=[];break;case 3:(!Array.isArray(ye[Te])||ye[Te].length>0)&&ye[Te-1].push(ye[Te]),this.$=ye[Te-1];break;case 4:case 183:this.$=ye[Te];break;case 11:lt.setDirection("TB"),this.$="TB";break;case 12:lt.setDirection(ye[Te-1]),this.$=ye[Te-1];break;case 27:this.$=ye[Te-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=lt.addSubGraph(ye[Te-6],ye[Te-1],ye[Te-4]);break;case 34:this.$=lt.addSubGraph(ye[Te-3],ye[Te-1],ye[Te-3]);break;case 35:this.$=lt.addSubGraph(void 0,ye[Te-1],void 0);break;case 37:this.$=ye[Te].trim(),lt.setAccTitle(this.$);break;case 38:case 39:this.$=ye[Te].trim(),lt.setAccDescription(this.$);break;case 43:this.$=ye[Te-1]+ye[Te];break;case 44:this.$=ye[Te];break;case 45:lt.addVertex(ye[Te-1][ye[Te-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,ye[Te]),lt.addLink(ye[Te-3].stmt,ye[Te-1],ye[Te-2]),this.$={stmt:ye[Te-1],nodes:ye[Te-1].concat(ye[Te-3].nodes)};break;case 46:lt.addLink(ye[Te-2].stmt,ye[Te],ye[Te-1]),this.$={stmt:ye[Te],nodes:ye[Te].concat(ye[Te-2].nodes)};break;case 47:lt.addLink(ye[Te-3].stmt,ye[Te-1],ye[Te-2]),this.$={stmt:ye[Te-1],nodes:ye[Te-1].concat(ye[Te-3].nodes)};break;case 48:this.$={stmt:ye[Te-1],nodes:ye[Te-1]};break;case 49:lt.addVertex(ye[Te-1][ye[Te-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,ye[Te]),this.$={stmt:ye[Te-1],nodes:ye[Te-1],shapeData:ye[Te]};break;case 50:this.$={stmt:ye[Te],nodes:ye[Te]};break;case 51:this.$=[ye[Te]];break;case 52:lt.addVertex(ye[Te-5][ye[Te-5].length-1],void 0,void 0,void 0,void 0,void 0,void 0,ye[Te-4]),this.$=ye[Te-5].concat(ye[Te]);break;case 53:this.$=ye[Te-4].concat(ye[Te]);break;case 54:this.$=ye[Te];break;case 55:this.$=ye[Te-2],lt.setClass(ye[Te-2],ye[Te]);break;case 56:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"square");break;case 57:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"doublecircle");break;case 58:this.$=ye[Te-5],lt.addVertex(ye[Te-5],ye[Te-2],"circle");break;case 59:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"ellipse");break;case 60:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"stadium");break;case 61:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"subroutine");break;case 62:this.$=ye[Te-7],lt.addVertex(ye[Te-7],ye[Te-1],"rect",void 0,void 0,void 0,Object.fromEntries([[ye[Te-5],ye[Te-3]]]));break;case 63:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"cylinder");break;case 64:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"round");break;case 65:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"diamond");break;case 66:this.$=ye[Te-5],lt.addVertex(ye[Te-5],ye[Te-2],"hexagon");break;case 67:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"odd");break;case 68:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"trapezoid");break;case 69:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"inv_trapezoid");break;case 70:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"lean_right");break;case 71:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"lean_left");break;case 72:this.$=ye[Te],lt.addVertex(ye[Te]);break;case 73:ye[Te-1].text=ye[Te],this.$=ye[Te-1];break;case 74:case 75:ye[Te-2].text=ye[Te-1],this.$=ye[Te-2];break;case 76:this.$=ye[Te];break;case 77:var wi=lt.destructLink(ye[Te],ye[Te-2]);this.$={type:wi.type,stroke:wi.stroke,length:wi.length,text:ye[Te-1]};break;case 78:var wi=lt.destructLink(ye[Te],ye[Te-2]);this.$={type:wi.type,stroke:wi.stroke,length:wi.length,text:ye[Te-1],id:ye[Te-3]};break;case 79:this.$={text:ye[Te],type:"text"};break;case 80:this.$={text:ye[Te-1].text+""+ye[Te],type:ye[Te-1].type};break;case 81:this.$={text:ye[Te],type:"string"};break;case 82:this.$={text:ye[Te],type:"markdown"};break;case 83:var wi=lt.destructLink(ye[Te]);this.$={type:wi.type,stroke:wi.stroke,length:wi.length};break;case 84:var wi=lt.destructLink(ye[Te]);this.$={type:wi.type,stroke:wi.stroke,length:wi.length,id:ye[Te-1]};break;case 85:this.$=ye[Te-1];break;case 86:this.$={text:ye[Te],type:"text"};break;case 87:this.$={text:ye[Te-1].text+""+ye[Te],type:ye[Te-1].type};break;case 88:this.$={text:ye[Te],type:"string"};break;case 89:case 104:this.$={text:ye[Te],type:"markdown"};break;case 101:this.$={text:ye[Te],type:"text"};break;case 102:this.$={text:ye[Te-1].text+""+ye[Te],type:ye[Te-1].type};break;case 103:this.$={text:ye[Te],type:"text"};break;case 105:this.$=ye[Te-4],lt.addClass(ye[Te-2],ye[Te]);break;case 106:this.$=ye[Te-4],lt.setClass(ye[Te-2],ye[Te]);break;case 107:case 115:this.$=ye[Te-1],lt.setClickEvent(ye[Te-1],ye[Te]);break;case 108:case 116:this.$=ye[Te-3],lt.setClickEvent(ye[Te-3],ye[Te-2]),lt.setTooltip(ye[Te-3],ye[Te]);break;case 109:this.$=ye[Te-2],lt.setClickEvent(ye[Te-2],ye[Te-1],ye[Te]);break;case 110:this.$=ye[Te-4],lt.setClickEvent(ye[Te-4],ye[Te-3],ye[Te-2]),lt.setTooltip(ye[Te-4],ye[Te]);break;case 111:this.$=ye[Te-2],lt.setLink(ye[Te-2],ye[Te]);break;case 112:this.$=ye[Te-4],lt.setLink(ye[Te-4],ye[Te-2]),lt.setTooltip(ye[Te-4],ye[Te]);break;case 113:this.$=ye[Te-4],lt.setLink(ye[Te-4],ye[Te-2],ye[Te]);break;case 114:this.$=ye[Te-6],lt.setLink(ye[Te-6],ye[Te-4],ye[Te]),lt.setTooltip(ye[Te-6],ye[Te-2]);break;case 117:this.$=ye[Te-1],lt.setLink(ye[Te-1],ye[Te]);break;case 118:this.$=ye[Te-3],lt.setLink(ye[Te-3],ye[Te-2]),lt.setTooltip(ye[Te-3],ye[Te]);break;case 119:this.$=ye[Te-3],lt.setLink(ye[Te-3],ye[Te-2],ye[Te]);break;case 120:this.$=ye[Te-5],lt.setLink(ye[Te-5],ye[Te-4],ye[Te]),lt.setTooltip(ye[Te-5],ye[Te-2]);break;case 121:this.$=ye[Te-4],lt.addVertex(ye[Te-2],void 0,void 0,ye[Te]);break;case 122:this.$=ye[Te-4],lt.updateLink([ye[Te-2]],ye[Te]);break;case 123:this.$=ye[Te-4],lt.updateLink(ye[Te-2],ye[Te]);break;case 124:this.$=ye[Te-8],lt.updateLinkInterpolate([ye[Te-6]],ye[Te-2]),lt.updateLink([ye[Te-6]],ye[Te]);break;case 125:this.$=ye[Te-8],lt.updateLinkInterpolate(ye[Te-6],ye[Te-2]),lt.updateLink(ye[Te-6],ye[Te]);break;case 126:this.$=ye[Te-6],lt.updateLinkInterpolate([ye[Te-4]],ye[Te]);break;case 127:this.$=ye[Te-6],lt.updateLinkInterpolate(ye[Te-4],ye[Te]);break;case 128:case 130:this.$=[ye[Te]];break;case 129:case 131:ye[Te-2].push(ye[Te]),this.$=ye[Te-2];break;case 133:this.$=ye[Te-1]+ye[Te];break;case 181:this.$=ye[Te];break;case 182:this.$=ye[Te-1]+""+ye[Te];break;case 184:this.$=ye[Te-1]+""+ye[Te];break;case 185:this.$={stmt:"dir",value:"TB"};break;case 186:this.$={stmt:"dir",value:"BT"};break;case 187:this.$={stmt:"dir",value:"RL"};break;case 188:this.$={stmt:"dir",value:"LR"};break}},"anonymous"),table:[{3:1,4:2,9:e,10:r,12:n},{1:[3]},t(i,a,{5:6}),{4:7,9:e,10:r,12:n},{4:8,9:e,10:r,12:n},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L,121:R,122:O,123:M,124:B},t(i,[2,9]),t(i,[2,10]),t(i,[2,11]),{8:[1,54],9:[1,55],10:F,15:53,18:56},t(P,[2,3]),t(P,[2,4]),t(P,[2,5]),t(P,[2,6]),t(P,[2,7]),t(P,[2,8]),{8:z,9:$,11:H,21:58,41:59,72:63,75:[1,64],77:[1,66],78:[1,65]},{8:z,9:$,11:H,21:67},{8:z,9:$,11:H,21:68},{8:z,9:$,11:H,21:69},{8:z,9:$,11:H,21:70},{8:z,9:$,11:H,21:71},{8:z,9:$,10:[1,72],11:H,21:73},t(P,[2,36]),{35:[1,74]},{37:[1,75]},t(P,[2,39]),t(Q,[2,50],{18:76,39:77,10:F,40:j}),{10:[1,79]},{10:[1,80]},{10:[1,81]},{10:[1,82]},{14:ie,44:ne,60:le,80:[1,86],89:he,95:[1,83],97:[1,84],101:85,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z,120:87},t(P,[2,185]),t(P,[2,186]),t(P,[2,187]),t(P,[2,188]),t(Se,[2,51]),t(Se,[2,54],{46:[1,99]}),t(ce,[2,72],{113:112,29:[1,100],44:g,48:[1,101],50:[1,102],52:[1,103],54:[1,104],56:[1,105],58:[1,106],60:y,63:[1,107],65:[1,108],67:[1,109],68:[1,110],70:[1,111],89:T,102:E,105:A,106:S,109:_,111:I,114:D,115:k,116:L}),t(ae,[2,181]),t(ae,[2,142]),t(ae,[2,143]),t(ae,[2,144]),t(ae,[2,145]),t(ae,[2,146]),t(ae,[2,147]),t(ae,[2,148]),t(ae,[2,149]),t(ae,[2,150]),t(ae,[2,151]),t(ae,[2,152]),t(i,[2,12]),t(i,[2,18]),t(i,[2,19]),{9:[1,113]},t(Oe,[2,26],{18:114,10:F}),t(P,[2,27]),{42:115,43:38,44:g,45:39,47:40,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},t(P,[2,40]),t(P,[2,41]),t(P,[2,42]),t(ge,[2,76],{73:116,62:[1,118],74:[1,117]}),{76:119,79:120,80:ze,81:He,116:$e,119:Re},{75:[1,125],77:[1,126]},t(Ie,[2,83]),t(P,[2,28]),t(P,[2,29]),t(P,[2,30]),t(P,[2,31]),t(P,[2,32]),{10:be,12:W,14:de,27:re,28:127,32:oe,44:V,60:xe,75:q,80:[1,129],81:[1,130],83:140,84:pe,85:ve,86:Pe,87:_e,88:we,89:Ve,90:De,91:128,105:qe,109:at,111:Rt,114:st,115:Ue,116:ct},t(We,a,{5:153}),t(P,[2,37]),t(P,[2,38]),t(Q,[2,48],{44:ot}),t(Q,[2,49],{18:155,10:F,40:Yt}),t(Se,[2,44]),{44:g,47:157,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},{102:[1,158],103:159,105:[1,160]},{44:g,47:161,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},{44:g,47:162,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},t(bt,[2,107],{10:[1,163],96:[1,164]}),{80:[1,165]},t(bt,[2,115],{120:167,10:[1,166],14:ie,44:ne,60:le,89:he,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z}),t(bt,[2,117],{10:[1,168]}),t(Mt,[2,183]),t(Mt,[2,170]),t(Mt,[2,171]),t(Mt,[2,172]),t(Mt,[2,173]),t(Mt,[2,174]),t(Mt,[2,175]),t(Mt,[2,176]),t(Mt,[2,177]),t(Mt,[2,178]),t(Mt,[2,179]),t(Mt,[2,180]),{44:g,47:169,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},{30:170,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:178,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:180,50:[1,179],67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:181,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:182,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:183,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{109:[1,184]},{30:185,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:186,65:[1,187],67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:188,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:189,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:190,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},t(ae,[2,182]),t(i,[2,20]),t(Oe,[2,25]),t(Q,[2,46],{39:191,18:192,10:F,40:j}),t(ge,[2,73],{10:[1,193]}),{10:[1,194]},{30:195,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{77:[1,196],79:197,116:$e,119:Re},t(dn,[2,79]),t(dn,[2,81]),t(dn,[2,82]),t(dn,[2,168]),t(dn,[2,169]),{76:198,79:120,80:ze,81:He,116:$e,119:Re},t(Ie,[2,84]),{8:z,9:$,10:be,11:H,12:W,14:de,21:200,27:re,29:[1,199],32:oe,44:V,60:xe,75:q,83:140,84:pe,85:ve,86:Pe,87:_e,88:we,89:Ve,90:De,91:201,105:qe,109:at,111:Rt,114:st,115:Ue,116:ct},t(Tt,[2,101]),t(Tt,[2,103]),t(Tt,[2,104]),t(Tt,[2,157]),t(Tt,[2,158]),t(Tt,[2,159]),t(Tt,[2,160]),t(Tt,[2,161]),t(Tt,[2,162]),t(Tt,[2,163]),t(Tt,[2,164]),t(Tt,[2,165]),t(Tt,[2,166]),t(Tt,[2,167]),t(Tt,[2,90]),t(Tt,[2,91]),t(Tt,[2,92]),t(Tt,[2,93]),t(Tt,[2,94]),t(Tt,[2,95]),t(Tt,[2,96]),t(Tt,[2,97]),t(Tt,[2,98]),t(Tt,[2,99]),t(Tt,[2,100]),{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,202],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L,121:R,122:O,123:M,124:B},{10:F,18:203},{44:[1,204]},t(Se,[2,43]),{10:[1,205],44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:112,114:D,115:k,116:L},{10:[1,206]},{10:[1,207],106:[1,208]},t(On,[2,128]),{10:[1,209],44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:112,114:D,115:k,116:L},{10:[1,210],44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:112,114:D,115:k,116:L},{80:[1,211]},t(bt,[2,109],{10:[1,212]}),t(bt,[2,111],{10:[1,213]}),{80:[1,214]},t(Mt,[2,184]),{80:[1,215],98:[1,216]},t(Se,[2,55],{113:112,44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,114:D,115:k,116:L}),{31:[1,217],67:xt,82:218,116:ft,117:yt,118:nt},t(tn,[2,86]),t(tn,[2,88]),t(tn,[2,89]),t(tn,[2,153]),t(tn,[2,154]),t(tn,[2,155]),t(tn,[2,156]),{49:[1,219],67:xt,82:218,116:ft,117:yt,118:nt},{30:220,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{51:[1,221],67:xt,82:218,116:ft,117:yt,118:nt},{53:[1,222],67:xt,82:218,116:ft,117:yt,118:nt},{55:[1,223],67:xt,82:218,116:ft,117:yt,118:nt},{57:[1,224],67:xt,82:218,116:ft,117:yt,118:nt},{60:[1,225]},{64:[1,226],67:xt,82:218,116:ft,117:yt,118:nt},{66:[1,227],67:xt,82:218,116:ft,117:yt,118:nt},{30:228,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{31:[1,229],67:xt,82:218,116:ft,117:yt,118:nt},{67:xt,69:[1,230],71:[1,231],82:218,116:ft,117:yt,118:nt},{67:xt,69:[1,233],71:[1,232],82:218,116:ft,117:yt,118:nt},t(Q,[2,45],{18:155,10:F,40:Yt}),t(Q,[2,47],{44:ot}),t(ge,[2,75]),t(ge,[2,74]),{62:[1,234],67:xt,82:218,116:ft,117:yt,118:nt},t(ge,[2,77]),t(dn,[2,80]),{77:[1,235],79:197,116:$e,119:Re},{30:236,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},t(We,a,{5:237}),t(Tt,[2,102]),t(P,[2,35]),{43:238,44:g,45:39,47:40,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},{10:F,18:239},{10:_r,60:Dr,84:Pn,92:240,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{10:_r,60:Dr,84:Pn,92:251,104:[1,252],105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{10:_r,60:Dr,84:Pn,92:253,104:[1,254],105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{105:[1,255]},{10:_r,60:Dr,84:Pn,92:256,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{44:g,47:257,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},t(bt,[2,108]),{80:[1,258]},{80:[1,259],98:[1,260]},t(bt,[2,116]),t(bt,[2,118],{10:[1,261]}),t(bt,[2,119]),t(ce,[2,56]),t(tn,[2,87]),t(ce,[2,57]),{51:[1,262],67:xt,82:218,116:ft,117:yt,118:nt},t(ce,[2,64]),t(ce,[2,59]),t(ce,[2,60]),t(ce,[2,61]),{109:[1,263]},t(ce,[2,63]),t(ce,[2,65]),{66:[1,264],67:xt,82:218,116:ft,117:yt,118:nt},t(ce,[2,67]),t(ce,[2,68]),t(ce,[2,70]),t(ce,[2,69]),t(ce,[2,71]),t([10,44,60,89,102,105,106,109,111,114,115,116],[2,85]),t(ge,[2,78]),{31:[1,265],67:xt,82:218,116:ft,117:yt,118:nt},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,266],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L,121:R,122:O,123:M,124:B},t(Se,[2,53]),{43:267,44:g,45:39,47:40,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},t(bt,[2,121],{106:rn}),t(gn,[2,130],{108:269,10:_r,60:Dr,84:Pn,105:At,109:Ce,110:tt,111:St,112:mr}),t(Zr,[2,132]),t(Zr,[2,134]),t(Zr,[2,135]),t(Zr,[2,136]),t(Zr,[2,137]),t(Zr,[2,138]),t(Zr,[2,139]),t(Zr,[2,140]),t(Zr,[2,141]),t(bt,[2,122],{106:rn}),{10:[1,270]},t(bt,[2,123],{106:rn}),{10:[1,271]},t(On,[2,129]),t(bt,[2,105],{106:rn}),t(bt,[2,106],{113:112,44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,114:D,115:k,116:L}),t(bt,[2,110]),t(bt,[2,112],{10:[1,272]}),t(bt,[2,113]),{98:[1,273]},{51:[1,274]},{62:[1,275]},{66:[1,276]},{8:z,9:$,11:H,21:277},t(P,[2,34]),t(Se,[2,52]),{10:_r,60:Dr,84:Pn,105:At,107:278,108:242,109:Ce,110:tt,111:St,112:mr},t(Zr,[2,133]),{14:ie,44:ne,60:le,89:he,101:279,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z,120:87},{14:ie,44:ne,60:le,89:he,101:280,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z,120:87},{98:[1,281]},t(bt,[2,120]),t(ce,[2,58]),{30:282,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},t(ce,[2,66]),t(We,a,{5:283}),t(gn,[2,131],{108:269,10:_r,60:Dr,84:Pn,105:At,109:Ce,110:tt,111:St,112:mr}),t(bt,[2,126],{120:167,10:[1,284],14:ie,44:ne,60:le,89:he,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z}),t(bt,[2,127],{120:167,10:[1,285],14:ie,44:ne,60:le,89:he,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z}),t(bt,[2,114]),{31:[1,286],67:xt,82:218,116:ft,117:yt,118:nt},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,287],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L,121:R,122:O,123:M,124:B},{10:_r,60:Dr,84:Pn,92:288,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{10:_r,60:Dr,84:Pn,92:289,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},t(ce,[2,62]),t(P,[2,33]),t(bt,[2,124],{106:rn}),t(bt,[2,125],{106:rn})],defaultActions:{},parseError:o(function(et,mt){if(mt.recoverable)this.trace(et);else{var Kt=new Error(et);throw Kt.hash=mt,Kt}},"parseError"),parse:o(function(et){var mt=this,Kt=[0],lt=[],Cn=[null],ye=[],Vf=this.table,Te="",wi=0,TF=0,kF=0,M2e=2,EF=1,I2e=ye.slice.call(arguments,1),Xi=Object.create(this.lexer),Uf={yy:{}};for(var xC in this.yy)Object.prototype.hasOwnProperty.call(this.yy,xC)&&(Uf.yy[xC]=this.yy[xC]);Xi.setInput(et,Uf.yy),Uf.yy.lexer=Xi,Uf.yy.parser=this,typeof Xi.yylloc>"u"&&(Xi.yylloc={});var bC=Xi.yylloc;ye.push(bC);var O2e=Xi.options&&Xi.options.ranges;typeof Uf.yy.parseError=="function"?this.parseError=Uf.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function wnt(Ws){Kt.length=Kt.length-2*Ws,Cn.length=Cn.length-Ws,ye.length=ye.length-Ws}o(wnt,"popStack");function P2e(){var Ws;return Ws=lt.pop()||Xi.lex()||EF,typeof Ws!="number"&&(Ws instanceof Array&&(lt=Ws,Ws=lt.pop()),Ws=mt.symbols_[Ws]||Ws),Ws}o(P2e,"lex");for(var Wa,wC,Hf,xo,Tnt,TC,Jp={},_4,Jc,SF,D4;;){if(Hf=Kt[Kt.length-1],this.defaultActions[Hf]?xo=this.defaultActions[Hf]:((Wa===null||typeof Wa>"u")&&(Wa=P2e()),xo=Vf[Hf]&&Vf[Hf][Wa]),typeof xo>"u"||!xo.length||!xo[0]){var kC="";D4=[];for(_4 in Vf[Hf])this.terminals_[_4]&&_4>M2e&&D4.push("'"+this.terminals_[_4]+"'");Xi.showPosition?kC="Parse error on line "+(wi+1)+`:
480 +`+Xi.showPosition()+`
481 +Expecting `+D4.join(", ")+", got '"+(this.terminals_[Wa]||Wa)+"'":kC="Parse error on line "+(wi+1)+": Unexpected "+(Wa==EF?"end of input":"'"+(this.terminals_[Wa]||Wa)+"'"),this.parseError(kC,{text:Xi.match,token:this.terminals_[Wa]||Wa,line:Xi.yylineno,loc:bC,expected:D4})}if(xo[0]instanceof Array&&xo.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Hf+", token: "+Wa);switch(xo[0]){case 1:Kt.push(Wa),Cn.push(Xi.yytext),ye.push(Xi.yylloc),Kt.push(xo[1]),Wa=null,wC?(Wa=wC,wC=null):(TF=Xi.yyleng,Te=Xi.yytext,wi=Xi.yylineno,bC=Xi.yylloc,kF>0&&kF--);break;case 2:if(Jc=this.productions_[xo[1]][1],Jp.$=Cn[Cn.length-Jc],Jp._$={first_line:ye[ye.length-(Jc||1)].first_line,last_line:ye[ye.length-1].last_line,first_column:ye[ye.length-(Jc||1)].first_column,last_column:ye[ye.length-1].last_column},O2e&&(Jp._$.range=[ye[ye.length-(Jc||1)].range[0],ye[ye.length-1].range[1]]),TC=this.performAction.apply(Jp,[Te,TF,wi,Uf.yy,xo[1],Cn,ye].concat(I2e)),typeof TC<"u")return TC;Jc&&(Kt=Kt.slice(0,-1*Jc*2),Cn=Cn.slice(0,-1*Jc),ye=ye.slice(0,-1*Jc)),Kt.push(this.productions_[xo[1]][0]),Cn.push(Jp.$),ye.push(Jp._$),SF=Vf[Kt[Kt.length-2]][Kt[Kt.length-1]],Kt.push(SF);break;case 3:return!0}}return!0},"parse")},Zn=function(){var Hr={EOF:1,parseError:o(function(mt,Kt){if(this.yy.parser)this.yy.parser.parseError(mt,Kt);else throw new Error(mt)},"parseError"),setInput:o(function(et,mt){return this.yy=mt||this.yy||{},this._input=et,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var et=this._input[0];this.yytext+=et,this.yyleng++,this.offset++,this.match+=et,this.matched+=et;var mt=et.match(/(?:\r\n?|\n).*/g);return mt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),et},"input"),unput:o(function(et){var mt=et.length,Kt=et.split(/(?:\r\n?|\n)/g);this._input=et+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-mt),this.offset-=mt;var lt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Kt.length-1&&(this.yylineno-=Kt.length-1);var Cn=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Kt?(Kt.length===lt.length?this.yylloc.first_column:0)+lt[lt.length-Kt.length].length-Kt[0].length:this.yylloc.first_column-mt},this.options.ranges&&(this.yylloc.range=[Cn[0],Cn[0]+this.yyleng-mt]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
482 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(et){this.unput(this.match.slice(et))},"less"),pastInput:o(function(){var et=this.matched.substr(0,this.matched.length-this.match.length);return(et.length>20?"...":"")+et.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var et=this.match;return et.length<20&&(et+=this._input.substr(0,20-et.length)),(et.substr(0,20)+(et.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var et=this.pastInput(),mt=new Array(et.length+1).join("-");return et+this.upcomingInput()+`
483 +`+mt+"^"},"showPosition"),test_match:o(function(et,mt){var Kt,lt,Cn;if(this.options.backtrack_lexer&&(Cn={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Cn.yylloc.range=this.yylloc.range.slice(0))),lt=et[0].match(/(?:\r\n?|\n).*/g),lt&&(this.yylineno+=lt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:lt?lt[lt.length-1].length-lt[lt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+et[0].length},this.yytext+=et[0],this.match+=et[0],this.matches=et,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(et[0].length),this.matched+=et[0],Kt=this.performAction.call(this,this.yy,this,mt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Kt)return Kt;if(this._backtrack){for(var ye in Cn)this[ye]=Cn[ye];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var et,mt,Kt,lt;this._more||(this.yytext="",this.match="");for(var Cn=this._currentRules(),ye=0;ye<Cn.length;ye++)if(Kt=this._input.match(this.rules[Cn[ye]]),Kt&&(!mt||Kt[0].length>mt[0].length)){if(mt=Kt,lt=ye,this.options.backtrack_lexer){if(et=this.test_match(Kt,Cn[ye]),et!==!1)return et;if(this._backtrack){mt=!1;continue}else return!1}else if(!this.options.flex)break}return mt?(et=this.test_match(mt,Cn[lt]),et!==!1?et:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
484 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var mt=this.next();return mt||this.lex()},"lex"),begin:o(function(mt){this.conditionStack.push(mt)},"begin"),popState:o(function(){var mt=this.conditionStack.length-1;return mt>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(mt){return mt=this.conditionStack.length-1-Math.abs(mt||0),mt>=0?this.conditionStack[mt]:"INITIAL"},"topState"),pushState:o(function(mt){this.begin(mt)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(mt,Kt,lt,Cn){var ye=Cn;switch(lt){case 0:return this.begin("acc_title"),34;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),36;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.pushState("shapeData"),Kt.yytext="",40;break;case 8:return this.pushState("shapeDataStr"),40;break;case 9:return this.popState(),40;break;case 10:let Vf=/\n\s*/g;return Kt.yytext=Kt.yytext.replace(Vf,"<br/>"),40;break;case 11:return 40;case 12:this.popState();break;case 13:this.begin("callbackname");break;case 14:this.popState();break;case 15:this.popState(),this.begin("callbackargs");break;case 16:return 95;case 17:this.popState();break;case 18:return 96;case 19:return"MD_STR";case 20:this.popState();break;case 21:this.begin("md_string");break;case 22:return"STR";case 23:this.popState();break;case 24:this.pushState("string");break;case 25:return 84;case 26:return 102;case 27:return 85;case 28:return 104;case 29:return 86;case 30:return 87;case 31:return 97;case 32:this.begin("click");break;case 33:this.popState();break;case 34:return 88;case 35:return mt.lex.firstGraph()&&this.begin("dir"),12;break;case 36:return mt.lex.firstGraph()&&this.begin("dir"),12;break;case 37:return mt.lex.firstGraph()&&this.begin("dir"),12;break;case 38:return 27;case 39:return 32;case 40:return 98;case 41:return 98;case 42:return 98;case 43:return 98;case 44:return this.popState(),13;break;case 45:return this.popState(),14;break;case 46:return this.popState(),14;break;case 47:return this.popState(),14;break;case 48:return this.popState(),14;break;case 49:return this.popState(),14;break;case 50:return this.popState(),14;break;case 51:return this.popState(),14;break;case 52:return this.popState(),14;break;case 53:return this.popState(),14;break;case 54:return this.popState(),14;break;case 55:return 121;case 56:return 122;case 57:return 123;case 58:return 124;case 59:return 78;case 60:return 105;case 61:return 111;case 62:return 46;case 63:return 60;case 64:return 44;case 65:return 8;case 66:return 106;case 67:return 115;case 68:return this.popState(),77;break;case 69:return this.pushState("edgeText"),75;break;case 70:return 119;case 71:return this.popState(),77;break;case 72:return this.pushState("thickEdgeText"),75;break;case 73:return 119;case 74:return this.popState(),77;break;case 75:return this.pushState("dottedEdgeText"),75;break;case 76:return 119;case 77:return 77;case 78:return this.popState(),53;break;case 79:return"TEXT";case 80:return this.pushState("ellipseText"),52;break;case 81:return this.popState(),55;break;case 82:return this.pushState("text"),54;break;case 83:return this.popState(),57;break;case 84:return this.pushState("text"),56;break;case 85:return 58;case 86:return this.pushState("text"),67;break;case 87:return this.popState(),64;break;case 88:return this.pushState("text"),63;break;case 89:return this.popState(),49;break;case 90:return this.pushState("text"),48;break;case 91:return this.popState(),69;break;case 92:return this.popState(),71;break;case 93:return 117;case 94:return this.pushState("trapText"),68;break;case 95:return this.pushState("trapText"),70;break;case 96:return 118;case 97:return 67;case 98:return 90;case 99:return"SEP";case 100:return 89;case 101:return 115;case 102:return 111;case 103:return 44;case 104:return 109;case 105:return 114;case 106:return 116;case 107:return this.popState(),62;break;case 108:return this.pushState("text"),62;break;case 109:return this.popState(),51;break;case 110:return this.pushState("text"),50;break;case 111:return this.popState(),31;break;case 112:return this.pushState("text"),29;break;case 113:return this.popState(),66;break;case 114:return this.pushState("text"),65;break;case 115:return"TEXT";case 116:return"QUOTE";case 117:return 9;case 118:return 10;case 119:return 11}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:@\{)/,/^(?:["])/,/^(?:["])/,/^(?:[^\"]+)/,/^(?:[^}^"]+)/,/^(?:\})/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[^\s\"]+@(?=[^\{\"]))/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{shapeDataEndBracket:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},shapeDataStr:{rules:[9,10,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},shapeData:{rules:[8,11,12,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},callbackargs:{rules:[17,18,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},callbackname:{rules:[14,15,16,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},href:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},click:{rules:[21,24,33,34,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},dottedEdgeText:{rules:[21,24,74,76,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},thickEdgeText:{rules:[21,24,71,73,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},edgeText:{rules:[21,24,68,70,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},trapText:{rules:[21,24,77,80,82,84,88,90,91,92,93,94,95,108,110,112,114],inclusive:!1},ellipseText:{rules:[21,24,77,78,79,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},text:{rules:[21,24,77,80,81,82,83,84,87,88,89,90,94,95,107,108,109,110,111,112,113,114,115],inclusive:!1},vertex:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},dir:{rules:[21,24,44,45,46,47,48,49,50,51,52,53,54,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_descr_multiline:{rules:[5,6,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_descr:{rules:[3,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_title:{rules:[1,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},md_string:{rules:[19,20,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},string:{rules:[21,22,23,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},INITIAL:{rules:[0,2,4,7,13,21,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,71,72,74,75,77,80,82,84,85,86,88,90,94,95,96,97,98,99,100,101,102,103,104,105,106,108,110,112,114,116,117,118,119],inclusive:!0}}};return Hr}();Ni.lexer=Zn;function Sn(){this.yy={}}return o(Sn,"Parser"),Sn.prototype=Ni,Ni.Parser=Sn,new Sn}();xR.parser=xR;bR=xR});var Uie,Hie,Wie=N(()=>{"use strict";Vie();Uie=Object.assign({},bR);Uie.parse=t=>{let e=t.replace(/}\s*\n/g,`}
485 +`);return bR.parse(e)};Hie=Uie});var gOe,yOe,qie,Yie=N(()=>{"use strict";Ys();gOe=o((t,e)=>{let r=Kf,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return qa(n,i,a,e)},"fade"),yOe=o(t=>`.label {
486 + font-family: ${t.fontFamily};
487 + color: ${t.nodeTextColor||t.textColor};
488 + }
489 + .cluster-label text {
490 + fill: ${t.titleColor};
491 + }
492 + .cluster-label span {
493 + color: ${t.titleColor};
494 + }
495 + .cluster-label span p {
496 + background-color: transparent;
497 + }
498 +
499 + .label text,span {
500 + fill: ${t.nodeTextColor||t.textColor};
501 + color: ${t.nodeTextColor||t.textColor};
502 + }
503 +
504 + .node rect,
505 + .node circle,
506 + .node ellipse,
507 + .node polygon,
508 + .node path {
509 + fill: ${t.mainBkg};
510 + stroke: ${t.nodeBorder};
511 + stroke-width: 1px;
512 + }
513 + .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label {
514 + text-anchor: middle;
515 + }
516 + // .flowchart-label .text-outer-tspan {
517 + // text-anchor: middle;
518 + // }
519 + // .flowchart-label .text-inner-tspan {
520 + // text-anchor: start;
521 + // }
522 +
523 + .node .katex path {
524 + fill: #000;
525 + stroke: #000;
526 + stroke-width: 1px;
527 + }
528 +
529 + .rough-node .label,.node .label, .image-shape .label, .icon-shape .label {
530 + text-align: center;
531 + }
532 + .node.clickable {
533 + cursor: pointer;
534 + }
535 +
536 +
537 + .root .anchor path {
538 + fill: ${t.lineColor} !important;
539 + stroke-width: 0;
540 + stroke: ${t.lineColor};
541 + }
542 +
543 + .arrowheadPath {
544 + fill: ${t.arrowheadColor};
545 + }
546 +
547 + .edgePath .path {
548 + stroke: ${t.lineColor};
549 + stroke-width: 2.0px;
550 + }
551 +
552 + .flowchart-link {
553 + stroke: ${t.lineColor};
554 + fill: none;
555 + }
556 +
557 + .edgeLabel {
558 + background-color: ${t.edgeLabelBackground};
559 + p {
560 + background-color: ${t.edgeLabelBackground};
561 + }
562 + rect {
563 + opacity: 0.5;
564 + background-color: ${t.edgeLabelBackground};
565 + fill: ${t.edgeLabelBackground};
566 + }
567 + text-align: center;
568 + }
569 +
570 + /* For html labels only */
571 + .labelBkg {
572 + background-color: ${gOe(t.edgeLabelBackground,.5)};
573 + // background-color:
574 + }
575 +
576 + .cluster rect {
577 + fill: ${t.clusterBkg};
578 + stroke: ${t.clusterBorder};
579 + stroke-width: 1px;
580 + }
581 +
582 + .cluster text {
583 + fill: ${t.titleColor};
584 + }
585 +
586 + .cluster span {
587 + color: ${t.titleColor};
588 + }
589 + /* .cluster div {
590 + color: ${t.titleColor};
591 + } */
592 +
593 + div.mermaidTooltip {
594 + position: absolute;
595 + text-align: center;
596 + max-width: 200px;
597 + padding: 2px;
598 + font-family: ${t.fontFamily};
599 + font-size: 12px;
600 + background: ${t.tertiaryColor};
601 + border: 1px solid ${t.border2};
602 + border-radius: 2px;
603 + pointer-events: none;
604 + z-index: 100;
605 + }
606 +
607 + .flowchartTitleText {
608 + text-anchor: middle;
609 + font-size: 18px;
610 + fill: ${t.textColor};
611 + }
612 +
613 + rect.text {
614 + fill: none;
615 + stroke-width: 0;
616 + }
617 +
618 + .icon-shape, .image-shape {
619 + background-color: ${t.edgeLabelBackground};
620 + p {
621 + background-color: ${t.edgeLabelBackground};
622 + padding: 2px;
623 + }
624 + rect {
625 + opacity: 0.5;
626 + background-color: ${t.edgeLabelBackground};
627 + fill: ${t.edgeLabelBackground};
628 + }
629 + text-align: center;
630 + }
631 +`,"getStyles"),qie=yOe});var ik={};hr(ik,{diagram:()=>vOe});var vOe,ak=N(()=>{"use strict";zt();qZ();Gie();Wie();Yie();vOe={parser:Hie,get db(){return new Uw},renderer:zie,styles:qie,init:o(t=>{t.flowchart||(t.flowchart={}),t.layout&&Yy({layout:t.layout}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Yy({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}})},"init")}});var wR,Zie,Jie=N(()=>{"use strict";wR=function(){var t=o(function(J,se,ue,Z){for(ue=ue||{},Z=J.length;Z--;ue[J[Z]]=se);return ue},"o"),e=[6,8,10,22,24,26,28,33,34,35,36,37,40,43,44,50],r=[1,10],n=[1,11],i=[1,12],a=[1,13],s=[1,20],l=[1,21],u=[1,22],h=[1,23],f=[1,24],d=[1,19],p=[1,25],m=[1,26],g=[1,18],y=[1,33],v=[1,34],x=[1,35],b=[1,36],w=[1,37],C=[6,8,10,13,15,17,20,21,22,24,26,28,33,34,35,36,37,40,43,44,50,63,64,65,66,67],T=[1,42],E=[1,43],A=[1,52],S=[40,50,68,69],_=[1,63],I=[1,61],D=[1,58],k=[1,62],L=[1,64],R=[6,8,10,13,17,22,24,26,28,33,34,35,36,37,40,41,42,43,44,48,49,50,63,64,65,66,67],O=[63,64,65,66,67],M=[1,81],B=[1,80],F=[1,78],P=[1,79],z=[6,10,42,47],$=[6,10,13,41,42,47,48,49],H=[1,89],Q=[1,88],j=[1,87],ie=[19,56],ne=[1,98],le=[1,97],he=[19,56,58,60],K={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,COLON:13,role:14,STYLE_SEPARATOR:15,idList:16,BLOCK_START:17,attributes:18,BLOCK_STOP:19,SQS:20,SQE:21,title:22,title_value:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,direction:29,classDefStatement:30,classStatement:31,styleStatement:32,direction_tb:33,direction_bt:34,direction_rl:35,direction_lr:36,CLASSDEF:37,stylesOpt:38,separator:39,UNICODE_TEXT:40,STYLE_TEXT:41,COMMA:42,CLASS:43,STYLE:44,style:45,styleComponent:46,SEMI:47,NUM:48,BRKT:49,ENTITY_NAME:50,attribute:51,attributeType:52,attributeName:53,attributeKeyTypeList:54,attributeComment:55,ATTRIBUTE_WORD:56,attributeKeyType:57,",":58,ATTRIBUTE_KEY:59,COMMENT:60,cardinality:61,relType:62,ZERO_OR_ONE:63,ZERO_OR_MORE:64,ONE_OR_MORE:65,ONLY_ONE:66,MD_PARENT:67,NON_IDENTIFYING:68,IDENTIFYING:69,WORD:70,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:"COLON",15:"STYLE_SEPARATOR",17:"BLOCK_START",19:"BLOCK_STOP",20:"SQS",21:"SQE",22:"title",23:"title_value",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"direction_tb",34:"direction_bt",35:"direction_rl",36:"direction_lr",37:"CLASSDEF",40:"UNICODE_TEXT",41:"STYLE_TEXT",42:"COMMA",43:"CLASS",44:"STYLE",47:"SEMI",48:"NUM",49:"BRKT",50:"ENTITY_NAME",56:"ATTRIBUTE_WORD",58:",",59:"ATTRIBUTE_KEY",60:"COMMENT",63:"ZERO_OR_ONE",64:"ZERO_OR_MORE",65:"ONE_OR_MORE",66:"ONLY_ONE",67:"MD_PARENT",68:"NON_IDENTIFYING",69:"IDENTIFYING",70:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,9],[9,7],[9,7],[9,4],[9,6],[9,3],[9,5],[9,1],[9,3],[9,7],[9,9],[9,6],[9,8],[9,4],[9,6],[9,2],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[9,1],[29,1],[29,1],[29,1],[29,1],[30,4],[16,1],[16,1],[16,3],[16,3],[31,3],[32,4],[38,1],[38,3],[45,1],[45,2],[39,1],[39,1],[39,1],[46,1],[46,1],[46,1],[46,1],[11,1],[11,1],[18,1],[18,2],[51,2],[51,3],[51,3],[51,4],[52,1],[53,1],[54,1],[54,3],[57,1],[55,1],[12,3],[61,1],[61,1],[61,1],[61,1],[61,1],[62,1],[62,1],[14,1],[14,1],[14,1]],performAction:o(function(se,ue,Z,Se,ce,ae,Oe){var ge=ae.length-1;switch(ce){case 1:break;case 2:this.$=[];break;case 3:ae[ge-1].push(ae[ge]),this.$=ae[ge-1];break;case 4:case 5:this.$=ae[ge];break;case 6:case 7:this.$=[];break;case 8:Se.addEntity(ae[ge-4]),Se.addEntity(ae[ge-2]),Se.addRelationship(ae[ge-4],ae[ge],ae[ge-2],ae[ge-3]);break;case 9:Se.addEntity(ae[ge-8]),Se.addEntity(ae[ge-4]),Se.addRelationship(ae[ge-8],ae[ge],ae[ge-4],ae[ge-5]),Se.setClass([ae[ge-8]],ae[ge-6]),Se.setClass([ae[ge-4]],ae[ge-2]);break;case 10:Se.addEntity(ae[ge-6]),Se.addEntity(ae[ge-2]),Se.addRelationship(ae[ge-6],ae[ge],ae[ge-2],ae[ge-3]),Se.setClass([ae[ge-6]],ae[ge-4]);break;case 11:Se.addEntity(ae[ge-6]),Se.addEntity(ae[ge-4]),Se.addRelationship(ae[ge-6],ae[ge],ae[ge-4],ae[ge-5]),Se.setClass([ae[ge-4]],ae[ge-2]);break;case 12:Se.addEntity(ae[ge-3]),Se.addAttributes(ae[ge-3],ae[ge-1]);break;case 13:Se.addEntity(ae[ge-5]),Se.addAttributes(ae[ge-5],ae[ge-1]),Se.setClass([ae[ge-5]],ae[ge-3]);break;case 14:Se.addEntity(ae[ge-2]);break;case 15:Se.addEntity(ae[ge-4]),Se.setClass([ae[ge-4]],ae[ge-2]);break;case 16:Se.addEntity(ae[ge]);break;case 17:Se.addEntity(ae[ge-2]),Se.setClass([ae[ge-2]],ae[ge]);break;case 18:Se.addEntity(ae[ge-6],ae[ge-4]),Se.addAttributes(ae[ge-6],ae[ge-1]);break;case 19:Se.addEntity(ae[ge-8],ae[ge-6]),Se.addAttributes(ae[ge-8],ae[ge-1]),Se.setClass([ae[ge-8]],ae[ge-3]);break;case 20:Se.addEntity(ae[ge-5],ae[ge-3]);break;case 21:Se.addEntity(ae[ge-7],ae[ge-5]),Se.setClass([ae[ge-7]],ae[ge-2]);break;case 22:Se.addEntity(ae[ge-3],ae[ge-1]);break;case 23:Se.addEntity(ae[ge-5],ae[ge-3]),Se.setClass([ae[ge-5]],ae[ge]);break;case 24:case 25:this.$=ae[ge].trim(),Se.setAccTitle(this.$);break;case 26:case 27:this.$=ae[ge].trim(),Se.setAccDescription(this.$);break;case 32:Se.setDirection("TB");break;case 33:Se.setDirection("BT");break;case 34:Se.setDirection("RL");break;case 35:Se.setDirection("LR");break;case 36:this.$=ae[ge-3],Se.addClass(ae[ge-2],ae[ge-1]);break;case 37:case 38:case 56:case 64:this.$=[ae[ge]];break;case 39:case 40:this.$=ae[ge-2].concat([ae[ge]]);break;case 41:this.$=ae[ge-2],Se.setClass(ae[ge-1],ae[ge]);break;case 42:this.$=ae[ge-3],Se.addCssStyles(ae[ge-2],ae[ge-1]);break;case 43:this.$=[ae[ge]];break;case 44:ae[ge-2].push(ae[ge]),this.$=ae[ge-2];break;case 46:this.$=ae[ge-1]+ae[ge];break;case 54:case 76:case 77:this.$=ae[ge].replace(/"/g,"");break;case 55:case 78:this.$=ae[ge];break;case 57:ae[ge].push(ae[ge-1]),this.$=ae[ge];break;case 58:this.$={type:ae[ge-1],name:ae[ge]};break;case 59:this.$={type:ae[ge-2],name:ae[ge-1],keys:ae[ge]};break;case 60:this.$={type:ae[ge-2],name:ae[ge-1],comment:ae[ge]};break;case 61:this.$={type:ae[ge-3],name:ae[ge-2],keys:ae[ge-1],comment:ae[ge]};break;case 62:case 63:case 66:this.$=ae[ge];break;case 65:ae[ge-2].push(ae[ge]),this.$=ae[ge-2];break;case 67:this.$=ae[ge].replace(/"/g,"");break;case 68:this.$={cardA:ae[ge],relType:ae[ge-1],cardB:ae[ge-2]};break;case 69:this.$=Se.Cardinality.ZERO_OR_ONE;break;case 70:this.$=Se.Cardinality.ZERO_OR_MORE;break;case 71:this.$=Se.Cardinality.ONE_OR_MORE;break;case 72:this.$=Se.Cardinality.ONLY_ONE;break;case 73:this.$=Se.Cardinality.MD_PARENT;break;case 74:this.$=Se.Identification.NON_IDENTIFYING;break;case 75:this.$=Se.Identification.IDENTIFYING;break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,22:r,24:n,26:i,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:f,40:d,43:p,44:m,50:g},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:27,11:9,22:r,24:n,26:i,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:f,40:d,43:p,44:m,50:g},t(e,[2,5]),t(e,[2,6]),t(e,[2,16],{12:28,61:32,15:[1,29],17:[1,30],20:[1,31],63:y,64:v,65:x,66:b,67:w}),{23:[1,38]},{25:[1,39]},{27:[1,40]},t(e,[2,27]),t(e,[2,28]),t(e,[2,29]),t(e,[2,30]),t(e,[2,31]),t(C,[2,54]),t(C,[2,55]),t(e,[2,32]),t(e,[2,33]),t(e,[2,34]),t(e,[2,35]),{16:41,40:T,41:E},{16:44,40:T,41:E},{16:45,40:T,41:E},t(e,[2,4]),{11:46,40:d,50:g},{16:47,40:T,41:E},{18:48,19:[1,49],51:50,52:51,56:A},{11:53,40:d,50:g},{62:54,68:[1,55],69:[1,56]},t(S,[2,69]),t(S,[2,70]),t(S,[2,71]),t(S,[2,72]),t(S,[2,73]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),{13:_,38:57,41:I,42:D,45:59,46:60,48:k,49:L},t(R,[2,37]),t(R,[2,38]),{16:65,40:T,41:E,42:D},{13:_,38:66,41:I,42:D,45:59,46:60,48:k,49:L},{13:[1,67],15:[1,68]},t(e,[2,17],{61:32,12:69,17:[1,70],42:D,63:y,64:v,65:x,66:b,67:w}),{19:[1,71]},t(e,[2,14]),{18:72,19:[2,56],51:50,52:51,56:A},{53:73,56:[1,74]},{56:[2,62]},{21:[1,75]},{61:76,63:y,64:v,65:x,66:b,67:w},t(O,[2,74]),t(O,[2,75]),{6:M,10:B,39:77,42:F,47:P},{40:[1,82],41:[1,83]},t(z,[2,43],{46:84,13:_,41:I,48:k,49:L}),t($,[2,45]),t($,[2,50]),t($,[2,51]),t($,[2,52]),t($,[2,53]),t(e,[2,41],{42:D}),{6:M,10:B,39:85,42:F,47:P},{14:86,40:H,50:Q,70:j},{16:90,40:T,41:E},{11:91,40:d,50:g},{18:92,19:[1,93],51:50,52:51,56:A},t(e,[2,12]),{19:[2,57]},t(ie,[2,58],{54:94,55:95,57:96,59:ne,60:le}),t([19,56,59,60],[2,63]),t(e,[2,22],{15:[1,100],17:[1,99]}),t([40,50],[2,68]),t(e,[2,36]),{13:_,41:I,45:101,46:60,48:k,49:L},t(e,[2,47]),t(e,[2,48]),t(e,[2,49]),t(R,[2,39]),t(R,[2,40]),t($,[2,46]),t(e,[2,42]),t(e,[2,8]),t(e,[2,76]),t(e,[2,77]),t(e,[2,78]),{13:[1,102],42:D},{13:[1,104],15:[1,103]},{19:[1,105]},t(e,[2,15]),t(ie,[2,59],{55:106,58:[1,107],60:le}),t(ie,[2,60]),t(he,[2,64]),t(ie,[2,67]),t(he,[2,66]),{18:108,19:[1,109],51:50,52:51,56:A},{16:110,40:T,41:E},t(z,[2,44],{46:84,13:_,41:I,48:k,49:L}),{14:111,40:H,50:Q,70:j},{16:112,40:T,41:E},{14:113,40:H,50:Q,70:j},t(e,[2,13]),t(ie,[2,61]),{57:114,59:ne},{19:[1,115]},t(e,[2,20]),t(e,[2,23],{17:[1,116],42:D}),t(e,[2,11]),{13:[1,117],42:D},t(e,[2,10]),t(he,[2,65]),t(e,[2,18]),{18:118,19:[1,119],51:50,52:51,56:A},{14:120,40:H,50:Q,70:j},{19:[1,121]},t(e,[2,21]),t(e,[2,9]),t(e,[2,19])],defaultActions:{52:[2,62],72:[2,57]},parseError:o(function(se,ue){if(ue.recoverable)this.trace(se);else{var Z=new Error(se);throw Z.hash=ue,Z}},"parseError"),parse:o(function(se){var ue=this,Z=[0],Se=[],ce=[null],ae=[],Oe=this.table,ge="",ze=0,He=0,$e=0,Re=2,Ie=1,be=ae.slice.call(arguments,1),W=Object.create(this.lexer),de={yy:{}};for(var re in this.yy)Object.prototype.hasOwnProperty.call(this.yy,re)&&(de.yy[re]=this.yy[re]);W.setInput(se,de.yy),de.yy.lexer=W,de.yy.parser=this,typeof W.yylloc>"u"&&(W.yylloc={});var oe=W.yylloc;ae.push(oe);var V=W.options&&W.options.ranges;typeof de.yy.parseError=="function"?this.parseError=de.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function xe(ct){Z.length=Z.length-2*ct,ce.length=ce.length-ct,ae.length=ae.length-ct}o(xe,"popStack");function q(){var ct;return ct=Se.pop()||W.lex()||Ie,typeof ct!="number"&&(ct instanceof Array&&(Se=ct,ct=Se.pop()),ct=ue.symbols_[ct]||ct),ct}o(q,"lex");for(var pe,ve,Pe,_e,we,Ve,De={},qe,at,Rt,st;;){if(Pe=Z[Z.length-1],this.defaultActions[Pe]?_e=this.defaultActions[Pe]:((pe===null||typeof pe>"u")&&(pe=q()),_e=Oe[Pe]&&Oe[Pe][pe]),typeof _e>"u"||!_e.length||!_e[0]){var Ue="";st=[];for(qe in Oe[Pe])this.terminals_[qe]&&qe>Re&&st.push("'"+this.terminals_[qe]+"'");W.showPosition?Ue="Parse error on line "+(ze+1)+`:
632 +`+W.showPosition()+`
633 +Expecting `+st.join(", ")+", got '"+(this.terminals_[pe]||pe)+"'":Ue="Parse error on line "+(ze+1)+": Unexpected "+(pe==Ie?"end of input":"'"+(this.terminals_[pe]||pe)+"'"),this.parseError(Ue,{text:W.match,token:this.terminals_[pe]||pe,line:W.yylineno,loc:oe,expected:st})}if(_e[0]instanceof Array&&_e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Pe+", token: "+pe);switch(_e[0]){case 1:Z.push(pe),ce.push(W.yytext),ae.push(W.yylloc),Z.push(_e[1]),pe=null,ve?(pe=ve,ve=null):(He=W.yyleng,ge=W.yytext,ze=W.yylineno,oe=W.yylloc,$e>0&&$e--);break;case 2:if(at=this.productions_[_e[1]][1],De.$=ce[ce.length-at],De._$={first_line:ae[ae.length-(at||1)].first_line,last_line:ae[ae.length-1].last_line,first_column:ae[ae.length-(at||1)].first_column,last_column:ae[ae.length-1].last_column},V&&(De._$.range=[ae[ae.length-(at||1)].range[0],ae[ae.length-1].range[1]]),Ve=this.performAction.apply(De,[ge,He,ze,de.yy,_e[1],ce,ae].concat(be)),typeof Ve<"u")return Ve;at&&(Z=Z.slice(0,-1*at*2),ce=ce.slice(0,-1*at),ae=ae.slice(0,-1*at)),Z.push(this.productions_[_e[1]][0]),ce.push(De.$),ae.push(De._$),Rt=Oe[Z[Z.length-2]][Z[Z.length-1]],Z.push(Rt);break;case 3:return!0}}return!0},"parse")},X=function(){var J={EOF:1,parseError:o(function(ue,Z){if(this.yy.parser)this.yy.parser.parseError(ue,Z);else throw new Error(ue)},"parseError"),setInput:o(function(se,ue){return this.yy=ue||this.yy||{},this._input=se,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var se=this._input[0];this.yytext+=se,this.yyleng++,this.offset++,this.match+=se,this.matched+=se;var ue=se.match(/(?:\r\n?|\n).*/g);return ue?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),se},"input"),unput:o(function(se){var ue=se.length,Z=se.split(/(?:\r\n?|\n)/g);this._input=se+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ue),this.offset-=ue;var Se=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Z.length-1&&(this.yylineno-=Z.length-1);var ce=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Z?(Z.length===Se.length?this.yylloc.first_column:0)+Se[Se.length-Z.length].length-Z[0].length:this.yylloc.first_column-ue},this.options.ranges&&(this.yylloc.range=[ce[0],ce[0]+this.yyleng-ue]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
634 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(se){this.unput(this.match.slice(se))},"less"),pastInput:o(function(){var se=this.matched.substr(0,this.matched.length-this.match.length);return(se.length>20?"...":"")+se.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var se=this.match;return se.length<20&&(se+=this._input.substr(0,20-se.length)),(se.substr(0,20)+(se.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var se=this.pastInput(),ue=new Array(se.length+1).join("-");return se+this.upcomingInput()+`
635 +`+ue+"^"},"showPosition"),test_match:o(function(se,ue){var Z,Se,ce;if(this.options.backtrack_lexer&&(ce={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ce.yylloc.range=this.yylloc.range.slice(0))),Se=se[0].match(/(?:\r\n?|\n).*/g),Se&&(this.yylineno+=Se.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Se?Se[Se.length-1].length-Se[Se.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+se[0].length},this.yytext+=se[0],this.match+=se[0],this.matches=se,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(se[0].length),this.matched+=se[0],Z=this.performAction.call(this,this.yy,this,ue,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Z)return Z;if(this._backtrack){for(var ae in ce)this[ae]=ce[ae];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var se,ue,Z,Se;this._more||(this.yytext="",this.match="");for(var ce=this._currentRules(),ae=0;ae<ce.length;ae++)if(Z=this._input.match(this.rules[ce[ae]]),Z&&(!ue||Z[0].length>ue[0].length)){if(ue=Z,Se=ae,this.options.backtrack_lexer){if(se=this.test_match(Z,ce[ae]),se!==!1)return se;if(this._backtrack){ue=!1;continue}else return!1}else if(!this.options.flex)break}return ue?(se=this.test_match(ue,ce[Se]),se!==!1?se:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
636 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var ue=this.next();return ue||this.lex()},"lex"),begin:o(function(ue){this.conditionStack.push(ue)},"begin"),popState:o(function(){var ue=this.conditionStack.length-1;return ue>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(ue){return ue=this.conditionStack.length-1-Math.abs(ue||0),ue>=0?this.conditionStack[ue]:"INITIAL"},"topState"),pushState:o(function(ue){this.begin(ue)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(ue,Z,Se,ce){var ae=ce;switch(Se){case 0:return this.begin("acc_title"),24;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),26;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 33;case 8:return 34;case 9:return 35;case 10:return 36;case 11:return 10;case 12:break;case 13:return 8;case 14:return 50;case 15:return 70;case 16:return 4;case 17:return this.begin("block"),17;break;case 18:return 49;case 19:return 49;case 20:return 42;case 21:return 15;case 22:return 13;case 23:break;case 24:return 59;case 25:return 56;case 26:return 56;case 27:return 60;case 28:break;case 29:return this.popState(),19;break;case 30:return Z.yytext[0];case 31:return 20;case 32:return 21;case 33:return this.begin("style"),44;break;case 34:return this.popState(),10;break;case 35:break;case 36:return 13;case 37:return 42;case 38:return 49;case 39:return this.begin("style"),37;break;case 40:return 43;case 41:return 63;case 42:return 65;case 43:return 65;case 44:return 65;case 45:return 63;case 46:return 63;case 47:return 64;case 48:return 64;case 49:return 64;case 50:return 64;case 51:return 64;case 52:return 65;case 53:return 64;case 54:return 65;case 55:return 66;case 56:return 66;case 57:return 66;case 58:return 66;case 59:return 63;case 60:return 64;case 61:return 65;case 62:return 67;case 63:return 68;case 64:return 69;case 65:return 69;case 66:return 68;case 67:return 68;case 68:return 68;case 69:return 41;case 70:return 47;case 71:return 40;case 72:return 48;case 73:return Z.yytext[0];case 74:return 6}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:#)/i,/^(?:#)/i,/^(?:,)/i,/^(?::::)/i,/^(?::)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:([^\s]*)[~].*[~]([^\s]*))/i,/^(?:([\*A-Za-z_\u00C0-\uFFFF][A-Za-z0-9\-\_\[\]\(\)\u00C0-\uFFFF\*]*))/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:style\b)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?::)/i,/^(?:,)/i,/^(?:#)/i,/^(?:classDef\b)/i,/^(?:class\b)/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:([^\x00-\x7F]|\w|-|\*)+)/i,/^(?:;)/i,/^(?:([^\x00-\x7F]|\w|-|\*)+)/i,/^(?:[0-9])/i,/^(?:.)/i,/^(?:$)/i],conditions:{style:{rules:[34,35,36,37,38,69,70],inclusive:!1},acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[23,24,25,26,27,28,29,30],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,31,32,33,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,71,72,73,74],inclusive:!0}}};return J}();K.lexer=X;function te(){this.yy={}}return o(te,"Parser"),te.prototype=K,K.Parser=te,new te}();wR.parser=wR;Zie=wR});var sk,eae=N(()=>{"use strict";vt();zt();mi();ir();sk=class{constructor(){this.entities=new Map;this.relationships=[];this.classes=new Map;this.direction="TB";this.Cardinality={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"};this.Identification={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"};this.setAccTitle=Lr;this.getAccTitle=Rr;this.setAccDescription=Nr;this.getAccDescription=Mr;this.setDiagramTitle=$r;this.getDiagramTitle=Ir;this.getConfig=o(()=>me().er,"getConfig");this.clear(),this.addEntity=this.addEntity.bind(this),this.addAttributes=this.addAttributes.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setDirection=this.setDirection.bind(this),this.addCssStyles=this.addCssStyles.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"ErDB")}addEntity(e,r=""){return this.entities.has(e)?!this.entities.get(e)?.alias&&r&&(this.entities.get(e).alias=r,Y.info(`Add alias '${r}' to entity '${e}'`)):(this.entities.set(e,{id:`entity-${e}-${this.entities.size}`,label:e,attributes:[],alias:r,shape:"erBox",look:me().look??"default",cssClasses:"default",cssStyles:[]}),Y.info("Added new entity :",e)),this.entities.get(e)}getEntity(e){return this.entities.get(e)}getEntities(){return this.entities}getClasses(){return this.classes}addAttributes(e,r){let n=this.addEntity(e),i;for(i=r.length-1;i>=0;i--)r[i].keys||(r[i].keys=[]),r[i].comment||(r[i].comment=""),n.attributes.push(r[i]),Y.debug("Added attribute ",r[i].name)}addRelationship(e,r,n,i){let a=this.entities.get(e),s=this.entities.get(n);if(!a||!s)return;let l={entityA:a.id,roleA:r,entityB:s.id,relSpec:i};this.relationships.push(l),Y.debug("Added new relationship :",l)}getRelationships(){return this.relationships}getDirection(){return this.direction}setDirection(e){this.direction=e}getCompiledStyles(e){let r=[];for(let n of e){let i=this.classes.get(n);i?.styles&&(r=[...r,...i.styles??[]].map(a=>a.trim())),i?.textStyles&&(r=[...r,...i.textStyles??[]].map(a=>a.trim()))}return r}addCssStyles(e,r){for(let n of e){let i=this.entities.get(n);if(!r||!i)return;for(let a of r)i.cssStyles.push(a)}}addClass(e,r){e.forEach(n=>{let i=this.classes.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.classes.set(n,i)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)})})}setClass(e,r){for(let n of e){let i=this.entities.get(n);if(i)for(let a of r)i.cssClasses+=" "+a}}clear(){this.entities=new Map,this.classes=new Map,this.relationships=[],Ar()}getData(){let e=[],r=[],n=me();for(let a of this.entities.keys()){let s=this.entities.get(a);s&&(s.cssCompiledStyles=this.getCompiledStyles(s.cssClasses.split(" ")),e.push(s))}let i=0;for(let a of this.relationships){let s={id:$h(a.entityA,a.entityB,{prefix:"id",counter:i++}),type:"normal",curve:"basis",start:a.entityA,end:a.entityB,label:a.roleA,labelpos:"c",thickness:"normal",classes:"relationshipLine",arrowTypeStart:a.relSpec.cardB.toLowerCase(),arrowTypeEnd:a.relSpec.cardA.toLowerCase(),pattern:a.relSpec.relType=="IDENTIFYING"?"solid":"dashed",look:n.look};r.push(s)}return{nodes:e,edges:r,other:{},config:n,direction:"TB"}}}});var TR={};hr(TR,{draw:()=>SOe});var SOe,tae=N(()=>{"use strict";zt();vt();gm();Yd();$m();ir();dr();SOe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing er diagram (unified)",e);let{securityLevel:i,er:a,layout:s}=me(),l=n.db.getData(),u=yc(e,i);l.type=n.type,l.layoutAlgorithm=nf(s),l.config.flowchart.nodeSpacing=a?.nodeSpacing||140,l.config.flowchart.rankSpacing=a?.rankSpacing||80,l.direction=n.db.getDirection(),l.markers=["only_one","zero_or_one","one_or_more","zero_or_more"],l.diagramId=e,await Cc(l,u),l.layoutAlgorithm==="elk"&&u.select(".edges").lower();let h=u.selectAll('[id*="-background"]');Array.from(h).length>0&&h.each(function(){let d=Ge(this),m=d.attr("id").replace("-background",""),g=u.select(`#${CSS.escape(m)}`);if(!g.empty()){let y=g.attr("transform");d.attr("transform",y)}});let f=8;Gt.insertTitle(u,"erDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ac(u,f,"erDiagram",a?.useMaxWidth??!0)},"draw")});var COe,AOe,rae,nae=N(()=>{"use strict";Ys();COe=o((t,e)=>{let r=Kf,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return qa(n,i,a,e)},"fade"),AOe=o(t=>`
637 + .entityBox {
638 + fill: ${t.mainBkg};
639 + stroke: ${t.nodeBorder};
640 + }
641 +
642 + .relationshipLabelBox {
643 + fill: ${t.tertiaryColor};
644 + opacity: 0.7;
645 + background-color: ${t.tertiaryColor};
646 + rect {
647 + opacity: 0.5;
648 + }
649 + }
650 +
651 + .labelBkg {
652 + background-color: ${COe(t.tertiaryColor,.5)};
653 + }
654 +
655 + .edgeLabel .label {
656 + fill: ${t.nodeBorder};
657 + font-size: 14px;
658 + }
659 +
660 + .label {
661 + font-family: ${t.fontFamily};
662 + color: ${t.nodeTextColor||t.textColor};
663 + }
664 +
665 + .edge-pattern-dashed {
666 + stroke-dasharray: 8,8;
667 + }
668 +
669 + .node rect,
670 + .node circle,
671 + .node ellipse,
672 + .node polygon
673 + {
674 + fill: ${t.mainBkg};
675 + stroke: ${t.nodeBorder};
676 + stroke-width: 1px;
677 + }
678 +
679 + .relationshipLine {
680 + stroke: ${t.lineColor};
681 + stroke-width: 1;
682 + fill: none;
683 + }
684 +
685 + .marker {
686 + fill: none !important;
687 + stroke: ${t.lineColor} !important;
688 + stroke-width: 1;
689 + }
690 +`,"getStyles"),rae=AOe});var iae={};hr(iae,{diagram:()=>_Oe});var _Oe,aae=N(()=>{"use strict";Jie();eae();tae();nae();_Oe={parser:Zie,get db(){return new sk},renderer:TR,styles:rae}});function ii(t){return typeof t=="object"&&t!==null&&typeof t.$type=="string"}function va(t){return typeof t=="object"&&t!==null&&typeof t.$refText=="string"}function kR(t){return typeof t=="object"&&t!==null&&typeof t.name=="string"&&typeof t.type=="string"&&typeof t.path=="string"}function jd(t){return typeof t=="object"&&t!==null&&ii(t.container)&&va(t.reference)&&typeof t.message=="string"}function Ll(t){return typeof t=="object"&&t!==null&&Array.isArray(t.content)}function af(t){return typeof t=="object"&&t!==null&&typeof t.tokenType=="object"}function M2(t){return Ll(t)&&typeof t.fullText=="string"}var Xd,Rl=N(()=>{"use strict";o(ii,"isAstNode");o(va,"isReference");o(kR,"isAstNodeDescription");o(jd,"isLinkingError");Xd=class{static{o(this,"AbstractAstReflection")}constructor(){this.subtypes={},this.allSubtypes={}}isInstance(e,r){return ii(e)&&this.isSubtype(e.$type,r)}isSubtype(e,r){if(e===r)return!0;let n=this.subtypes[e];n||(n=this.subtypes[e]={});let i=n[r];if(i!==void 0)return i;{let a=this.computeIsSubtype(e,r);return n[r]=a,a}}getAllSubTypes(e){let r=this.allSubtypes[e];if(r)return r;{let n=this.getAllTypes(),i=[];for(let a of n)this.isSubtype(a,e)&&i.push(a);return this.allSubtypes[e]=i,i}}};o(Ll,"isCompositeCstNode");o(af,"isLeafCstNode");o(M2,"isRootCstNode")});function NOe(t){return typeof t=="string"?t:typeof t>"u"?"undefined":typeof t.toString=="function"?t.toString():Object.prototype.toString.call(t)}function ok(t){return!!t&&typeof t[Symbol.iterator]=="function"}function en(...t){if(t.length===1){let e=t[0];if(e instanceof ao)return e;if(ok(e))return new ao(()=>e[Symbol.iterator](),r=>r.next());if(typeof e.length=="number")return new ao(()=>({index:0}),r=>r.index<e.length?{done:!1,value:e[r.index++]}:Ia)}return t.length>1?new ao(()=>({collIndex:0,arrIndex:0}),e=>{do{if(e.iterator){let r=e.iterator.next();if(!r.done)return r;e.iterator=void 0}if(e.array){if(e.arrIndex<e.array.length)return{done:!1,value:e.array[e.arrIndex++]};e.array=void 0,e.arrIndex=0}if(e.collIndex<t.length){let r=t[e.collIndex++];ok(r)?e.iterator=r[Symbol.iterator]():r&&typeof r.length=="number"&&(e.array=r)}}while(e.iterator||e.array||e.collIndex<t.length);return Ia}):I2}var ao,I2,Ia,_c,zm,Ps=N(()=>{"use strict";ao=class t{static{o(this,"StreamImpl")}constructor(e,r){this.startFn=e,this.nextFn=r}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),[Symbol.iterator]:()=>e};return e}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){let e=this.iterator(),r=0,n=e.next();for(;!n.done;)r++,n=e.next();return r}toArray(){let e=[],r=this.iterator(),n;do n=r.next(),n.value!==void 0&&e.push(n.value);while(!n.done);return e}toSet(){return new Set(this)}toMap(e,r){let n=this.map(i=>[e?e(i):i,r?r(i):i]);return new Map(n)}toString(){return this.join()}concat(e){return new t(()=>({first:this.startFn(),firstDone:!1,iterator:e[Symbol.iterator]()}),r=>{let n;if(!r.firstDone){do if(n=this.nextFn(r.first),!n.done)return n;while(!n.done);r.firstDone=!0}do if(n=r.iterator.next(),!n.done)return n;while(!n.done);return Ia})}join(e=","){let r=this.iterator(),n="",i,a=!1;do i=r.next(),i.done||(a&&(n+=e),n+=NOe(i.value)),a=!0;while(!i.done);return n}indexOf(e,r=0){let n=this.iterator(),i=0,a=n.next();for(;!a.done;){if(i>=r&&a.value===e)return i;a=n.next(),i++}return-1}every(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(!e(n.value))return!1;n=r.next()}return!0}some(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return!0;n=r.next()}return!1}forEach(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;)e(i.value,n),i=r.next(),n++}map(e){return new t(this.startFn,r=>{let{done:n,value:i}=this.nextFn(r);return n?Ia:{done:!1,value:e(i)}})}filter(e){return new t(this.startFn,r=>{let n;do if(n=this.nextFn(r),!n.done&&e(n.value))return n;while(!n.done);return Ia})}nonNullable(){return this.filter(e=>e!=null)}reduce(e,r){let n=this.iterator(),i=r,a=n.next();for(;!a.done;)i===void 0?i=a.value:i=e(i,a.value),a=n.next();return i}reduceRight(e,r){return this.recursiveReduce(this.iterator(),e,r)}recursiveReduce(e,r,n){let i=e.next();if(i.done)return n;let a=this.recursiveReduce(e,r,n);return a===void 0?i.value:r(a,i.value)}find(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return n.value;n=r.next()}}findIndex(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;){if(e(i.value))return n;i=r.next(),n++}return-1}includes(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(n.value===e)return!0;n=r.next()}return!1}flatMap(e){return new t(()=>({this:this.startFn()}),r=>{do{if(r.iterator){let a=r.iterator.next();if(a.done)r.iterator=void 0;else return a}let{done:n,value:i}=this.nextFn(r.this);if(!n){let a=e(i);if(ok(a))r.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}}while(r.iterator);return Ia})}flat(e){if(e===void 0&&(e=1),e<=0)return this;let r=e>1?this.flat(e-1):this;return new t(()=>({this:r.startFn()}),n=>{do{if(n.iterator){let s=n.iterator.next();if(s.done)n.iterator=void 0;else return s}let{done:i,value:a}=r.nextFn(n.this);if(!i)if(ok(a))n.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}while(n.iterator);return Ia})}head(){let r=this.iterator().next();if(!r.done)return r.value}tail(e=1){return new t(()=>{let r=this.startFn();for(let n=0;n<e;n++)if(this.nextFn(r).done)return r;return r},this.nextFn)}limit(e){return new t(()=>({size:0,state:this.startFn()}),r=>(r.size++,r.size>e?Ia:this.nextFn(r.state)))}distinct(e){return new t(()=>({set:new Set,internalState:this.startFn()}),r=>{let n;do if(n=this.nextFn(r.internalState),!n.done){let i=e?e(n.value):n.value;if(!r.set.has(i))return r.set.add(i),n}while(!n.done);return Ia})}exclude(e,r){let n=new Set;for(let i of e){let a=r?r(i):i;n.add(a)}return this.filter(i=>{let a=r?r(i):i;return!n.has(a)})}};o(NOe,"toString");o(ok,"isIterable");I2=new ao(()=>{},()=>Ia),Ia=Object.freeze({done:!0,value:void 0});o(en,"stream");_c=class extends ao{static{o(this,"TreeStreamImpl")}constructor(e,r,n){super(()=>({iterators:n?.includeRoot?[[e][Symbol.iterator]()]:[r(e)[Symbol.iterator]()],pruned:!1}),i=>{for(i.pruned&&(i.iterators.pop(),i.pruned=!1);i.iterators.length>0;){let s=i.iterators[i.iterators.length-1].next();if(s.done)i.iterators.pop();else return i.iterators.push(r(s.value)[Symbol.iterator]()),s}return Ia})}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),prune:o(()=>{e.state.pruned=!0},"prune"),[Symbol.iterator]:()=>e};return e}};(function(t){function e(a){return a.reduce((s,l)=>s+l,0)}o(e,"sum"),t.sum=e;function r(a){return a.reduce((s,l)=>s*l,0)}o(r,"product"),t.product=r;function n(a){return a.reduce((s,l)=>Math.min(s,l))}o(n,"min"),t.min=n;function i(a){return a.reduce((s,l)=>Math.max(s,l))}o(i,"max"),t.max=i})(zm||(zm={}))});var ck={};hr(ck,{DefaultNameRegexp:()=>lk,RangeComparison:()=>Dc,compareRange:()=>cae,findCommentNode:()=>AR,findDeclarationNodeAtOffset:()=>IOe,findLeafNodeAtOffset:()=>_R,findLeafNodeBeforeOffset:()=>uae,flattenCst:()=>MOe,getInteriorNodes:()=>BOe,getNextNode:()=>OOe,getPreviousNode:()=>fae,getStartlineNode:()=>POe,inRange:()=>CR,isChildNode:()=>SR,isCommentNode:()=>ER,streamCst:()=>Kd,toDocumentSegment:()=>Qd,tokenToRange:()=>Gm});function Kd(t){return new _c(t,e=>Ll(e)?e.content:[],{includeRoot:!0})}function MOe(t){return Kd(t).filter(af)}function SR(t,e){for(;t.container;)if(t=t.container,t===e)return!0;return!1}function Gm(t){return{start:{character:t.startColumn-1,line:t.startLine-1},end:{character:t.endColumn,line:t.endLine-1}}}function Qd(t){if(!t)return;let{offset:e,end:r,range:n}=t;return{range:n,offset:e,end:r,length:r-e}}function cae(t,e){if(t.end.line<e.start.line||t.end.line===e.start.line&&t.end.character<=e.start.character)return Dc.Before;if(t.start.line>e.end.line||t.start.line===e.end.line&&t.start.character>=e.end.character)return Dc.After;let r=t.start.line>e.start.line||t.start.line===e.start.line&&t.start.character>=e.start.character,n=t.end.line<e.end.line||t.end.line===e.end.line&&t.end.character<=e.end.character;return r&&n?Dc.Inside:r?Dc.OverlapBack:n?Dc.OverlapFront:Dc.Outside}function CR(t,e){return cae(t,e)>Dc.After}function IOe(t,e,r=lk){if(t){if(e>0){let n=e-t.offset,i=t.text.charAt(n);r.test(i)||e--}return _R(t,e)}}function AR(t,e){if(t){let r=fae(t,!0);if(r&&ER(r,e))return r;if(M2(t)){let n=t.content.findIndex(i=>!i.hidden);for(let i=n-1;i>=0;i--){let a=t.content[i];if(ER(a,e))return a}}}}function ER(t,e){return af(t)&&e.includes(t.tokenType.name)}function _R(t,e){if(af(t))return t;if(Ll(t)){let r=hae(t,e,!1);if(r)return _R(r,e)}}function uae(t,e){if(af(t))return t;if(Ll(t)){let r=hae(t,e,!0);if(r)return uae(r,e)}}function hae(t,e,r){let n=0,i=t.content.length-1,a;for(;n<=i;){let s=Math.floor((n+i)/2),l=t.content[s];if(l.offset<=e&&l.end>e)return l;l.end<=e?(a=r?l:void 0,n=s+1):i=s-1}return a}function fae(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t);for(;n>0;){n--;let i=r.content[n];if(e||!i.hidden)return i}t=r}}function OOe(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t),i=r.content.length-1;for(;n<i;){n++;let a=r.content[n];if(e||!a.hidden)return a}t=r}}function POe(t){if(t.range.start.character===0)return t;let e=t.range.start.line,r=t,n;for(;t.container;){let i=t.container,a=n??i.content.indexOf(t);if(a===0?(t=i,n=void 0):(n=a-1,t=i.content[n]),t.range.start.line!==e)break;r=t}return r}function BOe(t,e){let r=FOe(t,e);return r?r.parent.content.slice(r.a+1,r.b):[]}function FOe(t,e){let r=lae(t),n=lae(e),i;for(let a=0;a<r.length&&a<n.length;a++){let s=r[a],l=n[a];if(s.parent===l.parent)i={parent:s.parent,a:s.index,b:l.index};else break}return i}function lae(t){let e=[];for(;t.container;){let r=t.container,n=r.content.indexOf(t);e.push({parent:r,index:n}),t=r}return e.reverse()}var Dc,lk,Nl=N(()=>{"use strict";Rl();Ps();o(Kd,"streamCst");o(MOe,"flattenCst");o(SR,"isChildNode");o(Gm,"tokenToRange");o(Qd,"toDocumentSegment");(function(t){t[t.Before=0]="Before",t[t.After=1]="After",t[t.OverlapFront=2]="OverlapFront",t[t.OverlapBack=3]="OverlapBack",t[t.Inside=4]="Inside",t[t.Outside=5]="Outside"})(Dc||(Dc={}));o(cae,"compareRange");o(CR,"inRange");lk=/^[\w\p{L}]$/u;o(IOe,"findDeclarationNodeAtOffset");o(AR,"findCommentNode");o(ER,"isCommentNode");o(_R,"findLeafNodeAtOffset");o(uae,"findLeafNodeBeforeOffset");o(hae,"binarySearch");o(fae,"getPreviousNode");o(OOe,"getNextNode");o(POe,"getStartlineNode");o(BOe,"getInteriorNodes");o(FOe,"getCommonParent");o(lae,"getParentChain")});function Lc(t){throw new Error("Error! The input value was not handled.")}var Zd,uk=N(()=>{"use strict";Zd=class extends Error{static{o(this,"ErrorWithLocation")}constructor(e,r){super(e?`${r} at ${e.range.start.line}:${e.range.start.character}`:r)}};o(Lc,"assertUnreachable")});var U2={};hr(U2,{AbstractElement:()=>Hm,AbstractRule:()=>Vm,AbstractType:()=>Um,Action:()=>cg,Alternatives:()=>ug,ArrayLiteral:()=>Wm,ArrayType:()=>qm,Assignment:()=>hg,BooleanLiteral:()=>Ym,CharacterRange:()=>fg,Condition:()=>O2,Conjunction:()=>Xm,CrossReference:()=>dg,Disjunction:()=>jm,EndOfFile:()=>pg,Grammar:()=>Km,GrammarImport:()=>B2,Group:()=>mg,InferredType:()=>Qm,Interface:()=>Zm,Keyword:()=>gg,LangiumGrammarAstReflection:()=>Cg,LangiumGrammarTerminals:()=>$Oe,NamedArgument:()=>F2,NegatedToken:()=>yg,Negation:()=>Jm,NumberLiteral:()=>eg,Parameter:()=>tg,ParameterReference:()=>rg,ParserRule:()=>ng,ReferenceType:()=>ig,RegexToken:()=>vg,ReturnType:()=>$2,RuleCall:()=>xg,SimpleType:()=>ag,StringLiteral:()=>sg,TerminalAlternatives:()=>bg,TerminalGroup:()=>wg,TerminalRule:()=>Jd,TerminalRuleCall:()=>Tg,Type:()=>og,TypeAttribute:()=>z2,TypeDefinition:()=>hk,UnionType:()=>lg,UnorderedGroup:()=>kg,UntilToken:()=>Eg,ValueLiteral:()=>P2,Wildcard:()=>Sg,isAbstractElement:()=>G2,isAbstractRule:()=>zOe,isAbstractType:()=>GOe,isAction:()=>Mu,isAlternatives:()=>mk,isArrayLiteral:()=>qOe,isArrayType:()=>DR,isAssignment:()=>Ml,isBooleanLiteral:()=>LR,isCharacterRange:()=>FR,isCondition:()=>VOe,isConjunction:()=>RR,isCrossReference:()=>ep,isDisjunction:()=>NR,isEndOfFile:()=>$R,isFeatureName:()=>UOe,isGrammar:()=>YOe,isGrammarImport:()=>XOe,isGroup:()=>sf,isInferredType:()=>fk,isInterface:()=>dk,isKeyword:()=>Ho,isNamedArgument:()=>jOe,isNegatedToken:()=>zR,isNegation:()=>MR,isNumberLiteral:()=>KOe,isParameter:()=>QOe,isParameterReference:()=>IR,isParserRule:()=>Oa,isPrimitiveType:()=>dae,isReferenceType:()=>OR,isRegexToken:()=>GR,isReturnType:()=>PR,isRuleCall:()=>Il,isSimpleType:()=>pk,isStringLiteral:()=>ZOe,isTerminalAlternatives:()=>VR,isTerminalGroup:()=>UR,isTerminalRule:()=>so,isTerminalRuleCall:()=>gk,isType:()=>V2,isTypeAttribute:()=>JOe,isTypeDefinition:()=>HOe,isUnionType:()=>BR,isUnorderedGroup:()=>yk,isUntilToken:()=>HR,isValueLiteral:()=>WOe,isWildcard:()=>WR,reflection:()=>lr});function zOe(t){return lr.isInstance(t,Vm)}function GOe(t){return lr.isInstance(t,Um)}function VOe(t){return lr.isInstance(t,O2)}function UOe(t){return dae(t)||t==="current"||t==="entry"||t==="extends"||t==="false"||t==="fragment"||t==="grammar"||t==="hidden"||t==="import"||t==="interface"||t==="returns"||t==="terminal"||t==="true"||t==="type"||t==="infer"||t==="infers"||t==="with"||typeof t=="string"&&/\^?[_a-zA-Z][\w_]*/.test(t)}function dae(t){return t==="string"||t==="number"||t==="boolean"||t==="Date"||t==="bigint"}function HOe(t){return lr.isInstance(t,hk)}function WOe(t){return lr.isInstance(t,P2)}function G2(t){return lr.isInstance(t,Hm)}function qOe(t){return lr.isInstance(t,Wm)}function DR(t){return lr.isInstance(t,qm)}function LR(t){return lr.isInstance(t,Ym)}function RR(t){return lr.isInstance(t,Xm)}function NR(t){return lr.isInstance(t,jm)}function YOe(t){return lr.isInstance(t,Km)}function XOe(t){return lr.isInstance(t,B2)}function fk(t){return lr.isInstance(t,Qm)}function dk(t){return lr.isInstance(t,Zm)}function jOe(t){return lr.isInstance(t,F2)}function MR(t){return lr.isInstance(t,Jm)}function KOe(t){return lr.isInstance(t,eg)}function QOe(t){return lr.isInstance(t,tg)}function IR(t){return lr.isInstance(t,rg)}function Oa(t){return lr.isInstance(t,ng)}function OR(t){return lr.isInstance(t,ig)}function PR(t){return lr.isInstance(t,$2)}function pk(t){return lr.isInstance(t,ag)}function ZOe(t){return lr.isInstance(t,sg)}function so(t){return lr.isInstance(t,Jd)}function V2(t){return lr.isInstance(t,og)}function JOe(t){return lr.isInstance(t,z2)}function BR(t){return lr.isInstance(t,lg)}function Mu(t){return lr.isInstance(t,cg)}function mk(t){return lr.isInstance(t,ug)}function Ml(t){return lr.isInstance(t,hg)}function FR(t){return lr.isInstance(t,fg)}function ep(t){return lr.isInstance(t,dg)}function $R(t){return lr.isInstance(t,pg)}function sf(t){return lr.isInstance(t,mg)}function Ho(t){return lr.isInstance(t,gg)}function zR(t){return lr.isInstance(t,yg)}function GR(t){return lr.isInstance(t,vg)}function Il(t){return lr.isInstance(t,xg)}function VR(t){return lr.isInstance(t,bg)}function UR(t){return lr.isInstance(t,wg)}function gk(t){return lr.isInstance(t,Tg)}function yk(t){return lr.isInstance(t,kg)}function HR(t){return lr.isInstance(t,Eg)}function WR(t){return lr.isInstance(t,Sg)}var $Oe,Vm,Um,O2,hk,P2,Hm,Wm,qm,Ym,Xm,jm,Km,B2,Qm,Zm,F2,Jm,eg,tg,rg,ng,ig,$2,ag,sg,Jd,og,z2,lg,cg,ug,hg,fg,dg,pg,mg,gg,yg,vg,xg,bg,wg,Tg,kg,Eg,Sg,Cg,lr,Rc=N(()=>{"use strict";Rl();$Oe={ID:/\^?[_a-zA-Z][\w_]*/,STRING:/"(\\.|[^"\\])*"|'(\\.|[^'\\])*'/,NUMBER:/NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)/,RegexLiteral:/\/(?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+\/[a-z]*/,WS:/\s+/,ML_COMMENT:/\/\*[\s\S]*?\*\//,SL_COMMENT:/\/\/[^\n\r]*/},Vm="AbstractRule";o(zOe,"isAbstractRule");Um="AbstractType";o(GOe,"isAbstractType");O2="Condition";o(VOe,"isCondition");o(UOe,"isFeatureName");o(dae,"isPrimitiveType");hk="TypeDefinition";o(HOe,"isTypeDefinition");P2="ValueLiteral";o(WOe,"isValueLiteral");Hm="AbstractElement";o(G2,"isAbstractElement");Wm="ArrayLiteral";o(qOe,"isArrayLiteral");qm="ArrayType";o(DR,"isArrayType");Ym="BooleanLiteral";o(LR,"isBooleanLiteral");Xm="Conjunction";o(RR,"isConjunction");jm="Disjunction";o(NR,"isDisjunction");Km="Grammar";o(YOe,"isGrammar");B2="GrammarImport";o(XOe,"isGrammarImport");Qm="InferredType";o(fk,"isInferredType");Zm="Interface";o(dk,"isInterface");F2="NamedArgument";o(jOe,"isNamedArgument");Jm="Negation";o(MR,"isNegation");eg="NumberLiteral";o(KOe,"isNumberLiteral");tg="Parameter";o(QOe,"isParameter");rg="ParameterReference";o(IR,"isParameterReference");ng="ParserRule";o(Oa,"isParserRule");ig="ReferenceType";o(OR,"isReferenceType");$2="ReturnType";o(PR,"isReturnType");ag="SimpleType";o(pk,"isSimpleType");sg="StringLiteral";o(ZOe,"isStringLiteral");Jd="TerminalRule";o(so,"isTerminalRule");og="Type";o(V2,"isType");z2="TypeAttribute";o(JOe,"isTypeAttribute");lg="UnionType";o(BR,"isUnionType");cg="Action";o(Mu,"isAction");ug="Alternatives";o(mk,"isAlternatives");hg="Assignment";o(Ml,"isAssignment");fg="CharacterRange";o(FR,"isCharacterRange");dg="CrossReference";o(ep,"isCrossReference");pg="EndOfFile";o($R,"isEndOfFile");mg="Group";o(sf,"isGroup");gg="Keyword";o(Ho,"isKeyword");yg="NegatedToken";o(zR,"isNegatedToken");vg="RegexToken";o(GR,"isRegexToken");xg="RuleCall";o(Il,"isRuleCall");bg="TerminalAlternatives";o(VR,"isTerminalAlternatives");wg="TerminalGroup";o(UR,"isTerminalGroup");Tg="TerminalRuleCall";o(gk,"isTerminalRuleCall");kg="UnorderedGroup";o(yk,"isUnorderedGroup");Eg="UntilToken";o(HR,"isUntilToken");Sg="Wildcard";o(WR,"isWildcard");Cg=class extends Xd{static{o(this,"LangiumGrammarAstReflection")}getAllTypes(){return[Hm,Vm,Um,cg,ug,Wm,qm,hg,Ym,fg,O2,Xm,dg,jm,pg,Km,B2,mg,Qm,Zm,gg,F2,yg,Jm,eg,tg,rg,ng,ig,vg,$2,xg,ag,sg,bg,wg,Jd,Tg,og,z2,hk,lg,kg,Eg,P2,Sg]}computeIsSubtype(e,r){switch(e){case cg:case ug:case hg:case fg:case dg:case pg:case mg:case gg:case yg:case vg:case xg:case bg:case wg:case Tg:case kg:case Eg:case Sg:return this.isSubtype(Hm,r);case Wm:case eg:case sg:return this.isSubtype(P2,r);case qm:case ig:case ag:case lg:return this.isSubtype(hk,r);case Ym:return this.isSubtype(O2,r)||this.isSubtype(P2,r);case Xm:case jm:case Jm:case rg:return this.isSubtype(O2,r);case Qm:case Zm:case og:return this.isSubtype(Um,r);case ng:return this.isSubtype(Vm,r)||this.isSubtype(Um,r);case Jd:return this.isSubtype(Vm,r);default:return!1}}getReferenceType(e){let r=`${e.container.$type}:${e.property}`;switch(r){case"Action:type":case"CrossReference:type":case"Interface:superTypes":case"ParserRule:returnType":case"SimpleType:typeRef":return Um;case"Grammar:hiddenTokens":case"ParserRule:hiddenTokens":case"RuleCall:rule":return Vm;case"Grammar:usedGrammars":return Km;case"NamedArgument:parameter":case"ParameterReference:parameter":return tg;case"TerminalRuleCall:rule":return Jd;default:throw new Error(`${r} is not a valid reference id.`)}}getTypeMetaData(e){switch(e){case Hm:return{name:Hm,properties:[{name:"cardinality"},{name:"lookahead"}]};case Wm:return{name:Wm,properties:[{name:"elements",defaultValue:[]}]};case qm:return{name:qm,properties:[{name:"elementType"}]};case Ym:return{name:Ym,properties:[{name:"true",defaultValue:!1}]};case Xm:return{name:Xm,properties:[{name:"left"},{name:"right"}]};case jm:return{name:jm,properties:[{name:"left"},{name:"right"}]};case Km:return{name:Km,properties:[{name:"definesHiddenTokens",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"imports",defaultValue:[]},{name:"interfaces",defaultValue:[]},{name:"isDeclared",defaultValue:!1},{name:"name"},{name:"rules",defaultValue:[]},{name:"types",defaultValue:[]},{name:"usedGrammars",defaultValue:[]}]};case B2:return{name:B2,properties:[{name:"path"}]};case Qm:return{name:Qm,properties:[{name:"name"}]};case Zm:return{name:Zm,properties:[{name:"attributes",defaultValue:[]},{name:"name"},{name:"superTypes",defaultValue:[]}]};case F2:return{name:F2,properties:[{name:"calledByName",defaultValue:!1},{name:"parameter"},{name:"value"}]};case Jm:return{name:Jm,properties:[{name:"value"}]};case eg:return{name:eg,properties:[{name:"value"}]};case tg:return{name:tg,properties:[{name:"name"}]};case rg:return{name:rg,properties:[{name:"parameter"}]};case ng:return{name:ng,properties:[{name:"dataType"},{name:"definesHiddenTokens",defaultValue:!1},{name:"definition"},{name:"entry",defaultValue:!1},{name:"fragment",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"inferredType"},{name:"name"},{name:"parameters",defaultValue:[]},{name:"returnType"},{name:"wildcard",defaultValue:!1}]};case ig:return{name:ig,properties:[{name:"referenceType"}]};case $2:return{name:$2,properties:[{name:"name"}]};case ag:return{name:ag,properties:[{name:"primitiveType"},{name:"stringType"},{name:"typeRef"}]};case sg:return{name:sg,properties:[{name:"value"}]};case Jd:return{name:Jd,properties:[{name:"definition"},{name:"fragment",defaultValue:!1},{name:"hidden",defaultValue:!1},{name:"name"},{name:"type"}]};case og:return{name:og,properties:[{name:"name"},{name:"type"}]};case z2:return{name:z2,properties:[{name:"defaultValue"},{name:"isOptional",defaultValue:!1},{name:"name"},{name:"type"}]};case lg:return{name:lg,properties:[{name:"types",defaultValue:[]}]};case cg:return{name:cg,properties:[{name:"cardinality"},{name:"feature"},{name:"inferredType"},{name:"lookahead"},{name:"operator"},{name:"type"}]};case ug:return{name:ug,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case hg:return{name:hg,properties:[{name:"cardinality"},{name:"feature"},{name:"lookahead"},{name:"operator"},{name:"terminal"}]};case fg:return{name:fg,properties:[{name:"cardinality"},{name:"left"},{name:"lookahead"},{name:"right"}]};case dg:return{name:dg,properties:[{name:"cardinality"},{name:"deprecatedSyntax",defaultValue:!1},{name:"lookahead"},{name:"terminal"},{name:"type"}]};case pg:return{name:pg,properties:[{name:"cardinality"},{name:"lookahead"}]};case mg:return{name:mg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"guardCondition"},{name:"lookahead"}]};case gg:return{name:gg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"value"}]};case yg:return{name:yg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case vg:return{name:vg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"regex"}]};case xg:return{name:xg,properties:[{name:"arguments",defaultValue:[]},{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case bg:return{name:bg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case wg:return{name:wg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case Tg:return{name:Tg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case kg:return{name:kg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case Eg:return{name:Eg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case Sg:return{name:Sg,properties:[{name:"cardinality"},{name:"lookahead"}]};default:return{name:e,properties:[]}}}},lr=new Cg});var xk={};hr(xk,{assignMandatoryProperties:()=>XR,copyAstNode:()=>YR,findLocalReferences:()=>tPe,findRootNode:()=>H2,getContainerOfType:()=>tp,getDocument:()=>Pa,hasContainerOfType:()=>ePe,linkContentToContainer:()=>vk,streamAllContents:()=>Nc,streamAst:()=>Wo,streamContents:()=>W2,streamReferences:()=>Ag});function vk(t){for(let[e,r]of Object.entries(t))e.startsWith("$")||(Array.isArray(r)?r.forEach((n,i)=>{ii(n)&&(n.$container=t,n.$containerProperty=e,n.$containerIndex=i)}):ii(r)&&(r.$container=t,r.$containerProperty=e))}function tp(t,e){let r=t;for(;r;){if(e(r))return r;r=r.$container}}function ePe(t,e){let r=t;for(;r;){if(e(r))return!0;r=r.$container}return!1}function Pa(t){let r=H2(t).$document;if(!r)throw new Error("AST node has no document.");return r}function H2(t){for(;t.$container;)t=t.$container;return t}function W2(t,e){if(!t)throw new Error("Node must be an AstNode.");let r=e?.range;return new ao(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),n=>{for(;n.keyIndex<n.keys.length;){let i=n.keys[n.keyIndex];if(!i.startsWith("$")){let a=t[i];if(ii(a)){if(n.keyIndex++,qR(a,r))return{done:!1,value:a}}else if(Array.isArray(a)){for(;n.arrayIndex<a.length;){let s=n.arrayIndex++,l=a[s];if(ii(l)&&qR(l,r))return{done:!1,value:l}}n.arrayIndex=0}}n.keyIndex++}return Ia})}function Nc(t,e){if(!t)throw new Error("Root node must be an AstNode.");return new _c(t,r=>W2(r,e))}function Wo(t,e){if(t){if(e?.range&&!qR(t,e.range))return new _c(t,()=>[])}else throw new Error("Root node must be an AstNode.");return new _c(t,r=>W2(r,e),{includeRoot:!0})}function qR(t,e){var r;if(!e)return!0;let n=(r=t.$cstNode)===null||r===void 0?void 0:r.range;return n?CR(n,e):!1}function Ag(t){return new ao(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),e=>{for(;e.keyIndex<e.keys.length;){let r=e.keys[e.keyIndex];if(!r.startsWith("$")){let n=t[r];if(va(n))return e.keyIndex++,{done:!1,value:{reference:n,container:t,property:r}};if(Array.isArray(n)){for(;e.arrayIndex<n.length;){let i=e.arrayIndex++,a=n[i];if(va(a))return{done:!1,value:{reference:a,container:t,property:r,index:i}}}e.arrayIndex=0}}e.keyIndex++}return Ia})}function tPe(t,e=Pa(t).parseResult.value){let r=[];return Wo(e).forEach(n=>{Ag(n).forEach(i=>{i.reference.ref===t&&r.push(i.reference)})}),en(r)}function XR(t,e){let r=t.getTypeMetaData(e.$type),n=e;for(let i of r.properties)i.defaultValue!==void 0&&n[i.name]===void 0&&(n[i.name]=pae(i.defaultValue))}function pae(t){return Array.isArray(t)?[...t.map(pae)]:t}function YR(t,e){let r={$type:t.$type};for(let[n,i]of Object.entries(t))if(!n.startsWith("$"))if(ii(i))r[n]=YR(i,e);else if(va(i))r[n]=e(r,n,i.$refNode,i.$refText);else if(Array.isArray(i)){let a=[];for(let s of i)ii(s)?a.push(YR(s,e)):va(s)?a.push(e(r,n,s.$refNode,s.$refText)):a.push(s);r[n]=a}else r[n]=i;return vk(r),r}var is=N(()=>{"use strict";Rl();Ps();Nl();o(vk,"linkContentToContainer");o(tp,"getContainerOfType");o(ePe,"hasContainerOfType");o(Pa,"getDocument");o(H2,"findRootNode");o(W2,"streamContents");o(Nc,"streamAllContents");o(Wo,"streamAst");o(qR,"isAstNodeInRange");o(Ag,"streamReferences");o(tPe,"findLocalReferences");o(XR,"assignMandatoryProperties");o(pae,"copyDefaultValue");o(YR,"copyAstNode")});function ar(t){return t.charCodeAt(0)}function bk(t,e){Array.isArray(t)?t.forEach(function(r){e.push(r)}):e.push(t)}function _g(t,e){if(t[e]===!0)throw"duplicate flag "+e;let r=t[e];t[e]=!0}function rp(t){if(t===void 0)throw Error("Internal Error - Should never get here!");return!0}function q2(){throw Error("Internal Error - Should never get here!")}function jR(t){return t.type==="Character"}var KR=N(()=>{"use strict";o(ar,"cc");o(bk,"insertToSet");o(_g,"addFlag");o(rp,"ASSERT_EXISTS");o(q2,"ASSERT_NEVER_REACH_HERE");o(jR,"isCharacter")});var Y2,X2,QR,mae=N(()=>{"use strict";KR();Y2=[];for(let t=ar("0");t<=ar("9");t++)Y2.push(t);X2=[ar("_")].concat(Y2);for(let t=ar("a");t<=ar("z");t++)X2.push(t);for(let t=ar("A");t<=ar("Z");t++)X2.push(t);QR=[ar(" "),ar("\f"),ar(`
691 +`),ar("\r"),ar(" "),ar("\v"),ar(" "),ar("\xA0"),ar("\u1680"),ar("\u2000"),ar("\u2001"),ar("\u2002"),ar("\u2003"),ar("\u2004"),ar("\u2005"),ar("\u2006"),ar("\u2007"),ar("\u2008"),ar("\u2009"),ar("\u200A"),ar("\u2028"),ar("\u2029"),ar("\u202F"),ar("\u205F"),ar("\u3000"),ar("\uFEFF")]});var rPe,wk,nPe,np,gae=N(()=>{"use strict";KR();mae();rPe=/[0-9a-fA-F]/,wk=/[0-9]/,nPe=/[1-9]/,np=class{static{o(this,"RegExpParser")}constructor(){this.idx=0,this.input="",this.groupIdx=0}saveState(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}}restoreState(e){this.idx=e.idx,this.input=e.input,this.groupIdx=e.groupIdx}pattern(e){this.idx=0,this.input=e,this.groupIdx=0,this.consumeChar("/");let r=this.disjunction();this.consumeChar("/");let n={type:"Flags",loc:{begin:this.idx,end:e.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};for(;this.isRegExpFlag();)switch(this.popChar()){case"g":_g(n,"global");break;case"i":_g(n,"ignoreCase");break;case"m":_g(n,"multiLine");break;case"u":_g(n,"unicode");break;case"y":_g(n,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:n,value:r,loc:this.loc(0)}}disjunction(){let e=[],r=this.idx;for(e.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),e.push(this.alternative());return{type:"Disjunction",value:e,loc:this.loc(r)}}alternative(){let e=[],r=this.idx;for(;this.isTerm();)e.push(this.term());return{type:"Alternative",value:e,loc:this.loc(r)}}term(){return this.isAssertion()?this.assertion():this.atom()}assertion(){let e=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(e)};case"$":return{type:"EndAnchor",loc:this.loc(e)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(e)};case"B":return{type:"NonWordBoundary",loc:this.loc(e)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");let r;switch(this.popChar()){case"=":r="Lookahead";break;case"!":r="NegativeLookahead";break}rp(r);let n=this.disjunction();return this.consumeChar(")"),{type:r,value:n,loc:this.loc(e)}}return q2()}quantifier(e=!1){let r,n=this.idx;switch(this.popChar()){case"*":r={atLeast:0,atMost:1/0};break;case"+":r={atLeast:1,atMost:1/0};break;case"?":r={atLeast:0,atMost:1};break;case"{":let i=this.integerIncludingZero();switch(this.popChar()){case"}":r={atLeast:i,atMost:i};break;case",":let a;this.isDigit()?(a=this.integerIncludingZero(),r={atLeast:i,atMost:a}):r={atLeast:i,atMost:1/0},this.consumeChar("}");break}if(e===!0&&r===void 0)return;rp(r);break}if(!(e===!0&&r===void 0)&&rp(r))return this.peekChar(0)==="?"?(this.consumeChar("?"),r.greedy=!1):r.greedy=!0,r.type="Quantifier",r.loc=this.loc(n),r}atom(){let e,r=this.idx;switch(this.peekChar()){case".":e=this.dotAll();break;case"\\":e=this.atomEscape();break;case"[":e=this.characterClass();break;case"(":e=this.group();break}return e===void 0&&this.isPatternCharacter()&&(e=this.patternCharacter()),rp(e)?(e.loc=this.loc(r),this.isQuantifier()&&(e.quantifier=this.quantifier()),e):q2()}dotAll(){return this.consumeChar("."),{type:"Set",complement:!0,value:[ar(`
692 +`),ar("\r"),ar("\u2028"),ar("\u2029")]}}atomEscape(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}decimalEscapeAtom(){return{type:"GroupBackReference",value:this.positiveInteger()}}characterClassEscape(){let e,r=!1;switch(this.popChar()){case"d":e=Y2;break;case"D":e=Y2,r=!0;break;case"s":e=QR;break;case"S":e=QR,r=!0;break;case"w":e=X2;break;case"W":e=X2,r=!0;break}return rp(e)?{type:"Set",value:e,complement:r}:q2()}controlEscapeAtom(){let e;switch(this.popChar()){case"f":e=ar("\f");break;case"n":e=ar(`
693 +`);break;case"r":e=ar("\r");break;case"t":e=ar(" ");break;case"v":e=ar("\v");break}return rp(e)?{type:"Character",value:e}:q2()}controlLetterEscapeAtom(){this.consumeChar("c");let e=this.popChar();if(/[a-zA-Z]/.test(e)===!1)throw Error("Invalid ");return{type:"Character",value:e.toUpperCase().charCodeAt(0)-64}}nulCharacterAtom(){return this.consumeChar("0"),{type:"Character",value:ar("\0")}}hexEscapeSequenceAtom(){return this.consumeChar("x"),this.parseHexDigits(2)}regExpUnicodeEscapeSequenceAtom(){return this.consumeChar("u"),this.parseHexDigits(4)}identityEscapeAtom(){let e=this.popChar();return{type:"Character",value:ar(e)}}classPatternCharacterAtom(){switch(this.peekChar()){case`
694 +`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:let e=this.popChar();return{type:"Character",value:ar(e)}}}characterClass(){let e=[],r=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),r=!0);this.isClassAtom();){let n=this.classAtom(),i=n.type==="Character";if(jR(n)&&this.isRangeDash()){this.consumeChar("-");let a=this.classAtom(),s=a.type==="Character";if(jR(a)){if(a.value<n.value)throw Error("Range out of order in character class");e.push({from:n.value,to:a.value})}else bk(n.value,e),e.push(ar("-")),bk(a.value,e)}else bk(n.value,e)}return this.consumeChar("]"),{type:"Set",complement:r,value:e}}classAtom(){switch(this.peekChar()){case"]":case`
695 +`:case"\r":case"\u2028":case"\u2029":throw Error("TBD");case"\\":return this.classEscape();default:return this.classPatternCharacterAtom()}}classEscape(){switch(this.consumeChar("\\"),this.peekChar()){case"b":return this.consumeChar("b"),{type:"Character",value:ar("\b")};case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}group(){let e=!0;switch(this.consumeChar("("),this.peekChar(0)){case"?":this.consumeChar("?"),this.consumeChar(":"),e=!1;break;default:this.groupIdx++;break}let r=this.disjunction();this.consumeChar(")");let n={type:"Group",capturing:e,value:r};return e&&(n.idx=this.groupIdx),n}positiveInteger(){let e=this.popChar();if(nPe.test(e)===!1)throw Error("Expecting a positive integer");for(;wk.test(this.peekChar(0));)e+=this.popChar();return parseInt(e,10)}integerIncludingZero(){let e=this.popChar();if(wk.test(e)===!1)throw Error("Expecting an integer");for(;wk.test(this.peekChar(0));)e+=this.popChar();return parseInt(e,10)}patternCharacter(){let e=this.popChar();switch(e){case`
696 +`:case"\r":case"\u2028":case"\u2029":case"^":case"$":case"\\":case".":case"*":case"+":case"?":case"(":case")":case"[":case"|":throw Error("TBD");default:return{type:"Character",value:ar(e)}}}isRegExpFlag(){switch(this.peekChar(0)){case"g":case"i":case"m":case"u":case"y":return!0;default:return!1}}isRangeDash(){return this.peekChar()==="-"&&this.isClassAtom(1)}isDigit(){return wk.test(this.peekChar(0))}isClassAtom(e=0){switch(this.peekChar(e)){case"]":case`
697 +`:case"\r":case"\u2028":case"\u2029":return!1;default:return!0}}isTerm(){return this.isAtom()||this.isAssertion()}isAtom(){if(this.isPatternCharacter())return!0;switch(this.peekChar(0)){case".":case"\\":case"[":case"(":return!0;default:return!1}}isAssertion(){switch(this.peekChar(0)){case"^":case"$":return!0;case"\\":switch(this.peekChar(1)){case"b":case"B":return!0;default:return!1}case"(":return this.peekChar(1)==="?"&&(this.peekChar(2)==="="||this.peekChar(2)==="!");default:return!1}}isQuantifier(){let e=this.saveState();try{return this.quantifier(!0)!==void 0}catch{return!1}finally{this.restoreState(e)}}isPatternCharacter(){switch(this.peekChar()){case"^":case"$":case"\\":case".":case"*":case"+":case"?":case"(":case")":case"[":case"|":case"/":case`
698 +`:case"\r":case"\u2028":case"\u2029":return!1;default:return!0}}parseHexDigits(e){let r="";for(let i=0;i<e;i++){let a=this.popChar();if(rPe.test(a)===!1)throw Error("Expecting a HexDecimal digits");r+=a}return{type:"Character",value:parseInt(r,16)}}peekChar(e=0){return this.input[this.idx+e]}popChar(){let e=this.peekChar(0);return this.consumeChar(void 0),e}consumeChar(e){if(e!==void 0&&this.input[this.idx]!==e)throw Error("Expected: '"+e+"' but found: '"+this.input[this.idx]+"' at offset: "+this.idx);if(this.idx>=this.input.length)throw Error("Unexpected end of input");this.idx++}loc(e){return{begin:e,end:this.idx}}}});var Mc,yae=N(()=>{"use strict";Mc=class{static{o(this,"BaseRegExpVisitor")}visitChildren(e){for(let r in e){let n=e[r];e.hasOwnProperty(r)&&(n.type!==void 0?this.visit(n):Array.isArray(n)&&n.forEach(i=>{this.visit(i)},this))}}visit(e){switch(e.type){case"Pattern":this.visitPattern(e);break;case"Flags":this.visitFlags(e);break;case"Disjunction":this.visitDisjunction(e);break;case"Alternative":this.visitAlternative(e);break;case"StartAnchor":this.visitStartAnchor(e);break;case"EndAnchor":this.visitEndAnchor(e);break;case"WordBoundary":this.visitWordBoundary(e);break;case"NonWordBoundary":this.visitNonWordBoundary(e);break;case"Lookahead":this.visitLookahead(e);break;case"NegativeLookahead":this.visitNegativeLookahead(e);break;case"Character":this.visitCharacter(e);break;case"Set":this.visitSet(e);break;case"Group":this.visitGroup(e);break;case"GroupBackReference":this.visitGroupBackReference(e);break;case"Quantifier":this.visitQuantifier(e);break}this.visitChildren(e)}visitPattern(e){}visitFlags(e){}visitDisjunction(e){}visitAlternative(e){}visitStartAnchor(e){}visitEndAnchor(e){}visitWordBoundary(e){}visitNonWordBoundary(e){}visitLookahead(e){}visitNegativeLookahead(e){}visitCharacter(e){}visitSet(e){}visitGroup(e){}visitGroupBackReference(e){}visitQuantifier(e){}}});var j2=N(()=>{"use strict";gae();yae()});var Tk={};hr(Tk,{NEWLINE_REGEXP:()=>JR,escapeRegExp:()=>ap,getCaseInsensitivePattern:()=>tN,getTerminalParts:()=>iPe,isMultilineComment:()=>eN,isWhitespace:()=>Dg,partialMatches:()=>rN,partialRegExp:()=>bae,whitespaceCharacters:()=>xae});function iPe(t){try{typeof t!="string"&&(t=t.source),t=`/${t}/`;let e=vae.pattern(t),r=[];for(let n of e.value.value)ip.reset(t),ip.visit(n),r.push({start:ip.startRegexp,end:ip.endRegex});return r}catch{return[]}}function eN(t){try{return typeof t=="string"&&(t=new RegExp(t)),t=t.toString(),ip.reset(t),ip.visit(vae.pattern(t)),ip.multiline}catch{return!1}}function Dg(t){let e=typeof t=="string"?new RegExp(t):t;return xae.some(r=>e.test(r))}function ap(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function tN(t){return Array.prototype.map.call(t,e=>/\w/.test(e)?`[${e.toLowerCase()}${e.toUpperCase()}]`:ap(e)).join("")}function rN(t,e){let r=bae(t),n=e.match(r);return!!n&&n[0].length>0}function bae(t){typeof t=="string"&&(t=new RegExp(t));let e=t,r=t.source,n=0;function i(){let a="",s;function l(h){a+=r.substr(n,h),n+=h}o(l,"appendRaw");function u(h){a+="(?:"+r.substr(n,h)+"|$)",n+=h}for(o(u,"appendOptional");n<r.length;)switch(r[n]){case"\\":switch(r[n+1]){case"c":u(3);break;case"x":u(4);break;case"u":e.unicode?r[n+2]==="{"?u(r.indexOf("}",n)-n+1):u(6):u(2);break;case"p":case"P":e.unicode?u(r.indexOf("}",n)-n+1):u(2);break;case"k":u(r.indexOf(">",n)-n+1);break;default:u(2);break}break;case"[":s=/\[(?:\\.|.)*?\]/g,s.lastIndex=n,s=s.exec(r)||[],u(s[0].length);break;case"|":case"^":case"$":case"*":case"+":case"?":l(1);break;case"{":s=/\{\d+,?\d*\}/g,s.lastIndex=n,s=s.exec(r),s?l(s[0].length):u(1);break;case"(":if(r[n+1]==="?")switch(r[n+2]){case":":a+="(?:",n+=3,a+=i()+"|$)";break;case"=":a+="(?=",n+=3,a+=i()+")";break;case"!":s=n,n+=3,i(),a+=r.substr(s,n-s);break;case"<":switch(r[n+3]){case"=":case"!":s=n,n+=4,i(),a+=r.substr(s,n-s);break;default:l(r.indexOf(">",n)-n+1),a+=i()+"|$)";break}break}else l(1),a+=i()+"|$)";break;case")":return++n,a;default:u(1);break}return a}return o(i,"process"),new RegExp(i(),t.flags)}var JR,vae,ZR,ip,xae,Lg=N(()=>{"use strict";j2();JR=/\r?\n/gm,vae=new np,ZR=class extends Mc{static{o(this,"TerminalRegExpVisitor")}constructor(){super(...arguments),this.isStarting=!0,this.endRegexpStack=[],this.multiline=!1}get endRegex(){return this.endRegexpStack.join("")}reset(e){this.multiline=!1,this.regex=e,this.startRegexp="",this.isStarting=!0,this.endRegexpStack=[]}visitGroup(e){e.quantifier&&(this.isStarting=!1,this.endRegexpStack=[])}visitCharacter(e){let r=String.fromCharCode(e.value);if(!this.multiline&&r===`
699 +`&&(this.multiline=!0),e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let n=ap(r);this.endRegexpStack.push(n),this.isStarting&&(this.startRegexp+=n)}}visitSet(e){if(!this.multiline){let r=this.regex.substring(e.loc.begin,e.loc.end),n=new RegExp(r);this.multiline=!!`
700 +`.match(n)}if(e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let r=this.regex.substring(e.loc.begin,e.loc.end);this.endRegexpStack.push(r),this.isStarting&&(this.startRegexp+=r)}}visitChildren(e){e.type==="Group"&&e.quantifier||super.visitChildren(e)}},ip=new ZR;o(iPe,"getTerminalParts");o(eN,"isMultilineComment");xae=`\f
701 +\r \v \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF`.split("");o(Dg,"isWhitespace");o(ap,"escapeRegExp");o(tN,"getCaseInsensitivePattern");o(rN,"partialMatches");o(bae,"partialRegExp")});var Ek={};hr(Ek,{findAssignment:()=>hN,findNameAssignment:()=>kk,findNodeForKeyword:()=>cN,findNodeForProperty:()=>Q2,findNodesForKeyword:()=>aPe,findNodesForKeywordInternal:()=>uN,findNodesForProperty:()=>oN,getActionAtElement:()=>Sae,getActionType:()=>Aae,getAllReachableRules:()=>K2,getCrossReferenceTerminal:()=>aN,getEntryRule:()=>wae,getExplicitRuleType:()=>Rg,getHiddenRules:()=>Tae,getRuleType:()=>fN,getRuleTypeName:()=>uPe,getTypeName:()=>J2,isArrayCardinality:()=>oPe,isArrayOperator:()=>lPe,isCommentTerminal:()=>sN,isDataType:()=>cPe,isDataTypeRule:()=>Z2,isOptionalCardinality:()=>sPe,terminalRegex:()=>Ng});function wae(t){return t.rules.find(e=>Oa(e)&&e.entry)}function Tae(t){return t.rules.filter(e=>so(e)&&e.hidden)}function K2(t,e){let r=new Set,n=wae(t);if(!n)return new Set(t.rules);let i=[n].concat(Tae(t));for(let s of i)kae(s,r,e);let a=new Set;for(let s of t.rules)(r.has(s.name)||so(s)&&s.hidden)&&a.add(s);return a}function kae(t,e,r){e.add(t.name),Nc(t).forEach(n=>{if(Il(n)||r&&gk(n)){let i=n.rule.ref;i&&!e.has(i.name)&&kae(i,e,r)}})}function aN(t){if(t.terminal)return t.terminal;if(t.type.ref){let e=kk(t.type.ref);return e?.terminal}}function sN(t){return t.hidden&&!Dg(Ng(t))}function oN(t,e){return!t||!e?[]:lN(t,e,t.astNode,!0)}function Q2(t,e,r){if(!t||!e)return;let n=lN(t,e,t.astNode,!0);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function lN(t,e,r,n){if(!n){let i=tp(t.grammarSource,Ml);if(i&&i.feature===e)return[t]}return Ll(t)&&t.astNode===r?t.content.flatMap(i=>lN(i,e,r,!1)):[]}function aPe(t,e){return t?uN(t,e,t?.astNode):[]}function cN(t,e,r){if(!t)return;let n=uN(t,e,t?.astNode);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function uN(t,e,r){if(t.astNode!==r)return[];if(Ho(t.grammarSource)&&t.grammarSource.value===e)return[t];let n=Kd(t).iterator(),i,a=[];do if(i=n.next(),!i.done){let s=i.value;s.astNode===r?Ho(s.grammarSource)&&s.grammarSource.value===e&&a.push(s):n.prune()}while(!i.done);return a}function hN(t){var e;let r=t.astNode;for(;r===((e=t.container)===null||e===void 0?void 0:e.astNode);){let n=tp(t.grammarSource,Ml);if(n)return n;t=t.container}}function kk(t){let e=t;return fk(e)&&(Mu(e.$container)?e=e.$container.$container:Oa(e.$container)?e=e.$container:Lc(e.$container)),Eae(t,e,new Map)}function Eae(t,e,r){var n;function i(a,s){let l;return tp(a,Ml)||(l=Eae(s,s,r)),r.set(t,l),l}if(o(i,"go"),r.has(t))return r.get(t);r.set(t,void 0);for(let a of Nc(e)){if(Ml(a)&&a.feature.toLowerCase()==="name")return r.set(t,a),a;if(Il(a)&&Oa(a.rule.ref))return i(a,a.rule.ref);if(pk(a)&&(!((n=a.typeRef)===null||n===void 0)&&n.ref))return i(a,a.typeRef.ref)}}function Sae(t){let e=t.$container;if(sf(e)){let r=e.elements,n=r.indexOf(t);for(let i=n-1;i>=0;i--){let a=r[i];if(Mu(a))return a;{let s=Nc(r[i]).find(Mu);if(s)return s}}}if(G2(e))return Sae(e)}function sPe(t,e){return t==="?"||t==="*"||sf(e)&&!!e.guardCondition}function oPe(t){return t==="*"||t==="+"}function lPe(t){return t==="+="}function Z2(t){return Cae(t,new Set)}function Cae(t,e){if(e.has(t))return!0;e.add(t);for(let r of Nc(t))if(Il(r)){if(!r.rule.ref||Oa(r.rule.ref)&&!Cae(r.rule.ref,e))return!1}else{if(Ml(r))return!1;if(Mu(r))return!1}return!!t.definition}function cPe(t){return iN(t.type,new Set)}function iN(t,e){if(e.has(t))return!0;if(e.add(t),DR(t))return!1;if(OR(t))return!1;if(BR(t))return t.types.every(r=>iN(r,e));if(pk(t)){if(t.primitiveType!==void 0)return!0;if(t.stringType!==void 0)return!0;if(t.typeRef!==void 0){let r=t.typeRef.ref;return V2(r)?iN(r.type,e):!1}else return!1}else return!1}function Rg(t){if(t.inferredType)return t.inferredType.name;if(t.dataType)return t.dataType;if(t.returnType){let e=t.returnType.ref;if(e){if(Oa(e))return e.name;if(dk(e)||V2(e))return e.name}}}function J2(t){var e;if(Oa(t))return Z2(t)?t.name:(e=Rg(t))!==null&&e!==void 0?e:t.name;if(dk(t)||V2(t)||PR(t))return t.name;if(Mu(t)){let r=Aae(t);if(r)return r}else if(fk(t))return t.name;throw new Error("Cannot get name of Unknown Type")}function Aae(t){var e;if(t.inferredType)return t.inferredType.name;if(!((e=t.type)===null||e===void 0)&&e.ref)return J2(t.type.ref)}function uPe(t){var e,r,n;return so(t)?(r=(e=t.type)===null||e===void 0?void 0:e.name)!==null&&r!==void 0?r:"string":Z2(t)?t.name:(n=Rg(t))!==null&&n!==void 0?n:t.name}function fN(t){var e,r,n;return so(t)?(r=(e=t.type)===null||e===void 0?void 0:e.name)!==null&&r!==void 0?r:"string":(n=Rg(t))!==null&&n!==void 0?n:t.name}function Ng(t){let e={s:!1,i:!1,u:!1},r=Mg(t.definition,e),n=Object.entries(e).filter(([,i])=>i).map(([i])=>i).join("");return new RegExp(r,n)}function Mg(t,e){if(VR(t))return hPe(t);if(UR(t))return fPe(t);if(FR(t))return mPe(t);if(gk(t)){let r=t.rule.ref;if(!r)throw new Error("Missing rule reference.");return Iu(Mg(r.definition),{cardinality:t.cardinality,lookahead:t.lookahead})}else{if(zR(t))return pPe(t);if(HR(t))return dPe(t);if(GR(t)){let r=t.regex.lastIndexOf("/"),n=t.regex.substring(1,r),i=t.regex.substring(r+1);return e&&(e.i=i.includes("i"),e.s=i.includes("s"),e.u=i.includes("u")),Iu(n,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}else{if(WR(t))return Iu(dN,{cardinality:t.cardinality,lookahead:t.lookahead});throw new Error(`Invalid terminal element: ${t?.$type}`)}}}function hPe(t){return Iu(t.elements.map(e=>Mg(e)).join("|"),{cardinality:t.cardinality,lookahead:t.lookahead})}function fPe(t){return Iu(t.elements.map(e=>Mg(e)).join(""),{cardinality:t.cardinality,lookahead:t.lookahead})}function dPe(t){return Iu(`${dN}*?${Mg(t.terminal)}`,{cardinality:t.cardinality,lookahead:t.lookahead})}function pPe(t){return Iu(`(?!${Mg(t.terminal)})${dN}*?`,{cardinality:t.cardinality,lookahead:t.lookahead})}function mPe(t){return t.right?Iu(`[${nN(t.left)}-${nN(t.right)}]`,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1}):Iu(nN(t.left),{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}function nN(t){return ap(t.value)}function Iu(t,e){var r;return(e.wrap!==!1||e.lookahead)&&(t=`(${(r=e.lookahead)!==null&&r!==void 0?r:""}${t})`),e.cardinality?`${t}${e.cardinality}`:t}var dN,Ol=N(()=>{"use strict";uk();Rc();Rl();is();Nl();Lg();o(wae,"getEntryRule");o(Tae,"getHiddenRules");o(K2,"getAllReachableRules");o(kae,"ruleDfs");o(aN,"getCrossReferenceTerminal");o(sN,"isCommentTerminal");o(oN,"findNodesForProperty");o(Q2,"findNodeForProperty");o(lN,"findNodesForPropertyInternal");o(aPe,"findNodesForKeyword");o(cN,"findNodeForKeyword");o(uN,"findNodesForKeywordInternal");o(hN,"findAssignment");o(kk,"findNameAssignment");o(Eae,"findNameAssignmentInternal");o(Sae,"getActionAtElement");o(sPe,"isOptionalCardinality");o(oPe,"isArrayCardinality");o(lPe,"isArrayOperator");o(Z2,"isDataTypeRule");o(Cae,"isDataTypeRuleInternal");o(cPe,"isDataType");o(iN,"isDataTypeInternal");o(Rg,"getExplicitRuleType");o(J2,"getTypeName");o(Aae,"getActionType");o(uPe,"getRuleTypeName");o(fN,"getRuleType");o(Ng,"terminalRegex");dN=/[\s\S]/.source;o(Mg,"abstractElementToRegex");o(hPe,"terminalAlternativesToRegex");o(fPe,"terminalGroupToRegex");o(dPe,"untilTokenToRegex");o(pPe,"negateTokenToRegex");o(mPe,"characterRangeToRegex");o(nN,"keywordToRegex");o(Iu,"withCardinality")});function pN(t){let e=[],r=t.Grammar;for(let n of r.rules)so(n)&&sN(n)&&eN(Ng(n))&&e.push(n.name);return{multilineCommentRules:e,nameRegexp:lk}}var mN=N(()=>{"use strict";Nl();Ol();Lg();Rc();o(pN,"createGrammarConfig")});var gN=N(()=>{"use strict"});function Ig(t){console&&console.error&&console.error(`Error: ${t}`)}function ex(t){console&&console.warn&&console.warn(`Warning: ${t}`)}var _ae=N(()=>{"use strict";o(Ig,"PRINT_ERROR");o(ex,"PRINT_WARNING")});function tx(t){let e=new Date().getTime(),r=t();return{time:new Date().getTime()-e,value:r}}var Dae=N(()=>{"use strict";o(tx,"timer")});function rx(t){function e(){}o(e,"FakeConstructor"),e.prototype=t;let r=new e;function n(){return typeof r.bar}return o(n,"fakeAccess"),n(),n(),t;(0,eval)(t)}var Lae=N(()=>{"use strict";o(rx,"toFastProperties")});var Og=N(()=>{"use strict";_ae();Dae();Lae()});function gPe(t){return yPe(t)?t.LABEL:t.name}function yPe(t){return yi(t.LABEL)&&t.LABEL!==""}function Sk(t){return Je(t,Pg)}function Pg(t){function e(r){return Je(r,Pg)}if(o(e,"convertDefinition"),t instanceof on){let r={type:"NonTerminal",name:t.nonTerminalName,idx:t.idx};return yi(t.label)&&(r.label=t.label),r}else{if(t instanceof Dn)return{type:"Alternative",definition:e(t.definition)};if(t instanceof ln)return{type:"Option",idx:t.idx,definition:e(t.definition)};if(t instanceof Ln)return{type:"RepetitionMandatory",idx:t.idx,definition:e(t.definition)};if(t instanceof Rn)return{type:"RepetitionMandatoryWithSeparator",idx:t.idx,separator:Pg(new kr({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof wn)return{type:"RepetitionWithSeparator",idx:t.idx,separator:Pg(new kr({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof Or)return{type:"Repetition",idx:t.idx,definition:e(t.definition)};if(t instanceof Tn)return{type:"Alternation",idx:t.idx,definition:e(t.definition)};if(t instanceof kr){let r={type:"Terminal",name:t.terminalType.name,label:gPe(t.terminalType),idx:t.idx};yi(t.label)&&(r.terminalLabel=t.label);let n=t.terminalType.PATTERN;return t.terminalType.PATTERN&&(r.pattern=zo(n)?n.source:n),r}else{if(t instanceof as)return{type:"Rule",name:t.name,orgText:t.orgText,definition:e(t.definition)};throw Error("non exhaustive match")}}}var oo,on,as,Dn,ln,Ln,Rn,Or,wn,Tn,kr,Ck=N(()=>{"use strict";qt();o(gPe,"tokenLabel");o(yPe,"hasTokenLabel");oo=class{static{o(this,"AbstractProduction")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){this._definition=e}accept(e){e.visit(this),Ae(this.definition,r=>{r.accept(e)})}},on=class extends oo{static{o(this,"NonTerminal")}constructor(e){super([]),this.idx=1,ma(this,Os(e,r=>r!==void 0))}set definition(e){}get definition(){return this.referencedRule!==void 0?this.referencedRule.definition:[]}accept(e){e.visit(this)}},as=class extends oo{static{o(this,"Rule")}constructor(e){super(e.definition),this.orgText="",ma(this,Os(e,r=>r!==void 0))}},Dn=class extends oo{static{o(this,"Alternative")}constructor(e){super(e.definition),this.ignoreAmbiguities=!1,ma(this,Os(e,r=>r!==void 0))}},ln=class extends oo{static{o(this,"Option")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},Ln=class extends oo{static{o(this,"RepetitionMandatory")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},Rn=class extends oo{static{o(this,"RepetitionMandatoryWithSeparator")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},Or=class extends oo{static{o(this,"Repetition")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},wn=class extends oo{static{o(this,"RepetitionWithSeparator")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},Tn=class extends oo{static{o(this,"Alternation")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){super(e.definition),this.idx=1,this.ignoreAmbiguities=!1,this.hasPredicates=!1,ma(this,Os(e,r=>r!==void 0))}},kr=class{static{o(this,"Terminal")}constructor(e){this.idx=1,ma(this,Os(e,r=>r!==void 0))}accept(e){e.visit(this)}};o(Sk,"serializeGrammar");o(Pg,"serializeProduction")});var ss,Rae=N(()=>{"use strict";Ck();ss=class{static{o(this,"GAstVisitor")}visit(e){let r=e;switch(r.constructor){case on:return this.visitNonTerminal(r);case Dn:return this.visitAlternative(r);case ln:return this.visitOption(r);case Ln:return this.visitRepetitionMandatory(r);case Rn:return this.visitRepetitionMandatoryWithSeparator(r);case wn:return this.visitRepetitionWithSeparator(r);case Or:return this.visitRepetition(r);case Tn:return this.visitAlternation(r);case kr:return this.visitTerminal(r);case as:return this.visitRule(r);default:throw Error("non exhaustive match")}}visitNonTerminal(e){}visitAlternative(e){}visitOption(e){}visitRepetition(e){}visitRepetitionMandatory(e){}visitRepetitionMandatoryWithSeparator(e){}visitRepetitionWithSeparator(e){}visitAlternation(e){}visitTerminal(e){}visitRule(e){}}});function yN(t){return t instanceof Dn||t instanceof ln||t instanceof Or||t instanceof Ln||t instanceof Rn||t instanceof wn||t instanceof kr||t instanceof as}function sp(t,e=[]){return t instanceof ln||t instanceof Or||t instanceof wn?!0:t instanceof Tn?A2(t.definition,n=>sp(n,e)):t instanceof on&&qn(e,t)?!1:t instanceof oo?(t instanceof on&&e.push(t),Ma(t.definition,n=>sp(n,e))):!1}function vN(t){return t instanceof Tn}function Bs(t){if(t instanceof on)return"SUBRULE";if(t instanceof ln)return"OPTION";if(t instanceof Tn)return"OR";if(t instanceof Ln)return"AT_LEAST_ONE";if(t instanceof Rn)return"AT_LEAST_ONE_SEP";if(t instanceof wn)return"MANY_SEP";if(t instanceof Or)return"MANY";if(t instanceof kr)return"CONSUME";throw Error("non exhaustive match")}var Nae=N(()=>{"use strict";qt();Ck();o(yN,"isSequenceProd");o(sp,"isOptionalProd");o(vN,"isBranchingProd");o(Bs,"getProductionDslName")});var os=N(()=>{"use strict";Ck();Rae();Nae()});function Mae(t,e,r){return[new ln({definition:[new kr({terminalType:t.separator})].concat(t.definition)})].concat(e,r)}var Ou,Ak=N(()=>{"use strict";qt();os();Ou=class{static{o(this,"RestWalker")}walk(e,r=[]){Ae(e.definition,(n,i)=>{let a=gi(e.definition,i+1);if(n instanceof on)this.walkProdRef(n,a,r);else if(n instanceof kr)this.walkTerminal(n,a,r);else if(n instanceof Dn)this.walkFlat(n,a,r);else if(n instanceof ln)this.walkOption(n,a,r);else if(n instanceof Ln)this.walkAtLeastOne(n,a,r);else if(n instanceof Rn)this.walkAtLeastOneSep(n,a,r);else if(n instanceof wn)this.walkManySep(n,a,r);else if(n instanceof Or)this.walkMany(n,a,r);else if(n instanceof Tn)this.walkOr(n,a,r);else throw Error("non exhaustive match")})}walkTerminal(e,r,n){}walkProdRef(e,r,n){}walkFlat(e,r,n){let i=r.concat(n);this.walk(e,i)}walkOption(e,r,n){let i=r.concat(n);this.walk(e,i)}walkAtLeastOne(e,r,n){let i=[new ln({definition:e.definition})].concat(r,n);this.walk(e,i)}walkAtLeastOneSep(e,r,n){let i=Mae(e,r,n);this.walk(e,i)}walkMany(e,r,n){let i=[new ln({definition:e.definition})].concat(r,n);this.walk(e,i)}walkManySep(e,r,n){let i=Mae(e,r,n);this.walk(e,i)}walkOr(e,r,n){let i=r.concat(n);Ae(e.definition,a=>{let s=new Dn({definition:[a]});this.walk(s,i)})}};o(Mae,"restForRepetitionWithSeparator")});function op(t){if(t instanceof on)return op(t.referencedRule);if(t instanceof kr)return bPe(t);if(yN(t))return vPe(t);if(vN(t))return xPe(t);throw Error("non exhaustive match")}function vPe(t){let e=[],r=t.definition,n=0,i=r.length>n,a,s=!0;for(;i&&s;)a=r[n],s=sp(a),e=e.concat(op(a)),n=n+1,i=r.length>n;return Bm(e)}function xPe(t){let e=Je(t.definition,r=>op(r));return Bm(qr(e))}function bPe(t){return[t.terminalType]}var xN=N(()=>{"use strict";qt();os();o(op,"first");o(vPe,"firstForSequence");o(xPe,"firstForBranching");o(bPe,"firstForTerminal")});var _k,bN=N(()=>{"use strict";_k="_~IN~_"});function Iae(t){let e={};return Ae(t,r=>{let n=new wN(r).startWalking();ma(e,n)}),e}function wPe(t,e){return t.name+e+_k}var wN,Oae=N(()=>{"use strict";Ak();xN();qt();bN();os();wN=class extends Ou{static{o(this,"ResyncFollowsWalker")}constructor(e){super(),this.topProd=e,this.follows={}}startWalking(){return this.walk(this.topProd),this.follows}walkTerminal(e,r,n){}walkProdRef(e,r,n){let i=wPe(e.referencedRule,e.idx)+this.topProd.name,a=r.concat(n),s=new Dn({definition:a}),l=op(s);this.follows[i]=l}};o(Iae,"computeAllProdsFollows");o(wPe,"buildBetweenProdsFollowPrefix")});function Bg(t){let e=t.toString();if(Dk.hasOwnProperty(e))return Dk[e];{let r=TPe.pattern(e);return Dk[e]=r,r}}function Pae(){Dk={}}var Dk,TPe,Lk=N(()=>{"use strict";j2();Dk={},TPe=new np;o(Bg,"getRegExpAst");o(Pae,"clearRegExpParserCache")});function $ae(t,e=!1){try{let r=Bg(t);return TN(r.value,{},r.flags.ignoreCase)}catch(r){if(r.message===Fae)e&&ex(`${nx} Unable to optimize: < ${t.toString()} >
702 + Complement Sets cannot be automatically optimized.
703 + This will disable the lexer's first char optimizations.
704 + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{let n="";e&&(n=`
705 + This will disable the lexer's first char optimizations.
706 + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),Ig(`${nx}
707 + Failed parsing: < ${t.toString()} >
708 + Using the @chevrotain/regexp-to-ast library
709 + Please open an issue at: https://github.com/chevrotain/chevrotain/issues`+n)}}return[]}function TN(t,e,r){switch(t.type){case"Disjunction":for(let i=0;i<t.value.length;i++)TN(t.value[i],e,r);break;case"Alternative":let n=t.value;for(let i=0;i<n.length;i++){let a=n[i];switch(a.type){case"EndAnchor":case"GroupBackReference":case"Lookahead":case"NegativeLookahead":case"StartAnchor":case"WordBoundary":case"NonWordBoundary":continue}let s=a;switch(s.type){case"Character":Rk(s.value,e,r);break;case"Set":if(s.complement===!0)throw Error(Fae);Ae(s.value,u=>{if(typeof u=="number")Rk(u,e,r);else{let h=u;if(r===!0)for(let f=h.from;f<=h.to;f++)Rk(f,e,r);else{for(let f=h.from;f<=h.to&&f<Fg;f++)Rk(f,e,r);if(h.to>=Fg){let f=h.from>=Fg?h.from:Fg,d=h.to,p=Ic(f),m=Ic(d);for(let g=p;g<=m;g++)e[g]=g}}}});break;case"Group":TN(s.value,e,r);break;default:throw Error("Non Exhaustive Match")}let l=s.quantifier!==void 0&&s.quantifier.atLeast===0;if(s.type==="Group"&&kN(s)===!1||s.type!=="Group"&&l===!1)break}break;default:throw Error("non exhaustive match!")}return br(e)}function Rk(t,e,r){let n=Ic(t);e[n]=n,r===!0&&kPe(t,e)}function kPe(t,e){let r=String.fromCharCode(t),n=r.toUpperCase();if(n!==r){let i=Ic(n.charCodeAt(0));e[i]=i}else{let i=r.toLowerCase();if(i!==r){let a=Ic(i.charCodeAt(0));e[a]=a}}}function Bae(t,e){return ns(t.value,r=>{if(typeof r=="number")return qn(e,r);{let n=r;return ns(e,i=>n.from<=i&&i<=n.to)!==void 0}})}function kN(t){let e=t.quantifier;return e&&e.atLeast===0?!0:t.value?Pt(t.value)?Ma(t.value,kN):kN(t.value):!1}function Nk(t,e){if(e instanceof RegExp){let r=Bg(e),n=new EN(t);return n.visit(r),n.found}else return ns(e,r=>qn(t,r.charCodeAt(0)))!==void 0}var Fae,nx,EN,zae=N(()=>{"use strict";j2();qt();Og();Lk();SN();Fae="Complement Sets are not supported for first char optimization",nx=`Unable to use "first char" lexer optimizations:
710 +`;o($ae,"getOptimizedStartCodesIndices");o(TN,"firstCharOptimizedIndices");o(Rk,"addOptimizedIdxToResult");o(kPe,"handleIgnoreCase");o(Bae,"findCode");o(kN,"isWholeOptional");EN=class extends Mc{static{o(this,"CharCodeFinder")}constructor(e){super(),this.targetCharCodes=e,this.found=!1}visitChildren(e){if(this.found!==!0){switch(e.type){case"Lookahead":this.visitLookahead(e);return;case"NegativeLookahead":this.visitNegativeLookahead(e);return}super.visitChildren(e)}}visitCharacter(e){qn(this.targetCharCodes,e.value)&&(this.found=!0)}visitSet(e){e.complement?Bae(e,this.targetCharCodes)===void 0&&(this.found=!0):Bae(e,this.targetCharCodes)!==void 0&&(this.found=!0)}};o(Nk,"canMatchCharCode")});function Uae(t,e){e=Qh(e,{useSticky:AN,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",`
711 +`],tracer:o((b,w)=>w(),"tracer")});let r=e.tracer;r("initCharCodeToOptimizedIndexMap",()=>{GPe()});let n;r("Reject Lexer.NA",()=>{n=Jh(t,b=>b[lp]===Xn.NA)});let i=!1,a;r("Transform Patterns",()=>{i=!1,a=Je(n,b=>{let w=b[lp];if(zo(w)){let C=w.source;return C.length===1&&C!=="^"&&C!=="$"&&C!=="."&&!w.ignoreCase?C:C.length===2&&C[0]==="\\"&&!qn(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],C[1])?C[1]:e.useSticky?Vae(w):Gae(w)}else{if(Si(w))return i=!0,{exec:w};if(typeof w=="object")return i=!0,w;if(typeof w=="string"){if(w.length===1)return w;{let C=w.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),T=new RegExp(C);return e.useSticky?Vae(T):Gae(T)}}else throw Error("non exhaustive match")}})});let s,l,u,h,f;r("misc mapping",()=>{s=Je(n,b=>b.tokenTypeIdx),l=Je(n,b=>{let w=b.GROUP;if(w!==Xn.SKIPPED){if(yi(w))return w;if(pr(w))return!1;throw Error("non exhaustive match")}}),u=Je(n,b=>{let w=b.LONGER_ALT;if(w)return Pt(w)?Je(w,T=>UT(n,T)):[UT(n,w)]}),h=Je(n,b=>b.PUSH_MODE),f=Je(n,b=>Bt(b,"POP_MODE"))});let d;r("Line Terminator Handling",()=>{let b=Qae(e.lineTerminatorCharacters);d=Je(n,w=>!1),e.positionTracking!=="onlyOffset"&&(d=Je(n,w=>Bt(w,"LINE_BREAKS")?!!w.LINE_BREAKS:Kae(w,b)===!1&&Nk(b,w.PATTERN)))});let p,m,g,y;r("Misc Mapping #2",()=>{p=Je(n,Xae),m=Je(a,$Pe),g=Xr(n,(b,w)=>{let C=w.GROUP;return yi(C)&&C!==Xn.SKIPPED&&(b[C]=[]),b},{}),y=Je(a,(b,w)=>({pattern:a[w],longerAlt:u[w],canLineTerminator:d[w],isCustom:p[w],short:m[w],group:l[w],push:h[w],pop:f[w],tokenTypeIdx:s[w],tokenType:n[w]}))});let v=!0,x=[];return e.safeMode||r("First Char Optimization",()=>{x=Xr(n,(b,w,C)=>{if(typeof w.PATTERN=="string"){let T=w.PATTERN.charCodeAt(0),E=Ic(T);CN(b,E,y[C])}else if(Pt(w.START_CHARS_HINT)){let T;Ae(w.START_CHARS_HINT,E=>{let A=typeof E=="string"?E.charCodeAt(0):E,S=Ic(A);T!==S&&(T=S,CN(b,S,y[C]))})}else if(zo(w.PATTERN))if(w.PATTERN.unicode)v=!1,e.ensureOptimizations&&Ig(`${nx} Unable to analyze < ${w.PATTERN.toString()} > pattern.
712 + The regexp unicode flag is not currently supported by the regexp-to-ast library.
713 + This will disable the lexer's first char optimizations.
714 + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{let T=$ae(w.PATTERN,e.ensureOptimizations);ur(T)&&(v=!1),Ae(T,E=>{CN(b,E,y[C])})}else e.ensureOptimizations&&Ig(`${nx} TokenType: <${w.name}> is using a custom token pattern without providing <start_chars_hint> parameter.
715 + This will disable the lexer's first char optimizations.
716 + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),v=!1;return b},[])}),{emptyGroups:g,patternIdxToConfig:y,charCodeToPatternIdxToConfig:x,hasCustom:i,canBeOptimized:v}}function Hae(t,e){let r=[],n=SPe(t);r=r.concat(n.errors);let i=CPe(n.valid),a=i.valid;return r=r.concat(i.errors),r=r.concat(EPe(a)),r=r.concat(IPe(a)),r=r.concat(OPe(a,e)),r=r.concat(PPe(a)),r}function EPe(t){let e=[],r=Yr(t,n=>zo(n[lp]));return e=e.concat(_Pe(r)),e=e.concat(RPe(r)),e=e.concat(NPe(r)),e=e.concat(MPe(r)),e=e.concat(DPe(r)),e}function SPe(t){let e=Yr(t,i=>!Bt(i,lp)),r=Je(e,i=>({message:"Token Type: ->"+i.name+"<- missing static 'PATTERN' property",type:Yn.MISSING_PATTERN,tokenTypes:[i]})),n=Zh(t,e);return{errors:r,valid:n}}function CPe(t){let e=Yr(t,i=>{let a=i[lp];return!zo(a)&&!Si(a)&&!Bt(a,"exec")&&!yi(a)}),r=Je(e,i=>({message:"Token Type: ->"+i.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:Yn.INVALID_PATTERN,tokenTypes:[i]})),n=Zh(t,e);return{errors:r,valid:n}}function _Pe(t){class e extends Mc{static{o(this,"EndAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitEndAnchor(a){this.found=!0}}let r=Yr(t,i=>{let a=i.PATTERN;try{let s=Bg(a),l=new e;return l.visit(s),l.found}catch{return APe.test(a.source)}});return Je(r,i=>({message:`Unexpected RegExp Anchor Error:
717 + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain end of input anchor '$'
718 + See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:Yn.EOI_ANCHOR_FOUND,tokenTypes:[i]}))}function DPe(t){let e=Yr(t,n=>n.PATTERN.test(""));return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' must not match an empty string",type:Yn.EMPTY_MATCH_PATTERN,tokenTypes:[n]}))}function RPe(t){class e extends Mc{static{o(this,"StartAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitStartAnchor(a){this.found=!0}}let r=Yr(t,i=>{let a=i.PATTERN;try{let s=Bg(a),l=new e;return l.visit(s),l.found}catch{return LPe.test(a.source)}});return Je(r,i=>({message:`Unexpected RegExp Anchor Error:
719 + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain start of input anchor '^'
720 + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:Yn.SOI_ANCHOR_FOUND,tokenTypes:[i]}))}function NPe(t){let e=Yr(t,n=>{let i=n[lp];return i instanceof RegExp&&(i.multiline||i.global)});return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:Yn.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[n]}))}function MPe(t){let e=[],r=Je(t,a=>Xr(t,(s,l)=>(a.PATTERN.source===l.PATTERN.source&&!qn(e,l)&&l.PATTERN!==Xn.NA&&(e.push(l),s.push(l)),s),[]));r=Tc(r);let n=Yr(r,a=>a.length>1);return Je(n,a=>{let s=Je(a,u=>u.name);return{message:`The same RegExp pattern ->${ia(a).PATTERN}<-has been used in all of the following Token Types: ${s.join(", ")} <-`,type:Yn.DUPLICATE_PATTERNS_FOUND,tokenTypes:a}})}function IPe(t){let e=Yr(t,n=>{if(!Bt(n,"GROUP"))return!1;let i=n.GROUP;return i!==Xn.SKIPPED&&i!==Xn.NA&&!yi(i)});return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:Yn.INVALID_GROUP_TYPE_FOUND,tokenTypes:[n]}))}function OPe(t,e){let r=Yr(t,i=>i.PUSH_MODE!==void 0&&!qn(e,i.PUSH_MODE));return Je(r,i=>({message:`Token Type: ->${i.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${i.PUSH_MODE}<-which does not exist`,type:Yn.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[i]}))}function PPe(t){let e=[],r=Xr(t,(n,i,a)=>{let s=i.PATTERN;return s===Xn.NA||(yi(s)?n.push({str:s,idx:a,tokenType:i}):zo(s)&&FPe(s)&&n.push({str:s.source,idx:a,tokenType:i})),n},[]);return Ae(t,(n,i)=>{Ae(r,({str:a,idx:s,tokenType:l})=>{if(i<s&&BPe(a,n.PATTERN)){let u=`Token: ->${l.name}<- can never be matched.
721 +Because it appears AFTER the Token Type ->${n.name}<-in the lexer's definition.
722 +See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:u,type:Yn.UNREACHABLE_PATTERN,tokenTypes:[n,l]})}})}),e}function BPe(t,e){if(zo(e)){let r=e.exec(t);return r!==null&&r.index===0}else{if(Si(e))return e(t,0,[],{});if(Bt(e,"exec"))return e.exec(t,0,[],{});if(typeof e=="string")return e===t;throw Error("non exhaustive match")}}function FPe(t){return ns([".","\\","[","]","|","^","$","(",")","?","*","+","{"],r=>t.source.indexOf(r)!==-1)===void 0}function Gae(t){let e=t.ignoreCase?"i":"";return new RegExp(`^(?:${t.source})`,e)}function Vae(t){let e=t.ignoreCase?"iy":"y";return new RegExp(`${t.source}`,e)}function Wae(t,e,r){let n=[];return Bt(t,$g)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+$g+`> property in its definition
723 +`,type:Yn.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),Bt(t,Mk)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+Mk+`> property in its definition
724 +`,type:Yn.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),Bt(t,Mk)&&Bt(t,$g)&&!Bt(t.modes,t.defaultMode)&&n.push({message:`A MultiMode Lexer cannot be initialized with a ${$g}: <${t.defaultMode}>which does not exist
725 +`,type:Yn.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),Bt(t,Mk)&&Ae(t.modes,(i,a)=>{Ae(i,(s,l)=>{if(pr(s))n.push({message:`A Lexer cannot be initialized using an undefined Token Type. Mode:<${a}> at index: <${l}>
726 +`,type:Yn.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED});else if(Bt(s,"LONGER_ALT")){let u=Pt(s.LONGER_ALT)?s.LONGER_ALT:[s.LONGER_ALT];Ae(u,h=>{!pr(h)&&!qn(i,h)&&n.push({message:`A MultiMode Lexer cannot be initialized with a longer_alt <${h.name}> on token <${s.name}> outside of mode <${a}>
727 +`,type:Yn.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE})})}})}),n}function qae(t,e,r){let n=[],i=!1,a=Tc(qr(br(t.modes))),s=Jh(a,u=>u[lp]===Xn.NA),l=Qae(r);return e&&Ae(s,u=>{let h=Kae(u,l);if(h!==!1){let d={message:zPe(u,h),type:h.issue,tokenType:u};n.push(d)}else Bt(u,"LINE_BREAKS")?u.LINE_BREAKS===!0&&(i=!0):Nk(l,u.PATTERN)&&(i=!0)}),e&&!i&&n.push({message:`Warning: No LINE_BREAKS Found.
728 + This Lexer has been defined to track line and column information,
729 + But none of the Token Types can be identified as matching a line terminator.
730 + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS
731 + for details.`,type:Yn.NO_LINE_BREAKS_FLAGS}),n}function Yae(t){let e={},r=zr(t);return Ae(r,n=>{let i=t[n];if(Pt(i))e[n]=[];else throw Error("non exhaustive match")}),e}function Xae(t){let e=t.PATTERN;if(zo(e))return!1;if(Si(e))return!0;if(Bt(e,"exec"))return!0;if(yi(e))return!1;throw Error("non exhaustive match")}function $Pe(t){return yi(t)&&t.length===1?t.charCodeAt(0):!1}function Kae(t,e){if(Bt(t,"LINE_BREAKS"))return!1;if(zo(t.PATTERN)){try{Nk(e,t.PATTERN)}catch(r){return{issue:Yn.IDENTIFY_TERMINATOR,errMsg:r.message}}return!1}else{if(yi(t.PATTERN))return!1;if(Xae(t))return{issue:Yn.CUSTOM_LINE_BREAK};throw Error("non exhaustive match")}}function zPe(t,e){if(e.issue===Yn.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern.
732 + The problem is in the <${t.name}> Token Type
733 + Root cause: ${e.errMsg}.
734 + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;if(e.issue===Yn.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the <line_breaks> option.
735 + The problem is in the <${t.name}> Token Type
736 + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;throw Error("non exhaustive match")}function Qae(t){return Je(t,r=>yi(r)?r.charCodeAt(0):r)}function CN(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}function Ic(t){return t<Fg?t:Ik[t]}function GPe(){if(ur(Ik)){Ik=new Array(65536);for(let t=0;t<65536;t++)Ik[t]=t>255?255+~~(t/255):t}}var lp,$g,Mk,AN,APe,LPe,jae,Fg,Ik,SN=N(()=>{"use strict";j2();ix();qt();Og();zae();Lk();lp="PATTERN",$g="defaultMode",Mk="modes",AN=typeof new RegExp("(?:)").sticky=="boolean";o(Uae,"analyzeTokenTypes");o(Hae,"validatePatterns");o(EPe,"validateRegExpPattern");o(SPe,"findMissingPatterns");o(CPe,"findInvalidPatterns");APe=/[^\\][$]/;o(_Pe,"findEndOfInputAnchor");o(DPe,"findEmptyMatchRegExps");LPe=/[^\\[][\^]|^\^/;o(RPe,"findStartOfInputAnchor");o(NPe,"findUnsupportedFlags");o(MPe,"findDuplicatePatterns");o(IPe,"findInvalidGroupType");o(OPe,"findModesThatDoNotExist");o(PPe,"findUnreachablePatterns");o(BPe,"testTokenType");o(FPe,"noMetaChar");o(Gae,"addStartOfInput");o(Vae,"addStickyFlag");o(Wae,"performRuntimeChecks");o(qae,"performWarningRuntimeChecks");o(Yae,"cloneEmptyGroups");o(Xae,"isCustomPattern");o($Pe,"isShortPattern");jae={test:o(function(t){let e=t.length;for(let r=this.lastIndex;r<e;r++){let n=t.charCodeAt(r);if(n===10)return this.lastIndex=r+1,!0;if(n===13)return t.charCodeAt(r+1)===10?this.lastIndex=r+2:this.lastIndex=r+1,!0}return!1},"test"),lastIndex:0};o(Kae,"checkLineBreaksIssues");o(zPe,"buildLineBreakIssueMessage");o(Qae,"getCharCodes");o(CN,"addToMapOfArrays");Fg=256,Ik=[];o(Ic,"charCodeToOptimizedIndex");o(GPe,"initCharCodeToOptimizedIndexMap")});function Pu(t,e){let r=t.tokenTypeIdx;return r===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[r]===!0}function zg(t,e){return t.tokenTypeIdx===e.tokenTypeIdx}function Bu(t){let e=VPe(t);UPe(e),WPe(e),HPe(e),Ae(e,r=>{r.isParent=r.categoryMatches.length>0})}function VPe(t){let e=an(t),r=t,n=!0;for(;n;){r=Tc(qr(Je(r,a=>a.CATEGORIES)));let i=Zh(r,e);e=e.concat(i),ur(i)?n=!1:r=i}return e}function UPe(t){Ae(t,e=>{_N(e)||(ese[Zae]=e,e.tokenTypeIdx=Zae++),Jae(e)&&!Pt(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Jae(e)||(e.CATEGORIES=[]),qPe(e)||(e.categoryMatches=[]),YPe(e)||(e.categoryMatchesMap={})})}function HPe(t){Ae(t,e=>{e.categoryMatches=[],Ae(e.categoryMatchesMap,(r,n)=>{e.categoryMatches.push(ese[n].tokenTypeIdx)})})}function WPe(t){Ae(t,e=>{tse([],e)})}function tse(t,e){Ae(t,r=>{e.categoryMatchesMap[r.tokenTypeIdx]=!0}),Ae(e.CATEGORIES,r=>{let n=t.concat(e);qn(n,r)||tse(n,r)})}function _N(t){return Bt(t,"tokenTypeIdx")}function Jae(t){return Bt(t,"CATEGORIES")}function qPe(t){return Bt(t,"categoryMatches")}function YPe(t){return Bt(t,"categoryMatchesMap")}function rse(t){return Bt(t,"tokenTypeIdx")}var Zae,ese,cp=N(()=>{"use strict";qt();o(Pu,"tokenStructuredMatcher");o(zg,"tokenStructuredMatcherNoCategories");Zae=1,ese={};o(Bu,"augmentTokenTypes");o(VPe,"expandCategories");o(UPe,"assignTokenDefaultProps");o(HPe,"assignCategoriesTokensProp");o(WPe,"assignCategoriesMapProp");o(tse,"singleAssignCategoriesToksMap");o(_N,"hasShortKeyProperty");o(Jae,"hasCategoriesProperty");o(qPe,"hasExtendingTokensTypesProperty");o(YPe,"hasExtendingTokensTypesMapProperty");o(rse,"isTokenType")});var Gg,DN=N(()=>{"use strict";Gg={buildUnableToPopLexerModeMessage(t){return`Unable to pop Lexer Mode after encountering Token ->${t.image}<- The Mode Stack is empty`},buildUnexpectedCharactersMessage(t,e,r,n,i){return`unexpected character: ->${t.charAt(e)}<- at offset: ${e}, skipped ${r} characters.`}}});var Yn,ax,Xn,ix=N(()=>{"use strict";SN();qt();Og();cp();DN();Lk();(function(t){t[t.MISSING_PATTERN=0]="MISSING_PATTERN",t[t.INVALID_PATTERN=1]="INVALID_PATTERN",t[t.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",t[t.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",t[t.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",t[t.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",t[t.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",t[t.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",t[t.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",t[t.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",t[t.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",t[t.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",t[t.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",t[t.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",t[t.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",t[t.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",t[t.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK",t[t.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE=17]="MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"})(Yn||(Yn={}));ax={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[`
737 +`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:Gg,traceInitPerf:!1,skipValidations:!1,recoveryEnabled:!0};Object.freeze(ax);Xn=class{static{o(this,"Lexer")}constructor(e,r=ax){if(this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},this.TRACE_INIT=(i,a)=>{if(this.traceInitPerf===!0){this.traceInitIndent++;let s=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent<this.traceInitMaxIdent&&console.log(`${s}--> <${i}>`);let{time:l,value:u}=tx(a),h=l>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&h(`${s}<-- <${i}> time: ${l}ms`),this.traceInitIndent--,u}else return a()},typeof r=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object.
738 +a boolean 2nd argument is no longer supported`);this.config=ma({},ax,r);let n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",()=>{let i,a=!0;this.TRACE_INIT("Lexer Config handling",()=>{if(this.config.lineTerminatorsPattern===ax.lineTerminatorsPattern)this.config.lineTerminatorsPattern=jae;else if(this.config.lineTerminatorCharacters===ax.lineTerminatorCharacters)throw Error(`Error: Missing <lineTerminatorCharacters> property on the Lexer config.
739 + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(r.safeMode&&r.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');this.trackStartLines=/full|onlyStart/i.test(this.config.positionTracking),this.trackEndLines=/full/i.test(this.config.positionTracking),Pt(e)?i={modes:{defaultMode:an(e)},defaultMode:$g}:(a=!1,i=an(e))}),this.config.skipValidations===!1&&(this.TRACE_INIT("performRuntimeChecks",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(Wae(i,this.trackStartLines,this.config.lineTerminatorCharacters))}),this.TRACE_INIT("performWarningRuntimeChecks",()=>{this.lexerDefinitionWarning=this.lexerDefinitionWarning.concat(qae(i,this.trackStartLines,this.config.lineTerminatorCharacters))})),i.modes=i.modes?i.modes:{},Ae(i.modes,(l,u)=>{i.modes[u]=Jh(l,h=>pr(h))});let s=zr(i.modes);if(Ae(i.modes,(l,u)=>{this.TRACE_INIT(`Mode: <${u}> processing`,()=>{if(this.modes.push(u),this.config.skipValidations===!1&&this.TRACE_INIT("validatePatterns",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(Hae(l,s))}),ur(this.lexerDefinitionErrors)){Bu(l);let h;this.TRACE_INIT("analyzeTokenTypes",()=>{h=Uae(l,{lineTerminatorCharacters:this.config.lineTerminatorCharacters,positionTracking:r.positionTracking,ensureOptimizations:r.ensureOptimizations,safeMode:r.safeMode,tracer:this.TRACE_INIT})}),this.patternIdxToConfig[u]=h.patternIdxToConfig,this.charCodeToPatternIdxToConfig[u]=h.charCodeToPatternIdxToConfig,this.emptyGroups=ma({},this.emptyGroups,h.emptyGroups),this.hasCustom=h.hasCustom||this.hasCustom,this.canModeBeOptimized[u]=h.canBeOptimized}})}),this.defaultMode=i.defaultMode,!ur(this.lexerDefinitionErrors)&&!this.config.deferDefinitionErrorsHandling){let u=Je(this.lexerDefinitionErrors,h=>h.message).join(`-----------------------
740 +`);throw new Error(`Errors detected in definition of Lexer:
741 +`+u)}Ae(this.lexerDefinitionWarning,l=>{ex(l.message)}),this.TRACE_INIT("Choosing sub-methods implementations",()=>{if(AN?(this.chopInput=ta,this.match=this.matchWithTest):(this.updateLastIndex=ni,this.match=this.matchWithExec),a&&(this.handleModes=ni),this.trackStartLines===!1&&(this.computeNewColumn=ta),this.trackEndLines===!1&&(this.updateTokenEndLineColumnLocation=ni),/full/i.test(this.config.positionTracking))this.createTokenInstance=this.createFullToken;else if(/onlyStart/i.test(this.config.positionTracking))this.createTokenInstance=this.createStartOnlyToken;else if(/onlyOffset/i.test(this.config.positionTracking))this.createTokenInstance=this.createOffsetOnlyToken;else throw Error(`Invalid <positionTracking> config option: "${this.config.positionTracking}"`);this.hasCustom?(this.addToken=this.addTokenUsingPush,this.handlePayload=this.handlePayloadWithCustom):(this.addToken=this.addTokenUsingMemberAccess,this.handlePayload=this.handlePayloadNoCustom)}),this.TRACE_INIT("Failed Optimization Warnings",()=>{let l=Xr(this.canModeBeOptimized,(u,h,f)=>(h===!1&&u.push(f),u),[]);if(r.ensureOptimizations&&!ur(l))throw Error(`Lexer Modes: < ${l.join(", ")} > cannot be optimized.
742 + Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.
743 + Or inspect the console log for details on how to resolve these issues.`)}),this.TRACE_INIT("clearRegExpParserCache",()=>{Pae()}),this.TRACE_INIT("toFastProperties",()=>{rx(this)})})}tokenize(e,r=this.defaultMode){if(!ur(this.lexerDefinitionErrors)){let i=Je(this.lexerDefinitionErrors,a=>a.message).join(`-----------------------
744 +`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer:
745 +`+i)}return this.tokenizeInternal(e,r)}tokenizeInternal(e,r){let n,i,a,s,l,u,h,f,d,p,m,g,y,v,x,b,w=e,C=w.length,T=0,E=0,A=this.hasCustom?0:Math.floor(e.length/10),S=new Array(A),_=[],I=this.trackStartLines?1:void 0,D=this.trackStartLines?1:void 0,k=Yae(this.emptyGroups),L=this.trackStartLines,R=this.config.lineTerminatorsPattern,O=0,M=[],B=[],F=[],P=[];Object.freeze(P);let z;function $(){return M}o($,"getPossiblePatternsSlow");function H(le){let he=Ic(le),K=B[he];return K===void 0?P:K}o(H,"getPossiblePatternsOptimized");let Q=o(le=>{if(F.length===1&&le.tokenType.PUSH_MODE===void 0){let he=this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(le);_.push({offset:le.startOffset,line:le.startLine,column:le.startColumn,length:le.image.length,message:he})}else{F.pop();let he=ga(F);M=this.patternIdxToConfig[he],B=this.charCodeToPatternIdxToConfig[he],O=M.length;let K=this.canModeBeOptimized[he]&&this.config.safeMode===!1;B&&K?z=H:z=$}},"pop_mode");function j(le){F.push(le),B=this.charCodeToPatternIdxToConfig[le],M=this.patternIdxToConfig[le],O=M.length,O=M.length;let he=this.canModeBeOptimized[le]&&this.config.safeMode===!1;B&&he?z=H:z=$}o(j,"push_mode"),j.call(this,r);let ie,ne=this.config.recoveryEnabled;for(;T<C;){u=null;let le=w.charCodeAt(T),he=z(le),K=he.length;for(n=0;n<K;n++){ie=he[n];let X=ie.pattern;h=null;let te=ie.short;if(te!==!1?le===te&&(u=X):ie.isCustom===!0?(b=X.exec(w,T,S,k),b!==null?(u=b[0],b.payload!==void 0&&(h=b.payload)):u=null):(this.updateLastIndex(X,T),u=this.match(X,e,T)),u!==null){if(l=ie.longerAlt,l!==void 0){let J=l.length;for(a=0;a<J;a++){let se=M[l[a]],ue=se.pattern;if(f=null,se.isCustom===!0?(b=ue.exec(w,T,S,k),b!==null?(s=b[0],b.payload!==void 0&&(f=b.payload)):s=null):(this.updateLastIndex(ue,T),s=this.match(ue,e,T)),s&&s.length>u.length){u=s,h=f,ie=se;break}}}break}}if(u!==null){if(d=u.length,p=ie.group,p!==void 0&&(m=ie.tokenTypeIdx,g=this.createTokenInstance(u,T,m,ie.tokenType,I,D,d),this.handlePayload(g,h),p===!1?E=this.addToken(S,E,g):k[p].push(g)),e=this.chopInput(e,d),T=T+d,D=this.computeNewColumn(D,d),L===!0&&ie.canLineTerminator===!0){let X=0,te,J;R.lastIndex=0;do te=R.test(u),te===!0&&(J=R.lastIndex-1,X++);while(te===!0);X!==0&&(I=I+X,D=d-J,this.updateTokenEndLineColumnLocation(g,p,J,X,I,D,d))}this.handleModes(ie,Q,j,g)}else{let X=T,te=I,J=D,se=ne===!1;for(;se===!1&&T<C;)for(e=this.chopInput(e,1),T++,i=0;i<O;i++){let ue=M[i],Z=ue.pattern,Se=ue.short;if(Se!==!1?w.charCodeAt(T)===Se&&(se=!0):ue.isCustom===!0?se=Z.exec(w,T,S,k)!==null:(this.updateLastIndex(Z,T),se=Z.exec(e)!==null),se===!0)break}if(y=T-X,D=this.computeNewColumn(D,y),x=this.config.errorMessageProvider.buildUnexpectedCharactersMessage(w,X,y,te,J),_.push({offset:X,line:te,column:J,length:y,message:x}),ne===!1)break}}return this.hasCustom||(S.length=E),{tokens:S,groups:k,errors:_}}handleModes(e,r,n,i){if(e.pop===!0){let a=e.push;r(i),a!==void 0&&n.call(this,a)}else e.push!==void 0&&n.call(this,e.push)}chopInput(e,r){return e.substring(r)}updateLastIndex(e,r){e.lastIndex=r}updateTokenEndLineColumnLocation(e,r,n,i,a,s,l){let u,h;r!==void 0&&(u=n===l-1,h=u?-1:0,i===1&&u===!0||(e.endLine=a+h,e.endColumn=s-1+-h))}computeNewColumn(e,r){return e+r}createOffsetOnlyToken(e,r,n,i){return{image:e,startOffset:r,tokenTypeIdx:n,tokenType:i}}createStartOnlyToken(e,r,n,i,a,s){return{image:e,startOffset:r,startLine:a,startColumn:s,tokenTypeIdx:n,tokenType:i}}createFullToken(e,r,n,i,a,s,l){return{image:e,startOffset:r,endOffset:r+l-1,startLine:a,endLine:a,startColumn:s,endColumn:s+l-1,tokenTypeIdx:n,tokenType:i}}addTokenUsingPush(e,r,n){return e.push(n),r}addTokenUsingMemberAccess(e,r,n){return e[r]=n,r++,r}handlePayloadNoCustom(e,r){}handlePayloadWithCustom(e,r){r!==null&&(e.payload=r)}matchWithTest(e,r,n){return e.test(r)===!0?r.substring(n,e.lastIndex):null}matchWithExec(e,r){let n=e.exec(r);return n!==null?n[0]:null}};Xn.SKIPPED="This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.";Xn.NA=/NOT_APPLICABLE/});function Fu(t){return LN(t)?t.LABEL:t.name}function LN(t){return yi(t.LABEL)&&t.LABEL!==""}function of(t){return jPe(t)}function jPe(t){let e=t.pattern,r={};if(r.name=t.name,pr(e)||(r.PATTERN=e),Bt(t,XPe))throw`The parent property is no longer supported.
746 +See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return Bt(t,nse)&&(r.CATEGORIES=t[nse]),Bu([r]),Bt(t,ise)&&(r.LABEL=t[ise]),Bt(t,ase)&&(r.GROUP=t[ase]),Bt(t,ose)&&(r.POP_MODE=t[ose]),Bt(t,sse)&&(r.PUSH_MODE=t[sse]),Bt(t,lse)&&(r.LONGER_ALT=t[lse]),Bt(t,cse)&&(r.LINE_BREAKS=t[cse]),Bt(t,use)&&(r.START_CHARS_HINT=t[use]),r}function $u(t,e,r,n,i,a,s,l){return{image:e,startOffset:r,endOffset:n,startLine:i,endLine:a,startColumn:s,endColumn:l,tokenTypeIdx:t.tokenTypeIdx,tokenType:t}}function sx(t,e){return Pu(t,e)}var XPe,nse,ise,ase,sse,ose,lse,cse,use,lo,up=N(()=>{"use strict";qt();ix();cp();o(Fu,"tokenLabel");o(LN,"hasTokenLabel");XPe="parent",nse="categories",ise="label",ase="group",sse="push_mode",ose="pop_mode",lse="longer_alt",cse="line_breaks",use="start_chars_hint";o(of,"createToken");o(jPe,"createTokenInternal");lo=of({name:"EOF",pattern:Xn.NA});Bu([lo]);o($u,"createTokenInstance");o(sx,"tokenMatcher")});var zu,hse,Pl,Vg=N(()=>{"use strict";up();qt();os();zu={buildMismatchTokenMessage({expected:t,actual:e,previous:r,ruleName:n}){return`Expecting ${LN(t)?`--> ${Fu(t)} <--`:`token of type --> ${t.name} <--`} but found --> '${e.image}' <--`},buildNotAllInputParsedMessage({firstRedundant:t,ruleName:e}){return"Redundant input, expecting EOF but found: "+t.image},buildNoViableAltMessage({expectedPathsPerAlt:t,actual:e,previous:r,customUserDescription:n,ruleName:i}){let a="Expecting: ",l=`
747 +but found: '`+ia(e).image+"'";if(n)return a+n+l;{let u=Xr(t,(p,m)=>p.concat(m),[]),h=Je(u,p=>`[${Je(p,m=>Fu(m)).join(", ")}]`),d=`one of these possible Token sequences:
748 +${Je(h,(p,m)=>` ${m+1}. ${p}`).join(`
749 +`)}`;return a+d+l}},buildEarlyExitMessage({expectedIterationPaths:t,actual:e,customUserDescription:r,ruleName:n}){let i="Expecting: ",s=`
750 +but found: '`+ia(e).image+"'";if(r)return i+r+s;{let u=`expecting at least one iteration which starts with one of these possible Token sequences::
751 + <${Je(t,h=>`[${Je(h,f=>Fu(f)).join(",")}]`).join(" ,")}>`;return i+u+s}}};Object.freeze(zu);hse={buildRuleNotFoundError(t,e){return"Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<-
752 +inside top level rule: ->`+t.name+"<-"}},Pl={buildDuplicateFoundError(t,e){function r(f){return f instanceof kr?f.terminalType.name:f instanceof on?f.nonTerminalName:""}o(r,"getExtraProductionArgument");let n=t.name,i=ia(e),a=i.idx,s=Bs(i),l=r(i),u=a>0,h=`->${s}${u?a:""}<- ${l?`with argument: ->${l}<-`:""}
753 + appears more than once (${e.length} times) in the top level rule: ->${n}<-.
754 + For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES
755 + `;return h=h.replace(/[ \t]+/g," "),h=h.replace(/\s\s+/g,`
756 +`),h},buildNamespaceConflictError(t){return`Namespace conflict found in grammar.
757 +The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${t.name}>.
758 +To resolve this make sure each Terminal and Non-Terminal names are unique
759 +This is easy to accomplish by using the convention that Terminal names start with an uppercase letter
760 +and Non-Terminal names start with a lower case letter.`},buildAlternationPrefixAmbiguityError(t){let e=Je(t.prefixPath,i=>Fu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx;return`Ambiguous alternatives: <${t.ambiguityIndices.join(" ,")}> due to common lookahead prefix
761 +in <OR${r}> inside <${t.topLevelRule.name}> Rule,
762 +<${e}> may appears as a prefix path in all these alternatives.
763 +See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX
764 +For Further details.`},buildAlternationAmbiguityError(t){let e=Je(t.prefixPath,i=>Fu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(" ,")}> in <OR${r}> inside <${t.topLevelRule.name}> Rule,
765 +<${e}> may appears as a prefix path in all these alternatives.
766 +`;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES
767 +For Further details.`,n},buildEmptyRepetitionError(t){let e=Bs(t.repetition);return t.repetition.idx!==0&&(e+=t.repetition.idx),`The repetition <${e}> within Rule <${t.topLevelRule.name}> can never consume any tokens.
768 +This could lead to an infinite loop.`},buildTokenNameError(t){return"deprecated"},buildEmptyAlternationError(t){return`Ambiguous empty alternative: <${t.emptyChoiceIdx+1}> in <OR${t.alternation.idx}> inside <${t.topLevelRule.name}> Rule.
769 +Only the last alternative may be an empty alternative.`},buildTooManyAlternativesError(t){return`An Alternation cannot have more than 256 alternatives:
770 +<OR${t.alternation.idx}> inside <${t.topLevelRule.name}> Rule.
771 + has ${t.alternation.definition.length+1} alternatives.`},buildLeftRecursionError(t){let e=t.topLevelRule.name,r=Je(t.leftRecursionPath,a=>a.name),n=`${e} --> ${r.concat([e]).join(" --> ")}`;return`Left Recursion found in grammar.
772 +rule: <${e}> can be invoked from itself (directly or indirectly)
773 +without consuming any Tokens. The grammar path that causes this is:
774 + ${n}
775 + To fix this refactor your grammar to remove the left recursion.
776 +see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`},buildInvalidRuleNameError(t){return"deprecated"},buildDuplicateRuleNameError(t){let e;return t.topLevelRule instanceof as?e=t.topLevelRule.name:e=t.topLevelRule,`Duplicate definition, rule: ->${e}<- is already defined in the grammar: ->${t.grammarName}<-`}}});function fse(t,e){let r=new RN(t,e);return r.resolveRefs(),r.errors}var RN,dse=N(()=>{"use strict";Fs();qt();os();o(fse,"resolveGrammar");RN=class extends ss{static{o(this,"GastRefResolverVisitor")}constructor(e,r){super(),this.nameToTopRule=e,this.errMsgProvider=r,this.errors=[]}resolveRefs(){Ae(br(this.nameToTopRule),e=>{this.currTopLevel=e,e.accept(this)})}visitNonTerminal(e){let r=this.nameToTopRule[e.nonTerminalName];if(r)e.referencedRule=r;else{let n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,e);this.errors.push({message:n,type:zi.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:e.nonTerminalName})}}}});function Fk(t,e,r=[]){r=an(r);let n=[],i=0;function a(l){return l.concat(gi(t,i+1))}o(a,"remainingPathWith");function s(l){let u=Fk(a(l),e,r);return n.concat(u)}for(o(s,"getAlternativesForProd");r.length<e&&i<t.length;){let l=t[i];if(l instanceof Dn)return s(l.definition);if(l instanceof on)return s(l.definition);if(l instanceof ln)n=s(l.definition);else if(l instanceof Ln){let u=l.definition.concat([new Or({definition:l.definition})]);return s(u)}else if(l instanceof Rn){let u=[new Dn({definition:l.definition}),new Or({definition:[new kr({terminalType:l.separator})].concat(l.definition)})];return s(u)}else if(l instanceof wn){let u=l.definition.concat([new Or({definition:[new kr({terminalType:l.separator})].concat(l.definition)})]);n=s(u)}else if(l instanceof Or){let u=l.definition.concat([new Or({definition:l.definition})]);n=s(u)}else{if(l instanceof Tn)return Ae(l.definition,u=>{ur(u.definition)===!1&&(n=s(u.definition))}),n;if(l instanceof kr)r.push(l.terminalType);else throw Error("non exhaustive match")}i++}return n.push({partialPath:r,suffixDef:gi(t,i)}),n}function $k(t,e,r,n){let i="EXIT_NONE_TERMINAL",a=[i],s="EXIT_ALTERNATIVE",l=!1,u=e.length,h=u-n-1,f=[],d=[];for(d.push({idx:-1,def:t,ruleStack:[],occurrenceStack:[]});!ur(d);){let p=d.pop();if(p===s){l&&ga(d).idx<=h&&d.pop();continue}let m=p.def,g=p.idx,y=p.ruleStack,v=p.occurrenceStack;if(ur(m))continue;let x=m[0];if(x===i){let b={idx:g,def:gi(m),ruleStack:Nu(y),occurrenceStack:Nu(v)};d.push(b)}else if(x instanceof kr)if(g<u-1){let b=g+1,w=e[b];if(r(w,x.terminalType)){let C={idx:b,def:gi(m),ruleStack:y,occurrenceStack:v};d.push(C)}}else if(g===u-1)f.push({nextTokenType:x.terminalType,nextTokenOccurrence:x.idx,ruleStack:y,occurrenceStack:v}),l=!0;else throw Error("non exhaustive match");else if(x instanceof on){let b=an(y);b.push(x.nonTerminalName);let w=an(v);w.push(x.idx);let C={idx:g,def:x.definition.concat(a,gi(m)),ruleStack:b,occurrenceStack:w};d.push(C)}else if(x instanceof ln){let b={idx:g,def:gi(m),ruleStack:y,occurrenceStack:v};d.push(b),d.push(s);let w={idx:g,def:x.definition.concat(gi(m)),ruleStack:y,occurrenceStack:v};d.push(w)}else if(x instanceof Ln){let b=new Or({definition:x.definition,idx:x.idx}),w=x.definition.concat([b],gi(m)),C={idx:g,def:w,ruleStack:y,occurrenceStack:v};d.push(C)}else if(x instanceof Rn){let b=new kr({terminalType:x.separator}),w=new Or({definition:[b].concat(x.definition),idx:x.idx}),C=x.definition.concat([w],gi(m)),T={idx:g,def:C,ruleStack:y,occurrenceStack:v};d.push(T)}else if(x instanceof wn){let b={idx:g,def:gi(m),ruleStack:y,occurrenceStack:v};d.push(b),d.push(s);let w=new kr({terminalType:x.separator}),C=new Or({definition:[w].concat(x.definition),idx:x.idx}),T=x.definition.concat([C],gi(m)),E={idx:g,def:T,ruleStack:y,occurrenceStack:v};d.push(E)}else if(x instanceof Or){let b={idx:g,def:gi(m),ruleStack:y,occurrenceStack:v};d.push(b),d.push(s);let w=new Or({definition:x.definition,idx:x.idx}),C=x.definition.concat([w],gi(m)),T={idx:g,def:C,ruleStack:y,occurrenceStack:v};d.push(T)}else if(x instanceof Tn)for(let b=x.definition.length-1;b>=0;b--){let w=x.definition[b],C={idx:g,def:w.definition.concat(gi(m)),ruleStack:y,occurrenceStack:v};d.push(C),d.push(s)}else if(x instanceof Dn)d.push({idx:g,def:x.definition.concat(gi(m)),ruleStack:y,occurrenceStack:v});else if(x instanceof as)d.push(KPe(x,g,y,v));else throw Error("non exhaustive match")}return f}function KPe(t,e,r,n){let i=an(r);i.push(t.name);let a=an(n);return a.push(1),{idx:e,def:t.definition,ruleStack:i,occurrenceStack:a}}var NN,Ok,Ug,Pk,ox,Bk,lx,cx=N(()=>{"use strict";qt();xN();Ak();os();NN=class extends Ou{static{o(this,"AbstractNextPossibleTokensWalker")}constructor(e,r){super(),this.topProd=e,this.path=r,this.possibleTokTypes=[],this.nextProductionName="",this.nextProductionOccurrence=0,this.found=!1,this.isAtEndOfPath=!1}startWalking(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=an(this.path.ruleStack).reverse(),this.occurrenceStack=an(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes}walk(e,r=[]){this.found||super.walk(e,r)}walkProdRef(e,r,n){if(e.referencedRule.name===this.nextProductionName&&e.idx===this.nextProductionOccurrence){let i=r.concat(n);this.updateExpectedNext(),this.walk(e.referencedRule,i)}}updateExpectedNext(){ur(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())}},Ok=class extends NN{static{o(this,"NextAfterTokenWalker")}constructor(e,r){super(e,r),this.path=r,this.nextTerminalName="",this.nextTerminalOccurrence=0,this.nextTerminalName=this.path.lastTok.name,this.nextTerminalOccurrence=this.path.lastTokOccurrence}walkTerminal(e,r,n){if(this.isAtEndOfPath&&e.terminalType.name===this.nextTerminalName&&e.idx===this.nextTerminalOccurrence&&!this.found){let i=r.concat(n),a=new Dn({definition:i});this.possibleTokTypes=op(a),this.found=!0}}},Ug=class extends Ou{static{o(this,"AbstractNextTerminalAfterProductionWalker")}constructor(e,r){super(),this.topRule=e,this.occurrence=r,this.result={token:void 0,occurrence:void 0,isEndOfRule:void 0}}startWalking(){return this.walk(this.topRule),this.result}},Pk=class extends Ug{static{o(this,"NextTerminalAfterManyWalker")}walkMany(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkMany(e,r,n)}},ox=class extends Ug{static{o(this,"NextTerminalAfterManySepWalker")}walkManySep(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkManySep(e,r,n)}},Bk=class extends Ug{static{o(this,"NextTerminalAfterAtLeastOneWalker")}walkAtLeastOne(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOne(e,r,n)}},lx=class extends Ug{static{o(this,"NextTerminalAfterAtLeastOneSepWalker")}walkAtLeastOneSep(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOneSep(e,r,n)}};o(Fk,"possiblePathsFrom");o($k,"nextPossibleTokensAfter");o(KPe,"expandTopLevelRule")});function ux(t){if(t instanceof ln||t==="Option")return jn.OPTION;if(t instanceof Or||t==="Repetition")return jn.REPETITION;if(t instanceof Ln||t==="RepetitionMandatory")return jn.REPETITION_MANDATORY;if(t instanceof Rn||t==="RepetitionMandatoryWithSeparator")return jn.REPETITION_MANDATORY_WITH_SEPARATOR;if(t instanceof wn||t==="RepetitionWithSeparator")return jn.REPETITION_WITH_SEPARATOR;if(t instanceof Tn||t==="Alternation")return jn.ALTERNATION;throw Error("non exhaustive match")}function Gk(t){let{occurrence:e,rule:r,prodType:n,maxLookahead:i}=t,a=ux(n);return a===jn.ALTERNATION?Hg(e,r,i):Wg(e,r,a,i)}function mse(t,e,r,n,i,a){let s=Hg(t,e,r),l=wse(s)?zg:Pu;return a(s,n,l,i)}function gse(t,e,r,n,i,a){let s=Wg(t,e,i,r),l=wse(s)?zg:Pu;return a(s[0],l,n)}function yse(t,e,r,n){let i=t.length,a=Ma(t,s=>Ma(s,l=>l.length===1));if(e)return function(s){let l=Je(s,u=>u.GATE);for(let u=0;u<i;u++){let h=t[u],f=h.length,d=l[u];if(!(d!==void 0&&d.call(this)===!1))e:for(let p=0;p<f;p++){let m=h[p],g=m.length;for(let y=0;y<g;y++){let v=this.LA(y+1);if(r(v,m[y])===!1)continue e}return u}}};if(a&&!n){let s=Je(t,u=>qr(u)),l=Xr(s,(u,h,f)=>(Ae(h,d=>{Bt(u,d.tokenTypeIdx)||(u[d.tokenTypeIdx]=f),Ae(d.categoryMatches,p=>{Bt(u,p)||(u[p]=f)})}),u),{});return function(){let u=this.LA(1);return l[u.tokenTypeIdx]}}else return function(){for(let s=0;s<i;s++){let l=t[s],u=l.length;e:for(let h=0;h<u;h++){let f=l[h],d=f.length;for(let p=0;p<d;p++){let m=this.LA(p+1);if(r(m,f[p])===!1)continue e}return s}}}}function vse(t,e,r){let n=Ma(t,a=>a.length===1),i=t.length;if(n&&!r){let a=qr(t);if(a.length===1&&ur(a[0].categoryMatches)){let l=a[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===l}}else{let s=Xr(a,(l,u,h)=>(l[u.tokenTypeIdx]=!0,Ae(u.categoryMatches,f=>{l[f]=!0}),l),[]);return function(){let l=this.LA(1);return s[l.tokenTypeIdx]===!0}}}else return function(){e:for(let a=0;a<i;a++){let s=t[a],l=s.length;for(let u=0;u<l;u++){let h=this.LA(u+1);if(e(h,s[u])===!1)continue e}return!0}return!1}}function pse(t){let e=new Array(t);for(let r=0;r<t;r++)e[r]=[];return e}function MN(t){let e=[""];for(let r=0;r<t.length;r++){let n=t[r],i=[];for(let a=0;a<e.length;a++){let s=e[a];i.push(s+"_"+n.tokenTypeIdx);for(let l=0;l<n.categoryMatches.length;l++){let u="_"+n.categoryMatches[l];i.push(s+u)}}e=i}return e}function QPe(t,e,r){for(let n=0;n<t.length;n++){if(n===r)continue;let i=t[n];for(let a=0;a<e.length;a++){let s=e[a];if(i[s]===!0)return!1}}return!0}function xse(t,e){let r=Je(t,s=>Fk([s],1)),n=pse(r.length),i=Je(r,s=>{let l={};return Ae(s,u=>{let h=MN(u.partialPath);Ae(h,f=>{l[f]=!0})}),l}),a=r;for(let s=1;s<=e;s++){let l=a;a=pse(l.length);for(let u=0;u<l.length;u++){let h=l[u];for(let f=0;f<h.length;f++){let d=h[f].partialPath,p=h[f].suffixDef,m=MN(d);if(QPe(i,m,u)||ur(p)||d.length===e){let y=n[u];if(Vk(y,d)===!1){y.push(d);for(let v=0;v<m.length;v++){let x=m[v];i[u][x]=!0}}}else{let y=Fk(p,s+1,d);a[u]=a[u].concat(y),Ae(y,v=>{let x=MN(v.partialPath);Ae(x,b=>{i[u][b]=!0})})}}}}return n}function Hg(t,e,r,n){let i=new zk(t,jn.ALTERNATION,n);return e.accept(i),xse(i.result,r)}function Wg(t,e,r,n){let i=new zk(t,r);e.accept(i);let a=i.result,l=new IN(e,t,r).startWalking(),u=new Dn({definition:a}),h=new Dn({definition:l});return xse([u,h],n)}function Vk(t,e){e:for(let r=0;r<t.length;r++){let n=t[r];if(n.length===e.length){for(let i=0;i<n.length;i++){let a=e[i],s=n[i];if((a===s||s.categoryMatchesMap[a.tokenTypeIdx]!==void 0)===!1)continue e}return!0}}return!1}function bse(t,e){return t.length<e.length&&Ma(t,(r,n)=>{let i=e[n];return r===i||i.categoryMatchesMap[r.tokenTypeIdx]})}function wse(t){return Ma(t,e=>Ma(e,r=>Ma(r,n=>ur(n.categoryMatches))))}var jn,IN,zk,qg=N(()=>{"use strict";qt();cx();Ak();cp();os();(function(t){t[t.OPTION=0]="OPTION",t[t.REPETITION=1]="REPETITION",t[t.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",t[t.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",t[t.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",t[t.ALTERNATION=5]="ALTERNATION"})(jn||(jn={}));o(ux,"getProdType");o(Gk,"getLookaheadPaths");o(mse,"buildLookaheadFuncForOr");o(gse,"buildLookaheadFuncForOptionalProd");o(yse,"buildAlternativesLookAheadFunc");o(vse,"buildSingleAlternativeLookaheadFunction");IN=class extends Ou{static{o(this,"RestDefinitionFinderWalker")}constructor(e,r,n){super(),this.topProd=e,this.targetOccurrence=r,this.targetProdType=n}startWalking(){return this.walk(this.topProd),this.restDef}checkIsTarget(e,r,n,i){return e.idx===this.targetOccurrence&&this.targetProdType===r?(this.restDef=n.concat(i),!0):!1}walkOption(e,r,n){this.checkIsTarget(e,jn.OPTION,r,n)||super.walkOption(e,r,n)}walkAtLeastOne(e,r,n){this.checkIsTarget(e,jn.REPETITION_MANDATORY,r,n)||super.walkOption(e,r,n)}walkAtLeastOneSep(e,r,n){this.checkIsTarget(e,jn.REPETITION_MANDATORY_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}walkMany(e,r,n){this.checkIsTarget(e,jn.REPETITION,r,n)||super.walkOption(e,r,n)}walkManySep(e,r,n){this.checkIsTarget(e,jn.REPETITION_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}},zk=class extends ss{static{o(this,"InsideDefinitionFinderVisitor")}constructor(e,r,n){super(),this.targetOccurrence=e,this.targetProdType=r,this.targetRef=n,this.result=[]}checkIsTarget(e,r){e.idx===this.targetOccurrence&&this.targetProdType===r&&(this.targetRef===void 0||e===this.targetRef)&&(this.result=e.definition)}visitOption(e){this.checkIsTarget(e,jn.OPTION)}visitRepetition(e){this.checkIsTarget(e,jn.REPETITION)}visitRepetitionMandatory(e){this.checkIsTarget(e,jn.REPETITION_MANDATORY)}visitRepetitionMandatoryWithSeparator(e){this.checkIsTarget(e,jn.REPETITION_MANDATORY_WITH_SEPARATOR)}visitRepetitionWithSeparator(e){this.checkIsTarget(e,jn.REPETITION_WITH_SEPARATOR)}visitAlternation(e){this.checkIsTarget(e,jn.ALTERNATION)}};o(pse,"initializeArrayOfArrays");o(MN,"pathToHashKeys");o(QPe,"isUniquePrefixHash");o(xse,"lookAheadSequenceFromAlternatives");o(Hg,"getLookaheadPathsForOr");o(Wg,"getLookaheadPathsForOptionalProd");o(Vk,"containsPath");o(bse,"isStrictPrefixOfPath");o(wse,"areTokenCategoriesNotUsed")});function Tse(t){let e=t.lookaheadStrategy.validate({rules:t.rules,tokenTypes:t.tokenTypes,grammarName:t.grammarName});return Je(e,r=>Object.assign({type:zi.CUSTOM_LOOKAHEAD_VALIDATION},r))}function kse(t,e,r,n){let i=ya(t,u=>ZPe(u,r)),a=iBe(t,e,r),s=ya(t,u=>tBe(u,r)),l=ya(t,u=>eBe(u,t,n,r));return i.concat(a,s,l)}function ZPe(t,e){let r=new ON;t.accept(r);let n=r.allProductions,i=IL(n,JPe),a=Os(i,l=>l.length>1);return Je(br(a),l=>{let u=ia(l),h=e.buildDuplicateFoundError(t,l),f=Bs(u),d={message:h,type:zi.DUPLICATE_PRODUCTIONS,ruleName:t.name,dslName:f,occurrence:u.idx},p=Ese(u);return p&&(d.parameter=p),d})}function JPe(t){return`${Bs(t)}_#_${t.idx}_#_${Ese(t)}`}function Ese(t){return t instanceof kr?t.terminalType.name:t instanceof on?t.nonTerminalName:""}function eBe(t,e,r,n){let i=[];if(Xr(e,(s,l)=>l.name===t.name?s+1:s,0)>1){let s=n.buildDuplicateRuleNameError({topLevelRule:t,grammarName:r});i.push({message:s,type:zi.DUPLICATE_RULE_NAME,ruleName:t.name})}return i}function Sse(t,e,r){let n=[],i;return qn(e,t)||(i=`Invalid rule override, rule: ->${t}<- cannot be overridden in the grammar: ->${r}<-as it is not defined in any of the super grammars `,n.push({message:i,type:zi.INVALID_RULE_OVERRIDE,ruleName:t})),n}function BN(t,e,r,n=[]){let i=[],a=Uk(e.definition);if(ur(a))return[];{let s=t.name;qn(a,t)&&i.push({message:r.buildLeftRecursionError({topLevelRule:t,leftRecursionPath:n}),type:zi.LEFT_RECURSION,ruleName:s});let u=Zh(a,n.concat([t])),h=ya(u,f=>{let d=an(n);return d.push(f),BN(t,f,r,d)});return i.concat(h)}}function Uk(t){let e=[];if(ur(t))return e;let r=ia(t);if(r instanceof on)e.push(r.referencedRule);else if(r instanceof Dn||r instanceof ln||r instanceof Ln||r instanceof Rn||r instanceof wn||r instanceof Or)e=e.concat(Uk(r.definition));else if(r instanceof Tn)e=qr(Je(r.definition,a=>Uk(a.definition)));else if(!(r instanceof kr))throw Error("non exhaustive match");let n=sp(r),i=t.length>1;if(n&&i){let a=gi(t);return e.concat(Uk(a))}else return e}function Cse(t,e){let r=new hx;t.accept(r);let n=r.alternations;return ya(n,a=>{let s=Nu(a.definition);return ya(s,(l,u)=>{let h=$k([l],[],Pu,1);return ur(h)?[{message:e.buildEmptyAlternationError({topLevelRule:t,alternation:a,emptyChoiceIdx:u}),type:zi.NONE_LAST_EMPTY_ALT,ruleName:t.name,occurrence:a.idx,alternative:u+1}]:[]})})}function Ase(t,e,r){let n=new hx;t.accept(n);let i=n.alternations;return i=Jh(i,s=>s.ignoreAmbiguities===!0),ya(i,s=>{let l=s.idx,u=s.maxLookahead||e,h=Hg(l,t,u,s),f=rBe(h,s,t,r),d=nBe(h,s,t,r);return f.concat(d)})}function tBe(t,e){let r=new hx;t.accept(r);let n=r.alternations;return ya(n,a=>a.definition.length>255?[{message:e.buildTooManyAlternativesError({topLevelRule:t,alternation:a}),type:zi.TOO_MANY_ALTS,ruleName:t.name,occurrence:a.idx}]:[])}function _se(t,e,r){let n=[];return Ae(t,i=>{let a=new PN;i.accept(a);let s=a.allProductions;Ae(s,l=>{let u=ux(l),h=l.maxLookahead||e,f=l.idx,p=Wg(f,i,u,h)[0];if(ur(qr(p))){let m=r.buildEmptyRepetitionError({topLevelRule:i,repetition:l});n.push({message:m,type:zi.NO_NON_EMPTY_LOOKAHEAD,ruleName:i.name})}})}),n}function rBe(t,e,r,n){let i=[],a=Xr(t,(l,u,h)=>(e.definition[h].ignoreAmbiguities===!0||Ae(u,f=>{let d=[h];Ae(t,(p,m)=>{h!==m&&Vk(p,f)&&e.definition[m].ignoreAmbiguities!==!0&&d.push(m)}),d.length>1&&!Vk(i,f)&&(i.push(f),l.push({alts:d,path:f}))}),l),[]);return Je(a,l=>{let u=Je(l.alts,f=>f+1);return{message:n.buildAlternationAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:u,prefixPath:l.path}),type:zi.AMBIGUOUS_ALTS,ruleName:r.name,occurrence:e.idx,alternatives:l.alts}})}function nBe(t,e,r,n){let i=Xr(t,(s,l,u)=>{let h=Je(l,f=>({idx:u,path:f}));return s.concat(h)},[]);return Tc(ya(i,s=>{if(e.definition[s.idx].ignoreAmbiguities===!0)return[];let u=s.idx,h=s.path,f=Yr(i,p=>e.definition[p.idx].ignoreAmbiguities!==!0&&p.idx<u&&bse(p.path,h));return Je(f,p=>{let m=[p.idx+1,u+1],g=e.idx===0?"":e.idx;return{message:n.buildAlternationPrefixAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:m,prefixPath:p.path}),type:zi.AMBIGUOUS_PREFIX_ALTS,ruleName:r.name,occurrence:g,alternatives:m}})}))}function iBe(t,e,r){let n=[],i=Je(e,a=>a.name);return Ae(t,a=>{let s=a.name;if(qn(i,s)){let l=r.buildNamespaceConflictError(a);n.push({message:l,type:zi.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:s})}}),n}var ON,hx,PN,fx=N(()=>{"use strict";qt();Fs();os();qg();cx();cp();o(Tse,"validateLookahead");o(kse,"validateGrammar");o(ZPe,"validateDuplicateProductions");o(JPe,"identifyProductionForDuplicates");o(Ese,"getExtraProductionArgument");ON=class extends ss{static{o(this,"OccurrenceValidationCollector")}constructor(){super(...arguments),this.allProductions=[]}visitNonTerminal(e){this.allProductions.push(e)}visitOption(e){this.allProductions.push(e)}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}visitAlternation(e){this.allProductions.push(e)}visitTerminal(e){this.allProductions.push(e)}};o(eBe,"validateRuleDoesNotAlreadyExist");o(Sse,"validateRuleIsOverridden");o(BN,"validateNoLeftRecursion");o(Uk,"getFirstNoneTerminal");hx=class extends ss{static{o(this,"OrCollector")}constructor(){super(...arguments),this.alternations=[]}visitAlternation(e){this.alternations.push(e)}};o(Cse,"validateEmptyOrAlternative");o(Ase,"validateAmbiguousAlternationAlternatives");PN=class extends ss{static{o(this,"RepetitionCollector")}constructor(){super(...arguments),this.allProductions=[]}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}};o(tBe,"validateTooManyAlts");o(_se,"validateSomeNonEmptyLookaheadPath");o(rBe,"checkAlternativesAmbiguities");o(nBe,"checkPrefixAlternativesAmbiguities");o(iBe,"checkTerminalAndNoneTerminalsNameSpace")});function Dse(t){let e=Qh(t,{errMsgProvider:hse}),r={};return Ae(t.rules,n=>{r[n.name]=n}),fse(r,e.errMsgProvider)}function Lse(t){return t=Qh(t,{errMsgProvider:Pl}),kse(t.rules,t.tokenTypes,t.errMsgProvider,t.grammarName)}var Rse=N(()=>{"use strict";qt();dse();fx();Vg();o(Dse,"resolveGrammar");o(Lse,"validateGrammar")});function lf(t){return qn(Pse,t.name)}var Nse,Mse,Ise,Ose,Pse,Yg,hp,dx,px,mx,Xg=N(()=>{"use strict";qt();Nse="MismatchedTokenException",Mse="NoViableAltException",Ise="EarlyExitException",Ose="NotAllInputParsedException",Pse=[Nse,Mse,Ise,Ose];Object.freeze(Pse);o(lf,"isRecognitionException");Yg=class extends Error{static{o(this,"RecognitionException")}constructor(e,r){super(e),this.token=r,this.resyncedTokens=[],Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}},hp=class extends Yg{static{o(this,"MismatchedTokenException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=Nse}},dx=class extends Yg{static{o(this,"NoViableAltException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=Mse}},px=class extends Yg{static{o(this,"NotAllInputParsedException")}constructor(e,r){super(e,r),this.name=Ose}},mx=class extends Yg{static{o(this,"EarlyExitException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=Ise}}});function aBe(t,e,r,n,i,a,s){let l=this.getKeyForAutomaticLookahead(n,i),u=this.firstAfterRepMap[l];if(u===void 0){let p=this.getCurrRuleFullName(),m=this.getGAstProductions()[p];u=new a(m,i).startWalking(),this.firstAfterRepMap[l]=u}let h=u.token,f=u.occurrence,d=u.isEndOfRule;this.RULE_STACK.length===1&&d&&h===void 0&&(h=lo,f=1),!(h===void 0||f===void 0)&&this.shouldInRepetitionRecoveryBeTried(h,f,s)&&this.tryInRepetitionRecovery(t,e,r,h)}var FN,zN,$N,Hk,GN=N(()=>{"use strict";up();qt();Xg();bN();Fs();FN={},zN="InRuleRecoveryException",$N=class extends Error{static{o(this,"InRuleRecoveryException")}constructor(e){super(e),this.name=zN}},Hk=class{static{o(this,"Recoverable")}initRecoverable(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=Bt(e,"recoveryEnabled")?e.recoveryEnabled:ls.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=aBe)}getTokenToInsert(e){let r=$u(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return r.isInsertedInRecovery=!0,r}canTokenTypeBeInsertedInRecovery(e){return!0}canTokenTypeBeDeletedInRecovery(e){return!0}tryInRepetitionRecovery(e,r,n,i){let a=this.findReSyncTokenType(),s=this.exportLexerState(),l=[],u=!1,h=this.LA(1),f=this.LA(1),d=o(()=>{let p=this.LA(0),m=this.errorMessageProvider.buildMismatchTokenMessage({expected:i,actual:h,previous:p,ruleName:this.getCurrRuleFullName()}),g=new hp(m,h,this.LA(0));g.resyncedTokens=Nu(l),this.SAVE_ERROR(g)},"generateErrorMessage");for(;!u;)if(this.tokenMatcher(f,i)){d();return}else if(n.call(this)){d(),e.apply(this,r);return}else this.tokenMatcher(f,a)?u=!0:(f=this.SKIP_TOKEN(),this.addToResyncTokens(f,l));this.importLexerState(s)}shouldInRepetitionRecoveryBeTried(e,r,n){return!(n===!1||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,r)))}getFollowsForInRuleRecovery(e,r){let n=this.getCurrentGrammarPath(e,r);return this.getNextPossibleTokenTypes(n)}tryInRuleRecovery(e,r){if(this.canRecoverWithSingleTokenInsertion(e,r))return this.getTokenToInsert(e);if(this.canRecoverWithSingleTokenDeletion(e)){let n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new $N("sad sad panda")}canPerformInRuleRecovery(e,r){return this.canRecoverWithSingleTokenInsertion(e,r)||this.canRecoverWithSingleTokenDeletion(e)}canRecoverWithSingleTokenInsertion(e,r){if(!this.canTokenTypeBeInsertedInRecovery(e)||ur(r))return!1;let n=this.LA(1);return ns(r,a=>this.tokenMatcher(n,a))!==void 0}canRecoverWithSingleTokenDeletion(e){return this.canTokenTypeBeDeletedInRecovery(e)?this.tokenMatcher(this.LA(2),e):!1}isInCurrentRuleReSyncSet(e){let r=this.getCurrFollowKey(),n=this.getFollowSetFromFollowKey(r);return qn(n,e)}findReSyncTokenType(){let e=this.flattenFollowSet(),r=this.LA(1),n=2;for(;;){let i=ns(e,a=>sx(r,a));if(i!==void 0)return i;r=this.LA(n),n++}}getCurrFollowKey(){if(this.RULE_STACK.length===1)return FN;let e=this.getLastExplicitRuleShortName(),r=this.getLastExplicitRuleOccurrenceIndex(),n=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:r,inRule:this.shortRuleNameToFullName(n)}}buildFullFollowKeyStack(){let e=this.RULE_STACK,r=this.RULE_OCCURRENCE_STACK;return Je(e,(n,i)=>i===0?FN:{ruleName:this.shortRuleNameToFullName(n),idxInCallingRule:r[i],inRule:this.shortRuleNameToFullName(e[i-1])})}flattenFollowSet(){let e=Je(this.buildFullFollowKeyStack(),r=>this.getFollowSetFromFollowKey(r));return qr(e)}getFollowSetFromFollowKey(e){if(e===FN)return[lo];let r=e.ruleName+e.idxInCallingRule+_k+e.inRule;return this.resyncFollows[r]}addToResyncTokens(e,r){return this.tokenMatcher(e,lo)||r.push(e),r}reSyncTo(e){let r=[],n=this.LA(1);for(;this.tokenMatcher(n,e)===!1;)n=this.SKIP_TOKEN(),this.addToResyncTokens(n,r);return Nu(r)}attemptInRepetitionRecovery(e,r,n,i,a,s,l){}getCurrentGrammarPath(e,r){let n=this.getHumanReadableRuleStack(),i=an(this.RULE_OCCURRENCE_STACK);return{ruleStack:n,occurrenceStack:i,lastTok:e,lastTokOccurrence:r}}getHumanReadableRuleStack(){return Je(this.RULE_STACK,e=>this.shortRuleNameToFullName(e))}};o(aBe,"attemptInRepetitionRecovery")});function Wk(t,e,r){return r|e|t}var qk=N(()=>{"use strict";o(Wk,"getKeyForAutomaticLookahead")});var Gu,VN=N(()=>{"use strict";qt();Vg();Fs();fx();qg();Gu=class{static{o(this,"LLkLookaheadStrategy")}constructor(e){var r;this.maxLookahead=(r=e?.maxLookahead)!==null&&r!==void 0?r:ls.maxLookahead}validate(e){let r=this.validateNoLeftRecursion(e.rules);if(ur(r)){let n=this.validateEmptyOrAlternatives(e.rules),i=this.validateAmbiguousAlternationAlternatives(e.rules,this.maxLookahead),a=this.validateSomeNonEmptyLookaheadPath(e.rules,this.maxLookahead);return[...r,...n,...i,...a]}return r}validateNoLeftRecursion(e){return ya(e,r=>BN(r,r,Pl))}validateEmptyOrAlternatives(e){return ya(e,r=>Cse(r,Pl))}validateAmbiguousAlternationAlternatives(e,r){return ya(e,n=>Ase(n,r,Pl))}validateSomeNonEmptyLookaheadPath(e,r){return _se(e,r,Pl)}buildLookaheadForAlternation(e){return mse(e.prodOccurrence,e.rule,e.maxLookahead,e.hasPredicates,e.dynamicTokensEnabled,yse)}buildLookaheadForOptional(e){return gse(e.prodOccurrence,e.rule,e.maxLookahead,e.dynamicTokensEnabled,ux(e.prodType),vse)}}});function sBe(t){Yk.reset(),t.accept(Yk);let e=Yk.dslMethods;return Yk.reset(),e}var Xk,UN,Yk,Bse=N(()=>{"use strict";qt();Fs();qk();os();VN();Xk=class{static{o(this,"LooksAhead")}initLooksAhead(e){this.dynamicTokensEnabled=Bt(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:ls.dynamicTokensEnabled,this.maxLookahead=Bt(e,"maxLookahead")?e.maxLookahead:ls.maxLookahead,this.lookaheadStrategy=Bt(e,"lookaheadStrategy")?e.lookaheadStrategy:new Gu({maxLookahead:this.maxLookahead}),this.lookAheadFuncsCache=new Map}preComputeLookaheadFunctions(e){Ae(e,r=>{this.TRACE_INIT(`${r.name} Rule Lookahead`,()=>{let{alternation:n,repetition:i,option:a,repetitionMandatory:s,repetitionMandatoryWithSeparator:l,repetitionWithSeparator:u}=sBe(r);Ae(n,h=>{let f=h.idx===0?"":h.idx;this.TRACE_INIT(`${Bs(h)}${f}`,()=>{let d=this.lookaheadStrategy.buildLookaheadForAlternation({prodOccurrence:h.idx,rule:r,maxLookahead:h.maxLookahead||this.maxLookahead,hasPredicates:h.hasPredicates,dynamicTokensEnabled:this.dynamicTokensEnabled}),p=Wk(this.fullRuleNameToShort[r.name],256,h.idx);this.setLaFuncCache(p,d)})}),Ae(i,h=>{this.computeLookaheadFunc(r,h.idx,768,"Repetition",h.maxLookahead,Bs(h))}),Ae(a,h=>{this.computeLookaheadFunc(r,h.idx,512,"Option",h.maxLookahead,Bs(h))}),Ae(s,h=>{this.computeLookaheadFunc(r,h.idx,1024,"RepetitionMandatory",h.maxLookahead,Bs(h))}),Ae(l,h=>{this.computeLookaheadFunc(r,h.idx,1536,"RepetitionMandatoryWithSeparator",h.maxLookahead,Bs(h))}),Ae(u,h=>{this.computeLookaheadFunc(r,h.idx,1280,"RepetitionWithSeparator",h.maxLookahead,Bs(h))})})})}computeLookaheadFunc(e,r,n,i,a,s){this.TRACE_INIT(`${s}${r===0?"":r}`,()=>{let l=this.lookaheadStrategy.buildLookaheadForOptional({prodOccurrence:r,rule:e,maxLookahead:a||this.maxLookahead,dynamicTokensEnabled:this.dynamicTokensEnabled,prodType:i}),u=Wk(this.fullRuleNameToShort[e.name],n,r);this.setLaFuncCache(u,l)})}getKeyForAutomaticLookahead(e,r){let n=this.getLastExplicitRuleShortName();return Wk(n,e,r)}getLaFuncFromCache(e){return this.lookAheadFuncsCache.get(e)}setLaFuncCache(e,r){this.lookAheadFuncsCache.set(e,r)}},UN=class extends ss{static{o(this,"DslMethodsCollectorVisitor")}constructor(){super(...arguments),this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}reset(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}visitOption(e){this.dslMethods.option.push(e)}visitRepetitionWithSeparator(e){this.dslMethods.repetitionWithSeparator.push(e)}visitRepetitionMandatory(e){this.dslMethods.repetitionMandatory.push(e)}visitRepetitionMandatoryWithSeparator(e){this.dslMethods.repetitionMandatoryWithSeparator.push(e)}visitRepetition(e){this.dslMethods.repetition.push(e)}visitAlternation(e){this.dslMethods.alternation.push(e)}},Yk=new UN;o(sBe,"collectMethods")});function qN(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.endOffset=e.endOffset):t.endOffset<e.endOffset&&(t.endOffset=e.endOffset)}function YN(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.startColumn=e.startColumn,t.startLine=e.startLine,t.endOffset=e.endOffset,t.endColumn=e.endColumn,t.endLine=e.endLine):t.endOffset<e.endOffset&&(t.endOffset=e.endOffset,t.endColumn=e.endColumn,t.endLine=e.endLine)}function Fse(t,e,r){t.children[r]===void 0?t.children[r]=[e]:t.children[r].push(e)}function $se(t,e,r){t.children[e]===void 0?t.children[e]=[r]:t.children[e].push(r)}var zse=N(()=>{"use strict";o(qN,"setNodeLocationOnlyOffset");o(YN,"setNodeLocationFull");o(Fse,"addTerminalToCst");o($se,"addNoneTerminalToCst")});function XN(t,e){Object.defineProperty(t,oBe,{enumerable:!1,configurable:!0,writable:!1,value:e})}var oBe,Gse=N(()=>{"use strict";oBe="name";o(XN,"defineNameProp")});function lBe(t,e){let r=zr(t),n=r.length;for(let i=0;i<n;i++){let a=r[i],s=t[a],l=s.length;for(let u=0;u<l;u++){let h=s[u];h.tokenTypeIdx===void 0&&this[h.name](h.children,e)}}}function Vse(t,e){let r=o(function(){},"derivedConstructor");XN(r,t+"BaseSemantics");let n={visit:o(function(i,a){if(Pt(i)&&(i=i[0]),!pr(i))return this[i.name](i.children,a)},"visit"),validateVisitor:o(function(){let i=cBe(this,e);if(!ur(i)){let a=Je(i,s=>s.msg);throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>:
777 + ${a.join(`
778 +
779 +`).replace(/\n/g,`
780 + `)}`)}},"validateVisitor")};return r.prototype=n,r.prototype.constructor=r,r._RULE_NAMES=e,r}function Use(t,e,r){let n=o(function(){},"derivedConstructor");XN(n,t+"BaseSemanticsWithDefaults");let i=Object.create(r.prototype);return Ae(e,a=>{i[a]=lBe}),n.prototype=i,n.prototype.constructor=n,n}function cBe(t,e){return uBe(t,e)}function uBe(t,e){let r=Yr(e,i=>Si(t[i])===!1),n=Je(r,i=>({msg:`Missing visitor method: <${i}> on ${t.constructor.name} CST Visitor.`,type:jN.MISSING_METHOD,methodName:i}));return Tc(n)}var jN,Hse=N(()=>{"use strict";qt();Gse();o(lBe,"defaultVisit");o(Vse,"createBaseSemanticVisitorConstructor");o(Use,"createBaseVisitorConstructorWithDefaults");(function(t){t[t.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",t[t.MISSING_METHOD=1]="MISSING_METHOD"})(jN||(jN={}));o(cBe,"validateVisitor");o(uBe,"validateMissingCstMethods")});var Zk,Wse=N(()=>{"use strict";zse();qt();Hse();Fs();Zk=class{static{o(this,"TreeBuilder")}initTreeBuilder(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=Bt(e,"nodeLocationTracking")?e.nodeLocationTracking:ls.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=ni,this.cstFinallyStateUpdate=ni,this.cstPostTerminal=ni,this.cstPostNonTerminal=ni,this.cstPostRule=ni;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=YN,this.setNodeLocationFromNode=YN,this.cstPostRule=ni,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=ni,this.setNodeLocationFromNode=ni,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=qN,this.setNodeLocationFromNode=qN,this.cstPostRule=ni,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=ni,this.setNodeLocationFromNode=ni,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=ni,this.setNodeLocationFromNode=ni,this.cstPostRule=ni,this.setInitialNodeLocation=ni;else throw Error(`Invalid <nodeLocationTracking> config option: "${e.nodeLocationTracking}"`)}setInitialNodeLocationOnlyOffsetRecovery(e){e.location={startOffset:NaN,endOffset:NaN}}setInitialNodeLocationOnlyOffsetRegular(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}}setInitialNodeLocationFullRecovery(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}}setInitialNodeLocationFullRegular(e){let r=this.LA(1);e.location={startOffset:r.startOffset,startLine:r.startLine,startColumn:r.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}}cstInvocationStateUpdate(e){let r={name:e,children:Object.create(null)};this.setInitialNodeLocation(r),this.CST_STACK.push(r)}cstFinallyStateUpdate(){this.CST_STACK.pop()}cstPostRuleFull(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?(n.endOffset=r.endOffset,n.endLine=r.endLine,n.endColumn=r.endColumn):(n.startOffset=NaN,n.startLine=NaN,n.startColumn=NaN)}cstPostRuleOnlyOffset(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?n.endOffset=r.endOffset:n.startOffset=NaN}cstPostTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];Fse(n,r,e),this.setNodeLocationFromToken(n.location,r)}cstPostNonTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];$se(n,r,e),this.setNodeLocationFromNode(n.location,e.location)}getBaseCstVisitorConstructor(){if(pr(this.baseCstVisitorConstructor)){let e=Vse(this.className,zr(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor}getBaseCstVisitorConstructorWithDefaults(){if(pr(this.baseCstVisitorWithDefaultsConstructor)){let e=Use(this.className,zr(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor}getLastExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-1]}getPreviousExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-2]}getLastExplicitRuleOccurrenceIndex(){let e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]}}});var Jk,qse=N(()=>{"use strict";Fs();Jk=class{static{o(this,"LexerAdapter")}initLexerAdapter(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1}set input(e){if(this.selfAnalysisDone!==!0)throw Error("Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length}get input(){return this.tokVector}SKIP_TOKEN(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):jg}LA(e){let r=this.currIdx+e;return r<0||this.tokVectorLength<=r?jg:this.tokVector[r]}consumeToken(){this.currIdx++}exportLexerState(){return this.currIdx}importLexerState(e){this.currIdx=e}resetLexerState(){this.currIdx=-1}moveToTerminatedState(){this.currIdx=this.tokVector.length-1}getLexerPosition(){return this.exportLexerState()}}});var eE,Yse=N(()=>{"use strict";qt();Xg();Fs();Vg();fx();os();eE=class{static{o(this,"RecognizerApi")}ACTION(e){return e.call(this)}consume(e,r,n){return this.consumeInternal(r,e,n)}subrule(e,r,n){return this.subruleInternal(r,e,n)}option(e,r){return this.optionInternal(r,e)}or(e,r){return this.orInternal(r,e)}many(e,r){return this.manyInternal(e,r)}atLeastOne(e,r){return this.atLeastOneInternal(e,r)}CONSUME(e,r){return this.consumeInternal(e,0,r)}CONSUME1(e,r){return this.consumeInternal(e,1,r)}CONSUME2(e,r){return this.consumeInternal(e,2,r)}CONSUME3(e,r){return this.consumeInternal(e,3,r)}CONSUME4(e,r){return this.consumeInternal(e,4,r)}CONSUME5(e,r){return this.consumeInternal(e,5,r)}CONSUME6(e,r){return this.consumeInternal(e,6,r)}CONSUME7(e,r){return this.consumeInternal(e,7,r)}CONSUME8(e,r){return this.consumeInternal(e,8,r)}CONSUME9(e,r){return this.consumeInternal(e,9,r)}SUBRULE(e,r){return this.subruleInternal(e,0,r)}SUBRULE1(e,r){return this.subruleInternal(e,1,r)}SUBRULE2(e,r){return this.subruleInternal(e,2,r)}SUBRULE3(e,r){return this.subruleInternal(e,3,r)}SUBRULE4(e,r){return this.subruleInternal(e,4,r)}SUBRULE5(e,r){return this.subruleInternal(e,5,r)}SUBRULE6(e,r){return this.subruleInternal(e,6,r)}SUBRULE7(e,r){return this.subruleInternal(e,7,r)}SUBRULE8(e,r){return this.subruleInternal(e,8,r)}SUBRULE9(e,r){return this.subruleInternal(e,9,r)}OPTION(e){return this.optionInternal(e,0)}OPTION1(e){return this.optionInternal(e,1)}OPTION2(e){return this.optionInternal(e,2)}OPTION3(e){return this.optionInternal(e,3)}OPTION4(e){return this.optionInternal(e,4)}OPTION5(e){return this.optionInternal(e,5)}OPTION6(e){return this.optionInternal(e,6)}OPTION7(e){return this.optionInternal(e,7)}OPTION8(e){return this.optionInternal(e,8)}OPTION9(e){return this.optionInternal(e,9)}OR(e){return this.orInternal(e,0)}OR1(e){return this.orInternal(e,1)}OR2(e){return this.orInternal(e,2)}OR3(e){return this.orInternal(e,3)}OR4(e){return this.orInternal(e,4)}OR5(e){return this.orInternal(e,5)}OR6(e){return this.orInternal(e,6)}OR7(e){return this.orInternal(e,7)}OR8(e){return this.orInternal(e,8)}OR9(e){return this.orInternal(e,9)}MANY(e){this.manyInternal(0,e)}MANY1(e){this.manyInternal(1,e)}MANY2(e){this.manyInternal(2,e)}MANY3(e){this.manyInternal(3,e)}MANY4(e){this.manyInternal(4,e)}MANY5(e){this.manyInternal(5,e)}MANY6(e){this.manyInternal(6,e)}MANY7(e){this.manyInternal(7,e)}MANY8(e){this.manyInternal(8,e)}MANY9(e){this.manyInternal(9,e)}MANY_SEP(e){this.manySepFirstInternal(0,e)}MANY_SEP1(e){this.manySepFirstInternal(1,e)}MANY_SEP2(e){this.manySepFirstInternal(2,e)}MANY_SEP3(e){this.manySepFirstInternal(3,e)}MANY_SEP4(e){this.manySepFirstInternal(4,e)}MANY_SEP5(e){this.manySepFirstInternal(5,e)}MANY_SEP6(e){this.manySepFirstInternal(6,e)}MANY_SEP7(e){this.manySepFirstInternal(7,e)}MANY_SEP8(e){this.manySepFirstInternal(8,e)}MANY_SEP9(e){this.manySepFirstInternal(9,e)}AT_LEAST_ONE(e){this.atLeastOneInternal(0,e)}AT_LEAST_ONE1(e){return this.atLeastOneInternal(1,e)}AT_LEAST_ONE2(e){this.atLeastOneInternal(2,e)}AT_LEAST_ONE3(e){this.atLeastOneInternal(3,e)}AT_LEAST_ONE4(e){this.atLeastOneInternal(4,e)}AT_LEAST_ONE5(e){this.atLeastOneInternal(5,e)}AT_LEAST_ONE6(e){this.atLeastOneInternal(6,e)}AT_LEAST_ONE7(e){this.atLeastOneInternal(7,e)}AT_LEAST_ONE8(e){this.atLeastOneInternal(8,e)}AT_LEAST_ONE9(e){this.atLeastOneInternal(9,e)}AT_LEAST_ONE_SEP(e){this.atLeastOneSepFirstInternal(0,e)}AT_LEAST_ONE_SEP1(e){this.atLeastOneSepFirstInternal(1,e)}AT_LEAST_ONE_SEP2(e){this.atLeastOneSepFirstInternal(2,e)}AT_LEAST_ONE_SEP3(e){this.atLeastOneSepFirstInternal(3,e)}AT_LEAST_ONE_SEP4(e){this.atLeastOneSepFirstInternal(4,e)}AT_LEAST_ONE_SEP5(e){this.atLeastOneSepFirstInternal(5,e)}AT_LEAST_ONE_SEP6(e){this.atLeastOneSepFirstInternal(6,e)}AT_LEAST_ONE_SEP7(e){this.atLeastOneSepFirstInternal(7,e)}AT_LEAST_ONE_SEP8(e){this.atLeastOneSepFirstInternal(8,e)}AT_LEAST_ONE_SEP9(e){this.atLeastOneSepFirstInternal(9,e)}RULE(e,r,n=Kg){if(qn(this.definedRulesNames,e)){let s={message:Pl.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),type:zi.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);let i=this.defineRule(e,r,n);return this[e]=i,i}OVERRIDE_RULE(e,r,n=Kg){let i=Sse(e,this.definedRulesNames,this.className);this.definitionErrors=this.definitionErrors.concat(i);let a=this.defineRule(e,r,n);return this[e]=a,a}BACKTRACK(e,r){return function(){this.isBackTrackingStack.push(1);let n=this.saveRecogState();try{return e.apply(this,r),!0}catch(i){if(lf(i))return!1;throw i}finally{this.reloadRecogState(n),this.isBackTrackingStack.pop()}}}getGAstProductions(){return this.gastProductionsCache}getSerializedGastProductions(){return Sk(br(this.gastProductionsCache))}}});var tE,Xse=N(()=>{"use strict";qt();qk();Xg();qg();cx();Fs();GN();up();cp();tE=class{static{o(this,"RecognizerEngine")}initRecognizerEngine(e,r){if(this.className=this.constructor.name,this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=zg,this.subruleIdx=0,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},Bt(r,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a <serializedGrammar> property.
781 + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0
782 + For Further details.`);if(Pt(e)){if(ur(e))throw Error(`A Token Vocabulary cannot be empty.
783 + Note that the first argument for the parser constructor
784 + is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument.
785 + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0
786 + For Further details.`)}if(Pt(e))this.tokensMap=Xr(e,(a,s)=>(a[s.name]=s,a),{});else if(Bt(e,"modes")&&Ma(qr(br(e.modes)),rse)){let a=qr(br(e.modes)),s=Bm(a);this.tokensMap=Xr(s,(l,u)=>(l[u.name]=u,l),{})}else if(bn(e))this.tokensMap=an(e);else throw new Error("<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=lo;let n=Bt(e,"modes")?qr(br(e.modes)):br(e),i=Ma(n,a=>ur(a.categoryMatches));this.tokenMatcher=i?zg:Pu,Bu(br(this.tokensMap))}defineRule(e,r,n){if(this.selfAnalysisDone)throw Error(`Grammar rule <${e}> may not be defined after the 'performSelfAnalysis' method has been called'
787 +Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);let i=Bt(n,"resyncEnabled")?n.resyncEnabled:Kg.resyncEnabled,a=Bt(n,"recoveryValueFunc")?n.recoveryValueFunc:Kg.recoveryValueFunc,s=this.ruleShortNameIdx<<12;this.ruleShortNameIdx++,this.shortRuleNameToFull[s]=e,this.fullRuleNameToShort[e]=s;let l;return this.outputCst===!0?l=o(function(...f){try{this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f);let d=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(d),d}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTry"):l=o(function(...f){try{return this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f)}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTryCst"),Object.assign(l,{ruleName:e,originalGrammarAction:r})}invokeRuleCatch(e,r,n){let i=this.RULE_STACK.length===1,a=r&&!this.isBackTracking()&&this.recoveryEnabled;if(lf(e)){let s=e;if(a){let l=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(l))if(s.resyncedTokens=this.reSyncTo(l),this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];return u.recoveredNode=!0,u}else return n(e);else{if(this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];u.recoveredNode=!0,s.partialCstResult=u}throw s}}else{if(i)return this.moveToTerminatedState(),n(e);throw s}}else throw e}optionInternal(e,r){let n=this.getKeyForAutomaticLookahead(512,r);return this.optionInternalLogic(e,r,n)}optionInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof e!="function"){a=e.DEF;let s=e.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=e;if(i.call(this)===!0)return a.call(this)}atLeastOneInternal(e,r){let n=this.getKeyForAutomaticLookahead(1024,e);return this.atLeastOneInternalLogic(e,r,n)}atLeastOneInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let s=r.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=r;if(i.call(this)===!0){let s=this.doSingleRepetition(a);for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a)}else throw this.raiseEarlyExitException(e,jn.REPETITION_MANDATORY,r.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,r],i,1024,e,Bk)}atLeastOneSepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1536,e);this.atLeastOneSepFirstInternalLogic(e,r,n)}atLeastOneSepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,lx],l,1536,e,lx)}else throw this.raiseEarlyExitException(e,jn.REPETITION_MANDATORY_WITH_SEPARATOR,r.ERR_MSG)}manyInternal(e,r){let n=this.getKeyForAutomaticLookahead(768,e);return this.manyInternalLogic(e,r,n)}manyInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let l=r.GATE;if(l!==void 0){let u=i;i=o(()=>l.call(this)&&u.call(this),"lookaheadFunction")}}else a=r;let s=!0;for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a);this.attemptInRepetitionRecovery(this.manyInternal,[e,r],i,768,e,Pk,s)}manySepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1280,e);this.manySepFirstInternalLogic(e,r,n)}manySepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,ox],l,1280,e,ox)}}repetitionSepSecondInternal(e,r,n,i,a){for(;n();)this.CONSUME(r),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,r,n,i,a],n,1536,e,a)}doSingleRepetition(e){let r=this.getLexerPosition();return e.call(this),this.getLexerPosition()>r}orInternal(e,r){let n=this.getKeyForAutomaticLookahead(256,r),i=Pt(e)?e:e.DEF,s=this.getLaFuncFromCache(n).call(this,i);if(s!==void 0)return i[s].ALT.call(this);this.raiseNoAltException(r,e.ERR_MSG)}ruleFinallyStateUpdate(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){let e=this.LA(1),r=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new px(r,e))}}subruleInternal(e,r,n){let i;try{let a=n!==void 0?n.ARGS:void 0;return this.subruleIdx=r,i=e.apply(this,a),this.cstPostNonTerminal(i,n!==void 0&&n.LABEL!==void 0?n.LABEL:e.ruleName),i}catch(a){throw this.subruleInternalError(a,n,e.ruleName)}}subruleInternalError(e,r,n){throw lf(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,r!==void 0&&r.LABEL!==void 0?r.LABEL:n),delete e.partialCstResult),e}consumeInternal(e,r,n){let i;try{let a=this.LA(1);this.tokenMatcher(a,e)===!0?(this.consumeToken(),i=a):this.consumeInternalError(e,a,n)}catch(a){i=this.consumeInternalRecovery(e,r,a)}return this.cstPostTerminal(n!==void 0&&n.LABEL!==void 0?n.LABEL:e.name,i),i}consumeInternalError(e,r,n){let i,a=this.LA(0);throw n!==void 0&&n.ERR_MSG?i=n.ERR_MSG:i=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:r,previous:a,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new hp(i,r,a))}consumeInternalRecovery(e,r,n){if(this.recoveryEnabled&&n.name==="MismatchedTokenException"&&!this.isBackTracking()){let i=this.getFollowsForInRuleRecovery(e,r);try{return this.tryInRuleRecovery(e,i)}catch(a){throw a.name===zN?n:a}}else throw n}saveRecogState(){let e=this.errors,r=an(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:r,CST_STACK:this.CST_STACK}}reloadRecogState(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK}ruleInvocationStateUpdate(e,r,n){this.RULE_OCCURRENCE_STACK.push(n),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(r)}isBackTracking(){return this.isBackTrackingStack.length!==0}getCurrRuleFullName(){let e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]}shortRuleNameToFullName(e){return this.shortRuleNameToFull[e]}isAtEndOfInput(){return this.tokenMatcher(this.LA(1),lo)}reset(){this.resetLexerState(),this.subruleIdx=0,this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]}}});var rE,jse=N(()=>{"use strict";Xg();qt();qg();Fs();rE=class{static{o(this,"ErrorHandler")}initErrorHandler(e){this._errors=[],this.errorMessageProvider=Bt(e,"errorMessageProvider")?e.errorMessageProvider:ls.errorMessageProvider}SAVE_ERROR(e){if(lf(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:an(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")}get errors(){return an(this._errors)}set errors(e){this._errors=e}raiseEarlyExitException(e,r,n){let i=this.getCurrRuleFullName(),a=this.getGAstProductions()[i],l=Wg(e,a,r,this.maxLookahead)[0],u=[];for(let f=1;f<=this.maxLookahead;f++)u.push(this.LA(f));let h=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:l,actual:u,previous:this.LA(0),customUserDescription:n,ruleName:i});throw this.SAVE_ERROR(new mx(h,this.LA(1),this.LA(0)))}raiseNoAltException(e,r){let n=this.getCurrRuleFullName(),i=this.getGAstProductions()[n],a=Hg(e,i,this.maxLookahead),s=[];for(let h=1;h<=this.maxLookahead;h++)s.push(this.LA(h));let l=this.LA(0),u=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:a,actual:s,previous:l,customUserDescription:r,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new dx(u,this.LA(1),l))}}});var nE,Kse=N(()=>{"use strict";cx();qt();nE=class{static{o(this,"ContentAssist")}initContentAssist(){}computeContentAssist(e,r){let n=this.gastProductionsCache[e];if(pr(n))throw Error(`Rule ->${e}<- does not exist in this grammar.`);return $k([n],r,this.tokenMatcher,this.maxLookahead)}getNextPossibleTokenTypes(e){let r=ia(e.ruleStack),i=this.getGAstProductions()[r];return new Ok(i,e).startWalking()}}});function yx(t,e,r,n=!1){aE(r);let i=ga(this.recordingProdStack),a=Si(e)?e:e.DEF,s=new t({definition:[],idx:r});return n&&(s.separator=e.SEP),Bt(e,"MAX_LOOKAHEAD")&&(s.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(s),a.call(this),i.definition.push(s),this.recordingProdStack.pop(),sE}function dBe(t,e){aE(e);let r=ga(this.recordingProdStack),n=Pt(t)===!1,i=n===!1?t:t.DEF,a=new Tn({definition:[],idx:e,ignoreAmbiguities:n&&t.IGNORE_AMBIGUITIES===!0});Bt(t,"MAX_LOOKAHEAD")&&(a.maxLookahead=t.MAX_LOOKAHEAD);let s=A2(i,l=>Si(l.GATE));return a.hasPredicates=s,r.definition.push(a),Ae(i,l=>{let u=new Dn({definition:[]});a.definition.push(u),Bt(l,"IGNORE_AMBIGUITIES")?u.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:Bt(l,"GATE")&&(u.ignoreAmbiguities=!0),this.recordingProdStack.push(u),l.ALT.call(this),this.recordingProdStack.pop()}),sE}function Jse(t){return t===0?"":`${t}`}function aE(t){if(t<0||t>Zse){let e=new Error(`Invalid DSL Method idx value: <${t}>
788 + Idx value must be a none negative value smaller than ${Zse+1}`);throw e.KNOWN_RECORDER_ERROR=!0,e}}var sE,Qse,Zse,eoe,toe,fBe,iE,roe=N(()=>{"use strict";qt();os();ix();cp();up();Fs();qk();sE={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(sE);Qse=!0,Zse=Math.pow(2,8)-1,eoe=of({name:"RECORDING_PHASE_TOKEN",pattern:Xn.NA});Bu([eoe]);toe=$u(eoe,`This IToken indicates the Parser is in Recording Phase
789 + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(toe);fBe={name:`This CSTNode indicates the Parser is in Recording Phase
790 + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},iE=class{static{o(this,"GastRecorder")}initGastRecorder(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1}enableRecording(){this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",()=>{for(let e=0;e<10;e++){let r=e>0?e:"";this[`CONSUME${r}`]=function(n,i){return this.consumeInternalRecord(n,e,i)},this[`SUBRULE${r}`]=function(n,i){return this.subruleInternalRecord(n,e,i)},this[`OPTION${r}`]=function(n){return this.optionInternalRecord(n,e)},this[`OR${r}`]=function(n){return this.orInternalRecord(n,e)},this[`MANY${r}`]=function(n){this.manyInternalRecord(e,n)},this[`MANY_SEP${r}`]=function(n){this.manySepFirstInternalRecord(e,n)},this[`AT_LEAST_ONE${r}`]=function(n){this.atLeastOneInternalRecord(e,n)},this[`AT_LEAST_ONE_SEP${r}`]=function(n){this.atLeastOneSepFirstInternalRecord(e,n)}}this.consume=function(e,r,n){return this.consumeInternalRecord(r,e,n)},this.subrule=function(e,r,n){return this.subruleInternalRecord(r,e,n)},this.option=function(e,r){return this.optionInternalRecord(r,e)},this.or=function(e,r){return this.orInternalRecord(r,e)},this.many=function(e,r){this.manyInternalRecord(e,r)},this.atLeastOne=function(e,r){this.atLeastOneInternalRecord(e,r)},this.ACTION=this.ACTION_RECORD,this.BACKTRACK=this.BACKTRACK_RECORD,this.LA=this.LA_RECORD})}disableRecording(){this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",()=>{let e=this;for(let r=0;r<10;r++){let n=r>0?r:"";delete e[`CONSUME${n}`],delete e[`SUBRULE${n}`],delete e[`OPTION${n}`],delete e[`OR${n}`],delete e[`MANY${n}`],delete e[`MANY_SEP${n}`],delete e[`AT_LEAST_ONE${n}`],delete e[`AT_LEAST_ONE_SEP${n}`]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})}ACTION_RECORD(e){}BACKTRACK_RECORD(e,r){return()=>!0}LA_RECORD(e){return jg}topLevelRuleRecord(e,r){try{let n=new as({definition:[],name:e});return n.name=e,this.recordingProdStack.push(n),r.call(this),this.recordingProdStack.pop(),n}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+`
791 + This error was thrown during the "grammar recording phase" For more info see:
792 + https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}}optionInternalRecord(e,r){return yx.call(this,ln,e,r)}atLeastOneInternalRecord(e,r){yx.call(this,Ln,r,e)}atLeastOneSepFirstInternalRecord(e,r){yx.call(this,Rn,r,e,Qse)}manyInternalRecord(e,r){yx.call(this,Or,r,e)}manySepFirstInternalRecord(e,r){yx.call(this,wn,r,e,Qse)}orInternalRecord(e,r){return dBe.call(this,e,r)}subruleInternalRecord(e,r,n){if(aE(r),!e||Bt(e,"ruleName")===!1){let l=new Error(`<SUBRULE${Jse(r)}> argument is invalid expecting a Parser method reference but got: <${JSON.stringify(e)}>
793 + inside top level rule: <${this.recordingProdStack[0].name}>`);throw l.KNOWN_RECORDER_ERROR=!0,l}let i=ga(this.recordingProdStack),a=e.ruleName,s=new on({idx:r,nonTerminalName:a,label:n?.LABEL,referencedRule:void 0});return i.definition.push(s),this.outputCst?fBe:sE}consumeInternalRecord(e,r,n){if(aE(r),!_N(e)){let s=new Error(`<CONSUME${Jse(r)}> argument is invalid expecting a TokenType reference but got: <${JSON.stringify(e)}>
794 + inside top level rule: <${this.recordingProdStack[0].name}>`);throw s.KNOWN_RECORDER_ERROR=!0,s}let i=ga(this.recordingProdStack),a=new kr({idx:r,terminalType:e,label:n?.LABEL});return i.definition.push(a),toe}};o(yx,"recordProd");o(dBe,"recordOrProd");o(Jse,"getIdxSuffix");o(aE,"assertMethodIdxIsValid")});var oE,noe=N(()=>{"use strict";qt();Og();Fs();oE=class{static{o(this,"PerformanceTracer")}initPerformanceTracer(e){if(Bt(e,"traceInitPerf")){let r=e.traceInitPerf,n=typeof r=="number";this.traceInitMaxIdent=n?r:1/0,this.traceInitPerf=n?r>0:r}else this.traceInitMaxIdent=0,this.traceInitPerf=ls.traceInitPerf;this.traceInitIndent=-1}TRACE_INIT(e,r){if(this.traceInitPerf===!0){this.traceInitIndent++;let n=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent<this.traceInitMaxIdent&&console.log(`${n}--> <${e}>`);let{time:i,value:a}=tx(r),s=i>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&s(`${n}<-- <${e}> time: ${i}ms`),this.traceInitIndent--,a}else return r()}}});function ioe(t,e){e.forEach(r=>{let n=r.prototype;Object.getOwnPropertyNames(n).forEach(i=>{if(i==="constructor")return;let a=Object.getOwnPropertyDescriptor(n,i);a&&(a.get||a.set)?Object.defineProperty(t.prototype,i,a):t.prototype[i]=r.prototype[i]})})}var aoe=N(()=>{"use strict";o(ioe,"applyMixins")});function lE(t=void 0){return function(){return t}}var jg,ls,Kg,zi,vx,xx,Fs=N(()=>{"use strict";qt();Og();Oae();up();Vg();Rse();GN();Bse();Wse();qse();Yse();Xse();jse();Kse();roe();noe();aoe();fx();jg=$u(lo,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(jg);ls=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:zu,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1}),Kg=Object.freeze({recoveryValueFunc:o(()=>{},"recoveryValueFunc"),resyncEnabled:!0});(function(t){t[t.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",t[t.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",t[t.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",t[t.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",t[t.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",t[t.LEFT_RECURSION=5]="LEFT_RECURSION",t[t.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",t[t.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",t[t.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",t[t.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",t[t.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",t[t.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",t[t.TOO_MANY_ALTS=12]="TOO_MANY_ALTS",t[t.CUSTOM_LOOKAHEAD_VALIDATION=13]="CUSTOM_LOOKAHEAD_VALIDATION"})(zi||(zi={}));o(lE,"EMPTY_ALT");vx=class t{static{o(this,"Parser")}static performSelfAnalysis(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")}performSelfAnalysis(){this.TRACE_INIT("performSelfAnalysis",()=>{let e;this.selfAnalysisDone=!0;let r=this.className;this.TRACE_INIT("toFastProps",()=>{rx(this)}),this.TRACE_INIT("Grammar Recording",()=>{try{this.enableRecording(),Ae(this.definedRulesNames,i=>{let s=this[i].originalGrammarAction,l;this.TRACE_INIT(`${i} Rule`,()=>{l=this.topLevelRuleRecord(i,s)}),this.gastProductionsCache[i]=l})}finally{this.disableRecording()}});let n=[];if(this.TRACE_INIT("Grammar Resolving",()=>{n=Dse({rules:br(this.gastProductionsCache)}),this.definitionErrors=this.definitionErrors.concat(n)}),this.TRACE_INIT("Grammar Validations",()=>{if(ur(n)&&this.skipValidations===!1){let i=Lse({rules:br(this.gastProductionsCache),tokenTypes:br(this.tokensMap),errMsgProvider:Pl,grammarName:r}),a=Tse({lookaheadStrategy:this.lookaheadStrategy,rules:br(this.gastProductionsCache),tokenTypes:br(this.tokensMap),grammarName:r});this.definitionErrors=this.definitionErrors.concat(i,a)}}),ur(this.definitionErrors)&&(this.recoveryEnabled&&this.TRACE_INIT("computeAllProdsFollows",()=>{let i=Iae(br(this.gastProductionsCache));this.resyncFollows=i}),this.TRACE_INIT("ComputeLookaheadFunctions",()=>{var i,a;(a=(i=this.lookaheadStrategy).initialize)===null||a===void 0||a.call(i,{rules:br(this.gastProductionsCache)}),this.preComputeLookaheadFunctions(br(this.gastProductionsCache))})),!t.DEFER_DEFINITION_ERRORS_HANDLING&&!ur(this.definitionErrors))throw e=Je(this.definitionErrors,i=>i.message),new Error(`Parser Definition Errors detected:
795 + ${e.join(`
796 +-------------------------------
797 +`)}`)})}constructor(e,r){this.definitionErrors=[],this.selfAnalysisDone=!1;let n=this;if(n.initErrorHandler(r),n.initLexerAdapter(),n.initLooksAhead(r),n.initRecognizerEngine(e,r),n.initRecoverable(r),n.initTreeBuilder(r),n.initContentAssist(),n.initGastRecorder(r),n.initPerformanceTracer(r),Bt(r,"ignoredIssues"))throw new Error(`The <ignoredIssues> IParserConfig property has been deprecated.
798 + Please use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.
799 + See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES
800 + For further details.`);this.skipValidations=Bt(r,"skipValidations")?r.skipValidations:ls.skipValidations}};vx.DEFER_DEFINITION_ERRORS_HANDLING=!1;ioe(vx,[Hk,Xk,Zk,Jk,tE,eE,rE,nE,iE,oE]);xx=class extends vx{static{o(this,"EmbeddedActionsParser")}constructor(e,r=ls){let n=an(r);n.outputCst=!1,super(e,n)}}});var soe=N(()=>{"use strict";os()});var ooe=N(()=>{"use strict"});var loe=N(()=>{"use strict";soe();ooe()});var coe=N(()=>{"use strict";gN()});var cf=N(()=>{"use strict";gN();Fs();ix();up();qg();VN();Vg();Xg();DN();os();os();loe();coe()});function fp(t,e,r){return`${t.name}_${e}_${r}`}function doe(t){let e={decisionMap:{},decisionStates:[],ruleToStartState:new Map,ruleToStopState:new Map,states:[]};bBe(e,t);let r=t.length;for(let n=0;n<r;n++){let i=t[n],a=dp(e,i,i);a!==void 0&&RBe(e,i,a)}return e}function bBe(t,e){let r=e.length;for(let n=0;n<r;n++){let i=e[n],a=aa(t,i,void 0,{type:mBe}),s=aa(t,i,void 0,{type:Jg});a.stop=s,t.ruleToStartState.set(i,a),t.ruleToStopState.set(i,s)}}function poe(t,e,r){return r instanceof kr?QN(t,e,r.terminalType,r):r instanceof on?LBe(t,e,r):r instanceof Tn?SBe(t,e,r):r instanceof ln?CBe(t,e,r):r instanceof Or?wBe(t,e,r):r instanceof wn?TBe(t,e,r):r instanceof Ln?kBe(t,e,r):r instanceof Rn?EBe(t,e,r):dp(t,e,r)}function wBe(t,e,r){let n=aa(t,e,r,{type:hoe});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r));return goe(t,e,r,i)}function TBe(t,e,r){let n=aa(t,e,r,{type:hoe});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r)),a=QN(t,e,r.separator,r);return goe(t,e,r,i,a)}function kBe(t,e,r){let n=aa(t,e,r,{type:uoe});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r));return moe(t,e,r,i)}function EBe(t,e,r){let n=aa(t,e,r,{type:uoe});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r)),a=QN(t,e,r.separator,r);return moe(t,e,r,i,a)}function SBe(t,e,r){let n=aa(t,e,r,{type:uf});hf(t,n);let i=Je(r.definition,s=>poe(t,e,s));return e1(t,e,n,r,...i)}function CBe(t,e,r){let n=aa(t,e,r,{type:uf});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r));return ABe(t,e,r,i)}function dp(t,e,r){let n=Yr(Je(r.definition,i=>poe(t,e,i)),i=>i!==void 0);return n.length===1?n[0]:n.length===0?void 0:DBe(t,n)}function moe(t,e,r,n,i){let a=n.left,s=n.right,l=aa(t,e,r,{type:xBe});hf(t,l);let u=aa(t,e,r,{type:foe});return a.loopback=l,u.loopback=l,t.decisionMap[fp(e,i?"RepetitionMandatoryWithSeparator":"RepetitionMandatory",r.idx)]=l,Ai(s,l),i===void 0?(Ai(l,a),Ai(l,u)):(Ai(l,u),Ai(l,i.left),Ai(i.right,a)),{left:a,right:u}}function goe(t,e,r,n,i){let a=n.left,s=n.right,l=aa(t,e,r,{type:vBe});hf(t,l);let u=aa(t,e,r,{type:foe}),h=aa(t,e,r,{type:yBe});return l.loopback=h,u.loopback=h,Ai(l,a),Ai(l,u),Ai(s,h),i!==void 0?(Ai(h,u),Ai(h,i.left),Ai(i.right,a)):Ai(h,l),t.decisionMap[fp(e,i?"RepetitionWithSeparator":"Repetition",r.idx)]=l,{left:l,right:u}}function ABe(t,e,r,n){let i=n.left,a=n.right;return Ai(i,a),t.decisionMap[fp(e,"Option",r.idx)]=i,n}function hf(t,e){return t.decisionStates.push(e),e.decision=t.decisionStates.length-1,e.decision}function e1(t,e,r,n,...i){let a=aa(t,e,n,{type:gBe,start:r});r.end=a;for(let l of i)l!==void 0?(Ai(r,l.left),Ai(l.right,a)):Ai(r,a);let s={left:r,right:a};return t.decisionMap[fp(e,_Be(n),n.idx)]=r,s}function _Be(t){if(t instanceof Tn)return"Alternation";if(t instanceof ln)return"Option";if(t instanceof Or)return"Repetition";if(t instanceof wn)return"RepetitionWithSeparator";if(t instanceof Ln)return"RepetitionMandatory";if(t instanceof Rn)return"RepetitionMandatoryWithSeparator";throw new Error("Invalid production type encountered")}function DBe(t,e){let r=e.length;for(let a=0;a<r-1;a++){let s=e[a],l;s.left.transitions.length===1&&(l=s.left.transitions[0]);let u=l instanceof Zg,h=l,f=e[a+1].left;s.left.type===uf&&s.right.type===uf&&l!==void 0&&(u&&h.followState===s.right||l.target===s.right)?(u?h.followState=f:l.target=f,NBe(t,s.right)):Ai(s.right,f)}let n=e[0],i=e[r-1];return{left:n.left,right:i.right}}function QN(t,e,r,n){let i=aa(t,e,n,{type:uf}),a=aa(t,e,n,{type:uf});return ZN(i,new Qg(a,r)),{left:i,right:a}}function LBe(t,e,r){let n=r.referencedRule,i=t.ruleToStartState.get(n),a=aa(t,e,r,{type:uf}),s=aa(t,e,r,{type:uf}),l=new Zg(i,n,s);return ZN(a,l),{left:a,right:s}}function RBe(t,e,r){let n=t.ruleToStartState.get(e);Ai(n,r.left);let i=t.ruleToStopState.get(e);return Ai(r.right,i),{left:n,right:i}}function Ai(t,e){let r=new wx(e);ZN(t,r)}function aa(t,e,r,n){let i=Object.assign({atn:t,production:r,epsilonOnlyTransitions:!1,rule:e,transitions:[],nextTokenWithinRule:[],stateNumber:t.states.length},n);return t.states.push(i),i}function ZN(t,e){t.transitions.length===0&&(t.epsilonOnlyTransitions=e.isEpsilon()),t.transitions.push(e)}function NBe(t,e){t.states.splice(t.states.indexOf(e),1)}var uf,mBe,uoe,hoe,Jg,gBe,yBe,vBe,xBe,foe,bx,Qg,wx,Zg,yoe=N(()=>{"use strict";Im();DL();cf();o(fp,"buildATNKey");uf=1,mBe=2,uoe=4,hoe=5,Jg=7,gBe=8,yBe=9,vBe=10,xBe=11,foe=12,bx=class{static{o(this,"AbstractTransition")}constructor(e){this.target=e}isEpsilon(){return!1}},Qg=class extends bx{static{o(this,"AtomTransition")}constructor(e,r){super(e),this.tokenType=r}},wx=class extends bx{static{o(this,"EpsilonTransition")}constructor(e){super(e)}isEpsilon(){return!0}},Zg=class extends bx{static{o(this,"RuleTransition")}constructor(e,r,n){super(e),this.rule=r,this.followState=n}isEpsilon(){return!0}};o(doe,"createATN");o(bBe,"createRuleStartAndStopATNStates");o(poe,"atom");o(wBe,"repetition");o(TBe,"repetitionSep");o(kBe,"repetitionMandatory");o(EBe,"repetitionMandatorySep");o(SBe,"alternation");o(CBe,"option");o(dp,"block");o(moe,"plus");o(goe,"star");o(ABe,"optional");o(hf,"defineDecisionState");o(e1,"makeAlts");o(_Be,"getProdType");o(DBe,"makeBlock");o(QN,"tokenRef");o(LBe,"ruleRef");o(RBe,"buildRuleHandle");o(Ai,"epsilon");o(aa,"newState");o(ZN,"addTransition");o(NBe,"removeState")});function JN(t,e=!0){return`${e?`a${t.alt}`:""}s${t.state.stateNumber}:${t.stack.map(r=>r.stateNumber.toString()).join("_")}`}var Tx,t1,voe=N(()=>{"use strict";Im();Tx={},t1=class{static{o(this,"ATNConfigSet")}constructor(){this.map={},this.configs=[]}get size(){return this.configs.length}finalize(){this.map={}}add(e){let r=JN(e);r in this.map||(this.map[r]=this.configs.length,this.configs.push(e))}get elements(){return this.configs}get alts(){return Je(this.configs,e=>e.alt)}get key(){let e="";for(let r in this.map)e+=r+":";return e}};o(JN,"getATNConfigKey")});function MBe(t,e){let r={};return n=>{let i=n.toString(),a=r[i];return a!==void 0||(a={atnStartState:t,decision:e,states:{}},r[i]=a),a}}function boe(t,e=!0){let r=new Set;for(let n of t){let i=new Set;for(let a of n){if(a===void 0){if(e)break;return!1}let s=[a.tokenTypeIdx].concat(a.categoryMatches);for(let l of s)if(r.has(l)){if(!i.has(l))return!1}else r.add(l),i.add(l)}}return!0}function IBe(t){let e=t.decisionStates.length,r=Array(e);for(let n=0;n<e;n++)r[n]=MBe(t.decisionStates[n],n);return r}function eM(t,e,r,n){let i=t[e](r),a=i.start;if(a===void 0){let l=WBe(i.atnStartState);a=koe(i,Toe(l)),i.start=a}return OBe.apply(this,[i,a,r,n])}function OBe(t,e,r,n){let i=e,a=1,s=[],l=this.LA(a++);for(;;){let u=GBe(i,l);if(u===void 0&&(u=PBe.apply(this,[t,i,l,a,r,n])),u===Tx)return zBe(s,i,l);if(u.isAcceptState===!0)return u.prediction;i=u,s.push(l),l=this.LA(a++)}}function PBe(t,e,r,n,i,a){let s=VBe(e.configs,r,i);if(s.size===0)return woe(t,e,r,Tx),Tx;let l=Toe(s),u=HBe(s,i);if(u!==void 0)l.isAcceptState=!0,l.prediction=u,l.configs.uniqueAlt=u;else if(jBe(s)){let h=Dl(s.alts);l.isAcceptState=!0,l.prediction=h,l.configs.uniqueAlt=h,BBe.apply(this,[t,n,s.alts,a])}return l=woe(t,e,r,l),l}function BBe(t,e,r,n){let i=[];for(let h=1;h<=e;h++)i.push(this.LA(h).tokenType);let a=t.atnStartState,s=a.rule,l=a.production,u=FBe({topLevelRule:s,ambiguityIndices:r,production:l,prefixPath:i});n(u)}function FBe(t){let e=Je(t.prefixPath,i=>Fu(i)).join(", "),r=t.production.idx===0?"":t.production.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(", ")}> in <${$Be(t.production)}${r}> inside <${t.topLevelRule.name}> Rule,
801 +<${e}> may appears as a prefix path in all these alternatives.
802 +`;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES
803 +For Further details.`,n}function $Be(t){if(t instanceof on)return"SUBRULE";if(t instanceof ln)return"OPTION";if(t instanceof Tn)return"OR";if(t instanceof Ln)return"AT_LEAST_ONE";if(t instanceof Rn)return"AT_LEAST_ONE_SEP";if(t instanceof wn)return"MANY_SEP";if(t instanceof Or)return"MANY";if(t instanceof kr)return"CONSUME";throw Error("non exhaustive match")}function zBe(t,e,r){let n=ya(e.configs.elements,a=>a.state.transitions),i=Qre(n.filter(a=>a instanceof Qg).map(a=>a.tokenType),a=>a.tokenTypeIdx);return{actualToken:r,possibleTokenTypes:i,tokenPath:t}}function GBe(t,e){return t.edges[e.tokenTypeIdx]}function VBe(t,e,r){let n=new t1,i=[];for(let s of t.elements){if(r.is(s.alt)===!1)continue;if(s.state.type===Jg){i.push(s);continue}let l=s.state.transitions.length;for(let u=0;u<l;u++){let h=s.state.transitions[u],f=UBe(h,e);f!==void 0&&n.add({state:f,alt:s.alt,stack:s.stack})}}let a;if(i.length===0&&n.size===1&&(a=n),a===void 0){a=new t1;for(let s of n.elements)uE(s,a)}if(i.length>0&&!YBe(a))for(let s of i)a.add(s);return a}function UBe(t,e){if(t instanceof Qg&&sx(e,t.tokenType))return t.target}function HBe(t,e){let r;for(let n of t.elements)if(e.is(n.alt)===!0){if(r===void 0)r=n.alt;else if(r!==n.alt)return}return r}function Toe(t){return{configs:t,edges:{},isAcceptState:!1,prediction:-1}}function woe(t,e,r,n){return n=koe(t,n),e.edges[r.tokenTypeIdx]=n,n}function koe(t,e){if(e===Tx)return e;let r=e.configs.key,n=t.states[r];return n!==void 0?n:(e.configs.finalize(),t.states[r]=e,e)}function WBe(t){let e=new t1,r=t.transitions.length;for(let n=0;n<r;n++){let a={state:t.transitions[n].target,alt:n,stack:[]};uE(a,e)}return e}function uE(t,e){let r=t.state;if(r.type===Jg){if(t.stack.length>0){let i=[...t.stack],s={state:i.pop(),alt:t.alt,stack:i};uE(s,e)}else e.add(t);return}r.epsilonOnlyTransitions||e.add(t);let n=r.transitions.length;for(let i=0;i<n;i++){let a=r.transitions[i],s=qBe(t,a);s!==void 0&&uE(s,e)}}function qBe(t,e){if(e instanceof wx)return{state:e.target,alt:t.alt,stack:t.stack};if(e instanceof Zg){let r=[...t.stack,e.followState];return{state:e.target,alt:t.alt,stack:r}}}function YBe(t){for(let e of t.elements)if(e.state.type===Jg)return!0;return!1}function XBe(t){for(let e of t.elements)if(e.state.type!==Jg)return!1;return!0}function jBe(t){if(XBe(t))return!0;let e=KBe(t.elements);return QBe(e)&&!ZBe(e)}function KBe(t){let e=new Map;for(let r of t){let n=JN(r,!1),i=e.get(n);i===void 0&&(i={},e.set(n,i)),i[r.alt]=!0}return e}function QBe(t){for(let e of Array.from(t.values()))if(Object.keys(e).length>1)return!0;return!1}function ZBe(t){for(let e of Array.from(t.values()))if(Object.keys(e).length===1)return!0;return!1}var cE,xoe,kx,Eoe=N(()=>{"use strict";cf();yoe();voe();BL();RL();Zre();Im();uT();$T();HT();GL();o(MBe,"createDFACache");cE=class{static{o(this,"PredicateSet")}constructor(){this.predicates=[]}is(e){return e>=this.predicates.length||this.predicates[e]}set(e,r){this.predicates[e]=r}toString(){let e="",r=this.predicates.length;for(let n=0;n<r;n++)e+=this.predicates[n]===!0?"1":"0";return e}},xoe=new cE,kx=class extends Gu{static{o(this,"LLStarLookaheadStrategy")}constructor(e){var r;super(),this.logging=(r=e?.logging)!==null&&r!==void 0?r:n=>console.log(n)}initialize(e){this.atn=doe(e.rules),this.dfas=IBe(this.atn)}validateAmbiguousAlternationAlternatives(){return[]}validateEmptyOrAlternatives(){return[]}buildLookaheadForAlternation(e){let{prodOccurrence:r,rule:n,hasPredicates:i,dynamicTokensEnabled:a}=e,s=this.dfas,l=this.logging,u=fp(n,"Alternation",r),f=this.atn.decisionMap[u].decision,d=Je(Gk({maxLookahead:1,occurrence:r,prodType:"Alternation",rule:n}),p=>Je(p,m=>m[0]));if(boe(d,!1)&&!a){let p=Xr(d,(m,g,y)=>(Ae(g,v=>{v&&(m[v.tokenTypeIdx]=y,Ae(v.categoryMatches,x=>{m[x]=y}))}),m),{});return i?function(m){var g;let y=this.LA(1),v=p[y.tokenTypeIdx];if(m!==void 0&&v!==void 0){let x=(g=m[v])===null||g===void 0?void 0:g.GATE;if(x!==void 0&&x.call(this)===!1)return}return v}:function(){let m=this.LA(1);return p[m.tokenTypeIdx]}}else return i?function(p){let m=new cE,g=p===void 0?0:p.length;for(let v=0;v<g;v++){let x=p?.[v].GATE;m.set(v,x===void 0||x.call(this))}let y=eM.call(this,s,f,m,l);return typeof y=="number"?y:void 0}:function(){let p=eM.call(this,s,f,xoe,l);return typeof p=="number"?p:void 0}}buildLookaheadForOptional(e){let{prodOccurrence:r,rule:n,prodType:i,dynamicTokensEnabled:a}=e,s=this.dfas,l=this.logging,u=fp(n,i,r),f=this.atn.decisionMap[u].decision,d=Je(Gk({maxLookahead:1,occurrence:r,prodType:i,rule:n}),p=>Je(p,m=>m[0]));if(boe(d)&&d[0][0]&&!a){let p=d[0],m=qr(p);if(m.length===1&&ur(m[0].categoryMatches)){let y=m[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===y}}else{let g=Xr(m,(y,v)=>(v!==void 0&&(y[v.tokenTypeIdx]=!0,Ae(v.categoryMatches,x=>{y[x]=!0})),y),{});return function(){let y=this.LA(1);return g[y.tokenTypeIdx]===!0}}}return function(){let p=eM.call(this,s,f,xoe,l);return typeof p=="object"?!1:p===0}}};o(boe,"isLL1Sequence");o(IBe,"initATNSimulator");o(eM,"adaptivePredict");o(OBe,"performLookahead");o(PBe,"computeLookaheadTarget");o(BBe,"reportLookaheadAmbiguity");o(FBe,"buildAmbiguityError");o($Be,"getProductionDslName");o(zBe,"buildAdaptivePredictError");o(GBe,"getExistingTargetState");o(VBe,"computeReachSet");o(UBe,"getReachableTarget");o(HBe,"getUniqueAlt");o(Toe,"newDFAState");o(woe,"addDFAEdge");o(koe,"addDFAState");o(WBe,"computeStartState");o(uE,"closure");o(qBe,"getEpsilonTarget");o(YBe,"hasConfigInRuleStopState");o(XBe,"allConfigsInRuleStopStates");o(jBe,"hasConflictTerminatingPrediction");o(KBe,"getConflictingAltSets");o(QBe,"hasConflictingAltSet");o(ZBe,"hasStateAssociatedWithOneAlt")});var Soe=N(()=>{"use strict";Eoe()});var Coe,tM,Aoe,hE,jr,Pr,fE,_oe,rM,Doe,Loe,Roe,Noe,nM,Moe,Ioe,Ooe,dE,r1,n1,iM,i1,Poe,aM,sM,oM,lM,cM,Boe,Foe,uM,$oe,hM,Ex,zoe,Goe,Voe,Uoe,Hoe,Woe,qoe,Yoe,pE,Xoe,joe,Koe,Qoe,Zoe,Joe,ele,tle,rle,nle,ile,mE,ale,sle,ole,lle,cle,ule,hle,fle,dle,ple,mle,gle,yle,fM,dM,vle,xle,ble,wle,Tle,kle,Ele,Sle,Cle,pM,Fe,mM=N(()=>{"use strict";(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(Coe||(Coe={}));(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(tM||(tM={}));(function(t){t.MIN_VALUE=-2147483648,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(Aoe||(Aoe={}));(function(t){t.MIN_VALUE=0,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(hE||(hE={}));(function(t){function e(n,i){return n===Number.MAX_VALUE&&(n=hE.MAX_VALUE),i===Number.MAX_VALUE&&(i=hE.MAX_VALUE),{line:n,character:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.uinteger(i.line)&&Fe.uinteger(i.character)}o(r,"is"),t.is=r})(jr||(jr={}));(function(t){function e(n,i,a,s){if(Fe.uinteger(n)&&Fe.uinteger(i)&&Fe.uinteger(a)&&Fe.uinteger(s))return{start:jr.create(n,i),end:jr.create(a,s)};if(jr.is(n)&&jr.is(i))return{start:n,end:i};throw new Error(`Range#create called with invalid arguments[${n}, ${i}, ${a}, ${s}]`)}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&jr.is(i.start)&&jr.is(i.end)}o(r,"is"),t.is=r})(Pr||(Pr={}));(function(t){function e(n,i){return{uri:n,range:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Pr.is(i.range)&&(Fe.string(i.uri)||Fe.undefined(i.uri))}o(r,"is"),t.is=r})(fE||(fE={}));(function(t){function e(n,i,a,s){return{targetUri:n,targetRange:i,targetSelectionRange:a,originSelectionRange:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Pr.is(i.targetRange)&&Fe.string(i.targetUri)&&Pr.is(i.targetSelectionRange)&&(Pr.is(i.originSelectionRange)||Fe.undefined(i.originSelectionRange))}o(r,"is"),t.is=r})(_oe||(_oe={}));(function(t){function e(n,i,a,s){return{red:n,green:i,blue:a,alpha:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.numberRange(i.red,0,1)&&Fe.numberRange(i.green,0,1)&&Fe.numberRange(i.blue,0,1)&&Fe.numberRange(i.alpha,0,1)}o(r,"is"),t.is=r})(rM||(rM={}));(function(t){function e(n,i){return{range:n,color:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Pr.is(i.range)&&rM.is(i.color)}o(r,"is"),t.is=r})(Doe||(Doe={}));(function(t){function e(n,i,a){return{label:n,textEdit:i,additionalTextEdits:a}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.string(i.label)&&(Fe.undefined(i.textEdit)||n1.is(i))&&(Fe.undefined(i.additionalTextEdits)||Fe.typedArray(i.additionalTextEdits,n1.is))}o(r,"is"),t.is=r})(Loe||(Loe={}));(function(t){t.Comment="comment",t.Imports="imports",t.Region="region"})(Roe||(Roe={}));(function(t){function e(n,i,a,s,l,u){let h={startLine:n,endLine:i};return Fe.defined(a)&&(h.startCharacter=a),Fe.defined(s)&&(h.endCharacter=s),Fe.defined(l)&&(h.kind=l),Fe.defined(u)&&(h.collapsedText=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.uinteger(i.startLine)&&Fe.uinteger(i.startLine)&&(Fe.undefined(i.startCharacter)||Fe.uinteger(i.startCharacter))&&(Fe.undefined(i.endCharacter)||Fe.uinteger(i.endCharacter))&&(Fe.undefined(i.kind)||Fe.string(i.kind))}o(r,"is"),t.is=r})(Noe||(Noe={}));(function(t){function e(n,i){return{location:n,message:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&fE.is(i.location)&&Fe.string(i.message)}o(r,"is"),t.is=r})(nM||(nM={}));(function(t){t.Error=1,t.Warning=2,t.Information=3,t.Hint=4})(Moe||(Moe={}));(function(t){t.Unnecessary=1,t.Deprecated=2})(Ioe||(Ioe={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(n)&&Fe.string(n.href)}o(e,"is"),t.is=e})(Ooe||(Ooe={}));(function(t){function e(n,i,a,s,l,u){let h={range:n,message:i};return Fe.defined(a)&&(h.severity=a),Fe.defined(s)&&(h.code=s),Fe.defined(l)&&(h.source=l),Fe.defined(u)&&(h.relatedInformation=u),h}o(e,"create"),t.create=e;function r(n){var i;let a=n;return Fe.defined(a)&&Pr.is(a.range)&&Fe.string(a.message)&&(Fe.number(a.severity)||Fe.undefined(a.severity))&&(Fe.integer(a.code)||Fe.string(a.code)||Fe.undefined(a.code))&&(Fe.undefined(a.codeDescription)||Fe.string((i=a.codeDescription)===null||i===void 0?void 0:i.href))&&(Fe.string(a.source)||Fe.undefined(a.source))&&(Fe.undefined(a.relatedInformation)||Fe.typedArray(a.relatedInformation,nM.is))}o(r,"is"),t.is=r})(dE||(dE={}));(function(t){function e(n,i,...a){let s={title:n,command:i};return Fe.defined(a)&&a.length>0&&(s.arguments=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.title)&&Fe.string(i.command)}o(r,"is"),t.is=r})(r1||(r1={}));(function(t){function e(a,s){return{range:a,newText:s}}o(e,"replace"),t.replace=e;function r(a,s){return{range:{start:a,end:a},newText:s}}o(r,"insert"),t.insert=r;function n(a){return{range:a,newText:""}}o(n,"del"),t.del=n;function i(a){let s=a;return Fe.objectLiteral(s)&&Fe.string(s.newText)&&Pr.is(s.range)}o(i,"is"),t.is=i})(n1||(n1={}));(function(t){function e(n,i,a){let s={label:n};return i!==void 0&&(s.needsConfirmation=i),a!==void 0&&(s.description=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.string(i.label)&&(Fe.boolean(i.needsConfirmation)||i.needsConfirmation===void 0)&&(Fe.string(i.description)||i.description===void 0)}o(r,"is"),t.is=r})(iM||(iM={}));(function(t){function e(r){let n=r;return Fe.string(n)}o(e,"is"),t.is=e})(i1||(i1={}));(function(t){function e(a,s,l){return{range:a,newText:s,annotationId:l}}o(e,"replace"),t.replace=e;function r(a,s,l){return{range:{start:a,end:a},newText:s,annotationId:l}}o(r,"insert"),t.insert=r;function n(a,s){return{range:a,newText:"",annotationId:s}}o(n,"del"),t.del=n;function i(a){let s=a;return n1.is(s)&&(iM.is(s.annotationId)||i1.is(s.annotationId))}o(i,"is"),t.is=i})(Poe||(Poe={}));(function(t){function e(n,i){return{textDocument:n,edits:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&uM.is(i.textDocument)&&Array.isArray(i.edits)}o(r,"is"),t.is=r})(aM||(aM={}));(function(t){function e(n,i,a){let s={kind:"create",uri:n};return i!==void 0&&(i.overwrite!==void 0||i.ignoreIfExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="create"&&Fe.string(i.uri)&&(i.options===void 0||(i.options.overwrite===void 0||Fe.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||Fe.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||i1.is(i.annotationId))}o(r,"is"),t.is=r})(sM||(sM={}));(function(t){function e(n,i,a,s){let l={kind:"rename",oldUri:n,newUri:i};return a!==void 0&&(a.overwrite!==void 0||a.ignoreIfExists!==void 0)&&(l.options=a),s!==void 0&&(l.annotationId=s),l}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="rename"&&Fe.string(i.oldUri)&&Fe.string(i.newUri)&&(i.options===void 0||(i.options.overwrite===void 0||Fe.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||Fe.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||i1.is(i.annotationId))}o(r,"is"),t.is=r})(oM||(oM={}));(function(t){function e(n,i,a){let s={kind:"delete",uri:n};return i!==void 0&&(i.recursive!==void 0||i.ignoreIfNotExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="delete"&&Fe.string(i.uri)&&(i.options===void 0||(i.options.recursive===void 0||Fe.boolean(i.options.recursive))&&(i.options.ignoreIfNotExists===void 0||Fe.boolean(i.options.ignoreIfNotExists)))&&(i.annotationId===void 0||i1.is(i.annotationId))}o(r,"is"),t.is=r})(lM||(lM={}));(function(t){function e(r){let n=r;return n&&(n.changes!==void 0||n.documentChanges!==void 0)&&(n.documentChanges===void 0||n.documentChanges.every(i=>Fe.string(i.kind)?sM.is(i)||oM.is(i)||lM.is(i):aM.is(i)))}o(e,"is"),t.is=e})(cM||(cM={}));(function(t){function e(n){return{uri:n}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)}o(r,"is"),t.is=r})(Boe||(Boe={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)&&Fe.integer(i.version)}o(r,"is"),t.is=r})(Foe||(Foe={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)&&(i.version===null||Fe.integer(i.version))}o(r,"is"),t.is=r})(uM||(uM={}));(function(t){function e(n,i,a,s){return{uri:n,languageId:i,version:a,text:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)&&Fe.string(i.languageId)&&Fe.integer(i.version)&&Fe.string(i.text)}o(r,"is"),t.is=r})($oe||($oe={}));(function(t){t.PlainText="plaintext",t.Markdown="markdown";function e(r){let n=r;return n===t.PlainText||n===t.Markdown}o(e,"is"),t.is=e})(hM||(hM={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(r)&&hM.is(n.kind)&&Fe.string(n.value)}o(e,"is"),t.is=e})(Ex||(Ex={}));(function(t){t.Text=1,t.Method=2,t.Function=3,t.Constructor=4,t.Field=5,t.Variable=6,t.Class=7,t.Interface=8,t.Module=9,t.Property=10,t.Unit=11,t.Value=12,t.Enum=13,t.Keyword=14,t.Snippet=15,t.Color=16,t.File=17,t.Reference=18,t.Folder=19,t.EnumMember=20,t.Constant=21,t.Struct=22,t.Event=23,t.Operator=24,t.TypeParameter=25})(zoe||(zoe={}));(function(t){t.PlainText=1,t.Snippet=2})(Goe||(Goe={}));(function(t){t.Deprecated=1})(Voe||(Voe={}));(function(t){function e(n,i,a){return{newText:n,insert:i,replace:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Fe.string(i.newText)&&Pr.is(i.insert)&&Pr.is(i.replace)}o(r,"is"),t.is=r})(Uoe||(Uoe={}));(function(t){t.asIs=1,t.adjustIndentation=2})(Hoe||(Hoe={}));(function(t){function e(r){let n=r;return n&&(Fe.string(n.detail)||n.detail===void 0)&&(Fe.string(n.description)||n.description===void 0)}o(e,"is"),t.is=e})(Woe||(Woe={}));(function(t){function e(r){return{label:r}}o(e,"create"),t.create=e})(qoe||(qoe={}));(function(t){function e(r,n){return{items:r||[],isIncomplete:!!n}}o(e,"create"),t.create=e})(Yoe||(Yoe={}));(function(t){function e(n){return n.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}o(e,"fromPlainText"),t.fromPlainText=e;function r(n){let i=n;return Fe.string(i)||Fe.objectLiteral(i)&&Fe.string(i.language)&&Fe.string(i.value)}o(r,"is"),t.is=r})(pE||(pE={}));(function(t){function e(r){let n=r;return!!n&&Fe.objectLiteral(n)&&(Ex.is(n.contents)||pE.is(n.contents)||Fe.typedArray(n.contents,pE.is))&&(r.range===void 0||Pr.is(r.range))}o(e,"is"),t.is=e})(Xoe||(Xoe={}));(function(t){function e(r,n){return n?{label:r,documentation:n}:{label:r}}o(e,"create"),t.create=e})(joe||(joe={}));(function(t){function e(r,n,...i){let a={label:r};return Fe.defined(n)&&(a.documentation=n),Fe.defined(i)?a.parameters=i:a.parameters=[],a}o(e,"create"),t.create=e})(Koe||(Koe={}));(function(t){t.Text=1,t.Read=2,t.Write=3})(Qoe||(Qoe={}));(function(t){function e(r,n){let i={range:r};return Fe.number(n)&&(i.kind=n),i}o(e,"create"),t.create=e})(Zoe||(Zoe={}));(function(t){t.File=1,t.Module=2,t.Namespace=3,t.Package=4,t.Class=5,t.Method=6,t.Property=7,t.Field=8,t.Constructor=9,t.Enum=10,t.Interface=11,t.Function=12,t.Variable=13,t.Constant=14,t.String=15,t.Number=16,t.Boolean=17,t.Array=18,t.Object=19,t.Key=20,t.Null=21,t.EnumMember=22,t.Struct=23,t.Event=24,t.Operator=25,t.TypeParameter=26})(Joe||(Joe={}));(function(t){t.Deprecated=1})(ele||(ele={}));(function(t){function e(r,n,i,a,s){let l={name:r,kind:n,location:{uri:a,range:i}};return s&&(l.containerName=s),l}o(e,"create"),t.create=e})(tle||(tle={}));(function(t){function e(r,n,i,a){return a!==void 0?{name:r,kind:n,location:{uri:i,range:a}}:{name:r,kind:n,location:{uri:i}}}o(e,"create"),t.create=e})(rle||(rle={}));(function(t){function e(n,i,a,s,l,u){let h={name:n,detail:i,kind:a,range:s,selectionRange:l};return u!==void 0&&(h.children=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Fe.string(i.name)&&Fe.number(i.kind)&&Pr.is(i.range)&&Pr.is(i.selectionRange)&&(i.detail===void 0||Fe.string(i.detail))&&(i.deprecated===void 0||Fe.boolean(i.deprecated))&&(i.children===void 0||Array.isArray(i.children))&&(i.tags===void 0||Array.isArray(i.tags))}o(r,"is"),t.is=r})(nle||(nle={}));(function(t){t.Empty="",t.QuickFix="quickfix",t.Refactor="refactor",t.RefactorExtract="refactor.extract",t.RefactorInline="refactor.inline",t.RefactorRewrite="refactor.rewrite",t.Source="source",t.SourceOrganizeImports="source.organizeImports",t.SourceFixAll="source.fixAll"})(ile||(ile={}));(function(t){t.Invoked=1,t.Automatic=2})(mE||(mE={}));(function(t){function e(n,i,a){let s={diagnostics:n};return i!=null&&(s.only=i),a!=null&&(s.triggerKind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.typedArray(i.diagnostics,dE.is)&&(i.only===void 0||Fe.typedArray(i.only,Fe.string))&&(i.triggerKind===void 0||i.triggerKind===mE.Invoked||i.triggerKind===mE.Automatic)}o(r,"is"),t.is=r})(ale||(ale={}));(function(t){function e(n,i,a){let s={title:n},l=!0;return typeof i=="string"?(l=!1,s.kind=i):r1.is(i)?s.command=i:s.edit=i,l&&a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Fe.string(i.title)&&(i.diagnostics===void 0||Fe.typedArray(i.diagnostics,dE.is))&&(i.kind===void 0||Fe.string(i.kind))&&(i.edit!==void 0||i.command!==void 0)&&(i.command===void 0||r1.is(i.command))&&(i.isPreferred===void 0||Fe.boolean(i.isPreferred))&&(i.edit===void 0||cM.is(i.edit))}o(r,"is"),t.is=r})(sle||(sle={}));(function(t){function e(n,i){let a={range:n};return Fe.defined(i)&&(a.data=i),a}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Pr.is(i.range)&&(Fe.undefined(i.command)||r1.is(i.command))}o(r,"is"),t.is=r})(ole||(ole={}));(function(t){function e(n,i){return{tabSize:n,insertSpaces:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.uinteger(i.tabSize)&&Fe.boolean(i.insertSpaces)}o(r,"is"),t.is=r})(lle||(lle={}));(function(t){function e(n,i,a){return{range:n,target:i,data:a}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Pr.is(i.range)&&(Fe.undefined(i.target)||Fe.string(i.target))}o(r,"is"),t.is=r})(cle||(cle={}));(function(t){function e(n,i){return{range:n,parent:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Pr.is(i.range)&&(i.parent===void 0||t.is(i.parent))}o(r,"is"),t.is=r})(ule||(ule={}));(function(t){t.namespace="namespace",t.type="type",t.class="class",t.enum="enum",t.interface="interface",t.struct="struct",t.typeParameter="typeParameter",t.parameter="parameter",t.variable="variable",t.property="property",t.enumMember="enumMember",t.event="event",t.function="function",t.method="method",t.macro="macro",t.keyword="keyword",t.modifier="modifier",t.comment="comment",t.string="string",t.number="number",t.regexp="regexp",t.operator="operator",t.decorator="decorator"})(hle||(hle={}));(function(t){t.declaration="declaration",t.definition="definition",t.readonly="readonly",t.static="static",t.deprecated="deprecated",t.abstract="abstract",t.async="async",t.modification="modification",t.documentation="documentation",t.defaultLibrary="defaultLibrary"})(fle||(fle={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(n)&&(n.resultId===void 0||typeof n.resultId=="string")&&Array.isArray(n.data)&&(n.data.length===0||typeof n.data[0]=="number")}o(e,"is"),t.is=e})(dle||(dle={}));(function(t){function e(n,i){return{range:n,text:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Pr.is(i.range)&&Fe.string(i.text)}o(r,"is"),t.is=r})(ple||(ple={}));(function(t){function e(n,i,a){return{range:n,variableName:i,caseSensitiveLookup:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Pr.is(i.range)&&Fe.boolean(i.caseSensitiveLookup)&&(Fe.string(i.variableName)||i.variableName===void 0)}o(r,"is"),t.is=r})(mle||(mle={}));(function(t){function e(n,i){return{range:n,expression:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Pr.is(i.range)&&(Fe.string(i.expression)||i.expression===void 0)}o(r,"is"),t.is=r})(gle||(gle={}));(function(t){function e(n,i){return{frameId:n,stoppedLocation:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Pr.is(n.stoppedLocation)}o(r,"is"),t.is=r})(yle||(yle={}));(function(t){t.Type=1,t.Parameter=2;function e(r){return r===1||r===2}o(e,"is"),t.is=e})(fM||(fM={}));(function(t){function e(n){return{value:n}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&(i.tooltip===void 0||Fe.string(i.tooltip)||Ex.is(i.tooltip))&&(i.location===void 0||fE.is(i.location))&&(i.command===void 0||r1.is(i.command))}o(r,"is"),t.is=r})(dM||(dM={}));(function(t){function e(n,i,a){let s={position:n,label:i};return a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&jr.is(i.position)&&(Fe.string(i.label)||Fe.typedArray(i.label,dM.is))&&(i.kind===void 0||fM.is(i.kind))&&i.textEdits===void 0||Fe.typedArray(i.textEdits,n1.is)&&(i.tooltip===void 0||Fe.string(i.tooltip)||Ex.is(i.tooltip))&&(i.paddingLeft===void 0||Fe.boolean(i.paddingLeft))&&(i.paddingRight===void 0||Fe.boolean(i.paddingRight))}o(r,"is"),t.is=r})(vle||(vle={}));(function(t){function e(r){return{kind:"snippet",value:r}}o(e,"createSnippet"),t.createSnippet=e})(xle||(xle={}));(function(t){function e(r,n,i,a){return{insertText:r,filterText:n,range:i,command:a}}o(e,"create"),t.create=e})(ble||(ble={}));(function(t){function e(r){return{items:r}}o(e,"create"),t.create=e})(wle||(wle={}));(function(t){t.Invoked=0,t.Automatic=1})(Tle||(Tle={}));(function(t){function e(r,n){return{range:r,text:n}}o(e,"create"),t.create=e})(kle||(kle={}));(function(t){function e(r,n){return{triggerKind:r,selectedCompletionInfo:n}}o(e,"create"),t.create=e})(Ele||(Ele={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(n)&&tM.is(n.uri)&&Fe.string(n.name)}o(e,"is"),t.is=e})(Sle||(Sle={}));(function(t){function e(a,s,l,u){return new pM(a,s,l,u)}o(e,"create"),t.create=e;function r(a){let s=a;return!!(Fe.defined(s)&&Fe.string(s.uri)&&(Fe.undefined(s.languageId)||Fe.string(s.languageId))&&Fe.uinteger(s.lineCount)&&Fe.func(s.getText)&&Fe.func(s.positionAt)&&Fe.func(s.offsetAt))}o(r,"is"),t.is=r;function n(a,s){let l=a.getText(),u=i(s,(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),h=l.length;for(let f=u.length-1;f>=0;f--){let d=u[f],p=a.offsetAt(d.range.start),m=a.offsetAt(d.range.end);if(m<=h)l=l.substring(0,p)+d.newText+l.substring(m,l.length);else throw new Error("Overlapping edit");h=p}return l}o(n,"applyEdits"),t.applyEdits=n;function i(a,s){if(a.length<=1)return a;let l=a.length/2|0,u=a.slice(0,l),h=a.slice(l);i(u,s),i(h,s);let f=0,d=0,p=0;for(;f<u.length&&d<h.length;)s(u[f],h[d])<=0?a[p++]=u[f++]:a[p++]=h[d++];for(;f<u.length;)a[p++]=u[f++];for(;d<h.length;)a[p++]=h[d++];return a}o(i,"mergeSort")})(Cle||(Cle={}));pM=class{static{o(this,"FullTextDocument")}constructor(e,r,n,i){this._uri=e,this._languageId=r,this._version=n,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let r=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(r,n)}return this._content}update(e,r){this._content=e.text,this._version=r,this._lineOffsets=void 0}getLineOffsets(){if(this._lineOffsets===void 0){let e=[],r=this._content,n=!0;for(let i=0;i<r.length;i++){n&&(e.push(i),n=!1);let a=r.charAt(i);n=a==="\r"||a===`
804 +`,a==="\r"&&i+1<r.length&&r.charAt(i+1)===`
805 +`&&i++}n&&r.length>0&&e.push(r.length),this._lineOffsets=e}return this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let r=this.getLineOffsets(),n=0,i=r.length;if(i===0)return jr.create(0,e);for(;n<i;){let s=Math.floor((n+i)/2);r[s]>e?i=s:n=s+1}let a=n-1;return jr.create(a,e-r[a])}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line],i=e.line+1<r.length?r[e.line+1]:this._content.length;return Math.max(Math.min(n+e.character,i),n)}get lineCount(){return this.getLineOffsets().length}};(function(t){let e=Object.prototype.toString;function r(m){return typeof m<"u"}o(r,"defined"),t.defined=r;function n(m){return typeof m>"u"}o(n,"undefined"),t.undefined=n;function i(m){return m===!0||m===!1}o(i,"boolean"),t.boolean=i;function a(m){return e.call(m)==="[object String]"}o(a,"string"),t.string=a;function s(m){return e.call(m)==="[object Number]"}o(s,"number"),t.number=s;function l(m,g,y){return e.call(m)==="[object Number]"&&g<=m&&m<=y}o(l,"numberRange"),t.numberRange=l;function u(m){return e.call(m)==="[object Number]"&&-2147483648<=m&&m<=2147483647}o(u,"integer"),t.integer=u;function h(m){return e.call(m)==="[object Number]"&&0<=m&&m<=2147483647}o(h,"uinteger"),t.uinteger=h;function f(m){return e.call(m)==="[object Function]"}o(f,"func"),t.func=f;function d(m){return m!==null&&typeof m=="object"}o(d,"objectLiteral"),t.objectLiteral=d;function p(m,g){return Array.isArray(m)&&m.every(g)}o(p,"typedArray"),t.typedArray=p})(Fe||(Fe={}))});var Sx,Cx,pp,mp,gM,a1,gE=N(()=>{"use strict";mM();Nl();Sx=class{static{o(this,"CstNodeBuilder")}constructor(){this.nodeStack=[]}get current(){var e;return(e=this.nodeStack[this.nodeStack.length-1])!==null&&e!==void 0?e:this.rootNode}buildRootNode(e){return this.rootNode=new a1(e),this.rootNode.root=this.rootNode,this.nodeStack=[this.rootNode],this.rootNode}buildCompositeNode(e){let r=new mp;return r.grammarSource=e,r.root=this.rootNode,this.current.content.push(r),this.nodeStack.push(r),r}buildLeafNode(e,r){let n=new pp(e.startOffset,e.image.length,Gm(e),e.tokenType,!r);return n.grammarSource=r,n.root=this.rootNode,this.current.content.push(n),n}removeNode(e){let r=e.container;if(r){let n=r.content.indexOf(e);n>=0&&r.content.splice(n,1)}}addHiddenNodes(e){let r=[];for(let a of e){let s=new pp(a.startOffset,a.image.length,Gm(a),a.tokenType,!0);s.root=this.rootNode,r.push(s)}let n=this.current,i=!1;if(n.content.length>0){n.content.push(...r);return}for(;n.container;){let a=n.container.content.indexOf(n);if(a>0){n.container.content.splice(a,0,...r),i=!0;break}n=n.container}i||this.rootNode.content.unshift(...r)}construct(e){let r=this.current;typeof e.$type=="string"&&(this.current.astNode=e),e.$cstNode=r;let n=this.nodeStack.pop();n?.content.length===0&&this.removeNode(n)}},Cx=class{static{o(this,"AbstractCstNode")}get parent(){return this.container}get feature(){return this.grammarSource}get hidden(){return!1}get astNode(){var e,r;let n=typeof((e=this._astNode)===null||e===void 0?void 0:e.$type)=="string"?this._astNode:(r=this.container)===null||r===void 0?void 0:r.astNode;if(!n)throw new Error("This node has no associated AST element");return n}set astNode(e){this._astNode=e}get element(){return this.astNode}get text(){return this.root.fullText.substring(this.offset,this.end)}},pp=class extends Cx{static{o(this,"LeafCstNodeImpl")}get offset(){return this._offset}get length(){return this._length}get end(){return this._offset+this._length}get hidden(){return this._hidden}get tokenType(){return this._tokenType}get range(){return this._range}constructor(e,r,n,i,a=!1){super(),this._hidden=a,this._offset=e,this._tokenType=i,this._length=r,this._range=n}},mp=class extends Cx{static{o(this,"CompositeCstNodeImpl")}constructor(){super(...arguments),this.content=new gM(this)}get children(){return this.content}get offset(){var e,r;return(r=(e=this.firstNonHiddenNode)===null||e===void 0?void 0:e.offset)!==null&&r!==void 0?r:0}get length(){return this.end-this.offset}get end(){var e,r;return(r=(e=this.lastNonHiddenNode)===null||e===void 0?void 0:e.end)!==null&&r!==void 0?r:0}get range(){let e=this.firstNonHiddenNode,r=this.lastNonHiddenNode;if(e&&r){if(this._rangeCache===void 0){let{range:n}=e,{range:i}=r;this._rangeCache={start:n.start,end:i.end.line<n.start.line?n.start:i.end}}return this._rangeCache}else return{start:jr.create(0,0),end:jr.create(0,0)}}get firstNonHiddenNode(){for(let e of this.content)if(!e.hidden)return e;return this.content[0]}get lastNonHiddenNode(){for(let e=this.content.length-1;e>=0;e--){let r=this.content[e];if(!r.hidden)return r}return this.content[this.content.length-1]}},gM=class t extends Array{static{o(this,"CstNodeContainer")}constructor(e){super(),this.parent=e,Object.setPrototypeOf(this,t.prototype)}push(...e){return this.addParents(e),super.push(...e)}unshift(...e){return this.addParents(e),super.unshift(...e)}splice(e,r,...n){return this.addParents(n),super.splice(e,r,...n)}addParents(e){for(let r of e)r.container=this.parent}},a1=class extends mp{static{o(this,"RootCstNodeImpl")}get text(){return this._text.substring(this.offset,this.end)}get fullText(){return this._text}constructor(e){super(),this._text="",this._text=e??""}}});function yM(t){return t.$type===yE}var yE,Ale,_le,Ax,_x,vE,s1,Dx,JBe,vM,Lx=N(()=>{"use strict";cf();Soe();Rc();Ol();is();gE();yE=Symbol("Datatype");o(yM,"isDataTypeNode");Ale="\u200B",_le=o(t=>t.endsWith(Ale)?t:t+Ale,"withRuleSuffix"),Ax=class{static{o(this,"AbstractLangiumParser")}constructor(e){this._unorderedGroups=new Map,this.allRules=new Map,this.lexer=e.parser.Lexer;let r=this.lexer.definition,n=e.LanguageMetaData.mode==="production";this.wrapper=new vM(r,Object.assign(Object.assign({},e.parser.ParserConfig),{skipValidations:n,errorMessageProvider:e.parser.ParserErrorMessageProvider}))}alternatives(e,r){this.wrapper.wrapOr(e,r)}optional(e,r){this.wrapper.wrapOption(e,r)}many(e,r){this.wrapper.wrapMany(e,r)}atLeastOne(e,r){this.wrapper.wrapAtLeastOne(e,r)}getRule(e){return this.allRules.get(e)}isRecording(){return this.wrapper.IS_RECORDING}get unorderedGroups(){return this._unorderedGroups}getRuleStack(){return this.wrapper.RULE_STACK}finalize(){this.wrapper.wrapSelfAnalysis()}},_x=class extends Ax{static{o(this,"LangiumParser")}get current(){return this.stack[this.stack.length-1]}constructor(e){super(e),this.nodeBuilder=new Sx,this.stack=[],this.assignmentMap=new Map,this.linker=e.references.Linker,this.converter=e.parser.ValueConverter,this.astReflection=e.shared.AstReflection}rule(e,r){let n=this.computeRuleType(e),i=this.wrapper.DEFINE_RULE(_le(e.name),this.startImplementation(n,r).bind(this));return this.allRules.set(e.name,i),e.entry&&(this.mainRule=i),i}computeRuleType(e){if(!e.fragment){if(Z2(e))return yE;{let r=Rg(e);return r??e.name}}}parse(e,r={}){this.nodeBuilder.buildRootNode(e);let n=this.lexerResult=this.lexer.tokenize(e);this.wrapper.input=n.tokens;let i=r.rule?this.allRules.get(r.rule):this.mainRule;if(!i)throw new Error(r.rule?`No rule found with name '${r.rule}'`:"No main rule available.");let a=i.call(this.wrapper,{});return this.nodeBuilder.addHiddenNodes(n.hidden),this.unorderedGroups.clear(),this.lexerResult=void 0,{value:a,lexerErrors:n.errors,lexerReport:n.report,parserErrors:this.wrapper.errors}}startImplementation(e,r){return n=>{let i=!this.isRecording()&&e!==void 0;if(i){let s={$type:e};this.stack.push(s),e===yE&&(s.value="")}let a;try{a=r(n)}catch{a=void 0}return a===void 0&&i&&(a=this.construct()),a}}extractHiddenTokens(e){let r=this.lexerResult.hidden;if(!r.length)return[];let n=e.startOffset;for(let i=0;i<r.length;i++)if(r[i].startOffset>n)return r.splice(0,i);return r.splice(0,r.length)}consume(e,r,n){let i=this.wrapper.wrapConsume(e,r);if(!this.isRecording()&&this.isValidToken(i)){let a=this.extractHiddenTokens(i);this.nodeBuilder.addHiddenNodes(a);let s=this.nodeBuilder.buildLeafNode(i,n),{assignment:l,isCrossRef:u}=this.getAssignment(n),h=this.current;if(l){let f=Ho(n)?i.image:this.converter.convert(i.image,s);this.assign(l.operator,l.feature,f,s,u)}else if(yM(h)){let f=i.image;Ho(n)||(f=this.converter.convert(f,s).toString()),h.value+=f}}}isValidToken(e){return!e.isInsertedInRecovery&&!isNaN(e.startOffset)&&typeof e.endOffset=="number"&&!isNaN(e.endOffset)}subrule(e,r,n,i,a){let s;!this.isRecording()&&!n&&(s=this.nodeBuilder.buildCompositeNode(i));let l=this.wrapper.wrapSubrule(e,r,a);!this.isRecording()&&s&&s.length>0&&this.performSubruleAssignment(l,i,s)}performSubruleAssignment(e,r,n){let{assignment:i,isCrossRef:a}=this.getAssignment(r);if(i)this.assign(i.operator,i.feature,e,n,a);else if(!i){let s=this.current;if(yM(s))s.value+=e.toString();else if(typeof e=="object"&&e){let u=this.assignWithoutOverride(e,s);this.stack.pop(),this.stack.push(u)}}}action(e,r){if(!this.isRecording()){let n=this.current;if(r.feature&&r.operator){n=this.construct(),this.nodeBuilder.removeNode(n.$cstNode),this.nodeBuilder.buildCompositeNode(r).content.push(n.$cstNode);let a={$type:e};this.stack.push(a),this.assign(r.operator,r.feature,n,n.$cstNode,!1)}else n.$type=e}}construct(){if(this.isRecording())return;let e=this.current;return vk(e),this.nodeBuilder.construct(e),this.stack.pop(),yM(e)?this.converter.convert(e.value,e.$cstNode):(XR(this.astReflection,e),e)}getAssignment(e){if(!this.assignmentMap.has(e)){let r=tp(e,Ml);this.assignmentMap.set(e,{assignment:r,isCrossRef:r?ep(r.terminal):!1})}return this.assignmentMap.get(e)}assign(e,r,n,i,a){let s=this.current,l;switch(a&&typeof n=="string"?l=this.linker.buildReference(s,r,i,n):l=n,e){case"=":{s[r]=l;break}case"?=":{s[r]=!0;break}case"+=":Array.isArray(s[r])||(s[r]=[]),s[r].push(l)}}assignWithoutOverride(e,r){for(let[i,a]of Object.entries(r)){let s=e[i];s===void 0?e[i]=a:Array.isArray(s)&&Array.isArray(a)&&(a.push(...s),e[i]=a)}let n=e.$cstNode;return n&&(n.astNode=void 0,e.$cstNode=void 0),e}get definitionErrors(){return this.wrapper.definitionErrors}},vE=class{static{o(this,"AbstractParserErrorMessageProvider")}buildMismatchTokenMessage(e){return zu.buildMismatchTokenMessage(e)}buildNotAllInputParsedMessage(e){return zu.buildNotAllInputParsedMessage(e)}buildNoViableAltMessage(e){return zu.buildNoViableAltMessage(e)}buildEarlyExitMessage(e){return zu.buildEarlyExitMessage(e)}},s1=class extends vE{static{o(this,"LangiumParserErrorMessageProvider")}buildMismatchTokenMessage({expected:e,actual:r}){return`Expecting ${e.LABEL?"`"+e.LABEL+"`":e.name.endsWith(":KW")?`keyword '${e.name.substring(0,e.name.length-3)}'`:`token of type '${e.name}'`} but found \`${r.image}\`.`}buildNotAllInputParsedMessage({firstRedundant:e}){return`Expecting end of file but found \`${e.image}\`.`}},Dx=class extends Ax{static{o(this,"LangiumCompletionParser")}constructor(){super(...arguments),this.tokens=[],this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}action(){}construct(){}parse(e){this.resetState();let r=this.lexer.tokenize(e,{mode:"partial"});return this.tokens=r.tokens,this.wrapper.input=[...this.tokens],this.mainRule.call(this.wrapper,{}),this.unorderedGroups.clear(),{tokens:this.tokens,elementStack:[...this.lastElementStack],tokenIndex:this.nextTokenIndex}}rule(e,r){let n=this.wrapper.DEFINE_RULE(_le(e.name),this.startImplementation(r).bind(this));return this.allRules.set(e.name,n),e.entry&&(this.mainRule=n),n}resetState(){this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}startImplementation(e){return r=>{let n=this.keepStackSize();try{e(r)}finally{this.resetStackSize(n)}}}removeUnexpectedElements(){this.elementStack.splice(this.stackSize)}keepStackSize(){let e=this.elementStack.length;return this.stackSize=e,e}resetStackSize(e){this.removeUnexpectedElements(),this.stackSize=e}consume(e,r,n){this.wrapper.wrapConsume(e,r),this.isRecording()||(this.lastElementStack=[...this.elementStack,n],this.nextTokenIndex=this.currIdx+1)}subrule(e,r,n,i,a){this.before(i),this.wrapper.wrapSubrule(e,r,a),this.after(i)}before(e){this.isRecording()||this.elementStack.push(e)}after(e){if(!this.isRecording()){let r=this.elementStack.lastIndexOf(e);r>=0&&this.elementStack.splice(r)}}get currIdx(){return this.wrapper.currIdx}},JBe={recoveryEnabled:!0,nodeLocationTracking:"full",skipValidations:!0,errorMessageProvider:new s1},vM=class extends xx{static{o(this,"ChevrotainWrapper")}constructor(e,r){let n=r&&"maxLookahead"in r;super(e,Object.assign(Object.assign(Object.assign({},JBe),{lookaheadStrategy:n?new Gu({maxLookahead:r.maxLookahead}):new kx({logging:r.skipValidations?()=>{}:void 0})}),r))}get IS_RECORDING(){return this.RECORDING_PHASE}DEFINE_RULE(e,r){return this.RULE(e,r)}wrapSelfAnalysis(){this.performSelfAnalysis()}wrapConsume(e,r){return this.consume(e,r)}wrapSubrule(e,r,n){return this.subrule(e,r,{ARGS:[n]})}wrapOr(e,r){this.or(e,r)}wrapOption(e,r){this.option(e,r)}wrapMany(e,r){this.many(e,r)}wrapAtLeastOne(e,r){this.atLeastOne(e,r)}}});function Rx(t,e,r){return eFe({parser:e,tokens:r,ruleNames:new Map},t),e}function eFe(t,e){let r=K2(e,!1),n=en(e.rules).filter(Oa).filter(i=>r.has(i));for(let i of n){let a=Object.assign(Object.assign({},t),{consume:1,optional:1,subrule:1,many:1,or:1});t.parser.rule(i,gp(a,i.definition))}}function gp(t,e,r=!1){let n;if(Ho(e))n=oFe(t,e);else if(Mu(e))n=tFe(t,e);else if(Ml(e))n=gp(t,e.terminal);else if(ep(e))n=Dle(t,e);else if(Il(e))n=rFe(t,e);else if(mk(e))n=iFe(t,e);else if(yk(e))n=aFe(t,e);else if(sf(e))n=sFe(t,e);else if($R(e)){let i=t.consume++;n=o(()=>t.parser.consume(i,lo,e),"method")}else throw new Zd(e.$cstNode,`Unexpected element type: ${e.$type}`);return Lle(t,r?void 0:xE(e),n,e.cardinality)}function tFe(t,e){let r=J2(e);return()=>t.parser.action(r,e)}function rFe(t,e){let r=e.rule.ref;if(Oa(r)){let n=t.subrule++,i=r.fragment,a=e.arguments.length>0?nFe(r,e.arguments):()=>({});return s=>t.parser.subrule(n,Rle(t,r),i,e,a(s))}else if(so(r)){let n=t.consume++,i=xM(t,r.name);return()=>t.parser.consume(n,i,e)}else if(r)Lc(r);else throw new Zd(e.$cstNode,`Undefined rule: ${e.rule.$refText}`)}function nFe(t,e){let r=e.map(n=>Vu(n.value));return n=>{let i={};for(let a=0;a<r.length;a++){let s=t.parameters[a],l=r[a];i[s.name]=l(n)}return i}}function Vu(t){if(NR(t)){let e=Vu(t.left),r=Vu(t.right);return n=>e(n)||r(n)}else if(RR(t)){let e=Vu(t.left),r=Vu(t.right);return n=>e(n)&&r(n)}else if(MR(t)){let e=Vu(t.value);return r=>!e(r)}else if(IR(t)){let e=t.parameter.ref.name;return r=>r!==void 0&&r[e]===!0}else if(LR(t)){let e=!!t.true;return()=>e}Lc(t)}function iFe(t,e){if(e.elements.length===1)return gp(t,e.elements[0]);{let r=[];for(let i of e.elements){let a={ALT:gp(t,i,!0)},s=xE(i);s&&(a.GATE=Vu(s)),r.push(a)}let n=t.or++;return i=>t.parser.alternatives(n,r.map(a=>{let s={ALT:o(()=>a.ALT(i),"ALT")},l=a.GATE;return l&&(s.GATE=()=>l(i)),s}))}}function aFe(t,e){if(e.elements.length===1)return gp(t,e.elements[0]);let r=[];for(let l of e.elements){let u={ALT:gp(t,l,!0)},h=xE(l);h&&(u.GATE=Vu(h)),r.push(u)}let n=t.or++,i=o((l,u)=>{let h=u.getRuleStack().join("-");return`uGroup_${l}_${h}`},"idFunc"),a=o(l=>t.parser.alternatives(n,r.map((u,h)=>{let f={ALT:o(()=>!0,"ALT")},d=t.parser;f.ALT=()=>{if(u.ALT(l),!d.isRecording()){let m=i(n,d);d.unorderedGroups.get(m)||d.unorderedGroups.set(m,[]);let g=d.unorderedGroups.get(m);typeof g?.[h]>"u"&&(g[h]=!0)}};let p=u.GATE;return p?f.GATE=()=>p(l):f.GATE=()=>{let m=d.unorderedGroups.get(i(n,d));return!m?.[h]},f})),"alternatives"),s=Lle(t,xE(e),a,"*");return l=>{s(l),t.parser.isRecording()||t.parser.unorderedGroups.delete(i(n,t.parser))}}function sFe(t,e){let r=e.elements.map(n=>gp(t,n));return n=>r.forEach(i=>i(n))}function xE(t){if(sf(t))return t.guardCondition}function Dle(t,e,r=e.terminal){if(r)if(Il(r)&&Oa(r.rule.ref)){let n=r.rule.ref,i=t.subrule++;return a=>t.parser.subrule(i,Rle(t,n),!1,e,a)}else if(Il(r)&&so(r.rule.ref)){let n=t.consume++,i=xM(t,r.rule.ref.name);return()=>t.parser.consume(n,i,e)}else if(Ho(r)){let n=t.consume++,i=xM(t,r.value);return()=>t.parser.consume(n,i,e)}else throw new Error("Could not build cross reference parser");else{if(!e.type.ref)throw new Error("Could not resolve reference to type: "+e.type.$refText);let n=kk(e.type.ref),i=n?.terminal;if(!i)throw new Error("Could not find name assignment for type: "+J2(e.type.ref));return Dle(t,e,i)}}function oFe(t,e){let r=t.consume++,n=t.tokens[e.value];if(!n)throw new Error("Could not find token for keyword: "+e.value);return()=>t.parser.consume(r,n,e)}function Lle(t,e,r,n){let i=e&&Vu(e);if(!n)if(i){let a=t.or++;return s=>t.parser.alternatives(a,[{ALT:o(()=>r(s),"ALT"),GATE:o(()=>i(s),"GATE")},{ALT:lE(),GATE:o(()=>!i(s),"GATE")}])}else return r;if(n==="*"){let a=t.many++;return s=>t.parser.many(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else if(n==="+"){let a=t.many++;if(i){let s=t.or++;return l=>t.parser.alternatives(s,[{ALT:o(()=>t.parser.atLeastOne(a,{DEF:o(()=>r(l),"DEF")}),"ALT"),GATE:o(()=>i(l),"GATE")},{ALT:lE(),GATE:o(()=>!i(l),"GATE")}])}else return s=>t.parser.atLeastOne(a,{DEF:o(()=>r(s),"DEF")})}else if(n==="?"){let a=t.optional++;return s=>t.parser.optional(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else Lc(n)}function Rle(t,e){let r=lFe(t,e),n=t.parser.getRule(r);if(!n)throw new Error(`Rule "${r}" not found."`);return n}function lFe(t,e){if(Oa(e))return e.name;if(t.ruleNames.has(e))return t.ruleNames.get(e);{let r=e,n=r.$container,i=e.$type;for(;!Oa(n);)(sf(n)||mk(n)||yk(n))&&(i=n.elements.indexOf(r).toString()+":"+i),r=n,n=n.$container;return i=n.name+":"+i,t.ruleNames.set(e,i),i}}function xM(t,e){let r=t.tokens[e];if(!r)throw new Error(`Token "${e}" not found."`);return r}var bE=N(()=>{"use strict";cf();Rc();uk();Ps();Ol();o(Rx,"createParser");o(eFe,"buildRules");o(gp,"buildElement");o(tFe,"buildAction");o(rFe,"buildRuleCall");o(nFe,"buildRuleCallPredicate");o(Vu,"buildPredicate");o(iFe,"buildAlternatives");o(aFe,"buildUnorderedGroup");o(sFe,"buildGroup");o(xE,"getGuardCondition");o(Dle,"buildCrossReference");o(oFe,"buildKeyword");o(Lle,"wrap");o(Rle,"getRule");o(lFe,"getRuleName");o(xM,"getToken")});function bM(t){let e=t.Grammar,r=t.parser.Lexer,n=new Dx(t);return Rx(e,n,r.definition),n.finalize(),n}var wM=N(()=>{"use strict";Lx();bE();o(bM,"createCompletionParser")});function TM(t){let e=Nle(t);return e.finalize(),e}function Nle(t){let e=t.Grammar,r=t.parser.Lexer,n=new _x(t);return Rx(e,n,r.definition)}var kM=N(()=>{"use strict";Lx();bE();o(TM,"createLangiumParser");o(Nle,"prepareLangiumParser")});var Uu,wE=N(()=>{"use strict";cf();Rc();is();Ol();Lg();Ps();Uu=class{static{o(this,"DefaultTokenBuilder")}constructor(){this.diagnostics=[]}buildTokens(e,r){let n=en(K2(e,!1)),i=this.buildTerminalTokens(n),a=this.buildKeywordTokens(n,i,r);return i.forEach(s=>{let l=s.PATTERN;typeof l=="object"&&l&&"test"in l&&Dg(l)?a.unshift(s):a.push(s)}),a}flushLexingReport(e){return{diagnostics:this.popDiagnostics()}}popDiagnostics(){let e=[...this.diagnostics];return this.diagnostics=[],e}buildTerminalTokens(e){return e.filter(so).filter(r=>!r.fragment).map(r=>this.buildTerminalToken(r)).toArray()}buildTerminalToken(e){let r=Ng(e),n=this.requiresCustomPattern(r)?this.regexPatternFunction(r):r,i={name:e.name,PATTERN:n};return typeof n=="function"&&(i.LINE_BREAKS=!0),e.hidden&&(i.GROUP=Dg(r)?Xn.SKIPPED:"hidden"),i}requiresCustomPattern(e){return e.flags.includes("u")||e.flags.includes("s")?!0:!!(e.source.includes("?<=")||e.source.includes("?<!"))}regexPatternFunction(e){let r=new RegExp(e,e.flags+"y");return(n,i)=>(r.lastIndex=i,r.exec(n))}buildKeywordTokens(e,r,n){return e.filter(Oa).flatMap(i=>Nc(i).filter(Ho)).distinct(i=>i.value).toArray().sort((i,a)=>a.value.length-i.value.length).map(i=>this.buildKeywordToken(i,r,!!n?.caseInsensitive))}buildKeywordToken(e,r,n){let i=this.buildKeywordPattern(e,n),a={name:e.value,PATTERN:i,LONGER_ALT:this.findLongerAlt(e,r)};return typeof i=="function"&&(a.LINE_BREAKS=!0),a}buildKeywordPattern(e,r){return r?new RegExp(tN(e.value)):e.value}findLongerAlt(e,r){return r.reduce((n,i)=>{let a=i?.PATTERN;return a?.source&&rN("^"+a.source+"$",e.value)&&n.push(i),n},[])}}});var yp,Oc,EM=N(()=>{"use strict";Rc();Ol();yp=class{static{o(this,"DefaultValueConverter")}convert(e,r){let n=r.grammarSource;if(ep(n)&&(n=aN(n)),Il(n)){let i=n.rule.ref;if(!i)throw new Error("This cst node was not parsed by a rule.");return this.runConverter(i,e,r)}return e}runConverter(e,r,n){var i;switch(e.name.toUpperCase()){case"INT":return Oc.convertInt(r);case"STRING":return Oc.convertString(r);case"ID":return Oc.convertID(r)}switch((i=fN(e))===null||i===void 0?void 0:i.toLowerCase()){case"number":return Oc.convertNumber(r);case"boolean":return Oc.convertBoolean(r);case"bigint":return Oc.convertBigint(r);case"date":return Oc.convertDate(r);default:return r}}};(function(t){function e(h){let f="";for(let d=1;d<h.length-1;d++){let p=h.charAt(d);if(p==="\\"){let m=h.charAt(++d);f+=r(m)}else f+=p}return f}o(e,"convertString"),t.convertString=e;function r(h){switch(h){case"b":return"\b";case"f":return"\f";case"n":return`
806 +`;case"r":return"\r";case"t":return" ";case"v":return"\v";case"0":return"\0";default:return h}}o(r,"convertEscapeCharacter");function n(h){return h.charAt(0)==="^"?h.substring(1):h}o(n,"convertID"),t.convertID=n;function i(h){return parseInt(h)}o(i,"convertInt"),t.convertInt=i;function a(h){return BigInt(h)}o(a,"convertBigint"),t.convertBigint=a;function s(h){return new Date(h)}o(s,"convertDate"),t.convertDate=s;function l(h){return Number(h)}o(l,"convertNumber"),t.convertNumber=l;function u(h){return h.toLowerCase()==="true"}o(u,"convertBoolean"),t.convertBoolean=u})(Oc||(Oc={}))});var _M=Mi(AM=>{"use strict";Object.defineProperty(AM,"__esModule",{value:!0});var SM;function CM(){if(SM===void 0)throw new Error("No runtime abstraction layer installed");return SM}o(CM,"RAL");(function(t){function e(r){if(r===void 0)throw new Error("No runtime abstraction layer provided");SM=r}o(e,"install"),t.install=e})(CM||(CM={}));AM.default=CM});var Ole=Mi(Ba=>{"use strict";Object.defineProperty(Ba,"__esModule",{value:!0});Ba.stringArray=Ba.array=Ba.func=Ba.error=Ba.number=Ba.string=Ba.boolean=void 0;function cFe(t){return t===!0||t===!1}o(cFe,"boolean");Ba.boolean=cFe;function Mle(t){return typeof t=="string"||t instanceof String}o(Mle,"string");Ba.string=Mle;function uFe(t){return typeof t=="number"||t instanceof Number}o(uFe,"number");Ba.number=uFe;function hFe(t){return t instanceof Error}o(hFe,"error");Ba.error=hFe;function fFe(t){return typeof t=="function"}o(fFe,"func");Ba.func=fFe;function Ile(t){return Array.isArray(t)}o(Ile,"array");Ba.array=Ile;function dFe(t){return Ile(t)&&t.every(e=>Mle(e))}o(dFe,"stringArray");Ba.stringArray=dFe});var LM=Mi(o1=>{"use strict";Object.defineProperty(o1,"__esModule",{value:!0});o1.Emitter=o1.Event=void 0;var pFe=_M(),Ple;(function(t){let e={dispose(){}};t.None=function(){return e}})(Ple||(o1.Event=Ple={}));var DM=class{static{o(this,"CallbackList")}add(e,r=null,n){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(e),this._contexts.push(r),Array.isArray(n)&&n.push({dispose:o(()=>this.remove(e,r),"dispose")})}remove(e,r=null){if(!this._callbacks)return;let n=!1;for(let i=0,a=this._callbacks.length;i<a;i++)if(this._callbacks[i]===e)if(this._contexts[i]===r){this._callbacks.splice(i,1),this._contexts.splice(i,1);return}else n=!0;if(n)throw new Error("When adding a listener with a context, you should remove it with the same context")}invoke(...e){if(!this._callbacks)return[];let r=[],n=this._callbacks.slice(0),i=this._contexts.slice(0);for(let a=0,s=n.length;a<s;a++)try{r.push(n[a].apply(i[a],e))}catch(l){(0,pFe.default)().console.error(l)}return r}isEmpty(){return!this._callbacks||this._callbacks.length===0}dispose(){this._callbacks=void 0,this._contexts=void 0}},TE=class t{static{o(this,"Emitter")}constructor(e){this._options=e}get event(){return this._event||(this._event=(e,r,n)=>{this._callbacks||(this._callbacks=new DM),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(e,r);let i={dispose:o(()=>{this._callbacks&&(this._callbacks.remove(e,r),i.dispose=t._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))},"dispose")};return Array.isArray(n)&&n.push(i),i}),this._event}fire(e){this._callbacks&&this._callbacks.invoke.call(this._callbacks,e)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}};o1.Emitter=TE;TE._noop=function(){}});var Ble=Mi(l1=>{"use strict";Object.defineProperty(l1,"__esModule",{value:!0});l1.CancellationTokenSource=l1.CancellationToken=void 0;var mFe=_M(),gFe=Ole(),RM=LM(),kE;(function(t){t.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:RM.Event.None}),t.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:RM.Event.None});function e(r){let n=r;return n&&(n===t.None||n===t.Cancelled||gFe.boolean(n.isCancellationRequested)&&!!n.onCancellationRequested)}o(e,"is"),t.is=e})(kE||(l1.CancellationToken=kE={}));var yFe=Object.freeze(function(t,e){let r=(0,mFe.default)().timer.setTimeout(t.bind(e),0);return{dispose(){r.dispose()}}}),EE=class{static{o(this,"MutableToken")}constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?yFe:(this._emitter||(this._emitter=new RM.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}},NM=class{static{o(this,"CancellationTokenSource")}get token(){return this._token||(this._token=new EE),this._token}cancel(){this._token?this._token.cancel():this._token=kE.Cancelled}dispose(){this._token?this._token instanceof EE&&this._token.dispose():this._token=kE.None}};l1.CancellationTokenSource=NM});var yr={};var qo=N(()=>{"use strict";Sr(yr,Sa(Ble(),1))});function MM(){return new Promise(t=>{typeof setImmediate>"u"?setTimeout(t,0):setImmediate(t)})}function CE(){return SE=performance.now(),new yr.CancellationTokenSource}function $le(t){Fle=t}function Bc(t){return t===Pc}async function xi(t){if(t===yr.CancellationToken.None)return;let e=performance.now();if(e-SE>=Fle&&(SE=e,await MM(),SE=performance.now()),t.isCancellationRequested)throw Pc}var SE,Fle,Pc,cs,Yo=N(()=>{"use strict";qo();o(MM,"delayNextTick");SE=0,Fle=10;o(CE,"startCancelableOperation");o($le,"setInterruptionPeriod");Pc=Symbol("OperationCancelled");o(Bc,"isOperationCancelled");o(xi,"interruptAndCheck");cs=class{static{o(this,"Deferred")}constructor(){this.promise=new Promise((e,r)=>{this.resolve=n=>(e(n),this),this.reject=n=>(r(n),this)})}}});function IM(t,e){if(t.length<=1)return t;let r=t.length/2|0,n=t.slice(0,r),i=t.slice(r);IM(n,e),IM(i,e);let a=0,s=0,l=0;for(;a<n.length&&s<i.length;)e(n[a],i[s])<=0?t[l++]=n[a++]:t[l++]=i[s++];for(;a<n.length;)t[l++]=n[a++];for(;s<i.length;)t[l++]=i[s++];return t}function zle(t,e,r=0){let n=e?[r]:[];for(let i=0;i<t.length;i++){let a=t.charCodeAt(i);Gle(a)&&(a===13&&i+1<t.length&&t.charCodeAt(i+1)===10&&i++,n.push(r+i+1))}return n}function Gle(t){return t===13||t===10}function Vle(t){let e=t.start,r=t.end;return e.line>r.line||e.line===r.line&&e.character>r.character?{start:r,end:e}:t}function vFe(t){let e=Vle(t.range);return e!==t.range?{newText:t.newText,range:e}:t}var AE,c1,Ule=N(()=>{"use strict";AE=class t{static{o(this,"FullTextDocument")}constructor(e,r,n,i){this._uri=e,this._languageId=r,this._version=n,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let r=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(r,n)}return this._content}update(e,r){for(let n of e)if(t.isIncremental(n)){let i=Vle(n.range),a=this.offsetAt(i.start),s=this.offsetAt(i.end);this._content=this._content.substring(0,a)+n.text+this._content.substring(s,this._content.length);let l=Math.max(i.start.line,0),u=Math.max(i.end.line,0),h=this._lineOffsets,f=zle(n.text,!1,a);if(u-l===f.length)for(let p=0,m=f.length;p<m;p++)h[p+l+1]=f[p];else f.length<1e4?h.splice(l+1,u-l,...f):this._lineOffsets=h=h.slice(0,l+1).concat(f,h.slice(u+1));let d=n.text.length-(s-a);if(d!==0)for(let p=l+1+f.length,m=h.length;p<m;p++)h[p]=h[p]+d}else if(t.isFull(n))this._content=n.text,this._lineOffsets=void 0;else throw new Error("Unknown change event received");this._version=r}getLineOffsets(){return this._lineOffsets===void 0&&(this._lineOffsets=zle(this._content,!0)),this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let r=this.getLineOffsets(),n=0,i=r.length;if(i===0)return{line:0,character:e};for(;n<i;){let s=Math.floor((n+i)/2);r[s]>e?i=s:n=s+1}let a=n-1;return e=this.ensureBeforeEOL(e,r[a]),{line:a,character:e-r[a]}}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line];if(e.character<=0)return n;let i=e.line+1<r.length?r[e.line+1]:this._content.length,a=Math.min(n+e.character,i);return this.ensureBeforeEOL(a,n)}ensureBeforeEOL(e,r){for(;e>r&&Gle(this._content.charCodeAt(e-1));)e--;return e}get lineCount(){return this.getLineOffsets().length}static isIncremental(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range!==void 0&&(r.rangeLength===void 0||typeof r.rangeLength=="number")}static isFull(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range===void 0&&r.rangeLength===void 0}};(function(t){function e(i,a,s,l){return new AE(i,a,s,l)}o(e,"create"),t.create=e;function r(i,a,s){if(i instanceof AE)return i.update(a,s),i;throw new Error("TextDocument.update: document must be created by TextDocument.create")}o(r,"update"),t.update=r;function n(i,a){let s=i.getText(),l=IM(a.map(vFe),(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),u=0,h=[];for(let f of l){let d=i.offsetAt(f.range.start);if(d<u)throw new Error("Overlapping edit");d>u&&h.push(s.substring(u,d)),f.newText.length&&h.push(f.newText),u=i.offsetAt(f.range.end)}return h.push(s.substr(u)),h.join("")}o(n,"applyEdits"),t.applyEdits=n})(c1||(c1={}));o(IM,"mergeSort");o(zle,"computeLineOffsets");o(Gle,"isEOL");o(Vle,"getWellformedRange");o(vFe,"getWellformedEdit")});var Hle,us,u1,OM=N(()=>{"use strict";(()=>{"use strict";var t={470:i=>{function a(u){if(typeof u!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(u))}o(a,"e");function s(u,h){for(var f,d="",p=0,m=-1,g=0,y=0;y<=u.length;++y){if(y<u.length)f=u.charCodeAt(y);else{if(f===47)break;f=47}if(f===47){if(!(m===y-1||g===1))if(m!==y-1&&g===2){if(d.length<2||p!==2||d.charCodeAt(d.length-1)!==46||d.charCodeAt(d.length-2)!==46){if(d.length>2){var v=d.lastIndexOf("/");if(v!==d.length-1){v===-1?(d="",p=0):p=(d=d.slice(0,v)).length-1-d.lastIndexOf("/"),m=y,g=0;continue}}else if(d.length===2||d.length===1){d="",p=0,m=y,g=0;continue}}h&&(d.length>0?d+="/..":d="..",p=2)}else d.length>0?d+="/"+u.slice(m+1,y):d=u.slice(m+1,y),p=y-m-1;m=y,g=0}else f===46&&g!==-1?++g:g=-1}return d}o(s,"r");var l={resolve:o(function(){for(var u,h="",f=!1,d=arguments.length-1;d>=-1&&!f;d--){var p;d>=0?p=arguments[d]:(u===void 0&&(u=process.cwd()),p=u),a(p),p.length!==0&&(h=p+"/"+h,f=p.charCodeAt(0)===47)}return h=s(h,!f),f?h.length>0?"/"+h:"/":h.length>0?h:"."},"resolve"),normalize:o(function(u){if(a(u),u.length===0)return".";var h=u.charCodeAt(0)===47,f=u.charCodeAt(u.length-1)===47;return(u=s(u,!h)).length!==0||h||(u="."),u.length>0&&f&&(u+="/"),h?"/"+u:u},"normalize"),isAbsolute:o(function(u){return a(u),u.length>0&&u.charCodeAt(0)===47},"isAbsolute"),join:o(function(){if(arguments.length===0)return".";for(var u,h=0;h<arguments.length;++h){var f=arguments[h];a(f),f.length>0&&(u===void 0?u=f:u+="/"+f)}return u===void 0?".":l.normalize(u)},"join"),relative:o(function(u,h){if(a(u),a(h),u===h||(u=l.resolve(u))===(h=l.resolve(h)))return"";for(var f=1;f<u.length&&u.charCodeAt(f)===47;++f);for(var d=u.length,p=d-f,m=1;m<h.length&&h.charCodeAt(m)===47;++m);for(var g=h.length-m,y=p<g?p:g,v=-1,x=0;x<=y;++x){if(x===y){if(g>y){if(h.charCodeAt(m+x)===47)return h.slice(m+x+1);if(x===0)return h.slice(m+x)}else p>y&&(u.charCodeAt(f+x)===47?v=x:x===0&&(v=0));break}var b=u.charCodeAt(f+x);if(b!==h.charCodeAt(m+x))break;b===47&&(v=x)}var w="";for(x=f+v+1;x<=d;++x)x!==d&&u.charCodeAt(x)!==47||(w.length===0?w+="..":w+="/..");return w.length>0?w+h.slice(m+v):(m+=v,h.charCodeAt(m)===47&&++m,h.slice(m))},"relative"),_makeLong:o(function(u){return u},"_makeLong"),dirname:o(function(u){if(a(u),u.length===0)return".";for(var h=u.charCodeAt(0),f=h===47,d=-1,p=!0,m=u.length-1;m>=1;--m)if((h=u.charCodeAt(m))===47){if(!p){d=m;break}}else p=!1;return d===-1?f?"/":".":f&&d===1?"//":u.slice(0,d)},"dirname"),basename:o(function(u,h){if(h!==void 0&&typeof h!="string")throw new TypeError('"ext" argument must be a string');a(u);var f,d=0,p=-1,m=!0;if(h!==void 0&&h.length>0&&h.length<=u.length){if(h.length===u.length&&h===u)return"";var g=h.length-1,y=-1;for(f=u.length-1;f>=0;--f){var v=u.charCodeAt(f);if(v===47){if(!m){d=f+1;break}}else y===-1&&(m=!1,y=f+1),g>=0&&(v===h.charCodeAt(g)?--g==-1&&(p=f):(g=-1,p=y))}return d===p?p=y:p===-1&&(p=u.length),u.slice(d,p)}for(f=u.length-1;f>=0;--f)if(u.charCodeAt(f)===47){if(!m){d=f+1;break}}else p===-1&&(m=!1,p=f+1);return p===-1?"":u.slice(d,p)},"basename"),extname:o(function(u){a(u);for(var h=-1,f=0,d=-1,p=!0,m=0,g=u.length-1;g>=0;--g){var y=u.charCodeAt(g);if(y!==47)d===-1&&(p=!1,d=g+1),y===46?h===-1?h=g:m!==1&&(m=1):h!==-1&&(m=-1);else if(!p){f=g+1;break}}return h===-1||d===-1||m===0||m===1&&h===d-1&&h===f+1?"":u.slice(h,d)},"extname"),format:o(function(u){if(u===null||typeof u!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof u);return function(h,f){var d=f.dir||f.root,p=f.base||(f.name||"")+(f.ext||"");return d?d===f.root?d+p:d+"/"+p:p}(0,u)},"format"),parse:o(function(u){a(u);var h={root:"",dir:"",base:"",ext:"",name:""};if(u.length===0)return h;var f,d=u.charCodeAt(0),p=d===47;p?(h.root="/",f=1):f=0;for(var m=-1,g=0,y=-1,v=!0,x=u.length-1,b=0;x>=f;--x)if((d=u.charCodeAt(x))!==47)y===-1&&(v=!1,y=x+1),d===46?m===-1?m=x:b!==1&&(b=1):m!==-1&&(b=-1);else if(!v){g=x+1;break}return m===-1||y===-1||b===0||b===1&&m===y-1&&m===g+1?y!==-1&&(h.base=h.name=g===0&&p?u.slice(1,y):u.slice(g,y)):(g===0&&p?(h.name=u.slice(1,m),h.base=u.slice(1,y)):(h.name=u.slice(g,m),h.base=u.slice(g,y)),h.ext=u.slice(m,y)),g>0?h.dir=u.slice(0,g-1):p&&(h.dir="/"),h},"parse"),sep:"/",delimiter:":",win32:null,posix:null};l.posix=l,i.exports=l}},e={};function r(i){var a=e[i];if(a!==void 0)return a.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}o(r,"r"),r.d=(i,a)=>{for(var s in a)r.o(a,s)&&!r.o(i,s)&&Object.defineProperty(i,s,{enumerable:!0,get:a[s]})},r.o=(i,a)=>Object.prototype.hasOwnProperty.call(i,a),r.r=i=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})};var n={};(()=>{let i;r.r(n),r.d(n,{URI:o(()=>p,"URI"),Utils:o(()=>I,"Utils")}),typeof process=="object"?i=process.platform==="win32":typeof navigator=="object"&&(i=navigator.userAgent.indexOf("Windows")>=0);let a=/^\w[\w\d+.-]*$/,s=/^\//,l=/^\/\//;function u(D,k){if(!D.scheme&&k)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${D.authority}", path: "${D.path}", query: "${D.query}", fragment: "${D.fragment}"}`);if(D.scheme&&!a.test(D.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(D.path){if(D.authority){if(!s.test(D.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(l.test(D.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}o(u,"s");let h="",f="/",d=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class p{static{o(this,"f")}static isUri(k){return k instanceof p||!!k&&typeof k.authority=="string"&&typeof k.fragment=="string"&&typeof k.path=="string"&&typeof k.query=="string"&&typeof k.scheme=="string"&&typeof k.fsPath=="string"&&typeof k.with=="function"&&typeof k.toString=="function"}scheme;authority;path;query;fragment;constructor(k,L,R,O,M,B=!1){typeof k=="object"?(this.scheme=k.scheme||h,this.authority=k.authority||h,this.path=k.path||h,this.query=k.query||h,this.fragment=k.fragment||h):(this.scheme=function(F,P){return F||P?F:"file"}(k,B),this.authority=L||h,this.path=function(F,P){switch(F){case"https":case"http":case"file":P?P[0]!==f&&(P=f+P):P=f}return P}(this.scheme,R||h),this.query=O||h,this.fragment=M||h,u(this,B))}get fsPath(){return b(this,!1)}with(k){if(!k)return this;let{scheme:L,authority:R,path:O,query:M,fragment:B}=k;return L===void 0?L=this.scheme:L===null&&(L=h),R===void 0?R=this.authority:R===null&&(R=h),O===void 0?O=this.path:O===null&&(O=h),M===void 0?M=this.query:M===null&&(M=h),B===void 0?B=this.fragment:B===null&&(B=h),L===this.scheme&&R===this.authority&&O===this.path&&M===this.query&&B===this.fragment?this:new g(L,R,O,M,B)}static parse(k,L=!1){let R=d.exec(k);return R?new g(R[2]||h,E(R[4]||h),E(R[5]||h),E(R[7]||h),E(R[9]||h),L):new g(h,h,h,h,h)}static file(k){let L=h;if(i&&(k=k.replace(/\\/g,f)),k[0]===f&&k[1]===f){let R=k.indexOf(f,2);R===-1?(L=k.substring(2),k=f):(L=k.substring(2,R),k=k.substring(R)||f)}return new g("file",L,k,h,h)}static from(k){let L=new g(k.scheme,k.authority,k.path,k.query,k.fragment);return u(L,!0),L}toString(k=!1){return w(this,k)}toJSON(){return this}static revive(k){if(k){if(k instanceof p)return k;{let L=new g(k);return L._formatted=k.external,L._fsPath=k._sep===m?k.fsPath:null,L}}return k}}let m=i?1:void 0;class g extends p{static{o(this,"l")}_formatted=null;_fsPath=null;get fsPath(){return this._fsPath||(this._fsPath=b(this,!1)),this._fsPath}toString(k=!1){return k?w(this,!0):(this._formatted||(this._formatted=w(this,!1)),this._formatted)}toJSON(){let k={$mid:1};return this._fsPath&&(k.fsPath=this._fsPath,k._sep=m),this._formatted&&(k.external=this._formatted),this.path&&(k.path=this.path),this.scheme&&(k.scheme=this.scheme),this.authority&&(k.authority=this.authority),this.query&&(k.query=this.query),this.fragment&&(k.fragment=this.fragment),k}}let y={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function v(D,k,L){let R,O=-1;for(let M=0;M<D.length;M++){let B=D.charCodeAt(M);if(B>=97&&B<=122||B>=65&&B<=90||B>=48&&B<=57||B===45||B===46||B===95||B===126||k&&B===47||L&&B===91||L&&B===93||L&&B===58)O!==-1&&(R+=encodeURIComponent(D.substring(O,M)),O=-1),R!==void 0&&(R+=D.charAt(M));else{R===void 0&&(R=D.substr(0,M));let F=y[B];F!==void 0?(O!==-1&&(R+=encodeURIComponent(D.substring(O,M)),O=-1),R+=F):O===-1&&(O=M)}}return O!==-1&&(R+=encodeURIComponent(D.substring(O))),R!==void 0?R:D}o(v,"d");function x(D){let k;for(let L=0;L<D.length;L++){let R=D.charCodeAt(L);R===35||R===63?(k===void 0&&(k=D.substr(0,L)),k+=y[R]):k!==void 0&&(k+=D[L])}return k!==void 0?k:D}o(x,"p");function b(D,k){let L;return L=D.authority&&D.path.length>1&&D.scheme==="file"?`//${D.authority}${D.path}`:D.path.charCodeAt(0)===47&&(D.path.charCodeAt(1)>=65&&D.path.charCodeAt(1)<=90||D.path.charCodeAt(1)>=97&&D.path.charCodeAt(1)<=122)&&D.path.charCodeAt(2)===58?k?D.path.substr(1):D.path[1].toLowerCase()+D.path.substr(2):D.path,i&&(L=L.replace(/\//g,"\\")),L}o(b,"m");function w(D,k){let L=k?x:v,R="",{scheme:O,authority:M,path:B,query:F,fragment:P}=D;if(O&&(R+=O,R+=":"),(M||O==="file")&&(R+=f,R+=f),M){let z=M.indexOf("@");if(z!==-1){let $=M.substr(0,z);M=M.substr(z+1),z=$.lastIndexOf(":"),z===-1?R+=L($,!1,!1):(R+=L($.substr(0,z),!1,!1),R+=":",R+=L($.substr(z+1),!1,!0)),R+="@"}M=M.toLowerCase(),z=M.lastIndexOf(":"),z===-1?R+=L(M,!1,!0):(R+=L(M.substr(0,z),!1,!0),R+=M.substr(z))}if(B){if(B.length>=3&&B.charCodeAt(0)===47&&B.charCodeAt(2)===58){let z=B.charCodeAt(1);z>=65&&z<=90&&(B=`/${String.fromCharCode(z+32)}:${B.substr(3)}`)}else if(B.length>=2&&B.charCodeAt(1)===58){let z=B.charCodeAt(0);z>=65&&z<=90&&(B=`${String.fromCharCode(z+32)}:${B.substr(2)}`)}R+=L(B,!0,!1)}return F&&(R+="?",R+=L(F,!1,!1)),P&&(R+="#",R+=k?P:v(P,!1,!1)),R}o(w,"y");function C(D){try{return decodeURIComponent(D)}catch{return D.length>3?D.substr(0,3)+C(D.substr(3)):D}}o(C,"v");let T=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function E(D){return D.match(T)?D.replace(T,k=>C(k)):D}o(E,"C");var A=r(470);let S=A.posix||A,_="/";var I;(function(D){D.joinPath=function(k,...L){return k.with({path:S.join(k.path,...L)})},D.resolvePath=function(k,...L){let R=k.path,O=!1;R[0]!==_&&(R=_+R,O=!0);let M=S.resolve(R,...L);return O&&M[0]===_&&!k.authority&&(M=M.substring(1)),k.with({path:M})},D.dirname=function(k){if(k.path.length===0||k.path===_)return k;let L=S.dirname(k.path);return L.length===1&&L.charCodeAt(0)===46&&(L=""),k.with({path:L})},D.basename=function(k){return S.basename(k.path)},D.extname=function(k){return S.extname(k.path)}})(I||(I={}))})(),Hle=n})();({URI:us,Utils:u1}=Hle)});var hs,Fc=N(()=>{"use strict";OM();(function(t){t.basename=u1.basename,t.dirname=u1.dirname,t.extname=u1.extname,t.joinPath=u1.joinPath,t.resolvePath=u1.resolvePath;function e(i,a){return i?.toString()===a?.toString()}o(e,"equals"),t.equals=e;function r(i,a){let s=typeof i=="string"?i:i.path,l=typeof a=="string"?a:a.path,u=s.split("/").filter(m=>m.length>0),h=l.split("/").filter(m=>m.length>0),f=0;for(;f<u.length&&u[f]===h[f];f++);let d="../".repeat(u.length-f),p=h.slice(f).join("/");return d+p}o(r,"relative"),t.relative=r;function n(i){return us.parse(i.toString()).toString()}o(n,"normalize"),t.normalize=n})(hs||(hs={}))});var kn,Nx,Mx,h1=N(()=>{"use strict";Ule();h1();qo();Ps();Fc();(function(t){t[t.Changed=0]="Changed",t[t.Parsed=1]="Parsed",t[t.IndexedContent=2]="IndexedContent",t[t.ComputedScopes=3]="ComputedScopes",t[t.Linked=4]="Linked",t[t.IndexedReferences=5]="IndexedReferences",t[t.Validated=6]="Validated"})(kn||(kn={}));Nx=class{static{o(this,"DefaultLangiumDocumentFactory")}constructor(e){this.serviceRegistry=e.ServiceRegistry,this.textDocuments=e.workspace.TextDocuments,this.fileSystemProvider=e.workspace.FileSystemProvider}async fromUri(e,r=yr.CancellationToken.None){let n=await this.fileSystemProvider.readFile(e);return this.createAsync(e,n,r)}fromTextDocument(e,r,n){return r=r??us.parse(e.uri),yr.CancellationToken.is(n)?this.createAsync(r,e,n):this.create(r,e,n)}fromString(e,r,n){return yr.CancellationToken.is(n)?this.createAsync(r,e,n):this.create(r,e,n)}fromModel(e,r){return this.create(r,{$model:e})}create(e,r,n){if(typeof r=="string"){let i=this.parse(e,r,n);return this.createLangiumDocument(i,e,void 0,r)}else if("$model"in r){let i={value:r.$model,parserErrors:[],lexerErrors:[]};return this.createLangiumDocument(i,e)}else{let i=this.parse(e,r.getText(),n);return this.createLangiumDocument(i,e,r)}}async createAsync(e,r,n){if(typeof r=="string"){let i=await this.parseAsync(e,r,n);return this.createLangiumDocument(i,e,void 0,r)}else{let i=await this.parseAsync(e,r.getText(),n);return this.createLangiumDocument(i,e,r)}}createLangiumDocument(e,r,n,i){let a;if(n)a={parseResult:e,uri:r,state:kn.Parsed,references:[],textDocument:n};else{let s=this.createTextDocumentGetter(r,i);a={parseResult:e,uri:r,state:kn.Parsed,references:[],get textDocument(){return s()}}}return e.value.$document=a,a}async update(e,r){var n,i;let a=(n=e.parseResult.value.$cstNode)===null||n===void 0?void 0:n.root.fullText,s=(i=this.textDocuments)===null||i===void 0?void 0:i.get(e.uri.toString()),l=s?s.getText():await this.fileSystemProvider.readFile(e.uri);if(s)Object.defineProperty(e,"textDocument",{value:s});else{let u=this.createTextDocumentGetter(e.uri,l);Object.defineProperty(e,"textDocument",{get:u})}return a!==l&&(e.parseResult=await this.parseAsync(e.uri,l,r),e.parseResult.value.$document=e),e.state=kn.Parsed,e}parse(e,r,n){return this.serviceRegistry.getServices(e).parser.LangiumParser.parse(r,n)}parseAsync(e,r,n){return this.serviceRegistry.getServices(e).parser.AsyncParser.parse(r,n)}createTextDocumentGetter(e,r){let n=this.serviceRegistry,i;return()=>i??(i=c1.create(e.toString(),n.getServices(e).LanguageMetaData.languageId,0,r??""))}},Mx=class{static{o(this,"DefaultLangiumDocuments")}constructor(e){this.documentMap=new Map,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.serviceRegistry=e.ServiceRegistry}get all(){return en(this.documentMap.values())}addDocument(e){let r=e.uri.toString();if(this.documentMap.has(r))throw new Error(`A document with the URI '${r}' is already present.`);this.documentMap.set(r,e)}getDocument(e){let r=e.toString();return this.documentMap.get(r)}async getOrCreateDocument(e,r){let n=this.getDocument(e);return n||(n=await this.langiumDocumentFactory.fromUri(e,r),this.addDocument(n),n)}createDocument(e,r,n){if(n)return this.langiumDocumentFactory.fromString(r,e,n).then(i=>(this.addDocument(i),i));{let i=this.langiumDocumentFactory.fromString(r,e);return this.addDocument(i),i}}hasDocument(e){return this.documentMap.has(e.toString())}invalidateDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(this.serviceRegistry.getServices(e).references.Linker.unlink(n),n.state=kn.Changed,n.precomputedScopes=void 0,n.diagnostics=void 0),n}deleteDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(n.state=kn.Changed,this.documentMap.delete(r)),n}}});var PM,Ix,BM=N(()=>{"use strict";qo();Rl();is();Yo();h1();PM=Symbol("ref_resolving"),Ix=class{static{o(this,"DefaultLinker")}constructor(e){this.reflection=e.shared.AstReflection,this.langiumDocuments=()=>e.shared.workspace.LangiumDocuments,this.scopeProvider=e.references.ScopeProvider,this.astNodeLocator=e.workspace.AstNodeLocator}async link(e,r=yr.CancellationToken.None){for(let n of Wo(e.parseResult.value))await xi(r),Ag(n).forEach(i=>this.doLink(i,e))}doLink(e,r){var n;let i=e.reference;if(i._ref===void 0){i._ref=PM;try{let a=this.getCandidate(e);if(jd(a))i._ref=a;else if(i._nodeDescription=a,this.langiumDocuments().hasDocument(a.documentUri)){let s=this.loadAstNode(a);i._ref=s??this.createLinkingError(e,a)}else i._ref=void 0}catch(a){console.error(`An error occurred while resolving reference to '${i.$refText}':`,a);let s=(n=a.message)!==null&&n!==void 0?n:String(a);i._ref=Object.assign(Object.assign({},e),{message:`An error occurred while resolving reference to '${i.$refText}': ${s}`})}r.references.push(i)}}unlink(e){for(let r of e.references)delete r._ref,delete r._nodeDescription;e.references=[]}getCandidate(e){let n=this.scopeProvider.getScope(e).getElement(e.reference.$refText);return n??this.createLinkingError(e)}buildReference(e,r,n,i){let a=this,s={$refNode:n,$refText:i,get ref(){var l;if(ii(this._ref))return this._ref;if(kR(this._nodeDescription)){let u=a.loadAstNode(this._nodeDescription);this._ref=u??a.createLinkingError({reference:s,container:e,property:r},this._nodeDescription)}else if(this._ref===void 0){this._ref=PM;let u=H2(e).$document,h=a.getLinkedNode({reference:s,container:e,property:r});if(h.error&&u&&u.state<kn.ComputedScopes)return this._ref=void 0;this._ref=(l=h.node)!==null&&l!==void 0?l:h.error,this._nodeDescription=h.descr,u?.references.push(this)}else if(this._ref===PM)throw new Error(`Cyclic reference resolution detected: ${a.astNodeLocator.getAstNodePath(e)}/${r} (symbol '${i}')`);return ii(this._ref)?this._ref:void 0},get $nodeDescription(){return this._nodeDescription},get error(){return jd(this._ref)?this._ref:void 0}};return s}getLinkedNode(e){var r;try{let n=this.getCandidate(e);if(jd(n))return{error:n};let i=this.loadAstNode(n);return i?{node:i,descr:n}:{descr:n,error:this.createLinkingError(e,n)}}catch(n){console.error(`An error occurred while resolving reference to '${e.reference.$refText}':`,n);let i=(r=n.message)!==null&&r!==void 0?r:String(n);return{error:Object.assign(Object.assign({},e),{message:`An error occurred while resolving reference to '${e.reference.$refText}': ${i}`})}}}loadAstNode(e){if(e.node)return e.node;let r=this.langiumDocuments().getDocument(e.documentUri);if(r)return this.astNodeLocator.getAstNode(r.parseResult.value,e.path)}createLinkingError(e,r){let n=H2(e.container).$document;n&&n.state<kn.ComputedScopes&&console.warn(`Attempted reference resolution before document reached ComputedScopes state (${n.uri}).`);let i=this.reflection.getReferenceType(e);return Object.assign(Object.assign({},e),{message:`Could not resolve reference to ${i} named '${e.reference.$refText}'.`,targetDescription:r})}}});function Wle(t){return typeof t.name=="string"}var Ox,FM=N(()=>{"use strict";Ol();o(Wle,"isNamed");Ox=class{static{o(this,"DefaultNameProvider")}getName(e){if(Wle(e))return e.name}getNameNode(e){return Q2(e.$cstNode,"name")}}});var Px,$M=N(()=>{"use strict";Ol();Rl();is();Nl();Ps();Fc();Px=class{static{o(this,"DefaultReferences")}constructor(e){this.nameProvider=e.references.NameProvider,this.index=e.shared.workspace.IndexManager,this.nodeLocator=e.workspace.AstNodeLocator}findDeclaration(e){if(e){let r=hN(e),n=e.astNode;if(r&&n){let i=n[r.feature];if(va(i))return i.ref;if(Array.isArray(i)){for(let a of i)if(va(a)&&a.$refNode&&a.$refNode.offset<=e.offset&&a.$refNode.end>=e.end)return a.ref}}if(n){let i=this.nameProvider.getNameNode(n);if(i&&(i===e||SR(e,i)))return n}}}findDeclarationNode(e){let r=this.findDeclaration(e);if(r?.$cstNode){let n=this.nameProvider.getNameNode(r);return n??r.$cstNode}}findReferences(e,r){let n=[];if(r.includeDeclaration){let a=this.getReferenceToSelf(e);a&&n.push(a)}let i=this.index.findAllReferences(e,this.nodeLocator.getAstNodePath(e));return r.documentUri&&(i=i.filter(a=>hs.equals(a.sourceUri,r.documentUri))),n.push(...i),en(n)}getReferenceToSelf(e){let r=this.nameProvider.getNameNode(e);if(r){let n=Pa(e),i=this.nodeLocator.getAstNodePath(e);return{sourceUri:n.uri,sourcePath:i,targetUri:n.uri,targetPath:i,segment:Qd(r),local:!0}}}}});var Bl,vp,f1=N(()=>{"use strict";Ps();Bl=class{static{o(this,"MultiMap")}constructor(e){if(this.map=new Map,e)for(let[r,n]of e)this.add(r,n)}get size(){return zm.sum(en(this.map.values()).map(e=>e.length))}clear(){this.map.clear()}delete(e,r){if(r===void 0)return this.map.delete(e);{let n=this.map.get(e);if(n){let i=n.indexOf(r);if(i>=0)return n.length===1?this.map.delete(e):n.splice(i,1),!0}return!1}}get(e){var r;return(r=this.map.get(e))!==null&&r!==void 0?r:[]}has(e,r){if(r===void 0)return this.map.has(e);{let n=this.map.get(e);return n?n.indexOf(r)>=0:!1}}add(e,r){return this.map.has(e)?this.map.get(e).push(r):this.map.set(e,[r]),this}addAll(e,r){return this.map.has(e)?this.map.get(e).push(...r):this.map.set(e,Array.from(r)),this}forEach(e){this.map.forEach((r,n)=>r.forEach(i=>e(i,n,this)))}[Symbol.iterator](){return this.entries().iterator()}entries(){return en(this.map.entries()).flatMap(([e,r])=>r.map(n=>[e,n]))}keys(){return en(this.map.keys())}values(){return en(this.map.values()).flat()}entriesGroupedByKey(){return en(this.map.entries())}},vp=class{static{o(this,"BiMap")}get size(){return this.map.size}constructor(e){if(this.map=new Map,this.inverse=new Map,e)for(let[r,n]of e)this.set(r,n)}clear(){this.map.clear(),this.inverse.clear()}set(e,r){return this.map.set(e,r),this.inverse.set(r,e),this}get(e){return this.map.get(e)}getKey(e){return this.inverse.get(e)}delete(e){let r=this.map.get(e);return r!==void 0?(this.map.delete(e),this.inverse.delete(r),!0):!1}}});var Bx,zM=N(()=>{"use strict";qo();is();f1();Yo();Bx=class{static{o(this,"DefaultScopeComputation")}constructor(e){this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider}async computeExports(e,r=yr.CancellationToken.None){return this.computeExportsForNode(e.parseResult.value,e,void 0,r)}async computeExportsForNode(e,r,n=W2,i=yr.CancellationToken.None){let a=[];this.exportNode(e,a,r);for(let s of n(e))await xi(i),this.exportNode(s,a,r);return a}exportNode(e,r,n){let i=this.nameProvider.getName(e);i&&r.push(this.descriptions.createDescription(e,i,n))}async computeLocalScopes(e,r=yr.CancellationToken.None){let n=e.parseResult.value,i=new Bl;for(let a of Nc(n))await xi(r),this.processNode(a,e,i);return i}processNode(e,r,n){let i=e.$container;if(i){let a=this.nameProvider.getName(e);a&&n.add(i,this.descriptions.createDescription(e,a,r))}}}});var d1,Fx,xFe,GM=N(()=>{"use strict";Ps();d1=class{static{o(this,"StreamScope")}constructor(e,r,n){var i;this.elements=e,this.outerScope=r,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1}getAllElements(){return this.outerScope?this.elements.concat(this.outerScope.getAllElements()):this.elements}getElement(e){let r=this.caseInsensitive?this.elements.find(n=>n.name.toLowerCase()===e.toLowerCase()):this.elements.find(n=>n.name===e);if(r)return r;if(this.outerScope)return this.outerScope.getElement(e)}},Fx=class{static{o(this,"MapScope")}constructor(e,r,n){var i;this.elements=new Map,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1;for(let a of e){let s=this.caseInsensitive?a.name.toLowerCase():a.name;this.elements.set(s,a)}this.outerScope=r}getElement(e){let r=this.caseInsensitive?e.toLowerCase():e,n=this.elements.get(r);if(n)return n;if(this.outerScope)return this.outerScope.getElement(e)}getAllElements(){let e=en(this.elements.values());return this.outerScope&&(e=e.concat(this.outerScope.getAllElements())),e}},xFe={getElement(){},getAllElements(){return I2}}});var p1,$x,xp,_E,m1,DE=N(()=>{"use strict";p1=class{static{o(this,"DisposableCache")}constructor(){this.toDispose=[],this.isDisposed=!1}onDispose(e){this.toDispose.push(e)}dispose(){this.throwIfDisposed(),this.clear(),this.isDisposed=!0,this.toDispose.forEach(e=>e.dispose())}throwIfDisposed(){if(this.isDisposed)throw new Error("This cache has already been disposed")}},$x=class extends p1{static{o(this,"SimpleCache")}constructor(){super(...arguments),this.cache=new Map}has(e){return this.throwIfDisposed(),this.cache.has(e)}set(e,r){this.throwIfDisposed(),this.cache.set(e,r)}get(e,r){if(this.throwIfDisposed(),this.cache.has(e))return this.cache.get(e);if(r){let n=r();return this.cache.set(e,n),n}else return}delete(e){return this.throwIfDisposed(),this.cache.delete(e)}clear(){this.throwIfDisposed(),this.cache.clear()}},xp=class extends p1{static{o(this,"ContextCache")}constructor(e){super(),this.cache=new Map,this.converter=e??(r=>r)}has(e,r){return this.throwIfDisposed(),this.cacheForContext(e).has(r)}set(e,r,n){this.throwIfDisposed(),this.cacheForContext(e).set(r,n)}get(e,r,n){this.throwIfDisposed();let i=this.cacheForContext(e);if(i.has(r))return i.get(r);if(n){let a=n();return i.set(r,a),a}else return}delete(e,r){return this.throwIfDisposed(),this.cacheForContext(e).delete(r)}clear(e){if(this.throwIfDisposed(),e){let r=this.converter(e);this.cache.delete(r)}else this.cache.clear()}cacheForContext(e){let r=this.converter(e),n=this.cache.get(r);return n||(n=new Map,this.cache.set(r,n)),n}},_E=class extends xp{static{o(this,"DocumentCache")}constructor(e,r){super(n=>n.toString()),r?(this.toDispose.push(e.workspace.DocumentBuilder.onDocumentPhase(r,n=>{this.clear(n.uri.toString())})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{for(let a of i)this.clear(a)}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{let a=n.concat(i);for(let s of a)this.clear(s)}))}},m1=class extends $x{static{o(this,"WorkspaceCache")}constructor(e,r){super(),r?(this.toDispose.push(e.workspace.DocumentBuilder.onBuildPhase(r,()=>{this.clear()})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{i.length>0&&this.clear()}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate(()=>{this.clear()}))}}});var zx,VM=N(()=>{"use strict";GM();is();Ps();DE();zx=class{static{o(this,"DefaultScopeProvider")}constructor(e){this.reflection=e.shared.AstReflection,this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider,this.indexManager=e.shared.workspace.IndexManager,this.globalScopeCache=new m1(e.shared)}getScope(e){let r=[],n=this.reflection.getReferenceType(e),i=Pa(e.container).precomputedScopes;if(i){let s=e.container;do{let l=i.get(s);l.length>0&&r.push(en(l).filter(u=>this.reflection.isSubtype(u.type,n))),s=s.$container}while(s)}let a=this.getGlobalScope(n,e);for(let s=r.length-1;s>=0;s--)a=this.createScope(r[s],a);return a}createScope(e,r,n){return new d1(en(e),r,n)}createScopeForNodes(e,r,n){let i=en(e).map(a=>{let s=this.nameProvider.getName(a);if(s)return this.descriptions.createDescription(a,s)}).nonNullable();return new d1(i,r,n)}getGlobalScope(e,r){return this.globalScopeCache.get(e,()=>new Fx(this.indexManager.allElements(e)))}}});function UM(t){return typeof t.$comment=="string"}function qle(t){return typeof t=="object"&&!!t&&("$ref"in t||"$error"in t)}var Gx,LE=N(()=>{"use strict";OM();Rl();is();Ol();o(UM,"isAstNodeWithComment");o(qle,"isIntermediateReference");Gx=class{static{o(this,"DefaultJsonSerializer")}constructor(e){this.ignoreProperties=new Set(["$container","$containerProperty","$containerIndex","$document","$cstNode"]),this.langiumDocuments=e.shared.workspace.LangiumDocuments,this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider,this.commentProvider=e.documentation.CommentProvider}serialize(e,r){let n=r??{},i=r?.replacer,a=o((l,u)=>this.replacer(l,u,n),"defaultReplacer"),s=i?(l,u)=>i(l,u,a):a;try{return this.currentDocument=Pa(e),JSON.stringify(e,s,r?.space)}finally{this.currentDocument=void 0}}deserialize(e,r){let n=r??{},i=JSON.parse(e);return this.linkNode(i,i,n),i}replacer(e,r,{refText:n,sourceText:i,textRegions:a,comments:s,uriConverter:l}){var u,h,f,d;if(!this.ignoreProperties.has(e))if(va(r)){let p=r.ref,m=n?r.$refText:void 0;if(p){let g=Pa(p),y="";this.currentDocument&&this.currentDocument!==g&&(l?y=l(g.uri,r):y=g.uri.toString());let v=this.astNodeLocator.getAstNodePath(p);return{$ref:`${y}#${v}`,$refText:m}}else return{$error:(h=(u=r.error)===null||u===void 0?void 0:u.message)!==null&&h!==void 0?h:"Could not resolve reference",$refText:m}}else if(ii(r)){let p;if(a&&(p=this.addAstNodeRegionWithAssignmentsTo(Object.assign({},r)),(!e||r.$document)&&p?.$textRegion&&(p.$textRegion.documentURI=(f=this.currentDocument)===null||f===void 0?void 0:f.uri.toString())),i&&!e&&(p??(p=Object.assign({},r)),p.$sourceText=(d=r.$cstNode)===null||d===void 0?void 0:d.text),s){p??(p=Object.assign({},r));let m=this.commentProvider.getComment(r);m&&(p.$comment=m.replace(/\r/g,""))}return p??r}else return r}addAstNodeRegionWithAssignmentsTo(e){let r=o(n=>({offset:n.offset,end:n.end,length:n.length,range:n.range}),"createDocumentSegment");if(e.$cstNode){let n=e.$textRegion=r(e.$cstNode),i=n.assignments={};return Object.keys(e).filter(a=>!a.startsWith("$")).forEach(a=>{let s=oN(e.$cstNode,a).map(r);s.length!==0&&(i[a]=s)}),e}}linkNode(e,r,n,i,a,s){for(let[u,h]of Object.entries(e))if(Array.isArray(h))for(let f=0;f<h.length;f++){let d=h[f];qle(d)?h[f]=this.reviveReference(e,u,r,d,n):ii(d)&&this.linkNode(d,r,n,e,u,f)}else qle(h)?e[u]=this.reviveReference(e,u,r,h,n):ii(h)&&this.linkNode(h,r,n,e,u);let l=e;l.$container=i,l.$containerProperty=a,l.$containerIndex=s}reviveReference(e,r,n,i,a){let s=i.$refText,l=i.$error;if(i.$ref){let u=this.getRefNode(n,i.$ref,a.uriConverter);if(ii(u))return s||(s=this.nameProvider.getName(u)),{$refText:s??"",ref:u};l=u}if(l){let u={$refText:s??""};return u.error={container:e,property:r,message:l,reference:u},u}else return}getRefNode(e,r,n){try{let i=r.indexOf("#");if(i===0){let u=this.astNodeLocator.getAstNode(e,r.substring(1));return u||"Could not resolve path: "+r}if(i<0){let u=n?n(r):us.parse(r),h=this.langiumDocuments.getDocument(u);return h?h.parseResult.value:"Could not find document for URI: "+r}let a=n?n(r.substring(0,i)):us.parse(r.substring(0,i)),s=this.langiumDocuments.getDocument(a);if(!s)return"Could not find document for URI: "+r;if(i===r.length-1)return s.parseResult.value;let l=this.astNodeLocator.getAstNode(s.parseResult.value,r.substring(i+1));return l||"Could not resolve URI: "+r}catch(i){return String(i)}}}});var Vx,HM=N(()=>{"use strict";Fc();Vx=class{static{o(this,"DefaultServiceRegistry")}get map(){return this.fileExtensionMap}constructor(e){this.languageIdMap=new Map,this.fileExtensionMap=new Map,this.textDocuments=e?.workspace.TextDocuments}register(e){let r=e.LanguageMetaData;for(let n of r.fileExtensions)this.fileExtensionMap.has(n)&&console.warn(`The file extension ${n} is used by multiple languages. It is now assigned to '${r.languageId}'.`),this.fileExtensionMap.set(n,e);this.languageIdMap.set(r.languageId,e),this.languageIdMap.size===1?this.singleton=e:this.singleton=void 0}getServices(e){var r,n;if(this.singleton!==void 0)return this.singleton;if(this.languageIdMap.size===0)throw new Error("The service registry is empty. Use `register` to register the services of a language.");let i=(n=(r=this.textDocuments)===null||r===void 0?void 0:r.get(e))===null||n===void 0?void 0:n.languageId;if(i!==void 0){let l=this.languageIdMap.get(i);if(l)return l}let a=hs.extname(e),s=this.fileExtensionMap.get(a);if(!s)throw i?new Error(`The service registry contains no services for the extension '${a}' for language '${i}'.`):new Error(`The service registry contains no services for the extension '${a}'.`);return s}hasServices(e){try{return this.getServices(e),!0}catch{return!1}}get all(){return Array.from(this.languageIdMap.values())}}});function bp(t){return{code:t}}var g1,Ux,Hx=N(()=>{"use strict";Xo();f1();Yo();Ps();o(bp,"diagnosticData");(function(t){t.all=["fast","slow","built-in"]})(g1||(g1={}));Ux=class{static{o(this,"ValidationRegistry")}constructor(e){this.entries=new Bl,this.entriesBefore=[],this.entriesAfter=[],this.reflection=e.shared.AstReflection}register(e,r=this,n="fast"){if(n==="built-in")throw new Error("The 'built-in' category is reserved for lexer, parser, and linker errors.");for(let[i,a]of Object.entries(e)){let s=a;if(Array.isArray(s))for(let l of s){let u={check:this.wrapValidationException(l,r),category:n};this.addEntry(i,u)}else if(typeof s=="function"){let l={check:this.wrapValidationException(s,r),category:n};this.addEntry(i,l)}else Lc(s)}}wrapValidationException(e,r){return async(n,i,a)=>{await this.handleException(()=>e.call(r,n,i,a),"An error occurred during validation",i,n)}}async handleException(e,r,n,i){try{await e()}catch(a){if(Bc(a))throw a;console.error(`${r}:`,a),a instanceof Error&&a.stack&&console.error(a.stack);let s=a instanceof Error?a.message:String(a);n("error",`${r}: ${s}`,{node:i})}}addEntry(e,r){if(e==="AstNode"){this.entries.add("AstNode",r);return}for(let n of this.reflection.getAllSubTypes(e))this.entries.add(n,r)}getChecks(e,r){let n=en(this.entries.get(e)).concat(this.entries.get("AstNode"));return r&&(n=n.filter(i=>r.includes(i.category))),n.map(i=>i.check)}registerBeforeDocument(e,r=this){this.entriesBefore.push(this.wrapPreparationException(e,"An error occurred during set-up of the validation",r))}registerAfterDocument(e,r=this){this.entriesAfter.push(this.wrapPreparationException(e,"An error occurred during tear-down of the validation",r))}wrapPreparationException(e,r,n){return async(i,a,s,l)=>{await this.handleException(()=>e.call(n,i,a,s,l),r,a,i)}}get checksBefore(){return this.entriesBefore}get checksAfter(){return this.entriesAfter}}});function Yle(t){if(t.range)return t.range;let e;return typeof t.property=="string"?e=Q2(t.node.$cstNode,t.property,t.index):typeof t.keyword=="string"&&(e=cN(t.node.$cstNode,t.keyword,t.index)),e??(e=t.node.$cstNode),e?e.range:{start:{line:0,character:0},end:{line:0,character:0}}}function RE(t){switch(t){case"error":return 1;case"warning":return 2;case"info":return 3;case"hint":return 4;default:throw new Error("Invalid diagnostic severity: "+t)}}function Xle(t){switch(t){case"error":return bp(jo.LexingError);case"warning":return bp(jo.LexingWarning);case"info":return bp(jo.LexingInfo);case"hint":return bp(jo.LexingHint);default:throw new Error("Invalid diagnostic severity: "+t)}}var Wx,jo,WM=N(()=>{"use strict";qo();Ol();is();Nl();Yo();Hx();Wx=class{static{o(this,"DefaultDocumentValidator")}constructor(e){this.validationRegistry=e.validation.ValidationRegistry,this.metadata=e.LanguageMetaData}async validateDocument(e,r={},n=yr.CancellationToken.None){let i=e.parseResult,a=[];if(await xi(n),(!r.categories||r.categories.includes("built-in"))&&(this.processLexingErrors(i,a,r),r.stopAfterLexingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===jo.LexingError})||(this.processParsingErrors(i,a,r),r.stopAfterParsingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===jo.ParsingError}))||(this.processLinkingErrors(e,a,r),r.stopAfterLinkingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===jo.LinkingError}))))return a;try{a.push(...await this.validateAst(i.value,r,n))}catch(s){if(Bc(s))throw s;console.error("An error occurred during validation:",s)}return await xi(n),a}processLexingErrors(e,r,n){var i,a,s;let l=[...e.lexerErrors,...(a=(i=e.lexerReport)===null||i===void 0?void 0:i.diagnostics)!==null&&a!==void 0?a:[]];for(let u of l){let h=(s=u.severity)!==null&&s!==void 0?s:"error",f={severity:RE(h),range:{start:{line:u.line-1,character:u.column-1},end:{line:u.line-1,character:u.column+u.length-1}},message:u.message,data:Xle(h),source:this.getSource()};r.push(f)}}processParsingErrors(e,r,n){for(let i of e.parserErrors){let a;if(isNaN(i.token.startOffset)){if("previousToken"in i){let s=i.previousToken;if(isNaN(s.startOffset)){let l={line:0,character:0};a={start:l,end:l}}else{let l={line:s.endLine-1,character:s.endColumn};a={start:l,end:l}}}}else a=Gm(i.token);if(a){let s={severity:RE("error"),range:a,message:i.message,data:bp(jo.ParsingError),source:this.getSource()};r.push(s)}}}processLinkingErrors(e,r,n){for(let i of e.references){let a=i.error;if(a){let s={node:a.container,property:a.property,index:a.index,data:{code:jo.LinkingError,containerType:a.container.$type,property:a.property,refText:a.reference.$refText}};r.push(this.toDiagnostic("error",a.message,s))}}}async validateAst(e,r,n=yr.CancellationToken.None){let i=[],a=o((s,l,u)=>{i.push(this.toDiagnostic(s,l,u))},"acceptor");return await this.validateAstBefore(e,r,a,n),await this.validateAstNodes(e,r,a,n),await this.validateAstAfter(e,r,a,n),i}async validateAstBefore(e,r,n,i=yr.CancellationToken.None){var a;let s=this.validationRegistry.checksBefore;for(let l of s)await xi(i),await l(e,n,(a=r.categories)!==null&&a!==void 0?a:[],i)}async validateAstNodes(e,r,n,i=yr.CancellationToken.None){await Promise.all(Wo(e).map(async a=>{await xi(i);let s=this.validationRegistry.getChecks(a.$type,r.categories);for(let l of s)await l(a,n,i)}))}async validateAstAfter(e,r,n,i=yr.CancellationToken.None){var a;let s=this.validationRegistry.checksAfter;for(let l of s)await xi(i),await l(e,n,(a=r.categories)!==null&&a!==void 0?a:[],i)}toDiagnostic(e,r,n){return{message:r,range:Yle(n),severity:RE(e),code:n.code,codeDescription:n.codeDescription,tags:n.tags,relatedInformation:n.relatedInformation,data:n.data,source:this.getSource()}}getSource(){return this.metadata.languageId}};o(Yle,"getDiagnosticRange");o(RE,"toDiagnosticSeverity");o(Xle,"toDiagnosticData");(function(t){t.LexingError="lexing-error",t.LexingWarning="lexing-warning",t.LexingInfo="lexing-info",t.LexingHint="lexing-hint",t.ParsingError="parsing-error",t.LinkingError="linking-error"})(jo||(jo={}))});var qx,Yx,qM=N(()=>{"use strict";qo();Rl();is();Nl();Yo();Fc();qx=class{static{o(this,"DefaultAstNodeDescriptionProvider")}constructor(e){this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider}createDescription(e,r,n){let i=n??Pa(e);r??(r=this.nameProvider.getName(e));let a=this.astNodeLocator.getAstNodePath(e);if(!r)throw new Error(`Node at path ${a} has no name.`);let s,l=o(()=>{var u;return s??(s=Qd((u=this.nameProvider.getNameNode(e))!==null&&u!==void 0?u:e.$cstNode))},"nameSegmentGetter");return{node:e,name:r,get nameSegment(){return l()},selectionSegment:Qd(e.$cstNode),type:e.$type,documentUri:i.uri,path:a}}},Yx=class{static{o(this,"DefaultReferenceDescriptionProvider")}constructor(e){this.nodeLocator=e.workspace.AstNodeLocator}async createDescriptions(e,r=yr.CancellationToken.None){let n=[],i=e.parseResult.value;for(let a of Wo(i))await xi(r),Ag(a).filter(s=>!jd(s)).forEach(s=>{let l=this.createDescription(s);l&&n.push(l)});return n}createDescription(e){let r=e.reference.$nodeDescription,n=e.reference.$refNode;if(!r||!n)return;let i=Pa(e.container).uri;return{sourceUri:i,sourcePath:this.nodeLocator.getAstNodePath(e.container),targetUri:r.documentUri,targetPath:r.path,segment:Qd(n),local:hs.equals(r.documentUri,i)}}}});var Xx,YM=N(()=>{"use strict";Xx=class{static{o(this,"DefaultAstNodeLocator")}constructor(){this.segmentSeparator="/",this.indexSeparator="@"}getAstNodePath(e){if(e.$container){let r=this.getAstNodePath(e.$container),n=this.getPathSegment(e);return r+this.segmentSeparator+n}return""}getPathSegment({$containerProperty:e,$containerIndex:r}){if(!e)throw new Error("Missing '$containerProperty' in AST node.");return r!==void 0?e+this.indexSeparator+r:e}getAstNode(e,r){return r.split(this.segmentSeparator).reduce((i,a)=>{if(!i||a.length===0)return i;let s=a.indexOf(this.indexSeparator);if(s>0){let l=a.substring(0,s),u=parseInt(a.substring(s+1)),h=i[l];return h?.[u]}return i[a]},e)}}});var Kn={};var NE=N(()=>{"use strict";Sr(Kn,Sa(LM(),1))});var jx,XM=N(()=>{"use strict";NE();Yo();jx=class{static{o(this,"DefaultConfigurationProvider")}constructor(e){this._ready=new cs,this.settings={},this.workspaceConfig=!1,this.onConfigurationSectionUpdateEmitter=new Kn.Emitter,this.serviceRegistry=e.ServiceRegistry}get ready(){return this._ready.promise}initialize(e){var r,n;this.workspaceConfig=(n=(r=e.capabilities.workspace)===null||r===void 0?void 0:r.configuration)!==null&&n!==void 0?n:!1}async initialized(e){if(this.workspaceConfig){if(e.register){let r=this.serviceRegistry.all;e.register({section:r.map(n=>this.toSectionName(n.LanguageMetaData.languageId))})}if(e.fetchConfiguration){let r=this.serviceRegistry.all.map(i=>({section:this.toSectionName(i.LanguageMetaData.languageId)})),n=await e.fetchConfiguration(r);r.forEach((i,a)=>{this.updateSectionConfiguration(i.section,n[a])})}}this._ready.resolve()}updateConfiguration(e){e.settings&&Object.keys(e.settings).forEach(r=>{let n=e.settings[r];this.updateSectionConfiguration(r,n),this.onConfigurationSectionUpdateEmitter.fire({section:r,configuration:n})})}updateSectionConfiguration(e,r){this.settings[e]=r}async getConfiguration(e,r){await this.ready;let n=this.toSectionName(e);if(this.settings[n])return this.settings[n][r]}toSectionName(e){return`${e}`}get onConfigurationSectionUpdate(){return this.onConfigurationSectionUpdateEmitter.event}}});var ff,jM=N(()=>{"use strict";(function(t){function e(r){return{dispose:o(async()=>await r(),"dispose")}}o(e,"create"),t.create=e})(ff||(ff={}))});var Kx,KM=N(()=>{"use strict";qo();jM();f1();Yo();Ps();Hx();h1();Kx=class{static{o(this,"DefaultDocumentBuilder")}constructor(e){this.updateBuildOptions={validation:{categories:["built-in","fast"]}},this.updateListeners=[],this.buildPhaseListeners=new Bl,this.documentPhaseListeners=new Bl,this.buildState=new Map,this.documentBuildWaiters=new Map,this.currentState=kn.Changed,this.langiumDocuments=e.workspace.LangiumDocuments,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.textDocuments=e.workspace.TextDocuments,this.indexManager=e.workspace.IndexManager,this.serviceRegistry=e.ServiceRegistry}async build(e,r={},n=yr.CancellationToken.None){var i,a;for(let s of e){let l=s.uri.toString();if(s.state===kn.Validated){if(typeof r.validation=="boolean"&&r.validation)s.state=kn.IndexedReferences,s.diagnostics=void 0,this.buildState.delete(l);else if(typeof r.validation=="object"){let u=this.buildState.get(l),h=(i=u?.result)===null||i===void 0?void 0:i.validationChecks;if(h){let d=((a=r.validation.categories)!==null&&a!==void 0?a:g1.all).filter(p=>!h.includes(p));d.length>0&&(this.buildState.set(l,{completed:!1,options:{validation:Object.assign(Object.assign({},r.validation),{categories:d})},result:u.result}),s.state=kn.IndexedReferences)}}}else this.buildState.delete(l)}this.currentState=kn.Changed,await this.emitUpdate(e.map(s=>s.uri),[]),await this.buildDocuments(e,r,n)}async update(e,r,n=yr.CancellationToken.None){this.currentState=kn.Changed;for(let s of r)this.langiumDocuments.deleteDocument(s),this.buildState.delete(s.toString()),this.indexManager.remove(s);for(let s of e){if(!this.langiumDocuments.invalidateDocument(s)){let u=this.langiumDocumentFactory.fromModel({$type:"INVALID"},s);u.state=kn.Changed,this.langiumDocuments.addDocument(u)}this.buildState.delete(s.toString())}let i=en(e).concat(r).map(s=>s.toString()).toSet();this.langiumDocuments.all.filter(s=>!i.has(s.uri.toString())&&this.shouldRelink(s,i)).forEach(s=>{this.serviceRegistry.getServices(s.uri).references.Linker.unlink(s),s.state=Math.min(s.state,kn.ComputedScopes),s.diagnostics=void 0}),await this.emitUpdate(e,r),await xi(n);let a=this.sortDocuments(this.langiumDocuments.all.filter(s=>{var l;return s.state<kn.Linked||!(!((l=this.buildState.get(s.uri.toString()))===null||l===void 0)&&l.completed)}).toArray());await this.buildDocuments(a,this.updateBuildOptions,n)}async emitUpdate(e,r){await Promise.all(this.updateListeners.map(n=>n(e,r)))}sortDocuments(e){let r=0,n=e.length-1;for(;r<n;){for(;r<e.length&&this.hasTextDocument(e[r]);)r++;for(;n>=0&&!this.hasTextDocument(e[n]);)n--;r<n&&([e[r],e[n]]=[e[n],e[r]])}return e}hasTextDocument(e){var r;return!!(!((r=this.textDocuments)===null||r===void 0)&&r.get(e.uri))}shouldRelink(e,r){return e.references.some(n=>n.error!==void 0)?!0:this.indexManager.isAffected(e,r)}onUpdate(e){return this.updateListeners.push(e),ff.create(()=>{let r=this.updateListeners.indexOf(e);r>=0&&this.updateListeners.splice(r,1)})}async buildDocuments(e,r,n){this.prepareBuild(e,r),await this.runCancelable(e,kn.Parsed,n,a=>this.langiumDocumentFactory.update(a,n)),await this.runCancelable(e,kn.IndexedContent,n,a=>this.indexManager.updateContent(a,n)),await this.runCancelable(e,kn.ComputedScopes,n,async a=>{let s=this.serviceRegistry.getServices(a.uri).references.ScopeComputation;a.precomputedScopes=await s.computeLocalScopes(a,n)}),await this.runCancelable(e,kn.Linked,n,a=>this.serviceRegistry.getServices(a.uri).references.Linker.link(a,n)),await this.runCancelable(e,kn.IndexedReferences,n,a=>this.indexManager.updateReferences(a,n));let i=e.filter(a=>this.shouldValidate(a));await this.runCancelable(i,kn.Validated,n,a=>this.validate(a,n));for(let a of e){let s=this.buildState.get(a.uri.toString());s&&(s.completed=!0)}}prepareBuild(e,r){for(let n of e){let i=n.uri.toString(),a=this.buildState.get(i);(!a||a.completed)&&this.buildState.set(i,{completed:!1,options:r,result:a?.result})}}async runCancelable(e,r,n,i){let a=e.filter(l=>l.state<r);for(let l of a)await xi(n),await i(l),l.state=r,await this.notifyDocumentPhase(l,r,n);let s=e.filter(l=>l.state===r);await this.notifyBuildPhase(s,r,n),this.currentState=r}onBuildPhase(e,r){return this.buildPhaseListeners.add(e,r),ff.create(()=>{this.buildPhaseListeners.delete(e,r)})}onDocumentPhase(e,r){return this.documentPhaseListeners.add(e,r),ff.create(()=>{this.documentPhaseListeners.delete(e,r)})}waitUntil(e,r,n){let i;if(r&&"path"in r?i=r:n=r,n??(n=yr.CancellationToken.None),i){let a=this.langiumDocuments.getDocument(i);if(a&&a.state>e)return Promise.resolve(i)}return this.currentState>=e?Promise.resolve(void 0):n.isCancellationRequested?Promise.reject(Pc):new Promise((a,s)=>{let l=this.onBuildPhase(e,()=>{if(l.dispose(),u.dispose(),i){let h=this.langiumDocuments.getDocument(i);a(h?.uri)}else a(void 0)}),u=n.onCancellationRequested(()=>{l.dispose(),u.dispose(),s(Pc)})})}async notifyDocumentPhase(e,r,n){let a=this.documentPhaseListeners.get(r).slice();for(let s of a)try{await s(e,n)}catch(l){if(!Bc(l))throw l}}async notifyBuildPhase(e,r,n){if(e.length===0)return;let a=this.buildPhaseListeners.get(r).slice();for(let s of a)await xi(n),await s(e,n)}shouldValidate(e){return!!this.getBuildOptions(e).validation}async validate(e,r){var n,i;let a=this.serviceRegistry.getServices(e.uri).validation.DocumentValidator,s=this.getBuildOptions(e).validation,l=typeof s=="object"?s:void 0,u=await a.validateDocument(e,l,r);e.diagnostics?e.diagnostics.push(...u):e.diagnostics=u;let h=this.buildState.get(e.uri.toString());if(h){(n=h.result)!==null&&n!==void 0||(h.result={});let f=(i=l?.categories)!==null&&i!==void 0?i:g1.all;h.result.validationChecks?h.result.validationChecks.push(...f):h.result.validationChecks=[...f]}}getBuildOptions(e){var r,n;return(n=(r=this.buildState.get(e.uri.toString()))===null||r===void 0?void 0:r.options)!==null&&n!==void 0?n:{}}}});var Qx,QM=N(()=>{"use strict";is();DE();qo();Ps();Fc();Qx=class{static{o(this,"DefaultIndexManager")}constructor(e){this.symbolIndex=new Map,this.symbolByTypeIndex=new xp,this.referenceIndex=new Map,this.documents=e.workspace.LangiumDocuments,this.serviceRegistry=e.ServiceRegistry,this.astReflection=e.AstReflection}findAllReferences(e,r){let n=Pa(e).uri,i=[];return this.referenceIndex.forEach(a=>{a.forEach(s=>{hs.equals(s.targetUri,n)&&s.targetPath===r&&i.push(s)})}),en(i)}allElements(e,r){let n=en(this.symbolIndex.keys());return r&&(n=n.filter(i=>!r||r.has(i))),n.map(i=>this.getFileDescriptions(i,e)).flat()}getFileDescriptions(e,r){var n;return r?this.symbolByTypeIndex.get(e,r,()=>{var a;return((a=this.symbolIndex.get(e))!==null&&a!==void 0?a:[]).filter(l=>this.astReflection.isSubtype(l.type,r))}):(n=this.symbolIndex.get(e))!==null&&n!==void 0?n:[]}remove(e){let r=e.toString();this.symbolIndex.delete(r),this.symbolByTypeIndex.clear(r),this.referenceIndex.delete(r)}async updateContent(e,r=yr.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).references.ScopeComputation.computeExports(e,r),a=e.uri.toString();this.symbolIndex.set(a,i),this.symbolByTypeIndex.clear(a)}async updateReferences(e,r=yr.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).workspace.ReferenceDescriptionProvider.createDescriptions(e,r);this.referenceIndex.set(e.uri.toString(),i)}isAffected(e,r){let n=this.referenceIndex.get(e.uri.toString());return n?n.some(i=>!i.local&&r.has(i.targetUri.toString())):!1}}});var Zx,ZM=N(()=>{"use strict";qo();Yo();Fc();Zx=class{static{o(this,"DefaultWorkspaceManager")}constructor(e){this.initialBuildOptions={},this._ready=new cs,this.serviceRegistry=e.ServiceRegistry,this.langiumDocuments=e.workspace.LangiumDocuments,this.documentBuilder=e.workspace.DocumentBuilder,this.fileSystemProvider=e.workspace.FileSystemProvider,this.mutex=e.workspace.WorkspaceLock}get ready(){return this._ready.promise}get workspaceFolders(){return this.folders}initialize(e){var r;this.folders=(r=e.workspaceFolders)!==null&&r!==void 0?r:void 0}initialized(e){return this.mutex.write(r=>{var n;return this.initializeWorkspace((n=this.folders)!==null&&n!==void 0?n:[],r)})}async initializeWorkspace(e,r=yr.CancellationToken.None){let n=await this.performStartup(e);await xi(r),await this.documentBuilder.build(n,this.initialBuildOptions,r)}async performStartup(e){let r=this.serviceRegistry.all.flatMap(a=>a.LanguageMetaData.fileExtensions),n=[],i=o(a=>{n.push(a),this.langiumDocuments.hasDocument(a.uri)||this.langiumDocuments.addDocument(a)},"collector");return await this.loadAdditionalDocuments(e,i),await Promise.all(e.map(a=>[a,this.getRootFolder(a)]).map(async a=>this.traverseFolder(...a,r,i))),this._ready.resolve(),n}loadAdditionalDocuments(e,r){return Promise.resolve()}getRootFolder(e){return us.parse(e.uri)}async traverseFolder(e,r,n,i){let a=await this.fileSystemProvider.readDirectory(r);await Promise.all(a.map(async s=>{if(this.includeEntry(e,s,n)){if(s.isDirectory)await this.traverseFolder(e,s.uri,n,i);else if(s.isFile){let l=await this.langiumDocuments.getOrCreateDocument(s.uri);i(l)}}}))}includeEntry(e,r,n){let i=hs.basename(r.uri);if(i.startsWith("."))return!1;if(r.isDirectory)return i!=="node_modules"&&i!=="out";if(r.isFile){let a=hs.extname(r.uri);return n.includes(a)}return!1}}});function IE(t){return Array.isArray(t)&&(t.length===0||"name"in t[0])}function eI(t){return t&&"modes"in t&&"defaultMode"in t}function JM(t){return!IE(t)&&!eI(t)}var Jx,ME,wp,OE=N(()=>{"use strict";cf();Jx=class{static{o(this,"DefaultLexerErrorMessageProvider")}buildUnexpectedCharactersMessage(e,r,n,i,a){return Gg.buildUnexpectedCharactersMessage(e,r,n,i,a)}buildUnableToPopLexerModeMessage(e){return Gg.buildUnableToPopLexerModeMessage(e)}},ME={mode:"full"},wp=class{static{o(this,"DefaultLexer")}constructor(e){this.errorMessageProvider=e.parser.LexerErrorMessageProvider,this.tokenBuilder=e.parser.TokenBuilder;let r=this.tokenBuilder.buildTokens(e.Grammar,{caseInsensitive:e.LanguageMetaData.caseInsensitive});this.tokenTypes=this.toTokenTypeDictionary(r);let n=JM(r)?Object.values(r):r,i=e.LanguageMetaData.mode==="production";this.chevrotainLexer=new Xn(n,{positionTracking:"full",skipValidations:i,errorMessageProvider:this.errorMessageProvider})}get definition(){return this.tokenTypes}tokenize(e,r=ME){var n,i,a;let s=this.chevrotainLexer.tokenize(e);return{tokens:s.tokens,errors:s.errors,hidden:(n=s.groups.hidden)!==null&&n!==void 0?n:[],report:(a=(i=this.tokenBuilder).flushLexingReport)===null||a===void 0?void 0:a.call(i,e)}}toTokenTypeDictionary(e){if(JM(e))return e;let r=eI(e)?Object.values(e.modes).flat():e,n={};return r.forEach(i=>n[i.name]=i),n}};o(IE,"isTokenTypeArray");o(eI,"isIMultiModeLexerDefinition");o(JM,"isTokenTypeDictionary")});function nI(t,e,r){let n,i;typeof t=="string"?(i=e,n=r):(i=t.range.start,n=e),i||(i=jr.create(0,0));let a=Qle(t),s=aI(n),l=wFe({lines:a,position:i,options:s});return CFe({index:0,tokens:l,position:i})}function iI(t,e){let r=aI(e),n=Qle(t);if(n.length===0)return!1;let i=n[0],a=n[n.length-1],s=r.start,l=r.end;return!!s?.exec(i)&&!!l?.exec(a)}function Qle(t){let e="";return typeof t=="string"?e=t:e=t.text,e.split(JR)}function wFe(t){var e,r,n;let i=[],a=t.position.line,s=t.position.character;for(let l=0;l<t.lines.length;l++){let u=l===0,h=l===t.lines.length-1,f=t.lines[l],d=0;if(u&&t.options.start){let m=(e=t.options.start)===null||e===void 0?void 0:e.exec(f);m&&(d=m.index+m[0].length)}else{let m=(r=t.options.line)===null||r===void 0?void 0:r.exec(f);m&&(d=m.index+m[0].length)}if(h){let m=(n=t.options.end)===null||n===void 0?void 0:n.exec(f);m&&(f=f.substring(0,m.index))}if(f=f.substring(0,SFe(f)),rI(f,d)>=f.length){if(i.length>0){let m=jr.create(a,s);i.push({type:"break",content:"",range:Pr.create(m,m)})}}else{jle.lastIndex=d;let m=jle.exec(f);if(m){let g=m[0],y=m[1],v=jr.create(a,s+d),x=jr.create(a,s+d+g.length);i.push({type:"tag",content:y,range:Pr.create(v,x)}),d+=g.length,d=rI(f,d)}if(d<f.length){let g=f.substring(d),y=Array.from(g.matchAll(bFe));i.push(...TFe(y,g,a,s+d))}}a++,s=0}return i.length>0&&i[i.length-1].type==="break"?i.slice(0,-1):i}function TFe(t,e,r,n){let i=[];if(t.length===0){let a=jr.create(r,n),s=jr.create(r,n+e.length);i.push({type:"text",content:e,range:Pr.create(a,s)})}else{let a=0;for(let l of t){let u=l.index,h=e.substring(a,u);h.length>0&&i.push({type:"text",content:e.substring(a,u),range:Pr.create(jr.create(r,a+n),jr.create(r,u+n))});let f=h.length+1,d=l[1];if(i.push({type:"inline-tag",content:d,range:Pr.create(jr.create(r,a+f+n),jr.create(r,a+f+d.length+n))}),f+=d.length,l.length===4){f+=l[2].length;let p=l[3];i.push({type:"text",content:p,range:Pr.create(jr.create(r,a+f+n),jr.create(r,a+f+p.length+n))})}else i.push({type:"text",content:"",range:Pr.create(jr.create(r,a+f+n),jr.create(r,a+f+n))});a=u+l[0].length}let s=e.substring(a);s.length>0&&i.push({type:"text",content:s,range:Pr.create(jr.create(r,a+n),jr.create(r,a+n+s.length))})}return i}function rI(t,e){let r=t.substring(e).match(kFe);return r?e+r.index:t.length}function SFe(t){let e=t.match(EFe);if(e&&typeof e.index=="number")return e.index}function CFe(t){var e,r,n,i;let a=jr.create(t.position.line,t.position.character);if(t.tokens.length===0)return new PE([],Pr.create(a,a));let s=[];for(;t.index<t.tokens.length;){let h=AFe(t,s[s.length-1]);h&&s.push(h)}let l=(r=(e=s[0])===null||e===void 0?void 0:e.range.start)!==null&&r!==void 0?r:a,u=(i=(n=s[s.length-1])===null||n===void 0?void 0:n.range.end)!==null&&i!==void 0?i:a;return new PE(s,Pr.create(l,u))}function AFe(t,e){let r=t.tokens[t.index];if(r.type==="tag")return Jle(t,!1);if(r.type==="text"||r.type==="inline-tag")return Zle(t);_Fe(r,e),t.index++}function _Fe(t,e){if(e){let r=new BE("",t.range);"inlines"in e?e.inlines.push(r):e.content.inlines.push(r)}}function Zle(t){let e=t.tokens[t.index],r=e,n=e,i=[];for(;e&&e.type!=="break"&&e.type!=="tag";)i.push(DFe(t)),n=e,e=t.tokens[t.index];return new tb(i,Pr.create(r.range.start,n.range.end))}function DFe(t){return t.tokens[t.index].type==="inline-tag"?Jle(t,!0):ece(t)}function Jle(t,e){let r=t.tokens[t.index++],n=r.content.substring(1),i=t.tokens[t.index];if(i?.type==="text")if(e){let a=ece(t);return new eb(n,new tb([a],a.range),e,Pr.create(r.range.start,a.range.end))}else{let a=Zle(t);return new eb(n,a,e,Pr.create(r.range.start,a.range.end))}else{let a=r.range;return new eb(n,new tb([],a),e,a)}}function ece(t){let e=t.tokens[t.index++];return new BE(e.content,e.range)}function aI(t){if(!t)return aI({start:"/**",end:"*/",line:"*"});let{start:e,end:r,line:n}=t;return{start:tI(e,!0),end:tI(r,!1),line:tI(n,!0)}}function tI(t,e){if(typeof t=="string"||typeof t=="object"){let r=typeof t=="string"?ap(t):t.source;return e?new RegExp(`^\\s*${r}`):new RegExp(`\\s*${r}\\s*$`)}else return t}function LFe(t,e,r){var n,i;if(t==="linkplain"||t==="linkcode"||t==="link"){let a=e.indexOf(" "),s=e;if(a>0){let u=rI(e,a);s=e.substring(u),e=e.substring(0,a)}return(t==="linkcode"||t==="link"&&r.link==="code")&&(s=`\`${s}\``),(i=(n=r.renderLink)===null||n===void 0?void 0:n.call(r,e,s))!==null&&i!==void 0?i:RFe(e,s)}}function RFe(t,e){try{return us.parse(t,!0),`[${e}](${t})`}catch{return t}}function Kle(t){return t.endsWith(`
807 +`)?`
808 +`:`
809 +
810 +`}var jle,bFe,kFe,EFe,PE,eb,tb,BE,sI=N(()=>{"use strict";mM();Lg();Fc();o(nI,"parseJSDoc");o(iI,"isJSDoc");o(Qle,"getLines");jle=/\s*(@([\p{L}][\p{L}\p{N}]*)?)/uy,bFe=/\{(@[\p{L}][\p{L}\p{N}]*)(\s*)([^\r\n}]+)?\}/gu;o(wFe,"tokenize");o(TFe,"buildInlineTokens");kFe=/\S/,EFe=/\s*$/;o(rI,"skipWhitespace");o(SFe,"lastCharacter");o(CFe,"parseJSDocComment");o(AFe,"parseJSDocElement");o(_Fe,"appendEmptyLine");o(Zle,"parseJSDocText");o(DFe,"parseJSDocInline");o(Jle,"parseJSDocTag");o(ece,"parseJSDocLine");o(aI,"normalizeOptions");o(tI,"normalizeOption");PE=class{static{o(this,"JSDocCommentImpl")}constructor(e,r){this.elements=e,this.range=r}getTag(e){return this.getAllTags().find(r=>r.name===e)}getTags(e){return this.getAllTags().filter(r=>r.name===e)}getAllTags(){return this.elements.filter(e=>"name"in e)}toString(){let e="";for(let r of this.elements)if(e.length===0)e=r.toString();else{let n=r.toString();e+=Kle(e)+n}return e.trim()}toMarkdown(e){let r="";for(let n of this.elements)if(r.length===0)r=n.toMarkdown(e);else{let i=n.toMarkdown(e);r+=Kle(r)+i}return r.trim()}},eb=class{static{o(this,"JSDocTagImpl")}constructor(e,r,n,i){this.name=e,this.content=r,this.inline=n,this.range=i}toString(){let e=`@${this.name}`,r=this.content.toString();return this.content.inlines.length===1?e=`${e} ${r}`:this.content.inlines.length>1&&(e=`${e}
811 +${r}`),this.inline?`{${e}}`:e}toMarkdown(e){var r,n;return(n=(r=e?.renderTag)===null||r===void 0?void 0:r.call(e,this))!==null&&n!==void 0?n:this.toMarkdownDefault(e)}toMarkdownDefault(e){let r=this.content.toMarkdown(e);if(this.inline){let a=LFe(this.name,r,e??{});if(typeof a=="string")return a}let n="";e?.tag==="italic"||e?.tag===void 0?n="*":e?.tag==="bold"?n="**":e?.tag==="bold-italic"&&(n="***");let i=`${n}@${this.name}${n}`;return this.content.inlines.length===1?i=`${i} \u2014 ${r}`:this.content.inlines.length>1&&(i=`${i}
812 +${r}`),this.inline?`{${i}}`:i}};o(LFe,"renderInlineTag");o(RFe,"renderLinkDefault");tb=class{static{o(this,"JSDocTextImpl")}constructor(e,r){this.inlines=e,this.range=r}toString(){let e="";for(let r=0;r<this.inlines.length;r++){let n=this.inlines[r],i=this.inlines[r+1];e+=n.toString(),i&&i.range.start.line>n.range.start.line&&(e+=`
813 +`)}return e}toMarkdown(e){let r="";for(let n=0;n<this.inlines.length;n++){let i=this.inlines[n],a=this.inlines[n+1];r+=i.toMarkdown(e),a&&a.range.start.line>i.range.start.line&&(r+=`
814 +`)}return r}},BE=class{static{o(this,"JSDocLineImpl")}constructor(e,r){this.text=e,this.range=r}toString(){return this.text}toMarkdown(){return this.text}};o(Kle,"fillNewlines")});var rb,oI=N(()=>{"use strict";is();sI();rb=class{static{o(this,"JSDocDocumentationProvider")}constructor(e){this.indexManager=e.shared.workspace.IndexManager,this.commentProvider=e.documentation.CommentProvider}getDocumentation(e){let r=this.commentProvider.getComment(e);if(r&&iI(r))return nI(r).toMarkdown({renderLink:o((i,a)=>this.documentationLinkRenderer(e,i,a),"renderLink"),renderTag:o(i=>this.documentationTagRenderer(e,i),"renderTag")})}documentationLinkRenderer(e,r,n){var i;let a=(i=this.findNameInPrecomputedScopes(e,r))!==null&&i!==void 0?i:this.findNameInGlobalScope(e,r);if(a&&a.nameSegment){let s=a.nameSegment.range.start.line+1,l=a.nameSegment.range.start.character+1,u=a.documentUri.with({fragment:`L${s},${l}`});return`[${n}](${u.toString()})`}else return}documentationTagRenderer(e,r){}findNameInPrecomputedScopes(e,r){let i=Pa(e).precomputedScopes;if(!i)return;let a=e;do{let l=i.get(a).find(u=>u.name===r);if(l)return l;a=a.$container}while(a)}findNameInGlobalScope(e,r){return this.indexManager.allElements().find(i=>i.name===r)}}});var nb,lI=N(()=>{"use strict";LE();Nl();nb=class{static{o(this,"DefaultCommentProvider")}constructor(e){this.grammarConfig=()=>e.parser.GrammarConfig}getComment(e){var r;return UM(e)?e.$comment:(r=AR(e.$cstNode,this.grammarConfig().multilineCommentRules))===null||r===void 0?void 0:r.text}}});var ib,cI,uI,hI=N(()=>{"use strict";Yo();NE();ib=class{static{o(this,"DefaultAsyncParser")}constructor(e){this.syncParser=e.parser.LangiumParser}parse(e,r){return Promise.resolve(this.syncParser.parse(e))}},cI=class{static{o(this,"AbstractThreadedAsyncParser")}constructor(e){this.threadCount=8,this.terminationDelay=200,this.workerPool=[],this.queue=[],this.hydrator=e.serializer.Hydrator}initializeWorkers(){for(;this.workerPool.length<this.threadCount;){let e=this.createWorker();e.onReady(()=>{if(this.queue.length>0){let r=this.queue.shift();r&&(e.lock(),r.resolve(e))}}),this.workerPool.push(e)}}async parse(e,r){let n=await this.acquireParserWorker(r),i=new cs,a,s=r.onCancellationRequested(()=>{a=setTimeout(()=>{this.terminateWorker(n)},this.terminationDelay)});return n.parse(e).then(l=>{let u=this.hydrator.hydrate(l);i.resolve(u)}).catch(l=>{i.reject(l)}).finally(()=>{s.dispose(),clearTimeout(a)}),i.promise}terminateWorker(e){e.terminate();let r=this.workerPool.indexOf(e);r>=0&&this.workerPool.splice(r,1)}async acquireParserWorker(e){this.initializeWorkers();for(let n of this.workerPool)if(n.ready)return n.lock(),n;let r=new cs;return e.onCancellationRequested(()=>{let n=this.queue.indexOf(r);n>=0&&this.queue.splice(n,1),r.reject(Pc)}),this.queue.push(r),r.promise}},uI=class{static{o(this,"ParserWorker")}get ready(){return this._ready}get onReady(){return this.onReadyEmitter.event}constructor(e,r,n,i){this.onReadyEmitter=new Kn.Emitter,this.deferred=new cs,this._ready=!0,this._parsing=!1,this.sendMessage=e,this._terminate=i,r(a=>{let s=a;this.deferred.resolve(s),this.unlock()}),n(a=>{this.deferred.reject(a),this.unlock()})}terminate(){this.deferred.reject(Pc),this._terminate()}lock(){this._ready=!1}unlock(){this._parsing=!1,this._ready=!0,this.onReadyEmitter.fire()}parse(e){if(this._parsing)throw new Error("Parser worker is busy");return this._parsing=!0,this.deferred=new cs,this.sendMessage(e),this.deferred.promise}}});var ab,fI=N(()=>{"use strict";qo();Yo();ab=class{static{o(this,"DefaultWorkspaceLock")}constructor(){this.previousTokenSource=new yr.CancellationTokenSource,this.writeQueue=[],this.readQueue=[],this.done=!0}write(e){this.cancelWrite();let r=CE();return this.previousTokenSource=r,this.enqueue(this.writeQueue,e,r.token)}read(e){return this.enqueue(this.readQueue,e)}enqueue(e,r,n=yr.CancellationToken.None){let i=new cs,a={action:r,deferred:i,cancellationToken:n};return e.push(a),this.performNextOperation(),i.promise}async performNextOperation(){if(!this.done)return;let e=[];if(this.writeQueue.length>0)e.push(this.writeQueue.shift());else if(this.readQueue.length>0)e.push(...this.readQueue.splice(0,this.readQueue.length));else return;this.done=!1,await Promise.all(e.map(async({action:r,deferred:n,cancellationToken:i})=>{try{let a=await Promise.resolve().then(()=>r(i));n.resolve(a)}catch(a){Bc(a)?n.resolve(void 0):n.reject(a)}})),this.done=!0,this.performNextOperation()}cancelWrite(){this.previousTokenSource.cancel()}}});var sb,dI=N(()=>{"use strict";gE();Rc();Rl();is();f1();Nl();sb=class{static{o(this,"DefaultHydrator")}constructor(e){this.grammarElementIdMap=new vp,this.tokenTypeIdMap=new vp,this.grammar=e.Grammar,this.lexer=e.parser.Lexer,this.linker=e.references.Linker}dehydrate(e){return{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport?this.dehydrateLexerReport(e.lexerReport):void 0,parserErrors:e.parserErrors.map(r=>Object.assign(Object.assign({},r),{message:r.message})),value:this.dehydrateAstNode(e.value,this.createDehyrationContext(e.value))}}dehydrateLexerReport(e){return e}createDehyrationContext(e){let r=new Map,n=new Map;for(let i of Wo(e))r.set(i,{});if(e.$cstNode)for(let i of Kd(e.$cstNode))n.set(i,{});return{astNodes:r,cstNodes:n}}dehydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode!==void 0&&(n.$cstNode=this.dehydrateCstNode(e.$cstNode,r));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)ii(l)?s.push(this.dehydrateAstNode(l,r)):va(l)?s.push(this.dehydrateReference(l,r)):s.push(l)}else ii(a)?n[i]=this.dehydrateAstNode(a,r):va(a)?n[i]=this.dehydrateReference(a,r):a!==void 0&&(n[i]=a);return n}dehydrateReference(e,r){let n={};return n.$refText=e.$refText,e.$refNode&&(n.$refNode=r.cstNodes.get(e.$refNode)),n}dehydrateCstNode(e,r){let n=r.cstNodes.get(e);return M2(e)?n.fullText=e.fullText:n.grammarSource=this.getGrammarElementId(e.grammarSource),n.hidden=e.hidden,n.astNode=r.astNodes.get(e.astNode),Ll(e)?n.content=e.content.map(i=>this.dehydrateCstNode(i,r)):af(e)&&(n.tokenType=e.tokenType.name,n.offset=e.offset,n.length=e.length,n.startLine=e.range.start.line,n.startColumn=e.range.start.character,n.endLine=e.range.end.line,n.endColumn=e.range.end.character),n}hydrate(e){let r=e.value,n=this.createHydrationContext(r);return"$cstNode"in r&&this.hydrateCstNode(r.$cstNode,n),{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport,parserErrors:e.parserErrors,value:this.hydrateAstNode(r,n)}}createHydrationContext(e){let r=new Map,n=new Map;for(let a of Wo(e))r.set(a,{});let i;if(e.$cstNode)for(let a of Kd(e.$cstNode)){let s;"fullText"in a?(s=new a1(a.fullText),i=s):"content"in a?s=new mp:"tokenType"in a&&(s=this.hydrateCstLeafNode(a)),s&&(n.set(a,s),s.root=i)}return{astNodes:r,cstNodes:n}}hydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode&&(n.$cstNode=r.cstNodes.get(e.$cstNode));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)ii(l)?s.push(this.setParent(this.hydrateAstNode(l,r),n)):va(l)?s.push(this.hydrateReference(l,n,i,r)):s.push(l)}else ii(a)?n[i]=this.setParent(this.hydrateAstNode(a,r),n):va(a)?n[i]=this.hydrateReference(a,n,i,r):a!==void 0&&(n[i]=a);return n}setParent(e,r){return e.$container=r,e}hydrateReference(e,r,n,i){return this.linker.buildReference(r,n,i.cstNodes.get(e.$refNode),e.$refText)}hydrateCstNode(e,r,n=0){let i=r.cstNodes.get(e);if(typeof e.grammarSource=="number"&&(i.grammarSource=this.getGrammarElement(e.grammarSource)),i.astNode=r.astNodes.get(e.astNode),Ll(i))for(let a of e.content){let s=this.hydrateCstNode(a,r,n++);i.content.push(s)}return i}hydrateCstLeafNode(e){let r=this.getTokenType(e.tokenType),n=e.offset,i=e.length,a=e.startLine,s=e.startColumn,l=e.endLine,u=e.endColumn,h=e.hidden;return new pp(n,i,{start:{line:a,character:s},end:{line:l,character:u}},r,h)}getTokenType(e){return this.lexer.definition[e]}getGrammarElementId(e){if(e)return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.get(e)}getGrammarElement(e){return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.getKey(e)}createGrammarElementIdMap(){let e=0;for(let r of Wo(this.grammar))G2(r)&&this.grammarElementIdMap.set(r,e++)}}});function fs(t){return{documentation:{CommentProvider:o(e=>new nb(e),"CommentProvider"),DocumentationProvider:o(e=>new rb(e),"DocumentationProvider")},parser:{AsyncParser:o(e=>new ib(e),"AsyncParser"),GrammarConfig:o(e=>pN(e),"GrammarConfig"),LangiumParser:o(e=>TM(e),"LangiumParser"),CompletionParser:o(e=>bM(e),"CompletionParser"),ValueConverter:o(()=>new yp,"ValueConverter"),TokenBuilder:o(()=>new Uu,"TokenBuilder"),Lexer:o(e=>new wp(e),"Lexer"),ParserErrorMessageProvider:o(()=>new s1,"ParserErrorMessageProvider"),LexerErrorMessageProvider:o(()=>new Jx,"LexerErrorMessageProvider")},workspace:{AstNodeLocator:o(()=>new Xx,"AstNodeLocator"),AstNodeDescriptionProvider:o(e=>new qx(e),"AstNodeDescriptionProvider"),ReferenceDescriptionProvider:o(e=>new Yx(e),"ReferenceDescriptionProvider")},references:{Linker:o(e=>new Ix(e),"Linker"),NameProvider:o(()=>new Ox,"NameProvider"),ScopeProvider:o(e=>new zx(e),"ScopeProvider"),ScopeComputation:o(e=>new Bx(e),"ScopeComputation"),References:o(e=>new Px(e),"References")},serializer:{Hydrator:o(e=>new sb(e),"Hydrator"),JsonSerializer:o(e=>new Gx(e),"JsonSerializer")},validation:{DocumentValidator:o(e=>new Wx(e),"DocumentValidator"),ValidationRegistry:o(e=>new Ux(e),"ValidationRegistry")},shared:o(()=>t.shared,"shared")}}function ds(t){return{ServiceRegistry:o(e=>new Vx(e),"ServiceRegistry"),workspace:{LangiumDocuments:o(e=>new Mx(e),"LangiumDocuments"),LangiumDocumentFactory:o(e=>new Nx(e),"LangiumDocumentFactory"),DocumentBuilder:o(e=>new Kx(e),"DocumentBuilder"),IndexManager:o(e=>new Qx(e),"IndexManager"),WorkspaceManager:o(e=>new Zx(e),"WorkspaceManager"),FileSystemProvider:o(e=>t.fileSystemProvider(e),"FileSystemProvider"),WorkspaceLock:o(()=>new ab,"WorkspaceLock"),ConfigurationProvider:o(e=>new jx(e),"ConfigurationProvider")}}}var pI=N(()=>{"use strict";mN();wM();kM();wE();EM();BM();FM();$M();zM();VM();LE();HM();WM();Hx();qM();YM();XM();KM();h1();QM();ZM();OE();oI();lI();Lx();hI();fI();dI();o(fs,"createDefaultCoreModule");o(ds,"createDefaultSharedCoreModule")});function ui(t,e,r,n,i,a,s,l,u){let h=[t,e,r,n,i,a,s,l,u].reduce(FE,{});return ace(h)}function ice(t){if(t&&t[nce])for(let e of Object.values(t))ice(e);return t}function ace(t,e){let r=new Proxy({},{deleteProperty:o(()=>!1,"deleteProperty"),set:o(()=>{throw new Error("Cannot set property on injected service container")},"set"),get:o((n,i)=>i===nce?!0:rce(n,i,t,e||r),"get"),getOwnPropertyDescriptor:o((n,i)=>(rce(n,i,t,e||r),Object.getOwnPropertyDescriptor(n,i)),"getOwnPropertyDescriptor"),has:o((n,i)=>i in t,"has"),ownKeys:o(()=>[...Object.getOwnPropertyNames(t)],"ownKeys")});return r}function rce(t,e,r,n){if(e in t){if(t[e]instanceof Error)throw new Error("Construction failure. Please make sure that your dependencies are constructable.",{cause:t[e]});if(t[e]===tce)throw new Error('Cycle detected. Please make "'+String(e)+'" lazy. Visit https://langium.org/docs/reference/configuration-services/#resolving-cyclic-dependencies');return t[e]}else if(e in r){let i=r[e];t[e]=tce;try{t[e]=typeof i=="function"?i(n):ace(i,n)}catch(a){throw t[e]=a instanceof Error?a:void 0,a}return t[e]}else return}function FE(t,e){if(e){for(let[r,n]of Object.entries(e))if(n!==void 0){let i=t[r];i!==null&&n!==null&&typeof i=="object"&&typeof n=="object"?t[r]=FE(i,n):t[r]=n}}return t}var mI,nce,tce,gI=N(()=>{"use strict";(function(t){t.merge=(e,r)=>FE(FE({},e),r)})(mI||(mI={}));o(ui,"inject");nce=Symbol("isProxy");o(ice,"eagerLoad");o(ace,"_inject");tce=Symbol();o(rce,"_resolve");o(FE,"_merge")});var sce=N(()=>{"use strict"});var oce=N(()=>{"use strict";lI();oI();sI()});var lce=N(()=>{"use strict"});var cce=N(()=>{"use strict";mN();lce()});var yI,Tp,$E,vI,uce=N(()=>{"use strict";cf();wE();OE();yI={indentTokenName:"INDENT",dedentTokenName:"DEDENT",whitespaceTokenName:"WS",ignoreIndentationDelimiters:[]};(function(t){t.REGULAR="indentation-sensitive",t.IGNORE_INDENTATION="ignore-indentation"})(Tp||(Tp={}));$E=class extends Uu{static{o(this,"IndentationAwareTokenBuilder")}constructor(e=yI){super(),this.indentationStack=[0],this.whitespaceRegExp=/[ \t]+/y,this.options=Object.assign(Object.assign({},yI),e),this.indentTokenType=of({name:this.options.indentTokenName,pattern:this.indentMatcher.bind(this),line_breaks:!1}),this.dedentTokenType=of({name:this.options.dedentTokenName,pattern:this.dedentMatcher.bind(this),line_breaks:!1})}buildTokens(e,r){let n=super.buildTokens(e,r);if(!IE(n))throw new Error("Invalid tokens built by default builder");let{indentTokenName:i,dedentTokenName:a,whitespaceTokenName:s,ignoreIndentationDelimiters:l}=this.options,u,h,f,d=[];for(let p of n){for(let[m,g]of l)p.name===m?p.PUSH_MODE=Tp.IGNORE_INDENTATION:p.name===g&&(p.POP_MODE=!0);p.name===a?u=p:p.name===i?h=p:p.name===s?f=p:d.push(p)}if(!u||!h||!f)throw new Error("Some indentation/whitespace tokens not found!");return l.length>0?{modes:{[Tp.REGULAR]:[u,h,...d,f],[Tp.IGNORE_INDENTATION]:[...d,f]},defaultMode:Tp.REGULAR}:[u,h,f,...d]}flushLexingReport(e){let r=super.flushLexingReport(e);return Object.assign(Object.assign({},r),{remainingDedents:this.flushRemainingDedents(e)})}isStartOfLine(e,r){return r===0||`\r
815 +`.includes(e[r-1])}matchWhitespace(e,r,n,i){var a;this.whitespaceRegExp.lastIndex=r;let s=this.whitespaceRegExp.exec(e);return{currIndentLevel:(a=s?.[0].length)!==null&&a!==void 0?a:0,prevIndentLevel:this.indentationStack.at(-1),match:s}}createIndentationTokenInstance(e,r,n,i){let a=this.getLineNumber(r,i);return $u(e,n,i,i+n.length,a,a,1,n.length)}getLineNumber(e,r){return e.substring(0,r).split(/\r\n|\r|\n/).length}indentMatcher(e,r,n,i){if(!this.isStartOfLine(e,r))return null;let{currIndentLevel:a,prevIndentLevel:s,match:l}=this.matchWhitespace(e,r,n,i);return a<=s?null:(this.indentationStack.push(a),l)}dedentMatcher(e,r,n,i){var a,s,l,u;if(!this.isStartOfLine(e,r))return null;let{currIndentLevel:h,prevIndentLevel:f,match:d}=this.matchWhitespace(e,r,n,i);if(h>=f)return null;let p=this.indentationStack.lastIndexOf(h);if(p===-1)return this.diagnostics.push({severity:"error",message:`Invalid dedent level ${h} at offset: ${r}. Current indentation stack: ${this.indentationStack}`,offset:r,length:(s=(a=d?.[0])===null||a===void 0?void 0:a.length)!==null&&s!==void 0?s:0,line:this.getLineNumber(e,r),column:1}),null;let m=this.indentationStack.length-p-1,g=(u=(l=e.substring(0,r).match(/[\r\n]+$/))===null||l===void 0?void 0:l[0].length)!==null&&u!==void 0?u:1;for(let y=0;y<m;y++){let v=this.createIndentationTokenInstance(this.dedentTokenType,e,"",r-(g-1));n.push(v),this.indentationStack.pop()}return null}buildTerminalToken(e){let r=super.buildTerminalToken(e),{indentTokenName:n,dedentTokenName:i,whitespaceTokenName:a}=this.options;return r.name===n?this.indentTokenType:r.name===i?this.dedentTokenType:r.name===a?of({name:a,pattern:this.whitespaceRegExp,group:Xn.SKIPPED}):r}flushRemainingDedents(e){let r=[];for(;this.indentationStack.length>1;)r.push(this.createIndentationTokenInstance(this.dedentTokenType,e,"",e.length)),this.indentationStack.pop();return this.indentationStack=[0],r}},vI=class extends wp{static{o(this,"IndentationAwareLexer")}constructor(e){if(super(e),e.parser.TokenBuilder instanceof $E)this.indentationTokenBuilder=e.parser.TokenBuilder;else throw new Error("IndentationAwareLexer requires an accompanying IndentationAwareTokenBuilder")}tokenize(e,r=ME){let n=super.tokenize(e),i=n.report;r?.mode==="full"&&n.tokens.push(...i.remainingDedents),i.remainingDedents=[];let{indentTokenType:a,dedentTokenType:s}=this.indentationTokenBuilder,l=a.tokenTypeIdx,u=s.tokenTypeIdx,h=[],f=n.tokens.length-1;for(let d=0;d<f;d++){let p=n.tokens[d],m=n.tokens[d+1];if(p.tokenTypeIdx===l&&m.tokenTypeIdx===u){d++;continue}h.push(p)}return f>=0&&h.push(n.tokens[f]),n.tokens=h,n}}});var hce=N(()=>{"use strict"});var fce=N(()=>{"use strict";hI();wM();gE();uce();kM();Lx();OE();bE();hce();wE();EM()});var dce=N(()=>{"use strict";BM();FM();$M();GM();zM();VM()});var pce=N(()=>{"use strict";dI();LE()});var zE,ps,xI=N(()=>{"use strict";zE=class{static{o(this,"EmptyFileSystemProvider")}readFile(){throw new Error("No file system is available.")}async readDirectory(){return[]}},ps={fileSystemProvider:o(()=>new zE,"fileSystemProvider")}});function IFe(){let t=ui(ds(ps),MFe),e=ui(fs({shared:t}),NFe);return t.ServiceRegistry.register(e),e}function Hu(t){var e;let r=IFe(),n=r.serializer.JsonSerializer.deserialize(t);return r.shared.workspace.LangiumDocumentFactory.fromModel(n,us.parse(`memory://${(e=n.name)!==null&&e!==void 0?e:"grammar"}.langium`)),n}var NFe,MFe,mce=N(()=>{"use strict";pI();gI();Rc();xI();Fc();NFe={Grammar:o(()=>{},"Grammar"),LanguageMetaData:o(()=>({caseInsensitive:!1,fileExtensions:[".langium"],languageId:"langium"}),"LanguageMetaData")},MFe={AstReflection:o(()=>new Cg,"AstReflection")};o(IFe,"createMinimalGrammarServices");o(Hu,"loadGrammarFromJson")});var Gr={};hr(Gr,{AstUtils:()=>xk,BiMap:()=>vp,Cancellation:()=>yr,ContextCache:()=>xp,CstUtils:()=>ck,DONE_RESULT:()=>Ia,Deferred:()=>cs,Disposable:()=>ff,DisposableCache:()=>p1,DocumentCache:()=>_E,EMPTY_STREAM:()=>I2,ErrorWithLocation:()=>Zd,GrammarUtils:()=>Ek,MultiMap:()=>Bl,OperationCancelled:()=>Pc,Reduction:()=>zm,RegExpUtils:()=>Tk,SimpleCache:()=>$x,StreamImpl:()=>ao,TreeStreamImpl:()=>_c,URI:()=>us,UriUtils:()=>hs,WorkspaceCache:()=>m1,assertUnreachable:()=>Lc,delayNextTick:()=>MM,interruptAndCheck:()=>xi,isOperationCancelled:()=>Bc,loadGrammarFromJson:()=>Hu,setInterruptionPeriod:()=>$le,startCancelableOperation:()=>CE,stream:()=>en});var gce=N(()=>{"use strict";DE();NE();Sr(Gr,Kn);f1();jM();uk();mce();Yo();Ps();Fc();is();qo();Nl();Ol();Lg()});var yce=N(()=>{"use strict";WM();Hx()});var vce=N(()=>{"use strict";qM();YM();XM();KM();h1();xI();QM();fI();ZM()});var xa={};hr(xa,{AbstractAstReflection:()=>Xd,AbstractCstNode:()=>Cx,AbstractLangiumParser:()=>Ax,AbstractParserErrorMessageProvider:()=>vE,AbstractThreadedAsyncParser:()=>cI,AstUtils:()=>xk,BiMap:()=>vp,Cancellation:()=>yr,CompositeCstNodeImpl:()=>mp,ContextCache:()=>xp,CstNodeBuilder:()=>Sx,CstUtils:()=>ck,DEFAULT_TOKENIZE_OPTIONS:()=>ME,DONE_RESULT:()=>Ia,DatatypeSymbol:()=>yE,DefaultAstNodeDescriptionProvider:()=>qx,DefaultAstNodeLocator:()=>Xx,DefaultAsyncParser:()=>ib,DefaultCommentProvider:()=>nb,DefaultConfigurationProvider:()=>jx,DefaultDocumentBuilder:()=>Kx,DefaultDocumentValidator:()=>Wx,DefaultHydrator:()=>sb,DefaultIndexManager:()=>Qx,DefaultJsonSerializer:()=>Gx,DefaultLangiumDocumentFactory:()=>Nx,DefaultLangiumDocuments:()=>Mx,DefaultLexer:()=>wp,DefaultLexerErrorMessageProvider:()=>Jx,DefaultLinker:()=>Ix,DefaultNameProvider:()=>Ox,DefaultReferenceDescriptionProvider:()=>Yx,DefaultReferences:()=>Px,DefaultScopeComputation:()=>Bx,DefaultScopeProvider:()=>zx,DefaultServiceRegistry:()=>Vx,DefaultTokenBuilder:()=>Uu,DefaultValueConverter:()=>yp,DefaultWorkspaceLock:()=>ab,DefaultWorkspaceManager:()=>Zx,Deferred:()=>cs,Disposable:()=>ff,DisposableCache:()=>p1,DocumentCache:()=>_E,DocumentState:()=>kn,DocumentValidator:()=>jo,EMPTY_SCOPE:()=>xFe,EMPTY_STREAM:()=>I2,EmptyFileSystem:()=>ps,EmptyFileSystemProvider:()=>zE,ErrorWithLocation:()=>Zd,GrammarAST:()=>U2,GrammarUtils:()=>Ek,IndentationAwareLexer:()=>vI,IndentationAwareTokenBuilder:()=>$E,JSDocDocumentationProvider:()=>rb,LangiumCompletionParser:()=>Dx,LangiumParser:()=>_x,LangiumParserErrorMessageProvider:()=>s1,LeafCstNodeImpl:()=>pp,LexingMode:()=>Tp,MapScope:()=>Fx,Module:()=>mI,MultiMap:()=>Bl,OperationCancelled:()=>Pc,ParserWorker:()=>uI,Reduction:()=>zm,RegExpUtils:()=>Tk,RootCstNodeImpl:()=>a1,SimpleCache:()=>$x,StreamImpl:()=>ao,StreamScope:()=>d1,TextDocument:()=>c1,TreeStreamImpl:()=>_c,URI:()=>us,UriUtils:()=>hs,ValidationCategory:()=>g1,ValidationRegistry:()=>Ux,ValueConverter:()=>Oc,WorkspaceCache:()=>m1,assertUnreachable:()=>Lc,createCompletionParser:()=>bM,createDefaultCoreModule:()=>fs,createDefaultSharedCoreModule:()=>ds,createGrammarConfig:()=>pN,createLangiumParser:()=>TM,createParser:()=>Rx,delayNextTick:()=>MM,diagnosticData:()=>bp,eagerLoad:()=>ice,getDiagnosticRange:()=>Yle,indentationBuilderDefaultOptions:()=>yI,inject:()=>ui,interruptAndCheck:()=>xi,isAstNode:()=>ii,isAstNodeDescription:()=>kR,isAstNodeWithComment:()=>UM,isCompositeCstNode:()=>Ll,isIMultiModeLexerDefinition:()=>eI,isJSDoc:()=>iI,isLeafCstNode:()=>af,isLinkingError:()=>jd,isNamed:()=>Wle,isOperationCancelled:()=>Bc,isReference:()=>va,isRootCstNode:()=>M2,isTokenTypeArray:()=>IE,isTokenTypeDictionary:()=>JM,loadGrammarFromJson:()=>Hu,parseJSDoc:()=>nI,prepareLangiumParser:()=>Nle,setInterruptionPeriod:()=>$le,startCancelableOperation:()=>CE,stream:()=>en,toDiagnosticData:()=>Xle,toDiagnosticSeverity:()=>RE});var Xo=N(()=>{"use strict";pI();gI();HM();sce();Rl();oce();cce();fce();dce();pce();gce();Sr(xa,Gr);yce();vce();Rc()});function Sce(t){return Fl.isInstance(t,ob)}function Cce(t){return Fl.isInstance(t,y1)}function Ace(t){return Fl.isInstance(t,v1)}function _ce(t){return Fl.isInstance(t,WE)}function Dce(t){return Fl.isInstance(t,x1)}function Lce(t){return Fl.isInstance(t,lb)}function Rce(t){return Fl.isInstance(t,b1)}function Nce(t){return Fl.isInstance(t,cb)}function Mce(t){return Fl.isInstance(t,ub)}function Ice(t){return Fl.isInstance(t,hb)}function Oce(t){return Fl.isInstance(t,fb)}var OFe,Lt,AI,ob,GE,y1,VE,UE,v1,WE,bI,wI,TI,x1,kI,lb,EI,b1,SI,cb,ub,hb,fb,qE,CI,HE,Pce,Fl,xce,PFe,bce,BFe,wce,FFe,Tce,$Fe,kce,zFe,Ece,GFe,VFe,UFe,HFe,WFe,qFe,YFe,co,_I,DI,LI,RI,NI,MI,XFe,jFe,KFe,QFe,w1,Wu,$s,ZFe,zs=N(()=>{"use strict";Xo();Xo();Xo();Xo();OFe=Object.defineProperty,Lt=o((t,e)=>OFe(t,"name",{value:e,configurable:!0}),"__name"),AI="Statement",ob="Architecture";o(Sce,"isArchitecture");Lt(Sce,"isArchitecture");GE="Axis",y1="Branch";o(Cce,"isBranch");Lt(Cce,"isBranch");VE="Checkout",UE="CherryPicking",v1="Commit";o(Ace,"isCommit");Lt(Ace,"isCommit");WE="Common";o(_ce,"isCommon");Lt(_ce,"isCommon");bI="Curve",wI="Edge",TI="Entry",x1="GitGraph";o(Dce,"isGitGraph");Lt(Dce,"isGitGraph");kI="Group",lb="Info";o(Lce,"isInfo");Lt(Lce,"isInfo");EI="Junction",b1="Merge";o(Rce,"isMerge");Lt(Rce,"isMerge");SI="Option",cb="Packet";o(Nce,"isPacket");Lt(Nce,"isPacket");ub="PacketBlock";o(Mce,"isPacketBlock");Lt(Mce,"isPacketBlock");hb="Pie";o(Ice,"isPie");Lt(Ice,"isPie");fb="PieSection";o(Oce,"isPieSection");Lt(Oce,"isPieSection");qE="Radar",CI="Service",HE="Direction",Pce=class extends Xd{static{o(this,"MermaidAstReflection")}static{Lt(this,"MermaidAstReflection")}getAllTypes(){return[ob,GE,y1,VE,UE,v1,WE,bI,HE,wI,TI,x1,kI,lb,EI,b1,SI,cb,ub,hb,fb,qE,CI,AI]}computeIsSubtype(t,e){switch(t){case y1:case VE:case UE:case v1:case b1:return this.isSubtype(AI,e);case HE:return this.isSubtype(x1,e);default:return!1}}getReferenceType(t){let e=`${t.container.$type}:${t.property}`;switch(e){case"Entry:axis":return GE;default:throw new Error(`${e} is not a valid reference id.`)}}getTypeMetaData(t){switch(t){case ob:return{name:ob,properties:[{name:"accDescr"},{name:"accTitle"},{name:"edges",defaultValue:[]},{name:"groups",defaultValue:[]},{name:"junctions",defaultValue:[]},{name:"services",defaultValue:[]},{name:"title"}]};case GE:return{name:GE,properties:[{name:"label"},{name:"name"}]};case y1:return{name:y1,properties:[{name:"name"},{name:"order"}]};case VE:return{name:VE,properties:[{name:"branch"}]};case UE:return{name:UE,properties:[{name:"id"},{name:"parent"},{name:"tags",defaultValue:[]}]};case v1:return{name:v1,properties:[{name:"id"},{name:"message"},{name:"tags",defaultValue:[]},{name:"type"}]};case WE:return{name:WE,properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case bI:return{name:bI,properties:[{name:"entries",defaultValue:[]},{name:"label"},{name:"name"}]};case wI:return{name:wI,properties:[{name:"lhsDir"},{name:"lhsGroup",defaultValue:!1},{name:"lhsId"},{name:"lhsInto",defaultValue:!1},{name:"rhsDir"},{name:"rhsGroup",defaultValue:!1},{name:"rhsId"},{name:"rhsInto",defaultValue:!1},{name:"title"}]};case TI:return{name:TI,properties:[{name:"axis"},{name:"value"}]};case x1:return{name:x1,properties:[{name:"accDescr"},{name:"accTitle"},{name:"statements",defaultValue:[]},{name:"title"}]};case kI:return{name:kI,properties:[{name:"icon"},{name:"id"},{name:"in"},{name:"title"}]};case lb:return{name:lb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case EI:return{name:EI,properties:[{name:"id"},{name:"in"}]};case b1:return{name:b1,properties:[{name:"branch"},{name:"id"},{name:"tags",defaultValue:[]},{name:"type"}]};case SI:return{name:SI,properties:[{name:"name"},{name:"value",defaultValue:!1}]};case cb:return{name:cb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"blocks",defaultValue:[]},{name:"title"}]};case ub:return{name:ub,properties:[{name:"end"},{name:"label"},{name:"start"}]};case hb:return{name:hb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"sections",defaultValue:[]},{name:"showData",defaultValue:!1},{name:"title"}]};case fb:return{name:fb,properties:[{name:"label"},{name:"value"}]};case qE:return{name:qE,properties:[{name:"accDescr"},{name:"accTitle"},{name:"axes",defaultValue:[]},{name:"curves",defaultValue:[]},{name:"options",defaultValue:[]},{name:"title"}]};case CI:return{name:CI,properties:[{name:"icon"},{name:"iconText"},{name:"id"},{name:"in"},{name:"title"}]};case HE:return{name:HE,properties:[{name:"accDescr"},{name:"accTitle"},{name:"dir"},{name:"statements",defaultValue:[]},{name:"title"}]};default:return{name:t,properties:[]}}}},Fl=new Pce,PFe=Lt(()=>xce??(xce=Hu('{"$type":"Grammar","isDeclared":true,"name":"Info","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Info","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"InfoGrammar"),BFe=Lt(()=>bce??(bce=Hu(`{"$type":"Grammar","isDeclared":true,"name":"Packet","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Packet","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"packet-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"?"},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}`)),"PacketGrammar"),FFe=Lt(()=>wce??(wce=Hu('{"$type":"Grammar","isDeclared":true,"name":"Pie","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Pie","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"PIE_SECTION_LABEL","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]+\\"/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"PIE_SECTION_VALUE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/(0|[1-9][0-9]*)(\\\\.[0-9]+)?/"},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"PieGrammar"),$Fe=Lt(()=>Tce??(Tce=Hu('{"$type":"Grammar","isDeclared":true,"name":"Architecture","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Architecture","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"groups","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"services","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"junctions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"edges","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"LeftPort","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"RightPort","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Arrow","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"--"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ID","definition":{"$type":"RegexToken","regex":"/[\\\\w]+/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TEXT_ICON","definition":{"$type":"RegexToken","regex":"/\\\\(\\"[^\\"]+\\"\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[[\\\\w ]+\\\\]/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/"},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"ArchitectureGrammar"),zFe=Lt(()=>kce??(kce=Hu(`{"$type":"Grammar","isDeclared":true,"name":"GitGraph","interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"rules":[{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"ParserRule","entry":true,"name":"GitGraph","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Keyword","value":":"}]},{"$type":"Keyword","value":"gitGraph:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Direction","definition":{"$type":"Assignment","feature":"dir","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"LR"},{"$type":"Keyword","value":"TB"},{"$type":"Keyword","value":"BT"}]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Commit","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"commit"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Branch","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"branch"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Merge","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"merge"},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Checkout","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"checkout"},{"$type":"Keyword","value":"switch"}]},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CherryPicking","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"cherry-pick"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+(?=\\\\s)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"types":[],"usedGrammars":[]}`)),"GitGraphGrammar"),GFe=Lt(()=>Ece??(Ece=Hu(`{"$type":"Grammar","isDeclared":true,"name":"Radar","interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]},{"$type":"Interface","name":"Entry","attributes":[{"$type":"TypeAttribute","name":"axis","isOptional":true,"type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@12"}}}},{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}],"superTypes":[]}],"rules":[{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"ParserRule","entry":true,"name":"Radar","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":"radar-beta:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Keyword","value":"axis"},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"curve"},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Label","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Axis","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Curve","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[],"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Entries","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DetailedEntry","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"axis","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@12"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"NumberEntry","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Option","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"showLegend"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"ticks"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"max"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"min"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"graticule"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/(0|[1-9][0-9]*)(\\\\.[0-9]+)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"GRATICULE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"circle"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"polygon"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[a-zA-Z_][a-zA-Z0-9\\\\-_]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"types":[],"usedGrammars":[]}`)),"RadarGrammar"),VFe={languageId:"info",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},UFe={languageId:"packet",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},HFe={languageId:"pie",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},WFe={languageId:"architecture",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},qFe={languageId:"gitGraph",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},YFe={languageId:"radar",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},co={AstReflection:Lt(()=>new Pce,"AstReflection")},_I={Grammar:Lt(()=>PFe(),"Grammar"),LanguageMetaData:Lt(()=>VFe,"LanguageMetaData"),parser:{}},DI={Grammar:Lt(()=>BFe(),"Grammar"),LanguageMetaData:Lt(()=>UFe,"LanguageMetaData"),parser:{}},LI={Grammar:Lt(()=>FFe(),"Grammar"),LanguageMetaData:Lt(()=>HFe,"LanguageMetaData"),parser:{}},RI={Grammar:Lt(()=>$Fe(),"Grammar"),LanguageMetaData:Lt(()=>WFe,"LanguageMetaData"),parser:{}},NI={Grammar:Lt(()=>zFe(),"Grammar"),LanguageMetaData:Lt(()=>qFe,"LanguageMetaData"),parser:{}},MI={Grammar:Lt(()=>GFe(),"Grammar"),LanguageMetaData:Lt(()=>YFe,"LanguageMetaData"),parser:{}},XFe=/accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/,jFe=/accTitle[\t ]*:([^\n\r]*)/,KFe=/title([\t ][^\n\r]*|)/,QFe={ACC_DESCR:XFe,ACC_TITLE:jFe,TITLE:KFe},w1=class extends yp{static{o(this,"AbstractMermaidValueConverter")}static{Lt(this,"AbstractMermaidValueConverter")}runConverter(t,e,r){let n=this.runCommonConverter(t,e,r);return n===void 0&&(n=this.runCustomConverter(t,e,r)),n===void 0?super.runConverter(t,e,r):n}runCommonConverter(t,e,r){let n=QFe[t.name];if(n===void 0)return;let i=n.exec(e);if(i!==null){if(i[1]!==void 0)return i[1].trim().replace(/[\t ]{2,}/gm," ");if(i[2]!==void 0)return i[2].replace(/^\s*/gm,"").replace(/\s+$/gm,"").replace(/[\t ]{2,}/gm," ").replace(/[\n\r]{2,}/gm,`
816 +`)}}},Wu=class extends w1{static{o(this,"CommonValueConverter")}static{Lt(this,"CommonValueConverter")}runCustomConverter(t,e,r){}},$s=class extends Uu{static{o(this,"AbstractMermaidTokenBuilder")}static{Lt(this,"AbstractMermaidTokenBuilder")}constructor(t){super(),this.keywords=new Set(t)}buildKeywordTokens(t,e,r){let n=super.buildKeywordTokens(t,e,r);return n.forEach(i=>{this.keywords.has(i.name)&&i.PATTERN!==void 0&&(i.PATTERN=new RegExp(i.PATTERN.toString()+"(?:(?=%%)|(?!\\S))"))}),n}},ZFe=class extends $s{static{o(this,"CommonTokenBuilder")}static{Lt(this,"CommonTokenBuilder")}}});function XE(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),NI,YE);return e.ServiceRegistry.register(r),{shared:e,GitGraph:r}}var JFe,YE,II=N(()=>{"use strict";zs();Xo();JFe=class extends $s{static{o(this,"GitGraphTokenBuilder")}static{Lt(this,"GitGraphTokenBuilder")}constructor(){super(["gitGraph"])}},YE={parser:{TokenBuilder:Lt(()=>new JFe,"TokenBuilder"),ValueConverter:Lt(()=>new Wu,"ValueConverter")}};o(XE,"createGitGraphServices");Lt(XE,"createGitGraphServices")});function KE(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),_I,jE);return e.ServiceRegistry.register(r),{shared:e,Info:r}}var e$e,jE,OI=N(()=>{"use strict";zs();Xo();e$e=class extends $s{static{o(this,"InfoTokenBuilder")}static{Lt(this,"InfoTokenBuilder")}constructor(){super(["info","showInfo"])}},jE={parser:{TokenBuilder:Lt(()=>new e$e,"TokenBuilder"),ValueConverter:Lt(()=>new Wu,"ValueConverter")}};o(KE,"createInfoServices");Lt(KE,"createInfoServices")});function ZE(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),DI,QE);return e.ServiceRegistry.register(r),{shared:e,Packet:r}}var t$e,QE,PI=N(()=>{"use strict";zs();Xo();t$e=class extends $s{static{o(this,"PacketTokenBuilder")}static{Lt(this,"PacketTokenBuilder")}constructor(){super(["packet-beta"])}},QE={parser:{TokenBuilder:Lt(()=>new t$e,"TokenBuilder"),ValueConverter:Lt(()=>new Wu,"ValueConverter")}};o(ZE,"createPacketServices");Lt(ZE,"createPacketServices")});function e6(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),LI,JE);return e.ServiceRegistry.register(r),{shared:e,Pie:r}}var r$e,n$e,JE,BI=N(()=>{"use strict";zs();Xo();r$e=class extends $s{static{o(this,"PieTokenBuilder")}static{Lt(this,"PieTokenBuilder")}constructor(){super(["pie","showData"])}},n$e=class extends w1{static{o(this,"PieValueConverter")}static{Lt(this,"PieValueConverter")}runCustomConverter(t,e,r){if(t.name==="PIE_SECTION_LABEL")return e.replace(/"/g,"").trim()}},JE={parser:{TokenBuilder:Lt(()=>new r$e,"TokenBuilder"),ValueConverter:Lt(()=>new n$e,"ValueConverter")}};o(e6,"createPieServices");Lt(e6,"createPieServices")});function r6(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),RI,t6);return e.ServiceRegistry.register(r),{shared:e,Architecture:r}}var i$e,a$e,t6,FI=N(()=>{"use strict";zs();Xo();i$e=class extends $s{static{o(this,"ArchitectureTokenBuilder")}static{Lt(this,"ArchitectureTokenBuilder")}constructor(){super(["architecture"])}},a$e=class extends w1{static{o(this,"ArchitectureValueConverter")}static{Lt(this,"ArchitectureValueConverter")}runCustomConverter(t,e,r){if(t.name==="ARCH_ICON")return e.replace(/[()]/g,"").trim();if(t.name==="ARCH_TEXT_ICON")return e.replace(/["()]/g,"");if(t.name==="ARCH_TITLE")return e.replace(/[[\]]/g,"").trim()}},t6={parser:{TokenBuilder:Lt(()=>new i$e,"TokenBuilder"),ValueConverter:Lt(()=>new a$e,"ValueConverter")}};o(r6,"createArchitectureServices");Lt(r6,"createArchitectureServices")});function i6(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),MI,n6);return e.ServiceRegistry.register(r),{shared:e,Radar:r}}var s$e,n6,$I=N(()=>{"use strict";zs();Xo();s$e=class extends $s{static{o(this,"RadarTokenBuilder")}static{Lt(this,"RadarTokenBuilder")}constructor(){super(["radar-beta"])}},n6={parser:{TokenBuilder:Lt(()=>new s$e,"TokenBuilder"),ValueConverter:Lt(()=>new Wu,"ValueConverter")}};o(i6,"createRadarServices");Lt(i6,"createRadarServices")});var Bce={};hr(Bce,{InfoModule:()=>jE,createInfoServices:()=>KE});var Fce=N(()=>{"use strict";OI();zs()});var $ce={};hr($ce,{PacketModule:()=>QE,createPacketServices:()=>ZE});var zce=N(()=>{"use strict";PI();zs()});var Gce={};hr(Gce,{PieModule:()=>JE,createPieServices:()=>e6});var Vce=N(()=>{"use strict";BI();zs()});var Uce={};hr(Uce,{ArchitectureModule:()=>t6,createArchitectureServices:()=>r6});var Hce=N(()=>{"use strict";FI();zs()});var Wce={};hr(Wce,{GitGraphModule:()=>YE,createGitGraphServices:()=>XE});var qce=N(()=>{"use strict";II();zs()});var Yce={};hr(Yce,{RadarModule:()=>n6,createRadarServices:()=>i6});var Xce=N(()=>{"use strict";$I();zs()});async function uo(t,e){let r=o$e[t];if(!r)throw new Error(`Unknown diagram type: ${t}`);df[t]||await r();let i=df[t].parse(e);if(i.lexerErrors.length>0||i.parserErrors.length>0)throw new l$e(i);return i.value}var df,o$e,l$e,kp=N(()=>{"use strict";II();OI();PI();BI();FI();$I();zs();df={},o$e={info:Lt(async()=>{let{createInfoServices:t}=await Promise.resolve().then(()=>(Fce(),Bce)),e=t().Info.parser.LangiumParser;df.info=e},"info"),packet:Lt(async()=>{let{createPacketServices:t}=await Promise.resolve().then(()=>(zce(),$ce)),e=t().Packet.parser.LangiumParser;df.packet=e},"packet"),pie:Lt(async()=>{let{createPieServices:t}=await Promise.resolve().then(()=>(Vce(),Gce)),e=t().Pie.parser.LangiumParser;df.pie=e},"pie"),architecture:Lt(async()=>{let{createArchitectureServices:t}=await Promise.resolve().then(()=>(Hce(),Uce)),e=t().Architecture.parser.LangiumParser;df.architecture=e},"architecture"),gitGraph:Lt(async()=>{let{createGitGraphServices:t}=await Promise.resolve().then(()=>(qce(),Wce)),e=t().GitGraph.parser.LangiumParser;df.gitGraph=e},"gitGraph"),radar:Lt(async()=>{let{createRadarServices:t}=await Promise.resolve().then(()=>(Xce(),Yce)),e=t().Radar.parser.LangiumParser;df.radar=e},"radar")};o(uo,"parse");Lt(uo,"parse");l$e=class extends Error{static{o(this,"MermaidParseError")}constructor(t){let e=t.lexerErrors.map(n=>n.message).join(`
817 +`),r=t.parserErrors.map(n=>n.message).join(`
818 +`);super(`Parsing failed: ${e} ${r}`),this.result=t}static{Lt(this,"MermaidParseError")}}});function $c(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}var T1=N(()=>{"use strict";o($c,"populateCommonDb")});var Kr,a6=N(()=>{"use strict";Kr={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4}});var pf,s6=N(()=>{"use strict";pf=class{constructor(e){this.init=e;this.records=this.init()}static{o(this,"ImperativeState")}reset(){this.records=this.init()}}});function zI(){return j9({length:7})}function u$e(t,e){let r=Object.create(null);return t.reduce((n,i)=>{let a=e(i);return r[a]||(r[a]=!0,n.push(i)),n},[])}function jce(t,e,r){let n=t.indexOf(e);n===-1?t.push(r):t.splice(n,1,r)}function Qce(t){let e=t.reduce((i,a)=>i.seq>a.seq?i:a,t[0]),r="";t.forEach(function(i){i===e?r+=" *":r+=" |"});let n=[r,e.id,e.seq];for(let i in _t.records.branches)_t.records.branches.get(i)===e.id&&n.push(i);if(Y.debug(n.join(" ")),e.parents&&e.parents.length==2&&e.parents[0]&&e.parents[1]){let i=_t.records.commits.get(e.parents[0]);jce(t,e,i),e.parents[1]&&t.push(_t.records.commits.get(e.parents[1]))}else{if(e.parents.length==0)return;if(e.parents[0]){let i=_t.records.commits.get(e.parents[0]);jce(t,e,i)}}t=u$e(t,i=>i.id),Qce(t)}var c$e,Ep,_t,h$e,f$e,d$e,p$e,m$e,g$e,y$e,Kce,v$e,x$e,b$e,w$e,T$e,Zce,k$e,E$e,S$e,o6,GI=N(()=>{"use strict";vt();ir();ji();gr();mi();a6();s6();Ya();c$e=or.gitGraph,Ep=o(()=>Fi({...c$e,...cr().gitGraph}),"getConfig"),_t=new pf(()=>{let t=Ep(),e=t.mainBranchName,r=t.mainBranchOrder;return{mainBranchName:e,commits:new Map,head:null,branchConfig:new Map([[e,{name:e,order:r}]]),branches:new Map([[e,null]]),currBranch:e,direction:"LR",seq:0,options:{}}});o(zI,"getID");o(u$e,"uniqBy");h$e=o(function(t){_t.records.direction=t},"setDirection"),f$e=o(function(t){Y.debug("options str",t),t=t?.trim(),t=t||"{}";try{_t.records.options=JSON.parse(t)}catch(e){Y.error("error while parsing gitGraph options",e.message)}},"setOptions"),d$e=o(function(){return _t.records.options},"getOptions"),p$e=o(function(t){let e=t.msg,r=t.id,n=t.type,i=t.tags;Y.info("commit",e,r,n,i),Y.debug("Entering commit:",e,r,n,i);let a=Ep();r=Ze.sanitizeText(r,a),e=Ze.sanitizeText(e,a),i=i?.map(l=>Ze.sanitizeText(l,a));let s={id:r||_t.records.seq+"-"+zI(),message:e,seq:_t.records.seq++,type:n??Kr.NORMAL,tags:i??[],parents:_t.records.head==null?[]:[_t.records.head.id],branch:_t.records.currBranch};_t.records.head=s,Y.info("main branch",a.mainBranchName),_t.records.commits.set(s.id,s),_t.records.branches.set(_t.records.currBranch,s.id),Y.debug("in pushCommit "+s.id)},"commit"),m$e=o(function(t){let e=t.name,r=t.order;if(e=Ze.sanitizeText(e,Ep()),_t.records.branches.has(e))throw new Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${e}")`);_t.records.branches.set(e,_t.records.head!=null?_t.records.head.id:null),_t.records.branchConfig.set(e,{name:e,order:r}),Kce(e),Y.debug("in createBranch")},"branch"),g$e=o(t=>{let e=t.branch,r=t.id,n=t.type,i=t.tags,a=Ep();e=Ze.sanitizeText(e,a),r&&(r=Ze.sanitizeText(r,a));let s=_t.records.branches.get(_t.records.currBranch),l=_t.records.branches.get(e),u=s?_t.records.commits.get(s):void 0,h=l?_t.records.commits.get(l):void 0;if(u&&h&&u.branch===e)throw new Error(`Cannot merge branch '${e}' into itself.`);if(_t.records.currBranch===e){let p=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(u===void 0||!u){let p=new Error(`Incorrect usage of "merge". Current branch (${_t.records.currBranch})has no commits`);throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["commit"]},p}if(!_t.records.branches.has(e)){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") does not exist");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:[`branch ${e}`]},p}if(h===void 0||!h){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") has no commits");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:['"commit"']},p}if(u===h){let p=new Error('Incorrect usage of "merge". Both branches have same head');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(r&&_t.records.commits.has(r)){let p=new Error('Incorrect usage of "merge". Commit with id:'+r+" already exists, use different custom Id");throw p.hash={text:`merge ${e} ${r} ${n} ${i?.join(" ")}`,token:`merge ${e} ${r} ${n} ${i?.join(" ")}`,expected:[`merge ${e} ${r}_UNIQUE ${n} ${i?.join(" ")}`]},p}let f=l||"",d={id:r||`${_t.records.seq}-${zI()}`,message:`merged branch ${e} into ${_t.records.currBranch}`,seq:_t.records.seq++,parents:_t.records.head==null?[]:[_t.records.head.id,f],branch:_t.records.currBranch,type:Kr.MERGE,customType:n,customId:!!r,tags:i??[]};_t.records.head=d,_t.records.commits.set(d.id,d),_t.records.branches.set(_t.records.currBranch,d.id),Y.debug(_t.records.branches),Y.debug("in mergeBranch")},"merge"),y$e=o(function(t){let e=t.id,r=t.targetId,n=t.tags,i=t.parent;Y.debug("Entering cherryPick:",e,r,n);let a=Ep();if(e=Ze.sanitizeText(e,a),r=Ze.sanitizeText(r,a),n=n?.map(u=>Ze.sanitizeText(u,a)),i=Ze.sanitizeText(i,a),!e||!_t.records.commits.has(e)){let u=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw u.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},u}let s=_t.records.commits.get(e);if(s===void 0||!s)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(i&&!(Array.isArray(s.parents)&&s.parents.includes(i)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");let l=s.branch;if(s.type===Kr.MERGE&&!i)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!r||!_t.records.commits.has(r)){if(l===_t.records.currBranch){let d=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let u=_t.records.branches.get(_t.records.currBranch);if(u===void 0||!u){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${_t.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let h=_t.records.commits.get(u);if(h===void 0||!h){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${_t.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let f={id:_t.records.seq+"-"+zI(),message:`cherry-picked ${s?.message} into ${_t.records.currBranch}`,seq:_t.records.seq++,parents:_t.records.head==null?[]:[_t.records.head.id,s.id],branch:_t.records.currBranch,type:Kr.CHERRY_PICK,tags:n?n.filter(Boolean):[`cherry-pick:${s.id}${s.type===Kr.MERGE?`|parent:${i}`:""}`]};_t.records.head=f,_t.records.commits.set(f.id,f),_t.records.branches.set(_t.records.currBranch,f.id),Y.debug(_t.records.branches),Y.debug("in cherryPick")}},"cherryPick"),Kce=o(function(t){if(t=Ze.sanitizeText(t,Ep()),_t.records.branches.has(t)){_t.records.currBranch=t;let e=_t.records.branches.get(_t.records.currBranch);e===void 0||!e?_t.records.head=null:_t.records.head=_t.records.commits.get(e)??null}else{let e=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${t}")`);throw e.hash={text:`checkout ${t}`,token:`checkout ${t}`,expected:[`branch ${t}`]},e}},"checkout");o(jce,"upsert");o(Qce,"prettyPrintCommitHistory");v$e=o(function(){Y.debug(_t.records.commits);let t=Zce()[0];Qce([t])},"prettyPrint"),x$e=o(function(){_t.reset(),Ar()},"clear"),b$e=o(function(){return[..._t.records.branchConfig.values()].map((e,r)=>e.order!==null&&e.order!==void 0?e:{...e,order:parseFloat(`0.${r}`)}).sort((e,r)=>(e.order??0)-(r.order??0)).map(({name:e})=>({name:e}))},"getBranchesAsObjArray"),w$e=o(function(){return _t.records.branches},"getBranches"),T$e=o(function(){return _t.records.commits},"getCommits"),Zce=o(function(){let t=[..._t.records.commits.values()];return t.forEach(function(e){Y.debug(e.id)}),t.sort((e,r)=>e.seq-r.seq),t},"getCommitsArray"),k$e=o(function(){return _t.records.currBranch},"getCurrentBranch"),E$e=o(function(){return _t.records.direction},"getDirection"),S$e=o(function(){return _t.records.head},"getHead"),o6={commitType:Kr,getConfig:Ep,setDirection:h$e,setOptions:f$e,getOptions:d$e,commit:p$e,branch:m$e,merge:g$e,cherryPick:y$e,checkout:Kce,prettyPrint:v$e,clear:x$e,getBranchesAsObjArray:b$e,getBranches:w$e,getCommits:T$e,getCommitsArray:Zce,getCurrentBranch:k$e,getDirection:E$e,getHead:S$e,setAccTitle:Lr,getAccTitle:Rr,getAccDescription:Mr,setAccDescription:Nr,setDiagramTitle:$r,getDiagramTitle:Ir}});var C$e,A$e,_$e,D$e,L$e,R$e,N$e,Jce,eue=N(()=>{"use strict";kp();vt();T1();GI();a6();C$e=o((t,e)=>{$c(t,e),t.dir&&e.setDirection(t.dir);for(let r of t.statements)A$e(r,e)},"populate"),A$e=o((t,e)=>{let n={Commit:o(i=>e.commit(_$e(i)),"Commit"),Branch:o(i=>e.branch(D$e(i)),"Branch"),Merge:o(i=>e.merge(L$e(i)),"Merge"),Checkout:o(i=>e.checkout(R$e(i)),"Checkout"),CherryPicking:o(i=>e.cherryPick(N$e(i)),"CherryPicking")}[t.$type];n?n(t):Y.error(`Unknown statement type: ${t.$type}`)},"parseStatement"),_$e=o(t=>({id:t.id,msg:t.message??"",type:t.type!==void 0?Kr[t.type]:Kr.NORMAL,tags:t.tags??void 0}),"parseCommit"),D$e=o(t=>({name:t.name,order:t.order??0}),"parseBranch"),L$e=o(t=>({branch:t.branch,id:t.id??"",type:t.type!==void 0?Kr[t.type]:void 0,tags:t.tags??void 0}),"parseMerge"),R$e=o(t=>t.branch,"parseCheckout"),N$e=o(t=>({id:t.id,targetId:"",tags:t.tags?.length===0?void 0:t.tags,parent:t.parent}),"parseCherryPicking"),Jce={parse:o(async t=>{let e=await uo("gitGraph",t);Y.debug(e),C$e(e,o6)},"parse")}});var M$e,Ko,gf,yf,zc,qu,Sp,Gs,Vs,l6,db,c6,mf,Br,I$e,rue,nue,O$e,P$e,B$e,F$e,$$e,z$e,G$e,V$e,U$e,H$e,W$e,q$e,tue,Y$e,pb,X$e,j$e,K$e,Q$e,Z$e,iue,aue=N(()=>{"use strict";dr();zt();vt();ir();a6();M$e=me(),Ko=M$e?.gitGraph,gf=10,yf=40,zc=4,qu=2,Sp=8,Gs=new Map,Vs=new Map,l6=30,db=new Map,c6=[],mf=0,Br="LR",I$e=o(()=>{Gs.clear(),Vs.clear(),db.clear(),mf=0,c6=[],Br="LR"},"clear"),rue=o(t=>{let e=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof t=="string"?t.split(/\\n|\n|<br\s*\/?>/gi):t).forEach(n=>{let i=document.createElementNS("http://www.w3.org/2000/svg","tspan");i.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),i.setAttribute("dy","1em"),i.setAttribute("x","0"),i.setAttribute("class","row"),i.textContent=n.trim(),e.appendChild(i)}),e},"drawText"),nue=o(t=>{let e,r,n;return Br==="BT"?(r=o((i,a)=>i<=a,"comparisonFunc"),n=1/0):(r=o((i,a)=>i>=a,"comparisonFunc"),n=0),t.forEach(i=>{let a=Br==="TB"||Br=="BT"?Vs.get(i)?.y:Vs.get(i)?.x;a!==void 0&&r(a,n)&&(e=i,n=a)}),e},"findClosestParent"),O$e=o(t=>{let e="",r=1/0;return t.forEach(n=>{let i=Vs.get(n).y;i<=r&&(e=n,r=i)}),e||void 0},"findClosestParentBT"),P$e=o((t,e,r)=>{let n=r,i=r,a=[];t.forEach(s=>{let l=e.get(s);if(!l)throw new Error(`Commit not found for key ${s}`);l.parents.length?(n=F$e(l),i=Math.max(n,i)):a.push(l),$$e(l,n)}),n=i,a.forEach(s=>{z$e(s,n,r)}),t.forEach(s=>{let l=e.get(s);if(l?.parents.length){let u=O$e(l.parents);n=Vs.get(u).y-yf,n<=i&&(i=n);let h=Gs.get(l.branch).pos,f=n-gf;Vs.set(l.id,{x:h,y:f})}})},"setParallelBTPos"),B$e=o(t=>{let e=nue(t.parents.filter(n=>n!==null));if(!e)throw new Error(`Closest parent not found for commit ${t.id}`);let r=Vs.get(e)?.y;if(r===void 0)throw new Error(`Closest parent position not found for commit ${t.id}`);return r},"findClosestParentPos"),F$e=o(t=>B$e(t)+yf,"calculateCommitPosition"),$$e=o((t,e)=>{let r=Gs.get(t.branch);if(!r)throw new Error(`Branch not found for commit ${t.id}`);let n=r.pos,i=e+gf;return Vs.set(t.id,{x:n,y:i}),{x:n,y:i}},"setCommitPosition"),z$e=o((t,e,r)=>{let n=Gs.get(t.branch);if(!n)throw new Error(`Branch not found for commit ${t.id}`);let i=e+r,a=n.pos;Vs.set(t.id,{x:a,y:i})},"setRootPosition"),G$e=o((t,e,r,n,i,a)=>{if(a===Kr.HIGHLIGHT)t.append("rect").attr("x",r.x-10).attr("y",r.y-10).attr("width",20).attr("height",20).attr("class",`commit ${e.id} commit-highlight${i%Sp} ${n}-outer`),t.append("rect").attr("x",r.x-6).attr("y",r.y-6).attr("width",12).attr("height",12).attr("class",`commit ${e.id} commit${i%Sp} ${n}-inner`);else if(a===Kr.CHERRY_PICK)t.append("circle").attr("cx",r.x).attr("cy",r.y).attr("r",10).attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x-3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x+3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x+3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x-3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`);else{let s=t.append("circle");if(s.attr("cx",r.x),s.attr("cy",r.y),s.attr("r",e.type===Kr.MERGE?9:10),s.attr("class",`commit ${e.id} commit${i%Sp}`),a===Kr.MERGE){let l=t.append("circle");l.attr("cx",r.x),l.attr("cy",r.y),l.attr("r",6),l.attr("class",`commit ${n} ${e.id} commit${i%Sp}`)}a===Kr.REVERSE&&t.append("path").attr("d",`M ${r.x-5},${r.y-5}L${r.x+5},${r.y+5}M${r.x-5},${r.y+5}L${r.x+5},${r.y-5}`).attr("class",`commit ${n} ${e.id} commit${i%Sp}`)}},"drawCommitBullet"),V$e=o((t,e,r,n)=>{if(e.type!==Kr.CHERRY_PICK&&(e.customId&&e.type===Kr.MERGE||e.type!==Kr.MERGE)&&Ko?.showCommitLabel){let i=t.append("g"),a=i.insert("rect").attr("class","commit-label-bkg"),s=i.append("text").attr("x",n).attr("y",r.y+25).attr("class","commit-label").text(e.id),l=s.node()?.getBBox();if(l&&(a.attr("x",r.posWithOffset-l.width/2-qu).attr("y",r.y+13.5).attr("width",l.width+2*qu).attr("height",l.height+2*qu),Br==="TB"||Br==="BT"?(a.attr("x",r.x-(l.width+4*zc+5)).attr("y",r.y-12),s.attr("x",r.x-(l.width+4*zc)).attr("y",r.y+l.height-12)):s.attr("x",r.posWithOffset-l.width/2),Ko.rotateCommitLabel))if(Br==="TB"||Br==="BT")s.attr("transform","rotate(-45, "+r.x+", "+r.y+")"),a.attr("transform","rotate(-45, "+r.x+", "+r.y+")");else{let u=-7.5-(l.width+10)/25*9.5,h=10+l.width/25*8.5;i.attr("transform","translate("+u+", "+h+") rotate(-45, "+n+", "+r.y+")")}}},"drawCommitLabel"),U$e=o((t,e,r,n)=>{if(e.tags.length>0){let i=0,a=0,s=0,l=[];for(let u of e.tags.reverse()){let h=t.insert("polygon"),f=t.append("circle"),d=t.append("text").attr("y",r.y-16-i).attr("class","tag-label").text(u),p=d.node()?.getBBox();if(!p)throw new Error("Tag bbox not found");a=Math.max(a,p.width),s=Math.max(s,p.height),d.attr("x",r.posWithOffset-p.width/2),l.push({tag:d,hole:f,rect:h,yOffset:i}),i+=20}for(let{tag:u,hole:h,rect:f,yOffset:d}of l){let p=s/2,m=r.y-19.2-d;if(f.attr("class","tag-label-bkg").attr("points",`
819 + ${n-a/2-zc/2},${m+qu}
820 + ${n-a/2-zc/2},${m-qu}
821 + ${r.posWithOffset-a/2-zc},${m-p-qu}
822 + ${r.posWithOffset+a/2+zc},${m-p-qu}
823 + ${r.posWithOffset+a/2+zc},${m+p+qu}
824 + ${r.posWithOffset-a/2-zc},${m+p+qu}`),h.attr("cy",m).attr("cx",n-a/2+zc/2).attr("r",1.5).attr("class","tag-hole"),Br==="TB"||Br==="BT"){let g=n+d;f.attr("class","tag-label-bkg").attr("points",`
825 + ${r.x},${g+2}
826 + ${r.x},${g-2}
827 + ${r.x+gf},${g-p-2}
828 + ${r.x+gf+a+4},${g-p-2}
829 + ${r.x+gf+a+4},${g+p+2}
830 + ${r.x+gf},${g+p+2}`).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),h.attr("cx",r.x+zc/2).attr("cy",g).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),u.attr("x",r.x+5).attr("y",g+3).attr("transform","translate(14,14) rotate(45, "+r.x+","+n+")")}}}},"drawCommitTags"),H$e=o(t=>{switch(t.customType??t.type){case Kr.NORMAL:return"commit-normal";case Kr.REVERSE:return"commit-reverse";case Kr.HIGHLIGHT:return"commit-highlight";case Kr.MERGE:return"commit-merge";case Kr.CHERRY_PICK:return"commit-cherry-pick";default:return"commit-normal"}},"getCommitClassType"),W$e=o((t,e,r,n)=>{let i={x:0,y:0};if(t.parents.length>0){let a=nue(t.parents);if(a){let s=n.get(a)??i;return e==="TB"?s.y+yf:e==="BT"?(n.get(t.id)??i).y-yf:s.x+yf}}else return e==="TB"?l6:e==="BT"?(n.get(t.id)??i).y-yf:0;return 0},"calculatePosition"),q$e=o((t,e,r)=>{let n=Br==="BT"&&r?e:e+gf,i=Br==="TB"||Br==="BT"?n:Gs.get(t.branch)?.pos,a=Br==="TB"||Br==="BT"?Gs.get(t.branch)?.pos:n;if(a===void 0||i===void 0)throw new Error(`Position were undefined for commit ${t.id}`);return{x:a,y:i,posWithOffset:n}},"getCommitPosition"),tue=o((t,e,r)=>{if(!Ko)throw new Error("GitGraph config not found");let n=t.append("g").attr("class","commit-bullets"),i=t.append("g").attr("class","commit-labels"),a=Br==="TB"||Br==="BT"?l6:0,s=[...e.keys()],l=Ko?.parallelCommits??!1,u=o((f,d)=>{let p=e.get(f)?.seq,m=e.get(d)?.seq;return p!==void 0&&m!==void 0?p-m:0},"sortKeys"),h=s.sort(u);Br==="BT"&&(l&&P$e(h,e,a),h=h.reverse()),h.forEach(f=>{let d=e.get(f);if(!d)throw new Error(`Commit not found for key ${f}`);l&&(a=W$e(d,Br,a,Vs));let p=q$e(d,a,l);if(r){let m=H$e(d),g=d.customType??d.type,y=Gs.get(d.branch)?.index??0;G$e(n,d,p,m,y,g),V$e(i,d,p,a),U$e(i,d,p,a)}Br==="TB"||Br==="BT"?Vs.set(d.id,{x:p.x,y:p.posWithOffset}):Vs.set(d.id,{x:p.posWithOffset,y:p.y}),a=Br==="BT"&&l?a+yf:a+yf+gf,a>mf&&(mf=a)})},"drawCommits"),Y$e=o((t,e,r,n,i)=>{let s=(Br==="TB"||Br==="BT"?r.x<n.x:r.y<n.y)?e.branch:t.branch,l=o(h=>h.branch===s,"isOnBranchToGetCurve"),u=o(h=>h.seq>t.seq&&h.seq<e.seq,"isBetweenCommits");return[...i.values()].some(h=>u(h)&&l(h))},"shouldRerouteArrow"),pb=o((t,e,r=0)=>{let n=t+Math.abs(t-e)/2;if(r>5)return n;if(c6.every(s=>Math.abs(s-n)>=10))return c6.push(n),n;let a=Math.abs(t-e);return pb(t,e-a/5,r+1)},"findLane"),X$e=o((t,e,r,n)=>{let i=Vs.get(e.id),a=Vs.get(r.id);if(i===void 0||a===void 0)throw new Error(`Commit positions not found for commits ${e.id} and ${r.id}`);let s=Y$e(e,r,i,a,n),l="",u="",h=0,f=0,d=Gs.get(r.branch)?.index;r.type===Kr.MERGE&&e.id!==r.parents[0]&&(d=Gs.get(e.branch)?.index);let p;if(s){l="A 10 10, 0, 0, 0,",u="A 10 10, 0, 0, 1,",h=10,f=10;let m=i.y<a.y?pb(i.y,a.y):pb(a.y,i.y),g=i.x<a.x?pb(i.x,a.x):pb(a.x,i.x);Br==="TB"?i.x<a.x?p=`M ${i.x} ${i.y} L ${g-h} ${i.y} ${u} ${g} ${i.y+f} L ${g} ${a.y-h} ${l} ${g+f} ${a.y} L ${a.x} ${a.y}`:(d=Gs.get(e.branch)?.index,p=`M ${i.x} ${i.y} L ${g+h} ${i.y} ${l} ${g} ${i.y+f} L ${g} ${a.y-h} ${u} ${g-f} ${a.y} L ${a.x} ${a.y}`):Br==="BT"?i.x<a.x?p=`M ${i.x} ${i.y} L ${g-h} ${i.y} ${l} ${g} ${i.y-f} L ${g} ${a.y+h} ${u} ${g+f} ${a.y} L ${a.x} ${a.y}`:(d=Gs.get(e.branch)?.index,p=`M ${i.x} ${i.y} L ${g+h} ${i.y} ${u} ${g} ${i.y-f} L ${g} ${a.y+h} ${l} ${g-f} ${a.y} L ${a.x} ${a.y}`):i.y<a.y?p=`M ${i.x} ${i.y} L ${i.x} ${m-h} ${l} ${i.x+f} ${m} L ${a.x-h} ${m} ${u} ${a.x} ${m+f} L ${a.x} ${a.y}`:(d=Gs.get(e.branch)?.index,p=`M ${i.x} ${i.y} L ${i.x} ${m+h} ${u} ${i.x+f} ${m} L ${a.x-h} ${m} ${l} ${a.x} ${m-f} L ${a.x} ${a.y}`)}else l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,Br==="TB"?(i.x<a.x&&(r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${l} ${i.x+f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${u} ${a.x} ${i.y+f} L ${a.x} ${a.y}`),i.x>a.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${u} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x+h} ${i.y} ${l} ${a.x} ${i.y+f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):Br==="BT"?(i.x<a.x&&(r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${u} ${i.x+f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`),i.x>a.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${l} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):(i.y<a.y&&(r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${u} ${a.x} ${i.y+f} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${l} ${i.x+f} ${a.y} L ${a.x} ${a.y}`),i.y>a.y&&(r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${u} ${i.x+f} ${a.y} L ${a.x} ${a.y}`),i.y===a.y&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`));if(p===void 0)throw new Error("Line definition not found");t.append("path").attr("d",p).attr("class","arrow arrow"+d%Sp)},"drawArrow"),j$e=o((t,e)=>{let r=t.append("g").attr("class","commit-arrows");[...e.keys()].forEach(n=>{let i=e.get(n);i.parents&&i.parents.length>0&&i.parents.forEach(a=>{X$e(r,e.get(a),i,e)})})},"drawArrows"),K$e=o((t,e)=>{let r=t.append("g");e.forEach((n,i)=>{let a=i%Sp,s=Gs.get(n.name)?.pos;if(s===void 0)throw new Error(`Position not found for branch ${n.name}`);let l=r.append("line");l.attr("x1",0),l.attr("y1",s),l.attr("x2",mf),l.attr("y2",s),l.attr("class","branch branch"+a),Br==="TB"?(l.attr("y1",l6),l.attr("x1",s),l.attr("y2",mf),l.attr("x2",s)):Br==="BT"&&(l.attr("y1",mf),l.attr("x1",s),l.attr("y2",l6),l.attr("x2",s)),c6.push(s);let u=n.name,h=rue(u),f=r.insert("rect"),p=r.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+a);p.node().appendChild(h);let m=h.getBBox();f.attr("class","branchLabelBkg label"+a).attr("rx",4).attr("ry",4).attr("x",-m.width-4-(Ko?.rotateCommitLabel===!0?30:0)).attr("y",-m.height/2+8).attr("width",m.width+18).attr("height",m.height+4),p.attr("transform","translate("+(-m.width-14-(Ko?.rotateCommitLabel===!0?30:0))+", "+(s-m.height/2-1)+")"),Br==="TB"?(f.attr("x",s-m.width/2-10).attr("y",0),p.attr("transform","translate("+(s-m.width/2-5)+", 0)")):Br==="BT"?(f.attr("x",s-m.width/2-10).attr("y",mf),p.attr("transform","translate("+(s-m.width/2-5)+", "+mf+")")):f.attr("transform","translate(-19, "+(s-m.height/2)+")")})},"drawBranches"),Q$e=o(function(t,e,r,n,i){return Gs.set(t,{pos:e,index:r}),e+=50+(i?40:0)+(Br==="TB"||Br==="BT"?n.width/2:0),e},"setBranchPosition"),Z$e=o(function(t,e,r,n){if(I$e(),Y.debug("in gitgraph renderer",t+`
831 +`,"id:",e,r),!Ko)throw new Error("GitGraph config not found");let i=Ko.rotateCommitLabel??!1,a=n.db;db=a.getCommits();let s=a.getBranchesAsObjArray();Br=a.getDirection();let l=Ge(`[id="${e}"]`),u=0;s.forEach((h,f)=>{let d=rue(h.name),p=l.append("g"),m=p.insert("g").attr("class","branchLabel"),g=m.insert("g").attr("class","label branch-label");g.node()?.appendChild(d);let y=d.getBBox();u=Q$e(h.name,u,f,y,i),g.remove(),m.remove(),p.remove()}),tue(l,db,!1),Ko.showBranches&&K$e(l,s),j$e(l,db),tue(l,db,!0),Gt.insertTitle(l,"gitTitleText",Ko.titleTopMargin??0,a.getDiagramTitle()),oA(void 0,l,Ko.diagramPadding,Ko.useMaxWidth)},"draw"),iue={draw:Z$e}});var J$e,sue,oue=N(()=>{"use strict";J$e=o(t=>`
832 + .commit-id,
833 + .commit-msg,
834 + .branch-label {
835 + fill: lightgrey;
836 + color: lightgrey;
837 + font-family: 'trebuchet ms', verdana, arial, sans-serif;
838 + font-family: var(--mermaid-font-family);
839 + }
840 + ${[0,1,2,3,4,5,6,7].map(e=>`
841 + .branch-label${e} { fill: ${t["gitBranchLabel"+e]}; }
842 + .commit${e} { stroke: ${t["git"+e]}; fill: ${t["git"+e]}; }
843 + .commit-highlight${e} { stroke: ${t["gitInv"+e]}; fill: ${t["gitInv"+e]}; }
844 + .label${e} { fill: ${t["git"+e]}; }
845 + .arrow${e} { stroke: ${t["git"+e]}; }
846 + `).join(`
847 +`)}
848 +
849 + .branch {
850 + stroke-width: 1;
851 + stroke: ${t.lineColor};
852 + stroke-dasharray: 2;
853 + }
854 + .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelColor};}
855 + .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelBackground}; opacity: 0.5; }
856 + .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};}
857 + .tag-label-bkg { fill: ${t.tagLabelBackground}; stroke: ${t.tagLabelBorder}; }
858 + .tag-hole { fill: ${t.textColor}; }
859 +
860 + .commit-merge {
861 + stroke: ${t.primaryColor};
862 + fill: ${t.primaryColor};
863 + }
864 + .commit-reverse {
865 + stroke: ${t.primaryColor};
866 + fill: ${t.primaryColor};
867 + stroke-width: 3;
868 + }
869 + .commit-highlight-outer {
870 + }
871 + .commit-highlight-inner {
872 + stroke: ${t.primaryColor};
873 + fill: ${t.primaryColor};
874 + }
875 +
876 + .arrow { stroke-width: 8; stroke-linecap: round; fill: none}
877 + .gitTitleText {
878 + text-anchor: middle;
879 + font-size: 18px;
880 + fill: ${t.textColor};
881 + }
882 +`,"getStyles"),sue=J$e});var lue={};hr(lue,{diagram:()=>eze});var eze,cue=N(()=>{"use strict";eue();GI();aue();oue();eze={parser:Jce,db:o6,renderer:iue,styles:sue}});var VI,fue,due=N(()=>{"use strict";VI=function(){var t=o(function(L,R,O,M){for(O=O||{},M=L.length;M--;O[L[M]]=R);return O},"o"),e=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],r=[1,26],n=[1,27],i=[1,28],a=[1,29],s=[1,30],l=[1,31],u=[1,32],h=[1,33],f=[1,34],d=[1,9],p=[1,10],m=[1,11],g=[1,12],y=[1,13],v=[1,14],x=[1,15],b=[1,16],w=[1,19],C=[1,20],T=[1,21],E=[1,22],A=[1,23],S=[1,25],_=[1,35],I={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:o(function(R,O,M,B,F,P,z){var $=P.length-1;switch(F){case 1:return P[$-1];case 2:this.$=[];break;case 3:P[$-1].push(P[$]),this.$=P[$-1];break;case 4:case 5:this.$=P[$];break;case 6:case 7:this.$=[];break;case 8:B.setWeekday("monday");break;case 9:B.setWeekday("tuesday");break;case 10:B.setWeekday("wednesday");break;case 11:B.setWeekday("thursday");break;case 12:B.setWeekday("friday");break;case 13:B.setWeekday("saturday");break;case 14:B.setWeekday("sunday");break;case 15:B.setWeekend("friday");break;case 16:B.setWeekend("saturday");break;case 17:B.setDateFormat(P[$].substr(11)),this.$=P[$].substr(11);break;case 18:B.enableInclusiveEndDates(),this.$=P[$].substr(18);break;case 19:B.TopAxis(),this.$=P[$].substr(8);break;case 20:B.setAxisFormat(P[$].substr(11)),this.$=P[$].substr(11);break;case 21:B.setTickInterval(P[$].substr(13)),this.$=P[$].substr(13);break;case 22:B.setExcludes(P[$].substr(9)),this.$=P[$].substr(9);break;case 23:B.setIncludes(P[$].substr(9)),this.$=P[$].substr(9);break;case 24:B.setTodayMarker(P[$].substr(12)),this.$=P[$].substr(12);break;case 27:B.setDiagramTitle(P[$].substr(6)),this.$=P[$].substr(6);break;case 28:this.$=P[$].trim(),B.setAccTitle(this.$);break;case 29:case 30:this.$=P[$].trim(),B.setAccDescription(this.$);break;case 31:B.addSection(P[$].substr(8)),this.$=P[$].substr(8);break;case 33:B.addTask(P[$-1],P[$]),this.$="task";break;case 34:this.$=P[$-1],B.setClickEvent(P[$-1],P[$],null);break;case 35:this.$=P[$-2],B.setClickEvent(P[$-2],P[$-1],P[$]);break;case 36:this.$=P[$-2],B.setClickEvent(P[$-2],P[$-1],null),B.setLink(P[$-2],P[$]);break;case 37:this.$=P[$-3],B.setClickEvent(P[$-3],P[$-2],P[$-1]),B.setLink(P[$-3],P[$]);break;case 38:this.$=P[$-2],B.setClickEvent(P[$-2],P[$],null),B.setLink(P[$-2],P[$-1]);break;case 39:this.$=P[$-3],B.setClickEvent(P[$-3],P[$-1],P[$]),B.setLink(P[$-3],P[$-2]);break;case 40:this.$=P[$-1],B.setLink(P[$-1],P[$]);break;case 41:case 47:this.$=P[$-1]+" "+P[$];break;case 42:case 43:case 45:this.$=P[$-2]+" "+P[$-1]+" "+P[$];break;case 44:case 46:this.$=P[$-3]+" "+P[$-2]+" "+P[$-1]+" "+P[$];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:w,31:C,33:T,35:E,36:A,37:24,38:S,40:_},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:36,11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:w,31:C,33:T,35:E,36:A,37:24,38:S,40:_},t(e,[2,5]),t(e,[2,6]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),t(e,[2,27]),{32:[1,37]},{34:[1,38]},t(e,[2,30]),t(e,[2,31]),t(e,[2,32]),{39:[1,39]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),{41:[1,40],43:[1,41]},t(e,[2,4]),t(e,[2,28]),t(e,[2,29]),t(e,[2,33]),t(e,[2,34],{42:[1,42],43:[1,43]}),t(e,[2,40],{41:[1,44]}),t(e,[2,35],{43:[1,45]}),t(e,[2,36]),t(e,[2,38],{42:[1,46]}),t(e,[2,37]),t(e,[2,39])],defaultActions:{},parseError:o(function(R,O){if(O.recoverable)this.trace(R);else{var M=new Error(R);throw M.hash=O,M}},"parseError"),parse:o(function(R){var O=this,M=[0],B=[],F=[null],P=[],z=this.table,$="",H=0,Q=0,j=0,ie=2,ne=1,le=P.slice.call(arguments,1),he=Object.create(this.lexer),K={yy:{}};for(var X in this.yy)Object.prototype.hasOwnProperty.call(this.yy,X)&&(K.yy[X]=this.yy[X]);he.setInput(R,K.yy),K.yy.lexer=he,K.yy.parser=this,typeof he.yylloc>"u"&&(he.yylloc={});var te=he.yylloc;P.push(te);var J=he.options&&he.options.ranges;typeof K.yy.parseError=="function"?this.parseError=K.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function se(W){M.length=M.length-2*W,F.length=F.length-W,P.length=P.length-W}o(se,"popStack");function ue(){var W;return W=B.pop()||he.lex()||ne,typeof W!="number"&&(W instanceof Array&&(B=W,W=B.pop()),W=O.symbols_[W]||W),W}o(ue,"lex");for(var Z,Se,ce,ae,Oe,ge,ze={},He,$e,Re,Ie;;){if(ce=M[M.length-1],this.defaultActions[ce]?ae=this.defaultActions[ce]:((Z===null||typeof Z>"u")&&(Z=ue()),ae=z[ce]&&z[ce][Z]),typeof ae>"u"||!ae.length||!ae[0]){var be="";Ie=[];for(He in z[ce])this.terminals_[He]&&He>ie&&Ie.push("'"+this.terminals_[He]+"'");he.showPosition?be="Parse error on line "+(H+1)+`:
883 +`+he.showPosition()+`
884 +Expecting `+Ie.join(", ")+", got '"+(this.terminals_[Z]||Z)+"'":be="Parse error on line "+(H+1)+": Unexpected "+(Z==ne?"end of input":"'"+(this.terminals_[Z]||Z)+"'"),this.parseError(be,{text:he.match,token:this.terminals_[Z]||Z,line:he.yylineno,loc:te,expected:Ie})}if(ae[0]instanceof Array&&ae.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ce+", token: "+Z);switch(ae[0]){case 1:M.push(Z),F.push(he.yytext),P.push(he.yylloc),M.push(ae[1]),Z=null,Se?(Z=Se,Se=null):(Q=he.yyleng,$=he.yytext,H=he.yylineno,te=he.yylloc,j>0&&j--);break;case 2:if($e=this.productions_[ae[1]][1],ze.$=F[F.length-$e],ze._$={first_line:P[P.length-($e||1)].first_line,last_line:P[P.length-1].last_line,first_column:P[P.length-($e||1)].first_column,last_column:P[P.length-1].last_column},J&&(ze._$.range=[P[P.length-($e||1)].range[0],P[P.length-1].range[1]]),ge=this.performAction.apply(ze,[$,Q,H,K.yy,ae[1],F,P].concat(le)),typeof ge<"u")return ge;$e&&(M=M.slice(0,-1*$e*2),F=F.slice(0,-1*$e),P=P.slice(0,-1*$e)),M.push(this.productions_[ae[1]][0]),F.push(ze.$),P.push(ze._$),Re=z[M[M.length-2]][M[M.length-1]],M.push(Re);break;case 3:return!0}}return!0},"parse")},D=function(){var L={EOF:1,parseError:o(function(O,M){if(this.yy.parser)this.yy.parser.parseError(O,M);else throw new Error(O)},"parseError"),setInput:o(function(R,O){return this.yy=O||this.yy||{},this._input=R,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var R=this._input[0];this.yytext+=R,this.yyleng++,this.offset++,this.match+=R,this.matched+=R;var O=R.match(/(?:\r\n?|\n).*/g);return O?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),R},"input"),unput:o(function(R){var O=R.length,M=R.split(/(?:\r\n?|\n)/g);this._input=R+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-O),this.offset-=O;var B=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),M.length-1&&(this.yylineno-=M.length-1);var F=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:M?(M.length===B.length?this.yylloc.first_column:0)+B[B.length-M.length].length-M[0].length:this.yylloc.first_column-O},this.options.ranges&&(this.yylloc.range=[F[0],F[0]+this.yyleng-O]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
885 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(R){this.unput(this.match.slice(R))},"less"),pastInput:o(function(){var R=this.matched.substr(0,this.matched.length-this.match.length);return(R.length>20?"...":"")+R.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var R=this.match;return R.length<20&&(R+=this._input.substr(0,20-R.length)),(R.substr(0,20)+(R.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var R=this.pastInput(),O=new Array(R.length+1).join("-");return R+this.upcomingInput()+`
886 +`+O+"^"},"showPosition"),test_match:o(function(R,O){var M,B,F;if(this.options.backtrack_lexer&&(F={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(F.yylloc.range=this.yylloc.range.slice(0))),B=R[0].match(/(?:\r\n?|\n).*/g),B&&(this.yylineno+=B.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:B?B[B.length-1].length-B[B.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+R[0].length},this.yytext+=R[0],this.match+=R[0],this.matches=R,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(R[0].length),this.matched+=R[0],M=this.performAction.call(this,this.yy,this,O,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),M)return M;if(this._backtrack){for(var P in F)this[P]=F[P];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var R,O,M,B;this._more||(this.yytext="",this.match="");for(var F=this._currentRules(),P=0;P<F.length;P++)if(M=this._input.match(this.rules[F[P]]),M&&(!O||M[0].length>O[0].length)){if(O=M,B=P,this.options.backtrack_lexer){if(R=this.test_match(M,F[P]),R!==!1)return R;if(this._backtrack){O=!1;continue}else return!1}else if(!this.options.flex)break}return O?(R=this.test_match(O,F[B]),R!==!1?R:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
887 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var O=this.next();return O||this.lex()},"lex"),begin:o(function(O){this.conditionStack.push(O)},"begin"),popState:o(function(){var O=this.conditionStack.length-1;return O>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(O){return O=this.conditionStack.length-1-Math.abs(O||0),O>=0?this.conditionStack[O]:"INITIAL"},"topState"),pushState:o(function(O){this.begin(O)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(O,M,B,F){var P=F;switch(B){case 0:return this.begin("open_directive"),"open_directive";break;case 1:return this.begin("acc_title"),31;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),33;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:this.begin("href");break;case 15:this.popState();break;case 16:return 43;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 41;case 21:this.popState();break;case 22:return 42;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 40;case 26:return 4;case 27:return 22;case 28:return 23;case 29:return 24;case 30:return 25;case 31:return 26;case 32:return 28;case 33:return 27;case 34:return 29;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return 20;case 43:return 21;case 44:return"date";case 45:return 30;case 46:return"accDescription";case 47:return 36;case 48:return 38;case 49:return 39;case 50:return":";case 51:return 6;case 52:return"INVALID"}},"anonymous"),rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:weekend\s+friday\b)/i,/^(?:weekend\s+saturday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],inclusive:!0}}};return L}();I.lexer=D;function k(){this.yy={}}return o(k,"Parser"),k.prototype=I,I.Parser=k,new k}();VI.parser=VI;fue=VI});var pue=Mi((UI,HI)=>{"use strict";(function(t,e){typeof UI=="object"&&typeof HI<"u"?HI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_isoWeek=e()})(UI,function(){"use strict";var t="day";return function(e,r,n){var i=o(function(l){return l.add(4-l.isoWeekday(),t)},"a"),a=r.prototype;a.isoWeekYear=function(){return i(this).year()},a.isoWeek=function(l){if(!this.$utils().u(l))return this.add(7*(l-this.isoWeek()),t);var u,h,f,d,p=i(this),m=(u=this.isoWeekYear(),h=this.$u,f=(h?n.utc:n)().year(u).startOf("year"),d=4-f.isoWeekday(),f.isoWeekday()>4&&(d+=7),f.add(d,t));return p.diff(m,"week")+1},a.isoWeekday=function(l){return this.$utils().u(l)?this.day()||7:this.day(this.day()%7?l:l-7)};var s=a.startOf;a.startOf=function(l,u){var h=this.$utils(),f=!!h.u(u)||u;return h.p(l)==="isoweek"?f?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(l,u)}}})});var mue=Mi((WI,qI)=>{"use strict";(function(t,e){typeof WI=="object"&&typeof qI<"u"?qI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_customParseFormat=e()})(WI,function(){"use strict";var t={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,r=/\d/,n=/\d\d/,i=/\d\d?/,a=/\d*[^-_:/,()\s\d]+/,s={},l=o(function(g){return(g=+g)+(g>68?1900:2e3)},"a"),u=o(function(g){return function(y){this[g]=+y}},"f"),h=[/[+-]\d\d:?(\d\d)?|Z/,function(g){(this.zone||(this.zone={})).offset=function(y){if(!y||y==="Z")return 0;var v=y.match(/([+-]|\d\d)/g),x=60*v[1]+(+v[2]||0);return x===0?0:v[0]==="+"?-x:x}(g)}],f=o(function(g){var y=s[g];return y&&(y.indexOf?y:y.s.concat(y.f))},"u"),d=o(function(g,y){var v,x=s.meridiem;if(x){for(var b=1;b<=24;b+=1)if(g.indexOf(x(b,0,y))>-1){v=b>12;break}}else v=g===(y?"pm":"PM");return v},"d"),p={A:[a,function(g){this.afternoon=d(g,!1)}],a:[a,function(g){this.afternoon=d(g,!0)}],Q:[r,function(g){this.month=3*(g-1)+1}],S:[r,function(g){this.milliseconds=100*+g}],SS:[n,function(g){this.milliseconds=10*+g}],SSS:[/\d{3}/,function(g){this.milliseconds=+g}],s:[i,u("seconds")],ss:[i,u("seconds")],m:[i,u("minutes")],mm:[i,u("minutes")],H:[i,u("hours")],h:[i,u("hours")],HH:[i,u("hours")],hh:[i,u("hours")],D:[i,u("day")],DD:[n,u("day")],Do:[a,function(g){var y=s.ordinal,v=g.match(/\d+/);if(this.day=v[0],y)for(var x=1;x<=31;x+=1)y(x).replace(/\[|\]/g,"")===g&&(this.day=x)}],w:[i,u("week")],ww:[n,u("week")],M:[i,u("month")],MM:[n,u("month")],MMM:[a,function(g){var y=f("months"),v=(f("monthsShort")||y.map(function(x){return x.slice(0,3)})).indexOf(g)+1;if(v<1)throw new Error;this.month=v%12||v}],MMMM:[a,function(g){var y=f("months").indexOf(g)+1;if(y<1)throw new Error;this.month=y%12||y}],Y:[/[+-]?\d+/,u("year")],YY:[n,function(g){this.year=l(g)}],YYYY:[/\d{4}/,u("year")],Z:h,ZZ:h};function m(g){var y,v;y=g,v=s&&s.formats;for(var x=(g=y.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(S,_,I){var D=I&&I.toUpperCase();return _||v[I]||t[I]||v[D].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(k,L,R){return L||R.slice(1)})})).match(e),b=x.length,w=0;w<b;w+=1){var C=x[w],T=p[C],E=T&&T[0],A=T&&T[1];x[w]=A?{regex:E,parser:A}:C.replace(/^\[|\]$/g,"")}return function(S){for(var _={},I=0,D=0;I<b;I+=1){var k=x[I];if(typeof k=="string")D+=k.length;else{var L=k.regex,R=k.parser,O=S.slice(D),M=L.exec(O)[0];R.call(_,M),S=S.replace(M,"")}}return function(B){var F=B.afternoon;if(F!==void 0){var P=B.hours;F?P<12&&(B.hours+=12):P===12&&(B.hours=0),delete B.afternoon}}(_),_}}return o(m,"l"),function(g,y,v){v.p.customParseFormat=!0,g&&g.parseTwoDigitYear&&(l=g.parseTwoDigitYear);var x=y.prototype,b=x.parse;x.parse=function(w){var C=w.date,T=w.utc,E=w.args;this.$u=T;var A=E[1];if(typeof A=="string"){var S=E[2]===!0,_=E[3]===!0,I=S||_,D=E[2];_&&(D=E[2]),s=this.$locale(),!S&&D&&(s=v.Ls[D]),this.$d=function(O,M,B,F){try{if(["x","X"].indexOf(M)>-1)return new Date((M==="X"?1e3:1)*O);var P=m(M)(O),z=P.year,$=P.month,H=P.day,Q=P.hours,j=P.minutes,ie=P.seconds,ne=P.milliseconds,le=P.zone,he=P.week,K=new Date,X=H||(z||$?1:K.getDate()),te=z||K.getFullYear(),J=0;z&&!$||(J=$>0?$-1:K.getMonth());var se,ue=Q||0,Z=j||0,Se=ie||0,ce=ne||0;return le?new Date(Date.UTC(te,J,X,ue,Z,Se,ce+60*le.offset*1e3)):B?new Date(Date.UTC(te,J,X,ue,Z,Se,ce)):(se=new Date(te,J,X,ue,Z,Se,ce),he&&(se=F(se).week(he).toDate()),se)}catch{return new Date("")}}(C,A,T,v),this.init(),D&&D!==!0&&(this.$L=this.locale(D).$L),I&&C!=this.format(A)&&(this.$d=new Date("")),s={}}else if(A instanceof Array)for(var k=A.length,L=1;L<=k;L+=1){E[1]=A[L-1];var R=v.apply(this,E);if(R.isValid()){this.$d=R.$d,this.$L=R.$L,this.init();break}L===k&&(this.$d=new Date(""))}else b.call(this,w)}}})});var gue=Mi((YI,XI)=>{"use strict";(function(t,e){typeof YI=="object"&&typeof XI<"u"?XI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_advancedFormat=e()})(YI,function(){"use strict";return function(t,e){var r=e.prototype,n=r.format;r.format=function(i){var a=this,s=this.$locale();if(!this.isValid())return n.bind(this)(i);var l=this.$utils(),u=(i||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(h){switch(h){case"Q":return Math.ceil((a.$M+1)/3);case"Do":return s.ordinal(a.$D);case"gggg":return a.weekYear();case"GGGG":return a.isoWeekYear();case"wo":return s.ordinal(a.week(),"W");case"w":case"ww":return l.s(a.week(),h==="w"?1:2,"0");case"W":case"WW":return l.s(a.isoWeek(),h==="W"?1:2,"0");case"k":case"kk":return l.s(String(a.$H===0?24:a.$H),h==="k"?1:2,"0");case"X":return Math.floor(a.$d.getTime()/1e3);case"x":return a.$d.getTime();case"z":return"["+a.offsetName()+"]";case"zzz":return"["+a.offsetName("long")+"]";default:return h}});return n.bind(this)(u)}}})});function Nue(t,e,r){let n=!0;for(;n;)n=!1,r.forEach(function(i){let a="^\\s*"+i+"\\s*$",s=new RegExp(a);t[0].match(s)&&(e[i]=!0,t.shift(1),n=!0)})}var xue,ho,bue,wue,Tue,yue,Gc,ZI,JI,eO,mb,gb,tO,rO,f6,E1,nO,kue,iO,yb,aO,sO,d6,jI,ize,aze,sze,oze,lze,cze,uze,hze,fze,dze,pze,mze,gze,yze,vze,xze,bze,wze,Tze,kze,Eze,Sze,Cze,Eue,Aze,_ze,Dze,Sue,Lze,KI,Cue,Aue,u6,k1,Rze,Nze,QI,h6,Gi,_ue,Mze,Cp,Ize,vue,Oze,Due,Pze,Lue,Bze,Fze,Rue,Mue=N(()=>{"use strict";xue=Sa(z0(),1),ho=Sa(R4(),1),bue=Sa(pue(),1),wue=Sa(mue(),1),Tue=Sa(gue(),1);vt();zt();ir();mi();ho.default.extend(bue.default);ho.default.extend(wue.default);ho.default.extend(Tue.default);yue={friday:5,saturday:6},Gc="",ZI="",eO="",mb=[],gb=[],tO=new Map,rO=[],f6=[],E1="",nO="",kue=["active","done","crit","milestone"],iO=[],yb=!1,aO=!1,sO="sunday",d6="saturday",jI=0,ize=o(function(){rO=[],f6=[],E1="",iO=[],u6=0,QI=void 0,h6=void 0,Gi=[],Gc="",ZI="",nO="",JI=void 0,eO="",mb=[],gb=[],yb=!1,aO=!1,jI=0,tO=new Map,Ar(),sO="sunday",d6="saturday"},"clear"),aze=o(function(t){ZI=t},"setAxisFormat"),sze=o(function(){return ZI},"getAxisFormat"),oze=o(function(t){JI=t},"setTickInterval"),lze=o(function(){return JI},"getTickInterval"),cze=o(function(t){eO=t},"setTodayMarker"),uze=o(function(){return eO},"getTodayMarker"),hze=o(function(t){Gc=t},"setDateFormat"),fze=o(function(){yb=!0},"enableInclusiveEndDates"),dze=o(function(){return yb},"endDatesAreInclusive"),pze=o(function(){aO=!0},"enableTopAxis"),mze=o(function(){return aO},"topAxisEnabled"),gze=o(function(t){nO=t},"setDisplayMode"),yze=o(function(){return nO},"getDisplayMode"),vze=o(function(){return Gc},"getDateFormat"),xze=o(function(t){mb=t.toLowerCase().split(/[\s,]+/)},"setIncludes"),bze=o(function(){return mb},"getIncludes"),wze=o(function(t){gb=t.toLowerCase().split(/[\s,]+/)},"setExcludes"),Tze=o(function(){return gb},"getExcludes"),kze=o(function(){return tO},"getLinks"),Eze=o(function(t){E1=t,rO.push(t)},"addSection"),Sze=o(function(){return rO},"getSections"),Cze=o(function(){let t=vue(),e=10,r=0;for(;!t&&r<e;)t=vue(),r++;return f6=Gi,f6},"getTasks"),Eue=o(function(t,e,r,n){return n.includes(t.format(e.trim()))?!1:r.includes("weekends")&&(t.isoWeekday()===yue[d6]||t.isoWeekday()===yue[d6]+1)||r.includes(t.format("dddd").toLowerCase())?!0:r.includes(t.format(e.trim()))},"isInvalidDate"),Aze=o(function(t){sO=t},"setWeekday"),_ze=o(function(){return sO},"getWeekday"),Dze=o(function(t){d6=t},"setWeekend"),Sue=o(function(t,e,r,n){if(!r.length||t.manualEndTime)return;let i;t.startTime instanceof Date?i=(0,ho.default)(t.startTime):i=(0,ho.default)(t.startTime,e,!0),i=i.add(1,"d");let a;t.endTime instanceof Date?a=(0,ho.default)(t.endTime):a=(0,ho.default)(t.endTime,e,!0);let[s,l]=Lze(i,a,e,r,n);t.endTime=s.toDate(),t.renderEndTime=l},"checkTaskDates"),Lze=o(function(t,e,r,n,i){let a=!1,s=null;for(;t<=e;)a||(s=e.toDate()),a=Eue(t,r,n,i),a&&(e=e.add(1,"d")),t=t.add(1,"d");return[e,s]},"fixTaskDates"),KI=o(function(t,e,r){r=r.trim();let i=/^after\s+(?<ids>[\d\w- ]+)/.exec(r);if(i!==null){let s=null;for(let u of i.groups.ids.split(" ")){let h=Cp(u);h!==void 0&&(!s||h.endTime>s.endTime)&&(s=h)}if(s)return s.endTime;let l=new Date;return l.setHours(0,0,0,0),l}let a=(0,ho.default)(r,e.trim(),!0);if(a.isValid())return a.toDate();{Y.debug("Invalid date:"+r),Y.debug("With date format:"+e.trim());let s=new Date(r);if(s===void 0||isNaN(s.getTime())||s.getFullYear()<-1e4||s.getFullYear()>1e4)throw new Error("Invalid date:"+r);return s}},"getStartDate"),Cue=o(function(t){let e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return e!==null?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},"parseDuration"),Aue=o(function(t,e,r,n=!1){r=r.trim();let a=/^until\s+(?<ids>[\d\w- ]+)/.exec(r);if(a!==null){let f=null;for(let p of a.groups.ids.split(" ")){let m=Cp(p);m!==void 0&&(!f||m.startTime<f.startTime)&&(f=m)}if(f)return f.startTime;let d=new Date;return d.setHours(0,0,0,0),d}let s=(0,ho.default)(r,e.trim(),!0);if(s.isValid())return n&&(s=s.add(1,"d")),s.toDate();let l=(0,ho.default)(t),[u,h]=Cue(r);if(!Number.isNaN(u)){let f=l.add(u,h);f.isValid()&&(l=f)}return l.toDate()},"getEndDate"),u6=0,k1=o(function(t){return t===void 0?(u6=u6+1,"task"+u6):t},"parseId"),Rze=o(function(t,e){let r;e.substr(0,1)===":"?r=e.substr(1,e.length):r=e;let n=r.split(","),i={};Nue(n,i,kue);for(let s=0;s<n.length;s++)n[s]=n[s].trim();let a="";switch(n.length){case 1:i.id=k1(),i.startTime=t.endTime,a=n[0];break;case 2:i.id=k1(),i.startTime=KI(void 0,Gc,n[0]),a=n[1];break;case 3:i.id=k1(n[0]),i.startTime=KI(void 0,Gc,n[1]),a=n[2];break;default:}return a&&(i.endTime=Aue(i.startTime,Gc,a,yb),i.manualEndTime=(0,ho.default)(a,"YYYY-MM-DD",!0).isValid(),Sue(i,Gc,gb,mb)),i},"compileData"),Nze=o(function(t,e){let r;e.substr(0,1)===":"?r=e.substr(1,e.length):r=e;let n=r.split(","),i={};Nue(n,i,kue);for(let a=0;a<n.length;a++)n[a]=n[a].trim();switch(n.length){case 1:i.id=k1(),i.startTime={type:"prevTaskEnd",id:t},i.endTime={data:n[0]};break;case 2:i.id=k1(),i.startTime={type:"getStartDate",startData:n[0]},i.endTime={data:n[1]};break;case 3:i.id=k1(n[0]),i.startTime={type:"getStartDate",startData:n[1]},i.endTime={data:n[2]};break;default:}return i},"parseData"),Gi=[],_ue={},Mze=o(function(t,e){let r={section:E1,type:E1,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:e},task:t,classes:[]},n=Nze(h6,e);r.raw.startTime=n.startTime,r.raw.endTime=n.endTime,r.id=n.id,r.prevTaskId=h6,r.active=n.active,r.done=n.done,r.crit=n.crit,r.milestone=n.milestone,r.order=jI,jI++;let i=Gi.push(r);h6=r.id,_ue[r.id]=i-1},"addTask"),Cp=o(function(t){let e=_ue[t];return Gi[e]},"findTaskById"),Ize=o(function(t,e){let r={section:E1,type:E1,description:t,task:t,classes:[]},n=Rze(QI,e);r.startTime=n.startTime,r.endTime=n.endTime,r.id=n.id,r.active=n.active,r.done=n.done,r.crit=n.crit,r.milestone=n.milestone,QI=r,f6.push(r)},"addTaskOrg"),vue=o(function(){let t=o(function(r){let n=Gi[r],i="";switch(Gi[r].raw.startTime.type){case"prevTaskEnd":{let a=Cp(n.prevTaskId);n.startTime=a.endTime;break}case"getStartDate":i=KI(void 0,Gc,Gi[r].raw.startTime.startData),i&&(Gi[r].startTime=i);break}return Gi[r].startTime&&(Gi[r].endTime=Aue(Gi[r].startTime,Gc,Gi[r].raw.endTime.data,yb),Gi[r].endTime&&(Gi[r].processed=!0,Gi[r].manualEndTime=(0,ho.default)(Gi[r].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),Sue(Gi[r],Gc,gb,mb))),Gi[r].processed},"compileTask"),e=!0;for(let[r,n]of Gi.entries())t(r),e=e&&n.processed;return e},"compileTasks"),Oze=o(function(t,e){let r=e;me().securityLevel!=="loose"&&(r=(0,xue.sanitizeUrl)(e)),t.split(",").forEach(function(n){Cp(n)!==void 0&&(Lue(n,()=>{window.open(r,"_self")}),tO.set(n,r))}),Due(t,"clickable")},"setLink"),Due=o(function(t,e){t.split(",").forEach(function(r){let n=Cp(r);n!==void 0&&n.classes.push(e)})},"setClass"),Pze=o(function(t,e,r){if(me().securityLevel!=="loose"||e===void 0)return;let n=[];if(typeof r=="string"){n=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a<n.length;a++){let s=n[a].trim();s.startsWith('"')&&s.endsWith('"')&&(s=s.substr(1,s.length-2)),n[a]=s}}n.length===0&&n.push(t),Cp(t)!==void 0&&Lue(t,()=>{Gt.runFunc(e,...n)})},"setClickFun"),Lue=o(function(t,e){iO.push(function(){let r=document.querySelector(`[id="${t}"]`);r!==null&&r.addEventListener("click",function(){e()})},function(){let r=document.querySelector(`[id="${t}-text"]`);r!==null&&r.addEventListener("click",function(){e()})})},"pushFun"),Bze=o(function(t,e,r){t.split(",").forEach(function(n){Pze(n,e,r)}),Due(t,"clickable")},"setClickEvent"),Fze=o(function(t){iO.forEach(function(e){e(t)})},"bindFunctions"),Rue={getConfig:o(()=>me().gantt,"getConfig"),clear:ize,setDateFormat:hze,getDateFormat:vze,enableInclusiveEndDates:fze,endDatesAreInclusive:dze,enableTopAxis:pze,topAxisEnabled:mze,setAxisFormat:aze,getAxisFormat:sze,setTickInterval:oze,getTickInterval:lze,setTodayMarker:cze,getTodayMarker:uze,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,setDisplayMode:gze,getDisplayMode:yze,setAccDescription:Nr,getAccDescription:Mr,addSection:Eze,getSections:Sze,getTasks:Cze,addTask:Mze,findTaskById:Cp,addTaskOrg:Ize,setIncludes:xze,getIncludes:bze,setExcludes:wze,getExcludes:Tze,setClickEvent:Bze,setLink:Oze,getLinks:kze,bindFunctions:Fze,parseDuration:Cue,isInvalidDate:Eue,setWeekday:Aze,getWeekday:_ze,setWeekend:Dze};o(Nue,"getTaskTags")});var p6,$ze,Iue,zze,Yu,Gze,Oue,Pue=N(()=>{"use strict";p6=Sa(R4(),1);vt();dr();gr();zt();Ei();$ze=o(function(){Y.debug("Something is calling, setConf, remove the call")},"setConf"),Iue={monday:Ch,tuesday:T5,wednesday:k5,thursday:oc,friday:E5,saturday:S5,sunday:yl},zze=o((t,e)=>{let r=[...t].map(()=>-1/0),n=[...t].sort((a,s)=>a.startTime-s.startTime||a.order-s.order),i=0;for(let a of n)for(let s=0;s<r.length;s++)if(a.startTime>=r[s]){r[s]=a.endTime,a.order=s+e,s>i&&(i=s);break}return i},"getMaxIntersections"),Gze=o(function(t,e,r,n){let i=me().gantt,a=me().securityLevel,s;a==="sandbox"&&(s=Ge("#i"+e));let l=a==="sandbox"?Ge(s.nodes()[0].contentDocument.body):Ge("body"),u=a==="sandbox"?s.nodes()[0].contentDocument:document,h=u.getElementById(e);Yu=h.parentElement.offsetWidth,Yu===void 0&&(Yu=1200),i.useWidth!==void 0&&(Yu=i.useWidth);let f=n.db.getTasks(),d=[];for(let S of f)d.push(S.type);d=A(d);let p={},m=2*i.topPadding;if(n.db.getDisplayMode()==="compact"||i.displayMode==="compact"){let S={};for(let I of f)S[I.section]===void 0?S[I.section]=[I]:S[I.section].push(I);let _=0;for(let I of Object.keys(S)){let D=zze(S[I],_)+1;_+=D,m+=D*(i.barHeight+i.barGap),p[I]=D}}else{m+=f.length*(i.barHeight+i.barGap);for(let S of d)p[S]=f.filter(_=>_.type===S).length}h.setAttribute("viewBox","0 0 "+Yu+" "+m);let g=l.select(`[id="${e}"]`),y=_5().domain([M3(f,function(S){return S.startTime}),N3(f,function(S){return S.endTime})]).rangeRound([0,Yu-i.leftPadding-i.rightPadding]);function v(S,_){let I=S.startTime,D=_.startTime,k=0;return I>D?k=1:I<D&&(k=-1),k}o(v,"taskCompare"),f.sort(v),x(f,Yu,m),vn(g,m,Yu,i.useMaxWidth),g.append("text").text(n.db.getDiagramTitle()).attr("x",Yu/2).attr("y",i.titleTopMargin).attr("class","titleText");function x(S,_,I){let D=i.barHeight,k=D+i.barGap,L=i.topPadding,R=i.leftPadding,O=gl().domain([0,d.length]).range(["#00B9FA","#F95002"]).interpolate($8);w(k,L,R,_,I,S,n.db.getExcludes(),n.db.getIncludes()),C(R,L,_,I),b(S,k,L,R,D,O,_,I),T(k,L,R,D,O),E(R,L,_,I)}o(x,"makeGantt");function b(S,_,I,D,k,L,R){let M=[...new Set(S.map(z=>z.order))].map(z=>S.find($=>$.order===z));g.append("g").selectAll("rect").data(M).enter().append("rect").attr("x",0).attr("y",function(z,$){return $=z.order,$*_+I-2}).attr("width",function(){return R-i.rightPadding/2}).attr("height",_).attr("class",function(z){for(let[$,H]of d.entries())if(z.type===H)return"section section"+$%i.numberSectionStyles;return"section section0"});let B=g.append("g").selectAll("rect").data(S).enter(),F=n.db.getLinks();if(B.append("rect").attr("id",function(z){return z.id}).attr("rx",3).attr("ry",3).attr("x",function(z){return z.milestone?y(z.startTime)+D+.5*(y(z.endTime)-y(z.startTime))-.5*k:y(z.startTime)+D}).attr("y",function(z,$){return $=z.order,$*_+I}).attr("width",function(z){return z.milestone?k:y(z.renderEndTime||z.endTime)-y(z.startTime)}).attr("height",k).attr("transform-origin",function(z,$){return $=z.order,(y(z.startTime)+D+.5*(y(z.endTime)-y(z.startTime))).toString()+"px "+($*_+I+.5*k).toString()+"px"}).attr("class",function(z){let $="task",H="";z.classes.length>0&&(H=z.classes.join(" "));let Q=0;for(let[ie,ne]of d.entries())z.type===ne&&(Q=ie%i.numberSectionStyles);let j="";return z.active?z.crit?j+=" activeCrit":j=" active":z.done?z.crit?j=" doneCrit":j=" done":z.crit&&(j+=" crit"),j.length===0&&(j=" task"),z.milestone&&(j=" milestone "+j),j+=Q,j+=" "+H,$+j}),B.append("text").attr("id",function(z){return z.id+"-text"}).text(function(z){return z.task}).attr("font-size",i.fontSize).attr("x",function(z){let $=y(z.startTime),H=y(z.renderEndTime||z.endTime);z.milestone&&($+=.5*(y(z.endTime)-y(z.startTime))-.5*k),z.milestone&&(H=$+k);let Q=this.getBBox().width;return Q>H-$?H+Q+1.5*i.leftPadding>R?$+D-5:H+D+5:(H-$)/2+$+D}).attr("y",function(z,$){return $=z.order,$*_+i.barHeight/2+(i.fontSize/2-2)+I}).attr("text-height",k).attr("class",function(z){let $=y(z.startTime),H=y(z.endTime);z.milestone&&(H=$+k);let Q=this.getBBox().width,j="";z.classes.length>0&&(j=z.classes.join(" "));let ie=0;for(let[le,he]of d.entries())z.type===he&&(ie=le%i.numberSectionStyles);let ne="";return z.active&&(z.crit?ne="activeCritText"+ie:ne="activeText"+ie),z.done?z.crit?ne=ne+" doneCritText"+ie:ne=ne+" doneText"+ie:z.crit&&(ne=ne+" critText"+ie),z.milestone&&(ne+=" milestoneText"),Q>H-$?H+Q+1.5*i.leftPadding>R?j+" taskTextOutsideLeft taskTextOutside"+ie+" "+ne:j+" taskTextOutsideRight taskTextOutside"+ie+" "+ne+" width-"+Q:j+" taskText taskText"+ie+" "+ne+" width-"+Q}),me().securityLevel==="sandbox"){let z;z=Ge("#i"+e);let $=z.nodes()[0].contentDocument;B.filter(function(H){return F.has(H.id)}).each(function(H){var Q=$.querySelector("#"+H.id),j=$.querySelector("#"+H.id+"-text");let ie=Q.parentNode;var ne=$.createElement("a");ne.setAttribute("xlink:href",F.get(H.id)),ne.setAttribute("target","_top"),ie.appendChild(ne),ne.appendChild(Q),ne.appendChild(j)})}}o(b,"drawRects");function w(S,_,I,D,k,L,R,O){if(R.length===0&&O.length===0)return;let M,B;for(let{startTime:Q,endTime:j}of L)(M===void 0||Q<M)&&(M=Q),(B===void 0||j>B)&&(B=j);if(!M||!B)return;if((0,p6.default)(B).diff((0,p6.default)(M),"year")>5){Y.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}let F=n.db.getDateFormat(),P=[],z=null,$=(0,p6.default)(M);for(;$.valueOf()<=B;)n.db.isInvalidDate($,F,R,O)?z?z.end=$:z={start:$,end:$}:z&&(P.push(z),z=null),$=$.add(1,"d");g.append("g").selectAll("rect").data(P).enter().append("rect").attr("id",function(Q){return"exclude-"+Q.start.format("YYYY-MM-DD")}).attr("x",function(Q){return y(Q.start)+I}).attr("y",i.gridLineStartPadding).attr("width",function(Q){let j=Q.end.add(1,"day");return y(j)-y(Q.start)}).attr("height",k-_-i.gridLineStartPadding).attr("transform-origin",function(Q,j){return(y(Q.start)+I+.5*(y(Q.end)-y(Q.start))).toString()+"px "+(j*S+.5*k).toString()+"px"}).attr("class","exclude-range")}o(w,"drawExcludeDays");function C(S,_,I,D){let k=bA(y).tickSize(-D+_+i.gridLineStartPadding).tickFormat(wd(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d")),R=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(n.db.getTickInterval()||i.tickInterval);if(R!==null){let O=R[1],M=R[2],B=n.db.getWeekday()||i.weekday;switch(M){case"millisecond":k.ticks(ac.every(O));break;case"second":k.ticks(Ks.every(O));break;case"minute":k.ticks(vu.every(O));break;case"hour":k.ticks(xu.every(O));break;case"day":k.ticks(_o.every(O));break;case"week":k.ticks(Iue[B].every(O));break;case"month":k.ticks(bu.every(O));break}}if(g.append("g").attr("class","grid").attr("transform","translate("+S+", "+(D-50)+")").call(k).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),n.db.topAxisEnabled()||i.topAxis){let O=xA(y).tickSize(-D+_+i.gridLineStartPadding).tickFormat(wd(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));if(R!==null){let M=R[1],B=R[2],F=n.db.getWeekday()||i.weekday;switch(B){case"millisecond":O.ticks(ac.every(M));break;case"second":O.ticks(Ks.every(M));break;case"minute":O.ticks(vu.every(M));break;case"hour":O.ticks(xu.every(M));break;case"day":O.ticks(_o.every(M));break;case"week":O.ticks(Iue[F].every(M));break;case"month":O.ticks(bu.every(M));break}}g.append("g").attr("class","grid").attr("transform","translate("+S+", "+_+")").call(O).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}o(C,"makeGrid");function T(S,_){let I=0,D=Object.keys(p).map(k=>[k,p[k]]);g.append("g").selectAll("text").data(D).enter().append(function(k){let L=k[0].split(Ze.lineBreakRegex),R=-(L.length-1)/2,O=u.createElementNS("http://www.w3.org/2000/svg","text");O.setAttribute("dy",R+"em");for(let[M,B]of L.entries()){let F=u.createElementNS("http://www.w3.org/2000/svg","tspan");F.setAttribute("alignment-baseline","central"),F.setAttribute("x","10"),M>0&&F.setAttribute("dy","1em"),F.textContent=B,O.appendChild(F)}return O}).attr("x",10).attr("y",function(k,L){if(L>0)for(let R=0;R<L;R++)return I+=D[L-1][1],k[1]*S/2+I*S+_;else return k[1]*S/2+_}).attr("font-size",i.sectionFontSize).attr("class",function(k){for(let[L,R]of d.entries())if(k[0]===R)return"sectionTitle sectionTitle"+L%i.numberSectionStyles;return"sectionTitle"})}o(T,"vertLabels");function E(S,_,I,D){let k=n.db.getTodayMarker();if(k==="off")return;let L=g.append("g").attr("class","today"),R=new Date,O=L.append("line");O.attr("x1",y(R)+S).attr("x2",y(R)+S).attr("y1",i.titleTopMargin).attr("y2",D-i.titleTopMargin).attr("class","today"),k!==""&&O.attr("style",k.replace(/,/g,";"))}o(E,"drawToday");function A(S){let _={},I=[];for(let D=0,k=S.length;D<k;++D)Object.prototype.hasOwnProperty.call(_,S[D])||(_[S[D]]=!0,I.push(S[D]));return I}o(A,"checkUnique")},"draw"),Oue={setConf:$ze,draw:Gze}});var Vze,Bue,Fue=N(()=>{"use strict";Vze=o(t=>`
888 + .mermaid-main-font {
889 + font-family: ${t.fontFamily};
890 + }
891 +
892 + .exclude-range {
893 + fill: ${t.excludeBkgColor};
894 + }
895 +
896 + .section {
897 + stroke: none;
898 + opacity: 0.2;
899 + }
900 +
901 + .section0 {
902 + fill: ${t.sectionBkgColor};
903 + }
904 +
905 + .section2 {
906 + fill: ${t.sectionBkgColor2};
907 + }
908 +
909 + .section1,
910 + .section3 {
911 + fill: ${t.altSectionBkgColor};
912 + opacity: 0.2;
913 + }
914 +
915 + .sectionTitle0 {
916 + fill: ${t.titleColor};
917 + }
918 +
919 + .sectionTitle1 {
920 + fill: ${t.titleColor};
921 + }
922 +
923 + .sectionTitle2 {
924 + fill: ${t.titleColor};
925 + }
926 +
927 + .sectionTitle3 {
928 + fill: ${t.titleColor};
929 + }
930 +
931 + .sectionTitle {
932 + text-anchor: start;
933 + font-family: ${t.fontFamily};
934 + }
935 +
936 +
937 + /* Grid and axis */
938 +
939 + .grid .tick {
940 + stroke: ${t.gridColor};
941 + opacity: 0.8;
942 + shape-rendering: crispEdges;
943 + }
944 +
945 + .grid .tick text {
946 + font-family: ${t.fontFamily};
947 + fill: ${t.textColor};
948 + }
949 +
950 + .grid path {
951 + stroke-width: 0;
952 + }
953 +
954 +
955 + /* Today line */
956 +
957 + .today {
958 + fill: none;
959 + stroke: ${t.todayLineColor};
960 + stroke-width: 2px;
961 + }
962 +
963 +
964 + /* Task styling */
965 +
966 + /* Default task */
967 +
968 + .task {
969 + stroke-width: 2;
970 + }
971 +
972 + .taskText {
973 + text-anchor: middle;
974 + font-family: ${t.fontFamily};
975 + }
976 +
977 + .taskTextOutsideRight {
978 + fill: ${t.taskTextDarkColor};
979 + text-anchor: start;
980 + font-family: ${t.fontFamily};
981 + }
982 +
983 + .taskTextOutsideLeft {
984 + fill: ${t.taskTextDarkColor};
985 + text-anchor: end;
986 + }
987 +
988 +
989 + /* Special case clickable */
990 +
991 + .task.clickable {
992 + cursor: pointer;
993 + }
994 +
995 + .taskText.clickable {
996 + cursor: pointer;
997 + fill: ${t.taskTextClickableColor} !important;
998 + font-weight: bold;
999 + }
1000 +
1001 + .taskTextOutsideLeft.clickable {
1002 + cursor: pointer;
1003 + fill: ${t.taskTextClickableColor} !important;
1004 + font-weight: bold;
1005 + }
1006 +
1007 + .taskTextOutsideRight.clickable {
1008 + cursor: pointer;
1009 + fill: ${t.taskTextClickableColor} !important;
1010 + font-weight: bold;
1011 + }
1012 +
1013 +
1014 + /* Specific task settings for the sections*/
1015 +
1016 + .taskText0,
1017 + .taskText1,
1018 + .taskText2,
1019 + .taskText3 {
1020 + fill: ${t.taskTextColor};
1021 + }
1022 +
1023 + .task0,
1024 + .task1,
1025 + .task2,
1026 + .task3 {
1027 + fill: ${t.taskBkgColor};
1028 + stroke: ${t.taskBorderColor};
1029 + }
1030 +
1031 + .taskTextOutside0,
1032 + .taskTextOutside2
1033 + {
1034 + fill: ${t.taskTextOutsideColor};
1035 + }
1036 +
1037 + .taskTextOutside1,
1038 + .taskTextOutside3 {
1039 + fill: ${t.taskTextOutsideColor};
1040 + }
1041 +
1042 +
1043 + /* Active task */
1044 +
1045 + .active0,
1046 + .active1,
1047 + .active2,
1048 + .active3 {
1049 + fill: ${t.activeTaskBkgColor};
1050 + stroke: ${t.activeTaskBorderColor};
1051 + }
1052 +
1053 + .activeText0,
1054 + .activeText1,
1055 + .activeText2,
1056 + .activeText3 {
1057 + fill: ${t.taskTextDarkColor} !important;
1058 + }
1059 +
1060 +
1061 + /* Completed task */
1062 +
1063 + .done0,
1064 + .done1,
1065 + .done2,
1066 + .done3 {
1067 + stroke: ${t.doneTaskBorderColor};
1068 + fill: ${t.doneTaskBkgColor};
1069 + stroke-width: 2;
1070 + }
1071 +
1072 + .doneText0,
1073 + .doneText1,
1074 + .doneText2,
1075 + .doneText3 {
1076 + fill: ${t.taskTextDarkColor} !important;
1077 + }
1078 +
1079 +
1080 + /* Tasks on the critical line */
1081 +
1082 + .crit0,
1083 + .crit1,
1084 + .crit2,
1085 + .crit3 {
1086 + stroke: ${t.critBorderColor};
1087 + fill: ${t.critBkgColor};
1088 + stroke-width: 2;
1089 + }
1090 +
1091 + .activeCrit0,
1092 + .activeCrit1,
1093 + .activeCrit2,
1094 + .activeCrit3 {
1095 + stroke: ${t.critBorderColor};
1096 + fill: ${t.activeTaskBkgColor};
1097 + stroke-width: 2;
1098 + }
1099 +
1100 + .doneCrit0,
1101 + .doneCrit1,
1102 + .doneCrit2,
1103 + .doneCrit3 {
1104 + stroke: ${t.critBorderColor};
1105 + fill: ${t.doneTaskBkgColor};
1106 + stroke-width: 2;
1107 + cursor: pointer;
1108 + shape-rendering: crispEdges;
1109 + }
1110 +
1111 + .milestone {
1112 + transform: rotate(45deg) scale(0.8,0.8);
1113 + }
1114 +
1115 + .milestoneText {
1116 + font-style: italic;
1117 + }
1118 + .doneCritText0,
1119 + .doneCritText1,
1120 + .doneCritText2,
1121 + .doneCritText3 {
1122 + fill: ${t.taskTextDarkColor} !important;
1123 + }
1124 +
1125 + .activeCritText0,
1126 + .activeCritText1,
1127 + .activeCritText2,
1128 + .activeCritText3 {
1129 + fill: ${t.taskTextDarkColor} !important;
1130 + }
1131 +
1132 + .titleText {
1133 + text-anchor: middle;
1134 + font-size: 18px;
1135 + fill: ${t.titleColor||t.textColor};
1136 + font-family: ${t.fontFamily};
1137 + }
1138 +`,"getStyles"),Bue=Vze});var $ue={};hr($ue,{diagram:()=>Uze});var Uze,zue=N(()=>{"use strict";due();Mue();Pue();Fue();Uze={parser:fue,db:Rue,renderer:Oue,styles:Bue}});var Uue,Hue=N(()=>{"use strict";kp();vt();Uue={parse:o(async t=>{let e=await uo("info",t);Y.debug(e)},"parse")}});var vb,oO=N(()=>{vb={name:"mermaid",version:"11.6.0",description:"Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.",type:"module",module:"./dist/mermaid.core.mjs",types:"./dist/mermaid.d.ts",exports:{".":{types:"./dist/mermaid.d.ts",import:"./dist/mermaid.core.mjs",default:"./dist/mermaid.core.mjs"},"./*":"./*"},keywords:["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph","mindmap","packet diagram","c4 diagram","er diagram","pie chart","pie diagram","quadrant chart","requirement diagram","graph"],scripts:{clean:"rimraf dist",dev:"pnpm -w dev","docs:code":"typedoc src/defaultConfig.ts src/config.ts src/mermaid.ts && prettier --write ./src/docs/config/setup","docs:build":"rimraf ../../docs && pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts","docs:verify":"pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts --verify","docs:pre:vitepress":"pnpm --filter ./src/docs prefetch && rimraf src/vitepress && pnpm docs:code && tsx scripts/docs.cli.mts --vitepress && pnpm --filter ./src/vitepress install --no-frozen-lockfile --ignore-scripts","docs:build:vitepress":"pnpm docs:pre:vitepress && (cd src/vitepress && pnpm run build) && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing","docs:dev":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:dev:docker":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev:docker" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:serve":"pnpm docs:build:vitepress && vitepress serve src/vitepress","docs:spellcheck":'cspell "src/docs/**/*.md"',"docs:release-version":"tsx scripts/update-release-version.mts","docs:verify-version":"tsx scripts/update-release-version.mts --verify","types:build-config":"tsx scripts/create-types-from-json-schema.mts","types:verify-config":"tsx scripts/create-types-from-json-schema.mts --verify",checkCircle:"npx madge --circular ./src",prepublishOnly:"pnpm docs:verify-version"},repository:{type:"git",url:"https://github.com/mermaid-js/mermaid"},author:"Knut Sveidqvist",license:"MIT",standard:{ignore:["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],globals:["page"]},dependencies:{"@braintree/sanitize-url":"^7.0.4","@iconify/utils":"^2.1.33","@mermaid-js/parser":"workspace:^","@types/d3":"^7.4.3",cytoscape:"^3.29.3","cytoscape-cose-bilkent":"^4.1.0","cytoscape-fcose":"^2.2.0",d3:"^7.9.0","d3-sankey":"^0.12.3","dagre-d3-es":"7.0.11",dayjs:"^1.11.13",dompurify:"^3.2.4",katex:"^0.16.9",khroma:"^2.1.0","lodash-es":"^4.17.21",marked:"^15.0.7",roughjs:"^4.6.6",stylis:"^4.3.6","ts-dedent":"^2.2.0",uuid:"^11.1.0"},devDependencies:{"@adobe/jsonschema2md":"^8.0.2","@iconify/types":"^2.0.0","@types/cytoscape":"^3.21.9","@types/cytoscape-fcose":"^2.2.4","@types/d3-sankey":"^0.12.4","@types/d3-scale":"^4.0.9","@types/d3-scale-chromatic":"^3.1.0","@types/d3-selection":"^3.0.11","@types/d3-shape":"^3.1.7","@types/jsdom":"^21.1.7","@types/katex":"^0.16.7","@types/lodash-es":"^4.17.12","@types/micromatch":"^4.0.9","@types/stylis":"^4.2.7","@types/uuid":"^10.0.0",ajv:"^8.17.1",chokidar:"^4.0.3",concurrently:"^9.1.2","csstree-validator":"^4.0.1",globby:"^14.0.2",jison:"^0.4.18","js-base64":"^3.7.7",jsdom:"^26.0.0","json-schema-to-typescript":"^15.0.4",micromatch:"^4.0.8","path-browserify":"^1.0.1",prettier:"^3.5.2",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-gfm":"^4.0.1",rimraf:"^6.0.1","start-server-and-test":"^2.0.10","type-fest":"^4.35.0",typedoc:"^0.27.8","typedoc-plugin-markdown":"^4.4.2",typescript:"~5.7.3","unist-util-flatmap":"^1.0.0","unist-util-visit":"^5.0.0",vitepress:"^1.0.2","vitepress-plugin-search":"1.0.4-alpha.22"},files:["dist/","README.md"],publishConfig:{access:"public"}}});var Xze,jze,Wue,que=N(()=>{"use strict";oO();Xze={version:vb.version},jze=o(()=>Xze.version,"getVersion"),Wue={getVersion:jze}});var sa,Vc=N(()=>{"use strict";dr();zt();sa=o(t=>{let{securityLevel:e}=me(),r=Ge("body");if(e==="sandbox"){let a=Ge(`#i${t}`).node()?.contentDocument??document;r=Ge(a.body)}return r.select(`#${t}`)},"selectSvgElement")});var Kze,Yue,Xue=N(()=>{"use strict";vt();Vc();Ei();Kze=o((t,e,r)=>{Y.debug(`rendering info diagram
1139 +`+t);let n=sa(e);vn(n,100,400,!0),n.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${r}`)},"draw"),Yue={draw:Kze}});var jue={};hr(jue,{diagram:()=>Qze});var Qze,Kue=N(()=>{"use strict";Hue();que();Xue();Qze={parser:Uue,db:Wue,renderer:Yue}});var Jue,lO,m6,cO,eGe,tGe,rGe,nGe,iGe,aGe,sGe,g6,uO=N(()=>{"use strict";vt();mi();Ya();Jue=or.pie,lO={sections:new Map,showData:!1,config:Jue},m6=lO.sections,cO=lO.showData,eGe=structuredClone(Jue),tGe=o(()=>structuredClone(eGe),"getConfig"),rGe=o(()=>{m6=new Map,cO=lO.showData,Ar()},"clear"),nGe=o(({label:t,value:e})=>{m6.has(t)||(m6.set(t,e),Y.debug(`added new section: ${t}, with value: ${e}`))},"addSection"),iGe=o(()=>m6,"getSections"),aGe=o(t=>{cO=t},"setShowData"),sGe=o(()=>cO,"getShowData"),g6={getConfig:tGe,clear:rGe,setDiagramTitle:$r,getDiagramTitle:Ir,setAccTitle:Lr,getAccTitle:Rr,setAccDescription:Nr,getAccDescription:Mr,addSection:nGe,getSections:iGe,setShowData:aGe,getShowData:sGe}});var oGe,ehe,the=N(()=>{"use strict";kp();vt();T1();uO();oGe=o((t,e)=>{$c(t,e),e.setShowData(t.showData),t.sections.map(e.addSection)},"populateDb"),ehe={parse:o(async t=>{let e=await uo("pie",t);Y.debug(e),oGe(e,g6)},"parse")}});var lGe,rhe,nhe=N(()=>{"use strict";lGe=o(t=>`
1140 + .pieCircle{
1141 + stroke: ${t.pieStrokeColor};
1142 + stroke-width : ${t.pieStrokeWidth};
1143 + opacity : ${t.pieOpacity};
1144 + }
1145 + .pieOuterCircle{
1146 + stroke: ${t.pieOuterStrokeColor};
1147 + stroke-width: ${t.pieOuterStrokeWidth};
1148 + fill: none;
1149 + }
1150 + .pieTitleText {
1151 + text-anchor: middle;
1152 + font-size: ${t.pieTitleTextSize};
1153 + fill: ${t.pieTitleTextColor};
1154 + font-family: ${t.fontFamily};
1155 + }
1156 + .slice {
1157 + font-family: ${t.fontFamily};
1158 + fill: ${t.pieSectionTextColor};
1159 + font-size:${t.pieSectionTextSize};
1160 + // fill: white;
1161 + }
1162 + .legend text {
1163 + fill: ${t.pieLegendTextColor};
1164 + font-family: ${t.fontFamily};
1165 + font-size: ${t.pieLegendTextSize};
1166 + }
1167 +`,"getStyles"),rhe=lGe});var cGe,uGe,ihe,ahe=N(()=>{"use strict";dr();zt();vt();Vc();Ei();ir();cGe=o(t=>{let e=[...t.entries()].map(n=>({label:n[0],value:n[1]})).sort((n,i)=>i.value-n.value);return I5().value(n=>n.value)(e)},"createPieArcs"),uGe=o((t,e,r,n)=>{Y.debug(`rendering pie chart
1168 +`+t);let i=n.db,a=me(),s=Fi(i.getConfig(),a.pie),l=40,u=18,h=4,f=450,d=f,p=sa(e),m=p.append("g");m.attr("transform","translate("+d/2+","+f/2+")");let{themeVariables:g}=a,[y]=Bo(g.pieOuterStrokeWidth);y??=2;let v=s.textPosition,x=Math.min(d,f)/2-l,b=bl().innerRadius(0).outerRadius(x),w=bl().innerRadius(x*v).outerRadius(x*v);m.append("circle").attr("cx",0).attr("cy",0).attr("r",x+y/2).attr("class","pieOuterCircle");let C=i.getSections(),T=cGe(C),E=[g.pie1,g.pie2,g.pie3,g.pie4,g.pie5,g.pie6,g.pie7,g.pie8,g.pie9,g.pie10,g.pie11,g.pie12],A=gu(E);m.selectAll("mySlices").data(T).enter().append("path").attr("d",b).attr("fill",k=>A(k.data.label)).attr("class","pieCircle");let S=0;C.forEach(k=>{S+=k}),m.selectAll("mySlices").data(T).enter().append("text").text(k=>(k.data.value/S*100).toFixed(0)+"%").attr("transform",k=>"translate("+w.centroid(k)+")").style("text-anchor","middle").attr("class","slice"),m.append("text").text(i.getDiagramTitle()).attr("x",0).attr("y",-(f-50)/2).attr("class","pieTitleText");let _=m.selectAll(".legend").data(A.domain()).enter().append("g").attr("class","legend").attr("transform",(k,L)=>{let R=u+h,O=R*A.domain().length/2,M=12*u,B=L*R-O;return"translate("+M+","+B+")"});_.append("rect").attr("width",u).attr("height",u).style("fill",A).style("stroke",A),_.data(T).append("text").attr("x",u+h).attr("y",u-h).text(k=>{let{label:L,value:R}=k.data;return i.getShowData()?`${L} [${R}]`:L});let I=Math.max(..._.selectAll("text").nodes().map(k=>k?.getBoundingClientRect().width??0)),D=d+l+u+h+I;p.attr("viewBox",`0 0 ${D} ${f}`),vn(p,f,D,s.useMaxWidth)},"draw"),ihe={draw:uGe}});var she={};hr(she,{diagram:()=>hGe});var hGe,ohe=N(()=>{"use strict";the();uO();nhe();ahe();hGe={parser:ehe,db:g6,renderer:ihe,styles:rhe}});var hO,uhe,hhe=N(()=>{"use strict";hO=function(){var t=o(function(xe,q,pe,ve){for(pe=pe||{},ve=xe.length;ve--;pe[xe[ve]]=q);return pe},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[1,7],s=[1,4,5,10,12,13,14,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],l=[1,4,5,10,12,13,14,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],u=[55,56,57],h=[2,36],f=[1,37],d=[1,36],p=[1,38],m=[1,35],g=[1,43],y=[1,41],v=[1,14],x=[1,23],b=[1,18],w=[1,19],C=[1,20],T=[1,21],E=[1,22],A=[1,24],S=[1,25],_=[1,26],I=[1,27],D=[1,28],k=[1,29],L=[1,32],R=[1,33],O=[1,34],M=[1,39],B=[1,40],F=[1,42],P=[1,44],z=[1,62],$=[1,61],H=[4,5,8,10,12,13,14,18,44,47,49,55,56,57,63,64,65,66,67],Q=[1,65],j=[1,66],ie=[1,67],ne=[1,68],le=[1,69],he=[1,70],K=[1,71],X=[1,72],te=[1,73],J=[1,74],se=[1,75],ue=[1,76],Z=[4,5,6,7,8,9,10,11,12,13,14,15,18],Se=[1,90],ce=[1,91],ae=[1,92],Oe=[1,99],ge=[1,93],ze=[1,96],He=[1,94],$e=[1,95],Re=[1,97],Ie=[1,98],be=[1,102],W=[10,55,56,57],de=[4,5,6,8,10,11,13,17,18,19,20,55,56,57],re={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,idStringToken:3,ALPHA:4,NUM:5,NODE_STRING:6,DOWN:7,MINUS:8,DEFAULT:9,COMMA:10,COLON:11,AMP:12,BRKT:13,MULT:14,UNICODE_TEXT:15,styleComponent:16,UNIT:17,SPACE:18,STYLE:19,PCT:20,idString:21,style:22,stylesOpt:23,classDefStatement:24,CLASSDEF:25,start:26,eol:27,QUADRANT:28,document:29,line:30,statement:31,axisDetails:32,quadrantDetails:33,points:34,title:35,title_value:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,section:42,text:43,point_start:44,point_x:45,point_y:46,class_name:47,"X-AXIS":48,"AXIS-TEXT-DELIMITER":49,"Y-AXIS":50,QUADRANT_1:51,QUADRANT_2:52,QUADRANT_3:53,QUADRANT_4:54,NEWLINE:55,SEMI:56,EOF:57,alphaNumToken:58,textNoTagsToken:59,STR:60,MD_STR:61,alphaNum:62,PUNCTUATION:63,PLUS:64,EQUALS:65,DOT:66,UNDERSCORE:67,$accept:0,$end:1},terminals_:{2:"error",4:"ALPHA",5:"NUM",6:"NODE_STRING",7:"DOWN",8:"MINUS",9:"DEFAULT",10:"COMMA",11:"COLON",12:"AMP",13:"BRKT",14:"MULT",15:"UNICODE_TEXT",17:"UNIT",18:"SPACE",19:"STYLE",20:"PCT",25:"CLASSDEF",28:"QUADRANT",35:"title",36:"title_value",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"section",44:"point_start",45:"point_x",46:"point_y",47:"class_name",48:"X-AXIS",49:"AXIS-TEXT-DELIMITER",50:"Y-AXIS",51:"QUADRANT_1",52:"QUADRANT_2",53:"QUADRANT_3",54:"QUADRANT_4",55:"NEWLINE",56:"SEMI",57:"EOF",60:"STR",61:"MD_STR",63:"PUNCTUATION",64:"PLUS",65:"EQUALS",66:"DOT",67:"UNDERSCORE"},productions_:[0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],performAction:o(function(q,pe,ve,Pe,_e,we,Ve){var De=we.length-1;switch(_e){case 23:this.$=we[De];break;case 24:this.$=we[De-1]+""+we[De];break;case 26:this.$=we[De-1]+we[De];break;case 27:this.$=[we[De].trim()];break;case 28:we[De-2].push(we[De].trim()),this.$=we[De-2];break;case 29:this.$=we[De-4],Pe.addClass(we[De-2],we[De]);break;case 37:this.$=[];break;case 42:this.$=we[De].trim(),Pe.setDiagramTitle(this.$);break;case 43:this.$=we[De].trim(),Pe.setAccTitle(this.$);break;case 44:case 45:this.$=we[De].trim(),Pe.setAccDescription(this.$);break;case 46:Pe.addSection(we[De].substr(8)),this.$=we[De].substr(8);break;case 47:Pe.addPoint(we[De-3],"",we[De-1],we[De],[]);break;case 48:Pe.addPoint(we[De-4],we[De-3],we[De-1],we[De],[]);break;case 49:Pe.addPoint(we[De-4],"",we[De-2],we[De-1],we[De]);break;case 50:Pe.addPoint(we[De-5],we[De-4],we[De-2],we[De-1],we[De]);break;case 51:Pe.setXAxisLeftText(we[De-2]),Pe.setXAxisRightText(we[De]);break;case 52:we[De-1].text+=" \u27F6 ",Pe.setXAxisLeftText(we[De-1]);break;case 53:Pe.setXAxisLeftText(we[De]);break;case 54:Pe.setYAxisBottomText(we[De-2]),Pe.setYAxisTopText(we[De]);break;case 55:we[De-1].text+=" \u27F6 ",Pe.setYAxisBottomText(we[De-1]);break;case 56:Pe.setYAxisBottomText(we[De]);break;case 57:Pe.setQuadrant1Text(we[De]);break;case 58:Pe.setQuadrant2Text(we[De]);break;case 59:Pe.setQuadrant3Text(we[De]);break;case 60:Pe.setQuadrant4Text(we[De]);break;case 64:this.$={text:we[De],type:"text"};break;case 65:this.$={text:we[De-1].text+""+we[De],type:we[De-1].type};break;case 66:this.$={text:we[De],type:"text"};break;case 67:this.$={text:we[De],type:"markdown"};break;case 68:this.$=we[De];break;case 69:this.$=we[De-1]+""+we[De];break}},"anonymous"),table:[{18:e,26:1,27:2,28:r,55:n,56:i,57:a},{1:[3]},{18:e,26:8,27:2,28:r,55:n,56:i,57:a},{18:e,26:9,27:2,28:r,55:n,56:i,57:a},t(s,[2,33],{29:10}),t(l,[2,61]),t(l,[2,62]),t(l,[2,63]),{1:[2,30]},{1:[2,31]},t(u,h,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:w,39:C,41:T,42:E,48:A,50:S,51:_,52:I,53:D,54:k,60:L,61:R,63:O,64:M,65:B,66:F,67:P}),t(s,[2,34]),{27:45,55:n,56:i,57:a},t(u,[2,37]),t(u,h,{24:13,32:15,33:16,34:17,43:30,58:31,31:46,4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:w,39:C,41:T,42:E,48:A,50:S,51:_,52:I,53:D,54:k,60:L,61:R,63:O,64:M,65:B,66:F,67:P}),t(u,[2,39]),t(u,[2,40]),t(u,[2,41]),{36:[1,47]},{38:[1,48]},{40:[1,49]},t(u,[2,45]),t(u,[2,46]),{18:[1,50]},{4:f,5:d,10:p,12:m,13:g,14:y,43:51,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:52,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:53,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:54,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:55,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:56,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,44:[1,57],47:[1,58],58:60,59:59,63:O,64:M,65:B,66:F,67:P},t(H,[2,64]),t(H,[2,66]),t(H,[2,67]),t(H,[2,70]),t(H,[2,71]),t(H,[2,72]),t(H,[2,73]),t(H,[2,74]),t(H,[2,75]),t(H,[2,76]),t(H,[2,77]),t(H,[2,78]),t(H,[2,79]),t(H,[2,80]),t(s,[2,35]),t(u,[2,38]),t(u,[2,42]),t(u,[2,43]),t(u,[2,44]),{3:64,4:Q,5:j,6:ie,7:ne,8:le,9:he,10:K,11:X,12:te,13:J,14:se,15:ue,21:63},t(u,[2,53],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,49:[1,77],63:O,64:M,65:B,66:F,67:P}),t(u,[2,56],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,49:[1,78],63:O,64:M,65:B,66:F,67:P}),t(u,[2,57],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,58],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,59],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,60],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),{45:[1,79]},{44:[1,80]},t(H,[2,65]),t(H,[2,81]),t(H,[2,82]),t(H,[2,83]),{3:82,4:Q,5:j,6:ie,7:ne,8:le,9:he,10:K,11:X,12:te,13:J,14:se,15:ue,18:[1,81]},t(Z,[2,23]),t(Z,[2,1]),t(Z,[2,2]),t(Z,[2,3]),t(Z,[2,4]),t(Z,[2,5]),t(Z,[2,6]),t(Z,[2,7]),t(Z,[2,8]),t(Z,[2,9]),t(Z,[2,10]),t(Z,[2,11]),t(Z,[2,12]),t(u,[2,52],{58:31,43:83,4:f,5:d,10:p,12:m,13:g,14:y,60:L,61:R,63:O,64:M,65:B,66:F,67:P}),t(u,[2,55],{58:31,43:84,4:f,5:d,10:p,12:m,13:g,14:y,60:L,61:R,63:O,64:M,65:B,66:F,67:P}),{46:[1,85]},{45:[1,86]},{4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,16:89,17:He,18:$e,19:Re,20:Ie,22:88,23:87},t(Z,[2,24]),t(u,[2,51],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,54],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,47],{22:88,16:89,23:100,4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,17:He,18:$e,19:Re,20:Ie}),{46:[1,101]},t(u,[2,29],{10:be}),t(W,[2,27],{16:103,4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,17:He,18:$e,19:Re,20:Ie}),t(de,[2,25]),t(de,[2,13]),t(de,[2,14]),t(de,[2,15]),t(de,[2,16]),t(de,[2,17]),t(de,[2,18]),t(de,[2,19]),t(de,[2,20]),t(de,[2,21]),t(de,[2,22]),t(u,[2,49],{10:be}),t(u,[2,48],{22:88,16:89,23:104,4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,17:He,18:$e,19:Re,20:Ie}),{4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,16:89,17:He,18:$e,19:Re,20:Ie,22:105},t(de,[2,26]),t(u,[2,50],{10:be}),t(W,[2,28],{16:103,4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,17:He,18:$e,19:Re,20:Ie})],defaultActions:{8:[2,30],9:[2,31]},parseError:o(function(q,pe){if(pe.recoverable)this.trace(q);else{var ve=new Error(q);throw ve.hash=pe,ve}},"parseError"),parse:o(function(q){var pe=this,ve=[0],Pe=[],_e=[null],we=[],Ve=this.table,De="",qe=0,at=0,Rt=0,st=2,Ue=1,ct=we.slice.call(arguments,1),We=Object.create(this.lexer),ot={yy:{}};for(var Yt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Yt)&&(ot.yy[Yt]=this.yy[Yt]);We.setInput(q,ot.yy),ot.yy.lexer=We,ot.yy.parser=this,typeof We.yylloc>"u"&&(We.yylloc={});var bt=We.yylloc;we.push(bt);var Mt=We.options&&We.options.ranges;typeof ot.yy.parseError=="function"?this.parseError=ot.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function xt(Ce){ve.length=ve.length-2*Ce,_e.length=_e.length-Ce,we.length=we.length-Ce}o(xt,"popStack");function ut(){var Ce;return Ce=Pe.pop()||We.lex()||Ue,typeof Ce!="number"&&(Ce instanceof Array&&(Pe=Ce,Ce=Pe.pop()),Ce=pe.symbols_[Ce]||Ce),Ce}o(ut,"lex");for(var Et,ft,yt,nt,dn,Tt,On={},tn,_r,Dr,Pn;;){if(yt=ve[ve.length-1],this.defaultActions[yt]?nt=this.defaultActions[yt]:((Et===null||typeof Et>"u")&&(Et=ut()),nt=Ve[yt]&&Ve[yt][Et]),typeof nt>"u"||!nt.length||!nt[0]){var At="";Pn=[];for(tn in Ve[yt])this.terminals_[tn]&&tn>st&&Pn.push("'"+this.terminals_[tn]+"'");We.showPosition?At="Parse error on line "+(qe+1)+`:
1169 +`+We.showPosition()+`
1170 +Expecting `+Pn.join(", ")+", got '"+(this.terminals_[Et]||Et)+"'":At="Parse error on line "+(qe+1)+": Unexpected "+(Et==Ue?"end of input":"'"+(this.terminals_[Et]||Et)+"'"),this.parseError(At,{text:We.match,token:this.terminals_[Et]||Et,line:We.yylineno,loc:bt,expected:Pn})}if(nt[0]instanceof Array&&nt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+yt+", token: "+Et);switch(nt[0]){case 1:ve.push(Et),_e.push(We.yytext),we.push(We.yylloc),ve.push(nt[1]),Et=null,ft?(Et=ft,ft=null):(at=We.yyleng,De=We.yytext,qe=We.yylineno,bt=We.yylloc,Rt>0&&Rt--);break;case 2:if(_r=this.productions_[nt[1]][1],On.$=_e[_e.length-_r],On._$={first_line:we[we.length-(_r||1)].first_line,last_line:we[we.length-1].last_line,first_column:we[we.length-(_r||1)].first_column,last_column:we[we.length-1].last_column},Mt&&(On._$.range=[we[we.length-(_r||1)].range[0],we[we.length-1].range[1]]),Tt=this.performAction.apply(On,[De,at,qe,ot.yy,nt[1],_e,we].concat(ct)),typeof Tt<"u")return Tt;_r&&(ve=ve.slice(0,-1*_r*2),_e=_e.slice(0,-1*_r),we=we.slice(0,-1*_r)),ve.push(this.productions_[nt[1]][0]),_e.push(On.$),we.push(On._$),Dr=Ve[ve[ve.length-2]][ve[ve.length-1]],ve.push(Dr);break;case 3:return!0}}return!0},"parse")},oe=function(){var xe={EOF:1,parseError:o(function(pe,ve){if(this.yy.parser)this.yy.parser.parseError(pe,ve);else throw new Error(pe)},"parseError"),setInput:o(function(q,pe){return this.yy=pe||this.yy||{},this._input=q,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var q=this._input[0];this.yytext+=q,this.yyleng++,this.offset++,this.match+=q,this.matched+=q;var pe=q.match(/(?:\r\n?|\n).*/g);return pe?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),q},"input"),unput:o(function(q){var pe=q.length,ve=q.split(/(?:\r\n?|\n)/g);this._input=q+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-pe),this.offset-=pe;var Pe=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ve.length-1&&(this.yylineno-=ve.length-1);var _e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ve?(ve.length===Pe.length?this.yylloc.first_column:0)+Pe[Pe.length-ve.length].length-ve[0].length:this.yylloc.first_column-pe},this.options.ranges&&(this.yylloc.range=[_e[0],_e[0]+this.yyleng-pe]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
1171 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(q){this.unput(this.match.slice(q))},"less"),pastInput:o(function(){var q=this.matched.substr(0,this.matched.length-this.match.length);return(q.length>20?"...":"")+q.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var q=this.match;return q.length<20&&(q+=this._input.substr(0,20-q.length)),(q.substr(0,20)+(q.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var q=this.pastInput(),pe=new Array(q.length+1).join("-");return q+this.upcomingInput()+`
1172 +`+pe+"^"},"showPosition"),test_match:o(function(q,pe){var ve,Pe,_e;if(this.options.backtrack_lexer&&(_e={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(_e.yylloc.range=this.yylloc.range.slice(0))),Pe=q[0].match(/(?:\r\n?|\n).*/g),Pe&&(this.yylineno+=Pe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Pe?Pe[Pe.length-1].length-Pe[Pe.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+q[0].length},this.yytext+=q[0],this.match+=q[0],this.matches=q,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(q[0].length),this.matched+=q[0],ve=this.performAction.call(this,this.yy,this,pe,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ve)return ve;if(this._backtrack){for(var we in _e)this[we]=_e[we];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var q,pe,ve,Pe;this._more||(this.yytext="",this.match="");for(var _e=this._currentRules(),we=0;we<_e.length;we++)if(ve=this._input.match(this.rules[_e[we]]),ve&&(!pe||ve[0].length>pe[0].length)){if(pe=ve,Pe=we,this.options.backtrack_lexer){if(q=this.test_match(ve,_e[we]),q!==!1)return q;if(this._backtrack){pe=!1;continue}else return!1}else if(!this.options.flex)break}return pe?(q=this.test_match(pe,_e[Pe]),q!==!1?q:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
1173 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var pe=this.next();return pe||this.lex()},"lex"),begin:o(function(pe){this.conditionStack.push(pe)},"begin"),popState:o(function(){var pe=this.conditionStack.length-1;return pe>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(pe){return pe=this.conditionStack.length-1-Math.abs(pe||0),pe>=0?this.conditionStack[pe]:"INITIAL"},"topState"),pushState:o(function(pe){this.begin(pe)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(pe,ve,Pe,_e){var we=_e;switch(Pe){case 0:break;case 1:break;case 2:return 55;case 3:break;case 4:return this.begin("title"),35;break;case 5:return this.popState(),"title_value";break;case 6:return this.begin("acc_title"),37;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),39;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 48;case 14:return 50;case 15:return 49;case 16:return 51;case 17:return 52;case 18:return 53;case 19:return 54;case 20:return 25;case 21:this.begin("md_string");break;case 22:return"MD_STR";case 23:this.popState();break;case 24:this.begin("string");break;case 25:this.popState();break;case 26:return"STR";case 27:this.begin("class_name");break;case 28:return this.popState(),47;break;case 29:return this.begin("point_start"),44;break;case 30:return this.begin("point_x"),45;break;case 31:this.popState();break;case 32:this.popState(),this.begin("point_y");break;case 33:return this.popState(),46;break;case 34:return 28;case 35:return 4;case 36:return 11;case 37:return 64;case 38:return 10;case 39:return 65;case 40:return 65;case 41:return 14;case 42:return 13;case 43:return 67;case 44:return 66;case 45:return 12;case 46:return 8;case 47:return 5;case 48:return 18;case 49:return 56;case 50:return 63;case 51:return 57}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:classDef\b)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?::::)/i,/^(?:^\w+)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{class_name:{rules:[28],inclusive:!1},point_y:{rules:[33],inclusive:!1},point_x:{rules:[32],inclusive:!1},point_start:{rules:[30,31],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[22,23],inclusive:!1},string:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,21,24,27,29,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inclusive:!0}}};return xe}();re.lexer=oe;function V(){this.yy={}}return o(V,"Parser"),V.prototype=re,re.Parser=V,new V}();hO.parser=hO;uhe=hO});var ms,y6,fhe=N(()=>{"use strict";dr();Ya();vt();_y();ms=oh(),y6=class{constructor(){this.classes=new Map;this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}static{o(this,"QuadrantBuilder")}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:or.quadrantChart?.chartWidth||500,chartWidth:or.quadrantChart?.chartHeight||500,titlePadding:or.quadrantChart?.titlePadding||10,titleFontSize:or.quadrantChart?.titleFontSize||20,quadrantPadding:or.quadrantChart?.quadrantPadding||5,xAxisLabelPadding:or.quadrantChart?.xAxisLabelPadding||5,yAxisLabelPadding:or.quadrantChart?.yAxisLabelPadding||5,xAxisLabelFontSize:or.quadrantChart?.xAxisLabelFontSize||16,yAxisLabelFontSize:or.quadrantChart?.yAxisLabelFontSize||16,quadrantLabelFontSize:or.quadrantChart?.quadrantLabelFontSize||16,quadrantTextTopPadding:or.quadrantChart?.quadrantTextTopPadding||5,pointTextPadding:or.quadrantChart?.pointTextPadding||5,pointLabelFontSize:or.quadrantChart?.pointLabelFontSize||12,pointRadius:or.quadrantChart?.pointRadius||5,xAxisPosition:or.quadrantChart?.xAxisPosition||"top",yAxisPosition:or.quadrantChart?.yAxisPosition||"left",quadrantInternalBorderStrokeWidth:or.quadrantChart?.quadrantInternalBorderStrokeWidth||1,quadrantExternalBorderStrokeWidth:or.quadrantChart?.quadrantExternalBorderStrokeWidth||2}}getDefaultThemeConfig(){return{quadrant1Fill:ms.quadrant1Fill,quadrant2Fill:ms.quadrant2Fill,quadrant3Fill:ms.quadrant3Fill,quadrant4Fill:ms.quadrant4Fill,quadrant1TextFill:ms.quadrant1TextFill,quadrant2TextFill:ms.quadrant2TextFill,quadrant3TextFill:ms.quadrant3TextFill,quadrant4TextFill:ms.quadrant4TextFill,quadrantPointFill:ms.quadrantPointFill,quadrantPointTextFill:ms.quadrantPointTextFill,quadrantXAxisTextFill:ms.quadrantXAxisTextFill,quadrantYAxisTextFill:ms.quadrantYAxisTextFill,quadrantTitleFill:ms.quadrantTitleFill,quadrantInternalBorderStrokeFill:ms.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:ms.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),this.classes=new Map,Y.info("clear called")}setData(e){this.data={...this.data,...e}}addPoints(e){this.data.points=[...e,...this.data.points]}addClass(e,r){this.classes.set(e,r)}setConfig(e){Y.trace("setConfig called with: ",e),this.config={...this.config,...e}}setThemeConfig(e){Y.trace("setThemeConfig called with: ",e),this.themeConfig={...this.themeConfig,...e}}calculateSpace(e,r,n,i){let a=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,s={top:e==="top"&&r?a:0,bottom:e==="bottom"&&r?a:0},l=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,u={left:this.config.yAxisPosition==="left"&&n?l:0,right:this.config.yAxisPosition==="right"&&n?l:0},h=this.config.titleFontSize+this.config.titlePadding*2,f={top:i?h:0},d=this.config.quadrantPadding+u.left,p=this.config.quadrantPadding+s.top+f.top,m=this.config.chartWidth-this.config.quadrantPadding*2-u.left-u.right,g=this.config.chartHeight-this.config.quadrantPadding*2-s.top-s.bottom-f.top,y=m/2,v=g/2;return{xAxisSpace:s,yAxisSpace:u,titleSpace:f,quadrantSpace:{quadrantLeft:d,quadrantTop:p,quadrantWidth:m,quadrantHalfWidth:y,quadrantHeight:g,quadrantHalfHeight:v}}}getAxisLabels(e,r,n,i){let{quadrantSpace:a,titleSpace:s}=i,{quadrantHalfHeight:l,quadrantHeight:u,quadrantLeft:h,quadrantHalfWidth:f,quadrantTop:d,quadrantWidth:p}=a,m=!!this.data.xAxisRightText,g=!!this.data.yAxisTopText,y=[];return this.data.xAxisLeftText&&r&&y.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&r&&y.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+f+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&n&&y.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+u-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&n&&y.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+l-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),y}getQuadrants(e){let{quadrantSpace:r}=e,{quadrantHalfHeight:n,quadrantLeft:i,quadrantHalfWidth:a,quadrantTop:s}=r,l=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s,width:a,height:n,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i,y:s,width:a,height:n,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant4Fill}];for(let u of l)u.text.x=u.x+u.width/2,this.data.points.length===0?(u.text.y=u.y+u.height/2,u.text.horizontalPos="middle"):(u.text.y=u.y+this.config.quadrantTextTopPadding,u.text.horizontalPos="top");return l}getQuadrantPoints(e){let{quadrantSpace:r}=e,{quadrantHeight:n,quadrantLeft:i,quadrantTop:a,quadrantWidth:s}=r,l=gl().domain([0,1]).range([i,s+i]),u=gl().domain([0,1]).range([n+a,a]);return this.data.points.map(f=>{let d=this.classes.get(f.className);return d&&(f={...d,...f}),{x:l(f.x),y:u(f.y),fill:f.color??this.themeConfig.quadrantPointFill,radius:f.radius??this.config.pointRadius,text:{text:f.text,fill:this.themeConfig.quadrantPointTextFill,x:l(f.x),y:u(f.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0},strokeColor:f.strokeColor??this.themeConfig.quadrantPointFill,strokeWidth:f.strokeWidth??"0px"}})}getBorders(e){let r=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:n}=e,{quadrantHalfHeight:i,quadrantHeight:a,quadrantLeft:s,quadrantHalfWidth:l,quadrantTop:u,quadrantWidth:h}=n;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u,x2:s+h+r,y2:u},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s+h,y1:u+r,x2:s+h,y2:u+a-r},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u+a,x2:s+h+r,y2:u+a},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s,y1:u+r,x2:s,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+l,y1:u+r,x2:s+l,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+r,y1:u+i,x2:s+h-r,y2:u+i}]}getTitle(e){if(e)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){let e=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),r=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),n=this.config.showTitle&&!!this.data.titleText,i=this.data.points.length>0?"bottom":this.config.xAxisPosition,a=this.calculateSpace(i,e,r,n);return{points:this.getQuadrantPoints(a),quadrants:this.getQuadrants(a),axisLabels:this.getAxisLabels(i,e,r,a),borderLines:this.getBorders(a),title:this.getTitle(n)}}}});function fO(t){return!/^#?([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/.test(t)}function dhe(t){return!/^\d+$/.test(t)}function phe(t){return!/^\d+px$/.test(t)}var Ap,mhe=N(()=>{"use strict";Ap=class extends Error{static{o(this,"InvalidStyleError")}constructor(e,r,n){super(`value for ${e} ${r} is invalid, please use a valid ${n}`),this.name="InvalidStyleError"}};o(fO,"validateHexCode");o(dhe,"validateNumber");o(phe,"validateSizeInPixels")});function Xu(t){return Tr(t.trim(),pGe)}function mGe(t){ba.setData({quadrant1Text:Xu(t.text)})}function gGe(t){ba.setData({quadrant2Text:Xu(t.text)})}function yGe(t){ba.setData({quadrant3Text:Xu(t.text)})}function vGe(t){ba.setData({quadrant4Text:Xu(t.text)})}function xGe(t){ba.setData({xAxisLeftText:Xu(t.text)})}function bGe(t){ba.setData({xAxisRightText:Xu(t.text)})}function wGe(t){ba.setData({yAxisTopText:Xu(t.text)})}function TGe(t){ba.setData({yAxisBottomText:Xu(t.text)})}function dO(t){let e={};for(let r of t){let[n,i]=r.trim().split(/\s*:\s*/);if(n==="radius"){if(dhe(i))throw new Ap(n,i,"number");e.radius=parseInt(i)}else if(n==="color"){if(fO(i))throw new Ap(n,i,"hex code");e.color=i}else if(n==="stroke-color"){if(fO(i))throw new Ap(n,i,"hex code");e.strokeColor=i}else if(n==="stroke-width"){if(phe(i))throw new Ap(n,i,"number of pixels (eg. 10px)");e.strokeWidth=i}else throw new Error(`style named ${n} is not supported.`)}return e}function kGe(t,e,r,n,i){let a=dO(i);ba.addPoints([{x:r,y:n,text:Xu(t.text),className:e,...a}])}function EGe(t,e){ba.addClass(t,dO(e))}function SGe(t){ba.setConfig({chartWidth:t})}function CGe(t){ba.setConfig({chartHeight:t})}function AGe(){let t=me(),{themeVariables:e,quadrantChart:r}=t;return r&&ba.setConfig(r),ba.setThemeConfig({quadrant1Fill:e.quadrant1Fill,quadrant2Fill:e.quadrant2Fill,quadrant3Fill:e.quadrant3Fill,quadrant4Fill:e.quadrant4Fill,quadrant1TextFill:e.quadrant1TextFill,quadrant2TextFill:e.quadrant2TextFill,quadrant3TextFill:e.quadrant3TextFill,quadrant4TextFill:e.quadrant4TextFill,quadrantPointFill:e.quadrantPointFill,quadrantPointTextFill:e.quadrantPointTextFill,quadrantXAxisTextFill:e.quadrantXAxisTextFill,quadrantYAxisTextFill:e.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:e.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:e.quadrantInternalBorderStrokeFill,quadrantTitleFill:e.quadrantTitleFill}),ba.setData({titleText:Ir()}),ba.build()}var pGe,ba,_Ge,ghe,yhe=N(()=>{"use strict";zt();gr();mi();fhe();mhe();pGe=me();o(Xu,"textSanitizer");ba=new y6;o(mGe,"setQuadrant1Text");o(gGe,"setQuadrant2Text");o(yGe,"setQuadrant3Text");o(vGe,"setQuadrant4Text");o(xGe,"setXAxisLeftText");o(bGe,"setXAxisRightText");o(wGe,"setYAxisTopText");o(TGe,"setYAxisBottomText");o(dO,"parseStyles");o(kGe,"addPoint");o(EGe,"addClass");o(SGe,"setWidth");o(CGe,"setHeight");o(AGe,"getQuadrantData");_Ge=o(function(){ba.clear(),Ar()},"clear"),ghe={setWidth:SGe,setHeight:CGe,setQuadrant1Text:mGe,setQuadrant2Text:gGe,setQuadrant3Text:yGe,setQuadrant4Text:vGe,setXAxisLeftText:xGe,setXAxisRightText:bGe,setYAxisTopText:wGe,setYAxisBottomText:TGe,parseStyles:dO,addPoint:kGe,addClass:EGe,getQuadrantData:AGe,clear:_Ge,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr}});var DGe,vhe,xhe=N(()=>{"use strict";dr();zt();vt();Ei();DGe=o((t,e,r,n)=>{function i(S){return S==="top"?"hanging":"middle"}o(i,"getDominantBaseLine");function a(S){return S==="left"?"start":"middle"}o(a,"getTextAnchor");function s(S){return`translate(${S.x}, ${S.y}) rotate(${S.rotation||0})`}o(s,"getTransformation");let l=me();Y.debug(`Rendering quadrant chart
1174 +`+t);let u=l.securityLevel,h;u==="sandbox"&&(h=Ge("#i"+e));let d=(u==="sandbox"?Ge(h.nodes()[0].contentDocument.body):Ge("body")).select(`[id="${e}"]`),p=d.append("g").attr("class","main"),m=l.quadrantChart?.chartWidth??500,g=l.quadrantChart?.chartHeight??500;vn(d,g,m,l.quadrantChart?.useMaxWidth??!0),d.attr("viewBox","0 0 "+m+" "+g),n.db.setHeight(g),n.db.setWidth(m);let y=n.db.getQuadrantData(),v=p.append("g").attr("class","quadrants"),x=p.append("g").attr("class","border"),b=p.append("g").attr("class","data-points"),w=p.append("g").attr("class","labels"),C=p.append("g").attr("class","title");y.title&&C.append("text").attr("x",0).attr("y",0).attr("fill",y.title.fill).attr("font-size",y.title.fontSize).attr("dominant-baseline",i(y.title.horizontalPos)).attr("text-anchor",a(y.title.verticalPos)).attr("transform",s(y.title)).text(y.title.text),y.borderLines&&x.selectAll("line").data(y.borderLines).enter().append("line").attr("x1",S=>S.x1).attr("y1",S=>S.y1).attr("x2",S=>S.x2).attr("y2",S=>S.y2).style("stroke",S=>S.strokeFill).style("stroke-width",S=>S.strokeWidth);let T=v.selectAll("g.quadrant").data(y.quadrants).enter().append("g").attr("class","quadrant");T.append("rect").attr("x",S=>S.x).attr("y",S=>S.y).attr("width",S=>S.width).attr("height",S=>S.height).attr("fill",S=>S.fill),T.append("text").attr("x",0).attr("y",0).attr("fill",S=>S.text.fill).attr("font-size",S=>S.text.fontSize).attr("dominant-baseline",S=>i(S.text.horizontalPos)).attr("text-anchor",S=>a(S.text.verticalPos)).attr("transform",S=>s(S.text)).text(S=>S.text.text),w.selectAll("g.label").data(y.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(S=>S.text).attr("fill",S=>S.fill).attr("font-size",S=>S.fontSize).attr("dominant-baseline",S=>i(S.horizontalPos)).attr("text-anchor",S=>a(S.verticalPos)).attr("transform",S=>s(S));let A=b.selectAll("g.data-point").data(y.points).enter().append("g").attr("class","data-point");A.append("circle").attr("cx",S=>S.x).attr("cy",S=>S.y).attr("r",S=>S.radius).attr("fill",S=>S.fill).attr("stroke",S=>S.strokeColor).attr("stroke-width",S=>S.strokeWidth),A.append("text").attr("x",0).attr("y",0).text(S=>S.text.text).attr("fill",S=>S.text.fill).attr("font-size",S=>S.text.fontSize).attr("dominant-baseline",S=>i(S.text.horizontalPos)).attr("text-anchor",S=>a(S.text.verticalPos)).attr("transform",S=>s(S.text))},"draw"),vhe={draw:DGe}});var bhe={};hr(bhe,{diagram:()=>LGe});var LGe,whe=N(()=>{"use strict";hhe();yhe();xhe();LGe={parser:uhe,db:ghe,renderer:vhe,styles:o(()=>"","styles")}});var pO,Ehe,She=N(()=>{"use strict";pO=function(){var t=o(function(O,M,B,F){for(B=B||{},F=O.length;F--;B[O[F]]=M);return B},"o"),e=[1,10,12,14,16,18,19,21,23],r=[2,6],n=[1,3],i=[1,5],a=[1,6],s=[1,7],l=[1,5,10,12,14,16,18,19,21,23,34,35,36],u=[1,25],h=[1,26],f=[1,28],d=[1,29],p=[1,30],m=[1,31],g=[1,32],y=[1,33],v=[1,34],x=[1,35],b=[1,36],w=[1,37],C=[1,43],T=[1,42],E=[1,47],A=[1,50],S=[1,10,12,14,16,18,19,21,23,34,35,36],_=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],I=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],D=[1,64],k={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:o(function(M,B,F,P,z,$,H){var Q=$.length-1;switch(z){case 5:P.setOrientation($[Q]);break;case 9:P.setDiagramTitle($[Q].text.trim());break;case 12:P.setLineData({text:"",type:"text"},$[Q]);break;case 13:P.setLineData($[Q-1],$[Q]);break;case 14:P.setBarData({text:"",type:"text"},$[Q]);break;case 15:P.setBarData($[Q-1],$[Q]);break;case 16:this.$=$[Q].trim(),P.setAccTitle(this.$);break;case 17:case 18:this.$=$[Q].trim(),P.setAccDescription(this.$);break;case 19:this.$=$[Q-1];break;case 20:this.$=[Number($[Q-2]),...$[Q]];break;case 21:this.$=[Number($[Q])];break;case 22:P.setXAxisTitle($[Q]);break;case 23:P.setXAxisTitle($[Q-1]);break;case 24:P.setXAxisTitle({type:"text",text:""});break;case 25:P.setXAxisBand($[Q]);break;case 26:P.setXAxisRangeData(Number($[Q-2]),Number($[Q]));break;case 27:this.$=$[Q-1];break;case 28:this.$=[$[Q-2],...$[Q]];break;case 29:this.$=[$[Q]];break;case 30:P.setYAxisTitle($[Q]);break;case 31:P.setYAxisTitle($[Q-1]);break;case 32:P.setYAxisTitle({type:"text",text:""});break;case 33:P.setYAxisRangeData(Number($[Q-2]),Number($[Q]));break;case 37:this.$={text:$[Q],type:"text"};break;case 38:this.$={text:$[Q],type:"text"};break;case 39:this.$={text:$[Q],type:"markdown"};break;case 40:this.$=$[Q];break;case 41:this.$=$[Q-1]+""+$[Q];break}},"anonymous"),table:[t(e,r,{3:1,4:2,7:4,5:n,34:i,35:a,36:s}),{1:[3]},t(e,r,{4:2,7:4,3:8,5:n,34:i,35:a,36:s}),t(e,r,{4:2,7:4,6:9,3:10,5:n,8:[1,11],34:i,35:a,36:s}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},t(l,[2,34]),t(l,[2,35]),t(l,[2,36]),{1:[2,1]},t(e,r,{4:2,7:4,3:21,5:n,34:i,35:a,36:s}),{1:[2,3]},t(l,[2,5]),t(e,[2,7],{4:22,34:i,35:a,36:s}),{11:23,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:39,13:38,24:C,27:T,29:40,30:41,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:45,15:44,27:E,33:46,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:49,17:48,24:A,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:52,17:51,24:A,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{20:[1,53]},{22:[1,54]},t(S,[2,18]),{1:[2,2]},t(S,[2,8]),t(S,[2,9]),t(_,[2,37],{40:55,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w}),t(_,[2,38]),t(_,[2,39]),t(I,[2,40]),t(I,[2,42]),t(I,[2,43]),t(I,[2,44]),t(I,[2,45]),t(I,[2,46]),t(I,[2,47]),t(I,[2,48]),t(I,[2,49]),t(I,[2,50]),t(I,[2,51]),t(S,[2,10]),t(S,[2,22],{30:41,29:56,24:C,27:T}),t(S,[2,24]),t(S,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},t(S,[2,11]),t(S,[2,30],{33:60,27:E}),t(S,[2,32]),{31:[1,61]},t(S,[2,12]),{17:62,24:A},{25:63,27:D},t(S,[2,14]),{17:65,24:A},t(S,[2,16]),t(S,[2,17]),t(I,[2,41]),t(S,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},t(S,[2,31]),{27:[1,69]},t(S,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},t(S,[2,15]),t(S,[2,26]),t(S,[2,27]),{11:59,32:72,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},t(S,[2,33]),t(S,[2,19]),{25:73,27:D},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:o(function(M,B){if(B.recoverable)this.trace(M);else{var F=new Error(M);throw F.hash=B,F}},"parseError"),parse:o(function(M){var B=this,F=[0],P=[],z=[null],$=[],H=this.table,Q="",j=0,ie=0,ne=0,le=2,he=1,K=$.slice.call(arguments,1),X=Object.create(this.lexer),te={yy:{}};for(var J in this.yy)Object.prototype.hasOwnProperty.call(this.yy,J)&&(te.yy[J]=this.yy[J]);X.setInput(M,te.yy),te.yy.lexer=X,te.yy.parser=this,typeof X.yylloc>"u"&&(X.yylloc={});var se=X.yylloc;$.push(se);var ue=X.options&&X.options.ranges;typeof te.yy.parseError=="function"?this.parseError=te.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Z(re){F.length=F.length-2*re,z.length=z.length-re,$.length=$.length-re}o(Z,"popStack");function Se(){var re;return re=P.pop()||X.lex()||he,typeof re!="number"&&(re instanceof Array&&(P=re,re=P.pop()),re=B.symbols_[re]||re),re}o(Se,"lex");for(var ce,ae,Oe,ge,ze,He,$e={},Re,Ie,be,W;;){if(Oe=F[F.length-1],this.defaultActions[Oe]?ge=this.defaultActions[Oe]:((ce===null||typeof ce>"u")&&(ce=Se()),ge=H[Oe]&&H[Oe][ce]),typeof ge>"u"||!ge.length||!ge[0]){var de="";W=[];for(Re in H[Oe])this.terminals_[Re]&&Re>le&&W.push("'"+this.terminals_[Re]+"'");X.showPosition?de="Parse error on line "+(j+1)+`:
1175 +`+X.showPosition()+`
1176 +Expecting `+W.join(", ")+", got '"+(this.terminals_[ce]||ce)+"'":de="Parse error on line "+(j+1)+": Unexpected "+(ce==he?"end of input":"'"+(this.terminals_[ce]||ce)+"'"),this.parseError(de,{text:X.match,token:this.terminals_[ce]||ce,line:X.yylineno,loc:se,expected:W})}if(ge[0]instanceof Array&&ge.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Oe+", token: "+ce);switch(ge[0]){case 1:F.push(ce),z.push(X.yytext),$.push(X.yylloc),F.push(ge[1]),ce=null,ae?(ce=ae,ae=null):(ie=X.yyleng,Q=X.yytext,j=X.yylineno,se=X.yylloc,ne>0&&ne--);break;case 2:if(Ie=this.productions_[ge[1]][1],$e.$=z[z.length-Ie],$e._$={first_line:$[$.length-(Ie||1)].first_line,last_line:$[$.length-1].last_line,first_column:$[$.length-(Ie||1)].first_column,last_column:$[$.length-1].last_column},ue&&($e._$.range=[$[$.length-(Ie||1)].range[0],$[$.length-1].range[1]]),He=this.performAction.apply($e,[Q,ie,j,te.yy,ge[1],z,$].concat(K)),typeof He<"u")return He;Ie&&(F=F.slice(0,-1*Ie*2),z=z.slice(0,-1*Ie),$=$.slice(0,-1*Ie)),F.push(this.productions_[ge[1]][0]),z.push($e.$),$.push($e._$),be=H[F[F.length-2]][F[F.length-1]],F.push(be);break;case 3:return!0}}return!0},"parse")},L=function(){var O={EOF:1,parseError:o(function(B,F){if(this.yy.parser)this.yy.parser.parseError(B,F);else throw new Error(B)},"parseError"),setInput:o(function(M,B){return this.yy=B||this.yy||{},this._input=M,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var M=this._input[0];this.yytext+=M,this.yyleng++,this.offset++,this.match+=M,this.matched+=M;var B=M.match(/(?:\r\n?|\n).*/g);return B?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),M},"input"),unput:o(function(M){var B=M.length,F=M.split(/(?:\r\n?|\n)/g);this._input=M+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-B),this.offset-=B;var P=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),F.length-1&&(this.yylineno-=F.length-1);var z=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:F?(F.length===P.length?this.yylloc.first_column:0)+P[P.length-F.length].length-F[0].length:this.yylloc.first_column-B},this.options.ranges&&(this.yylloc.range=[z[0],z[0]+this.yyleng-B]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
1177 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(M){this.unput(this.match.slice(M))},"less"),pastInput:o(function(){var M=this.matched.substr(0,this.matched.length-this.match.length);return(M.length>20?"...":"")+M.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var M=this.match;return M.length<20&&(M+=this._input.substr(0,20-M.length)),(M.substr(0,20)+(M.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var M=this.pastInput(),B=new Array(M.length+1).join("-");return M+this.upcomingInput()+`
1178 +`+B+"^"},"showPosition"),test_match:o(function(M,B){var F,P,z;if(this.options.backtrack_lexer&&(z={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(z.yylloc.range=this.yylloc.range.slice(0))),P=M[0].match(/(?:\r\n?|\n).*/g),P&&(this.yylineno+=P.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:P?P[P.length-1].length-P[P.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+M[0].length},this.yytext+=M[0],this.match+=M[0],this.matches=M,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(M[0].length),this.matched+=M[0],F=this.performAction.call(this,this.yy,this,B,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),F)return F;if(this._backtrack){for(var $ in z)this[$]=z[$];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var M,B,F,P;this._more||(this.yytext="",this.match="");for(var z=this._currentRules(),$=0;$<z.length;$++)if(F=this._input.match(this.rules[z[$]]),F&&(!B||F[0].length>B[0].length)){if(B=F,P=$,this.options.backtrack_lexer){if(M=this.test_match(F,z[$]),M!==!1)return M;if(this._backtrack){B=!1;continue}else return!1}else if(!this.options.flex)break}return B?(M=this.test_match(B,z[P]),M!==!1?M:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
1179 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var B=this.next();return B||this.lex()},"lex"),begin:o(function(B){this.conditionStack.push(B)},"begin"),popState:o(function(){var B=this.conditionStack.length-1;return B>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(B){return B=this.conditionStack.length-1-Math.abs(B||0),B>=0?this.conditionStack[B]:"INITIAL"},"topState"),pushState:o(function(B){this.begin(B)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(B,F,P,z){var $=z;switch(P){case 0:break;case 1:break;case 2:return this.popState(),34;break;case 3:return this.popState(),34;break;case 4:return 34;case 5:break;case 6:return 10;case 7:return this.pushState("acc_title"),19;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.pushState("acc_descr"),21;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.pushState("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 8;case 16:return this.pushState("axis_data"),"X_AXIS";break;case 17:return this.pushState("axis_data"),"Y_AXIS";break;case 18:return this.pushState("axis_band_data"),24;break;case 19:return 31;case 20:return this.pushState("data"),16;break;case 21:return this.pushState("data"),18;break;case 22:return this.pushState("data_inner"),24;break;case 23:return 27;case 24:return this.popState(),26;break;case 25:this.popState();break;case 26:this.pushState("string");break;case 27:this.popState();break;case 28:return"STR";case 29:return 24;case 30:return 26;case 31:return 43;case 32:return"COLON";case 33:return 44;case 34:return 28;case 35:return 45;case 36:return 46;case 37:return 48;case 38:return 50;case 39:return 47;case 40:return 41;case 41:return 49;case 42:return 42;case 43:break;case 44:return 35;case 45:return 36}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n<md_string>\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n<md_string>\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,20,21,22,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,23,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[27,28],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0}}};return O}();k.lexer=L;function R(){this.yy={}}return o(R,"Parser"),R.prototype=k,k.Parser=R,new R}();pO.parser=pO;Ehe=pO});function mO(t){return t.type==="bar"}function v6(t){return t.type==="band"}function S1(t){return t.type==="linear"}var x6=N(()=>{"use strict";o(mO,"isBarPlot");o(v6,"isBandAxisData");o(S1,"isLinearAxisData")});var C1,gO=N(()=>{"use strict";to();C1=class{constructor(e){this.parentGroup=e}static{o(this,"TextDimensionCalculatorWithFont")}getMaxDimension(e,r){if(!this.parentGroup)return{width:e.reduce((a,s)=>Math.max(s.length,a),0)*r,height:r};let n={width:0,height:0},i=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",r);for(let a of e){let s=sK(i,1,a),l=s?s.width:a.length*r,u=s?s.height:r;n.width=Math.max(n.width,l),n.height=Math.max(n.height,u)}return i.remove(),n}}});var A1,yO=N(()=>{"use strict";A1=class{constructor(e,r,n,i){this.axisConfig=e;this.title=r;this.textDimensionCalculator=n;this.axisThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0};this.axisPosition="left";this.showTitle=!1;this.showLabel=!1;this.showTick=!1;this.showAxisLine=!1;this.outerPadding=0;this.titleTextHeight=0;this.labelTextHeight=0;this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}static{o(this,"BaseAxis")}setRange(e){this.range=e,this.axisPosition==="left"||this.axisPosition==="right"?this.boundingRect.height=e[1]-e[0]:this.boundingRect.width=e[1]-e[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(e){this.axisPosition=e,this.setRange(this.range)}getTickDistance(){let e=this.getRange();return Math.abs(e[0]-e[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map(e=>e.toString()),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){.7*this.getTickDistance()>this.outerPadding*2&&(this.outerPadding=Math.floor(.7*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(e){let r=e.height;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.width;this.outerPadding=Math.min(n.width/2,i);let a=n.height+this.axisConfig.labelPadding*2;this.labelTextHeight=n.height,a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width,this.boundingRect.height=e.height-r}calculateSpaceIfDrawnVertical(e){let r=e.width;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.height;this.outerPadding=Math.min(n.height/2,i);let a=n.width+this.axisConfig.labelPadding*2;a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width-r,this.boundingRect.height=e.height}calculateSpace(e){return this.axisPosition==="left"||this.axisPosition==="right"?this.calculateSpaceIfDrawnVertical(e):this.calculateSpaceIfDrawnHorizontally(e),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}getDrawableElementsForLeftAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${r},${this.boundingRect.y} L ${r},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(r),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"}))}),this.showTick){let r=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${r},${this.getScaleValue(n)} L ${r-this.axisConfig.tickLength},${this.getScaleValue(n)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForBottomAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r} L ${this.getScaleValue(n)},${r+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForTopAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+this.axisConfig.titlePadding*2:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y;e.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(n)},${r+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElements(){if(this.axisPosition==="left")return this.getDrawableElementsForLeftAxis();if(this.axisPosition==="right")throw Error("Drawing of right axis is not implemented");return this.axisPosition==="bottom"?this.getDrawableElementsForBottomAxis():this.axisPosition==="top"?this.getDrawableElementsForTopAxis():[]}}});var b6,Che=N(()=>{"use strict";dr();vt();yO();b6=class extends A1{static{o(this,"BandAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.categories=n,this.scale=L0().domain(this.categories).range(this.getRange())}setRange(e){super.setRange(e)}recalculateScale(){this.scale=L0().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),Y.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(e){return this.scale(e)??this.getRange()[0]}}});var w6,Ahe=N(()=>{"use strict";dr();yO();w6=class extends A1{static{o(this,"LinearAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.domain=n,this.scale=gl().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){let e=[...this.domain];this.axisPosition==="left"&&e.reverse(),this.scale=gl().domain(e).range(this.getRange())}getScaleValue(e){return this.scale(e)}}});function vO(t,e,r,n){let i=new C1(n);return v6(t)?new b6(e,r,t.categories,t.title,i):new w6(e,r,[t.min,t.max],t.title,i)}var _he=N(()=>{"use strict";x6();gO();Che();Ahe();o(vO,"getAxis")});function Dhe(t,e,r,n){let i=new C1(n);return new xO(i,t,e,r)}var xO,Lhe=N(()=>{"use strict";gO();xO=class{constructor(e,r,n,i){this.textDimensionCalculator=e;this.chartConfig=r;this.chartData=n;this.chartThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}static{o(this,"ChartTitle")}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){let r=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),n=Math.max(r.width,e.width),i=r.height+2*this.chartConfig.titlePadding;return r.width<=n&&r.height<=i&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=n,this.boundingRect.height=i,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){let e=[];return this.showChartTitle&&e.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),e}};o(Dhe,"getChartTitleComponent")});var T6,Rhe=N(()=>{"use strict";dr();T6=class{constructor(e,r,n,i,a){this.plotData=e;this.xAxis=r;this.yAxis=n;this.orientation=i;this.plotIndex=a}static{o(this,"LinePlot")}getDrawableElement(){let e=this.plotData.data.map(n=>[this.xAxis.getScaleValue(n[0]),this.yAxis.getScaleValue(n[1])]),r;return this.orientation==="horizontal"?r=wl().y(n=>n[0]).x(n=>n[1])(e):r=wl().x(n=>n[0]).y(n=>n[1])(e),r?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:r,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}});var k6,Nhe=N(()=>{"use strict";k6=class{constructor(e,r,n,i,a,s){this.barData=e;this.boundingRect=r;this.xAxis=n;this.yAxis=i;this.orientation=a;this.plotIndex=s}static{o(this,"BarPlot")}getDrawableElement(){let e=this.barData.data.map(a=>[this.xAxis.getScaleValue(a[0]),this.yAxis.getScaleValue(a[1])]),n=Math.min(this.xAxis.getAxisOuterPadding()*2,this.xAxis.getTickDistance())*(1-.05),i=n/2;return this.orientation==="horizontal"?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:this.boundingRect.x,y:a[0]-i,height:n,width:a[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:a[0]-i,y:a[1],width:n,height:this.boundingRect.y+this.boundingRect.height-a[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]}}});function Mhe(t,e,r){return new bO(t,e,r)}var bO,Ihe=N(()=>{"use strict";Rhe();Nhe();bO=class{constructor(e,r,n){this.chartConfig=e;this.chartData=r;this.chartThemeConfig=n;this.boundingRect={x:0,y:0,width:0,height:0}}static{o(this,"BasePlot")}setAxes(e,r){this.xAxis=e,this.yAxis=r}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){return this.boundingRect.width=e.width,this.boundingRect.height=e.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!(this.xAxis&&this.yAxis))throw Error("Axes must be passed to render Plots");let e=[];for(let[r,n]of this.chartData.plots.entries())switch(n.type){case"line":{let i=new T6(n,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break;case"bar":{let i=new k6(n,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break}return e}};o(Mhe,"getPlotComponent")});var E6,Ohe=N(()=>{"use strict";_he();Lhe();Ihe();x6();E6=class{constructor(e,r,n,i){this.chartConfig=e;this.chartData=r;this.componentStore={title:Dhe(e,r,n,i),plot:Mhe(e,r,n),xAxis:vO(r.xAxis,e.xAxis,{titleColor:n.xAxisTitleColor,labelColor:n.xAxisLabelColor,tickColor:n.xAxisTickColor,axisLineColor:n.xAxisLineColor},i),yAxis:vO(r.yAxis,e.yAxis,{titleColor:n.yAxisTitleColor,labelColor:n.yAxisLabelColor,tickColor:n.yAxisTickColor,axisLineColor:n.yAxisLineColor},i)}}static{o(this,"Orchestrator")}calculateVerticalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),s=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),l=this.componentStore.plot.calculateSpace({width:a,height:s});e-=l.width,r-=l.height,l=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),i=l.height,r-=l.height,this.componentStore.xAxis.setAxisPosition("bottom"),l=this.componentStore.xAxis.calculateSpace({width:e,height:r}),r-=l.height,this.componentStore.yAxis.setAxisPosition("left"),l=this.componentStore.yAxis.calculateSpace({width:e,height:r}),n=l.width,e-=l.width,e>0&&(a+=e,e=0),r>0&&(s+=r,r=0),this.componentStore.plot.calculateSpace({width:a,height:s}),this.componentStore.plot.setBoundingBoxXY({x:n,y:i}),this.componentStore.xAxis.setRange([n,n+a]),this.componentStore.xAxis.setBoundingBoxXY({x:n,y:i+s}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:i}),this.chartData.plots.some(u=>mO(u))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=0,s=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),l=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),u=this.componentStore.plot.calculateSpace({width:s,height:l});e-=u.width,r-=u.height,u=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),n=u.height,r-=u.height,this.componentStore.xAxis.setAxisPosition("left"),u=this.componentStore.xAxis.calculateSpace({width:e,height:r}),e-=u.width,i=u.width,this.componentStore.yAxis.setAxisPosition("top"),u=this.componentStore.yAxis.calculateSpace({width:e,height:r}),r-=u.height,a=n+u.height,e>0&&(s+=e,e=0),r>0&&(l+=r,r=0),this.componentStore.plot.calculateSpace({width:s,height:l}),this.componentStore.plot.setBoundingBoxXY({x:i,y:a}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:i,y:n}),this.componentStore.xAxis.setRange([a,a+l]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:a}),this.chartData.plots.some(h=>mO(h))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){this.chartConfig.chartOrientation==="horizontal"?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();let e=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(let r of Object.values(this.componentStore))e.push(...r.getDrawableElements());return e}}});var S6,Phe=N(()=>{"use strict";Ohe();S6=class{static{o(this,"XYChartBuilder")}static build(e,r,n,i){return new E6(e,r,n,i).getDrawableElement()}}});function Fhe(){let t=oh(),e=cr();return Fi(t.xyChart,e.themeVariables.xyChart)}function $he(){let t=cr();return Fi(or.xyChart,t.xyChart)}function zhe(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function kO(t){let e=cr();return Tr(t.trim(),e)}function IGe(t){Bhe=t}function OGe(t){t==="horizontal"?bb.chartOrientation="horizontal":bb.chartOrientation="vertical"}function PGe(t){fn.xAxis.title=kO(t.text)}function Ghe(t,e){fn.xAxis={type:"linear",title:fn.xAxis.title,min:t,max:e},C6=!0}function BGe(t){fn.xAxis={type:"band",title:fn.xAxis.title,categories:t.map(e=>kO(e.text))},C6=!0}function FGe(t){fn.yAxis.title=kO(t.text)}function $Ge(t,e){fn.yAxis={type:"linear",title:fn.yAxis.title,min:t,max:e},TO=!0}function zGe(t){let e=Math.min(...t),r=Math.max(...t),n=S1(fn.yAxis)?fn.yAxis.min:1/0,i=S1(fn.yAxis)?fn.yAxis.max:-1/0;fn.yAxis={type:"linear",title:fn.yAxis.title,min:Math.min(n,e),max:Math.max(i,r)}}function Vhe(t){let e=[];if(t.length===0)return e;if(!C6){let r=S1(fn.xAxis)?fn.xAxis.min:1/0,n=S1(fn.xAxis)?fn.xAxis.max:-1/0;Ghe(Math.min(r,1),Math.max(n,t.length))}if(TO||zGe(t),v6(fn.xAxis)&&(e=fn.xAxis.categories.map((r,n)=>[r,t[n]])),S1(fn.xAxis)){let r=fn.xAxis.min,n=fn.xAxis.max,i=(n-r)/(t.length-1),a=[];for(let s=r;s<=n;s+=i)a.push(`${s}`);e=a.map((s,l)=>[s,t[l]])}return e}function Uhe(t){return wO[t===0?0:t%wO.length]}function GGe(t,e){let r=Vhe(e);fn.plots.push({type:"line",strokeFill:Uhe(xb),strokeWidth:2,data:r}),xb++}function VGe(t,e){let r=Vhe(e);fn.plots.push({type:"bar",fill:Uhe(xb),data:r}),xb++}function UGe(){if(fn.plots.length===0)throw Error("No Plot to render, please provide a plot with some data");return fn.title=Ir(),S6.build(bb,fn,wb,Bhe)}function HGe(){return wb}function WGe(){return bb}var xb,Bhe,bb,wb,fn,wO,C6,TO,qGe,Hhe,Whe=N(()=>{"use strict";ji();Ya();_y();ir();gr();mi();Phe();x6();xb=0,bb=$he(),wb=Fhe(),fn=zhe(),wO=wb.plotColorPalette.split(",").map(t=>t.trim()),C6=!1,TO=!1;o(Fhe,"getChartDefaultThemeConfig");o($he,"getChartDefaultConfig");o(zhe,"getChartDefaultData");o(kO,"textSanitizer");o(IGe,"setTmpSVGG");o(OGe,"setOrientation");o(PGe,"setXAxisTitle");o(Ghe,"setXAxisRangeData");o(BGe,"setXAxisBand");o(FGe,"setYAxisTitle");o($Ge,"setYAxisRangeData");o(zGe,"setYAxisRangeFromPlotData");o(Vhe,"transformDataWithoutCategory");o(Uhe,"getPlotColorFromPalette");o(GGe,"setLineData");o(VGe,"setBarData");o(UGe,"getDrawableElem");o(HGe,"getChartThemeConfig");o(WGe,"getChartConfig");qGe=o(function(){Ar(),xb=0,bb=$he(),fn=zhe(),wb=Fhe(),wO=wb.plotColorPalette.split(",").map(t=>t.trim()),C6=!1,TO=!1},"clear"),Hhe={getDrawableElem:UGe,clear:qGe,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr,setOrientation:OGe,setXAxisTitle:PGe,setXAxisRangeData:Ghe,setXAxisBand:BGe,setYAxisTitle:FGe,setYAxisRangeData:$Ge,setLineData:GGe,setBarData:VGe,setTmpSVGG:IGe,getChartThemeConfig:HGe,getChartConfig:WGe}});var YGe,qhe,Yhe=N(()=>{"use strict";vt();Vc();Ei();YGe=o((t,e,r,n)=>{let i=n.db,a=i.getChartThemeConfig(),s=i.getChartConfig();function l(v){return v==="top"?"text-before-edge":"middle"}o(l,"getDominantBaseLine");function u(v){return v==="left"?"start":v==="right"?"end":"middle"}o(u,"getTextAnchor");function h(v){return`translate(${v.x}, ${v.y}) rotate(${v.rotation||0})`}o(h,"getTextTransformation"),Y.debug(`Rendering xychart chart
1180 +`+t);let f=sa(e),d=f.append("g").attr("class","main"),p=d.append("rect").attr("width",s.width).attr("height",s.height).attr("class","background");vn(f,s.height,s.width,!0),f.attr("viewBox",`0 0 ${s.width} ${s.height}`),p.attr("fill",a.backgroundColor),i.setTmpSVGG(f.append("g").attr("class","mermaid-tmp-group"));let m=i.getDrawableElem(),g={};function y(v){let x=d,b="";for(let[w]of v.entries()){let C=d;w>0&&g[b]&&(C=g[b]),b+=v[w],x=g[b],x||(x=g[b]=C.append("g").attr("class",v[w]))}return x}o(y,"getGroup");for(let v of m){if(v.data.length===0)continue;let x=y(v.groupTexts);switch(v.type){case"rect":x.selectAll("rect").data(v.data).enter().append("rect").attr("x",b=>b.x).attr("y",b=>b.y).attr("width",b=>b.width).attr("height",b=>b.height).attr("fill",b=>b.fill).attr("stroke",b=>b.strokeFill).attr("stroke-width",b=>b.strokeWidth);break;case"text":x.selectAll("text").data(v.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",b=>b.fill).attr("font-size",b=>b.fontSize).attr("dominant-baseline",b=>l(b.verticalPos)).attr("text-anchor",b=>u(b.horizontalPos)).attr("transform",b=>h(b)).text(b=>b.text);break;case"path":x.selectAll("path").data(v.data).enter().append("path").attr("d",b=>b.path).attr("fill",b=>b.fill?b.fill:"none").attr("stroke",b=>b.strokeFill).attr("stroke-width",b=>b.strokeWidth);break}}},"draw"),qhe={draw:YGe}});var Xhe={};hr(Xhe,{diagram:()=>XGe});var XGe,jhe=N(()=>{"use strict";She();Whe();Yhe();XGe={parser:Ehe,db:Hhe,renderer:qhe}});var EO,Zhe,Jhe=N(()=>{"use strict";EO=function(){var t=o(function(re,oe,V,xe){for(V=V||{},xe=re.length;xe--;V[re[xe]]=oe);return V},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[5,6,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],s=[1,22],l=[2,7],u=[1,26],h=[1,27],f=[1,28],d=[1,29],p=[1,33],m=[1,34],g=[1,35],y=[1,36],v=[1,37],x=[1,38],b=[1,24],w=[1,31],C=[1,32],T=[1,30],E=[1,39],A=[1,40],S=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],_=[1,61],I=[89,90],D=[5,8,9,11,13,21,22,23,24,27,29,41,42,43,44,45,46,54,61,63,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],k=[27,29],L=[1,70],R=[1,71],O=[1,72],M=[1,73],B=[1,74],F=[1,75],P=[1,76],z=[1,83],$=[1,80],H=[1,84],Q=[1,85],j=[1,86],ie=[1,87],ne=[1,88],le=[1,89],he=[1,90],K=[1,91],X=[1,92],te=[5,8,9,11,13,21,22,23,24,27,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],J=[63,64],se=[1,101],ue=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,76,77,89,90],Z=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],Se=[1,110],ce=[1,106],ae=[1,107],Oe=[1,108],ge=[1,109],ze=[1,111],He=[1,116],$e=[1,117],Re=[1,114],Ie=[1,115],be={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,direction:17,styleStatement:18,classDefStatement:19,classStatement:20,direction_tb:21,direction_bt:22,direction_rl:23,direction_lr:24,requirementType:25,requirementName:26,STRUCT_START:27,requirementBody:28,STYLE_SEPARATOR:29,idList:30,ID:31,COLONSEP:32,id:33,TEXT:34,text:35,RISK:36,riskLevel:37,VERIFYMTHD:38,verifyType:39,STRUCT_STOP:40,REQUIREMENT:41,FUNCTIONAL_REQUIREMENT:42,INTERFACE_REQUIREMENT:43,PERFORMANCE_REQUIREMENT:44,PHYSICAL_REQUIREMENT:45,DESIGN_CONSTRAINT:46,LOW_RISK:47,MED_RISK:48,HIGH_RISK:49,VERIFY_ANALYSIS:50,VERIFY_DEMONSTRATION:51,VERIFY_INSPECTION:52,VERIFY_TEST:53,ELEMENT:54,elementName:55,elementBody:56,TYPE:57,type:58,DOCREF:59,ref:60,END_ARROW_L:61,relationship:62,LINE:63,END_ARROW_R:64,CONTAINS:65,COPIES:66,DERIVES:67,SATISFIES:68,VERIFIES:69,REFINES:70,TRACES:71,CLASSDEF:72,stylesOpt:73,CLASS:74,ALPHA:75,COMMA:76,STYLE:77,style:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,MINUS:86,LABEL:87,SEMICOLON:88,unqString:89,qString:90,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",21:"direction_tb",22:"direction_bt",23:"direction_rl",24:"direction_lr",27:"STRUCT_START",29:"STYLE_SEPARATOR",31:"ID",32:"COLONSEP",34:"TEXT",36:"RISK",38:"VERIFYMTHD",40:"STRUCT_STOP",41:"REQUIREMENT",42:"FUNCTIONAL_REQUIREMENT",43:"INTERFACE_REQUIREMENT",44:"PERFORMANCE_REQUIREMENT",45:"PHYSICAL_REQUIREMENT",46:"DESIGN_CONSTRAINT",47:"LOW_RISK",48:"MED_RISK",49:"HIGH_RISK",50:"VERIFY_ANALYSIS",51:"VERIFY_DEMONSTRATION",52:"VERIFY_INSPECTION",53:"VERIFY_TEST",54:"ELEMENT",57:"TYPE",59:"DOCREF",61:"END_ARROW_L",63:"LINE",64:"END_ARROW_R",65:"CONTAINS",66:"COPIES",67:"DERIVES",68:"SATISFIES",69:"VERIFIES",70:"REFINES",71:"TRACES",72:"CLASSDEF",74:"CLASS",75:"ALPHA",76:"COMMA",77:"STYLE",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",86:"MINUS",87:"LABEL",88:"SEMICOLON",89:"unqString",90:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[17,1],[17,1],[17,1],[17,1],[14,5],[14,7],[28,5],[28,5],[28,5],[28,5],[28,2],[28,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[37,1],[37,1],[37,1],[39,1],[39,1],[39,1],[39,1],[15,5],[15,7],[56,5],[56,5],[56,2],[56,1],[16,5],[16,5],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[19,3],[20,3],[20,3],[30,1],[30,3],[30,1],[30,3],[18,3],[73,1],[73,3],[78,1],[78,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[26,1],[26,1],[33,1],[33,1],[35,1],[35,1],[55,1],[55,1],[58,1],[58,1],[60,1],[60,1]],performAction:o(function(oe,V,xe,q,pe,ve,Pe){var _e=ve.length-1;switch(pe){case 4:this.$=ve[_e].trim(),q.setAccTitle(this.$);break;case 5:case 6:this.$=ve[_e].trim(),q.setAccDescription(this.$);break;case 7:this.$=[];break;case 17:q.setDirection("TB");break;case 18:q.setDirection("BT");break;case 19:q.setDirection("RL");break;case 20:q.setDirection("LR");break;case 21:q.addRequirement(ve[_e-3],ve[_e-4]);break;case 22:q.addRequirement(ve[_e-5],ve[_e-6]),q.setClass([ve[_e-5]],ve[_e-3]);break;case 23:q.setNewReqId(ve[_e-2]);break;case 24:q.setNewReqText(ve[_e-2]);break;case 25:q.setNewReqRisk(ve[_e-2]);break;case 26:q.setNewReqVerifyMethod(ve[_e-2]);break;case 29:this.$=q.RequirementType.REQUIREMENT;break;case 30:this.$=q.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 31:this.$=q.RequirementType.INTERFACE_REQUIREMENT;break;case 32:this.$=q.RequirementType.PERFORMANCE_REQUIREMENT;break;case 33:this.$=q.RequirementType.PHYSICAL_REQUIREMENT;break;case 34:this.$=q.RequirementType.DESIGN_CONSTRAINT;break;case 35:this.$=q.RiskLevel.LOW_RISK;break;case 36:this.$=q.RiskLevel.MED_RISK;break;case 37:this.$=q.RiskLevel.HIGH_RISK;break;case 38:this.$=q.VerifyType.VERIFY_ANALYSIS;break;case 39:this.$=q.VerifyType.VERIFY_DEMONSTRATION;break;case 40:this.$=q.VerifyType.VERIFY_INSPECTION;break;case 41:this.$=q.VerifyType.VERIFY_TEST;break;case 42:q.addElement(ve[_e-3]);break;case 43:q.addElement(ve[_e-5]),q.setClass([ve[_e-5]],ve[_e-3]);break;case 44:q.setNewElementType(ve[_e-2]);break;case 45:q.setNewElementDocRef(ve[_e-2]);break;case 48:q.addRelationship(ve[_e-2],ve[_e],ve[_e-4]);break;case 49:q.addRelationship(ve[_e-2],ve[_e-4],ve[_e]);break;case 50:this.$=q.Relationships.CONTAINS;break;case 51:this.$=q.Relationships.COPIES;break;case 52:this.$=q.Relationships.DERIVES;break;case 53:this.$=q.Relationships.SATISFIES;break;case 54:this.$=q.Relationships.VERIFIES;break;case 55:this.$=q.Relationships.REFINES;break;case 56:this.$=q.Relationships.TRACES;break;case 57:this.$=ve[_e-2],q.defineClass(ve[_e-1],ve[_e]);break;case 58:q.setClass(ve[_e-1],ve[_e]);break;case 59:q.setClass([ve[_e-2]],ve[_e]);break;case 60:case 62:this.$=[ve[_e]];break;case 61:case 63:this.$=ve[_e-2].concat([ve[_e]]);break;case 64:this.$=ve[_e-2],q.setCssStyle(ve[_e-1],ve[_e]);break;case 65:this.$=[ve[_e]];break;case 66:ve[_e-2].push(ve[_e]),this.$=ve[_e-2];break;case 68:this.$=ve[_e-1]+ve[_e];break}},"anonymous"),table:[{3:1,4:2,6:e,9:r,11:n,13:i},{1:[3]},{3:8,4:2,5:[1,7],6:e,9:r,11:n,13:i},{5:[1,9]},{10:[1,10]},{12:[1,11]},t(a,[2,6]),{3:12,4:2,6:e,9:r,11:n,13:i},{1:[2,2]},{4:17,5:s,7:13,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},t(a,[2,4]),t(a,[2,5]),{1:[2,1]},{8:[1,41]},{4:17,5:s,7:42,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:43,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:44,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:45,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:46,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:47,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:48,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:49,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:50,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{26:51,89:[1,52],90:[1,53]},{55:54,89:[1,55],90:[1,56]},{29:[1,59],61:[1,57],63:[1,58]},t(S,[2,17]),t(S,[2,18]),t(S,[2,19]),t(S,[2,20]),{30:60,33:62,75:_,89:E,90:A},{30:63,33:62,75:_,89:E,90:A},{30:64,33:62,75:_,89:E,90:A},t(I,[2,29]),t(I,[2,30]),t(I,[2,31]),t(I,[2,32]),t(I,[2,33]),t(I,[2,34]),t(D,[2,81]),t(D,[2,82]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{27:[1,65],29:[1,66]},t(k,[2,79]),t(k,[2,80]),{27:[1,67],29:[1,68]},t(k,[2,85]),t(k,[2,86]),{62:69,65:L,66:R,67:O,68:M,69:B,70:F,71:P},{62:77,65:L,66:R,67:O,68:M,69:B,70:F,71:P},{30:78,33:62,75:_,89:E,90:A},{73:79,75:z,76:$,78:81,79:82,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X},t(te,[2,60]),t(te,[2,62]),{73:93,75:z,76:$,78:81,79:82,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X},{30:94,33:62,75:_,76:$,89:E,90:A},{5:[1,95]},{30:96,33:62,75:_,89:E,90:A},{5:[1,97]},{30:98,33:62,75:_,89:E,90:A},{63:[1,99]},t(J,[2,50]),t(J,[2,51]),t(J,[2,52]),t(J,[2,53]),t(J,[2,54]),t(J,[2,55]),t(J,[2,56]),{64:[1,100]},t(S,[2,59],{76:$}),t(S,[2,64],{76:se}),{33:103,75:[1,102],89:E,90:A},t(ue,[2,65],{79:104,75:z,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X}),t(Z,[2,67]),t(Z,[2,69]),t(Z,[2,70]),t(Z,[2,71]),t(Z,[2,72]),t(Z,[2,73]),t(Z,[2,74]),t(Z,[2,75]),t(Z,[2,76]),t(Z,[2,77]),t(Z,[2,78]),t(S,[2,57],{76:se}),t(S,[2,58],{76:$}),{5:Se,28:105,31:ce,34:ae,36:Oe,38:ge,40:ze},{27:[1,112],76:$},{5:He,40:$e,56:113,57:Re,59:Ie},{27:[1,118],76:$},{33:119,89:E,90:A},{33:120,89:E,90:A},{75:z,78:121,79:82,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X},t(te,[2,61]),t(te,[2,63]),t(Z,[2,68]),t(S,[2,21]),{32:[1,122]},{32:[1,123]},{32:[1,124]},{32:[1,125]},{5:Se,28:126,31:ce,34:ae,36:Oe,38:ge,40:ze},t(S,[2,28]),{5:[1,127]},t(S,[2,42]),{32:[1,128]},{32:[1,129]},{5:He,40:$e,56:130,57:Re,59:Ie},t(S,[2,47]),{5:[1,131]},t(S,[2,48]),t(S,[2,49]),t(ue,[2,66],{79:104,75:z,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X}),{33:132,89:E,90:A},{35:133,89:[1,134],90:[1,135]},{37:136,47:[1,137],48:[1,138],49:[1,139]},{39:140,50:[1,141],51:[1,142],52:[1,143],53:[1,144]},t(S,[2,27]),{5:Se,28:145,31:ce,34:ae,36:Oe,38:ge,40:ze},{58:146,89:[1,147],90:[1,148]},{60:149,89:[1,150],90:[1,151]},t(S,[2,46]),{5:He,40:$e,56:152,57:Re,59:Ie},{5:[1,153]},{5:[1,154]},{5:[2,83]},{5:[2,84]},{5:[1,155]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[1,156]},{5:[2,38]},{5:[2,39]},{5:[2,40]},{5:[2,41]},t(S,[2,22]),{5:[1,157]},{5:[2,87]},{5:[2,88]},{5:[1,158]},{5:[2,89]},{5:[2,90]},t(S,[2,43]),{5:Se,28:159,31:ce,34:ae,36:Oe,38:ge,40:ze},{5:Se,28:160,31:ce,34:ae,36:Oe,38:ge,40:ze},{5:Se,28:161,31:ce,34:ae,36:Oe,38:ge,40:ze},{5:Se,28:162,31:ce,34:ae,36:Oe,38:ge,40:ze},{5:He,40:$e,56:163,57:Re,59:Ie},{5:He,40:$e,56:164,57:Re,59:Ie},t(S,[2,23]),t(S,[2,24]),t(S,[2,25]),t(S,[2,26]),t(S,[2,44]),t(S,[2,45])],defaultActions:{8:[2,2],12:[2,1],41:[2,3],42:[2,8],43:[2,9],44:[2,10],45:[2,11],46:[2,12],47:[2,13],48:[2,14],49:[2,15],50:[2,16],134:[2,83],135:[2,84],137:[2,35],138:[2,36],139:[2,37],141:[2,38],142:[2,39],143:[2,40],144:[2,41],147:[2,87],148:[2,88],150:[2,89],151:[2,90]},parseError:o(function(oe,V){if(V.recoverable)this.trace(oe);else{var xe=new Error(oe);throw xe.hash=V,xe}},"parseError"),parse:o(function(oe){var V=this,xe=[0],q=[],pe=[null],ve=[],Pe=this.table,_e="",we=0,Ve=0,De=0,qe=2,at=1,Rt=ve.slice.call(arguments,1),st=Object.create(this.lexer),Ue={yy:{}};for(var ct in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ct)&&(Ue.yy[ct]=this.yy[ct]);st.setInput(oe,Ue.yy),Ue.yy.lexer=st,Ue.yy.parser=this,typeof st.yylloc>"u"&&(st.yylloc={});var We=st.yylloc;ve.push(We);var ot=st.options&&st.options.ranges;typeof Ue.yy.parseError=="function"?this.parseError=Ue.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Yt(Dr){xe.length=xe.length-2*Dr,pe.length=pe.length-Dr,ve.length=ve.length-Dr}o(Yt,"popStack");function bt(){var Dr;return Dr=q.pop()||st.lex()||at,typeof Dr!="number"&&(Dr instanceof Array&&(q=Dr,Dr=q.pop()),Dr=V.symbols_[Dr]||Dr),Dr}o(bt,"lex");for(var Mt,xt,ut,Et,ft,yt,nt={},dn,Tt,On,tn;;){if(ut=xe[xe.length-1],this.defaultActions[ut]?Et=this.defaultActions[ut]:((Mt===null||typeof Mt>"u")&&(Mt=bt()),Et=Pe[ut]&&Pe[ut][Mt]),typeof Et>"u"||!Et.length||!Et[0]){var _r="";tn=[];for(dn in Pe[ut])this.terminals_[dn]&&dn>qe&&tn.push("'"+this.terminals_[dn]+"'");st.showPosition?_r="Parse error on line "+(we+1)+`:
1181 +`+st.showPosition()+`
1182 +Expecting `+tn.join(", ")+", got '"+(this.terminals_[Mt]||Mt)+"'":_r="Parse error on line "+(we+1)+": Unexpected "+(Mt==at?"end of input":"'"+(this.terminals_[Mt]||Mt)+"'"),this.parseError(_r,{text:st.match,token:this.terminals_[Mt]||Mt,line:st.yylineno,loc:We,expected:tn})}if(Et[0]instanceof Array&&Et.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ut+", token: "+Mt);switch(Et[0]){case 1:xe.push(Mt),pe.push(st.yytext),ve.push(st.yylloc),xe.push(Et[1]),Mt=null,xt?(Mt=xt,xt=null):(Ve=st.yyleng,_e=st.yytext,we=st.yylineno,We=st.yylloc,De>0&&De--);break;case 2:if(Tt=this.productions_[Et[1]][1],nt.$=pe[pe.length-Tt],nt._$={first_line:ve[ve.length-(Tt||1)].first_line,last_line:ve[ve.length-1].last_line,first_column:ve[ve.length-(Tt||1)].first_column,last_column:ve[ve.length-1].last_column},ot&&(nt._$.range=[ve[ve.length-(Tt||1)].range[0],ve[ve.length-1].range[1]]),yt=this.performAction.apply(nt,[_e,Ve,we,Ue.yy,Et[1],pe,ve].concat(Rt)),typeof yt<"u")return yt;Tt&&(xe=xe.slice(0,-1*Tt*2),pe=pe.slice(0,-1*Tt),ve=ve.slice(0,-1*Tt)),xe.push(this.productions_[Et[1]][0]),pe.push(nt.$),ve.push(nt._$),On=Pe[xe[xe.length-2]][xe[xe.length-1]],xe.push(On);break;case 3:return!0}}return!0},"parse")},W=function(){var re={EOF:1,parseError:o(function(V,xe){if(this.yy.parser)this.yy.parser.parseError(V,xe);else throw new Error(V)},"parseError"),setInput:o(function(oe,V){return this.yy=V||this.yy||{},this._input=oe,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var oe=this._input[0];this.yytext+=oe,this.yyleng++,this.offset++,this.match+=oe,this.matched+=oe;var V=oe.match(/(?:\r\n?|\n).*/g);return V?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),oe},"input"),unput:o(function(oe){var V=oe.length,xe=oe.split(/(?:\r\n?|\n)/g);this._input=oe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-V),this.offset-=V;var q=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),xe.length-1&&(this.yylineno-=xe.length-1);var pe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:xe?(xe.length===q.length?this.yylloc.first_column:0)+q[q.length-xe.length].length-xe[0].length:this.yylloc.first_column-V},this.options.ranges&&(this.yylloc.range=[pe[0],pe[0]+this.yyleng-V]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
1183 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(oe){this.unput(this.match.slice(oe))},"less"),pastInput:o(function(){var oe=this.matched.substr(0,this.matched.length-this.match.length);return(oe.length>20?"...":"")+oe.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var oe=this.match;return oe.length<20&&(oe+=this._input.substr(0,20-oe.length)),(oe.substr(0,20)+(oe.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var oe=this.pastInput(),V=new Array(oe.length+1).join("-");return oe+this.upcomingInput()+`
1184 +`+V+"^"},"showPosition"),test_match:o(function(oe,V){var xe,q,pe;if(this.options.backtrack_lexer&&(pe={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(pe.yylloc.range=this.yylloc.range.slice(0))),q=oe[0].match(/(?:\r\n?|\n).*/g),q&&(this.yylineno+=q.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:q?q[q.length-1].length-q[q.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+oe[0].length},this.yytext+=oe[0],this.match+=oe[0],this.matches=oe,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(oe[0].length),this.matched+=oe[0],xe=this.performAction.call(this,this.yy,this,V,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),xe)return xe;if(this._backtrack){for(var ve in pe)this[ve]=pe[ve];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var oe,V,xe,q;this._more||(this.yytext="",this.match="");for(var pe=this._currentRules(),ve=0;ve<pe.length;ve++)if(xe=this._input.match(this.rules[pe[ve]]),xe&&(!V||xe[0].length>V[0].length)){if(V=xe,q=ve,this.options.backtrack_lexer){if(oe=this.test_match(xe,pe[ve]),oe!==!1)return oe;if(this._backtrack){V=!1;continue}else return!1}else if(!this.options.flex)break}return V?(oe=this.test_match(V,pe[q]),oe!==!1?oe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
1185 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var V=this.next();return V||this.lex()},"lex"),begin:o(function(V){this.conditionStack.push(V)},"begin"),popState:o(function(){var V=this.conditionStack.length-1;return V>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(V){return V=this.conditionStack.length-1-Math.abs(V||0),V>=0?this.conditionStack[V]:"INITIAL"},"topState"),pushState:o(function(V){this.begin(V)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(V,xe,q,pe){var ve=pe;switch(q){case 0:return"title";case 1:return this.begin("acc_title"),9;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),11;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 21;case 9:return 22;case 10:return 23;case 11:return 24;case 12:return 5;case 13:break;case 14:break;case 15:break;case 16:return 8;case 17:return 6;case 18:return 27;case 19:return 40;case 20:return 29;case 21:return 32;case 22:return 31;case 23:return 34;case 24:return 36;case 25:return 38;case 26:return 41;case 27:return 42;case 28:return 43;case 29:return 44;case 30:return 45;case 31:return 46;case 32:return 47;case 33:return 48;case 34:return 49;case 35:return 50;case 36:return 51;case 37:return 52;case 38:return 53;case 39:return 54;case 40:return 65;case 41:return 66;case 42:return 67;case 43:return 68;case 44:return 69;case 45:return 70;case 46:return 71;case 47:return 57;case 48:return 59;case 49:return this.begin("style"),77;break;case 50:return 75;case 51:return 81;case 52:return 88;case 53:return"PERCENT";case 54:return 86;case 55:return 84;case 56:break;case 57:this.begin("string");break;case 58:this.popState();break;case 59:return this.begin("style"),72;break;case 60:return this.begin("style"),74;break;case 61:return 61;case 62:return 64;case 63:return 63;case 64:this.begin("string");break;case 65:this.popState();break;case 66:return"qString";case 67:return xe.yytext=xe.yytext.trim(),89;break;case 68:return 75;case 69:return 80;case 70:return 76}},"anonymous"),rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::{3})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:style\b)/i,/^(?:\w+)/i,/^(?::)/i,/^(?:;)/i,/^(?:%)/i,/^(?:-)/i,/^(?:#)/i,/^(?: )/i,/^(?:["])/i,/^(?:\n)/i,/^(?:classDef\b)/i,/^(?:class\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^:,\r\n\{\<\>\-\=]*)/i,/^(?:\w+)/i,/^(?:[0-9]+)/i,/^(?:,)/i],conditions:{acc_descr_multiline:{rules:[6,7,68,69,70],inclusive:!1},acc_descr:{rules:[4,68,69,70],inclusive:!1},acc_title:{rules:[2,68,69,70],inclusive:!1},style:{rules:[50,51,52,53,54,55,56,57,58,68,69,70],inclusive:!1},unqString:{rules:[68,69,70],inclusive:!1},token:{rules:[68,69,70],inclusive:!1},string:{rules:[65,66,68,69,70],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,59,60,61,62,63,64,67,68,69,70],inclusive:!0}}};return re}();be.lexer=W;function de(){this.yy={}}return o(de,"Parser"),de.prototype=be,be.Parser=de,new de}();EO.parser=EO;Zhe=EO});var A6,efe=N(()=>{"use strict";zt();vt();mi();A6=class{constructor(){this.relations=[];this.latestRequirement=this.getInitialRequirement();this.requirements=new Map;this.latestElement=this.getInitialElement();this.elements=new Map;this.classes=new Map;this.direction="TB";this.RequirementType={REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"};this.RiskLevel={LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"};this.VerifyType={VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"};this.Relationships={CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"};this.setAccTitle=Lr;this.getAccTitle=Rr;this.setAccDescription=Nr;this.getAccDescription=Mr;this.setDiagramTitle=$r;this.getDiagramTitle=Ir;this.getConfig=o(()=>me().requirement,"getConfig");this.clear(),this.setDirection=this.setDirection.bind(this),this.addRequirement=this.addRequirement.bind(this),this.setNewReqId=this.setNewReqId.bind(this),this.setNewReqRisk=this.setNewReqRisk.bind(this),this.setNewReqText=this.setNewReqText.bind(this),this.setNewReqVerifyMethod=this.setNewReqVerifyMethod.bind(this),this.addElement=this.addElement.bind(this),this.setNewElementType=this.setNewElementType.bind(this),this.setNewElementDocRef=this.setNewElementDocRef.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setCssStyle=this.setCssStyle.bind(this),this.setClass=this.setClass.bind(this),this.defineClass=this.defineClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"RequirementDB")}getDirection(){return this.direction}setDirection(e){this.direction=e}resetLatestRequirement(){this.latestRequirement=this.getInitialRequirement()}resetLatestElement(){this.latestElement=this.getInitialElement()}getInitialRequirement(){return{requirementId:"",text:"",risk:"",verifyMethod:"",name:"",type:"",cssStyles:[],classes:["default"]}}getInitialElement(){return{name:"",type:"",docRef:"",cssStyles:[],classes:["default"]}}addRequirement(e,r){return this.requirements.has(e)||this.requirements.set(e,{name:e,type:r,requirementId:this.latestRequirement.requirementId,text:this.latestRequirement.text,risk:this.latestRequirement.risk,verifyMethod:this.latestRequirement.verifyMethod,cssStyles:[],classes:["default"]}),this.resetLatestRequirement(),this.requirements.get(e)}getRequirements(){return this.requirements}setNewReqId(e){this.latestRequirement!==void 0&&(this.latestRequirement.requirementId=e)}setNewReqText(e){this.latestRequirement!==void 0&&(this.latestRequirement.text=e)}setNewReqRisk(e){this.latestRequirement!==void 0&&(this.latestRequirement.risk=e)}setNewReqVerifyMethod(e){this.latestRequirement!==void 0&&(this.latestRequirement.verifyMethod=e)}addElement(e){return this.elements.has(e)||(this.elements.set(e,{name:e,type:this.latestElement.type,docRef:this.latestElement.docRef,cssStyles:[],classes:["default"]}),Y.info("Added new element: ",e)),this.resetLatestElement(),this.elements.get(e)}getElements(){return this.elements}setNewElementType(e){this.latestElement!==void 0&&(this.latestElement.type=e)}setNewElementDocRef(e){this.latestElement!==void 0&&(this.latestElement.docRef=e)}addRelationship(e,r,n){this.relations.push({type:e,src:r,dst:n})}getRelationships(){return this.relations}clear(){this.relations=[],this.resetLatestRequirement(),this.requirements=new Map,this.resetLatestElement(),this.elements=new Map,this.classes=new Map,Ar()}setCssStyle(e,r){for(let n of e){let i=this.requirements.get(n)??this.elements.get(n);if(!r||!i)return;for(let a of r)a.includes(",")?i.cssStyles.push(...a.split(",")):i.cssStyles.push(a)}}setClass(e,r){for(let n of e){let i=this.requirements.get(n)??this.elements.get(n);if(i)for(let a of r){i.classes.push(a);let s=this.classes.get(a)?.styles;s&&i.cssStyles.push(...s)}}}defineClass(e,r){for(let n of e){let i=this.classes.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.classes.set(n,i)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)}),this.requirements.forEach(a=>{a.classes.includes(n)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))}),this.elements.forEach(a=>{a.classes.includes(n)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))})}}getClasses(){return this.classes}getData(){let e=me(),r=[],n=[];for(let i of this.requirements.values()){let a=i;a.id=i.name,a.cssStyles=i.cssStyles,a.cssClasses=i.classes.join(" "),a.shape="requirementBox",a.look=e.look,r.push(a)}for(let i of this.elements.values()){let a=i;a.shape="requirementBox",a.look=e.look,a.id=i.name,a.cssStyles=i.cssStyles,a.cssClasses=i.classes.join(" "),r.push(a)}for(let i of this.relations){let a=0,s=i.type===this.Relationships.CONTAINS,l={id:`${i.src}-${i.dst}-${a}`,start:this.requirements.get(i.src)?.name??this.elements.get(i.src)?.name,end:this.requirements.get(i.dst)?.name??this.elements.get(i.dst)?.name,label:`&lt;&lt;${i.type}&gt;&gt;`,classes:"relationshipLine",style:["fill:none",s?"":"stroke-dasharray: 10,7"],labelpos:"c",thickness:"normal",type:"normal",pattern:s?"normal":"dashed",arrowTypeStart:s?"requirement_contains":"",arrowTypeEnd:s?"":"requirement_arrow",look:e.look};n.push(l),a++}return{nodes:r,edges:n,other:{},config:e,direction:this.getDirection()}}}});var ZGe,tfe,rfe=N(()=>{"use strict";ZGe=o(t=>`
1186 +
1187 + marker {
1188 + fill: ${t.relationColor};
1189 + stroke: ${t.relationColor};
1190 + }
1191 +
1192 + marker.cross {
1193 + stroke: ${t.lineColor};
1194 + }
1195 +
1196 + svg {
1197 + font-family: ${t.fontFamily};
1198 + font-size: ${t.fontSize};
1199 + }
1200 +
1201 + .reqBox {
1202 + fill: ${t.requirementBackground};
1203 + fill-opacity: 1.0;
1204 + stroke: ${t.requirementBorderColor};
1205 + stroke-width: ${t.requirementBorderSize};
1206 + }
1207 +
1208 + .reqTitle, .reqLabel{
1209 + fill: ${t.requirementTextColor};
1210 + }
1211 + .reqLabelBox {
1212 + fill: ${t.relationLabelBackground};
1213 + fill-opacity: 1.0;
1214 + }
1215 +
1216 + .req-title-line {
1217 + stroke: ${t.requirementBorderColor};
1218 + stroke-width: ${t.requirementBorderSize};
1219 + }
1220 + .relationshipLine {
1221 + stroke: ${t.relationColor};
1222 + stroke-width: 1;
1223 + }
1224 + .relationshipLabel {
1225 + fill: ${t.relationLabelColor};
1226 + }
1227 + .divider {
1228 + stroke: ${t.nodeBorder};
1229 + stroke-width: 1;
1230 + }
1231 + .label {
1232 + font-family: ${t.fontFamily};
1233 + color: ${t.nodeTextColor||t.textColor};
1234 + }
1235 + .label text,span {
1236 + fill: ${t.nodeTextColor||t.textColor};
1237 + color: ${t.nodeTextColor||t.textColor};
1238 + }
1239 + .labelBkg {
1240 + background-color: ${t.edgeLabelBackground};
1241 + }
1242 +
1243 +`,"getStyles"),tfe=ZGe});var SO={};hr(SO,{draw:()=>JGe});var JGe,nfe=N(()=>{"use strict";zt();vt();gm();Yd();$m();ir();JGe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing requirement diagram (unified)",e);let{securityLevel:i,state:a,layout:s}=me(),l=n.db.getData(),u=yc(e,i);l.type=n.type,l.layoutAlgorithm=nf(s),l.nodeSpacing=a?.nodeSpacing??50,l.rankSpacing=a?.rankSpacing??50,l.markers=["requirement_contains","requirement_arrow"],l.diagramId=e,await Cc(l,u);let h=8;Gt.insertTitle(u,"requirementDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ac(u,h,"requirementDiagram",a?.useMaxWidth??!0)},"draw")});var ife={};hr(ife,{diagram:()=>eVe});var eVe,afe=N(()=>{"use strict";Jhe();efe();rfe();nfe();eVe={parser:Zhe,get db(){return new A6},renderer:SO,styles:tfe}});var CO,lfe,cfe=N(()=>{"use strict";CO=function(){var t=o(function(K,X,te,J){for(te=te||{},J=K.length;J--;te[K[J]]=X);return te},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,13],u=[1,14],h=[1,16],f=[1,17],d=[1,18],p=[1,24],m=[1,25],g=[1,26],y=[1,27],v=[1,28],x=[1,29],b=[1,30],w=[1,31],C=[1,32],T=[1,33],E=[1,34],A=[1,35],S=[1,36],_=[1,37],I=[1,38],D=[1,39],k=[1,41],L=[1,42],R=[1,43],O=[1,44],M=[1,45],B=[1,46],F=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],P=[4,5,16,50,52,53],z=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],$=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],H=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],Q=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],j=[68,69,70],ie=[1,122],ne={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,BIDIRECTIONAL_SOLID_ARROW:74,DOTTED_ARROW:75,BIDIRECTIONAL_DOTTED_ARROW:76,SOLID_CROSS:77,DOTTED_CROSS:78,SOLID_POINT:79,DOTTED_POINT:80,TXT:81,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"BIDIRECTIONAL_SOLID_ARROW",75:"DOTTED_ARROW",76:"BIDIRECTIONAL_DOTTED_ARROW",77:"SOLID_CROSS",78:"DOTTED_CROSS",79:"SOLID_POINT",80:"DOTTED_POINT",81:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:o(function(X,te,J,se,ue,Z,Se){var ce=Z.length-1;switch(ue){case 3:return se.apply(Z[ce]),Z[ce];break;case 4:case 9:this.$=[];break;case 5:case 10:Z[ce-1].push(Z[ce]),this.$=Z[ce-1];break;case 6:case 7:case 11:case 12:this.$=Z[ce];break;case 8:case 13:this.$=[];break;case 15:Z[ce].type="createParticipant",this.$=Z[ce];break;case 16:Z[ce-1].unshift({type:"boxStart",boxData:se.parseBoxData(Z[ce-2])}),Z[ce-1].push({type:"boxEnd",boxText:Z[ce-2]}),this.$=Z[ce-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(Z[ce-2]),sequenceIndexStep:Number(Z[ce-1]),sequenceVisible:!0,signalType:se.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(Z[ce-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:se.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:se.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:se.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:se.LINETYPE.ACTIVE_START,actor:Z[ce-1].actor};break;case 23:this.$={type:"activeEnd",signalType:se.LINETYPE.ACTIVE_END,actor:Z[ce-1].actor};break;case 29:se.setDiagramTitle(Z[ce].substring(6)),this.$=Z[ce].substring(6);break;case 30:se.setDiagramTitle(Z[ce].substring(7)),this.$=Z[ce].substring(7);break;case 31:this.$=Z[ce].trim(),se.setAccTitle(this.$);break;case 32:case 33:this.$=Z[ce].trim(),se.setAccDescription(this.$);break;case 34:Z[ce-1].unshift({type:"loopStart",loopText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.LOOP_START}),Z[ce-1].push({type:"loopEnd",loopText:Z[ce-2],signalType:se.LINETYPE.LOOP_END}),this.$=Z[ce-1];break;case 35:Z[ce-1].unshift({type:"rectStart",color:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.RECT_START}),Z[ce-1].push({type:"rectEnd",color:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.RECT_END}),this.$=Z[ce-1];break;case 36:Z[ce-1].unshift({type:"optStart",optText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.OPT_START}),Z[ce-1].push({type:"optEnd",optText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.OPT_END}),this.$=Z[ce-1];break;case 37:Z[ce-1].unshift({type:"altStart",altText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.ALT_START}),Z[ce-1].push({type:"altEnd",signalType:se.LINETYPE.ALT_END}),this.$=Z[ce-1];break;case 38:Z[ce-1].unshift({type:"parStart",parText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.PAR_START}),Z[ce-1].push({type:"parEnd",signalType:se.LINETYPE.PAR_END}),this.$=Z[ce-1];break;case 39:Z[ce-1].unshift({type:"parStart",parText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.PAR_OVER_START}),Z[ce-1].push({type:"parEnd",signalType:se.LINETYPE.PAR_END}),this.$=Z[ce-1];break;case 40:Z[ce-1].unshift({type:"criticalStart",criticalText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.CRITICAL_START}),Z[ce-1].push({type:"criticalEnd",signalType:se.LINETYPE.CRITICAL_END}),this.$=Z[ce-1];break;case 41:Z[ce-1].unshift({type:"breakStart",breakText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.BREAK_START}),Z[ce-1].push({type:"breakEnd",optText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.BREAK_END}),this.$=Z[ce-1];break;case 43:this.$=Z[ce-3].concat([{type:"option",optionText:se.parseMessage(Z[ce-1]),signalType:se.LINETYPE.CRITICAL_OPTION},Z[ce]]);break;case 45:this.$=Z[ce-3].concat([{type:"and",parText:se.parseMessage(Z[ce-1]),signalType:se.LINETYPE.PAR_AND},Z[ce]]);break;case 47:this.$=Z[ce-3].concat([{type:"else",altText:se.parseMessage(Z[ce-1]),signalType:se.LINETYPE.ALT_ELSE},Z[ce]]);break;case 48:Z[ce-3].draw="participant",Z[ce-3].type="addParticipant",Z[ce-3].description=se.parseMessage(Z[ce-1]),this.$=Z[ce-3];break;case 49:Z[ce-1].draw="participant",Z[ce-1].type="addParticipant",this.$=Z[ce-1];break;case 50:Z[ce-3].draw="actor",Z[ce-3].type="addParticipant",Z[ce-3].description=se.parseMessage(Z[ce-1]),this.$=Z[ce-3];break;case 51:Z[ce-1].draw="actor",Z[ce-1].type="addParticipant",this.$=Z[ce-1];break;case 52:Z[ce-1].type="destroyParticipant",this.$=Z[ce-1];break;case 53:this.$=[Z[ce-1],{type:"addNote",placement:Z[ce-2],actor:Z[ce-1].actor,text:Z[ce]}];break;case 54:Z[ce-2]=[].concat(Z[ce-1],Z[ce-1]).slice(0,2),Z[ce-2][0]=Z[ce-2][0].actor,Z[ce-2][1]=Z[ce-2][1].actor,this.$=[Z[ce-1],{type:"addNote",placement:se.PLACEMENT.OVER,actor:Z[ce-2].slice(0,2),text:Z[ce]}];break;case 55:this.$=[Z[ce-1],{type:"addLinks",actor:Z[ce-1].actor,text:Z[ce]}];break;case 56:this.$=[Z[ce-1],{type:"addALink",actor:Z[ce-1].actor,text:Z[ce]}];break;case 57:this.$=[Z[ce-1],{type:"addProperties",actor:Z[ce-1].actor,text:Z[ce]}];break;case 58:this.$=[Z[ce-1],{type:"addDetails",actor:Z[ce-1].actor,text:Z[ce]}];break;case 61:this.$=[Z[ce-2],Z[ce]];break;case 62:this.$=Z[ce];break;case 63:this.$=se.PLACEMENT.LEFTOF;break;case 64:this.$=se.PLACEMENT.RIGHTOF;break;case 65:this.$=[Z[ce-4],Z[ce-1],{type:"addMessage",from:Z[ce-4].actor,to:Z[ce-1].actor,signalType:Z[ce-3],msg:Z[ce],activate:!0},{type:"activeStart",signalType:se.LINETYPE.ACTIVE_START,actor:Z[ce-1].actor}];break;case 66:this.$=[Z[ce-4],Z[ce-1],{type:"addMessage",from:Z[ce-4].actor,to:Z[ce-1].actor,signalType:Z[ce-3],msg:Z[ce]},{type:"activeEnd",signalType:se.LINETYPE.ACTIVE_END,actor:Z[ce-4].actor}];break;case 67:this.$=[Z[ce-3],Z[ce-1],{type:"addMessage",from:Z[ce-3].actor,to:Z[ce-1].actor,signalType:Z[ce-2],msg:Z[ce]}];break;case 68:this.$={type:"addParticipant",actor:Z[ce]};break;case 69:this.$=se.LINETYPE.SOLID_OPEN;break;case 70:this.$=se.LINETYPE.DOTTED_OPEN;break;case 71:this.$=se.LINETYPE.SOLID;break;case 72:this.$=se.LINETYPE.BIDIRECTIONAL_SOLID;break;case 73:this.$=se.LINETYPE.DOTTED;break;case 74:this.$=se.LINETYPE.BIDIRECTIONAL_DOTTED;break;case 75:this.$=se.LINETYPE.SOLID_CROSS;break;case 76:this.$=se.LINETYPE.DOTTED_CROSS;break;case 77:this.$=se.LINETYPE.SOLID_POINT;break;case 78:this.$=se.LINETYPE.DOTTED_POINT;break;case 79:this.$=se.parseMessage(Z[ce].trim().substring(1));break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},t(F,[2,5]),{9:47,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},t(F,[2,7]),t(F,[2,8]),t(F,[2,14]),{12:48,50:_,52:I,53:D},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:B},{22:55,70:B},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(F,[2,29]),t(F,[2,30]),{32:[1,61]},{34:[1,62]},t(F,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:B},{22:72,70:B},{22:73,70:B},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82],79:[1,83],80:[1,84]},{55:85,57:[1,86],65:[1,87],66:[1,88]},{22:89,70:B},{22:90,70:B},{22:91,70:B},{22:92,70:B},t([5,51,64,71,72,73,74,75,76,77,78,79,80,81],[2,68]),t(F,[2,6]),t(F,[2,15]),t(P,[2,9],{10:93}),t(F,[2,17]),{5:[1,95],19:[1,94]},{5:[1,96]},t(F,[2,21]),{5:[1,97]},{5:[1,98]},t(F,[2,24]),t(F,[2,25]),t(F,[2,26]),t(F,[2,27]),t(F,[2,28]),t(F,[2,31]),t(F,[2,32]),t(z,i,{7:99}),t(z,i,{7:100}),t(z,i,{7:101}),t($,i,{40:102,7:103}),t(H,i,{42:104,7:105}),t(H,i,{7:105,42:106}),t(Q,i,{45:107,7:108}),t(z,i,{7:109}),{5:[1,111],51:[1,110]},{5:[1,113],51:[1,112]},{5:[1,114]},{22:117,68:[1,115],69:[1,116],70:B},t(j,[2,69]),t(j,[2,70]),t(j,[2,71]),t(j,[2,72]),t(j,[2,73]),t(j,[2,74]),t(j,[2,75]),t(j,[2,76]),t(j,[2,77]),t(j,[2,78]),{22:118,70:B},{22:120,58:119,70:B},{70:[2,63]},{70:[2,64]},{56:121,81:ie},{56:123,81:ie},{56:124,81:ie},{56:125,81:ie},{4:[1,128],5:[1,130],11:127,12:129,16:[1,126],50:_,52:I,53:D},{5:[1,131]},t(F,[2,19]),t(F,[2,20]),t(F,[2,22]),t(F,[2,23]),{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,132],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,133],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,134],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{16:[1,135]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,46],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,49:[1,136],50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{16:[1,137]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,44],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,48:[1,138],50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{16:[1,139]},{16:[1,140]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,42],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,47:[1,141],50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,142],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{15:[1,143]},t(F,[2,49]),{15:[1,144]},t(F,[2,51]),t(F,[2,52]),{22:145,70:B},{22:146,70:B},{56:147,81:ie},{56:148,81:ie},{56:149,81:ie},{64:[1,150],81:[2,62]},{5:[2,55]},{5:[2,79]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(F,[2,16]),t(P,[2,10]),{12:151,50:_,52:I,53:D},t(P,[2,12]),t(P,[2,13]),t(F,[2,18]),t(F,[2,34]),t(F,[2,35]),t(F,[2,36]),t(F,[2,37]),{15:[1,152]},t(F,[2,38]),{15:[1,153]},t(F,[2,39]),t(F,[2,40]),{15:[1,154]},t(F,[2,41]),{5:[1,155]},{5:[1,156]},{56:157,81:ie},{56:158,81:ie},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:159,70:B},t(P,[2,11]),t($,i,{7:103,40:160}),t(H,i,{7:105,42:161}),t(Q,i,{7:108,45:162}),t(F,[2,48]),t(F,[2,50]),{5:[2,65]},{5:[2,66]},{81:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],87:[2,63],88:[2,64],121:[2,55],122:[2,79],123:[2,56],124:[2,57],125:[2,58],147:[2,67],148:[2,53],149:[2,54],157:[2,65],158:[2,66],159:[2,61],160:[2,47],161:[2,45],162:[2,43]},parseError:o(function(X,te){if(te.recoverable)this.trace(X);else{var J=new Error(X);throw J.hash=te,J}},"parseError"),parse:o(function(X){var te=this,J=[0],se=[],ue=[null],Z=[],Se=this.table,ce="",ae=0,Oe=0,ge=0,ze=2,He=1,$e=Z.slice.call(arguments,1),Re=Object.create(this.lexer),Ie={yy:{}};for(var be in this.yy)Object.prototype.hasOwnProperty.call(this.yy,be)&&(Ie.yy[be]=this.yy[be]);Re.setInput(X,Ie.yy),Ie.yy.lexer=Re,Ie.yy.parser=this,typeof Re.yylloc>"u"&&(Re.yylloc={});var W=Re.yylloc;Z.push(W);var de=Re.options&&Re.options.ranges;typeof Ie.yy.parseError=="function"?this.parseError=Ie.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function re(Rt){J.length=J.length-2*Rt,ue.length=ue.length-Rt,Z.length=Z.length-Rt}o(re,"popStack");function oe(){var Rt;return Rt=se.pop()||Re.lex()||He,typeof Rt!="number"&&(Rt instanceof Array&&(se=Rt,Rt=se.pop()),Rt=te.symbols_[Rt]||Rt),Rt}o(oe,"lex");for(var V,xe,q,pe,ve,Pe,_e={},we,Ve,De,qe;;){if(q=J[J.length-1],this.defaultActions[q]?pe=this.defaultActions[q]:((V===null||typeof V>"u")&&(V=oe()),pe=Se[q]&&Se[q][V]),typeof pe>"u"||!pe.length||!pe[0]){var at="";qe=[];for(we in Se[q])this.terminals_[we]&&we>ze&&qe.push("'"+this.terminals_[we]+"'");Re.showPosition?at="Parse error on line "+(ae+1)+`:
1244 +`+Re.showPosition()+`
1245 +Expecting `+qe.join(", ")+", got '"+(this.terminals_[V]||V)+"'":at="Parse error on line "+(ae+1)+": Unexpected "+(V==He?"end of input":"'"+(this.terminals_[V]||V)+"'"),this.parseError(at,{text:Re.match,token:this.terminals_[V]||V,line:Re.yylineno,loc:W,expected:qe})}if(pe[0]instanceof Array&&pe.length>1)throw new Error("Parse Error: multiple actions possible at state: "+q+", token: "+V);switch(pe[0]){case 1:J.push(V),ue.push(Re.yytext),Z.push(Re.yylloc),J.push(pe[1]),V=null,xe?(V=xe,xe=null):(Oe=Re.yyleng,ce=Re.yytext,ae=Re.yylineno,W=Re.yylloc,ge>0&&ge--);break;case 2:if(Ve=this.productions_[pe[1]][1],_e.$=ue[ue.length-Ve],_e._$={first_line:Z[Z.length-(Ve||1)].first_line,last_line:Z[Z.length-1].last_line,first_column:Z[Z.length-(Ve||1)].first_column,last_column:Z[Z.length-1].last_column},de&&(_e._$.range=[Z[Z.length-(Ve||1)].range[0],Z[Z.length-1].range[1]]),Pe=this.performAction.apply(_e,[ce,Oe,ae,Ie.yy,pe[1],ue,Z].concat($e)),typeof Pe<"u")return Pe;Ve&&(J=J.slice(0,-1*Ve*2),ue=ue.slice(0,-1*Ve),Z=Z.slice(0,-1*Ve)),J.push(this.productions_[pe[1]][0]),ue.push(_e.$),Z.push(_e._$),De=Se[J[J.length-2]][J[J.length-1]],J.push(De);break;case 3:return!0}}return!0},"parse")},le=function(){var K={EOF:1,parseError:o(function(te,J){if(this.yy.parser)this.yy.parser.parseError(te,J);else throw new Error(te)},"parseError"),setInput:o(function(X,te){return this.yy=te||this.yy||{},this._input=X,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var X=this._input[0];this.yytext+=X,this.yyleng++,this.offset++,this.match+=X,this.matched+=X;var te=X.match(/(?:\r\n?|\n).*/g);return te?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),X},"input"),unput:o(function(X){var te=X.length,J=X.split(/(?:\r\n?|\n)/g);this._input=X+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-te),this.offset-=te;var se=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),J.length-1&&(this.yylineno-=J.length-1);var ue=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:J?(J.length===se.length?this.yylloc.first_column:0)+se[se.length-J.length].length-J[0].length:this.yylloc.first_column-te},this.options.ranges&&(this.yylloc.range=[ue[0],ue[0]+this.yyleng-te]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
1246 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(X){this.unput(this.match.slice(X))},"less"),pastInput:o(function(){var X=this.matched.substr(0,this.matched.length-this.match.length);return(X.length>20?"...":"")+X.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var X=this.match;return X.length<20&&(X+=this._input.substr(0,20-X.length)),(X.substr(0,20)+(X.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var X=this.pastInput(),te=new Array(X.length+1).join("-");return X+this.upcomingInput()+`
1247 +`+te+"^"},"showPosition"),test_match:o(function(X,te){var J,se,ue;if(this.options.backtrack_lexer&&(ue={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ue.yylloc.range=this.yylloc.range.slice(0))),se=X[0].match(/(?:\r\n?|\n).*/g),se&&(this.yylineno+=se.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:se?se[se.length-1].length-se[se.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+X[0].length},this.yytext+=X[0],this.match+=X[0],this.matches=X,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(X[0].length),this.matched+=X[0],J=this.performAction.call(this,this.yy,this,te,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),J)return J;if(this._backtrack){for(var Z in ue)this[Z]=ue[Z];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var X,te,J,se;this._more||(this.yytext="",this.match="");for(var ue=this._currentRules(),Z=0;Z<ue.length;Z++)if(J=this._input.match(this.rules[ue[Z]]),J&&(!te||J[0].length>te[0].length)){if(te=J,se=Z,this.options.backtrack_lexer){if(X=this.test_match(J,ue[Z]),X!==!1)return X;if(this._backtrack){te=!1;continue}else return!1}else if(!this.options.flex)break}return te?(X=this.test_match(te,ue[se]),X!==!1?X:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
1248 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var te=this.next();return te||this.lex()},"lex"),begin:o(function(te){this.conditionStack.push(te)},"begin"),popState:o(function(){var te=this.conditionStack.length-1;return te>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(te){return te=this.conditionStack.length-1-Math.abs(te||0),te>=0?this.conditionStack[te]:"INITIAL"},"topState"),pushState:o(function(te){this.begin(te)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(te,J,se,ue){var Z=ue;switch(se){case 0:return 5;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:return 19;case 7:return this.begin("LINE"),14;break;case 8:return this.begin("ID"),50;break;case 9:return this.begin("ID"),52;break;case 10:return 13;case 11:return this.begin("ID"),53;break;case 12:return J.yytext=J.yytext.trim(),this.begin("ALIAS"),70;break;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;break;case 14:return this.popState(),this.popState(),5;break;case 15:return this.begin("LINE"),36;break;case 16:return this.begin("LINE"),37;break;case 17:return this.begin("LINE"),38;break;case 18:return this.begin("LINE"),39;break;case 19:return this.begin("LINE"),49;break;case 20:return this.begin("LINE"),41;break;case 21:return this.begin("LINE"),43;break;case 22:return this.begin("LINE"),48;break;case 23:return this.begin("LINE"),44;break;case 24:return this.begin("LINE"),47;break;case 25:return this.begin("LINE"),46;break;case 26:return this.popState(),15;break;case 27:return 16;case 28:return 65;case 29:return 66;case 30:return 59;case 31:return 60;case 32:return 61;case 33:return 62;case 34:return 57;case 35:return 54;case 36:return this.begin("ID"),21;break;case 37:return this.begin("ID"),23;break;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;break;case 41:return this.popState(),"acc_title_value";break;case 42:return this.begin("acc_descr"),33;break;case 43:return this.popState(),"acc_descr_value";break;case 44:this.begin("acc_descr_multiline");break;case 45:this.popState();break;case 46:return"acc_descr_multiline_value";case 47:return 6;case 48:return 18;case 49:return 20;case 50:return 64;case 51:return 5;case 52:return J.yytext=J.yytext.trim(),70;break;case 53:return 73;case 54:return 74;case 55:return 75;case 56:return 76;case 57:return 71;case 58:return 72;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 80;case 63:return 81;case 64:return 68;case 65:return 69;case 66:return 5;case 67:return"INVALID"}},"anonymous"),rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\<->\->:\n,;]+?([\-]*[^\<->\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\<->\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\<->\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:<<->>)/i,/^(?:-->>)/i,/^(?:<<-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[45,46],inclusive:!1},acc_descr:{rules:[43],inclusive:!1},acc_title:{rules:[41],inclusive:!1},ID:{rules:[2,3,12],inclusive:!1},ALIAS:{rules:[2,3,13,14],inclusive:!1},LINE:{rules:[2,3,26],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,7,8,9,10,11,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],inclusive:!0}}};return K}();ne.lexer=le;function he(){this.yy={}}return o(he,"Parser"),he.prototype=ne,ne.Parser=he,new he}();CO.parser=CO;lfe=CO});var iVe,aVe,sVe,_6,ufe=N(()=>{"use strict";zt();vt();s6();gr();mi();iVe={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32,BIDIRECTIONAL_SOLID:33,BIDIRECTIONAL_DOTTED:34},aVe={FILLED:0,OPEN:1},sVe={LEFTOF:0,RIGHTOF:1,OVER:2},_6=class{constructor(){this.state=new pf(()=>({prevActor:void 0,actors:new Map,createdActors:new Map,destroyedActors:new Map,boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0}));this.setAccTitle=Lr;this.setAccDescription=Nr;this.setDiagramTitle=$r;this.getAccTitle=Rr;this.getAccDescription=Mr;this.getDiagramTitle=Ir;this.apply=this.apply.bind(this),this.parseBoxData=this.parseBoxData.bind(this),this.parseMessage=this.parseMessage.bind(this),this.clear(),this.setWrap(me().wrap),this.LINETYPE=iVe,this.ARROWTYPE=aVe,this.PLACEMENT=sVe}static{o(this,"SequenceDB")}addBox(e){this.state.records.boxes.push({name:e.text,wrap:e.wrap??this.autoWrap(),fill:e.color,actorKeys:[]}),this.state.records.currentBox=this.state.records.boxes.slice(-1)[0]}addActor(e,r,n,i){let a=this.state.records.currentBox,s=this.state.records.actors.get(e);if(s){if(this.state.records.currentBox&&s.box&&this.state.records.currentBox!==s.box)throw new Error(`A same participant should only be defined in one Box: ${s.name} can't be in '${s.box.name}' and in '${this.state.records.currentBox.name}' at the same time.`);if(a=s.box?s.box:this.state.records.currentBox,s.box=a,s&&r===s.name&&n==null)return}if(n?.text==null&&(n={text:r,type:i}),(i==null||n.text==null)&&(n={text:r,type:i}),this.state.records.actors.set(e,{box:a,name:r,description:n.text,wrap:n.wrap??this.autoWrap(),prevActor:this.state.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:i??"participant"}),this.state.records.prevActor){let l=this.state.records.actors.get(this.state.records.prevActor);l&&(l.nextActor=e)}this.state.records.currentBox&&this.state.records.currentBox.actorKeys.push(e),this.state.records.prevActor=e}activationCount(e){let r,n=0;if(!e)return 0;for(r=0;r<this.state.records.messages.length;r++)this.state.records.messages[r].type===this.LINETYPE.ACTIVE_START&&this.state.records.messages[r].from===e&&n++,this.state.records.messages[r].type===this.LINETYPE.ACTIVE_END&&this.state.records.messages[r].from===e&&n--;return n}addMessage(e,r,n,i){this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:e,to:r,message:n.text,wrap:n.wrap??this.autoWrap(),answer:i})}addSignal(e,r,n,i,a=!1){if(i===this.LINETYPE.ACTIVE_END&&this.activationCount(e??"")<1){let l=new Error("Trying to inactivate an inactive participant ("+e+")");throw l.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},l}return this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:e,to:r,message:n?.text??"",wrap:n?.wrap??this.autoWrap(),type:i,activate:a}),!0}hasAtLeastOneBox(){return this.state.records.boxes.length>0}hasAtLeastOneBoxWithTitle(){return this.state.records.boxes.some(e=>e.name)}getMessages(){return this.state.records.messages}getBoxes(){return this.state.records.boxes}getActors(){return this.state.records.actors}getCreatedActors(){return this.state.records.createdActors}getDestroyedActors(){return this.state.records.destroyedActors}getActor(e){return this.state.records.actors.get(e)}getActorKeys(){return[...this.state.records.actors.keys()]}enableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!0}disableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!1}showSequenceNumbers(){return this.state.records.sequenceNumbersEnabled}setWrap(e){this.state.records.wrapEnabled=e}extractWrap(e){if(e===void 0)return{};e=e.trim();let r=/^:?wrap:/.exec(e)!==null?!0:/^:?nowrap:/.exec(e)!==null?!1:void 0;return{cleanedText:(r===void 0?e:e.replace(/^:?(?:no)?wrap:/,"")).trim(),wrap:r}}autoWrap(){return this.state.records.wrapEnabled!==void 0?this.state.records.wrapEnabled:me().sequence?.wrap??!1}clear(){this.state.reset(),Ar()}parseMessage(e){let r=e.trim(),{wrap:n,cleanedText:i}=this.extractWrap(r),a={text:i,wrap:n};return Y.debug(`parseMessage: ${JSON.stringify(a)}`),a}parseBoxData(e){let r=/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(e),n=r?.[1]?r[1].trim():"transparent",i=r?.[2]?r[2].trim():void 0;if(window?.CSS)window.CSS.supports("color",n)||(n="transparent",i=e.trim());else{let l=new Option().style;l.color=n,l.color!==n&&(n="transparent",i=e.trim())}let{wrap:a,cleanedText:s}=this.extractWrap(i);return{text:s?Tr(s,me()):void 0,color:n,wrap:a}}addNote(e,r,n){let i={actor:e,placement:r,message:n.text,wrap:n.wrap??this.autoWrap()},a=[].concat(e,e);this.state.records.notes.push(i),this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:a[0],to:a[1],message:n.text,wrap:n.wrap??this.autoWrap(),type:this.LINETYPE.NOTE,placement:r})}addLinks(e,r){let n=this.getActor(e);try{let i=Tr(r.text,me());i=i.replace(/&equals;/g,"="),i=i.replace(/&amp;/g,"&");let a=JSON.parse(i);this.insertLinks(n,a)}catch(i){Y.error("error while parsing actor link text",i)}}addALink(e,r){let n=this.getActor(e);try{let i={},a=Tr(r.text,me()),s=a.indexOf("@");a=a.replace(/&equals;/g,"="),a=a.replace(/&amp;/g,"&");let l=a.slice(0,s-1).trim(),u=a.slice(s+1).trim();i[l]=u,this.insertLinks(n,i)}catch(i){Y.error("error while parsing actor link text",i)}}insertLinks(e,r){if(e.links==null)e.links=r;else for(let n in r)e.links[n]=r[n]}addProperties(e,r){let n=this.getActor(e);try{let i=Tr(r.text,me()),a=JSON.parse(i);this.insertProperties(n,a)}catch(i){Y.error("error while parsing actor properties text",i)}}insertProperties(e,r){if(e.properties==null)e.properties=r;else for(let n in r)e.properties[n]=r[n]}boxEnd(){this.state.records.currentBox=void 0}addDetails(e,r){let n=this.getActor(e),i=document.getElementById(r.text);try{let a=i.innerHTML,s=JSON.parse(a);s.properties&&this.insertProperties(n,s.properties),s.links&&this.insertLinks(n,s.links)}catch(a){Y.error("error while parsing actor details text",a)}}getActorProperty(e,r){if(e?.properties!==void 0)return e.properties[r]}apply(e){if(Array.isArray(e))e.forEach(r=>{this.apply(r)});else switch(e.type){case"sequenceIndex":this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:void 0,to:void 0,message:{start:e.sequenceIndex,step:e.sequenceIndexStep,visible:e.sequenceVisible},wrap:!1,type:e.signalType});break;case"addParticipant":this.addActor(e.actor,e.actor,e.description,e.draw);break;case"createParticipant":if(this.state.records.actors.has(e.actor))throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");this.state.records.lastCreated=e.actor,this.addActor(e.actor,e.actor,e.description,e.draw),this.state.records.createdActors.set(e.actor,this.state.records.messages.length);break;case"destroyParticipant":this.state.records.lastDestroyed=e.actor,this.state.records.destroyedActors.set(e.actor,this.state.records.messages.length);break;case"activeStart":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"activeEnd":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"addNote":this.addNote(e.actor,e.placement,e.text);break;case"addLinks":this.addLinks(e.actor,e.text);break;case"addALink":this.addALink(e.actor,e.text);break;case"addProperties":this.addProperties(e.actor,e.text);break;case"addDetails":this.addDetails(e.actor,e.text);break;case"addMessage":if(this.state.records.lastCreated){if(e.to!==this.state.records.lastCreated)throw new Error("The created participant "+this.state.records.lastCreated.name+" does not have an associated creating message after its declaration. Please check the sequence diagram.");this.state.records.lastCreated=void 0}else if(this.state.records.lastDestroyed){if(e.to!==this.state.records.lastDestroyed&&e.from!==this.state.records.lastDestroyed)throw new Error("The destroyed participant "+this.state.records.lastDestroyed.name+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");this.state.records.lastDestroyed=void 0}this.addSignal(e.from,e.to,e.msg,e.signalType,e.activate);break;case"boxStart":this.addBox(e.boxData);break;case"boxEnd":this.boxEnd();break;case"loopStart":this.addSignal(void 0,void 0,e.loopText,e.signalType);break;case"loopEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"rectStart":this.addSignal(void 0,void 0,e.color,e.signalType);break;case"rectEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"optStart":this.addSignal(void 0,void 0,e.optText,e.signalType);break;case"optEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"altStart":this.addSignal(void 0,void 0,e.altText,e.signalType);break;case"else":this.addSignal(void 0,void 0,e.altText,e.signalType);break;case"altEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"setAccTitle":Lr(e.text);break;case"parStart":this.addSignal(void 0,void 0,e.parText,e.signalType);break;case"and":this.addSignal(void 0,void 0,e.parText,e.signalType);break;case"parEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"criticalStart":this.addSignal(void 0,void 0,e.criticalText,e.signalType);break;case"option":this.addSignal(void 0,void 0,e.optionText,e.signalType);break;case"criticalEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"breakStart":this.addSignal(void 0,void 0,e.breakText,e.signalType);break;case"breakEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break}}getConfig(){return me().sequence}}});var oVe,hfe,ffe=N(()=>{"use strict";oVe=o(t=>`.actor {
1249 + stroke: ${t.actorBorder};
1250 + fill: ${t.actorBkg};
1251 + }
1252 +
1253 + text.actor > tspan {
1254 + fill: ${t.actorTextColor};
1255 + stroke: none;
1256 + }
1257 +
1258 + .actor-line {
1259 + stroke: ${t.actorLineColor};
1260 + }
1261 +
1262 + .messageLine0 {
1263 + stroke-width: 1.5;
1264 + stroke-dasharray: none;
1265 + stroke: ${t.signalColor};
1266 + }
1267 +
1268 + .messageLine1 {
1269 + stroke-width: 1.5;
1270 + stroke-dasharray: 2, 2;
1271 + stroke: ${t.signalColor};
1272 + }
1273 +
1274 + #arrowhead path {
1275 + fill: ${t.signalColor};
1276 + stroke: ${t.signalColor};
1277 + }
1278 +
1279 + .sequenceNumber {
1280 + fill: ${t.sequenceNumberColor};
1281 + }
1282 +
1283 + #sequencenumber {
1284 + fill: ${t.signalColor};
1285 + }
1286 +
1287 + #crosshead path {
1288 + fill: ${t.signalColor};
1289 + stroke: ${t.signalColor};
1290 + }
1291 +
1292 + .messageText {
1293 + fill: ${t.signalTextColor};
1294 + stroke: none;
1295 + }
1296 +
1297 + .labelBox {
1298 + stroke: ${t.labelBoxBorderColor};
1299 + fill: ${t.labelBoxBkgColor};
1300 + }
1301 +
1302 + .labelText, .labelText > tspan {
1303 + fill: ${t.labelTextColor};
1304 + stroke: none;
1305 + }
1306 +
1307 + .loopText, .loopText > tspan {
1308 + fill: ${t.loopTextColor};
1309 + stroke: none;
1310 + }
1311 +
1312 + .loopLine {
1313 + stroke-width: 2px;
1314 + stroke-dasharray: 2, 2;
1315 + stroke: ${t.labelBoxBorderColor};
1316 + fill: ${t.labelBoxBorderColor};
1317 + }
1318 +
1319 + .note {
1320 + //stroke: #decc93;
1321 + stroke: ${t.noteBorderColor};
1322 + fill: ${t.noteBkgColor};
1323 + }
1324 +
1325 + .noteText, .noteText > tspan {
1326 + fill: ${t.noteTextColor};
1327 + stroke: none;
1328 + }
1329 +
1330 + .activation0 {
1331 + fill: ${t.activationBkgColor};
1332 + stroke: ${t.activationBorderColor};
1333 + }
1334 +
1335 + .activation1 {
1336 + fill: ${t.activationBkgColor};
1337 + stroke: ${t.activationBorderColor};
1338 + }
1339 +
1340 + .activation2 {
1341 + fill: ${t.activationBkgColor};
1342 + stroke: ${t.activationBorderColor};
1343 + }
1344 +
1345 + .actorPopupMenu {
1346 + position: absolute;
1347 + }
1348 +
1349 + .actorPopupMenuPanel {
1350 + position: absolute;
1351 + fill: ${t.actorBkg};
1352 + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
1353 + filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));
1354 +}
1355 + .actor-man line {
1356 + stroke: ${t.actorBorder};
1357 + fill: ${t.actorBkg};
1358 + }
1359 + .actor-man circle, line {
1360 + stroke: ${t.actorBorder};
1361 + fill: ${t.actorBkg};
1362 + stroke-width: 2px;
1363 + }
1364 +`,"getStyles"),hfe=oVe});var AO,vf,pfe,mfe,lVe,dfe,_O,cVe,uVe,Tb,_p,gfe,Uc,DO,hVe,fVe,dVe,pVe,mVe,gVe,yVe,yfe,vVe,xVe,bVe,wVe,TVe,kVe,EVe,vfe,SVe,LO,CVe,hi,xfe=N(()=>{"use strict";gr();Wv();ir();AO=Sa(z0(),1);ji();vf=18*2,pfe="actor-top",mfe="actor-bottom",lVe="actor-box",dfe="actor-man",_O=o(function(t,e){return kd(t,e)},"drawRect"),cVe=o(function(t,e,r,n,i){if(e.links===void 0||e.links===null||Object.keys(e.links).length===0)return{height:0,width:0};let a=e.links,s=e.actorCnt,l=e.rectData;var u="none";i&&(u="block !important");let h=t.append("g");h.attr("id","actor"+s+"_popup"),h.attr("class","actorPopupMenu"),h.attr("display",u);var f="";l.class!==void 0&&(f=" "+l.class);let d=l.width>r?l.width:r,p=h.append("rect");if(p.attr("class","actorPopupMenuPanel"+f),p.attr("x",l.x),p.attr("y",l.height),p.attr("fill",l.fill),p.attr("stroke",l.stroke),p.attr("width",d),p.attr("height",l.height),p.attr("rx",l.rx),p.attr("ry",l.ry),a!=null){var m=20;for(let v in a){var g=h.append("a"),y=(0,AO.sanitizeUrl)(a[v]);g.attr("xlink:href",y),g.attr("target","_blank"),CVe(n)(v,g,l.x+10,l.height+m,d,20,{class:"actor"},n),m+=30}}return p.attr("height",m),{height:l.height+m,width:d}},"drawPopup"),uVe=o(function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"},"popupMenuToggle"),Tb=o(async function(t,e,r=null){let n=t.append("foreignObject"),i=await mh(e.text,cr()),s=n.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(i).node().getBoundingClientRect();if(n.attr("height",Math.round(s.height)).attr("width",Math.round(s.width)),e.class==="noteText"){let l=t.node().firstChild;l.setAttribute("height",s.height+2*e.textMargin);let u=l.getBBox();n.attr("x",Math.round(u.x+u.width/2-s.width/2)).attr("y",Math.round(u.y+u.height/2-s.height/2))}else if(r){let{startx:l,stopx:u,starty:h}=r;if(l>u){let f=l;l=u,u=f}n.attr("x",Math.round(l+Math.abs(l-u)/2-s.width/2)),e.class==="loopText"?n.attr("y",Math.round(h)):n.attr("y",Math.round(h-s.height))}return[n]},"drawKatex"),_p=o(function(t,e){let r=0,n=0,i=e.text.split(Ze.lineBreakRegex),[a,s]=Bo(e.fontSize),l=[],u=0,h=o(()=>e.y,"yfunc");if(e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0)switch(e.valign){case"top":case"start":h=o(()=>Math.round(e.y+e.textMargin),"yfunc");break;case"middle":case"center":h=o(()=>Math.round(e.y+(r+n+e.textMargin)/2),"yfunc");break;case"bottom":case"end":h=o(()=>Math.round(e.y+(r+n+2*e.textMargin)-e.textMargin),"yfunc");break}if(e.anchor!==void 0&&e.textMargin!==void 0&&e.width!==void 0)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle";break}for(let[f,d]of i.entries()){e.textMargin!==void 0&&e.textMargin===0&&a!==void 0&&(u=f*a);let p=t.append("text");p.attr("x",e.x),p.attr("y",h()),e.anchor!==void 0&&p.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),e.fontFamily!==void 0&&p.style("font-family",e.fontFamily),s!==void 0&&p.style("font-size",s),e.fontWeight!==void 0&&p.style("font-weight",e.fontWeight),e.fill!==void 0&&p.attr("fill",e.fill),e.class!==void 0&&p.attr("class",e.class),e.dy!==void 0?p.attr("dy",e.dy):u!==0&&p.attr("dy",u);let m=d||H9;if(e.tspan){let g=p.append("tspan");g.attr("x",e.x),e.fill!==void 0&&g.attr("fill",e.fill),g.text(m)}else p.text(m);e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0&&(n+=(p._groups||p)[0][0].getBBox().height,r=n),l.push(p)}return l},"drawText"),gfe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");return n.attr("points",r(e.x,e.y,e.width,e.height,7)),n.attr("class","labelBox"),e.y=e.y+e.height/2,_p(t,e),n},"drawLabel"),Uc=-1,DO=o((t,e,r,n)=>{t.select&&r.forEach(i=>{let a=e.get(i),s=t.select("#actor"+a.actorCnt);!n.mirrorActors&&a.stopy?s.attr("y2",a.stopy+a.height/2):n.mirrorActors&&s.attr("y2",a.stopy)})},"fixLifeLineHeights"),hVe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+e.height,l=t.append("g").lower();var u=l;n||(Uc++,Object.keys(e.links||{}).length&&!r.forceMenus&&u.attr("onclick",uVe(`actor${Uc}_popup`)).attr("cursor","pointer"),u.append("line").attr("id","actor"+Uc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),u=l.append("g"),e.actorCnt=Uc,e.links!=null&&u.attr("id","root-"+Uc));let h=Tl();var f="actor";e.properties?.class?f=e.properties.class:h.fill="#eaeaea",n?f+=` ${mfe}`:f+=` ${pfe}`,h.x=e.x,h.y=i,h.width=e.width,h.height=e.height,h.class=f,h.rx=3,h.ry=3,h.name=e.name;let d=_O(u,h);if(e.rectData=h,e.properties?.icon){let m=e.properties.icon.trim();m.charAt(0)==="@"?Iq(u,h.x+h.width-20,h.y+10,m.substr(1)):Mq(u,h.x+h.width-20,h.y+10,m)}LO(r,pi(e.description))(e.description,u,h.x,h.y,h.width,h.height,{class:`actor ${lVe}`},r);let p=e.height;if(d.node){let m=d.node().getBBox();e.height=m.height,p=m.height}return p},"drawActorTypeParticipant"),fVe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+80,l=t.append("g").lower();n||(Uc++,l.append("line").attr("id","actor"+Uc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),e.actorCnt=Uc);let u=t.append("g"),h=dfe;n?h+=` ${mfe}`:h+=` ${pfe}`,u.attr("class",h),u.attr("name",e.name);let f=Tl();f.x=e.x,f.y=i,f.fill="#eaeaea",f.width=e.width,f.height=e.height,f.class="actor",f.rx=3,f.ry=3,u.append("line").attr("id","actor-man-torso"+Uc).attr("x1",a).attr("y1",i+25).attr("x2",a).attr("y2",i+45),u.append("line").attr("id","actor-man-arms"+Uc).attr("x1",a-vf/2).attr("y1",i+33).attr("x2",a+vf/2).attr("y2",i+33),u.append("line").attr("x1",a-vf/2).attr("y1",i+60).attr("x2",a).attr("y2",i+45),u.append("line").attr("x1",a).attr("y1",i+45).attr("x2",a+vf/2-2).attr("y2",i+60);let d=u.append("circle");d.attr("cx",e.x+e.width/2),d.attr("cy",i+10),d.attr("r",15),d.attr("width",e.width),d.attr("height",e.height);let p=u.node().getBBox();return e.height=p.height,LO(r,pi(e.description))(e.description,u,f.x,f.y+35,f.width,f.height,{class:`actor ${dfe}`},r),e.height},"drawActorTypeActor"),dVe=o(async function(t,e,r,n){switch(e.type){case"actor":return await fVe(t,e,r,n);case"participant":return await hVe(t,e,r,n)}},"drawActor"),pVe=o(function(t,e,r){let i=t.append("g");yfe(i,e),e.name&&LO(r)(e.name,i,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},r),i.lower()},"drawBox"),mVe=o(function(t){return t.append("g")},"anchorElement"),gVe=o(function(t,e,r,n,i){let a=Tl(),s=e.anchored;a.x=e.startx,a.y=e.starty,a.class="activation"+i%3,a.width=e.stopx-e.startx,a.height=r-e.starty,_O(s,a)},"drawActivation"),yVe=o(async function(t,e,r,n){let{boxMargin:i,boxTextMargin:a,labelBoxHeight:s,labelBoxWidth:l,messageFontFamily:u,messageFontSize:h,messageFontWeight:f}=n,d=t.append("g"),p=o(function(y,v,x,b){return d.append("line").attr("x1",y).attr("y1",v).attr("x2",x).attr("y2",b).attr("class","loopLine")},"drawLoopLine");p(e.startx,e.starty,e.stopx,e.starty),p(e.stopx,e.starty,e.stopx,e.stopy),p(e.startx,e.stopy,e.stopx,e.stopy),p(e.startx,e.starty,e.startx,e.stopy),e.sections!==void 0&&e.sections.forEach(function(y){p(e.startx,y.y,e.stopx,y.y).style("stroke-dasharray","3, 3")});let m=Hv();m.text=r,m.x=e.startx,m.y=e.starty,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.anchor="middle",m.valign="middle",m.tspan=!1,m.width=l||50,m.height=s||20,m.textMargin=a,m.class="labelText",gfe(d,m),m=vfe(),m.text=e.title,m.x=e.startx+l/2+(e.stopx-e.startx)/2,m.y=e.starty+i+a,m.anchor="middle",m.valign="middle",m.textMargin=a,m.class="loopText",m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=!0;let g=pi(m.text)?await Tb(d,m,e):_p(d,m);if(e.sectionTitles!==void 0){for(let[y,v]of Object.entries(e.sectionTitles))if(v.message){m.text=v.message,m.x=e.startx+(e.stopx-e.startx)/2,m.y=e.sections[y].y+i+a,m.class="loopText",m.anchor="middle",m.valign="middle",m.tspan=!1,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=e.wrap,pi(m.text)?(e.starty=e.sections[y].y,await Tb(d,m,e)):_p(d,m);let x=Math.round(g.map(b=>(b._groups||b)[0][0].getBBox().height).reduce((b,w)=>b+w));e.sections[y].height+=x-(i+a)}}return e.height=Math.round(e.stopy-e.starty),d},"drawLoop"),yfe=o(function(t,e){q5(t,e)},"drawBackgroundRect"),vVe=o(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),xVe=o(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),bVe=o(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),wVe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto-start-reverse").append("path").attr("d","M -1 0 L 10 5 L 0 10 z")},"insertArrowHead"),TVe=o(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),kVe=o(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertSequenceNumber"),EVe=o(function(t){t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},"insertArrowCrossHead"),vfe=o(function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},"getTextObj"),SVe=o(function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),LO=function(){function t(a,s,l,u,h,f,d){let p=s.append("text").attr("x",l+h/2).attr("y",u+f/2+5).style("text-anchor","middle").text(a);i(p,d)}o(t,"byText");function e(a,s,l,u,h,f,d,p){let{actorFontSize:m,actorFontFamily:g,actorFontWeight:y}=p,[v,x]=Bo(m),b=a.split(Ze.lineBreakRegex);for(let w=0;w<b.length;w++){let C=w*v-v*(b.length-1)/2,T=s.append("text").attr("x",l+h/2).attr("y",u).style("text-anchor","middle").style("font-size",x).style("font-weight",y).style("font-family",g);T.append("tspan").attr("x",l+h/2).attr("dy",C).text(b[w]),T.attr("y",u+f/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(T,d)}}o(e,"byTspan");function r(a,s,l,u,h,f,d,p){let m=s.append("switch"),y=m.append("foreignObject").attr("x",l).attr("y",u).attr("width",h).attr("height",f).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");y.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(a),e(a,m,l,u,h,f,d,p),i(y,d)}o(r,"byFo");async function n(a,s,l,u,h,f,d,p){let m=await id(a,cr()),g=s.append("switch"),v=g.append("foreignObject").attr("x",l+h/2-m.width/2).attr("y",u+f/2-m.height/2).attr("width",m.width).attr("height",m.height).append("xhtml:div").style("height","100%").style("width","100%");v.append("div").style("text-align","center").style("vertical-align","middle").html(await mh(a,cr())),e(a,g,l,u,h,f,d,p),i(v,d)}o(n,"byKatex");function i(a,s){for(let l in s)s.hasOwnProperty(l)&&a.attr(l,s[l])}return o(i,"_setTextAttrs"),function(a,s=!1){return s?n:a.textPlacement==="fo"?r:a.textPlacement==="old"?t:e}}(),CVe=function(){function t(i,a,s,l,u,h,f){let d=a.append("text").attr("x",s).attr("y",l).style("text-anchor","start").text(i);n(d,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d){let{actorFontSize:p,actorFontFamily:m,actorFontWeight:g}=d,y=i.split(Ze.lineBreakRegex);for(let v=0;v<y.length;v++){let x=v*p-p*(y.length-1)/2,b=a.append("text").attr("x",s).attr("y",l).style("text-anchor","start").style("font-size",p).style("font-weight",g).style("font-family",m);b.append("tspan").attr("x",s).attr("dy",x).text(y[v]),b.attr("y",l+h/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),n(b,f)}}o(e,"byTspan");function r(i,a,s,l,u,h,f,d){let p=a.append("switch"),g=p.append("foreignObject").attr("x",s).attr("y",l).attr("width",u).attr("height",h).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");g.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,p,s,l,u,h,f,d),n(g,f)}o(r,"byFo");function n(i,a){for(let s in a)a.hasOwnProperty(s)&&i.attr(s,a[s])}return o(n,"_setTextAttrs"),function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),hi={drawRect:_O,drawText:_p,drawLabel:gfe,drawActor:dVe,drawBox:pVe,drawPopup:cVe,anchorElement:mVe,drawActivation:gVe,drawLoop:yVe,drawBackgroundRect:yfe,insertArrowHead:wVe,insertArrowFilledHead:TVe,insertSequenceNumber:kVe,insertArrowCrossHead:EVe,insertDatabaseIcon:vVe,insertComputerIcon:xVe,insertClockIcon:bVe,getTextObj:vfe,getNoteRect:SVe,fixLifeLineHeights:DO,sanitizeUrl:AO.sanitizeUrl}});async function _Ve(t,e){rt.bumpVerticalPos(10);let{startx:r,stopx:n,message:i}=e,a=Ze.splitBreaks(i).length,s=pi(i),l=s?await id(i,me()):Gt.calculateTextDimensions(i,Dp(Ne));if(!s){let d=l.height/a;e.height+=d,rt.bumpVerticalPos(d)}let u,h=l.height-10,f=l.width;if(r===n){u=rt.getVerticalPos()+h,Ne.rightAngles||(h+=Ne.boxMargin,u=rt.getVerticalPos()+h),h+=30;let d=Ze.getMax(f/2,Ne.width/2);rt.insert(r-d,rt.getVerticalPos()-10+h,n+d,rt.getVerticalPos()+30+h)}else h+=Ne.boxMargin,u=rt.getVerticalPos()+h,rt.insert(r,u-10,n,u);return rt.bumpVerticalPos(h),e.height+=h,e.stopy=e.starty+e.height,rt.insert(e.fromBounds,e.starty,e.toBounds,e.stopy),u}function Hc(t,e,r,n,i){rt.bumpVerticalPos(r);let a=n;if(e.id&&e.message&&t[e.id]){let s=t[e.id].width,l=Dp(Ne);e.message=Gt.wrapLabel(`[${e.message}]`,s-2*Ne.wrapPadding,l),e.width=s,e.wrap=!0;let u=Gt.calculateTextDimensions(e.message,l),h=Ze.getMax(u.height,Ne.labelBoxHeight);a=n+h,Y.debug(`${h} - ${e.message}`)}i(e),rt.bumpVerticalPos(a)}function RVe(t,e,r,n,i,a,s){function l(h,f){h.x<i.get(t.from).x?(rt.insert(e.stopx-f,e.starty,e.startx,e.stopy+h.height/2+Ne.noteMargin),e.stopx=e.stopx+f):(rt.insert(e.startx,e.starty,e.stopx+f,e.stopy+h.height/2+Ne.noteMargin),e.stopx=e.stopx-f)}o(l,"receiverAdjustment");function u(h,f){h.x<i.get(t.to).x?(rt.insert(e.startx-f,e.starty,e.stopx,e.stopy+h.height/2+Ne.noteMargin),e.startx=e.startx+f):(rt.insert(e.stopx,e.starty,e.startx+f,e.stopy+h.height/2+Ne.noteMargin),e.startx=e.startx-f)}if(o(u,"senderAdjustment"),a.get(t.to)==n){let h=i.get(t.to),f=h.type=="actor"?vf/2+3:h.width/2+3;l(h,f),h.starty=r-h.height/2,rt.bumpVerticalPos(h.height/2)}else if(s.get(t.from)==n){let h=i.get(t.from);if(Ne.mirrorActors){let f=h.type=="actor"?vf/2:h.width/2;u(h,f)}h.stopy=r-h.height/2,rt.bumpVerticalPos(h.height/2)}else if(s.get(t.to)==n){let h=i.get(t.to);if(Ne.mirrorActors){let f=h.type=="actor"?vf/2+3:h.width/2+3;l(h,f)}h.stopy=r-h.height/2,rt.bumpVerticalPos(h.height/2)}}async function MVe(t,e,r){let n={};for(let i of e)if(t.get(i.to)&&t.get(i.from)){let a=t.get(i.to);if(i.placement===r.db.PLACEMENT.LEFTOF&&!a.prevActor||i.placement===r.db.PLACEMENT.RIGHTOF&&!a.nextActor)continue;let s=i.placement!==void 0,l=!s,u=s?_1(Ne):Dp(Ne),h=i.wrap?Gt.wrapLabel(i.message,Ne.width-2*Ne.wrapPadding,u):i.message,d=(pi(h)?await id(i.message,me()):Gt.calculateTextDimensions(h,u)).width+2*Ne.wrapPadding;l&&i.from===a.nextActor?n[i.to]=Ze.getMax(n[i.to]||0,d):l&&i.from===a.prevActor?n[i.from]=Ze.getMax(n[i.from]||0,d):l&&i.from===i.to?(n[i.from]=Ze.getMax(n[i.from]||0,d/2),n[i.to]=Ze.getMax(n[i.to]||0,d/2)):i.placement===r.db.PLACEMENT.RIGHTOF?n[i.from]=Ze.getMax(n[i.from]||0,d):i.placement===r.db.PLACEMENT.LEFTOF?n[a.prevActor]=Ze.getMax(n[a.prevActor]||0,d):i.placement===r.db.PLACEMENT.OVER&&(a.prevActor&&(n[a.prevActor]=Ze.getMax(n[a.prevActor]||0,d/2)),a.nextActor&&(n[i.from]=Ze.getMax(n[i.from]||0,d/2)))}return Y.debug("maxMessageWidthPerActor:",n),n}async function OVe(t,e,r){let n=0;for(let a of t.keys()){let s=t.get(a);s.wrap&&(s.description=Gt.wrapLabel(s.description,Ne.width-2*Ne.wrapPadding,RO(Ne)));let l=pi(s.description)?await id(s.description,me()):Gt.calculateTextDimensions(s.description,RO(Ne));s.width=s.wrap?Ne.width:Ze.getMax(Ne.width,l.width+2*Ne.wrapPadding),s.height=s.wrap?Ze.getMax(l.height,Ne.height):Ne.height,n=Ze.getMax(n,s.height)}for(let a in e){let s=t.get(a);if(!s)continue;let l=t.get(s.nextActor);if(!l){let d=e[a]+Ne.actorMargin-s.width/2;s.margin=Ze.getMax(d,Ne.actorMargin);continue}let h=e[a]+Ne.actorMargin-s.width/2-l.width/2;s.margin=Ze.getMax(h,Ne.actorMargin)}let i=0;return r.forEach(a=>{let s=Dp(Ne),l=a.actorKeys.reduce((f,d)=>f+=t.get(d).width+(t.get(d).margin||0),0);l-=2*Ne.boxTextMargin,a.wrap&&(a.name=Gt.wrapLabel(a.name,l-2*Ne.wrapPadding,s));let u=Gt.calculateTextDimensions(a.name,s);i=Ze.getMax(u.height,i);let h=Ze.getMax(l,u.width+2*Ne.wrapPadding);if(a.margin=Ne.boxTextMargin,l<h){let f=(h-l)/2;a.margin+=f}}),r.forEach(a=>a.textMaxHeight=i),Ze.getMax(n,Ne.height)}var Ne,rt,AVe,Dp,_1,RO,DVe,LVe,NO,wfe,Tfe,D6,bfe,NVe,IVe,PVe,BVe,FVe,kfe,Efe=N(()=>{"use strict";dr();xfe();vt();gr();Wv();zt();s0();ir();Ei();Ne={},rt={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:o(function(){return Math.max.apply(null,this.actors.length===0?[0]:this.actors.map(t=>t.height||0))+(this.loops.length===0?0:this.loops.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.messages.length===0?0:this.messages.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.notes.length===0?0:this.notes.map(t=>t.height||0).reduce((t,e)=>t+e))},"getHeight"),clear:o(function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},"clear"),addBox:o(function(t){this.boxes.push(t)},"addBox"),addActor:o(function(t){this.actors.push(t)},"addActor"),addLoop:o(function(t){this.loops.push(t)},"addLoop"),addMessage:o(function(t){this.messages.push(t)},"addMessage"),addNote:o(function(t){this.notes.push(t)},"addNote"),lastActor:o(function(){return this.actors[this.actors.length-1]},"lastActor"),lastLoop:o(function(){return this.loops[this.loops.length-1]},"lastLoop"),lastMessage:o(function(){return this.messages[this.messages.length-1]},"lastMessage"),lastNote:o(function(){return this.notes[this.notes.length-1]},"lastNote"),actors:[],boxes:[],loops:[],messages:[],notes:[]},init:o(function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,Tfe(me())},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=this,a=0;function s(l){return o(function(h){a++;let f=i.sequenceItems.length-a+1;i.updateVal(h,"starty",e-f*Ne.boxMargin,Math.min),i.updateVal(h,"stopy",n+f*Ne.boxMargin,Math.max),i.updateVal(rt.data,"startx",t-f*Ne.boxMargin,Math.min),i.updateVal(rt.data,"stopx",r+f*Ne.boxMargin,Math.max),l!=="activation"&&(i.updateVal(h,"startx",t-f*Ne.boxMargin,Math.min),i.updateVal(h,"stopx",r+f*Ne.boxMargin,Math.max),i.updateVal(rt.data,"starty",e-f*Ne.boxMargin,Math.min),i.updateVal(rt.data,"stopy",n+f*Ne.boxMargin,Math.max))},"updateItemBounds")}o(s,"updateFn"),this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},"updateBounds"),insert:o(function(t,e,r,n){let i=Ze.getMin(t,r),a=Ze.getMax(t,r),s=Ze.getMin(e,n),l=Ze.getMax(e,n);this.updateVal(rt.data,"startx",i,Math.min),this.updateVal(rt.data,"starty",s,Math.min),this.updateVal(rt.data,"stopx",a,Math.max),this.updateVal(rt.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),newActivation:o(function(t,e,r){let n=r.get(t.from),i=D6(t.from).length||0,a=n.x+n.width/2+(i-1)*Ne.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+Ne.activationWidth,stopy:void 0,actor:t.from,anchored:hi.anchorElement(e)})},"newActivation"),endActivation:o(function(t){let e=this.activations.map(function(r){return r.actor}).lastIndexOf(t.from);return this.activations.splice(e,1)[0]},"endActivation"),createLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},"createLoop"),newLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},"newLoop"),endLoop:o(function(){return this.sequenceItems.pop()},"endLoop"),isLoopOverlap:o(function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},"isLoopOverlap"),addSectionToLoop:o(function(t){let e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:rt.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},"addSectionToLoop"),saveVerticalPos:o(function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},"saveVerticalPos"),resetVerticalPos:o(function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},"resetVerticalPos"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=Ze.getMax(this.data.stopy,this.verticalPos)},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return{bounds:this.data,models:this.models}},"getBounds")},AVe=o(async function(t,e){rt.bumpVerticalPos(Ne.boxMargin),e.height=Ne.boxMargin,e.starty=rt.getVerticalPos();let r=Tl();r.x=e.startx,r.y=e.starty,r.width=e.width||Ne.width,r.class="note";let n=t.append("g"),i=hi.drawRect(n,r),a=Hv();a.x=e.startx,a.y=e.starty,a.width=r.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=Ne.noteFontFamily,a.fontSize=Ne.noteFontSize,a.fontWeight=Ne.noteFontWeight,a.anchor=Ne.noteAlign,a.textMargin=Ne.noteMargin,a.valign="center";let s=pi(a.text)?await Tb(n,a):_p(n,a),l=Math.round(s.map(u=>(u._groups||u)[0][0].getBBox().height).reduce((u,h)=>u+h));i.attr("height",l+2*Ne.noteMargin),e.height+=l+2*Ne.noteMargin,rt.bumpVerticalPos(l+2*Ne.noteMargin),e.stopy=e.starty+l+2*Ne.noteMargin,e.stopx=e.startx+r.width,rt.insert(e.startx,e.starty,e.stopx,e.stopy),rt.models.addNote(e)},"drawNote"),Dp=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont"),_1=o(t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),"noteFont"),RO=o(t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}),"actorFont");o(_Ve,"boundMessage");DVe=o(async function(t,e,r,n){let{startx:i,stopx:a,starty:s,message:l,type:u,sequenceIndex:h,sequenceVisible:f}=e,d=Gt.calculateTextDimensions(l,Dp(Ne)),p=Hv();p.x=i,p.y=s+10,p.width=a-i,p.class="messageText",p.dy="1em",p.text=l,p.fontFamily=Ne.messageFontFamily,p.fontSize=Ne.messageFontSize,p.fontWeight=Ne.messageFontWeight,p.anchor=Ne.messageAlign,p.valign="center",p.textMargin=Ne.wrapPadding,p.tspan=!1,pi(p.text)?await Tb(t,p,{startx:i,stopx:a,starty:r}):_p(t,p);let m=d.width,g;i===a?Ne.rightAngles?g=t.append("path").attr("d",`M ${i},${r} H ${i+Ze.getMax(Ne.width/2,m/2)} V ${r+25} H ${i}`):g=t.append("path").attr("d","M "+i+","+r+" C "+(i+60)+","+(r-10)+" "+(i+60)+","+(r+30)+" "+i+","+(r+20)):(g=t.append("line"),g.attr("x1",i),g.attr("y1",r),g.attr("x2",a),g.attr("y2",r)),u===n.db.LINETYPE.DOTTED||u===n.db.LINETYPE.DOTTED_CROSS||u===n.db.LINETYPE.DOTTED_POINT||u===n.db.LINETYPE.DOTTED_OPEN||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED?(g.style("stroke-dasharray","3, 3"),g.attr("class","messageLine1")):g.attr("class","messageLine0");let y="";Ne.arrowMarkerAbsolute&&(y=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,y=y.replace(/\(/g,"\\("),y=y.replace(/\)/g,"\\)")),g.attr("stroke-width",2),g.attr("stroke","none"),g.style("fill","none"),(u===n.db.LINETYPE.SOLID||u===n.db.LINETYPE.DOTTED)&&g.attr("marker-end","url("+y+"#arrowhead)"),(u===n.db.LINETYPE.BIDIRECTIONAL_SOLID||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED)&&(g.attr("marker-start","url("+y+"#arrowhead)"),g.attr("marker-end","url("+y+"#arrowhead)")),(u===n.db.LINETYPE.SOLID_POINT||u===n.db.LINETYPE.DOTTED_POINT)&&g.attr("marker-end","url("+y+"#filled-head)"),(u===n.db.LINETYPE.SOLID_CROSS||u===n.db.LINETYPE.DOTTED_CROSS)&&g.attr("marker-end","url("+y+"#crosshead)"),(f||Ne.showSequenceNumbers)&&(g.attr("marker-start","url("+y+"#sequencenumber)"),t.append("text").attr("x",i).attr("y",r+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(h))},"drawMessage"),LVe=o(function(t,e,r,n,i,a,s){let l=0,u=0,h,f=0;for(let d of n){let p=e.get(d),m=p.box;h&&h!=m&&(s||rt.models.addBox(h),u+=Ne.boxMargin+h.margin),m&&m!=h&&(s||(m.x=l+u,m.y=i),u+=m.margin),p.width=p.width||Ne.width,p.height=Ze.getMax(p.height||Ne.height,Ne.height),p.margin=p.margin||Ne.actorMargin,f=Ze.getMax(f,p.height),r.get(p.name)&&(u+=p.width/2),p.x=l+u,p.starty=rt.getVerticalPos(),rt.insert(p.x,i,p.x+p.width,p.height),l+=p.width+u,p.box&&(p.box.width=l+m.margin-p.box.x),u=p.margin,h=p.box,rt.models.addActor(p)}h&&!s&&rt.models.addBox(h),rt.bumpVerticalPos(f)},"addActorRenderingData"),NO=o(async function(t,e,r,n){if(n){let i=0;rt.bumpVerticalPos(Ne.boxMargin*2);for(let a of r){let s=e.get(a);s.stopy||(s.stopy=rt.getVerticalPos());let l=await hi.drawActor(t,s,Ne,!0);i=Ze.getMax(i,l)}rt.bumpVerticalPos(i+Ne.boxMargin)}else for(let i of r){let a=e.get(i);await hi.drawActor(t,a,Ne,!1)}},"drawActors"),wfe=o(function(t,e,r,n){let i=0,a=0;for(let s of r){let l=e.get(s),u=IVe(l),h=hi.drawPopup(t,l,u,Ne,Ne.forceMenus,n);h.height>i&&(i=h.height),h.width+l.x>a&&(a=h.width+l.x)}return{maxHeight:i,maxWidth:a}},"drawActorsPopup"),Tfe=o(function(t){Gn(Ne,t),t.fontFamily&&(Ne.actorFontFamily=Ne.noteFontFamily=Ne.messageFontFamily=t.fontFamily),t.fontSize&&(Ne.actorFontSize=Ne.noteFontSize=Ne.messageFontSize=t.fontSize),t.fontWeight&&(Ne.actorFontWeight=Ne.noteFontWeight=Ne.messageFontWeight=t.fontWeight)},"setConf"),D6=o(function(t){return rt.activations.filter(function(e){return e.actor===t})},"actorActivations"),bfe=o(function(t,e){let r=e.get(t),n=D6(t),i=n.reduce(function(s,l){return Ze.getMin(s,l.startx)},r.x+r.width/2-1),a=n.reduce(function(s,l){return Ze.getMax(s,l.stopx)},r.x+r.width/2+1);return[i,a]},"activationBounds");o(Hc,"adjustLoopHeightForWrap");o(RVe,"adjustCreatedDestroyedData");NVe=o(async function(t,e,r,n){let{securityLevel:i,sequence:a}=me();Ne=a;let s;i==="sandbox"&&(s=Ge("#i"+e));let l=i==="sandbox"?Ge(s.nodes()[0].contentDocument.body):Ge("body"),u=i==="sandbox"?s.nodes()[0].contentDocument:document;rt.init(),Y.debug(n.db);let h=i==="sandbox"?l.select(`[id="${e}"]`):Ge(`[id="${e}"]`),f=n.db.getActors(),d=n.db.getCreatedActors(),p=n.db.getDestroyedActors(),m=n.db.getBoxes(),g=n.db.getActorKeys(),y=n.db.getMessages(),v=n.db.getDiagramTitle(),x=n.db.hasAtLeastOneBox(),b=n.db.hasAtLeastOneBoxWithTitle(),w=await MVe(f,y,n);if(Ne.height=await OVe(f,w,m),hi.insertComputerIcon(h),hi.insertDatabaseIcon(h),hi.insertClockIcon(h),x&&(rt.bumpVerticalPos(Ne.boxMargin),b&&rt.bumpVerticalPos(m[0].textMaxHeight)),Ne.hideUnusedParticipants===!0){let F=new Set;y.forEach(P=>{F.add(P.from),F.add(P.to)}),g=g.filter(P=>F.has(P))}LVe(h,f,d,g,0,y,!1);let C=await FVe(y,f,w,n);hi.insertArrowHead(h),hi.insertArrowCrossHead(h),hi.insertArrowFilledHead(h),hi.insertSequenceNumber(h);function T(F,P){let z=rt.endActivation(F);z.starty+18>P&&(z.starty=P-6,P+=12),hi.drawActivation(h,z,P,Ne,D6(F.from).length),rt.insert(z.startx,P-10,z.stopx,P)}o(T,"activeEnd");let E=1,A=1,S=[],_=[],I=0;for(let F of y){let P,z,$;switch(F.type){case n.db.LINETYPE.NOTE:rt.resetVerticalPos(),z=F.noteModel,await AVe(h,z);break;case n.db.LINETYPE.ACTIVE_START:rt.newActivation(F,h,f);break;case n.db.LINETYPE.ACTIVE_END:T(F,rt.getVerticalPos());break;case n.db.LINETYPE.LOOP_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.LOOP_END:P=rt.endLoop(),await hi.drawLoop(h,P,"loop",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.RECT_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin,H=>rt.newLoop(void 0,H.message));break;case n.db.LINETYPE.RECT_END:P=rt.endLoop(),_.push(P),rt.models.addLoop(P),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos());break;case n.db.LINETYPE.OPT_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.OPT_END:P=rt.endLoop(),await hi.drawLoop(h,P,"opt",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.ALT_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.ALT_ELSE:Hc(C,F,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,H=>rt.addSectionToLoop(H));break;case n.db.LINETYPE.ALT_END:P=rt.endLoop(),await hi.drawLoop(h,P,"alt",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H)),rt.saveVerticalPos();break;case n.db.LINETYPE.PAR_AND:Hc(C,F,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,H=>rt.addSectionToLoop(H));break;case n.db.LINETYPE.PAR_END:P=rt.endLoop(),await hi.drawLoop(h,P,"par",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.AUTONUMBER:E=F.message.start||E,A=F.message.step||A,F.message.visible?n.db.enableSequenceNumbers():n.db.disableSequenceNumbers();break;case n.db.LINETYPE.CRITICAL_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.CRITICAL_OPTION:Hc(C,F,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,H=>rt.addSectionToLoop(H));break;case n.db.LINETYPE.CRITICAL_END:P=rt.endLoop(),await hi.drawLoop(h,P,"critical",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.BREAK_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.BREAK_END:P=rt.endLoop(),await hi.drawLoop(h,P,"break",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;default:try{$=F.msgModel,$.starty=rt.getVerticalPos(),$.sequenceIndex=E,$.sequenceVisible=n.db.showSequenceNumbers();let H=await _Ve(h,$);RVe(F,$,H,I,f,d,p),S.push({messageModel:$,lineStartY:H}),rt.models.addMessage($)}catch(H){Y.error("error while drawing message",H)}}[n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT,n.db.LINETYPE.BIDIRECTIONAL_SOLID,n.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(F.type)&&(E=E+A),I++}Y.debug("createdActors",d),Y.debug("destroyedActors",p),await NO(h,f,g,!1);for(let F of S)await DVe(h,F.messageModel,F.lineStartY,n);Ne.mirrorActors&&await NO(h,f,g,!0),_.forEach(F=>hi.drawBackgroundRect(h,F)),DO(h,f,g,Ne);for(let F of rt.models.boxes)F.height=rt.getVerticalPos()-F.y,rt.insert(F.x,F.y,F.x+F.width,F.height),F.startx=F.x,F.starty=F.y,F.stopx=F.startx+F.width,F.stopy=F.starty+F.height,F.stroke="rgb(0,0,0, 0.5)",hi.drawBox(h,F,Ne);x&&rt.bumpVerticalPos(Ne.boxMargin);let D=wfe(h,f,g,u),{bounds:k}=rt.getBounds();k.startx===void 0&&(k.startx=0),k.starty===void 0&&(k.starty=0),k.stopx===void 0&&(k.stopx=0),k.stopy===void 0&&(k.stopy=0);let L=k.stopy-k.starty;L<D.maxHeight&&(L=D.maxHeight);let R=L+2*Ne.diagramMarginY;Ne.mirrorActors&&(R=R-Ne.boxMargin+Ne.bottomMarginAdj);let O=k.stopx-k.startx;O<D.maxWidth&&(O=D.maxWidth);let M=O+2*Ne.diagramMarginX;v&&h.append("text").text(v).attr("x",(k.stopx-k.startx)/2-2*Ne.diagramMarginX).attr("y",-25),vn(h,R,M,Ne.useMaxWidth);let B=v?40:0;h.attr("viewBox",k.startx-Ne.diagramMarginX+" -"+(Ne.diagramMarginY+B)+" "+M+" "+(R+B)),Y.debug("models:",rt.models)},"draw");o(MVe,"getMaxMessageWidthPerActor");IVe=o(function(t){let e=0,r=RO(Ne);for(let n in t.links){let a=Gt.calculateTextDimensions(n,r).width+2*Ne.wrapPadding+2*Ne.boxMargin;e<a&&(e=a)}return e},"getRequiredPopupWidth");o(OVe,"calculateActorMargins");PVe=o(async function(t,e,r){let n=e.get(t.from),i=e.get(t.to),a=n.x,s=i.x,l=t.wrap&&t.message,u=pi(t.message)?await id(t.message,me()):Gt.calculateTextDimensions(l?Gt.wrapLabel(t.message,Ne.width,_1(Ne)):t.message,_1(Ne)),h={width:l?Ne.width:Ze.getMax(Ne.width,u.width+2*Ne.noteMargin),height:0,startx:n.x,stopx:0,starty:0,stopy:0,message:t.message};return t.placement===r.db.PLACEMENT.RIGHTOF?(h.width=l?Ze.getMax(Ne.width,u.width):Ze.getMax(n.width/2+i.width/2,u.width+2*Ne.noteMargin),h.startx=a+(n.width+Ne.actorMargin)/2):t.placement===r.db.PLACEMENT.LEFTOF?(h.width=l?Ze.getMax(Ne.width,u.width+2*Ne.noteMargin):Ze.getMax(n.width/2+i.width/2,u.width+2*Ne.noteMargin),h.startx=a-h.width+(n.width-Ne.actorMargin)/2):t.to===t.from?(u=Gt.calculateTextDimensions(l?Gt.wrapLabel(t.message,Ze.getMax(Ne.width,n.width),_1(Ne)):t.message,_1(Ne)),h.width=l?Ze.getMax(Ne.width,n.width):Ze.getMax(n.width,Ne.width,u.width+2*Ne.noteMargin),h.startx=a+(n.width-h.width)/2):(h.width=Math.abs(a+n.width/2-(s+i.width/2))+Ne.actorMargin,h.startx=a<s?a+n.width/2-Ne.actorMargin/2:s+i.width/2-Ne.actorMargin/2),l&&(h.message=Gt.wrapLabel(t.message,h.width-2*Ne.wrapPadding,_1(Ne))),Y.debug(`NM:[${h.startx},${h.stopx},${h.starty},${h.stopy}:${h.width},${h.height}=${t.message}]`),h},"buildNoteModel"),BVe=o(function(t,e,r){if(![r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN,r.db.LINETYPE.SOLID,r.db.LINETYPE.DOTTED,r.db.LINETYPE.SOLID_CROSS,r.db.LINETYPE.DOTTED_CROSS,r.db.LINETYPE.SOLID_POINT,r.db.LINETYPE.DOTTED_POINT,r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(t.type))return{};let[n,i]=bfe(t.from,e),[a,s]=bfe(t.to,e),l=n<=a,u=l?i:n,h=l?a:s,f=Math.abs(a-s)>2,d=o(y=>l?-y:y,"adjustValue");t.from===t.to?h=u:(t.activate&&!f&&(h+=d(Ne.activationWidth/2-1)),[r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN].includes(t.type)||(h+=d(3)),[r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(t.type)&&(u-=d(3)));let p=[n,i,a,s],m=Math.abs(u-h);t.wrap&&t.message&&(t.message=Gt.wrapLabel(t.message,Ze.getMax(m+2*Ne.wrapPadding,Ne.width),Dp(Ne)));let g=Gt.calculateTextDimensions(t.message,Dp(Ne));return{width:Ze.getMax(t.wrap?0:g.width+2*Ne.wrapPadding,m+2*Ne.wrapPadding,Ne.width),height:0,startx:u,stopx:h,starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,p),toBounds:Math.max.apply(null,p)}},"buildMessageModel"),FVe=o(async function(t,e,r,n){let i={},a=[],s,l,u;for(let h of t){switch(h.type){case n.db.LINETYPE.LOOP_START:case n.db.LINETYPE.ALT_START:case n.db.LINETYPE.OPT_START:case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:case n.db.LINETYPE.CRITICAL_START:case n.db.LINETYPE.BREAK_START:a.push({id:h.id,msg:h.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case n.db.LINETYPE.ALT_ELSE:case n.db.LINETYPE.PAR_AND:case n.db.LINETYPE.CRITICAL_OPTION:h.message&&(s=a.pop(),i[s.id]=s,i[h.id]=s,a.push(s));break;case n.db.LINETYPE.LOOP_END:case n.db.LINETYPE.ALT_END:case n.db.LINETYPE.OPT_END:case n.db.LINETYPE.PAR_END:case n.db.LINETYPE.CRITICAL_END:case n.db.LINETYPE.BREAK_END:s=a.pop(),i[s.id]=s;break;case n.db.LINETYPE.ACTIVE_START:{let d=e.get(h.from?h.from:h.to.actor),p=D6(h.from?h.from:h.to.actor).length,m=d.x+d.width/2+(p-1)*Ne.activationWidth/2,g={startx:m,stopx:m+Ne.activationWidth,actor:h.from,enabled:!0};rt.activations.push(g)}break;case n.db.LINETYPE.ACTIVE_END:{let d=rt.activations.map(p=>p.actor).lastIndexOf(h.from);rt.activations.splice(d,1).splice(0,1)}break}h.placement!==void 0?(l=await PVe(h,e,n),h.noteModel=l,a.forEach(d=>{s=d,s.from=Ze.getMin(s.from,l.startx),s.to=Ze.getMax(s.to,l.startx+l.width),s.width=Ze.getMax(s.width,Math.abs(s.from-s.to))-Ne.labelBoxWidth})):(u=BVe(h,e,n),h.msgModel=u,u.startx&&u.stopx&&a.length>0&&a.forEach(d=>{if(s=d,u.startx===u.stopx){let p=e.get(h.from),m=e.get(h.to);s.from=Ze.getMin(p.x-u.width/2,p.x-p.width/2,s.from),s.to=Ze.getMax(m.x+u.width/2,m.x+p.width/2,s.to),s.width=Ze.getMax(s.width,Math.abs(s.to-s.from))-Ne.labelBoxWidth}else s.from=Ze.getMin(u.startx,s.from),s.to=Ze.getMax(u.stopx,s.to),s.width=Ze.getMax(s.width,u.width)-Ne.labelBoxWidth}))}return rt.activations=[],Y.debug("Loop type widths:",i),i},"calculateLoopBounds"),kfe={bounds:rt,drawActors:NO,drawActorsPopup:wfe,setConf:Tfe,draw:NVe}});var Sfe={};hr(Sfe,{diagram:()=>$Ve});var $Ve,Cfe=N(()=>{"use strict";cfe();ufe();ffe();zt();Efe();$Ve={parser:lfe,get db(){return new _6},renderer:kfe,styles:hfe,init:o(t=>{t.sequence||(t.sequence={}),t.wrap&&(t.sequence.wrap=t.wrap,Yy({sequence:{wrap:t.wrap}}))},"init")}});var MO,L6,IO=N(()=>{"use strict";MO=function(){var t=o(function(Ie,be,W,de){for(W=W||{},de=Ie.length;de--;W[Ie[de]]=be);return W},"o"),e=[1,18],r=[1,19],n=[1,20],i=[1,41],a=[1,42],s=[1,26],l=[1,24],u=[1,25],h=[1,32],f=[1,33],d=[1,34],p=[1,45],m=[1,35],g=[1,36],y=[1,37],v=[1,38],x=[1,27],b=[1,28],w=[1,29],C=[1,30],T=[1,31],E=[1,44],A=[1,46],S=[1,43],_=[1,47],I=[1,9],D=[1,8,9],k=[1,58],L=[1,59],R=[1,60],O=[1,61],M=[1,62],B=[1,63],F=[1,64],P=[1,8,9,41],z=[1,76],$=[1,8,9,12,13,22,39,41,44,66,67,68,69,70,71,72,77,79],H=[1,8,9,12,13,17,20,22,39,41,44,48,58,66,67,68,69,70,71,72,77,79,84,99,101,102],Q=[13,58,84,99,101,102],j=[13,58,71,72,84,99,101,102],ie=[13,58,66,67,68,69,70,84,99,101,102],ne=[1,98],le=[1,115],he=[1,107],K=[1,113],X=[1,108],te=[1,109],J=[1,110],se=[1,111],ue=[1,112],Z=[1,114],Se=[22,58,59,80,84,85,86,87,88,89],ce=[1,8,9,39,41,44],ae=[1,8,9,22],Oe=[1,143],ge=[1,8,9,59],ze=[1,8,9,22,58,59,80,84,85,86,87,88,89],He={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,DOT:17,className:18,classLiteralName:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,CLASS:46,ANNOTATION_START:47,ANNOTATION_END:48,MEMBER:49,SEPARATOR:50,relation:51,NOTE_FOR:52,noteText:53,NOTE:54,CLASSDEF:55,classList:56,stylesOpt:57,ALPHA:58,COMMA:59,direction_tb:60,direction_bt:61,direction_rl:62,direction_lr:63,relationType:64,lineType:65,AGGREGATION:66,EXTENSION:67,COMPOSITION:68,DEPENDENCY:69,LOLLIPOP:70,LINE:71,DOTTED_LINE:72,CALLBACK:73,LINK:74,LINK_TARGET:75,CLICK:76,CALLBACK_NAME:77,CALLBACK_ARGS:78,HREF:79,STYLE:80,CSSCLASS:81,style:82,styleComponent:83,NUM:84,COLON:85,UNIT:86,SPACE:87,BRKT:88,PCT:89,commentToken:90,textToken:91,graphCodeTokens:92,textNoTagsToken:93,TAGSTART:94,TAGEND:95,"==":96,"--":97,DEFAULT:98,MINUS:99,keywords:100,UNICODE_TEXT:101,BQUOTE_STR:102,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",17:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"CLASS",47:"ANNOTATION_START",48:"ANNOTATION_END",49:"MEMBER",50:"SEPARATOR",52:"NOTE_FOR",54:"NOTE",55:"CLASSDEF",58:"ALPHA",59:"COMMA",60:"direction_tb",61:"direction_bt",62:"direction_rl",63:"direction_lr",66:"AGGREGATION",67:"EXTENSION",68:"COMPOSITION",69:"DEPENDENCY",70:"LOLLIPOP",71:"LINE",72:"DOTTED_LINE",73:"CALLBACK",74:"LINK",75:"LINK_TARGET",76:"CLICK",77:"CALLBACK_NAME",78:"CALLBACK_ARGS",79:"HREF",80:"STYLE",81:"CSSCLASS",84:"NUM",85:"COLON",86:"UNIT",87:"SPACE",88:"BRKT",89:"PCT",92:"graphCodeTokens",94:"TAGSTART",95:"TAGEND",96:"==",97:"--",98:"DEFAULT",99:"MINUS",100:"keywords",101:"UNICODE_TEXT",102:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,3],[15,2],[18,1],[18,3],[18,1],[18,2],[18,2],[18,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,6],[43,2],[43,3],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[56,1],[56,3],[32,1],[32,1],[32,1],[32,1],[51,3],[51,2],[51,2],[51,1],[64,1],[64,1],[64,1],[64,1],[64,1],[65,1],[65,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[57,1],[57,3],[82,1],[82,2],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[90,1],[90,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[93,1],[93,1],[93,1],[93,1],[16,1],[16,1],[16,1],[16,1],[19,1],[53,1]],performAction:o(function(be,W,de,re,oe,V,xe){var q=V.length-1;switch(oe){case 8:this.$=V[q-1];break;case 9:case 12:case 14:this.$=V[q];break;case 10:case 13:this.$=V[q-2]+"."+V[q];break;case 11:case 15:this.$=V[q-1]+V[q];break;case 16:case 17:this.$=V[q-1]+"~"+V[q]+"~";break;case 18:re.addRelation(V[q]);break;case 19:V[q-1].title=re.cleanupLabel(V[q]),re.addRelation(V[q-1]);break;case 30:this.$=V[q].trim(),re.setAccTitle(this.$);break;case 31:case 32:this.$=V[q].trim(),re.setAccDescription(this.$);break;case 33:re.addClassesToNamespace(V[q-3],V[q-1]);break;case 34:re.addClassesToNamespace(V[q-4],V[q-1]);break;case 35:this.$=V[q],re.addNamespace(V[q]);break;case 36:this.$=[V[q]];break;case 37:this.$=[V[q-1]];break;case 38:V[q].unshift(V[q-2]),this.$=V[q];break;case 40:re.setCssClass(V[q-2],V[q]);break;case 41:re.addMembers(V[q-3],V[q-1]);break;case 42:re.setCssClass(V[q-5],V[q-3]),re.addMembers(V[q-5],V[q-1]);break;case 43:this.$=V[q],re.addClass(V[q]);break;case 44:this.$=V[q-1],re.addClass(V[q-1]),re.setClassLabel(V[q-1],V[q]);break;case 45:re.addAnnotation(V[q],V[q-2]);break;case 46:case 59:this.$=[V[q]];break;case 47:V[q].push(V[q-1]),this.$=V[q];break;case 48:break;case 49:re.addMember(V[q-1],re.cleanupLabel(V[q]));break;case 50:break;case 51:break;case 52:this.$={id1:V[q-2],id2:V[q],relation:V[q-1],relationTitle1:"none",relationTitle2:"none"};break;case 53:this.$={id1:V[q-3],id2:V[q],relation:V[q-1],relationTitle1:V[q-2],relationTitle2:"none"};break;case 54:this.$={id1:V[q-3],id2:V[q],relation:V[q-2],relationTitle1:"none",relationTitle2:V[q-1]};break;case 55:this.$={id1:V[q-4],id2:V[q],relation:V[q-2],relationTitle1:V[q-3],relationTitle2:V[q-1]};break;case 56:re.addNote(V[q],V[q-1]);break;case 57:re.addNote(V[q]);break;case 58:this.$=V[q-2],re.defineClass(V[q-1],V[q]);break;case 60:this.$=V[q-2].concat([V[q]]);break;case 61:re.setDirection("TB");break;case 62:re.setDirection("BT");break;case 63:re.setDirection("RL");break;case 64:re.setDirection("LR");break;case 65:this.$={type1:V[q-2],type2:V[q],lineType:V[q-1]};break;case 66:this.$={type1:"none",type2:V[q],lineType:V[q-1]};break;case 67:this.$={type1:V[q-1],type2:"none",lineType:V[q]};break;case 68:this.$={type1:"none",type2:"none",lineType:V[q]};break;case 69:this.$=re.relationType.AGGREGATION;break;case 70:this.$=re.relationType.EXTENSION;break;case 71:this.$=re.relationType.COMPOSITION;break;case 72:this.$=re.relationType.DEPENDENCY;break;case 73:this.$=re.relationType.LOLLIPOP;break;case 74:this.$=re.lineType.LINE;break;case 75:this.$=re.lineType.DOTTED_LINE;break;case 76:case 82:this.$=V[q-2],re.setClickEvent(V[q-1],V[q]);break;case 77:case 83:this.$=V[q-3],re.setClickEvent(V[q-2],V[q-1]),re.setTooltip(V[q-2],V[q]);break;case 78:this.$=V[q-2],re.setLink(V[q-1],V[q]);break;case 79:this.$=V[q-3],re.setLink(V[q-2],V[q-1],V[q]);break;case 80:this.$=V[q-3],re.setLink(V[q-2],V[q-1]),re.setTooltip(V[q-2],V[q]);break;case 81:this.$=V[q-4],re.setLink(V[q-3],V[q-2],V[q]),re.setTooltip(V[q-3],V[q-1]);break;case 84:this.$=V[q-3],re.setClickEvent(V[q-2],V[q-1],V[q]);break;case 85:this.$=V[q-4],re.setClickEvent(V[q-3],V[q-2],V[q-1]),re.setTooltip(V[q-3],V[q]);break;case 86:this.$=V[q-3],re.setLink(V[q-2],V[q]);break;case 87:this.$=V[q-4],re.setLink(V[q-3],V[q-1],V[q]);break;case 88:this.$=V[q-4],re.setLink(V[q-3],V[q-1]),re.setTooltip(V[q-3],V[q]);break;case 89:this.$=V[q-5],re.setLink(V[q-4],V[q-2],V[q]),re.setTooltip(V[q-4],V[q-1]);break;case 90:this.$=V[q-2],re.setCssStyle(V[q-1],V[q]);break;case 91:re.setCssClass(V[q-1],V[q]);break;case 92:this.$=[V[q]];break;case 93:V[q-2].push(V[q]),this.$=V[q-2];break;case 95:this.$=V[q-1]+V[q];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:C,81:T,84:E,99:A,101:S,102:_},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(I,[2,5],{8:[1,48]}),{8:[1,49]},t(D,[2,18],{22:[1,50]}),t(D,[2,20]),t(D,[2,21]),t(D,[2,22]),t(D,[2,23]),t(D,[2,24]),t(D,[2,25]),t(D,[2,26]),t(D,[2,27]),t(D,[2,28]),t(D,[2,29]),{34:[1,51]},{36:[1,52]},t(D,[2,32]),t(D,[2,48],{51:53,64:56,65:57,13:[1,54],22:[1,55],66:k,67:L,68:R,69:O,70:M,71:B,72:F}),{39:[1,65]},t(P,[2,39],{39:[1,67],44:[1,66]}),t(D,[2,50]),t(D,[2,51]),{16:68,58:p,84:E,99:A,101:S},{16:39,18:69,19:40,58:p,84:E,99:A,101:S,102:_},{16:39,18:70,19:40,58:p,84:E,99:A,101:S,102:_},{16:39,18:71,19:40,58:p,84:E,99:A,101:S,102:_},{58:[1,72]},{13:[1,73]},{16:39,18:74,19:40,58:p,84:E,99:A,101:S,102:_},{13:z,53:75},{56:77,58:[1,78]},t(D,[2,61]),t(D,[2,62]),t(D,[2,63]),t(D,[2,64]),t($,[2,12],{16:39,19:40,18:80,17:[1,79],20:[1,81],58:p,84:E,99:A,101:S,102:_}),t($,[2,14],{20:[1,82]}),{15:83,16:84,58:p,84:E,99:A,101:S},{16:39,18:85,19:40,58:p,84:E,99:A,101:S,102:_},t(H,[2,118]),t(H,[2,119]),t(H,[2,120]),t(H,[2,121]),t([1,8,9,12,13,20,22,39,41,44,66,67,68,69,70,71,72,77,79],[2,122]),t(I,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,18:21,38:22,43:23,16:39,19:40,5:86,33:e,35:r,37:n,42:i,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:C,81:T,84:E,99:A,101:S,102:_}),{5:87,10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:C,81:T,84:E,99:A,101:S,102:_},t(D,[2,19]),t(D,[2,30]),t(D,[2,31]),{13:[1,89],16:39,18:88,19:40,58:p,84:E,99:A,101:S,102:_},{51:90,64:56,65:57,66:k,67:L,68:R,69:O,70:M,71:B,72:F},t(D,[2,49]),{65:91,71:B,72:F},t(Q,[2,68],{64:92,66:k,67:L,68:R,69:O,70:M}),t(j,[2,69]),t(j,[2,70]),t(j,[2,71]),t(j,[2,72]),t(j,[2,73]),t(ie,[2,74]),t(ie,[2,75]),{8:[1,94],24:95,40:93,43:23,46:a},{16:96,58:p,84:E,99:A,101:S},{45:97,49:ne},{48:[1,99]},{13:[1,100]},{13:[1,101]},{77:[1,102],79:[1,103]},{22:le,57:104,58:he,80:K,82:105,83:106,84:X,85:te,86:J,87:se,88:ue,89:Z},{58:[1,116]},{13:z,53:117},t(D,[2,57]),t(D,[2,123]),{22:le,57:118,58:he,59:[1,119],80:K,82:105,83:106,84:X,85:te,86:J,87:se,88:ue,89:Z},t(Se,[2,59]),{16:39,18:120,19:40,58:p,84:E,99:A,101:S,102:_},t($,[2,15]),t($,[2,16]),t($,[2,17]),{39:[2,35]},{15:122,16:84,17:[1,121],39:[2,9],58:p,84:E,99:A,101:S},t(ce,[2,43],{11:123,12:[1,124]}),t(I,[2,7]),{9:[1,125]},t(ae,[2,52]),{16:39,18:126,19:40,58:p,84:E,99:A,101:S,102:_},{13:[1,128],16:39,18:127,19:40,58:p,84:E,99:A,101:S,102:_},t(Q,[2,67],{64:129,66:k,67:L,68:R,69:O,70:M}),t(Q,[2,66]),{41:[1,130]},{24:95,40:131,43:23,46:a},{8:[1,132],41:[2,36]},t(P,[2,40],{39:[1,133]}),{41:[1,134]},{41:[2,46],45:135,49:ne},{16:39,18:136,19:40,58:p,84:E,99:A,101:S,102:_},t(D,[2,76],{13:[1,137]}),t(D,[2,78],{13:[1,139],75:[1,138]}),t(D,[2,82],{13:[1,140],78:[1,141]}),{13:[1,142]},t(D,[2,90],{59:Oe}),t(ge,[2,92],{83:144,22:le,58:he,80:K,84:X,85:te,86:J,87:se,88:ue,89:Z}),t(ze,[2,94]),t(ze,[2,96]),t(ze,[2,97]),t(ze,[2,98]),t(ze,[2,99]),t(ze,[2,100]),t(ze,[2,101]),t(ze,[2,102]),t(ze,[2,103]),t(ze,[2,104]),t(D,[2,91]),t(D,[2,56]),t(D,[2,58],{59:Oe}),{58:[1,145]},t($,[2,13]),{15:146,16:84,58:p,84:E,99:A,101:S},{39:[2,11]},t(ce,[2,44]),{13:[1,147]},{1:[2,4]},t(ae,[2,54]),t(ae,[2,53]),{16:39,18:148,19:40,58:p,84:E,99:A,101:S,102:_},t(Q,[2,65]),t(D,[2,33]),{41:[1,149]},{24:95,40:150,41:[2,37],43:23,46:a},{45:151,49:ne},t(P,[2,41]),{41:[2,47]},t(D,[2,45]),t(D,[2,77]),t(D,[2,79]),t(D,[2,80],{75:[1,152]}),t(D,[2,83]),t(D,[2,84],{13:[1,153]}),t(D,[2,86],{13:[1,155],75:[1,154]}),{22:le,58:he,80:K,82:156,83:106,84:X,85:te,86:J,87:se,88:ue,89:Z},t(ze,[2,95]),t(Se,[2,60]),{39:[2,10]},{14:[1,157]},t(ae,[2,55]),t(D,[2,34]),{41:[2,38]},{41:[1,158]},t(D,[2,81]),t(D,[2,85]),t(D,[2,87]),t(D,[2,88],{75:[1,159]}),t(ge,[2,93],{83:144,22:le,58:he,80:K,84:X,85:te,86:J,87:se,88:ue,89:Z}),t(ce,[2,8]),t(P,[2,42]),t(D,[2,89])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],83:[2,35],122:[2,11],125:[2,4],135:[2,47],146:[2,10],150:[2,38]},parseError:o(function(be,W){if(W.recoverable)this.trace(be);else{var de=new Error(be);throw de.hash=W,de}},"parseError"),parse:o(function(be){var W=this,de=[0],re=[],oe=[null],V=[],xe=this.table,q="",pe=0,ve=0,Pe=0,_e=2,we=1,Ve=V.slice.call(arguments,1),De=Object.create(this.lexer),qe={yy:{}};for(var at in this.yy)Object.prototype.hasOwnProperty.call(this.yy,at)&&(qe.yy[at]=this.yy[at]);De.setInput(be,qe.yy),qe.yy.lexer=De,qe.yy.parser=this,typeof De.yylloc>"u"&&(De.yylloc={});var Rt=De.yylloc;V.push(Rt);var st=De.options&&De.options.ranges;typeof qe.yy.parseError=="function"?this.parseError=qe.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ue(Tt){de.length=de.length-2*Tt,oe.length=oe.length-Tt,V.length=V.length-Tt}o(Ue,"popStack");function ct(){var Tt;return Tt=re.pop()||De.lex()||we,typeof Tt!="number"&&(Tt instanceof Array&&(re=Tt,Tt=re.pop()),Tt=W.symbols_[Tt]||Tt),Tt}o(ct,"lex");for(var We,ot,Yt,bt,Mt,xt,ut={},Et,ft,yt,nt;;){if(Yt=de[de.length-1],this.defaultActions[Yt]?bt=this.defaultActions[Yt]:((We===null||typeof We>"u")&&(We=ct()),bt=xe[Yt]&&xe[Yt][We]),typeof bt>"u"||!bt.length||!bt[0]){var dn="";nt=[];for(Et in xe[Yt])this.terminals_[Et]&&Et>_e&&nt.push("'"+this.terminals_[Et]+"'");De.showPosition?dn="Parse error on line "+(pe+1)+`:
1365 +`+De.showPosition()+`
1366 +Expecting `+nt.join(", ")+", got '"+(this.terminals_[We]||We)+"'":dn="Parse error on line "+(pe+1)+": Unexpected "+(We==we?"end of input":"'"+(this.terminals_[We]||We)+"'"),this.parseError(dn,{text:De.match,token:this.terminals_[We]||We,line:De.yylineno,loc:Rt,expected:nt})}if(bt[0]instanceof Array&&bt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Yt+", token: "+We);switch(bt[0]){case 1:de.push(We),oe.push(De.yytext),V.push(De.yylloc),de.push(bt[1]),We=null,ot?(We=ot,ot=null):(ve=De.yyleng,q=De.yytext,pe=De.yylineno,Rt=De.yylloc,Pe>0&&Pe--);break;case 2:if(ft=this.productions_[bt[1]][1],ut.$=oe[oe.length-ft],ut._$={first_line:V[V.length-(ft||1)].first_line,last_line:V[V.length-1].last_line,first_column:V[V.length-(ft||1)].first_column,last_column:V[V.length-1].last_column},st&&(ut._$.range=[V[V.length-(ft||1)].range[0],V[V.length-1].range[1]]),xt=this.performAction.apply(ut,[q,ve,pe,qe.yy,bt[1],oe,V].concat(Ve)),typeof xt<"u")return xt;ft&&(de=de.slice(0,-1*ft*2),oe=oe.slice(0,-1*ft),V=V.slice(0,-1*ft)),de.push(this.productions_[bt[1]][0]),oe.push(ut.$),V.push(ut._$),yt=xe[de[de.length-2]][de[de.length-1]],de.push(yt);break;case 3:return!0}}return!0},"parse")},$e=function(){var Ie={EOF:1,parseError:o(function(W,de){if(this.yy.parser)this.yy.parser.parseError(W,de);else throw new Error(W)},"parseError"),setInput:o(function(be,W){return this.yy=W||this.yy||{},this._input=be,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var be=this._input[0];this.yytext+=be,this.yyleng++,this.offset++,this.match+=be,this.matched+=be;var W=be.match(/(?:\r\n?|\n).*/g);return W?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),be},"input"),unput:o(function(be){var W=be.length,de=be.split(/(?:\r\n?|\n)/g);this._input=be+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-W),this.offset-=W;var re=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),de.length-1&&(this.yylineno-=de.length-1);var oe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:de?(de.length===re.length?this.yylloc.first_column:0)+re[re.length-de.length].length-de[0].length:this.yylloc.first_column-W},this.options.ranges&&(this.yylloc.range=[oe[0],oe[0]+this.yyleng-W]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
1367 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(be){this.unput(this.match.slice(be))},"less"),pastInput:o(function(){var be=this.matched.substr(0,this.matched.length-this.match.length);return(be.length>20?"...":"")+be.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var be=this.match;return be.length<20&&(be+=this._input.substr(0,20-be.length)),(be.substr(0,20)+(be.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var be=this.pastInput(),W=new Array(be.length+1).join("-");return be+this.upcomingInput()+`
1368 +`+W+"^"},"showPosition"),test_match:o(function(be,W){var de,re,oe;if(this.options.backtrack_lexer&&(oe={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(oe.yylloc.range=this.yylloc.range.slice(0))),re=be[0].match(/(?:\r\n?|\n).*/g),re&&(this.yylineno+=re.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:re?re[re.length-1].length-re[re.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+be[0].length},this.yytext+=be[0],this.match+=be[0],this.matches=be,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(be[0].length),this.matched+=be[0],de=this.performAction.call(this,this.yy,this,W,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),de)return de;if(this._backtrack){for(var V in oe)this[V]=oe[V];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var be,W,de,re;this._more||(this.yytext="",this.match="");for(var oe=this._currentRules(),V=0;V<oe.length;V++)if(de=this._input.match(this.rules[oe[V]]),de&&(!W||de[0].length>W[0].length)){if(W=de,re=V,this.options.backtrack_lexer){if(be=this.test_match(de,oe[V]),be!==!1)return be;if(this._backtrack){W=!1;continue}else return!1}else if(!this.options.flex)break}return W?(be=this.test_match(W,oe[re]),be!==!1?be:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
1369 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var W=this.next();return W||this.lex()},"lex"),begin:o(function(W){this.conditionStack.push(W)},"begin"),popState:o(function(){var W=this.conditionStack.length-1;return W>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(W){return W=this.conditionStack.length-1-Math.abs(W||0),W>=0?this.conditionStack[W]:"INITIAL"},"topState"),pushState:o(function(W){this.begin(W)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(W,de,re,oe){var V=oe;switch(re){case 0:return 60;case 1:return 61;case 2:return 62;case 3:return 63;case 4:break;case 5:break;case 6:return this.begin("acc_title"),33;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),35;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 77;case 22:this.popState();break;case 23:return 78;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return 80;case 28:return 55;case 29:return this.begin("namespace"),42;break;case 30:return this.popState(),8;break;case 31:break;case 32:return this.begin("namespace-body"),39;break;case 33:return this.popState(),41;break;case 34:return"EOF_IN_STRUCT";case 35:return 8;case 36:break;case 37:return"EDGE_STATE";case 38:return this.begin("class"),46;break;case 39:return this.popState(),8;break;case 40:break;case 41:return this.popState(),this.popState(),41;break;case 42:return this.begin("class-body"),39;break;case 43:return this.popState(),41;break;case 44:return"EOF_IN_STRUCT";case 45:return"EDGE_STATE";case 46:return"OPEN_IN_STRUCT";case 47:break;case 48:return"MEMBER";case 49:return 81;case 50:return 73;case 51:return 74;case 52:return 76;case 53:return 52;case 54:return 54;case 55:return 47;case 56:return 48;case 57:return 79;case 58:this.popState();break;case 59:return"GENERICTYPE";case 60:this.begin("generic");break;case 61:this.popState();break;case 62:return"BQUOTE_STR";case 63:this.begin("bqstring");break;case 64:return 75;case 65:return 75;case 66:return 75;case 67:return 75;case 68:return 67;case 69:return 67;case 70:return 69;case 71:return 69;case 72:return 68;case 73:return 66;case 74:return 70;case 75:return 71;case 76:return 72;case 77:return 22;case 78:return 44;case 79:return 99;case 80:return 17;case 81:return"PLUS";case 82:return 85;case 83:return 59;case 84:return 88;case 85:return 88;case 86:return 89;case 87:return"EQUALS";case 88:return"EQUALS";case 89:return 58;case 90:return 12;case 91:return 14;case 92:return"PUNCTUATION";case 93:return 84;case 94:return 101;case 95:return 87;case 96:return 87;case 97:return 9}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:classDef\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,33,34,35,36,37,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},namespace:{rules:[26,29,30,31,32,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},"class-body":{rules:[26,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},class:{rules:[26,39,40,41,42,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr:{rules:[9,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_title:{rules:[7,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_args:{rules:[22,23,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_name:{rules:[19,20,21,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},href:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},struct:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},generic:{rules:[26,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},bqstring:{rules:[26,49,50,51,52,53,54,55,56,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},string:{rules:[24,25,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,29,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],inclusive:!0}}};return Ie}();He.lexer=$e;function Re(){this.yy={}}return o(Re,"Parser"),Re.prototype=He,He.Parser=Re,new Re}();MO.parser=MO;L6=MO});var Dfe,kb,Lfe=N(()=>{"use strict";zt();gr();Dfe=["#","+","~","-",""],kb=class{static{o(this,"ClassMember")}constructor(e,r){this.memberType=r,this.visibility="",this.classifier="",this.text="";let n=Tr(e,me());this.parseMember(n)}getDisplayDetails(){let e=this.visibility+ec(this.id);this.memberType==="method"&&(e+=`(${ec(this.parameters.trim())})`,this.returnType&&(e+=" : "+ec(this.returnType))),e=e.trim();let r=this.parseClassifier();return{displayText:e,cssStyle:r}}parseMember(e){let r="";if(this.memberType==="method"){let a=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/.exec(e);if(a){let s=a[1]?a[1].trim():"";if(Dfe.includes(s)&&(this.visibility=s),this.id=a[2],this.parameters=a[3]?a[3].trim():"",r=a[4]?a[4].trim():"",this.returnType=a[5]?a[5].trim():"",r===""){let l=this.returnType.substring(this.returnType.length-1);/[$*]/.exec(l)&&(r=l,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{let i=e.length,a=e.substring(0,1),s=e.substring(i-1);Dfe.includes(a)&&(this.visibility=a),/[$*]/.exec(s)&&(r=s),this.id=e.substring(this.visibility===""?0:1,r===""?i:i-1)}this.classifier=r,this.id=this.id.startsWith(" ")?" "+this.id.trim():this.id.trim();let n=`${this.visibility?"\\"+this.visibility:""}${ec(this.id)}${this.memberType==="method"?`(${ec(this.parameters)})${this.returnType?" : "+ec(this.returnType):""}`:""}`;this.text=n.replaceAll("<","&lt;").replaceAll(">","&gt;"),this.text.startsWith("\\&lt;")&&(this.text=this.text.replace("\\&lt;","~"))}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}});var R6,Rfe,Lp,D1,OO=N(()=>{"use strict";dr();vt();zt();gr();ir();mi();Lfe();R6="classId-",Rfe=0,Lp=o(t=>Ze.sanitizeText(t,me()),"sanitizeText"),D1=class{constructor(){this.relations=[];this.classes=new Map;this.styleClasses=new Map;this.notes=[];this.interfaces=[];this.namespaces=new Map;this.namespaceCounter=0;this.functions=[];this.lineType={LINE:0,DOTTED_LINE:1};this.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4};this.setupToolTips=o(e=>{let r=Ge(".mermaidTooltip");(r._groups||r)[0][0]===null&&(r=Ge("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),Ge(e).select("svg").selectAll("g.node").on("mouseover",a=>{let s=Ge(a.currentTarget);if(s.attr("title")===null)return;let u=this.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.text(s.attr("title")).style("left",window.scrollX+u.left+(u.right-u.left)/2+"px").style("top",window.scrollY+u.top-14+document.body.scrollTop+"px"),r.html(r.html().replace(/&lt;br\/&gt;/g,"<br/>")),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),Ge(a.currentTarget).classed("hover",!1)})},"setupToolTips");this.direction="TB";this.setAccTitle=Lr;this.getAccTitle=Rr;this.setAccDescription=Nr;this.getAccDescription=Mr;this.setDiagramTitle=$r;this.getDiagramTitle=Ir;this.getConfig=o(()=>me().class,"getConfig");this.functions.push(this.setupToolTips.bind(this)),this.clear(),this.addRelation=this.addRelation.bind(this),this.addClassesToNamespace=this.addClassesToNamespace.bind(this),this.addNamespace=this.addNamespace.bind(this),this.setCssClass=this.setCssClass.bind(this),this.addMembers=this.addMembers.bind(this),this.addClass=this.addClass.bind(this),this.setClassLabel=this.setClassLabel.bind(this),this.addAnnotation=this.addAnnotation.bind(this),this.addMember=this.addMember.bind(this),this.cleanupLabel=this.cleanupLabel.bind(this),this.addNote=this.addNote.bind(this),this.defineClass=this.defineClass.bind(this),this.setDirection=this.setDirection.bind(this),this.setLink=this.setLink.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.clear=this.clear.bind(this),this.setTooltip=this.setTooltip.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setCssStyle=this.setCssStyle.bind(this)}static{o(this,"ClassDB")}splitClassNameAndType(e){let r=Ze.sanitizeText(e,me()),n="",i=r;if(r.indexOf("~")>0){let a=r.split("~");i=Lp(a[0]),n=Lp(a[1])}return{className:i,type:n}}setClassLabel(e,r){let n=Ze.sanitizeText(e,me());r&&(r=Lp(r));let{className:i}=this.splitClassNameAndType(n);this.classes.get(i).label=r,this.classes.get(i).text=`${r}${this.classes.get(i).type?`<${this.classes.get(i).type}>`:""}`}addClass(e){let r=Ze.sanitizeText(e,me()),{className:n,type:i}=this.splitClassNameAndType(r);if(this.classes.has(n))return;let a=Ze.sanitizeText(n,me());this.classes.set(a,{id:a,type:i,label:a,text:`${a}${i?`&lt;${i}&gt;`:""}`,shape:"classBox",cssClasses:"default",methods:[],members:[],annotations:[],styles:[],domId:R6+a+"-"+Rfe}),Rfe++}addInterface(e,r){let n={id:`interface${this.interfaces.length}`,label:e,classId:r};this.interfaces.push(n)}lookUpDomId(e){let r=Ze.sanitizeText(e,me());if(this.classes.has(r))return this.classes.get(r).domId;throw new Error("Class not found: "+r)}clear(){this.relations=[],this.classes=new Map,this.notes=[],this.interfaces=[],this.functions=[],this.functions.push(this.setupToolTips.bind(this)),this.namespaces=new Map,this.namespaceCounter=0,this.direction="TB",Ar()}getClass(e){return this.classes.get(e)}getClasses(){return this.classes}getRelations(){return this.relations}getNotes(){return this.notes}addRelation(e){Y.debug("Adding relation: "+JSON.stringify(e));let r=[this.relationType.LOLLIPOP,this.relationType.AGGREGATION,this.relationType.COMPOSITION,this.relationType.DEPENDENCY,this.relationType.EXTENSION];e.relation.type1===this.relationType.LOLLIPOP&&!r.includes(e.relation.type2)?(this.addClass(e.id2),this.addInterface(e.id1,e.id2),e.id1=`interface${this.interfaces.length-1}`):e.relation.type2===this.relationType.LOLLIPOP&&!r.includes(e.relation.type1)?(this.addClass(e.id1),this.addInterface(e.id2,e.id1),e.id2=`interface${this.interfaces.length-1}`):(this.addClass(e.id1),this.addClass(e.id2)),e.id1=this.splitClassNameAndType(e.id1).className,e.id2=this.splitClassNameAndType(e.id2).className,e.relationTitle1=Ze.sanitizeText(e.relationTitle1.trim(),me()),e.relationTitle2=Ze.sanitizeText(e.relationTitle2.trim(),me()),this.relations.push(e)}addAnnotation(e,r){let n=this.splitClassNameAndType(e).className;this.classes.get(n).annotations.push(r)}addMember(e,r){this.addClass(e);let n=this.splitClassNameAndType(e).className,i=this.classes.get(n);if(typeof r=="string"){let a=r.trim();a.startsWith("<<")&&a.endsWith(">>")?i.annotations.push(Lp(a.substring(2,a.length-2))):a.indexOf(")")>0?i.methods.push(new kb(a,"method")):a&&i.members.push(new kb(a,"attribute"))}}addMembers(e,r){Array.isArray(r)&&(r.reverse(),r.forEach(n=>this.addMember(e,n)))}addNote(e,r){let n={id:`note${this.notes.length}`,class:r,text:e};this.notes.push(n)}cleanupLabel(e){return e.startsWith(":")&&(e=e.substring(1)),Lp(e.trim())}setCssClass(e,r){e.split(",").forEach(n=>{let i=n;/\d/.exec(n[0])&&(i=R6+i);let a=this.classes.get(i);a&&(a.cssClasses+=" "+r)})}defineClass(e,r){for(let n of e){let i=this.styleClasses.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.styleClasses.set(n,i)),r&&r.forEach(a=>{if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)}),this.classes.forEach(a=>{a.cssClasses.includes(n)&&a.styles.push(...r.flatMap(s=>s.split(",")))})}}setTooltip(e,r){e.split(",").forEach(n=>{r!==void 0&&(this.classes.get(n).tooltip=Lp(r))})}getTooltip(e,r){return r&&this.namespaces.has(r)?this.namespaces.get(r).classes.get(e).tooltip:this.classes.get(e).tooltip}setLink(e,r,n){let i=me();e.split(",").forEach(a=>{let s=a;/\d/.exec(a[0])&&(s=R6+s);let l=this.classes.get(s);l&&(l.link=Gt.formatUrl(r,i),i.securityLevel==="sandbox"?l.linkTarget="_top":typeof n=="string"?l.linkTarget=Lp(n):l.linkTarget="_blank")}),this.setCssClass(e,"clickable")}setClickEvent(e,r,n){e.split(",").forEach(i=>{this.setClickFunc(i,r,n),this.classes.get(i).haveCallback=!0}),this.setCssClass(e,"clickable")}setClickFunc(e,r,n){let i=Ze.sanitizeText(e,me());if(me().securityLevel!=="loose"||r===void 0)return;let s=i;if(this.classes.has(s)){let l=this.lookUpDomId(s),u=[];if(typeof n=="string"){u=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let h=0;h<u.length;h++){let f=u[h].trim();f.startsWith('"')&&f.endsWith('"')&&(f=f.substr(1,f.length-2)),u[h]=f}}u.length===0&&u.push(l),this.functions.push(()=>{let h=document.querySelector(`[id="${l}"]`);h!==null&&h.addEventListener("click",()=>{Gt.runFunc(r,...u)},!1)})}}bindFunctions(e){this.functions.forEach(r=>{r(e)})}getDirection(){return this.direction}setDirection(e){this.direction=e}addNamespace(e){this.namespaces.has(e)||(this.namespaces.set(e,{id:e,classes:new Map,children:{},domId:R6+e+"-"+this.namespaceCounter}),this.namespaceCounter++)}getNamespace(e){return this.namespaces.get(e)}getNamespaces(){return this.namespaces}addClassesToNamespace(e,r){if(this.namespaces.has(e))for(let n of r){let{className:i}=this.splitClassNameAndType(n);this.classes.get(i).parent=e,this.namespaces.get(e).classes.set(i,this.classes.get(i))}}setCssStyle(e,r){let n=this.classes.get(e);if(!(!r||!n))for(let i of r)i.includes(",")?n.styles.push(...i.split(",")):n.styles.push(i)}getArrowMarker(e){let r;switch(e){case 0:r="aggregation";break;case 1:r="extension";break;case 2:r="composition";break;case 3:r="dependency";break;case 4:r="lollipop";break;default:r="none"}return r}getData(){let e=[],r=[],n=me();for(let a of this.namespaces.keys()){let s=this.namespaces.get(a);if(s){let l={id:s.id,label:s.id,isGroup:!0,padding:n.class.padding??16,shape:"rect",cssStyles:["fill: none","stroke: black"],look:n.look};e.push(l)}}for(let a of this.classes.keys()){let s=this.classes.get(a);if(s){let l=s;l.parentId=s.parent,l.look=n.look,e.push(l)}}let i=0;for(let a of this.notes){i++;let s={id:a.id,label:a.text,isGroup:!1,shape:"note",padding:n.class.padding??6,cssStyles:["text-align: left","white-space: nowrap",`fill: ${n.themeVariables.noteBkgColor}`,`stroke: ${n.themeVariables.noteBorderColor}`],look:n.look};e.push(s);let l=this.classes.get(a.class)?.id??"";if(l){let u={id:`edgeNote${i}`,start:a.id,end:l,type:"normal",thickness:"normal",classes:"relation",arrowTypeStart:"none",arrowTypeEnd:"none",arrowheadStyle:"",labelStyle:[""],style:["fill: none"],pattern:"dotted",look:n.look};r.push(u)}}for(let a of this.interfaces){let s={id:a.id,label:a.label,isGroup:!1,shape:"rect",cssStyles:["opacity: 0;"],look:n.look};e.push(s)}i=0;for(let a of this.relations){i++;let s={id:$h(a.id1,a.id2,{prefix:"id",counter:i}),start:a.id1,end:a.id2,type:"normal",label:a.title,labelpos:"c",thickness:"normal",classes:"relation",arrowTypeStart:this.getArrowMarker(a.relation.type1),arrowTypeEnd:this.getArrowMarker(a.relation.type2),startLabelRight:a.relationTitle1==="none"?"":a.relationTitle1,endLabelLeft:a.relationTitle2==="none"?"":a.relationTitle2,arrowheadStyle:"",labelStyle:["display: inline-block"],style:a.style||"",pattern:a.relation.lineType==1?"dashed":"solid",look:n.look};r.push(s)}return{nodes:e,edges:r,other:{},config:n,direction:this.getDirection()}}}});var UVe,N6,PO=N(()=>{"use strict";UVe=o(t=>`g.classGroup text {
1370 + fill: ${t.nodeBorder||t.classText};
1371 + stroke: none;
1372 + font-family: ${t.fontFamily};
1373 + font-size: 10px;
1374 +
1375 + .title {
1376 + font-weight: bolder;
1377 + }
1378 +
1379 +}
1380 +
1381 +.nodeLabel, .edgeLabel {
1382 + color: ${t.classText};
1383 +}
1384 +.edgeLabel .label rect {
1385 + fill: ${t.mainBkg};
1386 +}
1387 +.label text {
1388 + fill: ${t.classText};
1389 +}
1390 +
1391 +.labelBkg {
1392 + background: ${t.mainBkg};
1393 +}
1394 +.edgeLabel .label span {
1395 + background: ${t.mainBkg};
1396 +}
1397 +
1398 +.classTitle {
1399 + font-weight: bolder;
1400 +}
1401 +.node rect,
1402 + .node circle,
1403 + .node ellipse,
1404 + .node polygon,
1405 + .node path {
1406 + fill: ${t.mainBkg};
1407 + stroke: ${t.nodeBorder};
1408 + stroke-width: 1px;
1409 + }
1410 +
1411 +
1412 +.divider {
1413 + stroke: ${t.nodeBorder};
1414 + stroke-width: 1;
1415 +}
1416 +
1417 +g.clickable {
1418 + cursor: pointer;
1419 +}
1420 +
1421 +g.classGroup rect {
1422 + fill: ${t.mainBkg};
1423 + stroke: ${t.nodeBorder};
1424 +}
1425 +
1426 +g.classGroup line {
1427 + stroke: ${t.nodeBorder};
1428 + stroke-width: 1;
1429 +}
1430 +
1431 +.classLabel .box {
1432 + stroke: none;
1433 + stroke-width: 0;
1434 + fill: ${t.mainBkg};
1435 + opacity: 0.5;
1436 +}
1437 +
1438 +.classLabel .label {
1439 + fill: ${t.nodeBorder};
1440 + font-size: 10px;
1441 +}
1442 +
1443 +.relation {
1444 + stroke: ${t.lineColor};
1445 + stroke-width: 1;
1446 + fill: none;
1447 +}
1448 +
1449 +.dashed-line{
1450 + stroke-dasharray: 3;
1451 +}
1452 +
1453 +.dotted-line{
1454 + stroke-dasharray: 1 2;
1455 +}
1456 +
1457 +#compositionStart, .composition {
1458 + fill: ${t.lineColor} !important;
1459 + stroke: ${t.lineColor} !important;
1460 + stroke-width: 1;
1461 +}
1462 +
1463 +#compositionEnd, .composition {
1464 + fill: ${t.lineColor} !important;
1465 + stroke: ${t.lineColor} !important;
1466 + stroke-width: 1;
1467 +}
1468 +
1469 +#dependencyStart, .dependency {
1470 + fill: ${t.lineColor} !important;
1471 + stroke: ${t.lineColor} !important;
1472 + stroke-width: 1;
1473 +}
1474 +
1475 +#dependencyStart, .dependency {
1476 + fill: ${t.lineColor} !important;
1477 + stroke: ${t.lineColor} !important;
1478 + stroke-width: 1;
1479 +}
1480 +
1481 +#extensionStart, .extension {
1482 + fill: transparent !important;
1483 + stroke: ${t.lineColor} !important;
1484 + stroke-width: 1;
1485 +}
1486 +
1487 +#extensionEnd, .extension {
1488 + fill: transparent !important;
1489 + stroke: ${t.lineColor} !important;
1490 + stroke-width: 1;
1491 +}
1492 +
1493 +#aggregationStart, .aggregation {
1494 + fill: transparent !important;
1495 + stroke: ${t.lineColor} !important;
1496 + stroke-width: 1;
1497 +}
1498 +
1499 +#aggregationEnd, .aggregation {
1500 + fill: transparent !important;
1501 + stroke: ${t.lineColor} !important;
1502 + stroke-width: 1;
1503 +}
1504 +
1505 +#lollipopStart, .lollipop {
1506 + fill: ${t.mainBkg} !important;
1507 + stroke: ${t.lineColor} !important;
1508 + stroke-width: 1;
1509 +}
1510 +
1511 +#lollipopEnd, .lollipop {
1512 + fill: ${t.mainBkg} !important;
1513 + stroke: ${t.lineColor} !important;
1514 + stroke-width: 1;
1515 +}
1516 +
1517 +.edgeTerminals {
1518 + font-size: 11px;
1519 + line-height: initial;
1520 +}
1521 +
1522 +.classTitleText {
1523 + text-anchor: middle;
1524 + font-size: 18px;
1525 + fill: ${t.textColor};
1526 +}
1527 +`,"getStyles"),N6=UVe});var HVe,WVe,qVe,M6,BO=N(()=>{"use strict";zt();vt();gm();Yd();$m();ir();HVe=o((t,e="TB")=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),WVe=o(function(t,e){return e.db.getClasses()},"getClasses"),qVe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing class diagram (v3)",e);let{securityLevel:i,state:a,layout:s}=me(),l=n.db.getData(),u=yc(e,i);l.type=n.type,l.layoutAlgorithm=nf(s),l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["aggregation","extension","composition","dependency","lollipop"],l.diagramId=e,await Cc(l,u);let h=8;Gt.insertTitle(u,"classDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ac(u,h,"classDiagram",a?.useMaxWidth??!0)},"draw"),M6={getClasses:WVe,draw:qVe,getDir:HVe}});var Nfe={};hr(Nfe,{diagram:()=>YVe});var YVe,Mfe=N(()=>{"use strict";IO();OO();PO();BO();YVe={parser:L6,get db(){return new D1},renderer:M6,styles:N6,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var Pfe={};hr(Pfe,{diagram:()=>QVe});var QVe,Bfe=N(()=>{"use strict";IO();OO();PO();BO();QVe={parser:L6,get db(){return new D1},renderer:M6,styles:N6,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var FO,I6,$O=N(()=>{"use strict";FO=function(){var t=o(function(F,P,z,$){for(z=z||{},$=F.length;$--;z[F[$]]=P);return z},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,16],u=[1,17],h=[1,18],f=[1,19],d=[1,32],p=[1,20],m=[1,21],g=[1,22],y=[1,23],v=[1,24],x=[1,26],b=[1,27],w=[1,28],C=[1,29],T=[1,30],E=[1,31],A=[1,34],S=[1,35],_=[1,36],I=[1,37],D=[1,33],k=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],L=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],R=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],O={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"-->":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,classDef:38,CLASSDEF_ID:39,CLASSDEF_STYLEOPTS:40,DEFAULT:41,style:42,STYLE_IDS:43,STYLEDEF_STYLEOPTS:44,class:45,CLASSENTITY_IDS:46,STYLECLASS:47,direction_tb:48,direction_bt:49,direction_rl:50,direction_lr:51,eol:52,";":53,EDGE_STATE:54,STYLE_SEPARATOR:55,left_of:56,right_of:57,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",14:"DESCR",15:"-->",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"classDef",39:"CLASSDEF_ID",40:"CLASSDEF_STYLEOPTS",41:"DEFAULT",42:"style",43:"STYLE_IDS",44:"STYLEDEF_STYLEOPTS",45:"class",46:"CLASSENTITY_IDS",47:"STYLECLASS",48:"direction_tb",49:"direction_bt",50:"direction_rl",51:"direction_lr",53:";",54:"EDGE_STATE",55:"STYLE_SEPARATOR",56:"left_of",57:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[52,1],[52,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:o(function(P,z,$,H,Q,j,ie){var ne=j.length-1;switch(Q){case 3:return H.setRootDoc(j[ne]),j[ne];break;case 4:this.$=[];break;case 5:j[ne]!="nl"&&(j[ne-1].push(j[ne]),this.$=j[ne-1]);break;case 6:case 7:this.$=j[ne];break;case 8:this.$="nl";break;case 12:this.$=j[ne];break;case 13:let X=j[ne-1];X.description=H.trimColon(j[ne]),this.$=X;break;case 14:this.$={stmt:"relation",state1:j[ne-2],state2:j[ne]};break;case 15:let te=H.trimColon(j[ne]);this.$={stmt:"relation",state1:j[ne-3],state2:j[ne-1],description:te};break;case 19:this.$={stmt:"state",id:j[ne-3],type:"default",description:"",doc:j[ne-1]};break;case 20:var le=j[ne],he=j[ne-2].trim();if(j[ne].match(":")){var K=j[ne].split(":");le=K[0],he=[he,K[1]]}this.$={stmt:"state",id:le,type:"default",description:he};break;case 21:this.$={stmt:"state",id:j[ne-3],type:"default",description:j[ne-5],doc:j[ne-1]};break;case 22:this.$={stmt:"state",id:j[ne],type:"fork"};break;case 23:this.$={stmt:"state",id:j[ne],type:"join"};break;case 24:this.$={stmt:"state",id:j[ne],type:"choice"};break;case 25:this.$={stmt:"state",id:H.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:j[ne-1].trim(),note:{position:j[ne-2].trim(),text:j[ne].trim()}};break;case 29:this.$=j[ne].trim(),H.setAccTitle(this.$);break;case 30:case 31:this.$=j[ne].trim(),H.setAccDescription(this.$);break;case 32:case 33:this.$={stmt:"classDef",id:j[ne-1].trim(),classes:j[ne].trim()};break;case 34:this.$={stmt:"style",id:j[ne-1].trim(),styleClass:j[ne].trim()};break;case 35:this.$={stmt:"applyClass",id:j[ne-1].trim(),styleClass:j[ne].trim()};break;case 36:H.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 37:H.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 38:H.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 39:H.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 42:case 43:this.$={stmt:"state",id:j[ne].trim(),type:"default",description:""};break;case 44:this.$={stmt:"state",id:j[ne-2].trim(),classes:[j[ne].trim()],type:"default",description:""};break;case 45:this.$={stmt:"state",id:j[ne-2].trim(),classes:[j[ne].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,42:T,45:E,48:A,49:S,50:_,51:I,54:D},t(k,[2,5]),{9:38,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,42:T,45:E,48:A,49:S,50:_,51:I,54:D},t(k,[2,7]),t(k,[2,8]),t(k,[2,9]),t(k,[2,10]),t(k,[2,11]),t(k,[2,12],{14:[1,39],15:[1,40]}),t(k,[2,16]),{18:[1,41]},t(k,[2,18],{20:[1,42]}),{23:[1,43]},t(k,[2,22]),t(k,[2,23]),t(k,[2,24]),t(k,[2,25]),{30:44,31:[1,45],56:[1,46],57:[1,47]},t(k,[2,28]),{34:[1,48]},{36:[1,49]},t(k,[2,31]),{39:[1,50],41:[1,51]},{43:[1,52]},{46:[1,53]},t(L,[2,42],{55:[1,54]}),t(L,[2,43],{55:[1,55]}),t(k,[2,36]),t(k,[2,37]),t(k,[2,38]),t(k,[2,39]),t(k,[2,6]),t(k,[2,13]),{13:56,24:d,54:D},t(k,[2,17]),t(R,i,{7:57}),{24:[1,58]},{24:[1,59]},{23:[1,60]},{24:[2,46]},{24:[2,47]},t(k,[2,29]),t(k,[2,30]),{40:[1,61]},{40:[1,62]},{44:[1,63]},{47:[1,64]},{24:[1,65]},{24:[1,66]},t(k,[2,14],{14:[1,67]}),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,68],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,42:T,45:E,48:A,49:S,50:_,51:I,54:D},t(k,[2,20],{20:[1,69]}),{31:[1,70]},{24:[1,71]},t(k,[2,32]),t(k,[2,33]),t(k,[2,34]),t(k,[2,35]),t(L,[2,44]),t(L,[2,45]),t(k,[2,15]),t(k,[2,19]),t(R,i,{7:72}),t(k,[2,26]),t(k,[2,27]),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,73],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,42:T,45:E,48:A,49:S,50:_,51:I,54:D},t(k,[2,21])],defaultActions:{5:[2,1],6:[2,2],46:[2,46],47:[2,47]},parseError:o(function(P,z){if(z.recoverable)this.trace(P);else{var $=new Error(P);throw $.hash=z,$}},"parseError"),parse:o(function(P){var z=this,$=[0],H=[],Q=[null],j=[],ie=this.table,ne="",le=0,he=0,K=0,X=2,te=1,J=j.slice.call(arguments,1),se=Object.create(this.lexer),ue={yy:{}};for(var Z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Z)&&(ue.yy[Z]=this.yy[Z]);se.setInput(P,ue.yy),ue.yy.lexer=se,ue.yy.parser=this,typeof se.yylloc>"u"&&(se.yylloc={});var Se=se.yylloc;j.push(Se);var ce=se.options&&se.options.ranges;typeof ue.yy.parseError=="function"?this.parseError=ue.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ae(xe){$.length=$.length-2*xe,Q.length=Q.length-xe,j.length=j.length-xe}o(ae,"popStack");function Oe(){var xe;return xe=H.pop()||se.lex()||te,typeof xe!="number"&&(xe instanceof Array&&(H=xe,xe=H.pop()),xe=z.symbols_[xe]||xe),xe}o(Oe,"lex");for(var ge,ze,He,$e,Re,Ie,be={},W,de,re,oe;;){if(He=$[$.length-1],this.defaultActions[He]?$e=this.defaultActions[He]:((ge===null||typeof ge>"u")&&(ge=Oe()),$e=ie[He]&&ie[He][ge]),typeof $e>"u"||!$e.length||!$e[0]){var V="";oe=[];for(W in ie[He])this.terminals_[W]&&W>X&&oe.push("'"+this.terminals_[W]+"'");se.showPosition?V="Parse error on line "+(le+1)+`:
1528 +`+se.showPosition()+`
1529 +Expecting `+oe.join(", ")+", got '"+(this.terminals_[ge]||ge)+"'":V="Parse error on line "+(le+1)+": Unexpected "+(ge==te?"end of input":"'"+(this.terminals_[ge]||ge)+"'"),this.parseError(V,{text:se.match,token:this.terminals_[ge]||ge,line:se.yylineno,loc:Se,expected:oe})}if($e[0]instanceof Array&&$e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+He+", token: "+ge);switch($e[0]){case 1:$.push(ge),Q.push(se.yytext),j.push(se.yylloc),$.push($e[1]),ge=null,ze?(ge=ze,ze=null):(he=se.yyleng,ne=se.yytext,le=se.yylineno,Se=se.yylloc,K>0&&K--);break;case 2:if(de=this.productions_[$e[1]][1],be.$=Q[Q.length-de],be._$={first_line:j[j.length-(de||1)].first_line,last_line:j[j.length-1].last_line,first_column:j[j.length-(de||1)].first_column,last_column:j[j.length-1].last_column},ce&&(be._$.range=[j[j.length-(de||1)].range[0],j[j.length-1].range[1]]),Ie=this.performAction.apply(be,[ne,he,le,ue.yy,$e[1],Q,j].concat(J)),typeof Ie<"u")return Ie;de&&($=$.slice(0,-1*de*2),Q=Q.slice(0,-1*de),j=j.slice(0,-1*de)),$.push(this.productions_[$e[1]][0]),Q.push(be.$),j.push(be._$),re=ie[$[$.length-2]][$[$.length-1]],$.push(re);break;case 3:return!0}}return!0},"parse")},M=function(){var F={EOF:1,parseError:o(function(z,$){if(this.yy.parser)this.yy.parser.parseError(z,$);else throw new Error(z)},"parseError"),setInput:o(function(P,z){return this.yy=z||this.yy||{},this._input=P,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var P=this._input[0];this.yytext+=P,this.yyleng++,this.offset++,this.match+=P,this.matched+=P;var z=P.match(/(?:\r\n?|\n).*/g);return z?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),P},"input"),unput:o(function(P){var z=P.length,$=P.split(/(?:\r\n?|\n)/g);this._input=P+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-z),this.offset-=z;var H=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),$.length-1&&(this.yylineno-=$.length-1);var Q=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:$?($.length===H.length?this.yylloc.first_column:0)+H[H.length-$.length].length-$[0].length:this.yylloc.first_column-z},this.options.ranges&&(this.yylloc.range=[Q[0],Q[0]+this.yyleng-z]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
1530 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(P){this.unput(this.match.slice(P))},"less"),pastInput:o(function(){var P=this.matched.substr(0,this.matched.length-this.match.length);return(P.length>20?"...":"")+P.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var P=this.match;return P.length<20&&(P+=this._input.substr(0,20-P.length)),(P.substr(0,20)+(P.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var P=this.pastInput(),z=new Array(P.length+1).join("-");return P+this.upcomingInput()+`
1531 +`+z+"^"},"showPosition"),test_match:o(function(P,z){var $,H,Q;if(this.options.backtrack_lexer&&(Q={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Q.yylloc.range=this.yylloc.range.slice(0))),H=P[0].match(/(?:\r\n?|\n).*/g),H&&(this.yylineno+=H.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:H?H[H.length-1].length-H[H.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+P[0].length},this.yytext+=P[0],this.match+=P[0],this.matches=P,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(P[0].length),this.matched+=P[0],$=this.performAction.call(this,this.yy,this,z,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),$)return $;if(this._backtrack){for(var j in Q)this[j]=Q[j];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var P,z,$,H;this._more||(this.yytext="",this.match="");for(var Q=this._currentRules(),j=0;j<Q.length;j++)if($=this._input.match(this.rules[Q[j]]),$&&(!z||$[0].length>z[0].length)){if(z=$,H=j,this.options.backtrack_lexer){if(P=this.test_match($,Q[j]),P!==!1)return P;if(this._backtrack){z=!1;continue}else return!1}else if(!this.options.flex)break}return z?(P=this.test_match(z,Q[H]),P!==!1?P:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
1532 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var z=this.next();return z||this.lex()},"lex"),begin:o(function(z){this.conditionStack.push(z)},"begin"),popState:o(function(){var z=this.conditionStack.length-1;return z>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(z){return z=this.conditionStack.length-1-Math.abs(z||0),z>=0?this.conditionStack[z]:"INITIAL"},"topState"),pushState:o(function(z){this.begin(z)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(z,$,H,Q){var j=Q;switch(H){case 0:return 41;case 1:return 48;case 2:return 49;case 3:return 50;case 4:return 51;case 5:break;case 6:break;case 7:return 5;case 8:break;case 9:break;case 10:break;case 11:break;case 12:return this.pushState("SCALE"),17;break;case 13:return 18;case 14:this.popState();break;case 15:return this.begin("acc_title"),33;break;case 16:return this.popState(),"acc_title_value";break;case 17:return this.begin("acc_descr"),35;break;case 18:return this.popState(),"acc_descr_value";break;case 19:this.begin("acc_descr_multiline");break;case 20:this.popState();break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),38;break;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 24:return this.popState(),this.pushState("CLASSDEFID"),39;break;case 25:return this.popState(),40;break;case 26:return this.pushState("CLASS"),45;break;case 27:return this.popState(),this.pushState("CLASS_STYLE"),46;break;case 28:return this.popState(),47;break;case 29:return this.pushState("STYLE"),42;break;case 30:return this.popState(),this.pushState("STYLEDEF_STYLES"),43;break;case 31:return this.popState(),44;break;case 32:return this.pushState("SCALE"),17;break;case 33:return 18;case 34:this.popState();break;case 35:this.pushState("STATE");break;case 36:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),25;break;case 37:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),26;break;case 38:return this.popState(),$.yytext=$.yytext.slice(0,-10).trim(),27;break;case 39:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),25;break;case 40:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),26;break;case 41:return this.popState(),$.yytext=$.yytext.slice(0,-10).trim(),27;break;case 42:return 48;case 43:return 49;case 44:return 50;case 45:return 51;case 46:this.pushState("STATE_STRING");break;case 47:return this.pushState("STATE_ID"),"AS";break;case 48:return this.popState(),"ID";break;case 49:this.popState();break;case 50:return"STATE_DESCR";case 51:return 19;case 52:this.popState();break;case 53:return this.popState(),this.pushState("struct"),20;break;case 54:break;case 55:return this.popState(),21;break;case 56:break;case 57:return this.begin("NOTE"),29;break;case 58:return this.popState(),this.pushState("NOTE_ID"),56;break;case 59:return this.popState(),this.pushState("NOTE_ID"),57;break;case 60:this.popState(),this.pushState("FLOATING_NOTE");break;case 61:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";break;case 62:break;case 63:return"NOTE_TEXT";case 64:return this.popState(),"ID";break;case 65:return this.popState(),this.pushState("NOTE_TEXT"),24;break;case 66:return this.popState(),$.yytext=$.yytext.substr(2).trim(),31;break;case 67:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),31;break;case 68:return 6;case 69:return 6;case 70:return 16;case 71:return 54;case 72:return 24;case 73:return $.yytext=$.yytext.trim(),14;break;case 74:return 15;case 75:return 28;case 76:return 55;case 77:return 5;case 78:return"INVALID"}},"anonymous"),rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:style\s+)/i,/^(?:[\w,]+\s+)/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<<fork>>)/i,/^(?:.*<<join>>)/i,/^(?:.*<<choice>>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,29,35,42,43,44,45,54,55,56,57,71,72,73,74,75],inclusive:!1},FLOATING_NOTE_ID:{rules:[64],inclusive:!1},FLOATING_NOTE:{rules:[61,62,63],inclusive:!1},NOTE_TEXT:{rules:[66,67],inclusive:!1},NOTE_ID:{rules:[65],inclusive:!1},NOTE:{rules:[58,59,60],inclusive:!1},STYLEDEF_STYLEOPTS:{rules:[],inclusive:!1},STYLEDEF_STYLES:{rules:[31],inclusive:!1},STYLE_IDS:{rules:[],inclusive:!1},STYLE:{rules:[30],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,33,34],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[48],inclusive:!1},STATE_STRING:{rules:[49,50],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,36,37,38,39,40,41,46,47,51,52,53],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,35,53,57,68,69,70,71,72,73,74,76,77,78],inclusive:!0}}};return F}();O.lexer=M;function B(){this.yy={}}return o(B,"Parser"),B.prototype=O,O.Parser=B,new B}();FO.parser=FO;I6=FO});var zfe,O6,zO,L1,Eb,Gfe,Vfe,Ufe,Rp,P6,GO,VO,UO,HO,WO,B6,F6,Hfe,Wfe,qO,YO,qfe,Yfe,R1,tUe,Xfe,XO,rUe,nUe,jfe,Kfe,iUe,Qfe,aUe,Zfe,jO,KO,Jfe,$6,ede,QO,z6=N(()=>{"use strict";zfe="TB",O6="TB",zO="dir",L1="state",Eb="relation",Gfe="classDef",Vfe="style",Ufe="applyClass",Rp="default",P6="divider",GO="fill:none",VO="fill: #333",UO="c",HO="text",WO="normal",B6="rect",F6="rectWithTitle",Hfe="stateStart",Wfe="stateEnd",qO="divider",YO="roundedWithTitle",qfe="note",Yfe="noteGroup",R1="statediagram",tUe="state",Xfe=`${R1}-${tUe}`,XO="transition",rUe="note",nUe="note-edge",jfe=`${XO} ${nUe}`,Kfe=`${R1}-${rUe}`,iUe="cluster",Qfe=`${R1}-${iUe}`,aUe="cluster-alt",Zfe=`${R1}-${aUe}`,jO="parent",KO="note",Jfe="state",$6="----",ede=`${$6}${KO}`,QO=`${$6}${jO}`});function ZO(t="",e=0,r="",n=$6){let i=r!==null&&r.length>0?`${n}${r}`:"";return`${Jfe}-${t}${i}-${e}`}function G6(t,e,r){if(!e.id||e.id==="</join></fork>"||e.id==="</choice>")return;e.cssClasses&&(Array.isArray(e.cssCompiledStyles)||(e.cssCompiledStyles=[]),e.cssClasses.split(" ").forEach(i=>{if(r.get(i)){let a=r.get(i);e.cssCompiledStyles=[...e.cssCompiledStyles,...a.styles]}}));let n=t.find(i=>i.id===e.id);n?Object.assign(n,e):t.push(e)}function oUe(t){return t?.classes?.join(" ")??""}function lUe(t){return t?.styles??[]}var V6,xf,sUe,tde,N1,rde,nde=N(()=>{"use strict";zt();vt();gr();z6();V6=new Map,xf=0;o(ZO,"stateDomId");sUe=o((t,e,r,n,i,a,s,l)=>{Y.trace("items",e),e.forEach(u=>{switch(u.stmt){case L1:N1(t,u,r,n,i,a,s,l);break;case Rp:N1(t,u,r,n,i,a,s,l);break;case Eb:{N1(t,u.state1,r,n,i,a,s,l),N1(t,u.state2,r,n,i,a,s,l);let h={id:"edge"+xf,start:u.state1.id,end:u.state2.id,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:GO,labelStyle:"",label:Ze.sanitizeText(u.description,me()),arrowheadStyle:VO,labelpos:UO,labelType:HO,thickness:WO,classes:XO,look:s};i.push(h),xf++}break}})},"setupDoc"),tde=o((t,e=O6)=>{let r=e;if(t.doc)for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir");o(G6,"insertOrUpdateNode");o(oUe,"getClassesFromDbInfo");o(lUe,"getStylesFromDbInfo");N1=o((t,e,r,n,i,a,s,l)=>{let u=e.id,h=r.get(u),f=oUe(h),d=lUe(h);if(Y.info("dataFetcher parsedItem",e,h,d),u!=="root"){let p=B6;e.start===!0?p=Hfe:e.start===!1&&(p=Wfe),e.type!==Rp&&(p=e.type),V6.get(u)||V6.set(u,{id:u,shape:p,description:Ze.sanitizeText(u,me()),cssClasses:`${f} ${Xfe}`,cssStyles:d});let m=V6.get(u);e.description&&(Array.isArray(m.description)?(m.shape=F6,m.description.push(e.description)):m.description?.length>0?(m.shape=F6,m.description===u?m.description=[e.description]:m.description=[m.description,e.description]):(m.shape=B6,m.description=e.description),m.description=Ze.sanitizeTextOrArray(m.description,me())),m.description?.length===1&&m.shape===F6&&(m.type==="group"?m.shape=YO:m.shape=B6),!m.type&&e.doc&&(Y.info("Setting cluster for XCX",u,tde(e)),m.type="group",m.isGroup=!0,m.dir=tde(e),m.shape=e.type===P6?qO:YO,m.cssClasses=`${m.cssClasses} ${Qfe} ${a?Zfe:""}`);let g={labelStyle:"",shape:m.shape,label:m.description,cssClasses:m.cssClasses,cssCompiledStyles:[],cssStyles:m.cssStyles,id:u,dir:m.dir,domId:ZO(u,xf),type:m.type,isGroup:m.type==="group",padding:8,rx:10,ry:10,look:s};if(g.shape===qO&&(g.label=""),t&&t.id!=="root"&&(Y.trace("Setting node ",u," to be child of its parent ",t.id),g.parentId=t.id),g.centerLabel=!0,e.note){let y={labelStyle:"",shape:qfe,label:e.note.text,cssClasses:Kfe,cssStyles:[],cssCompilesStyles:[],id:u+ede+"-"+xf,domId:ZO(u,xf,KO),type:m.type,isGroup:m.type==="group",padding:me().flowchart.padding,look:s,position:e.note.position},v=u+QO,x={labelStyle:"",shape:Yfe,label:e.note.text,cssClasses:m.cssClasses,cssStyles:[],id:u+QO,domId:ZO(u,xf,jO),type:"group",isGroup:!0,padding:16,look:s,position:e.note.position};xf++,x.id=v,y.parentId=v,G6(n,x,l),G6(n,y,l),G6(n,g,l);let b=u,w=y.id;e.note.position==="left of"&&(b=y.id,w=u),i.push({id:b+"-"+w,start:b,end:w,arrowhead:"none",arrowTypeEnd:"",style:GO,labelStyle:"",classes:jfe,arrowheadStyle:VO,labelpos:UO,labelType:HO,thickness:WO,look:s})}else G6(n,g,l)}e.doc&&(Y.trace("Adding nodes children "),sUe(e,e.doc,r,n,i,!a,s,l))},"dataFetcher"),rde=o(()=>{V6.clear(),xf=0},"reset")});var JO,cUe,uUe,ide,eP=N(()=>{"use strict";zt();vt();gm();Yd();$m();ir();z6();JO=o((t,e=O6)=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),cUe=o(function(t,e){return e.db.getClasses()},"getClasses"),uUe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing state diagram (v2)",e);let{securityLevel:i,state:a,layout:s}=me();n.db.extract(n.db.getRootDocV2());let l=n.db.getData(),u=yc(e,i);l.type=n.type,l.layoutAlgorithm=s,l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["barb"],l.diagramId=e,await Cc(l,u);let h=8;Gt.insertTitle(u,"statediagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ac(u,h,R1,a?.useMaxWidth??!0)},"draw"),ide={getClasses:cUe,draw:uUe,getDir:JO}});function ude(){return new Map}var tP,ade,sde,ode,lde,cde,hUe,fUe,hde,U6,Qo,H6=N(()=>{"use strict";zt();vt();ir();gr();mi();nde();eP();z6();tP="[*]",ade="start",sde=tP,ode="end",lde="color",cde="fill",hUe="bgFill",fUe=",";o(ude,"newClassesList");hde=o(()=>({relations:[],states:new Map,documents:{}}),"newDoc"),U6=o(t=>JSON.parse(JSON.stringify(t)),"clone"),Qo=class{static{o(this,"StateDB")}constructor(e){this.clear(),this.version=e,this.setRootDoc=this.setRootDoc.bind(this),this.getDividerId=this.getDividerId.bind(this),this.setDirection=this.setDirection.bind(this),this.trimColon=this.trimColon.bind(this)}version;nodes=[];edges=[];rootDoc=[];classes=ude();documents={root:hde()};currentDocument=this.documents.root;startEndCount=0;dividerCnt=0;static relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3};setRootDoc(e){Y.info("Setting root doc",e),this.rootDoc=e,this.version===1?this.extract(e):this.extract(this.getRootDocV2())}getRootDoc(){return this.rootDoc}docTranslator(e,r,n){if(r.stmt===Eb)this.docTranslator(e,r.state1,!0),this.docTranslator(e,r.state2,!1);else if(r.stmt===L1&&(r.id==="[*]"?(r.id=n?e.id+"_start":e.id+"_end",r.start=n):r.id=r.id.trim()),r.doc){let i=[],a=[],s;for(s=0;s<r.doc.length;s++)if(r.doc[s].type===P6){let l=U6(r.doc[s]);l.doc=U6(a),i.push(l),a=[]}else a.push(r.doc[s]);if(i.length>0&&a.length>0){let l={stmt:L1,id:X9(),type:"divider",doc:U6(a)};i.push(U6(l)),r.doc=i}r.doc.forEach(l=>this.docTranslator(r,l,!0))}}getRootDocV2(){return this.docTranslator({id:"root"},{id:"root",doc:this.rootDoc},!0),{id:"root",doc:this.rootDoc}}extract(e){let r;e.doc?r=e.doc:r=e,Y.info(r),this.clear(!0),Y.info("Extract initial document:",r),r.forEach(s=>{switch(Y.warn("Statement",s.stmt),s.stmt){case L1:this.addState(s.id.trim(),s.type,s.doc,s.description,s.note,s.classes,s.styles,s.textStyles);break;case Eb:this.addRelation(s.state1,s.state2,s.description);break;case Gfe:this.addStyleClass(s.id.trim(),s.classes);break;case Vfe:{let l=s.id.trim().split(","),u=s.styleClass.split(",");l.forEach(h=>{let f=this.getState(h);if(f===void 0){let d=h.trim();this.addState(d),f=this.getState(d)}f.styles=u.map(d=>d.replace(/;/g,"")?.trim())})}break;case Ufe:this.setCssClass(s.id.trim(),s.styleClass);break}});let n=this.getStates(),a=me().look;rde(),N1(void 0,this.getRootDocV2(),n,this.nodes,this.edges,!0,a,this.classes),this.nodes.forEach(s=>{if(Array.isArray(s.label)){if(s.description=s.label.slice(1),s.isGroup&&s.description.length>0)throw new Error("Group nodes can only have label. Remove the additional description for node ["+s.id+"]");s.label=s.label[0]}})}addState(e,r=Rp,n=null,i=null,a=null,s=null,l=null,u=null){let h=e?.trim();if(this.currentDocument.states.has(h)?(this.currentDocument.states.get(h).doc||(this.currentDocument.states.get(h).doc=n),this.currentDocument.states.get(h).type||(this.currentDocument.states.get(h).type=r)):(Y.info("Adding state ",h,i),this.currentDocument.states.set(h,{id:h,descriptions:[],type:r,doc:n,note:a,classes:[],styles:[],textStyles:[]})),i&&(Y.info("Setting state description",h,i),typeof i=="string"&&this.addDescription(h,i.trim()),typeof i=="object"&&i.forEach(f=>this.addDescription(h,f.trim()))),a){let f=this.currentDocument.states.get(h);f.note=a,f.note.text=Ze.sanitizeText(f.note.text,me())}s&&(Y.info("Setting state classes",h,s),(typeof s=="string"?[s]:s).forEach(d=>this.setCssClass(h,d.trim()))),l&&(Y.info("Setting state styles",h,l),(typeof l=="string"?[l]:l).forEach(d=>this.setStyle(h,d.trim()))),u&&(Y.info("Setting state styles",h,l),(typeof u=="string"?[u]:u).forEach(d=>this.setTextStyle(h,d.trim())))}clear(e){this.nodes=[],this.edges=[],this.documents={root:hde()},this.currentDocument=this.documents.root,this.startEndCount=0,this.classes=ude(),e||Ar()}getState(e){return this.currentDocument.states.get(e)}getStates(){return this.currentDocument.states}logDocuments(){Y.info("Documents = ",this.documents)}getRelations(){return this.currentDocument.relations}startIdIfNeeded(e=""){let r=e;return e===tP&&(this.startEndCount++,r=`${ade}${this.startEndCount}`),r}startTypeIfNeeded(e="",r=Rp){return e===tP?ade:r}endIdIfNeeded(e=""){let r=e;return e===sde&&(this.startEndCount++,r=`${ode}${this.startEndCount}`),r}endTypeIfNeeded(e="",r=Rp){return e===sde?ode:r}addRelationObjs(e,r,n){let i=this.startIdIfNeeded(e.id.trim()),a=this.startTypeIfNeeded(e.id.trim(),e.type),s=this.startIdIfNeeded(r.id.trim()),l=this.startTypeIfNeeded(r.id.trim(),r.type);this.addState(i,a,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),this.addState(s,l,r.doc,r.description,r.note,r.classes,r.styles,r.textStyles),this.currentDocument.relations.push({id1:i,id2:s,relationTitle:Ze.sanitizeText(n,me())})}addRelation(e,r,n){if(typeof e=="object")this.addRelationObjs(e,r,n);else{let i=this.startIdIfNeeded(e.trim()),a=this.startTypeIfNeeded(e),s=this.endIdIfNeeded(r.trim()),l=this.endTypeIfNeeded(r);this.addState(i,a),this.addState(s,l),this.currentDocument.relations.push({id1:i,id2:s,title:Ze.sanitizeText(n,me())})}}addDescription(e,r){let n=this.currentDocument.states.get(e),i=r.startsWith(":")?r.replace(":","").trim():r;n.descriptions.push(Ze.sanitizeText(i,me()))}cleanupLabel(e){return e.substring(0,1)===":"?e.substr(2).trim():e.trim()}getDividerId(){return this.dividerCnt++,"divider-id-"+this.dividerCnt}addStyleClass(e,r=""){this.classes.has(e)||this.classes.set(e,{id:e,styles:[],textStyles:[]});let n=this.classes.get(e);r?.split(fUe).forEach(i=>{let a=i.replace(/([^;]*);/,"$1").trim();if(RegExp(lde).exec(i)){let l=a.replace(cde,hUe).replace(lde,cde);n.textStyles.push(l)}n.styles.push(a)})}getClasses(){return this.classes}setCssClass(e,r){e.split(",").forEach(n=>{let i=this.getState(n);if(i===void 0){let a=n.trim();this.addState(a),i=this.getState(a)}i.classes.push(r)})}setStyle(e,r){let n=this.getState(e);n!==void 0&&n.styles.push(r)}setTextStyle(e,r){let n=this.getState(e);n!==void 0&&n.textStyles.push(r)}getDirectionStatement(){return this.rootDoc.find(e=>e.stmt===zO)}getDirection(){return this.getDirectionStatement()?.value??zfe}setDirection(e){let r=this.getDirectionStatement();r?r.value=e:this.rootDoc.unshift({stmt:zO,value:e})}trimColon(e){return e&&e[0]===":"?e.substr(1).trim():e.trim()}getData(){let e=me();return{nodes:this.nodes,edges:this.edges,other:{},config:e,direction:JO(this.getRootDocV2())}}getConfig(){return me().state}getAccTitle=Rr;setAccTitle=Lr;getAccDescription=Mr;setAccDescription=Nr;setDiagramTitle=$r;getDiagramTitle=Ir}});var dUe,W6,rP=N(()=>{"use strict";dUe=o(t=>`
1533 +defs #statediagram-barbEnd {
1534 + fill: ${t.transitionColor};
1535 + stroke: ${t.transitionColor};
1536 + }
1537 +g.stateGroup text {
1538 + fill: ${t.nodeBorder};
1539 + stroke: none;
1540 + font-size: 10px;
1541 +}
1542 +g.stateGroup text {
1543 + fill: ${t.textColor};
1544 + stroke: none;
1545 + font-size: 10px;
1546 +
1547 +}
1548 +g.stateGroup .state-title {
1549 + font-weight: bolder;
1550 + fill: ${t.stateLabelColor};
1551 +}
1552 +
1553 +g.stateGroup rect {
1554 + fill: ${t.mainBkg};
1555 + stroke: ${t.nodeBorder};
1556 +}
1557 +
1558 +g.stateGroup line {
1559 + stroke: ${t.lineColor};
1560 + stroke-width: 1;
1561 +}
1562 +
1563 +.transition {
1564 + stroke: ${t.transitionColor};
1565 + stroke-width: 1;
1566 + fill: none;
1567 +}
1568 +
1569 +.stateGroup .composit {
1570 + fill: ${t.background};
1571 + border-bottom: 1px
1572 +}
1573 +
1574 +.stateGroup .alt-composit {
1575 + fill: #e0e0e0;
1576 + border-bottom: 1px
1577 +}
1578 +
1579 +.state-note {
1580 + stroke: ${t.noteBorderColor};
1581 + fill: ${t.noteBkgColor};
1582 +
1583 + text {
1584 + fill: ${t.noteTextColor};
1585 + stroke: none;
1586 + font-size: 10px;
1587 + }
1588 +}
1589 +
1590 +.stateLabel .box {
1591 + stroke: none;
1592 + stroke-width: 0;
1593 + fill: ${t.mainBkg};
1594 + opacity: 0.5;
1595 +}
1596 +
1597 +.edgeLabel .label rect {
1598 + fill: ${t.labelBackgroundColor};
1599 + opacity: 0.5;
1600 +}
1601 +.edgeLabel {
1602 + background-color: ${t.edgeLabelBackground};
1603 + p {
1604 + background-color: ${t.edgeLabelBackground};
1605 + }
1606 + rect {
1607 + opacity: 0.5;
1608 + background-color: ${t.edgeLabelBackground};
1609 + fill: ${t.edgeLabelBackground};
1610 + }
1611 + text-align: center;
1612 +}
1613 +.edgeLabel .label text {
1614 + fill: ${t.transitionLabelColor||t.tertiaryTextColor};
1615 +}
1616 +.label div .edgeLabel {
1617 + color: ${t.transitionLabelColor||t.tertiaryTextColor};
1618 +}
1619 +
1620 +.stateLabel text {
1621 + fill: ${t.stateLabelColor};
1622 + font-size: 10px;
1623 + font-weight: bold;
1624 +}
1625 +
1626 +.node circle.state-start {
1627 + fill: ${t.specialStateColor};
1628 + stroke: ${t.specialStateColor};
1629 +}
1630 +
1631 +.node .fork-join {
1632 + fill: ${t.specialStateColor};
1633 + stroke: ${t.specialStateColor};
1634 +}
1635 +
1636 +.node circle.state-end {
1637 + fill: ${t.innerEndBackground};
1638 + stroke: ${t.background};
1639 + stroke-width: 1.5
1640 +}
1641 +.end-state-inner {
1642 + fill: ${t.compositeBackground||t.background};
1643 + // stroke: ${t.background};
1644 + stroke-width: 1.5
1645 +}
1646 +
1647 +.node rect {
1648 + fill: ${t.stateBkg||t.mainBkg};
1649 + stroke: ${t.stateBorder||t.nodeBorder};
1650 + stroke-width: 1px;
1651 +}
1652 +.node polygon {
1653 + fill: ${t.mainBkg};
1654 + stroke: ${t.stateBorder||t.nodeBorder};;
1655 + stroke-width: 1px;
1656 +}
1657 +#statediagram-barbEnd {
1658 + fill: ${t.lineColor};
1659 +}
1660 +
1661 +.statediagram-cluster rect {
1662 + fill: ${t.compositeTitleBackground};
1663 + stroke: ${t.stateBorder||t.nodeBorder};
1664 + stroke-width: 1px;
1665 +}
1666 +
1667 +.cluster-label, .nodeLabel {
1668 + color: ${t.stateLabelColor};
1669 + // line-height: 1;
1670 +}
1671 +
1672 +.statediagram-cluster rect.outer {
1673 + rx: 5px;
1674 + ry: 5px;
1675 +}
1676 +.statediagram-state .divider {
1677 + stroke: ${t.stateBorder||t.nodeBorder};
1678 +}
1679 +
1680 +.statediagram-state .title-state {
1681 + rx: 5px;
1682 + ry: 5px;
1683 +}
1684 +.statediagram-cluster.statediagram-cluster .inner {
1685 + fill: ${t.compositeBackground||t.background};
1686 +}
1687 +.statediagram-cluster.statediagram-cluster-alt .inner {
1688 + fill: ${t.altBackground?t.altBackground:"#efefef"};
1689 +}
1690 +
1691 +.statediagram-cluster .inner {
1692 + rx:0;
1693 + ry:0;
1694 +}
1695 +
1696 +.statediagram-state rect.basic {
1697 + rx: 5px;
1698 + ry: 5px;
1699 +}
1700 +.statediagram-state rect.divider {
1701 + stroke-dasharray: 10,10;
1702 + fill: ${t.altBackground?t.altBackground:"#efefef"};
1703 +}
1704 +
1705 +.note-edge {
1706 + stroke-dasharray: 5;
1707 +}
1708 +
1709 +.statediagram-note rect {
1710 + fill: ${t.noteBkgColor};
1711 + stroke: ${t.noteBorderColor};
1712 + stroke-width: 1px;
1713 + rx: 0;
1714 + ry: 0;
1715 +}
1716 +.statediagram-note rect {
1717 + fill: ${t.noteBkgColor};
1718 + stroke: ${t.noteBorderColor};
1719 + stroke-width: 1px;
1720 + rx: 0;
1721 + ry: 0;
1722 +}
1723 +
1724 +.statediagram-note text {
1725 + fill: ${t.noteTextColor};
1726 +}
1727 +
1728 +.statediagram-note .nodeLabel {
1729 + color: ${t.noteTextColor};
1730 +}
1731 +.statediagram .edgeLabel {
1732 + color: red; // ${t.noteTextColor};
1733 +}
1734 +
1735 +#dependencyStart, #dependencyEnd {
1736 + fill: ${t.lineColor};
1737 + stroke: ${t.lineColor};
1738 + stroke-width: 1;
1739 +}
1740 +
1741 +.statediagramTitleText {
1742 + text-anchor: middle;
1743 + font-size: 18px;
1744 + fill: ${t.textColor};
1745 +}
1746 +`,"getStyles"),W6=dUe});var nP,pUe,mUe,fde,gUe,dde,pde=N(()=>{"use strict";nP={},pUe=o((t,e)=>{nP[t]=e},"set"),mUe=o(t=>nP[t],"get"),fde=o(()=>Object.keys(nP),"keys"),gUe=o(()=>fde().length,"size"),dde={get:mUe,set:pUe,keys:fde,size:gUe}});var yUe,vUe,xUe,bUe,gde,wUe,TUe,kUe,EUe,iP,mde,yde,vde=N(()=>{"use strict";dr();pde();H6();ir();gr();zt();vt();yUe=o(t=>t.append("circle").attr("class","start-state").attr("r",me().state.sizeUnit).attr("cx",me().state.padding+me().state.sizeUnit).attr("cy",me().state.padding+me().state.sizeUnit),"drawStartState"),vUe=o(t=>t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",me().state.textHeight).attr("class","divider").attr("x2",me().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),xUe=o((t,e)=>{let r=t.append("text").attr("x",2*me().state.padding).attr("y",me().state.textHeight+2*me().state.padding).attr("font-size",me().state.fontSize).attr("class","state-title").text(e.id),n=r.node().getBBox();return t.insert("rect",":first-child").attr("x",me().state.padding).attr("y",me().state.padding).attr("width",n.width+2*me().state.padding).attr("height",n.height+2*me().state.padding).attr("rx",me().state.radius),r},"drawSimpleState"),bUe=o((t,e)=>{let r=o(function(p,m,g){let y=p.append("tspan").attr("x",2*me().state.padding).text(m);g||y.attr("dy",me().state.textHeight)},"addTspan"),i=t.append("text").attr("x",2*me().state.padding).attr("y",me().state.textHeight+1.3*me().state.padding).attr("font-size",me().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),a=i.height,s=t.append("text").attr("x",me().state.padding).attr("y",a+me().state.padding*.4+me().state.dividerMargin+me().state.textHeight).attr("class","state-description"),l=!0,u=!0;e.descriptions.forEach(function(p){l||(r(s,p,u),u=!1),l=!1});let h=t.append("line").attr("x1",me().state.padding).attr("y1",me().state.padding+a+me().state.dividerMargin/2).attr("y2",me().state.padding+a+me().state.dividerMargin/2).attr("class","descr-divider"),f=s.node().getBBox(),d=Math.max(f.width,i.width);return h.attr("x2",d+3*me().state.padding),t.insert("rect",":first-child").attr("x",me().state.padding).attr("y",me().state.padding).attr("width",d+2*me().state.padding).attr("height",f.height+a+2*me().state.padding).attr("rx",me().state.radius),t},"drawDescrState"),gde=o((t,e,r)=>{let n=me().state.padding,i=2*me().state.padding,a=t.node().getBBox(),s=a.width,l=a.x,u=t.append("text").attr("x",0).attr("y",me().state.titleShift).attr("font-size",me().state.fontSize).attr("class","state-title").text(e.id),f=u.node().getBBox().width+i,d=Math.max(f,s);d===s&&(d=d+i);let p,m=t.node().getBBox();e.doc,p=l-n,f>s&&(p=(s-d)/2+n),Math.abs(l-m.x)<n&&f>s&&(p=l-(f-s)/2);let g=1-me().state.textHeight;return t.insert("rect",":first-child").attr("x",p).attr("y",g).attr("class",r?"alt-composit":"composit").attr("width",d).attr("height",m.height+me().state.textHeight+me().state.titleShift+1).attr("rx","0"),u.attr("x",p+n),f<=s&&u.attr("x",l+(d-i)/2-f/2+n),t.insert("rect",":first-child").attr("x",p).attr("y",me().state.titleShift-me().state.textHeight-me().state.padding).attr("width",d).attr("height",me().state.textHeight*3).attr("rx",me().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",me().state.titleShift-me().state.textHeight-me().state.padding).attr("width",d).attr("height",m.height+3+2*me().state.textHeight).attr("rx",me().state.radius),t},"addTitleAndBox"),wUe=o(t=>(t.append("circle").attr("class","end-state-outer").attr("r",me().state.sizeUnit+me().state.miniPadding).attr("cx",me().state.padding+me().state.sizeUnit+me().state.miniPadding).attr("cy",me().state.padding+me().state.sizeUnit+me().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",me().state.sizeUnit).attr("cx",me().state.padding+me().state.sizeUnit+2).attr("cy",me().state.padding+me().state.sizeUnit+2)),"drawEndState"),TUe=o((t,e)=>{let r=me().state.forkWidth,n=me().state.forkHeight;if(e.parentId){let i=r;r=n,n=i}return t.append("rect").style("stroke","black").style("fill","black").attr("width",r).attr("height",n).attr("x",me().state.padding).attr("y",me().state.padding)},"drawForkJoinState"),kUe=o((t,e,r,n)=>{let i=0,a=n.append("text");a.style("text-anchor","start"),a.attr("class","noteText");let s=t.replace(/\r\n/g,"<br/>");s=s.replace(/\n/g,"<br/>");let l=s.split(Ze.lineBreakRegex),u=1.25*me().state.noteMargin;for(let h of l){let f=h.trim();if(f.length>0){let d=a.append("tspan");if(d.text(f),u===0){let p=d.node().getBBox();u+=p.height}i+=u,d.attr("x",e+me().state.noteMargin),d.attr("y",r+i+1.25*me().state.noteMargin)}}return{textWidth:a.node().getBBox().width,textHeight:i}},"_drawLongText"),EUe=o((t,e)=>{e.attr("class","state-note");let r=e.append("rect").attr("x",0).attr("y",me().state.padding),n=e.append("g"),{textWidth:i,textHeight:a}=kUe(t,0,0,n);return r.attr("height",a+2*me().state.noteMargin),r.attr("width",i+me().state.noteMargin*2),r},"drawNote"),iP=o(function(t,e){let r=e.id,n={id:r,label:e.id,width:0,height:0},i=t.append("g").attr("id",r).attr("class","stateGroup");e.type==="start"&&yUe(i),e.type==="end"&&wUe(i),(e.type==="fork"||e.type==="join")&&TUe(i,e),e.type==="note"&&EUe(e.note.text,i),e.type==="divider"&&vUe(i),e.type==="default"&&e.descriptions.length===0&&xUe(i,e),e.type==="default"&&e.descriptions.length>0&&bUe(i,e);let a=i.node().getBBox();return n.width=a.width+2*me().state.padding,n.height=a.height+2*me().state.padding,dde.set(r,n),n},"drawState"),mde=0,yde=o(function(t,e,r){let n=o(function(u){switch(u){case Qo.relationType.AGGREGATION:return"aggregation";case Qo.relationType.EXTENSION:return"extension";case Qo.relationType.COMPOSITION:return"composition";case Qo.relationType.DEPENDENCY:return"dependency"}},"getRelationType");e.points=e.points.filter(u=>!Number.isNaN(u.y));let i=e.points,a=wl().x(function(u){return u.x}).y(function(u){return u.y}).curve(Do),s=t.append("path").attr("d",a(i)).attr("id","edge"+mde).attr("class","transition"),l="";if(me().state.arrowMarkerAbsolute&&(l=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,l=l.replace(/\(/g,"\\("),l=l.replace(/\)/g,"\\)")),s.attr("marker-end","url("+l+"#"+n(Qo.relationType.DEPENDENCY)+"End)"),r.title!==void 0){let u=t.append("g").attr("class","stateLabel"),{x:h,y:f}=Gt.calcLabelPosition(e.points),d=Ze.getRows(r.title),p=0,m=[],g=0,y=0;for(let b=0;b<=d.length;b++){let w=u.append("text").attr("text-anchor","middle").text(d[b]).attr("x",h).attr("y",f+p),C=w.node().getBBox();g=Math.max(g,C.width),y=Math.min(y,C.x),Y.info(C.x,h,f+p),p===0&&(p=w.node().getBBox().height,Y.info("Title height",p,f)),m.push(w)}let v=p*d.length;if(d.length>1){let b=(d.length-1)*p*.5;m.forEach((w,C)=>w.attr("y",f+C*p-b)),v=p*d.length}let x=u.node().getBBox();u.insert("rect",":first-child").attr("class","box").attr("x",h-g/2-me().state.padding/2).attr("y",f-v/2-me().state.padding/2-3.5).attr("width",g+me().state.padding).attr("height",v+me().state.padding),Y.info(x)}mde++},"drawEdge")});var fo,aP,SUe,CUe,AUe,_Ue,xde,bde,wde=N(()=>{"use strict";dr();gR();Vo();vt();gr();vde();zt();Ei();aP={},SUe=o(function(){},"setConf"),CUe=o(function(t){t.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"insertMarkers"),AUe=o(function(t,e,r,n){fo=me().state;let i=me().securityLevel,a;i==="sandbox"&&(a=Ge("#i"+e));let s=i==="sandbox"?Ge(a.nodes()[0].contentDocument.body):Ge("body"),l=i==="sandbox"?a.nodes()[0].contentDocument:document;Y.debug("Rendering diagram "+t);let u=s.select(`[id='${e}']`);CUe(u);let h=n.db.getRootDoc();xde(h,u,void 0,!1,s,l,n);let f=fo.padding,d=u.node().getBBox(),p=d.width+f*2,m=d.height+f*2,g=p*1.75;vn(u,m,g,fo.useMaxWidth),u.attr("viewBox",`${d.x-fo.padding} ${d.y-fo.padding} `+p+" "+m)},"draw"),_Ue=o(t=>t?t.length*fo.fontSizeFactor:1,"getLabelWidth"),xde=o((t,e,r,n,i,a,s)=>{let l=new sn({compound:!0,multigraph:!0}),u,h=!0;for(u=0;u<t.length;u++)if(t[u].stmt==="relation"){h=!1;break}r?l.setGraph({rankdir:"LR",multigraph:!0,compound:!0,ranker:"tight-tree",ranksep:h?1:fo.edgeLengthFactor,nodeSep:h?1:50,isMultiGraph:!0}):l.setGraph({rankdir:"TB",multigraph:!0,compound:!0,ranksep:h?1:fo.edgeLengthFactor,nodeSep:h?1:50,ranker:"tight-tree",isMultiGraph:!0}),l.setDefaultEdgeLabel(function(){return{}});let f=s.db.getStates(),d=s.db.getRelations(),p=Object.keys(f),m=!0;for(let b of p){let w=f[b];r&&(w.parentId=r);let C;if(w.doc){let T=e.append("g").attr("id",w.id).attr("class","stateGroup");if(C=xde(w.doc,T,w.id,!n,i,a,s),m){T=gde(T,w,n);let E=T.node().getBBox();C.width=E.width,C.height=E.height+fo.padding/2,aP[w.id]={y:fo.compositTitleSize}}else{let E=T.node().getBBox();C.width=E.width,C.height=E.height}}else C=iP(e,w,l);if(w.note){let T={descriptions:[],id:w.id+"-note",note:w.note,type:"note"},E=iP(e,T,l);w.note.position==="left of"?(l.setNode(C.id+"-note",E),l.setNode(C.id,C)):(l.setNode(C.id,C),l.setNode(C.id+"-note",E)),l.setParent(C.id,C.id+"-group"),l.setParent(C.id+"-note",C.id+"-group")}else l.setNode(C.id,C)}Y.debug("Count=",l.nodeCount(),l);let g=0;d.forEach(function(b){g++,Y.debug("Setting edge",b),l.setEdge(b.id1,b.id2,{relation:b,width:_Ue(b.title),height:fo.labelHeight*Ze.getRows(b.title).length,labelpos:"c"},"id"+g)}),R2(l),Y.debug("Graph after layout",l.nodes());let y=e.node();l.nodes().forEach(function(b){b!==void 0&&l.node(b)!==void 0?(Y.warn("Node "+b+": "+JSON.stringify(l.node(b))),i.select("#"+y.id+" #"+b).attr("transform","translate("+(l.node(b).x-l.node(b).width/2)+","+(l.node(b).y+(aP[b]?aP[b].y:0)-l.node(b).height/2)+" )"),i.select("#"+y.id+" #"+b).attr("data-x-shift",l.node(b).x-l.node(b).width/2),a.querySelectorAll("#"+y.id+" #"+b+" .divider").forEach(C=>{let T=C.parentElement,E=0,A=0;T&&(T.parentElement&&(E=T.parentElement.getBBox().width),A=parseInt(T.getAttribute("data-x-shift"),10),Number.isNaN(A)&&(A=0)),C.setAttribute("x1",0-A+8),C.setAttribute("x2",E-A-8)})):Y.debug("No Node "+b+": "+JSON.stringify(l.node(b)))});let v=y.getBBox();l.edges().forEach(function(b){b!==void 0&&l.edge(b)!==void 0&&(Y.debug("Edge "+b.v+" -> "+b.w+": "+JSON.stringify(l.edge(b))),yde(e,l.edge(b),l.edge(b).relation))}),v=y.getBBox();let x={id:r||"root",label:r||"root",width:0,height:0};return x.width=v.width+2*fo.padding,x.height=v.height+2*fo.padding,Y.debug("Doc rendered",x,l),x},"renderDoc"),bde={setConf:SUe,draw:AUe}});var Tde={};hr(Tde,{diagram:()=>DUe});var DUe,kde=N(()=>{"use strict";$O();H6();rP();wde();DUe={parser:I6,get db(){return new Qo(1)},renderer:bde,styles:W6,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var Cde={};hr(Cde,{diagram:()=>MUe});var MUe,Ade=N(()=>{"use strict";$O();H6();rP();eP();MUe={parser:I6,get db(){return new Qo(2)},renderer:ide,styles:W6,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var sP,Lde,Rde=N(()=>{"use strict";sP=function(){var t=o(function(d,p,m,g){for(m=m||{},g=d.length;g--;m[d[g]]=p);return m},"o"),e=[6,8,10,11,12,14,16,17,18],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,14],u={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:o(function(p,m,g,y,v,x,b){var w=x.length-1;switch(v){case 1:return x[w-1];case 2:this.$=[];break;case 3:x[w-1].push(x[w]),this.$=x[w-1];break;case 4:case 5:this.$=x[w];break;case 6:case 7:this.$=[];break;case 8:y.setDiagramTitle(x[w].substr(6)),this.$=x[w].substr(6);break;case 9:this.$=x[w].trim(),y.setAccTitle(this.$);break;case 10:case 11:this.$=x[w].trim(),y.setAccDescription(this.$);break;case 12:y.addSection(x[w].substr(8)),this.$=x[w].substr(8);break;case 13:y.addTask(x[w-1],x[w]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:o(function(p,m){if(m.recoverable)this.trace(p);else{var g=new Error(p);throw g.hash=m,g}},"parseError"),parse:o(function(p){var m=this,g=[0],y=[],v=[null],x=[],b=this.table,w="",C=0,T=0,E=0,A=2,S=1,_=x.slice.call(arguments,1),I=Object.create(this.lexer),D={yy:{}};for(var k in this.yy)Object.prototype.hasOwnProperty.call(this.yy,k)&&(D.yy[k]=this.yy[k]);I.setInput(p,D.yy),D.yy.lexer=I,D.yy.parser=this,typeof I.yylloc>"u"&&(I.yylloc={});var L=I.yylloc;x.push(L);var R=I.options&&I.options.ranges;typeof D.yy.parseError=="function"?this.parseError=D.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function O(K){g.length=g.length-2*K,v.length=v.length-K,x.length=x.length-K}o(O,"popStack");function M(){var K;return K=y.pop()||I.lex()||S,typeof K!="number"&&(K instanceof Array&&(y=K,K=y.pop()),K=m.symbols_[K]||K),K}o(M,"lex");for(var B,F,P,z,$,H,Q={},j,ie,ne,le;;){if(P=g[g.length-1],this.defaultActions[P]?z=this.defaultActions[P]:((B===null||typeof B>"u")&&(B=M()),z=b[P]&&b[P][B]),typeof z>"u"||!z.length||!z[0]){var he="";le=[];for(j in b[P])this.terminals_[j]&&j>A&&le.push("'"+this.terminals_[j]+"'");I.showPosition?he="Parse error on line "+(C+1)+`:
1747 +`+I.showPosition()+`
1748 +Expecting `+le.join(", ")+", got '"+(this.terminals_[B]||B)+"'":he="Parse error on line "+(C+1)+": Unexpected "+(B==S?"end of input":"'"+(this.terminals_[B]||B)+"'"),this.parseError(he,{text:I.match,token:this.terminals_[B]||B,line:I.yylineno,loc:L,expected:le})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+P+", token: "+B);switch(z[0]){case 1:g.push(B),v.push(I.yytext),x.push(I.yylloc),g.push(z[1]),B=null,F?(B=F,F=null):(T=I.yyleng,w=I.yytext,C=I.yylineno,L=I.yylloc,E>0&&E--);break;case 2:if(ie=this.productions_[z[1]][1],Q.$=v[v.length-ie],Q._$={first_line:x[x.length-(ie||1)].first_line,last_line:x[x.length-1].last_line,first_column:x[x.length-(ie||1)].first_column,last_column:x[x.length-1].last_column},R&&(Q._$.range=[x[x.length-(ie||1)].range[0],x[x.length-1].range[1]]),H=this.performAction.apply(Q,[w,T,C,D.yy,z[1],v,x].concat(_)),typeof H<"u")return H;ie&&(g=g.slice(0,-1*ie*2),v=v.slice(0,-1*ie),x=x.slice(0,-1*ie)),g.push(this.productions_[z[1]][0]),v.push(Q.$),x.push(Q._$),ne=b[g[g.length-2]][g[g.length-1]],g.push(ne);break;case 3:return!0}}return!0},"parse")},h=function(){var d={EOF:1,parseError:o(function(m,g){if(this.yy.parser)this.yy.parser.parseError(m,g);else throw new Error(m)},"parseError"),setInput:o(function(p,m){return this.yy=m||this.yy||{},this._input=p,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var p=this._input[0];this.yytext+=p,this.yyleng++,this.offset++,this.match+=p,this.matched+=p;var m=p.match(/(?:\r\n?|\n).*/g);return m?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),p},"input"),unput:o(function(p){var m=p.length,g=p.split(/(?:\r\n?|\n)/g);this._input=p+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-m),this.offset-=m;var y=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var v=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===y.length?this.yylloc.first_column:0)+y[y.length-g.length].length-g[0].length:this.yylloc.first_column-m},this.options.ranges&&(this.yylloc.range=[v[0],v[0]+this.yyleng-m]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
1749 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(p){this.unput(this.match.slice(p))},"less"),pastInput:o(function(){var p=this.matched.substr(0,this.matched.length-this.match.length);return(p.length>20?"...":"")+p.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var p=this.match;return p.length<20&&(p+=this._input.substr(0,20-p.length)),(p.substr(0,20)+(p.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var p=this.pastInput(),m=new Array(p.length+1).join("-");return p+this.upcomingInput()+`
1750 +`+m+"^"},"showPosition"),test_match:o(function(p,m){var g,y,v;if(this.options.backtrack_lexer&&(v={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(v.yylloc.range=this.yylloc.range.slice(0))),y=p[0].match(/(?:\r\n?|\n).*/g),y&&(this.yylineno+=y.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:y?y[y.length-1].length-y[y.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+p[0].length},this.yytext+=p[0],this.match+=p[0],this.matches=p,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(p[0].length),this.matched+=p[0],g=this.performAction.call(this,this.yy,this,m,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),g)return g;if(this._backtrack){for(var x in v)this[x]=v[x];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var p,m,g,y;this._more||(this.yytext="",this.match="");for(var v=this._currentRules(),x=0;x<v.length;x++)if(g=this._input.match(this.rules[v[x]]),g&&(!m||g[0].length>m[0].length)){if(m=g,y=x,this.options.backtrack_lexer){if(p=this.test_match(g,v[x]),p!==!1)return p;if(this._backtrack){m=!1;continue}else return!1}else if(!this.options.flex)break}return m?(p=this.test_match(m,v[y]),p!==!1?p:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
1751 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var m=this.next();return m||this.lex()},"lex"),begin:o(function(m){this.conditionStack.push(m)},"begin"),popState:o(function(){var m=this.conditionStack.length-1;return m>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(m){return m=this.conditionStack.length-1-Math.abs(m||0),m>=0?this.conditionStack[m]:"INITIAL"},"topState"),pushState:o(function(m){this.begin(m)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(m,g,y,v){var x=v;switch(y){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return d}();u.lexer=h;function f(){this.yy={}}return o(f,"Parser"),f.prototype=u,u.Parser=f,new f}();sP.parser=sP;Lde=sP});var M1,oP,Sb,Cb,BUe,FUe,$Ue,zUe,GUe,VUe,UUe,Nde,HUe,lP,Mde=N(()=>{"use strict";zt();mi();M1="",oP=[],Sb=[],Cb=[],BUe=o(function(){oP.length=0,Sb.length=0,M1="",Cb.length=0,Ar()},"clear"),FUe=o(function(t){M1=t,oP.push(t)},"addSection"),$Ue=o(function(){return oP},"getSections"),zUe=o(function(){let t=Nde(),e=100,r=0;for(;!t&&r<e;)t=Nde(),r++;return Sb.push(...Cb),Sb},"getTasks"),GUe=o(function(){let t=[];return Sb.forEach(r=>{r.people&&t.push(...r.people)}),[...new Set(t)].sort()},"updateActors"),VUe=o(function(t,e){let r=e.substr(1).split(":"),n=0,i=[];r.length===1?(n=Number(r[0]),i=[]):(n=Number(r[0]),i=r[1].split(","));let a=i.map(l=>l.trim()),s={section:M1,type:M1,people:a,task:t,score:n};Cb.push(s)},"addTask"),UUe=o(function(t){let e={section:M1,type:M1,description:t,task:t,classes:[]};Sb.push(e)},"addTaskOrg"),Nde=o(function(){let t=o(function(r){return Cb[r].processed},"compileTask"),e=!0;for(let[r,n]of Cb.entries())t(r),e=e&&n.processed;return e},"compileTasks"),HUe=o(function(){return GUe()},"getActors"),lP={getConfig:o(()=>me().journey,"getConfig"),clear:BUe,setDiagramTitle:$r,getDiagramTitle:Ir,setAccTitle:Lr,getAccTitle:Rr,setAccDescription:Nr,getAccDescription:Mr,addSection:FUe,getSections:$Ue,getTasks:zUe,addTask:VUe,addTaskOrg:UUe,getActors:HUe}});var WUe,Ide,Ode=N(()=>{"use strict";WUe=o(t=>`.label {
1752 + font-family: ${t.fontFamily};
1753 + color: ${t.textColor};
1754 + }
1755 + .mouth {
1756 + stroke: #666;
1757 + }
1758 +
1759 + line {
1760 + stroke: ${t.textColor}
1761 + }
1762 +
1763 + .legend {
1764 + fill: ${t.textColor};
1765 + font-family: ${t.fontFamily};
1766 + }
1767 +
1768 + .label text {
1769 + fill: #333;
1770 + }
1771 + .label {
1772 + color: ${t.textColor}
1773 + }
1774 +
1775 + .face {
1776 + ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"};
1777 + stroke: #999;
1778 + }
1779 +
1780 + .node rect,
1781 + .node circle,
1782 + .node ellipse,
1783 + .node polygon,
1784 + .node path {
1785 + fill: ${t.mainBkg};
1786 + stroke: ${t.nodeBorder};
1787 + stroke-width: 1px;
1788 + }
1789 +
1790 + .node .label {
1791 + text-align: center;
1792 + }
1793 + .node.clickable {
1794 + cursor: pointer;
1795 + }
1796 +
1797 + .arrowheadPath {
1798 + fill: ${t.arrowheadColor};
1799 + }
1800 +
1801 + .edgePath .path {
1802 + stroke: ${t.lineColor};
1803 + stroke-width: 1.5px;
1804 + }
1805 +
1806 + .flowchart-link {
1807 + stroke: ${t.lineColor};
1808 + fill: none;
1809 + }
1810 +
1811 + .edgeLabel {
1812 + background-color: ${t.edgeLabelBackground};
1813 + rect {
1814 + opacity: 0.5;
1815 + }
1816 + text-align: center;
1817 + }
1818 +
1819 + .cluster rect {
1820 + }
1821 +
1822 + .cluster text {
1823 + fill: ${t.titleColor};
1824 + }
1825 +
1826 + div.mermaidTooltip {
1827 + position: absolute;
1828 + text-align: center;
1829 + max-width: 200px;
1830 + padding: 2px;
1831 + font-family: ${t.fontFamily};
1832 + font-size: 12px;
1833 + background: ${t.tertiaryColor};
1834 + border: 1px solid ${t.border2};
1835 + border-radius: 2px;
1836 + pointer-events: none;
1837 + z-index: 100;
1838 + }
1839 +
1840 + .task-type-0, .section-type-0 {
1841 + ${t.fillType0?`fill: ${t.fillType0}`:""};
1842 + }
1843 + .task-type-1, .section-type-1 {
1844 + ${t.fillType0?`fill: ${t.fillType1}`:""};
1845 + }
1846 + .task-type-2, .section-type-2 {
1847 + ${t.fillType0?`fill: ${t.fillType2}`:""};
1848 + }
1849 + .task-type-3, .section-type-3 {
1850 + ${t.fillType0?`fill: ${t.fillType3}`:""};
1851 + }
1852 + .task-type-4, .section-type-4 {
1853 + ${t.fillType0?`fill: ${t.fillType4}`:""};
1854 + }
1855 + .task-type-5, .section-type-5 {
1856 + ${t.fillType0?`fill: ${t.fillType5}`:""};
1857 + }
1858 + .task-type-6, .section-type-6 {
1859 + ${t.fillType0?`fill: ${t.fillType6}`:""};
1860 + }
1861 + .task-type-7, .section-type-7 {
1862 + ${t.fillType0?`fill: ${t.fillType7}`:""};
1863 + }
1864 +
1865 + .actor-0 {
1866 + ${t.actor0?`fill: ${t.actor0}`:""};
1867 + }
1868 + .actor-1 {
1869 + ${t.actor1?`fill: ${t.actor1}`:""};
1870 + }
1871 + .actor-2 {
1872 + ${t.actor2?`fill: ${t.actor2}`:""};
1873 + }
1874 + .actor-3 {
1875 + ${t.actor3?`fill: ${t.actor3}`:""};
1876 + }
1877 + .actor-4 {
1878 + ${t.actor4?`fill: ${t.actor4}`:""};
1879 + }
1880 + .actor-5 {
1881 + ${t.actor5?`fill: ${t.actor5}`:""};
1882 + }
1883 +`,"getStyles"),Ide=WUe});var cP,qUe,Bde,Fde,YUe,XUe,Pde,jUe,KUe,$de,QUe,I1,zde=N(()=>{"use strict";dr();Wv();cP=o(function(t,e){return kd(t,e)},"drawRect"),qUe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=bl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=bl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),Bde=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),Fde=o(function(t,e){return Nq(t,e)},"drawText"),YUe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,Fde(t,e)},"drawLabel"),XUe=o(function(t,e,r){let n=t.append("g"),i=Tl();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width*e.taskCount+r.diagramMarginX*(e.taskCount-1),i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,cP(n,i),$de(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),Pde=-1,jUe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");Pde++;let a=300+5*30;i.append("line").attr("id","task"+Pde).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),qUe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=Tl();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,cP(i,s);let l=e.x+14;e.people.forEach(u=>{let h=e.actors[u].color,f={cx:l,cy:e.y,r:7,fill:h,stroke:"#000",title:u,pos:e.actors[u].position};Bde(i,f),l+=10}),$de(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),KUe=o(function(t,e){q5(t,e)},"drawBackgroundRect"),$de=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(/<br\s*\/?>/gi);for(let v=0;v<y.length;v++){let x=v*m-m*(y.length-1)/2,b=a.append("text").attr("x",s+u/2).attr("y",l).attr("fill",p).style("text-anchor","middle").style("font-size",m).style("font-family",g);b.append("tspan").attr("x",s+u/2).attr("dy",x).text(y[v]),b.attr("y",l+h/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),n(b,f)}}o(e,"byTspan");function r(i,a,s,l,u,h,f,d){let p=a.append("switch"),g=p.append("foreignObject").attr("x",s).attr("y",l).attr("width",u).attr("height",h).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");g.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,p,s,l,u,h,f,d),n(g,f)}o(r,"byFo");function n(i,a){for(let s in a)s in a&&i.attr(s,a[s])}return o(n,"_setTextAttrs"),function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),QUe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},"initGraphics"),I1={drawRect:cP,drawCircle:Bde,drawSection:XUe,drawText:Fde,drawLabel:YUe,drawTask:jUe,drawBackgroundRect:KUe,initGraphics:QUe}});function JUe(t){let e=me().journey,r=60;Object.keys(ju).forEach(n=>{let i=ju[n].color,a={cx:20,cy:r,r:7,fill:i,stroke:"#000",pos:ju[n].position};I1.drawCircle(t,a);let s={x:40,y:r+7,fill:"#666",text:n,textMargin:e.boxTextMargin|5};I1.drawText(t,s),r+=20})}var ZUe,ju,q6,Np,eHe,Zo,uP,Gde,tHe,hP,Vde=N(()=>{"use strict";dr();zde();zt();Ei();ZUe=o(function(t){Object.keys(t).forEach(function(r){q6[r]=t[r]})},"setConf"),ju={};o(JUe,"drawActorLegend");q6=me().journey,Np=q6.leftMargin,eHe=o(function(t,e,r,n){let i=me().journey,a=me().securityLevel,s;a==="sandbox"&&(s=Ge("#i"+e));let l=a==="sandbox"?Ge(s.nodes()[0].contentDocument.body):Ge("body");Zo.init();let u=l.select("#"+e);I1.initGraphics(u);let h=n.db.getTasks(),f=n.db.getDiagramTitle(),d=n.db.getActors();for(let x in ju)delete ju[x];let p=0;d.forEach(x=>{ju[x]={color:i.actorColours[p%i.actorColours.length],position:p},p++}),JUe(u),Zo.insert(0,0,Np,Object.keys(ju).length*50),tHe(u,h,0);let m=Zo.getBounds();f&&u.append("text").text(f).attr("x",Np).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);let g=m.stopy-m.starty+2*i.diagramMarginY,y=Np+m.stopx+2*i.diagramMarginX;vn(u,g,y,i.useMaxWidth),u.append("line").attr("x1",Np).attr("y1",i.height*4).attr("x2",y-Np-4).attr("y2",i.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");let v=f?70:0;u.attr("viewBox",`${m.startx} -25 ${y} ${g+v}`),u.attr("preserveAspectRatio","xMinYMin meet"),u.attr("height",g+v+25)},"draw"),Zo={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:o(function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=me().journey,a=this,s=0;function l(u){return o(function(f){s++;let d=a.sequenceItems.length-s+1;a.updateVal(f,"starty",e-d*i.boxMargin,Math.min),a.updateVal(f,"stopy",n+d*i.boxMargin,Math.max),a.updateVal(Zo.data,"startx",t-d*i.boxMargin,Math.min),a.updateVal(Zo.data,"stopx",r+d*i.boxMargin,Math.max),u!=="activation"&&(a.updateVal(f,"startx",t-d*i.boxMargin,Math.min),a.updateVal(f,"stopx",r+d*i.boxMargin,Math.max),a.updateVal(Zo.data,"starty",e-d*i.boxMargin,Math.min),a.updateVal(Zo.data,"stopy",n+d*i.boxMargin,Math.max))},"updateItemBounds")}o(l,"updateFn"),this.sequenceItems.forEach(l())},"updateBounds"),insert:o(function(t,e,r,n){let i=Math.min(t,r),a=Math.max(t,r),s=Math.min(e,n),l=Math.max(e,n);this.updateVal(Zo.data,"startx",i,Math.min),this.updateVal(Zo.data,"starty",s,Math.min),this.updateVal(Zo.data,"stopx",a,Math.max),this.updateVal(Zo.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return this.data},"getBounds")},uP=q6.sectionFills,Gde=q6.sectionColours,tHe=o(function(t,e,r){let n=me().journey,i="",a=n.height*2+n.diagramMarginY,s=r+a,l=0,u="#CCC",h="black",f=0;for(let[d,p]of e.entries()){if(i!==p.section){u=uP[l%uP.length],f=l%uP.length,h=Gde[l%Gde.length];let g=0,y=p.section;for(let x=d;x<e.length&&e[x].section==y;x++)g=g+1;let v={x:d*n.taskMargin+d*n.width+Np,y:50,text:p.section,fill:u,num:f,colour:h,taskCount:g};I1.drawSection(t,v,n),i=p.section,l++}let m=p.people.reduce((g,y)=>(ju[y]&&(g[y]=ju[y]),g),{});p.x=d*n.taskMargin+d*n.width+Np,p.y=s,p.width=n.diagramMarginX,p.height=n.diagramMarginY,p.colour=h,p.fill=u,p.num=f,p.actors=m,I1.drawTask(t,p,n),Zo.insert(p.x,p.y,p.x+p.width+n.taskMargin,300+5*30)}},"drawTasks"),hP={setConf:ZUe,draw:eHe}});var Ude={};hr(Ude,{diagram:()=>rHe});var rHe,Hde=N(()=>{"use strict";Rde();Mde();Ode();Vde();rHe={parser:Lde,db:lP,renderer:hP,styles:Ide,init:o(t=>{hP.setConf(t.journey),lP.clear()},"init")}});var dP,Qde,Zde=N(()=>{"use strict";dP=function(){var t=o(function(p,m,g,y){for(g=g||{},y=p.length;y--;g[p[y]]=m);return g},"o"),e=[6,8,10,11,12,14,16,17,20,21],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,16],u=[1,17],h={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:o(function(m,g,y,v,x,b,w){var C=b.length-1;switch(x){case 1:return b[C-1];case 2:this.$=[];break;case 3:b[C-1].push(b[C]),this.$=b[C-1];break;case 4:case 5:this.$=b[C];break;case 6:case 7:this.$=[];break;case 8:v.getCommonDb().setDiagramTitle(b[C].substr(6)),this.$=b[C].substr(6);break;case 9:this.$=b[C].trim(),v.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=b[C].trim(),v.getCommonDb().setAccDescription(this.$);break;case 12:v.addSection(b[C].substr(8)),this.$=b[C].substr(8);break;case 15:v.addTask(b[C],0,""),this.$=b[C];break;case 16:v.addEvent(b[C].substr(2)),this.$=b[C];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:18,11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,19]},{15:[1,20]},t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,4]),t(e,[2,9]),t(e,[2,10])],defaultActions:{},parseError:o(function(m,g){if(g.recoverable)this.trace(m);else{var y=new Error(m);throw y.hash=g,y}},"parseError"),parse:o(function(m){var g=this,y=[0],v=[],x=[null],b=[],w=this.table,C="",T=0,E=0,A=0,S=2,_=1,I=b.slice.call(arguments,1),D=Object.create(this.lexer),k={yy:{}};for(var L in this.yy)Object.prototype.hasOwnProperty.call(this.yy,L)&&(k.yy[L]=this.yy[L]);D.setInput(m,k.yy),k.yy.lexer=D,k.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var R=D.yylloc;b.push(R);var O=D.options&&D.options.ranges;typeof k.yy.parseError=="function"?this.parseError=k.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function M(X){y.length=y.length-2*X,x.length=x.length-X,b.length=b.length-X}o(M,"popStack");function B(){var X;return X=v.pop()||D.lex()||_,typeof X!="number"&&(X instanceof Array&&(v=X,X=v.pop()),X=g.symbols_[X]||X),X}o(B,"lex");for(var F,P,z,$,H,Q,j={},ie,ne,le,he;;){if(z=y[y.length-1],this.defaultActions[z]?$=this.defaultActions[z]:((F===null||typeof F>"u")&&(F=B()),$=w[z]&&w[z][F]),typeof $>"u"||!$.length||!$[0]){var K="";he=[];for(ie in w[z])this.terminals_[ie]&&ie>S&&he.push("'"+this.terminals_[ie]+"'");D.showPosition?K="Parse error on line "+(T+1)+`:
1884 +`+D.showPosition()+`
1885 +Expecting `+he.join(", ")+", got '"+(this.terminals_[F]||F)+"'":K="Parse error on line "+(T+1)+": Unexpected "+(F==_?"end of input":"'"+(this.terminals_[F]||F)+"'"),this.parseError(K,{text:D.match,token:this.terminals_[F]||F,line:D.yylineno,loc:R,expected:he})}if($[0]instanceof Array&&$.length>1)throw new Error("Parse Error: multiple actions possible at state: "+z+", token: "+F);switch($[0]){case 1:y.push(F),x.push(D.yytext),b.push(D.yylloc),y.push($[1]),F=null,P?(F=P,P=null):(E=D.yyleng,C=D.yytext,T=D.yylineno,R=D.yylloc,A>0&&A--);break;case 2:if(ne=this.productions_[$[1]][1],j.$=x[x.length-ne],j._$={first_line:b[b.length-(ne||1)].first_line,last_line:b[b.length-1].last_line,first_column:b[b.length-(ne||1)].first_column,last_column:b[b.length-1].last_column},O&&(j._$.range=[b[b.length-(ne||1)].range[0],b[b.length-1].range[1]]),Q=this.performAction.apply(j,[C,E,T,k.yy,$[1],x,b].concat(I)),typeof Q<"u")return Q;ne&&(y=y.slice(0,-1*ne*2),x=x.slice(0,-1*ne),b=b.slice(0,-1*ne)),y.push(this.productions_[$[1]][0]),x.push(j.$),b.push(j._$),le=w[y[y.length-2]][y[y.length-1]],y.push(le);break;case 3:return!0}}return!0},"parse")},f=function(){var p={EOF:1,parseError:o(function(g,y){if(this.yy.parser)this.yy.parser.parseError(g,y);else throw new Error(g)},"parseError"),setInput:o(function(m,g){return this.yy=g||this.yy||{},this._input=m,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var m=this._input[0];this.yytext+=m,this.yyleng++,this.offset++,this.match+=m,this.matched+=m;var g=m.match(/(?:\r\n?|\n).*/g);return g?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),m},"input"),unput:o(function(m){var g=m.length,y=m.split(/(?:\r\n?|\n)/g);this._input=m+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-g),this.offset-=g;var v=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),y.length-1&&(this.yylineno-=y.length-1);var x=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:y?(y.length===v.length?this.yylloc.first_column:0)+v[v.length-y.length].length-y[0].length:this.yylloc.first_column-g},this.options.ranges&&(this.yylloc.range=[x[0],x[0]+this.yyleng-g]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
1886 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(m){this.unput(this.match.slice(m))},"less"),pastInput:o(function(){var m=this.matched.substr(0,this.matched.length-this.match.length);return(m.length>20?"...":"")+m.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var m=this.match;return m.length<20&&(m+=this._input.substr(0,20-m.length)),(m.substr(0,20)+(m.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var m=this.pastInput(),g=new Array(m.length+1).join("-");return m+this.upcomingInput()+`
1887 +`+g+"^"},"showPosition"),test_match:o(function(m,g){var y,v,x;if(this.options.backtrack_lexer&&(x={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(x.yylloc.range=this.yylloc.range.slice(0))),v=m[0].match(/(?:\r\n?|\n).*/g),v&&(this.yylineno+=v.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:v?v[v.length-1].length-v[v.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+m[0].length},this.yytext+=m[0],this.match+=m[0],this.matches=m,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(m[0].length),this.matched+=m[0],y=this.performAction.call(this,this.yy,this,g,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),y)return y;if(this._backtrack){for(var b in x)this[b]=x[b];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var m,g,y,v;this._more||(this.yytext="",this.match="");for(var x=this._currentRules(),b=0;b<x.length;b++)if(y=this._input.match(this.rules[x[b]]),y&&(!g||y[0].length>g[0].length)){if(g=y,v=b,this.options.backtrack_lexer){if(m=this.test_match(y,x[b]),m!==!1)return m;if(this._backtrack){g=!1;continue}else return!1}else if(!this.options.flex)break}return g?(m=this.test_match(g,x[v]),m!==!1?m:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
1888 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var g=this.next();return g||this.lex()},"lex"),begin:o(function(g){this.conditionStack.push(g)},"begin"),popState:o(function(){var g=this.conditionStack.length-1;return g>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(g){return g=this.conditionStack.length-1-Math.abs(g||0),g>=0?this.conditionStack[g]:"INITIAL"},"topState"),pushState:o(function(g){this.begin(g)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(g,y,v,x){var b=x;switch(v){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^:\n]+)/i,/^(?::\s[^:\n]+)/i,/^(?:[^#:\n]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}};return p}();h.lexer=f;function d(){this.yy={}}return o(d,"Parser"),d.prototype=h,h.Parser=d,new d}();dP.parser=dP;Qde=dP});var mP={};hr(mP,{addEvent:()=>ope,addSection:()=>npe,addTask:()=>spe,addTaskOrg:()=>lpe,clear:()=>rpe,default:()=>hHe,getCommonDb:()=>tpe,getSections:()=>ipe,getTasks:()=>ape});var O1,epe,pP,Y6,P1,tpe,rpe,npe,ipe,ape,spe,ope,lpe,Jde,hHe,cpe=N(()=>{"use strict";mi();O1="",epe=0,pP=[],Y6=[],P1=[],tpe=o(()=>qy,"getCommonDb"),rpe=o(function(){pP.length=0,Y6.length=0,O1="",P1.length=0,Ar()},"clear"),npe=o(function(t){O1=t,pP.push(t)},"addSection"),ipe=o(function(){return pP},"getSections"),ape=o(function(){let t=Jde(),e=100,r=0;for(;!t&&r<e;)t=Jde(),r++;return Y6.push(...P1),Y6},"getTasks"),spe=o(function(t,e,r){let n={id:epe++,section:O1,type:O1,task:t,score:e||0,events:r?[r]:[]};P1.push(n)},"addTask"),ope=o(function(t){P1.find(r=>r.id===epe-1).events.push(t)},"addEvent"),lpe=o(function(t){let e={section:O1,type:O1,description:t,task:t,classes:[]};Y6.push(e)},"addTaskOrg"),Jde=o(function(){let t=o(function(r){return P1[r].processed},"compileTask"),e=!0;for(let[r,n]of P1.entries())t(r),e=e&&n.processed;return e},"compileTasks"),hHe={clear:rpe,getCommonDb:tpe,addSection:npe,getSections:ipe,getTasks:ape,addTask:spe,addTaskOrg:lpe,addEvent:ope}});function dpe(t,e){t.each(function(){var r=Ge(this),n=r.text().split(/(\s+|<br>)/).reverse(),i,a=[],s=1.1,l=r.attr("y"),u=parseFloat(r.attr("dy")),h=r.text(null).append("tspan").attr("x",0).attr("y",l).attr("dy",u+"em");for(let f=0;f<n.length;f++)i=n[n.length-1-f],a.push(i),h.text(a.join(" ").trim()),(h.node().getComputedTextLength()>e||i==="<br>")&&(a.pop(),h.text(a.join(" ").trim()),i==="<br>"?a=[""]:a=[i],h=r.append("tspan").attr("x",0).attr("y",l).attr("dy",s+"em").text(i))})}var fHe,X6,dHe,pHe,hpe,mHe,gHe,upe,yHe,vHe,xHe,gP,fpe,bHe,wHe,THe,kHe,bf,ppe=N(()=>{"use strict";dr();fHe=12,X6=o(function(t,e){let r=t.append("rect");return r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),r.attr("rx",e.rx),r.attr("ry",e.ry),e.class!==void 0&&r.attr("class",e.class),r},"drawRect"),dHe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=bl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=bl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),pHe=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),hpe=o(function(t,e){let r=e.text.replace(/<br\s*\/?>/gi," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class!==void 0&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),mHe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,hpe(t,e)},"drawLabel"),gHe=o(function(t,e,r){let n=t.append("g"),i=gP();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width,i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,X6(n,i),fpe(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),upe=-1,yHe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");upe++;let a=300+5*30;i.append("line").attr("id","task"+upe).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),dHe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=gP();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,X6(i,s),fpe(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),vHe=o(function(t,e){X6(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},"drawBackgroundRect"),xHe=o(function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},"getTextObj"),gP=o(function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),fpe=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(/<br\s*\/?>/gi);for(let v=0;v<y.length;v++){let x=v*m-m*(y.length-1)/2,b=a.append("text").attr("x",s+u/2).attr("y",l).attr("fill",p).style("text-anchor","middle").style("font-size",m).style("font-family",g);b.append("tspan").attr("x",s+u/2).attr("dy",x).text(y[v]),b.attr("y",l+h/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),n(b,f)}}o(e,"byTspan");function r(i,a,s,l,u,h,f,d){let p=a.append("switch"),g=p.append("foreignObject").attr("x",s).attr("y",l).attr("width",u).attr("height",h).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");g.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,p,s,l,u,h,f,d),n(g,f)}o(r,"byFo");function n(i,a){for(let s in a)s in a&&i.attr(s,a[s])}return o(n,"_setTextAttrs"),function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),bHe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},"initGraphics");o(dpe,"wrap");wHe=o(function(t,e,r,n){let i=r%fHe-1,a=t.append("g");e.section=i,a.attr("class",(e.class?e.class+" ":"")+"timeline-node "+("section-"+i));let s=a.append("g"),l=a.append("g"),h=l.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(dpe,e.width).node().getBBox(),f=n.fontSize?.replace?n.fontSize.replace("px",""):n.fontSize;return e.height=h.height+f*1.1*.5+e.padding,e.height=Math.max(e.height,e.maxHeight),e.width=e.width+2*e.padding,l.attr("transform","translate("+e.width/2+", "+e.padding/2+")"),kHe(s,e,i,n),e},"drawNode"),THe=o(function(t,e,r){let n=t.append("g"),a=n.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(dpe,e.width).node().getBBox(),s=r.fontSize?.replace?r.fontSize.replace("px",""):r.fontSize;return n.remove(),a.height+s*1.1*.5+e.padding},"getVirtualNodeHeight"),kHe=o(function(t,e,r){t.append("path").attr("id","node-"+e.id).attr("class","node-bkg node-"+e.type).attr("d",`M0 ${e.height-5} v${-e.height+2*5} q0,-5 5,-5 h${e.width-2*5} q5,0 5,5 v${e.height-5} H0 Z`),t.append("line").attr("class","node-line-"+r).attr("x1",0).attr("y1",e.height).attr("x2",e.width).attr("y2",e.height)},"defaultBkg"),bf={drawRect:X6,drawCircle:pHe,drawSection:gHe,drawText:hpe,drawLabel:mHe,drawTask:yHe,drawBackgroundRect:vHe,getTextObj:xHe,getNoteRect:gP,initGraphics:bHe,drawNode:wHe,getVirtualNodeHeight:THe}});var EHe,mpe,SHe,gpe,ype=N(()=>{"use strict";dr();ppe();vt();zt();Ei();EHe=o(function(t,e,r,n){let i=me(),a=i.leftMargin??50;Y.debug("timeline",n.db);let s=i.securityLevel,l;s==="sandbox"&&(l=Ge("#i"+e));let h=(s==="sandbox"?Ge(l.nodes()[0].contentDocument.body):Ge("body")).select("#"+e);h.append("g");let f=n.db.getTasks(),d=n.db.getCommonDb().getDiagramTitle();Y.debug("task",f),bf.initGraphics(h);let p=n.db.getSections();Y.debug("sections",p);let m=0,g=0,y=0,v=0,x=50+a,b=50;v=50;let w=0,C=!0;p.forEach(function(_){let I={number:w,descr:_,section:w,width:150,padding:20,maxHeight:m},D=bf.getVirtualNodeHeight(h,I,i);Y.debug("sectionHeight before draw",D),m=Math.max(m,D+20)});let T=0,E=0;Y.debug("tasks.length",f.length);for(let[_,I]of f.entries()){let D={number:_,descr:I,section:I.section,width:150,padding:20,maxHeight:g},k=bf.getVirtualNodeHeight(h,D,i);Y.debug("taskHeight before draw",k),g=Math.max(g,k+20),T=Math.max(T,I.events.length);let L=0;for(let R of I.events){let O={descr:R,section:I.section,number:I.section,width:150,padding:20,maxHeight:50};L+=bf.getVirtualNodeHeight(h,O,i)}E=Math.max(E,L)}Y.debug("maxSectionHeight before draw",m),Y.debug("maxTaskHeight before draw",g),p&&p.length>0?p.forEach(_=>{let I=f.filter(R=>R.section===_),D={number:w,descr:_,section:w,width:200*Math.max(I.length,1)-50,padding:20,maxHeight:m};Y.debug("sectionNode",D);let k=h.append("g"),L=bf.drawNode(k,D,w,i);Y.debug("sectionNode output",L),k.attr("transform",`translate(${x}, ${v})`),b+=m+50,I.length>0&&mpe(h,I,w,x,b,g,i,T,E,m,!1),x+=200*Math.max(I.length,1),b=v,w++}):(C=!1,mpe(h,f,w,x,b,g,i,T,E,m,!0));let A=h.node().getBBox();Y.debug("bounds",A),d&&h.append("text").text(d).attr("x",A.width/2-a).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),y=C?m+g+150:g+100,h.append("g").attr("class","lineWrapper").append("line").attr("x1",a).attr("y1",y).attr("x2",A.width+3*a).attr("y2",y).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),Ao(void 0,h,i.timeline?.padding??50,i.timeline?.useMaxWidth??!1)},"draw"),mpe=o(function(t,e,r,n,i,a,s,l,u,h,f){for(let d of e){let p={descr:d.task,section:r,number:r,width:150,padding:20,maxHeight:a};Y.debug("taskNode",p);let m=t.append("g").attr("class","taskWrapper"),y=bf.drawNode(m,p,r,s).height;if(Y.debug("taskHeight after draw",y),m.attr("transform",`translate(${n}, ${i})`),a=Math.max(a,y),d.events){let v=t.append("g").attr("class","lineWrapper"),x=a;i+=100,x=x+SHe(t,d.events,r,n,i,s),i-=100,v.append("line").attr("x1",n+190/2).attr("y1",i+a).attr("x2",n+190/2).attr("y2",i+a+(f?a:h)+u+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}n=n+200,f&&!s.timeline?.disableMulticolor&&r++}i=i-10},"drawTasks"),SHe=o(function(t,e,r,n,i,a){let s=0,l=i;i=i+100;for(let u of e){let h={descr:u,section:r,number:r,width:150,padding:20,maxHeight:50};Y.debug("eventNode",h);let f=t.append("g").attr("class","eventWrapper"),p=bf.drawNode(f,h,r,a).height;s=s+p,f.attr("transform",`translate(${n}, ${i})`),i=i+10+p}return i=l,s},"drawEvents"),gpe={setConf:o(()=>{},"setConf"),draw:EHe}});var CHe,AHe,vpe,xpe=N(()=>{"use strict";Ys();CHe=o(t=>{let e="";for(let r=0;r<t.THEME_COLOR_LIMIT;r++)t["lineColor"+r]=t["lineColor"+r]||t["cScaleInv"+r],ca(t["lineColor"+r])?t["lineColor"+r]=Dt(t["lineColor"+r],20):t["lineColor"+r]=Ot(t["lineColor"+r],20);for(let r=0;r<t.THEME_COLOR_LIMIT;r++){let n=""+(17-3*r);e+=`
1889 + .section-${r-1} rect, .section-${r-1} path, .section-${r-1} circle, .section-${r-1} path {
1890 + fill: ${t["cScale"+r]};
1891 + }
1892 + .section-${r-1} text {
1893 + fill: ${t["cScaleLabel"+r]};
1894 + }
1895 + .node-icon-${r-1} {
1896 + font-size: 40px;
1897 + color: ${t["cScaleLabel"+r]};
1898 + }
1899 + .section-edge-${r-1}{
1900 + stroke: ${t["cScale"+r]};
1901 + }
1902 + .edge-depth-${r-1}{
1903 + stroke-width: ${n};
1904 + }
1905 + .section-${r-1} line {
1906 + stroke: ${t["cScaleInv"+r]} ;
1907 + stroke-width: 3;
1908 + }
1909 +
1910 + .lineWrapper line{
1911 + stroke: ${t["cScaleLabel"+r]} ;
1912 + }
1913 +
1914 + .disabled, .disabled circle, .disabled text {
1915 + fill: lightgray;
1916 + }
1917 + .disabled text {
1918 + fill: #efefef;
1919 + }
1920 + `}return e},"genSections"),AHe=o(t=>`
1921 + .edge {
1922 + stroke-width: 3;
1923 + }
1924 + ${CHe(t)}
1925 + .section-root rect, .section-root path, .section-root circle {
1926 + fill: ${t.git0};
1927 + }
1928 + .section-root text {
1929 + fill: ${t.gitBranchLabel0};
1930 + }
1931 + .icon-container {
1932 + height:100%;
1933 + display: flex;
1934 + justify-content: center;
1935 + align-items: center;
1936 + }
1937 + .edge {
1938 + fill: none;
1939 + }
1940 + .eventWrapper {
1941 + filter: brightness(120%);
1942 + }
1943 +`,"getStyles"),vpe=AHe});var bpe={};hr(bpe,{diagram:()=>_He});var _He,wpe=N(()=>{"use strict";Zde();cpe();ype();xpe();_He={db:mP,renderer:gpe,parser:Qde,styles:vpe}});var yP,Epe,Spe=N(()=>{"use strict";yP=function(){var t=o(function(C,T,E,A){for(E=E||{},A=C.length;A--;E[C[A]]=T);return E},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,6,13,15,16,19,22],g=[1,33],y=[1,34],v=[1,6,7,11,13,15,16,19,22],x={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:o(function(T,E,A,S,_,I,D){var k=I.length-1;switch(_){case 6:case 7:return S;case 8:S.getLogger().trace("Stop NL ");break;case 9:S.getLogger().trace("Stop EOF ");break;case 11:S.getLogger().trace("Stop NL2 ");break;case 12:S.getLogger().trace("Stop EOF2 ");break;case 15:S.getLogger().info("Node: ",I[k].id),S.addNode(I[k-1].length,I[k].id,I[k].descr,I[k].type);break;case 16:S.getLogger().trace("Icon: ",I[k]),S.decorateNode({icon:I[k]});break;case 17:case 21:S.decorateNode({class:I[k]});break;case 18:S.getLogger().trace("SPACELIST");break;case 19:S.getLogger().trace("Node: ",I[k].id),S.addNode(0,I[k].id,I[k].descr,I[k].type);break;case 20:S.decorateNode({icon:I[k]});break;case 25:S.getLogger().trace("node found ..",I[k-2]),this.$={id:I[k-1],descr:I[k-1],type:S.getType(I[k-2],I[k])};break;case 26:this.$={id:I[k],descr:I[k],type:S.nodeType.DEFAULT};break;case 27:S.getLogger().trace("node found ..",I[k-3]),this.$={id:I[k-3],descr:I[k-1],type:S.getType(I[k-2],I[k])};break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:r,9:22,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:h,7:f,10:23,11:d},t(p,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:s,22:l}),t(p,[2,18]),t(p,[2,19]),t(p,[2,20]),t(p,[2,21]),t(p,[2,23]),t(p,[2,24]),t(p,[2,26],{19:[1,30]}),{20:[1,31]},{6:h,7:f,10:32,11:d},{1:[2,7],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(m,[2,14],{7:g,11:y}),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(p,[2,15]),t(p,[2,16]),t(p,[2,17]),{20:[1,35]},{21:[1,36]},t(m,[2,13],{7:g,11:y}),t(v,[2,11]),t(v,[2,12]),{21:[1,37]},t(p,[2,25]),t(p,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(T,E){if(E.recoverable)this.trace(T);else{var A=new Error(T);throw A.hash=E,A}},"parseError"),parse:o(function(T){var E=this,A=[0],S=[],_=[null],I=[],D=this.table,k="",L=0,R=0,O=0,M=2,B=1,F=I.slice.call(arguments,1),P=Object.create(this.lexer),z={yy:{}};for(var $ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$)&&(z.yy[$]=this.yy[$]);P.setInput(T,z.yy),z.yy.lexer=P,z.yy.parser=this,typeof P.yylloc>"u"&&(P.yylloc={});var H=P.yylloc;I.push(H);var Q=P.options&&P.options.ranges;typeof z.yy.parseError=="function"?this.parseError=z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function j(ae){A.length=A.length-2*ae,_.length=_.length-ae,I.length=I.length-ae}o(j,"popStack");function ie(){var ae;return ae=S.pop()||P.lex()||B,typeof ae!="number"&&(ae instanceof Array&&(S=ae,ae=S.pop()),ae=E.symbols_[ae]||ae),ae}o(ie,"lex");for(var ne,le,he,K,X,te,J={},se,ue,Z,Se;;){if(he=A[A.length-1],this.defaultActions[he]?K=this.defaultActions[he]:((ne===null||typeof ne>"u")&&(ne=ie()),K=D[he]&&D[he][ne]),typeof K>"u"||!K.length||!K[0]){var ce="";Se=[];for(se in D[he])this.terminals_[se]&&se>M&&Se.push("'"+this.terminals_[se]+"'");P.showPosition?ce="Parse error on line "+(L+1)+`:
1944 +`+P.showPosition()+`
1945 +Expecting `+Se.join(", ")+", got '"+(this.terminals_[ne]||ne)+"'":ce="Parse error on line "+(L+1)+": Unexpected "+(ne==B?"end of input":"'"+(this.terminals_[ne]||ne)+"'"),this.parseError(ce,{text:P.match,token:this.terminals_[ne]||ne,line:P.yylineno,loc:H,expected:Se})}if(K[0]instanceof Array&&K.length>1)throw new Error("Parse Error: multiple actions possible at state: "+he+", token: "+ne);switch(K[0]){case 1:A.push(ne),_.push(P.yytext),I.push(P.yylloc),A.push(K[1]),ne=null,le?(ne=le,le=null):(R=P.yyleng,k=P.yytext,L=P.yylineno,H=P.yylloc,O>0&&O--);break;case 2:if(ue=this.productions_[K[1]][1],J.$=_[_.length-ue],J._$={first_line:I[I.length-(ue||1)].first_line,last_line:I[I.length-1].last_line,first_column:I[I.length-(ue||1)].first_column,last_column:I[I.length-1].last_column},Q&&(J._$.range=[I[I.length-(ue||1)].range[0],I[I.length-1].range[1]]),te=this.performAction.apply(J,[k,R,L,z.yy,K[1],_,I].concat(F)),typeof te<"u")return te;ue&&(A=A.slice(0,-1*ue*2),_=_.slice(0,-1*ue),I=I.slice(0,-1*ue)),A.push(this.productions_[K[1]][0]),_.push(J.$),I.push(J._$),Z=D[A[A.length-2]][A[A.length-1]],A.push(Z);break;case 3:return!0}}return!0},"parse")},b=function(){var C={EOF:1,parseError:o(function(E,A){if(this.yy.parser)this.yy.parser.parseError(E,A);else throw new Error(E)},"parseError"),setInput:o(function(T,E){return this.yy=E||this.yy||{},this._input=T,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var T=this._input[0];this.yytext+=T,this.yyleng++,this.offset++,this.match+=T,this.matched+=T;var E=T.match(/(?:\r\n?|\n).*/g);return E?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),T},"input"),unput:o(function(T){var E=T.length,A=T.split(/(?:\r\n?|\n)/g);this._input=T+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-E),this.offset-=E;var S=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),A.length-1&&(this.yylineno-=A.length-1);var _=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:A?(A.length===S.length?this.yylloc.first_column:0)+S[S.length-A.length].length-A[0].length:this.yylloc.first_column-E},this.options.ranges&&(this.yylloc.range=[_[0],_[0]+this.yyleng-E]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
1946 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(T){this.unput(this.match.slice(T))},"less"),pastInput:o(function(){var T=this.matched.substr(0,this.matched.length-this.match.length);return(T.length>20?"...":"")+T.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var T=this.match;return T.length<20&&(T+=this._input.substr(0,20-T.length)),(T.substr(0,20)+(T.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var T=this.pastInput(),E=new Array(T.length+1).join("-");return T+this.upcomingInput()+`
1947 +`+E+"^"},"showPosition"),test_match:o(function(T,E){var A,S,_;if(this.options.backtrack_lexer&&(_={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(_.yylloc.range=this.yylloc.range.slice(0))),S=T[0].match(/(?:\r\n?|\n).*/g),S&&(this.yylineno+=S.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:S?S[S.length-1].length-S[S.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+T[0].length},this.yytext+=T[0],this.match+=T[0],this.matches=T,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(T[0].length),this.matched+=T[0],A=this.performAction.call(this,this.yy,this,E,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),A)return A;if(this._backtrack){for(var I in _)this[I]=_[I];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var T,E,A,S;this._more||(this.yytext="",this.match="");for(var _=this._currentRules(),I=0;I<_.length;I++)if(A=this._input.match(this.rules[_[I]]),A&&(!E||A[0].length>E[0].length)){if(E=A,S=I,this.options.backtrack_lexer){if(T=this.test_match(A,_[I]),T!==!1)return T;if(this._backtrack){E=!1;continue}else return!1}else if(!this.options.flex)break}return E?(T=this.test_match(E,_[S]),T!==!1?T:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
1948 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var E=this.next();return E||this.lex()},"lex"),begin:o(function(E){this.conditionStack.push(E)},"begin"),popState:o(function(){var E=this.conditionStack.length-1;return E>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(E){return E=this.conditionStack.length-1-Math.abs(E||0),E>=0?this.conditionStack[E]:"INITIAL"},"topState"),pushState:o(function(E){this.begin(E)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(E,A,S,_){var I=_;switch(S){case 0:return E.getLogger().trace("Found comment",A.yytext),6;break;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;break;case 4:this.popState();break;case 5:E.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return E.getLogger().trace("SPACELINE"),6;break;case 7:return 7;case 8:return 15;case 9:E.getLogger().trace("end icon"),this.popState();break;case 10:return E.getLogger().trace("Exploding node"),this.begin("NODE"),19;break;case 11:return E.getLogger().trace("Cloud"),this.begin("NODE"),19;break;case 12:return E.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;break;case 13:return E.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;break;case 14:return this.begin("NODE"),19;break;case 15:return this.begin("NODE"),19;break;case 16:return this.begin("NODE"),19;break;case 17:return this.begin("NODE"),19;break;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:E.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return E.getLogger().trace("description:",A.yytext),"NODE_DESCR";break;case 26:this.popState();break;case 27:return this.popState(),E.getLogger().trace("node end ))"),"NODE_DEND";break;case 28:return this.popState(),E.getLogger().trace("node end )"),"NODE_DEND";break;case 29:return this.popState(),E.getLogger().trace("node end ...",A.yytext),"NODE_DEND";break;case 30:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 31:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 32:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 33:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 34:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 35:return E.getLogger().trace("Long description:",A.yytext),20;break;case 36:return E.getLogger().trace("Long description:",A.yytext),20;break}},"anonymous"),rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return C}();x.lexer=b;function w(){this.yy={}}return o(w,"Parser"),w.prototype=x,x.Parser=w,new w}();yP.parser=yP;Epe=yP});var $l,Cpe,vP,NHe,MHe,IHe,OHe,Vi,PHe,BHe,FHe,$He,zHe,GHe,VHe,Ape,_pe=N(()=>{"use strict";zt();gr();vt();Ya();$l=[],Cpe=0,vP={},NHe=o(()=>{$l=[],Cpe=0,vP={}},"clear"),MHe=o(function(t){for(let e=$l.length-1;e>=0;e--)if($l[e].level<t)return $l[e];return null},"getParent"),IHe=o(()=>$l.length>0?$l[0]:null,"getMindmap"),OHe=o((t,e,r,n)=>{Y.info("addNode",t,e,r,n);let i=me(),a=i.mindmap?.padding??or.mindmap.padding;switch(n){case Vi.ROUNDED_RECT:case Vi.RECT:case Vi.HEXAGON:a*=2}let s={id:Cpe++,nodeId:Tr(e,i),level:t,descr:Tr(r,i),type:n,children:[],width:i.mindmap?.maxNodeWidth??or.mindmap.maxNodeWidth,padding:a},l=MHe(t);if(l)l.children.push(s),$l.push(s);else if($l.length===0)$l.push(s);else throw new Error('There can be only one root. No parent could be found for ("'+s.descr+'")')},"addNode"),Vi={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},PHe=o((t,e)=>{switch(Y.debug("In get type",t,e),t){case"[":return Vi.RECT;case"(":return e===")"?Vi.ROUNDED_RECT:Vi.CLOUD;case"((":return Vi.CIRCLE;case")":return Vi.CLOUD;case"))":return Vi.BANG;case"{{":return Vi.HEXAGON;default:return Vi.DEFAULT}},"getType"),BHe=o((t,e)=>{vP[t]=e},"setElementForId"),FHe=o(t=>{if(!t)return;let e=me(),r=$l[$l.length-1];t.icon&&(r.icon=Tr(t.icon,e)),t.class&&(r.class=Tr(t.class,e))},"decorateNode"),$He=o(t=>{switch(t){case Vi.DEFAULT:return"no-border";case Vi.RECT:return"rect";case Vi.ROUNDED_RECT:return"rounded-rect";case Vi.CIRCLE:return"circle";case Vi.CLOUD:return"cloud";case Vi.BANG:return"bang";case Vi.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),zHe=o(()=>Y,"getLogger"),GHe=o(t=>vP[t],"getElementById"),VHe={clear:NHe,addNode:OHe,getMindmap:IHe,nodeType:Vi,getType:PHe,setElementForId:BHe,decorateNode:FHe,type2Str:$He,getLogger:zHe,getElementById:GHe},Ape=VHe});function Wi(t){"@babel/helpers - typeof";return Wi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Wi(t)}function Mf(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Dpe(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function If(t,e,r){return e&&Dpe(t.prototype,e),r&&Dpe(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}function X0e(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function _i(t,e){return HHe(t)||qHe(t,e)||ZP(t,e)||XHe()}function j0e(t){return UHe(t)||WHe(t)||ZP(t)||YHe()}function UHe(t){if(Array.isArray(t))return OP(t)}function HHe(t){if(Array.isArray(t))return t}function WHe(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function qHe(t,e){var r=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(r!=null){var n=[],i=!0,a=!1,s,l;try{for(r=r.call(t);!(i=(s=r.next()).done)&&(n.push(s.value),!(e&&n.length===e));i=!0);}catch(u){a=!0,l=u}finally{try{!i&&r.return!=null&&r.return()}finally{if(a)throw l}}return n}}function ZP(t,e){if(t){if(typeof t=="string")return OP(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return OP(t,e)}}function OP(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function YHe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
1949 +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function XHe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
1950 +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function mo(t,e){var r=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=ZP(t))||e&&t&&typeof t.length=="number"){r&&(t=r);var n=0,i=o(function(){},"F");return{s:i,n:o(function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},"n"),e:o(function(u){throw u},"e"),f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
1951 +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a=!0,s=!1,l;return{s:o(function(){r=r.call(t)},"s"),n:o(function(){var u=r.next();return a=u.done,u},"n"),e:o(function(u){s=!0,l=u},"e"),f:o(function(){try{!a&&r.return!=null&&r.return()}finally{if(s)throw l}},"f")}}function yWe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}function vWe(t,e){return e={exports:{}},t(e,e.exports),e.exports}function SWe(t){for(var e=t.length;e--&&EWe.test(t.charAt(e)););return e}function _We(t){return t&&t.slice(0,CWe(t)+1).replace(AWe,"")}function MWe(t){var e=RWe.call(t,Ab),r=t[Ab];try{t[Ab]=void 0;var n=!0}catch{}var i=NWe.call(t);return n&&(e?t[Ab]=r:delete t[Ab]),i}function BWe(t){return PWe.call(t)}function GWe(t){return t==null?t===void 0?zWe:$We:Npe&&Npe in Object(t)?IWe(t):FWe(t)}function VWe(t){return t!=null&&typeof t=="object"}function WWe(t){return typeof t=="symbol"||UWe(t)&&ame(t)==HWe}function KWe(t){if(typeof t=="number")return t;if(r4(t))return Mpe;if(zp(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=zp(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=DWe(t);var r=YWe.test(t);return r||XWe.test(t)?jWe(t.slice(2),r?2:8):qWe.test(t)?Mpe:+t}function eqe(t,e,r){var n,i,a,s,l,u,h=0,f=!1,d=!1,p=!0;if(typeof t!="function")throw new TypeError(QWe);e=Ipe(e)||0,zp(r)&&(f=!!r.leading,d="maxWait"in r,a=d?ZWe(Ipe(r.maxWait)||0,e):a,p="trailing"in r?!!r.trailing:p);function m(E){var A=n,S=i;return n=i=void 0,h=E,s=t.apply(S,A),s}o(m,"invokeFunc");function g(E){return h=E,l=setTimeout(x,e),f?m(E):s}o(g,"leadingEdge");function y(E){var A=E-u,S=E-h,_=e-A;return d?JWe(_,a-S):_}o(y,"remainingWait");function v(E){var A=E-u,S=E-h;return u===void 0||A>=e||A<0||d&&S>=a}o(v,"shouldInvoke");function x(){var E=xP();if(v(E))return b(E);l=setTimeout(x,y(E))}o(x,"timerExpired");function b(E){return l=void 0,p&&n?m(E):(n=i=void 0,s)}o(b,"trailingEdge");function w(){l!==void 0&&clearTimeout(l),h=0,n=u=i=l=void 0}o(w,"cancel");function C(){return l===void 0?s:b(xP())}o(C,"flush");function T(){var E=xP(),A=v(E);if(n=arguments,i=this,u=E,A){if(l===void 0)return g(u);if(d)return clearTimeout(l),l=setTimeout(x,e),m(u)}return l===void 0&&(l=setTimeout(x,e)),s}return o(T,"debounced"),T.cancel=w,T.flush=C,T}function IS(t,e,r,n,i,a){var s;return si(t)?s=t:s=Q1[t]||Q1.euclidean,e===0&&si(t)?s(i,a):s(e,r,n,i,a)}function qYe(t,e){if(OS(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||r4(t)?!0:WYe.test(t)||!HYe.test(t)||e!=null&&t in Object(e)}function ZYe(t){if(!zp(t))return!1;var e=ame(t);return e==jYe||e==KYe||e==XYe||e==QYe}function tXe(t){return!!e0e&&e0e in t}function aXe(t){if(t!=null){try{return iXe.call(t)}catch{}try{return t+""}catch{}}return""}function pXe(t){if(!zp(t)||rXe(t))return!1;var e=JYe(t)?dXe:lXe;return e.test(sXe(t))}function gXe(t,e){return t?.[e]}function vXe(t,e){var r=yXe(t,e);return mXe(r)?r:void 0}function bXe(){this.__data__=jb?jb(null):{},this.size=0}function TXe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}function AXe(t){var e=this.__data__;if(jb){var r=e[t];return r===EXe?void 0:r}return CXe.call(e,t)?e[t]:void 0}function RXe(t){var e=this.__data__;return jb?e[t]!==void 0:LXe.call(e,t)}function IXe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=jb&&e===void 0?MXe:e,this}function ty(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function PXe(){this.__data__=[],this.size=0}function FXe(t,e){return t===e||t!==t&&e!==e}function $Xe(t,e){for(var r=t.length;r--;)if(Lme(t[r][0],e))return r;return-1}function VXe(t){var e=this.__data__,r=PS(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():GXe.call(e,r,1),--this.size,!0}function HXe(t){var e=this.__data__,r=PS(e,t);return r<0?void 0:e[r][1]}function qXe(t){return PS(this.__data__,t)>-1}function XXe(t,e){var r=this.__data__,n=PS(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}function ry(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function JXe(){this.size=0,this.__data__={hash:new t0e,map:new(ZXe||KXe),string:new t0e}}function tje(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}function nje(t,e){var r=t.__data__;return rje(e)?r[typeof e=="string"?"string":"hash"]:r.map}function ije(t){var e=BS(this,t).delete(t);return this.size-=e?1:0,e}function sje(t){return BS(this,t).get(t)}function lje(t){return BS(this,t).has(t)}function uje(t,e){var r=BS(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}function ny(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function cB(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(fje);var r=o(function(){var n=arguments,i=e?e.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var s=t.apply(this,n);return r.cache=a.set(i,s)||a,s},"memoized");return r.cache=new(cB.Cache||Rme),r}function mje(t){var e=dje(t,function(n){return r.size===pje&&r.clear(),n}),r=e.cache;return e}function bje(t,e){for(var r=-1,n=t==null?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}function Ime(t){if(typeof t=="string")return t;if(OS(t))return Mme(t,Ime)+"";if(r4(t))return n0e?n0e.call(t):"";var e=t+"";return e=="0"&&1/t==-wje?"-0":e}function kje(t){return t==null?"":Tje(t)}function Eje(t,e){return OS(t)?t:YYe(t,e)?[t]:Nme(Ome(t))}function Cje(t){if(typeof t=="string"||r4(t))return t;var e=t+"";return e=="0"&&1/t==-Sje?"-0":e}function Aje(t,e){e=Pme(e,t);for(var r=0,n=e.length;t!=null&&r<n;)t=t[uB(e[r++])];return r&&r==n?t:void 0}function Dje(t,e,r){var n=t==null?void 0:_je(t,e);return n===void 0?r:n}function Nje(t,e,r){e=="__proto__"&&i0e?i0e(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}function Pje(t,e,r){var n=t[e];(!(Oje.call(t,e)&&Lme(n,r))||r===void 0&&!(e in t))&&Mje(t,e,r)}function zje(t,e){var r=typeof t;return e=e??Fje,!!e&&(r=="number"||r!="symbol"&&$je.test(t))&&t>-1&&t%1==0&&t<e}function Vje(t,e,r,n){if(!zp(t))return t;e=Pme(e,t);for(var i=-1,a=e.length,s=a-1,l=t;l!=null&&++i<a;){var u=uB(e[i]),h=r;if(u==="__proto__"||u==="constructor"||u==="prototype")return t;if(i!=s){var f=l[u];h=n?n(f,u,l):void 0,h===void 0&&(h=zp(f)?f:Gje(e[i+1])?[]:{})}Bje(l,u,h),l=l[u]}return t}function Hje(t,e,r){return t==null?t:Uje(t,e,r)}function qje(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}function Xje(t){return OS(t)?Mme(t,uB):r4(t)?[t]:Yje(Nme(Ome(t)))}function fB(t,e,r,n){for(var i=[],a=new J1,s=t.cy(),l=s.hasCompoundNodes(),u=0;u<t.length;u++){var h=t[u];r?i.push(h):l&&n(i,a,h)}for(;i.length>0;){var f=i.shift();e(f),a.add(f.id()),l&&n(i,a,f)}return t}function Fme(t,e,r){if(r.isParent())for(var n=r._private.children,i=0;i<n.length;i++){var a=n[i];e.has(a.id())||t.push(a)}}function $me(t,e,r){if(r.isChild()){var n=r._private.parent;e.has(n.id())||t.push(n)}}function dKe(t,e,r){$me(t,e,r),Fme(t,e,r)}function SP(t){return function(e){var r=this;if(e===void 0&&(e=!0),r.length!==0)if(r.isNode()&&!r.removed()){for(var n=0,i=r[0],a=i._private.edges,s=0;s<a.length;s++){var l=a[s];!e&&l.isLoop()||(n+=t(i,l))}return n}else return}}function F1(t,e){return function(r){for(var n,i=this.nodes(),a=0;a<i.length;a++){var s=i[a],l=s[t](r);l!==void 0&&(n===void 0||e(l,n))&&(n=l)}return n}}function Lb(){return!1}function rS(){return!0}function $S(){for(var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:NKe,e=arguments.length>1?arguments[1]:void 0,r=0;r<u0e.length;r++){var n=u0e[r];this[n]=t[n]||Xme[n]}this.context=e||this.context,this.listeners=[],this.emitting=0}function Jme(t,e,r){var n=r._private,i=n.styleCache=n.styleCache||[],a;return(a=i[t])!=null||(a=i[t]=e(r)),a}function zS(t,e){return t=_f(t),o(function(n){return Jme(t,e,n)},"cachedStyleFunction")}function GS(t,e){t=_f(t);var r=o(function(i){return e.call(i)},"selfFn");return o(function(){var i=this[0];if(i)return Jme(t,r,i)},"cachedPrototypeStyleFunction")}function AP(t,e){var r=t._private,n=r.data.parent?t.parents():null;if(n)for(var i=0;i<n.length;i++){var a=n[i];if(!e(a))return!1}return!0}function dB(t){var e=t.ok,r=t.edgeOkViaNode||t.ok,n=t.parentOk||t.ok;return function(){var i=this.cy();if(!i.styleEnabled())return!0;var a=this[0],s=i.hasCompoundNodes();if(a){var l=a._private;if(!e(a))return!1;if(a.isNode())return!s||AP(a,n);var u=l.source,h=l.target;return r(u)&&(!s||AP(u,r))&&(u===h||r(h)&&(!s||AP(h,r)))}}}function f0e(t){return function(){var e=arguments,r=[];if(e.length===2){var n=e[0],i=e[1];this.on(t.event,n,i)}else if(e.length===1&&si(e[0])){var a=e[0];this.on(t.event,a)}else if(e.length===0||e.length===1&&En(e[0])){for(var s=e.length===1?e[0]:null,l=0;l<this.length;l++){var u=this[l],h=!t.ableField||u._private[t.ableField],f=u._private[t.field]!=t.value;if(t.overrideAble){var d=t.overrideAble(u);if(d!==void 0&&(h=d,!d))return this}h&&(u._private[t.field]=t.value,f&&r.push(u))}var p=this.spawn(r);p.updateStyle(),p.emit(t.event),s&&p.emit(s)}return this}}function ay(t){Cf[t.field]=function(){var e=this[0];if(e){if(t.overrideField){var r=t.overrideField(e);if(r!==void 0)return r}return e._private[t.field]}},Cf[t.on]=f0e({event:t.on,field:t.field,ableField:t.ableField,overrideAble:t.overrideAble,value:!0}),Cf[t.off]=f0e({event:t.off,field:t.field,ableField:t.ableField,overrideAble:t.overrideAble,value:!1})}function g0e(t){return o(function(r){for(var n=[],i=0;i<this.length;i++){var a=this[i],s=a._private[t.attr];s&&n.push(s)}return this.spawn(n,!0).filter(r)},"sourceImpl")}function y0e(t){return o(function(r){var n=[],i=this._private.cy,a=t||{};Zt(r)&&(r=i.$(r));for(var s=0;s<r.length;s++)for(var l=r[s]._private.edges,u=0;u<l.length;u++){var h=l[u],f=h._private.data,d=this.hasElementWithId(f.source)&&r.hasElementWithId(f.target),p=r.hasElementWithId(f.source)&&this.hasElementWithId(f.target),m=d||p;m&&((a.thisIsSrc||a.thisIsTgt)&&(a.thisIsSrc&&!d||a.thisIsTgt&&!p)||n.push(h))}return this.spawn(n,!0)},"edgesWithImpl")}function v0e(t){var e={codirected:!1};return t=rr({},e,t),o(function(n){for(var i=[],a=this.edges(),s=t,l=0;l<a.length;l++)for(var u=a[l],h=u._private,f=h.source,d=f._private.data.id,p=h.data.target,m=f._private.edges,g=0;g<m.length;g++){var y=m[g],v=y._private.data,x=v.target,b=v.source,w=x===p&&b===d,C=d===x&&p===b;(s.codirected&&w||!s.codirected&&(w||C))&&i.push(y)}return this.spawn(i,!0).filter(n)},"parallelEdgesImpl")}function UKe(t,e,r,n){var i=4,a=.001,s=1e-7,l=10,u=11,h=1/(u-1),f=typeof Float32Array<"u";if(arguments.length!==4)return!1;for(var d=0;d<4;++d)if(typeof arguments[d]!="number"||isNaN(arguments[d])||!isFinite(arguments[d]))return!1;t=Math.min(t,1),r=Math.min(r,1),t=Math.max(t,0),r=Math.max(r,0);var p=f?new Float32Array(u):new Array(u);function m(I,D){return 1-3*D+3*I}o(m,"A");function g(I,D){return 3*D-6*I}o(g,"B");function y(I){return 3*I}o(y,"C");function v(I,D,k){return((m(D,k)*I+g(D,k))*I+y(D))*I}o(v,"calcBezier");function x(I,D,k){return 3*m(D,k)*I*I+2*g(D,k)*I+y(D)}o(x,"getSlope");function b(I,D){for(var k=0;k<i;++k){var L=x(D,t,r);if(L===0)return D;var R=v(D,t,r)-I;D-=R/L}return D}o(b,"newtonRaphsonIterate");function w(){for(var I=0;I<u;++I)p[I]=v(I*h,t,r)}o(w,"calcSampleValues");function C(I,D,k){var L,R,O=0;do R=D+(k-D)/2,L=v(R,t,r)-I,L>0?k=R:D=R;while(Math.abs(L)>s&&++O<l);return R}o(C,"binarySubdivide");function T(I){for(var D=0,k=1,L=u-1;k!==L&&p[k]<=I;++k)D+=h;--k;var R=(I-p[k])/(p[k+1]-p[k]),O=D+R*h,M=x(O,t,r);return M>=a?b(I,O):M===0?O:C(I,D,D+h)}o(T,"getTForX");var E=!1;function A(){E=!0,(t!==e||r!==n)&&w()}o(A,"precompute");var S=o(function(D){return E||A(),t===e&&r===n?D:D===0?0:D===1?1:v(T(D),e,n)},"f");S.getControlPoints=function(){return[{x:t,y:e},{x:r,y:n}]};var _="generateBezier("+[t,e,r,n]+")";return S.toString=function(){return _},S}function x0e(t,e,r,n,i){if(n===1||e===r)return r;var a=i(e,r,n);return t==null||((t.roundValue||t.color)&&(a=Math.round(a)),t.min!==void 0&&(a=Math.max(a,t.min)),t.max!==void 0&&(a=Math.min(a,t.max))),a}function b0e(t,e){return t.pfValue!=null||t.value!=null?t.pfValue!=null&&(e==null||e.type.units!=="%")?t.pfValue:t.value:t}function $1(t,e,r,n,i){var a=i!=null?i.type:null;r<0?r=0:r>1&&(r=1);var s=b0e(t,i),l=b0e(e,i);if(Ct(s)&&Ct(l))return x0e(a,s,l,r,n);if(En(s)&&En(l)){for(var u=[],h=0;h<l.length;h++){var f=s[h],d=l[h];if(f!=null&&d!=null){var p=x0e(a,f,d,r,n);u.push(p)}else u.push(d)}return u}}function WKe(t,e,r,n){var i=!n,a=t._private,s=e._private,l=s.easing,u=s.startTime,h=n?t:t.cy(),f=h.style();if(!s.easingImpl)if(l==null)s.easingImpl=dS.linear;else{var d;if(Zt(l)){var p=f.parse("transition-timing-function",l);d=p.value}else d=l;var m,g;Zt(d)?(m=d,g=[]):(m=d[1],g=d.slice(2).map(function(P){return+P})),g.length>0?(m==="spring"&&g.push(s.duration),s.easingImpl=dS[m].apply(null,g)):s.easingImpl=dS[m]}var y=s.easingImpl,v;if(s.duration===0?v=1:v=(r-u)/s.duration,s.applying&&(v=s.progress),v<0?v=0:v>1&&(v=1),s.delay==null){var x=s.startPosition,b=s.position;if(b&&i&&!t.locked()){var w={};Rb(x.x,b.x)&&(w.x=$1(x.x,b.x,v,y)),Rb(x.y,b.y)&&(w.y=$1(x.y,b.y,v,y)),t.position(w)}var C=s.startPan,T=s.pan,E=a.pan,A=T!=null&&n;A&&(Rb(C.x,T.x)&&(E.x=$1(C.x,T.x,v,y)),Rb(C.y,T.y)&&(E.y=$1(C.y,T.y,v,y)),t.emit("pan"));var S=s.startZoom,_=s.zoom,I=_!=null&&n;I&&(Rb(S,_)&&(a.zoom=Yb(a.minZoom,$1(S,_,v,y),a.maxZoom)),t.emit("zoom")),(A||I)&&t.emit("viewport");var D=s.style;if(D&&D.length>0&&i){for(var k=0;k<D.length;k++){var L=D[k],R=L.name,O=L,M=s.startStyle[R],B=f.properties[M.name],F=$1(M,O,v,y,B);f.overrideBypass(t,R,F)}t.emit("style")}}return s.progress=v,v}function Rb(t,e){return t==null||e==null?!1:Ct(t)&&Ct(e)?!0:!!(t&&e)}function qKe(t,e,r,n){var i=e._private;i.started=!0,i.startTime=r-i.progress*i.duration}function w0e(t,e){var r=e._private.aniEles,n=[];function i(f,d){var p=f._private,m=p.animation.current,g=p.animation.queue,y=!1;if(m.length===0){var v=g.shift();v&&m.push(v)}for(var x=o(function(E){for(var A=E.length-1;A>=0;A--){var S=E[A];S()}E.splice(0,E.length)},"callbacks"),b=m.length-1;b>=0;b--){var w=m[b],C=w._private;if(C.stopped){m.splice(b,1),C.hooked=!1,C.playing=!1,C.started=!1,x(C.frames);continue}!C.playing&&!C.applying||(C.playing&&C.applying&&(C.applying=!1),C.started||qKe(f,w,t),WKe(f,w,t,d),C.applying&&(C.applying=!1),x(C.frames),C.step!=null&&C.step(t),w.completed()&&(m.splice(b,1),C.hooked=!1,C.playing=!1,C.started=!1,x(C.completes)),y=!0)}return!d&&m.length===0&&g.length===0&&n.push(f),y}o(i,"stepOne");for(var a=!1,s=0;s<r.length;s++){var l=r[s],u=i(l);a=a||u}var h=i(e,!0);(a||h)&&(r.length>0?e.notify("draw",r):e.notify("draw")),r.unmerge(n),e.emit("step")}function tge(t){this.options=rr({},eQe,tQe,t)}function rge(t){this.options=rr({},rQe,t)}function nge(t){this.options=rr({},nQe,t)}function HS(t){this.options=rr({},iQe,t),this.options.layout=this;var e=this.options.eles.nodes(),r=this.options.eles.edges(),n=r.filter(function(i){var a=i.source().data("id"),s=i.target().data("id"),l=e.some(function(h){return h.data("id")===a}),u=e.some(function(h){return h.data("id")===s});return!l||!u});this.options.eles=this.options.eles.not(n)}function age(t){this.options=rr({},wQe,t)}function gB(t){this.options=rr({},TQe,t)}function sge(t){this.options=rr({},kQe,t)}function oge(t){this.options=rr({},EQe,t)}function lge(t){this.options=t,this.notifications=0}function hge(t,e){e.radius===0?t.lineTo(e.cx,e.cy):t.arc(e.cx,e.cy,e.radius,e.startAngle,e.endAngle,e.counterClockwise)}function vB(t,e,r,n){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0;return n===0||e.radius===0?{cx:e.x,cy:e.y,radius:0,startX:e.x,startY:e.y,stopX:e.x,stopY:e.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(AQe(t,e,r,n,i),{cx:HP,cy:WP,radius:Bp,startX:cge,startY:uge,stopX:qP,stopY:YP,startAngle:qc.ang+Math.PI/2*Fp,endAngle:Jo.ang-Math.PI/2*Fp,counterClockwise:gS})}function fge(t){var e=[];if(t!=null){for(var r=0;r<t.length;r+=2){var n=t[r],i=t[r+1];e.push({x:n,y:i})}return e}}function _Qe(t,e,r){for(var n=o(function(h,f,d,p){return oa(h,f,d,p)},"qbezierAt$1"),i=e._private,a=i.rstyle.bezierPts,s=0;s<t.bezierProjPcts.length;s++){var l=t.bezierProjPcts[s];a.push({x:n(r[0],r[2],r[4],l),y:n(r[1],r[3],r[5],l)})}}function iZe(t,e){for(var r=0;r<e.length;r++){var n=e[r];t.lineTo(n.x,n.y)}}function aZe(t,e,r){for(var n,i=0;i<e.length;i++){var a=e[i];i===0&&(n=a),t.lineTo(a.x,a.y)}t.quadraticCurveTo(r.x,r.y,n.x,n.y)}function $0e(t,e,r){t.beginPath&&t.beginPath();for(var n=e,i=0;i<n.length;i++){var a=n[i];t.lineTo(a.x,a.y)}var s=r,l=r[0];t.moveTo(l.x,l.y);for(var i=1;i<s.length;i++){var a=s[i];t.lineTo(a.x,a.y)}t.closePath&&t.closePath()}function sZe(t,e,r,n,i){t.beginPath&&t.beginPath(),t.arc(r,n,i,0,Math.PI*2,!1);var a=e,s=a[0];t.moveTo(s.x,s.y);for(var l=0;l<a.length;l++){var u=a[l];t.lineTo(u.x,u.y)}t.closePath&&t.closePath()}function oZe(t,e,r,n){t.arc(e,r,n,0,Math.PI*2,!1)}function RP(t,e,r,n,i){var a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:5,s=arguments.length>6?arguments[6]:void 0;t.beginPath(),t.moveTo(e+a,r),t.lineTo(e+n-a,r),t.quadraticCurveTo(e+n,r,e+n,r+a),t.lineTo(e+n,r+i-a),t.quadraticCurveTo(e+n,r+i,e+n-a,r+i),t.lineTo(e+a,r+i),t.quadraticCurveTo(e,r+i,e,r+i-a),t.lineTo(e,r+a),t.quadraticCurveTo(e,r,e+a,r),t.closePath(),s?t.stroke():t.fill()}function z0e(t,e,r){var n=t.createShader(e);if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw new Error(t.getShaderInfoLog(n));return n}function pZe(t,e,r){var n=z0e(t,t.VERTEX_SHADER,e),i=z0e(t,t.FRAGMENT_SHADER,r),a=t.createProgram();if(t.attachShader(a,n),t.attachShader(a,i),t.linkProgram(a),!t.getProgramParameter(a,t.LINK_STATUS))throw new Error("Could not initialize shaders");return a}function mZe(t,e,r){r===void 0&&(r=e);var n=t.makeOffscreenCanvas(e,r),i=n.context=n.getContext("2d");return n.clear=function(){return i.clearRect(0,0,n.width,n.height)},n.clear(),n}function wB(t){var e=t.pixelRatio,r=t.cy.zoom(),n=t.cy.pan();return{zoom:r*e,pan:{x:n.x*e,y:n.y*e}}}function NP(t,e,r,n,i){var a=n*r+e.x,s=i*r+e.y;return s=Math.round(t.canvasHeight-s),[a,s]}function oS(t,e,r){var n=t[0]/255,i=t[1]/255,a=t[2]/255,s=e,l=r||new Array(4);return l[0]=n*s,l[1]=i*s,l[2]=a*s,l[3]=s,l}function lS(t,e){var r=e||new Array(4);return r[0]=(t>>0&255)/255,r[1]=(t>>8&255)/255,r[2]=(t>>16&255)/255,r[3]=(t>>24&255)/255,r}function gZe(t){return t[0]+(t[1]<<8)+(t[2]<<16)+(t[3]<<24)}function yZe(t,e){var r=t.createTexture();return r.buffer=function(n){t.bindTexture(t.TEXTURE_2D,r),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_NEAREST),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n),t.generateMipmap(t.TEXTURE_2D),t.bindTexture(t.TEXTURE_2D,null)},r.deleteTexture=function(){t.deleteTexture(r)},r}function Sge(t,e){switch(e){case"float":return[1,t.FLOAT,4];case"vec2":return[2,t.FLOAT,4];case"vec3":return[3,t.FLOAT,4];case"vec4":return[4,t.FLOAT,4];case"int":return[1,t.INT,4];case"ivec2":return[2,t.INT,4]}}function Cge(t,e,r){switch(e){case t.FLOAT:return new Float32Array(r);case t.INT:return new Int32Array(r)}}function vZe(t,e,r,n,i,a){switch(e){case t.FLOAT:return new Float32Array(r.buffer,a*n,i);case t.INT:return new Int32Array(r.buffer,a*n,i)}}function xZe(t,e,r,n){var i=Sge(t,e),a=_i(i,2),s=a[0],l=a[1],u=Cge(t,l,n),h=t.createBuffer();return t.bindBuffer(t.ARRAY_BUFFER,h),t.bufferData(t.ARRAY_BUFFER,u,t.STATIC_DRAW),l===t.FLOAT?t.vertexAttribPointer(r,s,l,!1,0,0):l===t.INT&&t.vertexAttribIPointer(r,s,l,0,0),t.enableVertexAttribArray(r),t.bindBuffer(t.ARRAY_BUFFER,null),h}function po(t,e,r,n){var i=Sge(t,r),a=_i(i,3),s=a[0],l=a[1],u=a[2],h=Cge(t,l,e*s),f=s*u,d=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,d),t.bufferData(t.ARRAY_BUFFER,e*f,t.DYNAMIC_DRAW),t.enableVertexAttribArray(n),l===t.FLOAT?t.vertexAttribPointer(n,s,l,!1,f,0):l===t.INT&&t.vertexAttribIPointer(n,s,l,f,0),t.vertexAttribDivisor(n,1),t.bindBuffer(t.ARRAY_BUFFER,null);for(var p=new Array(e),m=0;m<e;m++)p[m]=vZe(t,l,h,f,s,m);return d.dataArray=h,d.stride=f,d.size=s,d.getView=function(g){return p[g]},d.setPoint=function(g,y,v){var x=p[g];x[0]=y,x[1]=v},d.bufferSubData=function(g){t.bindBuffer(t.ARRAY_BUFFER,d),g?t.bufferSubData(t.ARRAY_BUFFER,0,h,0,g*s):t.bufferSubData(t.ARRAY_BUFFER,0,h)},d}function bZe(t){var e=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,e);var r=t.createTexture();return t.bindTexture(t.TEXTURE_2D,r),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,r,0),t.bindFramebuffer(t.FRAMEBUFFER,null),e.setFramebufferAttachmentSizes=function(n,i){t.bindTexture(t.TEXTURE_2D,r),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,n,i,0,t.RGBA,t.UNSIGNED_BYTE,null)},e}function Gb(){var t=new G0e(9);return G0e!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t}function Age(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t}function wZe(t,e,r){var n=e[0],i=e[1],a=e[2],s=e[3],l=e[4],u=e[5],h=e[6],f=e[7],d=e[8],p=r[0],m=r[1],g=r[2],y=r[3],v=r[4],x=r[5],b=r[6],w=r[7],C=r[8];return t[0]=p*n+m*s+g*h,t[1]=p*i+m*l+g*f,t[2]=p*a+m*u+g*d,t[3]=y*n+v*s+x*h,t[4]=y*i+v*l+x*f,t[5]=y*a+v*u+x*d,t[6]=b*n+w*s+C*h,t[7]=b*i+w*l+C*f,t[8]=b*a+w*u+C*d,t}function DS(t,e,r){var n=e[0],i=e[1],a=e[2],s=e[3],l=e[4],u=e[5],h=e[6],f=e[7],d=e[8],p=r[0],m=r[1];return t[0]=n,t[1]=i,t[2]=a,t[3]=s,t[4]=l,t[5]=u,t[6]=p*n+m*s+h,t[7]=p*i+m*l+f,t[8]=p*a+m*u+d,t}function _ge(t,e,r){var n=e[0],i=e[1],a=e[2],s=e[3],l=e[4],u=e[5],h=e[6],f=e[7],d=e[8],p=Math.sin(r),m=Math.cos(r);return t[0]=m*n+p*s,t[1]=m*i+p*l,t[2]=m*a+p*u,t[3]=m*s-p*n,t[4]=m*l-p*i,t[5]=m*u-p*a,t[6]=h,t[7]=f,t[8]=d,t}function TB(t,e,r){var n=r[0],i=r[1];return t[0]=n*e[0],t[1]=n*e[1],t[2]=n*e[2],t[3]=i*e[3],t[4]=i*e[4],t[5]=i*e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t}function TZe(t,e,r){return t[0]=2/e,t[1]=0,t[2]=0,t[3]=0,t[4]=-2/r,t[5]=0,t[6]=-1,t[7]=1,t[8]=1,t}function SZe(t,e){return t.intersection?t.intersection(e):new Set(j0e(t).filter(function(r){return e.has(r)}))}function H0e(t,e){return"rgba(".concat(t[0],", ").concat(t[1],", ").concat(t[2],", ").concat(e,")")}function DZe(t){var e=t&&t.style&&t.style.backgroundColor||"white";return tme(e)}function LZe(t){{var e=t.render;t.render=function(a){a=a||{};var s=t.cy;t.webgl&&(s.zoom()>bge?(RZe(t),e.call(t,a)):(NZe(t),Rge(t,a,Vb.SCREEN)))}}{var r=t.matchCanvasSize;t.matchCanvasSize=function(a){r.call(t,a),t.pickingFrameBuffer.setFramebufferAttachmentSizes(t.canvasWidth,t.canvasHeight),t.pickingFrameBuffer.needsDraw=!0}}t.findNearestElements=function(a,s,l,u){return FZe(t,a,s)};{var n=t.invalidateCachedZSortedEles;t.invalidateCachedZSortedEles=function(){n.call(t),t.pickingFrameBuffer.needsDraw=!0}}{var i=t.notify;t.notify=function(a,s){i.call(t,a,s),a==="viewport"||a==="bounds"?t.pickingFrameBuffer.needsDraw=!0:a==="background"&&t.eleDrawing.invalidate(s,{type:"node-body"})}}}function RZe(t){var e=t.data.contexts[t.WEBGL];e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}function NZe(t){var e=o(function(n){n.save(),n.setTransform(1,0,0,1,0,0),n.clearRect(0,0,t.canvasWidth,t.canvasHeight),n.restore()},"clear");e(t.data.contexts[t.NODE]),e(t.data.contexts[t.DRAG])}function MZe(t){var e=t.canvasWidth,r=t.canvasHeight,n=wB(t),i=n.pan,a=n.zoom,s=Gb();DS(s,s,[i.x,i.y]),TB(s,s,[a,a]);var l=Gb();TZe(l,e,r);var u=Gb();return wZe(u,l,s),u}function Lge(t,e){var r=t.canvasWidth,n=t.canvasHeight,i=wB(t),a=i.pan,s=i.zoom;e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,r,n),e.translate(a.x,a.y),e.scale(s,s)}function IZe(t,e){t.drawSelectionRectangle(e,function(r){return Lge(t,r)})}function OZe(t){var e=t.data.contexts[t.NODE];e.save(),Lge(t,e),e.strokeStyle="rgba(0, 0, 0, 0.3)",e.beginPath(),e.moveTo(-1e3,0),e.lineTo(1e3,0),e.stroke(),e.beginPath(),e.moveTo(0,-1e3),e.lineTo(0,1e3),e.stroke(),e.restore()}function PZe(t){var e=o(function(i,a,s){for(var l=i.atlasManager.getRenderTypeOpts(a),u=t.data.contexts[t.NODE],h=.125,f=l.atlasCollection.atlases,d=0;d<f.length;d++){var p=f[d],m=p.canvas,g=m.width,y=m.height,v=g*d,x=m.height*s;u.save(),u.scale(h,h),u.drawImage(m,v,x),u.strokeStyle="black",u.rect(v,x,g,y),u.stroke(),u.restore()}},"draw"),r=0;e(t.eleDrawing,"node-body",r++),e(t.eleDrawing,"node-label",r++)}function BZe(t,e,r,n,i){var a,s,l,u,h=wB(t),f=h.pan,d=h.zoom;if(n===void 0||i===void 0){var p=NP(t,f,d,e,r),m=_i(p,2),g=m[0],y=m[1],v=6;a=g-v/2,s=y-v/2,l=v,u=v}else{var x=NP(t,f,d,e,r),b=_i(x,2),w=b[0],C=b[1],T=NP(t,f,d,n,i),E=_i(T,2),A=E[0],S=E[1];a=w,s=S,l=Math.abs(A-w),u=Math.abs(S-C)}if(l===0||u===0)return[];var _=t.data.contexts[t.WEBGL];_.bindFramebuffer(_.FRAMEBUFFER,t.pickingFrameBuffer),t.pickingFrameBuffer.needsDraw&&(_.viewport(0,0,_.canvas.width,_.canvas.height),Rge(t,null,Vb.PICKING),t.pickingFrameBuffer.needsDraw=!1);var I=l*u,D=new Uint8Array(I*4);_.readPixels(a,s,l,u,_.RGBA,_.UNSIGNED_BYTE,D),_.bindFramebuffer(_.FRAMEBUFFER,null);for(var k=new Set,L=0;L<I;L++){var R=D.slice(L*4,L*4+4),O=gZe(R)-1;O>=0&&k.add(O)}return k}function FZe(t,e,r){var n=BZe(t,e,r),i=t.getCachedZSortedEles(),a,s,l=mo(n),u;try{for(l.s();!(u=l.n()).done;){var h=u.value,f=i[h];if(!a&&f.isNode()&&(a=f),!s&&f.isEdge()&&(s=f),a&&s)break}}catch(d){l.e(d)}finally{l.f()}return[a,s].filter(Boolean)}function Rge(t,e,r){var n,i;t.webglDebug&&(i=[],n=performance.now());var a=t.eleDrawing,s=0;if(r.screen&&t.data.canvasNeedsRedraw[t.SELECT_BOX]&&IZe(t,e),t.data.canvasNeedsRedraw[t.NODE]||r.picking){var l=o(function(k,L){L+=1,k.isNode()?(a.drawTexture(k,L,"node-underlay"),a.drawTexture(k,L,"node-body"),a.drawTexture(k,L,"node-label"),a.drawTexture(k,L,"node-overlay")):(a.drawEdgeLine(k,L),a.drawEdgeArrow(k,L,"source"),a.drawEdgeArrow(k,L,"target"),a.drawTexture(k,L,"edge-label"))},"draw"),u=t.data.contexts[t.WEBGL];r.screen?(u.clearColor(0,0,0,0),u.enable(u.BLEND),u.blendFunc(u.ONE,u.ONE_MINUS_SRC_ALPHA)):u.disable(u.BLEND),u.clear(u.COLOR_BUFFER_BIT|u.DEPTH_BUFFER_BIT),u.viewport(0,0,u.canvas.width,u.canvas.height);var h=MZe(t),f=t.getCachedZSortedEles();if(s=f.length,a.startFrame(h,i,r),r.screen){for(var d=0;d<f.nondrag.length;d++)l(f.nondrag[d],d);for(var p=0;p<f.drag.length;p++)l(f.drag[p],-1)}else if(r.picking)for(var m=0;m<f.length;m++)l(f[m],m);a.endFrame(),t.data.gc&&(console.log("Garbage Collect!"),t.data.gc=!1,a.gc()),r.screen&&t.webglDebugShowAtlases&&(OZe(t),PZe(t)),t.data.canvasNeedsRedraw[t.NODE]=!1,t.data.canvasNeedsRedraw[t.DRAG]=!1}if(t.webglDebug){var g=performance.now(),y=!0,v=0,x=0,b=mo(i),w;try{for(b.s();!(w=b.n()).done;){var C=w.value;v++,x+=C.count}}catch(D){b.e(D)}finally{b.f()}var T=Math.ceil(g-n),E="".concat(s," elements, ").concat(x," rectangles, ").concat(v," batches");if(y)console.log("WebGL (".concat(r.name,") - ").concat(E));else{console.log("WebGL render (".concat(r.name,") - frame time ").concat(T,"ms")),console.log(" ".concat(E)),console.log("Texture Atlases Used:");var A=a.getAtlasDebugInfo(),S=mo(A),_;try{for(S.s();!(_=S.n()).done;){var I=_.value;console.log(" ".concat(I.type,": ").concat(I.keyCount," keys, ").concat(I.atlasCount," atlases"))}}catch(D){S.e(D)}finally{S.f()}console.log("")}}}function $Ze(t,e){for(var r=atob(t),n=new ArrayBuffer(r.length),i=new Uint8Array(n),a=0;a<r.length;a++)i[a]=r.charCodeAt(a);return new Blob([n],{type:e})}function Y0e(t){var e=t.indexOf(",");return t.substr(e+1)}function Mge(t,e,r){var n=o(function(){return e.toDataURL(r,t.quality)},"getB64Uri");switch(t.output){case"blob-promise":return new ey(function(i,a){try{e.toBlob(function(s){s!=null?i(s):a(new Error("`canvas.toBlob()` sent a null value in its callback"))},r,t.quality)}catch(s){a(s)}});case"blob":return $Ze(Y0e(n()),r);case"base64":return Y0e(n());case"base64uri":default:return n()}}function Oge(t){var e=this,r=e.cy.window(),n=r.document;t.webgl&&(Er.CANVAS_LAYERS=e.CANVAS_LAYERS=4,console.log("webgl rendering enabled")),e.data={canvases:new Array(Er.CANVAS_LAYERS),contexts:new Array(Er.CANVAS_LAYERS),canvasNeedsRedraw:new Array(Er.CANVAS_LAYERS),bufferCanvases:new Array(Er.BUFFER_COUNT),bufferContexts:new Array(Er.CANVAS_LAYERS)};var i="-webkit-tap-highlight-color",a="rgba(0,0,0,0)";e.data.canvasContainer=n.createElement("div");var s=e.data.canvasContainer.style;e.data.canvasContainer.style[i]=a,s.position="relative",s.zIndex="0",s.overflow="hidden";var l=t.cy.container();l.appendChild(e.data.canvasContainer),l.style[i]=a;var u={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};iWe()&&(u["-ms-touch-action"]="none",u["touch-action"]="none");for(var h=0;h<Er.CANVAS_LAYERS;h++){var f=e.data.canvases[h]=n.createElement("canvas"),d=Er.CANVAS_TYPES[h];e.data.contexts[h]=f.getContext(d),e.data.contexts[h]||ai("Could not create canvas of type "+d),Object.keys(u).forEach(function(K){f.style[K]=u[K]}),f.style.position="absolute",f.setAttribute("data-id","layer"+h),f.style.zIndex=String(Er.CANVAS_LAYERS-h),e.data.canvasContainer.appendChild(f),e.data.canvasNeedsRedraw[h]=!1}e.data.topCanvas=e.data.canvases[0],e.data.canvases[Er.NODE].setAttribute("data-id","layer"+Er.NODE+"-node"),e.data.canvases[Er.SELECT_BOX].setAttribute("data-id","layer"+Er.SELECT_BOX+"-selectbox"),e.data.canvases[Er.DRAG].setAttribute("data-id","layer"+Er.DRAG+"-drag"),e.data.canvases[Er.WEBGL]&&e.data.canvases[Er.WEBGL].setAttribute("data-id","layer"+Er.WEBGL+"-webgl");for(var h=0;h<Er.BUFFER_COUNT;h++)e.data.bufferCanvases[h]=n.createElement("canvas"),e.data.bufferContexts[h]=e.data.bufferCanvases[h].getContext("2d"),e.data.bufferCanvases[h].style.position="absolute",e.data.bufferCanvases[h].setAttribute("data-id","buffer"+h),e.data.bufferCanvases[h].style.zIndex=String(-h-1),e.data.bufferCanvases[h].style.visibility="hidden";e.pathsEnabled=!0;var p=Hs(),m=o(function(X){return{x:(X.x1+X.x2)/2,y:(X.y1+X.y2)/2}},"getBoxCenter"),g=o(function(X){return{x:-X.w/2,y:-X.h/2}},"getCenterOffset"),y=o(function(X){var te=X[0]._private,J=te.oldBackgroundTimestamp===te.backgroundTimestamp;return!J},"backgroundTimestampHasChanged"),v=o(function(X){return X[0]._private.nodeKey},"getStyleKey"),x=o(function(X){return X[0]._private.labelStyleKey},"getLabelKey"),b=o(function(X){return X[0]._private.sourceLabelStyleKey},"getSourceLabelKey"),w=o(function(X){return X[0]._private.targetLabelStyleKey},"getTargetLabelKey"),C=o(function(X,te,J,se,ue){return e.drawElement(X,te,J,!1,!1,ue)},"drawElement"),T=o(function(X,te,J,se,ue){return e.drawElementText(X,te,J,se,"main",ue)},"drawLabel"),E=o(function(X,te,J,se,ue){return e.drawElementText(X,te,J,se,"source",ue)},"drawSourceLabel"),A=o(function(X,te,J,se,ue){return e.drawElementText(X,te,J,se,"target",ue)},"drawTargetLabel"),S=o(function(X){return X.boundingBox(),X[0]._private.bodyBounds},"getElementBox"),_=o(function(X){return X.boundingBox(),X[0]._private.labelBounds.main||p},"getLabelBox"),I=o(function(X){return X.boundingBox(),X[0]._private.labelBounds.source||p},"getSourceLabelBox"),D=o(function(X){return X.boundingBox(),X[0]._private.labelBounds.target||p},"getTargetLabelBox"),k=o(function(X,te){return te},"isLabelVisibleAtScale"),L=o(function(X){return m(S(X))},"getElementRotationPoint"),R=o(function(X,te,J){var se=X?X+"-":"";return{x:te.x+J.pstyle(se+"text-margin-x").pfValue,y:te.y+J.pstyle(se+"text-margin-y").pfValue}},"addTextMargin"),O=o(function(X,te,J){var se=X[0]._private.rscratch;return{x:se[te],y:se[J]}},"getRsPt"),M=o(function(X){return R("",O(X,"labelX","labelY"),X)},"getLabelRotationPoint"),B=o(function(X){return R("source",O(X,"sourceLabelX","sourceLabelY"),X)},"getSourceLabelRotationPoint"),F=o(function(X){return R("target",O(X,"targetLabelX","targetLabelY"),X)},"getTargetLabelRotationPoint"),P=o(function(X){return g(S(X))},"getElementRotationOffset"),z=o(function(X){return g(I(X))},"getSourceLabelRotationOffset"),$=o(function(X){return g(D(X))},"getTargetLabelRotationOffset"),H=o(function(X){var te=_(X),J=g(_(X));if(X.isNode()){switch(X.pstyle("text-halign").value){case"left":J.x=-te.w-(te.leftPad||0);break;case"right":J.x=-(te.rightPad||0);break}switch(X.pstyle("text-valign").value){case"top":J.y=-te.h-(te.topPad||0);break;case"bottom":J.y=-(te.botPad||0);break}}return J},"getLabelRotationOffset"),Q=e.data.eleTxrCache=new Fb(e,{getKey:v,doesEleInvalidateKey:y,drawElement:C,getBoundingBox:S,getRotationPoint:L,getRotationOffset:P,allowEdgeTxrCaching:!1,allowParentTxrCaching:!1}),j=e.data.lblTxrCache=new Fb(e,{getKey:x,drawElement:T,getBoundingBox:_,getRotationPoint:M,getRotationOffset:H,isVisible:k}),ie=e.data.slbTxrCache=new Fb(e,{getKey:b,drawElement:E,getBoundingBox:I,getRotationPoint:B,getRotationOffset:z,isVisible:k}),ne=e.data.tlbTxrCache=new Fb(e,{getKey:w,drawElement:A,getBoundingBox:D,getRotationPoint:F,getRotationOffset:$,isVisible:k}),le=e.data.lyrTxrCache=new wge(e);e.onUpdateEleCalcs(o(function(X,te){Q.invalidateElements(te),j.invalidateElements(te),ie.invalidateElements(te),ne.invalidateElements(te),le.invalidateElements(te);for(var J=0;J<te.length;J++){var se=te[J]._private;se.oldBackgroundTimestamp=se.backgroundTimestamp}},"invalidateTextureCaches"));var he=o(function(X){for(var te=0;te<X.length;te++)le.enqueueElementRefinement(X[te].ele)},"refineInLayers");Q.onDequeue(he),j.onDequeue(he),ie.onDequeue(he),ne.onDequeue(he),t.webgl&&e.initWebgl(t,{getStyleKey:v,getLabelKey:x,drawElement:C,drawLabel:T,getElementBox:S,getLabelBox:_,getElementRotationPoint:L,getElementRotationOffset:P,getLabelRotationPoint:M,getLabelRotationOffset:H})}function Fge(t,e,r){var n=r,i=o(function(S){un("Can not register `"+e+"` for `"+t+"` since `"+S+"` already exists in the prototype and can not be overridden")},"overrideErr");if(t==="core"){if(Jb.prototype[e])return i(e);Jb.prototype[e]=r}else if(t==="collection"){if(ka.prototype[e])return i(e);ka.prototype[e]=r}else if(t==="layout"){for(var a=o(function(S){this.options=S,r.call(this,S),Ur(this._private)||(this._private={}),this._private.cy=S.cy,this._private.listeners=[],this.createEmitter()},"Layout"),s=a.prototype=Object.create(r.prototype),l=[],u=0;u<l.length;u++){var h=l[u];s[h]=s[h]||function(){return this}}s.start&&!s.run?s.run=function(){return this.start(),this}:!s.start&&s.run&&(s.start=function(){return this.run(),this});var f=r.prototype.stop;s.stop=function(){var A=this.options;if(A&&A.animate){var S=this.animations;if(S)for(var _=0;_<S.length;_++)S[_].stop()}return f?f.call(this):this.emit("layoutstop"),this},s.destroy||(s.destroy=function(){return this}),s.cy=function(){return this._private.cy};var d=o(function(S){return S._private.cy},"getCy"),p={addEventFields:o(function(S,_){_.layout=S,_.cy=d(S),_.target=S},"addEventFields"),bubble:o(function(){return!0},"bubble"),parent:o(function(S){return d(S)},"parent")};rr(s,{createEmitter:o(function(){return this._private.emitter=new $S(p,this),this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(S,_){return this.emitter().on(S,_),this},"on"),one:o(function(S,_){return this.emitter().one(S,_),this},"one"),once:o(function(S,_){return this.emitter().one(S,_),this},"once"),removeListener:o(function(S,_){return this.emitter().removeListener(S,_),this},"removeListener"),removeAllListeners:o(function(){return this.emitter().removeAllListeners(),this},"removeAllListeners"),emit:o(function(S,_){return this.emitter().emit(S,_),this},"emit")}),cn.eventAliasesOn(s),n=a}else if(t==="renderer"&&e!=="null"&&e!=="base"){var m=$ge("renderer","base"),g=m.prototype,y=r,v=r.prototype,x=o(function(){m.apply(this,arguments),y.apply(this,arguments)},"Renderer"),b=x.prototype;for(var w in g){var C=g[w],T=v[w]!=null;if(T)return i(w);b[w]=C}for(var E in v)b[E]=v[E];g.clientFunctions.forEach(function(A){b[A]=b[A]||function(){ai("Renderer does not implement `renderer."+A+"()` on its prototype")}}),n=x}else if(t==="__proto__"||t==="constructor"||t==="prototype")return ai(t+" is an illegal type to be registered, possibly lead to prototype pollutions");return rme({map:Pge,keys:[t,e],value:n})}function $ge(t,e){return nme({map:Pge,keys:[t,e]})}function HZe(t,e,r,n,i){return rme({map:Bge,keys:[t,e,r,n],value:i})}function WZe(t,e,r,n){return nme({map:Bge,keys:[t,e,r,n]})}var Ui,Lpe,jHe,K0e,KHe,QHe,e4,Zt,si,En,Ur,ZHe,Ct,JHe,vS,go,t4,Q0e,JP,Z0e,eWe,Af,tWe,rWe,nWe,iWe,Ub,eB,LS,J0e,Rpe,Hi,aWe,sWe,oWe,lWe,cWe,uWe,eme,hWe,rr,fWe,dWe,pWe,mWe,tme,gWe,rme,nme,zp,Ib,xWe,bWe,wWe,TWe,RS,kWe,xP,EWe,CWe,AWe,DWe,LWe,j1,ime,RWe,NWe,Ab,IWe,OWe,PWe,FWe,$We,zWe,Npe,ame,UWe,HWe,r4,Mpe,qWe,YWe,XWe,jWe,Ipe,QWe,ZWe,JWe,n4,bP,sme,tqe,xS,Qu,V1,ome,Ob,lme,Hb,Wb,rqe,wf,j6,nqe,_f,cme,iqe,Ope,aqe,sqe,tB,ume,bS,Ppe,rB,ai,hme,un,oqe,Yc,lqe,fme,cqe,dme,la,Df,nB,uqe,Gl,kf,hqe,Xc,fqe,dqe,J1,NS,Bpe,qb,pqe,i4,mqe,gqe,yqe,vqe,xqe,bqe,wqe,Tqe,kqe,Eqe,Sqe,wP,Cqe,Aqe,MS,pme,U1,_qe,Dqe,Lqe,Rqe,Nqe,K6,iB,mme,Gp,Op,Mqe,oa,W1,Iqe,Yb,Hs,Oqe,Pqe,Bqe,gme,Fqe,cS,uS,Fpe,aB,K1,$qe,yme,vme,zqe,Gqe,Vqe,Uqe,Hqe,Wqe,Us,Zu,qqe,wS,TS,Yqe,$p,Pb,TP,Ef,Xb,Xqe,Q6,gs,xme,PP,Vp,bme,sB,jqe,BP,Kqe,Qqe,$pe,q1,zpe,Y1,Zqe,FP,Jqe,eYe,tYe,rYe,wme,nYe,iYe,aYe,sYe,oYe,lYe,cYe,Gpe,uYe,hYe,Tme,Vpe,Upe,fYe,dYe,_b,Q1,pYe,oB,kS,kP,kme,Eme,mYe,gYe,yYe,Hpe,Wpe,vYe,xYe,bYe,wYe,TYe,qpe,kYe,EYe,SYe,CYe,Ype,Z6,AYe,_Ye,Xpe,DYe,LYe,RYe,NYe,MYe,IYe,jpe,OYe,Kpe,PYe,BYe,FYe,J6,$Ye,eS,zYe,Sme,Cme,Ame,_me,Ju,Qpe,Dme,Zpe,Jpe,GYe,ey,$P,Up,VYe,UYe,OS,HYe,WYe,YYe,XYe,jYe,KYe,QYe,JYe,eXe,EP,e0e,rXe,nXe,iXe,sXe,oXe,lXe,cXe,uXe,hXe,fXe,dXe,mXe,yXe,lB,xXe,jb,wXe,kXe,EXe,SXe,CXe,_Xe,DXe,LXe,NXe,MXe,OXe,t0e,BXe,Lme,PS,zXe,GXe,UXe,WXe,YXe,jXe,KXe,QXe,ZXe,eje,rje,BS,aje,oje,cje,hje,Rme,fje,dje,pje,gje,yje,vje,xje,Nme,Mme,wje,r0e,n0e,Tje,Ome,Pme,Sje,uB,_je,Lje,Rje,i0e,Mje,Ije,Oje,Bje,Fje,$je,Gje,Uje,Wje,Yje,jje,Kje,Qje,cn,Zje,hS,Vr,mn,$t,zP,Jje,eKe,tKe,B1,Tf,GP,rKe,nKe,iKe,aKe,sKe,Bme,oKe,lKe,hB,cKe,fi,zn,uKe,hKe,fKe,Lf,Rf,Sf,tl,Z1,Kb,zme,pKe,FS,Vl,Gme,Vme,a0e,mKe,X1,Of,el,zl,Pp,Db,tS,CP,gKe,yKe,Ume,Hme,s0e,Qb,o0e,l0e,vKe,Bb,a4,Wme,xKe,bKe,wKe,TKe,kKe,EKe,SKe,CKe,AKe,c0e,_Ke,DKe,LKe,qme,Yme,RKe,Xme,u0e,NKe,Nf,jme,h0e,MKe,IKe,nS,Kme,Qme,Qr,OKe,Zme,ES,PKe,BKe,fS,Ta,iy,FKe,$Ke,zKe,GKe,Cf,$a,d0e,p0e,m0e,ka,Mn,VKe,HKe,Nn,dS,YKe,XKe,iS,ege,VP,pS,jKe,KKe,UP,mS,Ga,$b,QKe,s4,pB,jc,VS,mB,wa,US,Fa,za,ZKe,JKe,Hp,Zb,Jb,SS,eQe,tQe,z1,T0e,rQe,nQe,_P,iQe,aQe,sQe,oQe,lQe,cQe,ige,uQe,hQe,fQe,k0e,dQe,pQe,CS,mQe,gQe,yQe,vQe,xQe,bQe,E0e,wQe,TQe,kQe,EQe,SQe,S0e,C0e,yB,qp,AS,HP,WP,qc,Jo,A0e,_0e,Fp,gS,Ku,Mp,Bp,Wc,G1,aS,cge,uge,qP,YP,D0e,L0e,CQe,AQe,Va,o4,xB,Kc,dge,pge,DQe,mge,R0e,N0e,WS,qS,gge,yge,sy,eh,l4,M0e,LQe,vge,oy,DP,xge,RQe,I0e,sS,yS,XP,bge,NQe,MQe,IQe,OQe,PQe,BQe,FQe,$Qe,zQe,GQe,VQe,UQe,HQe,H1,WQe,Fb,qi,qQe,zb,_S,YQe,XQe,jQe,KQe,QQe,ZQe,JQe,eZe,O0e,tZe,P0e,rZe,wge,Ea,B0e,nZe,Tge,F0e,Qc,lZe,cZe,uZe,hZe,fZe,LP,th,kge,bB,Yp,ly,Ege,ys,dZe,Nb,G0e,Vb,Mb,kZe,EZe,CZe,MP,V0e,U0e,IP,AZe,_Ze,Dge,Pf,W0e,q0e,jP,KP,Nge,Ip,c4,Ige,zZe,Er,GZe,VZe,UZe,Pge,Bge,QP,zge,Wp,qZe,rl,kB=N(()=>{"use strict";o(Wi,"_typeof");o(Mf,"_classCallCheck");o(Dpe,"_defineProperties");o(If,"_createClass");o(X0e,"_defineProperty$1");o(_i,"_slicedToArray");o(j0e,"_toConsumableArray");o(UHe,"_arrayWithoutHoles");o(HHe,"_arrayWithHoles");o(WHe,"_iterableToArray");o(qHe,"_iterableToArrayLimit");o(ZP,"_unsupportedIterableToArray");o(OP,"_arrayLikeToArray");o(YHe,"_nonIterableSpread");o(XHe,"_nonIterableRest");o(mo,"_createForOfIteratorHelper");Ui=typeof window>"u"?null:window,Lpe=Ui?Ui.navigator:null;Ui&&Ui.document;jHe=Wi(""),K0e=Wi({}),KHe=Wi(function(){}),QHe=typeof HTMLElement>"u"?"undefined":Wi(HTMLElement),e4=o(function(e){return e&&e.instanceString&&si(e.instanceString)?e.instanceString():null},"instanceStr"),Zt=o(function(e){return e!=null&&Wi(e)==jHe},"string"),si=o(function(e){return e!=null&&Wi(e)===KHe},"fn"),En=o(function(e){return!go(e)&&(Array.isArray?Array.isArray(e):e!=null&&e instanceof Array)},"array"),Ur=o(function(e){return e!=null&&Wi(e)===K0e&&!En(e)&&e.constructor===Object},"plainObject"),ZHe=o(function(e){return e!=null&&Wi(e)===K0e},"object"),Ct=o(function(e){return e!=null&&Wi(e)===Wi(1)&&!isNaN(e)},"number"),JHe=o(function(e){return Ct(e)&&Math.floor(e)===e},"integer"),vS=o(function(e){if(QHe!=="undefined")return e!=null&&e instanceof HTMLElement},"htmlElement"),go=o(function(e){return t4(e)||Q0e(e)},"elementOrCollection"),t4=o(function(e){return e4(e)==="collection"&&e._private.single},"element"),Q0e=o(function(e){return e4(e)==="collection"&&!e._private.single},"collection"),JP=o(function(e){return e4(e)==="core"},"core"),Z0e=o(function(e){return e4(e)==="stylesheet"},"stylesheet"),eWe=o(function(e){return e4(e)==="event"},"event"),Af=o(function(e){return e==null?!0:!!(e===""||e.match(/^\s+$/))},"emptyString"),tWe=o(function(e){return typeof HTMLElement>"u"?!1:e instanceof HTMLElement},"domElement"),rWe=o(function(e){return Ur(e)&&Ct(e.x1)&&Ct(e.x2)&&Ct(e.y1)&&Ct(e.y2)},"boundingBox"),nWe=o(function(e){return ZHe(e)&&si(e.then)},"promise"),iWe=o(function(){return Lpe&&Lpe.userAgent.match(/msie|trident|edge/i)},"ms"),Ub=o(function(e,r){r||(r=o(function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var a=[],s=0;s<arguments.length;s++)a.push(arguments[s]);return a.join("$")},"keyFn"));var n=o(function i(){var a=this,s=arguments,l,u=r.apply(a,s),h=i.cache;return(l=h[u])||(l=h[u]=e.apply(a,s)),l},"memoizedFn");return n.cache={},n},"memoize"),eB=Ub(function(t){return t.replace(/([A-Z])/g,function(e){return"-"+e.toLowerCase()})}),LS=Ub(function(t){return t.replace(/(-\w)/g,function(e){return e[1].toUpperCase()})}),J0e=Ub(function(t,e){return t+e[0].toUpperCase()+e.substring(1)},function(t,e){return t+"$"+e}),Rpe=o(function(e){return Af(e)?e:e.charAt(0).toUpperCase()+e.substring(1)},"capitalize"),Hi="(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))",aWe="rgb[a]?\\(("+Hi+"[%]?)\\s*,\\s*("+Hi+"[%]?)\\s*,\\s*("+Hi+"[%]?)(?:\\s*,\\s*("+Hi+"))?\\)",sWe="rgb[a]?\\((?:"+Hi+"[%]?)\\s*,\\s*(?:"+Hi+"[%]?)\\s*,\\s*(?:"+Hi+"[%]?)(?:\\s*,\\s*(?:"+Hi+"))?\\)",oWe="hsl[a]?\\(("+Hi+")\\s*,\\s*("+Hi+"[%])\\s*,\\s*("+Hi+"[%])(?:\\s*,\\s*("+Hi+"))?\\)",lWe="hsl[a]?\\((?:"+Hi+")\\s*,\\s*(?:"+Hi+"[%])\\s*,\\s*(?:"+Hi+"[%])(?:\\s*,\\s*(?:"+Hi+"))?\\)",cWe="\\#[0-9a-fA-F]{3}",uWe="\\#[0-9a-fA-F]{6}",eme=o(function(e,r){return e<r?-1:e>r?1:0},"ascending"),hWe=o(function(e,r){return-1*eme(e,r)},"descending"),rr=Object.assign!=null?Object.assign.bind(Object):function(t){for(var e=arguments,r=1;r<e.length;r++){var n=e[r];if(n!=null)for(var i=Object.keys(n),a=0;a<i.length;a++){var s=i[a];t[s]=n[s]}}return t},fWe=o(function(e){if(!(!(e.length===4||e.length===7)||e[0]!=="#")){var r=e.length===4,n,i,a,s=16;return r?(n=parseInt(e[1]+e[1],s),i=parseInt(e[2]+e[2],s),a=parseInt(e[3]+e[3],s)):(n=parseInt(e[1]+e[2],s),i=parseInt(e[3]+e[4],s),a=parseInt(e[5]+e[6],s)),[n,i,a]}},"hex2tuple"),dWe=o(function(e){var r,n,i,a,s,l,u,h;function f(g,y,v){return v<0&&(v+=1),v>1&&(v-=1),v<1/6?g+(y-g)*6*v:v<1/2?y:v<2/3?g+(y-g)*(2/3-v)*6:g}o(f,"hue2rgb");var d=new RegExp("^"+oWe+"$").exec(e);if(d){if(n=parseInt(d[1]),n<0?n=(360- -1*n%360)%360:n>360&&(n=n%360),n/=360,i=parseFloat(d[2]),i<0||i>100||(i=i/100,a=parseFloat(d[3]),a<0||a>100)||(a=a/100,s=d[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(i===0)l=u=h=Math.round(a*255);else{var p=a<.5?a*(1+i):a+i-a*i,m=2*a-p;l=Math.round(255*f(m,p,n+1/3)),u=Math.round(255*f(m,p,n)),h=Math.round(255*f(m,p,n-1/3))}r=[l,u,h,s]}return r},"hsl2tuple"),pWe=o(function(e){var r,n=new RegExp("^"+aWe+"$").exec(e);if(n){r=[];for(var i=[],a=1;a<=3;a++){var s=n[a];if(s[s.length-1]==="%"&&(i[a]=!0),s=parseFloat(s),i[a]&&(s=s/100*255),s<0||s>255)return;r.push(Math.floor(s))}var l=i[1]||i[2]||i[3],u=i[1]&&i[2]&&i[3];if(l&&!u)return;var h=n[4];if(h!==void 0){if(h=parseFloat(h),h<0||h>1)return;r.push(h)}}return r},"rgb2tuple"),mWe=o(function(e){return gWe[e.toLowerCase()]},"colorname2tuple"),tme=o(function(e){return(En(e)?e:null)||mWe(e)||fWe(e)||pWe(e)||dWe(e)},"color2tuple"),gWe={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},rme=o(function(e){for(var r=e.map,n=e.keys,i=n.length,a=0;a<i;a++){var s=n[a];if(Ur(s))throw Error("Tried to set map with object key");a<n.length-1?(r[s]==null&&(r[s]={}),r=r[s]):r[s]=e.value}},"setMap"),nme=o(function(e){for(var r=e.map,n=e.keys,i=n.length,a=0;a<i;a++){var s=n[a];if(Ur(s))throw Error("Tried to get map with object key");if(r=r[s],r==null)return r}return r},"getMap");o(yWe,"isObject");zp=yWe,Ib=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};o(vWe,"createCommonjsModule");xWe=typeof Ib=="object"&&Ib&&Ib.Object===Object&&Ib,bWe=xWe,wWe=typeof self=="object"&&self&&self.Object===Object&&self,TWe=bWe||wWe||Function("return this")(),RS=TWe,kWe=o(function(){return RS.Date.now()},"now"),xP=kWe,EWe=/\s/;o(SWe,"trimmedEndIndex");CWe=SWe,AWe=/^\s+/;o(_We,"baseTrim");DWe=_We,LWe=RS.Symbol,j1=LWe,ime=Object.prototype,RWe=ime.hasOwnProperty,NWe=ime.toString,Ab=j1?j1.toStringTag:void 0;o(MWe,"getRawTag");IWe=MWe,OWe=Object.prototype,PWe=OWe.toString;o(BWe,"objectToString");FWe=BWe,$We="[object Null]",zWe="[object Undefined]",Npe=j1?j1.toStringTag:void 0;o(GWe,"baseGetTag");ame=GWe;o(VWe,"isObjectLike");UWe=VWe,HWe="[object Symbol]";o(WWe,"isSymbol");r4=WWe,Mpe=NaN,qWe=/^[-+]0x[0-9a-f]+$/i,YWe=/^0b[01]+$/i,XWe=/^0o[0-7]+$/i,jWe=parseInt;o(KWe,"toNumber");Ipe=KWe,QWe="Expected a function",ZWe=Math.max,JWe=Math.min;o(eqe,"debounce");n4=eqe,bP=Ui?Ui.performance:null,sme=bP&&bP.now?function(){return bP.now()}:function(){return Date.now()},tqe=function(){if(Ui){if(Ui.requestAnimationFrame)return function(t){Ui.requestAnimationFrame(t)};if(Ui.mozRequestAnimationFrame)return function(t){Ui.mozRequestAnimationFrame(t)};if(Ui.webkitRequestAnimationFrame)return function(t){Ui.webkitRequestAnimationFrame(t)};if(Ui.msRequestAnimationFrame)return function(t){Ui.msRequestAnimationFrame(t)}}return function(t){t&&setTimeout(function(){t(sme())},1e3/60)}}(),xS=o(function(e){return tqe(e)},"requestAnimationFrame"),Qu=sme,V1=9261,ome=65599,Ob=5381,lme=o(function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:V1,n=r,i;i=e.next(),!i.done;)n=n*ome+i.value|0;return n},"hashIterableInts"),Hb=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:V1;return r*ome+e|0},"hashInt"),Wb=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Ob;return(r<<5)+r+e|0},"hashIntAlt"),rqe=o(function(e,r){return e*2097152+r},"combineHashes"),wf=o(function(e){return e[0]*2097152+e[1]},"combineHashesArray"),j6=o(function(e,r){return[Hb(e[0],r[0]),Wb(e[1],r[1])]},"hashArrays"),nqe=o(function(e,r){var n={value:0,done:!1},i=0,a=e.length,s={next:o(function(){return i<a?n.value=e[i++]:n.done=!0,n},"next")};return lme(s,r)},"hashIntsArray"),_f=o(function(e,r){var n={value:0,done:!1},i=0,a=e.length,s={next:o(function(){return i<a?n.value=e.charCodeAt(i++):n.done=!0,n},"next")};return lme(s,r)},"hashString"),cme=o(function(){return iqe(arguments)},"hashStrings"),iqe=o(function(e){for(var r,n=0;n<e.length;n++){var i=e[n];n===0?r=_f(i):r=_f(i,r)}return r},"hashStringsArray"),Ope=!0,aqe=console.warn!=null,sqe=console.trace!=null,tB=Number.MAX_SAFE_INTEGER||9007199254740991,ume=o(function(){return!0},"trueify"),bS=o(function(){return!1},"falsify"),Ppe=o(function(){return 0},"zeroify"),rB=o(function(){},"noop"),ai=o(function(e){throw new Error(e)},"error"),hme=o(function(e){if(e!==void 0)Ope=!!e;else return Ope},"warnings"),un=o(function(e){hme()&&(aqe?console.warn(e):(console.log(e),sqe&&console.trace()))},"warn"),oqe=o(function(e){return rr({},e)},"clone"),Yc=o(function(e){return e==null?e:En(e)?e.slice():Ur(e)?oqe(e):e},"copy"),lqe=o(function(e){return e.slice()},"copyArray"),fme=o(function(e,r){for(r=e="";e++<36;r+=e*51&52?(e^15?8^Math.random()*(e^20?16:4):4).toString(16):"-");return r},"uuid"),cqe={},dme=o(function(){return cqe},"staticEmptyObject"),la=o(function(e){var r=Object.keys(e);return function(n){for(var i={},a=0;a<r.length;a++){var s=r[a],l=n?.[s];i[s]=l===void 0?e[s]:l}return i}},"defaults"),Df=o(function(e,r,n){for(var i=e.length-1;i>=0&&!(e[i]===r&&(e.splice(i,1),n));i--);},"removeFromArray"),nB=o(function(e){e.splice(0,e.length)},"clearArray"),uqe=o(function(e,r){for(var n=0;n<r.length;n++){var i=r[n];e.push(i)}},"push"),Gl=o(function(e,r,n){return n&&(r=J0e(n,r)),e[r]},"getPrefixedProperty"),kf=o(function(e,r,n,i){n&&(r=J0e(n,r)),e[r]=i},"setPrefixedProperty"),hqe=function(){function t(){Mf(this,t),this._obj={}}return o(t,"ObjectMap"),If(t,[{key:"set",value:o(function(r,n){return this._obj[r]=n,this},"set")},{key:"delete",value:o(function(r){return this._obj[r]=void 0,this},"_delete")},{key:"clear",value:o(function(){this._obj={}},"clear")},{key:"has",value:o(function(r){return this._obj[r]!==void 0},"has")},{key:"get",value:o(function(r){return this._obj[r]},"get")}]),t}(),Xc=typeof Map<"u"?Map:hqe,fqe="undefined",dqe=function(){function t(e){if(Mf(this,t),this._obj=Object.create(null),this.size=0,e!=null){var r;e.instanceString!=null&&e.instanceString()===this.instanceString()?r=e.toArray():r=e;for(var n=0;n<r.length;n++)this.add(r[n])}}return o(t,"ObjectSet"),If(t,[{key:"instanceString",value:o(function(){return"set"},"instanceString")},{key:"add",value:o(function(r){var n=this._obj;n[r]!==1&&(n[r]=1,this.size++)},"add")},{key:"delete",value:o(function(r){var n=this._obj;n[r]===1&&(n[r]=0,this.size--)},"_delete")},{key:"clear",value:o(function(){this._obj=Object.create(null)},"clear")},{key:"has",value:o(function(r){return this._obj[r]===1},"has")},{key:"toArray",value:o(function(){var r=this;return Object.keys(this._obj).filter(function(n){return r.has(n)})},"toArray")},{key:"forEach",value:o(function(r,n){return this.toArray().forEach(r,n)},"forEach")}]),t}(),J1=(typeof Set>"u"?"undefined":Wi(Set))!==fqe?Set:dqe,NS=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(e===void 0||r===void 0||!JP(e)){ai("An element must have a core reference and parameters set");return}var i=r.group;if(i==null&&(r.data&&r.data.source!=null&&r.data.target!=null?i="edges":i="nodes"),i!=="nodes"&&i!=="edges"){ai("An element must be of type `nodes` or `edges`; you specified `"+i+"`");return}this.length=1,this[0]=this;var a=this._private={cy:e,single:!0,data:r.data||{},position:r.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:i,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!r.selected,selectable:r.selectable===void 0?!0:!!r.selectable,locked:!!r.locked,grabbed:!1,grabbable:r.grabbable===void 0?!0:!!r.grabbable,pannable:r.pannable===void 0?i==="edges":!!r.pannable,active:!1,classes:new J1,animation:{current:[],queue:[]},rscratch:{},scratch:r.scratch||{},edges:[],children:[],parent:r.parent&&r.parent.isNode()?r.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(a.position.x==null&&(a.position.x=0),a.position.y==null&&(a.position.y=0),r.renderedPosition){var s=r.renderedPosition,l=e.pan(),u=e.zoom();a.position={x:(s.x-l.x)/u,y:(s.y-l.y)/u}}var h=[];En(r.classes)?h=r.classes:Zt(r.classes)&&(h=r.classes.split(/\s+/));for(var f=0,d=h.length;f<d;f++){var p=h[f];!p||p===""||a.classes.add(p)}this.createEmitter();var m=r.style||r.css;m&&(un("Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead."),this.style(m)),(n===void 0||n)&&this.restore()},"Element"),Bpe=o(function(e){return e={bfs:e.bfs||!e.dfs,dfs:e.dfs||!e.bfs},o(function(n,i,a){var s;Ur(n)&&!go(n)&&(s=n,n=s.roots||s.root,i=s.visit,a=s.directed),a=arguments.length===2&&!si(i)?i:a,i=si(i)?i:function(){};for(var l=this._private.cy,u=n=Zt(n)?this.filter(n):n,h=[],f=[],d={},p={},m={},g=0,y,v=this.byGroup(),x=v.nodes,b=v.edges,w=0;w<u.length;w++){var C=u[w],T=C.id();C.isNode()&&(h.unshift(C),e.bfs&&(m[T]=!0,f.push(C)),p[T]=0)}for(var E=o(function(){var L=e.bfs?h.shift():h.pop(),R=L.id();if(e.dfs){if(m[R])return"continue";m[R]=!0,f.push(L)}var O=p[R],M=d[R],B=M!=null?M.source():null,F=M!=null?M.target():null,P=M==null?void 0:L.same(B)?F[0]:B[0],z=void 0;if(z=i(L,M,P,g++,O),z===!0)return y=L,"break";if(z===!1)return"break";for(var $=L.connectedEdges().filter(function(ne){return(!a||ne.source().same(L))&&b.has(ne)}),H=0;H<$.length;H++){var Q=$[H],j=Q.connectedNodes().filter(function(ne){return!ne.same(L)&&x.has(ne)}),ie=j.id();j.length!==0&&!m[ie]&&(j=j[0],h.push(j),e.bfs&&(m[ie]=!0,f.push(j)),d[ie]=Q,p[ie]=p[R]+1)}},"_loop");h.length!==0;){var A=E();if(A!=="continue"&&A==="break")break}for(var S=l.collection(),_=0;_<f.length;_++){var I=f[_],D=d[I.id()];D!=null&&S.push(D),S.push(I)}return{path:l.collection(S),found:l.collection(y)}},"searchFn")},"defineSearch"),qb={breadthFirstSearch:Bpe({bfs:!0}),depthFirstSearch:Bpe({dfs:!0})};qb.bfs=qb.breadthFirstSearch;qb.dfs=qb.depthFirstSearch;pqe=vWe(function(t,e){(function(){var r,n,i,a,s,l,u,h,f,d,p,m,g,y,v;i=Math.floor,d=Math.min,n=o(function(x,b){return x<b?-1:x>b?1:0},"defaultCmp"),f=o(function(x,b,w,C,T){var E;if(w==null&&(w=0),T==null&&(T=n),w<0)throw new Error("lo must be non-negative");for(C==null&&(C=x.length);w<C;)E=i((w+C)/2),T(b,x[E])<0?C=E:w=E+1;return[].splice.apply(x,[w,w-w].concat(b)),b},"insort"),l=o(function(x,b,w){return w==null&&(w=n),x.push(b),y(x,0,x.length-1,w)},"heappush"),s=o(function(x,b){var w,C;return b==null&&(b=n),w=x.pop(),x.length?(C=x[0],x[0]=w,v(x,0,b)):C=w,C},"heappop"),h=o(function(x,b,w){var C;return w==null&&(w=n),C=x[0],x[0]=b,v(x,0,w),C},"heapreplace"),u=o(function(x,b,w){var C;return w==null&&(w=n),x.length&&w(x[0],b)<0&&(C=[x[0],b],b=C[0],x[0]=C[1],v(x,0,w)),b},"heappushpop"),a=o(function(x,b){var w,C,T,E,A,S;for(b==null&&(b=n),E=function(){S=[];for(var _=0,I=i(x.length/2);0<=I?_<I:_>I;0<=I?_++:_--)S.push(_);return S}.apply(this).reverse(),A=[],C=0,T=E.length;C<T;C++)w=E[C],A.push(v(x,w,b));return A},"heapify"),g=o(function(x,b,w){var C;if(w==null&&(w=n),C=x.indexOf(b),C!==-1)return y(x,0,C,w),v(x,C,w)},"updateItem"),p=o(function(x,b,w){var C,T,E,A,S;if(w==null&&(w=n),T=x.slice(0,b),!T.length)return T;for(a(T,w),S=x.slice(b),E=0,A=S.length;E<A;E++)C=S[E],u(T,C,w);return T.sort(w).reverse()},"nlargest"),m=o(function(x,b,w){var C,T,E,A,S,_,I,D,k;if(w==null&&(w=n),b*10<=x.length){if(E=x.slice(0,b).sort(w),!E.length)return E;for(T=E[E.length-1],I=x.slice(b),A=0,_=I.length;A<_;A++)C=I[A],w(C,T)<0&&(f(E,C,0,null,w),E.pop(),T=E[E.length-1]);return E}for(a(x,w),k=[],S=0,D=d(b,x.length);0<=D?S<D:S>D;0<=D?++S:--S)k.push(s(x,w));return k},"nsmallest"),y=o(function(x,b,w,C){var T,E,A;for(C==null&&(C=n),T=x[w];w>b;){if(A=w-1>>1,E=x[A],C(T,E)<0){x[w]=E,w=A;continue}break}return x[w]=T},"_siftdown"),v=o(function(x,b,w){var C,T,E,A,S;for(w==null&&(w=n),T=x.length,S=b,E=x[b],C=2*b+1;C<T;)A=C+1,A<T&&!(w(x[C],x[A])<0)&&(C=A),x[b]=x[C],b=C,C=2*b+1;return x[b]=E,y(x,S,b,w)},"_siftup"),r=function(){x.push=l,x.pop=s,x.replace=h,x.pushpop=u,x.heapify=a,x.updateItem=g,x.nlargest=p,x.nsmallest=m;function x(b){this.cmp=b??n,this.nodes=[]}return o(x,"Heap"),x.prototype.push=function(b){return l(this.nodes,b,this.cmp)},x.prototype.pop=function(){return s(this.nodes,this.cmp)},x.prototype.peek=function(){return this.nodes[0]},x.prototype.contains=function(b){return this.nodes.indexOf(b)!==-1},x.prototype.replace=function(b){return h(this.nodes,b,this.cmp)},x.prototype.pushpop=function(b){return u(this.nodes,b,this.cmp)},x.prototype.heapify=function(){return a(this.nodes,this.cmp)},x.prototype.updateItem=function(b){return g(this.nodes,b,this.cmp)},x.prototype.clear=function(){return this.nodes=[]},x.prototype.empty=function(){return this.nodes.length===0},x.prototype.size=function(){return this.nodes.length},x.prototype.clone=function(){var b;return b=new x,b.nodes=this.nodes.slice(0),b},x.prototype.toArray=function(){return this.nodes.slice(0)},x.prototype.insert=x.prototype.push,x.prototype.top=x.prototype.peek,x.prototype.front=x.prototype.peek,x.prototype.has=x.prototype.contains,x.prototype.copy=x.prototype.clone,x}(),function(x,b){return t.exports=b()}(this,function(){return r})}).call(Ib)}),i4=pqe,mqe=la({root:null,weight:o(function(e){return 1},"weight"),directed:!1}),gqe={dijkstra:o(function(e){if(!Ur(e)){var r=arguments;e={root:r[0],weight:r[1],directed:r[2]}}var n=mqe(e),i=n.root,a=n.weight,s=n.directed,l=this,u=a,h=Zt(i)?this.filter(i)[0]:i[0],f={},d={},p={},m=this.byGroup(),g=m.nodes,y=m.edges;y.unmergeBy(function(O){return O.isLoop()});for(var v=o(function(M){return f[M.id()]},"getDist"),x=o(function(M,B){f[M.id()]=B,b.updateItem(M)},"setDist"),b=new i4(function(O,M){return v(O)-v(M)}),w=0;w<g.length;w++){var C=g[w];f[C.id()]=C.same(h)?0:1/0,b.push(C)}for(var T=o(function(M,B){for(var F=(s?M.edgesTo(B):M.edgesWith(B)).intersect(y),P=1/0,z,$=0;$<F.length;$++){var H=F[$],Q=u(H);(Q<P||!z)&&(P=Q,z=H)}return{edge:z,dist:P}},"distBetween");b.size()>0;){var E=b.pop(),A=v(E),S=E.id();if(p[S]=A,A!==1/0)for(var _=E.neighborhood().intersect(g),I=0;I<_.length;I++){var D=_[I],k=D.id(),L=T(E,D),R=A+L.dist;R<v(D)&&(x(D,R),d[k]={node:E,edge:L.edge})}}return{distanceTo:o(function(M){var B=Zt(M)?g.filter(M)[0]:M[0];return p[B.id()]},"distanceTo"),pathTo:o(function(M){var B=Zt(M)?g.filter(M)[0]:M[0],F=[],P=B,z=P.id();if(B.length>0)for(F.unshift(B);d[z];){var $=d[z];F.unshift($.edge),F.unshift($.node),P=$.node,z=P.id()}return l.spawn(F)},"pathTo")}},"dijkstra")},yqe={kruskal:o(function(e){e=e||function(w){return 1};for(var r=this.byGroup(),n=r.nodes,i=r.edges,a=n.length,s=new Array(a),l=n,u=o(function(C){for(var T=0;T<s.length;T++){var E=s[T];if(E.has(C))return T}},"findSetIndex"),h=0;h<a;h++)s[h]=this.spawn(n[h]);for(var f=i.sort(function(w,C){return e(w)-e(C)}),d=0;d<f.length;d++){var p=f[d],m=p.source()[0],g=p.target()[0],y=u(m),v=u(g),x=s[y],b=s[v];y!==v&&(l.merge(p),x.merge(b),s.splice(v,1))}return l},"kruskal")},vqe=la({root:null,goal:null,weight:o(function(e){return 1},"weight"),heuristic:o(function(e){return 0},"heuristic"),directed:!1}),xqe={aStar:o(function(e){var r=this.cy(),n=vqe(e),i=n.root,a=n.goal,s=n.heuristic,l=n.directed,u=n.weight;i=r.collection(i)[0],a=r.collection(a)[0];var h=i.id(),f=a.id(),d={},p={},m={},g=new i4(function(z,$){return p[z.id()]-p[$.id()]}),y=new J1,v={},x={},b=o(function($,H){g.push($),y.add(H)},"addToOpenSet"),w,C,T=o(function(){w=g.pop(),C=w.id(),y.delete(C)},"popFromOpenSet"),E=o(function($){return y.has($)},"isInOpenSet");b(i,h),d[h]=0,p[h]=s(i);for(var A=0;g.size()>0;){if(T(),A++,C===f){for(var S=[],_=a,I=f,D=x[I];S.unshift(_),D!=null&&S.unshift(D),_=v[I],_!=null;)I=_.id(),D=x[I];return{found:!0,distance:d[C],path:this.spawn(S),steps:A}}m[C]=!0;for(var k=w._private.edges,L=0;L<k.length;L++){var R=k[L];if(this.hasElementWithId(R.id())&&!(l&&R.data("source")!==C)){var O=R.source(),M=R.target(),B=O.id()!==C?O:M,F=B.id();if(this.hasElementWithId(F)&&!m[F]){var P=d[C]+u(R);if(!E(F)){d[F]=P,p[F]=P+s(B),b(B,F),v[F]=w,x[F]=R;continue}P<d[F]&&(d[F]=P,p[F]=P+s(B),v[F]=w,x[F]=R)}}}}return{found:!1,distance:void 0,path:void 0,steps:A}},"aStar")},bqe=la({weight:o(function(e){return 1},"weight"),directed:!1}),wqe={floydWarshall:o(function(e){for(var r=this.cy(),n=bqe(e),i=n.weight,a=n.directed,s=i,l=this.byGroup(),u=l.nodes,h=l.edges,f=u.length,d=f*f,p=o(function(Q){return u.indexOf(Q)},"indexOf"),m=o(function(Q){return u[Q]},"atIndex"),g=new Array(d),y=0;y<d;y++){var v=y%f,x=(y-v)/f;x===v?g[y]=0:g[y]=1/0}for(var b=new Array(d),w=new Array(d),C=0;C<h.length;C++){var T=h[C],E=T.source()[0],A=T.target()[0];if(E!==A){var S=p(E),_=p(A),I=S*f+_,D=s(T);if(g[I]>D&&(g[I]=D,b[I]=_,w[I]=T),!a){var k=_*f+S;!a&&g[k]>D&&(g[k]=D,b[k]=S,w[k]=T)}}}for(var L=0;L<f;L++)for(var R=0;R<f;R++)for(var O=R*f+L,M=0;M<f;M++){var B=R*f+M,F=L*f+M;g[O]+g[F]<g[B]&&(g[B]=g[O]+g[F],b[B]=b[O])}var P=o(function(Q){return(Zt(Q)?r.filter(Q):Q)[0]},"getArgEle"),z=o(function(Q){return p(P(Q))},"indexOfArgEle"),$={distance:o(function(Q,j){var ie=z(Q),ne=z(j);return g[ie*f+ne]},"distance"),path:o(function(Q,j){var ie=z(Q),ne=z(j),le=m(ie);if(ie===ne)return le.collection();if(b[ie*f+ne]==null)return r.collection();var he=r.collection(),K=ie,X;for(he.merge(le);ie!==ne;)K=ie,ie=b[ie*f+ne],X=w[K*f+ie],he.merge(X),he.merge(m(ie));return he},"path")};return $},"floydWarshall")},Tqe=la({weight:o(function(e){return 1},"weight"),directed:!1,root:null}),kqe={bellmanFord:o(function(e){var r=this,n=Tqe(e),i=n.weight,a=n.directed,s=n.root,l=i,u=this,h=this.cy(),f=this.byGroup(),d=f.edges,p=f.nodes,m=p.length,g=new Xc,y=!1,v=[];s=h.collection(s)[0],d.unmergeBy(function(ce){return ce.isLoop()});for(var x=d.length,b=o(function(ae){var Oe=g.get(ae.id());return Oe||(Oe={},g.set(ae.id(),Oe)),Oe},"getInfo"),w=o(function(ae){return(Zt(ae)?h.$(ae):ae)[0]},"getNodeFromTo"),C=o(function(ae){return b(w(ae)).dist},"distanceTo"),T=o(function(ae){for(var Oe=arguments.length>1&&arguments[1]!==void 0?arguments[1]:s,ge=w(ae),ze=[],He=ge;;){if(He==null)return r.spawn();var $e=b(He),Re=$e.edge,Ie=$e.pred;if(ze.unshift(He[0]),He.same(Oe)&&ze.length>0)break;Re!=null&&ze.unshift(Re),He=Ie}return u.spawn(ze)},"pathTo"),E=0;E<m;E++){var A=p[E],S=b(A);A.same(s)?S.dist=0:S.dist=1/0,S.pred=null,S.edge=null}for(var _=!1,I=o(function(ae,Oe,ge,ze,He,$e){var Re=ze.dist+$e;Re<He.dist&&!ge.same(ze.edge)&&(He.dist=Re,He.pred=ae,He.edge=ge,_=!0)},"checkForEdgeReplacement"),D=1;D<m;D++){_=!1;for(var k=0;k<x;k++){var L=d[k],R=L.source(),O=L.target(),M=l(L),B=b(R),F=b(O);I(R,O,L,B,F,M),a||I(O,R,L,F,B,M)}if(!_)break}if(_)for(var P=[],z=0;z<x;z++){var $=d[z],H=$.source(),Q=$.target(),j=l($),ie=b(H).dist,ne=b(Q).dist;if(ie+j<ne||!a&&ne+j<ie)if(y||(un("Graph contains a negative weight cycle for Bellman-Ford"),y=!0),e.findNegativeWeightCycles!==!1){var le=[];ie+j<ne&&le.push(H),!a&&ne+j<ie&&le.push(Q);for(var he=le.length,K=0;K<he;K++){var X=le[K],te=[X];te.push(b(X).edge);for(var J=b(X).pred;te.indexOf(J)===-1;)te.push(J),te.push(b(J).edge),J=b(J).pred;te=te.slice(te.indexOf(J));for(var se=te[0].id(),ue=0,Z=2;Z<te.length;Z+=2)te[Z].id()<se&&(se=te[Z].id(),ue=Z);te=te.slice(ue).concat(te.slice(0,ue)),te.push(te[0]);var Se=te.map(function(ce){return ce.id()}).join(",");P.indexOf(Se)===-1&&(v.push(u.spawn(te)),P.push(Se))}}else break}return{distanceTo:C,pathTo:T,hasNegativeWeightCycle:y,negativeWeightCycles:v}},"bellmanFord")},Eqe=Math.sqrt(2),Sqe=o(function(e,r,n){n.length===0&&ai("Karger-Stein must be run on a connected (sub)graph");for(var i=n[e],a=i[1],s=i[2],l=r[a],u=r[s],h=n,f=h.length-1;f>=0;f--){var d=h[f],p=d[1],m=d[2];(r[p]===l&&r[m]===u||r[p]===u&&r[m]===l)&&h.splice(f,1)}for(var g=0;g<h.length;g++){var y=h[g];y[1]===u?(h[g]=y.slice(),h[g][1]=l):y[2]===u&&(h[g]=y.slice(),h[g][2]=l)}for(var v=0;v<r.length;v++)r[v]===u&&(r[v]=l);return h},"collapse"),wP=o(function(e,r,n,i){for(;n>i;){var a=Math.floor(Math.random()*r.length);r=Sqe(a,e,r),n--}return r},"contractUntil"),Cqe={kargerStein:o(function(){var e=this,r=this.byGroup(),n=r.nodes,i=r.edges;i.unmergeBy(function(F){return F.isLoop()});var a=n.length,s=i.length,l=Math.ceil(Math.pow(Math.log(a)/Math.LN2,2)),u=Math.floor(a/Eqe);if(a<2){ai("At least 2 nodes are required for Karger-Stein algorithm");return}for(var h=[],f=0;f<s;f++){var d=i[f];h.push([f,n.indexOf(d.source()),n.indexOf(d.target())])}for(var p=1/0,m=[],g=new Array(a),y=new Array(a),v=new Array(a),x=o(function(P,z){for(var $=0;$<a;$++)z[$]=P[$]},"copyNodesMap"),b=0;b<=l;b++){for(var w=0;w<a;w++)y[w]=w;var C=wP(y,h.slice(),a,u),T=C.slice();x(y,v);var E=wP(y,C,u,2),A=wP(v,T,u,2);E.length<=A.length&&E.length<p?(p=E.length,m=E,x(y,g)):A.length<=E.length&&A.length<p&&(p=A.length,m=A,x(v,g))}for(var S=this.spawn(m.map(function(F){return i[F[0]]})),_=this.spawn(),I=this.spawn(),D=g[0],k=0;k<g.length;k++){var L=g[k],R=n[k];L===D?_.merge(R):I.merge(R)}var O=o(function(P){var z=e.spawn();return P.forEach(function($){z.merge($),$.connectedEdges().forEach(function(H){e.contains(H)&&!S.contains(H)&&z.merge(H)})}),z},"constructComponent"),M=[O(_),O(I)],B={cut:S,components:M,partition1:_,partition2:I};return B},"kargerStein")},Aqe=o(function(e){return{x:e.x,y:e.y}},"copyPosition"),MS=o(function(e,r,n){return{x:e.x*r+n.x,y:e.y*r+n.y}},"modelToRenderedPosition"),pme=o(function(e,r,n){return{x:(e.x-n.x)/r,y:(e.y-n.y)/r}},"renderedToModelPosition"),U1=o(function(e){return{x:e[0],y:e[1]}},"array2point"),_qe=o(function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=1/0,a=r;a<n;a++){var s=e[a];isFinite(s)&&(i=Math.min(s,i))}return i},"min"),Dqe=o(function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=-1/0,a=r;a<n;a++){var s=e[a];isFinite(s)&&(i=Math.max(s,i))}return i},"max"),Lqe=o(function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=0,a=0,s=r;s<n;s++){var l=e[s];isFinite(l)&&(i+=l,a++)}return i/a},"mean"),Rqe=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;i?e=e.slice(r,n):(n<e.length&&e.splice(n,e.length-n),r>0&&e.splice(0,r));for(var l=0,u=e.length-1;u>=0;u--){var h=e[u];s?isFinite(h)||(e[u]=-1/0,l++):e.splice(u,1)}a&&e.sort(function(p,m){return p-m});var f=e.length,d=Math.floor(f/2);return f%2!==0?e[d+1+l]:(e[d-1+l]+e[d+l])/2},"median"),Nqe=o(function(e){return Math.PI*e/180},"deg2rad"),K6=o(function(e,r){return Math.atan2(r,e)-Math.PI/2},"getAngleFromDisp"),iB=Math.log2||function(t){return Math.log(t)/Math.log(2)},mme=o(function(e){return e>0?1:e<0?-1:0},"signum"),Gp=o(function(e,r){return Math.sqrt(Op(e,r))},"dist"),Op=o(function(e,r){var n=r.x-e.x,i=r.y-e.y;return n*n+i*i},"sqdist"),Mqe=o(function(e){for(var r=e.length,n=0,i=0;i<r;i++)n+=e[i];for(var a=0;a<r;a++)e[a]=e[a]/n;return e},"inPlaceSumNormalize"),oa=o(function(e,r,n,i){return(1-i)*(1-i)*e+2*(1-i)*i*r+i*i*n},"qbezierAt"),W1=o(function(e,r,n,i){return{x:oa(e.x,r.x,n.x,i),y:oa(e.y,r.y,n.y,i)}},"qbezierPtAt"),Iqe=o(function(e,r,n,i){var a={x:r.x-e.x,y:r.y-e.y},s=Gp(e,r),l={x:a.x/s,y:a.y/s};return n=n??0,i=i??n*s,{x:e.x+l.x*i,y:e.y+l.y*i}},"lineAt"),Yb=o(function(e,r,n){return Math.max(e,Math.min(n,r))},"bound"),Hs=o(function(e){if(e==null)return{x1:1/0,y1:1/0,x2:-1/0,y2:-1/0,w:0,h:0};if(e.x1!=null&&e.y1!=null){if(e.x2!=null&&e.y2!=null&&e.x2>=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(e.w!=null&&e.h!=null&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},"makeBoundingBox"),Oqe=o(function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},"copyBoundingBox"),Pqe=o(function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},"clearBoundingBox"),Bqe=o(function(e,r,n){return{x1:e.x1+r,x2:e.x2+r,y1:e.y1+n,y2:e.y2+n,w:e.w,h:e.h}},"shiftBoundingBox"),gme=o(function(e,r){e.x1=Math.min(e.x1,r.x1),e.x2=Math.max(e.x2,r.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,r.y1),e.y2=Math.max(e.y2,r.y2),e.h=e.y2-e.y1},"updateBoundingBox"),Fqe=o(function(e,r,n){e.x1=Math.min(e.x1,r),e.x2=Math.max(e.x2,r),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},"expandBoundingBoxByPoint"),cS=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.x1-=r,e.x2+=r,e.y1-=r,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBox"),uS=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],n,i,a,s;if(r.length===1)n=i=a=s=r[0];else if(r.length===2)n=a=r[0],s=i=r[1];else if(r.length===4){var l=_i(r,4);n=l[0],i=l[1],a=l[2],s=l[3]}return e.x1-=s,e.x2+=i,e.y1-=n,e.y2+=a,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBoxSides"),Fpe=o(function(e,r){e.x1=r.x1,e.y1=r.y1,e.x2=r.x2,e.y2=r.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},"assignBoundingBox"),aB=o(function(e,r){return!(e.x1>r.x2||r.x1>e.x2||e.x2<r.x1||r.x2<e.x1||e.y2<r.y1||r.y2<e.y1||e.y1>r.y2||r.y1>e.y2)},"boundingBoxesIntersect"),K1=o(function(e,r,n){return e.x1<=r&&r<=e.x2&&e.y1<=n&&n<=e.y2},"inBoundingBox"),$qe=o(function(e,r){return K1(e,r.x,r.y)},"pointInBoundingBox"),yme=o(function(e,r){return K1(e,r.x1,r.y1)&&K1(e,r.x2,r.y2)},"boundingBoxInBoundingBox"),vme=o(function(e,r,n,i,a,s,l){var u=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"auto",h=u==="auto"?Vp(a,s):u,f=a/2,d=s/2;h=Math.min(h,f,d);var p=h!==f,m=h!==d,g;if(p){var y=n-f+h-l,v=i-d-l,x=n+f-h+l,b=v;if(g=Ef(e,r,n,i,y,v,x,b,!1),g.length>0)return g}if(m){var w=n+f+l,C=i-d+h-l,T=w,E=i+d-h+l;if(g=Ef(e,r,n,i,w,C,T,E,!1),g.length>0)return g}if(p){var A=n-f+h-l,S=i+d+l,_=n+f-h+l,I=S;if(g=Ef(e,r,n,i,A,S,_,I,!1),g.length>0)return g}if(m){var D=n-f-l,k=i-d+h-l,L=D,R=i+d-h+l;if(g=Ef(e,r,n,i,D,k,L,R,!1),g.length>0)return g}var O;{var M=n-f+h,B=i-d+h;if(O=Pb(e,r,n,i,M,B,h+l),O.length>0&&O[0]<=M&&O[1]<=B)return[O[0],O[1]]}{var F=n+f-h,P=i-d+h;if(O=Pb(e,r,n,i,F,P,h+l),O.length>0&&O[0]>=F&&O[1]<=P)return[O[0],O[1]]}{var z=n+f-h,$=i+d-h;if(O=Pb(e,r,n,i,z,$,h+l),O.length>0&&O[0]>=z&&O[1]>=$)return[O[0],O[1]]}{var H=n-f+h,Q=i+d-h;if(O=Pb(e,r,n,i,H,Q,h+l),O.length>0&&O[0]<=H&&O[1]>=Q)return[O[0],O[1]]}return[]},"roundRectangleIntersectLine"),zqe=o(function(e,r,n,i,a,s,l){var u=l,h=Math.min(n,a),f=Math.max(n,a),d=Math.min(i,s),p=Math.max(i,s);return h-u<=e&&e<=f+u&&d-u<=r&&r<=p+u},"inLineVicinity"),Gqe=o(function(e,r,n,i,a,s,l,u,h){var f={x1:Math.min(n,l,a)-h,x2:Math.max(n,l,a)+h,y1:Math.min(i,u,s)-h,y2:Math.max(i,u,s)+h};return!(e<f.x1||e>f.x2||r<f.y1||r>f.y2)},"inBezierVicinity"),Vqe=o(function(e,r,n,i){n-=i;var a=r*r-4*e*n;if(a<0)return[];var s=Math.sqrt(a),l=2*e,u=(-r+s)/l,h=(-r-s)/l;return[u,h]},"solveQuadratic"),Uqe=o(function(e,r,n,i,a){var s=1e-5;e===0&&(e=s),r/=e,n/=e,i/=e;var l,u,h,f,d,p,m,g;if(u=(3*n-r*r)/9,h=-(27*i)+r*(9*n-2*(r*r)),h/=54,l=u*u*u+h*h,a[1]=0,m=r/3,l>0){d=h+Math.sqrt(l),d=d<0?-Math.pow(-d,1/3):Math.pow(d,1/3),p=h-Math.sqrt(l),p=p<0?-Math.pow(-p,1/3):Math.pow(p,1/3),a[0]=-m+d+p,m+=(d+p)/2,a[4]=a[2]=-m,m=Math.sqrt(3)*(-p+d)/2,a[3]=m,a[5]=-m;return}if(a[5]=a[3]=0,l===0){g=h<0?-Math.pow(-h,1/3):Math.pow(h,1/3),a[0]=-m+2*g,a[4]=a[2]=-(g+m);return}u=-u,f=u*u*u,f=Math.acos(h/Math.sqrt(f)),g=2*Math.sqrt(u),a[0]=-m+g*Math.cos(f/3),a[2]=-m+g*Math.cos((f+2*Math.PI)/3),a[4]=-m+g*Math.cos((f+4*Math.PI)/3)},"solveCubic"),Hqe=o(function(e,r,n,i,a,s,l,u){var h=1*n*n-4*n*a+2*n*l+4*a*a-4*a*l+l*l+i*i-4*i*s+2*i*u+4*s*s-4*s*u+u*u,f=1*9*n*a-3*n*n-3*n*l-6*a*a+3*a*l+9*i*s-3*i*i-3*i*u-6*s*s+3*s*u,d=1*3*n*n-6*n*a+n*l-n*e+2*a*a+2*a*e-l*e+3*i*i-6*i*s+i*u-i*r+2*s*s+2*s*r-u*r,p=1*n*a-n*n+n*e-a*e+i*s-i*i+i*r-s*r,m=[];Uqe(h,f,d,p,m);for(var g=1e-7,y=[],v=0;v<6;v+=2)Math.abs(m[v+1])<g&&m[v]>=0&&m[v]<=1&&y.push(m[v]);y.push(1),y.push(0);for(var x=-1,b,w,C,T=0;T<y.length;T++)b=Math.pow(1-y[T],2)*n+2*(1-y[T])*y[T]*a+y[T]*y[T]*l,w=Math.pow(1-y[T],2)*i+2*(1-y[T])*y[T]*s+y[T]*y[T]*u,C=Math.pow(b-e,2)+Math.pow(w-r,2),x>=0?C<x&&(x=C):x=C;return x},"sqdistToQuadraticBezier"),Wqe=o(function(e,r,n,i,a,s){var l=[e-n,r-i],u=[a-n,s-i],h=u[0]*u[0]+u[1]*u[1],f=l[0]*l[0]+l[1]*l[1],d=l[0]*u[0]+l[1]*u[1],p=d*d/h;return d<0?f:p>h?(e-a)*(e-a)+(r-s)*(r-s):f-p},"sqdistToFiniteLine"),Us=o(function(e,r,n){for(var i,a,s,l,u,h=0,f=0;f<n.length/2;f++)if(i=n[f*2],a=n[f*2+1],f+1<n.length/2?(s=n[(f+1)*2],l=n[(f+1)*2+1]):(s=n[(f+1-n.length/2)*2],l=n[(f+1-n.length/2)*2+1]),!(i==e&&s==e))if(i>=e&&e>=s||i<=e&&e<=s)u=(e-i)/(s-i)*(l-a)+a,u>r&&h++;else continue;return h%2!==0},"pointInsidePolygonPoints"),Zu=o(function(e,r,n,i,a,s,l,u,h){var f=new Array(n.length),d;u[0]!=null?(d=Math.atan(u[1]/u[0]),u[0]<0?d=d+Math.PI/2:d=-d-Math.PI/2):d=u;for(var p=Math.cos(-d),m=Math.sin(-d),g=0;g<f.length/2;g++)f[g*2]=s/2*(n[g*2]*p-n[g*2+1]*m),f[g*2+1]=l/2*(n[g*2+1]*p+n[g*2]*m),f[g*2]+=i,f[g*2+1]+=a;var y;if(h>0){var v=TS(f,-h);y=wS(v)}else y=f;return Us(e,r,y)},"pointInsidePolygon"),qqe=o(function(e,r,n,i,a,s,l,u){for(var h=new Array(n.length*2),f=0;f<u.length;f++){var d=u[f];h[f*4+0]=d.startX,h[f*4+1]=d.startY,h[f*4+2]=d.stopX,h[f*4+3]=d.stopY;var p=Math.pow(d.cx-e,2)+Math.pow(d.cy-r,2);if(p<=Math.pow(d.radius,2))return!0}return Us(e,r,h)},"pointInsideRoundPolygon"),wS=o(function(e){for(var r=new Array(e.length/2),n,i,a,s,l,u,h,f,d=0;d<e.length/4;d++){n=e[d*4],i=e[d*4+1],a=e[d*4+2],s=e[d*4+3],d<e.length/4-1?(l=e[(d+1)*4],u=e[(d+1)*4+1],h=e[(d+1)*4+2],f=e[(d+1)*4+3]):(l=e[0],u=e[1],h=e[2],f=e[3]);var p=Ef(n,i,a,s,l,u,h,f,!0);r[d*2]=p[0],r[d*2+1]=p[1]}return r},"joinLines"),TS=o(function(e,r){for(var n=new Array(e.length*2),i,a,s,l,u=0;u<e.length/2;u++){i=e[u*2],a=e[u*2+1],u<e.length/2-1?(s=e[(u+1)*2],l=e[(u+1)*2+1]):(s=e[0],l=e[1]);var h=l-a,f=-(s-i),d=Math.sqrt(h*h+f*f),p=h/d,m=f/d;n[u*4]=i+p*r,n[u*4+1]=a+m*r,n[u*4+2]=s+p*r,n[u*4+3]=l+m*r}return n},"expandPolygon"),Yqe=o(function(e,r,n,i,a,s){var l=n-e,u=i-r;l/=a,u/=s;var h=Math.sqrt(l*l+u*u),f=h-1;if(f<0)return[];var d=f/h;return[(n-e)*d+e,(i-r)*d+r]},"intersectLineEllipse"),$p=o(function(e,r,n,i,a,s,l){return e-=a,r-=s,e/=n/2+l,r/=i/2+l,e*e+r*r<=1},"checkInEllipse"),Pb=o(function(e,r,n,i,a,s,l){var u=[n-e,i-r],h=[e-a,r-s],f=u[0]*u[0]+u[1]*u[1],d=2*(h[0]*u[0]+h[1]*u[1]),p=h[0]*h[0]+h[1]*h[1]-l*l,m=d*d-4*f*p;if(m<0)return[];var g=(-d+Math.sqrt(m))/(2*f),y=(-d-Math.sqrt(m))/(2*f),v=Math.min(g,y),x=Math.max(g,y),b=[];if(v>=0&&v<=1&&b.push(v),x>=0&&x<=1&&b.push(x),b.length===0)return[];var w=b[0]*u[0]+e,C=b[0]*u[1]+r;if(b.length>1){if(b[0]==b[1])return[w,C];var T=b[1]*u[0]+e,E=b[1]*u[1]+r;return[w,C,T,E]}else return[w,C]},"intersectLineCircle"),TP=o(function(e,r,n){return r<=e&&e<=n||n<=e&&e<=r?e:e<=r&&r<=n||n<=r&&r<=e?r:n},"midOfThree"),Ef=o(function(e,r,n,i,a,s,l,u,h){var f=e-a,d=n-e,p=l-a,m=r-s,g=i-r,y=u-s,v=p*m-y*f,x=d*m-g*f,b=y*d-p*g;if(b!==0){var w=v/b,C=x/b,T=.001,E=0-T,A=1+T;return E<=w&&w<=A&&E<=C&&C<=A?[e+w*d,r+w*g]:h?[e+w*d,r+w*g]:[]}else return v===0||x===0?TP(e,n,l)===l?[l,u]:TP(e,n,a)===a?[a,s]:TP(a,l,n)===n?[n,i]:[]:[]},"finiteLinesIntersect"),Xb=o(function(e,r,n,i,a,s,l,u){var h=[],f,d=new Array(n.length),p=!0;s==null&&(p=!1);var m;if(p){for(var g=0;g<d.length/2;g++)d[g*2]=n[g*2]*s+i,d[g*2+1]=n[g*2+1]*l+a;if(u>0){var y=TS(d,-u);m=wS(y)}else m=d}else m=n;for(var v,x,b,w,C=0;C<m.length/2;C++)v=m[C*2],x=m[C*2+1],C<m.length/2-1?(b=m[(C+1)*2],w=m[(C+1)*2+1]):(b=m[0],w=m[1]),f=Ef(e,r,i,a,v,x,b,w),f.length!==0&&h.push(f[0],f[1]);return h},"polygonIntersectLine"),Xqe=o(function(e,r,n,i,a,s,l,u,h){var f=[],d,p=new Array(n.length*2);h.forEach(function(b,w){w===0?(p[p.length-2]=b.startX,p[p.length-1]=b.startY):(p[w*4-2]=b.startX,p[w*4-1]=b.startY),p[w*4]=b.stopX,p[w*4+1]=b.stopY,d=Pb(e,r,i,a,b.cx,b.cy,b.radius),d.length!==0&&f.push(d[0],d[1])});for(var m=0;m<p.length/4;m++)d=Ef(e,r,i,a,p[m*4],p[m*4+1],p[m*4+2],p[m*4+3],!1),d.length!==0&&f.push(d[0],d[1]);if(f.length>2){for(var g=[f[0],f[1]],y=Math.pow(g[0]-e,2)+Math.pow(g[1]-r,2),v=1;v<f.length/2;v++){var x=Math.pow(f[v*2]-e,2)+Math.pow(f[v*2+1]-r,2);x<=y&&(g[0]=f[v*2],g[1]=f[v*2+1],y=x)}return g}return f},"roundPolygonIntersectLine"),Q6=o(function(e,r,n){var i=[e[0]-r[0],e[1]-r[1]],a=Math.sqrt(i[0]*i[0]+i[1]*i[1]),s=(a-n)/a;return s<0&&(s=1e-5),[r[0]+s*i[0],r[1]+s*i[1]]},"shortenIntersection"),gs=o(function(e,r){var n=PP(e,r);return n=xme(n),n},"generateUnitNgonPointsFitToSquare"),xme=o(function(e){for(var r,n,i=e.length/2,a=1/0,s=1/0,l=-1/0,u=-1/0,h=0;h<i;h++)r=e[2*h],n=e[2*h+1],a=Math.min(a,r),l=Math.max(l,r),s=Math.min(s,n),u=Math.max(u,n);for(var f=2/(l-a),d=2/(u-s),p=0;p<i;p++)r=e[2*p]=e[2*p]*f,n=e[2*p+1]=e[2*p+1]*d,a=Math.min(a,r),l=Math.max(l,r),s=Math.min(s,n),u=Math.max(u,n);if(s<-1)for(var m=0;m<i;m++)n=e[2*m+1]=e[2*m+1]+(-1-s);return e},"fitPolygonToSquare"),PP=o(function(e,r){var n=1/e*2*Math.PI,i=e%2===0?Math.PI/2+n/2:Math.PI/2;i+=r;for(var a=new Array(e*2),s,l=0;l<e;l++)s=l*n+i,a[2*l]=Math.cos(s),a[2*l+1]=Math.sin(-s);return a},"generateUnitNgonPoints"),Vp=o(function(e,r){return Math.min(e/4,r/4,8)},"getRoundRectangleRadius"),bme=o(function(e,r){return Math.min(e/10,r/10,8)},"getRoundPolygonRadius"),sB=o(function(){return 8},"getCutRectangleCornerLength"),jqe=o(function(e,r,n){return[e-2*r+n,2*(r-e),e]},"bezierPtsToQuadCoeff"),BP=o(function(e,r){return{heightOffset:Math.min(15,.05*r),widthOffset:Math.min(100,.25*e),ctrlPtOffsetPct:.05}},"getBarrelCurveConstants"),Kqe=la({dampingFactor:.8,precision:1e-6,iterations:200,weight:o(function(e){return 1},"weight")}),Qqe={pageRank:o(function(e){for(var r=Kqe(e),n=r.dampingFactor,i=r.precision,a=r.iterations,s=r.weight,l=this._private.cy,u=this.byGroup(),h=u.nodes,f=u.edges,d=h.length,p=d*d,m=f.length,g=new Array(p),y=new Array(d),v=(1-n)/d,x=0;x<d;x++){for(var b=0;b<d;b++){var w=x*d+b;g[w]=0}y[x]=0}for(var C=0;C<m;C++){var T=f[C],E=T.data("source"),A=T.data("target");if(E!==A){var S=h.indexOfId(E),_=h.indexOfId(A),I=s(T),D=_*d+S;g[D]+=I,y[S]+=I}}for(var k=1/d+v,L=0;L<d;L++)if(y[L]===0)for(var R=0;R<d;R++){var O=R*d+L;g[O]=k}else for(var M=0;M<d;M++){var B=M*d+L;g[B]=g[B]/y[L]+v}for(var F=new Array(d),P=new Array(d),z,$=0;$<d;$++)F[$]=1;for(var H=0;H<a;H++){for(var Q=0;Q<d;Q++)P[Q]=0;for(var j=0;j<d;j++)for(var ie=0;ie<d;ie++){var ne=j*d+ie;P[j]+=g[ne]*F[ie]}Mqe(P),z=F,F=P,P=z;for(var le=0,he=0;he<d;he++){var K=z[he]-F[he];le+=K*K}if(le<i)break}var X={rank:o(function(J){return J=l.collection(J)[0],F[h.indexOf(J)]},"rank")};return X},"pageRank")},$pe=la({root:null,weight:o(function(e){return 1},"weight"),directed:!1,alpha:0}),q1={degreeCentralityNormalized:o(function(e){e=$pe(e);var r=this.cy(),n=this.nodes(),i=n.length;if(e.directed){for(var f={},d={},p=0,m=0,g=0;g<i;g++){var y=n[g],v=y.id();e.root=y;var x=this.degreeCentrality(e);p<x.indegree&&(p=x.indegree),m<x.outdegree&&(m=x.outdegree),f[v]=x.indegree,d[v]=x.outdegree}return{indegree:o(function(w){return p==0?0:(Zt(w)&&(w=r.filter(w)),f[w.id()]/p)},"indegree"),outdegree:o(function(w){return m===0?0:(Zt(w)&&(w=r.filter(w)),d[w.id()]/m)},"outdegree")}}else{for(var a={},s=0,l=0;l<i;l++){var u=n[l];e.root=u;var h=this.degreeCentrality(e);s<h.degree&&(s=h.degree),a[u.id()]=h.degree}return{degree:o(function(w){return s===0?0:(Zt(w)&&(w=r.filter(w)),a[w.id()]/s)},"degree")}}},"degreeCentralityNormalized"),degreeCentrality:o(function(e){e=$pe(e);var r=this.cy(),n=this,i=e,a=i.root,s=i.weight,l=i.directed,u=i.alpha;if(a=r.collection(a)[0],l){for(var m=a.connectedEdges(),g=m.filter(function(E){return E.target().same(a)&&n.has(E)}),y=m.filter(function(E){return E.source().same(a)&&n.has(E)}),v=g.length,x=y.length,b=0,w=0,C=0;C<g.length;C++)b+=s(g[C]);for(var T=0;T<y.length;T++)w+=s(y[T]);return{indegree:Math.pow(v,1-u)*Math.pow(b,u),outdegree:Math.pow(x,1-u)*Math.pow(w,u)}}else{for(var h=a.connectedEdges().intersection(n),f=h.length,d=0,p=0;p<h.length;p++)d+=s(h[p]);return{degree:Math.pow(f,1-u)*Math.pow(d,u)}}},"degreeCentrality")};q1.dc=q1.degreeCentrality;q1.dcn=q1.degreeCentralityNormalised=q1.degreeCentralityNormalized;zpe=la({harmonic:!0,weight:o(function(){return 1},"weight"),directed:!1,root:null}),Y1={closenessCentralityNormalized:o(function(e){for(var r=zpe(e),n=r.harmonic,i=r.weight,a=r.directed,s=this.cy(),l={},u=0,h=this.nodes(),f=this.floydWarshall({weight:i,directed:a}),d=0;d<h.length;d++){for(var p=0,m=h[d],g=0;g<h.length;g++)if(d!==g){var y=f.distance(m,h[g]);n?p+=1/y:p+=y}n||(p=1/p),u<p&&(u=p),l[m.id()]=p}return{closeness:o(function(x){return u==0?0:(Zt(x)?x=s.filter(x)[0].id():x=x.id(),l[x]/u)},"closeness")}},"closenessCentralityNormalized"),closenessCentrality:o(function(e){var r=zpe(e),n=r.root,i=r.weight,a=r.directed,s=r.harmonic;n=this.filter(n)[0];for(var l=this.dijkstra({root:n,weight:i,directed:a}),u=0,h=this.nodes(),f=0;f<h.length;f++){var d=h[f];if(!d.same(n)){var p=l.distanceTo(d);s?u+=1/p:u+=p}}return s?u:1/u},"closenessCentrality")};Y1.cc=Y1.closenessCentrality;Y1.ccn=Y1.closenessCentralityNormalised=Y1.closenessCentralityNormalized;Zqe=la({weight:null,directed:!1}),FP={betweennessCentrality:o(function(e){for(var r=Zqe(e),n=r.directed,i=r.weight,a=i!=null,s=this.cy(),l=this.nodes(),u={},h={},f=0,d={set:o(function(w,C){h[w]=C,C>f&&(f=C)},"set"),get:o(function(w){return h[w]},"get")},p=0;p<l.length;p++){var m=l[p],g=m.id();n?u[g]=m.outgoers().nodes():u[g]=m.openNeighborhood().nodes(),d.set(g,0)}for(var y=o(function(w){for(var C=l[w].id(),T=[],E={},A={},S={},_=new i4(function(ie,ne){return S[ie]-S[ne]}),I=0;I<l.length;I++){var D=l[I].id();E[D]=[],A[D]=0,S[D]=1/0}for(A[C]=1,S[C]=0,_.push(C);!_.empty();){var k=_.pop();if(T.push(k),a)for(var L=0;L<u[k].length;L++){var R=u[k][L],O=s.getElementById(k),M=void 0;O.edgesTo(R).length>0?M=O.edgesTo(R)[0]:M=R.edgesTo(O)[0];var B=i(M);R=R.id(),S[R]>S[k]+B&&(S[R]=S[k]+B,_.nodes.indexOf(R)<0?_.push(R):_.updateItem(R),A[R]=0,E[R]=[]),S[R]==S[k]+B&&(A[R]=A[R]+A[k],E[R].push(k))}else for(var F=0;F<u[k].length;F++){var P=u[k][F].id();S[P]==1/0&&(_.push(P),S[P]=S[k]+1),S[P]==S[k]+1&&(A[P]=A[P]+A[k],E[P].push(k))}}for(var z={},$=0;$<l.length;$++)z[l[$].id()]=0;for(;T.length>0;){for(var H=T.pop(),Q=0;Q<E[H].length;Q++){var j=E[H][Q];z[j]=z[j]+A[j]/A[H]*(1+z[H])}H!=l[w].id()&&d.set(H,d.get(H)+z[H])}},"_loop"),v=0;v<l.length;v++)y(v);var x={betweenness:o(function(w){var C=s.collection(w).id();return d.get(C)},"betweenness"),betweennessNormalized:o(function(w){if(f==0)return 0;var C=s.collection(w).id();return d.get(C)/f},"betweennessNormalized")};return x.betweennessNormalised=x.betweennessNormalized,x},"betweennessCentrality")};FP.bc=FP.betweennessCentrality;Jqe=la({expandFactor:2,inflateFactor:2,multFactor:1,maxIterations:20,attributes:[function(t){return 1}]}),eYe=o(function(e){return Jqe(e)},"setOptions"),tYe=o(function(e,r){for(var n=0,i=0;i<r.length;i++)n+=r[i](e);return n},"getSimilarity"),rYe=o(function(e,r,n){for(var i=0;i<r;i++)e[i*r+i]=n},"addLoops"),wme=o(function(e,r){for(var n,i=0;i<r;i++){n=0;for(var a=0;a<r;a++)n+=e[a*r+i];for(var s=0;s<r;s++)e[s*r+i]=e[s*r+i]/n}},"normalize"),nYe=o(function(e,r,n){for(var i=new Array(n*n),a=0;a<n;a++){for(var s=0;s<n;s++)i[a*n+s]=0;for(var l=0;l<n;l++)for(var u=0;u<n;u++)i[a*n+u]+=e[a*n+l]*r[l*n+u]}return i},"mmult"),iYe=o(function(e,r,n){for(var i=e.slice(0),a=1;a<n;a++)e=nYe(e,i,r);return e},"expand"),aYe=o(function(e,r,n){for(var i=new Array(r*r),a=0;a<r*r;a++)i[a]=Math.pow(e[a],n);return wme(i,r),i},"inflate"),sYe=o(function(e,r,n,i){for(var a=0;a<n;a++){var s=Math.round(e[a]*Math.pow(10,i))/Math.pow(10,i),l=Math.round(r[a]*Math.pow(10,i))/Math.pow(10,i);if(s!==l)return!1}return!0},"hasConverged"),oYe=o(function(e,r,n,i){for(var a=[],s=0;s<r;s++){for(var l=[],u=0;u<r;u++)Math.round(e[s*r+u]*1e3)/1e3>0&&l.push(n[u]);l.length!==0&&a.push(i.collection(l))}return a},"assign"),lYe=o(function(e,r){for(var n=0;n<e.length;n++)if(!r[n]||e[n].id()!==r[n].id())return!1;return!0},"isDuplicate"),cYe=o(function(e){for(var r=0;r<e.length;r++)for(var n=0;n<e.length;n++)r!=n&&lYe(e[r],e[n])&&e.splice(n,1);return e},"removeDuplicates"),Gpe=o(function(e){for(var r=this.nodes(),n=this.edges(),i=this.cy(),a=eYe(e),s={},l=0;l<r.length;l++)s[r[l].id()]=l;for(var u=r.length,h=u*u,f=new Array(h),d,p=0;p<h;p++)f[p]=0;for(var m=0;m<n.length;m++){var g=n[m],y=s[g.source().id()],v=s[g.target().id()],x=tYe(g,a.attributes);f[y*u+v]+=x,f[v*u+y]+=x}rYe(f,u,a.multFactor),wme(f,u);for(var b=!0,w=0;b&&w<a.maxIterations;)b=!1,d=iYe(f,u,a.expandFactor),f=aYe(d,u,a.inflateFactor),sYe(f,d,h,4)||(b=!0),w++;var C=oYe(f,u,r,i);return C=cYe(C),C},"markovClustering"),uYe={markovClustering:Gpe,mcl:Gpe},hYe=o(function(e){return e},"identity"),Tme=o(function(e,r){return Math.abs(r-e)},"absDiff"),Vpe=o(function(e,r,n){return e+Tme(r,n)},"addAbsDiff"),Upe=o(function(e,r,n){return e+Math.pow(n-r,2)},"addSquaredDiff"),fYe=o(function(e){return Math.sqrt(e)},"sqrt"),dYe=o(function(e,r,n){return Math.max(e,Tme(r,n))},"maxAbsDiff"),_b=o(function(e,r,n,i,a){for(var s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:hYe,l=i,u,h,f=0;f<e;f++)u=r(f),h=n(f),l=a(l,u,h);return s(l)},"getDistance"),Q1={euclidean:o(function(e,r,n){return e>=2?_b(e,r,n,0,Upe,fYe):_b(e,r,n,0,Vpe)},"euclidean"),squaredEuclidean:o(function(e,r,n){return _b(e,r,n,0,Upe)},"squaredEuclidean"),manhattan:o(function(e,r,n){return _b(e,r,n,0,Vpe)},"manhattan"),max:o(function(e,r,n){return _b(e,r,n,-1/0,dYe)},"max")};Q1["squared-euclidean"]=Q1.squaredEuclidean;Q1.squaredeuclidean=Q1.squaredEuclidean;o(IS,"clusteringDistance");pYe=la({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),oB=o(function(e){return pYe(e)},"setOptions"),kS=o(function(e,r,n,i,a){var s=a!=="kMedoids",l=s?function(d){return n[d]}:function(d){return i[d](n)},u=o(function(p){return i[p](r)},"getQ"),h=n,f=r;return IS(e,i.length,l,u,h,f)},"getDist"),kP=o(function(e,r,n){for(var i=n.length,a=new Array(i),s=new Array(i),l=new Array(r),u=null,h=0;h<i;h++)a[h]=e.min(n[h]).value,s[h]=e.max(n[h]).value;for(var f=0;f<r;f++){u=[];for(var d=0;d<i;d++)u[d]=Math.random()*(s[d]-a[d])+a[d];l[f]=u}return l},"randomCentroids"),kme=o(function(e,r,n,i,a){for(var s=1/0,l=0,u=0;u<r.length;u++){var h=kS(n,e,r[u],i,a);h<s&&(s=h,l=u)}return l},"classify"),Eme=o(function(e,r,n){for(var i=[],a=null,s=0;s<r.length;s++)a=r[s],n[a.id()]===e&&i.push(a);return i},"buildCluster"),mYe=o(function(e,r,n){return Math.abs(r-e)<=n},"haveValuesConverged"),gYe=o(function(e,r,n){for(var i=0;i<e.length;i++)for(var a=0;a<e[i].length;a++){var s=Math.abs(e[i][a]-r[i][a]);if(s>n)return!1}return!0},"haveMatricesConverged"),yYe=o(function(e,r,n){for(var i=0;i<n;i++)if(e===r[i])return!0;return!1},"seenBefore"),Hpe=o(function(e,r){var n=new Array(r);if(e.length<50)for(var i=0;i<r;i++){for(var a=e[Math.floor(Math.random()*e.length)];yYe(a,n,i);)a=e[Math.floor(Math.random()*e.length)];n[i]=a}else for(var s=0;s<r;s++)n[s]=e[Math.floor(Math.random()*e.length)];return n},"randomMedoids"),Wpe=o(function(e,r,n){for(var i=0,a=0;a<r.length;a++)i+=kS("manhattan",r[a],e,n,"kMedoids");return i},"findCost"),vYe=o(function(e){var r=this.cy(),n=this.nodes(),i=null,a=oB(e),s=new Array(a.k),l={},u;a.testMode?typeof a.testCentroids=="number"?(a.testCentroids,u=kP(n,a.k,a.attributes)):Wi(a.testCentroids)==="object"?u=a.testCentroids:u=kP(n,a.k,a.attributes):u=kP(n,a.k,a.attributes);for(var h=!0,f=0;h&&f<a.maxIterations;){for(var d=0;d<n.length;d++)i=n[d],l[i.id()]=kme(i,u,a.distance,a.attributes,"kMeans");h=!1;for(var p=0;p<a.k;p++){var m=Eme(p,n,l);if(m.length!==0){for(var g=a.attributes.length,y=u[p],v=new Array(g),x=new Array(g),b=0;b<g;b++){x[b]=0;for(var w=0;w<m.length;w++)i=m[w],x[b]+=a.attributes[b](i);v[b]=x[b]/m.length,mYe(v[b],y[b],a.sensitivityThreshold)||(h=!0)}u[p]=v,s[p]=r.collection(m)}}f++}return s},"kMeans"),xYe=o(function(e){var r=this.cy(),n=this.nodes(),i=null,a=oB(e),s=new Array(a.k),l,u={},h,f=new Array(a.k);a.testMode?typeof a.testCentroids=="number"||(Wi(a.testCentroids)==="object"?l=a.testCentroids:l=Hpe(n,a.k)):l=Hpe(n,a.k);for(var d=!0,p=0;d&&p<a.maxIterations;){for(var m=0;m<n.length;m++)i=n[m],u[i.id()]=kme(i,l,a.distance,a.attributes,"kMedoids");d=!1;for(var g=0;g<l.length;g++){var y=Eme(g,n,u);if(y.length!==0){f[g]=Wpe(l[g],y,a.attributes);for(var v=0;v<y.length;v++)h=Wpe(y[v],y,a.attributes),h<f[g]&&(f[g]=h,l[g]=y[v],d=!0);s[g]=r.collection(y)}}p++}return s},"kMedoids"),bYe=o(function(e,r,n,i,a){for(var s,l,u=0;u<r.length;u++)for(var h=0;h<e.length;h++)i[u][h]=Math.pow(n[u][h],a.m);for(var f=0;f<e.length;f++)for(var d=0;d<a.attributes.length;d++){s=0,l=0;for(var p=0;p<r.length;p++)s+=i[p][f]*a.attributes[d](r[p]),l+=i[p][f];e[f][d]=s/l}},"updateCentroids"),wYe=o(function(e,r,n,i,a){for(var s=0;s<e.length;s++)r[s]=e[s].slice();for(var l,u,h,f=2/(a.m-1),d=0;d<n.length;d++)for(var p=0;p<i.length;p++){l=0;for(var m=0;m<n.length;m++)u=kS(a.distance,i[p],n[d],a.attributes,"cmeans"),h=kS(a.distance,i[p],n[m],a.attributes,"cmeans"),l+=Math.pow(u/h,f);e[p][d]=1/l}},"updateMembership"),TYe=o(function(e,r,n,i){for(var a=new Array(n.k),s=0;s<a.length;s++)a[s]=[];for(var l,u,h=0;h<r.length;h++){l=-1/0,u=-1;for(var f=0;f<r[0].length;f++)r[h][f]>l&&(l=r[h][f],u=f);a[u].push(e[h])}for(var d=0;d<a.length;d++)a[d]=i.collection(a[d]);return a},"assign"),qpe=o(function(e){var r=this.cy(),n=this.nodes(),i=oB(e),a,s,l,u,h;u=new Array(n.length);for(var f=0;f<n.length;f++)u[f]=new Array(i.k);l=new Array(n.length);for(var d=0;d<n.length;d++)l[d]=new Array(i.k);for(var p=0;p<n.length;p++){for(var m=0,g=0;g<i.k;g++)l[p][g]=Math.random(),m+=l[p][g];for(var y=0;y<i.k;y++)l[p][y]=l[p][y]/m}s=new Array(i.k);for(var v=0;v<i.k;v++)s[v]=new Array(i.attributes.length);h=new Array(n.length);for(var x=0;x<n.length;x++)h[x]=new Array(i.k);for(var b=!0,w=0;b&&w<i.maxIterations;)b=!1,bYe(s,n,l,h,i),wYe(l,u,s,n,i),gYe(l,u,i.sensitivityThreshold)||(b=!0),w++;return a=TYe(n,l,i,r),{clusters:a,degreeOfMembership:l}},"fuzzyCMeans"),kYe={kMeans:vYe,kMedoids:xYe,fuzzyCMeans:qpe,fcm:qpe},EYe=la({distance:"euclidean",linkage:"min",mode:"threshold",threshold:1/0,addDendrogram:!1,dendrogramDepth:0,attributes:[]}),SYe={single:"min",complete:"max"},CYe=o(function(e){var r=EYe(e),n=SYe[r.linkage];return n!=null&&(r.linkage=n),r},"setOptions"),Ype=o(function(e,r,n,i,a){for(var s=0,l=1/0,u,h=a.attributes,f=o(function(_,I){return IS(a.distance,h.length,function(D){return h[D](_)},function(D){return h[D](I)},_,I)},"getDist"),d=0;d<e.length;d++){var p=e[d].key,m=n[p][i[p]];m<l&&(s=p,l=m)}if(a.mode==="threshold"&&l>=a.threshold||a.mode==="dendrogram"&&e.length===1)return!1;var g=r[s],y=r[i[s]],v;a.mode==="dendrogram"?v={left:g,right:y,key:g.key}:v={value:g.value.concat(y.value),key:g.key},e[g.index]=v,e.splice(y.index,1),r[g.key]=v;for(var x=0;x<e.length;x++){var b=e[x];g.key===b.key?u=1/0:a.linkage==="min"?(u=n[g.key][b.key],n[g.key][b.key]>n[y.key][b.key]&&(u=n[y.key][b.key])):a.linkage==="max"?(u=n[g.key][b.key],n[g.key][b.key]<n[y.key][b.key]&&(u=n[y.key][b.key])):a.linkage==="mean"?u=(n[g.key][b.key]*g.size+n[y.key][b.key]*y.size)/(g.size+y.size):a.mode==="dendrogram"?u=f(b.value,g.value):u=f(b.value[0],g.value[0]),n[g.key][b.key]=n[b.key][g.key]=u}for(var w=0;w<e.length;w++){var C=e[w].key;if(i[C]===g.key||i[C]===y.key){for(var T=C,E=0;E<e.length;E++){var A=e[E].key;n[C][A]<n[C][T]&&(T=A)}i[C]=T}e[w].index=w}return g.key=y.key=g.index=y.index=null,!0},"mergeClosest"),Z6=o(function t(e,r,n){e&&(e.value?r.push(e.value):(e.left&&t(e.left,r),e.right&&t(e.right,r)))},"getAllChildren"),AYe=o(function t(e,r){if(!e)return"";if(e.left&&e.right){var n=t(e.left,r),i=t(e.right,r),a=r.add({group:"nodes",data:{id:n+","+i}});return r.add({group:"edges",data:{source:n,target:a.id()}}),r.add({group:"edges",data:{source:i,target:a.id()}}),a.id()}else if(e.value)return e.value.id()},"buildDendrogram"),_Ye=o(function t(e,r,n){if(!e)return[];var i=[],a=[],s=[];return r===0?(e.left&&Z6(e.left,i),e.right&&Z6(e.right,a),s=i.concat(a),[n.collection(s)]):r===1?e.value?[n.collection(e.value)]:(e.left&&Z6(e.left,i),e.right&&Z6(e.right,a),[n.collection(i),n.collection(a)]):e.value?[n.collection(e.value)]:(e.left&&(i=t(e.left,r-1,n)),e.right&&(a=t(e.right,r-1,n)),i.concat(a))},"buildClustersFromTree"),Xpe=o(function(e){for(var r=this.cy(),n=this.nodes(),i=CYe(e),a=i.attributes,s=o(function(w,C){return IS(i.distance,a.length,function(T){return a[T](w)},function(T){return a[T](C)},w,C)},"getDist"),l=[],u=[],h=[],f=[],d=0;d<n.length;d++){var p={value:i.mode==="dendrogram"?n[d]:[n[d]],key:d,index:d};l[d]=p,f[d]=p,u[d]=[],h[d]=0}for(var m=0;m<l.length;m++)for(var g=0;g<=m;g++){var y=void 0;i.mode==="dendrogram"?y=m===g?1/0:s(l[m].value,l[g].value):y=m===g?1/0:s(l[m].value[0],l[g].value[0]),u[m][g]=y,u[g][m]=y,y<u[m][h[m]]&&(h[m]=g)}for(var v=Ype(l,f,u,h,i);v;)v=Ype(l,f,u,h,i);var x;return i.mode==="dendrogram"?(x=_Ye(l[0],i.dendrogramDepth,r),i.addDendrogram&&AYe(l[0],r)):(x=new Array(l.length),l.forEach(function(b,w){b.key=b.index=null,x[w]=r.collection(b.value)})),x},"hierarchicalClustering"),DYe={hierarchicalClustering:Xpe,hca:Xpe},LYe=la({distance:"euclidean",preference:"median",damping:.8,maxIterations:1e3,minIterations:100,attributes:[]}),RYe=o(function(e){var r=e.damping,n=e.preference;.5<=r&&r<1||ai("Damping must range on [0.5, 1). Got: ".concat(r));var i=["median","mean","min","max"];return i.some(function(a){return a===n})||Ct(n)||ai("Preference must be one of [".concat(i.map(function(a){return"'".concat(a,"'")}).join(", "),"] or a number. Got: ").concat(n)),LYe(e)},"setOptions"),NYe=o(function(e,r,n,i){var a=o(function(l,u){return i[u](l)},"attr");return-IS(e,i.length,function(s){return a(r,s)},function(s){return a(n,s)},r,n)},"getSimilarity"),MYe=o(function(e,r){var n=null;return r==="median"?n=Rqe(e):r==="mean"?n=Lqe(e):r==="min"?n=_qe(e):r==="max"?n=Dqe(e):n=r,n},"getPreference"),IYe=o(function(e,r,n){for(var i=[],a=0;a<e;a++)r[a*e+a]+n[a*e+a]>0&&i.push(a);return i},"findExemplars"),jpe=o(function(e,r,n){for(var i=[],a=0;a<e;a++){for(var s=-1,l=-1/0,u=0;u<n.length;u++){var h=n[u];r[a*e+h]>l&&(s=h,l=r[a*e+h])}s>0&&i.push(s)}for(var f=0;f<n.length;f++)i[n[f]]=n[f];return i},"assignClusters"),OYe=o(function(e,r,n){for(var i=jpe(e,r,n),a=0;a<n.length;a++){for(var s=[],l=0;l<i.length;l++)i[l]===n[a]&&s.push(l);for(var u=-1,h=-1/0,f=0;f<s.length;f++){for(var d=0,p=0;p<s.length;p++)d+=r[s[p]*e+s[f]];d>h&&(u=f,h=d)}n[a]=s[u]}return i=jpe(e,r,n),i},"assign"),Kpe=o(function(e){for(var r=this.cy(),n=this.nodes(),i=RYe(e),a={},s=0;s<n.length;s++)a[n[s].id()]=s;var l,u,h,f,d,p;l=n.length,u=l*l,h=new Array(u);for(var m=0;m<u;m++)h[m]=-1/0;for(var g=0;g<l;g++)for(var y=0;y<l;y++)g!==y&&(h[g*l+y]=NYe(i.distance,n[g],n[y],i.attributes));f=MYe(h,i.preference);for(var v=0;v<l;v++)h[v*l+v]=f;d=new Array(u);for(var x=0;x<u;x++)d[x]=0;p=new Array(u);for(var b=0;b<u;b++)p[b]=0;for(var w=new Array(l),C=new Array(l),T=new Array(l),E=0;E<l;E++)w[E]=0,C[E]=0,T[E]=0;for(var A=new Array(l*i.minIterations),S=0;S<A.length;S++)A[S]=0;var _;for(_=0;_<i.maxIterations;_++){for(var I=0;I<l;I++){for(var D=-1/0,k=-1/0,L=-1,R=0,O=0;O<l;O++)w[O]=d[I*l+O],R=p[I*l+O]+h[I*l+O],R>=D?(k=D,D=R,L=O):R>k&&(k=R);for(var M=0;M<l;M++)d[I*l+M]=(1-i.damping)*(h[I*l+M]-D)+i.damping*w[M];d[I*l+L]=(1-i.damping)*(h[I*l+L]-k)+i.damping*w[L]}for(var B=0;B<l;B++){for(var F=0,P=0;P<l;P++)w[P]=p[P*l+B],C[P]=Math.max(0,d[P*l+B]),F+=C[P];F-=C[B],C[B]=d[B*l+B],F+=C[B];for(var z=0;z<l;z++)p[z*l+B]=(1-i.damping)*Math.min(0,F-C[z])+i.damping*w[z];p[B*l+B]=(1-i.damping)*(F-C[B])+i.damping*w[B]}for(var $=0,H=0;H<l;H++){var Q=p[H*l+H]+d[H*l+H]>0?1:0;A[_%i.minIterations*l+H]=Q,$+=Q}if($>0&&(_>=i.minIterations-1||_==i.maxIterations-1)){for(var j=0,ie=0;ie<l;ie++){T[ie]=0;for(var ne=0;ne<i.minIterations;ne++)T[ie]+=A[ne*l+ie];(T[ie]===0||T[ie]===i.minIterations)&&j++}if(j===l)break}}for(var le=IYe(l,d,p),he=OYe(l,h,le),K={},X=0;X<le.length;X++)K[le[X]]=[];for(var te=0;te<n.length;te++){var J=a[n[te].id()],se=he[J];se!=null&&K[se].push(n[te])}for(var ue=new Array(le.length),Z=0;Z<le.length;Z++)ue[Z]=r.collection(K[le[Z]]);return ue},"affinityPropagation"),PYe={affinityPropagation:Kpe,ap:Kpe},BYe=la({root:void 0,directed:!1}),FYe={hierholzer:o(function(e){if(!Ur(e)){var r=arguments;e={root:r[0],directed:r[1]}}var n=BYe(e),i=n.root,a=n.directed,s=this,l=!1,u,h,f;i&&(f=Zt(i)?this.filter(i)[0].id():i[0].id());var d={},p={};a?s.forEach(function(b){var w=b.id();if(b.isNode()){var C=b.indegree(!0),T=b.outdegree(!0),E=C-T,A=T-C;E==1?u?l=!0:u=w:A==1?h?l=!0:h=w:(A>1||E>1)&&(l=!0),d[w]=[],b.outgoers().forEach(function(S){S.isEdge()&&d[w].push(S.id())})}else p[w]=[void 0,b.target().id()]}):s.forEach(function(b){var w=b.id();if(b.isNode()){var C=b.degree(!0);C%2&&(u?h?l=!0:h=w:u=w),d[w]=[],b.connectedEdges().forEach(function(T){return d[w].push(T.id())})}else p[w]=[b.source().id(),b.target().id()]});var m={found:!1,trail:void 0};if(l)return m;if(h&&u)if(a){if(f&&h!=f)return m;f=h}else{if(f&&h!=f&&u!=f)return m;f||(f=h)}else f||(f=s[0].id());var g=o(function(w){for(var C=w,T=[w],E,A,S;d[C].length;)E=d[C].shift(),A=p[E][0],S=p[E][1],C!=S?(d[S]=d[S].filter(function(_){return _!=E}),C=S):!a&&C!=A&&(d[A]=d[A].filter(function(_){return _!=E}),C=A),T.unshift(E),T.unshift(C);return T},"walk"),y=[],v=[];for(v=g(f);v.length!=1;)d[v[0]].length==0?(y.unshift(s.getElementById(v.shift())),y.unshift(s.getElementById(v.shift()))):v=g(v.shift()).concat(v);y.unshift(s.getElementById(v.shift()));for(var x in d)if(d[x].length)return m;return m.found=!0,m.trail=this.spawn(y,!0),m},"hierholzer")},J6=o(function(){var e=this,r={},n=0,i=0,a=[],s=[],l={},u=o(function(p,m){for(var g=s.length-1,y=[],v=e.spawn();s[g].x!=p||s[g].y!=m;)y.push(s.pop().edge),g--;y.push(s.pop().edge),y.forEach(function(x){var b=x.connectedNodes().intersection(e);v.merge(x),b.forEach(function(w){var C=w.id(),T=w.connectedEdges().intersection(e);v.merge(w),r[C].cutVertex?v.merge(T.filter(function(E){return E.isLoop()})):v.merge(T)})}),a.push(v)},"buildComponent"),h=o(function d(p,m,g){p===g&&(i+=1),r[m]={id:n,low:n++,cutVertex:!1};var y=e.getElementById(m).connectedEdges().intersection(e);if(y.size()===0)a.push(e.spawn(e.getElementById(m)));else{var v,x,b,w;y.forEach(function(C){v=C.source().id(),x=C.target().id(),b=v===m?x:v,b!==g&&(w=C.id(),l[w]||(l[w]=!0,s.push({x:m,y:b,edge:C})),b in r?r[m].low=Math.min(r[m].low,r[b].id):(d(p,b,m),r[m].low=Math.min(r[m].low,r[b].low),r[m].id<=r[b].low&&(r[m].cutVertex=!0,u(m,b))))})}},"biconnectedSearch");e.forEach(function(d){if(d.isNode()){var p=d.id();p in r||(i=0,h(p,p),r[p].cutVertex=i>1)}});var f=Object.keys(r).filter(function(d){return r[d].cutVertex}).map(function(d){return e.getElementById(d)});return{cut:e.spawn(f),components:a}},"hopcroftTarjanBiconnected"),$Ye={hopcroftTarjanBiconnected:J6,htbc:J6,htb:J6,hopcroftTarjanBiconnectedComponents:J6},eS=o(function(){var e=this,r={},n=0,i=[],a=[],s=e.spawn(e),l=o(function u(h){a.push(h),r[h]={index:n,low:n++,explored:!1};var f=e.getElementById(h).connectedEdges().intersection(e);if(f.forEach(function(y){var v=y.target().id();v!==h&&(v in r||u(v),r[v].explored||(r[h].low=Math.min(r[h].low,r[v].low)))}),r[h].index===r[h].low){for(var d=e.spawn();;){var p=a.pop();if(d.merge(e.getElementById(p)),r[p].low=r[h].index,r[p].explored=!0,p===h)break}var m=d.edgesWith(d),g=d.merge(m);i.push(g),s=s.difference(g)}},"stronglyConnectedSearch");return e.forEach(function(u){if(u.isNode()){var h=u.id();h in r||l(h)}}),{cut:s,components:i}},"tarjanStronglyConnected"),zYe={tarjanStronglyConnected:eS,tsc:eS,tscc:eS,tarjanStronglyConnectedComponents:eS},Sme={};[qb,gqe,yqe,xqe,wqe,kqe,Cqe,Qqe,q1,Y1,FP,uYe,kYe,DYe,PYe,FYe,$Ye,zYe].forEach(function(t){rr(Sme,t)});Cme=0,Ame=1,_me=2,Ju=o(function t(e){if(!(this instanceof t))return new t(e);this.id="Thenable/1.0.7",this.state=Cme,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof e=="function"&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))},"api");Ju.prototype={fulfill:o(function(e){return Qpe(this,Ame,"fulfillValue",e)},"fulfill"),reject:o(function(e){return Qpe(this,_me,"rejectReason",e)},"reject"),then:o(function(e,r){var n=this,i=new Ju;return n.onFulfilled.push(Jpe(e,i,"fulfill")),n.onRejected.push(Jpe(r,i,"reject")),Dme(n),i.proxy},"then")};Qpe=o(function(e,r,n,i){return e.state===Cme&&(e.state=r,e[n]=i,Dme(e)),e},"deliver"),Dme=o(function(e){e.state===Ame?Zpe(e,"onFulfilled",e.fulfillValue):e.state===_me&&Zpe(e,"onRejected",e.rejectReason)},"execute"),Zpe=o(function(e,r,n){if(e[r].length!==0){var i=e[r];e[r]=[];var a=o(function(){for(var l=0;l<i.length;l++)i[l](n)},"func");typeof setImmediate=="function"?setImmediate(a):setTimeout(a,0)}},"execute_handlers"),Jpe=o(function(e,r,n){return function(i){if(typeof e!="function")r[n].call(r,i);else{var a;try{a=e(i)}catch(s){r.reject(s);return}GYe(r,a)}}},"resolver"),GYe=o(function t(e,r){if(e===r||e.proxy===r){e.reject(new TypeError("cannot resolve promise with itself"));return}var n;if(Wi(r)==="object"&&r!==null||typeof r=="function")try{n=r.then}catch(a){e.reject(a);return}if(typeof n=="function"){var i=!1;try{n.call(r,function(a){i||(i=!0,a===r?e.reject(new TypeError("circular thenable chain")):t(e,a))},function(a){i||(i=!0,e.reject(a))})}catch(a){i||e.reject(a)}return}e.fulfill(r)},"resolve");Ju.all=function(t){return new Ju(function(e,r){for(var n=new Array(t.length),i=0,a=o(function(u,h){n[u]=h,i++,i===t.length&&e(n)},"fulfill"),s=0;s<t.length;s++)(function(l){var u=t[l],h=u!=null&&u.then!=null;if(h)u.then(function(d){a(l,d)},function(d){r(d)});else{var f=u;a(l,f)}})(s)})};Ju.resolve=function(t){return new Ju(function(e,r){e(t)})};Ju.reject=function(t){return new Ju(function(e,r){r(t)})};ey=typeof Promise<"u"?Promise:Ju,$P=o(function(e,r,n){var i=JP(e),a=!i,s=this._private=rr({duration:1e3},r,n);if(s.target=e,s.style=s.style||s.css,s.started=!1,s.playing=!1,s.hooked=!1,s.applying=!1,s.progress=0,s.completes=[],s.frames=[],s.complete&&si(s.complete)&&s.completes.push(s.complete),a){var l=e.position();s.startPosition=s.startPosition||{x:l.x,y:l.y},s.startStyle=s.startStyle||e.cy().style().getAnimationStartStyle(e,s.style)}if(i){var u=e.pan();s.startPan={x:u.x,y:u.y},s.startZoom=e.zoom()}this.length=1,this[0]=this},"Animation"),Up=$P.prototype;rr(Up,{instanceString:o(function(){return"animation"},"instanceString"),hook:o(function(){var e=this._private;if(!e.hooked){var r,n=e.target._private.animation;e.queue?r=n.queue:r=n.current,r.push(this),go(e.target)&&e.target.cy().addToAnimationPool(e.target),e.hooked=!0}return this},"hook"),play:o(function(){var e=this._private;return e.progress===1&&(e.progress=0),e.playing=!0,e.started=!1,e.stopped=!1,this.hook(),this},"play"),playing:o(function(){return this._private.playing},"playing"),apply:o(function(){var e=this._private;return e.applying=!0,e.started=!1,e.stopped=!1,this.hook(),this},"apply"),applying:o(function(){return this._private.applying},"applying"),pause:o(function(){var e=this._private;return e.playing=!1,e.started=!1,this},"pause"),stop:o(function(){var e=this._private;return e.playing=!1,e.started=!1,e.stopped=!0,this},"stop"),rewind:o(function(){return this.progress(0)},"rewind"),fastforward:o(function(){return this.progress(1)},"fastforward"),time:o(function(e){var r=this._private;return e===void 0?r.progress*r.duration:this.progress(e/r.duration)},"time"),progress:o(function(e){var r=this._private,n=r.playing;return e===void 0?r.progress:(n&&this.pause(),r.progress=e,r.started=!1,n&&this.play(),this)},"progress"),completed:o(function(){return this._private.progress===1},"completed"),reverse:o(function(){var e=this._private,r=e.playing;r&&this.pause(),e.progress=1-e.progress,e.started=!1;var n=o(function(h,f){var d=e[h];d!=null&&(e[h]=e[f],e[f]=d)},"swap");if(n("zoom","startZoom"),n("pan","startPan"),n("position","startPosition"),e.style)for(var i=0;i<e.style.length;i++){var a=e.style[i],s=a.name,l=e.startStyle[s];e.startStyle[s]=a,e.style[i]=l}return r&&this.play(),this},"reverse"),promise:o(function(e){var r=this._private,n;switch(e){case"frame":n=r.frames;break;default:case"complete":case"completed":n=r.completes}return new ey(function(i,a){n.push(function(){i()})})},"promise")});Up.complete=Up.completed;Up.run=Up.play;Up.running=Up.playing;VYe={animated:o(function(){return o(function(){var r=this,n=r.length!==void 0,i=n?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return!1;var s=i[0];if(s)return s._private.animation.current.length>0},"animatedImpl")},"animated"),clearQueue:o(function(){return o(function(){var r=this,n=r.length!==void 0,i=n?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return this;for(var s=0;s<i.length;s++){var l=i[s];l._private.animation.queue=[]}return this},"clearQueueImpl")},"clearQueue"),delay:o(function(){return o(function(r,n){var i=this._private.cy||this;return i.styleEnabled()?this.animate({delay:r,duration:r,complete:n}):this},"delayImpl")},"delay"),delayAnimation:o(function(){return o(function(r,n){var i=this._private.cy||this;return i.styleEnabled()?this.animation({delay:r,duration:r,complete:n}):this},"delayAnimationImpl")},"delayAnimation"),animation:o(function(){return o(function(r,n){var i=this,a=i.length!==void 0,s=a?i:[i],l=this._private.cy||this,u=!a,h=!u;if(!l.styleEnabled())return this;var f=l.style();r=rr({},r,n);var d=Object.keys(r).length===0;if(d)return new $P(s[0],r);switch(r.duration===void 0&&(r.duration=400),r.duration){case"slow":r.duration=600;break;case"fast":r.duration=200;break}if(h&&(r.style=f.getPropsList(r.style||r.css),r.css=void 0),h&&r.renderedPosition!=null){var p=r.renderedPosition,m=l.pan(),g=l.zoom();r.position=pme(p,g,m)}if(u&&r.panBy!=null){var y=r.panBy,v=l.pan();r.pan={x:v.x+y.x,y:v.y+y.y}}var x=r.center||r.centre;if(u&&x!=null){var b=l.getCenterPan(x.eles,r.zoom);b!=null&&(r.pan=b)}if(u&&r.fit!=null){var w=r.fit,C=l.getFitViewport(w.eles||w.boundingBox,w.padding);C!=null&&(r.pan=C.pan,r.zoom=C.zoom)}if(u&&Ur(r.zoom)){var T=l.getZoomedViewport(r.zoom);T!=null?(T.zoomed&&(r.zoom=T.zoom),T.panned&&(r.pan=T.pan)):r.zoom=null}return new $P(s[0],r)},"animationImpl")},"animation"),animate:o(function(){return o(function(r,n){var i=this,a=i.length!==void 0,s=a?i:[i],l=this._private.cy||this;if(!l.styleEnabled())return this;n&&(r=rr({},r,n));for(var u=0;u<s.length;u++){var h=s[u],f=h.animated()&&(r.queue===void 0||r.queue),d=h.animation(r,f?{queue:!0}:void 0);d.play()}return this},"animateImpl")},"animate"),stop:o(function(){return o(function(r,n){var i=this,a=i.length!==void 0,s=a?i:[i],l=this._private.cy||this;if(!l.styleEnabled())return this;for(var u=0;u<s.length;u++){for(var h=s[u],f=h._private,d=f.animation.current,p=0;p<d.length;p++){var m=d[p],g=m._private;n&&(g.duration=0)}r&&(f.animation.queue=[]),n||(f.animation.current=[])}return l.notify("draw"),this},"stopImpl")},"stop")},UYe=Array.isArray,OS=UYe,HYe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,WYe=/^\w*$/;o(qYe,"isKey");YYe=qYe,XYe="[object AsyncFunction]",jYe="[object Function]",KYe="[object GeneratorFunction]",QYe="[object Proxy]";o(ZYe,"isFunction");JYe=ZYe,eXe=RS["__core-js_shared__"],EP=eXe,e0e=function(){var t=/[^.]+$/.exec(EP&&EP.keys&&EP.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();o(tXe,"isMasked");rXe=tXe,nXe=Function.prototype,iXe=nXe.toString;o(aXe,"toSource");sXe=aXe,oXe=/[\\^$.*+?()[\]{}|]/g,lXe=/^\[object .+?Constructor\]$/,cXe=Function.prototype,uXe=Object.prototype,hXe=cXe.toString,fXe=uXe.hasOwnProperty,dXe=RegExp("^"+hXe.call(fXe).replace(oXe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(pXe,"baseIsNative");mXe=pXe;o(gXe,"getValue$1");yXe=gXe;o(vXe,"getNative");lB=vXe,xXe=lB(Object,"create"),jb=xXe;o(bXe,"hashClear");wXe=bXe;o(TXe,"hashDelete");kXe=TXe,EXe="__lodash_hash_undefined__",SXe=Object.prototype,CXe=SXe.hasOwnProperty;o(AXe,"hashGet");_Xe=AXe,DXe=Object.prototype,LXe=DXe.hasOwnProperty;o(RXe,"hashHas");NXe=RXe,MXe="__lodash_hash_undefined__";o(IXe,"hashSet");OXe=IXe;o(ty,"Hash");ty.prototype.clear=wXe;ty.prototype.delete=kXe;ty.prototype.get=_Xe;ty.prototype.has=NXe;ty.prototype.set=OXe;t0e=ty;o(PXe,"listCacheClear");BXe=PXe;o(FXe,"eq");Lme=FXe;o($Xe,"assocIndexOf");PS=$Xe,zXe=Array.prototype,GXe=zXe.splice;o(VXe,"listCacheDelete");UXe=VXe;o(HXe,"listCacheGet");WXe=HXe;o(qXe,"listCacheHas");YXe=qXe;o(XXe,"listCacheSet");jXe=XXe;o(ry,"ListCache");ry.prototype.clear=BXe;ry.prototype.delete=UXe;ry.prototype.get=WXe;ry.prototype.has=YXe;ry.prototype.set=jXe;KXe=ry,QXe=lB(RS,"Map"),ZXe=QXe;o(JXe,"mapCacheClear");eje=JXe;o(tje,"isKeyable");rje=tje;o(nje,"getMapData");BS=nje;o(ije,"mapCacheDelete");aje=ije;o(sje,"mapCacheGet");oje=sje;o(lje,"mapCacheHas");cje=lje;o(uje,"mapCacheSet");hje=uje;o(ny,"MapCache");ny.prototype.clear=eje;ny.prototype.delete=aje;ny.prototype.get=oje;ny.prototype.has=cje;ny.prototype.set=hje;Rme=ny,fje="Expected a function";o(cB,"memoize");cB.Cache=Rme;dje=cB,pje=500;o(mje,"memoizeCapped");gje=mje,yje=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,vje=/\\(\\)?/g,xje=gje(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(yje,function(r,n,i,a){e.push(i?a.replace(vje,"$1"):n||r)}),e}),Nme=xje;o(bje,"arrayMap");Mme=bje,wje=1/0,r0e=j1?j1.prototype:void 0,n0e=r0e?r0e.toString:void 0;o(Ime,"baseToString");Tje=Ime;o(kje,"toString$1");Ome=kje;o(Eje,"castPath");Pme=Eje,Sje=1/0;o(Cje,"toKey");uB=Cje;o(Aje,"baseGet");_je=Aje;o(Dje,"get");Lje=Dje,Rje=function(){try{var t=lB(Object,"defineProperty");return t({},"",{}),t}catch{}}(),i0e=Rje;o(Nje,"baseAssignValue");Mje=Nje,Ije=Object.prototype,Oje=Ije.hasOwnProperty;o(Pje,"assignValue");Bje=Pje,Fje=9007199254740991,$je=/^(?:0|[1-9]\d*)$/;o(zje,"isIndex");Gje=zje;o(Vje,"baseSet");Uje=Vje;o(Hje,"set");Wje=Hje;o(qje,"copyArray");Yje=qje;o(Xje,"toPath");jje=Xje,Kje={data:o(function(e){var r={field:"data",bindingEvent:"data",allowBinding:!1,allowSetting:!1,allowGetting:!1,settingEvent:"data",settingTriggersEvent:!1,triggerFnName:"trigger",immutableKeys:{},updateStyle:!1,beforeGet:o(function(i){},"beforeGet"),beforeSet:o(function(i,a){},"beforeSet"),onSet:o(function(i){},"onSet"),canSet:o(function(i){return!0},"canSet")};return e=rr({},r,e),o(function(i,a){var s=e,l=this,u=l.length!==void 0,h=u?l:[l],f=u?l[0]:l;if(Zt(i)){var d=i.indexOf(".")!==-1,p=d&&jje(i);if(s.allowGetting&&a===void 0){var m;return f&&(s.beforeGet(f),p&&f._private[s.field][i]===void 0?m=Lje(f._private[s.field],p):m=f._private[s.field][i]),m}else if(s.allowSetting&&a!==void 0){var g=!s.immutableKeys[i];if(g){var y=X0e({},i,a);s.beforeSet(l,y);for(var v=0,x=h.length;v<x;v++){var b=h[v];s.canSet(b)&&(p&&f._private[s.field][i]===void 0?Wje(b._private[s.field],p,a):b._private[s.field][i]=a)}s.updateStyle&&l.updateStyle(),s.onSet(l),s.settingTriggersEvent&&l[s.triggerFnName](s.settingEvent)}}}else if(s.allowSetting&&Ur(i)){var w=i,C,T,E=Object.keys(w);s.beforeSet(l,w);for(var A=0;A<E.length;A++){C=E[A],T=w[C];var S=!s.immutableKeys[C];if(S)for(var _=0;_<h.length;_++){var I=h[_];s.canSet(I)&&(I._private[s.field][C]=T)}}s.updateStyle&&l.updateStyle(),s.onSet(l),s.settingTriggersEvent&&l[s.triggerFnName](s.settingEvent)}else if(s.allowBinding&&si(i)){var D=i;l.on(s.bindingEvent,D)}else if(s.allowGetting&&i===void 0){var k;return f&&(s.beforeGet(f),k=f._private[s.field]),k}return l},"dataImpl")},"data"),removeData:o(function(e){var r={field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!1,immutableKeys:{}};return e=rr({},r,e),o(function(i){var a=e,s=this,l=s.length!==void 0,u=l?s:[s];if(Zt(i)){for(var h=i.split(/\s+/),f=h.length,d=0;d<f;d++){var p=h[d];if(!Af(p)){var m=!a.immutableKeys[p];if(m)for(var g=0,y=u.length;g<y;g++)u[g]._private[a.field][p]=void 0}}a.triggerEvent&&s[a.triggerFnName](a.event)}else if(i===void 0){for(var v=0,x=u.length;v<x;v++)for(var b=u[v]._private[a.field],w=Object.keys(b),C=0;C<w.length;C++){var T=w[C],E=!a.immutableKeys[T];E&&(b[T]=void 0)}a.triggerEvent&&s[a.triggerFnName](a.event)}return s},"removeDataImpl")},"removeData")},Qje={eventAliasesOn:o(function(e){var r=e;r.addListener=r.listen=r.bind=r.on,r.unlisten=r.unbind=r.off=r.removeListener,r.trigger=r.emit,r.pon=r.promiseOn=function(n,i){var a=this,s=Array.prototype.slice.call(arguments,0);return new ey(function(l,u){var h=o(function(m){a.off.apply(a,d),l(m)},"callback"),f=s.concat([h]),d=f.concat([]);a.on.apply(a,f)})}},"eventAliasesOn")},cn={};[VYe,Kje,Qje].forEach(function(t){rr(cn,t)});Zje={animate:cn.animate(),animation:cn.animation(),animated:cn.animated(),clearQueue:cn.clearQueue(),delay:cn.delay(),delayAnimation:cn.delayAnimation(),stop:cn.stop()},hS={classes:o(function(e){var r=this;if(e===void 0){var n=[];return r[0]._private.classes.forEach(function(g){return n.push(g)}),n}else En(e)||(e=(e||"").match(/\S+/g)||[]);for(var i=[],a=new J1(e),s=0;s<r.length;s++){for(var l=r[s],u=l._private,h=u.classes,f=!1,d=0;d<e.length;d++){var p=e[d],m=h.has(p);if(!m){f=!0;break}}f||(f=h.size!==e.length),f&&(u.classes=a,i.push(l))}return i.length>0&&this.spawn(i).updateStyle().emit("class"),r},"classes"),addClass:o(function(e){return this.toggleClass(e,!0)},"addClass"),hasClass:o(function(e){var r=this[0];return r!=null&&r._private.classes.has(e)},"hasClass"),toggleClass:o(function(e,r){En(e)||(e=e.match(/\S+/g)||[]);for(var n=this,i=r===void 0,a=[],s=0,l=n.length;s<l;s++)for(var u=n[s],h=u._private.classes,f=!1,d=0;d<e.length;d++){var p=e[d],m=h.has(p),g=!1;r||i&&!m?(h.add(p),g=!0):(!r||i&&m)&&(h.delete(p),g=!0),!f&&g&&(a.push(u),f=!0)}return a.length>0&&this.spawn(a).updateStyle().emit("class"),n},"toggleClass"),removeClass:o(function(e){return this.toggleClass(e,!1)},"removeClass"),flashClass:o(function(e,r){var n=this;if(r==null)r=250;else if(r===0)return n;return n.addClass(e),setTimeout(function(){n.removeClass(e)},r),n},"flashClass")};hS.className=hS.classNames=hS.classes;Vr={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:Hi,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};Vr.variable="(?:[\\w-.]|(?:\\\\"+Vr.metaChar+"))+";Vr.className="(?:[\\w-]|(?:\\\\"+Vr.metaChar+"))+";Vr.value=Vr.string+"|"+Vr.number;Vr.id=Vr.variable;(function(){var t,e,r;for(t=Vr.comparatorOp.split("|"),r=0;r<t.length;r++)e=t[r],Vr.comparatorOp+="|@"+e;for(t=Vr.comparatorOp.split("|"),r=0;r<t.length;r++)e=t[r],!(e.indexOf("!")>=0)&&e!=="="&&(Vr.comparatorOp+="|\\!"+e)})();mn=o(function(){return{checks:[]}},"newQuery"),$t={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},zP=[{selector:":selected",matches:o(function(e){return e.selected()},"matches")},{selector:":unselected",matches:o(function(e){return!e.selected()},"matches")},{selector:":selectable",matches:o(function(e){return e.selectable()},"matches")},{selector:":unselectable",matches:o(function(e){return!e.selectable()},"matches")},{selector:":locked",matches:o(function(e){return e.locked()},"matches")},{selector:":unlocked",matches:o(function(e){return!e.locked()},"matches")},{selector:":visible",matches:o(function(e){return e.visible()},"matches")},{selector:":hidden",matches:o(function(e){return!e.visible()},"matches")},{selector:":transparent",matches:o(function(e){return e.transparent()},"matches")},{selector:":grabbed",matches:o(function(e){return e.grabbed()},"matches")},{selector:":free",matches:o(function(e){return!e.grabbed()},"matches")},{selector:":removed",matches:o(function(e){return e.removed()},"matches")},{selector:":inside",matches:o(function(e){return!e.removed()},"matches")},{selector:":grabbable",matches:o(function(e){return e.grabbable()},"matches")},{selector:":ungrabbable",matches:o(function(e){return!e.grabbable()},"matches")},{selector:":animated",matches:o(function(e){return e.animated()},"matches")},{selector:":unanimated",matches:o(function(e){return!e.animated()},"matches")},{selector:":parent",matches:o(function(e){return e.isParent()},"matches")},{selector:":childless",matches:o(function(e){return e.isChildless()},"matches")},{selector:":child",matches:o(function(e){return e.isChild()},"matches")},{selector:":orphan",matches:o(function(e){return e.isOrphan()},"matches")},{selector:":nonorphan",matches:o(function(e){return e.isChild()},"matches")},{selector:":compound",matches:o(function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()},"matches")},{selector:":loop",matches:o(function(e){return e.isLoop()},"matches")},{selector:":simple",matches:o(function(e){return e.isSimple()},"matches")},{selector:":active",matches:o(function(e){return e.active()},"matches")},{selector:":inactive",matches:o(function(e){return!e.active()},"matches")},{selector:":backgrounding",matches:o(function(e){return e.backgrounding()},"matches")},{selector:":nonbackgrounding",matches:o(function(e){return!e.backgrounding()},"matches")}].sort(function(t,e){return hWe(t.selector,e.selector)}),Jje=function(){for(var t={},e,r=0;r<zP.length;r++)e=zP[r],t[e.selector]=e.matches;return t}(),eKe=o(function(e,r){return Jje[e](r)},"stateSelectorMatches"),tKe="("+zP.map(function(t){return t.selector}).join("|")+")",B1=o(function(e){return e.replace(new RegExp("\\\\("+Vr.metaChar+")","g"),function(r,n){return n})},"cleanMetaChars"),Tf=o(function(e,r,n){e[e.length-1]=n},"replaceLastQuery"),GP=[{name:"group",query:!0,regex:"("+Vr.group+")",populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.GROUP,value:a==="*"?a:a+"s"})},"populate")},{name:"state",query:!0,regex:tKe,populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.STATE,value:a})},"populate")},{name:"id",query:!0,regex:"\\#("+Vr.id+")",populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.ID,value:B1(a)})},"populate")},{name:"className",query:!0,regex:"\\.("+Vr.className+")",populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.CLASS,value:B1(a)})},"populate")},{name:"dataExists",query:!0,regex:"\\[\\s*("+Vr.variable+")\\s*\\]",populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.DATA_EXIST,field:B1(a)})},"populate")},{name:"dataCompare",query:!0,regex:"\\[\\s*("+Vr.variable+")\\s*("+Vr.comparatorOp+")\\s*("+Vr.value+")\\s*\\]",populate:o(function(e,r,n){var i=_i(n,3),a=i[0],s=i[1],l=i[2],u=new RegExp("^"+Vr.string+"$").exec(l)!=null;u?l=l.substring(1,l.length-1):l=parseFloat(l),r.checks.push({type:$t.DATA_COMPARE,field:B1(a),operator:s,value:l})},"populate")},{name:"dataBool",query:!0,regex:"\\[\\s*("+Vr.boolOp+")\\s*("+Vr.variable+")\\s*\\]",populate:o(function(e,r,n){var i=_i(n,2),a=i[0],s=i[1];r.checks.push({type:$t.DATA_BOOL,field:B1(s),operator:a})},"populate")},{name:"metaCompare",query:!0,regex:"\\[\\[\\s*("+Vr.meta+")\\s*("+Vr.comparatorOp+")\\s*("+Vr.number+")\\s*\\]\\]",populate:o(function(e,r,n){var i=_i(n,3),a=i[0],s=i[1],l=i[2];r.checks.push({type:$t.META_COMPARE,field:B1(a),operator:s,value:parseFloat(l)})},"populate")},{name:"nextQuery",separator:!0,regex:Vr.separator,populate:o(function(e,r){var n=e.currentSubject,i=e.edgeCount,a=e.compoundCount,s=e[e.length-1];n!=null&&(s.subject=n,e.currentSubject=null),s.edgeCount=i,s.compoundCount=a,e.edgeCount=0,e.compoundCount=0;var l=e[e.length++]=mn();return l},"populate")},{name:"directedEdge",separator:!0,regex:Vr.directedEdge,populate:o(function(e,r){if(e.currentSubject==null){var n=mn(),i=r,a=mn();return n.checks.push({type:$t.DIRECTED_EDGE,source:i,target:a}),Tf(e,r,n),e.edgeCount++,a}else{var s=mn(),l=r,u=mn();return s.checks.push({type:$t.NODE_SOURCE,source:l,target:u}),Tf(e,r,s),e.edgeCount++,u}},"populate")},{name:"undirectedEdge",separator:!0,regex:Vr.undirectedEdge,populate:o(function(e,r){if(e.currentSubject==null){var n=mn(),i=r,a=mn();return n.checks.push({type:$t.UNDIRECTED_EDGE,nodes:[i,a]}),Tf(e,r,n),e.edgeCount++,a}else{var s=mn(),l=r,u=mn();return s.checks.push({type:$t.NODE_NEIGHBOR,node:l,neighbor:u}),Tf(e,r,s),u}},"populate")},{name:"child",separator:!0,regex:Vr.child,populate:o(function(e,r){if(e.currentSubject==null){var n=mn(),i=mn(),a=e[e.length-1];return n.checks.push({type:$t.CHILD,parent:a,child:i}),Tf(e,r,n),e.compoundCount++,i}else if(e.currentSubject===r){var s=mn(),l=e[e.length-1],u=mn(),h=mn(),f=mn(),d=mn();return s.checks.push({type:$t.COMPOUND_SPLIT,left:l,right:u,subject:h}),h.checks=r.checks,r.checks=[{type:$t.TRUE}],d.checks.push({type:$t.TRUE}),u.checks.push({type:$t.PARENT,parent:d,child:f}),Tf(e,l,s),e.currentSubject=h,e.compoundCount++,f}else{var p=mn(),m=mn(),g=[{type:$t.PARENT,parent:p,child:m}];return p.checks=r.checks,r.checks=g,e.compoundCount++,m}},"populate")},{name:"descendant",separator:!0,regex:Vr.descendant,populate:o(function(e,r){if(e.currentSubject==null){var n=mn(),i=mn(),a=e[e.length-1];return n.checks.push({type:$t.DESCENDANT,ancestor:a,descendant:i}),Tf(e,r,n),e.compoundCount++,i}else if(e.currentSubject===r){var s=mn(),l=e[e.length-1],u=mn(),h=mn(),f=mn(),d=mn();return s.checks.push({type:$t.COMPOUND_SPLIT,left:l,right:u,subject:h}),h.checks=r.checks,r.checks=[{type:$t.TRUE}],d.checks.push({type:$t.TRUE}),u.checks.push({type:$t.ANCESTOR,ancestor:d,descendant:f}),Tf(e,l,s),e.currentSubject=h,e.compoundCount++,f}else{var p=mn(),m=mn(),g=[{type:$t.ANCESTOR,ancestor:p,descendant:m}];return p.checks=r.checks,r.checks=g,e.compoundCount++,m}},"populate")},{name:"subject",modifier:!0,regex:Vr.subject,populate:o(function(e,r){if(e.currentSubject!=null&&e.currentSubject!==r)return un("Redefinition of subject in selector `"+e.toString()+"`"),!1;e.currentSubject=r;var n=e[e.length-1],i=n.checks[0],a=i==null?null:i.type;a===$t.DIRECTED_EDGE?i.type=$t.NODE_TARGET:a===$t.UNDIRECTED_EDGE&&(i.type=$t.NODE_NEIGHBOR,i.node=i.nodes[1],i.neighbor=i.nodes[0],i.nodes=null)},"populate")}];GP.forEach(function(t){return t.regexObj=new RegExp("^"+t.regex)});rKe=o(function(e){for(var r,n,i,a=0;a<GP.length;a++){var s=GP[a],l=s.name,u=e.match(s.regexObj);if(u!=null){n=u,r=s,i=l;var h=u[0];e=e.substring(h.length);break}}return{expr:r,match:n,name:i,remaining:e}},"consumeExpr"),nKe=o(function(e){var r=e.match(/^\s+/);if(r){var n=r[0];e=e.substring(n.length)}return e},"consumeWhitespace"),iKe=o(function(e){var r=this,n=r.inputText=e,i=r[0]=mn();for(r.length=1,n=nKe(n);;){var a=rKe(n);if(a.expr==null)return un("The selector `"+e+"`is invalid"),!1;var s=a.match.slice(1),l=a.expr.populate(r,i,s);if(l===!1)return!1;if(l!=null&&(i=l),n=a.remaining,n.match(/^\s*$/))break}var u=r[r.length-1];r.currentSubject!=null&&(u.subject=r.currentSubject),u.edgeCount=r.edgeCount,u.compoundCount=r.compoundCount;for(var h=0;h<r.length;h++){var f=r[h];if(f.compoundCount>0&&f.edgeCount>0)return un("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(f.edgeCount>1)return un("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;f.edgeCount===1&&un("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},"parse"),aKe=o(function(){if(this.toStringCache!=null)return this.toStringCache;for(var e=o(function(f){return f??""},"clean"),r=o(function(f){return Zt(f)?'"'+f+'"':e(f)},"cleanVal"),n=o(function(f){return" "+f+" "},"space"),i=o(function(f,d){var p=f.type,m=f.value;switch(p){case $t.GROUP:{var g=e(m);return g.substring(0,g.length-1)}case $t.DATA_COMPARE:{var y=f.field,v=f.operator;return"["+y+n(e(v))+r(m)+"]"}case $t.DATA_BOOL:{var x=f.operator,b=f.field;return"["+e(x)+b+"]"}case $t.DATA_EXIST:{var w=f.field;return"["+w+"]"}case $t.META_COMPARE:{var C=f.operator,T=f.field;return"[["+T+n(e(C))+r(m)+"]]"}case $t.STATE:return m;case $t.ID:return"#"+m;case $t.CLASS:return"."+m;case $t.PARENT:case $t.CHILD:return a(f.parent,d)+n(">")+a(f.child,d);case $t.ANCESTOR:case $t.DESCENDANT:return a(f.ancestor,d)+" "+a(f.descendant,d);case $t.COMPOUND_SPLIT:{var E=a(f.left,d),A=a(f.subject,d),S=a(f.right,d);return E+(E.length>0?" ":"")+A+S}case $t.TRUE:return""}},"checkToString"),a=o(function(f,d){return f.checks.reduce(function(p,m,g){return p+(d===f&&g===0?"$":"")+i(m,d)},"")},"queryToString"),s="",l=0;l<this.length;l++){var u=this[l];s+=a(u,u.subject),this.length>1&&l<this.length-1&&(s+=", ")}return this.toStringCache=s,s},"toString"),sKe={parse:iKe,toString:aKe},Bme=o(function(e,r,n){var i,a=Zt(e),s=Ct(e),l=Zt(n),u,h,f=!1,d=!1,p=!1;switch(r.indexOf("!")>=0&&(r=r.replace("!",""),d=!0),r.indexOf("@")>=0&&(r=r.replace("@",""),f=!0),(a||l||f)&&(u=!a&&!s?"":""+e,h=""+n),f&&(e=u=u.toLowerCase(),n=h=h.toLowerCase()),r){case"*=":i=u.indexOf(h)>=0;break;case"$=":i=u.indexOf(h,u.length-h.length)>=0;break;case"^=":i=u.indexOf(h)===0;break;case"=":i=e===n;break;case">":p=!0,i=e>n;break;case">=":p=!0,i=e>=n;break;case"<":p=!0,i=e<n;break;case"<=":p=!0,i=e<=n;break;default:i=!1;break}return d&&(e!=null||!p)&&(i=!i),i},"valCmp"),oKe=o(function(e,r){switch(r){case"?":return!!e;case"!":return!e;case"^":return e===void 0}},"boolCmp"),lKe=o(function(e){return e!==void 0},"existCmp"),hB=o(function(e,r){return e.data(r)},"data"),cKe=o(function(e,r){return e[r]()},"meta"),fi=[],zn=o(function(e,r){return e.checks.every(function(n){return fi[n.type](n,r)})},"matches");fi[$t.GROUP]=function(t,e){var r=t.value;return r==="*"||r===e.group()};fi[$t.STATE]=function(t,e){var r=t.value;return eKe(r,e)};fi[$t.ID]=function(t,e){var r=t.value;return e.id()===r};fi[$t.CLASS]=function(t,e){var r=t.value;return e.hasClass(r)};fi[$t.META_COMPARE]=function(t,e){var r=t.field,n=t.operator,i=t.value;return Bme(cKe(e,r),n,i)};fi[$t.DATA_COMPARE]=function(t,e){var r=t.field,n=t.operator,i=t.value;return Bme(hB(e,r),n,i)};fi[$t.DATA_BOOL]=function(t,e){var r=t.field,n=t.operator;return oKe(hB(e,r),n)};fi[$t.DATA_EXIST]=function(t,e){var r=t.field;return t.operator,lKe(hB(e,r))};fi[$t.UNDIRECTED_EDGE]=function(t,e){var r=t.nodes[0],n=t.nodes[1],i=e.source(),a=e.target();return zn(r,i)&&zn(n,a)||zn(n,i)&&zn(r,a)};fi[$t.NODE_NEIGHBOR]=function(t,e){return zn(t.node,e)&&e.neighborhood().some(function(r){return r.isNode()&&zn(t.neighbor,r)})};fi[$t.DIRECTED_EDGE]=function(t,e){return zn(t.source,e.source())&&zn(t.target,e.target())};fi[$t.NODE_SOURCE]=function(t,e){return zn(t.source,e)&&e.outgoers().some(function(r){return r.isNode()&&zn(t.target,r)})};fi[$t.NODE_TARGET]=function(t,e){return zn(t.target,e)&&e.incomers().some(function(r){return r.isNode()&&zn(t.source,r)})};fi[$t.CHILD]=function(t,e){return zn(t.child,e)&&zn(t.parent,e.parent())};fi[$t.PARENT]=function(t,e){return zn(t.parent,e)&&e.children().some(function(r){return zn(t.child,r)})};fi[$t.DESCENDANT]=function(t,e){return zn(t.descendant,e)&&e.ancestors().some(function(r){return zn(t.ancestor,r)})};fi[$t.ANCESTOR]=function(t,e){return zn(t.ancestor,e)&&e.descendants().some(function(r){return zn(t.descendant,r)})};fi[$t.COMPOUND_SPLIT]=function(t,e){return zn(t.subject,e)&&zn(t.left,e)&&zn(t.right,e)};fi[$t.TRUE]=function(){return!0};fi[$t.COLLECTION]=function(t,e){var r=t.value;return r.has(e)};fi[$t.FILTER]=function(t,e){var r=t.value;return r(e)};uKe=o(function(e){var r=this;if(r.length===1&&r[0].checks.length===1&&r[0].checks[0].type===$t.ID)return e.getElementById(r[0].checks[0].value).collection();var n=o(function(a){for(var s=0;s<r.length;s++){var l=r[s];if(zn(l,a))return!0}return!1},"selectorFunction");return r.text()==null&&(n=o(function(){return!0},"selectorFunction")),e.filter(n)},"filter"),hKe=o(function(e){for(var r=this,n=0;n<r.length;n++){var i=r[n];if(zn(i,e))return!0}return!1},"matches"),fKe={matches:hKe,filter:uKe},Lf=o(function(e){this.inputText=e,this.currentSubject=null,this.compoundCount=0,this.edgeCount=0,this.length=0,e==null||Zt(e)&&e.match(/^\s*$/)||(go(e)?this.addQuery({checks:[{type:$t.COLLECTION,value:e.collection()}]}):si(e)?this.addQuery({checks:[{type:$t.FILTER,value:e}]}):Zt(e)?this.parse(e)||(this.invalid=!0):ai("A selector must be created from a string; found "))},"Selector"),Rf=Lf.prototype;[sKe,fKe].forEach(function(t){return rr(Rf,t)});Rf.text=function(){return this.inputText};Rf.size=function(){return this.length};Rf.eq=function(t){return this[t]};Rf.sameText=function(t){return!this.invalid&&!t.invalid&&this.text()===t.text()};Rf.addQuery=function(t){this[this.length++]=t};Rf.selector=Rf.toString;Sf={allAre:o(function(e){var r=new Lf(e);return this.every(function(n){return r.matches(n)})},"allAre"),is:o(function(e){var r=new Lf(e);return this.some(function(n){return r.matches(n)})},"is"),some:o(function(e,r){for(var n=0;n<this.length;n++){var i=r?e.apply(r,[this[n],n,this]):e(this[n],n,this);if(i)return!0}return!1},"some"),every:o(function(e,r){for(var n=0;n<this.length;n++){var i=r?e.apply(r,[this[n],n,this]):e(this[n],n,this);if(!i)return!1}return!0},"every"),same:o(function(e){if(this===e)return!0;e=this.cy().collection(e);var r=this.length,n=e.length;return r!==n?!1:r===1?this[0]===e[0]:this.every(function(i){return e.hasElementWithId(i.id())})},"same"),anySame:o(function(e){return e=this.cy().collection(e),this.some(function(r){return e.hasElementWithId(r.id())})},"anySame"),allAreNeighbors:o(function(e){e=this.cy().collection(e);var r=this.neighborhood();return e.every(function(n){return r.hasElementWithId(n.id())})},"allAreNeighbors"),contains:o(function(e){e=this.cy().collection(e);var r=this;return e.every(function(n){return r.hasElementWithId(n.id())})},"contains")};Sf.allAreNeighbours=Sf.allAreNeighbors;Sf.has=Sf.contains;Sf.equal=Sf.equals=Sf.same;tl=o(function(e,r){return o(function(i,a,s,l){var u=i,h=this,f;if(u==null?f="":go(u)&&u.length===1&&(f=u.id()),h.length===1&&f){var d=h[0]._private,p=d.traversalCache=d.traversalCache||{},m=p[r]=p[r]||[],g=_f(f),y=m[g];return y||(m[g]=e.call(h,i,a,s,l))}else return e.call(h,i,a,s,l)},"traversalCache")},"cache"),Z1={parent:o(function(e){var r=[];if(this.length===1){var n=this[0]._private.parent;if(n)return n}for(var i=0;i<this.length;i++){var a=this[i],s=a._private.parent;s&&r.push(s)}return this.spawn(r,!0).filter(e)},"parent"),parents:o(function(e){for(var r=[],n=this.parent();n.nonempty();){for(var i=0;i<n.length;i++){var a=n[i];r.push(a)}n=n.parent()}return this.spawn(r,!0).filter(e)},"parents"),commonAncestors:o(function(e){for(var r,n=0;n<this.length;n++){var i=this[n],a=i.parents();r=r||a,r=r.intersect(a)}return r.filter(e)},"commonAncestors"),orphans:o(function(e){return this.stdFilter(function(r){return r.isOrphan()}).filter(e)},"orphans"),nonorphans:o(function(e){return this.stdFilter(function(r){return r.isChild()}).filter(e)},"nonorphans"),children:tl(function(t){for(var e=[],r=0;r<this.length;r++)for(var n=this[r],i=n._private.children,a=0;a<i.length;a++)e.push(i[a]);return this.spawn(e,!0).filter(t)},"children"),siblings:o(function(e){return this.parent().children().not(this).filter(e)},"siblings"),isParent:o(function(){var e=this[0];if(e)return e.isNode()&&e._private.children.length!==0},"isParent"),isChildless:o(function(){var e=this[0];if(e)return e.isNode()&&e._private.children.length===0},"isChildless"),isChild:o(function(){var e=this[0];if(e)return e.isNode()&&e._private.parent!=null},"isChild"),isOrphan:o(function(){var e=this[0];if(e)return e.isNode()&&e._private.parent==null},"isOrphan"),descendants:o(function(e){var r=[];function n(i){for(var a=0;a<i.length;a++){var s=i[a];r.push(s),s.children().nonempty()&&n(s.children())}}return o(n,"add"),n(this.children()),this.spawn(r,!0).filter(e)},"descendants")};o(fB,"forEachCompound");o(Fme,"addChildren");Z1.forEachDown=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return fB(this,t,e,Fme)};o($me,"addParent");Z1.forEachUp=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return fB(this,t,e,$me)};o(dKe,"addParentAndChildren");Z1.forEachUpAndDown=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return fB(this,t,e,dKe)};Z1.ancestors=Z1.parents;Kb=zme={data:cn.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:cn.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:cn.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:cn.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:cn.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:cn.removeData({field:"rscratch",triggerEvent:!1}),id:o(function(){var e=this[0];if(e)return e._private.data.id},"id")};Kb.attr=Kb.data;Kb.removeAttr=Kb.removeData;pKe=zme,FS={};o(SP,"defineDegreeFunction");rr(FS,{degree:SP(function(t,e){return e.source().same(e.target())?2:1}),indegree:SP(function(t,e){return e.target().same(t)?1:0}),outdegree:SP(function(t,e){return e.source().same(t)?1:0})});o(F1,"defineDegreeBoundsFunction");rr(FS,{minDegree:F1("degree",function(t,e){return t<e}),maxDegree:F1("degree",function(t,e){return t>e}),minIndegree:F1("indegree",function(t,e){return t<e}),maxIndegree:F1("indegree",function(t,e){return t>e}),minOutdegree:F1("outdegree",function(t,e){return t<e}),maxOutdegree:F1("outdegree",function(t,e){return t>e})});rr(FS,{totalDegree:o(function(e){for(var r=0,n=this.nodes(),i=0;i<n.length;i++)r+=n[i].degree(e);return r},"totalDegree")});Vme=o(function(e,r,n){for(var i=0;i<e.length;i++){var a=e[i];if(!a.locked()){var s=a._private.position,l={x:r.x!=null?r.x-s.x:0,y:r.y!=null?r.y-s.y:0};a.isParent()&&!(l.x===0&&l.y===0)&&a.children().shift(l,n),a.dirtyBoundingBoxCache()}}},"beforePositionSet"),a0e={field:"position",bindingEvent:"position",allowBinding:!0,allowSetting:!0,settingEvent:"position",settingTriggersEvent:!0,triggerFnName:"emitAndNotify",allowGetting:!0,validKeys:["x","y"],beforeGet:o(function(e){e.updateCompoundBounds()},"beforeGet"),beforeSet:o(function(e,r){Vme(e,r,!1)},"beforeSet"),onSet:o(function(e){e.dirtyCompoundBoundsCache()},"onSet"),canSet:o(function(e){return!e.locked()},"canSet")};Vl=Gme={position:cn.data(a0e),silentPosition:cn.data(rr({},a0e,{allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!1,beforeSet:o(function(e,r){Vme(e,r,!0)},"beforeSet"),onSet:o(function(e){e.dirtyCompoundBoundsCache()},"onSet")})),positions:o(function(e,r){if(Ur(e))r?this.silentPosition(e):this.position(e);else if(si(e)){var n=e,i=this.cy();i.startBatch();for(var a=0;a<this.length;a++){var s=this[a],l=void 0;(l=n(s,a))&&(r?s.silentPosition(l):s.position(l))}i.endBatch()}return this},"positions"),silentPositions:o(function(e){return this.positions(e,!0)},"silentPositions"),shift:o(function(e,r,n){var i;if(Ur(e)?(i={x:Ct(e.x)?e.x:0,y:Ct(e.y)?e.y:0},n=r):Zt(e)&&Ct(r)&&(i={x:0,y:0},i[e]=r),i!=null){var a=this.cy();a.startBatch();for(var s=0;s<this.length;s++){var l=this[s];if(!(a.hasCompoundNodes()&&l.isChild()&&l.ancestors().anySame(this))){var u=l.position(),h={x:u.x+i.x,y:u.y+i.y};n?l.silentPosition(h):l.position(h)}}a.endBatch()}return this},"shift"),silentShift:o(function(e,r){return Ur(e)?this.shift(e,!0):Zt(e)&&Ct(r)&&this.shift(e,r,!0),this},"silentShift"),renderedPosition:o(function(e,r){var n=this[0],i=this.cy(),a=i.zoom(),s=i.pan(),l=Ur(e)?e:void 0,u=l!==void 0||r!==void 0&&Zt(e);if(n&&n.isNode())if(u)for(var h=0;h<this.length;h++){var f=this[h];r!==void 0?f.position(e,(r-s[e])/a):l!==void 0&&f.position(pme(l,a,s))}else{var d=n.position();return l=MS(d,a,s),e===void 0?l:l[e]}else if(!u)return;return this},"renderedPosition"),relativePosition:o(function(e,r){var n=this[0],i=this.cy(),a=Ur(e)?e:void 0,s=a!==void 0||r!==void 0&&Zt(e),l=i.hasCompoundNodes();if(n&&n.isNode())if(s)for(var u=0;u<this.length;u++){var h=this[u],f=l?h.parent():null,d=f&&f.length>0,p=d;d&&(f=f[0]);var m=p?f.position():{x:0,y:0};r!==void 0?h.position(e,r+m[e]):a!==void 0&&h.position({x:a.x+m.x,y:a.y+m.y})}else{var g=n.position(),y=l?n.parent():null,v=y&&y.length>0,x=v;v&&(y=y[0]);var b=x?y.position():{x:0,y:0};return a={x:g.x-b.x,y:g.y-b.y},e===void 0?a:a[e]}else if(!s)return;return this},"relativePosition")};Vl.modelPosition=Vl.point=Vl.position;Vl.modelPositions=Vl.points=Vl.positions;Vl.renderedPoint=Vl.renderedPosition;Vl.relativePoint=Vl.relativePosition;mKe=Gme;X1=Of={};Of.renderedBoundingBox=function(t){var e=this.boundingBox(t),r=this.cy(),n=r.zoom(),i=r.pan(),a=e.x1*n+i.x,s=e.x2*n+i.x,l=e.y1*n+i.y,u=e.y2*n+i.y;return{x1:a,x2:s,y1:l,y2:u,w:s-a,h:u-l}};Of.dirtyCompoundBoundsCache=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();return!e.styleEnabled()||!e.hasCompoundNodes()?this:(this.forEachUp(function(r){if(r.isParent()){var n=r._private;n.compoundBoundsClean=!1,n.bbCache=null,t||r.emitAndNotify("bounds")}}),this)};Of.updateCompoundBounds=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();if(!e.styleEnabled()||!e.hasCompoundNodes())return this;if(!t&&e.batching())return this;function r(s){if(!s.isParent())return;var l=s._private,u=s.children(),h=s.pstyle("compound-sizing-wrt-labels").value==="include",f={width:{val:s.pstyle("min-width").pfValue,left:s.pstyle("min-width-bias-left"),right:s.pstyle("min-width-bias-right")},height:{val:s.pstyle("min-height").pfValue,top:s.pstyle("min-height-bias-top"),bottom:s.pstyle("min-height-bias-bottom")}},d=u.boundingBox({includeLabels:h,includeOverlays:!1,useCache:!1}),p=l.position;(d.w===0||d.h===0)&&(d={w:s.pstyle("width").pfValue,h:s.pstyle("height").pfValue},d.x1=p.x-d.w/2,d.x2=p.x+d.w/2,d.y1=p.y-d.h/2,d.y2=p.y+d.h/2);function m(_,I,D){var k=0,L=0,R=I+D;return _>0&&R>0&&(k=I/R*_,L=D/R*_),{biasDiff:k,biasComplementDiff:L}}o(m,"computeBiasValues");function g(_,I,D,k){if(D.units==="%")switch(k){case"width":return _>0?D.pfValue*_:0;case"height":return I>0?D.pfValue*I:0;case"average":return _>0&&I>0?D.pfValue*(_+I)/2:0;case"min":return _>0&&I>0?_>I?D.pfValue*I:D.pfValue*_:0;case"max":return _>0&&I>0?_>I?D.pfValue*_:D.pfValue*I:0;default:return 0}else return D.units==="px"?D.pfValue:0}o(g,"computePaddingValues");var y=f.width.left.value;f.width.left.units==="px"&&f.width.val>0&&(y=y*100/f.width.val);var v=f.width.right.value;f.width.right.units==="px"&&f.width.val>0&&(v=v*100/f.width.val);var x=f.height.top.value;f.height.top.units==="px"&&f.height.val>0&&(x=x*100/f.height.val);var b=f.height.bottom.value;f.height.bottom.units==="px"&&f.height.val>0&&(b=b*100/f.height.val);var w=m(f.width.val-d.w,y,v),C=w.biasDiff,T=w.biasComplementDiff,E=m(f.height.val-d.h,x,b),A=E.biasDiff,S=E.biasComplementDiff;l.autoPadding=g(d.w,d.h,s.pstyle("padding"),s.pstyle("padding-relative-to").value),l.autoWidth=Math.max(d.w,f.width.val),p.x=(-C+d.x1+d.x2+T)/2,l.autoHeight=Math.max(d.h,f.height.val),p.y=(-A+d.y1+d.y2+S)/2}o(r,"update");for(var n=0;n<this.length;n++){var i=this[n],a=i._private;(!a.compoundBoundsClean||t)&&(r(i),e.batching()||(a.compoundBoundsClean=!0))}return this};el=o(function(e){return e===1/0||e===-1/0?0:e},"noninf"),zl=o(function(e,r,n,i,a){i-r===0||a-n===0||r==null||n==null||i==null||a==null||(e.x1=r<e.x1?r:e.x1,e.x2=i>e.x2?i:e.x2,e.y1=n<e.y1?n:e.y1,e.y2=a>e.y2?a:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},"updateBounds"),Pp=o(function(e,r){return r==null?e:zl(e,r.x1,r.y1,r.x2,r.y2)},"updateBoundsFromBox"),Db=o(function(e,r,n){return Gl(e,r,n)},"prefixedProperty"),tS=o(function(e,r,n){if(!r.cy().headless()){var i=r._private,a=i.rstyle,s=a.arrowWidth/2,l=r.pstyle(n+"-arrow-shape").value,u,h;if(l!=="none"){n==="source"?(u=a.srcX,h=a.srcY):n==="target"?(u=a.tgtX,h=a.tgtY):(u=a.midX,h=a.midY);var f=i.arrowBounds=i.arrowBounds||{},d=f[n]=f[n]||{};d.x1=u-s,d.y1=h-s,d.x2=u+s,d.y2=h+s,d.w=d.x2-d.x1,d.h=d.y2-d.y1,cS(d,1),zl(e,d.x1,d.y1,d.x2,d.y2)}}},"updateBoundsFromArrow"),CP=o(function(e,r,n){if(!r.cy().headless()){var i;n?i=n+"-":i="";var a=r._private,s=a.rstyle,l=r.pstyle(i+"label").strValue;if(l){var u=r.pstyle("text-halign"),h=r.pstyle("text-valign"),f=Db(s,"labelWidth",n),d=Db(s,"labelHeight",n),p=Db(s,"labelX",n),m=Db(s,"labelY",n),g=r.pstyle(i+"text-margin-x").pfValue,y=r.pstyle(i+"text-margin-y").pfValue,v=r.isEdge(),x=r.pstyle(i+"text-rotation"),b=r.pstyle("text-outline-width").pfValue,w=r.pstyle("text-border-width").pfValue,C=w/2,T=r.pstyle("text-background-padding").pfValue,E=2,A=d,S=f,_=S/2,I=A/2,D,k,L,R;if(v)D=p-_,k=p+_,L=m-I,R=m+I;else{switch(u.value){case"left":D=p-S,k=p;break;case"center":D=p-_,k=p+_;break;case"right":D=p,k=p+S;break}switch(h.value){case"top":L=m-A,R=m;break;case"center":L=m-I,R=m+I;break;case"bottom":L=m,R=m+A;break}}var O=g-Math.max(b,C)-T-E,M=g+Math.max(b,C)+T+E,B=y-Math.max(b,C)-T-E,F=y+Math.max(b,C)+T+E;D+=O,k+=M,L+=B,R+=F;var P=n||"main",z=a.labelBounds,$=z[P]=z[P]||{};$.x1=D,$.y1=L,$.x2=k,$.y2=R,$.w=k-D,$.h=R-L,$.leftPad=O,$.rightPad=M,$.topPad=B,$.botPad=F;var H=v&&x.strValue==="autorotate",Q=x.pfValue!=null&&x.pfValue!==0;if(H||Q){var j=H?Db(a.rstyle,"labelAngle",n):x.pfValue,ie=Math.cos(j),ne=Math.sin(j),le=(D+k)/2,he=(L+R)/2;if(!v){switch(u.value){case"left":le=k;break;case"right":le=D;break}switch(h.value){case"top":he=R;break;case"bottom":he=L;break}}var K=o(function(ce,ae){return ce=ce-le,ae=ae-he,{x:ce*ie-ae*ne+le,y:ce*ne+ae*ie+he}},"rotate"),X=K(D,L),te=K(D,R),J=K(k,L),se=K(k,R);D=Math.min(X.x,te.x,J.x,se.x),k=Math.max(X.x,te.x,J.x,se.x),L=Math.min(X.y,te.y,J.y,se.y),R=Math.max(X.y,te.y,J.y,se.y)}var ue=P+"Rot",Z=z[ue]=z[ue]||{};Z.x1=D,Z.y1=L,Z.x2=k,Z.y2=R,Z.w=k-D,Z.h=R-L,zl(e,D,L,k,R),zl(a.labelBounds.all,D,L,k,R)}return e}},"updateBoundsFromLabel"),gKe=o(function(e,r){if(!r.cy().headless()){var n=r.pstyle("outline-opacity").value,i=r.pstyle("outline-width").value;if(n>0&&i>0){var a=r.pstyle("outline-offset").value,s=r.pstyle("shape").value,l=i+a,u=(e.w+l*2)/e.w,h=(e.h+l*2)/e.h,f=0,d=0;["diamond","pentagon","round-triangle"].includes(s)?(u=(e.w+l*2.4)/e.w,d=-l/3.6):["concave-hexagon","rhomboid","right-rhomboid"].includes(s)?u=(e.w+l*2.4)/e.w:s==="star"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.6)/e.h,d=-l/3.8):s==="triangle"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.4)/e.h,d=-l/1.4):s==="vee"&&(u=(e.w+l*4.4)/e.w,h=(e.h+l*3.8)/e.h,d=-l*.5);var p=e.h*h-e.h,m=e.w*u-e.w;if(uS(e,[Math.ceil(p/2),Math.ceil(m/2)]),f!=0||d!==0){var g=Bqe(e,f,d);gme(e,g)}}}},"updateBoundsFromOutline"),yKe=o(function(e,r){var n=e._private.cy,i=n.styleEnabled(),a=n.headless(),s=Hs(),l=e._private,u=e.isNode(),h=e.isEdge(),f,d,p,m,g,y,v=l.rstyle,x=u&&i?e.pstyle("bounds-expansion").pfValue:[0],b=o(function(Se){return Se.pstyle("display").value!=="none"},"isDisplayed"),w=!i||b(e)&&(!h||b(e.source())&&b(e.target()));if(w){var C=0,T=0;i&&r.includeOverlays&&(C=e.pstyle("overlay-opacity").value,C!==0&&(T=e.pstyle("overlay-padding").value));var E=0,A=0;i&&r.includeUnderlays&&(E=e.pstyle("underlay-opacity").value,E!==0&&(A=e.pstyle("underlay-padding").value));var S=Math.max(T,A),_=0,I=0;if(i&&(_=e.pstyle("width").pfValue,I=_/2),u&&r.includeNodes){var D=e.position();g=D.x,y=D.y;var k=e.outerWidth(),L=k/2,R=e.outerHeight(),O=R/2;f=g-L,d=g+L,p=y-O,m=y+O,zl(s,f,p,d,m),i&&r.includeOutlines&&gKe(s,e)}else if(h&&r.includeEdges)if(i&&!a){var M=e.pstyle("curve-style").strValue;if(f=Math.min(v.srcX,v.midX,v.tgtX),d=Math.max(v.srcX,v.midX,v.tgtX),p=Math.min(v.srcY,v.midY,v.tgtY),m=Math.max(v.srcY,v.midY,v.tgtY),f-=I,d+=I,p-=I,m+=I,zl(s,f,p,d,m),M==="haystack"){var B=v.haystackPts;if(B&&B.length===2){if(f=B[0].x,p=B[0].y,d=B[1].x,m=B[1].y,f>d){var F=f;f=d,d=F}if(p>m){var P=p;p=m,m=P}zl(s,f-I,p-I,d+I,m+I)}}else if(M==="bezier"||M==="unbundled-bezier"||M.endsWith("segments")||M.endsWith("taxi")){var z;switch(M){case"bezier":case"unbundled-bezier":z=v.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":z=v.linePts;break}if(z!=null)for(var $=0;$<z.length;$++){var H=z[$];f=H.x-I,d=H.x+I,p=H.y-I,m=H.y+I,zl(s,f,p,d,m)}}}else{var Q=e.source(),j=Q.position(),ie=e.target(),ne=ie.position();if(f=j.x,d=ne.x,p=j.y,m=ne.y,f>d){var le=f;f=d,d=le}if(p>m){var he=p;p=m,m=he}f-=I,d+=I,p-=I,m+=I,zl(s,f,p,d,m)}if(i&&r.includeEdges&&h&&(tS(s,e,"mid-source"),tS(s,e,"mid-target"),tS(s,e,"source"),tS(s,e,"target")),i){var K=e.pstyle("ghost").value==="yes";if(K){var X=e.pstyle("ghost-offset-x").pfValue,te=e.pstyle("ghost-offset-y").pfValue;zl(s,s.x1+X,s.y1+te,s.x2+X,s.y2+te)}}var J=l.bodyBounds=l.bodyBounds||{};Fpe(J,s),uS(J,x),cS(J,1),i&&(f=s.x1,d=s.x2,p=s.y1,m=s.y2,zl(s,f-S,p-S,d+S,m+S));var se=l.overlayBounds=l.overlayBounds||{};Fpe(se,s),uS(se,x),cS(se,1);var ue=l.labelBounds=l.labelBounds||{};ue.all!=null?Pqe(ue.all):ue.all=Hs(),i&&r.includeLabels&&(r.includeMainLabels&&CP(s,e,null),h&&(r.includeSourceLabels&&CP(s,e,"source"),r.includeTargetLabels&&CP(s,e,"target")))}return s.x1=el(s.x1),s.y1=el(s.y1),s.x2=el(s.x2),s.y2=el(s.y2),s.w=el(s.x2-s.x1),s.h=el(s.y2-s.y1),s.w>0&&s.h>0&&w&&(uS(s,x),cS(s,1)),s},"boundingBoxImpl"),Ume=o(function(e){var r=0,n=o(function(s){return(s?1:0)<<r++},"tf"),i=0;return i+=n(e.incudeNodes),i+=n(e.includeEdges),i+=n(e.includeLabels),i+=n(e.includeMainLabels),i+=n(e.includeSourceLabels),i+=n(e.includeTargetLabels),i+=n(e.includeOverlays),i+=n(e.includeOutlines),i},"getKey"),Hme=o(function(e){if(e.isEdge()){var r=e.source().position(),n=e.target().position(),i=o(function(s){return Math.round(s)},"r");return nqe([i(r.x),i(r.y),i(n.x),i(n.y)])}else return 0},"getBoundingBoxPosKey"),s0e=o(function(e,r){var n=e._private,i,a=e.isEdge(),s=r==null?o0e:Ume(r),l=s===o0e,u=Hme(e),h=n.bbCachePosKey===u,f=r.useCache&&h,d=o(function(y){return y._private.bbCache==null||y._private.styleDirty},"isDirty"),p=!f||d(e)||a&&(d(e.source())||d(e.target()));if(p?(h||e.recalculateRenderedStyle(f),i=yKe(e,Qb),n.bbCache=i,n.bbCachePosKey=u):i=n.bbCache,!l){var m=e.isNode();i=Hs(),(r.includeNodes&&m||r.includeEdges&&!m)&&(r.includeOverlays?Pp(i,n.overlayBounds):Pp(i,n.bodyBounds)),r.includeLabels&&(r.includeMainLabels&&(!a||r.includeSourceLabels&&r.includeTargetLabels)?Pp(i,n.labelBounds.all):(r.includeMainLabels&&Pp(i,n.labelBounds.mainRot),r.includeSourceLabels&&Pp(i,n.labelBounds.sourceRot),r.includeTargetLabels&&Pp(i,n.labelBounds.targetRot))),i.w=i.x2-i.x1,i.h=i.y2-i.y1}return i},"cachedBoundingBoxImpl"),Qb={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeMainLabels:!0,includeSourceLabels:!0,includeTargetLabels:!0,includeOverlays:!0,includeUnderlays:!0,includeOutlines:!0,useCache:!0},o0e=Ume(Qb),l0e=la(Qb);Of.boundingBox=function(t){var e;if(this.length===1&&this[0]._private.bbCache!=null&&!this[0]._private.styleDirty&&(t===void 0||t.useCache===void 0||t.useCache===!0))t===void 0?t=Qb:t=l0e(t),e=s0e(this[0],t);else{e=Hs(),t=t||Qb;var r=l0e(t),n=this,i=n.cy(),a=i.styleEnabled();if(a)for(var s=0;s<n.length;s++){var l=n[s],u=l._private,h=Hme(l),f=u.bbCachePosKey===h,d=r.useCache&&f&&!u.styleDirty;l.recalculateRenderedStyle(d)}this.updateCompoundBounds(!t.useCache);for(var p=0;p<n.length;p++){var m=n[p];Pp(e,s0e(m,r))}}return e.x1=el(e.x1),e.y1=el(e.y1),e.x2=el(e.x2),e.y2=el(e.y2),e.w=el(e.x2-e.x1),e.h=el(e.y2-e.y1),e};Of.dirtyBoundingBoxCache=function(){for(var t=0;t<this.length;t++){var e=this[t]._private;e.bbCache=null,e.bbCachePosKey=null,e.bodyBounds=null,e.overlayBounds=null,e.labelBounds.all=null,e.labelBounds.source=null,e.labelBounds.target=null,e.labelBounds.main=null,e.labelBounds.sourceRot=null,e.labelBounds.targetRot=null,e.labelBounds.mainRot=null,e.arrowBounds.source=null,e.arrowBounds.target=null,e.arrowBounds["mid-source"]=null,e.arrowBounds["mid-target"]=null}return this.emitAndNotify("bounds"),this};Of.boundingBoxAt=function(t){var e=this.nodes(),r=this.cy(),n=r.hasCompoundNodes(),i=r.collection();if(n&&(i=e.filter(function(h){return h.isParent()}),e=e.not(i)),Ur(t)){var a=t;t=o(function(){return a},"fn")}var s=o(function(f,d){return f._private.bbAtOldPos=t(f,d)},"storeOldPos"),l=o(function(f){return f._private.bbAtOldPos},"getOldPos");r.startBatch(),e.forEach(s).silentPositions(t),n&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0));var u=Oqe(this.boundingBox({useCache:!1}));return e.silentPositions(l),n&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0)),r.endBatch(),u};X1.boundingbox=X1.bb=X1.boundingBox;X1.renderedBoundingbox=X1.renderedBoundingBox;vKe=Of;Bb=a4={};Wme=o(function(e){e.uppercaseName=Rpe(e.name),e.autoName="auto"+e.uppercaseName,e.labelName="label"+e.uppercaseName,e.outerName="outer"+e.uppercaseName,e.uppercaseOuterName=Rpe(e.outerName),Bb[e.name]=o(function(){var n=this[0],i=n._private,a=i.cy,s=a._private.styleEnabled;if(n)if(s){if(n.isParent())return n.updateCompoundBounds(),i[e.autoName]||0;var l=n.pstyle(e.name);switch(l.strValue){case"label":return n.recalculateRenderedStyle(),i.rstyle[e.labelName]||0;default:return l.pfValue}}else return 1},"dimImpl"),Bb["outer"+e.uppercaseName]=o(function(){var n=this[0],i=n._private,a=i.cy,s=a._private.styleEnabled;if(n)if(s){var l=n[e.name](),u=n.pstyle("border-width").pfValue,h=2*n.padding();return l+u+h}else return 1},"outerDimImpl"),Bb["rendered"+e.uppercaseName]=o(function(){var n=this[0];if(n){var i=n[e.name]();return i*this.cy().zoom()}},"renderedDimImpl"),Bb["rendered"+e.uppercaseOuterName]=o(function(){var n=this[0];if(n){var i=n[e.outerName]();return i*this.cy().zoom()}},"renderedOuterDimImpl")},"defineDimFns");Wme({name:"width"});Wme({name:"height"});a4.padding=function(){var t=this[0],e=t._private;return t.isParent()?(t.updateCompoundBounds(),e.autoPadding!==void 0?e.autoPadding:t.pstyle("padding").pfValue):t.pstyle("padding").pfValue};a4.paddedHeight=function(){var t=this[0];return t.height()+2*t.padding()};a4.paddedWidth=function(){var t=this[0];return t.width()+2*t.padding()};xKe=a4,bKe=o(function(e,r){if(e.isEdge())return r(e)},"ifEdge"),wKe=o(function(e,r){if(e.isEdge()){var n=e.cy();return MS(r(e),n.zoom(),n.pan())}},"ifEdgeRenderedPosition"),TKe=o(function(e,r){if(e.isEdge()){var n=e.cy(),i=n.pan(),a=n.zoom();return r(e).map(function(s){return MS(s,a,i)})}},"ifEdgeRenderedPositions"),kKe=o(function(e){return e.renderer().getControlPoints(e)},"controlPoints"),EKe=o(function(e){return e.renderer().getSegmentPoints(e)},"segmentPoints"),SKe=o(function(e){return e.renderer().getSourceEndpoint(e)},"sourceEndpoint"),CKe=o(function(e){return e.renderer().getTargetEndpoint(e)},"targetEndpoint"),AKe=o(function(e){return e.renderer().getEdgeMidpoint(e)},"midpoint"),c0e={controlPoints:{get:kKe,mult:!0},segmentPoints:{get:EKe,mult:!0},sourceEndpoint:{get:SKe},targetEndpoint:{get:CKe},midpoint:{get:AKe}},_Ke=o(function(e){return"rendered"+e[0].toUpperCase()+e.substr(1)},"renderedName"),DKe=Object.keys(c0e).reduce(function(t,e){var r=c0e[e],n=_Ke(e);return t[e]=function(){return bKe(this,r.get)},r.mult?t[n]=function(){return TKe(this,r.get)}:t[n]=function(){return wKe(this,r.get)},t},{}),LKe=rr({},mKe,vKe,xKe,DKe);qme=o(function(e,r){this.recycle(e,r)},"Event");o(Lb,"returnFalse");o(rS,"returnTrue");qme.prototype={instanceString:o(function(){return"event"},"instanceString"),recycle:o(function(e,r){if(this.isImmediatePropagationStopped=this.isPropagationStopped=this.isDefaultPrevented=Lb,e!=null&&e.preventDefault?(this.type=e.type,this.isDefaultPrevented=e.defaultPrevented?rS:Lb):e!=null&&e.type?r=e:this.type=e,r!=null&&(this.originalEvent=r.originalEvent,this.type=r.type!=null?r.type:this.type,this.cy=r.cy,this.target=r.target,this.position=r.position,this.renderedPosition=r.renderedPosition,this.namespace=r.namespace,this.layout=r.layout),this.cy!=null&&this.position!=null&&this.renderedPosition==null){var n=this.position,i=this.cy.zoom(),a=this.cy.pan();this.renderedPosition={x:n.x*i+a.x,y:n.y*i+a.y}}this.timeStamp=e&&e.timeStamp||Date.now()},"recycle"),preventDefault:o(function(){this.isDefaultPrevented=rS;var e=this.originalEvent;e&&e.preventDefault&&e.preventDefault()},"preventDefault"),stopPropagation:o(function(){this.isPropagationStopped=rS;var e=this.originalEvent;e&&e.stopPropagation&&e.stopPropagation()},"stopPropagation"),stopImmediatePropagation:o(function(){this.isImmediatePropagationStopped=rS,this.stopPropagation()},"stopImmediatePropagation"),isDefaultPrevented:Lb,isPropagationStopped:Lb,isImmediatePropagationStopped:Lb};Yme=/^([^.]+)(\.(?:[^.]+))?$/,RKe=".*",Xme={qualifierCompare:o(function(e,r){return e===r},"qualifierCompare"),eventMatches:o(function(){return!0},"eventMatches"),addEventFields:o(function(){},"addEventFields"),callbackContext:o(function(e){return e},"callbackContext"),beforeEmit:o(function(){},"beforeEmit"),afterEmit:o(function(){},"afterEmit"),bubble:o(function(){return!1},"bubble"),parent:o(function(){return null},"parent"),context:null},u0e=Object.keys(Xme),NKe={};o($S,"Emitter");Nf=$S.prototype,jme=o(function(e,r,n,i,a,s,l){si(i)&&(a=i,i=null),l&&(s==null?s=l:s=rr({},s,l));for(var u=En(n)?n:n.split(/\s+/),h=0;h<u.length;h++){var f=u[h];if(!Af(f)){var d=f.match(Yme);if(d){var p=d[1],m=d[2]?d[2]:null,g=r(e,f,p,m,i,a,s);if(g===!1)break}}}},"forEachEvent"),h0e=o(function(e,r){return e.addEventFields(e.context,r),new qme(r.type,r)},"makeEventObj"),MKe=o(function(e,r,n){if(eWe(n)){r(e,n);return}else if(Ur(n)){r(e,h0e(e,n));return}for(var i=En(n)?n:n.split(/\s+/),a=0;a<i.length;a++){var s=i[a];if(!Af(s)){var l=s.match(Yme);if(l){var u=l[1],h=l[2]?l[2]:null,f=h0e(e,{type:u,namespace:h,target:e.context});r(e,f)}}}},"forEachEventObj");Nf.on=Nf.addListener=function(t,e,r,n,i){return jme(this,function(a,s,l,u,h,f,d){si(f)&&a.listeners.push({event:s,callback:f,type:l,namespace:u,qualifier:h,conf:d})},t,e,r,n,i),this};Nf.one=function(t,e,r,n){return this.on(t,e,r,n,{one:!0})};Nf.removeListener=Nf.off=function(t,e,r,n){var i=this;this.emitting!==0&&(this.listeners=lqe(this.listeners));for(var a=this.listeners,s=o(function(h){var f=a[h];jme(i,function(d,p,m,g,y,v){if((f.type===m||t==="*")&&(!g&&f.namespace!==".*"||f.namespace===g)&&(!y||d.qualifierCompare(f.qualifier,y))&&(!v||f.callback===v))return a.splice(h,1),!1},t,e,r,n)},"_loop"),l=a.length-1;l>=0;l--)s(l);return this};Nf.removeAllListeners=function(){return this.removeListener("*")};Nf.emit=Nf.trigger=function(t,e,r){var n=this.listeners,i=n.length;return this.emitting++,En(e)||(e=[e]),MKe(this,function(a,s){r!=null&&(n=[{event:s.event,type:s.type,namespace:s.namespace,callback:r}],i=n.length);for(var l=o(function(f){var d=n[f];if(d.type===s.type&&(!d.namespace||d.namespace===s.namespace||d.namespace===RKe)&&a.eventMatches(a.context,d,s)){var p=[s];e!=null&&uqe(p,e),a.beforeEmit(a.context,d,s),d.conf&&d.conf.one&&(a.listeners=a.listeners.filter(function(y){return y!==d}));var m=a.callbackContext(a.context,d,s),g=d.callback.apply(m,p);a.afterEmit(a.context,d,s),g===!1&&(s.stopPropagation(),s.preventDefault())}},"_loop2"),u=0;u<i;u++)l(u);a.bubble(a.context)&&!s.isPropagationStopped()&&a.parent(a.context).emit(s,e)},t),this.emitting--,this};IKe={qualifierCompare:o(function(e,r){return e==null||r==null?e==null&&r==null:e.sameText(r)},"qualifierCompare"),eventMatches:o(function(e,r,n){var i=r.qualifier;return i!=null?e!==n.target&&t4(n.target)&&i.matches(n.target):!0},"eventMatches"),addEventFields:o(function(e,r){r.cy=e.cy(),r.target=e},"addEventFields"),callbackContext:o(function(e,r,n){return r.qualifier!=null?n.target:e},"callbackContext"),beforeEmit:o(function(e,r){r.conf&&r.conf.once&&r.conf.onceCollection.removeListener(r.event,r.qualifier,r.callback)},"beforeEmit"),bubble:o(function(){return!0},"bubble"),parent:o(function(e){return e.isChild()?e.parent():e.cy()},"parent")},nS=o(function(e){return Zt(e)?new Lf(e):e},"argSelector"),Kme={createEmitter:o(function(){for(var e=0;e<this.length;e++){var r=this[e],n=r._private;n.emitter||(n.emitter=new $S(IKe,r))}return this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(e,r,n){for(var i=nS(r),a=0;a<this.length;a++){var s=this[a];s.emitter().on(e,i,n)}return this},"on"),removeListener:o(function(e,r,n){for(var i=nS(r),a=0;a<this.length;a++){var s=this[a];s.emitter().removeListener(e,i,n)}return this},"removeListener"),removeAllListeners:o(function(){for(var e=0;e<this.length;e++){var r=this[e];r.emitter().removeAllListeners()}return this},"removeAllListeners"),one:o(function(e,r,n){for(var i=nS(r),a=0;a<this.length;a++){var s=this[a];s.emitter().one(e,i,n)}return this},"one"),once:o(function(e,r,n){for(var i=nS(r),a=0;a<this.length;a++){var s=this[a];s.emitter().on(e,i,n,{once:!0,onceCollection:this})}},"once"),emit:o(function(e,r){for(var n=0;n<this.length;n++){var i=this[n];i.emitter().emit(e,r)}return this},"emit"),emitAndNotify:o(function(e,r){if(this.length!==0)return this.cy().notify(e,this),this.emit(e,r),this},"emitAndNotify")};cn.eventAliasesOn(Kme);Qme={nodes:o(function(e){return this.filter(function(r){return r.isNode()}).filter(e)},"nodes"),edges:o(function(e){return this.filter(function(r){return r.isEdge()}).filter(e)},"edges"),byGroup:o(function(){for(var e=this.spawn(),r=this.spawn(),n=0;n<this.length;n++){var i=this[n];i.isNode()?e.push(i):r.push(i)}return{nodes:e,edges:r}},"byGroup"),filter:o(function(e,r){if(e===void 0)return this;if(Zt(e)||go(e))return new Lf(e).filter(this);if(si(e)){for(var n=this.spawn(),i=this,a=0;a<i.length;a++){var s=i[a],l=r?e.apply(r,[s,a,i]):e(s,a,i);l&&n.push(s)}return n}return this.spawn()},"filter"),not:o(function(e){if(e){Zt(e)&&(e=this.filter(e));for(var r=this.spawn(),n=0;n<this.length;n++){var i=this[n],a=e.has(i);a||r.push(i)}return r}else return this},"not"),absoluteComplement:o(function(){var e=this.cy();return e.mutableElements().not(this)},"absoluteComplement"),intersect:o(function(e){if(Zt(e)){var r=e;return this.filter(r)}for(var n=this.spawn(),i=this,a=e,s=this.length<e.length,l=s?i:a,u=s?a:i,h=0;h<l.length;h++){var f=l[h];u.has(f)&&n.push(f)}return n},"intersect"),xor:o(function(e){var r=this._private.cy;Zt(e)&&(e=r.$(e));var n=this.spawn(),i=this,a=e,s=o(function(u,h){for(var f=0;f<u.length;f++){var d=u[f],p=d._private.data.id,m=h.hasElementWithId(p);m||n.push(d)}},"add");return s(i,a),s(a,i),n},"xor"),diff:o(function(e){var r=this._private.cy;Zt(e)&&(e=r.$(e));var n=this.spawn(),i=this.spawn(),a=this.spawn(),s=this,l=e,u=o(function(f,d,p){for(var m=0;m<f.length;m++){var g=f[m],y=g._private.data.id,v=d.hasElementWithId(y);v?a.merge(g):p.push(g)}},"add");return u(s,l,n),u(l,s,i),{left:n,right:i,both:a}},"diff"),add:o(function(e){var r=this._private.cy;if(!e)return this;if(Zt(e)){var n=e;e=r.mutableElements().filter(n)}for(var i=this.spawnSelf(),a=0;a<e.length;a++){var s=e[a],l=!this.has(s);l&&i.push(s)}return i},"add"),merge:o(function(e){var r=this._private,n=r.cy;if(!e)return this;if(e&&Zt(e)){var i=e;e=n.mutableElements().filter(i)}for(var a=r.map,s=0;s<e.length;s++){var l=e[s],u=l._private.data.id,h=!a.has(u);if(h){var f=this.length++;this[f]=l,a.set(u,{ele:l,index:f})}}return this},"merge"),unmergeAt:o(function(e){var r=this[e],n=r.id(),i=this._private,a=i.map;this[e]=void 0,a.delete(n);var s=e===this.length-1;if(this.length>1&&!s){var l=this.length-1,u=this[l],h=u._private.data.id;this[l]=void 0,this[e]=u,a.set(h,{ele:u,index:e})}return this.length--,this},"unmergeAt"),unmergeOne:o(function(e){e=e[0];var r=this._private,n=e._private.data.id,i=r.map,a=i.get(n);if(!a)return this;var s=a.index;return this.unmergeAt(s),this},"unmergeOne"),unmerge:o(function(e){var r=this._private.cy;if(!e)return this;if(e&&Zt(e)){var n=e;e=r.mutableElements().filter(n)}for(var i=0;i<e.length;i++)this.unmergeOne(e[i]);return this},"unmerge"),unmergeBy:o(function(e){for(var r=this.length-1;r>=0;r--){var n=this[r];e(n)&&this.unmergeAt(r)}return this},"unmergeBy"),map:o(function(e,r){for(var n=[],i=this,a=0;a<i.length;a++){var s=i[a],l=r?e.apply(r,[s,a,i]):e(s,a,i);n.push(l)}return n},"map"),reduce:o(function(e,r){for(var n=r,i=this,a=0;a<i.length;a++)n=e(n,i[a],a,i);return n},"reduce"),max:o(function(e,r){for(var n=-1/0,i,a=this,s=0;s<a.length;s++){var l=a[s],u=r?e.apply(r,[l,s,a]):e(l,s,a);u>n&&(n=u,i=l)}return{value:n,ele:i}},"max"),min:o(function(e,r){for(var n=1/0,i,a=this,s=0;s<a.length;s++){var l=a[s],u=r?e.apply(r,[l,s,a]):e(l,s,a);u<n&&(n=u,i=l)}return{value:n,ele:i}},"min")},Qr=Qme;Qr.u=Qr["|"]=Qr["+"]=Qr.union=Qr.or=Qr.add;Qr["\\"]=Qr["!"]=Qr["-"]=Qr.difference=Qr.relativeComplement=Qr.subtract=Qr.not;Qr.n=Qr["&"]=Qr["."]=Qr.and=Qr.intersection=Qr.intersect;Qr["^"]=Qr["(+)"]=Qr["(-)"]=Qr.symmetricDifference=Qr.symdiff=Qr.xor;Qr.fnFilter=Qr.filterFn=Qr.stdFilter=Qr.filter;Qr.complement=Qr.abscomp=Qr.absoluteComplement;OKe={isNode:o(function(){return this.group()==="nodes"},"isNode"),isEdge:o(function(){return this.group()==="edges"},"isEdge"),isLoop:o(function(){return this.isEdge()&&this.source()[0]===this.target()[0]},"isLoop"),isSimple:o(function(){return this.isEdge()&&this.source()[0]!==this.target()[0]},"isSimple"),group:o(function(){var e=this[0];if(e)return e._private.group},"group")},Zme=o(function(e,r){var n=e.cy(),i=n.hasCompoundNodes();function a(f){var d=f.pstyle("z-compound-depth");return d.value==="auto"?i?f.zDepth():0:d.value==="bottom"?-1:d.value==="top"?tB:0}o(a,"getDepth");var s=a(e)-a(r);if(s!==0)return s;function l(f){var d=f.pstyle("z-index-compare");return d.value==="auto"&&f.isNode()?1:0}o(l,"getEleDepth");var u=l(e)-l(r);if(u!==0)return u;var h=e.pstyle("z-index").value-r.pstyle("z-index").value;return h!==0?h:e.poolIndex()-r.poolIndex()},"zIndexSort"),ES={forEach:o(function(e,r){if(si(e))for(var n=this.length,i=0;i<n;i++){var a=this[i],s=r?e.apply(r,[a,i,this]):e(a,i,this);if(s===!1)break}return this},"forEach"),toArray:o(function(){for(var e=[],r=0;r<this.length;r++)e.push(this[r]);return e},"toArray"),slice:o(function(e,r){var n=[],i=this.length;r==null&&(r=i),e==null&&(e=0),e<0&&(e=i+e),r<0&&(r=i+r);for(var a=e;a>=0&&a<r&&a<i;a++)n.push(this[a]);return this.spawn(n)},"slice"),size:o(function(){return this.length},"size"),eq:o(function(e){return this[e]||this.spawn()},"eq"),first:o(function(){return this[0]||this.spawn()},"first"),last:o(function(){return this[this.length-1]||this.spawn()},"last"),empty:o(function(){return this.length===0},"empty"),nonempty:o(function(){return!this.empty()},"nonempty"),sort:o(function(e){if(!si(e))return this;var r=this.toArray().sort(e);return this.spawn(r)},"sort"),sortByZIndex:o(function(){return this.sort(Zme)},"sortByZIndex"),zDepth:o(function(){var e=this[0];if(e){var r=e._private,n=r.group;if(n==="nodes"){var i=r.data.parent?e.parents().size():0;return e.isParent()?i:tB-1}else{var a=r.source,s=r.target,l=a.zDepth(),u=s.zDepth();return Math.max(l,u,0)}}},"zDepth")};ES.each=ES.forEach;PKe=o(function(){var e="undefined",r=(typeof Symbol>"u"?"undefined":Wi(Symbol))!=e&&Wi(Symbol.iterator)!=e;r&&(ES[Symbol.iterator]=function(){var n=this,i={value:void 0,done:!1},a=0,s=this.length;return X0e({next:o(function(){return a<s?i.value=n[a++]:(i.value=void 0,i.done=!0),i},"next")},Symbol.iterator,function(){return this})})},"defineSymbolIterator");PKe();BKe=la({nodeDimensionsIncludeLabels:!1}),fS={layoutDimensions:o(function(e){e=BKe(e);var r;if(!this.takesUpSpace())r={w:0,h:0};else if(e.nodeDimensionsIncludeLabels){var n=this.boundingBox();r={w:n.w,h:n.h}}else r={w:this.outerWidth(),h:this.outerHeight()};return(r.w===0||r.h===0)&&(r.w=r.h=1),r},"layoutDimensions"),layoutPositions:o(function(e,r,n){var i=this.nodes().filter(function(T){return!T.isParent()}),a=this.cy(),s=r.eles,l=o(function(E){return E.id()},"getMemoizeKey"),u=Ub(n,l);e.emit({type:"layoutstart",layout:e}),e.animations=[];var h=o(function(E,A,S){var _={x:A.x1+A.w/2,y:A.y1+A.h/2},I={x:(S.x-_.x)*E,y:(S.y-_.y)*E};return{x:_.x+I.x,y:_.y+I.y}},"calculateSpacing"),f=r.spacingFactor&&r.spacingFactor!==1,d=o(function(){if(!f)return null;for(var E=Hs(),A=0;A<i.length;A++){var S=i[A],_=u(S,A);Fqe(E,_.x,_.y)}return E},"spacingBb"),p=d(),m=Ub(function(T,E){var A=u(T,E);if(f){var S=Math.abs(r.spacingFactor);A=h(S,p,A)}return r.transform!=null&&(A=r.transform(T,A)),A},l);if(r.animate){for(var g=0;g<i.length;g++){var y=i[g],v=m(y,g),x=r.animateFilter==null||r.animateFilter(y,g);if(x){var b=y.animation({position:v,duration:r.animationDuration,easing:r.animationEasing});e.animations.push(b)}else y.position(v)}if(r.fit){var w=a.animation({fit:{boundingBox:s.boundingBoxAt(m),padding:r.padding},duration:r.animationDuration,easing:r.animationEasing});e.animations.push(w)}else if(r.zoom!==void 0&&r.pan!==void 0){var C=a.animation({zoom:r.zoom,pan:r.pan,duration:r.animationDuration,easing:r.animationEasing});e.animations.push(C)}e.animations.forEach(function(T){return T.play()}),e.one("layoutready",r.ready),e.emit({type:"layoutready",layout:e}),ey.all(e.animations.map(function(T){return T.promise()})).then(function(){e.one("layoutstop",r.stop),e.emit({type:"layoutstop",layout:e})})}else i.positions(m),r.fit&&a.fit(r.eles,r.padding),r.zoom!=null&&a.zoom(r.zoom),r.pan&&a.pan(r.pan),e.one("layoutready",r.ready),e.emit({type:"layoutready",layout:e}),e.one("layoutstop",r.stop),e.emit({type:"layoutstop",layout:e});return this},"layoutPositions"),layout:o(function(e){var r=this.cy();return r.makeLayout(rr({},e,{eles:this}))},"layout")};fS.createLayout=fS.makeLayout=fS.layout;o(Jme,"styleCache");o(zS,"cacheStyleFunction");o(GS,"cachePrototypeStyleFunction");Ta={recalculateRenderedStyle:o(function(e){var r=this.cy(),n=r.renderer(),i=r.styleEnabled();return n&&i&&n.recalculateRenderedStyle(this,e),this},"recalculateRenderedStyle"),dirtyStyleCache:o(function(){var e=this.cy(),r=o(function(a){return a._private.styleCache=null},"dirty");if(e.hasCompoundNodes()){var n;n=this.spawnSelf().merge(this.descendants()).merge(this.parents()),n.merge(n.connectedEdges()),n.forEach(r)}else this.forEach(function(i){r(i),i.connectedEdges().forEach(r)});return this},"dirtyStyleCache"),updateStyle:o(function(e){var r=this._private.cy;if(!r.styleEnabled())return this;if(r.batching()){var n=r._private.batchStyleEles;return n.merge(this),this}var i=r.hasCompoundNodes(),a=this;e=!!(e||e===void 0),i&&(a=this.spawnSelf().merge(this.descendants()).merge(this.parents()));var s=a;return e?s.emitAndNotify("style"):s.emit("style"),a.forEach(function(l){return l._private.styleDirty=!0}),this},"updateStyle"),cleanStyle:o(function(){var e=this.cy();if(e.styleEnabled())for(var r=0;r<this.length;r++){var n=this[r];n._private.styleDirty&&(n._private.styleDirty=!1,e.style().apply(n))}},"cleanStyle"),parsedStyle:o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,n=this[0],i=n.cy();if(i.styleEnabled()&&n){n._private.styleDirty&&(n._private.styleDirty=!1,i.style().apply(n));var a=n._private.style[e];return a??(r?i.style().getDefaultProperty(e):null)}},"parsedStyle"),numericStyle:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r){var n=r.pstyle(e);return n.pfValue!==void 0?n.pfValue:n.value}},"numericStyle"),numericStyleUnits:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r)return r.pstyle(e).units},"numericStyleUnits"),renderedStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=this[0];if(n)return r.style().getRenderedStyle(n,e)},"renderedStyle"),style:o(function(e,r){var n=this.cy();if(!n.styleEnabled())return this;var i=!1,a=n.style();if(Ur(e)){var s=e;a.applyBypass(this,s,i),this.emitAndNotify("style")}else if(Zt(e))if(r===void 0){var l=this[0];return l?a.getStylePropertyValue(l,e):void 0}else a.applyBypass(this,e,r,i),this.emitAndNotify("style");else if(e===void 0){var u=this[0];return u?a.getRawStyle(u):void 0}return this},"style"),removeStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=!1,i=r.style(),a=this;if(e===void 0)for(var s=0;s<a.length;s++){var l=a[s];i.removeAllBypasses(l,n)}else{e=e.split(/\s+/);for(var u=0;u<a.length;u++){var h=a[u];i.removeBypasses(h,e,n)}}return this.emitAndNotify("style"),this},"removeStyle"),show:o(function(){return this.css("display","element"),this},"show"),hide:o(function(){return this.css("display","none"),this},"hide"),effectiveOpacity:o(function(){var e=this.cy();if(!e.styleEnabled())return 1;var r=e.hasCompoundNodes(),n=this[0];if(n){var i=n._private,a=n.pstyle("opacity").value;if(!r)return a;var s=i.data.parent?n.parents():null;if(s)for(var l=0;l<s.length;l++){var u=s[l],h=u.pstyle("opacity").value;a=h*a}return a}},"effectiveOpacity"),transparent:o(function(){var e=this.cy();if(!e.styleEnabled())return!1;var r=this[0],n=r.cy().hasCompoundNodes();if(r)return n?r.effectiveOpacity()===0:r.pstyle("opacity").value===0},"transparent"),backgrounding:o(function(){var e=this.cy();if(!e.styleEnabled())return!1;var r=this[0];return!!r._private.backgrounding},"backgrounding")};o(AP,"checkCompound");o(dB,"defineDerivedStateFunction");iy=zS("eleTakesUpSpace",function(t){return t.pstyle("display").value==="element"&&t.width()!==0&&(t.isNode()?t.height()!==0:!0)});Ta.takesUpSpace=GS("takesUpSpace",dB({ok:iy}));FKe=zS("eleInteractive",function(t){return t.pstyle("events").value==="yes"&&t.pstyle("visibility").value==="visible"&&iy(t)}),$Ke=zS("parentInteractive",function(t){return t.pstyle("visibility").value==="visible"&&iy(t)});Ta.interactive=GS("interactive",dB({ok:FKe,parentOk:$Ke,edgeOkViaNode:iy}));Ta.noninteractive=function(){var t=this[0];if(t)return!t.interactive()};zKe=zS("eleVisible",function(t){return t.pstyle("visibility").value==="visible"&&t.pstyle("opacity").pfValue!==0&&iy(t)}),GKe=iy;Ta.visible=GS("visible",dB({ok:zKe,edgeOkViaNode:GKe}));Ta.hidden=function(){var t=this[0];if(t)return!t.visible()};Ta.isBundledBezier=GS("isBundledBezier",function(){return this.cy().styleEnabled()?!this.removed()&&this.pstyle("curve-style").value==="bezier"&&this.takesUpSpace():!1});Ta.bypass=Ta.css=Ta.style;Ta.renderedCss=Ta.renderedStyle;Ta.removeBypass=Ta.removeCss=Ta.removeStyle;Ta.pstyle=Ta.parsedStyle;Cf={};o(f0e,"defineSwitchFunction");o(ay,"defineSwitchSet");ay({field:"locked",overrideField:o(function(e){return e.cy().autolock()?!0:void 0},"overrideField"),on:"lock",off:"unlock"});ay({field:"grabbable",overrideField:o(function(e){return e.cy().autoungrabify()||e.pannable()?!1:void 0},"overrideField"),on:"grabify",off:"ungrabify"});ay({field:"selected",ableField:"selectable",overrideAble:o(function(e){return e.cy().autounselectify()?!1:void 0},"overrideAble"),on:"select",off:"unselect"});ay({field:"selectable",overrideField:o(function(e){return e.cy().autounselectify()?!1:void 0},"overrideField"),on:"selectify",off:"unselectify"});Cf.deselect=Cf.unselect;Cf.grabbed=function(){var t=this[0];if(t)return t._private.grabbed};ay({field:"active",on:"activate",off:"unactivate"});ay({field:"pannable",on:"panify",off:"unpanify"});Cf.inactive=function(){var t=this[0];if(t)return!t._private.active};$a={},d0e=o(function(e){return o(function(n){for(var i=this,a=[],s=0;s<i.length;s++){var l=i[s];if(l.isNode()){for(var u=!1,h=l.connectedEdges(),f=0;f<h.length;f++){var d=h[f],p=d.source(),m=d.target();if(e.noIncomingEdges&&m===l&&p!==l||e.noOutgoingEdges&&p===l&&m!==l){u=!0;break}}u||a.push(l)}}return this.spawn(a,!0).filter(n)},"dagExtremityImpl")},"defineDagExtremity"),p0e=o(function(e){return function(r){for(var n=this,i=[],a=0;a<n.length;a++){var s=n[a];if(s.isNode())for(var l=s.connectedEdges(),u=0;u<l.length;u++){var h=l[u],f=h.source(),d=h.target();e.outgoing&&f===s?(i.push(h),i.push(d)):e.incoming&&d===s&&(i.push(h),i.push(f))}}return this.spawn(i,!0).filter(r)}},"defineDagOneHop"),m0e=o(function(e){return function(r){for(var n=this,i=[],a={};;){var s=e.outgoing?n.outgoers():n.incomers();if(s.length===0)break;for(var l=!1,u=0;u<s.length;u++){var h=s[u],f=h.id();a[f]||(a[f]=!0,i.push(h),l=!0)}if(!l)break;n=s}return this.spawn(i,!0).filter(r)}},"defineDagAllHops");$a.clearTraversalCache=function(){for(var t=0;t<this.length;t++)this[t]._private.traversalCache=null};rr($a,{roots:d0e({noIncomingEdges:!0}),leaves:d0e({noOutgoingEdges:!0}),outgoers:tl(p0e({outgoing:!0}),"outgoers"),successors:m0e({outgoing:!0}),incomers:tl(p0e({incoming:!0}),"incomers"),predecessors:m0e({incoming:!0})});rr($a,{neighborhood:tl(function(t){for(var e=[],r=this.nodes(),n=0;n<r.length;n++)for(var i=r[n],a=i.connectedEdges(),s=0;s<a.length;s++){var l=a[s],u=l.source(),h=l.target(),f=i===u?h:u;f.length>0&&e.push(f[0]),e.push(l[0])}return this.spawn(e,!0).filter(t)},"neighborhood"),closedNeighborhood:o(function(e){return this.neighborhood().add(this).filter(e)},"closedNeighborhood"),openNeighborhood:o(function(e){return this.neighborhood(e)},"openNeighborhood")});$a.neighbourhood=$a.neighborhood;$a.closedNeighbourhood=$a.closedNeighborhood;$a.openNeighbourhood=$a.openNeighborhood;rr($a,{source:tl(o(function(e){var r=this[0],n;return r&&(n=r._private.source||r.cy().collection()),n&&e?n.filter(e):n},"sourceImpl"),"source"),target:tl(o(function(e){var r=this[0],n;return r&&(n=r._private.target||r.cy().collection()),n&&e?n.filter(e):n},"targetImpl"),"target"),sources:g0e({attr:"source"}),targets:g0e({attr:"target"})});o(g0e,"defineSourceFunction");rr($a,{edgesWith:tl(y0e(),"edgesWith"),edgesTo:tl(y0e({thisIsSrc:!0}),"edgesTo")});o(y0e,"defineEdgesWithFunction");rr($a,{connectedEdges:tl(function(t){for(var e=[],r=this,n=0;n<r.length;n++){var i=r[n];if(i.isNode())for(var a=i._private.edges,s=0;s<a.length;s++){var l=a[s];e.push(l)}}return this.spawn(e,!0).filter(t)},"connectedEdges"),connectedNodes:tl(function(t){for(var e=[],r=this,n=0;n<r.length;n++){var i=r[n];i.isEdge()&&(e.push(i.source()[0]),e.push(i.target()[0]))}return this.spawn(e,!0).filter(t)},"connectedNodes"),parallelEdges:tl(v0e(),"parallelEdges"),codirectedEdges:tl(v0e({codirected:!0}),"codirectedEdges")});o(v0e,"defineParallelEdgesFunction");rr($a,{components:o(function(e){var r=this,n=r.cy(),i=n.collection(),a=e==null?r.nodes():e.nodes(),s=[];e!=null&&a.empty()&&(a=e.sources());var l=o(function(f,d){i.merge(f),a.unmerge(f),d.merge(f)},"visitInComponent");if(a.empty())return r.spawn();var u=o(function(){var f=n.collection();s.push(f);var d=a[0];l(d,f),r.bfs({directed:!1,roots:d,visit:o(function(m){return l(m,f)},"visit")}),f.forEach(function(p){p.connectedEdges().forEach(function(m){r.has(m)&&f.has(m.source())&&f.has(m.target())&&f.merge(m)})})},"_loop");do u();while(a.length>0);return s},"components"),component:o(function(){var e=this[0];return e.cy().mutableElements().components(e)[0]},"component")});$a.componentsOf=$a.components;ka=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(e===void 0){ai("A collection must have a reference to the core");return}var a=new Xc,s=!1;if(!r)r=[];else if(r.length>0&&Ur(r[0])&&!t4(r[0])){s=!0;for(var l=[],u=new J1,h=0,f=r.length;h<f;h++){var d=r[h];d.data==null&&(d.data={});var p=d.data;if(p.id==null)p.id=fme();else if(e.hasElementWithId(p.id)||u.has(p.id))continue;var m=new NS(e,d,!1);l.push(m),u.add(p.id)}r=l}this.length=0;for(var g=0,y=r.length;g<y;g++){var v=r[g][0];if(v!=null){var x=v._private.data.id;(!n||!a.has(x))&&(n&&a.set(x,{index:this.length,ele:v}),this[this.length]=v,this.length++)}}this._private={eles:this,cy:e,get map(){return this.lazyMap==null&&this.rebuildMap(),this.lazyMap},set map(b){this.lazyMap=b},rebuildMap:o(function(){for(var w=this.lazyMap=new Xc,C=this.eles,T=0;T<C.length;T++){var E=C[T];w.set(E.id(),{index:T,ele:E})}},"rebuildMap")},n&&(this._private.map=a),s&&!i&&this.restore()},"Collection"),Mn=NS.prototype=ka.prototype=Object.create(Array.prototype);Mn.instanceString=function(){return"collection"};Mn.spawn=function(t,e){return new ka(this.cy(),t,e)};Mn.spawnSelf=function(){return this.spawn(this)};Mn.cy=function(){return this._private.cy};Mn.renderer=function(){return this._private.cy.renderer()};Mn.element=function(){return this[0]};Mn.collection=function(){return Q0e(this)?this:new ka(this._private.cy,[this])};Mn.unique=function(){return new ka(this._private.cy,this,!0)};Mn.hasElementWithId=function(t){return t=""+t,this._private.map.has(t)};Mn.getElementById=function(t){t=""+t;var e=this._private.cy,r=this._private.map.get(t);return r?r.ele:new ka(e)};Mn.$id=Mn.getElementById;Mn.poolIndex=function(){var t=this._private.cy,e=t._private.elements,r=this[0]._private.data.id;return e._private.map.get(r).index};Mn.indexOf=function(t){var e=t[0]._private.data.id;return this._private.map.get(e).index};Mn.indexOfId=function(t){return t=""+t,this._private.map.get(t).index};Mn.json=function(t){var e=this.element(),r=this.cy();if(e==null&&t)return this;if(e!=null){var n=e._private;if(Ur(t)){if(r.startBatch(),t.data){e.data(t.data);var i=n.data;if(e.isEdge()){var a=!1,s={},l=t.data.source,u=t.data.target;l!=null&&l!=i.source&&(s.source=""+l,a=!0),u!=null&&u!=i.target&&(s.target=""+u,a=!0),a&&(e=e.move(s))}else{var h="parent"in t.data,f=t.data.parent;h&&(f!=null||i.parent!=null)&&f!=i.parent&&(f===void 0&&(f=null),f!=null&&(f=""+f),e=e.move({parent:f}))}}t.position&&e.position(t.position);var d=o(function(y,v,x){var b=t[y];b!=null&&b!==n[y]&&(b?e[v]():e[x]())},"checkSwitch");return d("removed","remove","restore"),d("selected","select","unselect"),d("selectable","selectify","unselectify"),d("locked","lock","unlock"),d("grabbable","grabify","ungrabify"),d("pannable","panify","unpanify"),t.classes!=null&&e.classes(t.classes),r.endBatch(),this}else if(t===void 0){var p={data:Yc(n.data),position:Yc(n.position),group:n.group,removed:n.removed,selected:n.selected,selectable:n.selectable,locked:n.locked,grabbable:n.grabbable,pannable:n.pannable,classes:null};p.classes="";var m=0;return n.classes.forEach(function(g){return p.classes+=m++===0?g:" "+g}),p}}};Mn.jsons=function(){for(var t=[],e=0;e<this.length;e++){var r=this[e],n=r.json();t.push(n)}return t};Mn.clone=function(){for(var t=this.cy(),e=[],r=0;r<this.length;r++){var n=this[r],i=n.json(),a=new NS(t,i,!1);e.push(a)}return new ka(t,e)};Mn.copy=Mn.clone;Mn.restore=function(){for(var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=r.cy(),i=n._private,a=[],s=[],l,u=0,h=r.length;u<h;u++){var f=r[u];e&&!f.removed()||(f.isNode()?a.push(f):s.push(f))}l=a.concat(s);var d,p=o(function(){l.splice(d,1),d--},"removeFromElements");for(d=0;d<l.length;d++){var m=l[d],g=m._private,y=g.data;if(m.clearTraversalCache(),!(!e&&!g.removed)){if(y.id===void 0)y.id=fme();else if(Ct(y.id))y.id=""+y.id;else if(Af(y.id)||!Zt(y.id)){ai("Can not create element with invalid string ID `"+y.id+"`"),p();continue}else if(n.hasElementWithId(y.id)){ai("Can not create second element with ID `"+y.id+"`"),p();continue}}var v=y.id;if(m.isNode()){var x=g.position;x.x==null&&(x.x=0),x.y==null&&(x.y=0)}if(m.isEdge()){for(var b=m,w=["source","target"],C=w.length,T=!1,E=0;E<C;E++){var A=w[E],S=y[A];Ct(S)&&(S=y[A]=""+y[A]),S==null||S===""?(ai("Can not create edge `"+v+"` with unspecified "+A),T=!0):n.hasElementWithId(S)||(ai("Can not create edge `"+v+"` with nonexistant "+A+" `"+S+"`"),T=!0)}if(T){p();continue}var _=n.getElementById(y.source),I=n.getElementById(y.target);_.same(I)?_._private.edges.push(b):(_._private.edges.push(b),I._private.edges.push(b)),b._private.source=_,b._private.target=I}g.map=new Xc,g.map.set(v,{ele:m,index:0}),g.removed=!1,e&&n.addToPool(m)}for(var D=0;D<a.length;D++){var k=a[D],L=k._private.data;Ct(L.parent)&&(L.parent=""+L.parent);var R=L.parent,O=R!=null;if(O||k._private.parent){var M=k._private.parent?n.collection().merge(k._private.parent):n.getElementById(R);if(M.empty())L.parent=void 0;else if(M[0].removed())un("Node added with missing parent, reference to parent removed"),L.parent=void 0,k._private.parent=null;else{for(var B=!1,F=M;!F.empty();){if(k.same(F)){B=!0,L.parent=void 0;break}F=F.parent()}B||(M[0]._private.children.push(k),k._private.parent=M[0],i.hasCompoundNodes=!0)}}}if(l.length>0){for(var P=l.length===r.length?r:new ka(n,l),z=0;z<P.length;z++){var $=P[z];$.isNode()||($.parallelEdges().clearTraversalCache(),$.source().clearTraversalCache(),$.target().clearTraversalCache())}var H;i.hasCompoundNodes?H=n.collection().merge(P).merge(P.connectedNodes()).merge(P.parent()):H=P,H.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(t),t?P.emitAndNotify("add"):e&&P.emit("add")}return r};Mn.removed=function(){var t=this[0];return t&&t._private.removed};Mn.inside=function(){var t=this[0];return t&&!t._private.removed};Mn.remove=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=[],i={},a=r._private.cy;function s(R){for(var O=R._private.edges,M=0;M<O.length;M++)u(O[M])}o(s,"addConnectedEdges");function l(R){for(var O=R._private.children,M=0;M<O.length;M++)u(O[M])}o(l,"addChildren");function u(R){var O=i[R.id()];e&&R.removed()||O||(i[R.id()]=!0,R.isNode()?(n.push(R),s(R),l(R)):n.unshift(R))}o(u,"add");for(var h=0,f=r.length;h<f;h++){var d=r[h];u(d)}function p(R,O){var M=R._private.edges;Df(M,O),R.clearTraversalCache()}o(p,"removeEdgeRef");function m(R){R.clearTraversalCache()}o(m,"removeParallelRef");var g=[];g.ids={};function y(R,O){O=O[0],R=R[0];var M=R._private.children,B=R.id();Df(M,O),O._private.parent=null,g.ids[B]||(g.ids[B]=!0,g.push(R))}o(y,"removeChildRef"),r.dirtyCompoundBoundsCache(),e&&a.removeFromPool(n);for(var v=0;v<n.length;v++){var x=n[v];if(x.isEdge()){var b=x.source()[0],w=x.target()[0];p(b,x),p(w,x);for(var C=x.parallelEdges(),T=0;T<C.length;T++){var E=C[T];m(E),E.isBundledBezier()&&E.dirtyBoundingBoxCache()}}else{var A=x.parent();A.length!==0&&y(A,x)}e&&(x._private.removed=!0)}var S=a._private.elements;a._private.hasCompoundNodes=!1;for(var _=0;_<S.length;_++){var I=S[_];if(I.isParent()){a._private.hasCompoundNodes=!0;break}}var D=new ka(this.cy(),n);D.size()>0&&(t?D.emitAndNotify("remove"):e&&D.emit("remove"));for(var k=0;k<g.length;k++){var L=g[k];(!e||!L.removed())&&L.updateStyle()}return D};Mn.move=function(t){var e=this._private.cy,r=this,n=!1,i=!1,a=o(function(g){return g==null?g:""+g},"toString");if(t.source!==void 0||t.target!==void 0){var s=a(t.source),l=a(t.target),u=s!=null&&e.hasElementWithId(s),h=l!=null&&e.hasElementWithId(l);(u||h)&&(e.batch(function(){r.remove(n,i),r.emitAndNotify("moveout");for(var m=0;m<r.length;m++){var g=r[m],y=g._private.data;g.isEdge()&&(u&&(y.source=s),h&&(y.target=l))}r.restore(n,i)}),r.emitAndNotify("move"))}else if(t.parent!==void 0){var f=a(t.parent),d=f===null||e.hasElementWithId(f);if(d){var p=f===null?void 0:f;e.batch(function(){var m=r.remove(n,i);m.emitAndNotify("moveout");for(var g=0;g<r.length;g++){var y=r[g],v=y._private.data;y.isNode()&&(v.parent=p)}m.restore(n,i)}),r.emitAndNotify("move")}}return this};[Sme,Zje,hS,Sf,Z1,pKe,FS,LKe,Kme,Qme,OKe,ES,fS,Ta,Cf,$a].forEach(function(t){rr(Mn,t)});VKe={add:o(function(e){var r,n=this;if(go(e)){var i=e;if(i._private.cy===n)r=i.restore();else{for(var a=[],s=0;s<i.length;s++){var l=i[s];a.push(l.json())}r=new ka(n,a)}}else if(En(e)){var u=e;r=new ka(n,u)}else if(Ur(e)&&(En(e.nodes)||En(e.edges))){for(var h=e,f=[],d=["nodes","edges"],p=0,m=d.length;p<m;p++){var g=d[p],y=h[g];if(En(y))for(var v=0,x=y.length;v<x;v++){var b=rr({group:g},y[v]);f.push(b)}}r=new ka(n,f)}else{var w=e;r=new NS(n,w).collection()}return r},"add"),remove:o(function(e){if(!go(e)){if(Zt(e)){var r=e;e=this.$(r)}}return e.remove()},"remove")};o(UKe,"generateCubicBezier");HKe=function(){function t(n){return-n.tension*n.x-n.friction*n.v}o(t,"springAccelerationForState");function e(n,i,a){var s={x:n.x+a.dx*i,v:n.v+a.dv*i,tension:n.tension,friction:n.friction};return{dx:s.v,dv:t(s)}}o(e,"springEvaluateStateWithDerivative");function r(n,i){var a={dx:n.v,dv:t(n)},s=e(n,i*.5,a),l=e(n,i*.5,s),u=e(n,i,l),h=1/6*(a.dx+2*(s.dx+l.dx)+u.dx),f=1/6*(a.dv+2*(s.dv+l.dv)+u.dv);return n.x=n.x+h*i,n.v=n.v+f*i,n}return o(r,"springIntegrateState"),o(function n(i,a,s){var l={x:-1,v:0,tension:null,friction:null},u=[0],h=0,f=1/1e4,d=16/1e3,p,m,g;for(i=parseFloat(i)||500,a=parseFloat(a)||20,s=s||null,l.tension=i,l.friction=a,p=s!==null,p?(h=n(i,a),m=h/s*d):m=d;g=r(g||l,m),u.push(1+g.x),h+=16,Math.abs(g.x)>f&&Math.abs(g.v)>f;);return p?function(y){return u[y*(u.length-1)|0]}:h},"springRK4Factory")}(),Nn=o(function(e,r,n,i){var a=UKe(e,r,n,i);return function(s,l,u){return s+(l-s)*a(u)}},"cubicBezier"),dS={linear:o(function(e,r,n){return e+(r-e)*n},"linear"),ease:Nn(.25,.1,.25,1),"ease-in":Nn(.42,0,1,1),"ease-out":Nn(0,0,.58,1),"ease-in-out":Nn(.42,0,.58,1),"ease-in-sine":Nn(.47,0,.745,.715),"ease-out-sine":Nn(.39,.575,.565,1),"ease-in-out-sine":Nn(.445,.05,.55,.95),"ease-in-quad":Nn(.55,.085,.68,.53),"ease-out-quad":Nn(.25,.46,.45,.94),"ease-in-out-quad":Nn(.455,.03,.515,.955),"ease-in-cubic":Nn(.55,.055,.675,.19),"ease-out-cubic":Nn(.215,.61,.355,1),"ease-in-out-cubic":Nn(.645,.045,.355,1),"ease-in-quart":Nn(.895,.03,.685,.22),"ease-out-quart":Nn(.165,.84,.44,1),"ease-in-out-quart":Nn(.77,0,.175,1),"ease-in-quint":Nn(.755,.05,.855,.06),"ease-out-quint":Nn(.23,1,.32,1),"ease-in-out-quint":Nn(.86,0,.07,1),"ease-in-expo":Nn(.95,.05,.795,.035),"ease-out-expo":Nn(.19,1,.22,1),"ease-in-out-expo":Nn(1,0,0,1),"ease-in-circ":Nn(.6,.04,.98,.335),"ease-out-circ":Nn(.075,.82,.165,1),"ease-in-out-circ":Nn(.785,.135,.15,.86),spring:o(function(e,r,n){if(n===0)return dS.linear;var i=HKe(e,r,n);return function(a,s,l){return a+(s-a)*i(l)}},"spring"),"cubic-bezier":Nn};o(x0e,"getEasedValue");o(b0e,"getValue");o($1,"ease");o(WKe,"step$1");o(Rb,"valid");o(qKe,"startAnimation");o(w0e,"stepAll");YKe={animate:cn.animate(),animation:cn.animation(),animated:cn.animated(),clearQueue:cn.clearQueue(),delay:cn.delay(),delayAnimation:cn.delayAnimation(),stop:cn.stop(),addToAnimationPool:o(function(e){var r=this;r.styleEnabled()&&r._private.aniEles.merge(e)},"addToAnimationPool"),stopAnimationLoop:o(function(){this._private.animationsRunning=!1},"stopAnimationLoop"),startAnimationLoop:o(function(){var e=this;if(e._private.animationsRunning=!0,!e.styleEnabled())return;function r(){e._private.animationsRunning&&xS(o(function(a){w0e(a,e),r()},"animationStep"))}o(r,"headlessStep");var n=e.renderer();n&&n.beforeRender?n.beforeRender(o(function(a,s){w0e(s,e)},"rendererAnimationStep"),n.beforeRenderPriorities.animations):r()},"startAnimationLoop")},XKe={qualifierCompare:o(function(e,r){return e==null||r==null?e==null&&r==null:e.sameText(r)},"qualifierCompare"),eventMatches:o(function(e,r,n){var i=r.qualifier;return i!=null?e!==n.target&&t4(n.target)&&i.matches(n.target):!0},"eventMatches"),addEventFields:o(function(e,r){r.cy=e,r.target=e},"addEventFields"),callbackContext:o(function(e,r,n){return r.qualifier!=null?n.target:e},"callbackContext")},iS=o(function(e){return Zt(e)?new Lf(e):e},"argSelector"),ege={createEmitter:o(function(){var e=this._private;return e.emitter||(e.emitter=new $S(XKe,this)),this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(e,r,n){return this.emitter().on(e,iS(r),n),this},"on"),removeListener:o(function(e,r,n){return this.emitter().removeListener(e,iS(r),n),this},"removeListener"),removeAllListeners:o(function(){return this.emitter().removeAllListeners(),this},"removeAllListeners"),one:o(function(e,r,n){return this.emitter().one(e,iS(r),n),this},"one"),once:o(function(e,r,n){return this.emitter().one(e,iS(r),n),this},"once"),emit:o(function(e,r){return this.emitter().emit(e,r),this},"emit"),emitAndNotify:o(function(e,r){return this.emit(e),this.notify(e,r),this},"emitAndNotify")};cn.eventAliasesOn(ege);VP={png:o(function(e){var r=this._private.renderer;return e=e||{},r.png(e)},"png"),jpg:o(function(e){var r=this._private.renderer;return e=e||{},e.bg=e.bg||"#fff",r.jpg(e)},"jpg")};VP.jpeg=VP.jpg;pS={layout:o(function(e){var r=this;if(e==null){ai("Layout options must be specified to make a layout");return}if(e.name==null){ai("A `name` must be specified to make a layout");return}var n=e.name,i=r.extension("layout",n);if(i==null){ai("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var a;Zt(e.eles)?a=r.$(e.eles):a=e.eles!=null?e.eles:r.$();var s=new i(rr({},e,{cy:r,eles:a}));return s},"layout")};pS.createLayout=pS.makeLayout=pS.layout;jKe={notify:o(function(e,r){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var i=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();r!=null&&i.merge(r);return}if(n.notificationsEnabled){var a=this.renderer();this.destroyed()||!a||a.notify(e,r)}},"notify"),notifications:o(function(e){var r=this._private;return e===void 0?r.notificationsEnabled:(r.notificationsEnabled=!!e,this)},"notifications"),noNotifications:o(function(e){this.notifications(!1),e(),this.notifications(!0)},"noNotifications"),batching:o(function(){return this._private.batchCount>0},"batching"),startBatch:o(function(){var e=this._private;return e.batchCount==null&&(e.batchCount=0),e.batchCount===0&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},"startBatch"),endBatch:o(function(){var e=this._private;if(e.batchCount===0)return this;if(e.batchCount--,e.batchCount===0){e.batchStyleEles.updateStyle();var r=this.renderer();Object.keys(e.batchNotifications).forEach(function(n){var i=e.batchNotifications[n];i.empty()?r.notify(n):r.notify(n,i)})}return this},"endBatch"),batch:o(function(e){return this.startBatch(),e(),this.endBatch(),this},"batch"),batchData:o(function(e){var r=this;return this.batch(function(){for(var n=Object.keys(e),i=0;i<n.length;i++){var a=n[i],s=e[a],l=r.getElementById(a);l.data(s)}})},"batchData")},KKe=la({hideEdgesOnViewport:!1,textureOnViewport:!1,motionBlur:!1,motionBlurOpacity:.05,pixelRatio:void 0,desktopTapThreshold:4,touchTapThreshold:8,wheelSensitivity:1,debug:!1,showFps:!1,webgl:!1,webglDebug:!1,webglDebugShowAtlases:!1,webglTexSize:2048,webglTexRows:12,webglBatchSize:2048,webglTexPerBatch:14,webglBgColor:[255,255,255]}),UP={renderTo:o(function(e,r,n,i){var a=this._private.renderer;return a.renderTo(e,r,n,i),this},"renderTo"),renderer:o(function(){return this._private.renderer},"renderer"),forceRender:o(function(){return this.notify("draw"),this},"forceRender"),resize:o(function(){return this.invalidateSize(),this.emitAndNotify("resize"),this},"resize"),initRenderer:o(function(e){var r=this,n=r.extension("renderer",e.name);if(n==null){ai("Can not initialise: No such renderer `".concat(e.name,"` found. Did you forget to import it and `cytoscape.use()` it?"));return}e.wheelSensitivity!==void 0&&un("You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine.");var i=KKe(e);i.cy=r,r._private.renderer=new n(i),this.notify("init")},"initRenderer"),destroyRenderer:o(function(){var e=this;e.notify("destroy");var r=e.container();if(r)for(r._cyreg=null;r.childNodes.length>0;)r.removeChild(r.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach(function(n){var i=n._private;i.rscratch={},i.rstyle={},i.animation.current=[],i.animation.queue=[]})},"destroyRenderer"),onRender:o(function(e){return this.on("render",e)},"onRender"),offRender:o(function(e){return this.off("render",e)},"offRender")};UP.invalidateDimensions=UP.resize;mS={collection:o(function(e,r){return Zt(e)?this.$(e):go(e)?e.collection():En(e)?(r||(r={}),new ka(this,e,r.unique,r.removed)):new ka(this)},"collection"),nodes:o(function(e){var r=this.$(function(n){return n.isNode()});return e?r.filter(e):r},"nodes"),edges:o(function(e){var r=this.$(function(n){return n.isEdge()});return e?r.filter(e):r},"edges"),$:o(function(e){var r=this._private.elements;return e?r.filter(e):r.spawnSelf()},"$"),mutableElements:o(function(){return this._private.elements},"mutableElements")};mS.elements=mS.filter=mS.$;Ga={},$b="t",QKe="f";Ga.apply=function(t){for(var e=this,r=e._private,n=r.cy,i=n.collection(),a=0;a<t.length;a++){var s=t[a],l=e.getContextMeta(s);if(!l.empty){var u=e.getContextStyle(l),h=e.applyContextStyle(l,u,s);s._private.appliedInitStyle?e.updateTransitions(s,h.diffProps):s._private.appliedInitStyle=!0;var f=e.updateStyleHints(s);f&&i.push(s)}}return i};Ga.getPropertiesDiff=function(t,e){var r=this,n=r._private.propDiffs=r._private.propDiffs||{},i=t+"-"+e,a=n[i];if(a)return a;for(var s=[],l={},u=0;u<r.length;u++){var h=r[u],f=t[u]===$b,d=e[u]===$b,p=f!==d,m=h.mappedProperties.length>0;if(p||d&&m){var g=void 0;p&&m||p?g=h.properties:m&&(g=h.mappedProperties);for(var y=0;y<g.length;y++){for(var v=g[y],x=v.name,b=!1,w=u+1;w<r.length;w++){var C=r[w],T=e[w]===$b;if(T&&(b=C.properties[v.name]!=null,b))break}!l[x]&&!b&&(l[x]=!0,s.push(x))}}}return n[i]=s,s};Ga.getContextMeta=function(t){for(var e=this,r="",n,i=t._private.styleCxtKey||"",a=0;a<e.length;a++){var s=e[a],l=s.selector&&s.selector.matches(t);l?r+=$b:r+=QKe}return n=e.getPropertiesDiff(i,r),t._private.styleCxtKey=r,{key:r,diffPropNames:n,empty:n.length===0}};Ga.getContextStyle=function(t){var e=t.key,r=this,n=this._private.contextStyles=this._private.contextStyles||{};if(n[e])return n[e];for(var i={_private:{key:e}},a=0;a<r.length;a++){var s=r[a],l=e[a]===$b;if(l)for(var u=0;u<s.properties.length;u++){var h=s.properties[u];i[h.name]=h}}return n[e]=i,i};Ga.applyContextStyle=function(t,e,r){for(var n=this,i=t.diffPropNames,a={},s=n.types,l=0;l<i.length;l++){var u=i[l],h=e[u],f=r.pstyle(u);if(!h)if(f)f.bypass?h={name:u,deleteBypassed:!0}:h={name:u,delete:!0};else continue;if(f!==h){if(h.mapped===s.fn&&f!=null&&f.mapping!=null&&f.mapping.value===h.value){var d=f.mapping,p=d.fnValue=h.value(r);if(p===d.prevFnValue)continue}var m=a[u]={prev:f};n.applyParsedProperty(r,h),m.next=r.pstyle(u),m.next&&m.next.bypass&&(m.next=m.next.bypassed)}}return{diffProps:a}};Ga.updateStyleHints=function(t){var e=t._private,r=this,n=r.propertyGroupNames,i=r.propertyGroupKeys,a=o(function(te,J,se){return r.getPropertiesHash(te,J,se)},"propHash"),s=e.styleKey;if(t.removed())return!1;var l=e.group==="nodes",u=t._private.style;n=Object.keys(u);for(var h=0;h<i.length;h++){var f=i[h];e.styleKeys[f]=[V1,Ob]}for(var d=o(function(te,J){return e.styleKeys[J][0]=Hb(te,e.styleKeys[J][0])},"updateGrKey1"),p=o(function(te,J){return e.styleKeys[J][1]=Wb(te,e.styleKeys[J][1])},"updateGrKey2"),m=o(function(te,J){d(te,J),p(te,J)},"updateGrKey"),g=o(function(te,J){for(var se=0;se<te.length;se++){var ue=te.charCodeAt(se);d(ue,J),p(ue,J)}},"updateGrKeyWStr"),y=2e9,v=o(function(te){return-128<te&&te<128&&Math.floor(te)!==te?y-(te*1024|0):te},"cleanNum"),x=0;x<n.length;x++){var b=n[x],w=u[b];if(w!=null){var C=this.properties[b],T=C.type,E=C.groupKey,A=void 0;C.hashOverride!=null?A=C.hashOverride(t,w):w.pfValue!=null&&(A=w.pfValue);var S=C.enums==null?w.value:null,_=A!=null,I=S!=null,D=_||I,k=w.units;if(T.number&&D&&!T.multiple){var L=_?A:S;m(v(L),E),!_&&k!=null&&g(k,E)}else g(w.strValue,E)}}for(var R=[V1,Ob],O=0;O<i.length;O++){var M=i[O],B=e.styleKeys[M];R[0]=Hb(B[0],R[0]),R[1]=Wb(B[1],R[1])}e.styleKey=rqe(R[0],R[1]);var F=e.styleKeys;e.labelDimsKey=wf(F.labelDimensions);var P=a(t,["label"],F.labelDimensions);if(e.labelKey=wf(P),e.labelStyleKey=wf(j6(F.commonLabel,P)),!l){var z=a(t,["source-label"],F.labelDimensions);e.sourceLabelKey=wf(z),e.sourceLabelStyleKey=wf(j6(F.commonLabel,z));var $=a(t,["target-label"],F.labelDimensions);e.targetLabelKey=wf($),e.targetLabelStyleKey=wf(j6(F.commonLabel,$))}if(l){var H=e.styleKeys,Q=H.nodeBody,j=H.nodeBorder,ie=H.nodeOutline,ne=H.backgroundImage,le=H.compound,he=H.pie,K=[Q,j,ie,ne,le,he].filter(function(X){return X!=null}).reduce(j6,[V1,Ob]);e.nodeKey=wf(K),e.hasPie=he!=null&&he[0]!==V1&&he[1]!==Ob}return s!==e.styleKey};Ga.clearStyleHints=function(t){var e=t._private;e.styleCxtKey="",e.styleKeys={},e.styleKey=null,e.labelKey=null,e.labelStyleKey=null,e.sourceLabelKey=null,e.sourceLabelStyleKey=null,e.targetLabelKey=null,e.targetLabelStyleKey=null,e.nodeKey=null,e.hasPie=null};Ga.applyParsedProperty=function(t,e){var r=this,n=e,i=t._private.style,a,s=r.types,l=r.properties[n.name].type,u=n.bypass,h=i[n.name],f=h&&h.bypass,d=t._private,p="mapping",m=o(function(Q){return Q==null?null:Q.pfValue!=null?Q.pfValue:Q.value},"getVal"),g=o(function(){var Q=m(h),j=m(n);r.checkTriggers(t,n.name,Q,j)},"checkTriggers");if(e.name==="curve-style"&&t.isEdge()&&(e.value!=="bezier"&&t.isLoop()||e.value==="haystack"&&(t.source().isParent()||t.target().isParent()))&&(n=e=this.parse(e.name,"bezier",u)),n.delete)return i[n.name]=void 0,g(),!0;if(n.deleteBypassed)return h?h.bypass?(h.bypassed=void 0,g(),!0):!1:(g(),!0);if(n.deleteBypass)return h?h.bypass?(i[n.name]=h.bypassed,g(),!0):!1:(g(),!0);var y=o(function(){un("Do not assign mappings to elements without corresponding data (i.e. ele `"+t.id()+"` has no mapping for property `"+n.name+"` with data field `"+n.field+"`); try a `["+n.field+"]` selector to limit scope to elements with `"+n.field+"` defined")},"printMappingErr");switch(n.mapped){case s.mapData:{for(var v=n.field.split("."),x=d.data,b=0;b<v.length&&x;b++){var w=v[b];x=x[w]}if(x==null)return y(),!1;var C;if(Ct(x)){var T=n.fieldMax-n.fieldMin;T===0?C=0:C=(x-n.fieldMin)/T}else return un("Do not use continuous mappers without specifying numeric data (i.e. `"+n.field+": "+x+"` for `"+t.id()+"` is non-numeric)"),!1;if(C<0?C=0:C>1&&(C=1),l.color){var E=n.valueMin[0],A=n.valueMax[0],S=n.valueMin[1],_=n.valueMax[1],I=n.valueMin[2],D=n.valueMax[2],k=n.valueMin[3]==null?1:n.valueMin[3],L=n.valueMax[3]==null?1:n.valueMax[3],R=[Math.round(E+(A-E)*C),Math.round(S+(_-S)*C),Math.round(I+(D-I)*C),Math.round(k+(L-k)*C)];a={bypass:n.bypass,name:n.name,value:R,strValue:"rgb("+R[0]+", "+R[1]+", "+R[2]+")"}}else if(l.number){var O=n.valueMin+(n.valueMax-n.valueMin)*C;a=this.parse(n.name,O,n.bypass,p)}else return!1;if(!a)return y(),!1;a.mapping=n,n=a;break}case s.data:{for(var M=n.field.split("."),B=d.data,F=0;F<M.length&&B;F++){var P=M[F];B=B[P]}if(B!=null&&(a=this.parse(n.name,B,n.bypass,p)),!a)return y(),!1;a.mapping=n,n=a;break}case s.fn:{var z=n.value,$=n.fnValue!=null?n.fnValue:z(t);if(n.prevFnValue=$,$==null)return un("Custom function mappers may not return null (i.e. `"+n.name+"` for ele `"+t.id()+"` is null)"),!1;if(a=this.parse(n.name,$,n.bypass,p),!a)return un("Custom function mappers may not return invalid values for the property type (i.e. `"+n.name+"` for ele `"+t.id()+"` is invalid)"),!1;a.mapping=Yc(n),n=a;break}case void 0:break;default:return!1}return u?(f?n.bypassed=h.bypassed:n.bypassed=h,i[n.name]=n):f?h.bypassed=n:i[n.name]=n,g(),!0};Ga.cleanElements=function(t,e){for(var r=0;r<t.length;r++){var n=t[r];if(this.clearStyleHints(n),n.dirtyCompoundBoundsCache(),n.dirtyBoundingBoxCache(),!e)n._private.style={};else for(var i=n._private.style,a=Object.keys(i),s=0;s<a.length;s++){var l=a[s],u=i[l];u!=null&&(u.bypass?u.bypassed=null:i[l]=null)}}};Ga.update=function(){var t=this._private.cy,e=t.mutableElements();e.updateStyle()};Ga.updateTransitions=function(t,e){var r=this,n=t._private,i=t.pstyle("transition-property").value,a=t.pstyle("transition-duration").pfValue,s=t.pstyle("transition-delay").pfValue;if(i.length>0&&a>0){for(var l={},u=!1,h=0;h<i.length;h++){var f=i[h],d=t.pstyle(f),p=e[f];if(p){var m=p.prev,g=m,y=p.next!=null?p.next:d,v=!1,x=void 0,b=1e-6;g&&(Ct(g.pfValue)&&Ct(y.pfValue)?(v=y.pfValue-g.pfValue,x=g.pfValue+b*v):Ct(g.value)&&Ct(y.value)?(v=y.value-g.value,x=g.value+b*v):En(g.value)&&En(y.value)&&(v=g.value[0]!==y.value[0]||g.value[1]!==y.value[1]||g.value[2]!==y.value[2],x=g.strValue),v&&(l[f]=y.strValue,this.applyBypass(t,f,x),u=!0))}}if(!u)return;n.transitioning=!0,new ey(function(w){s>0?t.delayAnimation(s).play().promise().then(w):w()}).then(function(){return t.animation({style:l,duration:a,easing:t.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){r.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1})}else n.transitioning&&(this.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1)};Ga.checkTrigger=function(t,e,r,n,i,a){var s=this.properties[e],l=i(s);l!=null&&l(r,n)&&a(s)};Ga.checkZOrderTrigger=function(t,e,r,n){var i=this;this.checkTrigger(t,e,r,n,function(a){return a.triggersZOrder},function(){i._private.cy.notify("zorder",t)})};Ga.checkBoundsTrigger=function(t,e,r,n){this.checkTrigger(t,e,r,n,function(i){return i.triggersBounds},function(i){t.dirtyCompoundBoundsCache(),t.dirtyBoundingBoxCache(),i.triggersBoundsOfParallelBeziers&&e==="curve-style"&&(r==="bezier"||n==="bezier")&&t.parallelEdges().forEach(function(a){a.dirtyBoundingBoxCache()}),i.triggersBoundsOfConnectedEdges&&e==="display"&&(r==="none"||n==="none")&&t.connectedEdges().forEach(function(a){a.dirtyBoundingBoxCache()})})};Ga.checkTriggers=function(t,e,r,n){t.dirtyStyleCache(),this.checkZOrderTrigger(t,e,r,n),this.checkBoundsTrigger(t,e,r,n)};s4={};s4.applyBypass=function(t,e,r,n){var i=this,a=[],s=!0;if(e==="*"||e==="**"){if(r!==void 0)for(var l=0;l<i.properties.length;l++){var u=i.properties[l],h=u.name,f=this.parse(h,r,!0);f&&a.push(f)}}else if(Zt(e)){var d=this.parse(e,r,!0);d&&a.push(d)}else if(Ur(e)){var p=e;n=r;for(var m=Object.keys(p),g=0;g<m.length;g++){var y=m[g],v=p[y];if(v===void 0&&(v=p[LS(y)]),v!==void 0){var x=this.parse(y,v,!0);x&&a.push(x)}}}else return!1;if(a.length===0)return!1;for(var b=!1,w=0;w<t.length;w++){for(var C=t[w],T={},E=void 0,A=0;A<a.length;A++){var S=a[A];if(n){var _=C.pstyle(S.name);E=T[S.name]={prev:_}}b=this.applyParsedProperty(C,Yc(S))||b,n&&(E.next=C.pstyle(S.name))}b&&this.updateStyleHints(C),n&&this.updateTransitions(C,T,s)}return b};s4.overrideBypass=function(t,e,r){e=eB(e);for(var n=0;n<t.length;n++){var i=t[n],a=i._private.style[e],s=this.properties[e].type,l=s.color,u=s.mutiple,h=a?a.pfValue!=null?a.pfValue:a.value:null;!a||!a.bypass?this.applyBypass(i,e,r):(a.value=r,a.pfValue!=null&&(a.pfValue=r),l?a.strValue="rgb("+r.join(",")+")":u?a.strValue=r.join(" "):a.strValue=""+r,this.updateStyleHints(i)),this.checkTriggers(i,e,h,r)}};s4.removeAllBypasses=function(t,e){return this.removeBypasses(t,this.propertyNames,e)};s4.removeBypasses=function(t,e,r){for(var n=!0,i=0;i<t.length;i++){for(var a=t[i],s={},l=0;l<e.length;l++){var u=e[l],h=this.properties[u],f=a.pstyle(h.name);if(!(!f||!f.bypass)){var d="",p=this.parse(u,d,!0),m=s[h.name]={prev:f};this.applyParsedProperty(a,p),m.next=a.pstyle(h.name)}}this.updateStyleHints(a),r&&this.updateTransitions(a,s,n)}};pB={};pB.getEmSizeInPixels=function(){var t=this.containerCss("font-size");return t!=null?parseFloat(t):1};pB.containerCss=function(t){var e=this._private.cy,r=e.container(),n=e.window();if(n&&r&&n.getComputedStyle)return n.getComputedStyle(r).getPropertyValue(t)};jc={};jc.getRenderedStyle=function(t,e){return e?this.getStylePropertyValue(t,e,!0):this.getRawStyle(t,!0)};jc.getRawStyle=function(t,e){var r=this;if(t=t[0],t){for(var n={},i=0;i<r.properties.length;i++){var a=r.properties[i],s=r.getStylePropertyValue(t,a.name,e);s!=null&&(n[a.name]=s,n[LS(a.name)]=s)}return n}};jc.getIndexedStyle=function(t,e,r,n){var i=t.pstyle(e)[r][n];return i??t.cy().style().getDefaultProperty(e)[r][0]};jc.getStylePropertyValue=function(t,e,r){var n=this;if(t=t[0],t){var i=n.properties[e];i.alias&&(i=i.pointsTo);var a=i.type,s=t.pstyle(i.name);if(s){var l=s.value,u=s.units,h=s.strValue;if(r&&a.number&&l!=null&&Ct(l)){var f=t.cy().zoom(),d=o(function(v){return v*f},"getRenderedValue"),p=o(function(v,x){return d(v)+x},"getValueStringWithUnits"),m=En(l),g=m?u.every(function(y){return y!=null}):u!=null;return g?m?l.map(function(y,v){return p(y,u[v])}).join(" "):p(l,u):m?l.map(function(y){return Zt(y)?y:""+d(y)}).join(" "):""+d(l)}else if(h!=null)return h}return null}};jc.getAnimationStartStyle=function(t,e){for(var r={},n=0;n<e.length;n++){var i=e[n],a=i.name,s=t.pstyle(a);s!==void 0&&(Ur(s)?s=this.parse(a,s.strValue):s=this.parse(a,s)),s&&(r[a]=s)}return r};jc.getPropsList=function(t){var e=this,r=[],n=t,i=e.properties;if(n)for(var a=Object.keys(n),s=0;s<a.length;s++){var l=a[s],u=n[l],h=i[l]||i[eB(l)],f=this.parse(h.name,u);f&&r.push(f)}return r};jc.getNonDefaultPropertiesHash=function(t,e,r){var n=r.slice(),i,a,s,l,u,h;for(u=0;u<e.length;u++)if(i=e[u],a=t.pstyle(i,!1),a!=null)if(a.pfValue!=null)n[0]=Hb(l,n[0]),n[1]=Wb(l,n[1]);else for(s=a.strValue,h=0;h<s.length;h++)l=s.charCodeAt(h),n[0]=Hb(l,n[0]),n[1]=Wb(l,n[1]);return n};jc.getPropertiesHash=jc.getNonDefaultPropertiesHash;VS={};VS.appendFromJson=function(t){for(var e=this,r=0;r<t.length;r++){var n=t[r],i=n.selector,a=n.style||n.css,s=Object.keys(a);e.selector(i);for(var l=0;l<s.length;l++){var u=s[l],h=a[u];e.css(u,h)}}return e};VS.fromJson=function(t){var e=this;return e.resetToDefault(),e.appendFromJson(t),e};VS.json=function(){for(var t=[],e=this.defaultLength;e<this.length;e++){for(var r=this[e],n=r.selector,i=r.properties,a={},s=0;s<i.length;s++){var l=i[s];a[l.name]=l.strValue}t.push({selector:n?n.toString():"core",style:a})}return t};mB={};mB.appendFromString=function(t){var e=this,r=this,n=""+t,i,a,s;n=n.replace(/[/][*](\s|.)+?[*][/]/g,"");function l(){n.length>i.length?n=n.substr(i.length):n=""}o(l,"removeSelAndBlockFromRemaining");function u(){a.length>s.length?a=a.substr(s.length):a=""}for(o(u,"removePropAndValFromRem");;){var h=n.match(/^\s*$/);if(h)break;var f=n.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!f){un("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+n);break}i=f[0];var d=f[1];if(d!=="core"){var p=new Lf(d);if(p.invalid){un("Skipping parsing of block: Invalid selector found in string stylesheet: "+d),l();continue}}var m=f[2],g=!1;a=m;for(var y=[];;){var v=a.match(/^\s*$/);if(v)break;var x=a.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!x){un("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+m),g=!0;break}s=x[0];var b=x[1],w=x[2],C=e.properties[b];if(!C){un("Skipping property: Invalid property name in: "+s),u();continue}var T=r.parse(b,w);if(!T){un("Skipping property: Invalid property definition in: "+s),u();continue}y.push({name:b,val:w}),u()}if(g){l();break}r.selector(d);for(var E=0;E<y.length;E++){var A=y[E];r.css(A.name,A.val)}l()}return r};mB.fromString=function(t){var e=this;return e.resetToDefault(),e.appendFromString(t),e};wa={};(function(){var t=Hi,e=sWe,r=lWe,n=cWe,i=uWe,a=o(function(K){return"^"+K+"\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"},"data"),s=o(function(K){var X=t+"|\\w+|"+e+"|"+r+"|"+n+"|"+i;return"^"+K+"\\s*\\(([\\w\\.]+)\\s*\\,\\s*("+t+")\\s*\\,\\s*("+t+")\\s*,\\s*("+X+")\\s*\\,\\s*("+X+")\\)$"},"mapData"),l=[`^url\\s*\\(\\s*['"]?(.+?)['"]?\\s*\\)$`,"^(none)$","^(.+)$"];wa.types={time:{number:!0,min:0,units:"s|ms",implicitUnits:"ms"},percent:{number:!0,min:0,max:100,units:"%",implicitUnits:"%"},percentages:{number:!0,min:0,max:100,units:"%",implicitUnits:"%",multiple:!0},zeroOneNumber:{number:!0,min:0,max:1,unitless:!0},zeroOneNumbers:{number:!0,min:0,max:1,unitless:!0,multiple:!0},nOneOneNumber:{number:!0,min:-1,max:1,unitless:!0},nonNegativeInt:{number:!0,min:0,integer:!0,unitless:!0},nonNegativeNumber:{number:!0,min:0,unitless:!0},position:{enums:["parent","origin"]},nodeSize:{number:!0,min:0,enums:["label"]},number:{number:!0,unitless:!0},numbers:{number:!0,unitless:!0,multiple:!0},positiveNumber:{number:!0,unitless:!0,min:0,strictMin:!0},size:{number:!0,min:0},bidirectionalSize:{number:!0},bidirectionalSizeMaybePercent:{number:!0,allowPercent:!0},bidirectionalSizes:{number:!0,multiple:!0},sizeMaybePercent:{number:!0,min:0,allowPercent:!0},axisDirection:{enums:["horizontal","leftward","rightward","vertical","upward","downward","auto"]},paddingRelativeTo:{enums:["width","height","average","min","max"]},bgWH:{number:!0,min:0,allowPercent:!0,enums:["auto"],multiple:!0},bgPos:{number:!0,allowPercent:!0,multiple:!0},bgRelativeTo:{enums:["inner","include-padding"],multiple:!0},bgRepeat:{enums:["repeat","repeat-x","repeat-y","no-repeat"],multiple:!0},bgFit:{enums:["none","contain","cover"],multiple:!0},bgCrossOrigin:{enums:["anonymous","use-credentials","null"],multiple:!0},bgClip:{enums:["none","node"],multiple:!0},bgContainment:{enums:["inside","over"],multiple:!0},color:{color:!0},colors:{color:!0,multiple:!0},fill:{enums:["solid","linear-gradient","radial-gradient"]},bool:{enums:["yes","no"]},bools:{enums:["yes","no"],multiple:!0},lineStyle:{enums:["solid","dotted","dashed"]},lineCap:{enums:["butt","round","square"]},linePosition:{enums:["center","inside","outside"]},lineJoin:{enums:["round","bevel","miter"]},borderStyle:{enums:["solid","dotted","dashed","double"]},curveStyle:{enums:["bezier","unbundled-bezier","haystack","segments","straight","straight-triangle","taxi","round-segments","round-taxi"]},radiusType:{enums:["arc-radius","influence-radius"],multiple:!0},fontFamily:{regex:'^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$'},fontStyle:{enums:["italic","normal","oblique"]},fontWeight:{enums:["normal","bold","bolder","lighter","100","200","300","400","500","600","800","900",100,200,300,400,500,600,700,800,900]},textDecoration:{enums:["none","underline","overline","line-through"]},textTransform:{enums:["none","uppercase","lowercase"]},textWrap:{enums:["none","wrap","ellipsis"]},textOverflowWrap:{enums:["whitespace","anywhere"]},textBackgroundShape:{enums:["rectangle","roundrectangle","round-rectangle"]},nodeShape:{enums:["rectangle","roundrectangle","round-rectangle","cutrectangle","cut-rectangle","bottomroundrectangle","bottom-round-rectangle","barrel","ellipse","triangle","round-triangle","square","pentagon","round-pentagon","hexagon","round-hexagon","concavehexagon","concave-hexagon","heptagon","round-heptagon","octagon","round-octagon","tag","round-tag","star","diamond","round-diamond","vee","rhomboid","right-rhomboid","polygon"]},overlayShape:{enums:["roundrectangle","round-rectangle","ellipse"]},cornerRadius:{number:!0,min:0,units:"px|em",implicitUnits:"px",enums:["auto"]},compoundIncludeLabels:{enums:["include","exclude"]},arrowShape:{enums:["tee","triangle","triangle-tee","circle-triangle","triangle-cross","triangle-backcurve","vee","square","circle","diamond","chevron","none"]},arrowFill:{enums:["filled","hollow"]},arrowWidth:{number:!0,units:"%|px|em",implicitUnits:"px",enums:["match-line"]},display:{enums:["element","none"]},visibility:{enums:["hidden","visible"]},zCompoundDepth:{enums:["bottom","orphan","auto","top"]},zIndexCompare:{enums:["auto","manual"]},valign:{enums:["top","center","bottom"]},halign:{enums:["left","center","right"]},justification:{enums:["left","center","right","auto"]},text:{string:!0},data:{mapping:!0,regex:a("data")},layoutData:{mapping:!0,regex:a("layoutData")},scratch:{mapping:!0,regex:a("scratch")},mapData:{mapping:!0,regex:s("mapData")},mapLayoutData:{mapping:!0,regex:s("mapLayoutData")},mapScratch:{mapping:!0,regex:s("mapScratch")},fn:{mapping:!0,fn:!0},url:{regexes:l,singleRegexMatchValue:!0},urls:{regexes:l,singleRegexMatchValue:!0,multiple:!0},propList:{propList:!0},angle:{number:!0,units:"deg|rad",implicitUnits:"rad"},textRotation:{number:!0,units:"deg|rad",implicitUnits:"rad",enums:["none","autorotate"]},polygonPointList:{number:!0,multiple:!0,evenMultiple:!0,min:-1,max:1,unitless:!0},edgeDistances:{enums:["intersection","node-position","endpoints"]},edgeEndpoint:{number:!0,multiple:!0,units:"%|px|em|deg|rad",implicitUnits:"px",enums:["inside-to-node","outside-to-node","outside-to-node-or-label","outside-to-line","outside-to-line-or-label"],singleEnum:!0,validate:o(function(K,X){switch(K.length){case 2:return X[0]!=="deg"&&X[0]!=="rad"&&X[1]!=="deg"&&X[1]!=="rad";case 1:return Zt(K[0])||X[0]==="deg"||X[0]==="rad";default:return!1}},"validate")},easing:{regexes:["^(spring)\\s*\\(\\s*("+t+")\\s*,\\s*("+t+")\\s*\\)$","^(cubic-bezier)\\s*\\(\\s*("+t+")\\s*,\\s*("+t+")\\s*,\\s*("+t+")\\s*,\\s*("+t+")\\s*\\)$"],enums:["linear","ease","ease-in","ease-out","ease-in-out","ease-in-sine","ease-out-sine","ease-in-out-sine","ease-in-quad","ease-out-quad","ease-in-out-quad","ease-in-cubic","ease-out-cubic","ease-in-out-cubic","ease-in-quart","ease-out-quart","ease-in-out-quart","ease-in-quint","ease-out-quint","ease-in-out-quint","ease-in-expo","ease-out-expo","ease-in-out-expo","ease-in-circ","ease-out-circ","ease-in-out-circ"]},gradientDirection:{enums:["to-bottom","to-top","to-left","to-right","to-bottom-right","to-bottom-left","to-top-right","to-top-left","to-right-bottom","to-left-bottom","to-right-top","to-left-top"]},boundsExpansion:{number:!0,multiple:!0,min:0,validate:o(function(K){var X=K.length;return X===1||X===2||X===4},"validate")}};var u={zeroNonZero:o(function(K,X){return(K==null||X==null)&&K!==X||K==0&&X!=0?!0:K!=0&&X==0},"zeroNonZero"),any:o(function(K,X){return K!=X},"any"),emptyNonEmpty:o(function(K,X){var te=Af(K),J=Af(X);return te&&!J||!te&&J},"emptyNonEmpty")},h=wa.types,f=[{name:"label",type:h.text,triggersBounds:u.any,triggersZOrder:u.emptyNonEmpty},{name:"text-rotation",type:h.textRotation,triggersBounds:u.any},{name:"text-margin-x",type:h.bidirectionalSize,triggersBounds:u.any},{name:"text-margin-y",type:h.bidirectionalSize,triggersBounds:u.any}],d=[{name:"source-label",type:h.text,triggersBounds:u.any},{name:"source-text-rotation",type:h.textRotation,triggersBounds:u.any},{name:"source-text-margin-x",type:h.bidirectionalSize,triggersBounds:u.any},{name:"source-text-margin-y",type:h.bidirectionalSize,triggersBounds:u.any},{name:"source-text-offset",type:h.size,triggersBounds:u.any}],p=[{name:"target-label",type:h.text,triggersBounds:u.any},{name:"target-text-rotation",type:h.textRotation,triggersBounds:u.any},{name:"target-text-margin-x",type:h.bidirectionalSize,triggersBounds:u.any},{name:"target-text-margin-y",type:h.bidirectionalSize,triggersBounds:u.any},{name:"target-text-offset",type:h.size,triggersBounds:u.any}],m=[{name:"font-family",type:h.fontFamily,triggersBounds:u.any},{name:"font-style",type:h.fontStyle,triggersBounds:u.any},{name:"font-weight",type:h.fontWeight,triggersBounds:u.any},{name:"font-size",type:h.size,triggersBounds:u.any},{name:"text-transform",type:h.textTransform,triggersBounds:u.any},{name:"text-wrap",type:h.textWrap,triggersBounds:u.any},{name:"text-overflow-wrap",type:h.textOverflowWrap,triggersBounds:u.any},{name:"text-max-width",type:h.size,triggersBounds:u.any},{name:"text-outline-width",type:h.size,triggersBounds:u.any},{name:"line-height",type:h.positiveNumber,triggersBounds:u.any}],g=[{name:"text-valign",type:h.valign,triggersBounds:u.any},{name:"text-halign",type:h.halign,triggersBounds:u.any},{name:"color",type:h.color},{name:"text-outline-color",type:h.color},{name:"text-outline-opacity",type:h.zeroOneNumber},{name:"text-background-color",type:h.color},{name:"text-background-opacity",type:h.zeroOneNumber},{name:"text-background-padding",type:h.size,triggersBounds:u.any},{name:"text-border-opacity",type:h.zeroOneNumber},{name:"text-border-color",type:h.color},{name:"text-border-width",type:h.size,triggersBounds:u.any},{name:"text-border-style",type:h.borderStyle,triggersBounds:u.any},{name:"text-background-shape",type:h.textBackgroundShape,triggersBounds:u.any},{name:"text-justification",type:h.justification}],y=[{name:"events",type:h.bool,triggersZOrder:u.any},{name:"text-events",type:h.bool,triggersZOrder:u.any}],v=[{name:"display",type:h.display,triggersZOrder:u.any,triggersBounds:u.any,triggersBoundsOfConnectedEdges:!0},{name:"visibility",type:h.visibility,triggersZOrder:u.any},{name:"opacity",type:h.zeroOneNumber,triggersZOrder:u.zeroNonZero},{name:"text-opacity",type:h.zeroOneNumber},{name:"min-zoomed-font-size",type:h.size},{name:"z-compound-depth",type:h.zCompoundDepth,triggersZOrder:u.any},{name:"z-index-compare",type:h.zIndexCompare,triggersZOrder:u.any},{name:"z-index",type:h.number,triggersZOrder:u.any}],x=[{name:"overlay-padding",type:h.size,triggersBounds:u.any},{name:"overlay-color",type:h.color},{name:"overlay-opacity",type:h.zeroOneNumber,triggersBounds:u.zeroNonZero},{name:"overlay-shape",type:h.overlayShape,triggersBounds:u.any},{name:"overlay-corner-radius",type:h.cornerRadius}],b=[{name:"underlay-padding",type:h.size,triggersBounds:u.any},{name:"underlay-color",type:h.color},{name:"underlay-opacity",type:h.zeroOneNumber,triggersBounds:u.zeroNonZero},{name:"underlay-shape",type:h.overlayShape,triggersBounds:u.any},{name:"underlay-corner-radius",type:h.cornerRadius}],w=[{name:"transition-property",type:h.propList},{name:"transition-duration",type:h.time},{name:"transition-delay",type:h.time},{name:"transition-timing-function",type:h.easing}],C=o(function(K,X){return X.value==="label"?-K.poolIndex():X.pfValue},"nodeSizeHashOverride"),T=[{name:"height",type:h.nodeSize,triggersBounds:u.any,hashOverride:C},{name:"width",type:h.nodeSize,triggersBounds:u.any,hashOverride:C},{name:"shape",type:h.nodeShape,triggersBounds:u.any},{name:"shape-polygon-points",type:h.polygonPointList,triggersBounds:u.any},{name:"corner-radius",type:h.cornerRadius},{name:"background-color",type:h.color},{name:"background-fill",type:h.fill},{name:"background-opacity",type:h.zeroOneNumber},{name:"background-blacken",type:h.nOneOneNumber},{name:"background-gradient-stop-colors",type:h.colors},{name:"background-gradient-stop-positions",type:h.percentages},{name:"background-gradient-direction",type:h.gradientDirection},{name:"padding",type:h.sizeMaybePercent,triggersBounds:u.any},{name:"padding-relative-to",type:h.paddingRelativeTo,triggersBounds:u.any},{name:"bounds-expansion",type:h.boundsExpansion,triggersBounds:u.any}],E=[{name:"border-color",type:h.color},{name:"border-opacity",type:h.zeroOneNumber},{name:"border-width",type:h.size,triggersBounds:u.any},{name:"border-style",type:h.borderStyle},{name:"border-cap",type:h.lineCap},{name:"border-join",type:h.lineJoin},{name:"border-dash-pattern",type:h.numbers},{name:"border-dash-offset",type:h.number},{name:"border-position",type:h.linePosition}],A=[{name:"outline-color",type:h.color},{name:"outline-opacity",type:h.zeroOneNumber},{name:"outline-width",type:h.size,triggersBounds:u.any},{name:"outline-style",type:h.borderStyle},{name:"outline-offset",type:h.size,triggersBounds:u.any}],S=[{name:"background-image",type:h.urls},{name:"background-image-crossorigin",type:h.bgCrossOrigin},{name:"background-image-opacity",type:h.zeroOneNumbers},{name:"background-image-containment",type:h.bgContainment},{name:"background-image-smoothing",type:h.bools},{name:"background-position-x",type:h.bgPos},{name:"background-position-y",type:h.bgPos},{name:"background-width-relative-to",type:h.bgRelativeTo},{name:"background-height-relative-to",type:h.bgRelativeTo},{name:"background-repeat",type:h.bgRepeat},{name:"background-fit",type:h.bgFit},{name:"background-clip",type:h.bgClip},{name:"background-width",type:h.bgWH},{name:"background-height",type:h.bgWH},{name:"background-offset-x",type:h.bgPos},{name:"background-offset-y",type:h.bgPos}],_=[{name:"position",type:h.position,triggersBounds:u.any},{name:"compound-sizing-wrt-labels",type:h.compoundIncludeLabels,triggersBounds:u.any},{name:"min-width",type:h.size,triggersBounds:u.any},{name:"min-width-bias-left",type:h.sizeMaybePercent,triggersBounds:u.any},{name:"min-width-bias-right",type:h.sizeMaybePercent,triggersBounds:u.any},{name:"min-height",type:h.size,triggersBounds:u.any},{name:"min-height-bias-top",type:h.sizeMaybePercent,triggersBounds:u.any},{name:"min-height-bias-bottom",type:h.sizeMaybePercent,triggersBounds:u.any}],I=[{name:"line-style",type:h.lineStyle},{name:"line-color",type:h.color},{name:"line-fill",type:h.fill},{name:"line-cap",type:h.lineCap},{name:"line-opacity",type:h.zeroOneNumber},{name:"line-dash-pattern",type:h.numbers},{name:"line-dash-offset",type:h.number},{name:"line-outline-width",type:h.size},{name:"line-outline-color",type:h.color},{name:"line-gradient-stop-colors",type:h.colors},{name:"line-gradient-stop-positions",type:h.percentages},{name:"curve-style",type:h.curveStyle,triggersBounds:u.any,triggersBoundsOfParallelBeziers:!0},{name:"haystack-radius",type:h.zeroOneNumber,triggersBounds:u.any},{name:"source-endpoint",type:h.edgeEndpoint,triggersBounds:u.any},{name:"target-endpoint",type:h.edgeEndpoint,triggersBounds:u.any},{name:"control-point-step-size",type:h.size,triggersBounds:u.any},{name:"control-point-distances",type:h.bidirectionalSizes,triggersBounds:u.any},{name:"control-point-weights",type:h.numbers,triggersBounds:u.any},{name:"segment-distances",type:h.bidirectionalSizes,triggersBounds:u.any},{name:"segment-weights",type:h.numbers,triggersBounds:u.any},{name:"segment-radii",type:h.numbers,triggersBounds:u.any},{name:"radius-type",type:h.radiusType,triggersBounds:u.any},{name:"taxi-turn",type:h.bidirectionalSizeMaybePercent,triggersBounds:u.any},{name:"taxi-turn-min-distance",type:h.size,triggersBounds:u.any},{name:"taxi-direction",type:h.axisDirection,triggersBounds:u.any},{name:"taxi-radius",type:h.number,triggersBounds:u.any},{name:"edge-distances",type:h.edgeDistances,triggersBounds:u.any},{name:"arrow-scale",type:h.positiveNumber,triggersBounds:u.any},{name:"loop-direction",type:h.angle,triggersBounds:u.any},{name:"loop-sweep",type:h.angle,triggersBounds:u.any},{name:"source-distance-from-node",type:h.size,triggersBounds:u.any},{name:"target-distance-from-node",type:h.size,triggersBounds:u.any}],D=[{name:"ghost",type:h.bool,triggersBounds:u.any},{name:"ghost-offset-x",type:h.bidirectionalSize,triggersBounds:u.any},{name:"ghost-offset-y",type:h.bidirectionalSize,triggersBounds:u.any},{name:"ghost-opacity",type:h.zeroOneNumber}],k=[{name:"selection-box-color",type:h.color},{name:"selection-box-opacity",type:h.zeroOneNumber},{name:"selection-box-border-color",type:h.color},{name:"selection-box-border-width",type:h.size},{name:"active-bg-color",type:h.color},{name:"active-bg-opacity",type:h.zeroOneNumber},{name:"active-bg-size",type:h.size},{name:"outside-texture-bg-color",type:h.color},{name:"outside-texture-bg-opacity",type:h.zeroOneNumber}],L=[];wa.pieBackgroundN=16,L.push({name:"pie-size",type:h.sizeMaybePercent});for(var R=1;R<=wa.pieBackgroundN;R++)L.push({name:"pie-"+R+"-background-color",type:h.color}),L.push({name:"pie-"+R+"-background-size",type:h.percent}),L.push({name:"pie-"+R+"-background-opacity",type:h.zeroOneNumber});var O=[],M=wa.arrowPrefixes=["source","mid-source","target","mid-target"];[{name:"arrow-shape",type:h.arrowShape,triggersBounds:u.any},{name:"arrow-color",type:h.color},{name:"arrow-fill",type:h.arrowFill},{name:"arrow-width",type:h.arrowWidth}].forEach(function(he){M.forEach(function(K){var X=K+"-"+he.name,te=he.type,J=he.triggersBounds;O.push({name:X,type:te,triggersBounds:J})})},{});var B=wa.properties=[].concat(y,w,v,x,b,D,g,m,f,d,p,T,E,A,S,L,_,I,O,k),F=wa.propertyGroups={behavior:y,transition:w,visibility:v,overlay:x,underlay:b,ghost:D,commonLabel:g,labelDimensions:m,mainLabel:f,sourceLabel:d,targetLabel:p,nodeBody:T,nodeBorder:E,nodeOutline:A,backgroundImage:S,pie:L,compound:_,edgeLine:I,edgeArrow:O,core:k},P=wa.propertyGroupNames={},z=wa.propertyGroupKeys=Object.keys(F);z.forEach(function(he){P[he]=F[he].map(function(K){return K.name}),F[he].forEach(function(K){return K.groupKey=he})});var $=wa.aliases=[{name:"content",pointsTo:"label"},{name:"control-point-distance",pointsTo:"control-point-distances"},{name:"control-point-weight",pointsTo:"control-point-weights"},{name:"segment-distance",pointsTo:"segment-distances"},{name:"segment-weight",pointsTo:"segment-weights"},{name:"segment-radius",pointsTo:"segment-radii"},{name:"edge-text-rotation",pointsTo:"text-rotation"},{name:"padding-left",pointsTo:"padding"},{name:"padding-right",pointsTo:"padding"},{name:"padding-top",pointsTo:"padding"},{name:"padding-bottom",pointsTo:"padding"}];wa.propertyNames=B.map(function(he){return he.name});for(var H=0;H<B.length;H++){var Q=B[H];B[Q.name]=Q}for(var j=0;j<$.length;j++){var ie=$[j],ne=B[ie.pointsTo],le={name:ie.name,alias:!0,pointsTo:ne};B.push(le),B[ie.name]=le}})();wa.getDefaultProperty=function(t){return this.getDefaultProperties()[t]};wa.getDefaultProperties=function(){var t=this._private;if(t.defaultProperties!=null)return t.defaultProperties;for(var e=rr({"selection-box-color":"#ddd","selection-box-opacity":.65,"selection-box-border-color":"#aaa","selection-box-border-width":1,"active-bg-color":"black","active-bg-opacity":.15,"active-bg-size":30,"outside-texture-bg-color":"#000","outside-texture-bg-opacity":.125,events:"yes","text-events":"no","text-valign":"top","text-halign":"center","text-justification":"auto","line-height":1,color:"#000","text-outline-color":"#000","text-outline-width":0,"text-outline-opacity":1,"text-opacity":1,"text-decoration":"none","text-transform":"none","text-wrap":"none","text-overflow-wrap":"whitespace","text-max-width":9999,"text-background-color":"#000","text-background-opacity":0,"text-background-shape":"rectangle","text-background-padding":0,"text-border-opacity":0,"text-border-width":0,"text-border-style":"solid","text-border-color":"#000","font-family":"Helvetica Neue, Helvetica, sans-serif","font-style":"normal","font-weight":"normal","font-size":16,"min-zoomed-font-size":0,"text-rotation":"none","source-text-rotation":"none","target-text-rotation":"none",visibility:"visible",display:"element",opacity:1,"z-compound-depth":"auto","z-index-compare":"auto","z-index":0,label:"","text-margin-x":0,"text-margin-y":0,"source-label":"","source-text-offset":0,"source-text-margin-x":0,"source-text-margin-y":0,"target-label":"","target-text-offset":0,"target-text-margin-x":0,"target-text-margin-y":0,"overlay-opacity":0,"overlay-color":"#000","overlay-padding":10,"overlay-shape":"round-rectangle","overlay-corner-radius":"auto","underlay-opacity":0,"underlay-color":"#000","underlay-padding":10,"underlay-shape":"round-rectangle","underlay-corner-radius":"auto","transition-property":"none","transition-duration":0,"transition-delay":0,"transition-timing-function":"linear","background-blacken":0,"background-color":"#999","background-fill":"solid","background-opacity":1,"background-image":"none","background-image-crossorigin":"anonymous","background-image-opacity":1,"background-image-containment":"inside","background-image-smoothing":"yes","background-position-x":"50%","background-position-y":"50%","background-offset-x":0,"background-offset-y":0,"background-width-relative-to":"include-padding","background-height-relative-to":"include-padding","background-repeat":"no-repeat","background-fit":"none","background-clip":"node","background-width":"auto","background-height":"auto","border-color":"#000","border-opacity":1,"border-width":0,"border-style":"solid","border-dash-pattern":[4,2],"border-dash-offset":0,"border-cap":"butt","border-join":"miter","border-position":"center","outline-color":"#999","outline-opacity":1,"outline-width":0,"outline-offset":0,"outline-style":"solid",height:30,width:30,shape:"ellipse","shape-polygon-points":"-1, -1, 1, -1, 1, 1, -1, 1","corner-radius":"auto","bounds-expansion":0,"background-gradient-direction":"to-bottom","background-gradient-stop-colors":"#999","background-gradient-stop-positions":"0%",ghost:"no","ghost-offset-y":0,"ghost-offset-x":0,"ghost-opacity":0,padding:0,"padding-relative-to":"width",position:"origin","compound-sizing-wrt-labels":"include","min-width":0,"min-width-bias-left":0,"min-width-bias-right":0,"min-height":0,"min-height-bias-top":0,"min-height-bias-bottom":0},{"pie-size":"100%"},[{name:"pie-{{i}}-background-color",value:"black"},{name:"pie-{{i}}-background-size",value:"0%"},{name:"pie-{{i}}-background-opacity",value:1}].reduce(function(u,h){for(var f=1;f<=wa.pieBackgroundN;f++){var d=h.name.replace("{{i}}",f),p=h.value;u[d]=p}return u},{}),{"line-style":"solid","line-color":"#999","line-fill":"solid","line-cap":"butt","line-opacity":1,"line-outline-width":0,"line-outline-color":"#000","line-gradient-stop-colors":"#999","line-gradient-stop-positions":"0%","control-point-step-size":40,"control-point-weights":.5,"segment-weights":.5,"segment-distances":20,"segment-radii":15,"radius-type":"arc-radius","taxi-turn":"50%","taxi-radius":15,"taxi-turn-min-distance":10,"taxi-direction":"auto","edge-distances":"intersection","curve-style":"haystack","haystack-radius":0,"arrow-scale":1,"loop-direction":"-45deg","loop-sweep":"-90deg","source-distance-from-node":0,"target-distance-from-node":0,"source-endpoint":"outside-to-node","target-endpoint":"outside-to-node","line-dash-pattern":[6,3],"line-dash-offset":0},[{name:"arrow-shape",value:"none"},{name:"arrow-color",value:"#999"},{name:"arrow-fill",value:"filled"},{name:"arrow-width",value:1}].reduce(function(u,h){return wa.arrowPrefixes.forEach(function(f){var d=f+"-"+h.name,p=h.value;u[d]=p}),u},{})),r={},n=0;n<this.properties.length;n++){var i=this.properties[n];if(!i.pointsTo){var a=i.name,s=e[a],l=this.parse(a,s);r[a]=l}}return t.defaultProperties=r,t.defaultProperties};wa.addDefaultStylesheet=function(){this.selector(":parent").css({shape:"rectangle",padding:10,"background-color":"#eee","border-color":"#ccc","border-width":1}).selector("edge").css({width:3}).selector(":loop").css({"curve-style":"bezier"}).selector("edge:compound").css({"curve-style":"bezier","source-endpoint":"outside-to-line","target-endpoint":"outside-to-line"}).selector(":selected").css({"background-color":"#0169D9","line-color":"#0169D9","source-arrow-color":"#0169D9","target-arrow-color":"#0169D9","mid-source-arrow-color":"#0169D9","mid-target-arrow-color":"#0169D9"}).selector(":parent:selected").css({"background-color":"#CCE1F9","border-color":"#aec8e5"}).selector(":active").css({"overlay-color":"black","overlay-padding":10,"overlay-opacity":.25}),this.defaultLength=this.length};US={};US.parse=function(t,e,r,n){var i=this;if(si(e))return i.parseImplWarn(t,e,r,n);var a=n==="mapping"||n===!0||n===!1||n==null?"dontcare":n,s=r?"t":"f",l=""+e,u=cme(t,l,s,a),h=i.propCache=i.propCache||[],f;return(f=h[u])||(f=h[u]=i.parseImplWarn(t,e,r,n)),(r||n==="mapping")&&(f=Yc(f),f&&(f.value=Yc(f.value))),f};US.parseImplWarn=function(t,e,r,n){var i=this.parseImpl(t,e,r,n);return!i&&e!=null&&un("The style property `".concat(t,": ").concat(e,"` is invalid")),i&&(i.name==="width"||i.name==="height")&&e==="label"&&un("The style value of `label` is deprecated for `"+i.name+"`"),i};US.parseImpl=function(t,e,r,n){var i=this;t=eB(t);var a=i.properties[t],s=e,l=i.types;if(!a||e===void 0)return null;a.alias&&(a=a.pointsTo,t=a.name);var u=Zt(e);u&&(e=e.trim());var h=a.type;if(!h)return null;if(r&&(e===""||e===null))return{name:t,value:e,bypass:!0,deleteBypass:!0};if(si(e))return{name:t,value:e,strValue:"fn",mapped:l.fn,bypass:r};var f,d;if(!(!u||n||e.length<7||e[1]!=="a")){if(e.length>=7&&e[0]==="d"&&(f=new RegExp(l.data.regex).exec(e))){if(r)return!1;var p=l.data;return{name:t,value:f,strValue:""+e,mapped:p,field:f[1],bypass:r}}else if(e.length>=10&&e[0]==="m"&&(d=new RegExp(l.mapData.regex).exec(e))){if(r||h.multiple)return!1;var m=l.mapData;if(!(h.color||h.number))return!1;var g=this.parse(t,d[4]);if(!g||g.mapped)return!1;var y=this.parse(t,d[5]);if(!y||y.mapped)return!1;if(g.pfValue===y.pfValue||g.strValue===y.strValue)return un("`"+t+": "+e+"` is not a valid mapper because the output range is zero; converting to `"+t+": "+g.strValue+"`"),this.parse(t,g.strValue);if(h.color){var v=g.value,x=y.value,b=v[0]===x[0]&&v[1]===x[1]&&v[2]===x[2]&&(v[3]===x[3]||(v[3]==null||v[3]===1)&&(x[3]==null||x[3]===1));if(b)return!1}return{name:t,value:d,strValue:""+e,mapped:m,field:d[1],fieldMin:parseFloat(d[2]),fieldMax:parseFloat(d[3]),valueMin:g.value,valueMax:y.value,bypass:r}}}if(h.multiple&&n!=="multiple"){var w;if(u?w=e.split(/\s+/):En(e)?w=e:w=[e],h.evenMultiple&&w.length%2!==0)return null;for(var C=[],T=[],E=[],A="",S=!1,_=0;_<w.length;_++){var I=i.parse(t,w[_],r,"multiple");S=S||Zt(I.value),C.push(I.value),E.push(I.pfValue!=null?I.pfValue:I.value),T.push(I.units),A+=(_>0?" ":"")+I.strValue}return h.validate&&!h.validate(C,T)?null:h.singleEnum&&S?C.length===1&&Zt(C[0])?{name:t,value:C[0],strValue:C[0],bypass:r}:null:{name:t,value:C,pfValue:E,strValue:A,bypass:r,units:T}}var D=o(function(){for(var K=0;K<h.enums.length;K++){var X=h.enums[K];if(X===e)return{name:t,value:e,strValue:""+e,bypass:r}}return null},"checkEnums");if(h.number){var k,L="px";if(h.units&&(k=h.units),h.implicitUnits&&(L=h.implicitUnits),!h.unitless)if(u){var R="px|em"+(h.allowPercent?"|\\%":"");k&&(R=k);var O=e.match("^("+Hi+")("+R+")?$");O&&(e=O[1],k=O[2]||L)}else(!k||h.implicitUnits)&&(k=L);if(e=parseFloat(e),isNaN(e)&&h.enums===void 0)return null;if(isNaN(e)&&h.enums!==void 0)return e=s,D();if(h.integer&&!JHe(e)||h.min!==void 0&&(e<h.min||h.strictMin&&e===h.min)||h.max!==void 0&&(e>h.max||h.strictMax&&e===h.max))return null;var M={name:t,value:e,strValue:""+e+(k||""),units:k,bypass:r};return h.unitless||k!=="px"&&k!=="em"?M.pfValue=e:M.pfValue=k==="px"||!k?e:this.getEmSizeInPixels()*e,(k==="ms"||k==="s")&&(M.pfValue=k==="ms"?e:1e3*e),(k==="deg"||k==="rad")&&(M.pfValue=k==="rad"?e:Nqe(e)),k==="%"&&(M.pfValue=e/100),M}else if(h.propList){var B=[],F=""+e;if(F!=="none"){for(var P=F.split(/\s*,\s*|\s+/),z=0;z<P.length;z++){var $=P[z].trim();i.properties[$]?B.push($):un("`"+$+"` is not a valid property name")}if(B.length===0)return null}return{name:t,value:B,strValue:B.length===0?"none":B.join(" "),bypass:r}}else if(h.color){var H=tme(e);return H?{name:t,value:H,pfValue:H,strValue:"rgb("+H[0]+","+H[1]+","+H[2]+")",bypass:r}:null}else if(h.regex||h.regexes){if(h.enums){var Q=D();if(Q)return Q}for(var j=h.regexes?h.regexes:[h.regex],ie=0;ie<j.length;ie++){var ne=new RegExp(j[ie]),le=ne.exec(e);if(le)return{name:t,value:h.singleRegexMatchValue?le[1]:le,strValue:""+e,bypass:r}}return null}else return h.string?{name:t,value:""+e,strValue:""+e,bypass:r}:h.enums?D():null};Fa=o(function t(e){if(!(this instanceof t))return new t(e);if(!JP(e)){ai("A style must have a core reference");return}this._private={cy:e,coreStyle:{}},this.length=0,this.resetToDefault()},"Style"),za=Fa.prototype;za.instanceString=function(){return"style"};za.clear=function(){for(var t=this._private,e=t.cy,r=e.elements(),n=0;n<this.length;n++)this[n]=void 0;return this.length=0,t.contextStyles={},t.propDiffs={},this.cleanElements(r,!0),r.forEach(function(i){var a=i[0]._private;a.styleDirty=!0,a.appliedInitStyle=!1}),this};za.resetToDefault=function(){return this.clear(),this.addDefaultStylesheet(),this};za.core=function(t){return this._private.coreStyle[t]||this.getDefaultProperty(t)};za.selector=function(t){var e=t==="core"?null:new Lf(t),r=this.length++;return this[r]={selector:e,properties:[],mappedProperties:[],index:r},this};za.css=function(){var t=this,e=arguments;if(e.length===1)for(var r=e[0],n=0;n<t.properties.length;n++){var i=t.properties[n],a=r[i.name];a===void 0&&(a=r[LS(i.name)]),a!==void 0&&this.cssRule(i.name,a)}else e.length===2&&this.cssRule(e[0],e[1]);return this};za.style=za.css;za.cssRule=function(t,e){var r=this.parse(t,e);if(r){var n=this.length-1;this[n].properties.push(r),this[n].properties[r.name]=r,r.name.match(/pie-(\d+)-background-size/)&&r.value&&(this._private.hasPie=!0),r.mapped&&this[n].mappedProperties.push(r);var i=!this[n].selector;i&&(this._private.coreStyle[r.name]=r)}return this};za.append=function(t){return Z0e(t)?t.appendToStyle(this):En(t)?this.appendFromJson(t):Zt(t)&&this.appendFromString(t),this};Fa.fromJson=function(t,e){var r=new Fa(t);return r.fromJson(e),r};Fa.fromString=function(t,e){return new Fa(t).fromString(e)};[Ga,s4,pB,jc,VS,mB,wa,US].forEach(function(t){rr(za,t)});Fa.types=za.types;Fa.properties=za.properties;Fa.propertyGroups=za.propertyGroups;Fa.propertyGroupNames=za.propertyGroupNames;Fa.propertyGroupKeys=za.propertyGroupKeys;ZKe={style:o(function(e){if(e){var r=this.setStyle(e);r.update()}return this._private.style},"style"),setStyle:o(function(e){var r=this._private;return Z0e(e)?r.style=e.generateStyle(this):En(e)?r.style=Fa.fromJson(this,e):Zt(e)?r.style=Fa.fromString(this,e):r.style=Fa(this),r.style},"setStyle"),updateStyle:o(function(){this.mutableElements().updateStyle()},"updateStyle")},JKe="single",Hp={autolock:o(function(e){if(e!==void 0)this._private.autolock=!!e;else return this._private.autolock;return this},"autolock"),autoungrabify:o(function(e){if(e!==void 0)this._private.autoungrabify=!!e;else return this._private.autoungrabify;return this},"autoungrabify"),autounselectify:o(function(e){if(e!==void 0)this._private.autounselectify=!!e;else return this._private.autounselectify;return this},"autounselectify"),selectionType:o(function(e){var r=this._private;if(r.selectionType==null&&(r.selectionType=JKe),e!==void 0)(e==="additive"||e==="single")&&(r.selectionType=e);else return r.selectionType;return this},"selectionType"),panningEnabled:o(function(e){if(e!==void 0)this._private.panningEnabled=!!e;else return this._private.panningEnabled;return this},"panningEnabled"),userPanningEnabled:o(function(e){if(e!==void 0)this._private.userPanningEnabled=!!e;else return this._private.userPanningEnabled;return this},"userPanningEnabled"),zoomingEnabled:o(function(e){if(e!==void 0)this._private.zoomingEnabled=!!e;else return this._private.zoomingEnabled;return this},"zoomingEnabled"),userZoomingEnabled:o(function(e){if(e!==void 0)this._private.userZoomingEnabled=!!e;else return this._private.userZoomingEnabled;return this},"userZoomingEnabled"),boxSelectionEnabled:o(function(e){if(e!==void 0)this._private.boxSelectionEnabled=!!e;else return this._private.boxSelectionEnabled;return this},"boxSelectionEnabled"),pan:o(function(){var e=arguments,r=this._private.pan,n,i,a,s,l;switch(e.length){case 0:return r;case 1:if(Zt(e[0]))return n=e[0],r[n];if(Ur(e[0])){if(!this._private.panningEnabled)return this;a=e[0],s=a.x,l=a.y,Ct(s)&&(r.x=s),Ct(l)&&(r.y=l),this.emit("pan viewport")}break;case 2:if(!this._private.panningEnabled)return this;n=e[0],i=e[1],(n==="x"||n==="y")&&Ct(i)&&(r[n]=i),this.emit("pan viewport");break}return this.notify("viewport"),this},"pan"),panBy:o(function(e,r){var n=arguments,i=this._private.pan,a,s,l,u,h;if(!this._private.panningEnabled)return this;switch(n.length){case 1:Ur(e)&&(l=n[0],u=l.x,h=l.y,Ct(u)&&(i.x+=u),Ct(h)&&(i.y+=h),this.emit("pan viewport"));break;case 2:a=e,s=r,(a==="x"||a==="y")&&Ct(s)&&(i[a]+=s),this.emit("pan viewport");break}return this.notify("viewport"),this},"panBy"),gc:o(function(){this.notify("gc")},"gc"),fit:o(function(e,r){var n=this.getFitViewport(e,r);if(n){var i=this._private;i.zoom=n.zoom,i.pan=n.pan,this.emit("pan zoom viewport"),this.notify("viewport")}return this},"fit"),getFitViewport:o(function(e,r){if(Ct(e)&&r===void 0&&(r=e,e=void 0),!(!this._private.panningEnabled||!this._private.zoomingEnabled)){var n;if(Zt(e)){var i=e;e=this.$(i)}else if(rWe(e)){var a=e;n={x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2},n.w=n.x2-n.x1,n.h=n.y2-n.y1}else go(e)||(e=this.mutableElements());if(!(go(e)&&e.empty())){n=n||e.boundingBox();var s=this.width(),l=this.height(),u;if(r=Ct(r)?r:0,!isNaN(s)&&!isNaN(l)&&s>0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0){u=Math.min((s-2*r)/n.w,(l-2*r)/n.h),u=u>this._private.maxZoom?this._private.maxZoom:u,u=u<this._private.minZoom?this._private.minZoom:u;var h={x:(s-u*(n.x1+n.x2))/2,y:(l-u*(n.y1+n.y2))/2};return{zoom:u,pan:h}}}}},"getFitViewport"),zoomRange:o(function(e,r){var n=this._private;if(r==null){var i=e;e=i.min,r=i.max}return Ct(e)&&Ct(r)&&e<=r?(n.minZoom=e,n.maxZoom=r):Ct(e)&&r===void 0&&e<=n.maxZoom?n.minZoom=e:Ct(r)&&e===void 0&&r>=n.minZoom&&(n.maxZoom=r),this},"zoomRange"),minZoom:o(function(e){return e===void 0?this._private.minZoom:this.zoomRange({min:e})},"minZoom"),maxZoom:o(function(e){return e===void 0?this._private.maxZoom:this.zoomRange({max:e})},"maxZoom"),getZoomedViewport:o(function(e){var r=this._private,n=r.pan,i=r.zoom,a,s,l=!1;if(r.zoomingEnabled||(l=!0),Ct(e)?s=e:Ur(e)&&(s=e.level,e.position!=null?a=MS(e.position,i,n):e.renderedPosition!=null&&(a=e.renderedPosition),a!=null&&!r.panningEnabled&&(l=!0)),s=s>r.maxZoom?r.maxZoom:s,s=s<r.minZoom?r.minZoom:s,l||!Ct(s)||s===i||a!=null&&(!Ct(a.x)||!Ct(a.y)))return null;if(a!=null){var u=n,h=i,f=s,d={x:-f/h*(a.x-u.x)+a.x,y:-f/h*(a.y-u.y)+a.y};return{zoomed:!0,panned:!0,zoom:f,pan:d}}else return{zoomed:!0,panned:!1,zoom:s,pan:n}},"getZoomedViewport"),zoom:o(function(e){if(e===void 0)return this._private.zoom;var r=this.getZoomedViewport(e),n=this._private;return r==null||!r.zoomed?this:(n.zoom=r.zoom,r.panned&&(n.pan.x=r.pan.x,n.pan.y=r.pan.y),this.emit("zoom"+(r.panned?" pan":"")+" viewport"),this.notify("viewport"),this)},"zoom"),viewport:o(function(e){var r=this._private,n=!0,i=!0,a=[],s=!1,l=!1;if(!e)return this;if(Ct(e.zoom)||(n=!1),Ur(e.pan)||(i=!1),!n&&!i)return this;if(n){var u=e.zoom;u<r.minZoom||u>r.maxZoom||!r.zoomingEnabled?s=!0:(r.zoom=u,a.push("zoom"))}if(i&&(!s||!e.cancelOnFailedZoom)&&r.panningEnabled){var h=e.pan;Ct(h.x)&&(r.pan.x=h.x,l=!1),Ct(h.y)&&(r.pan.y=h.y,l=!1),l||a.push("pan")}return a.length>0&&(a.push("viewport"),this.emit(a.join(" ")),this.notify("viewport")),this},"viewport"),center:o(function(e){var r=this.getCenterPan(e);return r&&(this._private.pan=r,this.emit("pan viewport"),this.notify("viewport")),this},"center"),getCenterPan:o(function(e,r){if(this._private.panningEnabled){if(Zt(e)){var n=e;e=this.mutableElements().filter(n)}else go(e)||(e=this.mutableElements());if(e.length!==0){var i=e.boundingBox(),a=this.width(),s=this.height();r=r===void 0?this._private.zoom:r;var l={x:(a-r*(i.x1+i.x2))/2,y:(s-r*(i.y1+i.y2))/2};return l}}},"getCenterPan"),reset:o(function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},"reset"),invalidateSize:o(function(){this._private.sizeCache=null},"invalidateSize"),size:o(function(){var e=this._private,r=e.container,n=this;return e.sizeCache=e.sizeCache||(r?function(){var i=n.window().getComputedStyle(r),a=o(function(l){return parseFloat(i.getPropertyValue(l))},"val");return{width:r.clientWidth-a("padding-left")-a("padding-right"),height:r.clientHeight-a("padding-top")-a("padding-bottom")}}():{width:1,height:1})},"size"),width:o(function(){return this.size().width},"width"),height:o(function(){return this.size().height},"height"),extent:o(function(){var e=this._private.pan,r=this._private.zoom,n=this.renderedExtent(),i={x1:(n.x1-e.x)/r,x2:(n.x2-e.x)/r,y1:(n.y1-e.y)/r,y2:(n.y2-e.y)/r};return i.w=i.x2-i.x1,i.h=i.y2-i.y1,i},"extent"),renderedExtent:o(function(){var e=this.width(),r=this.height();return{x1:0,y1:0,x2:e,y2:r,w:e,h:r}},"renderedExtent"),multiClickDebounceTime:o(function(e){if(e)this._private.multiClickDebounceTime=e;else return this._private.multiClickDebounceTime;return this},"multiClickDebounceTime")};Hp.centre=Hp.center;Hp.autolockNodes=Hp.autolock;Hp.autoungrabifyNodes=Hp.autoungrabify;Zb={data:cn.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:cn.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:cn.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:cn.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};Zb.attr=Zb.data;Zb.removeAttr=Zb.removeData;Jb=o(function(e){var r=this;e=rr({},e);var n=e.container;n&&!vS(n)&&vS(n[0])&&(n=n[0]);var i=n?n._cyreg:null;i=i||{},i&&i.cy&&(i.cy.destroy(),i={});var a=i.readies=i.readies||[];n&&(n._cyreg=i),i.cy=r;var s=Ui!==void 0&&n!==void 0&&!e.headless,l=e;l.layout=rr({name:s?"grid":"null"},l.layout),l.renderer=rr({name:s?"canvas":"null"},l.renderer);var u=o(function(g,y,v){return y!==void 0?y:v!==void 0?v:g},"defVal"),h=this._private={container:n,ready:!1,options:l,elements:new ka(this),listeners:[],aniEles:new ka(this),data:l.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:u(!0,l.zoomingEnabled),userZoomingEnabled:u(!0,l.userZoomingEnabled),panningEnabled:u(!0,l.panningEnabled),userPanningEnabled:u(!0,l.userPanningEnabled),boxSelectionEnabled:u(!0,l.boxSelectionEnabled),autolock:u(!1,l.autolock,l.autolockNodes),autoungrabify:u(!1,l.autoungrabify,l.autoungrabifyNodes),autounselectify:u(!1,l.autounselectify),styleEnabled:l.styleEnabled===void 0?s:l.styleEnabled,zoom:Ct(l.zoom)?l.zoom:1,pan:{x:Ur(l.pan)&&Ct(l.pan.x)?l.pan.x:0,y:Ur(l.pan)&&Ct(l.pan.y)?l.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:u(250,l.multiClickDebounceTime)};this.createEmitter(),this.selectionType(l.selectionType),this.zoomRange({min:l.minZoom,max:l.maxZoom});var f=o(function(g,y){var v=g.some(nWe);if(v)return ey.all(g).then(y);y(g)},"loadExtData");h.styleEnabled&&r.setStyle([]);var d=rr({},l,l.renderer);r.initRenderer(d);var p=o(function(g,y,v){r.notifications(!1);var x=r.mutableElements();x.length>0&&x.remove(),g!=null&&(Ur(g)||En(g))&&r.add(g),r.one("layoutready",function(w){r.notifications(!0),r.emit(w),r.one("load",y),r.emitAndNotify("load")}).one("layoutstop",function(){r.one("done",v),r.emit("done")});var b=rr({},r._private.options.layout);b.eles=r.elements(),r.layout(b).run()},"setElesAndLayout");f([l.style,l.elements],function(m){var g=m[0],y=m[1];h.styleEnabled&&r.style().append(g),p(y,function(){r.startAnimationLoop(),h.ready=!0,si(l.ready)&&r.on("ready",l.ready);for(var v=0;v<a.length;v++){var x=a[v];r.on("ready",x)}i&&(i.readies=[]),r.emit("ready")},l.done)})},"Core"),SS=Jb.prototype;rr(SS,{instanceString:o(function(){return"core"},"instanceString"),isReady:o(function(){return this._private.ready},"isReady"),destroyed:o(function(){return this._private.destroyed},"destroyed"),ready:o(function(e){return this.isReady()?this.emitter().emit("ready",[],e):this.on("ready",e),this},"ready"),destroy:o(function(){var e=this;if(!e.destroyed())return e.stopAnimationLoop(),e.destroyRenderer(),this.emit("destroy"),e._private.destroyed=!0,e},"destroy"),hasElementWithId:o(function(e){return this._private.elements.hasElementWithId(e)},"hasElementWithId"),getElementById:o(function(e){return this._private.elements.getElementById(e)},"getElementById"),hasCompoundNodes:o(function(){return this._private.hasCompoundNodes},"hasCompoundNodes"),headless:o(function(){return this._private.renderer.isHeadless()},"headless"),styleEnabled:o(function(){return this._private.styleEnabled},"styleEnabled"),addToPool:o(function(e){return this._private.elements.merge(e),this},"addToPool"),removeFromPool:o(function(e){return this._private.elements.unmerge(e),this},"removeFromPool"),container:o(function(){return this._private.container||null},"container"),window:o(function(){var e=this._private.container;if(e==null)return Ui;var r=this._private.container.ownerDocument;return r===void 0||r==null?Ui:r.defaultView||Ui},"window"),mount:o(function(e){if(e!=null){var r=this,n=r._private,i=n.options;return!vS(e)&&vS(e[0])&&(e=e[0]),r.stopAnimationLoop(),r.destroyRenderer(),n.container=e,n.styleEnabled=!0,r.invalidateSize(),r.initRenderer(rr({},i,i.renderer,{name:i.renderer.name==="null"?"canvas":i.renderer.name})),r.startAnimationLoop(),r.style(i.style),r.emit("mount"),r}},"mount"),unmount:o(function(){var e=this;return e.stopAnimationLoop(),e.destroyRenderer(),e.initRenderer({name:"null"}),e.emit("unmount"),e},"unmount"),options:o(function(){return Yc(this._private.options)},"options"),json:o(function(e){var r=this,n=r._private,i=r.mutableElements(),a=o(function(C){return r.getElementById(C.id())},"getFreshRef");if(Ur(e)){if(r.startBatch(),e.elements){var s={},l=o(function(C,T){for(var E=[],A=[],S=0;S<C.length;S++){var _=C[S];if(!_.data.id){un("cy.json() cannot handle elements without an ID attribute");continue}var I=""+_.data.id,D=r.getElementById(I);s[I]=!0,D.length!==0?A.push({ele:D,json:_}):(T&&(_.group=T),E.push(_))}r.add(E);for(var k=0;k<A.length;k++){var L=A[k],R=L.ele,O=L.json;R.json(O)}},"updateEles");if(En(e.elements))l(e.elements);else for(var u=["nodes","edges"],h=0;h<u.length;h++){var f=u[h],d=e.elements[f];En(d)&&l(d,f)}var p=r.collection();i.filter(function(w){return!s[w.id()]}).forEach(function(w){w.isParent()?p.merge(w):w.remove()}),p.forEach(function(w){return w.children().move({parent:null})}),p.forEach(function(w){return a(w).remove()})}e.style&&r.style(e.style),e.zoom!=null&&e.zoom!==n.zoom&&r.zoom(e.zoom),e.pan&&(e.pan.x!==n.pan.x||e.pan.y!==n.pan.y)&&r.pan(e.pan),e.data&&r.data(e.data);for(var m=["minZoom","maxZoom","zoomingEnabled","userZoomingEnabled","panningEnabled","userPanningEnabled","boxSelectionEnabled","autolock","autoungrabify","autounselectify","multiClickDebounceTime"],g=0;g<m.length;g++){var y=m[g];e[y]!=null&&r[y](e[y])}return r.endBatch(),this}else{var v=!!e,x={};v?x.elements=this.elements().map(function(w){return w.json()}):(x.elements={},i.forEach(function(w){var C=w.group();x.elements[C]||(x.elements[C]=[]),x.elements[C].push(w.json())})),this._private.styleEnabled&&(x.style=r.style().json()),x.data=Yc(r.data());var b=n.options;return x.zoomingEnabled=n.zoomingEnabled,x.userZoomingEnabled=n.userZoomingEnabled,x.zoom=n.zoom,x.minZoom=n.minZoom,x.maxZoom=n.maxZoom,x.panningEnabled=n.panningEnabled,x.userPanningEnabled=n.userPanningEnabled,x.pan=Yc(n.pan),x.boxSelectionEnabled=n.boxSelectionEnabled,x.renderer=Yc(b.renderer),x.hideEdgesOnViewport=b.hideEdgesOnViewport,x.textureOnViewport=b.textureOnViewport,x.wheelSensitivity=b.wheelSensitivity,x.motionBlur=b.motionBlur,x.multiClickDebounceTime=b.multiClickDebounceTime,x}},"json")});SS.$id=SS.getElementById;[VKe,YKe,ege,VP,pS,jKe,UP,mS,ZKe,Hp,Zb].forEach(function(t){rr(SS,t)});eQe={fit:!0,directed:!1,padding:30,circle:!1,grid:!1,spacingFactor:1.75,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,roots:void 0,depthSort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")},tQe={maximal:!1,acyclic:!1},z1=o(function(e){return e.scratch("breadthfirst")},"getInfo"),T0e=o(function(e,r){return e.scratch("breadthfirst",r)},"setInfo");o(tge,"BreadthFirstLayout");tge.prototype.run=function(){var t=this.options,e=t.cy,r=t.eles,n=r.nodes().filter(function(ae){return ae.isChildless()}),i=r,a=t.directed,s=t.acyclic||t.maximal||t.maximalAdjustments>0,l=!!t.boundingBox,u=e.extent(),h=Hs(l?t.boundingBox:{x1:u.x1,y1:u.y1,w:u.w,h:u.h}),f;if(go(t.roots))f=t.roots;else if(En(t.roots)){for(var d=[],p=0;p<t.roots.length;p++){var m=t.roots[p],g=e.getElementById(m);d.push(g)}f=e.collection(d)}else if(Zt(t.roots))f=e.$(t.roots);else if(a)f=n.roots();else{var y=r.components();f=e.collection();for(var v=o(function(Oe){var ge=y[Oe],ze=ge.maxDegree(!1),He=ge.filter(function($e){return $e.degree(!1)===ze});f=f.add(He)},"_loop"),x=0;x<y.length;x++)v(x)}var b=[],w={},C=o(function(Oe,ge){b[ge]==null&&(b[ge]=[]);var ze=b[ge].length;b[ge].push(Oe),T0e(Oe,{index:ze,depth:ge})},"addToDepth"),T=o(function(Oe,ge){var ze=z1(Oe),He=ze.depth,$e=ze.index;b[He][$e]=null,Oe.isChildless()&&C(Oe,ge)},"changeDepth");i.bfs({roots:f,directed:t.directed,visit:o(function(Oe,ge,ze,He,$e){var Re=Oe[0],Ie=Re.id();Re.isChildless()&&C(Re,$e),w[Ie]=!0},"visit")});for(var E=[],A=0;A<n.length;A++){var S=n[A];w[S.id()]||E.push(S)}var _=o(function(Oe){for(var ge=b[Oe],ze=0;ze<ge.length;ze++){var He=ge[ze];if(He==null){ge.splice(ze,1),ze--;continue}T0e(He,{depth:Oe,index:ze})}},"assignDepthsAt"),I=o(function(Oe,ge){for(var ze=z1(Oe),He=Oe.incomers().filter(function(re){return re.isNode()&&r.has(re)}),$e=-1,Re=Oe.id(),Ie=0;Ie<He.length;Ie++){var be=He[Ie],W=z1(be);$e=Math.max($e,W.depth)}if(ze.depth<=$e){if(!t.acyclic&&ge[Re])return null;var de=$e+1;return T(Oe,de),ge[Re]=de,!0}return!1},"adjustMaximally");if(a&&s){var D=[],k={},L=o(function(Oe){return D.push(Oe)},"enqueue"),R=o(function(){return D.shift()},"dequeue");for(n.forEach(function(ae){return D.push(ae)});D.length>0;){var O=R(),M=I(O,k);if(M)O.outgoers().filter(function(ae){return ae.isNode()&&r.has(ae)}).forEach(L);else if(M===null){un("Detected double maximal shift for node `"+O.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}var B=0;if(t.avoidOverlap)for(var F=0;F<n.length;F++){var P=n[F],z=P.layoutDimensions(t),$=z.w,H=z.h;B=Math.max(B,$,H)}var Q={},j=o(function(Oe){if(Q[Oe.id()])return Q[Oe.id()];for(var ge=z1(Oe).depth,ze=Oe.neighborhood(),He=0,$e=0,Re=0;Re<ze.length;Re++){var Ie=ze[Re];if(!(Ie.isEdge()||Ie.isParent()||!n.has(Ie))){var be=z1(Ie);if(be!=null){var W=be.index,de=be.depth;if(!(W==null||de==null)){var re=b[de].length;de<ge&&(He+=W/re,$e++)}}}}return $e=Math.max(1,$e),He=He/$e,$e===0&&(He=0),Q[Oe.id()]=He,He},"getWeightedPercent"),ie=o(function(Oe,ge){var ze=j(Oe),He=j(ge),$e=ze-He;return $e===0?eme(Oe.id(),ge.id()):$e},"sortFn");t.depthSort!==void 0&&(ie=t.depthSort);for(var ne=b.length,le=0;le<ne;le++)b[le].sort(ie),_(le);for(var he=[],K=0;K<E.length;K++)he.push(E[K]);var X=o(function(){for(var Oe=0;Oe<ne;Oe++)_(Oe)},"assignDepths");he.length&&(b.unshift(he),ne=b.length,X());for(var te=0,J=0;J<ne;J++)te=Math.max(b[J].length,te);var se={x:h.x1+h.w/2,y:h.y1+h.h/2},ue=n.reduce(function(ae,Oe){return function(ge){return{w:ae.w===-1?ge.w:(ae.w+ge.w)/2,h:ae.h===-1?ge.h:(ae.h+ge.h)/2}}(Oe.boundingBox({includeLabels:t.nodeDimensionsIncludeLabels}))},{w:-1,h:-1}),Z=Math.max(ne===1?0:l?(h.h-t.padding*2-ue.h)/(ne-1):(h.h-t.padding*2-ue.h)/(ne+1),B),Se=b.reduce(function(ae,Oe){return Math.max(ae,Oe.length)},0),ce=o(function(Oe){var ge=z1(Oe),ze=ge.depth,He=ge.index;if(t.circle){var $e=Math.min(h.w/2/ne,h.h/2/ne);$e=Math.max($e,B);var Re=$e*ze+$e-(ne>0&&b[0].length<=3?$e/2:0),Ie=2*Math.PI/b[ze].length*He;return ze===0&&b[0].length===1&&(Re=1),{x:se.x+Re*Math.cos(Ie),y:se.y+Re*Math.sin(Ie)}}else{var be=b[ze].length,W=Math.max(be===1?0:l?(h.w-t.padding*2-ue.w)/((t.grid?Se:be)-1):(h.w-t.padding*2-ue.w)/((t.grid?Se:be)+1),B),de={x:se.x+(He+1-(be+1)/2)*W,y:se.y+(ze+1-(ne+1)/2)*Z};return de}},"getPosition");return r.nodes().layoutPositions(this,t,ce),this};rQe={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(rge,"CircleLayout");rge.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,a=n.nodes().not(":parent");e.sort&&(a=a.sort(e.sort));for(var s=Hs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=e.sweep===void 0?2*Math.PI-2*Math.PI/a.length:e.sweep,h=u/Math.max(1,a.length-1),f,d=0,p=0;p<a.length;p++){var m=a[p],g=m.layoutDimensions(e),y=g.w,v=g.h;d=Math.max(d,y,v)}if(Ct(e.radius)?f=e.radius:a.length<=1?f=0:f=Math.min(s.h,s.w)/2-d,a.length>1&&e.avoidOverlap){d*=1.75;var x=Math.cos(h)-Math.cos(0),b=Math.sin(h)-Math.sin(0),w=Math.sqrt(d*d/(x*x+b*b));f=Math.max(w,f)}var C=o(function(E,A){var S=e.startAngle+A*h*(i?1:-1),_=f*Math.cos(S),I=f*Math.sin(S),D={x:l.x+_,y:l.y+I};return D},"getPos");return n.nodes().layoutPositions(this,e,C),this};nQe={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:o(function(e){return e.degree()},"concentric"),levelWidth:o(function(e){return e.maxDegree()/4},"levelWidth"),animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(nge,"ConcentricLayout");nge.prototype.run=function(){for(var t=this.options,e=t,r=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,n=t.cy,i=e.eles,a=i.nodes().not(":parent"),s=Hs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=[],h=0,f=0;f<a.length;f++){var d=a[f],p=void 0;p=e.concentric(d),u.push({value:p,node:d}),d._private.scratch.concentric=p}a.updateStyle();for(var m=0;m<a.length;m++){var g=a[m],y=g.layoutDimensions(e);h=Math.max(h,y.w,y.h)}u.sort(function(ue,Z){return Z.value-ue.value});for(var v=e.levelWidth(a),x=[[]],b=x[0],w=0;w<u.length;w++){var C=u[w];if(b.length>0){var T=Math.abs(b[0].value-C.value);T>=v&&(b=[],x.push(b))}b.push(C)}var E=h+e.minNodeSpacing;if(!e.avoidOverlap){var A=x.length>0&&x[0].length>1,S=Math.min(s.w,s.h)/2-E,_=S/(x.length+A?1:0);E=Math.min(E,_)}for(var I=0,D=0;D<x.length;D++){var k=x[D],L=e.sweep===void 0?2*Math.PI-2*Math.PI/k.length:e.sweep,R=k.dTheta=L/Math.max(1,k.length-1);if(k.length>1&&e.avoidOverlap){var O=Math.cos(R)-Math.cos(0),M=Math.sin(R)-Math.sin(0),B=Math.sqrt(E*E/(O*O+M*M));I=Math.max(B,I)}k.r=I,I+=E}if(e.equidistant){for(var F=0,P=0,z=0;z<x.length;z++){var $=x[z],H=$.r-P;F=Math.max(F,H)}P=0;for(var Q=0;Q<x.length;Q++){var j=x[Q];Q===0&&(P=j.r),j.r=P,P+=F}}for(var ie={},ne=0;ne<x.length;ne++)for(var le=x[ne],he=le.dTheta,K=le.r,X=0;X<le.length;X++){var te=le[X],J=e.startAngle+(r?1:-1)*he*X,se={x:l.x+K*Math.cos(J),y:l.y+K*Math.sin(J)};ie[te.node.id()]=se}return i.nodes().layoutPositions(this,e,function(ue){var Z=ue.id();return ie[Z]}),this};iQe={ready:o(function(){},"ready"),stop:o(function(){},"stop"),animate:!0,animationEasing:void 0,animationDuration:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),animationThreshold:250,refresh:20,fit:!0,padding:30,boundingBox:void 0,nodeDimensionsIncludeLabels:!1,randomize:!1,componentSpacing:40,nodeRepulsion:o(function(e){return 2048},"nodeRepulsion"),nodeOverlap:4,idealEdgeLength:o(function(e){return 32},"idealEdgeLength"),edgeElasticity:o(function(e){return 32},"edgeElasticity"),nestingFactor:1.2,gravity:1,numIter:1e3,initialTemp:1e3,coolingFactor:.99,minTemp:1};o(HS,"CoseLayout");HS.prototype.run=function(){var t=this.options,e=t.cy,r=this;r.stopped=!1,(t.animate===!0||t.animate===!1)&&r.emit({type:"layoutstart",layout:r}),t.debug===!0?_P=!0:_P=!1;var n=aQe(e,r,t);_P&&lQe(n),t.randomize&&cQe(n);var i=Qu(),a=o(function(){uQe(n,e,t),t.fit===!0&&e.fit(t.padding)},"refresh"),s=o(function(p){return!(r.stopped||p>=t.numIter||(hQe(n,t),n.temperature=n.temperature*t.coolingFactor,n.temperature<t.minTemp))},"mainLoop"),l=o(function(){if(t.animate===!0||t.animate===!1)a(),r.one("layoutstop",t.stop),r.emit({type:"layoutstop",layout:r});else{var p=t.eles.nodes(),m=ige(n,t,p);p.layoutPositions(r,t,m)}},"done"),u=0,h=!0;if(t.animate===!0){var f=o(function d(){for(var p=0;h&&p<t.refresh;)h=s(u),u++,p++;if(!h)E0e(n,t),l();else{var m=Qu();m-i>=t.animationThreshold&&a(),xS(d)}},"frame");f()}else{for(;h;)h=s(u),u++;E0e(n,t),l()}return this};HS.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this};HS.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};aQe=o(function(e,r,n){for(var i=n.eles.edges(),a=n.eles.nodes(),s=Hs(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),l={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:a.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:i.size(),temperature:n.initialTemp,clientWidth:s.w,clientHeight:s.h,boundingBox:s},u=n.eles.components(),h={},f=0;f<u.length;f++)for(var d=u[f],p=0;p<d.length;p++){var m=d[p];h[m.id()]=f}for(var f=0;f<l.nodeSize;f++){var g=a[f],y=g.layoutDimensions(n),v={};v.isLocked=g.locked(),v.id=g.data("id"),v.parentId=g.data("parent"),v.cmptId=h[g.id()],v.children=[],v.positionX=g.position("x"),v.positionY=g.position("y"),v.offsetX=0,v.offsetY=0,v.height=y.w,v.width=y.h,v.maxX=v.positionX+v.width/2,v.minX=v.positionX-v.width/2,v.maxY=v.positionY+v.height/2,v.minY=v.positionY-v.height/2,v.padLeft=parseFloat(g.style("padding")),v.padRight=parseFloat(g.style("padding")),v.padTop=parseFloat(g.style("padding")),v.padBottom=parseFloat(g.style("padding")),v.nodeRepulsion=si(n.nodeRepulsion)?n.nodeRepulsion(g):n.nodeRepulsion,l.layoutNodes.push(v),l.idToIndex[v.id]=f}for(var x=[],b=0,w=-1,C=[],f=0;f<l.nodeSize;f++){var g=l.layoutNodes[f],T=g.parentId;T!=null?l.layoutNodes[l.idToIndex[T]].children.push(g.id):(x[++w]=g.id,C.push(g.id))}for(l.graphSet.push(C);b<=w;){var E=x[b++],A=l.idToIndex[E],m=l.layoutNodes[A],S=m.children;if(S.length>0){l.graphSet.push(S);for(var f=0;f<S.length;f++)x[++w]=S[f]}}for(var f=0;f<l.graphSet.length;f++)for(var _=l.graphSet[f],p=0;p<_.length;p++){var I=l.idToIndex[_[p]];l.indexToGraph[I]=f}for(var f=0;f<l.edgeSize;f++){var D=i[f],k={};k.id=D.data("id"),k.sourceId=D.data("source"),k.targetId=D.data("target");var L=si(n.idealEdgeLength)?n.idealEdgeLength(D):n.idealEdgeLength,R=si(n.edgeElasticity)?n.edgeElasticity(D):n.edgeElasticity,O=l.idToIndex[k.sourceId],M=l.idToIndex[k.targetId],B=l.indexToGraph[O],F=l.indexToGraph[M];if(B!=F){for(var P=sQe(k.sourceId,k.targetId,l),z=l.graphSet[P],$=0,v=l.layoutNodes[O];z.indexOf(v.id)===-1;)v=l.layoutNodes[l.idToIndex[v.parentId]],$++;for(v=l.layoutNodes[M];z.indexOf(v.id)===-1;)v=l.layoutNodes[l.idToIndex[v.parentId]],$++;L*=$*n.nestingFactor}k.idealLength=L,k.elasticity=R,l.layoutEdges.push(k)}return l},"createLayoutInfo"),sQe=o(function(e,r,n){var i=oQe(e,r,0,n);return 2>i.count?0:i.graph},"findLCA"),oQe=o(function t(e,r,n,i){var a=i.graphSet[n];if(-1<a.indexOf(e)&&-1<a.indexOf(r))return{count:2,graph:n};for(var s=0,l=0;l<a.length;l++){var u=a[l],h=i.idToIndex[u],f=i.layoutNodes[h].children;if(f.length!==0){var d=i.indexToGraph[i.idToIndex[f[0]]],p=t(e,r,d,i);if(p.count!==0)if(p.count===1){if(s++,s===2)break}else return p}}return{count:s,graph:n}},"findLCA_aux"),cQe=o(function(e,r){for(var n=e.clientWidth,i=e.clientHeight,a=0;a<e.nodeSize;a++){var s=e.layoutNodes[a];s.children.length===0&&!s.isLocked&&(s.positionX=Math.random()*n,s.positionY=Math.random()*i)}},"randomizePositions"),ige=o(function(e,r,n){var i=e.boundingBox,a={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0};return r.boundingBox&&(n.forEach(function(s){var l=e.layoutNodes[e.idToIndex[s.data("id")]];a.x1=Math.min(a.x1,l.positionX),a.x2=Math.max(a.x2,l.positionX),a.y1=Math.min(a.y1,l.positionY),a.y2=Math.max(a.y2,l.positionY)}),a.w=a.x2-a.x1,a.h=a.y2-a.y1),function(s,l){var u=e.layoutNodes[e.idToIndex[s.data("id")]];if(r.boundingBox){var h=(u.positionX-a.x1)/a.w,f=(u.positionY-a.y1)/a.h;return{x:i.x1+h*i.w,y:i.y1+f*i.h}}else return{x:u.positionX,y:u.positionY}}},"getScaleInBoundsFn"),uQe=o(function(e,r,n){var i=n.layout,a=n.eles.nodes(),s=ige(e,n,a);a.positions(s),e.ready!==!0&&(e.ready=!0,i.one("layoutready",n.ready),i.emit({type:"layoutready",layout:this}))},"refreshPositions"),hQe=o(function(e,r,n){fQe(e,r),mQe(e),gQe(e,r),yQe(e),vQe(e)},"step"),fQe=o(function(e,r){for(var n=0;n<e.graphSet.length;n++)for(var i=e.graphSet[n],a=i.length,s=0;s<a;s++)for(var l=e.layoutNodes[e.idToIndex[i[s]]],u=s+1;u<a;u++){var h=e.layoutNodes[e.idToIndex[i[u]]];dQe(l,h,e,r)}},"calculateNodeForces"),k0e=o(function(e){return-e+2*e*Math.random()},"randomDistance"),dQe=o(function(e,r,n,i){var a=e.cmptId,s=r.cmptId;if(!(a!==s&&!n.isCompound)){var l=r.positionX-e.positionX,u=r.positionY-e.positionY,h=1;l===0&&u===0&&(l=k0e(h),u=k0e(h));var f=pQe(e,r,l,u);if(f>0)var d=i.nodeOverlap*f,p=Math.sqrt(l*l+u*u),m=d*l/p,g=d*u/p;else var y=CS(e,l,u),v=CS(r,-1*l,-1*u),x=v.x-y.x,b=v.y-y.y,w=x*x+b*b,p=Math.sqrt(w),d=(e.nodeRepulsion+r.nodeRepulsion)/w,m=d*x/p,g=d*b/p;e.isLocked||(e.offsetX-=m,e.offsetY-=g),r.isLocked||(r.offsetX+=m,r.offsetY+=g)}},"nodeRepulsion"),pQe=o(function(e,r,n,i){if(n>0)var a=e.maxX-r.minX;else var a=r.maxX-e.minX;if(i>0)var s=e.maxY-r.minY;else var s=r.maxY-e.minY;return a>=0&&s>=0?Math.sqrt(a*a+s*s):0},"nodesOverlap"),CS=o(function(e,r,n){var i=e.positionX,a=e.positionY,s=e.height||1,l=e.width||1,u=n/r,h=s/l,f={};return r===0&&0<n||r===0&&0>n?(f.x=i,f.y=a+s/2,f):0<r&&-1*h<=u&&u<=h?(f.x=i+l/2,f.y=a+l*n/2/r,f):0>r&&-1*h<=u&&u<=h?(f.x=i-l/2,f.y=a-l*n/2/r,f):0<n&&(u<=-1*h||u>=h)?(f.x=i+s*r/2/n,f.y=a+s/2,f):(0>n&&(u<=-1*h||u>=h)&&(f.x=i-s*r/2/n,f.y=a-s/2),f)},"findClippingPoint"),mQe=o(function(e,r){for(var n=0;n<e.edgeSize;n++){var i=e.layoutEdges[n],a=e.idToIndex[i.sourceId],s=e.layoutNodes[a],l=e.idToIndex[i.targetId],u=e.layoutNodes[l],h=u.positionX-s.positionX,f=u.positionY-s.positionY;if(!(h===0&&f===0)){var d=CS(s,h,f),p=CS(u,-1*h,-1*f),m=p.x-d.x,g=p.y-d.y,y=Math.sqrt(m*m+g*g),v=Math.pow(i.idealLength-y,2)/i.elasticity;if(y!==0)var x=v*m/y,b=v*g/y;else var x=0,b=0;s.isLocked||(s.offsetX+=x,s.offsetY+=b),u.isLocked||(u.offsetX-=x,u.offsetY-=b)}}},"calculateEdgeForces"),gQe=o(function(e,r){if(r.gravity!==0)for(var n=1,i=0;i<e.graphSet.length;i++){var a=e.graphSet[i],s=a.length;if(i===0)var l=e.clientHeight/2,u=e.clientWidth/2;else var h=e.layoutNodes[e.idToIndex[a[0]]],f=e.layoutNodes[e.idToIndex[h.parentId]],l=f.positionX,u=f.positionY;for(var d=0;d<s;d++){var p=e.layoutNodes[e.idToIndex[a[d]]];if(!p.isLocked){var m=l-p.positionX,g=u-p.positionY,y=Math.sqrt(m*m+g*g);if(y>n){var v=r.gravity*m/y,x=r.gravity*g/y;p.offsetX+=v,p.offsetY+=x}}}}},"calculateGravityForces"),yQe=o(function(e,r){var n=[],i=0,a=-1;for(n.push.apply(n,e.graphSet[0]),a+=e.graphSet[0].length;i<=a;){var s=n[i++],l=e.idToIndex[s],u=e.layoutNodes[l],h=u.children;if(0<h.length&&!u.isLocked){for(var f=u.offsetX,d=u.offsetY,p=0;p<h.length;p++){var m=e.layoutNodes[e.idToIndex[h[p]]];m.offsetX+=f,m.offsetY+=d,n[++a]=h[p]}u.offsetX=0,u.offsetY=0}}},"propagateForces"),vQe=o(function(e,r){for(var n=0;n<e.nodeSize;n++){var i=e.layoutNodes[n];0<i.children.length&&(i.maxX=void 0,i.minX=void 0,i.maxY=void 0,i.minY=void 0)}for(var n=0;n<e.nodeSize;n++){var i=e.layoutNodes[n];if(!(0<i.children.length||i.isLocked)){var a=xQe(i.offsetX,i.offsetY,e.temperature);i.positionX+=a.x,i.positionY+=a.y,i.offsetX=0,i.offsetY=0,i.minX=i.positionX-i.width,i.maxX=i.positionX+i.width,i.minY=i.positionY-i.height,i.maxY=i.positionY+i.height,bQe(i,e)}}for(var n=0;n<e.nodeSize;n++){var i=e.layoutNodes[n];0<i.children.length&&!i.isLocked&&(i.positionX=(i.maxX+i.minX)/2,i.positionY=(i.maxY+i.minY)/2,i.width=i.maxX-i.minX,i.height=i.maxY-i.minY)}},"updatePositions"),xQe=o(function(e,r,n){var i=Math.sqrt(e*e+r*r);if(i>n)var a={x:n*e/i,y:n*r/i};else var a={x:e,y:r};return a},"limitForce"),bQe=o(function t(e,r){var n=e.parentId;if(n!=null){var i=r.layoutNodes[r.idToIndex[n]],a=!1;if((i.maxX==null||e.maxX+i.padRight>i.maxX)&&(i.maxX=e.maxX+i.padRight,a=!0),(i.minX==null||e.minX-i.padLeft<i.minX)&&(i.minX=e.minX-i.padLeft,a=!0),(i.maxY==null||e.maxY+i.padBottom>i.maxY)&&(i.maxY=e.maxY+i.padBottom,a=!0),(i.minY==null||e.minY-i.padTop<i.minY)&&(i.minY=e.minY-i.padTop,a=!0),a)return t(i,r)}},"updateAncestryBoundaries"),E0e=o(function(e,r){for(var n=e.layoutNodes,i=[],a=0;a<n.length;a++){var s=n[a],l=s.cmptId,u=i[l]=i[l]||[];u.push(s)}for(var h=0,a=0;a<i.length;a++){var f=i[a];if(f){f.x1=1/0,f.x2=-1/0,f.y1=1/0,f.y2=-1/0;for(var d=0;d<f.length;d++){var p=f[d];f.x1=Math.min(f.x1,p.positionX-p.width/2),f.x2=Math.max(f.x2,p.positionX+p.width/2),f.y1=Math.min(f.y1,p.positionY-p.height/2),f.y2=Math.max(f.y2,p.positionY+p.height/2)}f.w=f.x2-f.x1,f.h=f.y2-f.y1,h+=f.w*f.h}}i.sort(function(b,w){return w.w*w.h-b.w*b.h});for(var m=0,g=0,y=0,v=0,x=Math.sqrt(h)*e.clientWidth/e.clientHeight,a=0;a<i.length;a++){var f=i[a];if(f){for(var d=0;d<f.length;d++){var p=f[d];p.isLocked||(p.positionX+=m-f.x1,p.positionY+=g-f.y1)}m+=f.w+r.componentSpacing,y+=f.w+r.componentSpacing,v=Math.max(v,f.h),y>x&&(g+=v+r.componentSpacing,m=0,y=0,v=0)}}},"separateComponents"),wQe={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:o(function(e){},"position"),sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(age,"GridLayout");age.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=n.nodes().not(":parent");e.sort&&(i=i.sort(e.sort));var a=Hs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(a.h===0||a.w===0)n.nodes().layoutPositions(this,e,function(Q){return{x:a.x1,y:a.y1}});else{var s=i.size(),l=Math.sqrt(s*a.h/a.w),u=Math.round(l),h=Math.round(a.w/a.h*l),f=o(function(j){if(j==null)return Math.min(u,h);var ie=Math.min(u,h);ie==u?u=j:h=j},"small"),d=o(function(j){if(j==null)return Math.max(u,h);var ie=Math.max(u,h);ie==u?u=j:h=j},"large"),p=e.rows,m=e.cols!=null?e.cols:e.columns;if(p!=null&&m!=null)u=p,h=m;else if(p!=null&&m==null)u=p,h=Math.ceil(s/u);else if(p==null&&m!=null)h=m,u=Math.ceil(s/h);else if(h*u>s){var g=f(),y=d();(g-1)*y>=s?f(g-1):(y-1)*g>=s&&d(y-1)}else for(;h*u<s;){var v=f(),x=d();(x+1)*v>=s?d(x+1):f(v+1)}var b=a.w/h,w=a.h/u;if(e.condense&&(b=0,w=0),e.avoidOverlap)for(var C=0;C<i.length;C++){var T=i[C],E=T._private.position;(E.x==null||E.y==null)&&(E.x=0,E.y=0);var A=T.layoutDimensions(e),S=e.avoidOverlapPadding,_=A.w+S,I=A.h+S;b=Math.max(b,_),w=Math.max(w,I)}for(var D={},k=o(function(j,ie){return!!D["c-"+j+"-"+ie]},"used"),L=o(function(j,ie){D["c-"+j+"-"+ie]=!0},"use"),R=0,O=0,M=o(function(){O++,O>=h&&(O=0,R++)},"moveToNextCell"),B={},F=0;F<i.length;F++){var P=i[F],z=e.position(P);if(z&&(z.row!==void 0||z.col!==void 0)){var $={row:z.row,col:z.col};if($.col===void 0)for($.col=0;k($.row,$.col);)$.col++;else if($.row===void 0)for($.row=0;k($.row,$.col);)$.row++;B[P.id()]=$,L($.row,$.col)}}var H=o(function(j,ie){var ne,le;if(j.locked()||j.isParent())return!1;var he=B[j.id()];if(he)ne=he.col*b+b/2+a.x1,le=he.row*w+w/2+a.y1;else{for(;k(R,O);)M();ne=O*b+b/2+a.x1,le=R*w+w/2+a.y1,L(R,O),M()}return{x:ne,y:le}},"getPos");i.layoutPositions(this,e,H)}return this};TQe={ready:o(function(){},"ready"),stop:o(function(){},"stop")};o(gB,"NullLayout");gB.prototype.run=function(){var t=this.options,e=t.eles,r=this;return t.cy,r.emit("layoutstart"),e.nodes().positions(function(){return{x:0,y:0}}),r.one("layoutready",t.ready),r.emit("layoutready"),r.one("layoutstop",t.stop),r.emit("layoutstop"),this};gB.prototype.stop=function(){return this};kQe={positions:void 0,zoom:void 0,pan:void 0,fit:!0,padding:30,spacingFactor:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(sge,"PresetLayout");sge.prototype.run=function(){var t=this.options,e=t.eles,r=e.nodes(),n=si(t.positions);function i(a){if(t.positions==null)return Aqe(a.position());if(n)return t.positions(a);var s=t.positions[a._private.data.id];return s??null}return o(i,"getPosition"),r.layoutPositions(this,t,function(a,s){var l=i(a);return a.locked()||l==null?!1:l}),this};EQe={fit:!0,padding:30,boundingBox:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(oge,"RandomLayout");oge.prototype.run=function(){var t=this.options,e=t.cy,r=t.eles,n=Hs(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),i=o(function(s,l){return{x:n.x1+Math.round(Math.random()*n.w),y:n.y1+Math.round(Math.random()*n.h)}},"getPos");return r.nodes().layoutPositions(this,t,i),this};SQe=[{name:"breadthfirst",impl:tge},{name:"circle",impl:rge},{name:"concentric",impl:nge},{name:"cose",impl:HS},{name:"grid",impl:age},{name:"null",impl:gB},{name:"preset",impl:sge},{name:"random",impl:oge}];o(lge,"NullRenderer");S0e=o(function(){},"noop"),C0e=o(function(){throw new Error("A headless instance can not render images")},"throwImgErr");lge.prototype={recalculateRenderedStyle:S0e,notify:o(function(){this.notifications++},"notify"),init:S0e,isHeadless:o(function(){return!0},"isHeadless"),png:C0e,jpg:C0e};yB={};yB.arrowShapeWidth=.3;yB.registerArrowShapes=function(){var t=this.arrowShapes={},e=this,r=o(function(h,f,d,p,m,g,y){var v=m.x-d/2-y,x=m.x+d/2+y,b=m.y-d/2-y,w=m.y+d/2+y,C=v<=h&&h<=x&&b<=f&&f<=w;return C},"bbCollide"),n=o(function(h,f,d,p,m){var g=h*Math.cos(p)-f*Math.sin(p),y=h*Math.sin(p)+f*Math.cos(p),v=g*d,x=y*d,b=v+m.x,w=x+m.y;return{x:b,y:w}},"transform"),i=o(function(h,f,d,p){for(var m=[],g=0;g<h.length;g+=2){var y=h[g],v=h[g+1];m.push(n(y,v,f,d,p))}return m},"transformPoints"),a=o(function(h){for(var f=[],d=0;d<h.length;d++){var p=h[d];f.push(p.x,p.y)}return f},"pointsToArr"),s=o(function(h){return h.pstyle("width").pfValue*h.pstyle("arrow-scale").pfValue*2},"standardGap"),l=o(function(h,f){Zt(f)&&(f=t[f]),t[h]=rr({name:h,points:[-.15,-.3,.15,-.3,.15,.3,-.15,.3],collide:o(function(p,m,g,y,v,x){var b=a(i(this.points,g+2*x,y,v)),w=Us(p,m,b);return w},"collide"),roughCollide:r,draw:o(function(p,m,g,y){var v=i(this.points,m,g,y);e.arrowShapeImpl("polygon")(p,v)},"draw"),spacing:o(function(p){return 0},"spacing"),gap:s},f)},"defineArrowShape");l("none",{collide:bS,roughCollide:bS,draw:rB,spacing:Ppe,gap:Ppe}),l("triangle",{points:[-.15,-.3,0,0,.15,-.3]}),l("arrow","triangle"),l("triangle-backcurve",{points:t.triangle.points,controlPoint:[0,-.15],roughCollide:r,draw:o(function(h,f,d,p,m){var g=i(this.points,f,d,p),y=this.controlPoint,v=n(y[0],y[1],f,d,p);e.arrowShapeImpl(this.name)(h,g,v)},"draw"),gap:o(function(h){return s(h)*.8},"gap")}),l("triangle-tee",{points:[0,0,.15,-.3,-.15,-.3,0,0],pointsTee:[-.15,-.4,-.15,-.5,.15,-.5,.15,-.4],collide:o(function(h,f,d,p,m,g,y){var v=a(i(this.points,d+2*y,p,m)),x=a(i(this.pointsTee,d+2*y,p,m)),b=Us(h,f,v)||Us(h,f,x);return b},"collide"),draw:o(function(h,f,d,p,m){var g=i(this.points,f,d,p),y=i(this.pointsTee,f,d,p);e.arrowShapeImpl(this.name)(h,g,y)},"draw")}),l("circle-triangle",{radius:.15,pointsTr:[0,-.15,.15,-.45,-.15,-.45,0,-.15],collide:o(function(h,f,d,p,m,g,y){var v=m,x=Math.pow(v.x-h,2)+Math.pow(v.y-f,2)<=Math.pow((d+2*y)*this.radius,2),b=a(i(this.points,d+2*y,p,m));return Us(h,f,b)||x},"collide"),draw:o(function(h,f,d,p,m){var g=i(this.pointsTr,f,d,p);e.arrowShapeImpl(this.name)(h,g,p.x,p.y,this.radius*f)},"draw"),spacing:o(function(h){return e.getArrowWidth(h.pstyle("width").pfValue,h.pstyle("arrow-scale").value)*this.radius},"spacing")}),l("triangle-cross",{points:[0,0,.15,-.3,-.15,-.3,0,0],baseCrossLinePts:[-.15,-.4,-.15,-.4,.15,-.4,.15,-.4],crossLinePts:o(function(h,f){var d=this.baseCrossLinePts.slice(),p=f/h,m=3,g=5;return d[m]=d[m]-p,d[g]=d[g]-p,d},"crossLinePts"),collide:o(function(h,f,d,p,m,g,y){var v=a(i(this.points,d+2*y,p,m)),x=a(i(this.crossLinePts(d,g),d+2*y,p,m)),b=Us(h,f,v)||Us(h,f,x);return b},"collide"),draw:o(function(h,f,d,p,m){var g=i(this.points,f,d,p),y=i(this.crossLinePts(f,m),f,d,p);e.arrowShapeImpl(this.name)(h,g,y)},"draw")}),l("vee",{points:[-.15,-.3,0,0,.15,-.3,0,-.15],gap:o(function(h){return s(h)*.525},"gap")}),l("circle",{radius:.15,collide:o(function(h,f,d,p,m,g,y){var v=m,x=Math.pow(v.x-h,2)+Math.pow(v.y-f,2)<=Math.pow((d+2*y)*this.radius,2);return x},"collide"),draw:o(function(h,f,d,p,m){e.arrowShapeImpl(this.name)(h,p.x,p.y,this.radius*f)},"draw"),spacing:o(function(h){return e.getArrowWidth(h.pstyle("width").pfValue,h.pstyle("arrow-scale").value)*this.radius},"spacing")}),l("tee",{points:[-.15,0,-.15,-.1,.15,-.1,.15,0],spacing:o(function(h){return 1},"spacing"),gap:o(function(h){return 1},"gap")}),l("square",{points:[-.15,0,.15,0,.15,-.3,-.15,-.3]}),l("diamond",{points:[-.15,-.15,0,-.3,.15,-.15,0,0],gap:o(function(h){return h.pstyle("width").pfValue*h.pstyle("arrow-scale").value},"gap")}),l("chevron",{points:[0,0,-.15,-.15,-.1,-.2,0,-.1,.1,-.2,.15,-.15],gap:o(function(h){return .95*h.pstyle("width").pfValue*h.pstyle("arrow-scale").value},"gap")})};qp={};qp.projectIntoViewport=function(t,e){var r=this.cy,n=this.findContainerClientCoords(),i=n[0],a=n[1],s=n[4],l=r.pan(),u=r.zoom(),h=((t-i)/s-l.x)/u,f=((e-a)/s-l.y)/u;return[h,f]};qp.findContainerClientCoords=function(){if(this.containerBB)return this.containerBB;var t=this.container,e=t.getBoundingClientRect(),r=this.cy.window().getComputedStyle(t),n=o(function(x){return parseFloat(r.getPropertyValue(x))},"styleValue"),i={left:n("padding-left"),right:n("padding-right"),top:n("padding-top"),bottom:n("padding-bottom")},a={left:n("border-left-width"),right:n("border-right-width"),top:n("border-top-width"),bottom:n("border-bottom-width")},s=t.clientWidth,l=t.clientHeight,u=i.left+i.right,h=i.top+i.bottom,f=a.left+a.right,d=e.width/(s+f),p=s-u,m=l-h,g=e.left+i.left+a.left,y=e.top+i.top+a.top;return this.containerBB=[g,y,p,m,d]};qp.invalidateContainerClientCoordsCache=function(){this.containerBB=null};qp.findNearestElement=function(t,e,r,n){return this.findNearestElements(t,e,r,n)[0]};qp.findNearestElements=function(t,e,r,n){var i=this,a=this,s=a.getCachedZSortedEles(),l=[],u=a.cy.zoom(),h=a.cy.hasCompoundNodes(),f=(n?24:8)/u,d=(n?8:2)/u,p=(n?8:2)/u,m=1/0,g,y;r&&(s=s.interactive);function v(A,S){if(A.isNode()){if(y)return;y=A,l.push(A)}if(A.isEdge()&&(S==null||S<m))if(g){if(g.pstyle("z-compound-depth").value===A.pstyle("z-compound-depth").value&&g.pstyle("z-compound-depth").value===A.pstyle("z-compound-depth").value){for(var _=0;_<l.length;_++)if(l[_].isEdge()){l[_]=A,g=A,m=S??m;break}}}else l.push(A),g=A,m=S??m}o(v,"addEle");function x(A){var S=A.outerWidth()+2*d,_=A.outerHeight()+2*d,I=S/2,D=_/2,k=A.position(),L=A.pstyle("corner-radius").value==="auto"?"auto":A.pstyle("corner-radius").pfValue,R=A._private.rscratch;if(k.x-I<=t&&t<=k.x+I&&k.y-D<=e&&e<=k.y+D){var O=a.nodeShapes[i.getNodeShape(A)];if(O.checkPoint(t,e,0,S,_,k.x,k.y,L,R))return v(A,0),!0}}o(x,"checkNode");function b(A){var S=A._private,_=S.rscratch,I=A.pstyle("width").pfValue,D=A.pstyle("arrow-scale").value,k=I/2+f,L=k*k,R=k*2,F=S.source,P=S.target,O;if(_.edgeType==="segments"||_.edgeType==="straight"||_.edgeType==="haystack"){for(var M=_.allpts,B=0;B+3<M.length;B+=2)if(zqe(t,e,M[B],M[B+1],M[B+2],M[B+3],R)&&L>(O=Wqe(t,e,M[B],M[B+1],M[B+2],M[B+3])))return v(A,O),!0}else if(_.edgeType==="bezier"||_.edgeType==="multibezier"||_.edgeType==="self"||_.edgeType==="compound"){for(var M=_.allpts,B=0;B+5<_.allpts.length;B+=4)if(Gqe(t,e,M[B],M[B+1],M[B+2],M[B+3],M[B+4],M[B+5],R)&&L>(O=Hqe(t,e,M[B],M[B+1],M[B+2],M[B+3],M[B+4],M[B+5])))return v(A,O),!0}for(var F=F||S.source,P=P||S.target,z=i.getArrowWidth(I,D),$=[{name:"source",x:_.arrowStartX,y:_.arrowStartY,angle:_.srcArrowAngle},{name:"target",x:_.arrowEndX,y:_.arrowEndY,angle:_.tgtArrowAngle},{name:"mid-source",x:_.midX,y:_.midY,angle:_.midsrcArrowAngle},{name:"mid-target",x:_.midX,y:_.midY,angle:_.midtgtArrowAngle}],B=0;B<$.length;B++){var H=$[B],Q=a.arrowShapes[A.pstyle(H.name+"-arrow-shape").value],j=A.pstyle("width").pfValue;if(Q.roughCollide(t,e,z,H.angle,{x:H.x,y:H.y},j,f)&&Q.collide(t,e,z,H.angle,{x:H.x,y:H.y},j,f))return v(A),!0}h&&l.length>0&&(x(F),x(P))}o(b,"checkEdge");function w(A,S,_){return Gl(A,S,_)}o(w,"preprop");function C(A,S){var _=A._private,I=p,D;S?D=S+"-":D="",A.boundingBox();var k=_.labelBounds[S||"main"],L=A.pstyle(D+"label").value,R=A.pstyle("text-events").strValue==="yes";if(!(!R||!L)){var O=w(_.rscratch,"labelX",S),M=w(_.rscratch,"labelY",S),B=w(_.rscratch,"labelAngle",S),F=A.pstyle(D+"text-margin-x").pfValue,P=A.pstyle(D+"text-margin-y").pfValue,z=k.x1-I-F,$=k.x2+I-F,H=k.y1-I-P,Q=k.y2+I-P;if(B){var j=Math.cos(B),ie=Math.sin(B),ne=o(function(se,ue){return se=se-O,ue=ue-M,{x:se*j-ue*ie+O,y:se*ie+ue*j+M}},"rotate"),le=ne(z,H),he=ne(z,Q),K=ne($,H),X=ne($,Q),te=[le.x+F,le.y+P,K.x+F,K.y+P,X.x+F,X.y+P,he.x+F,he.y+P];if(Us(t,e,te))return v(A),!0}else if(K1(k,t,e))return v(A),!0}}o(C,"checkLabel");for(var T=s.length-1;T>=0;T--){var E=s[T];E.isNode()?x(E)||C(E):b(E)||C(E)||C(E,"source")||C(E,"target")}return l};qp.getAllInBox=function(t,e,r,n){var i=this.getCachedZSortedEles().interactive,a=[],s=Math.min(t,r),l=Math.max(t,r),u=Math.min(e,n),h=Math.max(e,n);t=s,r=l,e=u,n=h;for(var f=Hs({x1:t,y1:e,x2:r,y2:n}),d=0;d<i.length;d++){var p=i[d];if(p.isNode()){var m=p,g=m.boundingBox({includeNodes:!0,includeEdges:!1,includeLabels:!1});aB(f,g)&&!yme(g,f)&&a.push(m)}else{var y=p,v=y._private,x=v.rscratch;if(x.startX!=null&&x.startY!=null&&!K1(f,x.startX,x.startY)||x.endX!=null&&x.endY!=null&&!K1(f,x.endX,x.endY))continue;if(x.edgeType==="bezier"||x.edgeType==="multibezier"||x.edgeType==="self"||x.edgeType==="compound"||x.edgeType==="segments"||x.edgeType==="haystack"){for(var b=v.rstyle.bezierPts||v.rstyle.linePts||v.rstyle.haystackPts,w=!0,C=0;C<b.length;C++)if(!$qe(f,b[C])){w=!1;break}w&&a.push(y)}else(x.edgeType==="haystack"||x.edgeType==="straight")&&a.push(y)}}return a};AS={};AS.calculateArrowAngles=function(t){var e=t._private.rscratch,r=e.edgeType==="haystack",n=e.edgeType==="bezier",i=e.edgeType==="multibezier",a=e.edgeType==="segments",s=e.edgeType==="compound",l=e.edgeType==="self",u,h,f,d,p,m,x,b;if(r?(f=e.haystackPts[0],d=e.haystackPts[1],p=e.haystackPts[2],m=e.haystackPts[3]):(f=e.arrowStartX,d=e.arrowStartY,p=e.arrowEndX,m=e.arrowEndY),x=e.midX,b=e.midY,a)u=f-e.segpts[0],h=d-e.segpts[1];else if(i||s||l||n){var g=e.allpts,y=oa(g[0],g[2],g[4],.1),v=oa(g[1],g[3],g[5],.1);u=f-y,h=d-v}else u=f-x,h=d-b;e.srcArrowAngle=K6(u,h);var x=e.midX,b=e.midY;if(r&&(x=(f+p)/2,b=(d+m)/2),u=p-f,h=m-d,a){var g=e.allpts;if(g.length/2%2===0){var w=g.length/2,C=w-2;u=g[w]-g[C],h=g[w+1]-g[C+1]}else if(e.isRound)u=e.midVector[1],h=-e.midVector[0];else{var w=g.length/2-1,C=w-2;u=g[w]-g[C],h=g[w+1]-g[C+1]}}else if(i||s||l){var g=e.allpts,T=e.ctrlpts,E,A,S,_;if(T.length/2%2===0){var I=g.length/2-1,D=I+2,k=D+2;E=oa(g[I],g[D],g[k],0),A=oa(g[I+1],g[D+1],g[k+1],0),S=oa(g[I],g[D],g[k],1e-4),_=oa(g[I+1],g[D+1],g[k+1],1e-4)}else{var D=g.length/2-1,I=D-2,k=D+2;E=oa(g[I],g[D],g[k],.4999),A=oa(g[I+1],g[D+1],g[k+1],.4999),S=oa(g[I],g[D],g[k],.5),_=oa(g[I+1],g[D+1],g[k+1],.5)}u=S-E,h=_-A}if(e.midtgtArrowAngle=K6(u,h),e.midDispX=u,e.midDispY=h,u*=-1,h*=-1,a){var g=e.allpts;if(g.length/2%2!==0){if(!e.isRound){var w=g.length/2-1,L=w+2;u=-(g[L]-g[w]),h=-(g[L+1]-g[w+1])}}}if(e.midsrcArrowAngle=K6(u,h),a)u=p-e.segpts[e.segpts.length-2],h=m-e.segpts[e.segpts.length-1];else if(i||s||l||n){var g=e.allpts,R=g.length,y=oa(g[R-6],g[R-4],g[R-2],.9),v=oa(g[R-5],g[R-3],g[R-1],.9);u=p-y,h=m-v}else u=p-x,h=m-b;e.tgtArrowAngle=K6(u,h)};AS.getArrowWidth=AS.getArrowHeight=function(t,e){var r=this.arrowWidthCache=this.arrowWidthCache||{},n=r[t+", "+e];return n||(n=Math.max(Math.pow(t*13.37,.9),29)*e,r[t+", "+e]=n,n)};qc={},Jo={},L0e=o(function(e,r,n){n.x=r.x-e.x,n.y=r.y-e.y,n.len=Math.sqrt(n.x*n.x+n.y*n.y),n.nx=n.x/n.len,n.ny=n.y/n.len,n.ang=Math.atan2(n.ny,n.nx)},"asVec"),CQe=o(function(e,r){r.x=e.x*-1,r.y=e.y*-1,r.nx=e.nx*-1,r.ny=e.ny*-1,r.ang=e.ang>0?-(Math.PI-e.ang):Math.PI+e.ang},"invertVec"),AQe=o(function(e,r,n,i,a){if(e!==D0e?L0e(r,e,qc):CQe(Jo,qc),L0e(r,n,Jo),A0e=qc.nx*Jo.ny-qc.ny*Jo.nx,_0e=qc.nx*Jo.nx-qc.ny*-Jo.ny,Ku=Math.asin(Math.max(-1,Math.min(1,A0e))),Math.abs(Ku)<1e-6){HP=r.x,WP=r.y,Bp=G1=0;return}Fp=1,gS=!1,_0e<0?Ku<0?Ku=Math.PI+Ku:(Ku=Math.PI-Ku,Fp=-1,gS=!0):Ku>0&&(Fp=-1,gS=!0),r.radius!==void 0?G1=r.radius:G1=i,Mp=Ku/2,aS=Math.min(qc.len/2,Jo.len/2),a?(Wc=Math.abs(Math.cos(Mp)*G1/Math.sin(Mp)),Wc>aS?(Wc=aS,Bp=Math.abs(Wc*Math.sin(Mp)/Math.cos(Mp))):Bp=G1):(Wc=Math.min(aS,G1),Bp=Math.abs(Wc*Math.sin(Mp)/Math.cos(Mp))),qP=r.x+Jo.nx*Wc,YP=r.y+Jo.ny*Wc,HP=qP-Jo.ny*Bp*Fp,WP=YP+Jo.nx*Bp*Fp,cge=r.x+qc.nx*Wc,uge=r.y+qc.ny*Wc,D0e=r},"calcCornerArc");o(hge,"drawPreparedRoundCorner");o(vB,"getRoundCorner");Va={};Va.findMidptPtsEtc=function(t,e){var r=e.posPts,n=e.intersectionPts,i=e.vectorNormInverse,a,s=t.pstyle("source-endpoint"),l=t.pstyle("target-endpoint"),u=s.units!=null&&l.units!=null,h=o(function(T,E,A,S){var _=S-E,I=A-T,D=Math.sqrt(I*I+_*_);return{x:-_/D,y:I/D}},"recalcVectorNormInverse"),f=t.pstyle("edge-distances").value;switch(f){case"node-position":a=r;break;case"intersection":a=n;break;case"endpoints":{if(u){var d=this.manualEndptToPx(t.source()[0],s),p=_i(d,2),m=p[0],g=p[1],y=this.manualEndptToPx(t.target()[0],l),v=_i(y,2),x=v[0],b=v[1],w={x1:m,y1:g,x2:x,y2:b};i=h(m,g,x,b),a=w}else un("Edge ".concat(t.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),a=n;break}}return{midptPts:a,vectorNormInverse:i}};Va.findHaystackPoints=function(t){for(var e=0;e<t.length;e++){var r=t[e],n=r._private,i=n.rscratch;if(!i.haystack){var a=Math.random()*2*Math.PI;i.source={x:Math.cos(a),y:Math.sin(a)},a=Math.random()*2*Math.PI,i.target={x:Math.cos(a),y:Math.sin(a)}}var s=n.source,l=n.target,u=s.position(),h=l.position(),f=s.width(),d=l.width(),p=s.height(),m=l.height(),g=r.pstyle("haystack-radius").value,y=g/2;i.haystackPts=i.allpts=[i.source.x*f*y+u.x,i.source.y*p*y+u.y,i.target.x*d*y+h.x,i.target.y*m*y+h.y],i.midX=(i.allpts[0]+i.allpts[2])/2,i.midY=(i.allpts[1]+i.allpts[3])/2,i.edgeType="haystack",i.haystack=!0,this.storeEdgeProjections(r),this.calculateArrowAngles(r),this.recalculateEdgeLabelProjections(r),this.calculateLabelAngles(r)}};Va.findSegmentsPoints=function(t,e){var r=t._private.rscratch,n=t.pstyle("segment-weights"),i=t.pstyle("segment-distances"),a=t.pstyle("segment-radii"),s=t.pstyle("radius-type"),l=Math.min(n.pfValue.length,i.pfValue.length),u=a.pfValue[a.pfValue.length-1],h=s.pfValue[s.pfValue.length-1];r.edgeType="segments",r.segpts=[],r.radii=[],r.isArcRadius=[];for(var f=0;f<l;f++){var d=n.pfValue[f],p=i.pfValue[f],m=1-d,g=d,y=this.findMidptPtsEtc(t,e),v=y.midptPts,x=y.vectorNormInverse,b={x:v.x1*m+v.x2*g,y:v.y1*m+v.y2*g};r.segpts.push(b.x+x.x*p,b.y+x.y*p),r.radii.push(a.pfValue[f]!==void 0?a.pfValue[f]:u),r.isArcRadius.push((s.pfValue[f]!==void 0?s.pfValue[f]:h)==="arc-radius")}};Va.findLoopPoints=function(t,e,r,n){var i=t._private.rscratch,a=e.dirCounts,s=e.srcPos,l=t.pstyle("control-point-distances"),u=l?l.pfValue[0]:void 0,h=t.pstyle("loop-direction").pfValue,f=t.pstyle("loop-sweep").pfValue,d=t.pstyle("control-point-step-size").pfValue;i.edgeType="self";var p=r,m=d;n&&(p=0,m=u);var g=h-Math.PI/2,y=g-f/2,v=g+f/2,x=h+"_"+f;p=a[x]===void 0?a[x]=0:++a[x],i.ctrlpts=[s.x+Math.cos(y)*1.4*m*(p/3+1),s.y+Math.sin(y)*1.4*m*(p/3+1),s.x+Math.cos(v)*1.4*m*(p/3+1),s.y+Math.sin(v)*1.4*m*(p/3+1)]};Va.findCompoundLoopPoints=function(t,e,r,n){var i=t._private.rscratch;i.edgeType="compound";var a=e.srcPos,s=e.tgtPos,l=e.srcW,u=e.srcH,h=e.tgtW,f=e.tgtH,d=t.pstyle("control-point-step-size").pfValue,p=t.pstyle("control-point-distances"),m=p?p.pfValue[0]:void 0,g=r,y=d;n&&(g=0,y=m);var v=50,x={x:a.x-l/2,y:a.y-u/2},b={x:s.x-h/2,y:s.y-f/2},w={x:Math.min(x.x,b.x),y:Math.min(x.y,b.y)},C=.5,T=Math.max(C,Math.log(l*.01)),E=Math.max(C,Math.log(h*.01));i.ctrlpts=[w.x,w.y-(1+Math.pow(v,1.12)/100)*y*(g/3+1)*T,w.x-(1+Math.pow(v,1.12)/100)*y*(g/3+1)*E,w.y]};Va.findStraightEdgePoints=function(t){t._private.rscratch.edgeType="straight"};Va.findBezierPoints=function(t,e,r,n,i){var a=t._private.rscratch,s=t.pstyle("control-point-step-size").pfValue,l=t.pstyle("control-point-distances"),u=t.pstyle("control-point-weights"),h=l&&u?Math.min(l.value.length,u.value.length):1,f=l?l.pfValue[0]:void 0,d=u.value[0],p=n;a.edgeType=p?"multibezier":"bezier",a.ctrlpts=[];for(var m=0;m<h;m++){var g=(.5-e.eles.length/2+r)*s*(i?-1:1),y=void 0,v=mme(g);p&&(f=l?l.pfValue[m]:s,d=u.value[m]),n?y=f:y=f!==void 0?v*f:void 0;var x=y!==void 0?y:g,b=1-d,w=d,C=this.findMidptPtsEtc(t,e),T=C.midptPts,E=C.vectorNormInverse,A={x:T.x1*b+T.x2*w,y:T.y1*b+T.y2*w};a.ctrlpts.push(A.x+E.x*x,A.y+E.y*x)}};Va.findTaxiPoints=function(t,e){var r=t._private.rscratch;r.edgeType="segments";var n="vertical",i="horizontal",a="leftward",s="rightward",l="downward",u="upward",h="auto",f=e.posPts,d=e.srcW,p=e.srcH,m=e.tgtW,g=e.tgtH,y=t.pstyle("edge-distances").value,v=y!=="node-position",x=t.pstyle("taxi-direction").value,b=x,w=t.pstyle("taxi-turn"),C=w.units==="%",T=w.pfValue,E=T<0,A=t.pstyle("taxi-turn-min-distance").pfValue,S=v?(d+m)/2:0,_=v?(p+g)/2:0,I=f.x2-f.x1,D=f.y2-f.y1,k=o(function(q,pe){return q>0?Math.max(q-pe,0):Math.min(q+pe,0)},"subDWH"),L=k(I,S),R=k(D,_),O=!1;b===h?x=Math.abs(L)>Math.abs(R)?i:n:b===u||b===l?(x=n,O=!0):(b===a||b===s)&&(x=i,O=!0);var M=x===n,B=M?R:L,F=M?D:I,P=mme(F),z=!1;!(O&&(C||E))&&(b===l&&F<0||b===u&&F>0||b===a&&F>0||b===s&&F<0)&&(P*=-1,B=P*Math.abs(B),z=!0);var $;if(C){var H=T<0?1+T:T;$=H*B}else{var Q=T<0?B:0;$=Q+T*P}var j=o(function(q){return Math.abs(q)<A||Math.abs(q)>=Math.abs(B)},"getIsTooClose"),ie=j($),ne=j(Math.abs(B)-Math.abs($)),le=ie||ne;if(le&&!z)if(M){var he=Math.abs(F)<=p/2,K=Math.abs(I)<=m/2;if(he){var X=(f.x1+f.x2)/2,te=f.y1,J=f.y2;r.segpts=[X,te,X,J]}else if(K){var se=(f.y1+f.y2)/2,ue=f.x1,Z=f.x2;r.segpts=[ue,se,Z,se]}else r.segpts=[f.x1,f.y2]}else{var Se=Math.abs(F)<=d/2,ce=Math.abs(D)<=g/2;if(Se){var ae=(f.y1+f.y2)/2,Oe=f.x1,ge=f.x2;r.segpts=[Oe,ae,ge,ae]}else if(ce){var ze=(f.x1+f.x2)/2,He=f.y1,$e=f.y2;r.segpts=[ze,He,ze,$e]}else r.segpts=[f.x2,f.y1]}else if(M){var Re=f.y1+$+(v?p/2*P:0),Ie=f.x1,be=f.x2;r.segpts=[Ie,Re,be,Re]}else{var W=f.x1+$+(v?d/2*P:0),de=f.y1,re=f.y2;r.segpts=[W,de,W,re]}if(r.isRound){var oe=t.pstyle("taxi-radius").value,V=t.pstyle("radius-type").value[0]==="arc-radius";r.radii=new Array(r.segpts.length/2).fill(oe),r.isArcRadius=new Array(r.segpts.length/2).fill(V)}};Va.tryToCorrectInvalidPoints=function(t,e){var r=t._private.rscratch;if(r.edgeType==="bezier"){var n=e.srcPos,i=e.tgtPos,a=e.srcW,s=e.srcH,l=e.tgtW,u=e.tgtH,h=e.srcShape,f=e.tgtShape,d=e.srcCornerRadius,p=e.tgtCornerRadius,m=e.srcRs,g=e.tgtRs,y=!Ct(r.startX)||!Ct(r.startY),v=!Ct(r.arrowStartX)||!Ct(r.arrowStartY),x=!Ct(r.endX)||!Ct(r.endY),b=!Ct(r.arrowEndX)||!Ct(r.arrowEndY),w=3,C=this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth,T=w*C,E=Gp({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.startX,y:r.startY}),A=E<T,S=Gp({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.endX,y:r.endY}),_=S<T,I=!1;if(y||v||A){I=!0;var D={x:r.ctrlpts[0]-n.x,y:r.ctrlpts[1]-n.y},k=Math.sqrt(D.x*D.x+D.y*D.y),L={x:D.x/k,y:D.y/k},R=Math.max(a,s),O={x:r.ctrlpts[0]+L.x*2*R,y:r.ctrlpts[1]+L.y*2*R},M=h.intersectLine(n.x,n.y,a,s,O.x,O.y,0,d,m);A?(r.ctrlpts[0]=r.ctrlpts[0]+L.x*(T-E),r.ctrlpts[1]=r.ctrlpts[1]+L.y*(T-E)):(r.ctrlpts[0]=M[0]+L.x*T,r.ctrlpts[1]=M[1]+L.y*T)}if(x||b||_){I=!0;var B={x:r.ctrlpts[0]-i.x,y:r.ctrlpts[1]-i.y},F=Math.sqrt(B.x*B.x+B.y*B.y),P={x:B.x/F,y:B.y/F},z=Math.max(a,s),$={x:r.ctrlpts[0]+P.x*2*z,y:r.ctrlpts[1]+P.y*2*z},H=f.intersectLine(i.x,i.y,l,u,$.x,$.y,0,p,g);_?(r.ctrlpts[0]=r.ctrlpts[0]+P.x*(T-S),r.ctrlpts[1]=r.ctrlpts[1]+P.y*(T-S)):(r.ctrlpts[0]=H[0]+P.x*T,r.ctrlpts[1]=H[1]+P.y*T)}I&&this.findEndpoints(t)}};Va.storeAllpts=function(t){var e=t._private.rscratch;if(e.edgeType==="multibezier"||e.edgeType==="bezier"||e.edgeType==="self"||e.edgeType==="compound"){e.allpts=[],e.allpts.push(e.startX,e.startY);for(var r=0;r+1<e.ctrlpts.length;r+=2)e.allpts.push(e.ctrlpts[r],e.ctrlpts[r+1]),r+3<e.ctrlpts.length&&e.allpts.push((e.ctrlpts[r]+e.ctrlpts[r+2])/2,(e.ctrlpts[r+1]+e.ctrlpts[r+3])/2);e.allpts.push(e.endX,e.endY);var n,i;e.ctrlpts.length/2%2===0?(n=e.allpts.length/2-1,e.midX=e.allpts[n],e.midY=e.allpts[n+1]):(n=e.allpts.length/2-3,i=.5,e.midX=oa(e.allpts[n],e.allpts[n+2],e.allpts[n+4],i),e.midY=oa(e.allpts[n+1],e.allpts[n+3],e.allpts[n+5],i))}else if(e.edgeType==="straight")e.allpts=[e.startX,e.startY,e.endX,e.endY],e.midX=(e.startX+e.endX+e.arrowStartX+e.arrowEndX)/4,e.midY=(e.startY+e.endY+e.arrowStartY+e.arrowEndY)/4;else if(e.edgeType==="segments"){if(e.allpts=[],e.allpts.push(e.startX,e.startY),e.allpts.push.apply(e.allpts,e.segpts),e.allpts.push(e.endX,e.endY),e.isRound){e.roundCorners=[];for(var a=2;a+3<e.allpts.length;a+=2){var s=e.radii[a/2-1],l=e.isArcRadius[a/2-1];e.roundCorners.push(vB({x:e.allpts[a-2],y:e.allpts[a-1]},{x:e.allpts[a],y:e.allpts[a+1],radius:s},{x:e.allpts[a+2],y:e.allpts[a+3]},s,l))}}if(e.segpts.length%4===0){var u=e.segpts.length/2,h=u-2;e.midX=(e.segpts[h]+e.segpts[u])/2,e.midY=(e.segpts[h+1]+e.segpts[u+1])/2}else{var f=e.segpts.length/2-1;if(!e.isRound)e.midX=e.segpts[f],e.midY=e.segpts[f+1];else{var d={x:e.segpts[f],y:e.segpts[f+1]},p=e.roundCorners[f/2],m=[d.x-p.cx,d.y-p.cy],g=p.radius/Math.sqrt(Math.pow(m[0],2)+Math.pow(m[1],2));m=m.map(function(y){return y*g}),e.midX=p.cx+m[0],e.midY=p.cy+m[1],e.midVector=m}}}};Va.checkForInvalidEdgeWarning=function(t){var e=t[0]._private.rscratch;e.nodesOverlap||Ct(e.startX)&&Ct(e.startY)&&Ct(e.endX)&&Ct(e.endY)?e.loggedErr=!1:e.loggedErr||(e.loggedErr=!0,un("Edge `"+t.id()+"` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap."))};Va.findEdgeControlPoints=function(t){var e=this;if(!(!t||t.length===0)){for(var r=this,n=r.cy,i=n.hasCompoundNodes(),a={map:new Xc,get:o(function(A){var S=this.map.get(A[0]);return S!=null?S.get(A[1]):null},"get"),set:o(function(A,S){var _=this.map.get(A[0]);_==null&&(_=new Xc,this.map.set(A[0],_)),_.set(A[1],S)},"set")},s=[],l=[],u=0;u<t.length;u++){var h=t[u],f=h._private,d=h.pstyle("curve-style").value;if(!(h.removed()||!h.takesUpSpace())){if(d==="haystack"){l.push(h);continue}var p=d==="unbundled-bezier"||d.endsWith("segments")||d==="straight"||d==="straight-triangle"||d.endsWith("taxi"),m=d==="unbundled-bezier"||d==="bezier",g=f.source,y=f.target,v=g.poolIndex(),x=y.poolIndex(),b=[v,x].sort(),w=a.get(b);w==null&&(w={eles:[]},a.set(b,w),s.push(b)),w.eles.push(h),p&&(w.hasUnbundled=!0),m&&(w.hasBezier=!0)}}for(var C=o(function(A){var S=s[A],_=a.get(S),I=void 0;if(!_.hasUnbundled){var D=_.eles[0].parallelEdges().filter(function(W){return W.isBundledBezier()});nB(_.eles),D.forEach(function(W){return _.eles.push(W)}),_.eles.sort(function(W,de){return W.poolIndex()-de.poolIndex()})}var k=_.eles[0],L=k.source(),R=k.target();if(L.poolIndex()>R.poolIndex()){var O=L;L=R,R=O}var M=_.srcPos=L.position(),B=_.tgtPos=R.position(),F=_.srcW=L.outerWidth(),P=_.srcH=L.outerHeight(),z=_.tgtW=R.outerWidth(),$=_.tgtH=R.outerHeight(),H=_.srcShape=r.nodeShapes[e.getNodeShape(L)],Q=_.tgtShape=r.nodeShapes[e.getNodeShape(R)],j=_.srcCornerRadius=L.pstyle("corner-radius").value==="auto"?"auto":L.pstyle("corner-radius").pfValue,ie=_.tgtCornerRadius=R.pstyle("corner-radius").value==="auto"?"auto":R.pstyle("corner-radius").pfValue,ne=_.tgtRs=R._private.rscratch,le=_.srcRs=L._private.rscratch;_.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var he=0;he<_.eles.length;he++){var K=_.eles[he],X=K[0]._private.rscratch,te=K.pstyle("curve-style").value,J=te==="unbundled-bezier"||te.endsWith("segments")||te.endsWith("taxi"),se=!L.same(K.source());if(!_.calculatedIntersection&&L!==R&&(_.hasBezier||_.hasUnbundled)){_.calculatedIntersection=!0;var ue=H.intersectLine(M.x,M.y,F,P,B.x,B.y,0,j,le),Z=_.srcIntn=ue,Se=Q.intersectLine(B.x,B.y,z,$,M.x,M.y,0,ie,ne),ce=_.tgtIntn=Se,ae=_.intersectionPts={x1:ue[0],x2:Se[0],y1:ue[1],y2:Se[1]},Oe=_.posPts={x1:M.x,x2:B.x,y1:M.y,y2:B.y},ge=Se[1]-ue[1],ze=Se[0]-ue[0],He=Math.sqrt(ze*ze+ge*ge),$e=_.vector={x:ze,y:ge},Re=_.vectorNorm={x:$e.x/He,y:$e.y/He},Ie={x:-Re.y,y:Re.x};_.nodesOverlap=!Ct(He)||Q.checkPoint(ue[0],ue[1],0,z,$,B.x,B.y,ie,ne)||H.checkPoint(Se[0],Se[1],0,F,P,M.x,M.y,j,le),_.vectorNormInverse=Ie,I={nodesOverlap:_.nodesOverlap,dirCounts:_.dirCounts,calculatedIntersection:!0,hasBezier:_.hasBezier,hasUnbundled:_.hasUnbundled,eles:_.eles,srcPos:B,srcRs:ne,tgtPos:M,tgtRs:le,srcW:z,srcH:$,tgtW:F,tgtH:P,srcIntn:ce,tgtIntn:Z,srcShape:Q,tgtShape:H,posPts:{x1:Oe.x2,y1:Oe.y2,x2:Oe.x1,y2:Oe.y1},intersectionPts:{x1:ae.x2,y1:ae.y2,x2:ae.x1,y2:ae.y1},vector:{x:-$e.x,y:-$e.y},vectorNorm:{x:-Re.x,y:-Re.y},vectorNormInverse:{x:-Ie.x,y:-Ie.y}}}var be=se?I:_;X.nodesOverlap=be.nodesOverlap,X.srcIntn=be.srcIntn,X.tgtIntn=be.tgtIntn,X.isRound=te.startsWith("round"),i&&(L.isParent()||L.isChild()||R.isParent()||R.isChild())&&(L.parents().anySame(R)||R.parents().anySame(L)||L.same(R)&&L.isParent())?e.findCompoundLoopPoints(K,be,he,J):L===R?e.findLoopPoints(K,be,he,J):te.endsWith("segments")?e.findSegmentsPoints(K,be):te.endsWith("taxi")?e.findTaxiPoints(K,be):te==="straight"||!J&&_.eles.length%2===1&&he===Math.floor(_.eles.length/2)?e.findStraightEdgePoints(K):e.findBezierPoints(K,be,he,J,se),e.findEndpoints(K),e.tryToCorrectInvalidPoints(K,be),e.checkForInvalidEdgeWarning(K),e.storeAllpts(K),e.storeEdgeProjections(K),e.calculateArrowAngles(K),e.recalculateEdgeLabelProjections(K),e.calculateLabelAngles(K)}},"_loop"),T=0;T<s.length;T++)C(T);this.findHaystackPoints(l)}};o(fge,"getPts");Va.getSegmentPoints=function(t){var e=t[0]._private.rscratch;this.recalculateRenderedStyle(t);var r=e.edgeType;if(r==="segments")return fge(e.segpts)};Va.getControlPoints=function(t){var e=t[0]._private.rscratch;this.recalculateRenderedStyle(t);var r=e.edgeType;if(r==="bezier"||r==="multibezier"||r==="self"||r==="compound")return fge(e.ctrlpts)};Va.getEdgeMidpoint=function(t){var e=t[0]._private.rscratch;return this.recalculateRenderedStyle(t),{x:e.midX,y:e.midY}};o4={};o4.manualEndptToPx=function(t,e){var r=this,n=t.position(),i=t.outerWidth(),a=t.outerHeight(),s=t._private.rscratch;if(e.value.length===2){var l=[e.pfValue[0],e.pfValue[1]];return e.units[0]==="%"&&(l[0]=l[0]*i),e.units[1]==="%"&&(l[1]=l[1]*a),l[0]+=n.x,l[1]+=n.y,l}else{var u=e.pfValue[0];u=-Math.PI/2+u;var h=2*Math.max(i,a),f=[n.x+Math.cos(u)*h,n.y+Math.sin(u)*h];return r.nodeShapes[this.getNodeShape(t)].intersectLine(n.x,n.y,i,a,f[0],f[1],0,t.pstyle("corner-radius").value==="auto"?"auto":t.pstyle("corner-radius").pfValue,s)}};o4.findEndpoints=function(t){var e=this,r,n=t.source()[0],i=t.target()[0],a=n.position(),s=i.position(),l=t.pstyle("target-arrow-shape").value,u=t.pstyle("source-arrow-shape").value,h=t.pstyle("target-distance-from-node").pfValue,f=t.pstyle("source-distance-from-node").pfValue,d=n._private.rscratch,p=i._private.rscratch,m=t.pstyle("curve-style").value,g=t._private.rscratch,y=g.edgeType,v=m==="taxi",x=y==="self"||y==="compound",b=y==="bezier"||y==="multibezier"||x,w=y!=="bezier",C=y==="straight"||y==="segments",T=y==="segments",E=b||w||C,A=x||v,S=t.pstyle("source-endpoint"),_=A?"outside-to-node":S.value,I=n.pstyle("corner-radius").value==="auto"?"auto":n.pstyle("corner-radius").pfValue,D=t.pstyle("target-endpoint"),k=A?"outside-to-node":D.value,L=i.pstyle("corner-radius").value==="auto"?"auto":i.pstyle("corner-radius").pfValue;g.srcManEndpt=S,g.tgtManEndpt=D;var R,O,M,B;if(b){var F=[g.ctrlpts[0],g.ctrlpts[1]],P=w?[g.ctrlpts[g.ctrlpts.length-2],g.ctrlpts[g.ctrlpts.length-1]]:F;R=P,O=F}else if(C){var z=T?g.segpts.slice(0,2):[s.x,s.y],$=T?g.segpts.slice(g.segpts.length-2):[a.x,a.y];R=$,O=z}if(k==="inside-to-node")r=[s.x,s.y];else if(D.units)r=this.manualEndptToPx(i,D);else if(k==="outside-to-line")r=g.tgtIntn;else if(k==="outside-to-node"||k==="outside-to-node-or-label"?M=R:(k==="outside-to-line"||k==="outside-to-line-or-label")&&(M=[a.x,a.y]),r=e.nodeShapes[this.getNodeShape(i)].intersectLine(s.x,s.y,i.outerWidth(),i.outerHeight(),M[0],M[1],0,L,p),k==="outside-to-node-or-label"||k==="outside-to-line-or-label"){var H=i._private.rscratch,Q=H.labelWidth,j=H.labelHeight,ie=H.labelX,ne=H.labelY,le=Q/2,he=j/2,K=i.pstyle("text-valign").value;K==="top"?ne-=he:K==="bottom"&&(ne+=he);var X=i.pstyle("text-halign").value;X==="left"?ie-=le:X==="right"&&(ie+=le);var te=Xb(M[0],M[1],[ie-le,ne-he,ie+le,ne-he,ie+le,ne+he,ie-le,ne+he],s.x,s.y);if(te.length>0){var J=a,se=Op(J,U1(r)),ue=Op(J,U1(te)),Z=se;if(ue<se&&(r=te,Z=ue),te.length>2){var Se=Op(J,{x:te[2],y:te[3]});Se<Z&&(r=[te[2],te[3]])}}}var ce=Q6(r,R,e.arrowShapes[l].spacing(t)+h),ae=Q6(r,R,e.arrowShapes[l].gap(t)+h);if(g.endX=ae[0],g.endY=ae[1],g.arrowEndX=ce[0],g.arrowEndY=ce[1],_==="inside-to-node")r=[a.x,a.y];else if(S.units)r=this.manualEndptToPx(n,S);else if(_==="outside-to-line")r=g.srcIntn;else if(_==="outside-to-node"||_==="outside-to-node-or-label"?B=O:(_==="outside-to-line"||_==="outside-to-line-or-label")&&(B=[s.x,s.y]),r=e.nodeShapes[this.getNodeShape(n)].intersectLine(a.x,a.y,n.outerWidth(),n.outerHeight(),B[0],B[1],0,I,d),_==="outside-to-node-or-label"||_==="outside-to-line-or-label"){var Oe=n._private.rscratch,ge=Oe.labelWidth,ze=Oe.labelHeight,He=Oe.labelX,$e=Oe.labelY,Re=ge/2,Ie=ze/2,be=n.pstyle("text-valign").value;be==="top"?$e-=Ie:be==="bottom"&&($e+=Ie);var W=n.pstyle("text-halign").value;W==="left"?He-=Re:W==="right"&&(He+=Re);var de=Xb(B[0],B[1],[He-Re,$e-Ie,He+Re,$e-Ie,He+Re,$e+Ie,He-Re,$e+Ie],a.x,a.y);if(de.length>0){var re=s,oe=Op(re,U1(r)),V=Op(re,U1(de)),xe=oe;if(V<oe&&(r=[de[0],de[1]],xe=V),de.length>2){var q=Op(re,{x:de[2],y:de[3]});q<xe&&(r=[de[2],de[3]])}}}var pe=Q6(r,O,e.arrowShapes[u].spacing(t)+f),ve=Q6(r,O,e.arrowShapes[u].gap(t)+f);g.startX=ve[0],g.startY=ve[1],g.arrowStartX=pe[0],g.arrowStartY=pe[1],E&&(!Ct(g.startX)||!Ct(g.startY)||!Ct(g.endX)||!Ct(g.endY)?g.badLine=!0:g.badLine=!1)};o4.getSourceEndpoint=function(t){var e=t[0]._private.rscratch;switch(this.recalculateRenderedStyle(t),e.edgeType){case"haystack":return{x:e.haystackPts[0],y:e.haystackPts[1]};default:return{x:e.arrowStartX,y:e.arrowStartY}}};o4.getTargetEndpoint=function(t){var e=t[0]._private.rscratch;switch(this.recalculateRenderedStyle(t),e.edgeType){case"haystack":return{x:e.haystackPts[2],y:e.haystackPts[3]};default:return{x:e.arrowEndX,y:e.arrowEndY}}};xB={};o(_Qe,"pushBezierPts");xB.storeEdgeProjections=function(t){var e=t._private,r=e.rscratch,n=r.edgeType;if(e.rstyle.bezierPts=null,e.rstyle.linePts=null,e.rstyle.haystackPts=null,n==="multibezier"||n==="bezier"||n==="self"||n==="compound"){e.rstyle.bezierPts=[];for(var i=0;i+5<r.allpts.length;i+=4)_Qe(this,t,r.allpts.slice(i,i+6))}else if(n==="segments")for(var a=e.rstyle.linePts=[],i=0;i+1<r.allpts.length;i+=2)a.push({x:r.allpts[i],y:r.allpts[i+1]});else if(n==="haystack"){var s=r.haystackPts;e.rstyle.haystackPts=[{x:s[0],y:s[1]},{x:s[2],y:s[3]}]}e.rstyle.arrowWidth=this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth};xB.recalculateEdgeProjections=function(t){this.findEdgeControlPoints(t)};Kc={};Kc.recalculateNodeLabelProjection=function(t){var e=t.pstyle("label").strValue;if(!Af(e)){var r,n,i=t._private,a=t.width(),s=t.height(),l=t.padding(),u=t.position(),h=t.pstyle("text-halign").strValue,f=t.pstyle("text-valign").strValue,d=i.rscratch,p=i.rstyle;switch(h){case"left":r=u.x-a/2-l;break;case"right":r=u.x+a/2+l;break;default:r=u.x}switch(f){case"top":n=u.y-s/2-l;break;case"bottom":n=u.y+s/2+l;break;default:n=u.y}d.labelX=r,d.labelY=n,p.labelX=r,p.labelY=n,this.calculateLabelAngles(t),this.applyLabelDimensions(t)}};dge=o(function(e,r){var n=Math.atan(r/e);return e===0&&n<0&&(n=n*-1),n},"lineAngleFromDelta"),pge=o(function(e,r){var n=r.x-e.x,i=r.y-e.y;return dge(n,i)},"lineAngle"),DQe=o(function(e,r,n,i){var a=Yb(0,i-.001,1),s=Yb(0,i+.001,1),l=W1(e,r,n,a),u=W1(e,r,n,s);return pge(l,u)},"bezierAngle");Kc.recalculateEdgeLabelProjections=function(t){var e,r=t._private,n=r.rscratch,i=this,a={mid:t.pstyle("label").strValue,source:t.pstyle("source-label").strValue,target:t.pstyle("target-label").strValue};if(a.mid||a.source||a.target){e={x:n.midX,y:n.midY};var s=o(function(d,p,m){kf(r.rscratch,d,p,m),kf(r.rstyle,d,p,m)},"setRs");s("labelX",null,e.x),s("labelY",null,e.y);var l=dge(n.midDispX,n.midDispY);s("labelAutoAngle",null,l);var u=o(function f(){if(f.cache)return f.cache;for(var d=[],p=0;p+5<n.allpts.length;p+=4){var m={x:n.allpts[p],y:n.allpts[p+1]},g={x:n.allpts[p+2],y:n.allpts[p+3]},y={x:n.allpts[p+4],y:n.allpts[p+5]};d.push({p0:m,p1:g,p2:y,startDist:0,length:0,segments:[]})}var v=r.rstyle.bezierPts,x=i.bezierProjPcts.length;function b(A,S,_,I,D){var k=Gp(S,_),L=A.segments[A.segments.length-1],R={p0:S,p1:_,t0:I,t1:D,startDist:L?L.startDist+L.length:0,length:k};A.segments.push(R),A.length+=k}o(b,"addSegment");for(var w=0;w<d.length;w++){var C=d[w],T=d[w-1];T&&(C.startDist=T.startDist+T.length),b(C,C.p0,v[w*x],0,i.bezierProjPcts[0]);for(var E=0;E<x-1;E++)b(C,v[w*x+E],v[w*x+E+1],i.bezierProjPcts[E],i.bezierProjPcts[E+1]);b(C,v[w*x+x-1],C.p2,i.bezierProjPcts[x-1],1)}return f.cache=d},"createControlPointInfo"),h=o(function(d){var p,m=d==="source";if(a[d]){var g=t.pstyle(d+"-text-offset").pfValue;switch(n.edgeType){case"self":case"compound":case"bezier":case"multibezier":{for(var y=u(),v,x=0,b=0,w=0;w<y.length;w++){for(var C=y[m?w:y.length-1-w],T=0;T<C.segments.length;T++){var E=C.segments[m?T:C.segments.length-1-T],A=w===y.length-1&&T===C.segments.length-1;if(x=b,b+=E.length,b>=g||A){v={cp:C,segment:E};break}}if(v)break}var S=v.cp,_=v.segment,I=(g-x)/_.length,D=_.t1-_.t0,k=m?_.t0+D*I:_.t1-D*I;k=Yb(0,k,1),e=W1(S.p0,S.p1,S.p2,k),p=DQe(S.p0,S.p1,S.p2,k);break}case"straight":case"segments":case"haystack":{for(var L=0,R,O,M,B,F=n.allpts.length,P=0;P+3<F&&(m?(M={x:n.allpts[P],y:n.allpts[P+1]},B={x:n.allpts[P+2],y:n.allpts[P+3]}):(M={x:n.allpts[F-2-P],y:n.allpts[F-1-P]},B={x:n.allpts[F-4-P],y:n.allpts[F-3-P]}),R=Gp(M,B),O=L,L+=R,!(L>=g));P+=2);var z=g-O,$=z/R;$=Yb(0,$,1),e=Iqe(M,B,$),p=pge(M,B);break}}s("labelX",d,e.x),s("labelY",d,e.y),s("labelAutoAngle",d,p)}},"calculateEndProjection");h("source"),h("target"),this.applyLabelDimensions(t)}};Kc.applyLabelDimensions=function(t){this.applyPrefixedLabelDimensions(t),t.isEdge()&&(this.applyPrefixedLabelDimensions(t,"source"),this.applyPrefixedLabelDimensions(t,"target"))};Kc.applyPrefixedLabelDimensions=function(t,e){var r=t._private,n=this.getLabelText(t,e),i=this.calculateLabelDimensions(t,n),a=t.pstyle("line-height").pfValue,s=t.pstyle("text-wrap").strValue,l=Gl(r.rscratch,"labelWrapCachedLines",e)||[],u=s!=="wrap"?1:Math.max(l.length,1),h=i.height/u,f=h*a,d=i.width,p=i.height+(u-1)*(a-1)*h;kf(r.rstyle,"labelWidth",e,d),kf(r.rscratch,"labelWidth",e,d),kf(r.rstyle,"labelHeight",e,p),kf(r.rscratch,"labelHeight",e,p),kf(r.rscratch,"labelLineHeight",e,f)};Kc.getLabelText=function(t,e){var r=t._private,n=e?e+"-":"",i=t.pstyle(n+"label").strValue,a=t.pstyle("text-transform").value,s=o(function(Q,j){return j?(kf(r.rscratch,Q,e,j),j):Gl(r.rscratch,Q,e)},"rscratch");if(!i)return"";a=="none"||(a=="uppercase"?i=i.toUpperCase():a=="lowercase"&&(i=i.toLowerCase()));var l=t.pstyle("text-wrap").value;if(l==="wrap"){var u=s("labelKey");if(u!=null&&s("labelWrapKey")===u)return s("labelWrapCachedText");for(var h="\u200B",f=i.split(`
1952 +`),d=t.pstyle("text-max-width").pfValue,p=t.pstyle("text-overflow-wrap").value,m=p==="anywhere",g=[],y=/[\s\u200b]+|$/g,v=0;v<f.length;v++){var x=f[v],b=this.calculateLabelDimensions(t,x),w=b.width;if(m){var C=x.split("").join(h);x=C}if(w>d){var T=x.matchAll(y),E="",A=0,S=mo(T),_;try{for(S.s();!(_=S.n()).done;){var I=_.value,D=I[0],k=x.substring(A,I.index);A=I.index+D.length;var L=E.length===0?k:E+k+D,R=this.calculateLabelDimensions(t,L),O=R.width;O<=d?E+=k+D:(E&&g.push(E),E=k+D)}}catch(H){S.e(H)}finally{S.f()}E.match(/^[\s\u200b]+$/)||g.push(E)}else g.push(x)}s("labelWrapCachedLines",g),i=s("labelWrapCachedText",g.join(`
1953 +`)),s("labelWrapKey",u)}else if(l==="ellipsis"){var M=t.pstyle("text-max-width").pfValue,B="",F="\u2026",P=!1;if(this.calculateLabelDimensions(t,i).width<M)return i;for(var z=0;z<i.length;z++){var $=this.calculateLabelDimensions(t,B+i[z]+F).width;if($>M)break;B+=i[z],z===i.length-1&&(P=!0)}return P||(B+=F),B}return i};Kc.getLabelJustification=function(t){var e=t.pstyle("text-justification").strValue,r=t.pstyle("text-halign").strValue;if(e==="auto")if(t.isNode())switch(r){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return e};Kc.calculateLabelDimensions=function(t,e){var r=this,n=r.cy.window(),i=n.document,a=_f(e,t._private.labelDimsKey),s=r.labelDimCache||(r.labelDimCache=[]),l=s[a];if(l!=null)return l;var u=0,h=t.pstyle("font-style").strValue,f=t.pstyle("font-size").pfValue,d=t.pstyle("font-family").strValue,p=t.pstyle("font-weight").strValue,m=this.labelCalcCanvas,g=this.labelCalcCanvasContext;if(!m){m=this.labelCalcCanvas=i.createElement("canvas"),g=this.labelCalcCanvasContext=m.getContext("2d");var y=m.style;y.position="absolute",y.left="-9999px",y.top="-9999px",y.zIndex="-1",y.visibility="hidden",y.pointerEvents="none"}g.font="".concat(h," ").concat(p," ").concat(f,"px ").concat(d);for(var v=0,x=0,b=e.split(`
1954 +`),w=0;w<b.length;w++){var C=b[w],T=g.measureText(C),E=Math.ceil(T.width),A=f;v=Math.max(E,v),x+=A}return v+=u,x+=u,s[a]={width:v,height:x}};Kc.calculateLabelAngle=function(t,e){var r=t._private,n=r.rscratch,i=t.isEdge(),a=e?e+"-":"",s=t.pstyle(a+"text-rotation"),l=s.strValue;return l==="none"?0:i&&l==="autorotate"?n.labelAutoAngle:l==="autorotate"?0:s.pfValue};Kc.calculateLabelAngles=function(t){var e=this,r=t.isEdge(),n=t._private,i=n.rscratch;i.labelAngle=e.calculateLabelAngle(t),r&&(i.sourceLabelAngle=e.calculateLabelAngle(t,"source"),i.targetLabelAngle=e.calculateLabelAngle(t,"target"))};mge={},R0e=28,N0e=!1;mge.getNodeShape=function(t){var e=this,r=t.pstyle("shape").value;if(r==="cutrectangle"&&(t.width()<R0e||t.height()<R0e))return N0e||(un("The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead"),N0e=!0),"rectangle";if(t.isParent())return r==="rectangle"||r==="roundrectangle"||r==="round-rectangle"||r==="cutrectangle"||r==="cut-rectangle"||r==="barrel"?r:"rectangle";if(r==="polygon"){var n=t.pstyle("shape-polygon-points").value;return e.nodeShapes.makePolygon(n).name}return r};WS={};WS.registerCalculationListeners=function(){var t=this.cy,e=t.collection(),r=this,n=o(function(s){var l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(e.merge(s),l)for(var u=0;u<s.length;u++){var h=s[u],f=h._private,d=f.rstyle;d.clean=!1,d.cleanConnected=!1}},"enqueue");r.binder(t).on("bounds.* dirty.*",o(function(s){var l=s.target;n(l)},"onDirtyBounds")).on("style.* background.*",o(function(s){var l=s.target;n(l,!1)},"onDirtyStyle"));var i=o(function(s){if(s){var l=r.onUpdateEleCalcsFns;e.cleanStyle();for(var u=0;u<e.length;u++){var h=e[u],f=h._private.rstyle;h.isNode()&&!f.cleanConnected&&(n(h.connectedEdges()),f.cleanConnected=!0)}if(l)for(var d=0;d<l.length;d++){var p=l[d];p(s,e)}r.recalculateRenderedStyle(e),e=t.collection()}},"updateEleCalcs");r.flushRenderedStyleQueue=function(){i(!0)},r.beforeRender(i,r.beforeRenderPriorities.eleCalcs)};WS.onUpdateEleCalcs=function(t){var e=this.onUpdateEleCalcsFns=this.onUpdateEleCalcsFns||[];e.push(t)};WS.recalculateRenderedStyle=function(t,e){var r=o(function(C){return C._private.rstyle.cleanConnected},"isCleanConnected"),n=[],i=[];if(!this.destroyed){e===void 0&&(e=!0);for(var a=0;a<t.length;a++){var s=t[a],l=s._private,u=l.rstyle;s.isEdge()&&(!r(s.source())||!r(s.target()))&&(u.clean=!1),!(e&&u.clean||s.removed())&&s.pstyle("display").value!=="none"&&(l.group==="nodes"?i.push(s):n.push(s),u.clean=!0)}for(var h=0;h<i.length;h++){var f=i[h],d=f._private,p=d.rstyle,m=f.position();this.recalculateNodeLabelProjection(f),p.nodeX=m.x,p.nodeY=m.y,p.nodeW=f.pstyle("width").pfValue,p.nodeH=f.pstyle("height").pfValue}this.recalculateEdgeProjections(n);for(var g=0;g<n.length;g++){var y=n[g],v=y._private,x=v.rstyle,b=v.rscratch;x.srcX=b.arrowStartX,x.srcY=b.arrowStartY,x.tgtX=b.arrowEndX,x.tgtY=b.arrowEndY,x.midX=b.midX,x.midY=b.midY,x.labelAngle=b.labelAngle,x.sourceLabelAngle=b.sourceLabelAngle,x.targetLabelAngle=b.targetLabelAngle}}};qS={};qS.updateCachedGrabbedEles=function(){var t=this.cachedZSortedEles;if(t){t.drag=[],t.nondrag=[];for(var e=[],r=0;r<t.length;r++){var n=t[r],i=n._private.rscratch;n.grabbed()&&!n.isParent()?e.push(n):i.inDragLayer?t.drag.push(n):t.nondrag.push(n)}for(var r=0;r<e.length;r++){var n=e[r];t.drag.push(n)}}};qS.invalidateCachedZSortedEles=function(){this.cachedZSortedEles=null};qS.getCachedZSortedEles=function(t){if(t||!this.cachedZSortedEles){var e=this.cy.mutableElements().toArray();e.sort(Zme),e.interactive=e.filter(function(r){return r.interactive()}),this.cachedZSortedEles=e,this.updateCachedGrabbedEles()}else e=this.cachedZSortedEles;return e};gge={};[qp,AS,Va,o4,xB,Kc,mge,WS,qS].forEach(function(t){rr(gge,t)});yge={};yge.getCachedImage=function(t,e,r){var n=this,i=n.imageCache=n.imageCache||{},a=i[t];if(a)return a.image.complete||a.image.addEventListener("load",r),a.image;a=i[t]=i[t]||{};var s=a.image=new Image;s.addEventListener("load",r),s.addEventListener("error",function(){s.error=!0});var l="data:",u=t.substring(0,l.length).toLowerCase()===l;return u||(e=e==="null"?null:e,s.crossOrigin=e),s.src=t,s};sy={};sy.registerBinding=function(t,e,r,n){var i=Array.prototype.slice.apply(arguments,[1]);if(Array.isArray(t)){for(var a=[],s=0;s<t.length;s++){var l=t[s];if(l!==void 0){var u=this.binder(l);a.push(u.on.apply(u,i))}}return a}var u=this.binder(t);return u.on.apply(u,i)};sy.binder=function(t){var e=this,r=e.cy.window(),n=t===r||t===r.document||t===r.document.body||tWe(t);if(e.supportsPassiveEvents==null){var i=!1;try{var a=Object.defineProperty({},"passive",{get:o(function(){return i=!0,!0},"get")});r.addEventListener("test",null,a)}catch{}e.supportsPassiveEvents=i}var s=o(function(u,h,f){var d=Array.prototype.slice.call(arguments);return n&&e.supportsPassiveEvents&&(d[2]={capture:f??!1,passive:!1,once:!1}),e.bindings.push({target:t,args:d}),(t.addEventListener||t.on).apply(t,d),this},"on");return{on:s,addEventListener:s,addListener:s,bind:s}};sy.nodeIsDraggable=function(t){return t&&t.isNode()&&!t.locked()&&t.grabbable()};sy.nodeIsGrabbable=function(t){return this.nodeIsDraggable(t)&&t.interactive()};sy.load=function(){var t=this,e=t.cy.window(),r=o(function(W){return W.selected()},"isSelected"),n=o(function(W){var de=W.getRootNode();if(de&&de.nodeType===11&&de.host!==void 0)return de},"getShadowRoot"),i=o(function(W,de,re,oe){W==null&&(W=t.cy);for(var V=0;V<de.length;V++){var xe=de[V];W.emit({originalEvent:re,type:xe,position:oe})}},"triggerEvents"),a=o(function(W){return W.shiftKey||W.metaKey||W.ctrlKey},"isMultSelKeyDown"),s=o(function(W,de){var re=!0;if(t.cy.hasCompoundNodes()&&W&&W.pannable())for(var oe=0;de&&oe<de.length;oe++){var W=de[oe];if(W.isNode()&&W.isParent()&&!W.pannable()){re=!1;break}}else re=!0;return re},"allowPanningPassthrough"),l=o(function(W){W[0]._private.grabbed=!0},"setGrabbed"),u=o(function(W){W[0]._private.grabbed=!1},"setFreed"),h=o(function(W){W[0]._private.rscratch.inDragLayer=!0},"setInDragLayer"),f=o(function(W){W[0]._private.rscratch.inDragLayer=!1},"setOutDragLayer"),d=o(function(W){W[0]._private.rscratch.isGrabTarget=!0},"setGrabTarget"),p=o(function(W){W[0]._private.rscratch.isGrabTarget=!1},"removeGrabTarget"),m=o(function(W,de){var re=de.addToList,oe=re.has(W);!oe&&W.grabbable()&&!W.locked()&&(re.merge(W),l(W))},"addToDragList"),g=o(function(W,de){if(W.cy().hasCompoundNodes()&&!(de.inDragLayer==null&&de.addToList==null)){var re=W.descendants();de.inDragLayer&&(re.forEach(h),re.connectedEdges().forEach(h)),de.addToList&&m(re,de)}},"addDescendantsToDrag"),y=o(function(W,de){de=de||{};var re=W.cy().hasCompoundNodes();de.inDragLayer&&(W.forEach(h),W.neighborhood().stdFilter(function(oe){return!re||oe.isEdge()}).forEach(h)),de.addToList&&W.forEach(function(oe){m(oe,de)}),g(W,de),b(W,{inDragLayer:de.inDragLayer}),t.updateCachedGrabbedEles()},"addNodesToDrag"),v=y,x=o(function(W){W&&(t.getCachedZSortedEles().forEach(function(de){u(de),f(de),p(de)}),t.updateCachedGrabbedEles())},"freeDraggedElements"),b=o(function(W,de){if(!(de.inDragLayer==null&&de.addToList==null)&&W.cy().hasCompoundNodes()){var re=W.ancestors().orphans();if(!re.same(W)){var oe=re.descendants().spawnSelf().merge(re).unmerge(W).unmerge(W.descendants()),V=oe.connectedEdges();de.inDragLayer&&(V.forEach(h),oe.forEach(h)),de.addToList&&oe.forEach(function(xe){m(xe,de)})}}},"updateAncestorsInDragLayer"),w=o(function(){document.activeElement!=null&&document.activeElement.blur!=null&&document.activeElement.blur()},"blurActiveDomElement"),C=typeof MutationObserver<"u",T=typeof ResizeObserver<"u";C?(t.removeObserver=new MutationObserver(function(be){for(var W=0;W<be.length;W++){var de=be[W],re=de.removedNodes;if(re)for(var oe=0;oe<re.length;oe++){var V=re[oe];if(V===t.container){t.destroy();break}}}}),t.container.parentNode&&t.removeObserver.observe(t.container.parentNode,{childList:!0})):t.registerBinding(t.container,"DOMNodeRemoved",function(be){t.destroy()});var E=n4(function(){t.cy.resize()},100);C&&(t.styleObserver=new MutationObserver(E),t.styleObserver.observe(t.container,{attributes:!0})),t.registerBinding(e,"resize",E),T&&(t.resizeObserver=new ResizeObserver(E),t.resizeObserver.observe(t.container));var A=o(function(W,de){for(;W!=null;)de(W),W=W.parentNode},"forEachUp"),S=o(function(){t.invalidateContainerClientCoordsCache()},"invalidateCoords");A(t.container,function(be){t.registerBinding(be,"transitionend",S),t.registerBinding(be,"animationend",S),t.registerBinding(be,"scroll",S)}),t.registerBinding(t.container,"contextmenu",function(be){be.preventDefault()});var _=o(function(){return t.selection[4]!==0},"inBoxSelection"),I=o(function(W){for(var de=t.findContainerClientCoords(),re=de[0],oe=de[1],V=de[2],xe=de[3],q=W.touches?W.touches:[W],pe=!1,ve=0;ve<q.length;ve++){var Pe=q[ve];if(re<=Pe.clientX&&Pe.clientX<=re+V&&oe<=Pe.clientY&&Pe.clientY<=oe+xe){pe=!0;break}}if(!pe)return!1;for(var _e=t.container,we=W.target,Ve=we.parentNode,De=!1;Ve;){if(Ve===_e){De=!0;break}Ve=Ve.parentNode}return!!De},"eventInContainer");t.registerBinding(t.container,"mousedown",o(function(W){if(I(W)&&!(t.hoverData.which===1&&W.which!==1)){W.preventDefault(),w(),t.hoverData.capture=!0,t.hoverData.which=W.which;var de=t.cy,re=[W.clientX,W.clientY],oe=t.projectIntoViewport(re[0],re[1]),V=t.selection,xe=t.findNearestElements(oe[0],oe[1],!0,!1),q=xe[0],pe=t.dragData.possibleDragElements;t.hoverData.mdownPos=oe,t.hoverData.mdownGPos=re;var ve=o(function(){t.hoverData.tapholdCancelled=!1,clearTimeout(t.hoverData.tapholdTimeout),t.hoverData.tapholdTimeout=setTimeout(function(){if(!t.hoverData.tapholdCancelled){var qe=t.hoverData.down;qe?qe.emit({originalEvent:W,type:"taphold",position:{x:oe[0],y:oe[1]}}):de.emit({originalEvent:W,type:"taphold",position:{x:oe[0],y:oe[1]}})}},t.tapholdDuration)},"checkForTaphold");if(W.which==3){t.hoverData.cxtStarted=!0;var Pe={originalEvent:W,type:"cxttapstart",position:{x:oe[0],y:oe[1]}};q?(q.activate(),q.emit(Pe),t.hoverData.down=q):de.emit(Pe),t.hoverData.downTime=new Date().getTime(),t.hoverData.cxtDragged=!1}else if(W.which==1){q&&q.activate();{if(q!=null&&t.nodeIsGrabbable(q)){var _e=o(function(qe){return{originalEvent:W,type:qe,position:{x:oe[0],y:oe[1]}}},"makeEvent"),we=o(function(qe){qe.emit(_e("grab"))},"triggerGrab");if(d(q),!q.selected())pe=t.dragData.possibleDragElements=de.collection(),v(q,{addToList:pe}),q.emit(_e("grabon")).emit(_e("grab"));else{pe=t.dragData.possibleDragElements=de.collection();var Ve=de.$(function(De){return De.isNode()&&De.selected()&&t.nodeIsGrabbable(De)});y(Ve,{addToList:pe}),q.emit(_e("grabon")),Ve.forEach(we)}t.redrawHint("eles",!0),t.redrawHint("drag",!0)}t.hoverData.down=q,t.hoverData.downs=xe,t.hoverData.downTime=new Date().getTime()}i(q,["mousedown","tapstart","vmousedown"],W,{x:oe[0],y:oe[1]}),q==null?(V[4]=1,t.data.bgActivePosistion={x:oe[0],y:oe[1]},t.redrawHint("select",!0),t.redraw()):q.pannable()&&(V[4]=1),ve()}V[0]=V[2]=oe[0],V[1]=V[3]=oe[1]}},"mousedownHandler"),!1);var D=n(t.container);t.registerBinding([e,D],"mousemove",o(function(W){var de=t.hoverData.capture;if(!(!de&&!I(W))){var re=!1,oe=t.cy,V=oe.zoom(),xe=[W.clientX,W.clientY],q=t.projectIntoViewport(xe[0],xe[1]),pe=t.hoverData.mdownPos,ve=t.hoverData.mdownGPos,Pe=t.selection,_e=null;!t.hoverData.draggingEles&&!t.hoverData.dragging&&!t.hoverData.selecting&&(_e=t.findNearestElement(q[0],q[1],!0,!1));var we=t.hoverData.last,Ve=t.hoverData.down,De=[q[0]-Pe[2],q[1]-Pe[3]],qe=t.dragData.possibleDragElements,at;if(ve){var Rt=xe[0]-ve[0],st=Rt*Rt,Ue=xe[1]-ve[1],ct=Ue*Ue,We=st+ct;t.hoverData.isOverThresholdDrag=at=We>=t.desktopTapThreshold2}var ot=a(W);at&&(t.hoverData.tapholdCancelled=!0);var Yt=o(function(){var Tt=t.hoverData.dragDelta=t.hoverData.dragDelta||[];Tt.length===0?(Tt.push(De[0]),Tt.push(De[1])):(Tt[0]+=De[0],Tt[1]+=De[1])},"updateDragDelta");re=!0,i(_e,["mousemove","vmousemove","tapdrag"],W,{x:q[0],y:q[1]});var bt=o(function(){t.data.bgActivePosistion=void 0,t.hoverData.selecting||oe.emit({originalEvent:W,type:"boxstart",position:{x:q[0],y:q[1]}}),Pe[4]=1,t.hoverData.selecting=!0,t.redrawHint("select",!0),t.redraw()},"goIntoBoxMode");if(t.hoverData.which===3){if(at){var Mt={originalEvent:W,type:"cxtdrag",position:{x:q[0],y:q[1]}};Ve?Ve.emit(Mt):oe.emit(Mt),t.hoverData.cxtDragged=!0,(!t.hoverData.cxtOver||_e!==t.hoverData.cxtOver)&&(t.hoverData.cxtOver&&t.hoverData.cxtOver.emit({originalEvent:W,type:"cxtdragout",position:{x:q[0],y:q[1]}}),t.hoverData.cxtOver=_e,_e&&_e.emit({originalEvent:W,type:"cxtdragover",position:{x:q[0],y:q[1]}}))}}else if(t.hoverData.dragging){if(re=!0,oe.panningEnabled()&&oe.userPanningEnabled()){var xt;if(t.hoverData.justStartedPan){var ut=t.hoverData.mdownPos;xt={x:(q[0]-ut[0])*V,y:(q[1]-ut[1])*V},t.hoverData.justStartedPan=!1}else xt={x:De[0]*V,y:De[1]*V};oe.panBy(xt),oe.emit("dragpan"),t.hoverData.dragged=!0}q=t.projectIntoViewport(W.clientX,W.clientY)}else if(Pe[4]==1&&(Ve==null||Ve.pannable())){if(at){if(!t.hoverData.dragging&&oe.boxSelectionEnabled()&&(ot||!oe.panningEnabled()||!oe.userPanningEnabled()))bt();else if(!t.hoverData.selecting&&oe.panningEnabled()&&oe.userPanningEnabled()){var Et=s(Ve,t.hoverData.downs);Et&&(t.hoverData.dragging=!0,t.hoverData.justStartedPan=!0,Pe[4]=0,t.data.bgActivePosistion=U1(pe),t.redrawHint("select",!0),t.redraw())}Ve&&Ve.pannable()&&Ve.active()&&Ve.unactivate()}}else{if(Ve&&Ve.pannable()&&Ve.active()&&Ve.unactivate(),(!Ve||!Ve.grabbed())&&_e!=we&&(we&&i(we,["mouseout","tapdragout"],W,{x:q[0],y:q[1]}),_e&&i(_e,["mouseover","tapdragover"],W,{x:q[0],y:q[1]}),t.hoverData.last=_e),Ve)if(at){if(oe.boxSelectionEnabled()&&ot)Ve&&Ve.grabbed()&&(x(qe),Ve.emit("freeon"),qe.emit("free"),t.dragData.didDrag&&(Ve.emit("dragfreeon"),qe.emit("dragfree"))),bt();else if(Ve&&Ve.grabbed()&&t.nodeIsDraggable(Ve)){var ft=!t.dragData.didDrag;ft&&t.redrawHint("eles",!0),t.dragData.didDrag=!0,t.hoverData.draggingEles||y(qe,{inDragLayer:!0});var yt={x:0,y:0};if(Ct(De[0])&&Ct(De[1])&&(yt.x+=De[0],yt.y+=De[1],ft)){var nt=t.hoverData.dragDelta;nt&&Ct(nt[0])&&Ct(nt[1])&&(yt.x+=nt[0],yt.y+=nt[1])}t.hoverData.draggingEles=!0,qe.silentShift(yt).emit("position drag"),t.redrawHint("drag",!0),t.redraw()}}else Yt();re=!0}if(Pe[2]=q[0],Pe[3]=q[1],re)return W.stopPropagation&&W.stopPropagation(),W.preventDefault&&W.preventDefault(),!1}},"mousemoveHandler"),!1);var k,L,R;t.registerBinding(e,"mouseup",o(function(W){if(!(t.hoverData.which===1&&W.which!==1&&t.hoverData.capture)){var de=t.hoverData.capture;if(de){t.hoverData.capture=!1;var re=t.cy,oe=t.projectIntoViewport(W.clientX,W.clientY),V=t.selection,xe=t.findNearestElement(oe[0],oe[1],!0,!1),q=t.dragData.possibleDragElements,pe=t.hoverData.down,ve=a(W);if(t.data.bgActivePosistion&&(t.redrawHint("select",!0),t.redraw()),t.hoverData.tapholdCancelled=!0,t.data.bgActivePosistion=void 0,pe&&pe.unactivate(),t.hoverData.which===3){var Pe={originalEvent:W,type:"cxttapend",position:{x:oe[0],y:oe[1]}};if(pe?pe.emit(Pe):re.emit(Pe),!t.hoverData.cxtDragged){var _e={originalEvent:W,type:"cxttap",position:{x:oe[0],y:oe[1]}};pe?pe.emit(_e):re.emit(_e)}t.hoverData.cxtDragged=!1,t.hoverData.which=null}else if(t.hoverData.which===1){if(i(xe,["mouseup","tapend","vmouseup"],W,{x:oe[0],y:oe[1]}),!t.dragData.didDrag&&!t.hoverData.dragged&&!t.hoverData.selecting&&!t.hoverData.isOverThresholdDrag&&(i(pe,["click","tap","vclick"],W,{x:oe[0],y:oe[1]}),L=!1,W.timeStamp-R<=re.multiClickDebounceTime()?(k&&clearTimeout(k),L=!0,R=null,i(pe,["dblclick","dbltap","vdblclick"],W,{x:oe[0],y:oe[1]})):(k=setTimeout(function(){L||i(pe,["oneclick","onetap","voneclick"],W,{x:oe[0],y:oe[1]})},re.multiClickDebounceTime()),R=W.timeStamp)),pe==null&&!t.dragData.didDrag&&!t.hoverData.selecting&&!t.hoverData.dragged&&!a(W)&&(re.$(r).unselect(["tapunselect"]),q.length>0&&t.redrawHint("eles",!0),t.dragData.possibleDragElements=q=re.collection()),xe==pe&&!t.dragData.didDrag&&!t.hoverData.selecting&&xe!=null&&xe._private.selectable&&(t.hoverData.dragging||(re.selectionType()==="additive"||ve?xe.selected()?xe.unselect(["tapunselect"]):xe.select(["tapselect"]):ve||(re.$(r).unmerge(xe).unselect(["tapunselect"]),xe.select(["tapselect"]))),t.redrawHint("eles",!0)),t.hoverData.selecting){var we=re.collection(t.getAllInBox(V[0],V[1],V[2],V[3]));t.redrawHint("select",!0),we.length>0&&t.redrawHint("eles",!0),re.emit({type:"boxend",originalEvent:W,position:{x:oe[0],y:oe[1]}});var Ve=o(function(at){return at.selectable()&&!at.selected()},"eleWouldBeSelected");re.selectionType()==="additive"||ve||re.$(r).unmerge(we).unselect(),we.emit("box").stdFilter(Ve).select().emit("boxselect"),t.redraw()}if(t.hoverData.dragging&&(t.hoverData.dragging=!1,t.redrawHint("select",!0),t.redrawHint("eles",!0),t.redraw()),!V[4]){t.redrawHint("drag",!0),t.redrawHint("eles",!0);var De=pe&&pe.grabbed();x(q),De&&(pe.emit("freeon"),q.emit("free"),t.dragData.didDrag&&(pe.emit("dragfreeon"),q.emit("dragfree")))}}V[4]=0,t.hoverData.down=null,t.hoverData.cxtStarted=!1,t.hoverData.draggingEles=!1,t.hoverData.selecting=!1,t.hoverData.isOverThresholdDrag=!1,t.dragData.didDrag=!1,t.hoverData.dragged=!1,t.hoverData.dragDelta=[],t.hoverData.mdownPos=null,t.hoverData.mdownGPos=null,t.hoverData.which=null}}},"mouseupHandler"),!1);var O=o(function(W){if(!t.scrollingPage){var de=t.cy,re=de.zoom(),oe=de.pan(),V=t.projectIntoViewport(W.clientX,W.clientY),xe=[V[0]*re+oe.x,V[1]*re+oe.y];if(t.hoverData.draggingEles||t.hoverData.dragging||t.hoverData.cxtStarted||_()){W.preventDefault();return}if(de.panningEnabled()&&de.userPanningEnabled()&&de.zoomingEnabled()&&de.userZoomingEnabled()){W.preventDefault(),t.data.wheelZooming=!0,clearTimeout(t.data.wheelTimeout),t.data.wheelTimeout=setTimeout(function(){t.data.wheelZooming=!1,t.redrawHint("eles",!0),t.redraw()},150);var q;W.deltaY!=null?q=W.deltaY/-250:W.wheelDeltaY!=null?q=W.wheelDeltaY/1e3:q=W.wheelDelta/1e3,q=q*t.wheelSensitivity;var pe=W.deltaMode===1;pe&&(q*=33);var ve=de.zoom()*Math.pow(10,q);W.type==="gesturechange"&&(ve=t.gestureStartZoom*W.scale),de.zoom({level:ve,renderedPosition:{x:xe[0],y:xe[1]}}),de.emit(W.type==="gesturechange"?"pinchzoom":"scrollzoom")}}},"wheelHandler");t.registerBinding(t.container,"wheel",O,!0),t.registerBinding(e,"scroll",o(function(W){t.scrollingPage=!0,clearTimeout(t.scrollingPageTimeout),t.scrollingPageTimeout=setTimeout(function(){t.scrollingPage=!1},250)},"scrollHandler"),!0),t.registerBinding(t.container,"gesturestart",o(function(W){t.gestureStartZoom=t.cy.zoom(),t.hasTouchStarted||W.preventDefault()},"gestureStartHandler"),!0),t.registerBinding(t.container,"gesturechange",function(be){t.hasTouchStarted||O(be)},!0),t.registerBinding(t.container,"mouseout",o(function(W){var de=t.projectIntoViewport(W.clientX,W.clientY);t.cy.emit({originalEvent:W,type:"mouseout",position:{x:de[0],y:de[1]}})},"mouseOutHandler"),!1),t.registerBinding(t.container,"mouseover",o(function(W){var de=t.projectIntoViewport(W.clientX,W.clientY);t.cy.emit({originalEvent:W,type:"mouseover",position:{x:de[0],y:de[1]}})},"mouseOverHandler"),!1);var M,B,F,P,z,$,H,Q,j,ie,ne,le,he,K=o(function(W,de,re,oe){return Math.sqrt((re-W)*(re-W)+(oe-de)*(oe-de))},"distance"),X=o(function(W,de,re,oe){return(re-W)*(re-W)+(oe-de)*(oe-de)},"distanceSq"),te;t.registerBinding(t.container,"touchstart",te=o(function(W){if(t.hasTouchStarted=!0,!!I(W)){w(),t.touchData.capture=!0,t.data.bgActivePosistion=void 0;var de=t.cy,re=t.touchData.now,oe=t.touchData.earlier;if(W.touches[0]){var V=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);re[0]=V[0],re[1]=V[1]}if(W.touches[1]){var V=t.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);re[2]=V[0],re[3]=V[1]}if(W.touches[2]){var V=t.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);re[4]=V[0],re[5]=V[1]}if(W.touches[1]){t.touchData.singleTouchMoved=!0,x(t.dragData.touchDragEles);var xe=t.findContainerClientCoords();j=xe[0],ie=xe[1],ne=xe[2],le=xe[3],M=W.touches[0].clientX-j,B=W.touches[0].clientY-ie,F=W.touches[1].clientX-j,P=W.touches[1].clientY-ie,he=0<=M&&M<=ne&&0<=F&&F<=ne&&0<=B&&B<=le&&0<=P&&P<=le;var q=de.pan(),pe=de.zoom();z=K(M,B,F,P),$=X(M,B,F,P),H=[(M+F)/2,(B+P)/2],Q=[(H[0]-q.x)/pe,(H[1]-q.y)/pe];var ve=200,Pe=ve*ve;if($<Pe&&!W.touches[2]){var _e=t.findNearestElement(re[0],re[1],!0,!0),we=t.findNearestElement(re[2],re[3],!0,!0);_e&&_e.isNode()?(_e.activate().emit({originalEvent:W,type:"cxttapstart",position:{x:re[0],y:re[1]}}),t.touchData.start=_e):we&&we.isNode()?(we.activate().emit({originalEvent:W,type:"cxttapstart",position:{x:re[0],y:re[1]}}),t.touchData.start=we):de.emit({originalEvent:W,type:"cxttapstart",position:{x:re[0],y:re[1]}}),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!0,t.touchData.cxtDragged=!1,t.data.bgActivePosistion=void 0,t.redraw();return}}if(W.touches[2])de.boxSelectionEnabled()&&W.preventDefault();else if(!W.touches[1]){if(W.touches[0]){var Ve=t.findNearestElements(re[0],re[1],!0,!0),De=Ve[0];if(De!=null&&(De.activate(),t.touchData.start=De,t.touchData.starts=Ve,t.nodeIsGrabbable(De))){var qe=t.dragData.touchDragEles=de.collection(),at=null;t.redrawHint("eles",!0),t.redrawHint("drag",!0),De.selected()?(at=de.$(function(We){return We.selected()&&t.nodeIsGrabbable(We)}),y(at,{addToList:qe})):v(De,{addToList:qe}),d(De);var Rt=o(function(ot){return{originalEvent:W,type:ot,position:{x:re[0],y:re[1]}}},"makeEvent");De.emit(Rt("grabon")),at?at.forEach(function(We){We.emit(Rt("grab"))}):De.emit(Rt("grab"))}i(De,["touchstart","tapstart","vmousedown"],W,{x:re[0],y:re[1]}),De==null&&(t.data.bgActivePosistion={x:V[0],y:V[1]},t.redrawHint("select",!0),t.redraw()),t.touchData.singleTouchMoved=!1,t.touchData.singleTouchStartTime=+new Date,clearTimeout(t.touchData.tapholdTimeout),t.touchData.tapholdTimeout=setTimeout(function(){t.touchData.singleTouchMoved===!1&&!t.pinching&&!t.touchData.selecting&&i(t.touchData.start,["taphold"],W,{x:re[0],y:re[1]})},t.tapholdDuration)}}if(W.touches.length>=1){for(var st=t.touchData.startPosition=[null,null,null,null,null,null],Ue=0;Ue<re.length;Ue++)st[Ue]=oe[Ue]=re[Ue];var ct=W.touches[0];t.touchData.startGPosition=[ct.clientX,ct.clientY]}}},"touchstartHandler"),!1);var J;t.registerBinding(e,"touchmove",J=o(function(W){var de=t.touchData.capture;if(!(!de&&!I(W))){var re=t.selection,oe=t.cy,V=t.touchData.now,xe=t.touchData.earlier,q=oe.zoom();if(W.touches[0]){var pe=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);V[0]=pe[0],V[1]=pe[1]}if(W.touches[1]){var pe=t.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);V[2]=pe[0],V[3]=pe[1]}if(W.touches[2]){var pe=t.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);V[4]=pe[0],V[5]=pe[1]}var ve=t.touchData.startGPosition,Pe;if(de&&W.touches[0]&&ve){for(var _e=[],we=0;we<V.length;we++)_e[we]=V[we]-xe[we];var Ve=W.touches[0].clientX-ve[0],De=Ve*Ve,qe=W.touches[0].clientY-ve[1],at=qe*qe,Rt=De+at;Pe=Rt>=t.touchTapThreshold2}if(de&&t.touchData.cxt){W.preventDefault();var st=W.touches[0].clientX-j,Ue=W.touches[0].clientY-ie,ct=W.touches[1].clientX-j,We=W.touches[1].clientY-ie,ot=X(st,Ue,ct,We),Yt=ot/$,bt=150,Mt=bt*bt,xt=1.5,ut=xt*xt;if(Yt>=ut||ot>=Mt){t.touchData.cxt=!1,t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var Et={originalEvent:W,type:"cxttapend",position:{x:V[0],y:V[1]}};t.touchData.start?(t.touchData.start.unactivate().emit(Et),t.touchData.start=null):oe.emit(Et)}}if(de&&t.touchData.cxt){var Et={originalEvent:W,type:"cxtdrag",position:{x:V[0],y:V[1]}};t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.touchData.start?t.touchData.start.emit(Et):oe.emit(Et),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxtDragged=!0;var ft=t.findNearestElement(V[0],V[1],!0,!0);(!t.touchData.cxtOver||ft!==t.touchData.cxtOver)&&(t.touchData.cxtOver&&t.touchData.cxtOver.emit({originalEvent:W,type:"cxtdragout",position:{x:V[0],y:V[1]}}),t.touchData.cxtOver=ft,ft&&ft.emit({originalEvent:W,type:"cxtdragover",position:{x:V[0],y:V[1]}}))}else if(de&&W.touches[2]&&oe.boxSelectionEnabled())W.preventDefault(),t.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,t.touchData.selecting||oe.emit({originalEvent:W,type:"boxstart",position:{x:V[0],y:V[1]}}),t.touchData.selecting=!0,t.touchData.didSelect=!0,re[4]=1,!re||re.length===0||re[0]===void 0?(re[0]=(V[0]+V[2]+V[4])/3,re[1]=(V[1]+V[3]+V[5])/3,re[2]=(V[0]+V[2]+V[4])/3+1,re[3]=(V[1]+V[3]+V[5])/3+1):(re[2]=(V[0]+V[2]+V[4])/3,re[3]=(V[1]+V[3]+V[5])/3),t.redrawHint("select",!0),t.redraw();else if(de&&W.touches[1]&&!t.touchData.didSelect&&oe.zoomingEnabled()&&oe.panningEnabled()&&oe.userZoomingEnabled()&&oe.userPanningEnabled()){W.preventDefault(),t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var yt=t.dragData.touchDragEles;if(yt){t.redrawHint("drag",!0);for(var nt=0;nt<yt.length;nt++){var dn=yt[nt]._private;dn.grabbed=!1,dn.rscratch.inDragLayer=!1}}var Tt=t.touchData.start,st=W.touches[0].clientX-j,Ue=W.touches[0].clientY-ie,ct=W.touches[1].clientX-j,We=W.touches[1].clientY-ie,On=K(st,Ue,ct,We),tn=On/z;if(he){var _r=st-M,Dr=Ue-B,Pn=ct-F,At=We-P,Ce=(_r+Pn)/2,tt=(Dr+At)/2,St=oe.zoom(),mr=St*tn,rn=oe.pan(),gn=Q[0]*St+rn.x,Zr=Q[1]*St+rn.y,Ni={x:-mr/St*(gn-rn.x-Ce)+gn,y:-mr/St*(Zr-rn.y-tt)+Zr};if(Tt&&Tt.active()){var yt=t.dragData.touchDragEles;x(yt),t.redrawHint("drag",!0),t.redrawHint("eles",!0),Tt.unactivate().emit("freeon"),yt.emit("free"),t.dragData.didDrag&&(Tt.emit("dragfreeon"),yt.emit("dragfree"))}oe.viewport({zoom:mr,pan:Ni,cancelOnFailedZoom:!0}),oe.emit("pinchzoom"),z=On,M=st,B=Ue,F=ct,P=We,t.pinching=!0}if(W.touches[0]){var pe=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);V[0]=pe[0],V[1]=pe[1]}if(W.touches[1]){var pe=t.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);V[2]=pe[0],V[3]=pe[1]}if(W.touches[2]){var pe=t.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);V[4]=pe[0],V[5]=pe[1]}}else if(W.touches[0]&&!t.touchData.didSelect){var Zn=t.touchData.start,Sn=t.touchData.last,ft;if(!t.hoverData.draggingEles&&!t.swipePanning&&(ft=t.findNearestElement(V[0],V[1],!0,!0)),de&&Zn!=null&&W.preventDefault(),de&&Zn!=null&&t.nodeIsDraggable(Zn))if(Pe){var yt=t.dragData.touchDragEles,Hr=!t.dragData.didDrag;Hr&&y(yt,{inDragLayer:!0}),t.dragData.didDrag=!0;var et={x:0,y:0};if(Ct(_e[0])&&Ct(_e[1])&&(et.x+=_e[0],et.y+=_e[1],Hr)){t.redrawHint("eles",!0);var mt=t.touchData.dragDelta;mt&&Ct(mt[0])&&Ct(mt[1])&&(et.x+=mt[0],et.y+=mt[1])}t.hoverData.draggingEles=!0,yt.silentShift(et).emit("position drag"),t.redrawHint("drag",!0),t.touchData.startPosition[0]==xe[0]&&t.touchData.startPosition[1]==xe[1]&&t.redrawHint("eles",!0),t.redraw()}else{var mt=t.touchData.dragDelta=t.touchData.dragDelta||[];mt.length===0?(mt.push(_e[0]),mt.push(_e[1])):(mt[0]+=_e[0],mt[1]+=_e[1])}if(i(Zn||ft,["touchmove","tapdrag","vmousemove"],W,{x:V[0],y:V[1]}),(!Zn||!Zn.grabbed())&&ft!=Sn&&(Sn&&Sn.emit({originalEvent:W,type:"tapdragout",position:{x:V[0],y:V[1]}}),ft&&ft.emit({originalEvent:W,type:"tapdragover",position:{x:V[0],y:V[1]}})),t.touchData.last=ft,de)for(var nt=0;nt<V.length;nt++)V[nt]&&t.touchData.startPosition[nt]&&Pe&&(t.touchData.singleTouchMoved=!0);if(de&&(Zn==null||Zn.pannable())&&oe.panningEnabled()&&oe.userPanningEnabled()){var Kt=s(Zn,t.touchData.starts);Kt&&(W.preventDefault(),t.data.bgActivePosistion||(t.data.bgActivePosistion=U1(t.touchData.startPosition)),t.swipePanning?(oe.panBy({x:_e[0]*q,y:_e[1]*q}),oe.emit("dragpan")):Pe&&(t.swipePanning=!0,oe.panBy({x:Ve*q,y:qe*q}),oe.emit("dragpan"),Zn&&(Zn.unactivate(),t.redrawHint("select",!0),t.touchData.start=null)));var pe=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);V[0]=pe[0],V[1]=pe[1]}}for(var we=0;we<V.length;we++)xe[we]=V[we];de&&W.touches.length>0&&!t.hoverData.draggingEles&&!t.swipePanning&&t.data.bgActivePosistion!=null&&(t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.redraw())}},"touchmoveHandler"),!1);var se;t.registerBinding(e,"touchcancel",se=o(function(W){var de=t.touchData.start;t.touchData.capture=!1,de&&de.unactivate()},"touchcancelHandler"));var ue,Z,Se,ce;if(t.registerBinding(e,"touchend",ue=o(function(W){var de=t.touchData.start,re=t.touchData.capture;if(re)W.touches.length===0&&(t.touchData.capture=!1),W.preventDefault();else return;var oe=t.selection;t.swipePanning=!1,t.hoverData.draggingEles=!1;var V=t.cy,xe=V.zoom(),q=t.touchData.now,pe=t.touchData.earlier;if(W.touches[0]){var ve=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);q[0]=ve[0],q[1]=ve[1]}if(W.touches[1]){var ve=t.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);q[2]=ve[0],q[3]=ve[1]}if(W.touches[2]){var ve=t.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);q[4]=ve[0],q[5]=ve[1]}de&&de.unactivate();var Pe;if(t.touchData.cxt){if(Pe={originalEvent:W,type:"cxttapend",position:{x:q[0],y:q[1]}},de?de.emit(Pe):V.emit(Pe),!t.touchData.cxtDragged){var _e={originalEvent:W,type:"cxttap",position:{x:q[0],y:q[1]}};de?de.emit(_e):V.emit(_e)}t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!1,t.touchData.start=null,t.redraw();return}if(!W.touches[2]&&V.boxSelectionEnabled()&&t.touchData.selecting){t.touchData.selecting=!1;var we=V.collection(t.getAllInBox(oe[0],oe[1],oe[2],oe[3]));oe[0]=void 0,oe[1]=void 0,oe[2]=void 0,oe[3]=void 0,oe[4]=0,t.redrawHint("select",!0),V.emit({type:"boxend",originalEvent:W,position:{x:q[0],y:q[1]}});var Ve=o(function(Mt){return Mt.selectable()&&!Mt.selected()},"eleWouldBeSelected");we.emit("box").stdFilter(Ve).select().emit("boxselect"),we.nonempty()&&t.redrawHint("eles",!0),t.redraw()}if(de?.unactivate(),W.touches[2])t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);else if(!W.touches[1]){if(!W.touches[0]){if(!W.touches[0]){t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var De=t.dragData.touchDragEles;if(de!=null){var qe=de._private.grabbed;x(De),t.redrawHint("drag",!0),t.redrawHint("eles",!0),qe&&(de.emit("freeon"),De.emit("free"),t.dragData.didDrag&&(de.emit("dragfreeon"),De.emit("dragfree"))),i(de,["touchend","tapend","vmouseup","tapdragout"],W,{x:q[0],y:q[1]}),de.unactivate(),t.touchData.start=null}else{var at=t.findNearestElement(q[0],q[1],!0,!0);i(at,["touchend","tapend","vmouseup","tapdragout"],W,{x:q[0],y:q[1]})}var Rt=t.touchData.startPosition[0]-q[0],st=Rt*Rt,Ue=t.touchData.startPosition[1]-q[1],ct=Ue*Ue,We=st+ct,ot=We*xe*xe;t.touchData.singleTouchMoved||(de||V.$(":selected").unselect(["tapunselect"]),i(de,["tap","vclick"],W,{x:q[0],y:q[1]}),Z=!1,W.timeStamp-ce<=V.multiClickDebounceTime()?(Se&&clearTimeout(Se),Z=!0,ce=null,i(de,["dbltap","vdblclick"],W,{x:q[0],y:q[1]})):(Se=setTimeout(function(){Z||i(de,["onetap","voneclick"],W,{x:q[0],y:q[1]})},V.multiClickDebounceTime()),ce=W.timeStamp)),de!=null&&!t.dragData.didDrag&&de._private.selectable&&ot<t.touchTapThreshold2&&!t.pinching&&(V.selectionType()==="single"?(V.$(r).unmerge(de).unselect(["tapunselect"]),de.select(["tapselect"])):de.selected()?de.unselect(["tapunselect"]):de.select(["tapselect"]),t.redrawHint("eles",!0)),t.touchData.singleTouchMoved=!0}}}for(var Yt=0;Yt<q.length;Yt++)pe[Yt]=q[Yt];t.dragData.didDrag=!1,W.touches.length===0&&(t.touchData.dragDelta=[],t.touchData.startPosition=[null,null,null,null,null,null],t.touchData.startGPosition=null,t.touchData.didSelect=!1),W.touches.length<2&&(W.touches.length===1&&(t.touchData.startGPosition=[W.touches[0].clientX,W.touches[0].clientY]),t.pinching=!1,t.redrawHint("eles",!0),t.redraw())},"touchendHandler"),!1),typeof TouchEvent>"u"){var ae=[],Oe=o(function(W){return{clientX:W.clientX,clientY:W.clientY,force:1,identifier:W.pointerId,pageX:W.pageX,pageY:W.pageY,radiusX:W.width/2,radiusY:W.height/2,screenX:W.screenX,screenY:W.screenY,target:W.target}},"makeTouch"),ge=o(function(W){return{event:W,touch:Oe(W)}},"makePointer"),ze=o(function(W){ae.push(ge(W))},"addPointer"),He=o(function(W){for(var de=0;de<ae.length;de++){var re=ae[de];if(re.event.pointerId===W.pointerId){ae.splice(de,1);return}}},"removePointer"),$e=o(function(W){var de=ae.filter(function(re){return re.event.pointerId===W.pointerId})[0];de.event=W,de.touch=Oe(W)},"updatePointer"),Re=o(function(W){W.touches=ae.map(function(de){return de.touch})},"addTouchesToEvent"),Ie=o(function(W){return W.pointerType==="mouse"||W.pointerType===4},"pointerIsMouse");t.registerBinding(t.container,"pointerdown",function(be){Ie(be)||(be.preventDefault(),ze(be),Re(be),te(be))}),t.registerBinding(t.container,"pointerup",function(be){Ie(be)||(He(be),Re(be),ue(be))}),t.registerBinding(t.container,"pointercancel",function(be){Ie(be)||(He(be),Re(be),se(be))}),t.registerBinding(t.container,"pointermove",function(be){Ie(be)||(be.preventDefault(),$e(be),Re(be),J(be))})}};eh={};eh.generatePolygon=function(t,e){return this.nodeShapes[t]={renderer:this,name:t,points:e,draw:o(function(n,i,a,s,l,u){this.renderer.nodeShapeImpl("polygon",n,i,a,s,l,this.points)},"draw"),intersectLine:o(function(n,i,a,s,l,u,h,f){return Xb(l,u,this.points,n,i,a/2,s/2,h)},"intersectLine"),checkPoint:o(function(n,i,a,s,l,u,h,f){return Zu(n,i,this.points,u,h,s,l,[0,-1],a)},"checkPoint")}};eh.generateEllipse=function(){return this.nodeShapes.ellipse={renderer:this,name:"ellipse",draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a)},"draw"),intersectLine:o(function(e,r,n,i,a,s,l,u){return Yqe(a,s,e,r,n/2+l,i/2+l)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){return $p(e,r,i,a,s,l,n)},"checkPoint")}};eh.generateRoundPolygon=function(t,e){return this.nodeShapes[t]={renderer:this,name:t,points:e,getOrCreateCorners:o(function(n,i,a,s,l,u,h){if(u[h]!==void 0&&u[h+"-cx"]===n&&u[h+"-cy"]===i)return u[h];u[h]=new Array(e.length/2),u[h+"-cx"]=n,u[h+"-cy"]=i;var f=a/2,d=s/2;l=l==="auto"?bme(a,s):l;for(var p=new Array(e.length/2),m=0;m<e.length/2;m++)p[m]={x:n+f*e[m*2],y:i+d*e[m*2+1]};var g,y,v,x,b=p.length;for(y=p[b-1],g=0;g<b;g++)v=p[g%b],x=p[(g+1)%b],u[h][g]=vB(y,v,x,l),y=v,v=x;return u[h]},"getOrCreateCorners"),draw:o(function(n,i,a,s,l,u,h){this.renderer.nodeShapeImpl("round-polygon",n,i,a,s,l,this.points,this.getOrCreateCorners(i,a,s,l,u,h,"drawCorners"))},"draw"),intersectLine:o(function(n,i,a,s,l,u,h,f,d){return Xqe(l,u,this.points,n,i,a,s,h,this.getOrCreateCorners(n,i,a,s,f,d,"corners"))},"intersectLine"),checkPoint:o(function(n,i,a,s,l,u,h,f,d){return qqe(n,i,this.points,u,h,s,l,this.getOrCreateCorners(u,h,s,l,f,d,"corners"))},"checkPoint")}};eh.generateRoundRectangle=function(){return this.nodeShapes["round-rectangle"]=this.nodeShapes.roundrectangle={renderer:this,name:"round-rectangle",points:gs(4,0),draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a,this.points,s)},"draw"),intersectLine:o(function(e,r,n,i,a,s,l,u){return vme(a,s,e,r,n,i,l,u)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){var h=i/2,f=a/2;u=u==="auto"?Vp(i,a):u,u=Math.min(h,f,u);var d=u*2;return!!(Zu(e,r,this.points,s,l,i,a-d,[0,-1],n)||Zu(e,r,this.points,s,l,i-d,a,[0,-1],n)||$p(e,r,d,d,s-h+u,l-f+u,n)||$p(e,r,d,d,s+h-u,l-f+u,n)||$p(e,r,d,d,s+h-u,l+f-u,n)||$p(e,r,d,d,s-h+u,l+f-u,n))},"checkPoint")}};eh.generateCutRectangle=function(){return this.nodeShapes["cut-rectangle"]=this.nodeShapes.cutrectangle={renderer:this,name:"cut-rectangle",cornerLength:sB(),points:gs(4,0),draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a,null,s)},"draw"),generateCutTrianglePts:o(function(e,r,n,i,a){var s=a==="auto"?this.cornerLength:a,l=r/2,u=e/2,h=n-u,f=n+u,d=i-l,p=i+l;return{topLeft:[h,d+s,h+s,d,h+s,d+s],topRight:[f-s,d,f,d+s,f-s,d+s],bottomRight:[f,p-s,f-s,p,f-s,p-s],bottomLeft:[h+s,p,h,p-s,h+s,p-s]}},"generateCutTrianglePts"),intersectLine:o(function(e,r,n,i,a,s,l,u){var h=this.generateCutTrianglePts(n+2*l,i+2*l,e,r,u),f=[].concat.apply([],[h.topLeft.splice(0,4),h.topRight.splice(0,4),h.bottomRight.splice(0,4),h.bottomLeft.splice(0,4)]);return Xb(a,s,f,e,r)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){var h=u==="auto"?this.cornerLength:u;if(Zu(e,r,this.points,s,l,i,a-2*h,[0,-1],n)||Zu(e,r,this.points,s,l,i-2*h,a,[0,-1],n))return!0;var f=this.generateCutTrianglePts(i,a,s,l);return Us(e,r,f.topLeft)||Us(e,r,f.topRight)||Us(e,r,f.bottomRight)||Us(e,r,f.bottomLeft)},"checkPoint")}};eh.generateBarrel=function(){return this.nodeShapes.barrel={renderer:this,name:"barrel",points:gs(4,0),draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a)},"draw"),intersectLine:o(function(e,r,n,i,a,s,l,u){var h=.15,f=.5,d=.85,p=this.generateBarrelBezierPts(n+2*l,i+2*l,e,r),m=o(function(v){var x=W1({x:v[0],y:v[1]},{x:v[2],y:v[3]},{x:v[4],y:v[5]},h),b=W1({x:v[0],y:v[1]},{x:v[2],y:v[3]},{x:v[4],y:v[5]},f),w=W1({x:v[0],y:v[1]},{x:v[2],y:v[3]},{x:v[4],y:v[5]},d);return[v[0],v[1],x.x,x.y,b.x,b.y,w.x,w.y,v[4],v[5]]},"approximateBarrelCurvePts"),g=[].concat(m(p.topLeft),m(p.topRight),m(p.bottomRight),m(p.bottomLeft));return Xb(a,s,g,e,r)},"intersectLine"),generateBarrelBezierPts:o(function(e,r,n,i){var a=r/2,s=e/2,l=n-s,u=n+s,h=i-a,f=i+a,d=BP(e,r),p=d.heightOffset,m=d.widthOffset,g=d.ctrlPtOffsetPct*e,y={topLeft:[l,h+p,l+g,h,l+m,h],topRight:[u-m,h,u-g,h,u,h+p],bottomRight:[u,f-p,u-g,f,u-m,f],bottomLeft:[l+m,f,l+g,f,l,f-p]};return y.topLeft.isTop=!0,y.topRight.isTop=!0,y.bottomLeft.isBottom=!0,y.bottomRight.isBottom=!0,y},"generateBarrelBezierPts"),checkPoint:o(function(e,r,n,i,a,s,l,u){var h=BP(i,a),f=h.heightOffset,d=h.widthOffset;if(Zu(e,r,this.points,s,l,i,a-2*f,[0,-1],n)||Zu(e,r,this.points,s,l,i-2*d,a,[0,-1],n))return!0;for(var p=this.generateBarrelBezierPts(i,a,s,l),m=o(function(S,_,I){var D=I[4],k=I[2],L=I[0],R=I[5],O=I[1],M=Math.min(D,L),B=Math.max(D,L),F=Math.min(R,O),P=Math.max(R,O);if(M<=S&&S<=B&&F<=_&&_<=P){var z=jqe(D,k,L),$=Vqe(z[0],z[1],z[2],S),H=$.filter(function(Q){return 0<=Q&&Q<=1});if(H.length>0)return H[0]}return null},"getCurveT"),g=Object.keys(p),y=0;y<g.length;y++){var v=g[y],x=p[v],b=m(e,r,x);if(b!=null){var w=x[5],C=x[3],T=x[1],E=oa(w,C,T,b);if(x.isTop&&E<=r||x.isBottom&&r<=E)return!0}}return!1},"checkPoint")}};eh.generateBottomRoundrectangle=function(){return this.nodeShapes["bottom-round-rectangle"]=this.nodeShapes.bottomroundrectangle={renderer:this,name:"bottom-round-rectangle",points:gs(4,0),draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a,this.points,s)},"draw"),intersectLine:o(function(e,r,n,i,a,s,l,u){var h=e-(n/2+l),f=r-(i/2+l),d=f,p=e+(n/2+l),m=Ef(a,s,e,r,h,f,p,d,!1);return m.length>0?m:vme(a,s,e,r,n,i,l,u)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){u=u==="auto"?Vp(i,a):u;var h=2*u;if(Zu(e,r,this.points,s,l,i,a-h,[0,-1],n)||Zu(e,r,this.points,s,l,i-h,a,[0,-1],n))return!0;var f=i/2+2*n,d=a/2+2*n,p=[s-f,l-d,s-f,l,s+f,l,s+f,l-d];return!!(Us(e,r,p)||$p(e,r,h,h,s+i/2-u,l+a/2-u,n)||$p(e,r,h,h,s-i/2+u,l+a/2-u,n))},"checkPoint")}};eh.registerNodeShapes=function(){var t=this.nodeShapes={},e=this;this.generateEllipse(),this.generatePolygon("triangle",gs(3,0)),this.generateRoundPolygon("round-triangle",gs(3,0)),this.generatePolygon("rectangle",gs(4,0)),t.square=t.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var r=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",r),this.generateRoundPolygon("round-diamond",r)}this.generatePolygon("pentagon",gs(5,0)),this.generateRoundPolygon("round-pentagon",gs(5,0)),this.generatePolygon("hexagon",gs(6,0)),this.generateRoundPolygon("round-hexagon",gs(6,0)),this.generatePolygon("heptagon",gs(7,0)),this.generateRoundPolygon("round-heptagon",gs(7,0)),this.generatePolygon("octagon",gs(8,0)),this.generateRoundPolygon("round-octagon",gs(8,0));var n=new Array(20);{var i=PP(5,0),a=PP(5,Math.PI/5),s=.5*(3-Math.sqrt(5));s*=1.57;for(var l=0;l<a.length/2;l++)a[l*2]*=s,a[l*2+1]*=s;for(var l=0;l<20/4;l++)n[l*4]=i[l*2],n[l*4+1]=i[l*2+1],n[l*4+2]=a[l*2],n[l*4+3]=a[l*2+1]}n=xme(n),this.generatePolygon("star",n),this.generatePolygon("vee",[-1,-1,0,-.333,1,-1,0,1]),this.generatePolygon("rhomboid",[-1,-1,.333,-1,1,1,-.333,1]),this.generatePolygon("right-rhomboid",[-.333,-1,1,-1,.333,1,-1,1]),this.nodeShapes.concavehexagon=this.generatePolygon("concave-hexagon",[-1,-.95,-.75,0,-1,.95,1,.95,.75,0,1,-.95]);{var u=[-1,-1,.25,-1,1,0,.25,1,-1,1];this.generatePolygon("tag",u),this.generateRoundPolygon("round-tag",u)}t.makePolygon=function(h){var f=h.join("$"),d="polygon-"+f,p;return(p=this[d])?p:e.generatePolygon(d,h)}};l4={};l4.timeToRender=function(){return this.redrawTotalTime/this.redrawCount};l4.redraw=function(t){t=t||dme();var e=this;e.averageRedrawTime===void 0&&(e.averageRedrawTime=0),e.lastRedrawTime===void 0&&(e.lastRedrawTime=0),e.lastDrawTime===void 0&&(e.lastDrawTime=0),e.requestedFrame=!0,e.renderOptions=t};l4.beforeRender=function(t,e){if(!this.destroyed){e==null&&ai("Priority is not optional for beforeRender");var r=this.beforeRenderCallbacks;r.push({fn:t,priority:e}),r.sort(function(n,i){return i.priority-n.priority})}};M0e=o(function(e,r,n){for(var i=e.beforeRenderCallbacks,a=0;a<i.length;a++)i[a].fn(r,n)},"beforeRenderCallbacks");l4.startRenderLoop=function(){var t=this,e=t.cy;if(!t.renderLoopStarted){t.renderLoopStarted=!0;var r=o(function n(i){if(!t.destroyed){if(!e.batching())if(t.requestedFrame&&!t.skipFrame){M0e(t,!0,i);var a=Qu();t.render(t.renderOptions);var s=t.lastDrawTime=Qu();t.averageRedrawTime===void 0&&(t.averageRedrawTime=s-a),t.redrawCount===void 0&&(t.redrawCount=0),t.redrawCount++,t.redrawTotalTime===void 0&&(t.redrawTotalTime=0);var l=s-a;t.redrawTotalTime+=l,t.lastRedrawTime=l,t.averageRedrawTime=t.averageRedrawTime/2+l/2,t.requestedFrame=!1}else M0e(t,!1,i);t.skipFrame=!1,xS(n)}},"renderFn");xS(r)}};LQe=o(function(e){this.init(e)},"BaseRenderer"),vge=LQe,oy=vge.prototype;oy.clientFunctions=["redrawHint","render","renderTo","matchCanvasSize","nodeShapeImpl","arrowShapeImpl"];oy.init=function(t){var e=this;e.options=t,e.cy=t.cy;var r=e.container=t.cy.container(),n=e.cy.window();if(n){var i=n.document,a=i.head,s="__________cytoscape_stylesheet",l="__________cytoscape_container",u=i.getElementById(s)!=null;if(r.className.indexOf(l)<0&&(r.className=(r.className||"")+" "+l),!u){var h=i.createElement("style");h.id=s,h.textContent="."+l+" { position: relative; }",a.insertBefore(h,a.children[0])}var f=n.getComputedStyle(r),d=f.getPropertyValue("position");d==="static"&&un("A Cytoscape container has style position:static and so can not use UI extensions properly")}e.selection=[void 0,void 0,void 0,void 0,0],e.bezierProjPcts=[.05,.225,.4,.5,.6,.775,.95],e.hoverData={down:null,last:null,downTime:null,triggerMode:null,dragging:!1,initialPan:[null,null],capture:!1},e.dragData={possibleDragElements:[]},e.touchData={start:null,capture:!1,startPosition:[null,null,null,null,null,null],singleTouchStartTime:null,singleTouchMoved:!0,now:[null,null,null,null,null,null],earlier:[null,null,null,null,null,null]},e.redraws=0,e.showFps=t.showFps,e.debug=t.debug,e.webgl=t.webgl,e.hideEdgesOnViewport=t.hideEdgesOnViewport,e.textureOnViewport=t.textureOnViewport,e.wheelSensitivity=t.wheelSensitivity,e.motionBlurEnabled=t.motionBlur,e.forcedPixelRatio=Ct(t.pixelRatio)?t.pixelRatio:null,e.motionBlur=t.motionBlur,e.motionBlurOpacity=t.motionBlurOpacity,e.motionBlurTransparency=1-e.motionBlurOpacity,e.motionBlurPxRatio=1,e.mbPxRBlurry=1,e.minMbLowQualFrames=4,e.fullQualityMb=!1,e.clearedForMotionBlur=[],e.desktopTapThreshold=t.desktopTapThreshold,e.desktopTapThreshold2=t.desktopTapThreshold*t.desktopTapThreshold,e.touchTapThreshold=t.touchTapThreshold,e.touchTapThreshold2=t.touchTapThreshold*t.touchTapThreshold,e.tapholdDuration=500,e.bindings=[],e.beforeRenderCallbacks=[],e.beforeRenderPriorities={animations:400,eleCalcs:300,eleTxrDeq:200,lyrTxrDeq:150,lyrTxrSkip:100},e.registerNodeShapes(),e.registerArrowShapes(),e.registerCalculationListeners()};oy.notify=function(t,e){var r=this,n=r.cy;if(!this.destroyed){if(t==="init"){r.load();return}if(t==="destroy"){r.destroy();return}(t==="add"||t==="remove"||t==="move"&&n.hasCompoundNodes()||t==="load"||t==="zorder"||t==="mount")&&r.invalidateCachedZSortedEles(),t==="viewport"&&r.redrawHint("select",!0),t==="gc"&&r.redrawHint("gc",!0),(t==="load"||t==="resize"||t==="mount")&&(r.invalidateContainerClientCoordsCache(),r.matchCanvasSize(r.container)),r.redrawHint("eles",!0),r.redrawHint("drag",!0),this.startRenderLoop(),this.redraw()}};oy.destroy=function(){var t=this;t.destroyed=!0,t.cy.stopAnimationLoop();for(var e=0;e<t.bindings.length;e++){var r=t.bindings[e],n=r,i=n.target;(i.off||i.removeEventListener).apply(i,n.args)}if(t.bindings=[],t.beforeRenderCallbacks=[],t.onUpdateEleCalcsFns=[],t.removeObserver&&t.removeObserver.disconnect(),t.styleObserver&&t.styleObserver.disconnect(),t.resizeObserver&&t.resizeObserver.disconnect(),t.labelCalcDiv)try{document.body.removeChild(t.labelCalcDiv)}catch{}};oy.isHeadless=function(){return!1};[yB,gge,yge,sy,eh,l4].forEach(function(t){rr(oy,t)});DP=1e3/60,xge={setupDequeueing:o(function(e){return o(function(){var n=this,i=this.renderer;if(!n.dequeueingSetup){n.dequeueingSetup=!0;var a=n4(function(){i.redrawHint("eles",!0),i.redrawHint("drag",!0),i.redraw()},e.deqRedrawThreshold),s=o(function(h,f){var d=Qu(),p=i.averageRedrawTime,m=i.lastRedrawTime,g=[],y=i.cy.extent(),v=i.getPixelRatio();for(h||i.flushRenderedStyleQueue();;){var x=Qu(),b=x-d,w=x-f;if(m<DP){var C=DP-(h?p:0);if(w>=e.deqFastCost*C)break}else if(h){if(b>=e.deqCost*m||b>=e.deqAvgCost*p)break}else if(w>=e.deqNoDrawCost*DP)break;var T=e.deq(n,v,y);if(T.length>0)for(var E=0;E<T.length;E++)g.push(T[E]);else break}g.length>0&&(e.onDeqd(n,g),!h&&e.shouldRedraw(n,g,v,y)&&a())},"dequeue"),l=e.priority||rB;i.beforeRender(s,l(n))}},"setupDequeueingImpl")},"setupDequeueing")},RQe=function(){function t(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:bS;Mf(this,t),this.idsByKey=new Xc,this.keyForId=new Xc,this.cachesByLvl=new Xc,this.lvls=[],this.getKey=e,this.doesEleInvalidateKey=r}return o(t,"ElementTextureCacheLookup"),If(t,[{key:"getIdsFor",value:o(function(r){r==null&&ai("Can not get id list for null key");var n=this.idsByKey,i=this.idsByKey.get(r);return i||(i=new J1,n.set(r,i)),i},"getIdsFor")},{key:"addIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).add(n)},"addIdForKey")},{key:"deleteIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).delete(n)},"deleteIdForKey")},{key:"getNumberOfIdsForKey",value:o(function(r){return r==null?0:this.getIdsFor(r).size},"getNumberOfIdsForKey")},{key:"updateKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);this.deleteIdForKey(i,n),this.addIdForKey(a,n),this.keyForId.set(n,a)},"updateKeyMappingFor")},{key:"deleteKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteIdForKey(i,n),this.keyForId.delete(n)},"deleteKeyMappingFor")},{key:"keyHasChangedFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);return i!==a},"keyHasChangedFor")},{key:"isInvalid",value:o(function(r){return this.keyHasChangedFor(r)||this.doesEleInvalidateKey(r)},"isInvalid")},{key:"getCachesAt",value:o(function(r){var n=this.cachesByLvl,i=this.lvls,a=n.get(r);return a||(a=new Xc,n.set(r,a),i.push(r)),a},"getCachesAt")},{key:"getCache",value:o(function(r,n){return this.getCachesAt(n).get(r)},"getCache")},{key:"get",value:o(function(r,n){var i=this.getKey(r),a=this.getCache(i,n);return a!=null&&this.updateKeyMappingFor(r),a},"get")},{key:"getForCachedKey",value:o(function(r,n){var i=this.keyForId.get(r.id()),a=this.getCache(i,n);return a},"getForCachedKey")},{key:"hasCache",value:o(function(r,n){return this.getCachesAt(n).has(r)},"hasCache")},{key:"has",value:o(function(r,n){var i=this.getKey(r);return this.hasCache(i,n)},"has")},{key:"setCache",value:o(function(r,n,i){i.key=r,this.getCachesAt(n).set(r,i)},"setCache")},{key:"set",value:o(function(r,n,i){var a=this.getKey(r);this.setCache(a,n,i),this.updateKeyMappingFor(r)},"set")},{key:"deleteCache",value:o(function(r,n){this.getCachesAt(n).delete(r)},"deleteCache")},{key:"delete",value:o(function(r,n){var i=this.getKey(r);this.deleteCache(i,n)},"_delete")},{key:"invalidateKey",value:o(function(r){var n=this;this.lvls.forEach(function(i){return n.deleteCache(r,i)})},"invalidateKey")},{key:"invalidate",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteKeyMappingFor(r);var a=this.doesEleInvalidateKey(r);return a&&this.invalidateKey(i),a||this.getNumberOfIdsForKey(i)===0},"invalidate")}]),t}(),I0e=25,sS=50,yS=-4,XP=3,bge=7.99,NQe=8,MQe=1024,IQe=1024,OQe=1024,PQe=.2,BQe=.8,FQe=10,$Qe=.15,zQe=.1,GQe=.9,VQe=.9,UQe=100,HQe=1,H1={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},WQe=la({getKey:null,doesEleInvalidateKey:bS,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:ume,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),Fb=o(function(e,r){var n=this;n.renderer=e,n.onDequeues=[];var i=WQe(r);rr(n,i),n.lookup=new RQe(i.getKey,i.doesEleInvalidateKey),n.setupDequeueing()},"ElementTextureCache"),qi=Fb.prototype;qi.reasons=H1;qi.getTextureQueue=function(t){var e=this;return e.eleImgCaches=e.eleImgCaches||{},e.eleImgCaches[t]=e.eleImgCaches[t]||[]};qi.getRetiredTextureQueue=function(t){var e=this,r=e.eleImgCaches.retired=e.eleImgCaches.retired||{},n=r[t]=r[t]||[];return n};qi.getElementQueue=function(){var t=this,e=t.eleCacheQueue=t.eleCacheQueue||new i4(function(r,n){return n.reqs-r.reqs});return e};qi.getElementKeyToQueue=function(){var t=this,e=t.eleKeyToCacheQueue=t.eleKeyToCacheQueue||{};return e};qi.getElement=function(t,e,r,n,i){var a=this,s=this.renderer,l=s.cy.zoom(),u=this.lookup;if(!e||e.w===0||e.h===0||isNaN(e.w)||isNaN(e.h)||!t.visible()||t.removed()||!a.allowEdgeTxrCaching&&t.isEdge()||!a.allowParentTxrCaching&&t.isParent())return null;if(n==null&&(n=Math.ceil(iB(l*r))),n<yS)n=yS;else if(l>=bge||n>XP)return null;var h=Math.pow(2,n),f=e.h*h,d=e.w*h,p=s.eleTextBiggerThanMin(t,h);if(!this.isVisible(t,p))return null;var m=u.get(t,n);if(m&&m.invalidated&&(m.invalidated=!1,m.texture.invalidatedWidth-=m.width),m)return m;var g;if(f<=I0e?g=I0e:f<=sS?g=sS:g=Math.ceil(f/sS)*sS,f>OQe||d>IQe)return null;var y=a.getTextureQueue(g),v=y[y.length-2],x=o(function(){return a.recycleTexture(g,d)||a.addTexture(g,d)},"addNewTxr");v||(v=y[y.length-1]),v||(v=x()),v.width-v.usedWidth<d&&(v=x());for(var b=o(function(M){return M&&M.scaledLabelShown===p},"scalableFrom"),w=i&&i===H1.dequeue,C=i&&i===H1.highQuality,T=i&&i===H1.downscale,E,A=n+1;A<=XP;A++){var S=u.get(t,A);if(S){E=S;break}}var _=E&&E.level===n+1?E:null,I=o(function(){v.context.drawImage(_.texture.canvas,_.x,0,_.width,_.height,v.usedWidth,0,d,f)},"downscale");if(v.context.setTransform(1,0,0,1,0,0),v.context.clearRect(v.usedWidth,0,d,g),b(_))I();else if(b(E))if(C){for(var D=E.level;D>n;D--)_=a.getElement(t,e,r,D,H1.downscale);I()}else return a.queueElement(t,E.level-1),E;else{var k;if(!w&&!C&&!T)for(var L=n-1;L>=yS;L--){var R=u.get(t,L);if(R){k=R;break}}if(b(k))return a.queueElement(t,n),k;v.context.translate(v.usedWidth,0),v.context.scale(h,h),this.drawElement(v.context,t,e,p,!1),v.context.scale(1/h,1/h),v.context.translate(-v.usedWidth,0)}return m={x:v.usedWidth,texture:v,level:n,scale:h,width:d,height:f,scaledLabelShown:p},v.usedWidth+=Math.ceil(d+NQe),v.eleCaches.push(m),u.set(t,n,m),a.checkTextureFullness(v),m};qi.invalidateElements=function(t){for(var e=0;e<t.length;e++)this.invalidateElement(t[e])};qi.invalidateElement=function(t){var e=this,r=e.lookup,n=[],i=r.isInvalid(t);if(i){for(var a=yS;a<=XP;a++){var s=r.getForCachedKey(t,a);s&&n.push(s)}var l=r.invalidate(t);if(l)for(var u=0;u<n.length;u++){var h=n[u],f=h.texture;f.invalidatedWidth+=h.width,h.invalidated=!0,e.checkTextureUtility(f)}e.removeFromQueue(t)}};qi.checkTextureUtility=function(t){t.invalidatedWidth>=PQe*t.width&&this.retireTexture(t)};qi.checkTextureFullness=function(t){var e=this,r=e.getTextureQueue(t.height);t.usedWidth/t.width>BQe&&t.fullnessChecks>=FQe?Df(r,t):t.fullnessChecks++};qi.retireTexture=function(t){var e=this,r=t.height,n=e.getTextureQueue(r),i=this.lookup;Df(n,t),t.retired=!0;for(var a=t.eleCaches,s=0;s<a.length;s++){var l=a[s];i.deleteCache(l.key,l.level)}nB(a);var u=e.getRetiredTextureQueue(r);u.push(t)};qi.addTexture=function(t,e){var r=this,n=r.getTextureQueue(t),i={};return n.push(i),i.eleCaches=[],i.height=t,i.width=Math.max(MQe,e),i.usedWidth=0,i.invalidatedWidth=0,i.fullnessChecks=0,i.canvas=r.renderer.makeOffscreenCanvas(i.width,i.height),i.context=i.canvas.getContext("2d"),i};qi.recycleTexture=function(t,e){for(var r=this,n=r.getTextureQueue(t),i=r.getRetiredTextureQueue(t),a=0;a<i.length;a++){var s=i[a];if(s.width>=e)return s.retired=!1,s.usedWidth=0,s.invalidatedWidth=0,s.fullnessChecks=0,nB(s.eleCaches),s.context.setTransform(1,0,0,1,0,0),s.context.clearRect(0,0,s.width,s.height),Df(i,s),n.push(s),s}};qi.queueElement=function(t,e){var r=this,n=r.getElementQueue(),i=r.getElementKeyToQueue(),a=this.getKey(t),s=i[a];if(s)s.level=Math.max(s.level,e),s.eles.merge(t),s.reqs++,n.updateItem(s);else{var l={eles:t.spawn().merge(t),level:e,reqs:1,key:a};n.push(l),i[a]=l}};qi.dequeue=function(t){for(var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=[],a=e.lookup,s=0;s<HQe&&r.size()>0;s++){var l=r.pop(),u=l.key,h=l.eles[0],f=a.hasCache(h,l.level);if(n[u]=null,f)continue;i.push(l);var d=e.getBoundingBox(h);e.getElement(h,d,t,l.level,H1.dequeue)}return i};qi.removeFromQueue=function(t){var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=this.getKey(t),a=n[i];a!=null&&(a.eles.length===1?(a.reqs=tB,r.updateItem(a),r.pop(),n[i]=null):a.eles.unmerge(t))};qi.onDequeue=function(t){this.onDequeues.push(t)};qi.offDequeue=function(t){Df(this.onDequeues,t)};qi.setupDequeueing=xge.setupDequeueing({deqRedrawThreshold:UQe,deqCost:$Qe,deqAvgCost:zQe,deqNoDrawCost:GQe,deqFastCost:VQe,deq:o(function(e,r,n){return e.dequeue(r,n)},"deq"),onDeqd:o(function(e,r){for(var n=0;n<e.onDequeues.length;n++){var i=e.onDequeues[n];i(r)}},"onDeqd"),shouldRedraw:o(function(e,r,n,i){for(var a=0;a<r.length;a++)for(var s=r[a].eles,l=0;l<s.length;l++){var u=s[l].boundingBox();if(aB(u,i))return!0}return!1},"shouldRedraw"),priority:o(function(e){return e.renderer.beforeRenderPriorities.eleTxrDeq},"priority")});qQe=1,zb=-4,_S=2,YQe=3.99,XQe=50,jQe=50,KQe=.15,QQe=.1,ZQe=.9,JQe=.9,eZe=1,O0e=250,tZe=4e3*4e3,P0e=32767,rZe=!0,wge=o(function(e){var r=this,n=r.renderer=e,i=n.cy;r.layersByLevel={},r.firstGet=!0,r.lastInvalidationTime=Qu()-2*O0e,r.skipping=!1,r.eleTxrDeqs=i.collection(),r.scheduleElementRefinement=n4(function(){r.refineElementTextures(r.eleTxrDeqs),r.eleTxrDeqs.unmerge(r.eleTxrDeqs)},jQe),n.beforeRender(function(s,l){l-r.lastInvalidationTime<=O0e?r.skipping=!0:r.skipping=!1},n.beforeRenderPriorities.lyrTxrSkip);var a=o(function(l,u){return u.reqs-l.reqs},"qSort");r.layersQueue=new i4(a),r.setupDequeueing()},"LayeredTextureCache"),Ea=wge.prototype,B0e=0,nZe=Math.pow(2,53)-1;Ea.makeLayer=function(t,e){var r=Math.pow(2,e),n=Math.ceil(t.w*r),i=Math.ceil(t.h*r),a=this.renderer.makeOffscreenCanvas(n,i),s={id:B0e=++B0e%nZe,bb:t,level:e,width:n,height:i,canvas:a,context:a.getContext("2d"),eles:[],elesQueue:[],reqs:0},l=s.context,u=-s.bb.x1,h=-s.bb.y1;return l.scale(r,r),l.translate(u,h),s};Ea.getLayers=function(t,e,r){var n=this,i=n.renderer,a=i.cy,s=a.zoom(),l=n.firstGet;if(n.firstGet=!1,r==null){if(r=Math.ceil(iB(s*e)),r<zb)r=zb;else if(s>=YQe||r>_S)return null}n.validateLayersElesOrdering(r,t);var u=n.layersByLevel,h=Math.pow(2,r),f=u[r]=u[r]||[],d,p=n.levelIsComplete(r,t),m,g=o(function(){var I=o(function(O){if(n.validateLayersElesOrdering(O,t),n.levelIsComplete(O,t))return m=u[O],!0},"canUseAsTmpLvl"),D=o(function(O){if(!m)for(var M=r+O;zb<=M&&M<=_S&&!I(M);M+=O);},"checkLvls");D(1),D(-1);for(var k=f.length-1;k>=0;k--){var L=f[k];L.invalid&&Df(f,L)}},"checkTempLevels");if(!p)g();else return f;var y=o(function(){if(!d){d=Hs();for(var I=0;I<t.length;I++)gme(d,t[I].boundingBox())}return d},"getBb"),v=o(function(I){I=I||{};var D=I.after;y();var k=Math.ceil(d.w*h),L=Math.ceil(d.h*h);if(k>P0e||L>P0e)return null;var R=k*L;if(R>tZe)return null;var O=n.makeLayer(d,r);if(D!=null){var M=f.indexOf(D)+1;f.splice(M,0,O)}else(I.insert===void 0||I.insert)&&f.unshift(O);return O},"makeLayer");if(n.skipping&&!l)return null;for(var x=null,b=t.length/qQe,w=!l,C=0;C<t.length;C++){var T=t[C],E=T._private.rscratch,A=E.imgLayerCaches=E.imgLayerCaches||{},S=A[r];if(S){x=S;continue}if((!x||x.eles.length>=b||!yme(x.bb,T.boundingBox()))&&(x=v({insert:!0,after:x}),!x))return null;m||w?n.queueLayer(x,T):n.drawEleInLayer(x,T,r,e),x.eles.push(T),A[r]=x}return m||(w?null:f)};Ea.getEleLevelForLayerLevel=function(t,e){return t};Ea.drawEleInLayer=function(t,e,r,n){var i=this,a=this.renderer,s=t.context,l=e.boundingBox();l.w===0||l.h===0||!e.visible()||(r=i.getEleLevelForLayerLevel(r,n),a.setImgSmoothing(s,!1),a.drawCachedElement(s,e,null,null,r,rZe),a.setImgSmoothing(s,!0))};Ea.levelIsComplete=function(t,e){var r=this,n=r.layersByLevel[t];if(!n||n.length===0)return!1;for(var i=0,a=0;a<n.length;a++){var s=n[a];if(s.reqs>0||s.invalid)return!1;i+=s.eles.length}return i===e.length};Ea.validateLayersElesOrdering=function(t,e){var r=this.layersByLevel[t];if(r)for(var n=0;n<r.length;n++){for(var i=r[n],a=-1,s=0;s<e.length;s++)if(i.eles[0]===e[s]){a=s;break}if(a<0){this.invalidateLayer(i);continue}for(var l=a,s=0;s<i.eles.length;s++)if(i.eles[s]!==e[l+s]){this.invalidateLayer(i);break}}};Ea.updateElementsInLayers=function(t,e){for(var r=this,n=t4(t[0]),i=0;i<t.length;i++)for(var a=n?null:t[i],s=n?t[i]:t[i].ele,l=s._private.rscratch,u=l.imgLayerCaches=l.imgLayerCaches||{},h=zb;h<=_S;h++){var f=u[h];f&&(a&&r.getEleLevelForLayerLevel(f.level)!==a.level||e(f,s,a))}};Ea.haveLayers=function(){for(var t=this,e=!1,r=zb;r<=_S;r++){var n=t.layersByLevel[r];if(n&&n.length>0){e=!0;break}}return e};Ea.invalidateElements=function(t){var e=this;t.length!==0&&(e.lastInvalidationTime=Qu(),!(t.length===0||!e.haveLayers())&&e.updateElementsInLayers(t,o(function(n,i,a){e.invalidateLayer(n)},"invalAssocLayers")))};Ea.invalidateLayer=function(t){if(this.lastInvalidationTime=Qu(),!t.invalid){var e=t.level,r=t.eles,n=this.layersByLevel[e];Df(n,t),t.elesQueue=[],t.invalid=!0,t.replacement&&(t.replacement.invalid=!0);for(var i=0;i<r.length;i++){var a=r[i]._private.rscratch.imgLayerCaches;a&&(a[e]=null)}}};Ea.refineElementTextures=function(t){var e=this;e.updateElementsInLayers(t,o(function(n,i,a){var s=n.replacement;if(s||(s=n.replacement=e.makeLayer(n.bb,n.level),s.replaces=n,s.eles=n.eles),!s.reqs)for(var l=0;l<s.eles.length;l++)e.queueLayer(s,s.eles[l])},"refineEachEle"))};Ea.enqueueElementRefinement=function(t){this.eleTxrDeqs.merge(t),this.scheduleElementRefinement()};Ea.queueLayer=function(t,e){var r=this,n=r.layersQueue,i=t.elesQueue,a=i.hasId=i.hasId||{};if(!t.replacement){if(e){if(a[e.id()])return;i.push(e),a[e.id()]=!0}t.reqs?(t.reqs++,n.updateItem(t)):(t.reqs=1,n.push(t))}};Ea.dequeue=function(t){for(var e=this,r=e.layersQueue,n=[],i=0;i<eZe&&r.size()!==0;){var a=r.peek();if(a.replacement){r.pop();continue}if(a.replaces&&a!==a.replaces.replacement){r.pop();continue}if(a.invalid){r.pop();continue}var s=a.elesQueue.shift();s&&(e.drawEleInLayer(a,s,a.level,t),i++),n.length===0&&n.push(!0),a.elesQueue.length===0&&(r.pop(),a.reqs=0,a.replaces&&e.applyLayerReplacement(a),e.requestRedraw())}return n};Ea.applyLayerReplacement=function(t){var e=this,r=e.layersByLevel[t.level],n=t.replaces,i=r.indexOf(n);if(!(i<0||n.invalid)){r[i]=t;for(var a=0;a<t.eles.length;a++){var s=t.eles[a]._private,l=s.imgLayerCaches=s.imgLayerCaches||{};l&&(l[t.level]=t)}e.requestRedraw()}};Ea.requestRedraw=n4(function(){var t=this.renderer;t.redrawHint("eles",!0),t.redrawHint("drag",!0),t.redraw()},100);Ea.setupDequeueing=xge.setupDequeueing({deqRedrawThreshold:XQe,deqCost:KQe,deqAvgCost:QQe,deqNoDrawCost:ZQe,deqFastCost:JQe,deq:o(function(e,r){return e.dequeue(r)},"deq"),onDeqd:rB,shouldRedraw:ume,priority:o(function(e){return e.renderer.beforeRenderPriorities.lyrTxrDeq},"priority")});Tge={};o(iZe,"polygon");o(aZe,"triangleBackcurve");o($0e,"triangleTee");o(sZe,"circleTriangle");o(oZe,"circle");Tge.arrowShapeImpl=function(t){return(F0e||(F0e={polygon:iZe,"triangle-backcurve":aZe,"triangle-tee":$0e,"circle-triangle":sZe,"triangle-cross":$0e,circle:oZe}))[t]};Qc={};Qc.drawElement=function(t,e,r,n,i,a){var s=this;e.isNode()?s.drawNode(t,e,r,n,i,a):s.drawEdge(t,e,r,n,i,a)};Qc.drawElementOverlay=function(t,e){var r=this;e.isNode()?r.drawNodeOverlay(t,e):r.drawEdgeOverlay(t,e)};Qc.drawElementUnderlay=function(t,e){var r=this;e.isNode()?r.drawNodeUnderlay(t,e):r.drawEdgeUnderlay(t,e)};Qc.drawCachedElementPortion=function(t,e,r,n,i,a,s,l){var u=this,h=r.getBoundingBox(e);if(!(h.w===0||h.h===0)){var f=r.getElement(e,h,n,i,a);if(f!=null){var d=l(u,e);if(d===0)return;var p=s(u,e),m=h.x1,g=h.y1,y=h.w,v=h.h,x,b,w,C,T;if(p!==0){var E=r.getRotationPoint(e);w=E.x,C=E.y,t.translate(w,C),t.rotate(p),T=u.getImgSmoothing(t),T||u.setImgSmoothing(t,!0);var A=r.getRotationOffset(e);x=A.x,b=A.y}else x=m,b=g;var S;d!==1&&(S=t.globalAlpha,t.globalAlpha=S*d),t.drawImage(f.texture.canvas,f.x,0,f.width,f.height,x,b,y,v),d!==1&&(t.globalAlpha=S),p!==0&&(t.rotate(-p),t.translate(-w,-C),T||u.setImgSmoothing(t,!1))}else r.drawElement(t,e)}};lZe=o(function(){return 0},"getZeroRotation"),cZe=o(function(e,r){return e.getTextAngle(r,null)},"getLabelRotation"),uZe=o(function(e,r){return e.getTextAngle(r,"source")},"getSourceLabelRotation"),hZe=o(function(e,r){return e.getTextAngle(r,"target")},"getTargetLabelRotation"),fZe=o(function(e,r){return r.effectiveOpacity()},"getOpacity"),LP=o(function(e,r){return r.pstyle("text-opacity").pfValue*r.effectiveOpacity()},"getTextOpacity");Qc.drawCachedElement=function(t,e,r,n,i,a){var s=this,l=s.data,u=l.eleTxrCache,h=l.lblTxrCache,f=l.slbTxrCache,d=l.tlbTxrCache,p=e.boundingBox(),m=a===!0?u.reasons.highQuality:null;if(!(p.w===0||p.h===0||!e.visible())&&(!n||aB(p,n))){var g=e.isEdge(),y=e.element()._private.rscratch.badLine;s.drawElementUnderlay(t,e),s.drawCachedElementPortion(t,e,u,r,i,m,lZe,fZe),(!g||!y)&&s.drawCachedElementPortion(t,e,h,r,i,m,cZe,LP),g&&!y&&(s.drawCachedElementPortion(t,e,f,r,i,m,uZe,LP),s.drawCachedElementPortion(t,e,d,r,i,m,hZe,LP)),s.drawElementOverlay(t,e)}};Qc.drawElements=function(t,e){for(var r=this,n=0;n<e.length;n++){var i=e[n];r.drawElement(t,i)}};Qc.drawCachedElements=function(t,e,r,n){for(var i=this,a=0;a<e.length;a++){var s=e[a];i.drawCachedElement(t,s,r,n)}};Qc.drawCachedNodes=function(t,e,r,n){for(var i=this,a=0;a<e.length;a++){var s=e[a];s.isNode()&&i.drawCachedElement(t,s,r,n)}};Qc.drawLayeredElements=function(t,e,r,n){var i=this,a=i.data.lyrTxrCache.getLayers(e,r);if(a)for(var s=0;s<a.length;s++){var l=a[s],u=l.bb;u.w===0||u.h===0||t.drawImage(l.canvas,u.x1,u.y1,u.w,u.h)}else i.drawCachedElements(t,e,r,n)};th={};th.drawEdge=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l=e._private.rscratch;if(!(a&&!e.visible())&&!(l.badLine||l.allpts==null||isNaN(l.allpts[0]))){var u;r&&(u=r,t.translate(-u.x1,-u.y1));var h=a?e.pstyle("opacity").value:1,f=a?e.pstyle("line-opacity").value:1,d=e.pstyle("curve-style").value,p=e.pstyle("line-style").value,m=e.pstyle("width").pfValue,g=e.pstyle("line-cap").value,y=e.pstyle("line-outline-width").value,v=e.pstyle("line-outline-color").value,x=h*f,b=h*f,w=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;d==="straight-triangle"?(s.eleStrokeStyle(t,e,O),s.drawEdgeTrianglePath(e,t,l.allpts)):(t.lineWidth=m,t.lineCap=g,s.eleStrokeStyle(t,e,O),s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLine"),C=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;if(t.lineWidth=m+y,t.lineCap=g,y>0)s.colorStrokeStyle(t,v[0],v[1],v[2],O);else{t.lineCap="butt";return}d==="straight-triangle"?s.drawEdgeTrianglePath(e,t,l.allpts):(s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLineOutline"),T=o(function(){i&&s.drawEdgeOverlay(t,e)},"drawOverlay"),E=o(function(){i&&s.drawEdgeUnderlay(t,e)},"drawUnderlay"),A=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:b;s.drawArrowheads(t,e,O)},"drawArrows"),S=o(function(){s.drawElementText(t,e,null,n)},"drawText");t.lineJoin="round";var _=e.pstyle("ghost").value==="yes";if(_){var I=e.pstyle("ghost-offset-x").pfValue,D=e.pstyle("ghost-offset-y").pfValue,k=e.pstyle("ghost-opacity").value,L=x*k;t.translate(I,D),w(L),A(L),t.translate(-I,-D)}else C();E(),w(),A(),T(),S(),r&&t.translate(u.x1,u.y1)}};kge=o(function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(r,n){if(n.visible()){var i=n.pstyle("".concat(e,"-opacity")).value;if(i!==0){var a=this,s=a.usePaths(),l=n._private.rscratch,u=n.pstyle("".concat(e,"-padding")).pfValue,h=2*u,f=n.pstyle("".concat(e,"-color")).value;r.lineWidth=h,l.edgeType==="self"&&!s?r.lineCap="butt":r.lineCap="round",a.colorStrokeStyle(r,f[0],f[1],f[2],i),a.drawEdgePath(n,r,l.allpts,"solid")}}}},"drawEdgeOverlayUnderlay");th.drawEdgeOverlay=kge("overlay");th.drawEdgeUnderlay=kge("underlay");th.drawEdgePath=function(t,e,r,n){var i=t._private.rscratch,a=e,s,l=!1,u=this.usePaths(),h=t.pstyle("line-dash-pattern").pfValue,f=t.pstyle("line-dash-offset").pfValue;if(u){var d=r.join("$"),p=i.pathCacheKey&&i.pathCacheKey===d;p?(s=e=i.pathCache,l=!0):(s=e=new Path2D,i.pathCacheKey=d,i.pathCache=s)}if(a.setLineDash)switch(n){case"dotted":a.setLineDash([1,1]);break;case"dashed":a.setLineDash(h),a.lineDashOffset=f;break;case"solid":a.setLineDash([]);break}if(!l&&!i.badLine)switch(e.beginPath&&e.beginPath(),e.moveTo(r[0],r[1]),i.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var m=2;m+3<r.length;m+=4)e.quadraticCurveTo(r[m],r[m+1],r[m+2],r[m+3]);break;case"straight":case"haystack":for(var g=2;g+1<r.length;g+=2)e.lineTo(r[g],r[g+1]);break;case"segments":if(i.isRound){var y=mo(i.roundCorners),v;try{for(y.s();!(v=y.n()).done;){var x=v.value;hge(e,x)}}catch(w){y.e(w)}finally{y.f()}e.lineTo(r[r.length-2],r[r.length-1])}else for(var b=2;b+1<r.length;b+=2)e.lineTo(r[b],r[b+1]);break}e=a,u?e.stroke(s):e.stroke(),e.setLineDash&&e.setLineDash([])};th.drawEdgeTrianglePath=function(t,e,r){e.fillStyle=e.strokeStyle;for(var n=t.pstyle("width").pfValue,i=0;i+1<r.length;i+=2){var a=[r[i+2]-r[i],r[i+3]-r[i+1]],s=Math.sqrt(a[0]*a[0]+a[1]*a[1]),l=[a[1]/s,-a[0]/s],u=[l[0]*n/2,l[1]*n/2];e.beginPath(),e.moveTo(r[i]-u[0],r[i+1]-u[1]),e.lineTo(r[i]+u[0],r[i+1]+u[1]),e.lineTo(r[i+2],r[i+3]),e.closePath(),e.fill()}};th.drawArrowheads=function(t,e,r){var n=e._private.rscratch,i=n.edgeType==="haystack";i||this.drawArrowhead(t,e,"source",n.arrowStartX,n.arrowStartY,n.srcArrowAngle,r),this.drawArrowhead(t,e,"mid-target",n.midX,n.midY,n.midtgtArrowAngle,r),this.drawArrowhead(t,e,"mid-source",n.midX,n.midY,n.midsrcArrowAngle,r),i||this.drawArrowhead(t,e,"target",n.arrowEndX,n.arrowEndY,n.tgtArrowAngle,r)};th.drawArrowhead=function(t,e,r,n,i,a,s){if(!(isNaN(n)||n==null||isNaN(i)||i==null||isNaN(a)||a==null)){var l=this,u=e.pstyle(r+"-arrow-shape").value;if(u!=="none"){var h=e.pstyle(r+"-arrow-fill").value==="hollow"?"both":"filled",f=e.pstyle(r+"-arrow-fill").value,d=e.pstyle("width").pfValue,p=e.pstyle(r+"-arrow-width"),m=p.value==="match-line"?d:p.pfValue;p.units==="%"&&(m*=d);var g=e.pstyle("opacity").value;s===void 0&&(s=g);var y=t.globalCompositeOperation;(s!==1||f==="hollow")&&(t.globalCompositeOperation="destination-out",l.colorFillStyle(t,255,255,255,1),l.colorStrokeStyle(t,255,255,255,1),l.drawArrowShape(e,t,h,d,u,m,n,i,a),t.globalCompositeOperation=y);var v=e.pstyle(r+"-arrow-color").value;l.colorFillStyle(t,v[0],v[1],v[2],s),l.colorStrokeStyle(t,v[0],v[1],v[2],s),l.drawArrowShape(e,t,f,d,u,m,n,i,a)}}};th.drawArrowShape=function(t,e,r,n,i,a,s,l,u){var h=this,f=this.usePaths()&&i!=="triangle-cross",d=!1,p,m=e,g={x:s,y:l},y=t.pstyle("arrow-scale").value,v=this.getArrowWidth(n,y),x=h.arrowShapes[i];if(f){var b=h.arrowPathCache=h.arrowPathCache||[],w=_f(i),C=b[w];C!=null?(p=e=C,d=!0):(p=e=new Path2D,b[w]=p)}d||(e.beginPath&&e.beginPath(),f?x.draw(e,1,0,{x:0,y:0},1):x.draw(e,v,u,g,n),e.closePath&&e.closePath()),e=m,f&&(e.translate(s,l),e.rotate(u),e.scale(v,v)),(r==="filled"||r==="both")&&(f?e.fill(p):e.fill()),(r==="hollow"||r==="both")&&(e.lineWidth=a/(f?v:1),e.lineJoin="miter",f?e.stroke(p):e.stroke()),f&&(e.scale(1/v,1/v),e.rotate(-u),e.translate(-s,-l))};bB={};bB.safeDrawImage=function(t,e,r,n,i,a,s,l,u,h){if(!(i<=0||a<=0||u<=0||h<=0))try{t.drawImage(e,r,n,i,a,s,l,u,h)}catch(f){un(f)}};bB.drawInscribedImage=function(t,e,r,n,i){var a=this,s=r.position(),l=s.x,u=s.y,h=r.cy().style(),f=h.getIndexedStyle.bind(h),d=f(r,"background-fit","value",n),p=f(r,"background-repeat","value",n),m=r.width(),g=r.height(),y=r.padding()*2,v=m+(f(r,"background-width-relative-to","value",n)==="inner"?0:y),x=g+(f(r,"background-height-relative-to","value",n)==="inner"?0:y),b=r._private.rscratch,w=f(r,"background-clip","value",n),C=w==="node",T=f(r,"background-image-opacity","value",n)*i,E=f(r,"background-image-smoothing","value",n),A=r.pstyle("corner-radius").value;A!=="auto"&&(A=r.pstyle("corner-radius").pfValue);var S=e.width||e.cachedW,_=e.height||e.cachedH;(S==null||_==null)&&(document.body.appendChild(e),S=e.cachedW=e.width||e.offsetWidth,_=e.cachedH=e.height||e.offsetHeight,document.body.removeChild(e));var I=S,D=_;if(f(r,"background-width","value",n)!=="auto"&&(f(r,"background-width","units",n)==="%"?I=f(r,"background-width","pfValue",n)*v:I=f(r,"background-width","pfValue",n)),f(r,"background-height","value",n)!=="auto"&&(f(r,"background-height","units",n)==="%"?D=f(r,"background-height","pfValue",n)*x:D=f(r,"background-height","pfValue",n)),!(I===0||D===0)){if(d==="contain"){var k=Math.min(v/I,x/D);I*=k,D*=k}else if(d==="cover"){var k=Math.max(v/I,x/D);I*=k,D*=k}var L=l-v/2,R=f(r,"background-position-x","units",n),O=f(r,"background-position-x","pfValue",n);R==="%"?L+=(v-I)*O:L+=O;var M=f(r,"background-offset-x","units",n),B=f(r,"background-offset-x","pfValue",n);M==="%"?L+=(v-I)*B:L+=B;var F=u-x/2,P=f(r,"background-position-y","units",n),z=f(r,"background-position-y","pfValue",n);P==="%"?F+=(x-D)*z:F+=z;var $=f(r,"background-offset-y","units",n),H=f(r,"background-offset-y","pfValue",n);$==="%"?F+=(x-D)*H:F+=H,b.pathCache&&(L-=l,F-=u,l=0,u=0);var Q=t.globalAlpha;t.globalAlpha=T;var j=a.getImgSmoothing(t),ie=!1;if(E==="no"&&j?(a.setImgSmoothing(t,!1),ie=!0):E==="yes"&&!j&&(a.setImgSmoothing(t,!0),ie=!0),p==="no-repeat")C&&(t.save(),b.pathCache?t.clip(b.pathCache):(a.nodeShapes[a.getNodeShape(r)].draw(t,l,u,v,x,A,b),t.clip())),a.safeDrawImage(t,e,0,0,S,_,L,F,I,D),C&&t.restore();else{var ne=t.createPattern(e,p);t.fillStyle=ne,a.nodeShapes[a.getNodeShape(r)].draw(t,l,u,v,x,A,b),t.translate(L,F),t.fill(),t.translate(-L,-F)}t.globalAlpha=Q,ie&&a.setImgSmoothing(t,j)}};Yp={};Yp.eleTextBiggerThanMin=function(t,e){if(!e){var r=t.cy().zoom(),n=this.getPixelRatio(),i=Math.ceil(iB(r*n));e=Math.pow(2,i)}var a=t.pstyle("font-size").pfValue*e,s=t.pstyle("min-zoomed-font-size").pfValue;return!(a<s)};Yp.drawElementText=function(t,e,r,n,i){var a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this;if(n==null){if(a&&!s.eleTextBiggerThanMin(e))return}else if(n===!1)return;if(e.isNode()){var l=e.pstyle("label");if(!l||!l.value)return;var u=s.getLabelJustification(e);t.textAlign=u,t.textBaseline="bottom"}else{var h=e.element()._private.rscratch.badLine,f=e.pstyle("label"),d=e.pstyle("source-label"),p=e.pstyle("target-label");if(h||(!f||!f.value)&&(!d||!d.value)&&(!p||!p.value))return;t.textAlign="center",t.textBaseline="bottom"}var m=!r,g;r&&(g=r,t.translate(-g.x1,-g.y1)),i==null?(s.drawText(t,e,null,m,a),e.isEdge()&&(s.drawText(t,e,"source",m,a),s.drawText(t,e,"target",m,a))):s.drawText(t,e,i,m,a),r&&t.translate(g.x1,g.y1)};Yp.getFontCache=function(t){var e;this.fontCaches=this.fontCaches||[];for(var r=0;r<this.fontCaches.length;r++)if(e=this.fontCaches[r],e.context===t)return e;return e={context:t},this.fontCaches.push(e),e};Yp.setupTextStyle=function(t,e){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,n=e.pstyle("font-style").strValue,i=e.pstyle("font-size").pfValue+"px",a=e.pstyle("font-family").strValue,s=e.pstyle("font-weight").strValue,l=r?e.effectiveOpacity()*e.pstyle("text-opacity").value:1,u=e.pstyle("text-outline-opacity").value*l,h=e.pstyle("color").value,f=e.pstyle("text-outline-color").value;t.font=n+" "+s+" "+i+" "+a,t.lineJoin="round",this.colorFillStyle(t,h[0],h[1],h[2],l),this.colorStrokeStyle(t,f[0],f[1],f[2],u)};o(RP,"roundRect");Yp.getTextAngle=function(t,e){var r,n=t._private,i=n.rscratch,a=e?e+"-":"",s=t.pstyle(a+"text-rotation");if(s.strValue==="autorotate"){var l=Gl(i,"labelAngle",e);r=t.isEdge()?l:0}else s.strValue==="none"?r=0:r=s.pfValue;return r};Yp.drawText=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=e._private,s=a.rscratch,l=i?e.effectiveOpacity():1;if(!(i&&(l===0||e.pstyle("text-opacity").value===0))){r==="main"&&(r=null);var u=Gl(s,"labelX",r),h=Gl(s,"labelY",r),f,d,p=this.getLabelText(e,r);if(p!=null&&p!==""&&!isNaN(u)&&!isNaN(h)){this.setupTextStyle(t,e,i);var m=r?r+"-":"",g=Gl(s,"labelWidth",r),y=Gl(s,"labelHeight",r),v=e.pstyle(m+"text-margin-x").pfValue,x=e.pstyle(m+"text-margin-y").pfValue,b=e.isEdge(),w=e.pstyle("text-halign").value,C=e.pstyle("text-valign").value;b&&(w="center",C="center"),u+=v,h+=x;var T;switch(n?T=this.getTextAngle(e,r):T=0,T!==0&&(f=u,d=h,t.translate(f,d),t.rotate(T),u=0,h=0),C){case"top":break;case"center":h+=y/2;break;case"bottom":h+=y;break}var E=e.pstyle("text-background-opacity").value,A=e.pstyle("text-border-opacity").value,S=e.pstyle("text-border-width").pfValue,_=e.pstyle("text-background-padding").pfValue,I=e.pstyle("text-background-shape").strValue,D=I.indexOf("round")===0,k=2;if(E>0||S>0&&A>0){var L=u-_;switch(w){case"left":L-=g;break;case"center":L-=g/2;break}var R=h-y-_,O=g+2*_,M=y+2*_;if(E>0){var B=t.fillStyle,F=e.pstyle("text-background-color").value;t.fillStyle="rgba("+F[0]+","+F[1]+","+F[2]+","+E*l+")",D?RP(t,L,R,O,M,k):t.fillRect(L,R,O,M),t.fillStyle=B}if(S>0&&A>0){var P=t.strokeStyle,z=t.lineWidth,$=e.pstyle("text-border-color").value,H=e.pstyle("text-border-style").value;if(t.strokeStyle="rgba("+$[0]+","+$[1]+","+$[2]+","+A*l+")",t.lineWidth=S,t.setLineDash)switch(H){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"double":t.lineWidth=S/4,t.setLineDash([]);break;case"solid":t.setLineDash([]);break}if(D?RP(t,L,R,O,M,k,"stroke"):t.strokeRect(L,R,O,M),H==="double"){var Q=S/2;D?RP(t,L+Q,R+Q,O-Q*2,M-Q*2,k,"stroke"):t.strokeRect(L+Q,R+Q,O-Q*2,M-Q*2)}t.setLineDash&&t.setLineDash([]),t.lineWidth=z,t.strokeStyle=P}}var j=2*e.pstyle("text-outline-width").pfValue;if(j>0&&(t.lineWidth=j),e.pstyle("text-wrap").value==="wrap"){var ie=Gl(s,"labelWrapCachedLines",r),ne=Gl(s,"labelLineHeight",r),le=g/2,he=this.getLabelJustification(e);switch(he==="auto"||(w==="left"?he==="left"?u+=-g:he==="center"&&(u+=-le):w==="center"?he==="left"?u+=-le:he==="right"&&(u+=le):w==="right"&&(he==="center"?u+=le:he==="right"&&(u+=g))),C){case"top":h-=(ie.length-1)*ne;break;case"center":case"bottom":h-=(ie.length-1)*ne;break}for(var K=0;K<ie.length;K++)j>0&&t.strokeText(ie[K],u,h),t.fillText(ie[K],u,h),h+=ne}else j>0&&t.strokeText(p,u,h),t.fillText(p,u,h);T!==0&&(t.rotate(-T),t.translate(-f,-d))}}};ly={};ly.drawNode=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l,u,h=e._private,f=h.rscratch,d=e.position();if(!(!Ct(d.x)||!Ct(d.y))&&!(a&&!e.visible())){var p=a?e.effectiveOpacity():1,m=s.usePaths(),g,y=!1,v=e.padding();l=e.width()+2*v,u=e.height()+2*v;var x;r&&(x=r,t.translate(-x.x1,-x.y1));for(var b=e.pstyle("background-image"),w=b.value,C=new Array(w.length),T=new Array(w.length),E=0,A=0;A<w.length;A++){var S=w[A],_=C[A]=S!=null&&S!=="none";if(_){var I=e.cy().style().getIndexedStyle(e,"background-image-crossorigin","value",A);E++,T[A]=s.getCachedImage(S,I,function(){h.backgroundTimestamp=Date.now(),e.emitAndNotify("background")})}}var D=e.pstyle("background-blacken").value,k=e.pstyle("border-width").pfValue,L=e.pstyle("background-opacity").value*p,R=e.pstyle("border-color").value,O=e.pstyle("border-style").value,M=e.pstyle("border-join").value,B=e.pstyle("border-cap").value,F=e.pstyle("border-position").value,P=e.pstyle("border-dash-pattern").pfValue,z=e.pstyle("border-dash-offset").pfValue,$=e.pstyle("border-opacity").value*p,H=e.pstyle("outline-width").pfValue,Q=e.pstyle("outline-color").value,j=e.pstyle("outline-style").value,ie=e.pstyle("outline-opacity").value*p,ne=e.pstyle("outline-offset").value,le=e.pstyle("corner-radius").value;le!=="auto"&&(le=e.pstyle("corner-radius").pfValue);var he=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:L;s.eleFillStyle(t,e,oe)},"setupShapeColor"),K=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:$;s.colorStrokeStyle(t,R[0],R[1],R[2],oe)},"setupBorderColor"),X=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ie;s.colorStrokeStyle(t,Q[0],Q[1],Q[2],oe)},"setupOutlineColor"),te=o(function(oe,V,xe,q){var pe=s.nodePathCache=s.nodePathCache||[],ve=cme(xe==="polygon"?xe+","+q.join(","):xe,""+V,""+oe,""+le),Pe=pe[ve],_e,we=!1;return Pe!=null?(_e=Pe,we=!0,f.pathCache=_e):(_e=new Path2D,pe[ve]=f.pathCache=_e),{path:_e,cacheHit:we}},"getPath"),J=e.pstyle("shape").strValue,se=e.pstyle("shape-polygon-points").pfValue;if(m){t.translate(d.x,d.y);var ue=te(l,u,J,se);g=ue.path,y=ue.cacheHit}var Z=o(function(){if(!y){var oe=d;m&&(oe={x:0,y:0}),s.nodeShapes[s.getNodeShape(e)].draw(g||t,oe.x,oe.y,l,u,le,f)}m?t.fill(g):t.fill()},"drawShape"),Se=o(function(){for(var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,V=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,xe=h.backgrounding,q=0,pe=0;pe<T.length;pe++){var ve=e.cy().style().getIndexedStyle(e,"background-image-containment","value",pe);if(V&&ve==="over"||!V&&ve==="inside"){q++;continue}C[pe]&&T[pe].complete&&!T[pe].error&&(q++,s.drawInscribedImage(t,T[pe],e,pe,oe))}h.backgrounding=q!==E,xe!==h.backgrounding&&e.updateStyle(!1)},"drawImages"),ce=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,V=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p;s.hasPie(e)&&(s.drawPie(t,e,V),oe&&(m||s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,le,f)))},"drawPie"),ae=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,V=(D>0?D:-D)*oe,xe=D>0?0:255;D!==0&&(s.colorFillStyle(t,xe,xe,xe,V),m?t.fill(g):t.fill())},"darken"),Oe=o(function(){if(k>0){if(t.lineWidth=k,t.lineCap=B,t.lineJoin=M,t.setLineDash)switch(O){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash(P),t.lineDashOffset=z;break;case"solid":case"double":t.setLineDash([]);break}if(F!=="center"){if(t.save(),t.lineWidth*=2,F==="inside")m?t.clip(g):t.clip();else{var oe=new Path2D;oe.rect(-l/2-k,-u/2-k,l+2*k,u+2*k),oe.addPath(g),t.clip(oe,"evenodd")}m?t.stroke(g):t.stroke(),t.restore()}else m?t.stroke(g):t.stroke();if(O==="double"){t.lineWidth=k/3;var V=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",m?t.stroke(g):t.stroke(),t.globalCompositeOperation=V}t.setLineDash&&t.setLineDash([])}},"drawBorder"),ge=o(function(){if(H>0){if(t.lineWidth=H,t.lineCap="butt",t.setLineDash)switch(j){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"solid":case"double":t.setLineDash([]);break}var oe=d;m&&(oe={x:0,y:0});var V=s.getNodeShape(e),xe=k;F==="inside"&&(xe=0),F==="outside"&&(xe*=2);var q=(l+xe+(H+ne))/l,pe=(u+xe+(H+ne))/u,ve=l*q,Pe=u*pe,_e=s.nodeShapes[V].points,we;if(m){var Ve=te(ve,Pe,V,_e);we=Ve.path}if(V==="ellipse")s.drawEllipsePath(we||t,oe.x,oe.y,ve,Pe);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(V)){var De=0,qe=0,at=0;V==="round-diamond"?De=(xe+ne+H)*1.4:V==="round-heptagon"?(De=(xe+ne+H)*1.075,at=-(xe/2+ne+H)/35):V==="round-hexagon"?De=(xe+ne+H)*1.12:V==="round-pentagon"?(De=(xe+ne+H)*1.13,at=-(xe/2+ne+H)/15):V==="round-tag"?(De=(xe+ne+H)*1.12,qe=(xe/2+H+ne)*.07):V==="round-triangle"&&(De=(xe+ne+H)*(Math.PI/2),at=-(xe+ne/2+H)/Math.PI),De!==0&&(q=(l+De)/l,ve=l*q,["round-hexagon","round-tag"].includes(V)||(pe=(u+De)/u,Pe=u*pe)),le=le==="auto"?bme(ve,Pe):le;for(var Rt=ve/2,st=Pe/2,Ue=le+(xe+H+ne)/2,ct=new Array(_e.length/2),We=new Array(_e.length/2),ot=0;ot<_e.length/2;ot++)ct[ot]={x:oe.x+qe+Rt*_e[ot*2],y:oe.y+at+st*_e[ot*2+1]};var Yt,bt,Mt,xt,ut=ct.length;for(bt=ct[ut-1],Yt=0;Yt<ut;Yt++)Mt=ct[Yt%ut],xt=ct[(Yt+1)%ut],We[Yt]=vB(bt,Mt,xt,Ue),bt=Mt,Mt=xt;s.drawRoundPolygonPath(we||t,oe.x+qe,oe.y+at,l*q,u*pe,_e,We)}else if(["roundrectangle","round-rectangle"].includes(V))le=le==="auto"?Vp(ve,Pe):le,s.drawRoundRectanglePath(we||t,oe.x,oe.y,ve,Pe,le+(xe+H+ne)/2);else if(["cutrectangle","cut-rectangle"].includes(V))le=le==="auto"?sB():le,s.drawCutRectanglePath(we||t,oe.x,oe.y,ve,Pe,null,le+(xe+H+ne)/4);else if(["bottomroundrectangle","bottom-round-rectangle"].includes(V))le=le==="auto"?Vp(ve,Pe):le,s.drawBottomRoundRectanglePath(we||t,oe.x,oe.y,ve,Pe,le+(xe+H+ne)/2);else if(V==="barrel")s.drawBarrelPath(we||t,oe.x,oe.y,ve,Pe);else if(V.startsWith("polygon")||["rhomboid","right-rhomboid","round-tag","tag","vee"].includes(V)){var Et=(xe+H+ne)/l;_e=wS(TS(_e,Et)),s.drawPolygonPath(we||t,oe.x,oe.y,l,u,_e)}else{var ft=(xe+H+ne)/l;_e=wS(TS(_e,-ft)),s.drawPolygonPath(we||t,oe.x,oe.y,l,u,_e)}if(m?t.stroke(we):t.stroke(),j==="double"){t.lineWidth=xe/3;var yt=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",m?t.stroke(we):t.stroke(),t.globalCompositeOperation=yt}t.setLineDash&&t.setLineDash([])}},"drawOutline"),ze=o(function(){i&&s.drawNodeOverlay(t,e,d,l,u)},"drawOverlay"),He=o(function(){i&&s.drawNodeUnderlay(t,e,d,l,u)},"drawUnderlay"),$e=o(function(){s.drawElementText(t,e,null,n)},"drawText"),Re=e.pstyle("ghost").value==="yes";if(Re){var Ie=e.pstyle("ghost-offset-x").pfValue,be=e.pstyle("ghost-offset-y").pfValue,W=e.pstyle("ghost-opacity").value,de=W*p;t.translate(Ie,be),X(),ge(),he(W*L),Z(),Se(de,!0),K(W*$),Oe(),ce(D!==0||k!==0),Se(de,!1),ae(de),t.translate(-Ie,-be)}m&&t.translate(-d.x,-d.y),He(),m&&t.translate(d.x,d.y),X(),ge(),he(),Z(),Se(p,!0),K(),Oe(),ce(D!==0||k!==0),Se(p,!1),ae(),m&&t.translate(-d.x,-d.y),$e(),ze(),r&&t.translate(x.x1,x.y1)}};Ege=o(function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(r,n,i,a,s){var l=this;if(n.visible()){var u=n.pstyle("".concat(e,"-padding")).pfValue,h=n.pstyle("".concat(e,"-opacity")).value,f=n.pstyle("".concat(e,"-color")).value,d=n.pstyle("".concat(e,"-shape")).value,p=n.pstyle("".concat(e,"-corner-radius")).value;if(h>0){if(i=i||n.position(),a==null||s==null){var m=n.padding();a=n.width()+2*m,s=n.height()+2*m}l.colorFillStyle(r,f[0],f[1],f[2],h),l.nodeShapes[d].draw(r,i.x,i.y,a+u*2,s+u*2,p),r.fill()}}}},"drawNodeOverlayUnderlay");ly.drawNodeOverlay=Ege("overlay");ly.drawNodeUnderlay=Ege("underlay");ly.hasPie=function(t){return t=t[0],t._private.hasPie};ly.drawPie=function(t,e,r,n){e=e[0],n=n||e.position();var i=e.cy().style(),a=e.pstyle("pie-size"),s=n.x,l=n.y,u=e.width(),h=e.height(),f=Math.min(u,h)/2,d=0,p=this.usePaths();p&&(s=0,l=0),a.units==="%"?f=f*a.pfValue:a.pfValue!==void 0&&(f=a.pfValue/2);for(var m=1;m<=i.pieBackgroundN;m++){var g=e.pstyle("pie-"+m+"-background-size").value,y=e.pstyle("pie-"+m+"-background-color").value,v=e.pstyle("pie-"+m+"-background-opacity").value*r,x=g/100;x+d>1&&(x=1-d);var b=1.5*Math.PI+2*Math.PI*d,w=2*Math.PI*x,C=b+w;g===0||d>=1||d+x>1||(t.beginPath(),t.moveTo(s,l),t.arc(s,l,f,b,C),t.closePath(),this.colorFillStyle(t,y[0],y[1],y[2],v),t.fill(),d+=x)}};ys={},dZe=100;ys.getPixelRatio=function(){var t=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var e=this.cy.window(),r=t.backingStorePixelRatio||t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return(e.devicePixelRatio||1)/r};ys.paintCache=function(t){for(var e=this.paintCaches=this.paintCaches||[],r=!0,n,i=0;i<e.length;i++)if(n=e[i],n.context===t){r=!1;break}return r&&(n={context:t},e.push(n)),n};ys.createGradientStyleFor=function(t,e,r,n,i){var a,s=this.usePaths(),l=r.pstyle(e+"-gradient-stop-colors").value,u=r.pstyle(e+"-gradient-stop-positions").pfValue;if(n==="radial-gradient")if(r.isEdge()){var h=r.sourceEndpoint(),f=r.targetEndpoint(),d=r.midpoint(),p=Gp(h,d),m=Gp(f,d);a=t.createRadialGradient(d.x,d.y,0,d.x,d.y,Math.max(p,m))}else{var g=s?{x:0,y:0}:r.position(),y=r.paddedWidth(),v=r.paddedHeight();a=t.createRadialGradient(g.x,g.y,0,g.x,g.y,Math.max(y,v))}else if(r.isEdge()){var x=r.sourceEndpoint(),b=r.targetEndpoint();a=t.createLinearGradient(x.x,x.y,b.x,b.y)}else{var w=s?{x:0,y:0}:r.position(),C=r.paddedWidth(),T=r.paddedHeight(),E=C/2,A=T/2,S=r.pstyle("background-gradient-direction").value;switch(S){case"to-bottom":a=t.createLinearGradient(w.x,w.y-A,w.x,w.y+A);break;case"to-top":a=t.createLinearGradient(w.x,w.y+A,w.x,w.y-A);break;case"to-left":a=t.createLinearGradient(w.x+E,w.y,w.x-E,w.y);break;case"to-right":a=t.createLinearGradient(w.x-E,w.y,w.x+E,w.y);break;case"to-bottom-right":case"to-right-bottom":a=t.createLinearGradient(w.x-E,w.y-A,w.x+E,w.y+A);break;case"to-top-right":case"to-right-top":a=t.createLinearGradient(w.x-E,w.y+A,w.x+E,w.y-A);break;case"to-bottom-left":case"to-left-bottom":a=t.createLinearGradient(w.x+E,w.y-A,w.x-E,w.y+A);break;case"to-top-left":case"to-left-top":a=t.createLinearGradient(w.x+E,w.y+A,w.x-E,w.y-A);break}}if(!a)return null;for(var _=u.length===l.length,I=l.length,D=0;D<I;D++)a.addColorStop(_?u[D]:D/(I-1),"rgba("+l[D][0]+","+l[D][1]+","+l[D][2]+","+i+")");return a};ys.gradientFillStyle=function(t,e,r,n){var i=this.createGradientStyleFor(t,"background",e,r,n);if(!i)return null;t.fillStyle=i};ys.colorFillStyle=function(t,e,r,n,i){t.fillStyle="rgba("+e+","+r+","+n+","+i+")"};ys.eleFillStyle=function(t,e,r){var n=e.pstyle("background-fill").value;if(n==="linear-gradient"||n==="radial-gradient")this.gradientFillStyle(t,e,n,r);else{var i=e.pstyle("background-color").value;this.colorFillStyle(t,i[0],i[1],i[2],r)}};ys.gradientStrokeStyle=function(t,e,r,n){var i=this.createGradientStyleFor(t,"line",e,r,n);if(!i)return null;t.strokeStyle=i};ys.colorStrokeStyle=function(t,e,r,n,i){t.strokeStyle="rgba("+e+","+r+","+n+","+i+")"};ys.eleStrokeStyle=function(t,e,r){var n=e.pstyle("line-fill").value;if(n==="linear-gradient"||n==="radial-gradient")this.gradientStrokeStyle(t,e,n,r);else{var i=e.pstyle("line-color").value;this.colorStrokeStyle(t,i[0],i[1],i[2],r)}};ys.matchCanvasSize=function(t){var e=this,r=e.data,n=e.findContainerClientCoords(),i=n[2],a=n[3],s=e.getPixelRatio(),l=e.motionBlurPxRatio;(t===e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_NODE]||t===e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_DRAG])&&(s=l);var u=i*s,h=a*s,f;if(!(u===e.canvasWidth&&h===e.canvasHeight)){e.fontCaches=null;var d=r.canvasContainer;d.style.width=i+"px",d.style.height=a+"px";for(var p=0;p<e.CANVAS_LAYERS;p++)f=r.canvases[p],f.width=u,f.height=h,f.style.width=i+"px",f.style.height=a+"px";for(var p=0;p<e.BUFFER_COUNT;p++)f=r.bufferCanvases[p],f.width=u,f.height=h,f.style.width=i+"px",f.style.height=a+"px";e.textureMult=1,s<=1&&(f=r.bufferCanvases[e.TEXTURE_BUFFER],e.textureMult=2,f.width=u*e.textureMult,f.height=h*e.textureMult),e.canvasWidth=u,e.canvasHeight=h,e.pixelRatio=s}};ys.renderTo=function(t,e,r,n){this.render({forcedContext:t,forcedZoom:e,forcedPan:r,drawAllLayers:!0,forcedPxRatio:n})};ys.clearCanvas=function(){var t=this,e=t.data;function r(n){n.clearRect(0,0,t.canvasWidth,t.canvasHeight)}o(r,"clear"),r(e.contexts[t.NODE]),r(e.contexts[t.DRAG])};ys.render=function(t){var e=this;t=t||dme();var r=e.cy,n=t.forcedContext,i=t.drawAllLayers,a=t.drawOnlyNodeLayer,s=t.forcedZoom,l=t.forcedPan,u=t.forcedPxRatio===void 0?this.getPixelRatio():t.forcedPxRatio,h=e.data,f=h.canvasNeedsRedraw,d=e.textureOnViewport&&!n&&(e.pinching||e.hoverData.dragging||e.swipePanning||e.data.wheelZooming),p=t.motionBlur!==void 0?t.motionBlur:e.motionBlur,m=e.motionBlurPxRatio,g=r.hasCompoundNodes(),y=e.hoverData.draggingEles,v=!!(e.hoverData.selecting||e.touchData.selecting);p=p&&!n&&e.motionBlurEnabled&&!v;var x=p;n||(e.prevPxRatio!==u&&(e.invalidateContainerClientCoordsCache(),e.matchCanvasSize(e.container),e.redrawHint("eles",!0),e.redrawHint("drag",!0)),e.prevPxRatio=u),!n&&e.motionBlurTimeout&&clearTimeout(e.motionBlurTimeout),p&&(e.mbFrames==null&&(e.mbFrames=0),e.mbFrames++,e.mbFrames<3&&(x=!1),e.mbFrames>e.minMbLowQualFrames&&(e.motionBlurPxRatio=e.mbPxRBlurry)),e.clearingMotionBlur&&(e.motionBlurPxRatio=1),e.textureDrawLastFrame&&!d&&(f[e.NODE]=!0,f[e.SELECT_BOX]=!0);var b=r.style(),w=r.zoom(),C=s!==void 0?s:w,T=r.pan(),E={x:T.x,y:T.y},A={zoom:w,pan:{x:T.x,y:T.y}},S=e.prevViewport,_=S===void 0||A.zoom!==S.zoom||A.pan.x!==S.pan.x||A.pan.y!==S.pan.y;!_&&!(y&&!g)&&(e.motionBlurPxRatio=1),l&&(E=l),C*=u,E.x*=u,E.y*=u;var I=e.getCachedZSortedEles();function D(K,X,te,J,se){var ue=K.globalCompositeOperation;K.globalCompositeOperation="destination-out",e.colorFillStyle(K,255,255,255,e.motionBlurTransparency),K.fillRect(X,te,J,se),K.globalCompositeOperation=ue}o(D,"mbclear");function k(K,X){var te,J,se,ue;!e.clearingMotionBlur&&(K===h.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]||K===h.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG])?(te={x:T.x*m,y:T.y*m},J=w*m,se=e.canvasWidth*m,ue=e.canvasHeight*m):(te=E,J=C,se=e.canvasWidth,ue=e.canvasHeight),K.setTransform(1,0,0,1,0,0),X==="motionBlur"?D(K,0,0,se,ue):!n&&(X===void 0||X)&&K.clearRect(0,0,se,ue),i||(K.translate(te.x,te.y),K.scale(J,J)),l&&K.translate(l.x,l.y),s&&K.scale(s,s)}if(o(k,"setContextTransform"),d||(e.textureDrawLastFrame=!1),d){if(e.textureDrawLastFrame=!0,!e.textureCache){e.textureCache={},e.textureCache.bb=r.mutableElements().boundingBox(),e.textureCache.texture=e.data.bufferCanvases[e.TEXTURE_BUFFER];var L=e.data.bufferContexts[e.TEXTURE_BUFFER];L.setTransform(1,0,0,1,0,0),L.clearRect(0,0,e.canvasWidth*e.textureMult,e.canvasHeight*e.textureMult),e.render({forcedContext:L,drawOnlyNodeLayer:!0,forcedPxRatio:u*e.textureMult});var A=e.textureCache.viewport={zoom:r.zoom(),pan:r.pan(),width:e.canvasWidth,height:e.canvasHeight};A.mpan={x:(0-A.pan.x)/A.zoom,y:(0-A.pan.y)/A.zoom}}f[e.DRAG]=!1,f[e.NODE]=!1;var R=h.contexts[e.NODE],O=e.textureCache.texture,A=e.textureCache.viewport;R.setTransform(1,0,0,1,0,0),p?D(R,0,0,A.width,A.height):R.clearRect(0,0,A.width,A.height);var M=b.core("outside-texture-bg-color").value,B=b.core("outside-texture-bg-opacity").value;e.colorFillStyle(R,M[0],M[1],M[2],B),R.fillRect(0,0,A.width,A.height);var w=r.zoom();k(R,!1),R.clearRect(A.mpan.x,A.mpan.y,A.width/A.zoom/u,A.height/A.zoom/u),R.drawImage(O,A.mpan.x,A.mpan.y,A.width/A.zoom/u,A.height/A.zoom/u)}else e.textureOnViewport&&!n&&(e.textureCache=null);var F=r.extent(),P=e.pinching||e.hoverData.dragging||e.swipePanning||e.data.wheelZooming||e.hoverData.draggingEles||e.cy.animated(),z=e.hideEdgesOnViewport&&P,$=[];if($[e.NODE]=!f[e.NODE]&&p&&!e.clearedForMotionBlur[e.NODE]||e.clearingMotionBlur,$[e.NODE]&&(e.clearedForMotionBlur[e.NODE]=!0),$[e.DRAG]=!f[e.DRAG]&&p&&!e.clearedForMotionBlur[e.DRAG]||e.clearingMotionBlur,$[e.DRAG]&&(e.clearedForMotionBlur[e.DRAG]=!0),f[e.NODE]||i||a||$[e.NODE]){var H=p&&!$[e.NODE]&&m!==1,R=n||(H?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]:h.contexts[e.NODE]),Q=p&&!H?"motionBlur":void 0;k(R,Q),z?e.drawCachedNodes(R,I.nondrag,u,F):e.drawLayeredElements(R,I.nondrag,u,F),e.debug&&e.drawDebugPoints(R,I.nondrag),!i&&!p&&(f[e.NODE]=!1)}if(!a&&(f[e.DRAG]||i||$[e.DRAG])){var H=p&&!$[e.DRAG]&&m!==1,R=n||(H?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG]:h.contexts[e.DRAG]);k(R,p&&!H?"motionBlur":void 0),z?e.drawCachedNodes(R,I.drag,u,F):e.drawCachedElements(R,I.drag,u,F),e.debug&&e.drawDebugPoints(R,I.drag),!i&&!p&&(f[e.DRAG]=!1)}if(this.drawSelectionRectangle(t,k),p&&m!==1){var j=h.contexts[e.NODE],ie=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_NODE],ne=h.contexts[e.DRAG],le=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_DRAG],he=o(function(X,te,J){X.setTransform(1,0,0,1,0,0),J||!x?X.clearRect(0,0,e.canvasWidth,e.canvasHeight):D(X,0,0,e.canvasWidth,e.canvasHeight);var se=m;X.drawImage(te,0,0,e.canvasWidth*se,e.canvasHeight*se,0,0,e.canvasWidth,e.canvasHeight)},"drawMotionBlur");(f[e.NODE]||$[e.NODE])&&(he(j,ie,$[e.NODE]),f[e.NODE]=!1),(f[e.DRAG]||$[e.DRAG])&&(he(ne,le,$[e.DRAG]),f[e.DRAG]=!1)}e.prevViewport=A,e.clearingMotionBlur&&(e.clearingMotionBlur=!1,e.motionBlurCleared=!0,e.motionBlur=!0),p&&(e.motionBlurTimeout=setTimeout(function(){e.motionBlurTimeout=null,e.clearedForMotionBlur[e.NODE]=!1,e.clearedForMotionBlur[e.DRAG]=!1,e.motionBlur=!1,e.clearingMotionBlur=!d,e.mbFrames=0,f[e.NODE]=!0,f[e.DRAG]=!0,e.redraw()},dZe)),n||r.emit("render")};ys.drawSelectionRectangle=function(t,e){var r=this,n=r.cy,i=r.data,a=n.style(),s=t.drawOnlyNodeLayer,l=t.drawAllLayers,u=i.canvasNeedsRedraw,h=t.forcedContext;if(r.showFps||!s&&u[r.SELECT_BOX]&&!l){var f=h||i.contexts[r.SELECT_BOX];if(e(f),r.selection[4]==1&&(r.hoverData.selecting||r.touchData.selecting)){var d=r.cy.zoom(),p=a.core("selection-box-border-width").value/d;f.lineWidth=p,f.fillStyle="rgba("+a.core("selection-box-color").value[0]+","+a.core("selection-box-color").value[1]+","+a.core("selection-box-color").value[2]+","+a.core("selection-box-opacity").value+")",f.fillRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]),p>0&&(f.strokeStyle="rgba("+a.core("selection-box-border-color").value[0]+","+a.core("selection-box-border-color").value[1]+","+a.core("selection-box-border-color").value[2]+","+a.core("selection-box-opacity").value+")",f.strokeRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]))}if(i.bgActivePosistion&&!r.hoverData.selecting){var d=r.cy.zoom(),m=i.bgActivePosistion;f.fillStyle="rgba("+a.core("active-bg-color").value[0]+","+a.core("active-bg-color").value[1]+","+a.core("active-bg-color").value[2]+","+a.core("active-bg-opacity").value+")",f.beginPath(),f.arc(m.x,m.y,a.core("active-bg-size").pfValue/d,0,2*Math.PI),f.fill()}var g=r.lastRedrawTime;if(r.showFps&&g){g=Math.round(g);var y=Math.round(1e3/g),v="1 frame = "+g+" ms = "+y+" fps";if(f.setTransform(1,0,0,1,0,0),f.fillStyle="rgba(255, 0, 0, 0.75)",f.strokeStyle="rgba(255, 0, 0, 0.75)",f.font="30px Arial",!Nb){var x=f.measureText(v);Nb=x.actualBoundingBoxAscent}f.fillText(v,0,Nb);var b=60;f.strokeRect(0,Nb+10,250,20),f.fillRect(0,Nb+10,250*Math.min(y/b,1),20)}l||(u[r.SELECT_BOX]=!1)}};o(z0e,"compileShader");o(pZe,"createProgram");o(mZe,"createTextureCanvas");o(wB,"getEffectivePanZoom");o(NP,"modelToRenderedPosition");o(oS,"toWebGLColor");o(lS,"indexToVec4");o(gZe,"vec4ToIndex");o(yZe,"createTexture");o(Sge,"getTypeInfo");o(Cge,"createTypedArray");o(vZe,"createTypedArrayView");o(xZe,"createBufferStaticDraw");o(po,"createBufferDynamicDraw");o(bZe,"createPickingFrameBuffer");G0e=typeof Float32Array<"u"?Float32Array:Array;Math.hypot||(Math.hypot=function(){for(var t=0,e=arguments.length;e--;)t+=arguments[e]*arguments[e];return Math.sqrt(t)});o(Gb,"create");o(Age,"identity");o(wZe,"multiply");o(DS,"translate");o(_ge,"rotate");o(TB,"scale");o(TZe,"projection");Vb={SCREEN:{name:"screen",screen:!0},PICKING:{name:"picking",picking:!0}},Mb=la({getKey:null,drawElement:null,getBoundingBox:null,getRotation:null,getRotationPoint:null,getRotationOffset:null,isVisible:null,getPadding:null}),kZe=function(){function t(e,r){Mf(this,t),this.debugID=Math.floor(Math.random()*1e4),this.r=e,this.atlasSize=r.webglTexSize,this.rows=r.webglTexRows,this.enableWrapping=r.enableWrapping,this.texHeight=Math.floor(this.atlasSize/this.rows),this.maxTexWidth=this.atlasSize,this.texture=null,this.canvas=null,this.needsBuffer=!0,this.freePointer={x:0,row:0},this.keyToLocation=new Map,this.canvas=r.createTextureCanvas(e,this.atlasSize,this.atlasSize),this.scratch=r.createTextureCanvas(e,this.atlasSize,this.texHeight,"scratch")}return o(t,"Atlas"),If(t,[{key:"getKeys",value:o(function(){return new Set(this.keyToLocation.keys())},"getKeys")},{key:"getScale",value:o(function(r){var n=r.w,i=r.h,a=this.texHeight,s=this.maxTexWidth,l=a/i,u=n*l,h=i*l;return u>s&&(l=s/n,u=n*l,h=i*l),{scale:l,texW:u,texH:h}},"getScale")},{key:"draw",value:o(function(r,n,i){var a=this,s=this.atlasSize,l=this.rows,u=this.texHeight,h=this.getScale(n),f=h.scale,d=h.texW,p=h.texH,m=[null,null],g=o(function(w,C){if(i&&C){var T=C.context,E=w.x,A=w.row,S=E,_=u*A;T.save(),T.translate(S,_),T.scale(f,f),i(T,n),T.restore()}},"drawAt"),y=o(function(){g(a.freePointer,a.canvas),m[0]={x:a.freePointer.x,y:a.freePointer.row*u,w:d,h:p},m[1]={x:a.freePointer.x+d,y:a.freePointer.row*u,w:0,h:p},a.freePointer.x+=d,a.freePointer.x==s&&(a.freePointer.x=0,a.freePointer.row++)},"drawNormal"),v=o(function(){var w=a.scratch,C=a.canvas;w.clear(),g({x:0,row:0},w);var T=s-a.freePointer.x,E=d-T,A=u;{var S=a.freePointer.x,_=a.freePointer.row*u,I=T;C.context.drawImage(w,0,0,I,A,S,_,I,A),m[0]={x:S,y:_,w:I,h:p}}{var D=T,k=(a.freePointer.row+1)*u,L=E;C&&C.context.drawImage(w,D,0,L,A,0,k,L,A),m[1]={x:0,y:k,w:L,h:p}}a.freePointer.x=E,a.freePointer.row++},"drawWrapped"),x=o(function(){a.freePointer.x=0,a.freePointer.row++},"moveToStartOfNextRow");if(this.freePointer.x+d<=s)y();else{if(this.freePointer.row>=l-1)return!1;this.freePointer.x===s?(x(),y()):this.enableWrapping?v():(x(),y())}return this.keyToLocation.set(r,m),this.needsBuffer=!0,m},"draw")},{key:"getOffsets",value:o(function(r){return this.keyToLocation.get(r)},"getOffsets")},{key:"isEmpty",value:o(function(){return this.freePointer.x===0&&this.freePointer.row===0},"isEmpty")},{key:"canFit",value:o(function(r){var n=this.atlasSize,i=this.rows,a=this.getScale(r),s=a.texW;return this.freePointer.x+s>n?this.freePointer.row<i-1:!0},"canFit")},{key:"bufferIfNeeded",value:o(function(r){this.texture||(this.texture=yZe(r,this.debugID)),this.needsBuffer&&(this.texture.buffer(this.canvas),this.needsBuffer=!1)},"bufferIfNeeded")},{key:"dispose",value:o(function(){this.texture&&(this.texture.deleteTexture(),this.texture=null,this.needsBuffer=!0)},"dispose")}]),t}(),EZe=function(){function t(e,r){Mf(this,t),this.r=e,this.opts=r,this.keyToIds=new Map,this.idToKey=new Map,this.atlases=[],this.styleKeyToAtlas=new Map,this.styleKeyNeedsRedraw=new Set,this.forceGC=!1}return o(t,"AtlasCollection"),If(t,[{key:"getKeys",value:o(function(){return new Set(this.styleKeyToAtlas.keys())},"getKeys")},{key:"getIdsFor",value:o(function(r){var n=this.keyToIds.get(r);return n||(n=new Set,this.keyToIds.set(r,n)),n},"getIdsFor")},{key:"_createAtlas",value:o(function(){var r=this.r,n=this.opts;return new kZe(r,n)},"_createAtlas")},{key:"_getScratchCanvas",value:o(function(){if(!this.scratch){var r=this.r,n=this.opts,i=n.webglTexSize,a=Math.floor(i/n.webglTexRows);this.scratch=n.createTextureCanvas(r,i,a,"scratch")}return this.scratch},"_getScratchCanvas")},{key:"draw",value:o(function(r,n,i,a){if(this.styleKeyNeedsRedraw.has(n)){this.styleKeyNeedsRedraw.delete(n),this.deleteKey(r,n);var s=this.styleKeyToAtlas.get(n);s&&(s.forceGC=!0),this.styleKeyToAtlas.delete(n)}var l=this.styleKeyToAtlas.get(n);return l||(l=this.atlases[this.atlases.length-1],(!l||!l.canFit(i))&&(l=this._createAtlas(),this.atlases.push(l)),l.draw(n,i,a),this.styleKeyToAtlas.set(n,l),this.getIdsFor(n).add(r),this.idToKey.set(r,n)),l},"draw")},{key:"getAtlas",value:o(function(r){return this.styleKeyToAtlas.get(r)},"getAtlas")},{key:"hasAtlas",value:o(function(r){return this.styleKeyToAtlas.has(r)},"hasAtlas")},{key:"deleteKey",value:o(function(r,n){this.idToKey.delete(r),this.getIdsFor(n).delete(r)},"deleteKey")},{key:"checkKeyIsInvalid",value:o(function(r,n){if(!this.idToKey.has(r))return!1;var i=this.idToKey.get(r);return i!=n?(this.deleteKey(r,i),!0):!1},"checkKeyIsInvalid")},{key:"_getKeysToCollect",value:o(function(){var r=new Set,n=mo(this.styleKeyToAtlas.keys()),i;try{for(n.s();!(i=n.n()).done;){var a=i.value;this.getIdsFor(a).size==0&&r.add(a)}}catch(s){n.e(s)}finally{n.f()}return r},"_getKeysToCollect")},{key:"gc",value:o(function(){var r=this,n=this.atlases.some(function(p){return p.forceGC}),i=this._getKeysToCollect();if(i.size===0&&!n){console.log("nothing to garbage collect");return}var a=[],s=new Map,l=null,u=mo(this.atlases),h;try{var f=o(function(){var m=h.value,g=m.getKeys(),y=SZe(i,g);if(y.size===0&&!m.forceGC)return a.push(m),g.forEach(function(A){return s.set(A,m)}),"continue";l||(l=r._createAtlas(),a.push(l));var v=mo(g),x;try{for(v.s();!(x=v.n()).done;){var b=x.value;if(!y.has(b)){var w=m.getOffsets(b),C=_i(w,2),T=C[0],E=C[1];l.canFit({w:T.w+E.w,h:T.h})||(l=r._createAtlas(),a.push(l)),r._copyTextureToNewAtlas(b,m,l),s.set(b,l)}}}catch(A){v.e(A)}finally{v.f()}},"_loop");for(u.s();!(h=u.n()).done;)var d=f()}catch(p){u.e(p)}finally{u.f()}this.atlases=a,this.styleKeyToAtlas=s},"gc")},{key:"_copyTextureToNewAtlas",value:o(function(r,n,i){var a=n.getOffsets(r),s=_i(a,2),l=s[0],u=s[1];if(u.w===0)i.draw(r,l,function(p){p.drawImage(n.canvas,l.x,l.y,l.w,l.h,0,0,l.w,l.h)});else{var h=this._getScratchCanvas();h.clear(),h.context.drawImage(n.canvas,l.x,l.y,l.w,l.h,0,0,l.w,l.h),h.context.drawImage(n.canvas,u.x,u.y,u.w,u.h,l.w,0,u.w,u.h);var f=l.w+u.w,d=l.h;i.draw(r,{w:f,h:d},function(p){p.drawImage(h,0,0,f,d,0,0,f,d)})}},"_copyTextureToNewAtlas")},{key:"getCounts",value:o(function(){return{keyCount:this.styleKeyToAtlas.size,atlasCount:new Set(this.styleKeyToAtlas.values()).size}},"getCounts")}]),t}();o(SZe,"intersection");CZe=function(){function t(e,r){Mf(this,t),this.r=e;var n=r;this.globalOptions=n,this.maxAtlases=n.webglTexPerBatch,this.atlasSize=n.webglTexSize,this.renderTypes=new Map,this.maxAtlasesPerBatch=r.webglTexPerBatch,this.batchAtlases=[],this._cacheScratchCanvas(n)}return o(t,"AtlasManager"),If(t,[{key:"_cacheScratchCanvas",value:o(function(r){var n=-1,i=-1,a=null,s=r.createTextureCanvas;r.createTextureCanvas=function(l,u,h,f){return f?((!a||u!=n||h!=i)&&(n=u,i=h,a=s(l,u,h)),a):s(l,u,h)}},"_cacheScratchCanvas")},{key:"addRenderType",value:o(function(r,n){var i=new EZe(this.r,this.globalOptions),a=n;this.renderTypes.set(r,rr({type:r,atlasCollection:i},a))},"addRenderType")},{key:"getRenderTypes",value:o(function(){return j0e(this.renderTypes.values())},"getRenderTypes")},{key:"getRenderTypeOpts",value:o(function(r){return this.renderTypes.get(r)},"getRenderTypeOpts")},{key:"invalidate",value:o(function(r){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=n.forceRedraw,a=i===void 0?!1:i,s=n.filterEle,l=s===void 0?function(){return!0}:s,u=n.filterType,h=u===void 0?function(){return!0}:u,f=!1,d=mo(r),p;try{for(d.s();!(p=d.n()).done;){var m=p.value;if(l(m)){var g=m.id(),y=mo(this.getRenderTypes()),v;try{for(y.s();!(v=y.n()).done;){var x=v.value;if(h(x.type)){var b=x.getKey(m);a?(x.atlasCollection.deleteKey(g,b),x.atlasCollection.styleKeyNeedsRedraw.add(b),f=!0):f|=x.atlasCollection.checkKeyIsInvalid(g,b)}}}catch(w){y.e(w)}finally{y.f()}}}}catch(w){d.e(w)}finally{d.f()}return f},"invalidate")},{key:"gc",value:o(function(){var r=mo(this.getRenderTypes()),n;try{for(r.s();!(n=r.n()).done;){var i=n.value;i.atlasCollection.gc()}}catch(a){r.e(a)}finally{r.f()}},"gc")},{key:"isRenderable",value:o(function(r,n){var i=this.getRenderTypeOpts(n);return i&&i.isVisible(r)},"isRenderable")},{key:"startBatch",value:o(function(){this.batchAtlases=[]},"startBatch")},{key:"getAtlasCount",value:o(function(){return this.batchAtlases.length},"getAtlasCount")},{key:"getAtlases",value:o(function(){return this.batchAtlases},"getAtlases")},{key:"getOrCreateAtlas",value:o(function(r,n,i){var a=this.renderTypes.get(i),s=a.getKey(r),l=r.id();return a.atlasCollection.draw(l,s,n,function(u){a.drawElement(u,r,n,!0,!0)})},"getOrCreateAtlas")},{key:"getAtlasIndexForBatch",value:o(function(r){var n=this.batchAtlases.indexOf(r);if(n<0){if(this.batchAtlases.length===this.maxAtlasesPerBatch)return;this.batchAtlases.push(r),n=this.batchAtlases.length-1}return n},"getAtlasIndexForBatch")},{key:"getIndexArray",value:o(function(){return Array.from({length:this.maxAtlases},function(r,n){return n})},"getIndexArray")},{key:"getAtlasInfo",value:o(function(r,n){var i=this.renderTypes.get(n),a=i.getBoundingBox(r),s=this.getOrCreateAtlas(r,a,n),l=this.getAtlasIndexForBatch(s);if(l!==void 0){var u=i.getKey(r),h=s.getOffsets(u),f=_i(h,2),d=f[0],p=f[1];return{atlasID:l,tex:d,tex1:d,tex2:p,bb:a,type:n,styleKey:u}}},"getAtlasInfo")},{key:"canAddToCurrentBatch",value:o(function(r,n){if(this.batchAtlases.length===this.maxAtlasesPerBatch){var i=this.renderTypes.get(n),a=i.getKey(r),s=i.atlasCollection.getAtlas(a);return s&&this.batchAtlases.includes(s)}return!0},"canAddToCurrentBatch")},{key:"setTransformMatrix",value:o(function(r,n,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,s=n.bb,l=n.type,u=n.tex1,h=n.tex2,f=this.getRenderTypeOpts(l),d=f.getPadding?f.getPadding(i):0,p=u.w/(u.w+h.w);a||(p=1-p);var m=this.getAdjustedBB(s,d,a,p),g,y;Age(r);var v=f.getRotation?f.getRotation(i):0;if(v!==0){var x=f.getRotationPoint(i),b=x.x,w=x.y;DS(r,r,[b,w]),_ge(r,r,v);var C=f.getRotationOffset(i);g=C.x+m.xOffset,y=C.y}else g=m.x1,y=m.y1;DS(r,r,[g,y]),TB(r,r,[m.w,m.h])},"setTransformMatrix")},{key:"getTransformMatrix",value:o(function(r,n){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,a=Gb();return this.setTransformMatrix(a,r,n,i),a},"getTransformMatrix")},{key:"getAdjustedBB",value:o(function(r,n,i,a){var s=r.x1,l=r.y1,u=r.w,h=r.h;n&&(s-=n,l-=n,u+=2*n,h+=2*n);var f=0,d=u*a;return i&&a<1?u=d:!i&&a<1&&(f=u-d,s+=f,u=d),{x1:s,y1:l,w:u,h,xOffset:f}},"getAdjustedBB")},{key:"getDebugInfo",value:o(function(){var r=[],n=mo(this.renderTypes),i;try{for(n.s();!(i=n.n()).done;){var a=_i(i.value,2),s=a[0],l=a[1],u=l.atlasCollection.getCounts(),h=u.keyCount,f=u.atlasCount;r.push({type:s,keyCount:h,atlasCount:f})}}catch(d){n.e(d)}finally{n.f()}return r},"getDebugInfo")}]),t}(),MP=0,V0e=1,U0e=2,IP=3,AZe=function(){function t(e,r,n){Mf(this,t),this.r=e,this.gl=r,this.maxInstances=n.webglBatchSize,this.maxAtlases=n.webglTexPerBatch,this.atlasSize=n.webglTexSize,this.bgColor=n.bgColor,n.enableWrapping=!0,n.createTextureCanvas=mZe,this.atlasManager=new CZe(e,n),this.program=this.createShaderProgram(Vb.SCREEN),this.pickingProgram=this.createShaderProgram(Vb.PICKING),this.vao=this.createVAO(),this.debugInfo=[]}return o(t,"ElementDrawingWebGL"),If(t,[{key:"addTextureRenderType",value:o(function(r,n){this.atlasManager.addRenderType(r,n)},"addTextureRenderType")},{key:"invalidate",value:o(function(r){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=n.type,a=this.atlasManager;return i?a.invalidate(r,{filterType:o(function(l){return l===i},"filterType"),forceRedraw:!0}):a.invalidate(r)},"invalidate")},{key:"gc",value:o(function(){this.atlasManager.gc()},"gc")},{key:"createShaderProgram",value:o(function(r){var n=this.gl,i=`#version 300 es
1955 + precision highp float;
1956 +
1957 + uniform mat3 uPanZoomMatrix;
1958 + uniform int uAtlasSize;
1959 +
1960 + // instanced
1961 + in vec2 aPosition;
1962 +
1963 + // what are we rendering?
1964 + in int aVertType;
1965 +
1966 + // for picking
1967 + in vec4 aIndex;
1968 +
1969 + // For textures
1970 + in int aAtlasId; // which shader unit/atlas to use
1971 + in vec4 aTex1; // x/y/w/h of texture in atlas
1972 + in vec4 aTex2;
1973 +
1974 + // for any transforms that are needed
1975 + in vec4 aScaleRotate1; // vectors use fewer attributes than matrices
1976 + in vec2 aTranslate1;
1977 + in vec4 aScaleRotate2;
1978 + in vec2 aTranslate2;
1979 +
1980 + // for edges
1981 + in vec4 aPointAPointB;
1982 + in vec4 aPointCPointD;
1983 + in float aLineWidth;
1984 + in vec4 aEdgeColor;
1985 +
1986 + out vec2 vTexCoord;
1987 + out vec4 vEdgeColor;
1988 + flat out int vAtlasId;
1989 + flat out vec4 vIndex;
1990 + flat out int vVertType;
1991 +
1992 + void main(void) {
1993 + int vid = gl_VertexID;
1994 + vec2 position = aPosition;
1995 +
1996 + if(aVertType == `.concat(MP,`) {
1997 + float texX;
1998 + float texY;
1999 + float texW;
2000 + float texH;
2001 + mat3 texMatrix;
2002 +
2003 + int vid = gl_VertexID;
2004 + if(vid <= 5) {
2005 + texX = aTex1.x;
2006 + texY = aTex1.y;
2007 + texW = aTex1.z;
2008 + texH = aTex1.w;
2009 + texMatrix = mat3(
2010 + vec3(aScaleRotate1.xy, 0.0),
2011 + vec3(aScaleRotate2.zw, 0.0),
2012 + vec3(aTranslate1, 1.0)
2013 + );
2014 + } else {
2015 + texX = aTex2.x;
2016 + texY = aTex2.y;
2017 + texW = aTex2.z;
2018 + texH = aTex2.w;
2019 + texMatrix = mat3(
2020 + vec3(aScaleRotate2.xy, 0.0),
2021 + vec3(aScaleRotate2.zw, 0.0),
2022 + vec3(aTranslate2, 1.0)
2023 + );
2024 + }
2025 +
2026 + if(vid == 1 || vid == 2 || vid == 4 || vid == 7 || vid == 8 || vid == 10) {
2027 + texX += texW;
2028 + }
2029 + if(vid == 2 || vid == 4 || vid == 5 || vid == 8 || vid == 10 || vid == 11) {
2030 + texY += texH;
2031 + }
2032 +
2033 + float d = float(uAtlasSize);
2034 + vTexCoord = vec2(texX / d, texY / d); // tex coords must be between 0 and 1
2035 +
2036 + gl_Position = vec4(uPanZoomMatrix * texMatrix * vec3(position, 1.0), 1.0);
2037 + }
2038 + else if(aVertType == `).concat(V0e,` && vid < 6) {
2039 + vec2 source = aPointAPointB.xy;
2040 + vec2 target = aPointAPointB.zw;
2041 +
2042 + // adjust the geometry so that the line is centered on the edge
2043 + position.y = position.y - 0.5;
2044 +
2045 + vec2 xBasis = target - source;
2046 + vec2 yBasis = normalize(vec2(-xBasis.y, xBasis.x));
2047 + vec2 point = source + xBasis * position.x + yBasis * aLineWidth * position.y;
2048 +
2049 + gl_Position = vec4(uPanZoomMatrix * vec3(point, 1.0), 1.0);
2050 + vEdgeColor = aEdgeColor;
2051 + }
2052 + else if(aVertType == `).concat(U0e,` && vid < 6) {
2053 + vec2 pointA = aPointAPointB.xy;
2054 + vec2 pointB = aPointAPointB.zw;
2055 + vec2 pointC = aPointCPointD.xy;
2056 + vec2 pointD = aPointCPointD.zw;
2057 +
2058 + // adjust the geometry so that the line is centered on the edge
2059 + position.y = position.y - 0.5;
2060 +
2061 + vec2 p0 = pointA;
2062 + vec2 p1 = pointB;
2063 + vec2 p2 = pointC;
2064 + vec2 pos = position;
2065 + if(position.x == 1.0) {
2066 + p0 = pointD;
2067 + p1 = pointC;
2068 + p2 = pointB;
2069 + pos = vec2(0.0, -position.y);
2070 + }
2071 +
2072 + vec2 p01 = p1 - p0;
2073 + vec2 p12 = p2 - p1;
2074 + vec2 p21 = p1 - p2;
2075 +
2076 + // Find the normal vector.
2077 + vec2 tangent = normalize(normalize(p12) + normalize(p01));
2078 + vec2 normal = vec2(-tangent.y, tangent.x);
2079 +
2080 + // Find the vector perpendicular to p0 -> p1.
2081 + vec2 p01Norm = normalize(vec2(-p01.y, p01.x));
2082 +
2083 + // Determine the bend direction.
2084 + float sigma = sign(dot(p01 + p21, normal));
2085 + float width = aLineWidth;
2086 +
2087 + if(sign(pos.y) == -sigma) {
2088 + // This is an intersecting vertex. Adjust the position so that there's no overlap.
2089 + vec2 point = 0.5 * width * normal * -sigma / dot(normal, p01Norm);
2090 + gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0);
2091 + } else {
2092 + // This is a non-intersecting vertex. Treat it like a mitre join.
2093 + vec2 point = 0.5 * width * normal * sigma * dot(normal, p01Norm);
2094 + gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0);
2095 + }
2096 +
2097 + vEdgeColor = aEdgeColor;
2098 + }
2099 + else if(aVertType == `).concat(IP,` && vid < 3) {
2100 + // massage the first triangle into an edge arrow
2101 + if(vid == 0)
2102 + position = vec2(-0.15, -0.3);
2103 + if(vid == 1)
2104 + position = vec2( 0.0, 0.0);
2105 + if(vid == 2)
2106 + position = vec2( 0.15, -0.3);
2107 +
2108 + mat3 transform = mat3(
2109 + vec3(aScaleRotate1.xy, 0.0),
2110 + vec3(aScaleRotate1.zw, 0.0),
2111 + vec3(aTranslate1, 1.0)
2112 + );
2113 + gl_Position = vec4(uPanZoomMatrix * transform * vec3(position, 1.0), 1.0);
2114 + vEdgeColor = aEdgeColor;
2115 + } else {
2116 + gl_Position = vec4(2.0, 0.0, 0.0, 1.0); // discard vertex by putting it outside webgl clip space
2117 + }
2118 +
2119 + vAtlasId = aAtlasId;
2120 + vIndex = aIndex;
2121 + vVertType = aVertType;
2122 + }
2123 + `),a=this.atlasManager.getIndexArray(),s=`#version 300 es
2124 + precision highp float;
2125 +
2126 + // define texture unit for each node in the batch
2127 + `.concat(a.map(function(h){return"uniform sampler2D uTexture".concat(h,";")}).join(`
2128 + `),`
2129 +
2130 + uniform vec4 uBGColor;
2131 +
2132 + in vec2 vTexCoord;
2133 + in vec4 vEdgeColor;
2134 + flat in int vAtlasId;
2135 + flat in vec4 vIndex;
2136 + flat in int vVertType;
2137 +
2138 + out vec4 outColor;
2139 +
2140 + void main(void) {
2141 + if(vVertType == `).concat(MP,`) {
2142 + `).concat(a.map(function(h){return"if(vAtlasId == ".concat(h,") outColor = texture(uTexture").concat(h,", vTexCoord);")}).join(`
2143 + else `),`
2144 + } else if(vVertType == `).concat(IP,`) {
2145 + // blend arrow color with background (using premultiplied alpha)
2146 + outColor.rgb = vEdgeColor.rgb + (uBGColor.rgb * (1.0 - vEdgeColor.a));
2147 + outColor.a = 1.0; // make opaque, masks out line under arrow
2148 + } else {
2149 + outColor = vEdgeColor;
2150 + }
2151 +
2152 + `).concat(r.picking?`if(outColor.a == 0.0) discard;
2153 + else outColor = vIndex;`:"",`
2154 + }
2155 + `),l=pZe(n,i,s);l.aPosition=n.getAttribLocation(l,"aPosition"),l.aIndex=n.getAttribLocation(l,"aIndex"),l.aVertType=n.getAttribLocation(l,"aVertType"),l.aAtlasId=n.getAttribLocation(l,"aAtlasId"),l.aTex1=n.getAttribLocation(l,"aTex1"),l.aTex2=n.getAttribLocation(l,"aTex2"),l.aScaleRotate1=n.getAttribLocation(l,"aScaleRotate1"),l.aTranslate1=n.getAttribLocation(l,"aTranslate1"),l.aScaleRotate2=n.getAttribLocation(l,"aScaleRotate2"),l.aTranslate2=n.getAttribLocation(l,"aTranslate2"),l.aPointAPointB=n.getAttribLocation(l,"aPointAPointB"),l.aPointCPointD=n.getAttribLocation(l,"aPointCPointD"),l.aLineWidth=n.getAttribLocation(l,"aLineWidth"),l.aEdgeColor=n.getAttribLocation(l,"aEdgeColor"),l.uPanZoomMatrix=n.getUniformLocation(l,"uPanZoomMatrix"),l.uAtlasSize=n.getUniformLocation(l,"uAtlasSize"),l.uBGColor=n.getUniformLocation(l,"uBGColor"),l.uTextures=[];for(var u=0;u<this.atlasManager.maxAtlases;u++)l.uTextures.push(n.getUniformLocation(l,"uTexture".concat(u)));return l},"createShaderProgram")},{key:"createVAO",value:o(function(){var r=[0,0,1,0,1,1,0,0,1,1,0,1],n=[].concat(r,r);this.vertexCount=n.length/2;var i=this.maxInstances,a=this.gl,s=this.program,l=a.createVertexArray();return a.bindVertexArray(l),xZe(a,"vec2",s.aPosition,n),this.indexBuffer=po(a,i,"vec4",s.aIndex),this.vertTypeBuffer=po(a,i,"int",s.aVertType),this.atlasIdBuffer=po(a,i,"int",s.aAtlasId),this.tex1Buffer=po(a,i,"vec4",s.aTex1),this.tex2Buffer=po(a,i,"vec4",s.aTex2),this.scaleRotate1Buffer=po(a,i,"vec4",s.aScaleRotate1),this.translate1Buffer=po(a,i,"vec2",s.aTranslate1),this.scaleRotate2Buffer=po(a,i,"vec4",s.aScaleRotate2),this.translate2Buffer=po(a,i,"vec2",s.aTranslate2),this.pointAPointBBuffer=po(a,i,"vec4",s.aPointAPointB),this.pointCPointDBuffer=po(a,i,"vec4",s.aPointCPointD),this.lineWidthBuffer=po(a,i,"float",s.aLineWidth),this.edgeColorBuffer=po(a,i,"vec4",s.aEdgeColor),a.bindVertexArray(null),l},"createVAO")},{key:"buffers",get:o(function(){var r=this;return this._buffers||(this._buffers=Object.keys(this).filter(function(n){return n.endsWith("Buffer")}).map(function(n){return r[n]})),this._buffers},"get")},{key:"startFrame",value:o(function(r,n){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Vb.SCREEN;this.panZoomMatrix=r,this.debugInfo=n,this.renderTarget=i,this.startBatch()},"startFrame")},{key:"startBatch",value:o(function(){this.instanceCount=0,this.atlasManager.startBatch()},"startBatch")},{key:"endFrame",value:o(function(){this.endBatch()},"endFrame")},{key:"getTempMatrix",value:o(function(){return this.tempMatrix=this.tempMatrix||Gb()},"getTempMatrix")},{key:"drawTexture",value:o(function(r,n,i){var a=this.atlasManager;if(a.isRenderable(r,i)){a.canAddToCurrentBatch(r,i)||this.endBatch();var s=this.instanceCount;this.vertTypeBuffer.getView(s)[0]=MP;var l=this.indexBuffer.getView(s);lS(n,l);var u=a.getAtlasInfo(r,i,u),h=u.atlasID,f=u.tex1,d=u.tex2,p=this.atlasIdBuffer.getView(s);p[0]=h;var m=this.tex1Buffer.getView(s);m[0]=f.x,m[1]=f.y,m[2]=f.w,m[3]=f.h;var g=this.tex2Buffer.getView(s);g[0]=d.x,g[1]=d.y,g[2]=d.w,g[3]=d.h;for(var y=this.getTempMatrix(),v=0,x=[1,2];v<x.length;v++){var b=x[v];a.setTransformMatrix(y,u,r,b===1);var w=this["scaleRotate".concat(b,"Buffer")].getView(s);w[0]=y[0],w[1]=y[1],w[2]=y[3],w[3]=y[4];var C=this["translate".concat(b,"Buffer")].getView(s);C[0]=y[6],C[1]=y[7]}this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}},"drawTexture")},{key:"drawEdgeArrow",value:o(function(r,n,i){var a=r._private.rscratch,s,l,u;if(i==="source"?(s=a.arrowStartX,l=a.arrowStartY,u=a.srcArrowAngle):(s=a.arrowEndX,l=a.arrowEndY,u=a.tgtArrowAngle),!(isNaN(s)||s==null||isNaN(l)||l==null||isNaN(u)||u==null)){var h=r.pstyle(i+"-arrow-shape").value;if(h!=="none"){var f=r.pstyle(i+"-arrow-color").value,d=r.pstyle("opacity").value,p=r.pstyle("line-opacity").value,m=d*p,g=r.pstyle("width").pfValue,y=r.pstyle("arrow-scale").value,v=this.r.getArrowWidth(g,y),x=this.getTempMatrix();Age(x),DS(x,x,[s,l]),TB(x,x,[v,v]),_ge(x,x,u);var b=this.instanceCount;this.vertTypeBuffer.getView(b)[0]=IP;var w=this.indexBuffer.getView(b);lS(n,w);var C=this.edgeColorBuffer.getView(b);oS(f,m,C);var T=this.scaleRotate1Buffer.getView(b);T[0]=x[0],T[1]=x[1],T[2]=x[3],T[3]=x[4];var E=this.translate1Buffer.getView(b);E[0]=x[6],E[1]=x[7],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}},"drawEdgeArrow")},{key:"drawEdgeLine",value:o(function(r,n){var i=r.pstyle("opacity").value,a=r.pstyle("line-opacity").value,s=r.pstyle("width").pfValue,l=r.pstyle("line-color").value,u=i*a,h=this.getEdgePoints(r);if(h.length/2+this.instanceCount>this.maxInstances&&this.endBatch(),h.length==4){var f=this.instanceCount;this.vertTypeBuffer.getView(f)[0]=V0e;var d=this.indexBuffer.getView(f);lS(n,d);var p=this.edgeColorBuffer.getView(f);oS(l,u,p);var m=this.lineWidthBuffer.getView(f);m[0]=s;var g=this.pointAPointBBuffer.getView(f);g[0]=h[0],g[1]=h[1],g[2]=h[2],g[3]=h[3],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}else for(var y=0;y<h.length-2;y+=2){var v=this.instanceCount;this.vertTypeBuffer.getView(v)[0]=U0e;var x=this.indexBuffer.getView(v);lS(n,x);var b=this.edgeColorBuffer.getView(v);oS(l,u,b);var w=this.lineWidthBuffer.getView(v);w[0]=s;var C=h[y-2],T=h[y-1],E=h[y],A=h[y+1],S=h[y+2],_=h[y+3],I=h[y+4],D=h[y+5];y==0&&(C=2*E-S+.001,T=2*A-_+.001),y==h.length-4&&(I=2*S-E+.001,D=2*_-A+.001);var k=this.pointAPointBBuffer.getView(v);k[0]=C,k[1]=T,k[2]=E,k[3]=A;var L=this.pointCPointDBuffer.getView(v);L[0]=S,L[1]=_,L[2]=I,L[3]=D,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}},"drawEdgeLine")},{key:"getEdgePoints",value:o(function(r){var n=r._private.rscratch,i=n.allpts;if(i.length==4)return i;var a=this.getNumSegments(r);return this.getCurveSegmentPoints(i,a)},"getEdgePoints")},{key:"getNumSegments",value:o(function(r){var n=15;return Math.min(Math.max(n,5),this.maxInstances)},"getNumSegments")},{key:"getCurveSegmentPoints",value:o(function(r,n){if(r.length==4)return r;for(var i=Array((n+1)*2),a=0;a<=n;a++)if(a==0)i[0]=r[0],i[1]=r[1];else if(a==n)i[a*2]=r[r.length-2],i[a*2+1]=r[r.length-1];else{var s=a/n;this.setCurvePoint(r,s,i,a*2)}return i},"getCurveSegmentPoints")},{key:"setCurvePoint",value:o(function(r,n,i,a){if(r.length<=2)i[a]=r[0],i[a+1]=r[1];else{for(var s=Array(r.length-2),l=0;l<s.length;l+=2){var u=(1-n)*r[l]+n*r[l+2],h=(1-n)*r[l+1]+n*r[l+3];s[l]=u,s[l+1]=h}return this.setCurvePoint(s,n,i,a)}},"setCurvePoint")},{key:"endBatch",value:o(function(){var r=this.gl,n=this.vao,i=this.vertexCount,a=this.instanceCount;if(a!==0){var s=this.renderTarget.picking?this.pickingProgram:this.program;r.useProgram(s),r.bindVertexArray(n);var l=mo(this.buffers),u;try{for(l.s();!(u=l.n()).done;){var h=u.value;h.bufferSubData(a)}}catch(g){l.e(g)}finally{l.f()}for(var f=this.atlasManager.getAtlases(),d=0;d<f.length;d++)f[d].bufferIfNeeded(r);for(var p=0;p<f.length;p++)r.activeTexture(r.TEXTURE0+p),r.bindTexture(r.TEXTURE_2D,f[p].texture),r.uniform1i(s.uTextures[p],p);r.uniformMatrix3fv(s.uPanZoomMatrix,!1,this.panZoomMatrix),r.uniform1i(s.uAtlasSize,this.atlasManager.atlasSize);var m=oS(this.bgColor,1);r.uniform4fv(s.uBGColor,m),r.drawArraysInstanced(r.TRIANGLES,0,i,a),r.bindVertexArray(null),r.bindTexture(r.TEXTURE_2D,null),this.debugInfo&&this.debugInfo.push({count:a,atlasCount:f.length}),this.startBatch()}},"endBatch")},{key:"getDebugInfo",value:o(function(){return this.debugInfo},"getDebugInfo")},{key:"getAtlasDebugInfo",value:o(function(){return this.atlasManager.getDebugInfo()},"getAtlasDebugInfo")}]),t}();o(H0e,"fillStyle");_Ze=function(){function t(e){Mf(this,t),this.r=e}return o(t,"OverlayUnderlayRenderer"),If(t,[{key:"getStyleKey",value:o(function(r,n){var i=this.getStyle(r,n),a=i.shape,s=i.opacity,l=i.color;if(!a)return null;var u=n.width(),h=n.height(),f=H0e(l,s);return _f("".concat(a,"-").concat(u,"-").concat(h,"-").concat(f))},"getStyleKey")},{key:"isVisible",value:o(function(r,n){var i=n.pstyle("".concat(r,"-opacity")).value;return i>0},"isVisible")},{key:"getStyle",value:o(function(r,n){var i=n.pstyle("".concat(r,"-opacity")).value,a=n.pstyle("".concat(r,"-color")).value,s=n.pstyle("".concat(r,"-shape")).value;return{opacity:i,color:a,shape:s}},"getStyle")},{key:"getPadding",value:o(function(r,n){return n.pstyle("".concat(r,"-padding")).pfValue},"getPadding")},{key:"draw",value:o(function(r,n,i,a){if(this.isVisible(r,i)){var s=this.r,l=a.w,u=a.h,h=l/2,f=u/2,d=this.getStyle(r,i),p=d.shape,m=d.color,g=d.opacity;n.save(),n.fillStyle=H0e(m,g),p==="round-rectangle"||p==="roundrectangle"?s.drawRoundRectanglePath(n,h,f,l,u,"auto"):p==="ellipse"&&s.drawEllipsePath(n,h,f,l,u),n.fill(),n.restore()}},"draw")}]),t}();o(DZe,"getBGColor");Dge={};Dge.initWebgl=function(t,e){var r=this,n=r.data.contexts[r.WEBGL],i=t.cy.container();t.bgColor=DZe(i),t.webglTexSize=Math.min(t.webglTexSize,n.getParameter(n.MAX_TEXTURE_SIZE)),t.webglTexRows=Math.min(t.webglTexRows,54),t.webglBatchSize=Math.min(t.webglBatchSize,16384),t.webglTexPerBatch=Math.min(t.webglTexPerBatch,n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS)),r.webglDebug=t.webglDebug,r.webglDebugShowAtlases=t.webglDebugShowAtlases,console.log("max texture units",n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS)),console.log("max texture size",n.getParameter(n.MAX_TEXTURE_SIZE)),console.log("webgl options",t),r.pickingFrameBuffer=bZe(n),r.pickingFrameBuffer.needsDraw=!0;var a=o(function(f){return r.getTextAngle(f,null)},"getLabelRotation"),s=o(function(f){var d=f.pstyle("label");return d&&d.value},"isLabelVisible");r.eleDrawing=new AZe(r,n,t);var l=new _Ze(r);r.eleDrawing.addTextureRenderType("node-body",Mb({getKey:e.getStyleKey,getBoundingBox:e.getElementBox,drawElement:e.drawElement,isVisible:o(function(f){return f.visible()},"isVisible")})),r.eleDrawing.addTextureRenderType("node-label",Mb({getKey:e.getLabelKey,getBoundingBox:e.getLabelBox,drawElement:e.drawLabel,getRotation:a,getRotationPoint:e.getLabelRotationPoint,getRotationOffset:e.getLabelRotationOffset,isVisible:s})),r.eleDrawing.addTextureRenderType("node-overlay",Mb({getBoundingBox:e.getElementBox,getKey:o(function(f){return l.getStyleKey("overlay",f)},"getKey"),drawElement:o(function(f,d,p){return l.draw("overlay",f,d,p)},"drawElement"),isVisible:o(function(f){return l.isVisible("overlay",f)},"isVisible"),getPadding:o(function(f){return l.getPadding("overlay",f)},"getPadding")})),r.eleDrawing.addTextureRenderType("node-underlay",Mb({getBoundingBox:e.getElementBox,getKey:o(function(f){return l.getStyleKey("underlay",f)},"getKey"),drawElement:o(function(f,d,p){return l.draw("underlay",f,d,p)},"drawElement"),isVisible:o(function(f){return l.isVisible("underlay",f)},"isVisible"),getPadding:o(function(f){return l.getPadding("underlay",f)},"getPadding")})),r.eleDrawing.addTextureRenderType("edge-label",Mb({getKey:e.getLabelKey,getBoundingBox:e.getLabelBox,drawElement:e.drawLabel,getRotation:a,getRotationPoint:e.getLabelRotationPoint,getRotationOffset:e.getLabelRotationOffset,isVisible:s}));var u=n4(function(){console.log("garbage collect flag set"),r.data.gc=!0},1e4);r.onUpdateEleCalcs(function(h,f){var d=!1;f&&f.length>0&&(d|=r.eleDrawing.invalidate(f)),d&&u()}),LZe(r)};o(LZe,"overrideCanvasRendererFunctions");o(RZe,"clearWebgl");o(NZe,"clearCanvas");o(MZe,"createPanZoomMatrix");o(Lge,"setContextTransform");o(IZe,"drawSelectionRectangle");o(OZe,"drawAxes");o(PZe,"drawAtlases");o(BZe,"getPickingIndexes");o(FZe,"findNearestElementsWebgl");o(Rge,"renderWebgl");Pf={};Pf.drawPolygonPath=function(t,e,r,n,i,a){var s=n/2,l=i/2;t.beginPath&&t.beginPath(),t.moveTo(e+s*a[0],r+l*a[1]);for(var u=1;u<a.length/2;u++)t.lineTo(e+s*a[u*2],r+l*a[u*2+1]);t.closePath()};Pf.drawRoundPolygonPath=function(t,e,r,n,i,a,s){s.forEach(function(l){return hge(t,l)}),t.closePath()};Pf.drawRoundRectanglePath=function(t,e,r,n,i,a){var s=n/2,l=i/2,u=a==="auto"?Vp(n,i):Math.min(a,l,s);t.beginPath&&t.beginPath(),t.moveTo(e,r-l),t.arcTo(e+s,r-l,e+s,r,u),t.arcTo(e+s,r+l,e,r+l,u),t.arcTo(e-s,r+l,e-s,r,u),t.arcTo(e-s,r-l,e,r-l,u),t.lineTo(e,r-l),t.closePath()};Pf.drawBottomRoundRectanglePath=function(t,e,r,n,i,a){var s=n/2,l=i/2,u=a==="auto"?Vp(n,i):a;t.beginPath&&t.beginPath(),t.moveTo(e,r-l),t.lineTo(e+s,r-l),t.lineTo(e+s,r),t.arcTo(e+s,r+l,e,r+l,u),t.arcTo(e-s,r+l,e-s,r,u),t.lineTo(e-s,r-l),t.lineTo(e,r-l),t.closePath()};Pf.drawCutRectanglePath=function(t,e,r,n,i,a,s){var l=n/2,u=i/2,h=s==="auto"?sB():s;t.beginPath&&t.beginPath(),t.moveTo(e-l+h,r-u),t.lineTo(e+l-h,r-u),t.lineTo(e+l,r-u+h),t.lineTo(e+l,r+u-h),t.lineTo(e+l-h,r+u),t.lineTo(e-l+h,r+u),t.lineTo(e-l,r+u-h),t.lineTo(e-l,r-u+h),t.closePath()};Pf.drawBarrelPath=function(t,e,r,n,i){var a=n/2,s=i/2,l=e-a,u=e+a,h=r-s,f=r+s,d=BP(n,i),p=d.widthOffset,m=d.heightOffset,g=d.ctrlPtOffsetPct*p;t.beginPath&&t.beginPath(),t.moveTo(l,h+m),t.lineTo(l,f-m),t.quadraticCurveTo(l+g,f,l+p,f),t.lineTo(u-p,f),t.quadraticCurveTo(u-g,f,u,f-m),t.lineTo(u,h+m),t.quadraticCurveTo(u-g,h,u-p,h),t.lineTo(l+p,h),t.quadraticCurveTo(l+g,h,l,h+m),t.closePath()};W0e=Math.sin(0),q0e=Math.cos(0),jP={},KP={},Nge=Math.PI/40;for(Ip=0*Math.PI;Ip<2*Math.PI;Ip+=Nge)jP[Ip]=Math.sin(Ip),KP[Ip]=Math.cos(Ip);Pf.drawEllipsePath=function(t,e,r,n,i){if(t.beginPath&&t.beginPath(),t.ellipse)t.ellipse(e,r,n/2,i/2,0,0,2*Math.PI);else for(var a,s,l=n/2,u=i/2,h=0*Math.PI;h<2*Math.PI;h+=Nge)a=e-l*jP[h]*W0e+l*KP[h]*q0e,s=r+u*KP[h]*W0e+u*jP[h]*q0e,h===0?t.moveTo(a,s):t.lineTo(a,s);t.closePath()};c4={};c4.createBuffer=function(t,e){var r=document.createElement("canvas");return r.width=t,r.height=e,[r,r.getContext("2d")]};c4.bufferCanvasImage=function(t){var e=this.cy,r=e.mutableElements(),n=r.boundingBox(),i=this.findContainerClientCoords(),a=t.full?Math.ceil(n.w):i[2],s=t.full?Math.ceil(n.h):i[3],l=Ct(t.maxWidth)||Ct(t.maxHeight),u=this.getPixelRatio(),h=1;if(t.scale!==void 0)a*=t.scale,s*=t.scale,h=t.scale;else if(l){var f=1/0,d=1/0;Ct(t.maxWidth)&&(f=h*t.maxWidth/a),Ct(t.maxHeight)&&(d=h*t.maxHeight/s),h=Math.min(f,d),a*=h,s*=h}l||(a*=u,s*=u,h*=u);var p=document.createElement("canvas");p.width=a,p.height=s,p.style.width=a+"px",p.style.height=s+"px";var m=p.getContext("2d");if(a>0&&s>0){m.clearRect(0,0,a,s),m.globalCompositeOperation="source-over";var g=this.getCachedZSortedEles();if(t.full)m.translate(-n.x1*h,-n.y1*h),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(n.x1*h,n.y1*h);else{var y=e.pan(),v={x:y.x*h,y:y.y*h};h*=e.zoom(),m.translate(v.x,v.y),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(-v.x,-v.y)}t.bg&&(m.globalCompositeOperation="destination-over",m.fillStyle=t.bg,m.rect(0,0,a,s),m.fill())}return p};o($Ze,"b64ToBlob");o(Y0e,"b64UriToB64");o(Mge,"output");c4.png=function(t){return Mge(t,this.bufferCanvasImage(t),"image/png")};c4.jpg=function(t){return Mge(t,this.bufferCanvasImage(t),"image/jpeg")};Ige={};Ige.nodeShapeImpl=function(t,e,r,n,i,a,s,l){switch(t){case"ellipse":return this.drawEllipsePath(e,r,n,i,a);case"polygon":return this.drawPolygonPath(e,r,n,i,a,s);case"round-polygon":return this.drawRoundPolygonPath(e,r,n,i,a,s,l);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(e,r,n,i,a,l);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(e,r,n,i,a,s,l);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(e,r,n,i,a,l);case"barrel":return this.drawBarrelPath(e,r,n,i,a)}};zZe=Oge,Er=Oge.prototype;Er.CANVAS_LAYERS=3;Er.SELECT_BOX=0;Er.DRAG=1;Er.NODE=2;Er.WEBGL=3;Er.CANVAS_TYPES=["2d","2d","2d","webgl2"];Er.BUFFER_COUNT=3;Er.TEXTURE_BUFFER=0;Er.MOTIONBLUR_BUFFER_NODE=1;Er.MOTIONBLUR_BUFFER_DRAG=2;o(Oge,"CanvasRenderer");Er.redrawHint=function(t,e){var r=this;switch(t){case"eles":r.data.canvasNeedsRedraw[Er.NODE]=e;break;case"drag":r.data.canvasNeedsRedraw[Er.DRAG]=e;break;case"select":r.data.canvasNeedsRedraw[Er.SELECT_BOX]=e;break;case"gc":r.data.gc=!0;break}};GZe=typeof Path2D<"u";Er.path2dEnabled=function(t){if(t===void 0)return this.pathsEnabled;this.pathsEnabled=!!t};Er.usePaths=function(){return GZe&&this.pathsEnabled};Er.setImgSmoothing=function(t,e){t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled=e:(t.webkitImageSmoothingEnabled=e,t.mozImageSmoothingEnabled=e,t.msImageSmoothingEnabled=e)};Er.getImgSmoothing=function(t){return t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled:t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled};Er.makeOffscreenCanvas=function(t,e){var r;if((typeof OffscreenCanvas>"u"?"undefined":Wi(OffscreenCanvas))!=="undefined")r=new OffscreenCanvas(t,e);else{var n=this.cy.window(),i=n.document;r=i.createElement("canvas"),r.width=t,r.height=e}return r};[Tge,Qc,th,bB,Yp,ly,ys,Dge,Pf,c4,Ige].forEach(function(t){rr(Er,t)});VZe=[{name:"null",impl:lge},{name:"base",impl:vge},{name:"canvas",impl:zZe}],UZe=[{type:"layout",extensions:SQe},{type:"renderer",extensions:VZe}],Pge={},Bge={};o(Fge,"setExtension");o($ge,"getExtension");o(HZe,"setModule");o(WZe,"getModule");QP=o(function(){if(arguments.length===2)return $ge.apply(null,arguments);if(arguments.length===3)return Fge.apply(null,arguments);if(arguments.length===4)return WZe.apply(null,arguments);if(arguments.length===5)return HZe.apply(null,arguments);ai("Invalid extension access syntax")},"extension");Jb.prototype.extension=QP;UZe.forEach(function(t){t.extensions.forEach(function(e){Fge(t.type,e.name,e.impl)})});zge=o(function t(){if(!(this instanceof t))return new t;this.length=0},"Stylesheet"),Wp=zge.prototype;Wp.instanceString=function(){return"stylesheet"};Wp.selector=function(t){var e=this.length++;return this[e]={selector:t,properties:[]},this};Wp.css=function(t,e){var r=this.length-1;if(Zt(t))this[r].properties.push({name:t,value:e});else if(Ur(t))for(var n=t,i=Object.keys(n),a=0;a<i.length;a++){var s=i[a],l=n[s];if(l!=null){var u=Fa.properties[s]||Fa.properties[LS(s)];if(u!=null){var h=u.name,f=l;this[r].properties.push({name:h,value:f})}}}return this};Wp.style=Wp.css;Wp.generateStyle=function(t){var e=new Fa(t);return this.appendToStyle(e)};Wp.appendToStyle=function(t){for(var e=0;e<this.length;e++){var r=this[e],n=r.selector,i=r.properties;t.selector(n);for(var a=0;a<i.length;a++){var s=i[a];t.css(s.name,s.value)}}return t};qZe="3.31.0",rl=o(function(e){if(e===void 0&&(e={}),Ur(e))return new Jb(e);if(Zt(e))return QP.apply(QP,arguments)},"cytoscape");rl.use=function(t){var e=Array.prototype.slice.call(arguments,1);return e.unshift(rl),t.apply(null,e),this};rl.warnings=function(t){return hme(t)};rl.version=qZe;rl.stylesheet=rl.Stylesheet=zge});var SB=Mi((u4,EB)=>{"use strict";o(function(e,r){typeof u4=="object"&&typeof EB=="object"?EB.exports=r():typeof define=="function"&&define.amd?define([],r):typeof u4=="object"?u4.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(u4,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=26)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(4);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;y<g.length;y++)p=g[y],m=p.withChildren(),m.forEach(function(v){d.add(v)});return d},h.prototype.getNoOfChildren=function(){var d=0,p;if(this.child==null)d=1;else for(var m=this.child.getNodes(),g=0;g<m.length;g++)p=m[g],d+=p.getNoOfChildren();return d==0&&(d=1),d},h.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},h.prototype.calcEstimatedSize=function(){return this.child==null?this.estimatedSize=(this.rect.width+this.rect.height)/2:(this.estimatedSize=this.child.calcEstimatedSize(),this.rect.width=this.estimatedSize,this.rect.height=this.estimatedSize,this.estimatedSize)},h.prototype.scatter=function(){var d,p,m=-s.INITIAL_WORLD_BOUNDARY,g=s.INITIAL_WORLD_BOUNDARY;d=s.WORLD_CENTER_X+l.nextDouble()*(g-m)+m;var y=-s.INITIAL_WORLD_BOUNDARY,v=s.INITIAL_WORLD_BOUNDARY;p=s.WORLD_CENTER_Y+l.nextDouble()*(v-y)+y,this.rect.x=d,this.rect.y=p},h.prototype.updateBounds=function(){if(this.getChild()==null)throw"assert failed";if(this.getChild().getNodes().length!=0){var d=this.getChild();if(d.updateBounds(!0),this.rect.x=d.getLeft(),this.rect.y=d.getTop(),this.setWidth(d.getRight()-d.getLeft()),this.setHeight(d.getBottom()-d.getTop()),s.NODE_DIMENSIONS_INCLUDE_LABELS){var p=d.getRight()-d.getLeft(),m=d.getBottom()-d.getTop();this.labelWidth>p&&(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)),this.labelHeight>m&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-m)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-m),this.setHeight(this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(6),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,w=0;w<b;w++)x=v[w],x.isInterGraph?this.graphManager.remove(x):x.source.owner.remove(x);var C=this.nodes.indexOf(y);if(C==-1)throw"Node not in owner node list!";this.nodes.splice(C,1)}else if(g instanceof u){var x=g;if(x==null)throw"Edge is null!";if(!(x.source!=null&&x.target!=null))throw"Source and/or target is null!";if(!(x.source.owner!=null&&x.target.owner!=null&&x.source.owner==this&&x.target.owner==this))throw"Source and/or target owner is invalid!";var T=x.source.edges.indexOf(x),E=x.target.edges.indexOf(x);if(!(T>-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(T,1),x.target!=x.source&&x.target.edges.splice(E,1);var C=x.source.owner.getEdges().indexOf(x);if(C==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(C,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,w=this.getNodes(),C=w.length,T=0;T<C;T++){var E=w[T];v=E.getTop(),x=E.getLeft(),g>v&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(w[0].getParent().paddingLeft!=null?b=w[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,C,T,E,A,S=this.nodes,_=S.length,I=0;I<_;I++){var D=S[I];g&&D.child!=null&&D.updateBounds(),w=D.getLeft(),C=D.getRight(),T=D.getTop(),E=D.getBottom(),y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var k=new h(y,x,v-y,b-x);y==i.MAX_VALUE&&(this.left=this.parent.getLeft(),this.right=this.parent.getRight(),this.top=this.parent.getTop(),this.bottom=this.parent.getBottom()),S[0].getParent().paddingLeft!=null?A=S[0].getParent().paddingLeft:A=this.margin,this.left=k.x-A,this.right=k.x+k.width+A,this.top=k.y-A,this.bottom=k.y+k.height+A},p.calculateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,C,T,E,A=g.length,S=0;S<A;S++){var _=g[S];w=_.getLeft(),C=_.getRight(),T=_.getTop(),E=_.getBottom(),y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var I=new h(y,x,v-y,b-x);return I},p.prototype.getInclusionTreeDepth=function(){return this==this.graphManager.getRoot()?1:this.parent.getInclusionTreeDepth()},p.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},p.prototype.calcEstimatedSize=function(){for(var g=0,y=this.nodes,v=y.length,x=0;x<v;x++){var b=y[x];g+=b.calcEstimatedSize()}return g==0?this.estimatedSize=a.EMPTY_COMPOUND_NODE_SIZE:this.estimatedSize=g/Math.sqrt(this.nodes.length),this.estimatedSize},p.prototype.updateConnected=function(){var g=this;if(this.nodes.length==0){this.isConnected=!0;return}var y=new d,v=new Set,x=this.nodes[0],b,w,C=x.withChildren();for(C.forEach(function(I){y.push(I),v.add(I)});y.length!==0;){x=y.shift(),b=x.getEdges();for(var T=b.length,E=0;E<T;E++){var A=b[E];if(w=A.getOtherEndInGraph(x,this),w!=null&&!v.has(w)){var S=w.withChildren();S.forEach(function(I){y.push(I),v.add(I)})}}}if(this.isConnected=!1,v.size>=this.nodes.length){var _=0;v.forEach(function(I){I.owner==g&&_++}),_==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(5),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d<f;d++)h=u[d],l.remove(h);var p=[];p=p.concat(l.getNodes());var m;f=p.length;for(var d=0;d<f;d++)m=p[d],l.remove(m);l==this.rootGraph&&this.setRootGraph(null);var g=this.graphs.indexOf(l);this.graphs.splice(g,1),l.parent=null}else if(s instanceof i){if(h=s,h==null)throw"Edge is null!";if(!h.isInterGraph)throw"Not an inter-graph edge!";if(!(h.source!=null&&h.target!=null))throw"Source and/or target is null!";if(!(h.source.edges.indexOf(h)!=-1&&h.target.edges.indexOf(h)!=-1))throw"Source and/or target doesn't know this edge!";var g=h.source.edges.indexOf(h);if(h.source.edges.splice(g,1),g=h.target.edges.indexOf(h),h.target.edges.splice(g,1),!(h.source.owner!=null&&h.source.owner.getGraphManager()!=null))throw"Edge owner graph or owner graph manager is null!";if(h.source.owner.getGraphManager().edges.indexOf(h)==-1)throw"Not in owner graph manager's edge list!";var g=h.source.owner.getGraphManager().edges.indexOf(h);h.source.owner.getGraphManager().edges.splice(g,1)}},a.prototype.updateBounds=function(){this.rootGraph.updateBounds(!0)},a.prototype.getGraphs=function(){return this.graphs},a.prototype.getAllNodes=function(){if(this.allNodes==null){for(var s=[],l=this.getGraphs(),u=l.length,h=0;h<u;h++)s=s.concat(l[h].getNodes());this.allNodes=s}return this.allNodes},a.prototype.resetAllNodes=function(){this.allNodes=null},a.prototype.resetAllEdges=function(){this.allEdges=null},a.prototype.resetAllNodesToApplyGravitation=function(){this.allNodesToApplyGravitation=null},a.prototype.getAllEdges=function(){if(this.allEdges==null){for(var s=[],l=this.getGraphs(),u=l.length,h=0;h<l.length;h++)s=s.concat(l[h].getEdges());s=s.concat(this.edges),this.allEdges=s}return this.allEdges},a.prototype.getAllNodesToApplyGravitation=function(){return this.allNodesToApplyGravitation},a.prototype.setAllNodesToApplyGravitation=function(s){if(this.allNodesToApplyGravitation!=null)throw"assert failed";this.allNodesToApplyGravitation=s},a.prototype.getRoot=function(){return this.rootGraph},a.prototype.setRootGraph=function(s){if(s.getGraphManager()!=this)throw"Root not in this graph mgr!";this.rootGraph=s,s.parent==null&&(s.parent=this.layout.newNode("Root node"))},a.prototype.getLayout=function(){return this.layout},a.prototype.isOneAncestorOfOther=function(s,l){if(!(s!=null&&l!=null))throw"assert failed";if(s==l)return!0;var u=s.getOwner(),h;do{if(h=u.getParent(),h==null)break;if(h==l)return!0;if(u=h.getOwner(),u==null)break}while(!0);u=l.getOwner();do{if(h=u.getParent(),h==null)break;if(h==s)return!0;if(u=h.getOwner(),u==null)break}while(!0);return!1},a.prototype.calcLowestCommonAncestors=function(){for(var s,l,u,h,f,d=this.getAllEdges(),p=d.length,m=0;m<p;m++){if(s=d[m],l=s.source,u=s.target,s.lca=null,s.sourceInLca=l,s.targetInLca=u,l==u){s.lca=l.getOwner();continue}for(h=l.getOwner();s.lca==null;){for(s.targetInLca=u,f=u.getOwner();s.lca==null;){if(f==h){s.lca=f;break}if(f==this.rootGraph)break;if(s.lca!=null)throw"assert failed";s.targetInLca=f.getParent(),f=s.targetInLca.getOwner()}if(h==this.rootGraph)break;s.lca==null&&(s.sourceInLca=h.getParent(),h=s.sourceInLca.getOwner())}if(s.lca==null)throw"assert failed"}},a.prototype.calcLowestCommonAncestor=function(s,l){if(s==l)return s.getOwner();var u=s.getOwner();do{if(u==null)break;var h=l.getOwner();do{if(h==null)break;if(h==u)return h;h=h.getParent().getOwner()}while(!0);u=u.getParent().getOwner()}while(!0);return u},a.prototype.calcInclusionTreeDepths=function(s,l){s==null&&l==null&&(s=this.rootGraph,l=1);for(var u,h=s.getNodes(),f=h.length,d=0;d<f;d++)u=h[d],u.inclusionTreeDepth=l,u.child!=null&&this.calcInclusionTreeDepths(u.child,l+1)},a.prototype.includesInvalidEdge=function(){for(var s,l=this.edges.length,u=0;u<l;u++)if(s=this.edges[u],this.isOneAncestorOfOther(s.source,s.target))return!0;return!1},t.exports=a},function(t,e,r){"use strict";var n=r(0);function i(){}o(i,"FDLayoutConstants");for(var a in n)i[a]=n[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=i.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,t.exports=i},function(t,e,r){"use strict";var n=r(12);function i(){}o(i,"IGeometry"),i.calcSeparationAmount=function(a,s,l,u){if(!a.intersects(s))throw"assert failed";var h=new Array(2);this.decideDirectionsForOverlappingNodes(a,s,h),l[0]=Math.min(a.getRight(),s.getRight())-Math.max(a.x,s.x),l[1]=Math.min(a.getBottom(),s.getBottom())-Math.max(a.y,s.y),a.getX()<=s.getX()&&a.getRight()>=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]<p?p=l[0]:d=l[1],l[0]=-1*h[0]*(p/2+u),l[1]=-1*h[1]*(d/2+u)},i.decideDirectionsForOverlappingNodes=function(a,s,l){a.getCenterX()<s.getCenterX()?l[0]=-1:l[0]=1,a.getCenterY()<s.getCenterY()?l[1]=-1:l[1]=1},i.getIntersection2=function(a,s,l){var u=a.getCenterX(),h=a.getCenterY(),f=s.getCenterX(),d=s.getCenterY();if(a.intersects(s))return l[0]=u,l[1]=h,l[2]=f,l[3]=d,!0;var p=a.getX(),m=a.getY(),g=a.getRight(),y=a.getX(),v=a.getBottom(),x=a.getRight(),b=a.getWidthHalf(),w=a.getHeightHalf(),C=s.getX(),T=s.getY(),E=s.getRight(),A=s.getX(),S=s.getBottom(),_=s.getRight(),I=s.getWidthHalf(),D=s.getHeightHalf(),k=!1,L=!1;if(u===f){if(h>d)return l[0]=u,l[1]=m,l[2]=f,l[3]=S,!1;if(h<d)return l[0]=u,l[1]=v,l[2]=f,l[3]=T,!1}else if(h===d){if(u>f)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(u<f)return l[0]=g,l[1]=h,l[2]=C,l[3]=d,!1}else{var R=a.height/a.width,O=s.height/s.width,M=(d-h)/(f-u),B=void 0,F=void 0,P=void 0,z=void 0,$=void 0,H=void 0;if(-R===M?u>f?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):R===M&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-O===M?f>u?(l[2]=A,l[3]=S,L=!0):(l[2]=E,l[3]=T,L=!0):O===M&&(f>u?(l[2]=C,l[3]=T,L=!0):(l[2]=_,l[3]=S,L=!0)),k&&L)return!1;if(u>f?h>d?(B=this.getCardinalDirection(R,M,4),F=this.getCardinalDirection(O,M,2)):(B=this.getCardinalDirection(-R,M,3),F=this.getCardinalDirection(-O,M,1)):h>d?(B=this.getCardinalDirection(-R,M,1),F=this.getCardinalDirection(-O,M,3)):(B=this.getCardinalDirection(R,M,2),F=this.getCardinalDirection(O,M,4)),!k)switch(B){case 1:z=m,P=u+-w/M,l[0]=P,l[1]=z;break;case 2:P=x,z=h+b*M,l[0]=P,l[1]=z;break;case 3:z=v,P=u+w/M,l[0]=P,l[1]=z;break;case 4:P=y,z=h+-b*M,l[0]=P,l[1]=z;break}if(!L)switch(F){case 1:H=T,$=f+-D/M,l[2]=$,l[3]=H;break;case 2:$=_,H=d+I*M,l[2]=$,l[3]=H;break;case 3:H=S,$=f+D/M,l[2]=$,l[3]=H;break;case 4:$=A,H=d+-I*M,l[2]=$,l[3]=H;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,w=void 0,C=void 0,T=void 0,E=void 0,A=void 0,S=void 0,_=void 0;return w=p-f,T=h-d,A=d*f-h*p,C=v-g,E=m-y,S=y*g-m*v,_=w*E-C*T,_===0?null:(x=(T*S-E*A)/_,b=(C*A-w*S)/_,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l<a?h+=Math.PI:u<s&&(h+=this.TWO_PI)):u<s?h=this.ONE_AND_HALF_PI:h=this.HALF_PI,h},i.doIntersect=function(a,s,l,u){var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=(d-h)*(v-g)-(y-m)*(p-f);if(x===0)return!1;var b=((v-g)*(y-h)+(m-y)*(v-f))/x,w=((f-p)*(y-h)+(d-h)*(v-f))/x;return 0<b&&b<1&&0<w&&w<1},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,t.exports=i},function(t,e,r){"use strict";function n(){}o(n,"IMath"),n.sign=function(i){return i>0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p<d.length;p++){var m=d[p];m.enumerable=m.enumerable||!1,m.configurable=!0,"value"in m&&(m.writable=!0),Object.defineProperty(f,m.key,m)}}return o(h,"defineProperties"),function(f,d,p){return d&&h(f.prototype,d),p&&h(f,p),f}}();function i(h,f){if(!(h instanceof f))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=o(function(f){return{value:f,next:null,prev:null}},"nodeFrom"),s=o(function(f,d,p,m){return f!==null?f.next=d:m.head=d,p!==null?p.prev=d:m.tail=d,d.prev=f,d.next=p,m.length++,d},"add"),l=o(function(f,d){var p=f.prev,m=f.next;return p!==null?p.next=m:d.head=m,m!==null?m.prev=p:d.tail=p,f.prev=f.next=null,d.length--,f},"_remove"),u=function(){function h(f){var d=this;i(this,h),this.length=0,this.head=null,this.tail=null,f?.forEach(function(p){return d.push(p)})}return o(h,"LinkedList"),n(h,[{key:"size",value:o(function(){return this.length},"size")},{key:"insertBefore",value:o(function(d,p){return s(p.prev,a(d),p,this)},"insertBefore")},{key:"insertAfter",value:o(function(d,p){return s(p,a(d),p.next,this)},"insertAfter")},{key:"insertNodeBefore",value:o(function(d,p){return s(p.prev,d,p,this)},"insertNodeBefore")},{key:"insertNodeAfter",value:o(function(d,p){return s(p,d,p.next,this)},"insertNodeAfter")},{key:"push",value:o(function(d){return s(this.tail,a(d),null,this)},"push")},{key:"unshift",value:o(function(d){return s(null,a(d),this.head,this)},"unshift")},{key:"remove",value:o(function(d){return l(d,this)},"remove")},{key:"pop",value:o(function(){return l(this.tail,this).value},"pop")},{key:"popNode",value:o(function(){return l(this.tail,this)},"popNode")},{key:"shift",value:o(function(){return l(this.head,this).value},"shift")},{key:"shiftNode",value:o(function(){return l(this.head,this)},"shiftNode")},{key:"get_object_at",value:o(function(d){if(d<=this.length()){for(var p=1,m=this.head;p<d;)m=m.next,p++;return m.value}},"get_object_at")},{key:"set_object_at",value:o(function(d,p){if(d<=this.length()){for(var m=1,g=this.head;m<d;)g=g.next,m++;g.value=p}},"set_object_at")}]),h}();t.exports=u},function(t,e,r){"use strict";function n(i,a,s){this.x=null,this.y=null,i==null&&a==null&&s==null?(this.x=0,this.y=0):typeof i=="number"&&typeof a=="number"&&s==null?(this.x=i,this.y=a):i.constructor.name=="Point"&&a==null&&s==null&&(s=i,this.x=s.x,this.y=s.y)}o(n,"Point"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.getLocation=function(){return new n(this.x,this.y)},n.prototype.setLocation=function(i,a,s){i.constructor.name=="Point"&&a==null&&s==null?(s=i,this.setLocation(s.x,s.y)):typeof i=="number"&&typeof a=="number"&&s==null&&(parseInt(i)==i&&parseInt(a)==a?this.move(i,a):(this.x=Math.floor(i+.5),this.y=Math.floor(a+.5)))},n.prototype.move=function(i,a){this.x=i,this.y=a},n.prototype.translate=function(i,a){this.x+=i,this.y+=a},n.prototype.equals=function(i){if(i.constructor.name=="Point"){var a=i;return this.x==a.x&&this.y==a.y}return this==i},n.prototype.toString=function(){return new n().constructor.name+"[x="+this.x+",y="+this.y+"]"},t.exports=n},function(t,e,r){"use strict";function n(i,a,s,l){this.x=0,this.y=0,this.width=0,this.height=0,i!=null&&a!=null&&s!=null&&l!=null&&(this.x=i,this.y=a,this.width=s,this.height=l)}o(n,"RectangleD"),n.prototype.getX=function(){return this.x},n.prototype.setX=function(i){this.x=i},n.prototype.getY=function(){return this.y},n.prototype.setY=function(i){this.y=i},n.prototype.getWidth=function(){return this.width},n.prototype.setWidth=function(i){this.width=i},n.prototype.getHeight=function(){return this.height},n.prototype.setHeight=function(i){this.height=i},n.prototype.getRight=function(){return this.x+this.width},n.prototype.getBottom=function(){return this.y+this.height},n.prototype.intersects=function(i){return!(this.getRight()<i.x||this.getBottom()<i.y||i.getRight()<this.x||i.getBottom()<this.y)},n.prototype.getCenterX=function(){return this.x+this.width/2},n.prototype.getMinX=function(){return this.getX()},n.prototype.getMaxX=function(){return this.getX()+this.width},n.prototype.getCenterY=function(){return this.y+this.height/2},n.prototype.getMinY=function(){return this.getY()},n.prototype.getMaxY=function(){return this.getY()+this.height},n.prototype.getWidthHalf=function(){return this.width/2},n.prototype.getHeightHalf=function(){return this.height/2},t.exports=n},function(t,e,r){"use strict";var n=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(a){return typeof a}:function(a){return a&&typeof Symbol=="function"&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};function i(){}o(i,"UniqueIDGeneretor"),i.lastID=0,i.createID=function(a){return i.isPrimitive(a)?a:(a.uniqueID!=null||(a.uniqueID=i.getString(),i.lastID++),a.uniqueID)},i.getString=function(a){return a==null&&(a=i.lastID),"Object#"+a},i.isPrimitive=function(a){var s=typeof a>"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g<m.length;g++)y[g]=m[g];return y}else return Array.from(m)}o(n,"_toConsumableArray");var i=r(0),a=r(6),s=r(3),l=r(1),u=r(5),h=r(4),f=r(17),d=r(27);function p(m){d.call(this),this.layoutQuality=i.QUALITY,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.incremental=i.DEFAULT_INCREMENTAL,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES,this.edgeToDummyNodes=new Map,this.graphManager=new a(this),this.isLayoutFinished=!1,this.isSubLayout=!1,this.isRemoteUse=!1,m!=null&&(this.isRemoteUse=m)}o(p,"Layout"),p.RANDOM_SEED=1,p.prototype=Object.create(d.prototype),p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getAllNodes=function(){return this.graphManager.getAllNodes()},p.prototype.getAllEdges=function(){return this.graphManager.getAllEdges()},p.prototype.getAllNodesToApplyGravitation=function(){return this.graphManager.getAllNodesToApplyGravitation()},p.prototype.newGraphManager=function(){var m=new a(this);return this.graphManager=m,m},p.prototype.newGraph=function(m){return new u(null,this.graphManager,m)},p.prototype.newNode=function(m){return new s(this.graphManager,m)},p.prototype.newEdge=function(m){return new l(null,null,m)},p.prototype.checkLayoutSuccess=function(){return this.graphManager.getRoot()==null||this.graphManager.getRoot().getNodes().length==0||this.graphManager.includesInvalidEdge()},p.prototype.runLayout=function(){this.isLayoutFinished=!1,this.tilingPreLayout&&this.tilingPreLayout(),this.initParameters();var m;return this.checkLayoutSuccess()?m=!1:m=this.layout(),i.ANIMATE==="during"?!1:(m&&(this.isSubLayout||this.doPostLayout()),this.tilingPostLayout&&this.tilingPostLayout(),this.isLayoutFinished=!0,m)},p.prototype.doPostLayout=function(){this.incremental||this.transform(),this.update()},p.prototype.update2=function(){if(this.createBendsAsNeeded&&(this.createBendpointsFromDummyNodes(),this.graphManager.resetAllEdges()),!this.isRemoteUse){for(var m,g=this.graphManager.getAllEdges(),y=0;y<g.length;y++)m=g[y];for(var v,x=this.graphManager.getRoot().getNodes(),y=0;y<x.length;y++)v=x[y];this.update(this.graphManager.getRoot())}},p.prototype.update=function(m){if(m==null)this.update2();else if(m instanceof s){var g=m;if(g.getChild()!=null)for(var y=g.getChild().getNodes(),v=0;v<y.length;v++)update(y[v]);if(g.vGraphObject!=null){var x=g.vGraphObject;x.update(g)}}else if(m instanceof l){var b=m;if(b.vGraphObject!=null){var w=b.vGraphObject;w.update(b)}}else if(m instanceof u){var C=m;if(C.vGraphObject!=null){var T=C.vGraphObject;T.update(C)}}},p.prototype.initParameters=function(){this.isSubLayout||(this.layoutQuality=i.QUALITY,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.incremental=i.DEFAULT_INCREMENTAL,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES),this.animationDuringLayout&&(this.animationOnLayout=!1)},p.prototype.transform=function(m){if(m==null)this.transform(new h(0,0));else{var g=new f,y=this.graphManager.getRoot().updateLeftTop();if(y!=null){g.setWorldOrgX(m.x),g.setWorldOrgY(m.y),g.setDeviceOrgX(y.x),g.setDeviceOrgY(y.y);for(var v=this.getAllNodes(),x,b=0;b<v.length;b++)x=v[b],x.transform(g)}}},p.prototype.positionNodesRandomly=function(m){if(m==null)this.positionNodesRandomly(this.getGraphManager().getRoot()),this.getGraphManager().getRoot().updateBounds(!0);else for(var g,y,v=m.getNodes(),x=0;x<v.length;x++)g=v[x],y=g.getChild(),y==null||y.getNodes().length==0?g.scatter():(this.positionNodesRandomly(y),g.updateBounds())},p.prototype.getFlatForest=function(){for(var m=[],g=!0,y=this.graphManager.getRoot().getNodes(),v=!0,x=0;x<y.length;x++)y[x].getChild()!=null&&(v=!1);if(!v)return m;var b=new Set,w=[],C=new Map,T=[];for(T=T.concat(y);T.length>0&&g;){for(w.push(T[0]);w.length>0&&g;){var E=w[0];w.splice(0,1),b.add(E);for(var A=E.getEdges(),x=0;x<A.length;x++){var S=A[x].getOtherEnd(E);if(C.get(E)!=S)if(!b.has(S))w.push(S),C.set(S,E);else{g=!1;break}}}if(!g)m=[];else{var _=[].concat(n(b));m.push(_);for(var x=0;x<_.length;x++){var I=_[x],D=T.indexOf(I);D>-1&&T.splice(D,1)}b=new Set,C=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x<m.bendpoints.length;x++){var b=this.newNode(null);b.setRect(new Point(0,0),new Dimension(1,1)),v.add(b);var w=this.newEdge(null);this.graphManager.add(w,y,b),g.add(b),y=b}var w=this.newEdge(null);return this.graphManager.add(w,y,m.target),this.edgeToDummyNodes.set(m,g),m.isInterGraph()?this.graphManager.remove(m):v.remove(m),g},p.prototype.createBendpointsFromDummyNodes=function(){var m=[];m=m.concat(this.graphManager.getAllEdges()),m=[].concat(n(this.edgeToDummyNodes.keys())).concat(m);for(var g=0;g<m.length;g++){var y=m[g];if(y.bendpoints.length>0){for(var v=this.edgeToDummyNodes.get(y),x=0;x<v.length;x++){var b=v[x],w=new h(b.getCenterX(),b.getCenterY()),C=y.bendpoints.get(x);C.x=w.x,C.y=w.y,b.getOwner().remove(b)}this.graphManager.add(y,y.source,y.target)}}},p.transform=function(m,g,y,v){if(y!=null&&v!=null){var x=g;if(m<=50){var b=g/y;x-=(g-b)/50*(50-m)}else{var w=g*v;x+=(w-g)/50*(m-50)}return x}else{var C,T;return m<=50?(C=9*g/500,T=g/10):(C=9*g/50,T=-8*g),C*m+T}},p.findCenterOfTree=function(m){var g=[];g=g.concat(m);var y=[],v=new Map,x=!1,b=null;(g.length==1||g.length==2)&&(x=!0,b=g[0]);for(var w=0;w<g.length;w++){var C=g[w],T=C.getNeighborsList().size;v.set(C,C.getNeighborsList().size),T==1&&y.push(C)}var E=[];for(E=E.concat(y);!x;){var A=[];A=A.concat(E),E=[];for(var w=0;w<g.length;w++){var C=g[w],S=g.indexOf(C);S>=0&&g.splice(S,1);var _=C.getNeighborsList();_.forEach(function(k){if(y.indexOf(k)<0){var L=v.get(k),R=L-1;R==1&&E.push(k),v.set(k,R)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(4);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);p<d.length;p++)m[p]=d[p];return m}else return Array.from(d)}o(n,"_toConsumableArray");var i=r(15),a=r(7),s=r(0),l=r(8),u=r(9);function h(){i.call(this),this.useSmartIdealEdgeLengthCalculation=a.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.idealEdgeLength=a.DEFAULT_EDGE_LENGTH,this.springConstant=a.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=a.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=a.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=a.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.coolingFactor=a.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.initialCoolingFactor=a.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.totalDisplacement=0,this.oldTotalDisplacement=0,this.maxIterations=a.MAX_ITERATIONS}o(h,"FDLayout"),h.prototype=Object.create(i.prototype);for(var f in i)h[f]=i[f];h.prototype.initParameters=function(){i.prototype.initParameters.call(this,arguments),this.totalIterations=0,this.notAnimatedIterations=0,this.useFRGridVariant=a.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION,this.grid=[]},h.prototype.calcIdealEdgeLengths=function(){for(var d,p,m,g,y,v,x=this.getGraphManager().getAllEdges(),b=0;b<x.length;b++)d=x[b],d.idealLength=this.idealEdgeLength,d.isInterGraph&&(m=d.getSource(),g=d.getTarget(),y=d.getSourceInLca().getEstimatedSize(),v=d.getTargetInLca().getEstimatedSize(),this.useSmartIdealEdgeLengthCalculation&&(d.idealLength+=y+v-2*s.SIMPLE_NODE_SIZE),p=d.getLca().getInclusionTreeDepth(),d.idealLength+=a.DEFAULT_EDGE_LENGTH*a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR*(m.getInclusionTreeDepth()+g.getInclusionTreeDepth()-2*p))},h.prototype.initSpringEmbedder=function(){var d=this.getAllNodes().length;this.incremental?(d>a.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m<d.length;m++)p=d[m],this.calcSpringForce(p,p.idealLength)},h.prototype.calcRepulsionForces=function(){var d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;m<x.length;m++)y=x[m],this.calculateRepulsionForceOfANode(y,b,d,p),b.add(y);else for(m=0;m<x.length;m++)for(y=x[m],g=m+1;g<x.length;g++)v=x[g],y.getOwner()==v.getOwner()&&this.calcRepulsionForce(y,v)},h.prototype.calcGravitationalForces=function(){for(var d,p=this.getAllNodesToApplyGravitation(),m=0;m<p.length;m++)d=p[m],this.calcGravitationalForce(d)},h.prototype.moveNodes=function(){for(var d=this.getAllNodes(),p,m=0;m<d.length;m++)p=d[m],p.move()},h.prototype.calcSpringForce=function(d,p){var m=d.getSource(),g=d.getTarget(),y,v,x,b;if(this.uniformLeafNodeSizes&&m.getChild()==null&&g.getChild()==null)d.updateLengthSimple();else if(d.updateLength(),d.isOverlapingSourceAndTarget)return;y=d.getLength(),y!=0&&(v=this.springConstant*(y-p),x=v*(d.lengthX/y),b=v*(d.lengthY/y),m.springForceX+=x,m.springForceY+=b,g.springForceX-=x,g.springForceY-=b)},h.prototype.calcRepulsionForce=function(d,p){var m=d.getRect(),g=p.getRect(),y=new Array(2),v=new Array(4),x,b,w,C,T,E,A;if(m.intersects(g)){l.calcSeparationAmount(m,g,y,a.DEFAULT_EDGE_LENGTH/2),E=2*y[0],A=2*y[1];var S=d.noOfChildren*p.noOfChildren/(d.noOfChildren+p.noOfChildren);d.repulsionForceX-=S*E,d.repulsionForceY-=S*A,p.repulsionForceX+=S*E,p.repulsionForceY+=S*A}else this.uniformLeafNodeSizes&&d.getChild()==null&&p.getChild()==null?(x=g.getCenterX()-m.getCenterX(),b=g.getCenterY()-m.getCenterY()):(l.getIntersection(m,g,v),x=v[2]-v[0],b=v[3]-v[1]),Math.abs(x)<a.MIN_REPULSION_DIST&&(x=u.sign(x)*a.MIN_REPULSION_DIST),Math.abs(b)<a.MIN_REPULSION_DIST&&(b=u.sign(b)*a.MIN_REPULSION_DIST),w=x*x+b*b,C=Math.sqrt(w),T=this.repulsionConstant*d.noOfChildren*p.noOfChildren/w,E=T*x/C,A=T*b/C,d.repulsionForceX-=E,d.repulsionForceY-=A,p.repulsionForceX+=E,p.repulsionForceY+=A},h.prototype.calcGravitationalForce=function(d){var p,m,g,y,v,x,b,w;p=d.getOwner(),m=(p.getRight()+p.getLeft())/2,g=(p.getTop()+p.getBottom())/2,y=d.getCenterX()-m,v=d.getCenterY()-g,x=Math.abs(y)+d.getWidth()/2,b=Math.abs(v)+d.getHeight()/2,d.getOwner()==this.graphManager.getRoot()?(w=p.getEstimatedSize()*this.gravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(w=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement<this.totalDisplacementThreshold,this.oldTotalDisplacement=this.totalDisplacement,d||p},h.prototype.animate=function(){this.animationDuringLayout&&!this.isSubLayout&&(this.notAnimatedIterations==this.animationPeriod?(this.update(),this.notAnimatedIterations=0):this.notAnimatedIterations++)},h.prototype.calcNoOfChildrenForAllNodes=function(){for(var d,p=this.graphManager.getAllNodes(),m=0;m<p.length;m++)d=p[m],d.noOfChildren=d.getNoOfChildren()},h.prototype.calcGrid=function(d){var p=0,m=0;p=parseInt(Math.ceil((d.getRight()-d.getLeft())/this.repulsionRange)),m=parseInt(Math.ceil((d.getBottom()-d.getTop())/this.repulsionRange));for(var g=new Array(p),y=0;y<p;y++)g[y]=new Array(m);for(var y=0;y<p;y++)for(var v=0;v<m;v++)g[y][v]=new Array;return g},h.prototype.addNodeToGrid=function(d,p,m){var g=0,y=0,v=0,x=0;g=parseInt(Math.floor((d.getRect().x-p)/this.repulsionRange)),y=parseInt(Math.floor((d.getRect().width+d.getRect().x-p)/this.repulsionRange)),v=parseInt(Math.floor((d.getRect().y-m)/this.repulsionRange)),x=parseInt(Math.floor((d.getRect().height+d.getRect().y-m)/this.repulsionRange));for(var b=g;b<=y;b++)for(var w=v;w<=x;w++)this.grid[b][w].push(d),d.setGridCoordinates(g,y,v,x)},h.prototype.updateGrid=function(){var d,p,m=this.getAllNodes();for(this.grid=this.calcGrid(this.graphManager.getRoot()),d=0;d<m.length;d++)p=m[d],this.addNodeToGrid(p,this.graphManager.getRoot().getLeft(),this.graphManager.getRoot().getTop())},h.prototype.calculateRepulsionForceOfANode=function(d,p,m,g){if(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&m||g){var y=new Set;d.surrounding=new Array;for(var v,x=this.grid,b=d.startX-1;b<d.finishX+2;b++)for(var w=d.startY-1;w<d.finishY+2;w++)if(!(b<0||w<0||b>=x.length||w>=x[0].length)){for(var C=0;C<x[b][w].length;C++)if(v=x[b][w][C],!(d.getOwner()!=v.getOwner()||d==v)&&!p.has(v)&&!y.has(v)){var T=Math.abs(d.getCenterX()-v.getCenterX())-(d.getWidth()/2+v.getWidth()/2),E=Math.abs(d.getCenterY()-v.getCenterY())-(d.getHeight()/2+v.getHeight()/2);T<=this.repulsionRange&&E<=this.repulsionRange&&y.add(v)}}d.surrounding=[].concat(n(y))}for(b=0;b<d.surrounding.length;b++)this.calcRepulsionForce(d,d.surrounding[b])},h.prototype.calcRepulsionRange=function(){return 0},t.exports=h},function(t,e,r){"use strict";var n=r(1),i=r(7);function a(l,u,h){n.call(this,l,u,h),this.idealLength=i.DEFAULT_EDGE_LENGTH}o(a,"FDLayoutEdge"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];t.exports=a},function(t,e,r){"use strict";var n=r(3);function i(s,l,u,h){n.call(this,s,l,u,h),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0,this.startX=0,this.finishX=0,this.startY=0,this.finishY=0,this.surrounding=[]}o(i,"FDLayoutNode"),i.prototype=Object.create(n.prototype);for(var a in n)i[a]=n[a];i.prototype.setGridCoordinates=function(s,l,u,h){this.startX=s,this.finishX=l,this.startY=u,this.finishY=h},t.exports=i},function(t,e,r){"use strict";function n(i,a){this.width=0,this.height=0,i!==null&&a!==null&&(this.height=a,this.width=i)}o(n,"DimensionD"),n.prototype.getWidth=function(){return this.width},n.prototype.setWidth=function(i){this.width=i},n.prototype.getHeight=function(){return this.height},n.prototype.setHeight=function(i){this.height=i},t.exports=n},function(t,e,r){"use strict";var n=r(14);function i(){this.map={},this.keys=[]}o(i,"HashMap"),i.prototype.put=function(a,s){var l=n.createID(a);this.contains(l)||(this.map[l]=s,this.keys.push(a))},i.prototype.contains=function(a){var s=n.createID(a);return this.map[a]!=null},i.prototype.get=function(a){var s=n.createID(a);return this.map[s]},i.prototype.keySet=function(){return this.keys},t.exports=i},function(t,e,r){"use strict";var n=r(14);function i(){this.set={}}o(i,"HashSet"),i.prototype.add=function(a){var s=n.createID(a);this.contains(s)||(this.set[s]=a)},i.prototype.remove=function(a){delete this.set[n.createID(a)]},i.prototype.clear=function(){this.set={}},i.prototype.contains=function(a){return this.set[n.createID(a)]==a},i.prototype.isEmpty=function(){return this.size()===0},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAllTo=function(a){for(var s=Object.keys(this.set),l=s.length,u=0;u<l;u++)a.push(this.set[s[u]])},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAll=function(a){for(var s=a.length,l=0;l<s;l++){var u=a[l];this.add(u)}},t.exports=i},function(t,e,r){"use strict";var n=function(){function l(u,h){for(var f=0;f<h.length;f++){var d=h[f];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(u,d.key,d)}}return o(l,"defineProperties"),function(u,h,f){return h&&l(u.prototype,h),f&&l(u,f),u}}();function i(l,u){if(!(l instanceof u))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=r(11),s=function(){function l(u,h){i(this,l),(h!==null||h!==void 0)&&(this.compareFunction=this._defaultCompareFunction);var f=void 0;u instanceof a?f=u.size():f=u.length,this._quicksort(u,0,f-1)}return o(l,"Quicksort"),n(l,[{key:"_quicksort",value:o(function(h,f,d){if(f<d){var p=this._partition(h,f,d);this._quicksort(h,f,p),this._quicksort(h,p+1,d)}},"_quicksort")},{key:"_partition",value:o(function(h,f,d){for(var p=this._get(h,f),m=f,g=d;;){for(;this.compareFunction(p,this._get(h,g));)g--;for(;this.compareFunction(this._get(h,m),p);)m++;if(m<g)this._swap(h,m,g),m++,g--;else return g}},"_partition")},{key:"_get",value:o(function(h,f){return h instanceof a?h.get_object_at(f):h[f]},"_get")},{key:"_set",value:o(function(h,f,d){h instanceof a?h.set_object_at(f,d):h[f]=d},"_set")},{key:"_swap",value:o(function(h,f,d){var p=this._get(h,f);this._set(h,f,this._get(h,d)),this._set(h,d,p)},"_swap")},{key:"_defaultCompareFunction",value:o(function(h,f){return f>h},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h<u.length;h++){var f=u[h];f.enumerable=f.enumerable||!1,f.configurable=!0,"value"in f&&(f.writable=!0),Object.defineProperty(l,f.key,f)}}return o(s,"defineProperties"),function(l,u,h){return u&&s(l.prototype,u),h&&s(l,h),l}}();function i(s,l){if(!(s instanceof l))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=function(){function s(l,u){var h=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p<this.iMax;p++){this.grid[p]=new Array(this.jMax);for(var m=0;m<this.jMax;m++)this.grid[p][m]=0}this.tracebackGrid=new Array(this.iMax);for(var g=0;g<this.iMax;g++){this.tracebackGrid[g]=new Array(this.jMax);for(var y=0;y<this.jMax;y++)this.tracebackGrid[g][y]=[null,null,null]}this.alignments=[],this.score=-1,this.computeGrids()}return o(s,"NeedlemanWunsch"),n(s,[{key:"getScore",value:o(function(){return this.score},"getScore")},{key:"getAlignments",value:o(function(){return this.alignments},"getAlignments")},{key:"computeGrids",value:o(function(){for(var u=1;u<this.jMax;u++)this.grid[0][u]=this.grid[0][u-1]+this.gap_penalty,this.tracebackGrid[0][u]=[!1,!1,!0];for(var h=1;h<this.iMax;h++)this.grid[h][0]=this.grid[h-1][0]+this.gap_penalty,this.tracebackGrid[h][0]=[!1,!0,!1];for(var f=1;f<this.iMax;f++)for(var d=1;d<this.jMax;d++){var p=void 0;this.sequence1[f-1]===this.sequence2[d-1]?p=this.grid[f-1][d-1]+this.match_score:p=this.grid[f-1][d-1]+this.mismatch_penalty;var m=this.grid[f-1][d]+this.gap_penalty,g=this.grid[f][d-1]+this.gap_penalty,y=[p,m,g],v=this.arrayAllMaxIndexes(y);this.grid[f][d]=y[v[0]],this.tracebackGrid[f][d]=[v.includes(0),v.includes(1),v.includes(2)]}this.score=this.grid[this.iMax-1][this.jMax-1]},"computeGrids")},{key:"alignmentTraceback",value:o(function(){var u=[];for(u.push({pos:[this.sequence1.length,this.sequence2.length],seq1:"",seq2:""});u[0];){var h=u[0],f=this.tracebackGrid[h.pos[0]][h.pos[1]];f[0]&&u.push({pos:[h.pos[0]-1,h.pos[1]-1],seq1:this.sequence1[h.pos[0]-1]+h.seq1,seq2:this.sequence2[h.pos[1]-1]+h.seq2}),f[1]&&u.push({pos:[h.pos[0]-1,h.pos[1]],seq1:this.sequence1[h.pos[0]-1]+h.seq1,seq2:"-"+h.seq2}),f[2]&&u.push({pos:[h.pos[0],h.pos[1]-1],seq1:"-"+h.seq1,seq2:this.sequence2[h.pos[1]-1]+h.seq2}),h.pos[0]===0&&h.pos[1]===0&&this.alignments.push({sequence1:h.seq1,sequence2:h.seq2}),u.shift()}return this.alignments},"alignmentTraceback")},{key:"getAllIndexes",value:o(function(u,h){for(var f=[],d=-1;(d=u.indexOf(h,d+1))!==-1;)f.push(d);return f},"getAllIndexes")},{key:"arrayAllMaxIndexes",value:o(function(u){return this.getAllIndexes(u,Math.max.apply(null,u))},"arrayAllMaxIndexes")}]),s}();t.exports=a},function(t,e,r){"use strict";var n=o(function(){},"layoutBase");n.FDLayout=r(18),n.FDLayoutConstants=r(7),n.FDLayoutEdge=r(19),n.FDLayoutNode=r(20),n.DimensionD=r(21),n.HashMap=r(22),n.HashSet=r(23),n.IGeometry=r(8),n.IMath=r(9),n.Integer=r(10),n.Point=r(12),n.PointD=r(4),n.RandomSeed=r(16),n.RectangleD=r(13),n.Transform=r(17),n.UniqueIDGeneretor=r(14),n.Quicksort=r(24),n.LinkedList=r(11),n.LGraphObject=r(2),n.LGraph=r(5),n.LEdge=r(1),n.LGraphManager=r(6),n.LNode=r(3),n.Layout=r(15),n.LayoutConstants=r(0),n.NeedlemanWunsch=r(25),t.exports=n},function(t,e,r){"use strict";function n(){this.listeners=[]}o(n,"Emitter");var i=n.prototype;i.addListener=function(a,s){this.listeners.push({event:a,callback:s})},i.removeListener=function(a,s){for(var l=this.listeners.length;l>=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l<this.listeners.length;l++){var u=this.listeners[l];a===u.event&&u.callback(s)}},t.exports=n}])})});var AB=Mi((h4,CB)=>{"use strict";o(function(e,r){typeof h4=="object"&&typeof CB=="object"?CB.exports=r(SB()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof h4=="object"?h4.coseBase=r(SB()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(h4,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=7)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).FDLayoutConstants;function a(){}o(a,"CoSEConstants");for(var s in i)a[s]=i[s];a.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,a.DEFAULT_RADIAL_SEPARATION=i.DEFAULT_EDGE_LENGTH,a.DEFAULT_COMPONENT_SEPERATION=60,a.TILE=!0,a.TILING_PADDING_VERTICAL=10,a.TILING_PADDING_HORIZONTAL=10,a.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutEdge;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEEdge"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraph;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEGraph"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraphManager;function a(l){i.call(this,l)}o(a,"CoSEGraphManager"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutNode,a=n(0).IMath;function s(u,h,f,d){i.call(this,u,h,f,d)}o(s,"CoSENode"),s.prototype=Object.create(i.prototype);for(var l in i)s[l]=i[l];s.prototype.move=function(){var u=this.graphManager.getLayout();this.displacementX=u.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=u.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementX=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementX)),Math.abs(this.displacementY)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementY=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),u.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},s.prototype.propogateDisplacementToChildren=function(u,h){for(var f=this.getChild().getNodes(),d,p=0;p<f.length;p++)d=f[p],d.getChild()==null?(d.moveBy(u,h),d.displacementX+=u,d.displacementY+=h):d.propogateDisplacementToChildren(u,h)},s.prototype.setPred1=function(u){this.pred1=u},s.prototype.getPred1=function(){return pred1},s.prototype.getPred2=function(){return pred2},s.prototype.setNext=function(u){this.next=u},s.prototype.getNext=function(){return next},s.prototype.setProcessed=function(u){this.processed=u},s.prototype.isProcessed=function(){return processed},e.exports=s},function(e,r,n){"use strict";var i=n(0).FDLayout,a=n(4),s=n(3),l=n(5),u=n(2),h=n(1),f=n(0).FDLayoutConstants,d=n(0).LayoutConstants,p=n(0).Point,m=n(0).PointD,g=n(0).Layout,y=n(0).Integer,v=n(0).IGeometry,x=n(0).LGraph,b=n(0).Transform;function w(){i.call(this),this.toBeTiled={}}o(w,"CoSELayout"),w.prototype=Object.create(i.prototype);for(var C in i)w[C]=i[C];w.prototype.newGraphManager=function(){var T=new a(this);return this.graphManager=T,T},w.prototype.newGraph=function(T){return new s(null,this.graphManager,T)},w.prototype.newNode=function(T){return new l(this.graphManager,T)},w.prototype.newEdge=function(T){return new u(null,null,T)},w.prototype.initParameters=function(){i.prototype.initParameters.call(this,arguments),this.isSubLayout||(h.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=h.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=h.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.springConstant=f.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=f.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=f.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=f.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=f.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=f.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1,this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/f.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=f.CONVERGENCE_CHECK_PERIOD/this.maxIterations,this.coolingAdjuster=1)},w.prototype.layout=function(){var T=d.DEFAULT_CREATE_BENDS_AS_NEEDED;return T&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},w.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(h.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var E=new Set(this.getAllNodes()),A=this.nodesWithGravity.filter(function(I){return E.has(I)});this.graphManager.setAllNodesToApplyGravitation(A)}}else{var T=this.getFlatForest();if(T.length>0)this.positionNodesRadially(T);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var E=new Set(this.getAllNodes()),A=this.nodesWithGravity.filter(function(S){return E.has(S)});this.graphManager.setAllNodesToApplyGravitation(A),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},w.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%f.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var T=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(_){return T.has(_)});this.graphManager.setAllNodesToApplyGravitation(E),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var A=!this.isTreeGrowing&&!this.isGrowthFinished,S=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(A,S),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},w.prototype.getPositionsData=function(){for(var T=this.graphManager.getAllNodes(),E={},A=0;A<T.length;A++){var S=T[A].rect,_=T[A].id;E[_]={id:_,x:S.getCenterX(),y:S.getCenterY(),w:S.width,h:S.height}}return E},w.prototype.runSpringEmbedder=function(){this.initialAnimationPeriod=25,this.animationPeriod=this.initialAnimationPeriod;var T=!1;if(f.ANIMATE==="during")this.emit("layoutstarted");else{for(;!T;)T=this.tick();this.graphManager.updateBounds()}},w.prototype.calculateNodesToApplyGravitationTo=function(){var T=[],E,A=this.graphManager.getGraphs(),S=A.length,_;for(_=0;_<S;_++)E=A[_],E.updateConnected(),E.isConnected||(T=T.concat(E.getNodes()));return T},w.prototype.createBendpoints=function(){var T=[];T=T.concat(this.graphManager.getAllEdges());var E=new Set,A;for(A=0;A<T.length;A++){var S=T[A];if(!E.has(S)){var _=S.getSource(),I=S.getTarget();if(_==I)S.getBendpoints().push(new m),S.getBendpoints().push(new m),this.createDummyNodesForBendpoints(S),E.add(S);else{var D=[];if(D=D.concat(_.getEdgeListToNode(I)),D=D.concat(I.getEdgeListToNode(_)),!E.has(D[0])){if(D.length>1){var k;for(k=0;k<D.length;k++){var L=D[k];L.getBendpoints().push(new m),this.createDummyNodesForBendpoints(L)}}D.forEach(function(R){E.add(R)})}}}if(E.size==T.length)break}},w.prototype.positionNodesRadially=function(T){for(var E=new p(0,0),A=Math.ceil(Math.sqrt(T.length)),S=0,_=0,I=0,D=new m(0,0),k=0;k<T.length;k++){k%A==0&&(I=0,_=S,k!=0&&(_+=h.DEFAULT_COMPONENT_SEPERATION),S=0);var L=T[k],R=g.findCenterOfTree(L);E.x=I,E.y=_,D=w.radialLayout(L,R,E),D.y>S&&(S=Math.floor(D.y)),I=Math.floor(D.x+h.DEFAULT_COMPONENT_SEPERATION)}this.transform(new m(d.WORLD_CENTER_X-D.x/2,d.WORLD_CENTER_Y-D.y/2))},w.radialLayout=function(T,E,A){var S=Math.max(this.maxDiagonalInTree(T),h.DEFAULT_RADIAL_SEPARATION);w.branchRadialLayout(E,null,0,359,0,S);var _=x.calculateBounds(T),I=new b;I.setDeviceOrgX(_.getMinX()),I.setDeviceOrgY(_.getMinY()),I.setWorldOrgX(A.x),I.setWorldOrgY(A.y);for(var D=0;D<T.length;D++){var k=T[D];k.transform(I)}var L=new m(_.getMaxX(),_.getMaxY());return I.inverseTransformPoint(L)},w.branchRadialLayout=function(T,E,A,S,_,I){var D=(S-A+1)/2;D<0&&(D+=180);var k=(D+A)%360,L=k*v.TWO_PI/360,R=Math.cos(L),O=_*Math.cos(L),M=_*Math.sin(L);T.setCenter(O,M);var B=[];B=B.concat(T.getEdges());var F=B.length;E!=null&&F--;for(var P=0,z=B.length,$,H=T.getEdgesBetween(E);H.length>1;){var Q=H[0];H.splice(0,1);var j=B.indexOf(Q);j>=0&&B.splice(j,1),z--,F--}E!=null?$=(B.indexOf(H[0])+1)%z:$=0;for(var ie=Math.abs(S-A)/F,ne=$;P!=F;ne=++ne%z){var le=B[ne].getOtherEnd(T);if(le!=E){var he=(A+P*ie)%360,K=(he+ie)%360;w.branchRadialLayout(le,T,he,K,_+I,I),P++}}},w.maxDiagonalInTree=function(T){for(var E=y.MIN_VALUE,A=0;A<T.length;A++){var S=T[A],_=S.getDiagonal();_>E&&(E=_)}return E},w.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},w.prototype.groupZeroDegreeMembers=function(){var T=this,E={};this.memberGroups={},this.idToDummyNode={};for(var A=[],S=this.graphManager.getAllNodes(),_=0;_<S.length;_++){var I=S[_],D=I.getParent();this.getNodeDegreeWithChildren(I)===0&&(D.id==null||!this.getToBeTiled(D))&&A.push(I)}for(var _=0;_<A.length;_++){var I=A[_],k=I.getParent().id;typeof E[k]>"u"&&(E[k]=[]),E[k]=E[k].concat(I)}Object.keys(E).forEach(function(L){if(E[L].length>1){var R="DummyCompound_"+L;T.memberGroups[R]=E[L];var O=E[L][0].getParent(),M=new l(T.graphManager);M.id=R,M.paddingLeft=O.paddingLeft||0,M.paddingRight=O.paddingRight||0,M.paddingBottom=O.paddingBottom||0,M.paddingTop=O.paddingTop||0,T.idToDummyNode[R]=M;var B=T.getGraphManager().add(T.newGraph(),M),F=O.getChild();F.add(M);for(var P=0;P<E[L].length;P++){var z=E[L][P];F.remove(z),B.add(z)}}})},w.prototype.clearCompounds=function(){var T={},E={};this.performDFSOnCompounds();for(var A=0;A<this.compoundOrder.length;A++)E[this.compoundOrder[A].id]=this.compoundOrder[A],T[this.compoundOrder[A].id]=[].concat(this.compoundOrder[A].getChild().getNodes()),this.graphManager.remove(this.compoundOrder[A].getChild()),this.compoundOrder[A].child=null;this.graphManager.resetAllNodes(),this.tileCompoundMembers(T,E)},w.prototype.clearZeroDegreeMembers=function(){var T=this,E=this.tiledZeroDegreePack=[];Object.keys(this.memberGroups).forEach(function(A){var S=T.idToDummyNode[A];E[A]=T.tileNodes(T.memberGroups[A],S.paddingLeft+S.paddingRight),S.rect.width=E[A].width,S.rect.height=E[A].height})},w.prototype.repopulateCompounds=function(){for(var T=this.compoundOrder.length-1;T>=0;T--){var E=this.compoundOrder[T],A=E.id,S=E.paddingLeft,_=E.paddingTop;this.adjustLocations(this.tiledMemberPack[A],E.rect.x,E.rect.y,S,_)}},w.prototype.repopulateZeroDegreeMembers=function(){var T=this,E=this.tiledZeroDegreePack;Object.keys(E).forEach(function(A){var S=T.idToDummyNode[A],_=S.paddingLeft,I=S.paddingTop;T.adjustLocations(E[A],S.rect.x,S.rect.y,_,I)})},w.prototype.getToBeTiled=function(T){var E=T.id;if(this.toBeTiled[E]!=null)return this.toBeTiled[E];var A=T.getChild();if(A==null)return this.toBeTiled[E]=!1,!1;for(var S=A.getNodes(),_=0;_<S.length;_++){var I=S[_];if(this.getNodeDegree(I)>0)return this.toBeTiled[E]=!1,!1;if(I.getChild()==null){this.toBeTiled[I.id]=!1;continue}if(!this.getToBeTiled(I))return this.toBeTiled[E]=!1,!1}return this.toBeTiled[E]=!0,!0},w.prototype.getNodeDegree=function(T){for(var E=T.id,A=T.getEdges(),S=0,_=0;_<A.length;_++){var I=A[_];I.getSource().id!==I.getTarget().id&&(S=S+1)}return S},w.prototype.getNodeDegreeWithChildren=function(T){var E=this.getNodeDegree(T);if(T.getChild()==null)return E;for(var A=T.getChild().getNodes(),S=0;S<A.length;S++){var _=A[S];E+=this.getNodeDegreeWithChildren(_)}return E},w.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},w.prototype.fillCompexOrderByDFS=function(T){for(var E=0;E<T.length;E++){var A=T[E];A.getChild()!=null&&this.fillCompexOrderByDFS(A.getChild().getNodes()),this.getToBeTiled(A)&&this.compoundOrder.push(A)}},w.prototype.adjustLocations=function(T,E,A,S,_){E+=S,A+=_;for(var I=E,D=0;D<T.rows.length;D++){var k=T.rows[D];E=I;for(var L=0,R=0;R<k.length;R++){var O=k[R];O.rect.x=E,O.rect.y=A,E+=O.rect.width+T.horizontalPadding,O.rect.height>L&&(L=O.rect.height)}A+=L+T.verticalPadding}},w.prototype.tileCompoundMembers=function(T,E){var A=this;this.tiledMemberPack=[],Object.keys(T).forEach(function(S){var _=E[S];A.tiledMemberPack[S]=A.tileNodes(T[S],_.paddingLeft+_.paddingRight),_.rect.width=A.tiledMemberPack[S].width,_.rect.height=A.tiledMemberPack[S].height})},w.prototype.tileNodes=function(T,E){var A=h.TILING_PADDING_VERTICAL,S=h.TILING_PADDING_HORIZONTAL,_={rows:[],rowWidth:[],rowHeight:[],width:0,height:E,verticalPadding:A,horizontalPadding:S};T.sort(function(k,L){return k.rect.width*k.rect.height>L.rect.width*L.rect.height?-1:k.rect.width*k.rect.height<L.rect.width*L.rect.height?1:0});for(var I=0;I<T.length;I++){var D=T[I];_.rows.length==0?this.insertNodeToRow(_,D,0,E):this.canAddHorizontal(_,D.rect.width,D.rect.height)?this.insertNodeToRow(_,D,this.getShortestRowIndex(_),E):this.insertNodeToRow(_,D,_.rows.length,E),this.shiftToLastRow(_)}return _},w.prototype.insertNodeToRow=function(T,E,A,S){var _=S;if(A==T.rows.length){var I=[];T.rows.push(I),T.rowWidth.push(_),T.rowHeight.push(0)}var D=T.rowWidth[A]+E.rect.width;T.rows[A].length>0&&(D+=T.horizontalPadding),T.rowWidth[A]=D,T.width<D&&(T.width=D);var k=E.rect.height;A>0&&(k+=T.verticalPadding);var L=0;k>T.rowHeight[A]&&(L=T.rowHeight[A],T.rowHeight[A]=k,L=T.rowHeight[A]-L),T.height+=L,T.rows[A].push(E)},w.prototype.getShortestRowIndex=function(T){for(var E=-1,A=Number.MAX_VALUE,S=0;S<T.rows.length;S++)T.rowWidth[S]<A&&(E=S,A=T.rowWidth[S]);return E},w.prototype.getLongestRowIndex=function(T){for(var E=-1,A=Number.MIN_VALUE,S=0;S<T.rows.length;S++)T.rowWidth[S]>A&&(E=S,A=T.rowWidth[S]);return E},w.prototype.canAddHorizontal=function(T,E,A){var S=this.getShortestRowIndex(T);if(S<0)return!0;var _=T.rowWidth[S];if(_+T.horizontalPadding+E<=T.width)return!0;var I=0;T.rowHeight[S]<A&&S>0&&(I=A+T.verticalPadding-T.rowHeight[S]);var D;T.width-_>=E+T.horizontalPadding?D=(T.height+I)/(_+E+T.horizontalPadding):D=(T.height+I)/T.width,I=A+T.verticalPadding;var k;return T.width<E?k=(T.height+I)/E:k=(T.height+I)/T.width,k<1&&(k=1/k),D<1&&(D=1/D),D<k},w.prototype.shiftToLastRow=function(T){var E=this.getLongestRowIndex(T),A=T.rowWidth.length-1,S=T.rows[E],_=S[S.length-1],I=_.width+T.horizontalPadding;if(T.width-T.rowWidth[A]>I&&E!=A){S.splice(-1,1),T.rows[A].push(_),T.rowWidth[E]=T.rowWidth[E]-I,T.rowWidth[A]=T.rowWidth[A]+I,T.width=T.rowWidth[instance.getLongestRowIndex(T)];for(var D=Number.MIN_VALUE,k=0;k<S.length;k++)S[k].height>D&&(D=S[k].height);E>0&&(D+=T.verticalPadding);var L=T.rowHeight[E]+T.rowHeight[A];T.rowHeight[E]=D,T.rowHeight[A]<_.height+T.verticalPadding&&(T.rowHeight[A]=_.height+T.verticalPadding);var R=T.rowHeight[E]+T.rowHeight[A];T.height+=R-L,this.shiftToLastRow(T)}},w.prototype.tilingPreLayout=function(){h.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},w.prototype.tilingPostLayout=function(){h.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},w.prototype.reduceTrees=function(){for(var T=[],E=!0,A;E;){var S=this.graphManager.getAllNodes(),_=[];E=!1;for(var I=0;I<S.length;I++)A=S[I],A.getEdges().length==1&&!A.getEdges()[0].isInterGraph&&A.getChild()==null&&(_.push([A,A.getEdges()[0],A.getOwner()]),E=!0);if(E==!0){for(var D=[],k=0;k<_.length;k++)_[k][0].getEdges().length==1&&(D.push(_[k]),_[k][0].getOwner().remove(_[k][0]));T.push(D),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()}}this.prunedNodesAll=T},w.prototype.growTree=function(T){for(var E=T.length,A=T[E-1],S,_=0;_<A.length;_++)S=A[_],this.findPlaceforPrunedNode(S),S[2].add(S[0]),S[2].add(S[1],S[1].source,S[1].target);T.splice(T.length-1,1),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()},w.prototype.findPlaceforPrunedNode=function(T){var E,A,S=T[0];S==T[1].source?A=T[1].target:A=T[1].source;var _=A.startX,I=A.finishX,D=A.startY,k=A.finishY,L=0,R=0,O=0,M=0,B=[L,O,R,M];if(D>0)for(var F=_;F<=I;F++)B[0]+=this.grid[F][D-1].length+this.grid[F][D].length-1;if(I<this.grid.length-1)for(var F=D;F<=k;F++)B[1]+=this.grid[I+1][F].length+this.grid[I][F].length-1;if(k<this.grid[0].length-1)for(var F=_;F<=I;F++)B[2]+=this.grid[F][k+1].length+this.grid[F][k].length-1;if(_>0)for(var F=D;F<=k;F++)B[3]+=this.grid[_-1][F].length+this.grid[_][F].length-1;for(var P=y.MAX_VALUE,z,$,H=0;H<B.length;H++)B[H]<P?(P=B[H],z=1,$=H):B[H]==P&&z++;if(z==3&&P==0)B[0]==0&&B[1]==0&&B[2]==0?E=1:B[0]==0&&B[1]==0&&B[3]==0?E=0:B[0]==0&&B[2]==0&&B[3]==0?E=3:B[1]==0&&B[2]==0&&B[3]==0&&(E=2);else if(z==2&&P==0){var Q=Math.floor(Math.random()*2);B[0]==0&&B[1]==0?Q==0?E=0:E=1:B[0]==0&&B[2]==0?Q==0?E=0:E=2:B[0]==0&&B[3]==0?Q==0?E=0:E=3:B[1]==0&&B[2]==0?Q==0?E=1:E=2:B[1]==0&&B[3]==0?Q==0?E=1:E=3:Q==0?E=2:E=3}else if(z==4&&P==0){var Q=Math.floor(Math.random()*4);E=Q}else E=$;E==0?S.setCenter(A.getCenterX(),A.getCenterY()-A.getHeight()/2-f.DEFAULT_EDGE_LENGTH-S.getHeight()/2):E==1?S.setCenter(A.getCenterX()+A.getWidth()/2+f.DEFAULT_EDGE_LENGTH+S.getWidth()/2,A.getCenterY()):E==2?S.setCenter(A.getCenterX(),A.getCenterY()+A.getHeight()/2+f.DEFAULT_EDGE_LENGTH+S.getHeight()/2):S.setCenter(A.getCenterX()-A.getWidth()/2-f.DEFAULT_EDGE_LENGTH-S.getWidth()/2,A.getCenterY())},e.exports=w},function(e,r,n){"use strict";var i={};i.layoutBase=n(0),i.CoSEConstants=n(1),i.CoSEEdge=n(2),i.CoSEGraph=n(3),i.CoSEGraphManager=n(4),i.CoSELayout=n(6),i.CoSENode=n(5),e.exports=i}])})});var Gge=Mi((f4,_B)=>{"use strict";o(function(e,r){typeof f4=="object"&&typeof _B=="object"?_B.exports=r(AB()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof f4=="object"?f4.cytoscapeCoseBilkent=r(AB()):e.cytoscapeCoseBilkent=r(e.coseBase)},"webpackUniversalModuleDefinition")(f4,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=1)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).layoutBase.LayoutConstants,a=n(0).layoutBase.FDLayoutConstants,s=n(0).CoSEConstants,l=n(0).CoSELayout,u=n(0).CoSENode,h=n(0).layoutBase.PointD,f=n(0).layoutBase.DimensionD,d={ready:o(function(){},"ready"),stop:o(function(){},"stop"),quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function p(v,x){var b={};for(var w in v)b[w]=v[w];for(var w in x)b[w]=x[w];return b}o(p,"extend");function m(v){this.options=p(d,v),g(this.options)}o(m,"_CoSELayout");var g=o(function(x){x.nodeRepulsion!=null&&(s.DEFAULT_REPULSION_STRENGTH=a.DEFAULT_REPULSION_STRENGTH=x.nodeRepulsion),x.idealEdgeLength!=null&&(s.DEFAULT_EDGE_LENGTH=a.DEFAULT_EDGE_LENGTH=x.idealEdgeLength),x.edgeElasticity!=null&&(s.DEFAULT_SPRING_STRENGTH=a.DEFAULT_SPRING_STRENGTH=x.edgeElasticity),x.nestingFactor!=null&&(s.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=x.nestingFactor),x.gravity!=null&&(s.DEFAULT_GRAVITY_STRENGTH=a.DEFAULT_GRAVITY_STRENGTH=x.gravity),x.numIter!=null&&(s.MAX_ITERATIONS=a.MAX_ITERATIONS=x.numIter),x.gravityRange!=null&&(s.DEFAULT_GRAVITY_RANGE_FACTOR=a.DEFAULT_GRAVITY_RANGE_FACTOR=x.gravityRange),x.gravityCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_STRENGTH=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=x.gravityCompound),x.gravityRangeCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=x.gravityRangeCompound),x.initialEnergyOnIncremental!=null&&(s.DEFAULT_COOLING_FACTOR_INCREMENTAL=a.DEFAULT_COOLING_FACTOR_INCREMENTAL=x.initialEnergyOnIncremental),x.quality=="draft"?i.QUALITY=0:x.quality=="proof"?i.QUALITY=2:i.QUALITY=1,s.NODE_DIMENSIONS_INCLUDE_LABELS=a.NODE_DIMENSIONS_INCLUDE_LABELS=i.NODE_DIMENSIONS_INCLUDE_LABELS=x.nodeDimensionsIncludeLabels,s.DEFAULT_INCREMENTAL=a.DEFAULT_INCREMENTAL=i.DEFAULT_INCREMENTAL=!x.randomize,s.ANIMATE=a.ANIMATE=i.ANIMATE=x.animate,s.TILE=x.tile,s.TILING_PADDING_VERTICAL=typeof x.tilingPaddingVertical=="function"?x.tilingPaddingVertical.call():x.tilingPaddingVertical,s.TILING_PADDING_HORIZONTAL=typeof x.tilingPaddingHorizontal=="function"?x.tilingPaddingHorizontal.call():x.tilingPaddingHorizontal},"getUserOptions");m.prototype.run=function(){var v,x,b=this.options,w=this.idToLNode={},C=this.layout=new l,T=this;T.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var E=C.newGraphManager();this.gm=E;var A=this.options.eles.nodes(),S=this.options.eles.edges();this.root=E.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(A),C);for(var _=0;_<S.length;_++){var I=S[_],D=this.idToLNode[I.data("source")],k=this.idToLNode[I.data("target")];if(D!==k&&D.getEdgesBetween(k).length==0){var L=E.add(C.newEdge(),D,k);L.id=I.id()}}var R=o(function(B,F){typeof B=="number"&&(B=F);var P=B.data("id"),z=T.idToLNode[P];return{x:z.getRect().getCenterX(),y:z.getRect().getCenterY()}},"getPositions"),O=o(function M(){for(var B=o(function(){b.fit&&b.cy.fit(b.eles,b.padding),v||(v=!0,T.cy.one("layoutready",b.ready),T.cy.trigger({type:"layoutready",layout:T}))},"afterReposition"),F=T.options.refresh,P,z=0;z<F&&!P;z++)P=T.stopped||T.layout.tick();if(P){C.checkLayoutSuccess()&&!C.isSubLayout&&C.doPostLayout(),C.tilingPostLayout&&C.tilingPostLayout(),C.isLayoutFinished=!0,T.options.eles.nodes().positions(R),B(),T.cy.one("layoutstop",T.options.stop),T.cy.trigger({type:"layoutstop",layout:T}),x&&cancelAnimationFrame(x),v=!1;return}var $=T.layout.getPositionsData();b.eles.nodes().positions(function(H,Q){if(typeof H=="number"&&(H=Q),!H.isParent()){for(var j=H.id(),ie=$[j],ne=H;ie==null&&(ie=$[ne.data("parent")]||$["DummyCompound_"+ne.data("parent")],$[j]=ie,ne=ne.parent()[0],ne!=null););return ie!=null?{x:ie.x,y:ie.y}:{x:H.position("x"),y:H.position("y")}}}),B(),x=requestAnimationFrame(M)},"iterateAnimated");return C.addListener("layoutstarted",function(){T.options.animate==="during"&&(x=requestAnimationFrame(O))}),C.runLayout(),this.options.animate!=="during"&&(T.options.eles.nodes().not(":parent").layoutPositions(T,T.options,R),v=!1),this},m.prototype.getTopMostNodes=function(v){for(var x={},b=0;b<v.length;b++)x[v[b].id()]=!0;var w=v.filter(function(C,T){typeof C=="number"&&(C=T);for(var E=C.parent()[0];E!=null;){if(x[E.id()])return!1;E=E.parent()[0]}return!0});return w},m.prototype.processChildrenList=function(v,x,b){for(var w=x.length,C=0;C<w;C++){var T=x[C],E=T.children(),A,S=T.layoutDimensions({nodeDimensionsIncludeLabels:this.options.nodeDimensionsIncludeLabels});if(T.outerWidth()!=null&&T.outerHeight()!=null?A=v.add(new u(b.graphManager,new h(T.position("x")-S.w/2,T.position("y")-S.h/2),new f(parseFloat(S.w),parseFloat(S.h)))):A=v.add(new u(this.graphManager)),A.id=T.data("id"),A.paddingLeft=parseInt(T.css("padding")),A.paddingTop=parseInt(T.css("padding")),A.paddingRight=parseInt(T.css("padding")),A.paddingBottom=parseInt(T.css("padding")),this.options.nodeDimensionsIncludeLabels&&T.isParent()){var _=T.boundingBox({includeLabels:!0,includeNodes:!1}).w,I=T.boundingBox({includeLabels:!0,includeNodes:!1}).h,D=T.css("text-halign");A.labelWidth=_,A.labelHeight=I,A.labelPos=D}if(this.idToLNode[T.data("id")]=A,isNaN(A.rect.x)&&(A.rect.x=0),isNaN(A.rect.y)&&(A.rect.y=0),E!=null&&E.length>0){var k;k=b.getGraphManager().add(b.newGraph(),A),this.processChildrenList(k,E,b)}}},m.prototype.stop=function(){return this.stopped=!0,this};var y=o(function(x){x("layout","cose-bilkent",m)},"register");typeof cytoscape<"u"&&y(cytoscape),e.exports=y}])})});function JZe(t,e,r,n,i){return t.insert("polygon",":first-child").attr("points",n.map(function(a){return a.x+","+a.y}).join(" ")).attr("transform","translate("+(i.width-e)/2+", "+r+")")}var YZe,XZe,jZe,KZe,QZe,ZZe,eJe,tJe,Vge,Uge,Hge=N(()=>{"use strict";to();ir();YZe=12,XZe=o(function(t,e,r,n){e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 ${r.height-5} v${-r.height+2*5} q0,-5 5,-5 h${r.width-2*5} q5,0 5,5 v${r.height-5} H0 Z`),e.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",r.height).attr("x2",r.width).attr("y2",r.height)},"defaultBkg"),jZe=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("width",r.width)},"rectBkg"),KZe=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n,s=.25*n,l=.35*n,u=.2*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 0 0,1 ${n*.25},${-1*n*.1}
2156 + a${l},${l} 1 0,1 ${n*.4},${-1*n*.1}
2157 + a${s},${s} 1 0,1 ${n*.35},${1*n*.2}
2158 +
2159 + a${a},${a} 1 0,1 ${n*.15},${1*i*.35}
2160 + a${u},${u} 1 0,1 ${-1*n*.15},${1*i*.65}
2161 +
2162 + a${s},${a} 1 0,1 ${-1*n*.25},${n*.15}
2163 + a${l},${l} 1 0,1 ${-1*n*.5},0
2164 + a${a},${a} 1 0,1 ${-1*n*.25},${-1*n*.15}
2165 +
2166 + a${a},${a} 1 0,1 ${-1*n*.1},${-1*i*.35}
2167 + a${u},${u} 1 0,1 ${n*.1},${-1*i*.65}
2168 +
2169 + H0 V0 Z`)},"cloudBkg"),QZe=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 1 0,0 ${n*.25},${-1*i*.1}
2170 + a${a},${a} 1 0,0 ${n*.25},0
2171 + a${a},${a} 1 0,0 ${n*.25},0
2172 + a${a},${a} 1 0,0 ${n*.25},${1*i*.1}
2173 +
2174 + a${a},${a} 1 0,0 ${n*.15},${1*i*.33}
2175 + a${a*.8},${a*.8} 1 0,0 0,${1*i*.34}
2176 + a${a},${a} 1 0,0 ${-1*n*.15},${1*i*.33}
2177 +
2178 + a${a},${a} 1 0,0 ${-1*n*.25},${i*.15}
2179 + a${a},${a} 1 0,0 ${-1*n*.25},0
2180 + a${a},${a} 1 0,0 ${-1*n*.25},0
2181 + a${a},${a} 1 0,0 ${-1*n*.25},${-1*i*.15}
2182 +
2183 + a${a},${a} 1 0,0 ${-1*n*.1},${-1*i*.33}
2184 + a${a*.8},${a*.8} 1 0,0 0,${-1*i*.34}
2185 + a${a},${a} 1 0,0 ${n*.1},${-1*i*.33}
2186 +
2187 + H0 V0 Z`)},"bangBkg"),ZZe=o(function(t,e,r){e.append("circle").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("r",r.width/2)},"circleBkg");o(JZe,"insertPolygonShape");eJe=o(function(t,e,r){let n=r.height,a=n/4,s=r.width-r.padding+2*a,l=[{x:a,y:0},{x:s-a,y:0},{x:s,y:-n/2},{x:s-a,y:-n},{x:a,y:-n},{x:0,y:-n/2}];JZe(e,s,n,l,r)},"hexagonBkg"),tJe=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("rx",r.padding).attr("ry",r.padding).attr("width",r.width)},"roundedRectBkg"),Vge=o(async function(t,e,r,n,i){let a=i.htmlLabels,s=n%(YZe-1),l=e.append("g");r.section=s;let u="section-"+s;s<0&&(u+=" section-root"),l.attr("class",(r.class?r.class+" ":"")+"mindmap-node "+u);let h=l.append("g"),f=l.append("g"),d=r.descr.replace(/(<br\/*>)/g,`
2188 +`);await Hn(f,d,{useHtmlLabels:a,width:r.width,classes:"mindmap-node-label"},i),a||f.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");let p=f.node().getBBox(),[m]=Bo(i.fontSize);if(r.height=p.height+m*1.1*.5+r.padding,r.width=p.width+2*r.padding,r.icon)if(r.type===t.nodeType.CIRCLE)r.height+=50,r.width+=50,l.append("foreignObject").attr("height","50px").attr("width",r.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+r.width/2+", "+(r.height/2-1.5*r.padding)+")");else{r.width+=50;let g=r.height;r.height=Math.max(g,60);let y=Math.abs(r.height-g);l.append("foreignObject").attr("width","60px").attr("height",r.height).attr("style","text-align: center;margin-top:"+y/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+(25+r.width/2)+", "+(y/2+r.padding/2)+")")}else if(a){let g=(r.width-p.width)/2,y=(r.height-p.height)/2;f.attr("transform","translate("+g+", "+y+")")}else{let g=r.width/2,y=r.padding/2;f.attr("transform","translate("+g+", "+y+")")}switch(r.type){case t.nodeType.DEFAULT:XZe(t,h,r,s);break;case t.nodeType.ROUNDED_RECT:tJe(t,h,r,s);break;case t.nodeType.RECT:jZe(t,h,r,s);break;case t.nodeType.CIRCLE:h.attr("transform","translate("+r.width/2+", "+ +r.height/2+")"),ZZe(t,h,r,s);break;case t.nodeType.CLOUD:KZe(t,h,r,s);break;case t.nodeType.BANG:QZe(t,h,r,s);break;case t.nodeType.HEXAGON:eJe(t,h,r,s);break}return t.setElementForId(r.id,l),r.height},"drawNode"),Uge=o(function(t,e){let r=t.getElementById(e.id),n=e.x||0,i=e.y||0;r.attr("transform","translate("+n+","+i+")")},"positionNode")});async function qge(t,e,r,n,i){await Vge(t,e,r,n,i),r.children&&await Promise.all(r.children.map((a,s)=>qge(t,e,a,n<0?s:n,i)))}function rJe(t,e){e.edges().map((r,n)=>{let i=r.data();if(r[0]._private.bodyBounds){let a=r[0]._private.rscratch;Y.trace("Edge: ",n,i),t.insert("path").attr("d",`M ${a.startX},${a.startY} L ${a.midX},${a.midY} L${a.endX},${a.endY} `).attr("class","edge section-edge-"+i.section+" edge-depth-"+i.depth)}})}function Yge(t,e,r,n){e.add({group:"nodes",data:{id:t.id.toString(),labelText:t.descr,height:t.height,width:t.width,level:n,nodeId:t.id,padding:t.padding,type:t.type},position:{x:t.x,y:t.y}}),t.children&&t.children.forEach(i=>{Yge(i,e,r,n+1),e.add({group:"edges",data:{id:`${t.id}_${i.id}`,source:t.id,target:i.id,depth:n,section:i.section}})})}function nJe(t,e){return new Promise(r=>{let n=Ge("body").append("div").attr("id","cy").attr("style","display:none"),i=rl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});n.remove(),Yge(t,i,e,0),i.nodes().forEach(function(a){a.layoutDimensions=()=>{let s=a.data();return{w:s.width,h:s.height}}}),i.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),i.ready(a=>{Y.info("Ready",a),r(i)})})}function iJe(t,e){e.nodes().map((r,n)=>{let i=r.data();i.x=r.position().x,i.y=r.position().y,Uge(t,i);let a=t.getElementById(i.nodeId);Y.info("Id:",n,"Position: (",r.position().x,", ",r.position().y,")",i),a.attr("transform",`translate(${r.position().x-i.width/2}, ${r.position().y-i.height/2})`),a.attr("attr",`apa-${n})`)})}var Wge,aJe,Xge,jge=N(()=>{"use strict";kB();Wge=Sa(Gge(),1);dr();zt();vt();Vc();Ei();Hge();Ya();rl.use(Wge.default);o(qge,"drawNodes");o(rJe,"drawEdges");o(Yge,"addNodes");o(nJe,"layoutMindmap");o(iJe,"positionNodes");aJe=o(async(t,e,r,n)=>{Y.debug(`Rendering mindmap diagram
2189 +`+t);let i=n.db,a=i.getMindmap();if(!a)return;let s=me();s.htmlLabels=!1;let l=sa(e),u=l.append("g");u.attr("class","mindmap-edges");let h=l.append("g");h.attr("class","mindmap-nodes"),await qge(i,h,a,-1,s);let f=await nJe(a,s);rJe(u,f),iJe(i,f),Ao(void 0,l,s.mindmap?.padding??or.mindmap.padding,s.mindmap?.useMaxWidth??or.mindmap.useMaxWidth)},"draw"),Xge={draw:aJe}});var sJe,oJe,Kge,Qge=N(()=>{"use strict";Ys();sJe=o(t=>{let e="";for(let r=0;r<t.THEME_COLOR_LIMIT;r++)t["lineColor"+r]=t["lineColor"+r]||t["cScaleInv"+r],ca(t["lineColor"+r])?t["lineColor"+r]=Dt(t["lineColor"+r],20):t["lineColor"+r]=Ot(t["lineColor"+r],20);for(let r=0;r<t.THEME_COLOR_LIMIT;r++){let n=""+(17-3*r);e+=`
2190 + .section-${r-1} rect, .section-${r-1} path, .section-${r-1} circle, .section-${r-1} polygon, .section-${r-1} path {
2191 + fill: ${t["cScale"+r]};
2192 + }
2193 + .section-${r-1} text {
2194 + fill: ${t["cScaleLabel"+r]};
2195 + }
2196 + .node-icon-${r-1} {
2197 + font-size: 40px;
2198 + color: ${t["cScaleLabel"+r]};
2199 + }
2200 + .section-edge-${r-1}{
2201 + stroke: ${t["cScale"+r]};
2202 + }
2203 + .edge-depth-${r-1}{
2204 + stroke-width: ${n};
2205 + }
2206 + .section-${r-1} line {
2207 + stroke: ${t["cScaleInv"+r]} ;
2208 + stroke-width: 3;
2209 + }
2210 +
2211 + .disabled, .disabled circle, .disabled text {
2212 + fill: lightgray;
2213 + }
2214 + .disabled text {
2215 + fill: #efefef;
2216 + }
2217 + `}return e},"genSections"),oJe=o(t=>`
2218 + .edge {
2219 + stroke-width: 3;
2220 + }
2221 + ${sJe(t)}
2222 + .section-root rect, .section-root path, .section-root circle, .section-root polygon {
2223 + fill: ${t.git0};
2224 + }
2225 + .section-root text {
2226 + fill: ${t.gitBranchLabel0};
2227 + }
2228 + .icon-container {
2229 + height:100%;
2230 + display: flex;
2231 + justify-content: center;
2232 + align-items: center;
2233 + }
2234 + .edge {
2235 + fill: none;
2236 + }
2237 + .mindmap-node-label {
2238 + dy: 1em;
2239 + alignment-baseline: middle;
2240 + text-anchor: middle;
2241 + dominant-baseline: middle;
2242 + text-align: center;
2243 + }
2244 +`,"getStyles"),Kge=oJe});var Zge={};hr(Zge,{diagram:()=>lJe});var lJe,Jge=N(()=>{"use strict";Spe();_pe();jge();Qge();lJe={db:Ape,renderer:Xge,parser:Epe,styles:Kge}});var DB,r1e,n1e=N(()=>{"use strict";DB=function(){var t=o(function(A,S,_,I){for(_=_||{},I=A.length;I--;_[A[I]]=S);return _},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,31],g=[6,7,11,24],y=[1,6,13,16,17,20,23],v=[1,35],x=[1,36],b=[1,6,7,11,13,16,17,20,23],w=[1,38],C={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,KANBAN:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,shapeData:15,ICON:16,CLASS:17,nodeWithId:18,nodeWithoutId:19,NODE_DSTART:20,NODE_DESCR:21,NODE_DEND:22,NODE_ID:23,SHAPE_DATA:24,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"KANBAN",11:"EOF",13:"SPACELIST",16:"ICON",17:"CLASS",20:"NODE_DSTART",21:"NODE_DESCR",22:"NODE_DEND",23:"NODE_ID",24:"SHAPE_DATA"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,3],[12,2],[12,2],[12,2],[12,1],[12,2],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[19,3],[18,1],[18,4],[15,2],[15,1]],performAction:o(function(S,_,I,D,k,L,R){var O=L.length-1;switch(k){case 6:case 7:return D;case 8:D.getLogger().trace("Stop NL ");break;case 9:D.getLogger().trace("Stop EOF ");break;case 11:D.getLogger().trace("Stop NL2 ");break;case 12:D.getLogger().trace("Stop EOF2 ");break;case 15:D.getLogger().info("Node: ",L[O-1].id),D.addNode(L[O-2].length,L[O-1].id,L[O-1].descr,L[O-1].type,L[O]);break;case 16:D.getLogger().info("Node: ",L[O].id),D.addNode(L[O-1].length,L[O].id,L[O].descr,L[O].type);break;case 17:D.getLogger().trace("Icon: ",L[O]),D.decorateNode({icon:L[O]});break;case 18:case 23:D.decorateNode({class:L[O]});break;case 19:D.getLogger().trace("SPACELIST");break;case 20:D.getLogger().trace("Node: ",L[O-1].id),D.addNode(0,L[O-1].id,L[O-1].descr,L[O-1].type,L[O]);break;case 21:D.getLogger().trace("Node: ",L[O].id),D.addNode(0,L[O].id,L[O].descr,L[O].type);break;case 22:D.decorateNode({icon:L[O]});break;case 27:D.getLogger().trace("node found ..",L[O-2]),this.$={id:L[O-1],descr:L[O-1],type:D.getType(L[O-2],L[O])};break;case 28:this.$={id:L[O],descr:L[O],type:0};break;case 29:D.getLogger().trace("node found ..",L[O-3]),this.$={id:L[O-3],descr:L[O-1],type:D.getType(L[O-2],L[O])};break;case 30:this.$=L[O-1]+L[O];break;case 31:this.$=L[O];break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:r,9:22,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:h,7:f,10:23,11:d},t(p,[2,24],{18:17,19:18,14:27,16:[1,28],17:[1,29],20:s,23:l}),t(p,[2,19]),t(p,[2,21],{15:30,24:m}),t(p,[2,22]),t(p,[2,23]),t(g,[2,25]),t(g,[2,26]),t(g,[2,28],{20:[1,32]}),{21:[1,33]},{6:h,7:f,10:34,11:d},{1:[2,7],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(y,[2,14],{7:v,11:x}),t(b,[2,8]),t(b,[2,9]),t(b,[2,10]),t(p,[2,16],{15:37,24:m}),t(p,[2,17]),t(p,[2,18]),t(p,[2,20],{24:w}),t(g,[2,31]),{21:[1,39]},{22:[1,40]},t(y,[2,13],{7:v,11:x}),t(b,[2,11]),t(b,[2,12]),t(p,[2,15],{24:w}),t(g,[2,30]),{22:[1,41]},t(g,[2,27]),t(g,[2,29])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(S,_){if(_.recoverable)this.trace(S);else{var I=new Error(S);throw I.hash=_,I}},"parseError"),parse:o(function(S){var _=this,I=[0],D=[],k=[null],L=[],R=this.table,O="",M=0,B=0,F=0,P=2,z=1,$=L.slice.call(arguments,1),H=Object.create(this.lexer),Q={yy:{}};for(var j in this.yy)Object.prototype.hasOwnProperty.call(this.yy,j)&&(Q.yy[j]=this.yy[j]);H.setInput(S,Q.yy),Q.yy.lexer=H,Q.yy.parser=this,typeof H.yylloc>"u"&&(H.yylloc={});var ie=H.yylloc;L.push(ie);var ne=H.options&&H.options.ranges;typeof Q.yy.parseError=="function"?this.parseError=Q.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function le(ze){I.length=I.length-2*ze,k.length=k.length-ze,L.length=L.length-ze}o(le,"popStack");function he(){var ze;return ze=D.pop()||H.lex()||z,typeof ze!="number"&&(ze instanceof Array&&(D=ze,ze=D.pop()),ze=_.symbols_[ze]||ze),ze}o(he,"lex");for(var K,X,te,J,se,ue,Z={},Se,ce,ae,Oe;;){if(te=I[I.length-1],this.defaultActions[te]?J=this.defaultActions[te]:((K===null||typeof K>"u")&&(K=he()),J=R[te]&&R[te][K]),typeof J>"u"||!J.length||!J[0]){var ge="";Oe=[];for(Se in R[te])this.terminals_[Se]&&Se>P&&Oe.push("'"+this.terminals_[Se]+"'");H.showPosition?ge="Parse error on line "+(M+1)+`:
2245 +`+H.showPosition()+`
2246 +Expecting `+Oe.join(", ")+", got '"+(this.terminals_[K]||K)+"'":ge="Parse error on line "+(M+1)+": Unexpected "+(K==z?"end of input":"'"+(this.terminals_[K]||K)+"'"),this.parseError(ge,{text:H.match,token:this.terminals_[K]||K,line:H.yylineno,loc:ie,expected:Oe})}if(J[0]instanceof Array&&J.length>1)throw new Error("Parse Error: multiple actions possible at state: "+te+", token: "+K);switch(J[0]){case 1:I.push(K),k.push(H.yytext),L.push(H.yylloc),I.push(J[1]),K=null,X?(K=X,X=null):(B=H.yyleng,O=H.yytext,M=H.yylineno,ie=H.yylloc,F>0&&F--);break;case 2:if(ce=this.productions_[J[1]][1],Z.$=k[k.length-ce],Z._$={first_line:L[L.length-(ce||1)].first_line,last_line:L[L.length-1].last_line,first_column:L[L.length-(ce||1)].first_column,last_column:L[L.length-1].last_column},ne&&(Z._$.range=[L[L.length-(ce||1)].range[0],L[L.length-1].range[1]]),ue=this.performAction.apply(Z,[O,B,M,Q.yy,J[1],k,L].concat($)),typeof ue<"u")return ue;ce&&(I=I.slice(0,-1*ce*2),k=k.slice(0,-1*ce),L=L.slice(0,-1*ce)),I.push(this.productions_[J[1]][0]),k.push(Z.$),L.push(Z._$),ae=R[I[I.length-2]][I[I.length-1]],I.push(ae);break;case 3:return!0}}return!0},"parse")},T=function(){var A={EOF:1,parseError:o(function(_,I){if(this.yy.parser)this.yy.parser.parseError(_,I);else throw new Error(_)},"parseError"),setInput:o(function(S,_){return this.yy=_||this.yy||{},this._input=S,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var S=this._input[0];this.yytext+=S,this.yyleng++,this.offset++,this.match+=S,this.matched+=S;var _=S.match(/(?:\r\n?|\n).*/g);return _?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),S},"input"),unput:o(function(S){var _=S.length,I=S.split(/(?:\r\n?|\n)/g);this._input=S+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-_),this.offset-=_;var D=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),I.length-1&&(this.yylineno-=I.length-1);var k=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:I?(I.length===D.length?this.yylloc.first_column:0)+D[D.length-I.length].length-I[0].length:this.yylloc.first_column-_},this.options.ranges&&(this.yylloc.range=[k[0],k[0]+this.yyleng-_]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
2247 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(S){this.unput(this.match.slice(S))},"less"),pastInput:o(function(){var S=this.matched.substr(0,this.matched.length-this.match.length);return(S.length>20?"...":"")+S.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var S=this.match;return S.length<20&&(S+=this._input.substr(0,20-S.length)),(S.substr(0,20)+(S.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var S=this.pastInput(),_=new Array(S.length+1).join("-");return S+this.upcomingInput()+`
2248 +`+_+"^"},"showPosition"),test_match:o(function(S,_){var I,D,k;if(this.options.backtrack_lexer&&(k={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(k.yylloc.range=this.yylloc.range.slice(0))),D=S[0].match(/(?:\r\n?|\n).*/g),D&&(this.yylineno+=D.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:D?D[D.length-1].length-D[D.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+S[0].length},this.yytext+=S[0],this.match+=S[0],this.matches=S,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(S[0].length),this.matched+=S[0],I=this.performAction.call(this,this.yy,this,_,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),I)return I;if(this._backtrack){for(var L in k)this[L]=k[L];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var S,_,I,D;this._more||(this.yytext="",this.match="");for(var k=this._currentRules(),L=0;L<k.length;L++)if(I=this._input.match(this.rules[k[L]]),I&&(!_||I[0].length>_[0].length)){if(_=I,D=L,this.options.backtrack_lexer){if(S=this.test_match(I,k[L]),S!==!1)return S;if(this._backtrack){_=!1;continue}else return!1}else if(!this.options.flex)break}return _?(S=this.test_match(_,k[D]),S!==!1?S:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
2249 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var _=this.next();return _||this.lex()},"lex"),begin:o(function(_){this.conditionStack.push(_)},"begin"),popState:o(function(){var _=this.conditionStack.length-1;return _>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(_){return _=this.conditionStack.length-1-Math.abs(_||0),_>=0?this.conditionStack[_]:"INITIAL"},"topState"),pushState:o(function(_){this.begin(_)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(_,I,D,k){var L=k;switch(D){case 0:return this.pushState("shapeData"),I.yytext="",24;break;case 1:return this.pushState("shapeDataStr"),24;break;case 2:return this.popState(),24;break;case 3:let R=/\n\s*/g;return I.yytext=I.yytext.replace(R,"<br/>"),24;break;case 4:return 24;case 5:this.popState();break;case 6:return _.getLogger().trace("Found comment",I.yytext),6;break;case 7:return 8;case 8:this.begin("CLASS");break;case 9:return this.popState(),17;break;case 10:this.popState();break;case 11:_.getLogger().trace("Begin icon"),this.begin("ICON");break;case 12:return _.getLogger().trace("SPACELINE"),6;break;case 13:return 7;case 14:return 16;case 15:_.getLogger().trace("end icon"),this.popState();break;case 16:return _.getLogger().trace("Exploding node"),this.begin("NODE"),20;break;case 17:return _.getLogger().trace("Cloud"),this.begin("NODE"),20;break;case 18:return _.getLogger().trace("Explosion Bang"),this.begin("NODE"),20;break;case 19:return _.getLogger().trace("Cloud Bang"),this.begin("NODE"),20;break;case 20:return this.begin("NODE"),20;break;case 21:return this.begin("NODE"),20;break;case 22:return this.begin("NODE"),20;break;case 23:return this.begin("NODE"),20;break;case 24:return 13;case 25:return 23;case 26:return 11;case 27:this.begin("NSTR2");break;case 28:return"NODE_DESCR";case 29:this.popState();break;case 30:_.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 31:return _.getLogger().trace("description:",I.yytext),"NODE_DESCR";break;case 32:this.popState();break;case 33:return this.popState(),_.getLogger().trace("node end ))"),"NODE_DEND";break;case 34:return this.popState(),_.getLogger().trace("node end )"),"NODE_DEND";break;case 35:return this.popState(),_.getLogger().trace("node end ...",I.yytext),"NODE_DEND";break;case 36:return this.popState(),_.getLogger().trace("node end (("),"NODE_DEND";break;case 37:return this.popState(),_.getLogger().trace("node end (-"),"NODE_DEND";break;case 38:return this.popState(),_.getLogger().trace("node end (-"),"NODE_DEND";break;case 39:return this.popState(),_.getLogger().trace("node end (("),"NODE_DEND";break;case 40:return this.popState(),_.getLogger().trace("node end (("),"NODE_DEND";break;case 41:return _.getLogger().trace("Long description:",I.yytext),21;break;case 42:return _.getLogger().trace("Long description:",I.yytext),21;break}},"anonymous"),rules:[/^(?:@\{)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^\"]+)/i,/^(?:[^}^"]+)/i,/^(?:\})/i,/^(?:\s*%%.*)/i,/^(?:kanban\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}@]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{shapeDataEndBracket:{rules:[],inclusive:!1},shapeDataStr:{rules:[2,3],inclusive:!1},shapeData:{rules:[1,4,5],inclusive:!1},CLASS:{rules:[9,10],inclusive:!1},ICON:{rules:[14,15],inclusive:!1},NSTR2:{rules:[28,29],inclusive:!1},NSTR:{rules:[31,32],inclusive:!1},NODE:{rules:[27,30,33,34,35,36,37,38,39,40,41,42],inclusive:!1},INITIAL:{rules:[0,6,7,8,11,12,13,16,17,18,19,20,21,22,23,24,25,26],inclusive:!0}}};return A}();C.lexer=T;function E(){this.yy={}}return o(E,"Parser"),E.prototype=C,C.Parser=E,new E}();DB.parser=DB;r1e=DB});var nl,RB,LB,NB,fJe,dJe,i1e,pJe,mJe,Yi,gJe,yJe,vJe,xJe,bJe,wJe,TJe,a1e,s1e=N(()=>{"use strict";zt();gr();vt();Ya();Ew();nl=[],RB=[],LB=0,NB={},fJe=o(()=>{nl=[],RB=[],LB=0,NB={}},"clear"),dJe=o(t=>{if(nl.length===0)return null;let e=nl[0].level,r=null;for(let n=nl.length-1;n>=0;n--)if(nl[n].level===e&&!r&&(r=nl[n]),nl[n].level<e)throw new Error('Items without section detected, found section ("'+nl[n].label+'")');return t===r?.level?null:r},"getSection"),i1e=o(function(){return RB},"getSections"),pJe=o(function(){let t=[],e=[],r=i1e(),n=me();for(let i of r){let a={id:i.id,label:Tr(i.label??"",n),isGroup:!0,ticket:i.ticket,shape:"kanbanSection",level:i.level,look:n.look};e.push(a);let s=nl.filter(l=>l.parentId===i.id);for(let l of s){let u={id:l.id,parentId:i.id,label:Tr(l.label??"",n),isGroup:!1,ticket:l?.ticket,priority:l?.priority,assigned:l?.assigned,icon:l?.icon,shape:"kanbanItem",level:l.level,rx:5,ry:5,cssStyles:["text-align: left"]};e.push(u)}}return{nodes:e,edges:t,other:{},config:me()}},"getData"),mJe=o((t,e,r,n,i)=>{let a=me(),s=a.mindmap?.padding??or.mindmap.padding;switch(n){case Yi.ROUNDED_RECT:case Yi.RECT:case Yi.HEXAGON:s*=2}let l={id:Tr(e,a)||"kbn"+LB++,level:t,label:Tr(r,a),width:a.mindmap?.maxNodeWidth??or.mindmap.maxNodeWidth,padding:s,isGroup:!1};if(i!==void 0){let h;i.includes(`
2250 +`)?h=i+`
2251 +`:h=`{
2252 +`+i+`
2253 +}`;let f=cm(h,{schema:lm});if(f.shape&&(f.shape!==f.shape.toLowerCase()||f.shape.includes("_")))throw new Error(`No such shape: ${f.shape}. Shape names should be lowercase.`);f?.shape&&f.shape==="kanbanItem"&&(l.shape=f?.shape),f?.label&&(l.label=f?.label),f?.icon&&(l.icon=f?.icon.toString()),f?.assigned&&(l.assigned=f?.assigned.toString()),f?.ticket&&(l.ticket=f?.ticket.toString()),f?.priority&&(l.priority=f?.priority)}let u=dJe(t);u?l.parentId=u.id||"kbn"+LB++:RB.push(l),nl.push(l)},"addNode"),Yi={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},gJe=o((t,e)=>{switch(Y.debug("In get type",t,e),t){case"[":return Yi.RECT;case"(":return e===")"?Yi.ROUNDED_RECT:Yi.CLOUD;case"((":return Yi.CIRCLE;case")":return Yi.CLOUD;case"))":return Yi.BANG;case"{{":return Yi.HEXAGON;default:return Yi.DEFAULT}},"getType"),yJe=o((t,e)=>{NB[t]=e},"setElementForId"),vJe=o(t=>{if(!t)return;let e=me(),r=nl[nl.length-1];t.icon&&(r.icon=Tr(t.icon,e)),t.class&&(r.cssClasses=Tr(t.class,e))},"decorateNode"),xJe=o(t=>{switch(t){case Yi.DEFAULT:return"no-border";case Yi.RECT:return"rect";case Yi.ROUNDED_RECT:return"rounded-rect";case Yi.CIRCLE:return"circle";case Yi.CLOUD:return"cloud";case Yi.BANG:return"bang";case Yi.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),bJe=o(()=>Y,"getLogger"),wJe=o(t=>NB[t],"getElementById"),TJe={clear:fJe,addNode:mJe,getSections:i1e,getData:pJe,nodeType:Yi,getType:gJe,setElementForId:yJe,decorateNode:vJe,type2Str:xJe,getLogger:bJe,getElementById:wJe},a1e=TJe});var kJe,o1e,l1e=N(()=>{"use strict";zt();vt();Vc();Ei();Ya();Hw();eT();kJe=o(async(t,e,r,n)=>{Y.debug(`Rendering kanban diagram
2254 +`+t);let a=n.db.getData(),s=me();s.htmlLabels=!1;let l=sa(e),u=l.append("g");u.attr("class","sections");let h=l.append("g");h.attr("class","items");let f=a.nodes.filter(v=>v.isGroup),d=0,p=10,m=[],g=25;for(let v of f){let x=s?.kanban?.sectionWidth||200;d=d+1,v.x=x*d+(d-1)*p/2,v.width=x,v.y=0,v.height=x*3,v.rx=5,v.ry=5,v.cssClasses=v.cssClasses+" section-"+d;let b=await ym(u,v);g=Math.max(g,b?.labelBBox?.height),m.push(b)}let y=0;for(let v of f){let x=m[y];y=y+1;let b=s?.kanban?.sectionWidth||200,w=-b*3/2+g,C=w,T=a.nodes.filter(S=>S.parentId===v.id);for(let S of T){if(S.isGroup)throw new Error("Groups within groups are not allowed in Kanban diagrams");S.x=v.x,S.width=b-1.5*p;let I=(await vm(h,S,{config:s})).node().getBBox();S.y=C+I.height/2,await k2(S),C=S.y+I.height/2+p/2}let E=x.cluster.select("rect"),A=Math.max(C-w+3*p,50)+(g-25);E.attr("height",A)}Ao(void 0,l,s.mindmap?.padding??or.kanban.padding,s.mindmap?.useMaxWidth??or.kanban.useMaxWidth)},"draw"),o1e={draw:kJe}});var EJe,SJe,c1e,u1e=N(()=>{"use strict";Ys();EJe=o(t=>{let e="";for(let n=0;n<t.THEME_COLOR_LIMIT;n++)t["lineColor"+n]=t["lineColor"+n]||t["cScaleInv"+n],ca(t["lineColor"+n])?t["lineColor"+n]=Dt(t["lineColor"+n],20):t["lineColor"+n]=Ot(t["lineColor"+n],20);let r=o((n,i)=>t.darkMode?Ot(n,i):Dt(n,i),"adjuster");for(let n=0;n<t.THEME_COLOR_LIMIT;n++){let i=""+(17-3*n);e+=`
2255 + .section-${n-1} rect, .section-${n-1} path, .section-${n-1} circle, .section-${n-1} polygon, .section-${n-1} path {
2256 + fill: ${r(t["cScale"+n],10)};
2257 + stroke: ${r(t["cScale"+n],10)};
2258 +
2259 + }
2260 + .section-${n-1} text {
2261 + fill: ${t["cScaleLabel"+n]};
2262 + }
2263 + .node-icon-${n-1} {
2264 + font-size: 40px;
2265 + color: ${t["cScaleLabel"+n]};
2266 + }
2267 + .section-edge-${n-1}{
2268 + stroke: ${t["cScale"+n]};
2269 + }
2270 + .edge-depth-${n-1}{
2271 + stroke-width: ${i};
2272 + }
2273 + .section-${n-1} line {
2274 + stroke: ${t["cScaleInv"+n]} ;
2275 + stroke-width: 3;
2276 + }
2277 +
2278 + .disabled, .disabled circle, .disabled text {
2279 + fill: lightgray;
2280 + }
2281 + .disabled text {
2282 + fill: #efefef;
2283 + }
2284 +
2285 + .node rect,
2286 + .node circle,
2287 + .node ellipse,
2288 + .node polygon,
2289 + .node path {
2290 + fill: ${t.background};
2291 + stroke: ${t.nodeBorder};
2292 + stroke-width: 1px;
2293 + }
2294 +
2295 + .kanban-ticket-link {
2296 + fill: ${t.background};
2297 + stroke: ${t.nodeBorder};
2298 + text-decoration: underline;
2299 + }
2300 + `}return e},"genSections"),SJe=o(t=>`
2301 + .edge {
2302 + stroke-width: 3;
2303 + }
2304 + ${EJe(t)}
2305 + .section-root rect, .section-root path, .section-root circle, .section-root polygon {
2306 + fill: ${t.git0};
2307 + }
2308 + .section-root text {
2309 + fill: ${t.gitBranchLabel0};
2310 + }
2311 + .icon-container {
2312 + height:100%;
2313 + display: flex;
2314 + justify-content: center;
2315 + align-items: center;
2316 + }
2317 + .edge {
2318 + fill: none;
2319 + }
2320 + .cluster-label, .label {
2321 + color: ${t.textColor};
2322 + fill: ${t.textColor};
2323 + }
2324 + .kanban-label {
2325 + dy: 1em;
2326 + alignment-baseline: middle;
2327 + text-anchor: middle;
2328 + dominant-baseline: middle;
2329 + text-align: center;
2330 + }
2331 +`,"getStyles"),c1e=SJe});var h1e={};hr(h1e,{diagram:()=>CJe});var CJe,f1e=N(()=>{"use strict";n1e();s1e();l1e();u1e();CJe={db:a1e,renderer:o1e,parser:r1e,styles:c1e}});var MB,d4,m1e=N(()=>{"use strict";MB=function(){var t=o(function(l,u,h,f){for(h=h||{},f=l.length;f--;h[l[f]]=u);return h},"o"),e=[1,9],r=[1,10],n=[1,5,10,12],i={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:o(function(u,h,f,d,p,m,g){var y=m.length-1;switch(p){case 7:let v=d.findOrCreateNode(m[y-4].trim().replaceAll('""','"')),x=d.findOrCreateNode(m[y-2].trim().replaceAll('""','"')),b=parseFloat(m[y].trim());d.addLink(v,x,b);break;case 8:case 9:case 11:this.$=m[y];break;case 10:this.$=m[y-1];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:e,20:r},{1:[2,6],7:11,10:[1,12]},t(r,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(n,[2,8]),t(n,[2,9]),{19:[1,16]},t(n,[2,11]),{1:[2,1]},{1:[2,5]},t(r,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:e,20:r},{15:18,16:7,17:8,18:e,20:r},{18:[1,19]},t(r,[2,3]),{12:[1,20]},t(n,[2,10]),{15:21,16:7,17:8,18:e,20:r},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:o(function(u,h){if(h.recoverable)this.trace(u);else{var f=new Error(u);throw f.hash=h,f}},"parseError"),parse:o(function(u){var h=this,f=[0],d=[],p=[null],m=[],g=this.table,y="",v=0,x=0,b=0,w=2,C=1,T=m.slice.call(arguments,1),E=Object.create(this.lexer),A={yy:{}};for(var S in this.yy)Object.prototype.hasOwnProperty.call(this.yy,S)&&(A.yy[S]=this.yy[S]);E.setInput(u,A.yy),A.yy.lexer=E,A.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var _=E.yylloc;m.push(_);var I=E.options&&E.options.ranges;typeof A.yy.parseError=="function"?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function D(ie){f.length=f.length-2*ie,p.length=p.length-ie,m.length=m.length-ie}o(D,"popStack");function k(){var ie;return ie=d.pop()||E.lex()||C,typeof ie!="number"&&(ie instanceof Array&&(d=ie,ie=d.pop()),ie=h.symbols_[ie]||ie),ie}o(k,"lex");for(var L,R,O,M,B,F,P={},z,$,H,Q;;){if(O=f[f.length-1],this.defaultActions[O]?M=this.defaultActions[O]:((L===null||typeof L>"u")&&(L=k()),M=g[O]&&g[O][L]),typeof M>"u"||!M.length||!M[0]){var j="";Q=[];for(z in g[O])this.terminals_[z]&&z>w&&Q.push("'"+this.terminals_[z]+"'");E.showPosition?j="Parse error on line "+(v+1)+`:
2332 +`+E.showPosition()+`
2333 +Expecting `+Q.join(", ")+", got '"+(this.terminals_[L]||L)+"'":j="Parse error on line "+(v+1)+": Unexpected "+(L==C?"end of input":"'"+(this.terminals_[L]||L)+"'"),this.parseError(j,{text:E.match,token:this.terminals_[L]||L,line:E.yylineno,loc:_,expected:Q})}if(M[0]instanceof Array&&M.length>1)throw new Error("Parse Error: multiple actions possible at state: "+O+", token: "+L);switch(M[0]){case 1:f.push(L),p.push(E.yytext),m.push(E.yylloc),f.push(M[1]),L=null,R?(L=R,R=null):(x=E.yyleng,y=E.yytext,v=E.yylineno,_=E.yylloc,b>0&&b--);break;case 2:if($=this.productions_[M[1]][1],P.$=p[p.length-$],P._$={first_line:m[m.length-($||1)].first_line,last_line:m[m.length-1].last_line,first_column:m[m.length-($||1)].first_column,last_column:m[m.length-1].last_column},I&&(P._$.range=[m[m.length-($||1)].range[0],m[m.length-1].range[1]]),F=this.performAction.apply(P,[y,x,v,A.yy,M[1],p,m].concat(T)),typeof F<"u")return F;$&&(f=f.slice(0,-1*$*2),p=p.slice(0,-1*$),m=m.slice(0,-1*$)),f.push(this.productions_[M[1]][0]),p.push(P.$),m.push(P._$),H=g[f[f.length-2]][f[f.length-1]],f.push(H);break;case 3:return!0}}return!0},"parse")},a=function(){var l={EOF:1,parseError:o(function(h,f){if(this.yy.parser)this.yy.parser.parseError(h,f);else throw new Error(h)},"parseError"),setInput:o(function(u,h){return this.yy=h||this.yy||{},this._input=u,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var h=u.match(/(?:\r\n?|\n).*/g);return h?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},"input"),unput:o(function(u){var h=u.length,f=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-h),this.offset-=h;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),f.length-1&&(this.yylineno-=f.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:f?(f.length===d.length?this.yylloc.first_column:0)+d[d.length-f.length].length-f[0].length:this.yylloc.first_column-h},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-h]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
2334 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(u){this.unput(this.match.slice(u))},"less"),pastInput:o(function(){var u=this.matched.substr(0,this.matched.length-this.match.length);return(u.length>20?"...":"")+u.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var u=this.match;return u.length<20&&(u+=this._input.substr(0,20-u.length)),(u.substr(0,20)+(u.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var u=this.pastInput(),h=new Array(u.length+1).join("-");return u+this.upcomingInput()+`
2335 +`+h+"^"},"showPosition"),test_match:o(function(u,h){var f,d,p;if(this.options.backtrack_lexer&&(p={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(p.yylloc.range=this.yylloc.range.slice(0))),d=u[0].match(/(?:\r\n?|\n).*/g),d&&(this.yylineno+=d.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:d?d[d.length-1].length-d[d.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+u[0].length},this.yytext+=u[0],this.match+=u[0],this.matches=u,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(u[0].length),this.matched+=u[0],f=this.performAction.call(this,this.yy,this,h,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),f)return f;if(this._backtrack){for(var m in p)this[m]=p[m];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var u,h,f,d;this._more||(this.yytext="",this.match="");for(var p=this._currentRules(),m=0;m<p.length;m++)if(f=this._input.match(this.rules[p[m]]),f&&(!h||f[0].length>h[0].length)){if(h=f,d=m,this.options.backtrack_lexer){if(u=this.test_match(f,p[m]),u!==!1)return u;if(this._backtrack){h=!1;continue}else return!1}else if(!this.options.flex)break}return h?(u=this.test_match(h,p[d]),u!==!1?u:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
2336 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var h=this.next();return h||this.lex()},"lex"),begin:o(function(h){this.conditionStack.push(h)},"begin"),popState:o(function(){var h=this.conditionStack.length-1;return h>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(h){return h=this.conditionStack.length-1-Math.abs(h||0),h>=0?this.conditionStack[h]:"INITIAL"},"topState"),pushState:o(function(h){this.begin(h)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(h,f,d,p){var m=p;switch(d){case 0:return this.pushState("csv"),4;break;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;break;case 5:return 20;case 6:return this.popState("escaped_text"),18;break;case 7:return 19}},"anonymous"),rules:[/^(?:sankey-beta\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return l}();i.lexer=a;function s(){this.yy={}}return o(s,"Parser"),s.prototype=i,i.Parser=s,new s}();MB.parser=MB;d4=MB});var XS,jS,YS,LJe,IB,RJe,OB,NJe,MJe,IJe,OJe,g1e,y1e=N(()=>{"use strict";zt();gr();mi();XS=[],jS=[],YS=new Map,LJe=o(()=>{XS=[],jS=[],YS=new Map,Ar()},"clear"),IB=class{constructor(e,r,n=0){this.source=e;this.target=r;this.value=n}static{o(this,"SankeyLink")}},RJe=o((t,e,r)=>{XS.push(new IB(t,e,r))},"addLink"),OB=class{constructor(e){this.ID=e}static{o(this,"SankeyNode")}},NJe=o(t=>{t=Ze.sanitizeText(t,me());let e=YS.get(t);return e===void 0&&(e=new OB(t),YS.set(t,e),jS.push(e)),e},"findOrCreateNode"),MJe=o(()=>jS,"getNodes"),IJe=o(()=>XS,"getLinks"),OJe=o(()=>({nodes:jS.map(t=>({id:t.ID})),links:XS.map(t=>({source:t.source.ID,target:t.target.ID,value:t.value}))}),"getGraph"),g1e={nodesMap:YS,getConfig:o(()=>me().sankey,"getConfig"),getNodes:MJe,getLinks:IJe,getGraph:OJe,addLink:RJe,findOrCreateNode:NJe,getAccTitle:Rr,setAccTitle:Lr,getAccDescription:Mr,setAccDescription:Nr,getDiagramTitle:Ir,setDiagramTitle:$r,clear:LJe}});function p4(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r<n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r<i||r===void 0&&i>=i)&&(r=i)}return r}var v1e=N(()=>{"use strict";o(p4,"max")});function cy(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var x1e=N(()=>{"use strict";o(cy,"min")});function uy(t,e){let r=0;if(e===void 0)for(let n of t)(n=+n)&&(r+=n);else{let n=-1;for(let i of t)(i=+e(i,++n,t))&&(r+=i)}return r}var b1e=N(()=>{"use strict";o(uy,"sum")});var PB=N(()=>{"use strict";v1e();x1e();b1e()});function PJe(t){return t.target.depth}function BB(t){return t.depth}function FB(t,e){return e-1-t.height}function m4(t,e){return t.sourceLinks.length?t.depth:e-1}function $B(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?cy(t.sourceLinks,PJe)-1:0}var zB=N(()=>{"use strict";PB();o(PJe,"targetDepth");o(BB,"left");o(FB,"right");o(m4,"justify");o($B,"center")});function hy(t){return function(){return t}}var w1e=N(()=>{"use strict";o(hy,"constant")});function T1e(t,e){return KS(t.source,e.source)||t.index-e.index}function k1e(t,e){return KS(t.target,e.target)||t.index-e.index}function KS(t,e){return t.y0-e.y0}function GB(t){return t.value}function BJe(t){return t.index}function FJe(t){return t.nodes}function $Je(t){return t.links}function E1e(t,e){let r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function S1e({nodes:t}){for(let e of t){let r=e.y0,n=r;for(let i of e.sourceLinks)i.y0=r+i.width/2,r+=i.width;for(let i of e.targetLinks)i.y1=n+i.width/2,n+=i.width}}function QS(){let t=0,e=0,r=1,n=1,i=24,a=8,s,l=BJe,u=m4,h,f,d=FJe,p=$Je,m=6;function g(){let O={nodes:d.apply(null,arguments),links:p.apply(null,arguments)};return y(O),v(O),x(O),b(O),T(O),S1e(O),O}o(g,"sankey"),g.update=function(O){return S1e(O),O},g.nodeId=function(O){return arguments.length?(l=typeof O=="function"?O:hy(O),g):l},g.nodeAlign=function(O){return arguments.length?(u=typeof O=="function"?O:hy(O),g):u},g.nodeSort=function(O){return arguments.length?(h=O,g):h},g.nodeWidth=function(O){return arguments.length?(i=+O,g):i},g.nodePadding=function(O){return arguments.length?(a=s=+O,g):a},g.nodes=function(O){return arguments.length?(d=typeof O=="function"?O:hy(O),g):d},g.links=function(O){return arguments.length?(p=typeof O=="function"?O:hy(O),g):p},g.linkSort=function(O){return arguments.length?(f=O,g):f},g.size=function(O){return arguments.length?(t=e=0,r=+O[0],n=+O[1],g):[r-t,n-e]},g.extent=function(O){return arguments.length?(t=+O[0][0],r=+O[1][0],e=+O[0][1],n=+O[1][1],g):[[t,e],[r,n]]},g.iterations=function(O){return arguments.length?(m=+O,g):m};function y({nodes:O,links:M}){for(let[F,P]of O.entries())P.index=F,P.sourceLinks=[],P.targetLinks=[];let B=new Map(O.map((F,P)=>[l(F,P,O),F]));for(let[F,P]of M.entries()){P.index=F;let{source:z,target:$}=P;typeof z!="object"&&(z=P.source=E1e(B,z)),typeof $!="object"&&($=P.target=E1e(B,$)),z.sourceLinks.push(P),$.targetLinks.push(P)}if(f!=null)for(let{sourceLinks:F,targetLinks:P}of O)F.sort(f),P.sort(f)}o(y,"computeNodeLinks");function v({nodes:O}){for(let M of O)M.value=M.fixedValue===void 0?Math.max(uy(M.sourceLinks,GB),uy(M.targetLinks,GB)):M.fixedValue}o(v,"computeNodeValues");function x({nodes:O}){let M=O.length,B=new Set(O),F=new Set,P=0;for(;B.size;){for(let z of B){z.depth=P;for(let{target:$}of z.sourceLinks)F.add($)}if(++P>M)throw new Error("circular link");B=F,F=new Set}}o(x,"computeNodeDepths");function b({nodes:O}){let M=O.length,B=new Set(O),F=new Set,P=0;for(;B.size;){for(let z of B){z.height=P;for(let{source:$}of z.targetLinks)F.add($)}if(++P>M)throw new Error("circular link");B=F,F=new Set}}o(b,"computeNodeHeights");function w({nodes:O}){let M=p4(O,P=>P.depth)+1,B=(r-t-i)/(M-1),F=new Array(M);for(let P of O){let z=Math.max(0,Math.min(M-1,Math.floor(u.call(null,P,M))));P.layer=z,P.x0=t+z*B,P.x1=P.x0+i,F[z]?F[z].push(P):F[z]=[P]}if(h)for(let P of F)P.sort(h);return F}o(w,"computeNodeLayers");function C(O){let M=cy(O,B=>(n-e-(B.length-1)*s)/uy(B,GB));for(let B of O){let F=e;for(let P of B){P.y0=F,P.y1=F+P.value*M,F=P.y1+s;for(let z of P.sourceLinks)z.width=z.value*M}F=(n-F+s)/(B.length+1);for(let P=0;P<B.length;++P){let z=B[P];z.y0+=F*(P+1),z.y1+=F*(P+1)}k(B)}}o(C,"initializeNodeBreadths");function T(O){let M=w(O);s=Math.min(a,(n-e)/(p4(M,B=>B.length)-1)),C(M);for(let B=0;B<m;++B){let F=Math.pow(.99,B),P=Math.max(1-F,(B+1)/m);A(M,F,P),E(M,F,P)}}o(T,"computeNodeBreadths");function E(O,M,B){for(let F=1,P=O.length;F<P;++F){let z=O[F];for(let $ of z){let H=0,Q=0;for(let{source:ie,value:ne}of $.targetLinks){let le=ne*($.layer-ie.layer);H+=L(ie,$)*le,Q+=le}if(!(Q>0))continue;let j=(H/Q-$.y0)*M;$.y0+=j,$.y1+=j,D($)}h===void 0&&z.sort(KS),S(z,B)}}o(E,"relaxLeftToRight");function A(O,M,B){for(let F=O.length,P=F-2;P>=0;--P){let z=O[P];for(let $ of z){let H=0,Q=0;for(let{target:ie,value:ne}of $.sourceLinks){let le=ne*(ie.layer-$.layer);H+=R($,ie)*le,Q+=le}if(!(Q>0))continue;let j=(H/Q-$.y0)*M;$.y0+=j,$.y1+=j,D($)}h===void 0&&z.sort(KS),S(z,B)}}o(A,"relaxRightToLeft");function S(O,M){let B=O.length>>1,F=O[B];I(O,F.y0-s,B-1,M),_(O,F.y1+s,B+1,M),I(O,n,O.length-1,M),_(O,e,0,M)}o(S,"resolveCollisions");function _(O,M,B,F){for(;B<O.length;++B){let P=O[B],z=(M-P.y0)*F;z>1e-6&&(P.y0+=z,P.y1+=z),M=P.y1+s}}o(_,"resolveCollisionsTopToBottom");function I(O,M,B,F){for(;B>=0;--B){let P=O[B],z=(P.y1-M)*F;z>1e-6&&(P.y0-=z,P.y1-=z),M=P.y0-s}}o(I,"resolveCollisionsBottomToTop");function D({sourceLinks:O,targetLinks:M}){if(f===void 0){for(let{source:{sourceLinks:B}}of M)B.sort(k1e);for(let{target:{targetLinks:B}}of O)B.sort(T1e)}}o(D,"reorderNodeLinks");function k(O){if(f===void 0)for(let{sourceLinks:M,targetLinks:B}of O)M.sort(k1e),B.sort(T1e)}o(k,"reorderLinks");function L(O,M){let B=O.y0-(O.sourceLinks.length-1)*s/2;for(let{target:F,width:P}of O.sourceLinks){if(F===M)break;B+=P+s}for(let{source:F,width:P}of M.targetLinks){if(F===O)break;B-=P}return B}o(L,"targetTop");function R(O,M){let B=M.y0-(M.targetLinks.length-1)*s/2;for(let{source:F,width:P}of M.targetLinks){if(F===O)break;B+=P+s}for(let{target:F,width:P}of O.sourceLinks){if(F===M)break;B-=P}return B}return o(R,"sourceTop"),g}var C1e=N(()=>{"use strict";PB();zB();w1e();o(T1e,"ascendingSourceBreadth");o(k1e,"ascendingTargetBreadth");o(KS,"ascendingBreadth");o(GB,"value");o(BJe,"defaultId");o(FJe,"defaultNodes");o($Je,"defaultLinks");o(E1e,"find");o(S1e,"computeLinkBreadths");o(QS,"Sankey")});function HB(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function A1e(){return new HB}var VB,UB,Xp,zJe,WB,_1e=N(()=>{"use strict";VB=Math.PI,UB=2*VB,Xp=1e-6,zJe=UB-Xp;o(HB,"Path");o(A1e,"path");HB.prototype=A1e.prototype={constructor:HB,moveTo:o(function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},"moveTo"),closePath:o(function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},"closePath"),lineTo:o(function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},"lineTo"),quadraticCurveTo:o(function(t,e,r,n){this._+="Q"+ +t+","+ +e+","+(this._x1=+r)+","+(this._y1=+n)},"quadraticCurveTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._+="C"+ +t+","+ +e+","+ +r+","+ +n+","+(this._x1=+i)+","+(this._y1=+a)},"bezierCurveTo"),arcTo:o(function(t,e,r,n,i){t=+t,e=+e,r=+r,n=+n,i=+i;var a=this._x1,s=this._y1,l=r-t,u=n-e,h=a-t,f=s-e,d=h*h+f*f;if(i<0)throw new Error("negative radius: "+i);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(d>Xp)if(!(Math.abs(f*l-u*h)>Xp)||!i)this._+="L"+(this._x1=t)+","+(this._y1=e);else{var p=r-a,m=n-s,g=l*l+u*u,y=p*p+m*m,v=Math.sqrt(g),x=Math.sqrt(d),b=i*Math.tan((VB-Math.acos((g+d-y)/(2*v*x)))/2),w=b/x,C=b/v;Math.abs(w-1)>Xp&&(this._+="L"+(t+w*h)+","+(e+w*f)),this._+="A"+i+","+i+",0,0,"+ +(f*p>h*m)+","+(this._x1=t+C*l)+","+(this._y1=e+C*u)}},"arcTo"),arc:o(function(t,e,r,n,i,a){t=+t,e=+e,r=+r,a=!!a;var s=r*Math.cos(n),l=r*Math.sin(n),u=t+s,h=e+l,f=1^a,d=a?n-i:i-n;if(r<0)throw new Error("negative radius: "+r);this._x1===null?this._+="M"+u+","+h:(Math.abs(this._x1-u)>Xp||Math.abs(this._y1-h)>Xp)&&(this._+="L"+u+","+h),r&&(d<0&&(d=d%UB+UB),d>zJe?this._+="A"+r+","+r+",0,1,"+f+","+(t-s)+","+(e-l)+"A"+r+","+r+",0,1,"+f+","+(this._x1=u)+","+(this._y1=h):d>Xp&&(this._+="A"+r+","+r+",0,"+ +(d>=VB)+","+f+","+(this._x1=t+r*Math.cos(i))+","+(this._y1=e+r*Math.sin(i))))},"arc"),rect:o(function(t,e,r,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +n+"h"+-r+"Z"},"rect"),toString:o(function(){return this._},"toString")};WB=A1e});var D1e=N(()=>{"use strict";_1e()});function ZS(t){return o(function(){return t},"constant")}var L1e=N(()=>{"use strict";o(ZS,"default")});function R1e(t){return t[0]}function N1e(t){return t[1]}var M1e=N(()=>{"use strict";o(R1e,"x");o(N1e,"y")});var I1e,O1e=N(()=>{"use strict";I1e=Array.prototype.slice});function GJe(t){return t.source}function VJe(t){return t.target}function UJe(t){var e=GJe,r=VJe,n=R1e,i=N1e,a=null;function s(){var l,u=I1e.call(arguments),h=e.apply(this,u),f=r.apply(this,u);if(a||(a=l=WB()),t(a,+n.apply(this,(u[0]=h,u)),+i.apply(this,u),+n.apply(this,(u[0]=f,u)),+i.apply(this,u)),l)return a=null,l+""||null}return o(s,"link"),s.source=function(l){return arguments.length?(e=l,s):e},s.target=function(l){return arguments.length?(r=l,s):r},s.x=function(l){return arguments.length?(n=typeof l=="function"?l:ZS(+l),s):n},s.y=function(l){return arguments.length?(i=typeof l=="function"?l:ZS(+l),s):i},s.context=function(l){return arguments.length?(a=l??null,s):a},s}function HJe(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e=(e+n)/2,r,e,i,n,i)}function qB(){return UJe(HJe)}var P1e=N(()=>{"use strict";D1e();O1e();L1e();M1e();o(GJe,"linkSource");o(VJe,"linkTarget");o(UJe,"link");o(HJe,"curveHorizontal");o(qB,"linkHorizontal")});var B1e=N(()=>{"use strict";P1e()});function WJe(t){return[t.source.x1,t.y0]}function qJe(t){return[t.target.x0,t.y1]}function JS(){return qB().source(WJe).target(qJe)}var F1e=N(()=>{"use strict";B1e();o(WJe,"horizontalSource");o(qJe,"horizontalTarget");o(JS,"default")});var $1e=N(()=>{"use strict";C1e();zB();F1e()});var g4,z1e=N(()=>{"use strict";g4=class t{static{o(this,"Uid")}static{this.count=0}static next(e){return new t(e+ ++t.count)}constructor(e){this.id=e,this.href=`#${e}`}toString(){return"url("+this.href+")"}}});var YJe,XJe,G1e,V1e=N(()=>{"use strict";zt();dr();$1e();Ei();z1e();YJe={left:BB,right:FB,center:$B,justify:m4},XJe=o(function(t,e,r,n){let{securityLevel:i,sankey:a}=me(),s=A3.sankey,l;i==="sandbox"&&(l=Ge("#i"+e));let u=i==="sandbox"?Ge(l.nodes()[0].contentDocument.body):Ge("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):Ge(`[id="${e}"]`),f=a?.width??s.width,d=a?.height??s.width,p=a?.useMaxWidth??s.useMaxWidth,m=a?.nodeAlignment??s.nodeAlignment,g=a?.prefix??s.prefix,y=a?.suffix??s.suffix,v=a?.showValues??s.showValues,x=n.db.getGraph(),b=YJe[m];QS().nodeId(I=>I.id).nodeWidth(10).nodePadding(10+(v?15:0)).nodeAlign(b).extent([[0,0],[f,d]])(x);let T=gu(e9);h.append("g").attr("class","nodes").selectAll(".node").data(x.nodes).join("g").attr("class","node").attr("id",I=>(I.uid=g4.next("node-")).id).attr("transform",function(I){return"translate("+I.x0+","+I.y0+")"}).attr("x",I=>I.x0).attr("y",I=>I.y0).append("rect").attr("height",I=>I.y1-I.y0).attr("width",I=>I.x1-I.x0).attr("fill",I=>T(I.id));let E=o(({id:I,value:D})=>v?`${I}
2337 +${g}${Math.round(D*100)/100}${y}`:I,"getText");h.append("g").attr("class","node-labels").attr("font-size",14).selectAll("text").data(x.nodes).join("text").attr("x",I=>I.x0<f/2?I.x1+6:I.x0-6).attr("y",I=>(I.y1+I.y0)/2).attr("dy",`${v?"0":"0.35"}em`).attr("text-anchor",I=>I.x0<f/2?"start":"end").text(E);let A=h.append("g").attr("class","links").attr("fill","none").attr("stroke-opacity",.5).selectAll(".link").data(x.links).join("g").attr("class","link").style("mix-blend-mode","multiply"),S=a?.linkColor??"gradient";if(S==="gradient"){let I=A.append("linearGradient").attr("id",D=>(D.uid=g4.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",D=>D.source.x1).attr("x2",D=>D.target.x0);I.append("stop").attr("offset","0%").attr("stop-color",D=>T(D.source.id)),I.append("stop").attr("offset","100%").attr("stop-color",D=>T(D.target.id))}let _;switch(S){case"gradient":_=o(I=>I.uid,"coloring");break;case"source":_=o(I=>T(I.source.id),"coloring");break;case"target":_=o(I=>T(I.target.id),"coloring");break;default:_=S}A.append("path").attr("d",JS()).attr("stroke",_).attr("stroke-width",I=>Math.max(1,I.width)),Ao(void 0,h,0,p)},"draw"),G1e={draw:XJe}});var U1e,H1e=N(()=>{"use strict";U1e=o(t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,`
2338 +`).trim(),"prepareTextForParsing")});var jJe,W1e,q1e=N(()=>{"use strict";jJe=o(t=>`.label {
2339 + font-family: ${t.fontFamily};
2340 + }`,"getStyles"),W1e=jJe});var Y1e={};hr(Y1e,{diagram:()=>QJe});var KJe,QJe,X1e=N(()=>{"use strict";m1e();y1e();V1e();H1e();q1e();KJe=d4.parse.bind(d4);d4.parse=t=>KJe(U1e(t));QJe={styles:W1e,parser:d4,db:g1e,renderer:G1e}});var Q1e,YB,tet,ret,net,iet,aet,Bf,XB=N(()=>{"use strict";ji();Ya();ir();mi();Q1e={packet:[]},YB=structuredClone(Q1e),tet=or.packet,ret=o(()=>{let t=Fi({...tet,...cr().packet});return t.showBits&&(t.paddingY+=10),t},"getConfig"),net=o(()=>YB.packet,"getPacket"),iet=o(t=>{t.length>0&&YB.packet.push(t)},"pushWord"),aet=o(()=>{Ar(),YB=structuredClone(Q1e)},"clear"),Bf={pushWord:iet,getPacket:net,getConfig:ret,clear:aet,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr}});var set,oet,cet,Z1e,J1e=N(()=>{"use strict";kp();vt();T1();XB();set=1e4,oet=o(t=>{$c(t,Bf);let e=-1,r=[],n=1,{bitsPerRow:i}=Bf.getConfig();for(let{start:a,end:s,label:l}of t.blocks){if(s&&s<a)throw new Error(`Packet block ${a} - ${s} is invalid. End must be greater than start.`);if(a!==e+1)throw new Error(`Packet block ${a} - ${s??a} is not contiguous. It should start from ${e+1}.`);for(e=s??a,Y.debug(`Packet block ${a} - ${e} with label ${l}`);r.length<=i+1&&Bf.getPacket().length<set;){let[u,h]=cet({start:a,end:s,label:l},n,i);if(r.push(u),u.end+1===n*i&&(Bf.pushWord(r),r=[],n++),!h)break;({start:a,end:s,label:l}=h)}}Bf.pushWord(r)},"populate"),cet=o((t,e,r)=>{if(t.end===void 0&&(t.end=t.start),t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);return t.end+1<=e*r?[t,void 0]:[{start:t.start,end:e*r-1,label:t.label},{start:e*r,end:t.end,label:t.label}]},"getNextFittingBlock"),Z1e={parse:o(async t=>{let e=await uo("packet",t);Y.debug(e),oet(e)},"parse")}});var uet,het,eye,tye=N(()=>{"use strict";Vc();Ei();uet=o((t,e,r,n)=>{let i=n.db,a=i.getConfig(),{rowHeight:s,paddingY:l,bitWidth:u,bitsPerRow:h}=a,f=i.getPacket(),d=i.getDiagramTitle(),p=s+l,m=p*(f.length+1)-(d?0:s),g=u*h+2,y=sa(e);y.attr("viewbox",`0 0 ${g} ${m}`),vn(y,m,g,a.useMaxWidth);for(let[v,x]of f.entries())het(y,x,v,a);y.append("text").text(d).attr("x",g/2).attr("y",m-p/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),het=o((t,e,r,{rowHeight:n,paddingX:i,paddingY:a,bitWidth:s,bitsPerRow:l,showBits:u})=>{let h=t.append("g"),f=r*(n+a)+a;for(let d of e){let p=d.start%l*s+1,m=(d.end-d.start+1)*s-i;if(h.append("rect").attr("x",p).attr("y",f).attr("width",m).attr("height",n).attr("class","packetBlock"),h.append("text").attr("x",p+m/2).attr("y",f+n/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(d.label),!u)continue;let g=d.end===d.start,y=f-2;h.append("text").attr("x",p+(g?m/2:0)).attr("y",y).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",g?"middle":"start").text(d.start),g||h.append("text").attr("x",p+m).attr("y",y).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(d.end)}},"drawWord"),eye={draw:uet}});var fet,rye,nye=N(()=>{"use strict";ir();fet={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},rye=o(({packet:t}={})=>{let e=Fi(fet,t);return`
2341 + .packetByte {
2342 + font-size: ${e.byteFontSize};
2343 + }
2344 + .packetByte.start {
2345 + fill: ${e.startByteColor};
2346 + }
2347 + .packetByte.end {
2348 + fill: ${e.endByteColor};
2349 + }
2350 + .packetLabel {
2351 + fill: ${e.labelColor};
2352 + font-size: ${e.labelFontSize};
2353 + }
2354 + .packetTitle {
2355 + fill: ${e.titleColor};
2356 + font-size: ${e.titleFontSize};
2357 + }
2358 + .packetBlock {
2359 + stroke: ${e.blockStrokeColor};
2360 + stroke-width: ${e.blockStrokeWidth};
2361 + fill: ${e.blockFillColor};
2362 + }
2363 + `},"styles")});var iye={};hr(iye,{diagram:()=>det});var det,aye=N(()=>{"use strict";XB();J1e();tye();nye();det={parser:Z1e,db:Bf,renderer:eye,styles:rye}});var fy,lye,jp,get,yet,cye,vet,xet,bet,wet,Tet,ket,Eet,Kp,jB=N(()=>{"use strict";ji();Ya();ir();mi();fy={showLegend:!0,ticks:5,max:null,min:0,graticule:"circle"},lye={axes:[],curves:[],options:fy},jp=structuredClone(lye),get=or.radar,yet=o(()=>Fi({...get,...cr().radar}),"getConfig"),cye=o(()=>jp.axes,"getAxes"),vet=o(()=>jp.curves,"getCurves"),xet=o(()=>jp.options,"getOptions"),bet=o(t=>{jp.axes=t.map(e=>({name:e.name,label:e.label??e.name}))},"setAxes"),wet=o(t=>{jp.curves=t.map(e=>({name:e.name,label:e.label??e.name,entries:Tet(e.entries)}))},"setCurves"),Tet=o(t=>{if(t[0].axis==null)return t.map(r=>r.value);let e=cye();if(e.length===0)throw new Error("Axes must be populated before curves for reference entries");return e.map(r=>{let n=t.find(i=>i.axis?.$refText===r.name);if(n===void 0)throw new Error("Missing entry for axis "+r.label);return n.value})},"computeCurveEntries"),ket=o(t=>{let e=t.reduce((r,n)=>(r[n.name]=n,r),{});jp.options={showLegend:e.showLegend?.value??fy.showLegend,ticks:e.ticks?.value??fy.ticks,max:e.max?.value??fy.max,min:e.min?.value??fy.min,graticule:e.graticule?.value??fy.graticule}},"setOptions"),Eet=o(()=>{Ar(),jp=structuredClone(lye)},"clear"),Kp={getAxes:cye,getCurves:vet,getOptions:xet,setAxes:bet,setCurves:wet,setOptions:ket,getConfig:yet,clear:Eet,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr}});var Cet,uye,hye=N(()=>{"use strict";kp();vt();T1();jB();Cet=o(t=>{$c(t,Kp);let{axes:e,curves:r,options:n}=t;Kp.setAxes(e),Kp.setCurves(r),Kp.setOptions(n)},"populate"),uye={parse:o(async t=>{let e=await uo("radar",t);Y.debug(e),Cet(e)},"parse")}});function Ret(t,e,r,n,i,a,s){let l=e.length,u=Math.min(s.width,s.height)/2;r.forEach((h,f)=>{if(h.entries.length!==l)return;let d=h.entries.map((p,m)=>{let g=2*Math.PI*m/l-Math.PI/2,y=Net(p,n,i,u),v=y*Math.cos(g),x=y*Math.sin(g);return{x:v,y:x}});a==="circle"?t.append("path").attr("d",Met(d,s.curveTension)).attr("class",`radarCurve-${f}`):a==="polygon"&&t.append("polygon").attr("points",d.map(p=>`${p.x},${p.y}`).join(" ")).attr("class",`radarCurve-${f}`)})}function Net(t,e,r,n){let i=Math.min(Math.max(t,e),r);return n*(i-e)/(r-e)}function Met(t,e){let r=t.length,n=`M${t[0].x},${t[0].y}`;for(let i=0;i<r;i++){let a=t[(i-1+r)%r],s=t[i],l=t[(i+1)%r],u=t[(i+2)%r],h={x:s.x+(l.x-a.x)*e,y:s.y+(l.y-a.y)*e},f={x:l.x-(u.x-s.x)*e,y:l.y-(u.y-s.y)*e};n+=` C${h.x},${h.y} ${f.x},${f.y} ${l.x},${l.y}`}return`${n} Z`}function Iet(t,e,r,n){if(!r)return;let i=(n.width/2+n.marginRight)*3/4,a=-(n.height/2+n.marginTop)*3/4,s=20;e.forEach((l,u)=>{let h=t.append("g").attr("transform",`translate(${i}, ${a+u*s})`);h.append("rect").attr("width",12).attr("height",12).attr("class",`radarLegendBox-${u}`),h.append("text").attr("x",16).attr("y",0).attr("class","radarLegendText").text(l.label)})}var Aet,_et,Det,Let,fye,dye=N(()=>{"use strict";Vc();Aet=o((t,e,r,n)=>{let i=n.db,a=i.getAxes(),s=i.getCurves(),l=i.getOptions(),u=i.getConfig(),h=i.getDiagramTitle(),f=sa(e),d=_et(f,u),p=l.max??Math.max(...s.map(y=>Math.max(...y.entries))),m=l.min,g=Math.min(u.width,u.height)/2;Det(d,a,g,l.ticks,l.graticule),Let(d,a,g,u),Ret(d,a,s,m,p,l.graticule,u),Iet(d,s,l.showLegend,u),d.append("text").attr("class","radarTitle").text(h).attr("x",0).attr("y",-u.height/2-u.marginTop)},"draw"),_et=o((t,e)=>{let r=e.width+e.marginLeft+e.marginRight,n=e.height+e.marginTop+e.marginBottom,i={x:e.marginLeft+e.width/2,y:e.marginTop+e.height/2};return t.attr("viewbox",`0 0 ${r} ${n}`).attr("width",r).attr("height",n),t.append("g").attr("transform",`translate(${i.x}, ${i.y})`)},"drawFrame"),Det=o((t,e,r,n,i)=>{if(i==="circle")for(let a=0;a<n;a++){let s=r*(a+1)/n;t.append("circle").attr("r",s).attr("class","radarGraticule")}else if(i==="polygon"){let a=e.length;for(let s=0;s<n;s++){let l=r*(s+1)/n,u=e.map((h,f)=>{let d=2*f*Math.PI/a-Math.PI/2,p=l*Math.cos(d),m=l*Math.sin(d);return`${p},${m}`}).join(" ");t.append("polygon").attr("points",u).attr("class","radarGraticule")}}},"drawGraticule"),Let=o((t,e,r,n)=>{let i=e.length;for(let a=0;a<i;a++){let s=e[a].label,l=2*a*Math.PI/i-Math.PI/2;t.append("line").attr("x1",0).attr("y1",0).attr("x2",r*n.axisScaleFactor*Math.cos(l)).attr("y2",r*n.axisScaleFactor*Math.sin(l)).attr("class","radarAxisLine"),t.append("text").text(s).attr("x",r*n.axisLabelFactor*Math.cos(l)).attr("y",r*n.axisLabelFactor*Math.sin(l)).attr("class","radarAxisLabel")}},"drawAxes");o(Ret,"drawCurves");o(Net,"relativeRadius");o(Met,"closedRoundCurve");o(Iet,"drawLegend");fye={draw:Aet}});var Oet,Pet,pye,mye=N(()=>{"use strict";ir();_y();ji();Oet=o((t,e)=>{let r="";for(let n=0;n<t.THEME_COLOR_LIMIT;n++){let i=t[`cScale${n}`];r+=`
2364 + .radarCurve-${n} {
2365 + color: ${i};
2366 + fill: ${i};
2367 + fill-opacity: ${e.curveOpacity};
2368 + stroke: ${i};
2369 + stroke-width: ${e.curveStrokeWidth};
2370 + }
2371 + .radarLegendBox-${n} {
2372 + fill: ${i};
2373 + fill-opacity: ${e.curveOpacity};
2374 + stroke: ${i};
2375 + }
2376 + `}return r},"genIndexStyles"),Pet=o(t=>{let e=oh(),r=cr(),n=Fi(e,r.themeVariables),i=Fi(n.radar,t);return{themeVariables:n,radarOptions:i}},"buildRadarStyleOptions"),pye=o(({radar:t}={})=>{let{themeVariables:e,radarOptions:r}=Pet(t);return`
2377 + .radarTitle {
2378 + font-size: ${e.fontSize};
2379 + color: ${e.titleColor};
2380 + dominant-baseline: hanging;
2381 + text-anchor: middle;
2382 + }
2383 + .radarAxisLine {
2384 + stroke: ${r.axisColor};
2385 + stroke-width: ${r.axisStrokeWidth};
2386 + }
2387 + .radarAxisLabel {
2388 + dominant-baseline: middle;
2389 + text-anchor: middle;
2390 + font-size: ${r.axisLabelFontSize}px;
2391 + color: ${r.axisColor};
2392 + }
2393 + .radarGraticule {
2394 + fill: ${r.graticuleColor};
2395 + fill-opacity: ${r.graticuleOpacity};
2396 + stroke: ${r.graticuleColor};
2397 + stroke-width: ${r.graticuleStrokeWidth};
2398 + }
2399 + .radarLegendText {
2400 + text-anchor: start;
2401 + font-size: ${r.legendFontSize}px;
2402 + dominant-baseline: hanging;
2403 + }
2404 + ${Oet(e,r)}
2405 + `},"styles")});var gye={};hr(gye,{diagram:()=>Bet});var Bet,yye=N(()=>{"use strict";jB();hye();dye();mye();Bet={parser:uye,db:Kp,renderer:fye,styles:pye}});var KB,bye,wye=N(()=>{"use strict";KB=function(){var t=o(function(w,C,T,E){for(T=T||{},E=w.length;E--;T[w[E]]=C);return T},"o"),e=[1,7],r=[1,13],n=[1,14],i=[1,15],a=[1,19],s=[1,16],l=[1,17],u=[1,18],h=[8,30],f=[8,21,28,29,30,31,32,40,44,47],d=[1,23],p=[1,24],m=[8,15,16,21,28,29,30,31,32,40,44,47],g=[8,15,16,21,27,28,29,30,31,32,40,44,47],y=[1,49],v={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:o(function(C,T,E,A,S,_,I){var D=_.length-1;switch(S){case 4:A.getLogger().debug("Rule: separator (NL) ");break;case 5:A.getLogger().debug("Rule: separator (Space) ");break;case 6:A.getLogger().debug("Rule: separator (EOF) ");break;case 7:A.getLogger().debug("Rule: hierarchy: ",_[D-1]),A.setHierarchy(_[D-1]);break;case 8:A.getLogger().debug("Stop NL ");break;case 9:A.getLogger().debug("Stop EOF ");break;case 10:A.getLogger().debug("Stop NL2 ");break;case 11:A.getLogger().debug("Stop EOF2 ");break;case 12:A.getLogger().debug("Rule: statement: ",_[D]),typeof _[D].length=="number"?this.$=_[D]:this.$=[_[D]];break;case 13:A.getLogger().debug("Rule: statement #2: ",_[D-1]),this.$=[_[D-1]].concat(_[D]);break;case 14:A.getLogger().debug("Rule: link: ",_[D],C),this.$={edgeTypeStr:_[D],label:""};break;case 15:A.getLogger().debug("Rule: LABEL link: ",_[D-3],_[D-1],_[D]),this.$={edgeTypeStr:_[D],label:_[D-1]};break;case 18:let k=parseInt(_[D]),L=A.generateId();this.$={id:L,type:"space",label:"",width:k,children:[]};break;case 23:A.getLogger().debug("Rule: (nodeStatement link node) ",_[D-2],_[D-1],_[D]," typestr: ",_[D-1].edgeTypeStr);let R=A.edgeStrToEdgeData(_[D-1].edgeTypeStr);this.$=[{id:_[D-2].id,label:_[D-2].label,type:_[D-2].type,directions:_[D-2].directions},{id:_[D-2].id+"-"+_[D].id,start:_[D-2].id,end:_[D].id,label:_[D-1].label,type:"edge",directions:_[D].directions,arrowTypeEnd:R,arrowTypeStart:"arrow_open"},{id:_[D].id,label:_[D].label,type:A.typeStr2Type(_[D].typeStr),directions:_[D].directions}];break;case 24:A.getLogger().debug("Rule: nodeStatement (abc88 node size) ",_[D-1],_[D]),this.$={id:_[D-1].id,label:_[D-1].label,type:A.typeStr2Type(_[D-1].typeStr),directions:_[D-1].directions,widthInColumns:parseInt(_[D],10)};break;case 25:A.getLogger().debug("Rule: nodeStatement (node) ",_[D]),this.$={id:_[D].id,label:_[D].label,type:A.typeStr2Type(_[D].typeStr),directions:_[D].directions,widthInColumns:1};break;case 26:A.getLogger().debug("APA123",this?this:"na"),A.getLogger().debug("COLUMNS: ",_[D]),this.$={type:"column-setting",columns:_[D]==="auto"?-1:parseInt(_[D])};break;case 27:A.getLogger().debug("Rule: id-block statement : ",_[D-2],_[D-1]);let O=A.generateId();this.$={..._[D-2],type:"composite",children:_[D-1]};break;case 28:A.getLogger().debug("Rule: blockStatement : ",_[D-2],_[D-1],_[D]);let M=A.generateId();this.$={id:M,type:"composite",label:"",children:_[D-1]};break;case 29:A.getLogger().debug("Rule: node (NODE_ID separator): ",_[D]),this.$={id:_[D]};break;case 30:A.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",_[D-1],_[D]),this.$={id:_[D-1],label:_[D].label,typeStr:_[D].typeStr,directions:_[D].directions};break;case 31:A.getLogger().debug("Rule: dirList: ",_[D]),this.$=[_[D]];break;case 32:A.getLogger().debug("Rule: dirList: ",_[D-1],_[D]),this.$=[_[D-1]].concat(_[D]);break;case 33:A.getLogger().debug("Rule: nodeShapeNLabel: ",_[D-2],_[D-1],_[D]),this.$={typeStr:_[D-2]+_[D],label:_[D-1]};break;case 34:A.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",_[D-3],_[D-2]," #3:",_[D-1],_[D]),this.$={typeStr:_[D-3]+_[D],label:_[D-2],directions:_[D-1]};break;case 35:case 36:this.$={type:"classDef",id:_[D-1].trim(),css:_[D].trim()};break;case 37:this.$={type:"applyClass",id:_[D-1].trim(),styleClass:_[D].trim()};break;case 38:this.$={type:"applyStyles",id:_[D-1].trim(),stylesStr:_[D].trim()};break}},"anonymous"),table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{8:[1,20]},t(h,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:e,28:r,29:n,31:i,32:a,40:s,44:l,47:u}),t(f,[2,16],{14:22,15:d,16:p}),t(f,[2,17]),t(f,[2,18]),t(f,[2,19]),t(f,[2,20]),t(f,[2,21]),t(f,[2,22]),t(m,[2,25],{27:[1,25]}),t(f,[2,26]),{19:26,26:12,32:a},{11:27,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},t(g,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},t(h,[2,13]),{26:35,32:a},{32:[2,14]},{17:[1,36]},t(m,[2,24]),{11:37,13:4,14:22,15:d,16:p,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},t(g,[2,30]),{18:[1,43]},{18:[1,44]},t(m,[2,23]),{18:[1,45]},{30:[1,46]},t(f,[2,28]),t(f,[2,35]),t(f,[2,36]),t(f,[2,37]),t(f,[2,38]),{37:[1,47]},{34:48,35:y},{15:[1,50]},t(f,[2,27]),t(g,[2,33]),{39:[1,51]},{34:52,35:y,39:[2,31]},{32:[2,15]},t(g,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:o(function(C,T){if(T.recoverable)this.trace(C);else{var E=new Error(C);throw E.hash=T,E}},"parseError"),parse:o(function(C){var T=this,E=[0],A=[],S=[null],_=[],I=this.table,D="",k=0,L=0,R=0,O=2,M=1,B=_.slice.call(arguments,1),F=Object.create(this.lexer),P={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&(P.yy[z]=this.yy[z]);F.setInput(C,P.yy),P.yy.lexer=F,P.yy.parser=this,typeof F.yylloc>"u"&&(F.yylloc={});var $=F.yylloc;_.push($);var H=F.options&&F.options.ranges;typeof P.yy.parseError=="function"?this.parseError=P.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Q(ce){E.length=E.length-2*ce,S.length=S.length-ce,_.length=_.length-ce}o(Q,"popStack");function j(){var ce;return ce=A.pop()||F.lex()||M,typeof ce!="number"&&(ce instanceof Array&&(A=ce,ce=A.pop()),ce=T.symbols_[ce]||ce),ce}o(j,"lex");for(var ie,ne,le,he,K,X,te={},J,se,ue,Z;;){if(le=E[E.length-1],this.defaultActions[le]?he=this.defaultActions[le]:((ie===null||typeof ie>"u")&&(ie=j()),he=I[le]&&I[le][ie]),typeof he>"u"||!he.length||!he[0]){var Se="";Z=[];for(J in I[le])this.terminals_[J]&&J>O&&Z.push("'"+this.terminals_[J]+"'");F.showPosition?Se="Parse error on line "+(k+1)+`:
2406 +`+F.showPosition()+`
2407 +Expecting `+Z.join(", ")+", got '"+(this.terminals_[ie]||ie)+"'":Se="Parse error on line "+(k+1)+": Unexpected "+(ie==M?"end of input":"'"+(this.terminals_[ie]||ie)+"'"),this.parseError(Se,{text:F.match,token:this.terminals_[ie]||ie,line:F.yylineno,loc:$,expected:Z})}if(he[0]instanceof Array&&he.length>1)throw new Error("Parse Error: multiple actions possible at state: "+le+", token: "+ie);switch(he[0]){case 1:E.push(ie),S.push(F.yytext),_.push(F.yylloc),E.push(he[1]),ie=null,ne?(ie=ne,ne=null):(L=F.yyleng,D=F.yytext,k=F.yylineno,$=F.yylloc,R>0&&R--);break;case 2:if(se=this.productions_[he[1]][1],te.$=S[S.length-se],te._$={first_line:_[_.length-(se||1)].first_line,last_line:_[_.length-1].last_line,first_column:_[_.length-(se||1)].first_column,last_column:_[_.length-1].last_column},H&&(te._$.range=[_[_.length-(se||1)].range[0],_[_.length-1].range[1]]),X=this.performAction.apply(te,[D,L,k,P.yy,he[1],S,_].concat(B)),typeof X<"u")return X;se&&(E=E.slice(0,-1*se*2),S=S.slice(0,-1*se),_=_.slice(0,-1*se)),E.push(this.productions_[he[1]][0]),S.push(te.$),_.push(te._$),ue=I[E[E.length-2]][E[E.length-1]],E.push(ue);break;case 3:return!0}}return!0},"parse")},x=function(){var w={EOF:1,parseError:o(function(T,E){if(this.yy.parser)this.yy.parser.parseError(T,E);else throw new Error(T)},"parseError"),setInput:o(function(C,T){return this.yy=T||this.yy||{},this._input=C,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var C=this._input[0];this.yytext+=C,this.yyleng++,this.offset++,this.match+=C,this.matched+=C;var T=C.match(/(?:\r\n?|\n).*/g);return T?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),C},"input"),unput:o(function(C){var T=C.length,E=C.split(/(?:\r\n?|\n)/g);this._input=C+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-T),this.offset-=T;var A=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),E.length-1&&(this.yylineno-=E.length-1);var S=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:E?(E.length===A.length?this.yylloc.first_column:0)+A[A.length-E.length].length-E[0].length:this.yylloc.first_column-T},this.options.ranges&&(this.yylloc.range=[S[0],S[0]+this.yyleng-T]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
2408 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(C){this.unput(this.match.slice(C))},"less"),pastInput:o(function(){var C=this.matched.substr(0,this.matched.length-this.match.length);return(C.length>20?"...":"")+C.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var C=this.match;return C.length<20&&(C+=this._input.substr(0,20-C.length)),(C.substr(0,20)+(C.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var C=this.pastInput(),T=new Array(C.length+1).join("-");return C+this.upcomingInput()+`
2409 +`+T+"^"},"showPosition"),test_match:o(function(C,T){var E,A,S;if(this.options.backtrack_lexer&&(S={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(S.yylloc.range=this.yylloc.range.slice(0))),A=C[0].match(/(?:\r\n?|\n).*/g),A&&(this.yylineno+=A.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:A?A[A.length-1].length-A[A.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+C[0].length},this.yytext+=C[0],this.match+=C[0],this.matches=C,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(C[0].length),this.matched+=C[0],E=this.performAction.call(this,this.yy,this,T,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),E)return E;if(this._backtrack){for(var _ in S)this[_]=S[_];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var C,T,E,A;this._more||(this.yytext="",this.match="");for(var S=this._currentRules(),_=0;_<S.length;_++)if(E=this._input.match(this.rules[S[_]]),E&&(!T||E[0].length>T[0].length)){if(T=E,A=_,this.options.backtrack_lexer){if(C=this.test_match(E,S[_]),C!==!1)return C;if(this._backtrack){T=!1;continue}else return!1}else if(!this.options.flex)break}return T?(C=this.test_match(T,S[A]),C!==!1?C:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
2410 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var T=this.next();return T||this.lex()},"lex"),begin:o(function(T){this.conditionStack.push(T)},"begin"),popState:o(function(){var T=this.conditionStack.length-1;return T>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(T){return T=this.conditionStack.length-1-Math.abs(T||0),T>=0?this.conditionStack[T]:"INITIAL"},"topState"),pushState:o(function(T){this.begin(T)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(T,E,A,S){var _=S;switch(A){case 0:return 10;case 1:return T.getLogger().debug("Found space-block"),31;break;case 2:return T.getLogger().debug("Found nl-block"),31;break;case 3:return T.getLogger().debug("Found space-block"),29;break;case 4:T.getLogger().debug(".",E.yytext);break;case 5:T.getLogger().debug("_",E.yytext);break;case 6:return 5;case 7:return E.yytext=-1,28;break;case 8:return E.yytext=E.yytext.replace(/columns\s+/,""),T.getLogger().debug("COLUMNS (LEX)",E.yytext),28;break;case 9:this.pushState("md_string");break;case 10:return"MD_STR";case 11:this.popState();break;case 12:this.pushState("string");break;case 13:T.getLogger().debug("LEX: POPPING STR:",E.yytext),this.popState();break;case 14:return T.getLogger().debug("LEX: STR end:",E.yytext),"STR";break;case 15:return E.yytext=E.yytext.replace(/space\:/,""),T.getLogger().debug("SPACE NUM (LEX)",E.yytext),21;break;case 16:return E.yytext="1",T.getLogger().debug("COLUMNS (LEX)",E.yytext),21;break;case 17:return 43;case 18:return"LINKSTYLE";case 19:return"INTERPOLATE";case 20:return this.pushState("CLASSDEF"),40;break;case 21:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 22:return this.popState(),this.pushState("CLASSDEFID"),41;break;case 23:return this.popState(),42;break;case 24:return this.pushState("CLASS"),44;break;case 25:return this.popState(),this.pushState("CLASS_STYLE"),45;break;case 26:return this.popState(),46;break;case 27:return this.pushState("STYLE_STMNT"),47;break;case 28:return this.popState(),this.pushState("STYLE_DEFINITION"),48;break;case 29:return this.popState(),49;break;case 30:return this.pushState("acc_title"),"acc_title";break;case 31:return this.popState(),"acc_title_value";break;case 32:return this.pushState("acc_descr"),"acc_descr";break;case 33:return this.popState(),"acc_descr_value";break;case 34:this.pushState("acc_descr_multiline");break;case 35:this.popState();break;case 36:return"acc_descr_multiline_value";case 37:return 30;case 38:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 39:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 40:return this.popState(),T.getLogger().debug("Lex: ))"),"NODE_DEND";break;case 41:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 42:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 43:return this.popState(),T.getLogger().debug("Lex: (-"),"NODE_DEND";break;case 44:return this.popState(),T.getLogger().debug("Lex: -)"),"NODE_DEND";break;case 45:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 46:return this.popState(),T.getLogger().debug("Lex: ]]"),"NODE_DEND";break;case 47:return this.popState(),T.getLogger().debug("Lex: ("),"NODE_DEND";break;case 48:return this.popState(),T.getLogger().debug("Lex: ])"),"NODE_DEND";break;case 49:return this.popState(),T.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 50:return this.popState(),T.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 51:return this.popState(),T.getLogger().debug("Lex: )]"),"NODE_DEND";break;case 52:return this.popState(),T.getLogger().debug("Lex: )"),"NODE_DEND";break;case 53:return this.popState(),T.getLogger().debug("Lex: ]>"),"NODE_DEND";break;case 54:return this.popState(),T.getLogger().debug("Lex: ]"),"NODE_DEND";break;case 55:return T.getLogger().debug("Lexa: -)"),this.pushState("NODE"),36;break;case 56:return T.getLogger().debug("Lexa: (-"),this.pushState("NODE"),36;break;case 57:return T.getLogger().debug("Lexa: ))"),this.pushState("NODE"),36;break;case 58:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 59:return T.getLogger().debug("Lex: ((("),this.pushState("NODE"),36;break;case 60:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 61:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 62:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 63:return T.getLogger().debug("Lexc: >"),this.pushState("NODE"),36;break;case 64:return T.getLogger().debug("Lexa: (["),this.pushState("NODE"),36;break;case 65:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 66:return this.pushState("NODE"),36;break;case 67:return this.pushState("NODE"),36;break;case 68:return this.pushState("NODE"),36;break;case 69:return this.pushState("NODE"),36;break;case 70:return this.pushState("NODE"),36;break;case 71:return this.pushState("NODE"),36;break;case 72:return this.pushState("NODE"),36;break;case 73:return T.getLogger().debug("Lexa: ["),this.pushState("NODE"),36;break;case 74:return this.pushState("BLOCK_ARROW"),T.getLogger().debug("LEX ARR START"),38;break;case 75:return T.getLogger().debug("Lex: NODE_ID",E.yytext),32;break;case 76:return T.getLogger().debug("Lex: EOF",E.yytext),8;break;case 77:this.pushState("md_string");break;case 78:this.pushState("md_string");break;case 79:return"NODE_DESCR";case 80:this.popState();break;case 81:T.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 82:T.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 83:return T.getLogger().debug("LEX: NODE_DESCR:",E.yytext),"NODE_DESCR";break;case 84:T.getLogger().debug("LEX POPPING"),this.popState();break;case 85:T.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 86:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (right): dir:",E.yytext),"DIR";break;case 87:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (left):",E.yytext),"DIR";break;case 88:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (x):",E.yytext),"DIR";break;case 89:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (y):",E.yytext),"DIR";break;case 90:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (up):",E.yytext),"DIR";break;case 91:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (down):",E.yytext),"DIR";break;case 92:return E.yytext="]>",T.getLogger().debug("Lex (ARROW_DIR end):",E.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";break;case 93:return T.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 94:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 95:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 96:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 97:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 98:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 99:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 100:this.pushState("md_string");break;case 101:return T.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";break;case 102:return this.popState(),T.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 103:return this.popState(),T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 104:return this.popState(),T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 105:return T.getLogger().debug("Lex: COLON",E.yytext),E.yytext=E.yytext.slice(1),27;break}},"anonymous"),rules:[/^(?:block-beta\b)/,/^(?:block\s+)/,/^(?:block\n+)/,/^(?:block:)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[29],inclusive:!1},STYLE_STMNT:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[23],inclusive:!1},CLASSDEF:{rules:[21,22],inclusive:!1},CLASS_STYLE:{rules:[26],inclusive:!1},CLASS:{rules:[25],inclusive:!1},LLABEL:{rules:[100,101,102,103,104],inclusive:!1},ARROW_DIR:{rules:[86,87,88,89,90,91,92],inclusive:!1},BLOCK_ARROW:{rules:[77,82,85],inclusive:!1},NODE:{rules:[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,78,81],inclusive:!1},md_string:{rules:[10,11,79,80],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[13,14,83,84],inclusive:!1},acc_descr_multiline:{rules:[35,36],inclusive:!1},acc_descr:{rules:[33],inclusive:!1},acc_title:{rules:[31],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,12,15,16,17,18,19,20,24,27,30,32,34,37,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,93,94,95,96,97,98,99,105],inclusive:!0}}};return w}();v.lexer=x;function b(){this.yy={}}return o(b,"Parser"),b.prototype=v,v.Parser=b,new b}();KB.parser=KB;bye=KB});function Yet(t){switch(Y.debug("typeStr2Type",t),t){case"[]":return"square";case"()":return Y.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}}function Xet(t){switch(Y.debug("typeStr2Type",t),t){case"==":return"thick";default:return"normal"}}function jet(t){switch(t.trim()){case"--x":return"arrow_cross";case"--o":return"arrow_circle";default:return"arrow_point"}}var Ul,ZB,QB,Tye,kye,zet,Sye,Get,eC,Vet,Uet,Het,Wet,Cye,JB,y4,qet,Eye,Ket,Qet,Zet,Jet,ett,ttt,rtt,ntt,itt,att,stt,Aye,_ye=N(()=>{"use strict";gL();ji();zt();vt();gr();mi();Ul=new Map,ZB=[],QB=new Map,Tye="color",kye="fill",zet="bgFill",Sye=",",Get=me(),eC=new Map,Vet=o(t=>Ze.sanitizeText(t,Get),"sanitizeText"),Uet=o(function(t,e=""){let r=eC.get(t);r||(r={id:t,styles:[],textStyles:[]},eC.set(t,r)),e?.split(Sye).forEach(n=>{let i=n.replace(/([^;]*);/,"$1").trim();if(RegExp(Tye).exec(n)){let s=i.replace(kye,zet).replace(Tye,kye);r.textStyles.push(s)}r.styles.push(i)})},"addStyleClass"),Het=o(function(t,e=""){let r=Ul.get(t);e!=null&&(r.styles=e.split(Sye))},"addStyle2Node"),Wet=o(function(t,e){t.split(",").forEach(function(r){let n=Ul.get(r);if(n===void 0){let i=r.trim();n={id:i,type:"na",children:[]},Ul.set(i,n)}n.classes||(n.classes=[]),n.classes.push(e)})},"setCssClass"),Cye=o((t,e)=>{let r=t.flat(),n=[];for(let i of r){if(i.label&&(i.label=Vet(i.label)),i.type==="classDef"){Uet(i.id,i.css);continue}if(i.type==="applyClass"){Wet(i.id,i?.styleClass??"");continue}if(i.type==="applyStyles"){i?.stylesStr&&Het(i.id,i?.stylesStr);continue}if(i.type==="column-setting")e.columns=i.columns??-1;else if(i.type==="edge"){let a=(QB.get(i.id)??0)+1;QB.set(i.id,a),i.id=a+"-"+i.id,ZB.push(i)}else{i.label||(i.type==="composite"?i.label="":i.label=i.id);let a=Ul.get(i.id);if(a===void 0?Ul.set(i.id,i):(i.type!=="na"&&(a.type=i.type),i.label!==i.id&&(a.label=i.label)),i.children&&Cye(i.children,i),i.type==="space"){let s=i.width??1;for(let l=0;l<s;l++){let u=an(i);u.id=u.id+"-"+l,Ul.set(u.id,u),n.push(u)}}else a===void 0&&n.push(i)}}e.children=n},"populateBlockDatabase"),JB=[],y4={id:"root",type:"composite",children:[],columns:-1},qet=o(()=>{Y.debug("Clear called"),Ar(),y4={id:"root",type:"composite",children:[],columns:-1},Ul=new Map([["root",y4]]),JB=[],eC=new Map,ZB=[],QB=new Map},"clear");o(Yet,"typeStr2Type");o(Xet,"edgeTypeStr2Type");o(jet,"edgeStrToEdgeData");Eye=0,Ket=o(()=>(Eye++,"id-"+Math.random().toString(36).substr(2,12)+"-"+Eye),"generateId"),Qet=o(t=>{y4.children=t,Cye(t,y4),JB=y4.children},"setHierarchy"),Zet=o(t=>{let e=Ul.get(t);return e?e.columns?e.columns:e.children?e.children.length:-1:-1},"getColumns"),Jet=o(()=>[...Ul.values()],"getBlocksFlat"),ett=o(()=>JB||[],"getBlocks"),ttt=o(()=>ZB,"getEdges"),rtt=o(t=>Ul.get(t),"getBlock"),ntt=o(t=>{Ul.set(t.id,t)},"setBlock"),itt=o(()=>console,"getLogger"),att=o(function(){return eC},"getClasses"),stt={getConfig:o(()=>cr().block,"getConfig"),typeStr2Type:Yet,edgeTypeStr2Type:Xet,edgeStrToEdgeData:jet,getLogger:itt,getBlocksFlat:Jet,getBlocks:ett,getEdges:ttt,setHierarchy:Qet,getBlock:rtt,setBlock:ntt,getColumns:Zet,getClasses:att,clear:qet,generateId:Ket},Aye=stt});var tC,ott,Dye,Lye=N(()=>{"use strict";Ys();tC=o((t,e)=>{let r=Kf,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return qa(n,i,a,e)},"fade"),ott=o(t=>`.label {
2411 + font-family: ${t.fontFamily};
2412 + color: ${t.nodeTextColor||t.textColor};
2413 + }
2414 + .cluster-label text {
2415 + fill: ${t.titleColor};
2416 + }
2417 + .cluster-label span,p {
2418 + color: ${t.titleColor};
2419 + }
2420 +
2421 +
2422 +
2423 + .label text,span,p {
2424 + fill: ${t.nodeTextColor||t.textColor};
2425 + color: ${t.nodeTextColor||t.textColor};
2426 + }
2427 +
2428 + .node rect,
2429 + .node circle,
2430 + .node ellipse,
2431 + .node polygon,
2432 + .node path {
2433 + fill: ${t.mainBkg};
2434 + stroke: ${t.nodeBorder};
2435 + stroke-width: 1px;
2436 + }
2437 + .flowchart-label text {
2438 + text-anchor: middle;
2439 + }
2440 + // .flowchart-label .text-outer-tspan {
2441 + // text-anchor: middle;
2442 + // }
2443 + // .flowchart-label .text-inner-tspan {
2444 + // text-anchor: start;
2445 + // }
2446 +
2447 + .node .label {
2448 + text-align: center;
2449 + }
2450 + .node.clickable {
2451 + cursor: pointer;
2452 + }
2453 +
2454 + .arrowheadPath {
2455 + fill: ${t.arrowheadColor};
2456 + }
2457 +
2458 + .edgePath .path {
2459 + stroke: ${t.lineColor};
2460 + stroke-width: 2.0px;
2461 + }
2462 +
2463 + .flowchart-link {
2464 + stroke: ${t.lineColor};
2465 + fill: none;
2466 + }
2467 +
2468 + .edgeLabel {
2469 + background-color: ${t.edgeLabelBackground};
2470 + rect {
2471 + opacity: 0.5;
2472 + background-color: ${t.edgeLabelBackground};
2473 + fill: ${t.edgeLabelBackground};
2474 + }
2475 + text-align: center;
2476 + }
2477 +
2478 + /* For html labels only */
2479 + .labelBkg {
2480 + background-color: ${tC(t.edgeLabelBackground,.5)};
2481 + // background-color:
2482 + }
2483 +
2484 + .node .cluster {
2485 + // fill: ${tC(t.mainBkg,.5)};
2486 + fill: ${tC(t.clusterBkg,.5)};
2487 + stroke: ${tC(t.clusterBorder,.2)};
2488 + box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px;
2489 + stroke-width: 1px;
2490 + }
2491 +
2492 + .cluster text {
2493 + fill: ${t.titleColor};
2494 + }
2495 +
2496 + .cluster span,p {
2497 + color: ${t.titleColor};
2498 + }
2499 + /* .cluster div {
2500 + color: ${t.titleColor};
2501 + } */
2502 +
2503 + div.mermaidTooltip {
2504 + position: absolute;
2505 + text-align: center;
2506 + max-width: 200px;
2507 + padding: 2px;
2508 + font-family: ${t.fontFamily};
2509 + font-size: 12px;
2510 + background: ${t.tertiaryColor};
2511 + border: 1px solid ${t.border2};
2512 + border-radius: 2px;
2513 + pointer-events: none;
2514 + z-index: 100;
2515 + }
2516 +
2517 + .flowchartTitleText {
2518 + text-anchor: middle;
2519 + font-size: 18px;
2520 + fill: ${t.textColor};
2521 + }
2522 +`,"getStyles"),Dye=ott});var ltt,ctt,utt,htt,ftt,dtt,ptt,mtt,gtt,ytt,vtt,Rye,Nye=N(()=>{"use strict";vt();ltt=o((t,e,r,n)=>{e.forEach(i=>{vtt[i](t,r,n)})},"insertMarkers"),ctt=o((t,e,r)=>{Y.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),utt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),htt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),ftt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),dtt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),ptt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),mtt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),gtt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),ytt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),vtt={extension:ctt,composition:utt,aggregation:htt,dependency:ftt,lollipop:dtt,point:ptt,circle:mtt,cross:gtt,barb:ytt},Rye=ltt});function xtt(t,e){if(t===0||!Number.isInteger(t))throw new Error("Columns must be an integer !== 0.");if(e<0||!Number.isInteger(e))throw new Error("Position must be a non-negative integer."+e);if(t<0)return{px:e,py:0};if(t===1)return{px:0,py:e};let r=e%t,n=Math.floor(e/t);return{px:r,py:n}}function eF(t,e,r=0,n=0){Y.debug("setBlockSizes abc95 (start)",t.id,t?.size?.x,"block width =",t?.size,"sieblingWidth",r),t?.size?.width||(t.size={width:r,height:n,x:0,y:0});let i=0,a=0;if(t.children?.length>0){for(let m of t.children)eF(m,e);let s=btt(t);i=s.width,a=s.height,Y.debug("setBlockSizes abc95 maxWidth of",t.id,":s children is ",i,a);for(let m of t.children)m.size&&(Y.debug(`abc95 Setting size of children of ${t.id} id=${m.id} ${i} ${a} ${JSON.stringify(m.size)}`),m.size.width=i*(m.widthInColumns??1)+bi*((m.widthInColumns??1)-1),m.size.height=a,m.size.x=0,m.size.y=0,Y.debug(`abc95 updating size of ${t.id} children child:${m.id} maxWidth:${i} maxHeight:${a}`));for(let m of t.children)eF(m,e,i,a);let l=t.columns??-1,u=0;for(let m of t.children)u+=m.widthInColumns??1;let h=t.children.length;l>0&&l<u&&(h=l);let f=Math.ceil(u/h),d=h*(i+bi)+bi,p=f*(a+bi)+bi;if(d<r){Y.debug(`Detected to small siebling: abc95 ${t.id} sieblingWidth ${r} sieblingHeight ${n} width ${d}`),d=r,p=n;let m=(r-h*bi-bi)/h,g=(n-f*bi-bi)/f;Y.debug("Size indata abc88",t.id,"childWidth",m,"maxWidth",i),Y.debug("Size indata abc88",t.id,"childHeight",g,"maxHeight",a),Y.debug("Size indata abc88 xSize",h,"padding",bi);for(let y of t.children)y.size&&(y.size.width=m,y.size.height=g,y.size.x=0,y.size.y=0)}if(Y.debug(`abc95 (finale calc) ${t.id} xSize ${h} ySize ${f} columns ${l}${t.children.length} width=${Math.max(d,t.size?.width||0)}`),d<(t?.size?.width||0)){d=t?.size?.width||0;let m=l>0?Math.min(t.children.length,l):t.children.length;if(m>0){let g=(d-m*bi-bi)/m;Y.debug("abc95 (growing to fit) width",t.id,d,t.size?.width,g);for(let y of t.children)y.size&&(y.size.width=g)}}t.size={width:d,height:p,x:0,y:0}}Y.debug("setBlockSizes abc94 (done)",t.id,t?.size?.x,t?.size?.width,t?.size?.y,t?.size?.height)}function Mye(t,e){Y.debug(`abc85 layout blocks (=>layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`);let r=t.columns??-1;if(Y.debug("layoutBlocks columns abc95",t.id,"=>",r,t),t.children&&t.children.length>0){let n=t?.children[0]?.size?.width??0,i=t.children.length*n+(t.children.length-1)*bi;Y.debug("widthOfChildren 88",i,"posX");let a=0;Y.debug("abc91 block?.size?.x",t.id,t?.size?.x);let s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-bi,l=0;for(let u of t.children){let h=t;if(!u.size)continue;let{width:f,height:d}=u.size,{px:p,py:m}=xtt(r,a);if(m!=l&&(l=m,s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-bi,Y.debug("New row in layout for block",t.id," and child ",u.id,l)),Y.debug(`abc89 layout blocks (child) id: ${u.id} Pos: ${a} (px, py) ${p},${m} (${h?.size?.x},${h?.size?.y}) parent: ${h.id} width: ${f}${bi}`),h.size){let g=f/2;u.size.x=s+bi+g,Y.debug(`abc91 layout blocks (calc) px, pyid:${u.id} startingPos=X${s} new startingPosX${u.size.x} ${g} padding=${bi} width=${f} halfWidth=${g} => x:${u.size.x} y:${u.size.y} ${u.widthInColumns} (width * (child?.w || 1)) / 2 ${f*(u?.widthInColumns??1)/2}`),s=u.size.x+g,u.size.y=h.size.y-h.size.height/2+m*(d+bi)+d/2+bi,Y.debug(`abc88 layout blocks (calc) px, pyid:${u.id}startingPosX${s}${bi}${g}=>x:${u.size.x}y:${u.size.y}${u.widthInColumns}(width * (child?.w || 1)) / 2${f*(u?.widthInColumns??1)/2}`)}u.children&&Mye(u,e),a+=u?.widthInColumns??1,Y.debug("abc88 columnsPos",u,a)}}Y.debug(`layout blocks (<==layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`)}function Iye(t,{minX:e,minY:r,maxX:n,maxY:i}={minX:0,minY:0,maxX:0,maxY:0}){if(t.size&&t.id!=="root"){let{x:a,y:s,width:l,height:u}=t.size;a-l/2<e&&(e=a-l/2),s-u/2<r&&(r=s-u/2),a+l/2>n&&(n=a+l/2),s+u/2>i&&(i=s+u/2)}if(t.children)for(let a of t.children)({minX:e,minY:r,maxX:n,maxY:i}=Iye(a,{minX:e,minY:r,maxX:n,maxY:i}));return{minX:e,minY:r,maxX:n,maxY:i}}function Oye(t){let e=t.getBlock("root");if(!e)return;eF(e,t,0,0),Mye(e,t),Y.debug("getBlocks",JSON.stringify(e,null,2));let{minX:r,minY:n,maxX:i,maxY:a}=Iye(e),s=a-n,l=i-r;return{x:r,y:n,width:l,height:s}}var bi,btt,Pye=N(()=>{"use strict";vt();zt();bi=me()?.block?.padding??8;o(xtt,"calculateBlockPosition");btt=o(t=>{let e=0,r=0;for(let n of t.children){let{width:i,height:a,x:s,y:l}=n.size??{width:0,height:0,x:0,y:0};Y.debug("getMaxChildSize abc95 child:",n.id,"width:",i,"height:",a,"x:",s,"y:",l,n.type),n.type!=="space"&&(i>e&&(e=i/(t.widthInColumns??1)),a>r&&(r=a))}return{width:e,height:r}},"getMaxChildSize");o(eF,"setBlockSizes");o(Mye,"layoutBlocks");o(Iye,"findBounds");o(Oye,"layout")});function Bye(t,e){e&&t.attr("style",e)}function wtt(t){let e=Ge(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label,i=t.isNode?"nodeLabel":"edgeLabel",a=r.append("span");return a.html(n),Bye(a,t.labelStyle),a.attr("class",i),Bye(r,t.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var Ttt,vs,rC=N(()=>{"use strict";dr();vt();zt();gr();ir();to();o(Bye,"applyStyle");o(wtt,"addHtmlLabel");Ttt=o((t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),fr(me().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"<br />"),Y.debug("vertexText"+i);let a={isNode:n,label:DD(na(i)),labelStyle:e.replace("fill:","color:")};return wtt(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),vs=Ttt});var $ye,ktt,Fye,zye=N(()=>{"use strict";vt();$ye=o((t,e,r,n,i)=>{e.arrowTypeStart&&Fye(t,"start",e.arrowTypeStart,r,n,i),e.arrowTypeEnd&&Fye(t,"end",e.arrowTypeEnd,r,n,i)},"addEdgeMarkers"),ktt={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},Fye=o((t,e,r,n,i,a)=>{let s=ktt[r];if(!s){Y.warn(`Unknown arrow type: ${r}`);return}let l=e==="start"?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${a}-${s}${l})`)},"addEdgeMarker")});function nC(t,e){me().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}var tF,Ua,Vye,Uye,Ett,Stt,Gye,Hye,Wye=N(()=>{"use strict";vt();rC();to();dr();zt();ir();gr();JD();w2();zye();tF={},Ua={},Vye=o((t,e)=>{let r=me(),n=fr(r.flowchart.htmlLabels),i=e.labelType==="markdown"?Hn(t,e.label,{style:e.labelStyle,useHtmlLabels:n,addSvgBackground:!0},r):vs(e.label,e.labelStyle),a=t.insert("g").attr("class","edgeLabel"),s=a.insert("g").attr("class","label");s.node().appendChild(i);let l=i.getBBox();if(n){let h=i.children[0],f=Ge(i);l=h.getBoundingClientRect(),f.attr("width",l.width),f.attr("height",l.height)}s.attr("transform","translate("+-l.width/2+", "+-l.height/2+")"),tF[e.id]=a,e.width=l.width,e.height=l.height;let u;if(e.startLabelLeft){let h=vs(e.startLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].startLeft=f,nC(u,e.startLabelLeft)}if(e.startLabelRight){let h=vs(e.startLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=f.node().appendChild(h),d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].startRight=f,nC(u,e.startLabelRight)}if(e.endLabelLeft){let h=vs(e.endLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].endLeft=f,nC(u,e.endLabelLeft)}if(e.endLabelRight){let h=vs(e.endLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].endRight=f,nC(u,e.endLabelRight)}return i},"insertEdgeLabel");o(nC,"setTerminalWidth");Uye=o((t,e)=>{Y.debug("Moving label abc88 ",t.id,t.label,tF[t.id],e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=me(),{subGraphTitleTotalMargin:i}=Ru(n);if(t.label){let a=tF[t.id],s=t.x,l=t.y;if(r){let u=Gt.calcLabelPosition(r);Y.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=Ua[t.id].startLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=Ua[t.id].startRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=Ua[t.id].endLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=Ua[t.id].endRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),Ett=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),Stt=o((t,e,r)=>{Y.debug(`intersection calc abc89:
2523 + outsidePoint: ${JSON.stringify(e)}
2524 + insidePoint : ${JSON.stringify(r)}
2525 + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.x<e.x?s-a:s+a,u=t.height/2,h=Math.abs(e.y-r.y),f=Math.abs(e.x-r.x);if(Math.abs(i-e.y)*s>Math.abs(n-e.x)*u){let d=r.y<e.y?e.y-u-i:i-u-e.y;l=f*d/h;let p={x:r.x<e.x?r.x+l:r.x-f+l,y:r.y<e.y?r.y+h-d:r.y-h+d};return l===0&&(p.x=e.x,p.y=e.y),f===0&&(p.x=e.x),h===0&&(p.y=e.y),Y.debug(`abc89 topp/bott calc, Q ${h}, q ${d}, R ${f}, r ${l}`,p),p}else{r.x<e.x?l=e.x-s-n:l=n-s-e.x;let d=h*l/f,p=r.x<e.x?r.x+f-l:r.x-f+l,m=r.y<e.y?r.y+d:r.y-d;return Y.debug(`sides calc abc89, Q ${h}, q ${d}, R ${f}, r ${l}`,{_x:p,_y:m}),l===0&&(p=e.x,m=e.y),f===0&&(p=e.x),h===0&&(m=e.y),{x:p,y:m}}},"intersection"),Gye=o((t,e)=>{Y.debug("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(!Ett(e,a)&&!i){let s=Stt(e,n,a),l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)||r.push(s),i=!0}else n=a,i||r.push(a)}),r},"cutPathAtIntersect"),Hye=o(function(t,e,r,n,i,a,s){let l=r.points;Y.debug("abc88 InsertEdge: edge=",r,"e=",e);let u=!1,h=a.node(e.v);var f=a.node(e.w);f?.intersect&&h?.intersect&&(l=l.slice(1,r.points.length-1),l.unshift(h.intersect(l[0])),l.push(f.intersect(l[l.length-1]))),r.toCluster&&(Y.debug("to cluster abc88",n[r.toCluster]),l=Gye(r.points,n[r.toCluster].node),u=!0),r.fromCluster&&(Y.debug("from cluster abc88",n[r.fromCluster]),l=Gye(l.reverse(),n[r.fromCluster].node).reverse(),u=!0);let d=l.filter(C=>!Number.isNaN(C.y)),p=Do;r.curve&&(i==="graph"||i==="flowchart")&&(p=r.curve);let{x:m,y:g}=qw(r),y=wl().x(m).y(g).curve(p),v;switch(r.thickness){case"normal":v="edge-thickness-normal";break;case"thick":v="edge-thickness-thick";break;case"invisible":v="edge-thickness-thick";break;default:v=""}switch(r.pattern){case"solid":v+=" edge-pattern-solid";break;case"dotted":v+=" edge-pattern-dotted";break;case"dashed":v+=" edge-pattern-dashed";break}let x=t.append("path").attr("d",y(d)).attr("id",r.id).attr("class"," "+v+(r.classes?" "+r.classes:"")).attr("style",r.style),b="";(me().flowchart.arrowMarkerAbsolute||me().state.arrowMarkerAbsolute)&&(b=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,b=b.replace(/\(/g,"\\("),b=b.replace(/\)/g,"\\)")),$ye(x,r,b,s,i);let w={};return u&&(w.updatedPath=l),w.originalPath=r.points,w},"insertEdge")});var Ctt,qye,Yye=N(()=>{"use strict";Ctt=o(t=>{let e=new Set;for(let r of t)switch(r){case"x":e.add("right"),e.add("left");break;case"y":e.add("up"),e.add("down");break;default:e.add(r);break}return e},"expandAndDeduplicateDirections"),qye=o((t,e,r)=>{let n=Ctt(t),i=2,a=e.height+2*r.padding,s=a/i,l=e.width+2*s+r.padding,u=r.padding/2;return n.has("right")&&n.has("left")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:s,y:0},{x:l/2,y:2*u},{x:l-s,y:0},{x:l,y:0},{x:l,y:-a/3},{x:l+2*u,y:-a/2},{x:l,y:-2*a/3},{x:l,y:-a},{x:l-s,y:-a},{x:l/2,y:-a-2*u},{x:s,y:-a},{x:0,y:-a},{x:0,y:-2*a/3},{x:-2*u,y:-a/2},{x:0,y:-a/3}]:n.has("right")&&n.has("left")&&n.has("up")?[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}]:n.has("right")&&n.has("left")&&n.has("down")?[{x:0,y:0},{x:s,y:-a},{x:l-s,y:-a},{x:l,y:0}]:n.has("right")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:l,y:-s},{x:l,y:-a+s},{x:0,y:-a}]:n.has("left")&&n.has("up")&&n.has("down")?[{x:l,y:0},{x:0,y:-s},{x:0,y:-a+s},{x:l,y:-a}]:n.has("right")&&n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")&&n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:n.has("right")&&n.has("up")?[{x:0,y:0},{x:l,y:-s},{x:0,y:-a}]:n.has("right")&&n.has("down")?[{x:0,y:0},{x:l,y:0},{x:0,y:-a}]:n.has("left")&&n.has("up")?[{x:l,y:0},{x:0,y:-s},{x:l,y:-a}]:n.has("left")&&n.has("down")?[{x:l,y:0},{x:0,y:0},{x:l,y:-a}]:n.has("right")?[{x:s,y:-u},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a+u}]:n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")?[{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u}]:n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:[{x:0,y:0}]},"getArrowPoints")});function Att(t,e){return t.intersect(e)}var Xye,jye=N(()=>{"use strict";o(Att,"intersectNode");Xye=Att});function _tt(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x<i&&(h=-h);var f=Math.abs(e*r*l/u);return n.y<a&&(f=-f),{x:i+h,y:a+f}}var iC,rF=N(()=>{"use strict";o(_tt,"intersectEllipse");iC=_tt});function Dtt(t,e,r){return iC(t,e,e,r)}var Kye,Qye=N(()=>{"use strict";rF();o(Dtt,"intersectCircle");Kye=Dtt});function Ltt(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&Zye(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&Zye(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function Zye(t,e){return t*e>0}var Jye,eve=N(()=>{"use strict";o(Ltt,"intersectLine");o(Zye,"sameSign");Jye=Ltt});function Rtt(t,e,r){var n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(g){s=Math.min(s,g.x),l=Math.min(l,g.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));for(var u=n-t.width/2-s,h=i-t.height/2-l,f=0;f<e.length;f++){var d=e[f],p=e[f<e.length-1?f+1:0],m=Jye(t,r,{x:u+d.x,y:h+d.y},{x:u+p.x,y:h+p.y});m&&a.push(m)}return a.length?(a.length>1&&a.sort(function(g,y){var v=g.x-r.x,x=g.y-r.y,b=Math.sqrt(v*v+x*x),w=y.x-r.x,C=y.y-r.y,T=Math.sqrt(w*w+C*C);return b<T?-1:b===T?0:1}),a[0]):t}var tve,rve=N(()=>{"use strict";eve();tve=Rtt;o(Rtt,"intersectPolygon")});var Ntt,nve,ive=N(()=>{"use strict";Ntt=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),nve=Ntt});var In,nF=N(()=>{"use strict";jye();Qye();rF();rve();ive();In={node:Xye,circle:Kye,ellipse:iC,polygon:tve,rect:nve}});function Hl(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Di,Qn,iF=N(()=>{"use strict";rC();to();zt();dr();gr();ir();Di=o(async(t,e,r,n)=>{let i=me(),a,s=e.useHtmlLabels||fr(i.flowchart.htmlLabels);r?a=r:a="node default";let l=t.insert("g").attr("class",a).attr("id",e.domId||e.id),u=l.insert("g").attr("class","label").attr("style",e.labelStyle),h;e.labelText===void 0?h="":h=typeof e.labelText=="string"?e.labelText:e.labelText[0];let f=u.node(),d;e.labelType==="markdown"?d=Hn(u,Tr(na(h),i),{useHtmlLabels:s,width:e.width||i.flowchart.wrappingWidth,classes:"markdown-node-label"},i):d=f.appendChild(vs(Tr(na(h),i),e.labelStyle,!1,n));let p=d.getBBox(),m=e.padding/2;if(fr(i.flowchart.htmlLabels)){let g=d.children[0],y=Ge(d),v=g.getElementsByTagName("img");if(v){let x=h.replace(/<img[^>]*>/g,"").trim()==="";await Promise.all([...v].map(b=>new Promise(w=>{function C(){if(b.style.display="flex",b.style.flexDirection="column",x){let T=i.fontSize?i.fontSize:window.getComputedStyle(document.body).fontSize,A=parseInt(T,10)*5+"px";b.style.minWidth=A,b.style.maxWidth=A}else b.style.width="100%";w(b)}o(C,"setupImage"),setTimeout(()=>{b.complete&&C()}),b.addEventListener("error",C),b.addEventListener("load",C)})))}p=g.getBoundingClientRect(),y.attr("width",p.width),y.attr("height",p.height)}return s?u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"):u.attr("transform","translate(0, "+-p.height/2+")"),e.centerLabel&&u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),u.insert("rect",":first-child"),{shapeSvg:l,bbox:p,halfPadding:m,label:u}},"labelHelper"),Qn=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds");o(Hl,"insertPolygonShape")});var Mtt,ave,sve=N(()=>{"use strict";iF();vt();zt();nF();Mtt=o(async(t,e)=>{e.useHtmlLabels||me().flowchart.htmlLabels||(e.centerLabel=!0);let{shapeSvg:n,bbox:i,halfPadding:a}=await Di(t,e,"node "+e.classes,!0);Y.info("Classes = ",e.classes);let s=n.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),Qn(e,s),e.intersect=function(l){return In.rect(e,l)},n},"note"),ave=Mtt});function aF(t,e,r,n){let i=[],a=o(l=>{i.push(l,0)},"addBorder"),s=o(l=>{i.push(0,l)},"skipBorder");e.includes("t")?(Y.debug("add top border"),a(r)):s(r),e.includes("r")?(Y.debug("add right border"),a(n)):s(n),e.includes("b")?(Y.debug("add bottom border"),a(r)):s(r),e.includes("l")?(Y.debug("add left border"),a(n)):s(n),t.attr("stroke-dasharray",i.join(" "))}var ove,yo,lve,Itt,Ott,Ptt,Btt,Ftt,$tt,ztt,Gtt,Vtt,Utt,Htt,Wtt,qtt,Ytt,Xtt,jtt,Ktt,Qtt,Ztt,cve,Jtt,ert,uve,aC,sF,hve,fve=N(()=>{"use strict";dr();zt();gr();vt();Yye();rC();nF();sve();iF();ove=o(t=>t?" "+t:"","formatClass"),yo=o((t,e)=>`${e||"node default"}${ove(t.classes)} ${ove(t.class)}`,"getClassesFromNode"),lve=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=i+a,l=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];Y.info("Question main (Circle)");let u=Hl(r,s,s,l);return u.attr("style",e.style),Qn(e,u),e.intersect=function(h){return Y.warn("Intersect called"),In.polygon(e,l,h)},r},"question"),Itt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=28,i=[{x:0,y:n/2},{x:n/2,y:0},{x:0,y:-n/2},{x:-n/2,y:0}];return r.insert("polygon",":first-child").attr("points",i.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(s){return In.circle(e,14,s)},r},"choice"),Ott=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=4,a=n.height+e.padding,s=a/i,l=n.width+2*s+e.padding,u=[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}],h=Hl(r,l,a,u);return h.attr("style",e.style),Qn(e,h),e.intersect=function(f){return In.polygon(e,u,f)},r},"hexagon"),Ptt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,void 0,!0),i=2,a=n.height+2*e.padding,s=a/i,l=n.width+2*s+e.padding,u=qye(e.directions,n,e),h=Hl(r,l,a,u);return h.attr("style",e.style),Qn(e,h),e.intersect=function(f){return In.polygon(e,u,f)},r},"block_arrow"),Btt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-a/2,y:0},{x:i,y:0},{x:i,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return Hl(r,i,a,s).attr("style",e.style),e.width=i+a,e.height=a,e.intersect=function(u){return In.polygon(e,s,u)},r},"rect_left_inv_arrow"),Ftt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:a/6,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"lean_right"),$tt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:2*a/6,y:0},{x:i+a/6,y:0},{x:i-2*a/6,y:-a},{x:-a/6,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"lean_left"),ztt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i+2*a/6,y:0},{x:i-a/6,y:-a},{x:a/6,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"trapezoid"),Gtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:-2*a/6,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"inv_trapezoid"),Vtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i+a/2,y:0},{x:i,y:-a/2},{x:i+a/2,y:-a},{x:0,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"rect_right_inv_arrow"),Utt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=i/2,s=a/(2.5+i/50),l=n.height+s+e.padding,u="M 0,"+s+" a "+a+","+s+" 0,0,0 "+i+" 0 a "+a+","+s+" 0,0,0 "+-i+" 0 l 0,"+l+" a "+a+","+s+" 0,0,0 "+i+" 0 l 0,"+-l,h=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",u).attr("transform","translate("+-i/2+","+-(l/2+s)+")");return Qn(e,h),e.intersect=function(f){let d=In.rect(e,f),p=d.x-e.x;if(a!=0&&(Math.abs(p)<e.width/2||Math.abs(p)==e.width/2&&Math.abs(d.y-e.y)>e.height/2-s)){let m=s*s*(1-p*p/(a*a));m!=0&&(m=Math.sqrt(m)),m=s-m,f.y-e.y>0&&(m=-m),d.y+=m}return d},r},"cylinder"),Htt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Di(t,e,"node "+e.classes+" "+e.class,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(aF(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{Y.warn(`Unknown node property ${d}`)})}return Qn(e,a),e.intersect=function(f){return In.rect(e,f)},r},"rect"),Wtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Di(t,e,"node "+e.classes,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic cluster composite label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(aF(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{Y.warn(`Unknown node property ${d}`)})}return Qn(e,a),e.intersect=function(f){return In.rect(e,f)},r},"composite"),qtt=o(async(t,e)=>{let{shapeSvg:r}=await Di(t,e,"label",!0);Y.trace("Classes = ",e.class);let n=r.insert("rect",":first-child"),i=0,a=0;if(n.attr("width",i).attr("height",a),r.attr("class","label edgeLabel"),e.props){let s=new Set(Object.keys(e.props));e.props.borders&&(aF(n,e.props.borders,i,a),s.delete("borders")),s.forEach(l=>{Y.warn(`Unknown node property ${l}`)})}return Qn(e,n),e.intersect=function(s){return In.rect(e,s)},r},"labelRect");o(aF,"applyNodePropertyBorders");Ytt=o((t,e)=>{let r;e.classes?r="node "+e.classes:r="node default";let n=t.insert("g").attr("class",r).attr("id",e.domId||e.id),i=n.insert("rect",":first-child"),a=n.insert("line"),s=n.insert("g").attr("class","label"),l=e.labelText.flat?e.labelText.flat():e.labelText,u="";typeof l=="object"?u=l[0]:u=l,Y.info("Label text abc79",u,l,typeof l=="object");let h=s.node().appendChild(vs(u,e.labelStyle,!0,!0)),f={width:0,height:0};if(fr(me().flowchart.htmlLabels)){let y=h.children[0],v=Ge(h);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}Y.info("Text 2",l);let d=l.slice(1,l.length),p=h.getBBox(),m=s.node().appendChild(vs(d.join?d.join("<br/>"):d,e.labelStyle,!0,!0));if(fr(me().flowchart.htmlLabels)){let y=m.children[0],v=Ge(m);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}let g=e.padding/2;return Ge(m).attr("transform","translate( "+(f.width>p.width?0:(p.width-f.width)/2)+", "+(p.height+g+5)+")"),Ge(h).attr("transform","translate( "+(f.width<p.width?0:-(p.width-f.width)/2)+", 0)"),f=s.node().getBBox(),s.attr("transform","translate("+-f.width/2+", "+(-f.height/2-g+3)+")"),i.attr("class","outer title-state").attr("x",-f.width/2-g).attr("y",-f.height/2-g).attr("width",f.width+e.padding).attr("height",f.height+e.padding),a.attr("class","divider").attr("x1",-f.width/2-g).attr("x2",f.width/2+g).attr("y1",-f.height/2-g+p.height+g).attr("y2",-f.height/2-g+p.height+g),Qn(e,i),e.intersect=function(y){return In.rect(e,y)},n},"rectWithTitle"),Xtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.height+e.padding,a=n.width+i/4+e.padding,s=r.insert("rect",":first-child").attr("style",e.style).attr("rx",i/2).attr("ry",i/2).attr("x",-a/2).attr("y",-i/2).attr("width",a).attr("height",i);return Qn(e,s),e.intersect=function(l){return In.rect(e,l)},r},"stadium"),jtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Di(t,e,yo(e,void 0),!0),a=r.insert("circle",":first-child");return a.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),Y.info("Circle main"),Qn(e,a),e.intersect=function(s){return Y.info("Circle intersect",e,n.width/2+i,s),In.circle(e,n.width/2+i,s)},r},"circle"),Ktt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Di(t,e,yo(e,void 0),!0),a=5,s=r.insert("g",":first-child"),l=s.insert("circle"),u=s.insert("circle");return s.attr("class",e.class),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i+a).attr("width",n.width+e.padding+a*2).attr("height",n.height+e.padding+a*2),u.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),Y.info("DoubleCircle main"),Qn(e,l),e.intersect=function(h){return Y.info("DoubleCircle intersect",e,n.width/2+i+a,h),In.circle(e,n.width/2+i+a,h)},r},"doublecircle"),Qtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i,y:0},{x:i,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:i+8,y:0},{x:i+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"subroutine"),Ztt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),Qn(e,n),e.intersect=function(i){return In.circle(e,7,i)},r},"start"),cve=o((t,e,r)=>{let n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=70,a=10;r==="LR"&&(i=10,a=70);let s=n.append("rect").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return Qn(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(l){return In.rect(e,l)},n},"forkJoin"),Jtt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child"),i=r.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),n.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),Qn(e,i),e.intersect=function(a){return In.circle(e,7,a)},r},"end"),ert=o((t,e)=>{let r=e.padding/2,n=4,i=8,a;e.classes?a="node "+e.classes:a="node default";let s=t.insert("g").attr("class",a).attr("id",e.domId||e.id),l=s.insert("rect",":first-child"),u=s.insert("line"),h=s.insert("line"),f=0,d=n,p=s.insert("g").attr("class","label"),m=0,g=e.classData.annotations?.[0],y=e.classData.annotations[0]?"\xAB"+e.classData.annotations[0]+"\xBB":"",v=p.node().appendChild(vs(y,e.labelStyle,!0,!0)),x=v.getBBox();if(fr(me().flowchart.htmlLabels)){let S=v.children[0],_=Ge(v);x=S.getBoundingClientRect(),_.attr("width",x.width),_.attr("height",x.height)}e.classData.annotations[0]&&(d+=x.height+n,f+=x.width);let b=e.classData.label;e.classData.type!==void 0&&e.classData.type!==""&&(me().flowchart.htmlLabels?b+="&lt;"+e.classData.type+"&gt;":b+="<"+e.classData.type+">");let w=p.node().appendChild(vs(b,e.labelStyle,!0,!0));Ge(w).attr("class","classTitle");let C=w.getBBox();if(fr(me().flowchart.htmlLabels)){let S=w.children[0],_=Ge(w);C=S.getBoundingClientRect(),_.attr("width",C.width),_.attr("height",C.height)}d+=C.height+n,C.width>f&&(f=C.width);let T=[];e.classData.members.forEach(S=>{let _=S.getDisplayDetails(),I=_.displayText;me().flowchart.htmlLabels&&(I=I.replace(/</g,"&lt;").replace(/>/g,"&gt;"));let D=p.node().appendChild(vs(I,_.cssStyle?_.cssStyle:e.labelStyle,!0,!0)),k=D.getBBox();if(fr(me().flowchart.htmlLabels)){let L=D.children[0],R=Ge(D);k=L.getBoundingClientRect(),R.attr("width",k.width),R.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,T.push(D)}),d+=i;let E=[];if(e.classData.methods.forEach(S=>{let _=S.getDisplayDetails(),I=_.displayText;me().flowchart.htmlLabels&&(I=I.replace(/</g,"&lt;").replace(/>/g,"&gt;"));let D=p.node().appendChild(vs(I,_.cssStyle?_.cssStyle:e.labelStyle,!0,!0)),k=D.getBBox();if(fr(me().flowchart.htmlLabels)){let L=D.children[0],R=Ge(D);k=L.getBoundingClientRect(),R.attr("width",k.width),R.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,E.push(D)}),d+=i,g){let S=(f-x.width)/2;Ge(v).attr("transform","translate( "+(-1*f/2+S)+", "+-1*d/2+")"),m=x.height+n}let A=(f-C.width)/2;return Ge(w).attr("transform","translate( "+(-1*f/2+A)+", "+(-1*d/2+m)+")"),m+=C.height+n,u.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,T.forEach(S=>{Ge(S).attr("transform","translate( "+-f/2+", "+(-1*d/2+m+i/2)+")");let _=S?.getBBox();m+=(_?.height??0)+n}),m+=i,h.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,E.forEach(S=>{Ge(S).attr("transform","translate( "+-f/2+", "+(-1*d/2+m)+")");let _=S?.getBBox();m+=(_?.height??0)+n}),l.attr("style",e.style).attr("class","outer title-state").attr("x",-f/2-r).attr("y",-(d/2)-r).attr("width",f+e.padding).attr("height",d+e.padding),Qn(e,l),e.intersect=function(S){return In.rect(e,S)},s},"class_box"),uve={rhombus:lve,composite:Wtt,question:lve,rect:Htt,labelRect:qtt,rectWithTitle:Ytt,choice:Itt,circle:jtt,doublecircle:Ktt,stadium:Xtt,hexagon:Ott,block_arrow:Ptt,rect_left_inv_arrow:Btt,lean_right:Ftt,lean_left:$tt,trapezoid:ztt,inv_trapezoid:Gtt,rect_right_inv_arrow:Vtt,cylinder:Utt,start:Ztt,end:Jtt,note:ave,subroutine:Qtt,fork:cve,join:cve,class_box:ert},aC={},sF=o(async(t,e,r)=>{let n,i;if(e.link){let a;me().securityLevel==="sandbox"?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),i=await uve[e.shape](n,e,r)}else i=await uve[e.shape](t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),aC[e.id]=n,e.haveCallback&&aC[e.id].attr("class",aC[e.id].attr("class")+" clickable"),n},"insertNode"),hve=o(t=>{let e=aC[t.id];Y.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});function dve(t,e,r=!1){let n=t,i="default";(n?.classes?.length||0)>0&&(i=(n?.classes??[]).join(" ")),i=i+" flowchart-label";let a=0,s="",l;switch(n.type){case"round":a=5,s="rect";break;case"composite":a=0,s="composite",l=0;break;case"square":s="rect";break;case"diamond":s="question";break;case"hexagon":s="hexagon";break;case"block_arrow":s="block_arrow";break;case"odd":s="rect_left_inv_arrow";break;case"lean_right":s="lean_right";break;case"lean_left":s="lean_left";break;case"trapezoid":s="trapezoid";break;case"inv_trapezoid":s="inv_trapezoid";break;case"rect_left_inv_arrow":s="rect_left_inv_arrow";break;case"circle":s="circle";break;case"ellipse":s="ellipse";break;case"stadium":s="stadium";break;case"subroutine":s="subroutine";break;case"cylinder":s="cylinder";break;case"group":s="rect";break;case"doublecircle":s="doublecircle";break;default:s="rect"}let u=Y9(n?.styles??[]),h=n.label,f=n.size??{width:0,height:0,x:0,y:0};return{labelStyle:u.labelStyle,shape:s,labelText:h,rx:a,ry:a,class:i,style:u.style,id:n.id,directions:n.directions,width:f.width,height:f.height,x:f.x,y:f.y,positioned:r,intersect:void 0,type:n.type,padding:l??cr()?.block?.padding??0}}async function trt(t,e,r){let n=dve(e,r,!1);if(n.type==="group")return;let i=cr(),a=await sF(t,n,{config:i}),s=a.node().getBBox(),l=r.getBlock(n.id);l.size={width:s.width,height:s.height,x:0,y:0,node:a},r.setBlock(l),a.remove()}async function rrt(t,e,r){let n=dve(e,r,!0);if(r.getBlock(n.id).type!=="space"){let a=cr();await sF(t,n,{config:a}),e.intersect=n?.intersect,hve(n)}}async function oF(t,e,r,n){for(let i of e)await n(t,i,r),i.children&&await oF(t,i.children,r,n)}async function pve(t,e,r){await oF(t,e,r,trt)}async function mve(t,e,r){await oF(t,e,r,rrt)}async function gve(t,e,r,n,i){let a=new sn({multigraph:!0,compound:!0});a.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(let s of r)s.size&&a.setNode(s.id,{width:s.size.width,height:s.size.height,intersect:s.intersect});for(let s of e)if(s.start&&s.end){let l=n.getBlock(s.start),u=n.getBlock(s.end);if(l?.size&&u?.size){let h=l.size,f=u.size,d=[{x:h.x,y:h.y},{x:h.x+(f.x-h.x)/2,y:h.y+(f.y-h.y)/2},{x:f.x,y:f.y}];Hye(t,{v:s.start,w:s.end,name:s.id},{...s,arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",a,i),s.label&&(await Vye(t,{...s,label:s.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),Uye({...s,x:d[1].x,y:d[1].y},{originalPath:d}))}}}var yve=N(()=>{"use strict";Vo();ji();Wye();fve();ir();o(dve,"getNodeFromBlock");o(trt,"calculateBlockSize");o(rrt,"insertBlockPositioned");o(oF,"performOperations");o(pve,"calculateBlockSizes");o(mve,"insertBlocks");o(gve,"insertEdges")});var nrt,irt,vve,xve=N(()=>{"use strict";dr();ji();Nye();vt();Ei();Pye();yve();nrt=o(function(t,e){return e.db.getClasses()},"getClasses"),irt=o(async function(t,e,r,n){let{securityLevel:i,block:a}=cr(),s=n.db,l;i==="sandbox"&&(l=Ge("#i"+e));let u=i==="sandbox"?Ge(l.nodes()[0].contentDocument.body):Ge("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):Ge(`[id="${e}"]`);Rye(h,["point","circle","cross"],n.type,e);let d=s.getBlocks(),p=s.getBlocksFlat(),m=s.getEdges(),g=h.insert("g").attr("class","block");await pve(g,d,s);let y=Oye(s);if(await mve(g,d,s),await gve(g,m,p,s,e),y){let v=y,x=Math.max(1,Math.round(.125*(v.width/v.height))),b=v.height+x+10,w=v.width+10,{useMaxWidth:C}=a;vn(h,b,w,!!C),Y.debug("Here Bounds",y,v),h.attr("viewBox",`${v.x-5} ${v.y-5} ${v.width+10} ${v.height+10}`)}},"draw"),vve={draw:irt,getClasses:nrt}});var bve={};hr(bve,{diagram:()=>art});var art,wve=N(()=>{"use strict";wye();_ye();Lye();xve();art={parser:bye,db:Aye,renderer:vve,styles:Dye}});var lF,cF,v4,Eve,uF,Ha,Zc,x4,Sve,crt,b4,Cve,Ave,_ve,Dve,Lve,sC,Ff,oC=N(()=>{"use strict";lF={L:"left",R:"right",T:"top",B:"bottom"},cF={L:o(t=>`${t},${t/2} 0,${t} 0,0`,"L"),R:o(t=>`0,${t/2} ${t},0 ${t},${t}`,"R"),T:o(t=>`0,0 ${t},0 ${t/2},${t}`,"T"),B:o(t=>`${t/2},0 ${t},${t} 0,${t}`,"B")},v4={L:o((t,e)=>t-e+2,"L"),R:o((t,e)=>t-2,"R"),T:o((t,e)=>t-e+2,"T"),B:o((t,e)=>t-2,"B")},Eve=o(function(t){return Ha(t)?t==="L"?"R":"L":t==="T"?"B":"T"},"getOppositeArchitectureDirection"),uF=o(function(t){let e=t;return e==="L"||e==="R"||e==="T"||e==="B"},"isArchitectureDirection"),Ha=o(function(t){let e=t;return e==="L"||e==="R"},"isArchitectureDirectionX"),Zc=o(function(t){let e=t;return e==="T"||e==="B"},"isArchitectureDirectionY"),x4=o(function(t,e){let r=Ha(t)&&Zc(e),n=Zc(t)&&Ha(e);return r||n},"isArchitectureDirectionXY"),Sve=o(function(t){let e=t[0],r=t[1],n=Ha(e)&&Zc(r),i=Zc(e)&&Ha(r);return n||i},"isArchitecturePairXY"),crt=o(function(t){return t!=="LL"&&t!=="RR"&&t!=="TT"&&t!=="BB"},"isValidArchitectureDirectionPair"),b4=o(function(t,e){let r=`${t}${e}`;return crt(r)?r:void 0},"getArchitectureDirectionPair"),Cve=o(function([t,e],r){let n=r[0],i=r[1];return Ha(n)?Zc(i)?[t+(n==="L"?-1:1),e+(i==="T"?1:-1)]:[t+(n==="L"?-1:1),e]:Ha(i)?[t+(i==="L"?1:-1),e+(n==="T"?1:-1)]:[t,e+(n==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),Ave=o(function(t){return t==="LT"||t==="TL"?[1,1]:t==="BL"||t==="LB"?[1,-1]:t==="BR"||t==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),_ve=o(function(t,e){return x4(t,e)?"bend":Ha(t)?"horizontal":"vertical"},"getArchitectureDirectionAlignment"),Dve=o(function(t){return t.type==="service"},"isArchitectureService"),Lve=o(function(t){return t.type==="junction"},"isArchitectureJunction"),sC=o(t=>t.data(),"edgeData"),Ff=o(t=>t.data(),"nodeData")});function Li(t){let e=me().architecture;return e?.[t]?e[t]:Rve[t]}var Rve,vr,urt,hrt,frt,drt,prt,mrt,hF,grt,yrt,vrt,xrt,brt,wrt,Trt,Qp,w4=N(()=>{"use strict";Ya();zt();s6();mi();oC();Rve=or.architecture,vr=new pf(()=>({nodes:{},groups:{},edges:[],registeredIds:{},config:Rve,dataStructures:void 0,elements:{}})),urt=o(()=>{vr.reset(),Ar()},"clear"),hrt=o(function({id:t,icon:e,in:r,title:n,iconText:i}){if(vr.records.registeredIds[t]!==void 0)throw new Error(`The service id [${t}] is already in use by another ${vr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The service [${t}] cannot be placed within itself`);if(vr.records.registeredIds[r]===void 0)throw new Error(`The service [${t}]'s parent does not exist. Please make sure the parent is created before this service`);if(vr.records.registeredIds[r]==="node")throw new Error(`The service [${t}]'s parent is not a group`)}vr.records.registeredIds[t]="node",vr.records.nodes[t]={id:t,type:"service",icon:e,iconText:i,title:n,edges:[],in:r}},"addService"),frt=o(()=>Object.values(vr.records.nodes).filter(Dve),"getServices"),drt=o(function({id:t,in:e}){vr.records.registeredIds[t]="node",vr.records.nodes[t]={id:t,type:"junction",edges:[],in:e}},"addJunction"),prt=o(()=>Object.values(vr.records.nodes).filter(Lve),"getJunctions"),mrt=o(()=>Object.values(vr.records.nodes),"getNodes"),hF=o(t=>vr.records.nodes[t],"getNode"),grt=o(function({id:t,icon:e,in:r,title:n}){if(vr.records.registeredIds[t]!==void 0)throw new Error(`The group id [${t}] is already in use by another ${vr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The group [${t}] cannot be placed within itself`);if(vr.records.registeredIds[r]===void 0)throw new Error(`The group [${t}]'s parent does not exist. Please make sure the parent is created before this group`);if(vr.records.registeredIds[r]==="node")throw new Error(`The group [${t}]'s parent is not a group`)}vr.records.registeredIds[t]="group",vr.records.groups[t]={id:t,icon:e,title:n,in:r}},"addGroup"),yrt=o(()=>Object.values(vr.records.groups),"getGroups"),vrt=o(function({lhsId:t,rhsId:e,lhsDir:r,rhsDir:n,lhsInto:i,rhsInto:a,lhsGroup:s,rhsGroup:l,title:u}){if(!uF(r))throw new Error(`Invalid direction given for left hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${r}`);if(!uF(n))throw new Error(`Invalid direction given for right hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${n}`);if(vr.records.nodes[t]===void 0&&vr.records.groups[t]===void 0)throw new Error(`The left-hand id [${t}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(vr.records.nodes[e]===void 0&&vr.records.groups[t]===void 0)throw new Error(`The right-hand id [${e}] does not yet exist. Please create the service/group before declaring an edge to it.`);let h=vr.records.nodes[t].in,f=vr.records.nodes[e].in;if(s&&h&&f&&h==f)throw new Error(`The left-hand id [${t}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(l&&h&&f&&h==f)throw new Error(`The right-hand id [${e}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);let d={lhsId:t,lhsDir:r,lhsInto:i,lhsGroup:s,rhsId:e,rhsDir:n,rhsInto:a,rhsGroup:l,title:u};vr.records.edges.push(d),vr.records.nodes[t]&&vr.records.nodes[e]&&(vr.records.nodes[t].edges.push(vr.records.edges[vr.records.edges.length-1]),vr.records.nodes[e].edges.push(vr.records.edges[vr.records.edges.length-1]))},"addEdge"),xrt=o(()=>vr.records.edges,"getEdges"),brt=o(()=>{if(vr.records.dataStructures===void 0){let t={},e=Object.entries(vr.records.nodes).reduce((l,[u,h])=>(l[u]=h.edges.reduce((f,d)=>{let p=hF(d.lhsId)?.in,m=hF(d.rhsId)?.in;if(p&&m&&p!==m){let g=_ve(d.lhsDir,d.rhsDir);g!=="bend"&&(t[p]??={},t[p][m]=g,t[m]??={},t[m][p]=g)}if(d.lhsId===u){let g=b4(d.lhsDir,d.rhsDir);g&&(f[g]=d.rhsId)}else{let g=b4(d.rhsDir,d.lhsDir);g&&(f[g]=d.lhsId)}return f},{}),l),{}),r=Object.keys(e)[0],n={[r]:1},i=Object.keys(e).reduce((l,u)=>u===r?l:{...l,[u]:1},{}),a=o(l=>{let u={[l]:[0,0]},h=[l];for(;h.length>0;){let f=h.shift();if(f){n[f]=1,delete i[f];let d=e[f],[p,m]=u[f];Object.entries(d).forEach(([g,y])=>{n[y]||(u[y]=Cve([p,m],g),h.push(y))})}}return u},"BFS"),s=[a(r)];for(;Object.keys(i).length>0;)s.push(a(Object.keys(i)[0]));vr.records.dataStructures={adjList:e,spatialMaps:s,groupAlignments:t}}return vr.records.dataStructures},"getDataStructures"),wrt=o((t,e)=>{vr.records.elements[t]=e},"setElementForId"),Trt=o(t=>vr.records.elements[t],"getElementById"),Qp={clear:urt,setDiagramTitle:$r,getDiagramTitle:Ir,setAccTitle:Lr,getAccTitle:Rr,setAccDescription:Nr,getAccDescription:Mr,addService:hrt,getServices:frt,addJunction:drt,getJunctions:prt,getNodes:mrt,getNode:hF,addGroup:grt,getGroups:yrt,addEdge:vrt,getEdges:xrt,setElementForId:wrt,getElementById:Trt,getDataStructures:brt};o(Li,"getConfigField")});var krt,Nve,Mve=N(()=>{"use strict";kp();vt();T1();w4();krt=o((t,e)=>{$c(t,e),t.groups.map(e.addGroup),t.services.map(r=>e.addService({...r,type:"service"})),t.junctions.map(r=>e.addJunction({...r,type:"junction"})),t.edges.map(e.addEdge)},"populateDb"),Nve={parse:o(async t=>{let e=await uo("architecture",t);Y.debug(e),krt(e,Qp)},"parse")}});var Ert,Ive,Ove=N(()=>{"use strict";Ert=o(t=>`
2526 + .edge {
2527 + stroke-width: ${t.archEdgeWidth};
2528 + stroke: ${t.archEdgeColor};
2529 + fill: none;
2530 + }
2531 +
2532 + .arrow {
2533 + fill: ${t.archEdgeArrowColor};
2534 + }
2535 +
2536 + .node-bkg {
2537 + fill: none;
2538 + stroke: ${t.archGroupBorderColor};
2539 + stroke-width: ${t.archGroupBorderWidth};
2540 + stroke-dasharray: 8;
2541 + }
2542 + .node-icon-text {
2543 + display: flex;
2544 + align-items: center;
2545 + }
2546 +
2547 + .node-icon-text > div {
2548 + color: #fff;
2549 + margin: 1px;
2550 + height: fit-content;
2551 + text-align: center;
2552 + overflow: hidden;
2553 + display: -webkit-box;
2554 + -webkit-box-orient: vertical;
2555 + }
2556 +`,"getStyles"),Ive=Ert});var dF=Mi((T4,fF)=>{"use strict";o(function(e,r){typeof T4=="object"&&typeof fF=="object"?fF.exports=r():typeof define=="function"&&define.amd?define([],r):typeof T4=="object"?T4.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(T4,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=28)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(5);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;y<g.length;y++)p=g[y],m=p.withChildren(),m.forEach(function(v){d.add(v)});return d},h.prototype.getNoOfChildren=function(){var d=0,p;if(this.child==null)d=1;else for(var m=this.child.getNodes(),g=0;g<m.length;g++)p=m[g],d+=p.getNoOfChildren();return d==0&&(d=1),d},h.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},h.prototype.calcEstimatedSize=function(){return this.child==null?this.estimatedSize=(this.rect.width+this.rect.height)/2:(this.estimatedSize=this.child.calcEstimatedSize(),this.rect.width=this.estimatedSize,this.rect.height=this.estimatedSize,this.estimatedSize)},h.prototype.scatter=function(){var d,p,m=-s.INITIAL_WORLD_BOUNDARY,g=s.INITIAL_WORLD_BOUNDARY;d=s.WORLD_CENTER_X+l.nextDouble()*(g-m)+m;var y=-s.INITIAL_WORLD_BOUNDARY,v=s.INITIAL_WORLD_BOUNDARY;p=s.WORLD_CENTER_Y+l.nextDouble()*(v-y)+y,this.rect.x=d,this.rect.y=p},h.prototype.updateBounds=function(){if(this.getChild()==null)throw"assert failed";if(this.getChild().getNodes().length!=0){var d=this.getChild();if(d.updateBounds(!0),this.rect.x=d.getLeft(),this.rect.y=d.getTop(),this.setWidth(d.getRight()-d.getLeft()),this.setHeight(d.getBottom()-d.getTop()),s.NODE_DIMENSIONS_INCLUDE_LABELS){var p=d.getRight()-d.getLeft(),m=d.getBottom()-d.getTop();this.labelWidth&&(this.labelPosHorizontal=="left"?(this.rect.x-=this.labelWidth,this.setWidth(p+this.labelWidth)):this.labelPosHorizontal=="center"&&this.labelWidth>p?(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(p+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(m+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>m?(this.rect.y-=(this.labelHeight-m)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(m+this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";var n=r(0);function i(){}o(i,"FDLayoutConstants");for(var a in n)i[a]=n[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=i.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,t.exports=i},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(7),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,w=0;w<b;w++)x=v[w],x.isInterGraph?this.graphManager.remove(x):x.source.owner.remove(x);var C=this.nodes.indexOf(y);if(C==-1)throw"Node not in owner node list!";this.nodes.splice(C,1)}else if(g instanceof u){var x=g;if(x==null)throw"Edge is null!";if(!(x.source!=null&&x.target!=null))throw"Source and/or target is null!";if(!(x.source.owner!=null&&x.target.owner!=null&&x.source.owner==this&&x.target.owner==this))throw"Source and/or target owner is invalid!";var T=x.source.edges.indexOf(x),E=x.target.edges.indexOf(x);if(!(T>-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(T,1),x.target!=x.source&&x.target.edges.splice(E,1);var C=x.source.owner.getEdges().indexOf(x);if(C==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(C,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,w=this.getNodes(),C=w.length,T=0;T<C;T++){var E=w[T];v=E.getTop(),x=E.getLeft(),g>v&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(w[0].getParent().paddingLeft!=null?b=w[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,C,T,E,A,S=this.nodes,_=S.length,I=0;I<_;I++){var D=S[I];g&&D.child!=null&&D.updateBounds(),w=D.getLeft(),C=D.getRight(),T=D.getTop(),E=D.getBottom(),y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var k=new h(y,x,v-y,b-x);y==i.MAX_VALUE&&(this.left=this.parent.getLeft(),this.right=this.parent.getRight(),this.top=this.parent.getTop(),this.bottom=this.parent.getBottom()),S[0].getParent().paddingLeft!=null?A=S[0].getParent().paddingLeft:A=this.margin,this.left=k.x-A,this.right=k.x+k.width+A,this.top=k.y-A,this.bottom=k.y+k.height+A},p.calculateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,C,T,E,A=g.length,S=0;S<A;S++){var _=g[S];w=_.getLeft(),C=_.getRight(),T=_.getTop(),E=_.getBottom(),y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var I=new h(y,x,v-y,b-x);return I},p.prototype.getInclusionTreeDepth=function(){return this==this.graphManager.getRoot()?1:this.parent.getInclusionTreeDepth()},p.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},p.prototype.calcEstimatedSize=function(){for(var g=0,y=this.nodes,v=y.length,x=0;x<v;x++){var b=y[x];g+=b.calcEstimatedSize()}return g==0?this.estimatedSize=a.EMPTY_COMPOUND_NODE_SIZE:this.estimatedSize=g/Math.sqrt(this.nodes.length),this.estimatedSize},p.prototype.updateConnected=function(){var g=this;if(this.nodes.length==0){this.isConnected=!0;return}var y=new d,v=new Set,x=this.nodes[0],b,w,C=x.withChildren();for(C.forEach(function(I){y.push(I),v.add(I)});y.length!==0;){x=y.shift(),b=x.getEdges();for(var T=b.length,E=0;E<T;E++){var A=b[E];if(w=A.getOtherEndInGraph(x,this),w!=null&&!v.has(w)){var S=w.withChildren();S.forEach(function(I){y.push(I),v.add(I)})}}}if(this.isConnected=!1,v.size>=this.nodes.length){var _=0;v.forEach(function(I){I.owner==g&&_++}),_==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(6),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d<f;d++)h=u[d],l.remove(h);var p=[];p=p.concat(l.getNodes());var m;f=p.length;for(var d=0;d<f;d++)m=p[d],l.remove(m);l==this.rootGraph&&this.setRootGraph(null);var g=this.graphs.indexOf(l);this.graphs.splice(g,1),l.parent=null}else if(s instanceof i){if(h=s,h==null)throw"Edge is null!";if(!h.isInterGraph)throw"Not an inter-graph edge!";if(!(h.source!=null&&h.target!=null))throw"Source and/or target is null!";if(!(h.source.edges.indexOf(h)!=-1&&h.target.edges.indexOf(h)!=-1))throw"Source and/or target doesn't know this edge!";var g=h.source.edges.indexOf(h);if(h.source.edges.splice(g,1),g=h.target.edges.indexOf(h),h.target.edges.splice(g,1),!(h.source.owner!=null&&h.source.owner.getGraphManager()!=null))throw"Edge owner graph or owner graph manager is null!";if(h.source.owner.getGraphManager().edges.indexOf(h)==-1)throw"Not in owner graph manager's edge list!";var g=h.source.owner.getGraphManager().edges.indexOf(h);h.source.owner.getGraphManager().edges.splice(g,1)}},a.prototype.updateBounds=function(){this.rootGraph.updateBounds(!0)},a.prototype.getGraphs=function(){return this.graphs},a.prototype.getAllNodes=function(){if(this.allNodes==null){for(var s=[],l=this.getGraphs(),u=l.length,h=0;h<u;h++)s=s.concat(l[h].getNodes());this.allNodes=s}return this.allNodes},a.prototype.resetAllNodes=function(){this.allNodes=null},a.prototype.resetAllEdges=function(){this.allEdges=null},a.prototype.resetAllNodesToApplyGravitation=function(){this.allNodesToApplyGravitation=null},a.prototype.getAllEdges=function(){if(this.allEdges==null){for(var s=[],l=this.getGraphs(),u=l.length,h=0;h<l.length;h++)s=s.concat(l[h].getEdges());s=s.concat(this.edges),this.allEdges=s}return this.allEdges},a.prototype.getAllNodesToApplyGravitation=function(){return this.allNodesToApplyGravitation},a.prototype.setAllNodesToApplyGravitation=function(s){if(this.allNodesToApplyGravitation!=null)throw"assert failed";this.allNodesToApplyGravitation=s},a.prototype.getRoot=function(){return this.rootGraph},a.prototype.setRootGraph=function(s){if(s.getGraphManager()!=this)throw"Root not in this graph mgr!";this.rootGraph=s,s.parent==null&&(s.parent=this.layout.newNode("Root node"))},a.prototype.getLayout=function(){return this.layout},a.prototype.isOneAncestorOfOther=function(s,l){if(!(s!=null&&l!=null))throw"assert failed";if(s==l)return!0;var u=s.getOwner(),h;do{if(h=u.getParent(),h==null)break;if(h==l)return!0;if(u=h.getOwner(),u==null)break}while(!0);u=l.getOwner();do{if(h=u.getParent(),h==null)break;if(h==s)return!0;if(u=h.getOwner(),u==null)break}while(!0);return!1},a.prototype.calcLowestCommonAncestors=function(){for(var s,l,u,h,f,d=this.getAllEdges(),p=d.length,m=0;m<p;m++){if(s=d[m],l=s.source,u=s.target,s.lca=null,s.sourceInLca=l,s.targetInLca=u,l==u){s.lca=l.getOwner();continue}for(h=l.getOwner();s.lca==null;){for(s.targetInLca=u,f=u.getOwner();s.lca==null;){if(f==h){s.lca=f;break}if(f==this.rootGraph)break;if(s.lca!=null)throw"assert failed";s.targetInLca=f.getParent(),f=s.targetInLca.getOwner()}if(h==this.rootGraph)break;s.lca==null&&(s.sourceInLca=h.getParent(),h=s.sourceInLca.getOwner())}if(s.lca==null)throw"assert failed"}},a.prototype.calcLowestCommonAncestor=function(s,l){if(s==l)return s.getOwner();var u=s.getOwner();do{if(u==null)break;var h=l.getOwner();do{if(h==null)break;if(h==u)return h;h=h.getParent().getOwner()}while(!0);u=u.getParent().getOwner()}while(!0);return u},a.prototype.calcInclusionTreeDepths=function(s,l){s==null&&l==null&&(s=this.rootGraph,l=1);for(var u,h=s.getNodes(),f=h.length,d=0;d<f;d++)u=h[d],u.inclusionTreeDepth=l,u.child!=null&&this.calcInclusionTreeDepths(u.child,l+1)},a.prototype.includesInvalidEdge=function(){for(var s,l=[],u=this.edges.length,h=0;h<u;h++)s=this.edges[h],this.isOneAncestorOfOther(s.source,s.target)&&l.push(s);for(var h=0;h<l.length;h++)this.remove(l[h]);return!1},t.exports=a},function(t,e,r){"use strict";var n=r(12);function i(){}o(i,"IGeometry"),i.calcSeparationAmount=function(a,s,l,u){if(!a.intersects(s))throw"assert failed";var h=new Array(2);this.decideDirectionsForOverlappingNodes(a,s,h),l[0]=Math.min(a.getRight(),s.getRight())-Math.max(a.x,s.x),l[1]=Math.min(a.getBottom(),s.getBottom())-Math.max(a.y,s.y),a.getX()<=s.getX()&&a.getRight()>=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]<p?p=l[0]:d=l[1],l[0]=-1*h[0]*(p/2+u),l[1]=-1*h[1]*(d/2+u)},i.decideDirectionsForOverlappingNodes=function(a,s,l){a.getCenterX()<s.getCenterX()?l[0]=-1:l[0]=1,a.getCenterY()<s.getCenterY()?l[1]=-1:l[1]=1},i.getIntersection2=function(a,s,l){var u=a.getCenterX(),h=a.getCenterY(),f=s.getCenterX(),d=s.getCenterY();if(a.intersects(s))return l[0]=u,l[1]=h,l[2]=f,l[3]=d,!0;var p=a.getX(),m=a.getY(),g=a.getRight(),y=a.getX(),v=a.getBottom(),x=a.getRight(),b=a.getWidthHalf(),w=a.getHeightHalf(),C=s.getX(),T=s.getY(),E=s.getRight(),A=s.getX(),S=s.getBottom(),_=s.getRight(),I=s.getWidthHalf(),D=s.getHeightHalf(),k=!1,L=!1;if(u===f){if(h>d)return l[0]=u,l[1]=m,l[2]=f,l[3]=S,!1;if(h<d)return l[0]=u,l[1]=v,l[2]=f,l[3]=T,!1}else if(h===d){if(u>f)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(u<f)return l[0]=g,l[1]=h,l[2]=C,l[3]=d,!1}else{var R=a.height/a.width,O=s.height/s.width,M=(d-h)/(f-u),B=void 0,F=void 0,P=void 0,z=void 0,$=void 0,H=void 0;if(-R===M?u>f?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):R===M&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-O===M?f>u?(l[2]=A,l[3]=S,L=!0):(l[2]=E,l[3]=T,L=!0):O===M&&(f>u?(l[2]=C,l[3]=T,L=!0):(l[2]=_,l[3]=S,L=!0)),k&&L)return!1;if(u>f?h>d?(B=this.getCardinalDirection(R,M,4),F=this.getCardinalDirection(O,M,2)):(B=this.getCardinalDirection(-R,M,3),F=this.getCardinalDirection(-O,M,1)):h>d?(B=this.getCardinalDirection(-R,M,1),F=this.getCardinalDirection(-O,M,3)):(B=this.getCardinalDirection(R,M,2),F=this.getCardinalDirection(O,M,4)),!k)switch(B){case 1:z=m,P=u+-w/M,l[0]=P,l[1]=z;break;case 2:P=x,z=h+b*M,l[0]=P,l[1]=z;break;case 3:z=v,P=u+w/M,l[0]=P,l[1]=z;break;case 4:P=y,z=h+-b*M,l[0]=P,l[1]=z;break}if(!L)switch(F){case 1:H=T,$=f+-D/M,l[2]=$,l[3]=H;break;case 2:$=_,H=d+I*M,l[2]=$,l[3]=H;break;case 3:H=S,$=f+D/M,l[2]=$,l[3]=H;break;case 4:$=A,H=d+-I*M,l[2]=$,l[3]=H;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,w=void 0,C=void 0,T=void 0,E=void 0,A=void 0,S=void 0,_=void 0;return w=p-f,T=h-d,A=d*f-h*p,C=v-g,E=m-y,S=y*g-m*v,_=w*E-C*T,_===0?null:(x=(T*S-E*A)/_,b=(C*A-w*S)/_,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l<a?h+=Math.PI:u<s&&(h+=this.TWO_PI)):u<s?h=this.ONE_AND_HALF_PI:h=this.HALF_PI,h},i.doIntersect=function(a,s,l,u){var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=(d-h)*(v-g)-(y-m)*(p-f);if(x===0)return!1;var b=((v-g)*(y-h)+(m-y)*(v-f))/x,w=((f-p)*(y-h)+(d-h)*(v-f))/x;return 0<b&&b<1&&0<w&&w<1},i.findCircleLineIntersections=function(a,s,l,u,h,f,d){var p=(l-a)*(l-a)+(u-s)*(u-s),m=2*((a-h)*(l-a)+(s-f)*(u-s)),g=(a-h)*(a-h)+(s-f)*(s-f)-d*d,y=m*m-4*p*g;if(y>=0){var v=(-m+Math.sqrt(m*m-4*p*g))/(2*p),x=(-m-Math.sqrt(m*m-4*p*g))/(2*p),b=null;return v>=0&&v<=1?[v]:x>=0&&x<=1?[x]:b}else return null},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,t.exports=i},function(t,e,r){"use strict";function n(){}o(n,"IMath"),n.sign=function(i){return i>0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p<d.length;p++){var m=d[p];m.enumerable=m.enumerable||!1,m.configurable=!0,"value"in m&&(m.writable=!0),Object.defineProperty(f,m.key,m)}}return o(h,"defineProperties"),function(f,d,p){return d&&h(f.prototype,d),p&&h(f,p),f}}();function i(h,f){if(!(h instanceof f))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=o(function(f){return{value:f,next:null,prev:null}},"nodeFrom"),s=o(function(f,d,p,m){return f!==null?f.next=d:m.head=d,p!==null?p.prev=d:m.tail=d,d.prev=f,d.next=p,m.length++,d},"add"),l=o(function(f,d){var p=f.prev,m=f.next;return p!==null?p.next=m:d.head=m,m!==null?m.prev=p:d.tail=p,f.prev=f.next=null,d.length--,f},"_remove"),u=function(){function h(f){var d=this;i(this,h),this.length=0,this.head=null,this.tail=null,f?.forEach(function(p){return d.push(p)})}return o(h,"LinkedList"),n(h,[{key:"size",value:o(function(){return this.length},"size")},{key:"insertBefore",value:o(function(d,p){return s(p.prev,a(d),p,this)},"insertBefore")},{key:"insertAfter",value:o(function(d,p){return s(p,a(d),p.next,this)},"insertAfter")},{key:"insertNodeBefore",value:o(function(d,p){return s(p.prev,d,p,this)},"insertNodeBefore")},{key:"insertNodeAfter",value:o(function(d,p){return s(p,d,p.next,this)},"insertNodeAfter")},{key:"push",value:o(function(d){return s(this.tail,a(d),null,this)},"push")},{key:"unshift",value:o(function(d){return s(null,a(d),this.head,this)},"unshift")},{key:"remove",value:o(function(d){return l(d,this)},"remove")},{key:"pop",value:o(function(){return l(this.tail,this).value},"pop")},{key:"popNode",value:o(function(){return l(this.tail,this)},"popNode")},{key:"shift",value:o(function(){return l(this.head,this).value},"shift")},{key:"shiftNode",value:o(function(){return l(this.head,this)},"shiftNode")},{key:"get_object_at",value:o(function(d){if(d<=this.length()){for(var p=1,m=this.head;p<d;)m=m.next,p++;return m.value}},"get_object_at")},{key:"set_object_at",value:o(function(d,p){if(d<=this.length()){for(var m=1,g=this.head;m<d;)g=g.next,m++;g.value=p}},"set_object_at")}]),h}();t.exports=u},function(t,e,r){"use strict";function n(i,a,s){this.x=null,this.y=null,i==null&&a==null&&s==null?(this.x=0,this.y=0):typeof i=="number"&&typeof a=="number"&&s==null?(this.x=i,this.y=a):i.constructor.name=="Point"&&a==null&&s==null&&(s=i,this.x=s.x,this.y=s.y)}o(n,"Point"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.getLocation=function(){return new n(this.x,this.y)},n.prototype.setLocation=function(i,a,s){i.constructor.name=="Point"&&a==null&&s==null?(s=i,this.setLocation(s.x,s.y)):typeof i=="number"&&typeof a=="number"&&s==null&&(parseInt(i)==i&&parseInt(a)==a?this.move(i,a):(this.x=Math.floor(i+.5),this.y=Math.floor(a+.5)))},n.prototype.move=function(i,a){this.x=i,this.y=a},n.prototype.translate=function(i,a){this.x+=i,this.y+=a},n.prototype.equals=function(i){if(i.constructor.name=="Point"){var a=i;return this.x==a.x&&this.y==a.y}return this==i},n.prototype.toString=function(){return new n().constructor.name+"[x="+this.x+",y="+this.y+"]"},t.exports=n},function(t,e,r){"use strict";function n(i,a,s,l){this.x=0,this.y=0,this.width=0,this.height=0,i!=null&&a!=null&&s!=null&&l!=null&&(this.x=i,this.y=a,this.width=s,this.height=l)}o(n,"RectangleD"),n.prototype.getX=function(){return this.x},n.prototype.setX=function(i){this.x=i},n.prototype.getY=function(){return this.y},n.prototype.setY=function(i){this.y=i},n.prototype.getWidth=function(){return this.width},n.prototype.setWidth=function(i){this.width=i},n.prototype.getHeight=function(){return this.height},n.prototype.setHeight=function(i){this.height=i},n.prototype.getRight=function(){return this.x+this.width},n.prototype.getBottom=function(){return this.y+this.height},n.prototype.intersects=function(i){return!(this.getRight()<i.x||this.getBottom()<i.y||i.getRight()<this.x||i.getBottom()<this.y)},n.prototype.getCenterX=function(){return this.x+this.width/2},n.prototype.getMinX=function(){return this.getX()},n.prototype.getMaxX=function(){return this.getX()+this.width},n.prototype.getCenterY=function(){return this.y+this.height/2},n.prototype.getMinY=function(){return this.getY()},n.prototype.getMaxY=function(){return this.getY()+this.height},n.prototype.getWidthHalf=function(){return this.width/2},n.prototype.getHeightHalf=function(){return this.height/2},t.exports=n},function(t,e,r){"use strict";var n=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(a){return typeof a}:function(a){return a&&typeof Symbol=="function"&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};function i(){}o(i,"UniqueIDGeneretor"),i.lastID=0,i.createID=function(a){return i.isPrimitive(a)?a:(a.uniqueID!=null||(a.uniqueID=i.getString(),i.lastID++),a.uniqueID)},i.getString=function(a){return a==null&&(a=i.lastID),"Object#"+a},i.isPrimitive=function(a){var s=typeof a>"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g<m.length;g++)y[g]=m[g];return y}else return Array.from(m)}o(n,"_toConsumableArray");var i=r(0),a=r(7),s=r(3),l=r(1),u=r(6),h=r(5),f=r(17),d=r(29);function p(m){d.call(this),this.layoutQuality=i.QUALITY,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.incremental=i.DEFAULT_INCREMENTAL,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES,this.edgeToDummyNodes=new Map,this.graphManager=new a(this),this.isLayoutFinished=!1,this.isSubLayout=!1,this.isRemoteUse=!1,m!=null&&(this.isRemoteUse=m)}o(p,"Layout"),p.RANDOM_SEED=1,p.prototype=Object.create(d.prototype),p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getAllNodes=function(){return this.graphManager.getAllNodes()},p.prototype.getAllEdges=function(){return this.graphManager.getAllEdges()},p.prototype.getAllNodesToApplyGravitation=function(){return this.graphManager.getAllNodesToApplyGravitation()},p.prototype.newGraphManager=function(){var m=new a(this);return this.graphManager=m,m},p.prototype.newGraph=function(m){return new u(null,this.graphManager,m)},p.prototype.newNode=function(m){return new s(this.graphManager,m)},p.prototype.newEdge=function(m){return new l(null,null,m)},p.prototype.checkLayoutSuccess=function(){return this.graphManager.getRoot()==null||this.graphManager.getRoot().getNodes().length==0||this.graphManager.includesInvalidEdge()},p.prototype.runLayout=function(){this.isLayoutFinished=!1,this.tilingPreLayout&&this.tilingPreLayout(),this.initParameters();var m;return this.checkLayoutSuccess()?m=!1:m=this.layout(),i.ANIMATE==="during"?!1:(m&&(this.isSubLayout||this.doPostLayout()),this.tilingPostLayout&&this.tilingPostLayout(),this.isLayoutFinished=!0,m)},p.prototype.doPostLayout=function(){this.incremental||this.transform(),this.update()},p.prototype.update2=function(){if(this.createBendsAsNeeded&&(this.createBendpointsFromDummyNodes(),this.graphManager.resetAllEdges()),!this.isRemoteUse){for(var m,g=this.graphManager.getAllEdges(),y=0;y<g.length;y++)m=g[y];for(var v,x=this.graphManager.getRoot().getNodes(),y=0;y<x.length;y++)v=x[y];this.update(this.graphManager.getRoot())}},p.prototype.update=function(m){if(m==null)this.update2();else if(m instanceof s){var g=m;if(g.getChild()!=null)for(var y=g.getChild().getNodes(),v=0;v<y.length;v++)update(y[v]);if(g.vGraphObject!=null){var x=g.vGraphObject;x.update(g)}}else if(m instanceof l){var b=m;if(b.vGraphObject!=null){var w=b.vGraphObject;w.update(b)}}else if(m instanceof u){var C=m;if(C.vGraphObject!=null){var T=C.vGraphObject;T.update(C)}}},p.prototype.initParameters=function(){this.isSubLayout||(this.layoutQuality=i.QUALITY,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.incremental=i.DEFAULT_INCREMENTAL,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES),this.animationDuringLayout&&(this.animationOnLayout=!1)},p.prototype.transform=function(m){if(m==null)this.transform(new h(0,0));else{var g=new f,y=this.graphManager.getRoot().updateLeftTop();if(y!=null){g.setWorldOrgX(m.x),g.setWorldOrgY(m.y),g.setDeviceOrgX(y.x),g.setDeviceOrgY(y.y);for(var v=this.getAllNodes(),x,b=0;b<v.length;b++)x=v[b],x.transform(g)}}},p.prototype.positionNodesRandomly=function(m){if(m==null)this.positionNodesRandomly(this.getGraphManager().getRoot()),this.getGraphManager().getRoot().updateBounds(!0);else for(var g,y,v=m.getNodes(),x=0;x<v.length;x++)g=v[x],y=g.getChild(),y==null||y.getNodes().length==0?g.scatter():(this.positionNodesRandomly(y),g.updateBounds())},p.prototype.getFlatForest=function(){for(var m=[],g=!0,y=this.graphManager.getRoot().getNodes(),v=!0,x=0;x<y.length;x++)y[x].getChild()!=null&&(v=!1);if(!v)return m;var b=new Set,w=[],C=new Map,T=[];for(T=T.concat(y);T.length>0&&g;){for(w.push(T[0]);w.length>0&&g;){var E=w[0];w.splice(0,1),b.add(E);for(var A=E.getEdges(),x=0;x<A.length;x++){var S=A[x].getOtherEnd(E);if(C.get(E)!=S)if(!b.has(S))w.push(S),C.set(S,E);else{g=!1;break}}}if(!g)m=[];else{var _=[].concat(n(b));m.push(_);for(var x=0;x<_.length;x++){var I=_[x],D=T.indexOf(I);D>-1&&T.splice(D,1)}b=new Set,C=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x<m.bendpoints.length;x++){var b=this.newNode(null);b.setRect(new Point(0,0),new Dimension(1,1)),v.add(b);var w=this.newEdge(null);this.graphManager.add(w,y,b),g.add(b),y=b}var w=this.newEdge(null);return this.graphManager.add(w,y,m.target),this.edgeToDummyNodes.set(m,g),m.isInterGraph()?this.graphManager.remove(m):v.remove(m),g},p.prototype.createBendpointsFromDummyNodes=function(){var m=[];m=m.concat(this.graphManager.getAllEdges()),m=[].concat(n(this.edgeToDummyNodes.keys())).concat(m);for(var g=0;g<m.length;g++){var y=m[g];if(y.bendpoints.length>0){for(var v=this.edgeToDummyNodes.get(y),x=0;x<v.length;x++){var b=v[x],w=new h(b.getCenterX(),b.getCenterY()),C=y.bendpoints.get(x);C.x=w.x,C.y=w.y,b.getOwner().remove(b)}this.graphManager.add(y,y.source,y.target)}}},p.transform=function(m,g,y,v){if(y!=null&&v!=null){var x=g;if(m<=50){var b=g/y;x-=(g-b)/50*(50-m)}else{var w=g*v;x+=(w-g)/50*(m-50)}return x}else{var C,T;return m<=50?(C=9*g/500,T=g/10):(C=9*g/50,T=-8*g),C*m+T}},p.findCenterOfTree=function(m){var g=[];g=g.concat(m);var y=[],v=new Map,x=!1,b=null;(g.length==1||g.length==2)&&(x=!0,b=g[0]);for(var w=0;w<g.length;w++){var C=g[w],T=C.getNeighborsList().size;v.set(C,C.getNeighborsList().size),T==1&&y.push(C)}var E=[];for(E=E.concat(y);!x;){var A=[];A=A.concat(E),E=[];for(var w=0;w<g.length;w++){var C=g[w],S=g.indexOf(C);S>=0&&g.splice(S,1);var _=C.getNeighborsList();_.forEach(function(k){if(y.indexOf(k)<0){var L=v.get(k),R=L-1;R==1&&E.push(k),v.set(k,R)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(5);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);p<d.length;p++)m[p]=d[p];return m}else return Array.from(d)}o(n,"_toConsumableArray");var i=r(15),a=r(4),s=r(0),l=r(8),u=r(9);function h(){i.call(this),this.useSmartIdealEdgeLengthCalculation=a.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=a.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=a.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.coolingFactor=a.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.initialCoolingFactor=a.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.totalDisplacement=0,this.oldTotalDisplacement=0,this.maxIterations=a.MAX_ITERATIONS}o(h,"FDLayout"),h.prototype=Object.create(i.prototype);for(var f in i)h[f]=i[f];h.prototype.initParameters=function(){i.prototype.initParameters.call(this,arguments),this.totalIterations=0,this.notAnimatedIterations=0,this.useFRGridVariant=a.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION,this.grid=[]},h.prototype.calcIdealEdgeLengths=function(){for(var d,p,m,g,y,v,x,b=this.getGraphManager().getAllEdges(),w=0;w<b.length;w++)d=b[w],p=d.idealLength,d.isInterGraph&&(g=d.getSource(),y=d.getTarget(),v=d.getSourceInLca().getEstimatedSize(),x=d.getTargetInLca().getEstimatedSize(),this.useSmartIdealEdgeLengthCalculation&&(d.idealLength+=v+x-2*s.SIMPLE_NODE_SIZE),m=d.getLca().getInclusionTreeDepth(),d.idealLength+=p*a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR*(g.getInclusionTreeDepth()+y.getInclusionTreeDepth()-2*m))},h.prototype.initSpringEmbedder=function(){var d=this.getAllNodes().length;this.incremental?(d>a.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m<d.length;m++)p=d[m],this.calcSpringForce(p,p.idealLength)},h.prototype.calcRepulsionForces=function(){var d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;m<x.length;m++)y=x[m],this.calculateRepulsionForceOfANode(y,b,d,p),b.add(y);else for(m=0;m<x.length;m++)for(y=x[m],g=m+1;g<x.length;g++)v=x[g],y.getOwner()==v.getOwner()&&this.calcRepulsionForce(y,v)},h.prototype.calcGravitationalForces=function(){for(var d,p=this.getAllNodesToApplyGravitation(),m=0;m<p.length;m++)d=p[m],this.calcGravitationalForce(d)},h.prototype.moveNodes=function(){for(var d=this.getAllNodes(),p,m=0;m<d.length;m++)p=d[m],p.move()},h.prototype.calcSpringForce=function(d,p){var m=d.getSource(),g=d.getTarget(),y,v,x,b;if(this.uniformLeafNodeSizes&&m.getChild()==null&&g.getChild()==null)d.updateLengthSimple();else if(d.updateLength(),d.isOverlapingSourceAndTarget)return;y=d.getLength(),y!=0&&(v=d.edgeElasticity*(y-p),x=v*(d.lengthX/y),b=v*(d.lengthY/y),m.springForceX+=x,m.springForceY+=b,g.springForceX-=x,g.springForceY-=b)},h.prototype.calcRepulsionForce=function(d,p){var m=d.getRect(),g=p.getRect(),y=new Array(2),v=new Array(4),x,b,w,C,T,E,A;if(m.intersects(g)){l.calcSeparationAmount(m,g,y,a.DEFAULT_EDGE_LENGTH/2),E=2*y[0],A=2*y[1];var S=d.noOfChildren*p.noOfChildren/(d.noOfChildren+p.noOfChildren);d.repulsionForceX-=S*E,d.repulsionForceY-=S*A,p.repulsionForceX+=S*E,p.repulsionForceY+=S*A}else this.uniformLeafNodeSizes&&d.getChild()==null&&p.getChild()==null?(x=g.getCenterX()-m.getCenterX(),b=g.getCenterY()-m.getCenterY()):(l.getIntersection(m,g,v),x=v[2]-v[0],b=v[3]-v[1]),Math.abs(x)<a.MIN_REPULSION_DIST&&(x=u.sign(x)*a.MIN_REPULSION_DIST),Math.abs(b)<a.MIN_REPULSION_DIST&&(b=u.sign(b)*a.MIN_REPULSION_DIST),w=x*x+b*b,C=Math.sqrt(w),T=(d.nodeRepulsion/2+p.nodeRepulsion/2)*d.noOfChildren*p.noOfChildren/w,E=T*x/C,A=T*b/C,d.repulsionForceX-=E,d.repulsionForceY-=A,p.repulsionForceX+=E,p.repulsionForceY+=A},h.prototype.calcGravitationalForce=function(d){var p,m,g,y,v,x,b,w;p=d.getOwner(),m=(p.getRight()+p.getLeft())/2,g=(p.getTop()+p.getBottom())/2,y=d.getCenterX()-m,v=d.getCenterY()-g,x=Math.abs(y)+d.getWidth()/2,b=Math.abs(v)+d.getHeight()/2,d.getOwner()==this.graphManager.getRoot()?(w=p.getEstimatedSize()*this.gravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(w=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement<this.totalDisplacementThreshold,this.oldTotalDisplacement=this.totalDisplacement,d||p},h.prototype.animate=function(){this.animationDuringLayout&&!this.isSubLayout&&(this.notAnimatedIterations==this.animationPeriod?(this.update(),this.notAnimatedIterations=0):this.notAnimatedIterations++)},h.prototype.calcNoOfChildrenForAllNodes=function(){for(var d,p=this.graphManager.getAllNodes(),m=0;m<p.length;m++)d=p[m],d.noOfChildren=d.getNoOfChildren()},h.prototype.calcGrid=function(d){var p=0,m=0;p=parseInt(Math.ceil((d.getRight()-d.getLeft())/this.repulsionRange)),m=parseInt(Math.ceil((d.getBottom()-d.getTop())/this.repulsionRange));for(var g=new Array(p),y=0;y<p;y++)g[y]=new Array(m);for(var y=0;y<p;y++)for(var v=0;v<m;v++)g[y][v]=new Array;return g},h.prototype.addNodeToGrid=function(d,p,m){var g=0,y=0,v=0,x=0;g=parseInt(Math.floor((d.getRect().x-p)/this.repulsionRange)),y=parseInt(Math.floor((d.getRect().width+d.getRect().x-p)/this.repulsionRange)),v=parseInt(Math.floor((d.getRect().y-m)/this.repulsionRange)),x=parseInt(Math.floor((d.getRect().height+d.getRect().y-m)/this.repulsionRange));for(var b=g;b<=y;b++)for(var w=v;w<=x;w++)this.grid[b][w].push(d),d.setGridCoordinates(g,y,v,x)},h.prototype.updateGrid=function(){var d,p,m=this.getAllNodes();for(this.grid=this.calcGrid(this.graphManager.getRoot()),d=0;d<m.length;d++)p=m[d],this.addNodeToGrid(p,this.graphManager.getRoot().getLeft(),this.graphManager.getRoot().getTop())},h.prototype.calculateRepulsionForceOfANode=function(d,p,m,g){if(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&m||g){var y=new Set;d.surrounding=new Array;for(var v,x=this.grid,b=d.startX-1;b<d.finishX+2;b++)for(var w=d.startY-1;w<d.finishY+2;w++)if(!(b<0||w<0||b>=x.length||w>=x[0].length)){for(var C=0;C<x[b][w].length;C++)if(v=x[b][w][C],!(d.getOwner()!=v.getOwner()||d==v)&&!p.has(v)&&!y.has(v)){var T=Math.abs(d.getCenterX()-v.getCenterX())-(d.getWidth()/2+v.getWidth()/2),E=Math.abs(d.getCenterY()-v.getCenterY())-(d.getHeight()/2+v.getHeight()/2);T<=this.repulsionRange&&E<=this.repulsionRange&&y.add(v)}}d.surrounding=[].concat(n(y))}for(b=0;b<d.surrounding.length;b++)this.calcRepulsionForce(d,d.surrounding[b])},h.prototype.calcRepulsionRange=function(){return 0},t.exports=h},function(t,e,r){"use strict";var n=r(1),i=r(4);function a(l,u,h){n.call(this,l,u,h),this.idealLength=i.DEFAULT_EDGE_LENGTH,this.edgeElasticity=i.DEFAULT_SPRING_STRENGTH}o(a,"FDLayoutEdge"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];t.exports=a},function(t,e,r){"use strict";var n=r(3),i=r(4);function a(l,u,h,f){n.call(this,l,u,h,f),this.nodeRepulsion=i.DEFAULT_REPULSION_STRENGTH,this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0,this.startX=0,this.finishX=0,this.startY=0,this.finishY=0,this.surrounding=[]}o(a,"FDLayoutNode"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];a.prototype.setGridCoordinates=function(l,u,h,f){this.startX=l,this.finishX=u,this.startY=h,this.finishY=f},t.exports=a},function(t,e,r){"use strict";function n(i,a){this.width=0,this.height=0,i!==null&&a!==null&&(this.height=a,this.width=i)}o(n,"DimensionD"),n.prototype.getWidth=function(){return this.width},n.prototype.setWidth=function(i){this.width=i},n.prototype.getHeight=function(){return this.height},n.prototype.setHeight=function(i){this.height=i},t.exports=n},function(t,e,r){"use strict";var n=r(14);function i(){this.map={},this.keys=[]}o(i,"HashMap"),i.prototype.put=function(a,s){var l=n.createID(a);this.contains(l)||(this.map[l]=s,this.keys.push(a))},i.prototype.contains=function(a){var s=n.createID(a);return this.map[a]!=null},i.prototype.get=function(a){var s=n.createID(a);return this.map[s]},i.prototype.keySet=function(){return this.keys},t.exports=i},function(t,e,r){"use strict";var n=r(14);function i(){this.set={}}o(i,"HashSet"),i.prototype.add=function(a){var s=n.createID(a);this.contains(s)||(this.set[s]=a)},i.prototype.remove=function(a){delete this.set[n.createID(a)]},i.prototype.clear=function(){this.set={}},i.prototype.contains=function(a){return this.set[n.createID(a)]==a},i.prototype.isEmpty=function(){return this.size()===0},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAllTo=function(a){for(var s=Object.keys(this.set),l=s.length,u=0;u<l;u++)a.push(this.set[s[u]])},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAll=function(a){for(var s=a.length,l=0;l<s;l++){var u=a[l];this.add(u)}},t.exports=i},function(t,e,r){"use strict";function n(){}o(n,"Matrix"),n.multMat=function(i,a){for(var s=[],l=0;l<i.length;l++){s[l]=[];for(var u=0;u<a[0].length;u++){s[l][u]=0;for(var h=0;h<i[0].length;h++)s[l][u]+=i[l][h]*a[h][u]}}return s},n.transpose=function(i){for(var a=[],s=0;s<i[0].length;s++){a[s]=[];for(var l=0;l<i.length;l++)a[s][l]=i[l][s]}return a},n.multCons=function(i,a){for(var s=[],l=0;l<i.length;l++)s[l]=i[l]*a;return s},n.minusOp=function(i,a){for(var s=[],l=0;l<i.length;l++)s[l]=i[l]-a[l];return s},n.dotProduct=function(i,a){for(var s=0,l=0;l<i.length;l++)s+=i[l]*a[l];return s},n.mag=function(i){return Math.sqrt(this.dotProduct(i,i))},n.normalize=function(i){for(var a=[],s=this.mag(i),l=0;l<i.length;l++)a[l]=i[l]/s;return a},n.multGamma=function(i){for(var a=[],s=0,l=0;l<i.length;l++)s+=i[l];s*=-1/i.length;for(var u=0;u<i.length;u++)a[u]=s+i[u];return a},n.multL=function(i,a,s){for(var l=[],u=[],h=[],f=0;f<a[0].length;f++){for(var d=0,p=0;p<a.length;p++)d+=-.5*a[p][f]*i[p];u[f]=d}for(var m=0;m<s.length;m++){for(var g=0,y=0;y<s.length;y++)g+=s[m][y]*u[y];h[m]=g}for(var v=0;v<a.length;v++){for(var x=0,b=0;b<a[0].length;b++)x+=a[v][b]*h[b];l[v]=x}return l},t.exports=n},function(t,e,r){"use strict";var n=function(){function l(u,h){for(var f=0;f<h.length;f++){var d=h[f];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(u,d.key,d)}}return o(l,"defineProperties"),function(u,h,f){return h&&l(u.prototype,h),f&&l(u,f),u}}();function i(l,u){if(!(l instanceof u))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=r(11),s=function(){function l(u,h){i(this,l),(h!==null||h!==void 0)&&(this.compareFunction=this._defaultCompareFunction);var f=void 0;u instanceof a?f=u.size():f=u.length,this._quicksort(u,0,f-1)}return o(l,"Quicksort"),n(l,[{key:"_quicksort",value:o(function(h,f,d){if(f<d){var p=this._partition(h,f,d);this._quicksort(h,f,p),this._quicksort(h,p+1,d)}},"_quicksort")},{key:"_partition",value:o(function(h,f,d){for(var p=this._get(h,f),m=f,g=d;;){for(;this.compareFunction(p,this._get(h,g));)g--;for(;this.compareFunction(this._get(h,m),p);)m++;if(m<g)this._swap(h,m,g),m++,g--;else return g}},"_partition")},{key:"_get",value:o(function(h,f){return h instanceof a?h.get_object_at(f):h[f]},"_get")},{key:"_set",value:o(function(h,f,d){h instanceof a?h.set_object_at(f,d):h[f]=d},"_set")},{key:"_swap",value:o(function(h,f,d){var p=this._get(h,f);this._set(h,f,this._get(h,d)),this._set(h,d,p)},"_swap")},{key:"_defaultCompareFunction",value:o(function(h,f){return f>h},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";function n(){}o(n,"SVD"),n.svd=function(i){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=i.length,this.n=i[0].length;var a=Math.min(this.m,this.n);this.s=function(xt){for(var ut=[];xt-- >0;)ut.push(0);return ut}(Math.min(this.m+1,this.n)),this.U=function(xt){var ut=o(function Et(ft){if(ft.length==0)return 0;for(var yt=[],nt=0;nt<ft[0];nt++)yt.push(Et(ft.slice(1)));return yt},"allocate");return ut(xt)}([this.m,a]),this.V=function(xt){var ut=o(function Et(ft){if(ft.length==0)return 0;for(var yt=[],nt=0;nt<ft[0];nt++)yt.push(Et(ft.slice(1)));return yt},"allocate");return ut(xt)}([this.n,this.n]);for(var s=function(xt){for(var ut=[];xt-- >0;)ut.push(0);return ut}(this.n),l=function(xt){for(var ut=[];xt-- >0;)ut.push(0);return ut}(this.m),u=!0,h=!0,f=Math.min(this.m-1,this.n),d=Math.max(0,Math.min(this.n-2,this.m)),p=0;p<Math.max(f,d);p++){if(p<f){this.s[p]=0;for(var m=p;m<this.m;m++)this.s[p]=n.hypot(this.s[p],i[m][p]);if(this.s[p]!==0){i[p][p]<0&&(this.s[p]=-this.s[p]);for(var g=p;g<this.m;g++)i[g][p]/=this.s[p];i[p][p]+=1}this.s[p]=-this.s[p]}for(var y=p+1;y<this.n;y++){if(function(xt,ut){return xt&&ut}(p<f,this.s[p]!==0)){for(var v=0,x=p;x<this.m;x++)v+=i[x][p]*i[x][y];v=-v/i[p][p];for(var b=p;b<this.m;b++)i[b][y]+=v*i[b][p]}s[y]=i[p][y]}if(function(xt,ut){return xt&&ut}(u,p<f))for(var w=p;w<this.m;w++)this.U[w][p]=i[w][p];if(p<d){s[p]=0;for(var C=p+1;C<this.n;C++)s[p]=n.hypot(s[p],s[C]);if(s[p]!==0){s[p+1]<0&&(s[p]=-s[p]);for(var T=p+1;T<this.n;T++)s[T]/=s[p];s[p+1]+=1}if(s[p]=-s[p],function(xt,ut){return xt&&ut}(p+1<this.m,s[p]!==0)){for(var E=p+1;E<this.m;E++)l[E]=0;for(var A=p+1;A<this.n;A++)for(var S=p+1;S<this.m;S++)l[S]+=s[A]*i[S][A];for(var _=p+1;_<this.n;_++)for(var I=-s[_]/s[p+1],D=p+1;D<this.m;D++)i[D][_]+=I*l[D]}if(h)for(var k=p+1;k<this.n;k++)this.V[k][p]=s[k]}}var L=Math.min(this.n,this.m+1);if(f<this.n&&(this.s[f]=i[f][f]),this.m<L&&(this.s[L-1]=0),d+1<L&&(s[d]=i[d][L-1]),s[L-1]=0,u){for(var R=f;R<a;R++){for(var O=0;O<this.m;O++)this.U[O][R]=0;this.U[R][R]=1}for(var M=f-1;M>=0;M--)if(this.s[M]!==0){for(var B=M+1;B<a;B++){for(var F=0,P=M;P<this.m;P++)F+=this.U[P][M]*this.U[P][B];F=-F/this.U[M][M];for(var z=M;z<this.m;z++)this.U[z][B]+=F*this.U[z][M]}for(var $=M;$<this.m;$++)this.U[$][M]=-this.U[$][M];this.U[M][M]=1+this.U[M][M];for(var H=0;H<M-1;H++)this.U[H][M]=0}else{for(var Q=0;Q<this.m;Q++)this.U[Q][M]=0;this.U[M][M]=1}}if(h)for(var j=this.n-1;j>=0;j--){if(function(xt,ut){return xt&&ut}(j<d,s[j]!==0))for(var ie=j+1;ie<a;ie++){for(var ne=0,le=j+1;le<this.n;le++)ne+=this.V[le][j]*this.V[le][ie];ne=-ne/this.V[j+1][j];for(var he=j+1;he<this.n;he++)this.V[he][ie]+=ne*this.V[he][j]}for(var K=0;K<this.n;K++)this.V[K][j]=0;this.V[j][j]=1}for(var X=L-1,te=0,J=Math.pow(2,-52),se=Math.pow(2,-966);L>0;){var ue=void 0,Z=void 0;for(ue=L-2;ue>=-1&&ue!==-1;ue--)if(Math.abs(s[ue])<=se+J*(Math.abs(this.s[ue])+Math.abs(this.s[ue+1]))){s[ue]=0;break}if(ue===L-2)Z=4;else{var Se=void 0;for(Se=L-1;Se>=ue&&Se!==ue;Se--){var ce=(Se!==L?Math.abs(s[Se]):0)+(Se!==ue+1?Math.abs(s[Se-1]):0);if(Math.abs(this.s[Se])<=se+J*ce){this.s[Se]=0;break}}Se===ue?Z=3:Se===L-1?Z=1:(Z=2,ue=Se)}switch(ue++,Z){case 1:{var ae=s[L-2];s[L-2]=0;for(var Oe=L-2;Oe>=ue;Oe--){var ge=n.hypot(this.s[Oe],ae),ze=this.s[Oe]/ge,He=ae/ge;if(this.s[Oe]=ge,Oe!==ue&&(ae=-He*s[Oe-1],s[Oe-1]=ze*s[Oe-1]),h)for(var $e=0;$e<this.n;$e++)ge=ze*this.V[$e][Oe]+He*this.V[$e][L-1],this.V[$e][L-1]=-He*this.V[$e][Oe]+ze*this.V[$e][L-1],this.V[$e][Oe]=ge}}break;case 2:{var Re=s[ue-1];s[ue-1]=0;for(var Ie=ue;Ie<L;Ie++){var be=n.hypot(this.s[Ie],Re),W=this.s[Ie]/be,de=Re/be;if(this.s[Ie]=be,Re=-de*s[Ie],s[Ie]=W*s[Ie],u)for(var re=0;re<this.m;re++)be=W*this.U[re][Ie]+de*this.U[re][ue-1],this.U[re][ue-1]=-de*this.U[re][Ie]+W*this.U[re][ue-1],this.U[re][Ie]=be}}break;case 3:{var oe=Math.max(Math.max(Math.max(Math.max(Math.abs(this.s[L-1]),Math.abs(this.s[L-2])),Math.abs(s[L-2])),Math.abs(this.s[ue])),Math.abs(s[ue])),V=this.s[L-1]/oe,xe=this.s[L-2]/oe,q=s[L-2]/oe,pe=this.s[ue]/oe,ve=s[ue]/oe,Pe=((xe+V)*(xe-V)+q*q)/2,_e=V*q*(V*q),we=0;(function(xt,ut){return xt||ut})(Pe!==0,_e!==0)&&(we=Math.sqrt(Pe*Pe+_e),Pe<0&&(we=-we),we=_e/(Pe+we));for(var Ve=(pe+V)*(pe-V)+we,De=pe*ve,qe=ue;qe<L-1;qe++){var at=n.hypot(Ve,De),Rt=Ve/at,st=De/at;if(qe!==ue&&(s[qe-1]=at),Ve=Rt*this.s[qe]+st*s[qe],s[qe]=Rt*s[qe]-st*this.s[qe],De=st*this.s[qe+1],this.s[qe+1]=Rt*this.s[qe+1],h)for(var Ue=0;Ue<this.n;Ue++)at=Rt*this.V[Ue][qe]+st*this.V[Ue][qe+1],this.V[Ue][qe+1]=-st*this.V[Ue][qe]+Rt*this.V[Ue][qe+1],this.V[Ue][qe]=at;if(at=n.hypot(Ve,De),Rt=Ve/at,st=De/at,this.s[qe]=at,Ve=Rt*s[qe]+st*this.s[qe+1],this.s[qe+1]=-st*s[qe]+Rt*this.s[qe+1],De=st*s[qe+1],s[qe+1]=Rt*s[qe+1],u&&qe<this.m-1)for(var ct=0;ct<this.m;ct++)at=Rt*this.U[ct][qe]+st*this.U[ct][qe+1],this.U[ct][qe+1]=-st*this.U[ct][qe]+Rt*this.U[ct][qe+1],this.U[ct][qe]=at}s[L-2]=Ve,te=te+1}break;case 4:{if(this.s[ue]<=0&&(this.s[ue]=this.s[ue]<0?-this.s[ue]:0,h))for(var We=0;We<=X;We++)this.V[We][ue]=-this.V[We][ue];for(;ue<X&&!(this.s[ue]>=this.s[ue+1]);){var ot=this.s[ue];if(this.s[ue]=this.s[ue+1],this.s[ue+1]=ot,h&&ue<this.n-1)for(var Yt=0;Yt<this.n;Yt++)ot=this.V[Yt][ue+1],this.V[Yt][ue+1]=this.V[Yt][ue],this.V[Yt][ue]=ot;if(u&&ue<this.m-1)for(var bt=0;bt<this.m;bt++)ot=this.U[bt][ue+1],this.U[bt][ue+1]=this.U[bt][ue],this.U[bt][ue]=ot;ue++}te=0,L--}break}}var Mt={U:this.U,V:this.V,S:this.s};return Mt},n.hypot=function(i,a){var s=void 0;return Math.abs(i)>Math.abs(a)?(s=a/i,s=Math.abs(i)*Math.sqrt(1+s*s)):a!=0?(s=i/a,s=Math.abs(a)*Math.sqrt(1+s*s)):s=0,s},t.exports=n},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h<u.length;h++){var f=u[h];f.enumerable=f.enumerable||!1,f.configurable=!0,"value"in f&&(f.writable=!0),Object.defineProperty(l,f.key,f)}}return o(s,"defineProperties"),function(l,u,h){return u&&s(l.prototype,u),h&&s(l,h),l}}();function i(s,l){if(!(s instanceof l))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=function(){function s(l,u){var h=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p<this.iMax;p++){this.grid[p]=new Array(this.jMax);for(var m=0;m<this.jMax;m++)this.grid[p][m]=0}this.tracebackGrid=new Array(this.iMax);for(var g=0;g<this.iMax;g++){this.tracebackGrid[g]=new Array(this.jMax);for(var y=0;y<this.jMax;y++)this.tracebackGrid[g][y]=[null,null,null]}this.alignments=[],this.score=-1,this.computeGrids()}return o(s,"NeedlemanWunsch"),n(s,[{key:"getScore",value:o(function(){return this.score},"getScore")},{key:"getAlignments",value:o(function(){return this.alignments},"getAlignments")},{key:"computeGrids",value:o(function(){for(var u=1;u<this.jMax;u++)this.grid[0][u]=this.grid[0][u-1]+this.gap_penalty,this.tracebackGrid[0][u]=[!1,!1,!0];for(var h=1;h<this.iMax;h++)this.grid[h][0]=this.grid[h-1][0]+this.gap_penalty,this.tracebackGrid[h][0]=[!1,!0,!1];for(var f=1;f<this.iMax;f++)for(var d=1;d<this.jMax;d++){var p=void 0;this.sequence1[f-1]===this.sequence2[d-1]?p=this.grid[f-1][d-1]+this.match_score:p=this.grid[f-1][d-1]+this.mismatch_penalty;var m=this.grid[f-1][d]+this.gap_penalty,g=this.grid[f][d-1]+this.gap_penalty,y=[p,m,g],v=this.arrayAllMaxIndexes(y);this.grid[f][d]=y[v[0]],this.tracebackGrid[f][d]=[v.includes(0),v.includes(1),v.includes(2)]}this.score=this.grid[this.iMax-1][this.jMax-1]},"computeGrids")},{key:"alignmentTraceback",value:o(function(){var u=[];for(u.push({pos:[this.sequence1.length,this.sequence2.length],seq1:"",seq2:""});u[0];){var h=u[0],f=this.tracebackGrid[h.pos[0]][h.pos[1]];f[0]&&u.push({pos:[h.pos[0]-1,h.pos[1]-1],seq1:this.sequence1[h.pos[0]-1]+h.seq1,seq2:this.sequence2[h.pos[1]-1]+h.seq2}),f[1]&&u.push({pos:[h.pos[0]-1,h.pos[1]],seq1:this.sequence1[h.pos[0]-1]+h.seq1,seq2:"-"+h.seq2}),f[2]&&u.push({pos:[h.pos[0],h.pos[1]-1],seq1:"-"+h.seq1,seq2:this.sequence2[h.pos[1]-1]+h.seq2}),h.pos[0]===0&&h.pos[1]===0&&this.alignments.push({sequence1:h.seq1,sequence2:h.seq2}),u.shift()}return this.alignments},"alignmentTraceback")},{key:"getAllIndexes",value:o(function(u,h){for(var f=[],d=-1;(d=u.indexOf(h,d+1))!==-1;)f.push(d);return f},"getAllIndexes")},{key:"arrayAllMaxIndexes",value:o(function(u){return this.getAllIndexes(u,Math.max.apply(null,u))},"arrayAllMaxIndexes")}]),s}();t.exports=a},function(t,e,r){"use strict";var n=o(function(){},"layoutBase");n.FDLayout=r(18),n.FDLayoutConstants=r(4),n.FDLayoutEdge=r(19),n.FDLayoutNode=r(20),n.DimensionD=r(21),n.HashMap=r(22),n.HashSet=r(23),n.IGeometry=r(8),n.IMath=r(9),n.Integer=r(10),n.Point=r(12),n.PointD=r(5),n.RandomSeed=r(16),n.RectangleD=r(13),n.Transform=r(17),n.UniqueIDGeneretor=r(14),n.Quicksort=r(25),n.LinkedList=r(11),n.LGraphObject=r(2),n.LGraph=r(6),n.LEdge=r(1),n.LGraphManager=r(7),n.LNode=r(3),n.Layout=r(15),n.LayoutConstants=r(0),n.NeedlemanWunsch=r(27),n.Matrix=r(24),n.SVD=r(26),t.exports=n},function(t,e,r){"use strict";function n(){this.listeners=[]}o(n,"Emitter");var i=n.prototype;i.addListener=function(a,s){this.listeners.push({event:a,callback:s})},i.removeListener=function(a,s){for(var l=this.listeners.length;l>=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l<this.listeners.length;l++){var u=this.listeners[l];a===u.event&&u.callback(s)}},t.exports=n}])})});var mF=Mi((k4,pF)=>{"use strict";o(function(e,r){typeof k4=="object"&&typeof pF=="object"?pF.exports=r(dF()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof k4=="object"?k4.coseBase=r(dF()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(k4,function(t){return(()=>{"use strict";var e={45:(a,s,l)=>{var u={};u.layoutBase=l(551),u.CoSEConstants=l(806),u.CoSEEdge=l(767),u.CoSEGraph=l(880),u.CoSEGraphManager=l(578),u.CoSELayout=l(765),u.CoSENode=l(991),u.ConstraintHandler=l(902),a.exports=u},806:(a,s,l)=>{var u=l(551).FDLayoutConstants;function h(){}o(h,"CoSEConstants");for(var f in u)h[f]=u[f];h.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,h.DEFAULT_RADIAL_SEPARATION=u.DEFAULT_EDGE_LENGTH,h.DEFAULT_COMPONENT_SEPERATION=60,h.TILE=!0,h.TILING_PADDING_VERTICAL=10,h.TILING_PADDING_HORIZONTAL=10,h.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,h.ENFORCE_CONSTRAINTS=!0,h.APPLY_LAYOUT=!0,h.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,h.TREE_REDUCTION_ON_INCREMENTAL=!0,h.PURE_INCREMENTAL=h.DEFAULT_INCREMENTAL,a.exports=h},767:(a,s,l)=>{var u=l(551).FDLayoutEdge;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEEdge"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},880:(a,s,l)=>{var u=l(551).LGraph;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEGraph"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},578:(a,s,l)=>{var u=l(551).LGraphManager;function h(d){u.call(this,d)}o(h,"CoSEGraphManager"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},765:(a,s,l)=>{var u=l(551).FDLayout,h=l(578),f=l(880),d=l(991),p=l(767),m=l(806),g=l(902),y=l(551).FDLayoutConstants,v=l(551).LayoutConstants,x=l(551).Point,b=l(551).PointD,w=l(551).DimensionD,C=l(551).Layout,T=l(551).Integer,E=l(551).IGeometry,A=l(551).LGraph,S=l(551).Transform,_=l(551).LinkedList;function I(){u.call(this),this.toBeTiled={},this.constraints={}}o(I,"CoSELayout"),I.prototype=Object.create(u.prototype);for(var D in u)I[D]=u[D];I.prototype.newGraphManager=function(){var k=new h(this);return this.graphManager=k,k},I.prototype.newGraph=function(k){return new f(null,this.graphManager,k)},I.prototype.newNode=function(k){return new d(this.graphManager,k)},I.prototype.newEdge=function(k){return new p(null,null,k)},I.prototype.initParameters=function(){u.prototype.initParameters.call(this,arguments),this.isSubLayout||(m.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=m.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=m.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=y.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=y.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=y.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},I.prototype.initSpringEmbedder=function(){u.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/y.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},I.prototype.layout=function(){var k=v.DEFAULT_CREATE_BENDS_AS_NEEDED;return k&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},I.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(m.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var L=new Set(this.getAllNodes()),R=this.nodesWithGravity.filter(function(B){return L.has(B)});this.graphManager.setAllNodesToApplyGravitation(R)}}else{var k=this.getFlatForest();if(k.length>0)this.positionNodesRadially(k);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var L=new Set(this.getAllNodes()),R=this.nodesWithGravity.filter(function(O){return L.has(O)});this.graphManager.setAllNodesToApplyGravitation(R),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(g.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),m.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},I.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%y.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var k=new Set(this.getAllNodes()),L=this.nodesWithGravity.filter(function(M){return k.has(M)});this.graphManager.setAllNodesToApplyGravitation(L),this.graphManager.updateBounds(),this.updateGrid(),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var R=!this.isTreeGrowing&&!this.isGrowthFinished,O=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(R,O),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},I.prototype.getPositionsData=function(){for(var k=this.graphManager.getAllNodes(),L={},R=0;R<k.length;R++){var O=k[R].rect,M=k[R].id;L[M]={id:M,x:O.getCenterX(),y:O.getCenterY(),w:O.width,h:O.height}}return L},I.prototype.runSpringEmbedder=function(){this.initialAnimationPeriod=25,this.animationPeriod=this.initialAnimationPeriod;var k=!1;if(y.ANIMATE==="during")this.emit("layoutstarted");else{for(;!k;)k=this.tick();this.graphManager.updateBounds()}},I.prototype.moveNodes=function(){for(var k=this.getAllNodes(),L,R=0;R<k.length;R++)L=k[R],L.calculateDisplacement();Object.keys(this.constraints).length>0&&this.updateDisplacements();for(var R=0;R<k.length;R++)L=k[R],L.move()},I.prototype.initConstraintVariables=function(){var k=this;this.idToNodeMap=new Map,this.fixedNodeSet=new Set;for(var L=this.graphManager.getAllNodes(),R=0;R<L.length;R++){var O=L[R];this.idToNodeMap.set(O.id,O)}var M=o(function le(he){for(var K=he.getChild().getNodes(),X,te=0,J=0;J<K.length;J++)X=K[J],X.getChild()==null?k.fixedNodeSet.has(X.id)&&(te+=100):te+=le(X);return te},"calculateCompoundWeight");if(this.constraints.fixedNodeConstraint){this.constraints.fixedNodeConstraint.forEach(function(K){k.fixedNodeSet.add(K.nodeId)});for(var L=this.graphManager.getAllNodes(),O,R=0;R<L.length;R++)if(O=L[R],O.getChild()!=null){var B=M(O);B>0&&(O.fixedNodeWeight=B)}}if(this.constraints.relativePlacementConstraint){var F=new Map,P=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(le){k.fixedNodesOnHorizontal.add(le),k.fixedNodesOnVertical.add(le)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var z=this.constraints.alignmentConstraint.vertical,R=0;R<z.length;R++)this.dummyToNodeForVerticalAlignment.set("dummy"+R,[]),z[R].forEach(function(he){F.set(he,"dummy"+R),k.dummyToNodeForVerticalAlignment.get("dummy"+R).push(he),k.fixedNodeSet.has(he)&&k.fixedNodesOnHorizontal.add("dummy"+R)});if(this.constraints.alignmentConstraint.horizontal)for(var $=this.constraints.alignmentConstraint.horizontal,R=0;R<$.length;R++)this.dummyToNodeForHorizontalAlignment.set("dummy"+R,[]),$[R].forEach(function(he){P.set(he,"dummy"+R),k.dummyToNodeForHorizontalAlignment.get("dummy"+R).push(he),k.fixedNodeSet.has(he)&&k.fixedNodesOnVertical.add("dummy"+R)})}if(m.RELAX_MOVEMENT_ON_CONSTRAINTS)this.shuffle=function(le){var he,K,X;for(X=le.length-1;X>=2*le.length/3;X--)he=Math.floor(Math.random()*(X+1)),K=le[X],le[X]=le[he],le[he]=K;return le},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(le){if(le.left){var he=F.has(le.left)?F.get(le.left):le.left,K=F.has(le.right)?F.get(le.right):le.right;k.nodesInRelativeHorizontal.includes(he)||(k.nodesInRelativeHorizontal.push(he),k.nodeToRelativeConstraintMapHorizontal.set(he,[]),k.dummyToNodeForVerticalAlignment.has(he)?k.nodeToTempPositionMapHorizontal.set(he,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(he)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(he,k.idToNodeMap.get(he).getCenterX())),k.nodesInRelativeHorizontal.includes(K)||(k.nodesInRelativeHorizontal.push(K),k.nodeToRelativeConstraintMapHorizontal.set(K,[]),k.dummyToNodeForVerticalAlignment.has(K)?k.nodeToTempPositionMapHorizontal.set(K,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(K)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(K,k.idToNodeMap.get(K).getCenterX())),k.nodeToRelativeConstraintMapHorizontal.get(he).push({right:K,gap:le.gap}),k.nodeToRelativeConstraintMapHorizontal.get(K).push({left:he,gap:le.gap})}else{var X=P.has(le.top)?P.get(le.top):le.top,te=P.has(le.bottom)?P.get(le.bottom):le.bottom;k.nodesInRelativeVertical.includes(X)||(k.nodesInRelativeVertical.push(X),k.nodeToRelativeConstraintMapVertical.set(X,[]),k.dummyToNodeForHorizontalAlignment.has(X)?k.nodeToTempPositionMapVertical.set(X,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(X)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(X,k.idToNodeMap.get(X).getCenterY())),k.nodesInRelativeVertical.includes(te)||(k.nodesInRelativeVertical.push(te),k.nodeToRelativeConstraintMapVertical.set(te,[]),k.dummyToNodeForHorizontalAlignment.has(te)?k.nodeToTempPositionMapVertical.set(te,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(te)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(te,k.idToNodeMap.get(te).getCenterY())),k.nodeToRelativeConstraintMapVertical.get(X).push({bottom:te,gap:le.gap}),k.nodeToRelativeConstraintMapVertical.get(te).push({top:X,gap:le.gap})}});else{var H=new Map,Q=new Map;this.constraints.relativePlacementConstraint.forEach(function(le){if(le.left){var he=F.has(le.left)?F.get(le.left):le.left,K=F.has(le.right)?F.get(le.right):le.right;H.has(he)?H.get(he).push(K):H.set(he,[K]),H.has(K)?H.get(K).push(he):H.set(K,[he])}else{var X=P.has(le.top)?P.get(le.top):le.top,te=P.has(le.bottom)?P.get(le.bottom):le.bottom;Q.has(X)?Q.get(X).push(te):Q.set(X,[te]),Q.has(te)?Q.get(te).push(X):Q.set(te,[X])}});var j=o(function(he,K){var X=[],te=[],J=new _,se=new Set,ue=0;return he.forEach(function(Z,Se){if(!se.has(Se)){X[ue]=[],te[ue]=!1;var ce=Se;for(J.push(ce),se.add(ce),X[ue].push(ce);J.length!=0;){ce=J.shift(),K.has(ce)&&(te[ue]=!0);var ae=he.get(ce);ae.forEach(function(Oe){se.has(Oe)||(J.push(Oe),se.add(Oe),X[ue].push(Oe))})}ue++}}),{components:X,isFixed:te}},"constructComponents"),ie=j(H,k.fixedNodesOnHorizontal);this.componentsOnHorizontal=ie.components,this.fixedComponentsOnHorizontal=ie.isFixed;var ne=j(Q,k.fixedNodesOnVertical);this.componentsOnVertical=ne.components,this.fixedComponentsOnVertical=ne.isFixed}}},I.prototype.updateDisplacements=function(){var k=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(ne){var le=k.idToNodeMap.get(ne.nodeId);le.displacementX=0,le.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var L=this.constraints.alignmentConstraint.vertical,R=0;R<L.length;R++){for(var O=0,M=0;M<L[R].length;M++){if(this.fixedNodeSet.has(L[R][M])){O=0;break}O+=this.idToNodeMap.get(L[R][M]).displacementX}for(var B=O/L[R].length,M=0;M<L[R].length;M++)this.idToNodeMap.get(L[R][M]).displacementX=B}if(this.constraints.alignmentConstraint.horizontal)for(var F=this.constraints.alignmentConstraint.horizontal,R=0;R<F.length;R++){for(var P=0,M=0;M<F[R].length;M++){if(this.fixedNodeSet.has(F[R][M])){P=0;break}P+=this.idToNodeMap.get(F[R][M]).displacementY}for(var z=P/F[R].length,M=0;M<F[R].length;M++)this.idToNodeMap.get(F[R][M]).displacementY=z}}if(this.constraints.relativePlacementConstraint)if(m.RELAX_MOVEMENT_ON_CONSTRAINTS)this.totalIterations%10==0&&(this.shuffle(this.nodesInRelativeHorizontal),this.shuffle(this.nodesInRelativeVertical)),this.nodesInRelativeHorizontal.forEach(function(ne){if(!k.fixedNodesOnHorizontal.has(ne)){var le=0;k.dummyToNodeForVerticalAlignment.has(ne)?le=k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(ne)[0]).displacementX:le=k.idToNodeMap.get(ne).displacementX,k.nodeToRelativeConstraintMapHorizontal.get(ne).forEach(function(he){if(he.right){var K=k.nodeToTempPositionMapHorizontal.get(he.right)-k.nodeToTempPositionMapHorizontal.get(ne)-le;K<he.gap&&(le-=he.gap-K)}else{var K=k.nodeToTempPositionMapHorizontal.get(ne)-k.nodeToTempPositionMapHorizontal.get(he.left)+le;K<he.gap&&(le+=he.gap-K)}}),k.nodeToTempPositionMapHorizontal.set(ne,k.nodeToTempPositionMapHorizontal.get(ne)+le),k.dummyToNodeForVerticalAlignment.has(ne)?k.dummyToNodeForVerticalAlignment.get(ne).forEach(function(he){k.idToNodeMap.get(he).displacementX=le}):k.idToNodeMap.get(ne).displacementX=le}}),this.nodesInRelativeVertical.forEach(function(ne){if(!k.fixedNodesOnHorizontal.has(ne)){var le=0;k.dummyToNodeForHorizontalAlignment.has(ne)?le=k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(ne)[0]).displacementY:le=k.idToNodeMap.get(ne).displacementY,k.nodeToRelativeConstraintMapVertical.get(ne).forEach(function(he){if(he.bottom){var K=k.nodeToTempPositionMapVertical.get(he.bottom)-k.nodeToTempPositionMapVertical.get(ne)-le;K<he.gap&&(le-=he.gap-K)}else{var K=k.nodeToTempPositionMapVertical.get(ne)-k.nodeToTempPositionMapVertical.get(he.top)+le;K<he.gap&&(le+=he.gap-K)}}),k.nodeToTempPositionMapVertical.set(ne,k.nodeToTempPositionMapVertical.get(ne)+le),k.dummyToNodeForHorizontalAlignment.has(ne)?k.dummyToNodeForHorizontalAlignment.get(ne).forEach(function(he){k.idToNodeMap.get(he).displacementY=le}):k.idToNodeMap.get(ne).displacementY=le}});else{for(var R=0;R<this.componentsOnHorizontal.length;R++){var $=this.componentsOnHorizontal[R];if(this.fixedComponentsOnHorizontal[R])for(var M=0;M<$.length;M++)this.dummyToNodeForVerticalAlignment.has($[M])?this.dummyToNodeForVerticalAlignment.get($[M]).forEach(function(he){k.idToNodeMap.get(he).displacementX=0}):this.idToNodeMap.get($[M]).displacementX=0;else{for(var H=0,Q=0,M=0;M<$.length;M++)if(this.dummyToNodeForVerticalAlignment.has($[M])){var j=this.dummyToNodeForVerticalAlignment.get($[M]);H+=j.length*this.idToNodeMap.get(j[0]).displacementX,Q+=j.length}else H+=this.idToNodeMap.get($[M]).displacementX,Q++;for(var ie=H/Q,M=0;M<$.length;M++)this.dummyToNodeForVerticalAlignment.has($[M])?this.dummyToNodeForVerticalAlignment.get($[M]).forEach(function(he){k.idToNodeMap.get(he).displacementX=ie}):this.idToNodeMap.get($[M]).displacementX=ie}}for(var R=0;R<this.componentsOnVertical.length;R++){var $=this.componentsOnVertical[R];if(this.fixedComponentsOnVertical[R])for(var M=0;M<$.length;M++)this.dummyToNodeForHorizontalAlignment.has($[M])?this.dummyToNodeForHorizontalAlignment.get($[M]).forEach(function(K){k.idToNodeMap.get(K).displacementY=0}):this.idToNodeMap.get($[M]).displacementY=0;else{for(var H=0,Q=0,M=0;M<$.length;M++)if(this.dummyToNodeForHorizontalAlignment.has($[M])){var j=this.dummyToNodeForHorizontalAlignment.get($[M]);H+=j.length*this.idToNodeMap.get(j[0]).displacementY,Q+=j.length}else H+=this.idToNodeMap.get($[M]).displacementY,Q++;for(var ie=H/Q,M=0;M<$.length;M++)this.dummyToNodeForHorizontalAlignment.has($[M])?this.dummyToNodeForHorizontalAlignment.get($[M]).forEach(function(J){k.idToNodeMap.get(J).displacementY=ie}):this.idToNodeMap.get($[M]).displacementY=ie}}}},I.prototype.calculateNodesToApplyGravitationTo=function(){var k=[],L,R=this.graphManager.getGraphs(),O=R.length,M;for(M=0;M<O;M++)L=R[M],L.updateConnected(),L.isConnected||(k=k.concat(L.getNodes()));return k},I.prototype.createBendpoints=function(){var k=[];k=k.concat(this.graphManager.getAllEdges());var L=new Set,R;for(R=0;R<k.length;R++){var O=k[R];if(!L.has(O)){var M=O.getSource(),B=O.getTarget();if(M==B)O.getBendpoints().push(new b),O.getBendpoints().push(new b),this.createDummyNodesForBendpoints(O),L.add(O);else{var F=[];if(F=F.concat(M.getEdgeListToNode(B)),F=F.concat(B.getEdgeListToNode(M)),!L.has(F[0])){if(F.length>1){var P;for(P=0;P<F.length;P++){var z=F[P];z.getBendpoints().push(new b),this.createDummyNodesForBendpoints(z)}}F.forEach(function($){L.add($)})}}}if(L.size==k.length)break}},I.prototype.positionNodesRadially=function(k){for(var L=new x(0,0),R=Math.ceil(Math.sqrt(k.length)),O=0,M=0,B=0,F=new b(0,0),P=0;P<k.length;P++){P%R==0&&(B=0,M=O,P!=0&&(M+=m.DEFAULT_COMPONENT_SEPERATION),O=0);var z=k[P],$=C.findCenterOfTree(z);L.x=B,L.y=M,F=I.radialLayout(z,$,L),F.y>O&&(O=Math.floor(F.y)),B=Math.floor(F.x+m.DEFAULT_COMPONENT_SEPERATION)}this.transform(new b(v.WORLD_CENTER_X-F.x/2,v.WORLD_CENTER_Y-F.y/2))},I.radialLayout=function(k,L,R){var O=Math.max(this.maxDiagonalInTree(k),m.DEFAULT_RADIAL_SEPARATION);I.branchRadialLayout(L,null,0,359,0,O);var M=A.calculateBounds(k),B=new S;B.setDeviceOrgX(M.getMinX()),B.setDeviceOrgY(M.getMinY()),B.setWorldOrgX(R.x),B.setWorldOrgY(R.y);for(var F=0;F<k.length;F++){var P=k[F];P.transform(B)}var z=new b(M.getMaxX(),M.getMaxY());return B.inverseTransformPoint(z)},I.branchRadialLayout=function(k,L,R,O,M,B){var F=(O-R+1)/2;F<0&&(F+=180);var P=(F+R)%360,z=P*E.TWO_PI/360,$=Math.cos(z),H=M*Math.cos(z),Q=M*Math.sin(z);k.setCenter(H,Q);var j=[];j=j.concat(k.getEdges());var ie=j.length;L!=null&&ie--;for(var ne=0,le=j.length,he,K=k.getEdgesBetween(L);K.length>1;){var X=K[0];K.splice(0,1);var te=j.indexOf(X);te>=0&&j.splice(te,1),le--,ie--}L!=null?he=(j.indexOf(K[0])+1)%le:he=0;for(var J=Math.abs(O-R)/ie,se=he;ne!=ie;se=++se%le){var ue=j[se].getOtherEnd(k);if(ue!=L){var Z=(R+ne*J)%360,Se=(Z+J)%360;I.branchRadialLayout(ue,k,Z,Se,M+B,B),ne++}}},I.maxDiagonalInTree=function(k){for(var L=T.MIN_VALUE,R=0;R<k.length;R++){var O=k[R],M=O.getDiagonal();M>L&&(L=M)}return L},I.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},I.prototype.groupZeroDegreeMembers=function(){var k=this,L={};this.memberGroups={},this.idToDummyNode={};for(var R=[],O=this.graphManager.getAllNodes(),M=0;M<O.length;M++){var B=O[M],F=B.getParent();this.getNodeDegreeWithChildren(B)===0&&(F.id==null||!this.getToBeTiled(F))&&R.push(B)}for(var M=0;M<R.length;M++){var B=R[M],P=B.getParent().id;typeof L[P]>"u"&&(L[P]=[]),L[P]=L[P].concat(B)}Object.keys(L).forEach(function(z){if(L[z].length>1){var $="DummyCompound_"+z;k.memberGroups[$]=L[z];var H=L[z][0].getParent(),Q=new d(k.graphManager);Q.id=$,Q.paddingLeft=H.paddingLeft||0,Q.paddingRight=H.paddingRight||0,Q.paddingBottom=H.paddingBottom||0,Q.paddingTop=H.paddingTop||0,k.idToDummyNode[$]=Q;var j=k.getGraphManager().add(k.newGraph(),Q),ie=H.getChild();ie.add(Q);for(var ne=0;ne<L[z].length;ne++){var le=L[z][ne];ie.remove(le),j.add(le)}}})},I.prototype.clearCompounds=function(){var k={},L={};this.performDFSOnCompounds();for(var R=0;R<this.compoundOrder.length;R++)L[this.compoundOrder[R].id]=this.compoundOrder[R],k[this.compoundOrder[R].id]=[].concat(this.compoundOrder[R].getChild().getNodes()),this.graphManager.remove(this.compoundOrder[R].getChild()),this.compoundOrder[R].child=null;this.graphManager.resetAllNodes(),this.tileCompoundMembers(k,L)},I.prototype.clearZeroDegreeMembers=function(){var k=this,L=this.tiledZeroDegreePack=[];Object.keys(this.memberGroups).forEach(function(R){var O=k.idToDummyNode[R];if(L[R]=k.tileNodes(k.memberGroups[R],O.paddingLeft+O.paddingRight),O.rect.width=L[R].width,O.rect.height=L[R].height,O.setCenter(L[R].centerX,L[R].centerY),O.labelMarginLeft=0,O.labelMarginTop=0,m.NODE_DIMENSIONS_INCLUDE_LABELS){var M=O.rect.width,B=O.rect.height;O.labelWidth&&(O.labelPosHorizontal=="left"?(O.rect.x-=O.labelWidth,O.setWidth(M+O.labelWidth),O.labelMarginLeft=O.labelWidth):O.labelPosHorizontal=="center"&&O.labelWidth>M?(O.rect.x-=(O.labelWidth-M)/2,O.setWidth(O.labelWidth),O.labelMarginLeft=(O.labelWidth-M)/2):O.labelPosHorizontal=="right"&&O.setWidth(M+O.labelWidth)),O.labelHeight&&(O.labelPosVertical=="top"?(O.rect.y-=O.labelHeight,O.setHeight(B+O.labelHeight),O.labelMarginTop=O.labelHeight):O.labelPosVertical=="center"&&O.labelHeight>B?(O.rect.y-=(O.labelHeight-B)/2,O.setHeight(O.labelHeight),O.labelMarginTop=(O.labelHeight-B)/2):O.labelPosVertical=="bottom"&&O.setHeight(B+O.labelHeight))}})},I.prototype.repopulateCompounds=function(){for(var k=this.compoundOrder.length-1;k>=0;k--){var L=this.compoundOrder[k],R=L.id,O=L.paddingLeft,M=L.paddingTop,B=L.labelMarginLeft,F=L.labelMarginTop;this.adjustLocations(this.tiledMemberPack[R],L.rect.x,L.rect.y,O,M,B,F)}},I.prototype.repopulateZeroDegreeMembers=function(){var k=this,L=this.tiledZeroDegreePack;Object.keys(L).forEach(function(R){var O=k.idToDummyNode[R],M=O.paddingLeft,B=O.paddingTop,F=O.labelMarginLeft,P=O.labelMarginTop;k.adjustLocations(L[R],O.rect.x,O.rect.y,M,B,F,P)})},I.prototype.getToBeTiled=function(k){var L=k.id;if(this.toBeTiled[L]!=null)return this.toBeTiled[L];var R=k.getChild();if(R==null)return this.toBeTiled[L]=!1,!1;for(var O=R.getNodes(),M=0;M<O.length;M++){var B=O[M];if(this.getNodeDegree(B)>0)return this.toBeTiled[L]=!1,!1;if(B.getChild()==null){this.toBeTiled[B.id]=!1;continue}if(!this.getToBeTiled(B))return this.toBeTiled[L]=!1,!1}return this.toBeTiled[L]=!0,!0},I.prototype.getNodeDegree=function(k){for(var L=k.id,R=k.getEdges(),O=0,M=0;M<R.length;M++){var B=R[M];B.getSource().id!==B.getTarget().id&&(O=O+1)}return O},I.prototype.getNodeDegreeWithChildren=function(k){var L=this.getNodeDegree(k);if(k.getChild()==null)return L;for(var R=k.getChild().getNodes(),O=0;O<R.length;O++){var M=R[O];L+=this.getNodeDegreeWithChildren(M)}return L},I.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},I.prototype.fillCompexOrderByDFS=function(k){for(var L=0;L<k.length;L++){var R=k[L];R.getChild()!=null&&this.fillCompexOrderByDFS(R.getChild().getNodes()),this.getToBeTiled(R)&&this.compoundOrder.push(R)}},I.prototype.adjustLocations=function(k,L,R,O,M,B,F){L+=O+B,R+=M+F;for(var P=L,z=0;z<k.rows.length;z++){var $=k.rows[z];L=P;for(var H=0,Q=0;Q<$.length;Q++){var j=$[Q];j.rect.x=L,j.rect.y=R,L+=j.rect.width+k.horizontalPadding,j.rect.height>H&&(H=j.rect.height)}R+=H+k.verticalPadding}},I.prototype.tileCompoundMembers=function(k,L){var R=this;this.tiledMemberPack=[],Object.keys(k).forEach(function(O){var M=L[O];if(R.tiledMemberPack[O]=R.tileNodes(k[O],M.paddingLeft+M.paddingRight),M.rect.width=R.tiledMemberPack[O].width,M.rect.height=R.tiledMemberPack[O].height,M.setCenter(R.tiledMemberPack[O].centerX,R.tiledMemberPack[O].centerY),M.labelMarginLeft=0,M.labelMarginTop=0,m.NODE_DIMENSIONS_INCLUDE_LABELS){var B=M.rect.width,F=M.rect.height;M.labelWidth&&(M.labelPosHorizontal=="left"?(M.rect.x-=M.labelWidth,M.setWidth(B+M.labelWidth),M.labelMarginLeft=M.labelWidth):M.labelPosHorizontal=="center"&&M.labelWidth>B?(M.rect.x-=(M.labelWidth-B)/2,M.setWidth(M.labelWidth),M.labelMarginLeft=(M.labelWidth-B)/2):M.labelPosHorizontal=="right"&&M.setWidth(B+M.labelWidth)),M.labelHeight&&(M.labelPosVertical=="top"?(M.rect.y-=M.labelHeight,M.setHeight(F+M.labelHeight),M.labelMarginTop=M.labelHeight):M.labelPosVertical=="center"&&M.labelHeight>F?(M.rect.y-=(M.labelHeight-F)/2,M.setHeight(M.labelHeight),M.labelMarginTop=(M.labelHeight-F)/2):M.labelPosVertical=="bottom"&&M.setHeight(F+M.labelHeight))}})},I.prototype.tileNodes=function(k,L){var R=this.tileNodesByFavoringDim(k,L,!0),O=this.tileNodesByFavoringDim(k,L,!1),M=this.getOrgRatio(R),B=this.getOrgRatio(O),F;return B<M?F=O:F=R,F},I.prototype.getOrgRatio=function(k){var L=k.width,R=k.height,O=L/R;return O<1&&(O=1/O),O},I.prototype.calcIdealRowWidth=function(k,L){var R=m.TILING_PADDING_VERTICAL,O=m.TILING_PADDING_HORIZONTAL,M=k.length,B=0,F=0,P=0;k.forEach(function(ne){B+=ne.getWidth(),F+=ne.getHeight(),ne.getWidth()>P&&(P=ne.getWidth())});var z=B/M,$=F/M,H=Math.pow(R-O,2)+4*(z+O)*($+R)*M,Q=(O-R+Math.sqrt(H))/(2*(z+O)),j;L?(j=Math.ceil(Q),j==Q&&j++):j=Math.floor(Q);var ie=j*(z+O)-O;return P>ie&&(ie=P),ie+=O*2,ie},I.prototype.tileNodesByFavoringDim=function(k,L,R){var O=m.TILING_PADDING_VERTICAL,M=m.TILING_PADDING_HORIZONTAL,B=m.TILING_COMPARE_BY,F={rows:[],rowWidth:[],rowHeight:[],width:0,height:L,verticalPadding:O,horizontalPadding:M,centerX:0,centerY:0};B&&(F.idealRowWidth=this.calcIdealRowWidth(k,R));var P=o(function(le){return le.rect.width*le.rect.height},"getNodeArea"),z=o(function(le,he){return P(he)-P(le)},"areaCompareFcn");k.sort(function(ne,le){var he=z;return F.idealRowWidth?(he=B,he(ne.id,le.id)):he(ne,le)});for(var $=0,H=0,Q=0;Q<k.length;Q++){var j=k[Q];$+=j.getCenterX(),H+=j.getCenterY()}F.centerX=$/k.length,F.centerY=H/k.length;for(var Q=0;Q<k.length;Q++){var j=k[Q];if(F.rows.length==0)this.insertNodeToRow(F,j,0,L);else if(this.canAddHorizontal(F,j.rect.width,j.rect.height)){var ie=F.rows.length-1;F.idealRowWidth||(ie=this.getShortestRowIndex(F)),this.insertNodeToRow(F,j,ie,L)}else this.insertNodeToRow(F,j,F.rows.length,L);this.shiftToLastRow(F)}return F},I.prototype.insertNodeToRow=function(k,L,R,O){var M=O;if(R==k.rows.length){var B=[];k.rows.push(B),k.rowWidth.push(M),k.rowHeight.push(0)}var F=k.rowWidth[R]+L.rect.width;k.rows[R].length>0&&(F+=k.horizontalPadding),k.rowWidth[R]=F,k.width<F&&(k.width=F);var P=L.rect.height;R>0&&(P+=k.verticalPadding);var z=0;P>k.rowHeight[R]&&(z=k.rowHeight[R],k.rowHeight[R]=P,z=k.rowHeight[R]-z),k.height+=z,k.rows[R].push(L)},I.prototype.getShortestRowIndex=function(k){for(var L=-1,R=Number.MAX_VALUE,O=0;O<k.rows.length;O++)k.rowWidth[O]<R&&(L=O,R=k.rowWidth[O]);return L},I.prototype.getLongestRowIndex=function(k){for(var L=-1,R=Number.MIN_VALUE,O=0;O<k.rows.length;O++)k.rowWidth[O]>R&&(L=O,R=k.rowWidth[O]);return L},I.prototype.canAddHorizontal=function(k,L,R){if(k.idealRowWidth){var O=k.rows.length-1,M=k.rowWidth[O];return M+L+k.horizontalPadding<=k.idealRowWidth}var B=this.getShortestRowIndex(k);if(B<0)return!0;var F=k.rowWidth[B];if(F+k.horizontalPadding+L<=k.width)return!0;var P=0;k.rowHeight[B]<R&&B>0&&(P=R+k.verticalPadding-k.rowHeight[B]);var z;k.width-F>=L+k.horizontalPadding?z=(k.height+P)/(F+L+k.horizontalPadding):z=(k.height+P)/k.width,P=R+k.verticalPadding;var $;return k.width<L?$=(k.height+P)/L:$=(k.height+P)/k.width,$<1&&($=1/$),z<1&&(z=1/z),z<$},I.prototype.shiftToLastRow=function(k){var L=this.getLongestRowIndex(k),R=k.rowWidth.length-1,O=k.rows[L],M=O[O.length-1],B=M.width+k.horizontalPadding;if(k.width-k.rowWidth[R]>B&&L!=R){O.splice(-1,1),k.rows[R].push(M),k.rowWidth[L]=k.rowWidth[L]-B,k.rowWidth[R]=k.rowWidth[R]+B,k.width=k.rowWidth[instance.getLongestRowIndex(k)];for(var F=Number.MIN_VALUE,P=0;P<O.length;P++)O[P].height>F&&(F=O[P].height);L>0&&(F+=k.verticalPadding);var z=k.rowHeight[L]+k.rowHeight[R];k.rowHeight[L]=F,k.rowHeight[R]<M.height+k.verticalPadding&&(k.rowHeight[R]=M.height+k.verticalPadding);var $=k.rowHeight[L]+k.rowHeight[R];k.height+=$-z,this.shiftToLastRow(k)}},I.prototype.tilingPreLayout=function(){m.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},I.prototype.tilingPostLayout=function(){m.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},I.prototype.reduceTrees=function(){for(var k=[],L=!0,R;L;){var O=this.graphManager.getAllNodes(),M=[];L=!1;for(var B=0;B<O.length;B++)if(R=O[B],R.getEdges().length==1&&!R.getEdges()[0].isInterGraph&&R.getChild()==null){if(m.PURE_INCREMENTAL){var F=R.getEdges()[0].getOtherEnd(R),P=new w(R.getCenterX()-F.getCenterX(),R.getCenterY()-F.getCenterY());M.push([R,R.getEdges()[0],R.getOwner(),P])}else M.push([R,R.getEdges()[0],R.getOwner()]);L=!0}if(L==!0){for(var z=[],$=0;$<M.length;$++)M[$][0].getEdges().length==1&&(z.push(M[$]),M[$][0].getOwner().remove(M[$][0]));k.push(z),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()}}this.prunedNodesAll=k},I.prototype.growTree=function(k){for(var L=k.length,R=k[L-1],O,M=0;M<R.length;M++)O=R[M],this.findPlaceforPrunedNode(O),O[2].add(O[0]),O[2].add(O[1],O[1].source,O[1].target);k.splice(k.length-1,1),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()},I.prototype.findPlaceforPrunedNode=function(k){var L,R,O=k[0];if(O==k[1].source?R=k[1].target:R=k[1].source,m.PURE_INCREMENTAL)O.setCenter(R.getCenterX()+k[3].getWidth(),R.getCenterY()+k[3].getHeight());else{var M=R.startX,B=R.finishX,F=R.startY,P=R.finishY,z=0,$=0,H=0,Q=0,j=[z,H,$,Q];if(F>0)for(var ie=M;ie<=B;ie++)j[0]+=this.grid[ie][F-1].length+this.grid[ie][F].length-1;if(B<this.grid.length-1)for(var ie=F;ie<=P;ie++)j[1]+=this.grid[B+1][ie].length+this.grid[B][ie].length-1;if(P<this.grid[0].length-1)for(var ie=M;ie<=B;ie++)j[2]+=this.grid[ie][P+1].length+this.grid[ie][P].length-1;if(M>0)for(var ie=F;ie<=P;ie++)j[3]+=this.grid[M-1][ie].length+this.grid[M][ie].length-1;for(var ne=T.MAX_VALUE,le,he,K=0;K<j.length;K++)j[K]<ne?(ne=j[K],le=1,he=K):j[K]==ne&&le++;if(le==3&&ne==0)j[0]==0&&j[1]==0&&j[2]==0?L=1:j[0]==0&&j[1]==0&&j[3]==0?L=0:j[0]==0&&j[2]==0&&j[3]==0?L=3:j[1]==0&&j[2]==0&&j[3]==0&&(L=2);else if(le==2&&ne==0){var X=Math.floor(Math.random()*2);j[0]==0&&j[1]==0?X==0?L=0:L=1:j[0]==0&&j[2]==0?X==0?L=0:L=2:j[0]==0&&j[3]==0?X==0?L=0:L=3:j[1]==0&&j[2]==0?X==0?L=1:L=2:j[1]==0&&j[3]==0?X==0?L=1:L=3:X==0?L=2:L=3}else if(le==4&&ne==0){var X=Math.floor(Math.random()*4);L=X}else L=he;L==0?O.setCenter(R.getCenterX(),R.getCenterY()-R.getHeight()/2-y.DEFAULT_EDGE_LENGTH-O.getHeight()/2):L==1?O.setCenter(R.getCenterX()+R.getWidth()/2+y.DEFAULT_EDGE_LENGTH+O.getWidth()/2,R.getCenterY()):L==2?O.setCenter(R.getCenterX(),R.getCenterY()+R.getHeight()/2+y.DEFAULT_EDGE_LENGTH+O.getHeight()/2):O.setCenter(R.getCenterX()-R.getWidth()/2-y.DEFAULT_EDGE_LENGTH-O.getWidth()/2,R.getCenterY())}},a.exports=I},991:(a,s,l)=>{var u=l(551).FDLayoutNode,h=l(551).IMath;function f(p,m,g,y){u.call(this,p,m,g,y)}o(f,"CoSENode"),f.prototype=Object.create(u.prototype);for(var d in u)f[d]=u[d];f.prototype.calculateDisplacement=function(){var p=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementX=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementX)),Math.abs(this.displacementY)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementY=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},f.prototype.propogateDisplacementToChildren=function(p,m){for(var g=this.getChild().getNodes(),y,v=0;v<g.length;v++)y=g[v],y.getChild()==null?(y.displacementX+=p,y.displacementY+=m):y.propogateDisplacementToChildren(p,m)},f.prototype.move=function(){var p=this.graphManager.getLayout();(this.child==null||this.child.getNodes().length==0)&&(this.moveBy(this.displacementX,this.displacementY),p.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY)),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},f.prototype.setPred1=function(p){this.pred1=p},f.prototype.getPred1=function(){return pred1},f.prototype.getPred2=function(){return pred2},f.prototype.setNext=function(p){this.next=p},f.prototype.getNext=function(){return next},f.prototype.setProcessed=function(p){this.processed=p},f.prototype.isProcessed=function(){return processed},a.exports=f},902:(a,s,l)=>{function u(g){if(Array.isArray(g)){for(var y=0,v=Array(g.length);y<g.length;y++)v[y]=g[y];return v}else return Array.from(g)}o(u,"_toConsumableArray");var h=l(806),f=l(551).LinkedList,d=l(551).Matrix,p=l(551).SVD;function m(){}o(m,"ConstraintHandler"),m.handleConstraints=function(g){var y={};y.fixedNodeConstraint=g.constraints.fixedNodeConstraint,y.alignmentConstraint=g.constraints.alignmentConstraint,y.relativePlacementConstraint=g.constraints.relativePlacementConstraint;for(var v=new Map,x=new Map,b=[],w=[],C=g.getAllNodes(),T=0,E=0;E<C.length;E++){var A=C[E];A.getChild()==null&&(x.set(A.id,T++),b.push(A.getCenterX()),w.push(A.getCenterY()),v.set(A.id,A))}y.relativePlacementConstraint&&y.relativePlacementConstraint.forEach(function(oe){!oe.gap&&oe.gap!=0&&(oe.left?oe.gap=h.DEFAULT_EDGE_LENGTH+v.get(oe.left).getWidth()/2+v.get(oe.right).getWidth()/2:oe.gap=h.DEFAULT_EDGE_LENGTH+v.get(oe.top).getHeight()/2+v.get(oe.bottom).getHeight()/2)});var S=o(function(V,xe){return{x:V.x-xe.x,y:V.y-xe.y}},"calculatePositionDiff"),_=o(function(V){var xe=0,q=0;return V.forEach(function(pe){xe+=b[x.get(pe)],q+=w[x.get(pe)]}),{x:xe/V.size,y:q/V.size}},"calculateAvgPosition"),I=o(function(V,xe,q,pe,ve){function Pe(st,Ue){var ct=new Set(st),We=!0,ot=!1,Yt=void 0;try{for(var bt=Ue[Symbol.iterator](),Mt;!(We=(Mt=bt.next()).done);We=!0){var xt=Mt.value;ct.add(xt)}}catch(ut){ot=!0,Yt=ut}finally{try{!We&&bt.return&&bt.return()}finally{if(ot)throw Yt}}return ct}o(Pe,"setUnion");var _e=new Map;V.forEach(function(st,Ue){_e.set(Ue,0)}),V.forEach(function(st,Ue){st.forEach(function(ct){_e.set(ct.id,_e.get(ct.id)+1)})});var we=new Map,Ve=new Map,De=new f;_e.forEach(function(st,Ue){st==0?(De.push(Ue),q||(xe=="horizontal"?we.set(Ue,x.has(Ue)?b[x.get(Ue)]:pe.get(Ue)):we.set(Ue,x.has(Ue)?w[x.get(Ue)]:pe.get(Ue)))):we.set(Ue,Number.NEGATIVE_INFINITY),q&&Ve.set(Ue,new Set([Ue]))}),q&&ve.forEach(function(st){var Ue=[];if(st.forEach(function(ot){q.has(ot)&&Ue.push(ot)}),Ue.length>0){var ct=0;Ue.forEach(function(ot){xe=="horizontal"?(we.set(ot,x.has(ot)?b[x.get(ot)]:pe.get(ot)),ct+=we.get(ot)):(we.set(ot,x.has(ot)?w[x.get(ot)]:pe.get(ot)),ct+=we.get(ot))}),ct=ct/Ue.length,st.forEach(function(ot){q.has(ot)||we.set(ot,ct)})}else{var We=0;st.forEach(function(ot){xe=="horizontal"?We+=x.has(ot)?b[x.get(ot)]:pe.get(ot):We+=x.has(ot)?w[x.get(ot)]:pe.get(ot)}),We=We/st.length,st.forEach(function(ot){we.set(ot,We)})}});for(var qe=o(function(){var Ue=De.shift(),ct=V.get(Ue);ct.forEach(function(We){if(we.get(We.id)<we.get(Ue)+We.gap)if(q&&q.has(We.id)){var ot=void 0;if(xe=="horizontal"?ot=x.has(We.id)?b[x.get(We.id)]:pe.get(We.id):ot=x.has(We.id)?w[x.get(We.id)]:pe.get(We.id),we.set(We.id,ot),ot<we.get(Ue)+We.gap){var Yt=we.get(Ue)+We.gap-ot;Ve.get(Ue).forEach(function(bt){we.set(bt,we.get(bt)-Yt)})}}else we.set(We.id,we.get(Ue)+We.gap);_e.set(We.id,_e.get(We.id)-1),_e.get(We.id)==0&&De.push(We.id),q&&Ve.set(We.id,Pe(Ve.get(Ue),Ve.get(We.id)))})},"_loop");De.length!=0;)qe();if(q){var at=new Set;V.forEach(function(st,Ue){st.length==0&&at.add(Ue)});var Rt=[];Ve.forEach(function(st,Ue){if(at.has(Ue)){var ct=!1,We=!0,ot=!1,Yt=void 0;try{for(var bt=st[Symbol.iterator](),Mt;!(We=(Mt=bt.next()).done);We=!0){var xt=Mt.value;q.has(xt)&&(ct=!0)}}catch(ft){ot=!0,Yt=ft}finally{try{!We&&bt.return&&bt.return()}finally{if(ot)throw Yt}}if(!ct){var ut=!1,Et=void 0;Rt.forEach(function(ft,yt){ft.has([].concat(u(st))[0])&&(ut=!0,Et=yt)}),ut?st.forEach(function(ft){Rt[Et].add(ft)}):Rt.push(new Set(st))}}}),Rt.forEach(function(st,Ue){var ct=Number.POSITIVE_INFINITY,We=Number.POSITIVE_INFINITY,ot=Number.NEGATIVE_INFINITY,Yt=Number.NEGATIVE_INFINITY,bt=!0,Mt=!1,xt=void 0;try{for(var ut=st[Symbol.iterator](),Et;!(bt=(Et=ut.next()).done);bt=!0){var ft=Et.value,yt=void 0;xe=="horizontal"?yt=x.has(ft)?b[x.get(ft)]:pe.get(ft):yt=x.has(ft)?w[x.get(ft)]:pe.get(ft);var nt=we.get(ft);yt<ct&&(ct=yt),yt>ot&&(ot=yt),nt<We&&(We=nt),nt>Yt&&(Yt=nt)}}catch(At){Mt=!0,xt=At}finally{try{!bt&&ut.return&&ut.return()}finally{if(Mt)throw xt}}var dn=(ct+ot)/2-(We+Yt)/2,Tt=!0,On=!1,tn=void 0;try{for(var _r=st[Symbol.iterator](),Dr;!(Tt=(Dr=_r.next()).done);Tt=!0){var Pn=Dr.value;we.set(Pn,we.get(Pn)+dn)}}catch(At){On=!0,tn=At}finally{try{!Tt&&_r.return&&_r.return()}finally{if(On)throw tn}}})}return we},"findAppropriatePositionForRelativePlacement"),D=o(function(V){var xe=0,q=0,pe=0,ve=0;if(V.forEach(function(Ve){Ve.left?b[x.get(Ve.left)]-b[x.get(Ve.right)]>=0?xe++:q++:w[x.get(Ve.top)]-w[x.get(Ve.bottom)]>=0?pe++:ve++}),xe>q&&pe>ve)for(var Pe=0;Pe<x.size;Pe++)b[Pe]=-1*b[Pe],w[Pe]=-1*w[Pe];else if(xe>q)for(var _e=0;_e<x.size;_e++)b[_e]=-1*b[_e];else if(pe>ve)for(var we=0;we<x.size;we++)w[we]=-1*w[we]},"applyReflectionForRelativePlacement"),k=o(function(V){var xe=[],q=new f,pe=new Set,ve=0;return V.forEach(function(Pe,_e){if(!pe.has(_e)){xe[ve]=[];var we=_e;for(q.push(we),pe.add(we),xe[ve].push(we);q.length!=0;){we=q.shift();var Ve=V.get(we);Ve.forEach(function(De){pe.has(De.id)||(q.push(De.id),pe.add(De.id),xe[ve].push(De.id))})}ve++}}),xe},"findComponents"),L=o(function(V){var xe=new Map;return V.forEach(function(q,pe){xe.set(pe,[])}),V.forEach(function(q,pe){q.forEach(function(ve){xe.get(pe).push(ve),xe.get(ve.id).push({id:pe,gap:ve.gap,direction:ve.direction})})}),xe},"dagToUndirected"),R=o(function(V){var xe=new Map;return V.forEach(function(q,pe){xe.set(pe,[])}),V.forEach(function(q,pe){q.forEach(function(ve){xe.get(ve.id).push({id:pe,gap:ve.gap,direction:ve.direction})})}),xe},"dagToReversed"),O=[],M=[],B=!1,F=!1,P=new Set,z=new Map,$=new Map,H=[];if(y.fixedNodeConstraint&&y.fixedNodeConstraint.forEach(function(oe){P.add(oe.nodeId)}),y.relativePlacementConstraint&&(y.relativePlacementConstraint.forEach(function(oe){oe.left?(z.has(oe.left)?z.get(oe.left).push({id:oe.right,gap:oe.gap,direction:"horizontal"}):z.set(oe.left,[{id:oe.right,gap:oe.gap,direction:"horizontal"}]),z.has(oe.right)||z.set(oe.right,[])):(z.has(oe.top)?z.get(oe.top).push({id:oe.bottom,gap:oe.gap,direction:"vertical"}):z.set(oe.top,[{id:oe.bottom,gap:oe.gap,direction:"vertical"}]),z.has(oe.bottom)||z.set(oe.bottom,[]))}),$=L(z),H=k($)),h.TRANSFORM_ON_CONSTRAINT_HANDLING){if(y.fixedNodeConstraint&&y.fixedNodeConstraint.length>1)y.fixedNodeConstraint.forEach(function(oe,V){O[V]=[oe.position.x,oe.position.y],M[V]=[b[x.get(oe.nodeId)],w[x.get(oe.nodeId)]]}),B=!0;else if(y.alignmentConstraint)(function(){var oe=0;if(y.alignmentConstraint.vertical){for(var V=y.alignmentConstraint.vertical,xe=o(function(we){var Ve=new Set;V[we].forEach(function(at){Ve.add(at)});var De=new Set([].concat(u(Ve)).filter(function(at){return P.has(at)})),qe=void 0;De.size>0?qe=b[x.get(De.values().next().value)]:qe=_(Ve).x,V[we].forEach(function(at){O[oe]=[qe,w[x.get(at)]],M[oe]=[b[x.get(at)],w[x.get(at)]],oe++})},"_loop2"),q=0;q<V.length;q++)xe(q);B=!0}if(y.alignmentConstraint.horizontal){for(var pe=y.alignmentConstraint.horizontal,ve=o(function(we){var Ve=new Set;pe[we].forEach(function(at){Ve.add(at)});var De=new Set([].concat(u(Ve)).filter(function(at){return P.has(at)})),qe=void 0;De.size>0?qe=b[x.get(De.values().next().value)]:qe=_(Ve).y,pe[we].forEach(function(at){O[oe]=[b[x.get(at)],qe],M[oe]=[b[x.get(at)],w[x.get(at)]],oe++})},"_loop3"),Pe=0;Pe<pe.length;Pe++)ve(Pe);B=!0}y.relativePlacementConstraint&&(F=!0)})();else if(y.relativePlacementConstraint){for(var Q=0,j=0,ie=0;ie<H.length;ie++)H[ie].length>Q&&(Q=H[ie].length,j=ie);if(Q<$.size/2)D(y.relativePlacementConstraint),B=!1,F=!1;else{var ne=new Map,le=new Map,he=[];H[j].forEach(function(oe){z.get(oe).forEach(function(V){V.direction=="horizontal"?(ne.has(oe)?ne.get(oe).push(V):ne.set(oe,[V]),ne.has(V.id)||ne.set(V.id,[]),he.push({left:oe,right:V.id})):(le.has(oe)?le.get(oe).push(V):le.set(oe,[V]),le.has(V.id)||le.set(V.id,[]),he.push({top:oe,bottom:V.id}))})}),D(he),F=!1;var K=I(ne,"horizontal"),X=I(le,"vertical");H[j].forEach(function(oe,V){M[V]=[b[x.get(oe)],w[x.get(oe)]],O[V]=[],K.has(oe)?O[V][0]=K.get(oe):O[V][0]=b[x.get(oe)],X.has(oe)?O[V][1]=X.get(oe):O[V][1]=w[x.get(oe)]}),B=!0}}if(B){for(var te=void 0,J=d.transpose(O),se=d.transpose(M),ue=0;ue<J.length;ue++)J[ue]=d.multGamma(J[ue]),se[ue]=d.multGamma(se[ue]);var Z=d.multMat(J,d.transpose(se)),Se=p.svd(Z);te=d.multMat(Se.V,d.transpose(Se.U));for(var ce=0;ce<x.size;ce++){var ae=[b[ce],w[ce]],Oe=[te[0][0],te[1][0]],ge=[te[0][1],te[1][1]];b[ce]=d.dotProduct(ae,Oe),w[ce]=d.dotProduct(ae,ge)}F&&D(y.relativePlacementConstraint)}}if(h.ENFORCE_CONSTRAINTS){if(y.fixedNodeConstraint&&y.fixedNodeConstraint.length>0){var ze={x:0,y:0};y.fixedNodeConstraint.forEach(function(oe,V){var xe={x:b[x.get(oe.nodeId)],y:w[x.get(oe.nodeId)]},q=oe.position,pe=S(q,xe);ze.x+=pe.x,ze.y+=pe.y}),ze.x/=y.fixedNodeConstraint.length,ze.y/=y.fixedNodeConstraint.length,b.forEach(function(oe,V){b[V]+=ze.x}),w.forEach(function(oe,V){w[V]+=ze.y}),y.fixedNodeConstraint.forEach(function(oe){b[x.get(oe.nodeId)]=oe.position.x,w[x.get(oe.nodeId)]=oe.position.y})}if(y.alignmentConstraint){if(y.alignmentConstraint.vertical)for(var He=y.alignmentConstraint.vertical,$e=o(function(V){var xe=new Set;He[V].forEach(function(ve){xe.add(ve)});var q=new Set([].concat(u(xe)).filter(function(ve){return P.has(ve)})),pe=void 0;q.size>0?pe=b[x.get(q.values().next().value)]:pe=_(xe).x,xe.forEach(function(ve){P.has(ve)||(b[x.get(ve)]=pe)})},"_loop4"),Re=0;Re<He.length;Re++)$e(Re);if(y.alignmentConstraint.horizontal)for(var Ie=y.alignmentConstraint.horizontal,be=o(function(V){var xe=new Set;Ie[V].forEach(function(ve){xe.add(ve)});var q=new Set([].concat(u(xe)).filter(function(ve){return P.has(ve)})),pe=void 0;q.size>0?pe=w[x.get(q.values().next().value)]:pe=_(xe).y,xe.forEach(function(ve){P.has(ve)||(w[x.get(ve)]=pe)})},"_loop5"),W=0;W<Ie.length;W++)be(W)}y.relativePlacementConstraint&&function(){var oe=new Map,V=new Map,xe=new Map,q=new Map,pe=new Map,ve=new Map,Pe=new Set,_e=new Set;if(P.forEach(function(Hr){Pe.add(Hr),_e.add(Hr)}),y.alignmentConstraint){if(y.alignmentConstraint.vertical)for(var we=y.alignmentConstraint.vertical,Ve=o(function(et){xe.set("dummy"+et,[]),we[et].forEach(function(mt){oe.set(mt,"dummy"+et),xe.get("dummy"+et).push(mt),P.has(mt)&&Pe.add("dummy"+et)}),pe.set("dummy"+et,b[x.get(we[et][0])])},"_loop6"),De=0;De<we.length;De++)Ve(De);if(y.alignmentConstraint.horizontal)for(var qe=y.alignmentConstraint.horizontal,at=o(function(et){q.set("dummy"+et,[]),qe[et].forEach(function(mt){V.set(mt,"dummy"+et),q.get("dummy"+et).push(mt),P.has(mt)&&_e.add("dummy"+et)}),ve.set("dummy"+et,w[x.get(qe[et][0])])},"_loop7"),Rt=0;Rt<qe.length;Rt++)at(Rt)}var st=new Map,Ue=new Map,ct=o(function(et){z.get(et).forEach(function(mt){var Kt=void 0,lt=void 0;mt.direction=="horizontal"?(Kt=oe.get(et)?oe.get(et):et,oe.get(mt.id)?lt={id:oe.get(mt.id),gap:mt.gap,direction:mt.direction}:lt=mt,st.has(Kt)?st.get(Kt).push(lt):st.set(Kt,[lt]),st.has(lt.id)||st.set(lt.id,[])):(Kt=V.get(et)?V.get(et):et,V.get(mt.id)?lt={id:V.get(mt.id),gap:mt.gap,direction:mt.direction}:lt=mt,Ue.has(Kt)?Ue.get(Kt).push(lt):Ue.set(Kt,[lt]),Ue.has(lt.id)||Ue.set(lt.id,[]))})},"_loop8"),We=!0,ot=!1,Yt=void 0;try{for(var bt=z.keys()[Symbol.iterator](),Mt;!(We=(Mt=bt.next()).done);We=!0){var xt=Mt.value;ct(xt)}}catch(Hr){ot=!0,Yt=Hr}finally{try{!We&&bt.return&&bt.return()}finally{if(ot)throw Yt}}var ut=L(st),Et=L(Ue),ft=k(ut),yt=k(Et),nt=R(st),dn=R(Ue),Tt=[],On=[];ft.forEach(function(Hr,et){Tt[et]=[],Hr.forEach(function(mt){nt.get(mt).length==0&&Tt[et].push(mt)})}),yt.forEach(function(Hr,et){On[et]=[],Hr.forEach(function(mt){dn.get(mt).length==0&&On[et].push(mt)})});var tn=I(st,"horizontal",Pe,pe,Tt),_r=I(Ue,"vertical",_e,ve,On),Dr=o(function(et){xe.get(et)?xe.get(et).forEach(function(mt){b[x.get(mt)]=tn.get(et)}):b[x.get(et)]=tn.get(et)},"_loop9"),Pn=!0,At=!1,Ce=void 0;try{for(var tt=tn.keys()[Symbol.iterator](),St;!(Pn=(St=tt.next()).done);Pn=!0){var mr=St.value;Dr(mr)}}catch(Hr){At=!0,Ce=Hr}finally{try{!Pn&&tt.return&&tt.return()}finally{if(At)throw Ce}}var rn=o(function(et){q.get(et)?q.get(et).forEach(function(mt){w[x.get(mt)]=_r.get(et)}):w[x.get(et)]=_r.get(et)},"_loop10"),gn=!0,Zr=!1,Ni=void 0;try{for(var Zn=_r.keys()[Symbol.iterator](),Sn;!(gn=(Sn=Zn.next()).done);gn=!0){var mr=Sn.value;rn(mr)}}catch(Hr){Zr=!0,Ni=Hr}finally{try{!gn&&Zn.return&&Zn.return()}finally{if(Zr)throw Ni}}}()}for(var de=0;de<C.length;de++){var re=C[de];re.getChild()==null&&re.setCenter(b[x.get(re.id)],w[x.get(re.id)])}},a.exports=m},551:a=>{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(45);return i})()})});var Pve=Mi((E4,gF)=>{"use strict";o(function(e,r){typeof E4=="object"&&typeof gF=="object"?gF.exports=r(mF()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof E4=="object"?E4.cytoscapeFcose=r(mF()):e.cytoscapeFcose=r(e.coseBase)},"webpackUniversalModuleDefinition")(E4,function(t){return(()=>{"use strict";var e={658:a=>{a.exports=Object.assign!=null?Object.assign.bind(Object):function(s){for(var l=arguments.length,u=Array(l>1?l-1:0),h=1;h<l;h++)u[h-1]=arguments[h];return u.forEach(function(f){Object.keys(f).forEach(function(d){return s[d]=f[d]})}),s}},548:(a,s,l)=>{var u=function(){function d(p,m){var g=[],y=!0,v=!1,x=void 0;try{for(var b=p[Symbol.iterator](),w;!(y=(w=b.next()).done)&&(g.push(w.value),!(m&&g.length===m));y=!0);}catch(C){v=!0,x=C}finally{try{!y&&b.return&&b.return()}finally{if(v)throw x}}return g}return o(d,"sliceIterator"),function(p,m){if(Array.isArray(p))return p;if(Symbol.iterator in Object(p))return d(p,m);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),h=l(140).layoutBase.LinkedList,f={};f.getTopMostNodes=function(d){for(var p={},m=0;m<d.length;m++)p[d[m].id()]=!0;var g=d.filter(function(y,v){typeof y=="number"&&(y=v);for(var x=y.parent()[0];x!=null;){if(p[x.id()])return!1;x=x.parent()[0]}return!0});return g},f.connectComponents=function(d,p,m,g){var y=new h,v=new Set,x=[],b=void 0,w=void 0,C=void 0,T=!1,E=1,A=[],S=[],_=o(function(){var D=d.collection();S.push(D);var k=m[0],L=d.collection();L.merge(k).merge(k.descendants().intersection(p)),x.push(k),L.forEach(function(M){y.push(M),v.add(M),D.merge(M)});for(var R=o(function(){k=y.shift();var B=d.collection();k.neighborhood().nodes().forEach(function($){p.intersection(k.edgesWith($)).length>0&&B.merge($)});for(var F=0;F<B.length;F++){var P=B[F];if(b=m.intersection(P.union(P.ancestors())),b!=null&&!v.has(b[0])){var z=b.union(b.descendants());z.forEach(function($){y.push($),v.add($),D.merge($),m.has($)&&x.push($)})}}},"_loop2");y.length!=0;)R();if(D.forEach(function(M){p.intersection(M.connectedEdges()).forEach(function(B){D.has(B.source())&&D.has(B.target())&&D.merge(B)})}),x.length==m.length&&(T=!0),!T||T&&E>1){w=x[0],C=w.connectedEdges().length,x.forEach(function(M){M.connectedEdges().length<C&&(C=M.connectedEdges().length,w=M)}),A.push(w.id());var O=d.collection();O.merge(x[0]),x.forEach(function(M){O.merge(M)}),x=[],m=m.difference(O),E++}},"_loop");do _();while(!T);return g&&A.length>0&&g.set("dummy"+(g.size+1),A),S},f.relocateComponent=function(d,p,m){if(!m.fixedNodeConstraint){var g=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,v=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY;if(m.quality=="draft"){var b=!0,w=!1,C=void 0;try{for(var T=p.nodeIndexes[Symbol.iterator](),E;!(b=(E=T.next()).done);b=!0){var A=E.value,S=u(A,2),_=S[0],I=S[1],D=m.cy.getElementById(_);if(D){var k=D.boundingBox(),L=p.xCoords[I]-k.w/2,R=p.xCoords[I]+k.w/2,O=p.yCoords[I]-k.h/2,M=p.yCoords[I]+k.h/2;L<g&&(g=L),R>y&&(y=R),O<v&&(v=O),M>x&&(x=M)}}}catch($){w=!0,C=$}finally{try{!b&&T.return&&T.return()}finally{if(w)throw C}}var B=d.x-(y+g)/2,F=d.y-(x+v)/2;p.xCoords=p.xCoords.map(function($){return $+B}),p.yCoords=p.yCoords.map(function($){return $+F})}else{Object.keys(p).forEach(function($){var H=p[$],Q=H.getRect().x,j=H.getRect().x+H.getRect().width,ie=H.getRect().y,ne=H.getRect().y+H.getRect().height;Q<g&&(g=Q),j>y&&(y=j),ie<v&&(v=ie),ne>x&&(x=ne)});var P=d.x-(y+g)/2,z=d.y-(x+v)/2;Object.keys(p).forEach(function($){var H=p[$];H.setCenter(H.getCenterX()+P,H.getCenterY()+z)})}}},f.calcBoundingBox=function(d,p,m,g){for(var y=Number.MAX_SAFE_INTEGER,v=Number.MIN_SAFE_INTEGER,x=Number.MAX_SAFE_INTEGER,b=Number.MIN_SAFE_INTEGER,w=void 0,C=void 0,T=void 0,E=void 0,A=d.descendants().not(":parent"),S=A.length,_=0;_<S;_++){var I=A[_];w=p[g.get(I.id())]-I.width()/2,C=p[g.get(I.id())]+I.width()/2,T=m[g.get(I.id())]-I.height()/2,E=m[g.get(I.id())]+I.height()/2,y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var D={};return D.topLeftX=y,D.topLeftY=x,D.width=v-y,D.height=b-x,D},f.calcParentsWithoutChildren=function(d,p){var m=d.collection();return p.nodes(":parent").forEach(function(g){var y=!1;g.children().forEach(function(v){v.css("display")!="none"&&(y=!0)}),y||m.merge(g)}),m},a.exports=f},816:(a,s,l)=>{var u=l(548),h=l(140).CoSELayout,f=l(140).CoSENode,d=l(140).layoutBase.PointD,p=l(140).layoutBase.DimensionD,m=l(140).layoutBase.LayoutConstants,g=l(140).layoutBase.FDLayoutConstants,y=l(140).CoSEConstants,v=o(function(b,w){var C=b.cy,T=b.eles,E=T.nodes(),A=T.edges(),S=void 0,_=void 0,I=void 0,D={};b.randomize&&(S=w.nodeIndexes,_=w.xCoords,I=w.yCoords);var k=o(function($){return typeof $=="function"},"isFn"),L=o(function($,H){return k($)?$(H):$},"optFn"),R=u.calcParentsWithoutChildren(C,T),O=o(function z($,H,Q,j){for(var ie=H.length,ne=0;ne<ie;ne++){var le=H[ne],he=null;le.intersection(R).length==0&&(he=le.children());var K=void 0,X=le.layoutDimensions({nodeDimensionsIncludeLabels:j.nodeDimensionsIncludeLabels});if(le.outerWidth()!=null&&le.outerHeight()!=null)if(j.randomize)if(!le.isParent())K=$.add(new f(Q.graphManager,new d(_[S.get(le.id())]-X.w/2,I[S.get(le.id())]-X.h/2),new p(parseFloat(X.w),parseFloat(X.h))));else{var te=u.calcBoundingBox(le,_,I,S);le.intersection(R).length==0?K=$.add(new f(Q.graphManager,new d(te.topLeftX,te.topLeftY),new p(te.width,te.height))):K=$.add(new f(Q.graphManager,new d(te.topLeftX,te.topLeftY),new p(parseFloat(X.w),parseFloat(X.h))))}else K=$.add(new f(Q.graphManager,new d(le.position("x")-X.w/2,le.position("y")-X.h/2),new p(parseFloat(X.w),parseFloat(X.h))));else K=$.add(new f(this.graphManager));if(K.id=le.data("id"),K.nodeRepulsion=L(j.nodeRepulsion,le),K.paddingLeft=parseInt(le.css("padding")),K.paddingTop=parseInt(le.css("padding")),K.paddingRight=parseInt(le.css("padding")),K.paddingBottom=parseInt(le.css("padding")),j.nodeDimensionsIncludeLabels&&(K.labelWidth=le.boundingBox({includeLabels:!0,includeNodes:!1,includeOverlays:!1}).w,K.labelHeight=le.boundingBox({includeLabels:!0,includeNodes:!1,includeOverlays:!1}).h,K.labelPosVertical=le.css("text-valign"),K.labelPosHorizontal=le.css("text-halign")),D[le.data("id")]=K,isNaN(K.rect.x)&&(K.rect.x=0),isNaN(K.rect.y)&&(K.rect.y=0),he!=null&&he.length>0){var J=void 0;J=Q.getGraphManager().add(Q.newGraph(),K),z(J,he,Q,j)}}},"processChildrenList"),M=o(function($,H,Q){for(var j=0,ie=0,ne=0;ne<Q.length;ne++){var le=Q[ne],he=D[le.data("source")],K=D[le.data("target")];if(he&&K&&he!==K&&he.getEdgesBetween(K).length==0){var X=H.add($.newEdge(),he,K);X.id=le.id(),X.idealLength=L(b.idealEdgeLength,le),X.edgeElasticity=L(b.edgeElasticity,le),j+=X.idealLength,ie++}}b.idealEdgeLength!=null&&(ie>0?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=j/ie:k(b.idealEdgeLength)?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=50:y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=b.idealEdgeLength,y.MIN_REPULSION_DIST=g.MIN_REPULSION_DIST=g.DEFAULT_EDGE_LENGTH/10,y.DEFAULT_RADIAL_SEPARATION=g.DEFAULT_EDGE_LENGTH)},"processEdges"),B=o(function($,H){H.fixedNodeConstraint&&($.constraints.fixedNodeConstraint=H.fixedNodeConstraint),H.alignmentConstraint&&($.constraints.alignmentConstraint=H.alignmentConstraint),H.relativePlacementConstraint&&($.constraints.relativePlacementConstraint=H.relativePlacementConstraint)},"processConstraints");b.nestingFactor!=null&&(y.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=g.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=b.nestingFactor),b.gravity!=null&&(y.DEFAULT_GRAVITY_STRENGTH=g.DEFAULT_GRAVITY_STRENGTH=b.gravity),b.numIter!=null&&(y.MAX_ITERATIONS=g.MAX_ITERATIONS=b.numIter),b.gravityRange!=null&&(y.DEFAULT_GRAVITY_RANGE_FACTOR=g.DEFAULT_GRAVITY_RANGE_FACTOR=b.gravityRange),b.gravityCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_STRENGTH=g.DEFAULT_COMPOUND_GRAVITY_STRENGTH=b.gravityCompound),b.gravityRangeCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=g.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=b.gravityRangeCompound),b.initialEnergyOnIncremental!=null&&(y.DEFAULT_COOLING_FACTOR_INCREMENTAL=g.DEFAULT_COOLING_FACTOR_INCREMENTAL=b.initialEnergyOnIncremental),b.tilingCompareBy!=null&&(y.TILING_COMPARE_BY=b.tilingCompareBy),b.quality=="proof"?m.QUALITY=2:m.QUALITY=0,y.NODE_DIMENSIONS_INCLUDE_LABELS=g.NODE_DIMENSIONS_INCLUDE_LABELS=m.NODE_DIMENSIONS_INCLUDE_LABELS=b.nodeDimensionsIncludeLabels,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!b.randomize,y.ANIMATE=g.ANIMATE=m.ANIMATE=b.animate,y.TILE=b.tile,y.TILING_PADDING_VERTICAL=typeof b.tilingPaddingVertical=="function"?b.tilingPaddingVertical.call():b.tilingPaddingVertical,y.TILING_PADDING_HORIZONTAL=typeof b.tilingPaddingHorizontal=="function"?b.tilingPaddingHorizontal.call():b.tilingPaddingHorizontal,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!0,y.PURE_INCREMENTAL=!b.randomize,m.DEFAULT_UNIFORM_LEAF_NODE_SIZES=b.uniformNodeDimensions,b.step=="transformed"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!1),b.step=="enforced"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!1),b.step=="cose"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!0),b.step=="all"&&(b.randomize?y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!0),b.fixedNodeConstraint||b.alignmentConstraint||b.relativePlacementConstraint?y.TREE_REDUCTION_ON_INCREMENTAL=!1:y.TREE_REDUCTION_ON_INCREMENTAL=!0;var F=new h,P=F.newGraphManager();return O(P.addRoot(),u.getTopMostNodes(E),F,b),M(F,P,A),B(F,b),F.runLayout(),D},"coseLayout");a.exports={coseLayout:v}},212:(a,s,l)=>{var u=function(){function b(w,C){for(var T=0;T<C.length;T++){var E=C[T];E.enumerable=E.enumerable||!1,E.configurable=!0,"value"in E&&(E.writable=!0),Object.defineProperty(w,E.key,E)}}return o(b,"defineProperties"),function(w,C,T){return C&&b(w.prototype,C),T&&b(w,T),w}}();function h(b,w){if(!(b instanceof w))throw new TypeError("Cannot call a class as a function")}o(h,"_classCallCheck");var f=l(658),d=l(548),p=l(657),m=p.spectralLayout,g=l(816),y=g.coseLayout,v=Object.freeze({quality:"default",randomize:!0,animate:!0,animationDuration:1e3,animationEasing:void 0,fit:!0,padding:30,nodeDimensionsIncludeLabels:!1,uniformNodeDimensions:!1,packComponents:!0,step:"all",samplingType:!0,sampleSize:25,nodeSeparation:75,piTol:1e-7,nodeRepulsion:o(function(w){return 4500},"nodeRepulsion"),idealEdgeLength:o(function(w){return 50},"idealEdgeLength"),edgeElasticity:o(function(w){return .45},"edgeElasticity"),nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,tilingCompareBy:void 0,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.3,fixedNodeConstraint:void 0,alignmentConstraint:void 0,relativePlacementConstraint:void 0,ready:o(function(){},"ready"),stop:o(function(){},"stop")}),x=function(){function b(w){h(this,b),this.options=f({},v,w)}return o(b,"Layout"),u(b,[{key:"run",value:o(function(){var C=this,T=this.options,E=T.cy,A=T.eles,S=[],_=void 0,I=void 0,D=[],k=void 0,L=[];T.fixedNodeConstraint&&(!Array.isArray(T.fixedNodeConstraint)||T.fixedNodeConstraint.length==0)&&(T.fixedNodeConstraint=void 0),T.alignmentConstraint&&(T.alignmentConstraint.vertical&&(!Array.isArray(T.alignmentConstraint.vertical)||T.alignmentConstraint.vertical.length==0)&&(T.alignmentConstraint.vertical=void 0),T.alignmentConstraint.horizontal&&(!Array.isArray(T.alignmentConstraint.horizontal)||T.alignmentConstraint.horizontal.length==0)&&(T.alignmentConstraint.horizontal=void 0)),T.relativePlacementConstraint&&(!Array.isArray(T.relativePlacementConstraint)||T.relativePlacementConstraint.length==0)&&(T.relativePlacementConstraint=void 0);var R=T.fixedNodeConstraint||T.alignmentConstraint||T.relativePlacementConstraint;R&&(T.tile=!1,T.packComponents=!1);var O=void 0,M=!1;if(E.layoutUtilities&&T.packComponents&&(O=E.layoutUtilities("get"),O||(O=E.layoutUtilities()),M=!0),A.nodes().length>0)if(M){var P=d.getTopMostNodes(T.eles.nodes());if(k=d.connectComponents(E,T.eles,P),k.forEach(function(ce){var ae=ce.boundingBox();L.push({x:ae.x1+ae.w/2,y:ae.y1+ae.h/2})}),T.randomize&&k.forEach(function(ce){T.eles=ce,S.push(m(T))}),T.quality=="default"||T.quality=="proof"){var z=E.collection();if(T.tile){var $=new Map,H=[],Q=[],j=0,ie={nodeIndexes:$,xCoords:H,yCoords:Q},ne=[];if(k.forEach(function(ce,ae){ce.edges().length==0&&(ce.nodes().forEach(function(Oe,ge){z.merge(ce.nodes()[ge]),Oe.isParent()||(ie.nodeIndexes.set(ce.nodes()[ge].id(),j++),ie.xCoords.push(ce.nodes()[0].position().x),ie.yCoords.push(ce.nodes()[0].position().y))}),ne.push(ae))}),z.length>1){var le=z.boundingBox();L.push({x:le.x1+le.w/2,y:le.y1+le.h/2}),k.push(z),S.push(ie);for(var he=ne.length-1;he>=0;he--)k.splice(ne[he],1),S.splice(ne[he],1),L.splice(ne[he],1)}}k.forEach(function(ce,ae){T.eles=ce,D.push(y(T,S[ae])),d.relocateComponent(L[ae],D[ae],T)})}else k.forEach(function(ce,ae){d.relocateComponent(L[ae],S[ae],T)});var K=new Set;if(k.length>1){var X=[],te=A.filter(function(ce){return ce.css("display")=="none"});k.forEach(function(ce,ae){var Oe=void 0;if(T.quality=="draft"&&(Oe=S[ae].nodeIndexes),ce.nodes().not(te).length>0){var ge={};ge.edges=[],ge.nodes=[];var ze=void 0;ce.nodes().not(te).forEach(function(He){if(T.quality=="draft")if(!He.isParent())ze=Oe.get(He.id()),ge.nodes.push({x:S[ae].xCoords[ze]-He.boundingbox().w/2,y:S[ae].yCoords[ze]-He.boundingbox().h/2,width:He.boundingbox().w,height:He.boundingbox().h});else{var $e=d.calcBoundingBox(He,S[ae].xCoords,S[ae].yCoords,Oe);ge.nodes.push({x:$e.topLeftX,y:$e.topLeftY,width:$e.width,height:$e.height})}else D[ae][He.id()]&&ge.nodes.push({x:D[ae][He.id()].getLeft(),y:D[ae][He.id()].getTop(),width:D[ae][He.id()].getWidth(),height:D[ae][He.id()].getHeight()})}),ce.edges().forEach(function(He){var $e=He.source(),Re=He.target();if($e.css("display")!="none"&&Re.css("display")!="none")if(T.quality=="draft"){var Ie=Oe.get($e.id()),be=Oe.get(Re.id()),W=[],de=[];if($e.isParent()){var re=d.calcBoundingBox($e,S[ae].xCoords,S[ae].yCoords,Oe);W.push(re.topLeftX+re.width/2),W.push(re.topLeftY+re.height/2)}else W.push(S[ae].xCoords[Ie]),W.push(S[ae].yCoords[Ie]);if(Re.isParent()){var oe=d.calcBoundingBox(Re,S[ae].xCoords,S[ae].yCoords,Oe);de.push(oe.topLeftX+oe.width/2),de.push(oe.topLeftY+oe.height/2)}else de.push(S[ae].xCoords[be]),de.push(S[ae].yCoords[be]);ge.edges.push({startX:W[0],startY:W[1],endX:de[0],endY:de[1]})}else D[ae][$e.id()]&&D[ae][Re.id()]&&ge.edges.push({startX:D[ae][$e.id()].getCenterX(),startY:D[ae][$e.id()].getCenterY(),endX:D[ae][Re.id()].getCenterX(),endY:D[ae][Re.id()].getCenterY()})}),ge.nodes.length>0&&(X.push(ge),K.add(ae))}});var J=O.packComponents(X,T.randomize).shifts;if(T.quality=="draft")S.forEach(function(ce,ae){var Oe=ce.xCoords.map(function(ze){return ze+J[ae].dx}),ge=ce.yCoords.map(function(ze){return ze+J[ae].dy});ce.xCoords=Oe,ce.yCoords=ge});else{var se=0;K.forEach(function(ce){Object.keys(D[ce]).forEach(function(ae){var Oe=D[ce][ae];Oe.setCenter(Oe.getCenterX()+J[se].dx,Oe.getCenterY()+J[se].dy)}),se++})}}}else{var B=T.eles.boundingBox();if(L.push({x:B.x1+B.w/2,y:B.y1+B.h/2}),T.randomize){var F=m(T);S.push(F)}T.quality=="default"||T.quality=="proof"?(D.push(y(T,S[0])),d.relocateComponent(L[0],D[0],T)):d.relocateComponent(L[0],S[0],T)}var ue=o(function(ae,Oe){if(T.quality=="default"||T.quality=="proof"){typeof ae=="number"&&(ae=Oe);var ge=void 0,ze=void 0,He=ae.data("id");return D.forEach(function(Re){He in Re&&(ge={x:Re[He].getRect().getCenterX(),y:Re[He].getRect().getCenterY()},ze=Re[He])}),T.nodeDimensionsIncludeLabels&&(ze.labelWidth&&(ze.labelPosHorizontal=="left"?ge.x+=ze.labelWidth/2:ze.labelPosHorizontal=="right"&&(ge.x-=ze.labelWidth/2)),ze.labelHeight&&(ze.labelPosVertical=="top"?ge.y+=ze.labelHeight/2:ze.labelPosVertical=="bottom"&&(ge.y-=ze.labelHeight/2))),ge==null&&(ge={x:ae.position("x"),y:ae.position("y")}),{x:ge.x,y:ge.y}}else{var $e=void 0;return S.forEach(function(Re){var Ie=Re.nodeIndexes.get(ae.id());Ie!=null&&($e={x:Re.xCoords[Ie],y:Re.yCoords[Ie]})}),$e==null&&($e={x:ae.position("x"),y:ae.position("y")}),{x:$e.x,y:$e.y}}},"getPositions");if(T.quality=="default"||T.quality=="proof"||T.randomize){var Z=d.calcParentsWithoutChildren(E,A),Se=A.filter(function(ce){return ce.css("display")=="none"});T.eles=A.not(Se),A.nodes().not(":parent").not(Se).layoutPositions(C,T,ue),Z.length>0&&Z.forEach(function(ce){ce.position(ue(ce))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")},"run")}]),b}();a.exports=x},657:(a,s,l)=>{var u=l(548),h=l(140).layoutBase.Matrix,f=l(140).layoutBase.SVD,d=o(function(m){var g=m.cy,y=m.eles,v=y.nodes(),x=y.nodes(":parent"),b=new Map,w=new Map,C=new Map,T=[],E=[],A=[],S=[],_=[],I=[],D=[],k=[],L=void 0,R=void 0,O=1e8,M=1e-9,B=m.piTol,F=m.samplingType,P=m.nodeSeparation,z=void 0,$=o(function(){for(var xe=0,q=0,pe=!1;q<z;){xe=Math.floor(Math.random()*R),pe=!1;for(var ve=0;ve<q;ve++)if(S[ve]==xe){pe=!0;break}if(!pe)S[q]=xe,q++;else continue}},"randomSampleCR"),H=o(function(xe,q,pe){for(var ve=[],Pe=0,_e=0,we=0,Ve=void 0,De=[],qe=0,at=1,Rt=0;Rt<R;Rt++)De[Rt]=O;for(ve[_e]=xe,De[xe]=0;_e>=Pe;){we=ve[Pe++];for(var st=T[we],Ue=0;Ue<st.length;Ue++)Ve=w.get(st[Ue]),De[Ve]==O&&(De[Ve]=De[we]+1,ve[++_e]=Ve);I[we][q]=De[we]*P}if(pe){for(var ct=0;ct<R;ct++)I[ct][q]<_[ct]&&(_[ct]=I[ct][q]);for(var We=0;We<R;We++)_[We]>qe&&(qe=_[We],at=We)}return at},"BFS"),Q=o(function(xe){var q=void 0;if(xe){q=Math.floor(Math.random()*R),L=q;for(var ve=0;ve<R;ve++)_[ve]=O;for(var Pe=0;Pe<z;Pe++)S[Pe]=q,q=H(q,Pe,xe)}else{$();for(var pe=0;pe<z;pe++)H(S[pe],pe,xe,!1)}for(var _e=0;_e<R;_e++)for(var we=0;we<z;we++)I[_e][we]*=I[_e][we];for(var Ve=0;Ve<z;Ve++)D[Ve]=[];for(var De=0;De<z;De++)for(var qe=0;qe<z;qe++)D[De][qe]=I[S[qe]][De]},"allBFS"),j=o(function(){for(var xe=f.svd(D),q=xe.S,pe=xe.U,ve=xe.V,Pe=q[0]*q[0]*q[0],_e=[],we=0;we<z;we++){_e[we]=[];for(var Ve=0;Ve<z;Ve++)_e[we][Ve]=0,we==Ve&&(_e[we][Ve]=q[we]/(q[we]*q[we]+Pe/(q[we]*q[we])))}k=h.multMat(h.multMat(ve,_e),h.transpose(pe))},"sample"),ie=o(function(){for(var xe=void 0,q=void 0,pe=[],ve=[],Pe=[],_e=[],we=0;we<R;we++)pe[we]=Math.random(),ve[we]=Math.random();pe=h.normalize(pe),ve=h.normalize(ve);for(var Ve=0,De=M,qe=M,at=void 0;;){Ve++;for(var Rt=0;Rt<R;Rt++)Pe[Rt]=pe[Rt];if(pe=h.multGamma(h.multL(h.multGamma(Pe),I,k)),xe=h.dotProduct(Pe,pe),pe=h.normalize(pe),De=h.dotProduct(Pe,pe),at=Math.abs(De/qe),at<=1+B&&at>=1)break;qe=De}for(var st=0;st<R;st++)Pe[st]=pe[st];for(Ve=0,qe=M;;){Ve++;for(var Ue=0;Ue<R;Ue++)_e[Ue]=ve[Ue];if(_e=h.minusOp(_e,h.multCons(Pe,h.dotProduct(Pe,_e))),ve=h.multGamma(h.multL(h.multGamma(_e),I,k)),q=h.dotProduct(_e,ve),ve=h.normalize(ve),De=h.dotProduct(_e,ve),at=Math.abs(De/qe),at<=1+B&&at>=1)break;qe=De}for(var ct=0;ct<R;ct++)_e[ct]=ve[ct];E=h.multCons(Pe,Math.sqrt(Math.abs(xe))),A=h.multCons(_e,Math.sqrt(Math.abs(q)))},"powerIteration");u.connectComponents(g,y,u.getTopMostNodes(v),b),x.forEach(function(V){u.connectComponents(g,y,u.getTopMostNodes(V.descendants().intersection(y)),b)});for(var ne=0,le=0;le<v.length;le++)v[le].isParent()||w.set(v[le].id(),ne++);var he=!0,K=!1,X=void 0;try{for(var te=b.keys()[Symbol.iterator](),J;!(he=(J=te.next()).done);he=!0){var se=J.value;w.set(se,ne++)}}catch(V){K=!0,X=V}finally{try{!he&&te.return&&te.return()}finally{if(K)throw X}}for(var ue=0;ue<w.size;ue++)T[ue]=[];x.forEach(function(V){for(var xe=V.children().intersection(y);xe.nodes(":childless").length==0;)xe=xe.nodes()[0].children().intersection(y);var q=0,pe=xe.nodes(":childless")[0].connectedEdges().length;xe.nodes(":childless").forEach(function(ve,Pe){ve.connectedEdges().length<pe&&(pe=ve.connectedEdges().length,q=Pe)}),C.set(V.id(),xe.nodes(":childless")[q].id())}),v.forEach(function(V){var xe=void 0;V.isParent()?xe=w.get(C.get(V.id())):xe=w.get(V.id()),V.neighborhood().nodes().forEach(function(q){y.intersection(V.edgesWith(q)).length>0&&(q.isParent()?T[xe].push(C.get(q.id())):T[xe].push(q.id()))})});var Z=o(function(xe){var q=w.get(xe),pe=void 0;b.get(xe).forEach(function(ve){g.getElementById(ve).isParent()?pe=C.get(ve):pe=ve,T[q].push(pe),T[w.get(pe)].push(xe)})},"_loop"),Se=!0,ce=!1,ae=void 0;try{for(var Oe=b.keys()[Symbol.iterator](),ge;!(Se=(ge=Oe.next()).done);Se=!0){var ze=ge.value;Z(ze)}}catch(V){ce=!0,ae=V}finally{try{!Se&&Oe.return&&Oe.return()}finally{if(ce)throw ae}}R=w.size;var He=void 0;if(R>2){z=R<m.sampleSize?R:m.sampleSize;for(var $e=0;$e<R;$e++)I[$e]=[];for(var Re=0;Re<z;Re++)k[Re]=[];return m.quality=="draft"||m.step=="all"?(Q(F),j(),ie(),He={nodeIndexes:w,xCoords:E,yCoords:A}):(w.forEach(function(V,xe){E.push(g.getElementById(xe).position("x")),A.push(g.getElementById(xe).position("y"))}),He={nodeIndexes:w,xCoords:E,yCoords:A}),He}else{var Ie=w.keys(),be=g.getElementById(Ie.next().value),W=be.position(),de=be.outerWidth();if(E.push(W.x),A.push(W.y),R==2){var re=g.getElementById(Ie.next().value),oe=re.outerWidth();E.push(W.x+de/2+oe/2+m.idealEdgeLength),A.push(W.y)}return He={nodeIndexes:w,xCoords:E,yCoords:A},He}},"spectralLayout");a.exports={spectralLayout:d}},579:(a,s,l)=>{var u=l(212),h=o(function(d){d&&d("layout","fcose",u)},"register");typeof cytoscape<"u"&&h(cytoscape),a.exports=h},140:a=>{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(579);return i})()})});var dy,Zp,yF=N(()=>{"use strict";tu();dy=o(t=>`<g><rect width="80" height="80" style="fill: #087ebf; stroke-width: 0px;"/>${t}</g>`,"wrapIcon"),Zp={prefix:"mermaid-architecture",height:80,width:80,icons:{database:{body:dy('<path id="b" data-name="4" d="m20,57.86c0,3.94,8.95,7.14,20,7.14s20-3.2,20-7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path id="c" data-name="3" d="m20,45.95c0,3.94,8.95,7.14,20,7.14s20-3.2,20-7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path id="d" data-name="2" d="m20,34.05c0,3.94,8.95,7.14,20,7.14s20-3.2,20-7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse id="e" data-name="1" cx="40" cy="22.14" rx="20" ry="7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="20" y1="57.86" x2="20" y2="22.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="60" y1="57.86" x2="60" y2="22.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/>')},server:{body:dy('<rect x="17.5" y="17.5" width="45" height="45" rx="2" ry="2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="17.5" y1="32.5" x2="62.5" y2="32.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="17.5" y1="47.5" x2="62.5" y2="47.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><g><path d="m56.25,25c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: #fff; stroke-width: 0px;"/><path d="m56.25,25c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10;"/></g><g><path d="m56.25,40c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: #fff; stroke-width: 0px;"/><path d="m56.25,40c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10;"/></g><g><path d="m56.25,55c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: #fff; stroke-width: 0px;"/><path d="m56.25,55c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10;"/></g><g><circle cx="32.5" cy="25" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="27.5" cy="25" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="22.5" cy="25" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/></g><g><circle cx="32.5" cy="40" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="27.5" cy="40" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="22.5" cy="40" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/></g><g><circle cx="32.5" cy="55" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="27.5" cy="55" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="22.5" cy="55" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/></g>')},disk:{body:dy('<rect x="20" y="15" width="40" height="50" rx="1" ry="1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="24" cy="19.17" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="56" cy="19.17" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="24" cy="60.83" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="56" cy="60.83" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="40" cy="33.75" rx="14" ry="14.58" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="40" cy="33.75" rx="4" ry="4.17" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path d="m37.51,42.52l-4.83,13.22c-.26.71-1.1,1.02-1.76.64l-4.18-2.42c-.66-.38-.81-1.26-.33-1.84l9.01-10.8c.88-1.05,2.56-.08,2.09,1.2Z" style="fill: #fff; stroke-width: 0px;"/>')},internet:{body:dy('<circle cx="40" cy="40" r="22.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="40" y1="17.5" x2="40" y2="62.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="17.5" y1="40" x2="62.5" y2="40" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path d="m39.99,17.51c-15.28,11.1-15.28,33.88,0,44.98" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path d="m40.01,17.51c15.28,11.1,15.28,33.88,0,44.98" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="19.75" y1="30.1" x2="60.25" y2="30.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="19.75" y1="49.9" x2="60.25" y2="49.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/>')},cloud:{body:dy('<path d="m65,47.5c0,2.76-2.24,5-5,5H20c-2.76,0-5-2.24-5-5,0-1.87,1.03-3.51,2.56-4.36-.04-.21-.06-.42-.06-.64,0-2.6,2.48-4.74,5.65-4.97,1.65-4.51,6.34-7.76,11.85-7.76.86,0,1.69.08,2.5.23,2.09-1.57,4.69-2.5,7.5-2.5,6.1,0,11.19,4.38,12.28,10.17,2.14.56,3.72,2.51,3.72,4.83,0,.03,0,.07-.01.1,2.29.46,4.01,2.48,4.01,4.9Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/>')},unknown:OC,blank:{body:dy("")}}}});var Bve,Fve,$ve,zve,Gve=N(()=>{"use strict";tu();zt();to();w4();yF();oC();Bve=o(async function(t,e){let r=Li("padding"),n=Li("iconSize"),i=n/2,a=n/6,s=a/2;await Promise.all(e.edges().map(async l=>{let{source:u,sourceDir:h,sourceArrow:f,sourceGroup:d,target:p,targetDir:m,targetArrow:g,targetGroup:y,label:v}=sC(l),{x,y:b}=l[0].sourceEndpoint(),{x:w,y:C}=l[0].midpoint(),{x:T,y:E}=l[0].targetEndpoint(),A=r+4;if(d&&(Ha(h)?x+=h==="L"?-A:A:b+=h==="T"?-A:A+18),y&&(Ha(m)?T+=m==="L"?-A:A:E+=m==="T"?-A:A+18),!d&&Qp.getNode(u)?.type==="junction"&&(Ha(h)?x+=h==="L"?i:-i:b+=h==="T"?i:-i),!y&&Qp.getNode(p)?.type==="junction"&&(Ha(m)?T+=m==="L"?i:-i:E+=m==="T"?i:-i),l[0]._private.rscratch){let S=t.insert("g");if(S.insert("path").attr("d",`M ${x},${b} L ${w},${C} L${T},${E} `).attr("class","edge"),f){let _=Ha(h)?v4[h](x,a):x-s,I=Zc(h)?v4[h](b,a):b-s;S.insert("polygon").attr("points",cF[h](a)).attr("transform",`translate(${_},${I})`).attr("class","arrow")}if(g){let _=Ha(m)?v4[m](T,a):T-s,I=Zc(m)?v4[m](E,a):E-s;S.insert("polygon").attr("points",cF[m](a)).attr("transform",`translate(${_},${I})`).attr("class","arrow")}if(v){let _=x4(h,m)?"XY":Ha(h)?"X":"Y",I=0;_==="X"?I=Math.abs(x-T):_==="Y"?I=Math.abs(b-E)/1.5:I=Math.abs(x-T)/2;let D=S.append("g");if(await Hn(D,v,{useHtmlLabels:!1,width:I,classes:"architecture-service-label"},me()),D.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),_==="X")D.attr("transform","translate("+w+", "+C+")");else if(_==="Y")D.attr("transform","translate("+w+", "+C+") rotate(-90)");else if(_==="XY"){let k=b4(h,m);if(k&&Sve(k)){let L=D.node().getBoundingClientRect(),[R,O]=Ave(k);D.attr("dominant-baseline","auto").attr("transform",`rotate(${-1*R*O*45})`);let M=D.node().getBoundingClientRect();D.attr("transform",`
2557 + translate(${w}, ${C-L.height/2})
2558 + translate(${R*M.width/2}, ${O*M.height/2})
2559 + rotate(${-1*R*O*45}, 0, ${L.height/2})
2560 + `)}}}}}))},"drawEdges"),Fve=o(async function(t,e){let n=Li("padding")*.75,i=Li("fontSize"),s=Li("iconSize")/2;await Promise.all(e.nodes().map(async l=>{let u=Ff(l);if(u.type==="group"){let{h,w:f,x1:d,y1:p}=l.boundingBox();t.append("rect").attr("x",d+s).attr("y",p+s).attr("width",f).attr("height",h).attr("class","node-bkg");let m=t.append("g"),g=d,y=p;if(u.icon){let v=m.append("g");v.html(`<g>${await wo(u.icon,{height:n,width:n,fallbackPrefix:Zp.prefix})}</g>`),v.attr("transform","translate("+(g+s+1)+", "+(y+s+1)+")"),g+=n,y+=i/2-1-2}if(u.label){let v=m.append("g");await Hn(v,u.label,{useHtmlLabels:!1,width:f,classes:"architecture-service-label"},me()),v.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","start").attr("text-anchor","start"),v.attr("transform","translate("+(g+s+4)+", "+(y+s+2)+")")}}}))},"drawGroups"),$ve=o(async function(t,e,r){for(let n of r){let i=e.append("g"),a=Li("iconSize");if(n.title){let h=i.append("g");await Hn(h,n.title,{useHtmlLabels:!1,width:a*1.5,classes:"architecture-service-label"},me()),h.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),h.attr("transform","translate("+a/2+", "+a+")")}let s=i.append("g");if(n.icon)s.html(`<g>${await wo(n.icon,{height:a,width:a,fallbackPrefix:Zp.prefix})}</g>`);else if(n.iconText){s.html(`<g>${await wo("blank",{height:a,width:a,fallbackPrefix:Zp.prefix})}</g>`);let d=s.append("g").append("foreignObject").attr("width",a).attr("height",a).append("div").attr("class","node-icon-text").attr("style",`height: ${a}px;`).append("div").html(n.iconText),p=parseInt(window.getComputedStyle(d.node(),null).getPropertyValue("font-size").replace(/\D/g,""))??16;d.attr("style",`-webkit-line-clamp: ${Math.floor((a-2)/p)};`)}else s.append("path").attr("class","node-bkg").attr("id","node-"+n.id).attr("d",`M0 ${a} v${-a} q0,-5 5,-5 h${a} q5,0 5,5 v${a} H0 Z`);i.attr("class","architecture-service");let{width:l,height:u}=i._groups[0][0].getBBox();n.width=l,n.height=u,t.setElementForId(n.id,i)}return 0},"drawServices"),zve=o(function(t,e,r){r.forEach(n=>{let i=e.append("g"),a=Li("iconSize");i.append("g").append("rect").attr("id","node-"+n.id).attr("fill-opacity","0").attr("width",a).attr("height",a),i.attr("class","architecture-junction");let{width:l,height:u}=i._groups[0][0].getBBox();i.width=l,i.height=u,t.setElementForId(n.id,i)})},"drawJunctions")});function Srt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"service",id:r.id,icon:r.icon,label:r.title,parent:r.in,width:Li("iconSize"),height:Li("iconSize")},classes:"node-service"})})}function Crt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"junction",id:r.id,parent:r.in,width:Li("iconSize"),height:Li("iconSize")},classes:"node-junction"})})}function Art(t,e){e.nodes().map(r=>{let n=Ff(r);if(n.type==="group")return;n.x=r.position().x,n.y=r.position().y,t.getElementById(n.id).attr("transform","translate("+(n.x||0)+","+(n.y||0)+")")})}function _rt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"group",id:r.id,icon:r.icon,label:r.title,parent:r.in},classes:"node-group"})})}function Drt(t,e){t.forEach(r=>{let{lhsId:n,rhsId:i,lhsInto:a,lhsGroup:s,rhsInto:l,lhsDir:u,rhsDir:h,rhsGroup:f,title:d}=r,p=x4(r.lhsDir,r.rhsDir)?"segments":"straight",m={id:`${n}-${i}`,label:d,source:n,sourceDir:u,sourceArrow:a,sourceGroup:s,sourceEndpoint:u==="L"?"0 50%":u==="R"?"100% 50%":u==="T"?"50% 0":"50% 100%",target:i,targetDir:h,targetArrow:l,targetGroup:f,targetEndpoint:h==="L"?"0 50%":h==="R"?"100% 50%":h==="T"?"50% 0":"50% 100%"};e.add({group:"edges",data:m,classes:p})})}function Lrt(t,e,r){let n=o((l,u)=>Object.entries(l).reduce((h,[f,d])=>{let p=0,m=Object.entries(d);if(m.length===1)return h[f]=m[0][1],h;for(let g=0;g<m.length-1;g++)for(let y=g+1;y<m.length;y++){let[v,x]=m[g],[b,w]=m[y];if(r[v]?.[b]===u)h[f]??=[],h[f]=[...h[f],...x,...w];else if(v==="default"||b==="default")h[f]??=[],h[f]=[...h[f],...x,...w];else{let T=`${f}-${p++}`;h[T]=x;let E=`${f}-${p++}`;h[E]=w}}return h},{}),"flattenAlignments"),i=e.map(l=>{let u={},h={};return Object.entries(l).forEach(([f,[d,p]])=>{let m=t.getNode(f)?.in??"default";u[p]??={},u[p][m]??=[],u[p][m].push(f),h[d]??={},h[d][m]??=[],h[d][m].push(f)}),{horiz:Object.values(n(u,"horizontal")).filter(f=>f.length>1),vert:Object.values(n(h,"vertical")).filter(f=>f.length>1)}}),[a,s]=i.reduce(([l,u],{horiz:h,vert:f})=>[[...l,...h],[...u,...f]],[[],[]]);return{horizontal:a,vertical:s}}function Rrt(t){let e=[],r=o(i=>`${i[0]},${i[1]}`,"posToStr"),n=o(i=>i.split(",").map(a=>parseInt(a)),"strToPos");return t.forEach(i=>{let a=Object.fromEntries(Object.entries(i).map(([h,f])=>[r(f),h])),s=[r([0,0])],l={},u={L:[-1,0],R:[1,0],T:[0,1],B:[0,-1]};for(;s.length>0;){let h=s.shift();if(h){l[h]=1;let f=a[h];if(f){let d=n(h);Object.entries(u).forEach(([p,m])=>{let g=r([d[0]+m[0],d[1]+m[1]]),y=a[g];y&&!l[g]&&(s.push(g),e.push({[lF[p]]:y,[lF[Eve(p)]]:f,gap:1.5*Li("iconSize")}))})}}}}),e}function Nrt(t,e,r,n,i,{spatialMaps:a,groupAlignments:s}){return new Promise(l=>{let u=Ge("body").append("div").attr("id","cy").attr("style","display:none"),h=rl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"straight",label:"data(label)","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"edge.segments",style:{"curve-style":"segments","segment-weights":"0","segment-distances":[.5],"edge-distances":"endpoints","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"node",style:{"compound-sizing-wrt-labels":"include"}},{selector:"node[label]",style:{"text-valign":"bottom","text-halign":"center","font-size":`${Li("fontSize")}px`}},{selector:".node-service",style:{label:"data(label)",width:"data(width)",height:"data(height)"}},{selector:".node-junction",style:{width:"data(width)",height:"data(height)"}},{selector:".node-group",style:{padding:`${Li("padding")}px`}}]});u.remove(),_rt(r,h),Srt(t,h),Crt(e,h),Drt(n,h);let f=Lrt(i,a,s),d=Rrt(a),p=h.layout({name:"fcose",quality:"proof",styleEnabled:!1,animate:!1,nodeDimensionsIncludeLabels:!1,idealEdgeLength(m){let[g,y]=m.connectedNodes(),{parent:v}=Ff(g),{parent:x}=Ff(y);return v===x?1.5*Li("iconSize"):.5*Li("iconSize")},edgeElasticity(m){let[g,y]=m.connectedNodes(),{parent:v}=Ff(g),{parent:x}=Ff(y);return v===x?.45:.001},alignmentConstraint:f,relativePlacementConstraint:d});p.one("layoutstop",()=>{function m(g,y,v,x){let b,w,{x:C,y:T}=g,{x:E,y:A}=y;w=(x-T+(C-v)*(T-A)/(C-E))/Math.sqrt(1+Math.pow((T-A)/(C-E),2)),b=Math.sqrt(Math.pow(x-T,2)+Math.pow(v-C,2)-Math.pow(w,2));let S=Math.sqrt(Math.pow(E-C,2)+Math.pow(A-T,2));b=b/S;let _=(E-C)*(x-T)-(A-T)*(v-C);switch(!0){case _>=0:_=1;break;case _<0:_=-1;break}let I=(E-C)*(v-C)+(A-T)*(x-T);switch(!0){case I>=0:I=1;break;case I<0:I=-1;break}return w=Math.abs(w)*_,b=b*I,{distances:w,weights:b}}o(m,"getSegmentWeights"),h.startBatch();for(let g of Object.values(h.edges()))if(g.data?.()){let{x:y,y:v}=g.source().position(),{x,y:b}=g.target().position();if(y!==x&&v!==b){let w=g.sourceEndpoint(),C=g.targetEndpoint(),{sourceDir:T}=sC(g),[E,A]=Zc(T)?[w.x,C.y]:[C.x,w.y],{weights:S,distances:_}=m(w,C,E,A);g.style("segment-distances",_),g.style("segment-weights",S)}}h.endBatch(),p.run()}),p.run(),h.ready(m=>{Y.info("Ready",m),l(h)})})}var Vve,Mrt,Uve,Hve=N(()=>{"use strict";tu();kB();Vve=Sa(Pve(),1);dr();vt();Vc();Ei();w4();yF();oC();Gve();P4([{name:Zp.prefix,icons:Zp}]);rl.use(Vve.default);o(Srt,"addServices");o(Crt,"addJunctions");o(Art,"positionNodes");o(_rt,"addGroups");o(Drt,"addEdges");o(Lrt,"getAlignments");o(Rrt,"getRelativeConstraints");o(Nrt,"layoutArchitecture");Mrt=o(async(t,e,r,n)=>{let i=n.db,a=i.getServices(),s=i.getJunctions(),l=i.getGroups(),u=i.getEdges(),h=i.getDataStructures(),f=sa(e),d=f.append("g");d.attr("class","architecture-edges");let p=f.append("g");p.attr("class","architecture-services");let m=f.append("g");m.attr("class","architecture-groups"),await $ve(i,p,a),zve(i,p,s);let g=await Nrt(a,s,l,u,i,h);await Bve(d,g),await Fve(m,g),Art(i,g),Ao(void 0,f,Li("padding"),Li("useMaxWidth"))},"draw"),Uve={draw:Mrt}});var Wve={};hr(Wve,{diagram:()=>Irt});var Irt,qve=N(()=>{"use strict";Mve();w4();Ove();Hve();Irt={parser:Nve,db:Qp,renderer:Uve,styles:Ive}});var bnt={};hr(bnt,{default:()=>xnt});tu();PC();Xf();var YX="c4",PCe=o(t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),"detector"),BCe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(qX(),WX));return{id:YX,diagram:t}},"loader"),FCe={id:YX,detector:PCe,loader:BCe},XX=FCe;var Xie="flowchart",xOe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-wrapper"||e?.flowchart?.defaultRenderer==="elk"?!1:/^\s*graph/.test(t),"detector"),bOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ak(),ik));return{id:Xie,diagram:t}},"loader"),wOe={id:Xie,detector:xOe,loader:bOe},jie=wOe;var Kie="flowchart-v2",TOe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-d3"?!1:(e?.flowchart?.defaultRenderer==="elk"&&(e.layout="elk"),/^\s*graph/.test(t)&&e?.flowchart?.defaultRenderer==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)),"detector"),kOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ak(),ik));return{id:Kie,diagram:t}},"loader"),EOe={id:Kie,detector:TOe,loader:kOe},Qie=EOe;var sae="er",DOe=o(t=>/^\s*erDiagram/.test(t),"detector"),LOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(aae(),iae));return{id:sae,diagram:t}},"loader"),ROe={id:sae,detector:DOe,loader:LOe},oae=ROe;var uue="gitGraph",tze=o(t=>/^\s*gitGraph/.test(t),"detector"),rze=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(cue(),lue));return{id:uue,diagram:t}},"loader"),nze={id:uue,detector:tze,loader:rze},hue=nze;var Gue="gantt",Hze=o(t=>/^\s*gantt/.test(t),"detector"),Wze=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(zue(),$ue));return{id:Gue,diagram:t}},"loader"),qze={id:Gue,detector:Hze,loader:Wze},Vue=qze;var Que="info",Zze=o(t=>/^\s*info/.test(t),"detector"),Jze=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Kue(),jue));return{id:Que,diagram:t}},"loader"),Zue={id:Que,detector:Zze,loader:Jze};var lhe="pie",fGe=o(t=>/^\s*pie/.test(t),"detector"),dGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ohe(),she));return{id:lhe,diagram:t}},"loader"),che={id:lhe,detector:fGe,loader:dGe};var The="quadrantChart",RGe=o(t=>/^\s*quadrantChart/.test(t),"detector"),NGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(whe(),bhe));return{id:The,diagram:t}},"loader"),MGe={id:The,detector:RGe,loader:NGe},khe=MGe;var Khe="xychart",jGe=o(t=>/^\s*xychart-beta/.test(t),"detector"),KGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(jhe(),Xhe));return{id:Khe,diagram:t}},"loader"),QGe={id:Khe,detector:jGe,loader:KGe},Qhe=QGe;var sfe="requirement",tVe=o(t=>/^\s*requirement(Diagram)?/.test(t),"detector"),rVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(afe(),ife));return{id:sfe,diagram:t}},"loader"),nVe={id:sfe,detector:tVe,loader:rVe},ofe=nVe;var Afe="sequence",zVe=o(t=>/^\s*sequenceDiagram/.test(t),"detector"),GVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Cfe(),Sfe));return{id:Afe,diagram:t}},"loader"),VVe={id:Afe,detector:zVe,loader:GVe},_fe=VVe;var Ife="class",XVe=o((t,e)=>e?.class?.defaultRenderer==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t),"detector"),jVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Mfe(),Nfe));return{id:Ife,diagram:t}},"loader"),KVe={id:Ife,detector:XVe,loader:jVe},Ofe=KVe;var Ffe="classDiagram",ZVe=o((t,e)=>/^\s*classDiagram/.test(t)&&e?.class?.defaultRenderer==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t),"detector"),JVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Bfe(),Pfe));return{id:Ffe,diagram:t}},"loader"),eUe={id:Ffe,detector:ZVe,loader:JVe},$fe=eUe;var Ede="state",LUe=o((t,e)=>e?.state?.defaultRenderer==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t),"detector"),RUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(kde(),Tde));return{id:Ede,diagram:t}},"loader"),NUe={id:Ede,detector:LUe,loader:RUe},Sde=NUe;var _de="stateDiagram",IUe=o((t,e)=>!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&e?.state?.defaultRenderer==="dagre-wrapper"),"detector"),OUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Ade(),Cde));return{id:_de,diagram:t}},"loader"),PUe={id:_de,detector:IUe,loader:OUe},Dde=PUe;var Wde="journey",nHe=o(t=>/^\s*journey/.test(t),"detector"),iHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Hde(),Ude));return{id:Wde,diagram:t}},"loader"),aHe={id:Wde,detector:nHe,loader:iHe},qde=aHe;vt();Vc();Ei();var sHe=o((t,e,r)=>{Y.debug(`rendering svg for syntax error
2561 +`);let n=sa(e),i=n.append("g");n.attr("viewBox","0 0 2412 512"),vn(n,100,512,!0),i.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),i.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),i.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),i.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),i.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),i.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),i.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),i.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),fP={draw:sHe},Yde=fP;var oHe={db:{},renderer:fP,parser:{parse:o(()=>{},"parse")}},Xde=oHe;var jde="flowchart-elk",lHe=o((t,e={})=>/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&e?.flowchart?.defaultRenderer==="elk"?(e.layout="elk",!0):!1,"detector"),cHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ak(),ik));return{id:jde,diagram:t}},"loader"),uHe={id:jde,detector:lHe,loader:cHe},Kde=uHe;var Tpe="timeline",DHe=o(t=>/^\s*timeline/.test(t),"detector"),LHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(wpe(),bpe));return{id:Tpe,diagram:t}},"loader"),RHe={id:Tpe,detector:DHe,loader:LHe},kpe=RHe;var e1e="mindmap",cJe=o(t=>/^\s*mindmap/.test(t),"detector"),uJe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Jge(),Zge));return{id:e1e,diagram:t}},"loader"),hJe={id:e1e,detector:cJe,loader:uJe},t1e=hJe;var d1e="kanban",AJe=o(t=>/^\s*kanban/.test(t),"detector"),_Je=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(f1e(),h1e));return{id:d1e,diagram:t}},"loader"),DJe={id:d1e,detector:AJe,loader:_Je},p1e=DJe;var j1e="sankey",ZJe=o(t=>/^\s*sankey-beta/.test(t),"detector"),JJe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(X1e(),Y1e));return{id:j1e,diagram:t}},"loader"),eet={id:j1e,detector:ZJe,loader:JJe},K1e=eet;var sye="packet",pet=o(t=>/^\s*packet-beta/.test(t),"detector"),met=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(aye(),iye));return{id:sye,diagram:t}},"loader"),oye={id:sye,detector:pet,loader:met};var vye="radar",Fet=o(t=>/^\s*radar-beta/.test(t),"detector"),$et=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(yye(),gye));return{id:vye,diagram:t}},"loader"),xye={id:vye,detector:Fet,loader:$et};var Tve="block",srt=o(t=>/^\s*block-beta/.test(t),"detector"),ort=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(wve(),bve));return{id:Tve,diagram:t}},"loader"),lrt={id:Tve,detector:srt,loader:ort},kve=lrt;var Yve="architecture",Ort=o(t=>/^\s*architecture/.test(t),"detector"),Prt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(qve(),Wve));return{id:Yve,diagram:t}},"loader"),Brt={id:Yve,detector:Ort,loader:Prt},Xve=Brt;Xf();zt();var jve=!1,py=o(()=>{jve||(jve=!0,ad("error",Xde,t=>t.toLowerCase().trim()==="error"),ad("---",{db:{clear:o(()=>{},"clear")},styles:{},renderer:{draw:o(()=>{},"draw")},parser:{parse:o(()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")},"parse")},init:o(()=>null,"init")},t=>t.toLowerCase().trimStart().startsWith("---")),z4(XX,p1e,$fe,Ofe,oae,Vue,Zue,che,ofe,_fe,Kde,Qie,jie,t1e,kpe,hue,Dde,Sde,qde,khe,K1e,oye,Qhe,kve,Xve,xye))},"addDiagrams");vt();Xf();zt();var Kve=o(async()=>{Y.debug("Loading registered diagrams");let e=(await Promise.allSettled(Object.entries(Yf).map(async([r,{detector:n,loader:i}])=>{if(i)try{jy(r)}catch{try{let{diagram:a,id:s}=await i();ad(s,a,n)}catch(a){throw Y.error(`Failed to load external diagram with key ${r}. Removing from detectors.`),delete Yf[r],a}}}))).filter(r=>r.status==="rejected");if(e.length>0){Y.error(`Failed to load ${e.length} external diagrams`);for(let r of e)Y.error(r);throw new Error(`Failed to load ${e.length} external diagrams`)}},"loadRegisteredDiagrams");vt();dr();var lC="comm",cC="rule",uC="decl";var Qve="@import";var Zve="@namespace",Jve="@keyframes";var e2e="@layer";var vF=Math.abs,S4=String.fromCharCode;function hC(t){return t.trim()}o(hC,"trim");function C4(t,e,r){return t.replace(e,r)}o(C4,"replace");function t2e(t,e,r){return t.indexOf(e,r)}o(t2e,"indexof");function $f(t,e){return t.charCodeAt(e)|0}o($f,"charat");function zf(t,e,r){return t.slice(e,r)}o(zf,"substr");function vo(t){return t.length}o(vo,"strlen");function r2e(t){return t.length}o(r2e,"sizeof");function my(t,e){return e.push(t),t}o(my,"append");var fC=1,gy=1,n2e=0,il=0,Ri=0,vy="";function dC(t,e,r,n,i,a,s,l){return{value:t,root:e,parent:r,type:n,props:i,children:a,line:fC,column:gy,length:s,return:"",siblings:l}}o(dC,"node");function i2e(){return Ri}o(i2e,"char");function a2e(){return Ri=il>0?$f(vy,--il):0,gy--,Ri===10&&(gy=1,fC--),Ri}o(a2e,"prev");function al(){return Ri=il<n2e?$f(vy,il++):0,gy++,Ri===10&&(gy=1,fC++),Ri}o(al,"next");function rh(){return $f(vy,il)}o(rh,"peek");function A4(){return il}o(A4,"caret");function pC(t,e){return zf(vy,t,e)}o(pC,"slice");function yy(t){switch(t){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}o(yy,"token");function s2e(t){return fC=gy=1,n2e=vo(vy=t),il=0,[]}o(s2e,"alloc");function o2e(t){return vy="",t}o(o2e,"dealloc");function mC(t){return hC(pC(il-1,xF(t===91?t+2:t===40?t+1:t)))}o(mC,"delimit");function l2e(t){for(;(Ri=rh())&&Ri<33;)al();return yy(t)>2||yy(Ri)>3?"":" "}o(l2e,"whitespace");function c2e(t,e){for(;--e&&al()&&!(Ri<48||Ri>102||Ri>57&&Ri<65||Ri>70&&Ri<97););return pC(t,A4()+(e<6&&rh()==32&&al()==32))}o(c2e,"escaping");function xF(t){for(;al();)switch(Ri){case t:return il;case 34:case 39:t!==34&&t!==39&&xF(Ri);break;case 40:t===41&&xF(t);break;case 92:al();break}return il}o(xF,"delimiter");function u2e(t,e){for(;al()&&t+Ri!==57;)if(t+Ri===84&&rh()===47)break;return"/*"+pC(e,il-1)+"*"+S4(t===47?t:al())}o(u2e,"commenter");function h2e(t){for(;!yy(rh());)al();return pC(t,il)}o(h2e,"identifier");function p2e(t){return o2e(gC("",null,null,null,[""],t=s2e(t),0,[0],t))}o(p2e,"compile");function gC(t,e,r,n,i,a,s,l,u){for(var h=0,f=0,d=s,p=0,m=0,g=0,y=1,v=1,x=1,b=0,w="",C=i,T=a,E=n,A=w;v;)switch(g=b,b=al()){case 40:if(g!=108&&$f(A,d-1)==58){t2e(A+=C4(mC(b),"&","&\f"),"&\f",vF(h?l[h-1]:0))!=-1&&(x=-1);break}case 34:case 39:case 91:A+=mC(b);break;case 9:case 10:case 13:case 32:A+=l2e(g);break;case 92:A+=c2e(A4()-1,7);continue;case 47:switch(rh()){case 42:case 47:my(Frt(u2e(al(),A4()),e,r,u),u),(yy(g||1)==5||yy(rh()||1)==5)&&vo(A)&&zf(A,-1,void 0)!==" "&&(A+=" ");break;default:A+="/"}break;case 123*y:l[h++]=vo(A)*x;case 125*y:case 59:case 0:switch(b){case 0:case 125:v=0;case 59+f:x==-1&&(A=C4(A,/\f/g,"")),m>0&&(vo(A)-d||y===0&&g===47)&&my(m>32?d2e(A+";",n,r,d-1,u):d2e(C4(A," ","")+";",n,r,d-2,u),u);break;case 59:A+=";";default:if(my(E=f2e(A,e,r,h,f,i,l,w,C=[],T=[],d,a),a),b===123)if(f===0)gC(A,e,E,E,C,a,d,l,T);else{switch(p){case 99:if($f(A,3)===110)break;case 108:if($f(A,2)===97)break;default:f=0;case 100:case 109:case 115:}f?gC(t,E,E,n&&my(f2e(t,E,E,0,0,i,l,w,i,C=[],d,T),T),i,T,d,l,n?C:T):gC(A,E,E,E,[""],T,0,l,T)}}h=f=m=0,y=x=1,w=A="",d=s;break;case 58:d=1+vo(A),m=g;default:if(y<1){if(b==123)--y;else if(b==125&&y++==0&&a2e()==125)continue}switch(A+=S4(b),b*y){case 38:x=f>0?1:(A+="\f",-1);break;case 44:l[h++]=(vo(A)-1)*x,x=1;break;case 64:rh()===45&&(A+=mC(al())),p=rh(),f=d=vo(w=A+=h2e(A4())),b++;break;case 45:g===45&&vo(A)==2&&(y=0)}}return a}o(gC,"parse");function f2e(t,e,r,n,i,a,s,l,u,h,f,d){for(var p=i-1,m=i===0?a:[""],g=r2e(m),y=0,v=0,x=0;y<n;++y)for(var b=0,w=zf(t,p+1,p=vF(v=s[y])),C=t;b<g;++b)(C=hC(v>0?m[b]+" "+w:C4(w,/&\f/g,m[b])))&&(u[x++]=C);return dC(t,e,r,i===0?cC:l,u,h,f,d)}o(f2e,"ruleset");function Frt(t,e,r,n){return dC(t,e,r,lC,S4(i2e()),zf(t,2,-2),0,n)}o(Frt,"comment");function d2e(t,e,r,n,i){return dC(t,e,r,uC,zf(t,0,n),zf(t,n+1,-1),n,i)}o(d2e,"declaration");function yC(t,e){for(var r="",n=0;n<t.length;n++)r+=e(t[n],n,t,e)||"";return r}o(yC,"serialize");function m2e(t,e,r,n){switch(t.type){case e2e:if(t.children.length)break;case Qve:case Zve:case uC:return t.return=t.return||t.value;case lC:return"";case Jve:return t.return=t.value+"{"+yC(t.children,n)+"}";case cC:if(!vo(t.value=t.props.join(",")))return""}return vo(r=yC(t.children,n))?t.return=t.value+"{"+r+"}":""}o(m2e,"stringify");u7();HT();oO();var $rt="graphics-document document";function g2e(t,e){t.attr("role",$rt),e!==""&&t.attr("aria-roledescription",e)}o(g2e,"setA11yDiagramInfo");function y2e(t,e,r,n){if(t.insert!==void 0){if(r){let i=`chart-desc-${n}`;t.attr("aria-describedby",i),t.insert("desc",":first-child").attr("id",i).text(r)}if(e){let i=`chart-title-${n}`;t.attr("aria-labelledby",i),t.insert("title",":first-child").attr("id",i).text(e)}}}o(y2e,"addSVGa11yTitleDescription");s0();ji();ji();zt();Xf();BC();ir();var xy=class t{constructor(e,r,n,i,a){this.type=e;this.text=r;this.db=n;this.parser=i;this.renderer=a}static{o(this,"Diagram")}static async fromText(e,r={}){let n=cr(),i=a0(e,n);e=PX(e)+`
2562 +`;try{jy(i)}catch{let h=ZF(i);if(!h)throw new i0(`Diagram ${i} not found.`);let{id:f,diagram:d}=await h();ad(f,d)}let{db:a,parser:s,renderer:l,init:u}=jy(i);return s.parser&&(s.parser.yy=a),a.clear?.(),u?.(n),r.title&&a.setDiagramTitle?.(r.title),await s.parse(e),new t(i,e,a,s,l)}async render(e,r){await this.renderer.draw(this.text,e,r,this)}getParser(){return this.parser}getType(){return this.type}};gr();var v2e=[];var x2e=o(()=>{v2e.forEach(t=>{t()}),v2e=[]},"attachFunctions");vt();var b2e=o(t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");$4();Ew();function w2e(t){let e=t.match(F4);if(!e)return{text:t,metadata:{}};let r=cm(e[1],{schema:lm})??{};r=typeof r=="object"&&!Array.isArray(r)?r:{};let n={};return r.displayMode&&(n.displayMode=r.displayMode.toString()),r.title&&(n.title=r.title.toString()),r.config&&(n.config=r.config),{text:t.slice(e[0].length),metadata:n}}o(w2e,"extractFrontMatter");ir();var zrt=o(t=>t.replace(/\r\n?/g,`
2563 +`).replace(/<(\w+)([^>]*)>/g,(e,r,n)=>"<"+r+n.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),Grt=o(t=>{let{text:e,metadata:r}=w2e(t),{displayMode:n,title:i,config:a={}}=r;return n&&(a.gantt||(a.gantt={}),a.gantt.displayMode=n),{title:i,config:a,text:e}},"processFrontmatter"),Vrt=o(t=>{let e=Gt.detectInit(t)??{},r=Gt.detectDirective(t,"wrap");return Array.isArray(r)?e.wrap=r.some(({type:n})=>n==="wrap"):r?.type==="wrap"&&(e.wrap=!0),{text:IX(t),directive:e}},"processDirectives");function bF(t){let e=zrt(t),r=Grt(e),n=Vrt(r.text),i=Fi(r.config,n.directive);return t=b2e(n.text),{code:t,title:r.title,config:i}}o(bF,"preprocessDiagram");tA();q4();ir();function T2e(t){let e=new TextEncoder().encode(t),r=Array.from(e,n=>String.fromCodePoint(n)).join("");return btoa(r)}o(T2e,"toBase64");var Urt=5e4,Hrt="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",Wrt="sandbox",qrt="loose",Yrt="http://www.w3.org/2000/svg",Xrt="http://www.w3.org/1999/xlink",jrt="http://www.w3.org/1999/xhtml",Krt="100%",Qrt="100%",Zrt="border:0;margin:0;",Jrt="margin:0",ent="allow-top-navigation-by-user-activation allow-popups",tnt='The "iframe" tag is not supported by your browser.',rnt=["foreignobject"],nnt=["dominant-baseline"];function C2e(t){let e=bF(t);return Ly(),W$(e.config??{}),e}o(C2e,"processAndSetConfigs");async function int(t,e){py();try{let{code:r,config:n}=C2e(t);return{diagramType:(await A2e(r)).type,config:n}}catch(r){if(e?.suppressErrors)return!1;throw r}}o(int,"parse");var k2e=o((t,e,r=[])=>`
2564 +.${t} ${e} { ${r.join(" !important; ")} !important; }`,"cssImportantStyles"),ant=o((t,e=new Map)=>{let r="";if(t.themeCSS!==void 0&&(r+=`
2565 +${t.themeCSS}`),t.fontFamily!==void 0&&(r+=`
2566 +:root { --mermaid-font-family: ${t.fontFamily}}`),t.altFontFamily!==void 0&&(r+=`
2567 +:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),e instanceof Map){let s=t.htmlLabels??t.flowchart?.htmlLabels?["> *","span"]:["rect","polygon","ellipse","circle","path"];e.forEach(l=>{ur(l.styles)||s.forEach(u=>{r+=k2e(l.id,u,l.styles)}),ur(l.textStyles)||(r+=k2e(l.id,"tspan",(l?.textStyles||[]).map(u=>u.replace("color","fill"))))})}return r},"createCssStyles"),snt=o((t,e,r,n)=>{let i=ant(t,r),a=zG(e,i,t.themeVariables);return yC(p2e(`${n}{${a}}`),m2e)},"createUserStyles"),ont=o((t="",e,r)=>{let n=t;return!r&&!e&&(n=n.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),n=na(n),n=n.replace(/<br>/g,"<br/>"),n},"cleanUpSvgCode"),lnt=o((t="",e)=>{let r=e?.viewBox?.baseVal?.height?e.viewBox.baseVal.height+"px":Qrt,n=T2e(`<body style="${Jrt}">${t}</body>`);return`<iframe style="width:${Krt};height:${r};${Zrt}" src="data:text/html;charset=UTF-8;base64,${n}" sandbox="${ent}">
2568 + ${tnt}
2569 +</iframe>`},"putIntoIFrame"),E2e=o((t,e,r,n,i)=>{let a=t.append("div");a.attr("id",r),n&&a.attr("style",n);let s=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns",Yrt);return i&&s.attr("xmlns:xlink",i),s.append("g"),t},"appendDivSvgG");function S2e(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}o(S2e,"sandboxedIframe");var cnt=o((t,e,r,n)=>{t.getElementById(e)?.remove(),t.getElementById(r)?.remove(),t.getElementById(n)?.remove()},"removeExistingElements"),unt=o(async function(t,e,r){py();let n=C2e(e);e=n.code;let i=cr();Y.debug(i),e.length>(i?.maxTextSize??Urt)&&(e=Hrt);let a="#"+t,s="i"+t,l="#"+s,u="d"+t,h="#"+u,f=o(()=>{let L=Ge(p?l:h).node();L&&"remove"in L&&L.remove()},"removeTempElements"),d=Ge("body"),p=i.securityLevel===Wrt,m=i.securityLevel===qrt,g=i.fontFamily;if(r!==void 0){if(r&&(r.innerHTML=""),p){let k=S2e(Ge(r),s);d=Ge(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ge(r);E2e(d,t,u,`font-family: ${g}`,Xrt)}else{if(cnt(document,t,u,s),p){let k=S2e(Ge("body"),s);d=Ge(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ge("body");E2e(d,t,u)}let y,v;try{y=await xy.fromText(e,{title:n.title})}catch(k){if(i.suppressErrorRendering)throw f(),k;y=await xy.fromText("error"),v=k}let x=d.select(h).node(),b=y.type,w=x.firstChild,C=w.firstChild,T=y.renderer.getClasses?.(e,y),E=snt(i,b,T,a),A=document.createElement("style");A.innerHTML=E,w.insertBefore(A,C);try{await y.renderer.draw(e,t,vb.version,y)}catch(k){throw i.suppressErrorRendering?f():Yde.draw(e,t,vb.version),k}let S=d.select(`${h} svg`),_=y.db.getAccTitle?.(),I=y.db.getAccDescription?.();fnt(b,S,_,I),d.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",jrt);let D=d.select(h).node().innerHTML;if(Y.debug("config.arrowMarkerAbsolute",i.arrowMarkerAbsolute),D=ont(D,p,fr(i.arrowMarkerAbsolute)),p){let k=d.select(h+" svg").node();D=lnt(D,k)}else m||(D=ch.sanitize(D,{ADD_TAGS:rnt,ADD_ATTR:nnt,HTML_INTEGRATION_POINTS:{foreignobject:!0}}));if(x2e(),v)throw v;return f(),{diagramType:b,svg:D,bindFunctions:y.db.bindFunctions}},"render");function hnt(t={}){let e=Gn({},t);e?.fontFamily&&!e.themeVariables?.fontFamily&&(e.themeVariables||(e.themeVariables={}),e.themeVariables.fontFamily=e.fontFamily),V$(e),e?.theme&&e.theme in To?e.themeVariables=To[e.theme].getThemeVariables(e.themeVariables):e&&(e.themeVariables=To.default.getThemeVariables(e.themeVariables));let r=typeof e=="object"?t7(e):r7();wy(r.logLevel),py()}o(hnt,"initialize");var A2e=o((t,e={})=>{let{code:r}=bF(t);return xy.fromText(r,e)},"getDiagramFromText");function fnt(t,e,r,n){g2e(e,t),y2e(e,r,n,e.attr("id"))}o(fnt,"addA11yInfo");var Gf=Object.freeze({render:unt,parse:int,getDiagramFromText:A2e,initialize:hnt,getConfig:cr,setConfig:X4,getSiteConfig:r7,updateSiteConfig:U$,reset:o(()=>{Ly()},"reset"),globalReset:o(()=>{Ly(lh)},"globalReset"),defaultConfig:lh});wy(cr().logLevel);Ly(cr());Yd();ir();var dnt=o((t,e,r)=>{Y.warn(t),Z9(t)?(r&&r(t.str,t.hash),e.push({...t,message:t.str,error:t})):(r&&r(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},"handleError"),_2e=o(async function(t={querySelector:".mermaid"}){try{await pnt(t)}catch(e){if(Z9(e)&&Y.error(e.str),nh.parseError&&nh.parseError(e),!t.suppressErrors)throw Y.error("Use the suppressErrors option to suppress these errors"),e}},"run"),pnt=o(async function({postRenderCallback:t,querySelector:e,nodes:r}={querySelector:".mermaid"}){let n=Gf.getConfig();Y.debug(`${t?"":"No "}Callback function found`);let i;if(r)i=r;else if(e)i=document.querySelectorAll(e);else throw new Error("Nodes and querySelector are both undefined");Y.debug(`Found ${i.length} diagrams`),n?.startOnLoad!==void 0&&(Y.debug("Start On Load: "+n?.startOnLoad),Gf.updateSiteConfig({startOnLoad:n?.startOnLoad}));let a=new Gt.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed),s,l=[];for(let u of Array.from(i)){Y.info("Rendering diagram: "+u.id);if(u.getAttribute("data-processed"))continue;u.setAttribute("data-processed","true");let h=`mermaid-${a.next()}`;s=u.innerHTML,s=B4(Gt.entityDecode(s)).trim().replace(/<br\s*\/?>/gi,"<br/>");let f=Gt.detectInit(s);f&&Y.debug("Detected early reinit: ",f);try{let{svg:d,bindFunctions:p}=await N2e(h,s,u);u.innerHTML=d,t&&await t(h),p&&p(u)}catch(d){dnt(d,l,nh.parseError)}}if(l.length>0)throw l[0]},"runThrowsErrors"),D2e=o(function(t){Gf.initialize(t)},"initialize"),mnt=o(async function(t,e,r){Y.warn("mermaid.init is deprecated. Please use run instead."),t&&D2e(t);let n={postRenderCallback:r,querySelector:".mermaid"};typeof e=="string"?n.querySelector=e:e&&(e instanceof HTMLElement?n.nodes=[e]:n.nodes=e),await _2e(n)},"init"),gnt=o(async(t,{lazyLoad:e=!0}={})=>{py(),z4(...t),e===!1&&await Kve()},"registerExternalDiagrams"),L2e=o(function(){if(nh.startOnLoad){let{startOnLoad:t}=Gf.getConfig();t&&nh.run().catch(e=>Y.error("Mermaid failed to initialize",e))}},"contentLoaded");if(typeof document<"u"){window.addEventListener("load",L2e,!1)}var ynt=o(function(t){nh.parseError=t},"setParseErrorHandler"),vC=[],wF=!1,R2e=o(async()=>{if(!wF){for(wF=!0;vC.length>0;){let t=vC.shift();if(t)try{await t()}catch(e){Y.error("Error executing queue",e)}}wF=!1}},"executeQueue"),vnt=o(async(t,e)=>new Promise((r,n)=>{let i=o(()=>new Promise((a,s)=>{Gf.parse(t,e).then(l=>{a(l),r(l)},l=>{Y.error("Error parsing",l),nh.parseError?.(l),s(l),n(l)})}),"performCall");vC.push(i),R2e().catch(n)}),"parse"),N2e=o((t,e,r)=>new Promise((n,i)=>{let a=o(()=>new Promise((s,l)=>{Gf.render(t,e,r).then(u=>{s(u),n(u)},u=>{Y.error("Error parsing",u),nh.parseError?.(u),l(u),i(u)})}),"performCall");vC.push(a),R2e().catch(i)}),"render"),nh={startOnLoad:!0,mermaidAPI:Gf,parse:vnt,render:N2e,init:mnt,run:_2e,registerExternalDiagrams:gnt,registerLayoutLoaders:vR,initialize:D2e,parseError:void 0,contentLoaded:L2e,setParseErrorHandler:ynt,detectType:a0,registerIconPacks:P4},xnt=nh;return V2e(bnt);})();
2570 +/*! Check if previously processed */
2571 +/*!
2572 + * Wait for document loaded before starting the execution
2573 + */
2574 +/*! Bundled license information:
2575 +
2576 +dompurify/dist/purify.es.mjs:
2577 + (*! @license DOMPurify 3.2.4 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.4/LICENSE *)
2578 +
2579 +js-yaml/dist/js-yaml.mjs:
2580 + (*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT *)
2581 +
2582 +lodash-es/lodash.js:
2583 + (**
2584 + * @license
2585 + * Lodash (Custom Build) <https://lodash.com/>
2586 + * Build: `lodash modularize exports="es" -o ./`
2587 + * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
2588 + * Released under MIT license <https://lodash.com/license>
2589 + * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
2590 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
2591 + *)
2592 +
2593 +cytoscape/dist/cytoscape.esm.mjs:
2594 + (*!
2595 + Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable
2596 + Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com)
2597 + Licensed under The MIT License (http://opensource.org/licenses/MIT)
2598 + *)
2599 + (*!
2600 + Event object based on jQuery events, MIT license
2601 +
2602 + https://jquery.org/license/
2603 + https://tldrlegal.com/license/mit-license
2604 + https://github.com/jquery/jquery/blob/master/src/event.js
2605 + *)
2606 + (*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License *)
2607 + (*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License *)
2608 +*/
2609 +globalThis.mermaid = globalThis.__esbuild_esm_mermaid.default;
2609 < \ No newline at end of file
A book/theme/mermaid-init-ccf746f1.js
+39 -0
@@ -0,0 +1,39 @@
1 +// This Source Code Form is subject to the terms of the Mozilla Public
2 +// License, v. 2.0. If a copy of the MPL was not distributed with this
3 +// file, You can obtain one at https://mozilla.org/MPL/2.0/.
4 +
5 +(() => {
6 + const darkThemes = ['ayu', 'navy', 'coal'];
7 + const lightThemes = ['light', 'rust'];
8 +
9 + const classList = document.getElementsByTagName('html')[0].classList;
10 +
11 + let lastThemeWasLight = true;
12 + for (const cssClass of classList) {
13 + if (darkThemes.includes(cssClass)) {
14 + lastThemeWasLight = false;
15 + break;
16 + }
17 + }
18 +
19 + const theme = lastThemeWasLight ? 'default' : 'dark';
20 + mermaid.initialize({ startOnLoad: true, theme });
21 +
22 + // Simplest way to make mermaid re-render the diagrams in the new theme is via refreshing the page
23 +
24 + for (const darkTheme of darkThemes) {
25 + document.getElementById(darkTheme).addEventListener('click', () => {
26 + if (lastThemeWasLight) {
27 + window.location.reload();
28 + }
29 + });
30 + }
31 +
32 + for (const lightTheme of lightThemes) {
33 + document.getElementById(lightTheme).addEventListener('click', () => {
34 + if (!lastThemeWasLight) {
35 + window.location.reload();
36 + }
37 + });
38 + }
39 +})();
A book/toc-84dd2703.js
+454 -0
@@ -0,0 +1,454 @@
1 +// Populate the sidebar
2 +//
3 +// This is a script, and not included directly in the page, to control the total size of the book.
4 +// The TOC contains an entry for each page, so if each page includes a copy of the TOC,
5 +// the total size of the page becomes O(n**2).
6 +class MDBookSidebarScrollbox extends HTMLElement {
7 + constructor() {
8 + super();
9 + }
10 + connectedCallback() {
11 + this.innerHTML = '<ol class="chapter"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="introduction.html">Introduction</a></span></li><li class="chapter-item expanded "><li class="spacer"></li></li><li class="chapter-item expanded "><li class="part-title">Manuel utilisateur</li></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/index.html"><strong aria-hidden="true">1.</strong> Vue d&#39;ensemble</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/index.html"><strong aria-hidden="true">2.</strong> Tutoriels</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/01-premier-pas.html"><strong aria-hidden="true">2.1.</strong> 01 — Premier pas sur gitrust</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/02-cloner-pousser.html"><strong aria-hidden="true">2.2.</strong> 02 — Cloner et pousser du code</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/03-collaborer.html"><strong aria-hidden="true">2.3.</strong> 03 — Collaborer : équipes, issues, pull requests</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/04-automatiser-ci.html"><strong aria-hidden="true">2.4.</strong> 04 — Automatiser avec la CI</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/index.html"><strong aria-hidden="true">3.</strong> Guides pratiques</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/gerer-cles-ssh.html"><strong aria-hidden="true">3.1.</strong> Gérer ses clés SSH</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/configurer-2fa.html"><strong aria-hidden="true">3.2.</strong> Configurer la double authentification (2FA)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/creer-personal-access-token.html"><strong aria-hidden="true">3.3.</strong> Créer un Personal Access Token</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/gerer-equipes-permissions.html"><strong aria-hidden="true">3.4.</strong> Gérer les équipes et les permissions</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/ouvrir-pull-request.html"><strong aria-hidden="true">3.5.</strong> Ouvrir une pull request</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/fusionner-strategies.html"><strong aria-hidden="true">3.6.</strong> Stratégies de fusion (ff / squash / merge commit)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/utiliser-labels-issues.html"><strong aria-hidden="true">3.7.</strong> Utiliser les labels et les issues</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/importer-depot-externe.html"><strong aria-hidden="true">3.8.</strong> Importer un dépôt externe</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/consulter-sbom.html"><strong aria-hidden="true">3.9.</strong> Consulter le SBOM d&#39;un dépôt</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/index.html"><strong aria-hidden="true">4.</strong> Référence</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/modele-permissions.html"><strong aria-hidden="true">4.1.</strong> Modèle de permissions (4 rôles)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/api-rest-v1.html"><strong aria-hidden="true">4.2.</strong> API REST v1</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/gitrust-ci-yml-schema.html"><strong aria-hidden="true">4.3.</strong> Schéma du fichier .gitrust-ci.yml</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/markdown-et-syntaxe.html"><strong aria-hidden="true">4.4.</strong> Markdown et syntaxe supportée</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/notifications.html"><strong aria-hidden="true">4.5.</strong> Notifications</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/explanation/index.html"><strong aria-hidden="true">5.</strong> Explication</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/explanation/modele-collaboration.html"><strong aria-hidden="true">5.1.</strong> Modèle de collaboration sur gitrust</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/explanation/securite-utilisateur.html"><strong aria-hidden="true">5.2.</strong> Sécurité côté utilisateur</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/explanation/cycle-vie-pull-request.html"><strong aria-hidden="true">5.3.</strong> Cycle de vie d&#39;une pull request</a></span></li></ol><li class="chapter-item expanded "><li class="spacer"></li></li><li class="chapter-item expanded "><li class="part-title">Manuel d&#39;administration</li></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/index.html"><strong aria-hidden="true">6.</strong> Vue d&#39;ensemble</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/index.html"><strong aria-hidden="true">7.</strong> Tutoriels</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/01-installation-docker.html"><strong aria-hidden="true">7.1.</strong> 01 — Installation avec Docker</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/02-installation-systemd.html"><strong aria-hidden="true">7.2.</strong> 02 — Installation avec systemd</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/03-premier-demarrage.html"><strong aria-hidden="true">7.3.</strong> 03 — Premier démarrage</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/04-mise-en-production-192-168.html"><strong aria-hidden="true">7.4.</strong> 04 — Mise en production (réseau local)</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/index.html"><strong aria-hidden="true">8.</strong> Guides pratiques</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/sauvegarder-restaurer.html"><strong aria-hidden="true">8.1.</strong> Sauvegarder et restaurer</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/mettre-a-jour.html"><strong aria-hidden="true">8.2.</strong> Mettre à jour gitrust</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/configurer-smtp.html"><strong aria-hidden="true">8.3.</strong> Configurer SMTP</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/configurer-oauth.html"><strong aria-hidden="true">8.4.</strong> Configurer OAuth</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/configurer-ci-runner-remote.html"><strong aria-hidden="true">8.5.</strong> Configurer un runner CI distant</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/integrer-dependency-track.html"><strong aria-hidden="true">8.6.</strong> Intégrer Dependency-Track (SBOM)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/durcir-avec-fail2ban.html"><strong aria-hidden="true">8.7.</strong> Durcir avec Fail2ban</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/tuner-rate-limiting.html"><strong aria-hidden="true">8.8.</strong> Régler le rate limiting</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/forcer-2fa-globalement.html"><strong aria-hidden="true">8.9.</strong> Forcer le 2FA sur toute l&#39;instance</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/depanner-ssh.html"><strong aria-hidden="true">8.10.</strong> Dépanner SSH</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/depanner-ci.html"><strong aria-hidden="true">8.11.</strong> Dépanner la CI</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/gerer-utilisateurs-admin.html"><strong aria-hidden="true">8.12.</strong> Gérer les utilisateurs (panel /admin)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/auditer-instance.html"><strong aria-hidden="true">8.13.</strong> Auditer une instance</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/index.html"><strong aria-hidden="true">9.</strong> Référence</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/variables-environnement.html"><strong aria-hidden="true">9.1.</strong> Variables d&#39;environnement</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/parametres-dynamiques.html"><strong aria-hidden="true">9.2.</strong> Paramètres dynamiques</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/schema-base-de-donnees.html"><strong aria-hidden="true">9.3.</strong> Schéma de la base de données</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/ports-et-services.html"><strong aria-hidden="true">9.4.</strong> Ports et services</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/conformite-anssi-pa074.html"><strong aria-hidden="true">9.5.</strong> Conformité ANSSI PA-074</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/index.html"><strong aria-hidden="true">10.</strong> Explication</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/architecture-globale.html"><strong aria-hidden="true">10.1.</strong> Architecture globale</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/modele-deploiement.html"><strong aria-hidden="true">10.2.</strong> Modèle de déploiement</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/ci-dagger.html"><strong aria-hidden="true">10.3.</strong> CI Dagger : Easy Mode vs Power Mode</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/strategie-sauvegarde.html"><strong aria-hidden="true">10.4.</strong> Stratégie de sauvegarde</a></span></li></ol><li class="chapter-item expanded "><li class="spacer"></li></li><li class="chapter-item expanded "><li class="part-title">Manuel développeur</li></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/index.html"><strong aria-hidden="true">11.</strong> Vue d&#39;ensemble</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/tutorials/index.html"><strong aria-hidden="true">12.</strong> Tutoriels</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/tutorials/01-getting-started.html"><strong aria-hidden="true">12.1.</strong> 01 — Démarrer avec le code gitrust</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/tutorials/02-premiere-contribution.html"><strong aria-hidden="true">12.2.</strong> 02 — Première contribution</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/tutorials/03-creer-un-worker-async.html"><strong aria-hidden="true">12.3.</strong> 03 — Créer un worker async (capstone)</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/index.html"><strong aria-hidden="true">13.</strong> Guides pratiques</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/contribuer-workflow-pr.html"><strong aria-hidden="true">13.1.</strong> Workflow de contribution et PR</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/lancer-tests-unitaires.html"><strong aria-hidden="true">13.2.</strong> Lancer les tests unitaires</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/lancer-tests-e2e.html"><strong aria-hidden="true">13.3.</strong> Lancer les tests E2E</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/ajouter-route-web.html"><strong aria-hidden="true">13.4.</strong> Ajouter une route web</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/ajouter-service-metier.html"><strong aria-hidden="true">13.5.</strong> Ajouter un service métier</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/ajouter-migration-db.html"><strong aria-hidden="true">13.6.</strong> Ajouter une migration de base de données</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/implementer-webhooks.html"><strong aria-hidden="true">13.7.</strong> Implémenter des webhooks</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/implementer-endpoint-api.html"><strong aria-hidden="true">13.8.</strong> Implémenter un endpoint API</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/importer-depot-externe-code.html"><strong aria-hidden="true">13.9.</strong> Importer un dépôt externe (code)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/contribuer-a-rustwarden.html"><strong aria-hidden="true">13.10.</strong> Contribuer à rustwarden upstream</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/passer-la-qa-avant-merge.html"><strong aria-hidden="true">13.11.</strong> Passer la QA avant un merge</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/index.html"><strong aria-hidden="true">14.</strong> Référence</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/architecture-crates.html"><strong aria-hidden="true">14.1.</strong> Architecture des crates</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/services-api-interne.html"><strong aria-hidden="true">14.2.</strong> Services et API interne</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/schema-base-donnees.html"><strong aria-hidden="true">14.3.</strong> Schéma de la base de données</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/regles-qa-anssi.html"><strong aria-hidden="true">14.4.</strong> Règles QA et conformité ANSSI</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/api-rest-v1.html"><strong aria-hidden="true">14.5.</strong> API REST v1</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/git-hooks-post-receive.html"><strong aria-hidden="true">14.6.</strong> Hooks Git post-receive</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/rustwarden-core-api.html"><strong aria-hidden="true">14.7.</strong> API rustwarden-core</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/index.html"><strong aria-hidden="true">15.</strong> Explication</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/vue-ensemble-architecture.html"><strong aria-hidden="true">15.1.</strong> Vue d&#39;ensemble de l&#39;architecture</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/flux-requetes.html"><strong aria-hidden="true">15.2.</strong> Flux de requêtes</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/modele-permissions-rbac.html"><strong aria-hidden="true">15.3.</strong> Modèle de permissions RBAC</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/2fa-fonctionnement.html"><strong aria-hidden="true">15.4.</strong> Fonctionnement du 2FA</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/hierarchie-labels.html"><strong aria-hidden="true">15.5.</strong> Hiérarchie des labels</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/ci-dagger-easy-vs-power.html"><strong aria-hidden="true">15.6.</strong> CI Dagger : Easy Mode vs Power Mode</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/decisions-ui-htmx.html"><strong aria-hidden="true">15.7.</strong> Décisions UI (HTMX, DaisyUI)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/patron-worker-async.html"><strong aria-hidden="true">15.8.</strong> Patron worker async</a></span></li></ol><li class="chapter-item expanded "><li class="spacer"></li></li><li class="chapter-item expanded "><li class="part-title">Bibliothèque de templates</li></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="template/index.html"><strong aria-hidden="true">16.</strong> Catalogue des templates</a></span></li></ol>';
12 + // Set the current, active page, and reveal it if it's hidden
13 + let current_page = document.location.href.toString().split('#')[0].split('?')[0];
14 + if (current_page.endsWith('/')) {
15 + current_page += 'index.html';
16 + }
17 + const links = Array.prototype.slice.call(this.querySelectorAll('a'));
18 + const l = links.length;
19 + for (let i = 0; i < l; ++i) {
20 + const link = links[i];
21 + const href = link.getAttribute('href');
22 + if (href && !href.startsWith('#') && !/^(?:[a-z+]+:)?\/\//.test(href)) {
23 + link.href = path_to_root + href;
24 + }
25 + // The 'index' page is supposed to alias the first chapter in the book.
26 + if (link.href === current_page
27 + || i === 0
28 + && path_to_root === ''
29 + && current_page.endsWith('/index.html')) {
30 + link.classList.add('active');
31 + let parent = link.parentElement;
32 + while (parent) {
33 + if (parent.tagName === 'LI' && parent.classList.contains('chapter-item')) {
34 + parent.classList.add('expanded');
35 + }
36 + parent = parent.parentElement;
37 + }
38 + }
39 + }
40 + // Track and set sidebar scroll position
41 + this.addEventListener('click', e => {
42 + if (e.target.tagName === 'A') {
43 + const clientRect = e.target.getBoundingClientRect();
44 + const sidebarRect = this.getBoundingClientRect();
45 + sessionStorage.setItem('sidebar-scroll-offset', clientRect.top - sidebarRect.top);
46 + }
47 + }, { passive: true });
48 + const sidebarScrollOffset = sessionStorage.getItem('sidebar-scroll-offset');
49 + sessionStorage.removeItem('sidebar-scroll-offset');
50 + if (sidebarScrollOffset !== null) {
51 + // preserve sidebar scroll position when navigating via links within sidebar
52 + const activeSection = this.querySelector('.active');
53 + if (activeSection) {
54 + const clientRect = activeSection.getBoundingClientRect();
55 + const sidebarRect = this.getBoundingClientRect();
56 + const currentOffset = clientRect.top - sidebarRect.top;
57 + this.scrollTop += currentOffset - parseFloat(sidebarScrollOffset);
58 + }
59 + } else {
60 + // scroll sidebar to current active section when navigating via
61 + // 'next/previous chapter' buttons
62 + const activeSection = document.querySelector('#mdbook-sidebar .active');
63 + if (activeSection) {
64 + activeSection.scrollIntoView({ block: 'center' });
65 + }
66 + }
67 + // Toggle buttons
68 + const sidebarAnchorToggles = document.querySelectorAll('.chapter-fold-toggle');
69 + function toggleSection(ev) {
70 + ev.currentTarget.parentElement.parentElement.classList.toggle('expanded');
71 + }
72 + Array.from(sidebarAnchorToggles).forEach(el => {
73 + el.addEventListener('click', toggleSection);
74 + });
75 + }
76 +}
77 +window.customElements.define('mdbook-sidebar-scrollbox', MDBookSidebarScrollbox);
78 +
79 +
80 +// ---------------------------------------------------------------------------
81 +// Support for dynamically adding headers to the sidebar.
82 +
83 +(function() {
84 + // This is used to detect which direction the page has scrolled since the
85 + // last scroll event.
86 + let lastKnownScrollPosition = 0;
87 + // This is the threshold in px from the top of the screen where it will
88 + // consider a header the "current" header when scrolling down.
89 + const defaultDownThreshold = 150;
90 + // Same as defaultDownThreshold, except when scrolling up.
91 + const defaultUpThreshold = 300;
92 + // The threshold is a virtual horizontal line on the screen where it
93 + // considers the "current" header to be above the line. The threshold is
94 + // modified dynamically to handle headers that are near the bottom of the
95 + // screen, and to slightly offset the behavior when scrolling up vs down.
96 + let threshold = defaultDownThreshold;
97 + // This is used to disable updates while scrolling. This is needed when
98 + // clicking the header in the sidebar, which triggers a scroll event. It
99 + // is somewhat finicky to detect when the scroll has finished, so this
100 + // uses a relatively dumb system of disabling scroll updates for a short
101 + // time after the click.
102 + let disableScroll = false;
103 + // Array of header elements on the page.
104 + let headers;
105 + // Array of li elements that are initially collapsed headers in the sidebar.
106 + // I'm not sure why eslint seems to have a false positive here.
107 + // eslint-disable-next-line prefer-const
108 + let headerToggles = [];
109 + // This is a debugging tool for the threshold which you can enable in the console.
110 + let thresholdDebug = false;
111 +
112 + // Updates the threshold based on the scroll position.
113 + function updateThreshold() {
114 + const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
115 + const windowHeight = window.innerHeight;
116 + const documentHeight = document.documentElement.scrollHeight;
117 +
118 + // The number of pixels below the viewport, at most documentHeight.
119 + // This is used to push the threshold down to the bottom of the page
120 + // as the user scrolls towards the bottom.
121 + const pixelsBelow = Math.max(0, documentHeight - (scrollTop + windowHeight));
122 + // The number of pixels above the viewport, at least defaultDownThreshold.
123 + // Similar to pixelsBelow, this is used to push the threshold back towards
124 + // the top when reaching the top of the page.
125 + const pixelsAbove = Math.max(0, defaultDownThreshold - scrollTop);
126 + // How much the threshold should be offset once it gets close to the
127 + // bottom of the page.
128 + const bottomAdd = Math.max(0, windowHeight - pixelsBelow - defaultDownThreshold);
129 + let adjustedBottomAdd = bottomAdd;
130 +
131 + // Adjusts bottomAdd for a small document. The calculation above
132 + // assumes the document is at least twice the windowheight in size. If
133 + // it is less than that, then bottomAdd needs to be shrunk
134 + // proportional to the difference in size.
135 + if (documentHeight < windowHeight * 2) {
136 + const maxPixelsBelow = documentHeight - windowHeight;
137 + const t = 1 - pixelsBelow / Math.max(1, maxPixelsBelow);
138 + const clamp = Math.max(0, Math.min(1, t));
139 + adjustedBottomAdd *= clamp;
140 + }
141 +
142 + let scrollingDown = true;
143 + if (scrollTop < lastKnownScrollPosition) {
144 + scrollingDown = false;
145 + }
146 +
147 + if (scrollingDown) {
148 + // When scrolling down, move the threshold up towards the default
149 + // downwards threshold position. If near the bottom of the page,
150 + // adjustedBottomAdd will offset the threshold towards the bottom
151 + // of the page.
152 + const amountScrolledDown = scrollTop - lastKnownScrollPosition;
153 + const adjustedDefault = defaultDownThreshold + adjustedBottomAdd;
154 + threshold = Math.max(adjustedDefault, threshold - amountScrolledDown);
155 + } else {
156 + // When scrolling up, move the threshold down towards the default
157 + // upwards threshold position. If near the bottom of the page,
158 + // quickly transition the threshold back up where it normally
159 + // belongs.
160 + const amountScrolledUp = lastKnownScrollPosition - scrollTop;
161 + const adjustedDefault = defaultUpThreshold - pixelsAbove
162 + + Math.max(0, adjustedBottomAdd - defaultDownThreshold);
163 + threshold = Math.min(adjustedDefault, threshold + amountScrolledUp);
164 + }
165 +
166 + if (documentHeight <= windowHeight) {
167 + threshold = 0;
168 + }
169 +
170 + if (thresholdDebug) {
171 + const id = 'mdbook-threshold-debug-data';
172 + let data = document.getElementById(id);
173 + if (data === null) {
174 + data = document.createElement('div');
175 + data.id = id;
176 + data.style.cssText = `
177 + position: fixed;
178 + top: 50px;
179 + right: 10px;
180 + background-color: 0xeeeeee;
181 + z-index: 9999;
182 + pointer-events: none;
183 + `;
184 + document.body.appendChild(data);
185 + }
186 + data.innerHTML = `
187 + <table>
188 + <tr><td>documentHeight</td><td>${documentHeight.toFixed(1)}</td></tr>
189 + <tr><td>windowHeight</td><td>${windowHeight.toFixed(1)}</td></tr>
190 + <tr><td>scrollTop</td><td>${scrollTop.toFixed(1)}</td></tr>
191 + <tr><td>pixelsAbove</td><td>${pixelsAbove.toFixed(1)}</td></tr>
192 + <tr><td>pixelsBelow</td><td>${pixelsBelow.toFixed(1)}</td></tr>
193 + <tr><td>bottomAdd</td><td>${bottomAdd.toFixed(1)}</td></tr>
194 + <tr><td>adjustedBottomAdd</td><td>${adjustedBottomAdd.toFixed(1)}</td></tr>
195 + <tr><td>scrollingDown</td><td>${scrollingDown}</td></tr>
196 + <tr><td>threshold</td><td>${threshold.toFixed(1)}</td></tr>
197 + </table>
198 + `;
199 + drawDebugLine();
200 + }
201 +
202 + lastKnownScrollPosition = scrollTop;
203 + }
204 +
205 + function drawDebugLine() {
206 + if (!document.body) {
207 + return;
208 + }
209 + const id = 'mdbook-threshold-debug-line';
210 + const existingLine = document.getElementById(id);
211 + if (existingLine) {
212 + existingLine.remove();
213 + }
214 + const line = document.createElement('div');
215 + line.id = id;
216 + line.style.cssText = `
217 + position: fixed;
218 + top: ${threshold}px;
219 + left: 0;
220 + width: 100vw;
221 + height: 2px;
222 + background-color: red;
223 + z-index: 9999;
224 + pointer-events: none;
225 + `;
226 + document.body.appendChild(line);
227 + }
228 +
229 + function mdbookEnableThresholdDebug() {
230 + thresholdDebug = true;
231 + updateThreshold();
232 + drawDebugLine();
233 + }
234 +
235 + window.mdbookEnableThresholdDebug = mdbookEnableThresholdDebug;
236 +
237 + // Updates which headers in the sidebar should be expanded. If the current
238 + // header is inside a collapsed group, then it, and all its parents should
239 + // be expanded.
240 + function updateHeaderExpanded(currentA) {
241 + // Add expanded to all header-item li ancestors.
242 + let current = currentA.parentElement;
243 + while (current) {
244 + if (current.tagName === 'LI' && current.classList.contains('header-item')) {
245 + current.classList.add('expanded');
246 + }
247 + current = current.parentElement;
248 + }
249 + }
250 +
251 + // Updates which header is marked as the "current" header in the sidebar.
252 + // This is done with a virtual Y threshold, where headers at or below
253 + // that line will be considered the current one.
254 + function updateCurrentHeader() {
255 + if (!headers || !headers.length) {
256 + return;
257 + }
258 +
259 + // Reset the classes, which will be rebuilt below.
260 + const els = document.getElementsByClassName('current-header');
261 + for (const el of els) {
262 + el.classList.remove('current-header');
263 + }
264 + for (const toggle of headerToggles) {
265 + toggle.classList.remove('expanded');
266 + }
267 +
268 + // Find the last header that is above the threshold.
269 + let lastHeader = null;
270 + for (const header of headers) {
271 + const rect = header.getBoundingClientRect();
272 + if (rect.top <= threshold) {
273 + lastHeader = header;
274 + } else {
275 + break;
276 + }
277 + }
278 + if (lastHeader === null) {
279 + lastHeader = headers[0];
280 + const rect = lastHeader.getBoundingClientRect();
281 + const windowHeight = window.innerHeight;
282 + if (rect.top >= windowHeight) {
283 + return;
284 + }
285 + }
286 +
287 + // Get the anchor in the summary.
288 + const href = '#' + lastHeader.id;
289 + const a = [...document.querySelectorAll('.header-in-summary')]
290 + .find(element => element.getAttribute('href') === href);
291 + if (!a) {
292 + return;
293 + }
294 +
295 + a.classList.add('current-header');
296 +
297 + updateHeaderExpanded(a);
298 + }
299 +
300 + // Updates which header is "current" based on the threshold line.
301 + function reloadCurrentHeader() {
302 + if (disableScroll) {
303 + return;
304 + }
305 + updateThreshold();
306 + updateCurrentHeader();
307 + }
308 +
309 +
310 + // When clicking on a header in the sidebar, this adjusts the threshold so
311 + // that it is located next to the header. This is so that header becomes
312 + // "current".
313 + function headerThresholdClick(event) {
314 + // See disableScroll description why this is done.
315 + disableScroll = true;
316 + setTimeout(() => {
317 + disableScroll = false;
318 + }, 100);
319 + // requestAnimationFrame is used to delay the update of the "current"
320 + // header until after the scroll is done, and the header is in the new
321 + // position.
322 + requestAnimationFrame(() => {
323 + requestAnimationFrame(() => {
324 + // Closest is needed because if it has child elements like <code>.
325 + const a = event.target.closest('a');
326 + const href = a.getAttribute('href');
327 + const targetId = href.substring(1);
328 + const targetElement = document.getElementById(targetId);
329 + if (targetElement) {
330 + threshold = targetElement.getBoundingClientRect().bottom;
331 + updateCurrentHeader();
332 + }
333 + });
334 + });
335 + }
336 +
337 + // Takes the nodes from the given head and copies them over to the
338 + // destination, along with some filtering.
339 + function filterHeader(source, dest) {
340 + const clone = source.cloneNode(true);
341 + clone.querySelectorAll('mark').forEach(mark => {
342 + mark.replaceWith(...mark.childNodes);
343 + });
344 + dest.append(...clone.childNodes);
345 + }
346 +
347 + // Scans page for headers and adds them to the sidebar.
348 + document.addEventListener('DOMContentLoaded', function() {
349 + const activeSection = document.querySelector('#mdbook-sidebar .active');
350 + if (activeSection === null) {
351 + return;
352 + }
353 +
354 + const main = document.getElementsByTagName('main')[0];
355 + headers = Array.from(main.querySelectorAll('h2, h3, h4, h5, h6'))
356 + .filter(h => h.id !== '' && h.children.length && h.children[0].tagName === 'A');
357 +
358 + if (headers.length === 0) {
359 + return;
360 + }
361 +
362 + // Build a tree of headers in the sidebar.
363 +
364 + const stack = [];
365 +
366 + const firstLevel = parseInt(headers[0].tagName.charAt(1));
367 + for (let i = 1; i < firstLevel; i++) {
368 + const ol = document.createElement('ol');
369 + ol.classList.add('section');
370 + if (stack.length > 0) {
371 + stack[stack.length - 1].ol.appendChild(ol);
372 + }
373 + stack.push({level: i + 1, ol: ol});
374 + }
375 +
376 + // The level where it will start folding deeply nested headers.
377 + const foldLevel = 3;
378 +
379 + for (let i = 0; i < headers.length; i++) {
380 + const header = headers[i];
381 + const level = parseInt(header.tagName.charAt(1));
382 +
383 + const currentLevel = stack[stack.length - 1].level;
384 + if (level > currentLevel) {
385 + // Begin nesting to this level.
386 + for (let nextLevel = currentLevel + 1; nextLevel <= level; nextLevel++) {
387 + const ol = document.createElement('ol');
388 + ol.classList.add('section');
389 + const last = stack[stack.length - 1];
390 + const lastChild = last.ol.lastChild;
391 + // Handle the case where jumping more than one nesting
392 + // level, which doesn't have a list item to place this new
393 + // list inside of.
394 + if (lastChild) {
395 + lastChild.appendChild(ol);
396 + } else {
397 + last.ol.appendChild(ol);
398 + }
399 + stack.push({level: nextLevel, ol: ol});
400 + }
401 + } else if (level < currentLevel) {
402 + while (stack.length > 1 && stack[stack.length - 1].level > level) {
403 + stack.pop();
404 + }
405 + }
406 +
407 + const li = document.createElement('li');
408 + li.classList.add('header-item');
409 + li.classList.add('expanded');
410 + if (level < foldLevel) {
411 + li.classList.add('expanded');
412 + }
413 + const span = document.createElement('span');
414 + span.classList.add('chapter-link-wrapper');
415 + const a = document.createElement('a');
416 + span.appendChild(a);
417 + a.href = '#' + header.id;
418 + a.classList.add('header-in-summary');
419 + filterHeader(header.children[0], a);
420 + a.addEventListener('click', headerThresholdClick);
421 + const nextHeader = headers[i + 1];
422 + if (nextHeader !== undefined) {
423 + const nextLevel = parseInt(nextHeader.tagName.charAt(1));
424 + if (nextLevel > level && level >= foldLevel) {
425 + const toggle = document.createElement('a');
426 + toggle.classList.add('chapter-fold-toggle');
427 + toggle.classList.add('header-toggle');
428 + toggle.addEventListener('click', () => {
429 + li.classList.toggle('expanded');
430 + });
431 + const toggleDiv = document.createElement('div');
432 + toggleDiv.textContent = '❱';
433 + toggle.appendChild(toggleDiv);
434 + span.appendChild(toggle);
435 + headerToggles.push(li);
436 + }
437 + }
438 + li.appendChild(span);
439 +
440 + const currentParent = stack[stack.length - 1];
441 + currentParent.ol.appendChild(li);
442 + }
443 +
444 + const onThisPage = document.createElement('div');
445 + onThisPage.classList.add('on-this-page');
446 + onThisPage.append(stack[0].ol);
447 + const activeItemSpan = activeSection.parentElement;
448 + activeItemSpan.after(onThisPage);
449 + });
450 +
451 + document.addEventListener('DOMContentLoaded', reloadCurrentHeader);
452 + document.addEventListener('scroll', reloadCurrentHeader, { passive: true });
453 +})();
454 +
A book/toc.html
+31 -0
@@ -0,0 +1,31 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light" dir="ltr">
3 + <head>
4 + <!-- sidebar iframe generated using mdBook
5 +
6 + This is a frame, and not included directly in the page, to control the total size of the
7 + book. The TOC contains an entry for each page, so if each page includes a copy of the TOC,
8 + the total size of the page becomes O(n**2).
9 +
10 + The frame is only used as a fallback when JS is turned off. When it's on, the sidebar is
11 + instead added to the main page by `toc.js` instead. The JavaScript mode is better
12 + because, when running in a `file:///` URL, the iframed page would not be Same-Origin as
13 + the rest of the page, so the sidebar and the main page theme would fall out of sync.
14 + -->
15 + <meta charset="UTF-8">
16 + <meta name="robots" content="noindex">
17 + <!-- Custom HTML head -->
18 + <meta name="viewport" content="width=device-width, initial-scale=1">
19 + <meta name="theme-color" content="#ffffff">
20 + <link rel="stylesheet" href="css/variables-8adf115d.css">
21 + <link rel="stylesheet" href="css/general-2459343d.css">
22 + <link rel="stylesheet" href="css/chrome-ae938929.css">
23 + <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
24 + <!-- Fonts -->
25 + <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
26 + <!-- Custom theme stylesheets -->
27 + </head>
28 + <body class="sidebar-iframe-inner">
29 + <ol class="chapter"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="introduction.html" target="_parent">Introduction</a></span></li><li class="chapter-item expanded "><li class="spacer"></li></li><li class="chapter-item expanded "><li class="part-title">Manuel utilisateur</li></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/index.html" target="_parent"><strong aria-hidden="true">1.</strong> Vue d&#39;ensemble</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/index.html" target="_parent"><strong aria-hidden="true">2.</strong> Tutoriels</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/01-premier-pas.html" target="_parent"><strong aria-hidden="true">2.1.</strong> 01 — Premier pas sur gitrust</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/02-cloner-pousser.html" target="_parent"><strong aria-hidden="true">2.2.</strong> 02 — Cloner et pousser du code</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/03-collaborer.html" target="_parent"><strong aria-hidden="true">2.3.</strong> 03 — Collaborer : équipes, issues, pull requests</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/tutorials/04-automatiser-ci.html" target="_parent"><strong aria-hidden="true">2.4.</strong> 04 — Automatiser avec la CI</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/index.html" target="_parent"><strong aria-hidden="true">3.</strong> Guides pratiques</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/gerer-cles-ssh.html" target="_parent"><strong aria-hidden="true">3.1.</strong> Gérer ses clés SSH</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/configurer-2fa.html" target="_parent"><strong aria-hidden="true">3.2.</strong> Configurer la double authentification (2FA)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/creer-personal-access-token.html" target="_parent"><strong aria-hidden="true">3.3.</strong> Créer un Personal Access Token</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/gerer-equipes-permissions.html" target="_parent"><strong aria-hidden="true">3.4.</strong> Gérer les équipes et les permissions</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/ouvrir-pull-request.html" target="_parent"><strong aria-hidden="true">3.5.</strong> Ouvrir une pull request</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/fusionner-strategies.html" target="_parent"><strong aria-hidden="true">3.6.</strong> Stratégies de fusion (ff / squash / merge commit)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/utiliser-labels-issues.html" target="_parent"><strong aria-hidden="true">3.7.</strong> Utiliser les labels et les issues</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/importer-depot-externe.html" target="_parent"><strong aria-hidden="true">3.8.</strong> Importer un dépôt externe</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/how-to/consulter-sbom.html" target="_parent"><strong aria-hidden="true">3.9.</strong> Consulter le SBOM d&#39;un dépôt</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/index.html" target="_parent"><strong aria-hidden="true">4.</strong> Référence</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/modele-permissions.html" target="_parent"><strong aria-hidden="true">4.1.</strong> Modèle de permissions (4 rôles)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/api-rest-v1.html" target="_parent"><strong aria-hidden="true">4.2.</strong> API REST v1</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/gitrust-ci-yml-schema.html" target="_parent"><strong aria-hidden="true">4.3.</strong> Schéma du fichier .gitrust-ci.yml</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/markdown-et-syntaxe.html" target="_parent"><strong aria-hidden="true">4.4.</strong> Markdown et syntaxe supportée</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/reference/notifications.html" target="_parent"><strong aria-hidden="true">4.5.</strong> Notifications</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/explanation/index.html" target="_parent"><strong aria-hidden="true">5.</strong> Explication</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/explanation/modele-collaboration.html" target="_parent"><strong aria-hidden="true">5.1.</strong> Modèle de collaboration sur gitrust</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/explanation/securite-utilisateur.html" target="_parent"><strong aria-hidden="true">5.2.</strong> Sécurité côté utilisateur</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="user_manual/explanation/cycle-vie-pull-request.html" target="_parent"><strong aria-hidden="true">5.3.</strong> Cycle de vie d&#39;une pull request</a></span></li></ol><li class="chapter-item expanded "><li class="spacer"></li></li><li class="chapter-item expanded "><li class="part-title">Manuel d&#39;administration</li></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/index.html" target="_parent"><strong aria-hidden="true">6.</strong> Vue d&#39;ensemble</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/index.html" target="_parent"><strong aria-hidden="true">7.</strong> Tutoriels</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/01-installation-docker.html" target="_parent"><strong aria-hidden="true">7.1.</strong> 01 — Installation avec Docker</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/02-installation-systemd.html" target="_parent"><strong aria-hidden="true">7.2.</strong> 02 — Installation avec systemd</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/03-premier-demarrage.html" target="_parent"><strong aria-hidden="true">7.3.</strong> 03 — Premier démarrage</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/tutorials/04-mise-en-production-192-168.html" target="_parent"><strong aria-hidden="true">7.4.</strong> 04 — Mise en production (réseau local)</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/index.html" target="_parent"><strong aria-hidden="true">8.</strong> Guides pratiques</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/sauvegarder-restaurer.html" target="_parent"><strong aria-hidden="true">8.1.</strong> Sauvegarder et restaurer</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/mettre-a-jour.html" target="_parent"><strong aria-hidden="true">8.2.</strong> Mettre à jour gitrust</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/configurer-smtp.html" target="_parent"><strong aria-hidden="true">8.3.</strong> Configurer SMTP</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/configurer-oauth.html" target="_parent"><strong aria-hidden="true">8.4.</strong> Configurer OAuth</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/configurer-ci-runner-remote.html" target="_parent"><strong aria-hidden="true">8.5.</strong> Configurer un runner CI distant</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/integrer-dependency-track.html" target="_parent"><strong aria-hidden="true">8.6.</strong> Intégrer Dependency-Track (SBOM)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/durcir-avec-fail2ban.html" target="_parent"><strong aria-hidden="true">8.7.</strong> Durcir avec Fail2ban</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/tuner-rate-limiting.html" target="_parent"><strong aria-hidden="true">8.8.</strong> Régler le rate limiting</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/forcer-2fa-globalement.html" target="_parent"><strong aria-hidden="true">8.9.</strong> Forcer le 2FA sur toute l&#39;instance</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/depanner-ssh.html" target="_parent"><strong aria-hidden="true">8.10.</strong> Dépanner SSH</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/depanner-ci.html" target="_parent"><strong aria-hidden="true">8.11.</strong> Dépanner la CI</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/gerer-utilisateurs-admin.html" target="_parent"><strong aria-hidden="true">8.12.</strong> Gérer les utilisateurs (panel /admin)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/how-to/auditer-instance.html" target="_parent"><strong aria-hidden="true">8.13.</strong> Auditer une instance</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/index.html" target="_parent"><strong aria-hidden="true">9.</strong> Référence</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/variables-environnement.html" target="_parent"><strong aria-hidden="true">9.1.</strong> Variables d&#39;environnement</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/parametres-dynamiques.html" target="_parent"><strong aria-hidden="true">9.2.</strong> Paramètres dynamiques</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/schema-base-de-donnees.html" target="_parent"><strong aria-hidden="true">9.3.</strong> Schéma de la base de données</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/ports-et-services.html" target="_parent"><strong aria-hidden="true">9.4.</strong> Ports et services</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/reference/conformite-anssi-pa074.html" target="_parent"><strong aria-hidden="true">9.5.</strong> Conformité ANSSI PA-074</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/index.html" target="_parent"><strong aria-hidden="true">10.</strong> Explication</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/architecture-globale.html" target="_parent"><strong aria-hidden="true">10.1.</strong> Architecture globale</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/modele-deploiement.html" target="_parent"><strong aria-hidden="true">10.2.</strong> Modèle de déploiement</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/ci-dagger.html" target="_parent"><strong aria-hidden="true">10.3.</strong> CI Dagger : Easy Mode vs Power Mode</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="administration_manual/explanation/strategie-sauvegarde.html" target="_parent"><strong aria-hidden="true">10.4.</strong> Stratégie de sauvegarde</a></span></li></ol><li class="chapter-item expanded "><li class="spacer"></li></li><li class="chapter-item expanded "><li class="part-title">Manuel développeur</li></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/index.html" target="_parent"><strong aria-hidden="true">11.</strong> Vue d&#39;ensemble</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/tutorials/index.html" target="_parent"><strong aria-hidden="true">12.</strong> Tutoriels</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/tutorials/01-getting-started.html" target="_parent"><strong aria-hidden="true">12.1.</strong> 01 — Démarrer avec le code gitrust</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/tutorials/02-premiere-contribution.html" target="_parent"><strong aria-hidden="true">12.2.</strong> 02 — Première contribution</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/tutorials/03-creer-un-worker-async.html" target="_parent"><strong aria-hidden="true">12.3.</strong> 03 — Créer un worker async (capstone)</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/index.html" target="_parent"><strong aria-hidden="true">13.</strong> Guides pratiques</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/contribuer-workflow-pr.html" target="_parent"><strong aria-hidden="true">13.1.</strong> Workflow de contribution et PR</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/lancer-tests-unitaires.html" target="_parent"><strong aria-hidden="true">13.2.</strong> Lancer les tests unitaires</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/lancer-tests-e2e.html" target="_parent"><strong aria-hidden="true">13.3.</strong> Lancer les tests E2E</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/ajouter-route-web.html" target="_parent"><strong aria-hidden="true">13.4.</strong> Ajouter une route web</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/ajouter-service-metier.html" target="_parent"><strong aria-hidden="true">13.5.</strong> Ajouter un service métier</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/ajouter-migration-db.html" target="_parent"><strong aria-hidden="true">13.6.</strong> Ajouter une migration de base de données</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/implementer-webhooks.html" target="_parent"><strong aria-hidden="true">13.7.</strong> Implémenter des webhooks</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/implementer-endpoint-api.html" target="_parent"><strong aria-hidden="true">13.8.</strong> Implémenter un endpoint API</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/importer-depot-externe-code.html" target="_parent"><strong aria-hidden="true">13.9.</strong> Importer un dépôt externe (code)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/contribuer-a-rustwarden.html" target="_parent"><strong aria-hidden="true">13.10.</strong> Contribuer à rustwarden upstream</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/how-to/passer-la-qa-avant-merge.html" target="_parent"><strong aria-hidden="true">13.11.</strong> Passer la QA avant un merge</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/index.html" target="_parent"><strong aria-hidden="true">14.</strong> Référence</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/architecture-crates.html" target="_parent"><strong aria-hidden="true">14.1.</strong> Architecture des crates</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/services-api-interne.html" target="_parent"><strong aria-hidden="true">14.2.</strong> Services et API interne</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/schema-base-donnees.html" target="_parent"><strong aria-hidden="true">14.3.</strong> Schéma de la base de données</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/regles-qa-anssi.html" target="_parent"><strong aria-hidden="true">14.4.</strong> Règles QA et conformité ANSSI</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/api-rest-v1.html" target="_parent"><strong aria-hidden="true">14.5.</strong> API REST v1</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/git-hooks-post-receive.html" target="_parent"><strong aria-hidden="true">14.6.</strong> Hooks Git post-receive</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/reference/rustwarden-core-api.html" target="_parent"><strong aria-hidden="true">14.7.</strong> API rustwarden-core</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/index.html" target="_parent"><strong aria-hidden="true">15.</strong> Explication</a></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/vue-ensemble-architecture.html" target="_parent"><strong aria-hidden="true">15.1.</strong> Vue d&#39;ensemble de l&#39;architecture</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/flux-requetes.html" target="_parent"><strong aria-hidden="true">15.2.</strong> Flux de requêtes</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/modele-permissions-rbac.html" target="_parent"><strong aria-hidden="true">15.3.</strong> Modèle de permissions RBAC</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/2fa-fonctionnement.html" target="_parent"><strong aria-hidden="true">15.4.</strong> Fonctionnement du 2FA</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/hierarchie-labels.html" target="_parent"><strong aria-hidden="true">15.5.</strong> Hiérarchie des labels</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/ci-dagger-easy-vs-power.html" target="_parent"><strong aria-hidden="true">15.6.</strong> CI Dagger : Easy Mode vs Power Mode</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/decisions-ui-htmx.html" target="_parent"><strong aria-hidden="true">15.7.</strong> Décisions UI (HTMX, DaisyUI)</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="developer_manual/explanation/patron-worker-async.html" target="_parent"><strong aria-hidden="true">15.8.</strong> Patron worker async</a></span></li></ol><li class="chapter-item expanded "><li class="spacer"></li></li><li class="chapter-item expanded "><li class="part-title">Bibliothèque de templates</li></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="template/index.html" target="_parent"><strong aria-hidden="true">16.</strong> Catalogue des templates</a></span></li></ol>
30 + </body>
31 +</html>
A book/tomorrow-night-4c0ae647.css
+104 -0
@@ -0,0 +1,104 @@
1 +/* Tomorrow Night Theme */
2 +/* https://github.com/jmblog/color-themes-for-highlightjs */
3 +/* Original theme - https://github.com/chriskempson/tomorrow-theme */
4 +/* https://github.com/jmblog/color-themes-for-highlightjs */
5 +
6 +/* Tomorrow Comment */
7 +.hljs-comment {
8 + color: #969896;
9 +}
10 +
11 +/* Tomorrow Red */
12 +.hljs-variable,
13 +.hljs-attribute,
14 +.hljs-attr,
15 +.hljs-tag,
16 +.hljs-regexp,
17 +.ruby .hljs-constant,
18 +.xml .hljs-tag .hljs-title,
19 +.xml .hljs-pi,
20 +.xml .hljs-doctype,
21 +.html .hljs-doctype,
22 +.css .hljs-id,
23 +.css .hljs-class,
24 +.css .hljs-pseudo {
25 + color: #cc6666;
26 +}
27 +
28 +/* Tomorrow Orange */
29 +.hljs-number,
30 +.hljs-preprocessor,
31 +.hljs-pragma,
32 +.hljs-built_in,
33 +.hljs-literal,
34 +.hljs-params,
35 +.hljs-constant {
36 + color: #de935f;
37 +}
38 +
39 +/* Tomorrow Yellow */
40 +.ruby .hljs-class .hljs-title,
41 +.css .hljs-rule .hljs-attribute {
42 + color: #f0c674;
43 +}
44 +
45 +/* Tomorrow Green */
46 +.hljs-string,
47 +.hljs-value,
48 +.hljs-inheritance,
49 +.hljs-header,
50 +.hljs-name,
51 +.ruby .hljs-symbol,
52 +.xml .hljs-cdata {
53 + color: #b5bd68;
54 +}
55 +
56 +/* Tomorrow Aqua */
57 +.hljs-title,
58 +.hljs-section,
59 +.css .hljs-hexcolor {
60 + color: #8abeb7;
61 +}
62 +
63 +/* Tomorrow Blue */
64 +.hljs-function,
65 +.python .hljs-decorator,
66 +.python .hljs-title,
67 +.ruby .hljs-function .hljs-title,
68 +.ruby .hljs-title .hljs-keyword,
69 +.perl .hljs-sub,
70 +.javascript .hljs-title,
71 +.coffeescript .hljs-title {
72 + color: #81a2be;
73 +}
74 +
75 +/* Tomorrow Purple */
76 +.hljs-keyword,
77 +.javascript .hljs-function {
78 + color: #b294bb;
79 +}
80 +
81 +.hljs {
82 + display: block;
83 + overflow-x: auto;
84 + background: #1d1f21;
85 + color: #c5c8c6;
86 +}
87 +
88 +.coffeescript .javascript,
89 +.javascript .xml,
90 +.tex .hljs-formula,
91 +.xml .javascript,
92 +.xml .vbscript,
93 +.xml .css,
94 +.xml .hljs-cdata {
95 + opacity: 0.5;
96 +}
97 +
98 +.hljs-addition {
99 + color: #718c00;
100 +}
101 +
102 +.hljs-deletion {
103 + color: #c82829;
104 +}
A book/user_manual/explanation/cycle-vie-pull-request.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Cycle de vie d&#x27;une pull request - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/explanation/cycle-vie-pull-request.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="cycle-de-vie-dune-pull-request"><a class="header" href="#cycle-de-vie-dune-pull-request">Cycle de vie d’une pull request</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/explanation/securite-utilisateur.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../administration_manual/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/explanation/securite-utilisateur.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../administration_manual/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/explanation/index.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Explication - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/explanation/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="explication"><a class="header" href="#explication">Explication</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/reference/notifications.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/explanation/modele-collaboration.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/reference/notifications.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/explanation/modele-collaboration.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/explanation/modele-collaboration.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Modèle de collaboration sur gitrust - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/explanation/modele-collaboration.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="modèle-de-collaboration-sur-gitrust"><a class="header" href="#modèle-de-collaboration-sur-gitrust">Modèle de collaboration sur gitrust</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/explanation/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/explanation/securite-utilisateur.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/explanation/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/explanation/securite-utilisateur.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/explanation/securite-utilisateur.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Sécurité côté utilisateur - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/explanation/securite-utilisateur.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="sécurité-côté-utilisateur"><a class="header" href="#sécurité-côté-utilisateur">Sécurité côté utilisateur</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/explanation/modele-collaboration.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/explanation/cycle-vie-pull-request.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/explanation/modele-collaboration.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/explanation/cycle-vie-pull-request.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/how-to/configurer-2fa.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Configurer la double authentification (2FA) - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/configurer-2fa.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="configurer-la-double-authentification-2fa"><a class="header" href="#configurer-la-double-authentification-2fa">Configurer la double authentification (2FA)</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/how-to/gerer-cles-ssh.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/how-to/creer-personal-access-token.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/how-to/gerer-cles-ssh.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/how-to/creer-personal-access-token.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/how-to/consulter-sbom.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Consulter le SBOM d&#x27;un dépôt - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/consulter-sbom.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="consulter-le-sbom-dun-dépôt"><a class="header" href="#consulter-le-sbom-dun-dépôt">Consulter le SBOM d’un dépôt</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/how-to/importer-depot-externe.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/reference/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/how-to/importer-depot-externe.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/reference/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/how-to/creer-personal-access-token.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Créer un Personal Access Token - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/creer-personal-access-token.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="créer-un-personal-access-token"><a class="header" href="#créer-un-personal-access-token">Créer un Personal Access Token</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/how-to/configurer-2fa.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/how-to/gerer-equipes-permissions.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/how-to/configurer-2fa.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/how-to/gerer-equipes-permissions.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/how-to/fusionner-strategies.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Stratégies de fusion (ff / squash / merge commit) - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/fusionner-strategies.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="stratégies-de-fusion-ff--squash--merge-commit"><a class="header" href="#stratégies-de-fusion-ff--squash--merge-commit">Stratégies de fusion (ff / squash / merge commit)</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/how-to/ouvrir-pull-request.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/how-to/utiliser-labels-issues.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/how-to/ouvrir-pull-request.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/how-to/utiliser-labels-issues.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/how-to/gerer-cles-ssh.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Gérer ses clés SSH - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/gerer-cles-ssh.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="gérer-ses-clés-ssh"><a class="header" href="#gérer-ses-clés-ssh">Gérer ses clés SSH</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/how-to/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/how-to/configurer-2fa.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/how-to/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/how-to/configurer-2fa.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/how-to/gerer-equipes-permissions.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Gérer les équipes et les permissions - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/gerer-equipes-permissions.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="gérer-les-équipes-et-les-permissions"><a class="header" href="#gérer-les-équipes-et-les-permissions">Gérer les équipes et les permissions</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/how-to/creer-personal-access-token.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/how-to/ouvrir-pull-request.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/how-to/creer-personal-access-token.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/how-to/ouvrir-pull-request.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/how-to/importer-depot-externe.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Importer un dépôt externe - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/importer-depot-externe.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="importer-un-dépôt-externe"><a class="header" href="#importer-un-dépôt-externe">Importer un dépôt externe</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/how-to/utiliser-labels-issues.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/how-to/consulter-sbom.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/how-to/utiliser-labels-issues.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/how-to/consulter-sbom.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/how-to/index.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Guides pratiques - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="guides-pratiques"><a class="header" href="#guides-pratiques">Guides pratiques</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/tutorials/04-automatiser-ci.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/how-to/gerer-cles-ssh.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/tutorials/04-automatiser-ci.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/how-to/gerer-cles-ssh.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/how-to/ouvrir-pull-request.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Ouvrir une pull request - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/ouvrir-pull-request.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="ouvrir-une-pull-request"><a class="header" href="#ouvrir-une-pull-request">Ouvrir une pull request</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/how-to/gerer-equipes-permissions.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/how-to/fusionner-strategies.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/how-to/gerer-equipes-permissions.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/how-to/fusionner-strategies.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/how-to/utiliser-labels-issues.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Utiliser les labels et les issues - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/how-to/utiliser-labels-issues.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="utiliser-les-labels-et-les-issues"><a class="header" href="#utiliser-les-labels-et-les-issues">Utiliser les labels et les issues</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/how-to/fusionner-strategies.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/how-to/importer-depot-externe.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/how-to/fusionner-strategies.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/how-to/importer-depot-externe.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/index.html
+302 -0
@@ -0,0 +1,302 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Vue d&#x27;ensemble - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="manuel-utilisateur"><a class="header" href="#manuel-utilisateur">Manuel utilisateur</a></h1>
181 +<p>Ce manuel t’accompagne depuis ta première connexion à une instance gitrust jusqu’à l’autonomie complète : pousser du code, collaborer via les pull requests, gérer les issues et automatiser tes workflows avec la CI intégrée. Tu n’as pas besoin d’administrer ni de comprendre l’architecture interne — ce manuel suppose seulement que tu sais utiliser Git en ligne de commande.</p>
182 +<h2 id="parcours-dapprentissage"><a class="header" href="#parcours-dapprentissage">Parcours d’apprentissage</a></h2>
183 +<p>Le manuel est structuré comme un <strong>parcours progressif</strong> de 4 tutoriels. Chaque tutoriel te laisse dans un état stable, vérifié, avant de passer au suivant. L’aide fournie recule d’un cran à chaque étape (du copier-coller intégral vers la composition autonome).</p>
184 +<pre class="mermaid">graph LR
185 + A[Compte créé] --&gt; B[01-premier-pas&lt;br/&gt;20 min]
186 + B --&gt; C[02-cloner-pousser&lt;br/&gt;25 min]
187 + C --&gt; D[03-collaborer&lt;br/&gt;25 min]
188 + D --&gt; E[04-automatiser-ci&lt;br/&gt;20 min]
189 + E --&gt; F[Utilisateur autonome]
190 +</pre>
191 +
192 +<blockquote>
193 +<p><strong>Checkpoint de parcours</strong> : avant de passer au tutoriel 02, tu dois pouvoir te connecter à gitrust, voir ton dépôt dans l’interface et l’accès SSH configuré. Si ce n’est pas le cas, relis le tutoriel 01.</p>
194 +</blockquote>
195 +<blockquote>
196 +<p><strong>Checkpoint de parcours</strong> : avant le tutoriel 03, tu dois avoir poussé au moins un commit sur ta branche via SSH. Si ce n’est pas le cas, relis le tutoriel 02.</p>
197 +</blockquote>
198 +<blockquote>
199 +<p><strong>Checkpoint de parcours</strong> : avant le tutoriel 04, tu dois avoir ouvert et mergé une pull request. Si ce n’est pas le cas, relis le tutoriel 03.</p>
200 +</blockquote>
201 +<hr>
202 +<h2 id="tutoriels--apprendre-en-faisant"><a class="header" href="#tutoriels--apprendre-en-faisant">Tutoriels — apprendre en faisant</a></h2>
203 +<p>Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suis-les dans l’ordre — chacun suppose le précédent complété.</p>
204 +<ul>
205 +<li><a href="tutorials/01-premier-pas.html">01 — Premiers pas : 2FA, clé SSH, premier dépôt</a> — ~20 min</li>
206 +<li><a href="tutorials/02-cloner-pousser.html">02 — Cloner et pousser du code</a> — ~25 min</li>
207 +<li><a href="tutorials/03-collaborer.html">03 — Collaborer : équipes, issues, pull requests</a> — ~25 min</li>
208 +<li><a href="tutorials/04-automatiser-ci.html">04 — Automatiser avec la CI</a> — ~20 min</li>
209 +</ul>
210 +<hr>
211 +<h2 id="how-to--recettes-pour-les-tâches-courantes"><a class="header" href="#how-to--recettes-pour-les-tâches-courantes">How-to — recettes pour les tâches courantes</a></h2>
212 +<p>Les how-to répondent à « comment faire X » sans explication de fond. Tu peux les consulter dans n’importe quel ordre selon ton besoin immédiat.</p>
213 +<p>Ces guides supposent que tu as suivi le parcours tutoriels. Ils ne répètent pas les étapes de base.</p>
214 +<ul>
215 +<li><a href="how-to/gerer-cles-ssh.html">Gérer ses clés SSH</a></li>
216 +<li><a href="how-to/configurer-2fa.html">Configurer la 2FA</a></li>
217 +<li><a href="how-to/creer-personal-access-token.html">Créer un Personal Access Token</a></li>
218 +<li><a href="how-to/gerer-equipes-permissions.html">Gérer les équipes et permissions</a></li>
219 +<li><a href="how-to/ouvrir-pull-request.html">Ouvrir une pull request</a></li>
220 +<li><a href="how-to/fusionner-strategies.html">Fusionner : fast-forward, squash, merge commit</a></li>
221 +<li><a href="how-to/utiliser-labels-issues.html">Utiliser les labels hiérarchiques</a></li>
222 +<li><a href="how-to/importer-depot-externe.html">Importer un dépôt externe</a></li>
223 +<li><a href="how-to/consulter-sbom.html">Consulter le SBOM de ton projet</a></li>
224 +</ul>
225 +<hr>
226 +<h2 id="référence--informations-techniques-exactes"><a class="header" href="#référence--informations-techniques-exactes">Référence — informations techniques exactes</a></h2>
227 +<p>La référence est destinée à la consultation ponctuelle, pas à la lecture linéaire. Elle documente les formats, schémas et comportements exacts.</p>
228 +<ul>
229 +<li><a href="reference/modele-permissions.html">Modèle de permissions (4 rôles)</a></li>
230 +<li><a href="reference/api-rest-v1.html">API REST v1 — authentification, pagination, codes d’erreur</a></li>
231 +<li><a href="reference/gitrust-ci-yml-schema.html">Schéma YAML <code>.gitrust-ci.yml</code> (Easy Mode)</a></li>
232 +<li><a href="reference/markdown-et-syntaxe.html">Syntaxe Markdown supportée</a></li>
233 +<li><a href="reference/notifications.html">Notifications : SSE, e-mail, préférences</a></li>
234 +</ul>
235 +<hr>
236 +<h2 id="explication--comprendre-le-pourquoi"><a class="header" href="#explication--comprendre-le-pourquoi">Explication — comprendre le pourquoi</a></h2>
237 +<p>Les explanations t’aident à construire des modèles mentaux durables. Lis-les quand tu veux comprendre <em>pourquoi</em> gitrust fonctionne ainsi, pas seulement <em>comment</em>.</p>
238 +<ul>
239 +<li><a href="explanation/modele-collaboration.html">Modèle de collaboration gitrust</a></li>
240 +<li><a href="explanation/securite-utilisateur.html">Sécurité utilisateur : 2FA, PAT, audit log</a></li>
241 +<li><a href="explanation/cycle-vie-pull-request.html">Cycle de vie d’une pull request</a></li>
242 +</ul>
243 +
244 + </main>
245 +
246 + <nav class="nav-wrapper" aria-label="Page navigation">
247 + <!-- Mobile navigation buttons -->
248 + <a rel="prev" href="../introduction.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
249 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
250 + </a>
251 +
252 + <a rel="next prefetch" href="../user_manual/tutorials/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
253 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
254 + </a>
255 +
256 + <div style="clear: both"></div>
257 + </nav>
258 + </div>
259 + </div>
260 +
261 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
262 + <a rel="prev" href="../introduction.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
263 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
264 + </a>
265 +
266 + <a rel="next prefetch" href="../user_manual/tutorials/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
267 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
268 + </a>
269 + </nav>
270 +
271 + </div>
272 +
273 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
274 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
275 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
276 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
277 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
278 +
279 +
280 +
281 + <script>
282 + window.playground_copyable = true;
283 + </script>
284 +
285 +
286 + <script src="../elasticlunr-ef4e11c1.min.js"></script>
287 + <script src="../mark-09e88c2c.min.js"></script>
288 + <script src="../searcher-c2a407aa.js"></script>
289 +
290 + <script src="../clipboard-1626706a.min.js"></script>
291 + <script src="../highlight-abc7f01d.js"></script>
292 + <script src="../book-a0b12cfe.js"></script>
293 +
294 + <!-- Custom JS scripts -->
295 + <script src="../theme/mermaid-eefea253.min.js"></script>
296 + <script src="../theme/mermaid-init-ccf746f1.js"></script>
297 +
298 +
299 +
300 + </div>
301 + </body>
302 +</html>
A book/user_manual/reference/api-rest-v1.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>API REST v1 - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/reference/api-rest-v1.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="api-rest-v1"><a class="header" href="#api-rest-v1">API REST v1</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/reference/modele-permissions.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/reference/gitrust-ci-yml-schema.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/reference/modele-permissions.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/reference/gitrust-ci-yml-schema.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/reference/gitrust-ci-yml-schema.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Schéma du fichier .gitrust-ci.yml - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/reference/gitrust-ci-yml-schema.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="schéma-du-fichier-gitrust-ciyml"><a class="header" href="#schéma-du-fichier-gitrust-ciyml">Schéma du fichier .gitrust-ci.yml</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/reference/api-rest-v1.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/reference/markdown-et-syntaxe.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/reference/api-rest-v1.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/reference/markdown-et-syntaxe.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/reference/index.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Référence - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/reference/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="référence"><a class="header" href="#référence">Référence</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/how-to/consulter-sbom.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/reference/modele-permissions.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/how-to/consulter-sbom.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/reference/modele-permissions.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/reference/markdown-et-syntaxe.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Markdown et syntaxe supportée - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/reference/markdown-et-syntaxe.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="markdown-et-syntaxe-supportée"><a class="header" href="#markdown-et-syntaxe-supportée">Markdown et syntaxe supportée</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/reference/gitrust-ci-yml-schema.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/reference/notifications.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/reference/gitrust-ci-yml-schema.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/reference/notifications.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/reference/modele-permissions.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Modèle de permissions (4 rôles) - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/reference/modele-permissions.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="modèle-de-permissions-4-rôles"><a class="header" href="#modèle-de-permissions-4-rôles">Modèle de permissions (4 rôles)</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/reference/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/reference/api-rest-v1.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/reference/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/reference/api-rest-v1.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/reference/notifications.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Notifications - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/reference/notifications.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="notifications"><a class="header" href="#notifications">Notifications</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/reference/markdown-et-syntaxe.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/explanation/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/reference/markdown-et-syntaxe.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/explanation/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/tutorials/01-premier-pas.html
+374 -0
@@ -0,0 +1,374 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>01 — Premier pas sur gitrust - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/tutorials/01-premier-pas.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="premiers-pas--active-la-2fa-ajoute-ta-clé-ssh-et-crée-ton-premier-dépôt"><a class="header" href="#premiers-pas--active-la-2fa-ajoute-ta-clé-ssh-et-crée-ton-premier-dépôt">Premiers pas : active la 2FA, ajoute ta clé SSH et crée ton premier dépôt</a></h1>
181 +<h2 id="objectifs"><a class="header" href="#objectifs">Objectifs</a></h2>
182 +<p>À la fin de ce tutoriel, tu sauras :</p>
183 +<ul>
184 +<li><strong>O1. Activer</strong> l’authentification à deux facteurs (2FA) sur ton compte gitrust</li>
185 +<li><strong>O2. Enregistrer</strong> une clé SSH publique dans ton profil pour te connecter sans mot de passe</li>
186 +<li><strong>O3. Créer</strong> un dépôt vide et vérifier qu’il est accessible à l’URL attendue</li>
187 +</ul>
188 +<h2 id="pré-requis"><a class="header" href="#pré-requis">Pré-requis</a></h2>
189 +<ul>
190 +<li><strong>Technique</strong> : un compte gitrust existant (e-mail + mot de passe), Git installé (<code>git --version</code> répond), une paire de clés SSH générée ou à générer (<code>ssh-keygen</code>)</li>
191 +<li><strong>Pédagogique</strong> : aucun tutoriel préalable requis — c’est le point de départ du parcours</li>
192 +<li><strong>Temps estimé</strong> : ~20 minutes</li>
193 +</ul>
194 +<h2 id="vue-densemble"><a class="header" href="#vue-densemble">Vue d’ensemble</a></h2>
195 +<p>Avant de taper la première commande, prenons 2 minutes pour comprendre ce que tu vas faire et pourquoi.</p>
196 +<p><strong>Un dépôt</strong> (<em>repository</em>), c’est comme un dossier de projet avec tout l’historique de ses modifications — une boîte d’archives vivante que Git surveille. Sur gitrust, ce dossier vit sur le serveur et peut être partagé avec ton équipe.</p>
197 +<p><strong>Une clé SSH</strong> fonctionne comme une serrure et une clé : tu gardes la clé privée sur ta machine (ne la partage jamais), et tu déposes la clé publique dans ton profil gitrust. Ensuite, Git se connecte automatiquement sans te redemander de mot de passe — gitrust reconnaît ta machine.</p>
198 +<p><strong>La 2FA</strong> (authentification à deux facteurs) ajoute un second verrou à ton compte : même si quelqu’un vole ton mot de passe, il ne peut pas se connecter sans le code de ton téléphone. C’est une protection essentielle pour tout compte qui héberge du code.</p>
199 +<p>Voici le flux que tu vas configurer :</p>
200 +<pre class="mermaid">sequenceDiagram
201 + participant T as Ton navigateur
202 + participant G as gitrust (HTTPS :4000)
203 + participant S as Ton terminal (SSH :2222)
204 +
205 + T-&gt;&gt;G: Connexion avec e-mail + mdp + code 2FA
206 + T-&gt;&gt;G: Dépôt de la clé SSH publique
207 + S-&gt;&gt;G: git push via SSH (authentifié par clé)
208 + G--&gt;&gt;T: Dépôt visible dans l'interface web
209 +</pre>
210 +
211 +<hr>
212 +<h2 id="étape-1--connecte-toi-et-accède-aux-paramètres-de-sécurité"><a class="header" href="#étape-1--connecte-toi-et-accède-aux-paramètres-de-sécurité">Étape 1 : Connecte-toi et accède aux paramètres de sécurité</a></h2>
213 +<p>Ouvre ton navigateur et va sur l’URL de ton instance gitrust (par exemple <code>https://demo.gitrust.eu</code>). Connecte-toi avec ton e-mail et ton mot de passe.</p>
214 +<p>Une fois connecté, clique sur ton avatar en haut à droite, puis sur <strong>Paramètres</strong> (<code>/settings</code>). Dans le menu de gauche, sélectionne <strong>Sécurité</strong>.</p>
215 +<p><strong>Checkpoint</strong> : tu dois voir la page <em>Sécurité</em> avec une section « Authentification à deux facteurs » et le statut « Désactivée ». Si tu ne la vois pas, vérifie que tu es bien connecté avec le bon compte.</p>
216 +<hr>
217 +<h2 id="étape-2--active-la-2fa-avec-une-application-dauthentification"><a class="header" href="#étape-2--active-la-2fa-avec-une-application-dauthentification">Étape 2 : Active la 2FA avec une application d’authentification</a></h2>
218 +<p>Sur la page <em>Sécurité</em>, clique sur <strong>Activer la 2FA</strong>. gitrust affiche un QR code.</p>
219 +<ol>
220 +<li>Ouvre ton application d’authentification (Google Authenticator, Authy, ou tout équivalent compatible TOTP).</li>
221 +<li>Scanne le QR code avec l’application.</li>
222 +<li>L’application affiche un code à 6 chiffres qui change toutes les 30 secondes.</li>
223 +<li>Saisis ce code dans le champ <strong>Code de vérification</strong> et clique <strong>Confirmer</strong>.</li>
224 +</ol>
225 +<p>Sortie attendue (message dans l’interface) :</p>
226 +<pre><code>La 2FA a été activée avec succès.
227 +Conservez vos codes de secours dans un endroit sûr.
228 +</code></pre>
229 +<p>gitrust affiche également <strong>10 codes de secours</strong> (format <code>XXXX-XXXX</code>). Copie-les et conserve-les hors ligne — ils te permettent de récupérer l’accès si tu perds ton téléphone.</p>
230 +<p><strong>Checkpoint</strong> : retourne sur <em>Paramètres → Sécurité</em>. La section 2FA doit maintenant afficher « <strong>Activée</strong> » en vert. Si elle affiche toujours « Désactivée », recommence l’étape en t’assurant que le code à 6 chiffres est saisi avant qu’il expire.</p>
231 +<hr>
232 +<h2 id="étape-3--génère-ou-localise-ta-clé-ssh"><a class="header" href="#étape-3--génère-ou-localise-ta-clé-ssh">Étape 3 : Génère ou localise ta clé SSH</a></h2>
233 +<p>Si tu n’as pas encore de paire de clés SSH, génère-en une maintenant dans ton terminal :</p>
234 +<pre><code class="language-bash">ssh-keygen -t ed25519 -C "mon-compte@example.com"
235 +</code></pre>
236 +<p>Sortie attendue :</p>
237 +<pre><code>Generating public/private ed25519 key pair.
238 +Enter file in which to save the key (/home/toi/.ssh/id_ed25519):
239 +Enter passphrase (empty for no passphrase):
240 +Enter same passphrase again:
241 +Your identification has been saved in /home/toi/.ssh/id_ed25519
242 +Your public key has been saved in /home/toi/.ssh/id_ed25519.pub
243 +The key fingerprint is:
244 +SHA256:xXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXx mon-compte@example.com
245 +</code></pre>
246 +<p>Appuie sur Entrée pour accepter le chemin par défaut. Tu peux choisir une passphrase ou laisser vide (appuie deux fois sur Entrée). Une passphrase ajoute une couche de sécurité.</p>
247 +<p>Affiche maintenant ta <strong>clé publique</strong> (le fichier <code>.pub</code> — celui-ci est fait pour être partagé) :</p>
248 +<pre><code class="language-bash">cat ~/.ssh/id_ed25519.pub
249 +</code></pre>
250 +<p>Sortie attendue (une seule ligne) :</p>
251 +<pre><code>ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mon-compte@example.com
252 +</code></pre>
253 +<p>Copie cette ligne entière dans le presse-papier.</p>
254 +<p><strong>Checkpoint</strong> : la commande <code>cat</code> doit afficher une ligne commençant par <code>ssh-ed25519</code> (ou <code>ssh-rsa</code> si tu as une clé plus ancienne). Si elle affiche « No such file or directory », la génération n’a pas abouti — relance <code>ssh-keygen</code>.</p>
255 +<hr>
256 +<h2 id="étape-4--enregistre-la-clé-ssh-dans-ton-profil-gitrust"><a class="header" href="#étape-4--enregistre-la-clé-ssh-dans-ton-profil-gitrust">Étape 4 : Enregistre la clé SSH dans ton profil gitrust</a></h2>
257 +<p>Dans ton navigateur, retourne sur <em>Paramètres</em> et clique sur <strong>Clés SSH</strong> dans le menu de gauche.</p>
258 +<p>Clique sur <strong>Ajouter une clé SSH</strong>. Un formulaire apparaît :</p>
259 +<ul>
260 +<li><strong>Titre</strong> : donne un nom descriptif à cette clé (ex. <code>laptop-perso-2026</code>, <code>poste-bureau</code>)</li>
261 +<li><strong>Clé</strong> : colle la ligne copiée à l’étape précédente</li>
262 +</ul>
263 +<p>Clique <strong>Enregistrer la clé</strong>.</p>
264 +<p>Sortie attendue (message dans l’interface) :</p>
265 +<pre><code>Clé SSH ajoutée avec succès.
266 +</code></pre>
267 +<p>Teste maintenant la connexion SSH depuis ton terminal :</p>
268 +<pre><code class="language-bash">ssh -T git@demo.gitrust.eu -p 2222
269 +</code></pre>
270 +<p>Sortie attendue :</p>
271 +<pre><code>Bonjour tonpseudo ! Vous êtes authentifié, mais gitrust ne fournit pas d'accès shell.
272 +</code></pre>
273 +<p><strong>Checkpoint</strong> : si tu obtiens ce message, ta clé SSH est correctement enregistrée. Si tu obtiens <code>Permission denied (publickey)</code>, vérifie que tu as bien copié la clé <strong>publique</strong> (<code>.pub</code>) et non la clé privée. Consulte la section « Et si ça ne marche pas » ci-dessous.</p>
274 +<hr>
275 +<h2 id="étape-5--crée-ton-premier-dépôt-vide"><a class="header" href="#étape-5--crée-ton-premier-dépôt-vide">Étape 5 : Crée ton premier dépôt vide</a></h2>
276 +<p>Dans ton navigateur, clique sur le <strong>+</strong> en haut à droite (ou navigue vers <code>/repo/new</code>).</p>
277 +<p>Remplis le formulaire :</p>
278 +<ul>
279 +<li><strong>Propriétaire</strong> : ton pseudo</li>
280 +<li><strong>Nom du dépôt</strong> : <code>mon-premier-depot</code> (lettres, chiffres, tirets uniquement)</li>
281 +<li><strong>Visibilité</strong> : Privé (ou Public selon ta préférence)</li>
282 +<li><strong>Initialiser le dépôt</strong> : coche « Ajouter un README »</li>
283 +</ul>
284 +<p>Clique sur <strong>Créer le dépôt</strong>.</p>
285 +<p>Sortie attendue : gitrust te redirige vers la page du dépôt à l’URL :</p>
286 +<pre><code>https://demo.gitrust.eu/tonpseudo/mon-premier-depot
287 +</code></pre>
288 +<p>La page affiche un fichier <code>README.md</code> avec le nom du dépôt, et la barre latérale montre 1 commit, 1 branche (<code>main</code>).</p>
289 +<p><strong>Checkpoint</strong> : note l’URL affichée dans la barre d’adresse de ton navigateur. Elle doit correspondre au patron <code>https://&lt;instance&gt;/&lt;pseudo&gt;/&lt;nom-depot&gt;</code>. Si tu vois une erreur 404 ou 500, relis le formulaire de création.</p>
290 +<hr>
291 +<h2 id="récapitulatif"><a class="header" href="#récapitulatif">Récapitulatif</a></h2>
292 +<ul>
293 +<li>✓ <strong>O1 accompli</strong> : la 2FA est activée sur ton compte — tu l’as vérifiée sur la page <em>Sécurité</em> qui affiche « Activée »</li>
294 +<li>✓ <strong>O2 accompli</strong> : ta clé SSH publique est enregistrée — tu l’as confirmée avec <code>ssh -T git@... -p 2222</code> qui a répondu « Vous êtes authentifié »</li>
295 +<li>✓ <strong>O3 accompli</strong> : ton premier dépôt est créé et visible à l’URL <code>/&lt;pseudo&gt;/mon-premier-depot</code></li>
296 +</ul>
297 +<hr>
298 +<h2 id="et-si-ça-ne-marche-pas"><a class="header" href="#et-si-ça-ne-marche-pas">Et si ça ne marche pas</a></h2>
299 +<div class="table-wrapper">
300 +<table>
301 +<thead>
302 +<tr><th>Symptôme</th><th>Cause probable</th><th>Correction</th></tr>
303 +</thead>
304 +<tbody>
305 +<tr><td><code>Permission denied (publickey)</code> lors du test SSH</td><td>Tu as collé la clé privée au lieu de la clé publique, ou le fichier <code>.pub</code> ne correspond pas à la clé active</td><td>Dans gitrust, supprime la clé ajoutée. Retourne au terminal et exécute <code>ssh-add -l</code> pour voir les clés actives. Recopie la bonne clé <code>.pub</code> avec <code>cat ~/.ssh/id_ed25519.pub</code></td></tr>
306 +<tr><td><code>Connection refused</code> lors du test SSH</td><td>Le port SSH de l’instance est différent de 2222, ou l’instance est inaccessible</td><td>Vérifie avec l’administrateur le port SSH réel. Essaie <code>ssh -T git@&lt;instance&gt; -p 22</code> en alternative</td></tr>
307 +<tr><td>Le code 2FA est refusé alors qu’il semble correct</td><td>L’horloge de ton téléphone est désynchronisée (décalage &gt; 30 s)</td><td>Active la synchronisation automatique de l’heure sur ton téléphone (<em>Paramètres → Date et heure → Automatique</em>). Réessaie immédiatement après</td></tr>
308 +<tr><td>Le dépôt redirige vers une erreur 422 lors de la création</td><td>Le nom contient des caractères interdits (espaces, accents, <code>/</code>)</td><td>Utilise uniquement des lettres non accentuées, chiffres et tirets. Évite les points en début ou fin de nom</td></tr>
309 +</tbody>
310 +</table>
311 +</div>
312 +<hr>
313 +<h2 id="prochaine-étape"><a class="header" href="#prochaine-étape">Prochaine étape</a></h2>
314 +<p>→ <a href="02-cloner-pousser.html">02 — Cloner et pousser du code</a> : clone ton dépôt en local avec SSH, fais ton premier commit et pousse-le sur gitrust (~25 min)</p>
315 +
316 + </main>
317 +
318 + <nav class="nav-wrapper" aria-label="Page navigation">
319 + <!-- Mobile navigation buttons -->
320 + <a rel="prev" href="../../user_manual/tutorials/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
321 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
322 + </a>
323 +
324 + <a rel="next prefetch" href="../../user_manual/tutorials/02-cloner-pousser.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
325 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
326 + </a>
327 +
328 + <div style="clear: both"></div>
329 + </nav>
330 + </div>
331 + </div>
332 +
333 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
334 + <a rel="prev" href="../../user_manual/tutorials/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
335 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
336 + </a>
337 +
338 + <a rel="next prefetch" href="../../user_manual/tutorials/02-cloner-pousser.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
339 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
340 + </a>
341 + </nav>
342 +
343 + </div>
344 +
345 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
346 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
347 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
348 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
349 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
350 +
351 +
352 +
353 + <script>
354 + window.playground_copyable = true;
355 + </script>
356 +
357 +
358 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
359 + <script src="../../mark-09e88c2c.min.js"></script>
360 + <script src="../../searcher-c2a407aa.js"></script>
361 +
362 + <script src="../../clipboard-1626706a.min.js"></script>
363 + <script src="../../highlight-abc7f01d.js"></script>
364 + <script src="../../book-a0b12cfe.js"></script>
365 +
366 + <!-- Custom JS scripts -->
367 + <script src="../../theme/mermaid-eefea253.min.js"></script>
368 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
369 +
370 +
371 +
372 + </div>
373 + </body>
374 +</html>
A book/user_manual/tutorials/02-cloner-pousser.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>02 — Cloner et pousser du code - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/tutorials/02-cloner-pousser.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="02--cloner-et-pousser-du-code"><a class="header" href="#02--cloner-et-pousser-du-code">02 — Cloner et pousser du code</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/tutorials/01-premier-pas.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/tutorials/03-collaborer.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/tutorials/01-premier-pas.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/tutorials/03-collaborer.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/tutorials/03-collaborer.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>03 — Collaborer : équipes, issues, pull requests - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/tutorials/03-collaborer.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="03--collaborer--équipes-issues-pull-requests"><a class="header" href="#03--collaborer--équipes-issues-pull-requests">03 — Collaborer : équipes, issues, pull requests</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/tutorials/02-cloner-pousser.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/tutorials/04-automatiser-ci.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/tutorials/02-cloner-pousser.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/tutorials/04-automatiser-ci.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/tutorials/04-automatiser-ci.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>04 — Automatiser avec la CI - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/tutorials/04-automatiser-ci.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="04--automatiser-avec-la-ci"><a class="header" href="#04--automatiser-avec-la-ci">04 — Automatiser avec la CI</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/tutorials/03-collaborer.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/how-to/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/tutorials/03-collaborer.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/how-to/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A book/user_manual/tutorials/index.html
+250 -0
@@ -0,0 +1,250 @@
1 +<!DOCTYPE HTML>
2 +<html lang="fr" class="light sidebar-visible" dir="ltr">
3 + <head>
4 + <!-- Book generated using mdBook -->
5 + <meta charset="UTF-8">
6 + <title>Tutoriels - Documentation gitrust</title>
7 +
8 +
9 + <!-- Custom HTML head -->
10 +
11 + <meta name="description" content="Documentation officielle de la plateforme gitrust — forge Git self-hosted en Rust">
12 + <meta name="viewport" content="width=device-width, initial-scale=1">
13 + <meta name="theme-color" content="#ffffff">
14 +
15 + <link rel="icon" href="../../favicon-de23e50b.svg">
16 + <link rel="shortcut icon" href="../../favicon-8114d1fc.png">
17 + <link rel="stylesheet" href="../../css/variables-8adf115d.css">
18 + <link rel="stylesheet" href="../../css/general-2459343d.css">
19 + <link rel="stylesheet" href="../../css/chrome-ae938929.css">
20 + <link rel="stylesheet" href="../../css/print-9e4910d8.css" media="print">
21 +
22 + <!-- Fonts -->
23 + <link rel="stylesheet" href="../../fonts/fonts-9644e21d.css">
24 +
25 + <!-- Highlight.js Stylesheets -->
26 + <link rel="stylesheet" id="mdbook-highlight-css" href="../../highlight-493f70e1.css">
27 + <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../../tomorrow-night-4c0ae647.css">
28 + <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../../ayu-highlight-3fdfc3ac.css">
29 +
30 + <!-- Custom theme stylesheets -->
31 +
32 +
33 + <!-- Provide site root and default themes to javascript -->
34 + <script>
35 + const path_to_root = "../../";
36 + const default_light_theme = "light";
37 + const default_dark_theme = "navy";
38 + window.path_to_searchindex_js = "../../searchindex-2e4a517d.js";
39 + </script>
40 + <!-- Start loading toc.js asap -->
41 + <script src="../../toc-84dd2703.js"></script>
42 + </head>
43 + <body>
44 + <div id="mdbook-help-container">
45 + <div id="mdbook-help-popup">
46 + <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
47 + <div>
48 + <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
49 + <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
50 + <p>Press <kbd>?</kbd> to show this help</p>
51 + <p>Press <kbd>Esc</kbd> to hide this help</p>
52 + </div>
53 + </div>
54 + </div>
55 + <div id="mdbook-body-container">
56 + <!-- Work around some values being stored in localStorage wrapped in quotes -->
57 + <script>
58 + try {
59 + let theme = localStorage.getItem('mdbook-theme');
60 + let sidebar = localStorage.getItem('mdbook-sidebar');
61 +
62 + if (theme.startsWith('"') && theme.endsWith('"')) {
63 + localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
64 + }
65 +
66 + if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
67 + localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
68 + }
69 + } catch (e) { }
70 + </script>
71 +
72 + <!-- Set the theme before any content is loaded, prevents flash -->
73 + <script>
74 + const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
75 + let theme;
76 + try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
77 + if (theme === null || theme === undefined) { theme = default_theme; }
78 + const html = document.documentElement;
79 + html.classList.remove('light')
80 + html.classList.add(theme);
81 + html.classList.add("js");
82 + </script>
83 +
84 + <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
85 +
86 + <!-- Hide / unhide sidebar before it is displayed -->
87 + <script>
88 + let sidebar = null;
89 + const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
90 + if (document.body.clientWidth >= 1080) {
91 + try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
92 + sidebar = sidebar || 'visible';
93 + } else {
94 + sidebar = 'hidden';
95 + sidebar_toggle.checked = false;
96 + }
97 + if (sidebar === 'visible') {
98 + sidebar_toggle.checked = true;
99 + } else {
100 + html.classList.remove('sidebar-visible');
101 + }
102 + </script>
103 +
104 + <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
105 + <!-- populated by js -->
106 + <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
107 + <noscript>
108 + <iframe class="sidebar-iframe-outer" src="../../toc.html"></iframe>
109 + </noscript>
110 + <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
111 + <div class="sidebar-resize-indicator"></div>
112 + </div>
113 + </nav>
114 +
115 + <div id="mdbook-page-wrapper" class="page-wrapper">
116 +
117 + <div class="page">
118 + <div id="mdbook-menu-bar-hover-placeholder"></div>
119 + <div id="mdbook-menu-bar" class="menu-bar sticky">
120 + <div class="left-buttons">
121 + <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
122 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
123 + </label>
124 + <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
125 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
126 + </button>
127 + <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
128 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
129 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
130 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
131 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
132 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
133 + <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
134 + </ul>
135 + <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
136 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
137 + </button>
138 + </div>
139 +
140 + <h1 class="menu-title">Documentation gitrust</h1>
141 +
142 + <div class="right-buttons">
143 + <a href="../../print.html" title="Print this book" aria-label="Print this book">
144 + <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
145 + </a>
146 + <a href="https://demo.gitrust.eu/gitrust/girust_doc/edit/main/src/user_manual/tutorials/index.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
147 + <span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
148 + </a>
149 +
150 + </div>
151 + </div>
152 +
153 + <div id="mdbook-search-wrapper" class="hidden">
154 + <form id="mdbook-searchbar-outer" class="searchbar-outer">
155 + <div class="search-wrapper">
156 + <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
157 + <div class="spinner-wrapper">
158 + <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
159 + </div>
160 + </div>
161 + </form>
162 + <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
163 + <div id="mdbook-searchresults-header" class="searchresults-header"></div>
164 + <ul id="mdbook-searchresults">
165 + </ul>
166 + </div>
167 + </div>
168 +
169 + <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
170 + <script>
171 + document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
172 + document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
173 + Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
174 + link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
175 + });
176 + </script>
177 +
178 + <div id="mdbook-content" class="content">
179 + <main>
180 + <h1 id="tutoriels"><a class="header" href="#tutoriels">Tutoriels</a></h1>
181 +<blockquote>
182 +<p><strong>Page à rédiger.</strong> Ce contenu est un stub généré automatiquement lors du scaffolding initial.</p>
183 +<p>Consultez <a href="../../.plans/001-scaffold-initial.html"><code>.plans/001-scaffold-initial.md</code></a> pour le contexte et la place de cette page dans le parcours.</p>
184 +</blockquote>
185 +<h2 id="todo"><a class="header" href="#todo">TODO</a></h2>
186 +<ul>
187 +<li><input disabled="" type="checkbox"> Rédiger cette page selon son mode Diátaxis (voir <a href="../../CLAUDE.html">CLAUDE.md</a>)</li>
188 +<li><input disabled="" type="checkbox"> Appliquer le template pédagogique si c’est un tutoriel ou une explanation (voir skill <code>pedagogie</code>)</li>
189 +<li><input disabled="" type="checkbox"> Lier les pages voisines selon les règles de navigation Diátaxis</li>
190 +</ul>
191 +
192 + </main>
193 +
194 + <nav class="nav-wrapper" aria-label="Page navigation">
195 + <!-- Mobile navigation buttons -->
196 + <a rel="prev" href="../../user_manual/index.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
197 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
198 + </a>
199 +
200 + <a rel="next prefetch" href="../../user_manual/tutorials/01-premier-pas.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
201 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
202 + </a>
203 +
204 + <div style="clear: both"></div>
205 + </nav>
206 + </div>
207 + </div>
208 +
209 + <nav class="nav-wide-wrapper" aria-label="Page navigation">
210 + <a rel="prev" href="../../user_manual/index.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
211 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
212 + </a>
213 +
214 + <a rel="next prefetch" href="../../user_manual/tutorials/01-premier-pas.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
215 + <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
216 + </a>
217 + </nav>
218 +
219 + </div>
220 +
221 + <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
222 + <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
223 + <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
224 + <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
225 + <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
226 +
227 +
228 +
229 + <script>
230 + window.playground_copyable = true;
231 + </script>
232 +
233 +
234 + <script src="../../elasticlunr-ef4e11c1.min.js"></script>
235 + <script src="../../mark-09e88c2c.min.js"></script>
236 + <script src="../../searcher-c2a407aa.js"></script>
237 +
238 + <script src="../../clipboard-1626706a.min.js"></script>
239 + <script src="../../highlight-abc7f01d.js"></script>
240 + <script src="../../book-a0b12cfe.js"></script>
241 +
242 + <!-- Custom JS scripts -->
243 + <script src="../../theme/mermaid-eefea253.min.js"></script>
244 + <script src="../../theme/mermaid-init-ccf746f1.js"></script>
245 +
246 +
247 +
248 + </div>
249 + </body>
250 +</html>
A developer_manual/explanation/2fa-fonctionnement.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Fonctionnement du 2FA
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/explanation/ci-dagger-easy-vs-power.md
+11 -0
@@ -0,0 +1,11 @@
1 +# CI Dagger : Easy Mode vs Power Mode
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/explanation/decisions-ui-htmx.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Décisions UI (HTMX, DaisyUI)
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/explanation/flux-requetes.md
+274 -0
@@ -0,0 +1,274 @@
1 +# Flux de requêtes
2 +
3 +Diagrammes de séquence couvrant les opérations principales de gitrust : création de dépôt, clone et push SSH, enregistrement de clé SSH, résolution des permissions, navigation web, inscription utilisateur.
4 +
5 +## 1. Création d'un dépôt (Web)
6 +
7 +```mermaid
8 +sequenceDiagram
9 + actor User as Utilisateur
10 + participant Web as gitrust-web
11 + participant RepoSvc as RepositoryService
12 + participant ResSvc as ResourceService
13 + participant DB as PostgreSQL
14 + participant Git as gitrust-git
15 + participant FS as Système de fichiers
16 +
17 + User->>Web: POST /new {name, description}
18 + Web->>Web: Extraire user_id (session JWT)
19 +
20 + Web->>RepoSvc: create(db, owner_id, username, base_path, input)
21 + RepoSvc->>RepoSvc: RepoSlug::from_name(input.name)
22 + RepoSvc->>DB: SELECT ... WHERE owner_id AND slug
23 + DB-->>RepoSvc: None (pas de doublon)
24 +
25 + RepoSvc->>RepoSvc: compute_disk_path(base, owner, slug)
26 + Note over RepoSvc: Validation anti path-traversal
27 +
28 + RepoSvc->>ResSvc: register(db, "repository", repo_id, owner_id)
29 + ResSvc->>DB: INSERT INTO resources
30 + DB-->>ResSvc: Ok
31 +
32 + RepoSvc->>DB: INSERT INTO repositories
33 + DB-->>RepoSvc: repository::Model
34 +
35 + RepoSvc-->>Web: RepositoryOutput
36 +
37 + Web->>Git: BareRepo::init(disk_path)
38 + Git->>FS: git init --bare
39 + FS-->>Git: Ok
40 + Git-->>Web: Ok
41 +
42 + Web-->>User: 302 Redirect /{owner}/{slug}
43 +```
44 +
45 +## 2. Clone SSH (git clone)
46 +
47 +```mermaid
48 +sequenceDiagram
49 + actor Dev as Développeur
50 + participant Client as Git CLI
51 + participant SSH as gitrust-ssh
52 + participant Auth as SshKeyService
53 + participant Access as AccessService
54 + participant Git as gitrust-git
55 + participant DB as PostgreSQL
56 + participant FS as Bare repo (.git)
57 +
58 + Dev->>Client: git clone ssh://git@host:2222/alice/my-repo.git
59 + Client->>SSH: Connexion TCP :2222
60 + SSH-->>Client: Banner SSH + échange clés
61 +
62 + Client->>SSH: Auth publickey (signature)
63 + SSH->>Auth: find_by_fingerprint(db, fingerprint)
64 + Auth->>DB: SELECT FROM ssh_keys WHERE fingerprint = ?
65 + DB-->>Auth: ssh_key::Model {user_id, ...}
66 + Auth-->>SSH: user_id
67 +
68 + SSH->>Auth: update_last_used(db, key_id)
69 + Auth->>DB: UPDATE ssh_keys SET last_used_at = now()
70 +
71 + SSH-->>Client: Auth OK
72 +
73 + Client->>SSH: exec "git-upload-pack 'alice/my-repo.git'"
74 + SSH->>SSH: CommandHandler::parse("git-upload-pack alice/my-repo.git")
75 + Note over SSH: Extraction owner=alice, repo=my-repo
76 +
77 + SSH->>Access: effective_role(db, user_id, repo_id)
78 + Access->>DB: Check ownership + shares + teams
79 + DB-->>Access: Role::Developer
80 + Access-->>SSH: can_read = true
81 +
82 + SSH->>Git: pack_protocol::advertise_refs(repo_path)
83 + Git->>FS: Lecture refs
84 + FS-->>Git: refs/heads/main, ...
85 + Git-->>SSH: advertise output
86 +
87 + SSH-->>Client: refs advertisement
88 + Client->>SSH: want/have negotiation
89 +
90 + SSH->>Git: pack_protocol::serve_pack(repo_path, wants, haves)
91 + Git->>FS: Pack objects
92 + FS-->>Git: pack data
93 + Git-->>SSH: pack stream
94 +
95 + SSH-->>Client: pack data
96 + Client-->>Dev: Dépôt cloné avec succès
97 +```
98 +
99 +## 3. Push SSH (git push)
100 +
101 +```mermaid
102 +sequenceDiagram
103 + actor Dev as Développeur
104 + participant Client as Git CLI
105 + participant SSH as gitrust-ssh
106 + participant Access as AccessService
107 + participant Git as gitrust-git
108 + participant Hooks as gitrust-hooks
109 + participant DB as PostgreSQL
110 + participant FS as Bare repo (.git)
111 +
112 + Note over Client,SSH: Session SSH déjà authentifiée
113 +
114 + Client->>SSH: exec "git-receive-pack 'alice/my-repo.git'"
115 + SSH->>SSH: CommandHandler::parse(...)
116 + Note over SSH: Extraction owner=alice, repo=my-repo
117 +
118 + SSH->>Access: effective_role(db, user_id, repo_id)
119 + Access->>DB: Check ownership + shares + teams
120 + DB-->>Access: Role::Developer
121 + Access-->>SSH: can_push = true
122 +
123 + SSH->>Git: pack_protocol::advertise_refs(repo_path)
124 + Git->>FS: Lecture refs
125 + Git-->>SSH: refs advertisement
126 +
127 + SSH-->>Client: refs
128 + Client->>SSH: pack data + commands
129 +
130 + SSH->>Git: pack_protocol::serve_pack(repo_path, receive-pack)
131 + Git->>FS: Écriture objets + update refs
132 + FS-->>Git: Ok
133 + Git-->>SSH: Ok
134 +
135 + SSH->>DB: UPDATE repositories SET is_empty = false, updated_at = now()
136 +
137 + SSH-->>Client: Push OK
138 + Client-->>Dev: Push réussi
139 +```
140 +
141 +## 4. Enregistrement d'une clé SSH
142 +
143 +```mermaid
144 +sequenceDiagram
145 + actor User as Utilisateur
146 + participant Web as gitrust-web
147 + participant Svc as SshKeyService
148 + participant DB as PostgreSQL
149 +
150 + User->>Web: POST /settings/keys {title, key_data}
151 + Web->>Web: Extraire user_id (session)
152 +
153 + Web->>Svc: create(db, user_id, input)
154 +
155 + Svc->>Svc: parse_public_key(key_data)
156 + Note over Svc: Extraire type + décoder base64
157 +
158 + Svc->>Svc: validate_key_type_and_size(type, bytes)
159 + Note over Svc: ed25519 OK<br/>RSA >= 4096 bits<br/>ecdsa-p256/p384 OK
160 +
161 + Svc->>Svc: compute_fingerprint(bytes)
162 + Note over Svc: SHA256(key_bytes) -> base64-no-pad
163 +
164 + Svc->>DB: SELECT FROM ssh_keys WHERE fingerprint = ?
165 + DB-->>Svc: None (pas de doublon)
166 +
167 + Svc->>DB: INSERT INTO ssh_keys
168 + DB-->>Svc: ssh_key::Model
169 +
170 + Svc-->>Web: SshKeyOutput
171 + Web-->>User: 200 Clé ajoutée (fingerprint affiché)
172 +```
173 +
174 +## 5. Résolution des permissions (AccessService)
175 +
176 +```mermaid
177 +sequenceDiagram
178 + participant Caller as Handler / SSH Session
179 + participant AS as AccessService
180 + participant RS as ResourceService
181 + participant DB as PostgreSQL
182 +
183 + Caller->>AS: effective_role(db, user_id, repo_id)
184 +
185 + AS->>RS: effective_permission(db, user_id, "repository", repo_id)
186 + RS->>DB: SELECT FROM resources WHERE type AND id
187 + DB-->>RS: resource {owner_id, is_public}
188 +
189 + alt user_id == owner_id
190 + RS-->>AS: "owner"
191 + else Share exists
192 + RS->>DB: SELECT FROM resource_shares WHERE resource AND user
193 + DB-->>RS: share {permission_level}
194 + RS-->>AS: permission_level
195 + else Resource is public
196 + RS-->>AS: "read"
197 + else No access
198 + RS-->>AS: None
199 + end
200 +
201 + AS->>AS: Role::from_permission(individual_level)
202 +
203 + AS->>DB: SELECT team_members + team_repository_access<br/>WHERE user_id AND repository_id
204 + DB-->>AS: Vec<team_permission>
205 +
206 + AS->>AS: team_role = max(team_permissions)
207 + AS->>AS: effective = max(individual_role, team_role)
208 +
209 + AS-->>Caller: Role (Reader / Developer / Maintainer / Owner)
210 +```
211 +
212 +## 6. Navigation dans un dépôt (Web)
213 +
214 +```mermaid
215 +sequenceDiagram
216 + actor User as Utilisateur
217 + participant Web as gitrust-web
218 + participant Ext as RepoExtractor
219 + participant Access as AccessService
220 + participant Git as gitrust-git
221 + participant DB as PostgreSQL
222 + participant FS as Bare repo
223 +
224 + User->>Web: GET /alice/my-repo/tree/main/src
225 + Web->>Ext: RepoContext::extract(owner=alice, repo=my-repo, ref=main, path=src)
226 +
227 + Ext->>DB: SELECT user WHERE username = 'alice'
228 + DB-->>Ext: user {id}
229 +
230 + Ext->>DB: SELECT repository WHERE owner_id AND slug
231 + DB-->>Ext: repository::Model
232 +
233 + Ext->>Access: effective_role(db, visitor_id, repo_id)
234 + Access-->>Ext: Role::Reader
235 +
236 + Ext-->>Web: RepoContext {repo, role, ref, path}
237 +
238 + Web->>Git: tree_browser::list_tree(repo_path, "main", "src")
239 + Git->>FS: Resolve ref main -> commit -> tree -> src/
240 + FS-->>Git: Vec<TreeEntry>
241 +
242 + Git-->>Web: entries (fichiers + dossiers)
243 +
244 + Web->>Git: readme::find_readme(repo_path, "main", "src")
245 + Git->>FS: Cherche README.md, README, readme.md
246 + FS-->>Git: Option<BlobContent>
247 + Git-->>Web: Option<readme_content>
248 +
249 + Web->>Web: Render template tree.html
250 + Web-->>User: HTML (arbre + README)
251 +```
252 +
253 +## 7. Inscription utilisateur + création répertoire
254 +
255 +```mermaid
256 +sequenceDiagram
257 + actor User as Nouvel utilisateur
258 + participant Web as rustwarden-core (auth)
259 + participant Hook as GitrustHooks
260 + participant DB as PostgreSQL
261 + participant FS as Système de fichiers
262 +
263 + User->>Web: POST /register {username, email, password}
264 + Web->>DB: INSERT INTO users
265 + DB-->>Web: user {id, username}
266 +
267 + Web->>Hook: on_user_registered(db, user_id, username)
268 + Hook->>Hook: Valider username (anti path-traversal)
269 + Hook->>FS: create_dir_all(repos_base_path / username)
270 + FS-->>Hook: Ok
271 + Hook-->>Web: Ok
272 +
273 + Web-->>User: 302 Redirect /login
274 +```
A developer_manual/explanation/hierarchie-labels.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Hiérarchie des labels
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/explanation/index.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Explication
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/explanation/modele-permissions-rbac.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Modèle de permissions RBAC
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/explanation/patron-worker-async.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Patron worker async
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/explanation/vue-ensemble-architecture.md
+153 -0
@@ -0,0 +1,153 @@
1 +# Vue d'ensemble de l'architecture
2 +
3 +Gitrust est une plateforme d'hébergement Git auto-hébergée construite sur le framework **rustwarden-core**. L'application expose deux points d'entrée réseau (HTTP + SSH) et persiste ses données dans PostgreSQL.
4 +
5 +## Vue d'ensemble
6 +
7 +```mermaid
8 +graph TB
9 + subgraph Clients
10 + Browser["Navigateur Web"]
11 + GitCLI["Git CLI (ssh/https)"]
12 + end
13 +
14 + subgraph "Gitrust Binary (src/main.rs)"
15 + Main["main()"]
16 + end
17 +
18 + subgraph "Crates Gitrust"
19 + Web["gitrust-web<br/><i>Routes HTTP, templates,<br/>handlers Axum</i>"]
20 + SSH["gitrust-ssh<br/><i>Serveur SSH (russh),<br/>auth par clé, sessions</i>"]
21 + Hooks["gitrust-hooks<br/><i>impl RustwardenHooks<br/>(on_user_registered, ...)</i>"]
22 + Core["gitrust-core<br/><i>Models, services, migrations,<br/>rôles, types, DTOs</i>"]
23 + Git["gitrust-git<br/><i>Bare repos, tree browser,<br/>pack protocol (git2)</i>"]
24 + end
25 +
26 + subgraph "Framework"
27 + RW["rustwarden-core<br/><i>Auth, users, JWT, sessions,<br/>ResourceService, i18n</i>"]
28 + end
29 +
30 + subgraph "Stockage"
31 + PG[(PostgreSQL)]
32 + FS[("Système de fichiers<br/>bare repos .git")]
33 + end
34 +
35 + subgraph "CI/CD (optionnel)"
36 + CiWorker["CiWorker<br/><i>tokio::spawn, mpsc,<br/>sous-processus Dagger</i>"]
37 + Dagger["Dagger Engine<br/><i>Containers isolés,<br/>cache, exécution</i>"]
38 + CiEngine["ci-engine<br/><i>Module Dagger Python<br/>(Easy Mode)</i>"]
39 + Syft["Syft (optionnel)<br/><i>Génération SBOM<br/>CycloneDX</i>"]
40 + DTrack["Dependency-Track<br/>(optionnel)<br/><i>Analyse vulnérabilités</i>"]
41 + end
42 +
43 + Browser -->|HTTP :4000| Web
44 + GitCLI -->|SSH :2222| SSH
45 + GitCLI -->|HTTPS :4000| Web
46 +
47 + Main --> Web
48 + Main --> SSH
49 + Main --> Hooks
50 + Main -.->|"si CI_ENABLED"| CiWorker
51 +
52 + Web --> Core
53 + Web --> Git
54 + SSH --> Core
55 + SSH --> Git
56 + Hooks --> Core
57 +
58 + Core --> RW
59 + Core --> PG
60 + Git --> FS
61 +
62 + CiWorker --> Core
63 + CiWorker -->|"dagger call"| Dagger
64 + Dagger -->|"Easy Mode"| CiEngine
65 + Dagger -->|"Power Mode"| FS
66 + CiWorker -.->|"si CI_SBOM_ENABLED"| Syft
67 + Syft -.->|"si CI_DTRACK_ENABLED"| DTrack
68 +```
69 +
70 +---
71 +
72 +## Démarrage de l'application
73 +
74 +Le diagramme suivant détaille la séquence d'initialisation depuis `main()` jusqu'au démarrage des serveurs HTTP et SSH.
75 +
76 +```mermaid
77 +sequenceDiagram
78 + participant Main as main()
79 + participant Builder as RustwardenBuilder
80 + participant App as RustwardenApp
81 + participant Mig as AppMigrator
82 + participant DB as PostgreSQL
83 + participant SMTP as Serveur SMTP
84 +
85 + Main->>Main: GitrustConfig::from_env()
86 + Main->>Main: Arc<GitrustHooks> (hooks FS)
87 +
88 + Main->>Builder: builder().from_env()
89 + Note over Builder: Charge .env, init tracing
90 + Main->>Builder: .headless().auto_migrate(false)
91 + Main->>Builder: .merge_routes(app_routes(hooks))
92 + Note over Builder: Routes = framework API<br/>+ pages SSR gitrust<br/>+ Extension(hooks)
93 + Main->>Builder: .build().await
94 + Builder->>DB: Connexion pool
95 + Builder->>DB: Migrations rustwarden-core
96 + Builder->>SMTP: EmailQueueProcessor.start()
97 + Note over SMTP: Worker de fond : dépile<br/>email_queue toutes les 30s
98 + Builder-->>Main: RustwardenApp
99 +
100 + Main->>Mig: run_migrations(app.database())
101 + Mig->>DB: core_migrations() + gitrust_migrations()
102 + Note over DB: Tables: users, resources,<br/>repositories, ssh_keys,<br/>teams, team_members,<br/>team_repository_access
103 + Mig-->>Main: Ok
104 +
105 + Main->>Main: tokio::spawn(SSH server :2222)
106 +
107 + alt CI_ENABLED=true
108 + Main->>Main: CiWorker::start(config.ci)
109 + Note over Main: Vérifie dagger dans PATH<br/>Si CI_SBOM_ENABLED: vérifie syft<br/>Si CI_DTRACK_ENABLED: vérifie API DT
110 + Main->>Main: tokio::spawn(CiWorker loop)
111 + Note over Main: Écoute mpsc channel<br/>pour les jobs CI
112 + end
113 +
114 + Main->>App: app.run().await
115 + Note over App: HTTP :4000 démarre
116 +```
117 +
118 +---
119 +
120 +## Principes de conception
121 +
122 +### Séparation framework / métier gitrust
123 +
124 +Gitrust est construit **au-dessus** de rustwarden-core, un framework Rust d'authentification et de gestion d'utilisateurs. Cette séparation est intentionnelle :
125 +
126 +- **rustwarden-core** gère : auth JWT, sessions, users, roles génériques, i18n, SMTP, OAuth, audit log générique.
127 +- **gitrust-core** gère : tout ce qui est spécifique à la forge Git — dépôts, clés SSH, équipes, permissions RBAC à 4 niveaux, CI, import de dépôts.
128 +
129 +La règle fondamentale : **ne jamais modifier `crates/rustwarden-core/`**. Toute extension passe par des wrappers, des hooks (`RustwardenHooks`) ou des traits implémentés côté gitrust.
130 +
131 +### Mode headless
132 +
133 +gitrust-web opère en mode `headless()` : les pages UI standard de rustwarden (login, register, settings) sont **désactivées** et réimplémentées entièrement dans `gitrust-web/templates/`. Cela permet un design cohérent (sidebar Git, DaisyUI) sans compromis avec l'UI générique du framework.
134 +
135 +### SSR + HTMX, zéro CDN
136 +
137 +L'interface est rendue côté serveur via Askama (templates Rust compilés). HTMX gère les interactions dynamiques (mises à jour partielles de page, SSE pour les notifications et les logs CI). Aucun asset externe : tout CSS/JS est servi depuis `static/` — imposé par la Content Security Policy du framework.
138 +
139 +### Bare repos sur le système de fichiers
140 +
141 +gitrust-git est **découplé de la base de données**. Les opérations Git (navigation d'arbre, lecture de blobs, pack protocol) travaillent directement sur les bare repos (`{GIT_REPOS_BASE_PATH}/{owner}/{slug}.git/`) via libgit2. La base ne stocke que les métadonnées (nom, description, visibilité, ownership). Ce découplage permet de remplacer ou tester gitrust-git indépendamment.
142 +
143 +### CI hybride : Dagger comme abstraction d'exécution
144 +
145 +Plutôt que d'implémenter un runner CI from scratch, gitrust délègue l'exécution à **Dagger**, qui garantit l'isolation (containers), la reproductibilité (cache) et la portabilité (local ou runner distant via SSH+rsync). Le `CiWorker` est une tâche Tokio dans le processus principal — pas un daemon séparé — ce qui simplifie le déploiement (un seul binaire).
146 +
147 +---
148 +
149 +## Pour aller plus loin
150 +
151 +- Référence structurelle complète (tables de modules, routes, dépendances) : `developer_manual/reference/architecture-crates.md`
152 +- Diagrammes de séquence détaillés (clone SSH, push, permissions) : `developer_manual/explanation/flux-requetes.md`
153 +- Règles de code et gates QA : `developer_manual/reference/regles-qa-anssi.md`
A developer_manual/how-to/ajouter-migration-db.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Ajouter une migration de base de données
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/how-to/ajouter-route-web.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Ajouter une route web
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/how-to/ajouter-service-metier.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Ajouter un service métier
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/how-to/contribuer-a-rustwarden.md
+54 -0
@@ -0,0 +1,54 @@
1 +# Contribuer à rustwarden
2 +
3 +Ce document décrit les interactions entre gitrust et le framework rustwarden-core, et explique comment étendre le framework côté gitrust sans modifier ses sources.
4 +
5 +## Services framework utilisés
6 +
7 +| Service | Usage dans gitrust |
8 +|---------|-------------------|
9 +| `UserService` | CRUD users, roles, `delete_user`, `admin_reset_password`, `change_password_direct`, `unassign_role_from_user` |
10 +| `RoleService` | Liste/création/suppression roles, `get_role_by_name` |
11 +| `PasswordService` | `hash_password` (async), `verify_password` (async), `generate_secure_password` |
12 +| `ResourceService` | `register`/`unregister` repos, `set_public`, `effective_permission`, `find_by_type_and_id` |
13 +| `AuthService` | `authenticate_user` (login) |
14 +| `JwtService` | `generate_token` (login) |
15 +| `EmailValidationService` | Vérification email |
16 +| `PasswordResetService` | Flux "mot de passe oublié" |
17 +| `AppSettingsService` | `get_bool` pour `registration_enabled` |
18 +
19 +## Hook `on_user_deleted` implémenté
20 +
21 +Le hook `on_user_deleted` dans `gitrust-hooks` supprime le répertoire utilisateur sur le filesystem (`repos_base_path/username/`) avant la cascade DB. Appelé automatiquement par `UserService::delete_user`.
22 +
23 +## Règle fondamentale
24 +
25 +**Ne jamais modifier `crates/rustwarden-core/`.** Ce crate est le framework partagé. Toute extension passe par :
26 +
27 +- Des **wrappers** côté `gitrust-core` (services qui délèguent au framework)
28 +- Des **trait impls** (`RustwardenHooks` dans `gitrust-hooks`)
29 +- Des **extensions** via les mécanismes d'injection Axum (`Extension`, `State`)
30 +
31 +## Aucun contournement en cours
32 +
33 +Tous les anciens contournements (entités directes, hash manuels) ont été remplacés par les services du framework suite à la mise à jour du 2026-03-26.
34 +
35 +## Ajouter une fonctionnalité nécessitant un service framework absent
36 +
37 +Si un service nécessaire n'existe pas dans rustwarden-core :
38 +
39 +1. Implémenter le service côté `gitrust-core` en réutilisant les primitives du framework (ex: `PasswordService::hash_password` pour le hashage)
40 +2. Si la fonctionnalité est générique et bénéficierait au framework lui-même, ouvrir une issue ou une PR upstream sur le dépôt rustwarden-core
41 +3. Ne pas dupliquer la logique d'auth, de session, ou de JWT — ces domaines appartiennent exclusivement au framework
42 +
43 +## Pattern d'extension via hooks
44 +
45 +Les hooks (`gitrust-hooks/src/lib.rs`) implémentent `RustwardenHooks` et sont injectés dans le routeur Axum au démarrage :
46 +
47 +```rust
48 +// Dans main.rs
49 +let hooks = Arc::new(GitrustHooks::new(config.clone()));
50 +// Passé via .merge_routes(app_routes(hooks))
51 +// Puis disponible via axum::Extension dans les handlers
52 +```
53 +
54 +Pour réagir à un nouvel événement du framework, ajouter la méthode correspondante dans l'impl `RustwardenHooks` de `gitrust-hooks`, sans toucher au code du framework qui émet l'événement.
A developer_manual/how-to/contribuer-workflow-pr.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Workflow de contribution et PR
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/how-to/implementer-endpoint-api.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Implémenter un endpoint API
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/how-to/implementer-webhooks.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Implémenter des webhooks
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/how-to/importer-depot-externe-code.md
+200 -0
@@ -0,0 +1,200 @@
1 +# Importer un dépôt externe
2 +
3 +Référence du flux d'import de dépôts externes dans gitrust : rôle de la base de données, schéma de séquence complet et pistes d'optimisation.
4 +
5 +## 1. Rôle de la base de données
6 +
7 +Pendant un import, la DB sert **quatre fonctions distinctes** :
8 +
9 +| Rôle | Table | Fréquence |
10 +|------|-------|-----------|
11 +| **File d'attente persistante** | `import_jobs` | 1 INSERT à la création |
12 +| **Suivi d'état pour l'UI** | `import_jobs` | 1 UPDATE toutes les ~1.5 s |
13 +| **Enregistrement final du dépôt** | `repositories` + `resources` | 2 INSERT à la fin |
14 +| **Journal d'audit** | `audit_log` | 1 INSERT à la fin |
15 +
16 +Le clone lui-même ne passe **jamais** par la DB : seuls les métadonnées et compteurs de progression y transitent. Les objets Git sont écrits directement sur disque dans `{GIT_REPOS_BASE_PATH}/{owner}/{slug}.git/`.
17 +
18 +### Pourquoi persister l'état ?
19 +
20 +- **Reprise après redémarrage** : le serveur peut crasher pendant un clone de plusieurs minutes. La table permet de marquer ces jobs comme `failed` au redémarrage.
21 +- **SSE** : l'UI lit la progression via un endpoint SSE qui interroge la DB toutes les 2 s. Sans DB, il faudrait un canal in-memory plus un mécanisme de routage vers le bon client.
22 +- **Multi-navigateurs** : si l'utilisateur ferme l'onglet puis le rouvre, il retrouve l'état exact du job.
23 +- **Audit / historique** : conservation des imports passés avec leurs statistiques.
24 +
25 +## 2. Schéma du flux actuel
26 +
27 +```mermaid
28 +sequenceDiagram
29 + autonumber
30 + participant UI as Navigateur
31 + participant H as Handler HTTP
32 + participant Svc as ImportService
33 + participant Chan as mpsc Channel
34 + participant W as ImportWorker
35 + participant G as git2 (libgit2)
36 + participant DB as PostgreSQL
37 + participant FS as Disque
38 +
39 + UI->>H: POST /import<br/>(url, slug, pat)
40 + H->>Svc: create_job
41 + Svc->>DB: INSERT import_jobs (pending)
42 + H->>Chan: try_send(ImportTask+PAT)
43 + H-->>UI: 302 /imports/{id}
44 +
45 + UI->>H: GET /imports/{id}/stream (SSE)
46 + Note over UI,H: EventSource ouvert
47 +
48 + Chan->>W: ImportTask
49 + W->>Svc: mark_running
50 + Svc->>DB: SELECT import_jobs<br/>UPDATE status=running
51 +
52 + W->>G: RepoBuilder.bare(true).clone()
53 + G->>FS: init_bare + fetch
54 + loop callbacks transfer_progress (flood)
55 + G-->>W: stats (objets/bytes)
56 + alt throttle 1500 ms écoulé
57 + W->>Svc: update_progress (tokio::spawn)
58 + Svc->>DB: SELECT + UPDATE import_jobs
59 + else dans le throttle
60 + W--xW: ignore
61 + end
62 + end
63 +
64 + loop toutes les 2 s
65 + H->>DB: SELECT import_jobs WHERE id=?
66 + DB-->>H: état courant
67 + H-->>UI: SSE event (JSON)
68 + UI->>UI: bar.value = percent
69 + end
70 +
71 + G-->>FS: objets écrits
72 + G-->>W: Ok
73 +
74 + W->>Svc: check cancel (SELECT import_jobs)
75 + W->>Svc: update_progress (Finalizing)
76 + Svc->>DB: SELECT + UPDATE
77 +
78 + W->>RepositoryService: create
79 + RepositoryService->>DB: INSERT resources<br/>INSERT repositories
80 + W->>DB: UPDATE repositories<br/>(import_source_url, is_empty=false)
81 + W->>Svc: mark_success
82 + Svc->>DB: SELECT + UPDATE import_jobs<br/>(status=success, duration)
83 + W->>AuditService: log REPO_IMPORTED
84 + AuditService->>DB: INSERT audit_log
85 +
86 + H->>DB: SELECT (prochain tick SSE)
87 + H-->>UI: terminal=true
88 + UI->>UI: window.location.reload()
89 +```
90 +
91 +## 3. Coût DB par import
92 +
93 +Pour un clone de **90 secondes** avec throttle 1500 ms :
94 +
95 +| Étape | Opérations DB | Cumul |
96 +|-------|---------------|-------|
97 +| create_job | 1 INSERT | 1 |
98 +| mark_running | 1 SELECT + 1 UPDATE | 3 |
99 +| update_progress pendant clone | ~60 x (1 SELECT + 1 UPDATE) | 123 |
100 +| check cancel | 1 SELECT | 124 |
101 +| update_progress finalizing | 1 SELECT + 1 UPDATE | 126 |
102 +| RepositoryService::create | 2 INSERT (repo + resource) | 128 |
103 +| update repositories | 1 UPDATE | 129 |
104 +| mark_success | 1 SELECT + 1 UPDATE | 131 |
105 +| audit log | 1 INSERT | 132 |
106 +| SSE stream (45 ticks à 2 s) | 45 SELECT | 177 |
107 +
108 +**~177 requêtes pour un import**, dont **120+ sont des progress updates**.
109 +
110 +## 4. Pistes d'optimisation (sans changer libgit2)
111 +
112 +### 4.1 Éliminer le SELECT avant UPDATE dans `update_progress`
113 +
114 +`update_progress` fait actuellement `load_model` (SELECT) puis `active.update(db)` (UPDATE + RETURNING). Le SELECT est redondant : on connaît l'ID, on veut juste patcher 4 colonnes.
115 +
116 +**Gain** : divise par 2 les requêtes de progression (~60 requêtes en moins pour un clone de 90 s).
117 +
118 +Refonte suggérée avec `UpdateMany` (pattern déjà utilisé dans `ci_service.rs::cancel_running_pipelines`) :
119 +
120 +```rust
121 +import_job::Entity::update_many()
122 + .col_expr(Column::ReceivedObjects, Expr::value(received as i32))
123 + .col_expr(Column::TotalObjects, Expr::value(total as i32))
124 + .col_expr(Column::ReceivedBytes, Expr::value(bytes as i64))
125 + .col_expr(Column::Phase, Expr::value(phase.as_str()))
126 + .col_expr(Column::UpdatedAt, Expr::value(Utc::now()))
127 + .filter(Column::Id.eq(job_id))
128 + .exec(db)
129 + .await?;
130 +```
131 +
132 +Même principe pour `mark_running`, `mark_success`, `mark_failed`, `mark_cancelled` → toutes divisent leurs aller-retours DB par 2.
133 +
134 +### 4.2 Downsampler la progression dans le worker (dédié)
135 +
136 +Plan alternatif : le callback écrit simplement dans un `tokio::sync::watch<TransferStats>` (en mémoire, zéro DB). Une **tâche dédiée** consomme ce channel et UPDATE la DB à 1 Hz seulement.
137 +
138 +```mermaid
139 +flowchart LR
140 + G[git2 callback] -->|watch::send<br/>très haute fréquence| W[watch channel]
141 + W --> T[Tâche update<br/>ticker 1 Hz]
142 + T -->|1 UPDATE / s| DB
143 +```
144 +
145 +**Gains** :
146 +- **1 seul émetteur DB** au lieu de N tokio::spawn concurrents → zéro contention sur le pool
147 +- **Fréquence déterministe** (1 Hz) indépendante de la vitesse réseau
148 +- Code plus clair (la tâche est async, on peut `await` sans détour)
149 +
150 +### 4.3 Supprimer le `RETURNING` implicite de SeaORM
151 +
152 +`ActiveModel::update(db)` renvoie le modèle complet via `... RETURNING *`. Pour les progress updates, on n'utilise pas le retour. `UpdateMany::exec` n'émet pas de `RETURNING` → moins de bytes sur le wire, moins de désérialisation.
153 +
154 +### 4.4 Pool DB dédié pour le worker
155 +
156 +Aujourd'hui le worker partage le pool principal avec les handlers HTTP. Un pool de 4-8 connexions dédié au worker éviterait qu'un import sature le pool et fasse timeouter les requêtes utilisateur.
157 +
158 +### 4.5 Debouncer le SSE côté serveur
159 +
160 +Le SSE SELECT toutes les 2 s même quand rien ne change. Alternative : **PostgreSQL LISTEN/NOTIFY** sur une chaîne `import_job_{uuid}`. Chaque UPDATE émet un NOTIFY, la connexion SSE fait LISTEN → push direct, zéro polling.
161 +
162 +**Coût** : nécessite une connexion DB dédiée par SSE (LISTEN est stateful). Compromis à évaluer.
163 +
164 +## 5. Optimisation majeure : shell-out vers `git clone --bare`
165 +
166 +**Indépendant des optimisations DB** mais de loin le plus gros gain. libgit2 est structurellement 2-5x plus lent que `git` CLI sur gros clones HTTPS (pas de multiplexage, résolution de deltas mono-threadée, etc.).
167 +
168 +```mermaid
169 +flowchart TB
170 + subgraph Actuel[Flux actuel — libgit2]
171 + A1[RepoBuilder::clone] --> A2[libgit2: fetch + resolve]
172 + A2 -->|lent 2-5x| A3[bare repo]
173 + end
174 + subgraph Cible[Flux optimisé — git CLI]
175 + B1[Command::new git] --> B2[git clone --bare --progress]
176 + B2 -->|stderr| B3[Parser regex<br/>Receiving objects: X%]
177 + B3 --> B4[update watch channel]
178 + B2 -->|vitesse native| B5[bare repo]
179 + end
180 +```
181 +
182 +Avantages :
183 +- **Vitesse native** (parité avec `git` CLI)
184 +- **Progression native** via stderr `Receiving objects: 42% (368/876), 1.10 MiB | 2.05 MiB/s`
185 +- **HEAD correctement positionné** (plus besoin du workaround `RepoBuilder`)
186 +- **Moins de dépendance sur libgit2** pour le cas du clone initial
187 +
188 +Contrepartie : binaire `git` requis sur le serveur (déjà le cas — utilisé par `SbomService::git_archive`).
189 +
190 +## 6. Priorités recommandées
191 +
192 +Si on voulait optimiser maintenant, ordre proposé :
193 +
194 +1. **Shell-out `git clone --bare`** — gain réel pour l'utilisateur (clone 3-5x plus rapide).
195 +2. **`update_many` pour `update_progress`** — divise la pression DB par 2, changement mécanique de ~20 lignes.
196 +3. **`watch` channel + tâche 1 Hz** — architecture plus propre, élimine les problèmes de pool.
197 +4. **Pool DB dédié worker** — filet de sécurité opérationnel.
198 +5. LISTEN/NOTIFY pour SSE — seulement si beaucoup de clients simultanés.
199 +
200 +Les gains 2-4 sont utiles même avec libgit2 ; le gain 1 est le plus visible pour l'utilisateur final.
A developer_manual/how-to/index.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Guides pratiques
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/how-to/lancer-tests-e2e.md
+139 -0
@@ -0,0 +1,139 @@
1 +# Lancer les tests end-to-end (E2E)
2 +
3 +Les tests E2E de gitrust utilisent **Playwright** pour piloter un navigateur Chromium contre une instance de l'application configurée avec une base de données et un répertoire de dépôts dédiés.
4 +
5 +## Pré-requis
6 +
7 +- Node.js (déjà présent pour Tailwind/DaisyUI)
8 +- PostgreSQL accessible en local (Docker via `database/docker-compose.yml`)
9 +- `psql`, `createdb`, `dropdb` disponibles dans le PATH
10 +- Chromium installé via Playwright (`npx playwright install chromium`)
11 +
12 +## Commandes
13 +
14 +```bash
15 +# Créer (ou remettre à zéro) la base de données de test
16 +npm run test:e2e:setup
17 +
18 +# Lancer tous les tests E2E
19 +npm run test:e2e
20 +
21 +# Mode debug interactif (inspecteur Playwright, pas-à-pas)
22 +npm run test:e2e:debug
23 +
24 +# Mode UI (interface graphique Playwright)
25 +npm run test:e2e:ui
26 +
27 +# Consulter le rapport HTML après exécution
28 +npm run test:e2e:report
29 +```
30 +
31 +## Architecture
32 +
33 +```
34 +.env.test # Variables d'environnement de test
35 +playwright.config.ts # Configuration Playwright
36 +
37 +scripts/
38 + e2e-setup-db.sh # Crée la DB gitrust_test + nettoie depot_test
39 + e2e-server.sh # Démarre l'app avec .env.test
40 +
41 +tests/e2e/
42 + fixtures.ts # Fixtures partagées (loginAs, credentials)
43 + global-setup.ts # Seed : crée les utilisateurs via /register
44 + global-teardown.ts # Nettoyage post-tests
45 + auth.spec.ts # Tests d'authentification
46 + repository.spec.ts # Tests de gestion des dépôts
47 + admin.spec.ts # Tests du panneau d'administration
48 + navigation.spec.ts # Tests de navigation et UI
49 +```
50 +
51 +### Isolation de l'environnement de test
52 +
53 +| Ressource | Développement | Tests E2E |
54 +|------------------|---------------------|---------------------|
55 +| Base de données | `gitrust` | `gitrust_test` |
56 +| Port HTTP | `4000` | `4001` |
57 +| Port SSH | `2222` | `2223` |
58 +| Dépôts Git | `./data/repos/` | `./depot_test/` |
59 +| Rate limiting | Standard | Relâché (×20) |
60 +| Validation email | Activée | Désactivée |
61 +
62 +### Fonctionnement
63 +
64 +1. **`npm run test:e2e:setup`** supprime puis recrée la base `gitrust_test` et vide `depot_test/`.
65 +2. **Playwright** démarre automatiquement l'application via `scripts/e2e-server.sh`, qui charge les variables de `.env.test` avant d'exécuter `cargo run`.
66 +3. Le **global-setup** crée les utilisateurs de test (alice, bob, charlie) en passant par le formulaire `/register` — approche 100% E2E, aucune insertion directe en base.
67 +4. Les **tests** s'exécutent séquentiellement (un seul worker) pour éviter les conflits sur la DB partagée.
68 +5. Le **global-teardown** est exécuté à la fin de la session.
69 +
70 +### Fixtures
71 +
72 +Le fichier `fixtures.ts` fournit une fixture `loginAs` réutilisable dans tous les tests :
73 +
74 +```typescript
75 +import { test, expect } from './fixtures';
76 +
77 +test('mon test', async ({ page, loginAs }) => {
78 + await loginAs('alice');
79 + // alice est connectée, on peut naviguer
80 +});
81 +```
82 +
83 +Utilisateurs disponibles : `admin`, `alice`, `bob`, `charlie`.
84 +
85 +## Liste des tests
86 +
87 +### `auth.spec.ts` — Authentification
88 +
89 +| Test | Description |
90 +|------|-------------|
91 +| login avec des identifiants valides | Vérifie le login standard et la redirection vers `/dashboard` |
92 +| login avec un mauvais mot de passe | Vérifie l'affichage d'un message d'erreur |
93 +| login avec un utilisateur inexistant | Vérifie le rejet d'un username inconnu |
94 +| logout déconnecte l'utilisateur | Vérifie la déconnexion et l'impossibilité d'accéder au dashboard |
95 +| accès au dashboard sans login redirige vers login | Vérifie la protection des routes authentifiées |
96 +| option remember me est présente | Vérifie la présence de la checkbox remember_me |
97 +| formulaire d'inscription est accessible | Vérifie la présence de tous les champs du formulaire |
98 +| inscription avec username déjà pris échoue | Vérifie l'unicité des usernames |
99 +| inscription avec mots de passe différents échoue | Vérifie la validation de confirmation du mot de passe |
100 +
101 +### `repository.spec.ts` — Gestion des dépôts
102 +
103 +| Test | Description |
104 +|------|-------------|
105 +| créer un dépôt avec nom et description | Crée un dépôt complet et vérifie la redirection |
106 +| créer un dépôt sans description | Vérifie que la description est optionnelle |
107 +| créer un dépôt avec un nom déjà pris échoue | Vérifie l'unicité des slugs par utilisateur |
108 +| le formulaire de création nécessite un login | Vérifie la protection de la route `/new` |
109 +| le dashboard liste les dépôts de l'utilisateur | Vérifie l'affichage des dépôts sur le dashboard |
110 +| un dépôt public est accessible sans login | Vérifie l'accès anonyme aux dépôts publics |
111 +
112 +### `admin.spec.ts` — Administration
113 +
114 +| Test | Description |
115 +|------|-------------|
116 +| l'admin peut accéder au panneau d'administration | Vérifie l'accès admin à `/admin` |
117 +| un utilisateur normal ne peut pas accéder à l'admin | Vérifie le contrôle d'accès |
118 +| lister les utilisateurs | Vérifie l'affichage de la liste des utilisateurs |
119 +| créer un nouvel utilisateur via l'admin | Teste le formulaire de création d'utilisateur admin |
120 +| créer un utilisateur avec un username déjà pris échoue | Vérifie la gestion des doublons côté admin |
121 +| les liens du menu admin sont présents | Vérifie la navigation du panneau admin |
122 +
123 +### `navigation.spec.ts` — Navigation et UI
124 +
125 +| Test | Description |
126 +|------|-------------|
127 +| la page de login est accessible | Vérifie le rendu de la page de login |
128 +| la navbar est présente après login | Vérifie la présence de la barre de navigation |
129 +| le sidebar est présent après login | Vérifie la présence du menu latéral |
130 +| le lien vers le dashboard fonctionne | Vérifie la navigation vers le dashboard |
131 +| le lien vers la création de dépôt fonctionne | Vérifie le lien `/new` |
132 +| la page utilise le thème DaisyUI | Vérifie la présence de l'attribut `data-theme` |
133 +
134 +## Ajouter un nouveau test
135 +
136 +1. Créer un fichier `tests/e2e/mon-module.spec.ts`
137 +2. Importer les fixtures : `import { test, expect } from './fixtures';`
138 +3. Utiliser `loginAs` pour les tests nécessitant une authentification
139 +4. Lancer avec `npm run test:e2e` ou cibler le fichier : `npx playwright test mon-module`
A developer_manual/how-to/lancer-tests-unitaires.md
+215 -0
@@ -0,0 +1,215 @@
1 +# Lancer les tests unitaires
2 +
3 +Référence des commandes et de la stratégie de tests pour gitrust.
4 +
5 +## Infrastructure existante
6 +
7 +### Tests unitaires Rust
8 +
9 +```bash
10 +cargo test --workspace # Tous les tests
11 +cargo test -p gitrust-core # Un crate spécifique
12 +cargo test -p gitrust-git # Tests Git (tempdir)
13 +```
14 +
15 +Les tests unitaires sont intégrés dans chaque crate via `#[cfg(test)]`.
16 +
17 +### Tests e2e Playwright
18 +
19 +17 specs couvrant : auth, admin, repos, issues, labels, teams, tokens, settings, navigation.
20 +
21 +```bash
22 +# Pré-requis (première fois)
23 +npm install
24 +./scripts/e2e-setup-db.sh # Crée la DB gitrust_test
25 +
26 +# Lancer les tests
27 +npm run test:e2e # Mode headless
28 +npm run test:e2e:ui # Mode interactif (navigateur visible)
29 +npm run test:e2e:debug # Mode debug
30 +npm run test:e2e:report # Voir le rapport HTML
31 +```
32 +
33 +Configuration : `playwright.config.ts` (port 4001, DB `gitrust_test`, locale `fr-FR`).
34 +
35 +### Structure des répertoires
36 +
37 +```
38 +tests/
39 + e2e/ # Specs Playwright (TypeScript)
40 + global-setup.ts # Setup : lancer l'app, créer admin
41 + global-teardown.ts # Teardown : arrêter l'app
42 + fixtures.ts # Fixtures Playwright partagées
43 + auth.spec.ts # Tests authentification
44 + admin.spec.ts # Tests administration
45 + issues.spec.ts # Tests issues
46 + ...
47 + integration/ # Tests d'intégration Rust (DB réelle) [à créer]
48 + fixtures/ # Fichiers de test (repos, configs) [à créer]
49 + seeds/ # Seeds Rust pour initialiser la DB de test
50 + mod.rs
51 + seed.rs
52 +```
53 +
54 +---
55 +
56 +## Tests à ajouter
57 +
58 +### 1. Tests fonctionnels API REST (intégration Rust)
59 +
60 +Tests avec une DB PostgreSQL réelle pour vérifier les endpoints API.
61 +
62 +**Emplacement** : `tests/integration/` ou `crates/gitrust-web/tests/`
63 +
64 +**Approche recommandée** : utiliser `reqwest` + un serveur de test :
65 +
66 +```rust
67 +// tests/integration/api_test.rs
68 +use reqwest::Client;
69 +
70 +#[tokio::test]
71 +#[ignore] // Nécessite une DB + serveur running
72 +async fn test_api_login() {
73 + let client = Client::new();
74 + let res = client.post("http://localhost:4001/api/v1/auth/login")
75 + .json(&serde_json::json!({
76 + "login": "admin",
77 + "password": "test_password"
78 + }))
79 + .send()
80 + .await
81 + .unwrap();
82 + assert_eq!(res.status(), 200);
83 +}
84 +```
85 +
86 +**Alternative** : `axum::test` pour tester les handlers sans serveur HTTP :
87 +
88 +```rust
89 +use axum::body::Body;
90 +use axum::http::Request;
91 +use tower::ServiceExt;
92 +
93 +#[tokio::test]
94 +async fn test_health_check() {
95 + let app = create_test_app().await; // Build router with test DB
96 + let response = app
97 + .oneshot(Request::builder().uri("/api/hello").body(Body::empty()).unwrap())
98 + .await
99 + .unwrap();
100 + assert_eq!(response.status(), 200);
101 +}
102 +```
103 +
104 +### 2. Tests fonctionnels CI
105 +
106 +| Test | Description | Priorité |
107 +|------|-------------|----------|
108 +| CI detection | Repo avec `.gitrust-ci.yml` -> Easy, `.dagger/` -> Power, rien -> None | Haute |
109 +| Pipeline CRUD | Créer, lister, mettre à jour, annuler un pipeline | Haute |
110 +| Config CI | Activer/désactiver CI, modifier triggers, vérifier effet | Haute |
111 +| Variables héritage | Team var + repo var -> merge correct | Moyenne |
112 +| Auto-cancel | Nouveau push annule les pipelines en cours | Moyenne |
113 +| Logs streaming | Append logs + lecture paginée | Moyenne |
114 +| Notifications CI | Pipeline échoue -> notification créée | Moyenne |
115 +
116 +**Pour les tests CI** : mocker `dagger` avec un script shell qui simule success/failure :
117 +
118 +```bash
119 +#!/bin/bash
120 +# tests/fixtures/mock-dagger.sh
121 +echo "Step 1: Building..."
122 +echo "Step 2: Testing..."
123 +if [ "$MOCK_FAIL" = "true" ]; then
124 + echo "FAILED" >&2
125 + exit 1
126 +fi
127 +echo "All checks passed"
128 +exit 0
129 +```
130 +
131 +Configurer `CI_DAGGER_BIN=tests/fixtures/mock-dagger.sh` dans les tests.
132 +
133 +### 3. Tests e2e Playwright à ajouter
134 +
135 +Nouvelles specs pour les fonctionnalités CI et notifications :
136 +
137 +| Spec | Couverture |
138 +|------|------------|
139 +| `ci-pipelines.spec.ts` | Liste pipelines, détail, status badges |
140 +| `ci-config.spec.ts` | Config CI (enable/disable, triggers, timeout) |
141 +| `ci-variables.spec.ts` | CRUD variables CI, masquage secrets |
142 +| `notifications.spec.ts` | Liste notifications, marquer lu, préférences |
143 +| `api-docs.spec.ts` | Swagger UI accessible, spec chargée |
144 +| `i18n.spec.ts` | Changement de langue, textes traduits |
145 +| `docker-smoke.spec.ts` | `docker compose up` + smoke test |
146 +
147 +**Exemple de spec CI** :
148 +
149 +```typescript
150 +// tests/e2e/ci-pipelines.spec.ts
151 +import { test, expect } from './fixtures';
152 +
153 +test.describe('CI Pipelines', () => {
154 + test('affiche la page CI vide', async ({ authenticatedPage }) => {
155 + await authenticatedPage.goto('/admin/mon-repo/ci');
156 + await expect(authenticatedPage.locator('text=Aucun pipeline')).toBeVisible();
157 + });
158 +
159 + test('bouton trigger CI visible pour le maintainer', async ({ authenticatedPage }) => {
160 + await authenticatedPage.goto('/admin/mon-repo/ci');
161 + await expect(authenticatedPage.locator('text=Lancer CI')).toBeVisible();
162 + });
163 +});
164 +```
165 +
166 +### 4. Tests settings ↔ comportement
167 +
168 +Les tests les plus critiques vérifient que **changer un setting modifie le comportement observable** :
169 +
170 +| Setting | Action | Vérification |
171 +|---------|--------|-------------|
172 +| PAT révoqué | Appel API | 401 immédiatement |
173 +| `ci_enabled = false` | Push | Pas de pipeline créé |
174 +| `trigger_on_push = false` | Push | Pas de pipeline |
175 +| `auto_cancel = true` | 2 pushes rapides | 1er pipeline annulé |
176 +| `email_on_pipeline_failure = false` | Pipeline échoue | Pas d'email, notif in-app ok |
177 +| `DEFAULT_LOCALE = en` | Charger page | Texte en anglais |
178 +
179 +---
180 +
181 +## Commandes de test
182 +
183 +```bash
184 +# Tests unitaires Rust
185 +cargo test --workspace
186 +
187 +# Tests avec filtrage
188 +cargo test -p gitrust-core -- ci_service
189 +cargo test -p gitrust-core -- notification
190 +
191 +# Tests e2e Playwright
192 +npm run test:e2e
193 +
194 +# Tests e2e spécifiques
195 +npx playwright test tests/e2e/ci-pipelines.spec.ts
196 +npx playwright test --grep "notifications"
197 +
198 +# Lint
199 +cargo clippy --workspace -- -D warnings
200 +
201 +# Format check
202 +cargo fmt --all -- --check
203 +```
204 +
205 +---
206 +
207 +## CI locale (exécuter avant un push)
208 +
209 +```bash
210 +# Script rapide de vérification pré-push
211 +cargo fmt --all -- --check && \
212 +cargo clippy --workspace -- -D warnings && \
213 +cargo test --workspace && \
214 +echo "All checks passed"
215 +```
A developer_manual/how-to/passer-la-qa-avant-merge.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Passer la QA avant un merge
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/index.md
+76 -0
@@ -0,0 +1,76 @@
1 +# Manuel développeur
2 +
3 +Ce manuel s'adresse à deux publics : les contributeurs au code gitrust (core ou via fork rustwarden) et les développeurs externes qui construisent des intégrations sur l'API publique. Il fournit tout le nécessaire pour comprendre l'architecture des 6 crates, contribuer du code conforme aux standards du projet, ou bâtir un client qui parle à l'API gitrust. Il ne couvre pas l'installation d'une instance de production ni l'usage quotidien de la forge.
4 +
5 +## Parcours d'apprentissage — contributeur core
6 +
7 +Le parcours contributeur représente environ 4 heures au total, avec un étayage dégressif : le premier tutoriel est entièrement guidé, le troisième (capstone) demande de résoudre sans guide pas-à-pas.
8 +
9 +```mermaid
10 +graph LR
11 + A[Utilisateur autonome] --> B[01-getting-started<br/>45 min]
12 + B --> C[02-premiere-contribution<br/>90 min]
13 + C --> D[03-creer-un-worker-async<br/>capstone 120 min]
14 + D --> E[Core contributor]
15 +```
16 +
17 +> **Checkpoint de parcours** : avant de passer au tutoriel 02, vous devez avoir compilé gitrust localement, lancé les tests unitaires et obtenu une instance de développement fonctionnelle. Si ce n'est pas le cas, relisez le tutoriel 01.
18 +
19 +> **Checkpoint de parcours** : avant le tutoriel 03 (capstone), vous devez avoir soumis une PR complète avec tests, passé la gate QA et reçu une review. Si ce n'est pas le cas, relisez le tutoriel 02.
20 +
21 +---
22 +
23 +## Tutoriels — apprendre en faisant
24 +
25 +Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suivez-les dans l'ordre — chacun suppose le précédent complété.
26 +
27 +- [01 — Getting started : build local, tests, instance de dev](tutorials/01-getting-started.md) — ~45 min
28 +- [02 — Première contribution : clone, build, test, PR](tutorials/02-premiere-contribution.md) — ~90 min
29 +- [03 — Créer un worker async (capstone)](tutorials/03-creer-un-worker-async.md) — ~120 min
30 +
31 +---
32 +
33 +## How-to — recettes pour les tâches courantes
34 +
35 +Les how-to répondent à « comment faire X » sans explication de fond. Consultez-les dans n'importe quel ordre selon votre besoin.
36 +
37 +- [Workflow de contribution : Git + review + QA](how-to/contribuer-workflow-pr.md)
38 +- [Lancer les tests unitaires](how-to/lancer-tests-unitaires.md)
39 +- [Lancer les tests E2E (Playwright)](how-to/lancer-tests-e2e.md)
40 +- [Ajouter une route web (patron rustwarden → axum)](how-to/ajouter-route-web.md)
41 +- [Ajouter un service métier](how-to/ajouter-service-metier.md)
42 +- [Ajouter une migration de base de données](how-to/ajouter-migration-db.md)
43 +- [Implémenter des webhooks](how-to/implementer-webhooks.md)
44 +- [Implémenter un endpoint API](how-to/implementer-endpoint-api.md)
45 +- [Importer un dépôt externe (code)](how-to/importer-depot-externe-code.md)
46 +- [Contribuer à rustwarden upstream](how-to/contribuer-a-rustwarden.md)
47 +- [Passer la QA avant merge](how-to/passer-la-qa-avant-merge.md)
48 +
49 +---
50 +
51 +## Référence — informations techniques exactes
52 +
53 +La référence documente de façon exhaustive l'architecture, les API internes, le schéma de données et les règles QA. Destinée à la consultation ponctuelle.
54 +
55 +- [Architecture des 6 crates](reference/architecture-crates.md)
56 +- [Services et API interne](reference/services-api-interne.md)
57 +- [Schéma de base de données (ERD)](reference/schema-base-donnees.md)
58 +- [Règles QA et gates ANSSI](reference/regles-qa-anssi.md)
59 +- [API REST v1 — auth, pagination, codes d'erreur](reference/api-rest-v1.md)
60 +- [Git hooks post-receive](reference/git-hooks-post-receive.md)
61 +- [rustwarden-core API — helpers, extracteurs, middleware](reference/rustwarden-core-api.md)
62 +
63 +---
64 +
65 +## Explication — comprendre le pourquoi
66 +
67 +Les explanations construisent les modèles mentaux nécessaires pour contribuer de façon éclairée. Lisez-les quand vous voulez comprendre les décisions d'architecture, pas seulement les appliquer.
68 +
69 +- [Vue d'ensemble de l'architecture gitrust](explanation/vue-ensemble-architecture.md)
70 +- [Flux de requêtes (diagrammes de séquence)](explanation/flux-requetes.md)
71 +- [Modèle de permissions RBAC 4 niveaux](explanation/modele-permissions-rbac.md)
72 +- [Fonctionnement de la 2FA](explanation/2fa-fonctionnement.md)
73 +- [Hiérarchie des labels](explanation/hierarchie-labels.md)
74 +- [CI Dagger : Easy Mode vs Power Mode](explanation/ci-dagger-easy-vs-power.md)
75 +- [Décisions UI : HTMX + DaisyUI](explanation/decisions-ui-htmx.md)
76 +- [Patron worker async](explanation/patron-worker-async.md)
A developer_manual/reference/api-rest-v1.md
+11 -0
@@ -0,0 +1,11 @@
1 +# API REST v1
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/reference/architecture-crates.md
+260 -0
@@ -0,0 +1,260 @@
1 +# Architecture par crates
2 +
3 +Référence structurelle de gitrust : crates, modules, routes, dépendances et composants CI.
4 +
5 +## Dépendances entre crates
6 +
7 +```mermaid
8 +graph LR
9 + RW["rustwarden-core"]
10 +
11 + Git["gitrust-git"]
12 + Core["gitrust-core"]
13 + Hooks["gitrust-hooks"]
14 + SSH["gitrust-ssh"]
15 + Web["gitrust-web"]
16 + Bin["gitrust (binaire)"]
17 +
18 + Core --> RW
19 + Git -.->|"indépendant<br/>(git2, tokio)"| RW
20 +
21 + Hooks --> Core
22 + Hooks --> RW
23 +
24 + SSH --> Core
25 + SSH --> Git
26 +
27 + Web --> Core
28 + Web --> Git
29 + Web -.->|"CI pages"| Git
30 +
31 + Bin --> Core
32 + Bin --> Git
33 + Bin --> SSH
34 + Bin --> Web
35 + Bin --> Hooks
36 + Bin --> RW
37 +
38 + subgraph "Externes CI (Phase 5b)"
39 + Dagger["Dagger CLI"]
40 + CiEng["ci-engine (Python)"]
41 + Syft["Syft"]
42 + DTrack["Dependency-Track"]
43 + end
44 +
45 + Core -.->|"CiWorker<br/>sous-processus"| Dagger
46 + Dagger -.-> CiEng
47 + Core -.-> Syft
48 + Syft -.-> DTrack
49 +```
50 +
51 +---
52 +
53 +## Crates — Responsabilités
54 +
55 +### gitrust-core
56 +
57 +Cœur métier. Ne dépend que de rustwarden-core et des crates Rust standards.
58 +
59 +| Module | Rôle |
60 +|--------|------|
61 +| `config` | `GitrustConfig::from_env()` — ports SSH, chemin repos, limites |
62 +| `error` | `GitrustError` — erreurs domaine Git + `IntoResponse` HTTP |
63 +| `roles` | `enum Role { Reader, Developer, Maintainer, Owner }` avec `Ord` |
64 +| `types` | Newtypes validés : `RepoSlug`, `TeamSlug`, `Fingerprint`, `TokenHash` |
65 +| `models/` | Entités SeaORM : repository, ssh_key, team, team_member, team_repository_access, ci_pipeline, ci_job, ci_log, ci_config, ci_variable |
66 +| `migrations/` | Migrations SeaORM (tables gitrust) combinées avec les migrations core |
67 +| `services/` | `SshKeyService`, `RepositoryService`, `TeamService`, `AccessService`, `CiService`, `CiVariableService`, `CiDetectionService`, `CiWorker`, `NotificationService` |
68 +| `dto/` | Structures d'entrée/sortie pour les services |
69 +
70 +### gitrust-git
71 +
72 +Opérations Git sur le système de fichiers. Utilise `git2` (libgit2). Pas de dépendance vers la base de données.
73 +
74 +| Module | Rôle |
75 +|--------|------|
76 +| `errors` | `enum GitError` (Git, RepoNotFound, RefNotFound, PathTraversal, ...) |
77 +| `bare_repo` | Init, open, delete, exists + validation chemin canonique sous base |
78 +| `branch` / `tag` | Listing branches (BranchInfo) et tags (TagInfo, annotated/lightweight) |
79 +| `reference` | resolve_ref (branch -> tag -> SHA -> revparse) |
80 +| `tree_browser` | list_tree (dirs first, sorted), TreeEntry, EntryKind |
81 +| `blob_reader` | read_blob -> Text/Binary, détection binaire (null bytes) |
82 +| `commit_log` | list_commits (paginé), find_commit, CommitInfo |
83 +| `readme` | find_readme (README.md > README > readme.md > ...) |
84 +| `pack_protocol` | advertise_refs, serve_pack (async, git-upload-pack/git-receive-pack) |
85 +
86 +### gitrust-ssh
87 +
88 +Serveur SSH basé sur `russh`. Authentification par clé publique.
89 +
90 +| Module (prévu) | Rôle |
91 +|----------------|------|
92 +| `server` | Démarrage, génération clé hôte Ed25519 |
93 +| `auth` | Authentification par fingerprint -> SshKeyService |
94 +| `session` | Handler SSH (exec, shell) |
95 +| `command_handler` | Parsing `git-upload-pack`/`git-receive-pack` |
96 +
97 +### gitrust-web
98 +
99 +Interface web SSR (Server-Side Rendering) avec Askama (templates compilés) + HTMX (interactions dynamiques). Fonctionne en mode `headless()` : les pages UI du framework (`rustwarden-ui`) ne sont pas montées, gitrust-web réimplémente toutes les pages avec un design spécifique (sidebar contextuelle, navigation Git, DaisyUI).
100 +
101 +**Architecture des routes :**
102 +
103 +```
104 +gitrust (port 4000)
105 +├── /api/v1/auth/* ← Routes API du framework (JSON)
106 +│ ├── POST /login AuthService::authenticate_user
107 +│ ├── POST /register UserService::create_user
108 +│ ├── POST /refresh RefreshTokenService (rotation JWT)
109 +│ ├── POST /logout JwtBlacklistService
110 +│ ├── GET /me Claims extraction
111 +│ ├── POST /forgot-password PasswordResetService::request_reset
112 +│ ├── POST /reset-password PasswordResetService::reset_password
113 +│ ├── GET /verify-email/{t} EmailValidationService::verify_email
114 +│ └── POST /resend-verif EmailValidationService::resend
115 +│
116 +├── /api/v1/* ← API REST Gitrust (JSON, auth JWT/PAT)
117 +│ ├── /user, /user/repos Profil utilisateur
118 +│ ├── /repos/{o}/{r} Détail dépôt, branches, tags, commits
119 +│ ├── /repos/{o}/{r}/issues CRUD issues + commentaires
120 +│ ├── /repos/{o}/{r}/pulls CRUD PRs + merge
121 +│ └── /repos/{o}/{r}/ci/* Pipelines CI (list, trigger, cancel, logs)
122 +│
123 +├── /* ← Pages SSR gitrust (HTML)
124 +│ ├── /login, /register Pages formulaires (design gitrust)
125 +│ ├── /dashboard, /teams Pages utilisateur
126 +│ ├── /settings/* Profile, SSH keys, sessions, notifications
127 +│ ├── /notifications Liste notifications + SSE stream
128 +│ ├── /admin/* Administration (+ admin CI)
129 +│ ├── /{owner}/{repo}/* Navigation dépôt Git
130 +│ └── /{owner}/{repo}/ci/* Pages CI (pipelines, logs, config, variables)
131 +│
132 +└── /static/* ← Assets locaux (CSS, JS, HTMX)
133 +```
134 +
135 +Les routes API du framework sont montées via `framework_api_routes()` dans `routes.rs`. Elles sont utilisées par :
136 +- Les liens dans les emails (vérification, reset password)
137 +- Le refresh token (rotation JWT, session longue durée)
138 +- L'accès programmatique (GET /me, POST /logout)
139 +
140 +Les pages SSR et les routes API coexistent : les formulaires HTML soumettent aux handlers gitrust (SSR), tandis que les services framework génèrent des liens vers les routes API.
141 +
142 +| Module | Rôle |
143 +|--------|------|
144 +| `routes.rs` | Routeur principal : framework API + API REST Gitrust + pages SSR + fichiers statiques |
145 +| `handlers/` | Handlers Axum SSR (un fichier par domaine) + handlers API JSON |
146 +| `templates.rs` | Structs Askama + SidebarContext + RepoNav |
147 +| `helpers.rs` | require_auth, require_admin, sidebar_*, resolve_repo_access |
148 +| `templates/` | Templates HTML (Askama, extends base.html) |
149 +| `static_files.rs` | ServeDir pour /static |
150 +
151 +### gitrust-hooks
152 +
153 +Implémentation de `RustwardenHooks` pour réagir aux événements du framework. Les hooks sont injectés dans le routeur Axum via `Arc<dyn RustwardenHooks>` + `axum::Extension` (dans `main.rs`).
154 +
155 +| Hook | Action |
156 +|------|--------|
157 +| `on_user_registered` | Crée le répertoire utilisateur sur le FS (anti path-traversal) |
158 +| `on_user_deleted` | Supprime le répertoire utilisateur + bare repos sur le FS |
159 +| `on_resource_shared` | Audit log si resource_type = "repository" |
160 +| `on_resource_unshared` | Audit log si resource_type = "repository" |
161 +
162 +---
163 +
164 +## Notifications
165 +
166 +Système de notification à deux canaux : **in-app** (SSE temps réel + page) et **email** (worker SMTP du framework).
167 +
168 +```
169 +Événement (pipeline échoue, PR commentée, etc.)
170 + │
171 + ▼
172 +NotificationService::notify(user_id, event_type, title, body, link)
173 + │
174 + ├── INSERT INTO notifications (in-app)
175 + │ → broadcast::Sender → SSE /notifications/stream
176 + │ → Badge header mis à jour en temps réel (HTMX)
177 + │
178 + └── if user.email_on_{event} = true:
179 + EmailQueueService::enqueue() (framework SMTP worker)
180 +```
181 +
182 +Les préférences de notification sont par utilisateur (email on/off par type d'événement).
183 +
184 +---
185 +
186 +## CI/CD — Modes et composants
187 +
188 +Système CI hybride à deux niveaux, activé via `CI_ENABLED=true`.
189 +
190 +### Modes
191 +
192 +| Mode | Détection | Exécution |
193 +|------|-----------|-----------|
194 +| **Easy** | `.gitrust-ci.yml` à la racine du repo | Module Dagger Python générique (`ci-engine`) interprète le YAML |
195 +| **Power** | `.dagger/` à la racine du repo | `dagger call -m .dagger/` exécute le module utilisateur directement |
196 +| Aucun | Ni l'un ni l'autre | Pas de CI pour ce repo |
197 +
198 +### Architecture CI
199 +
200 +```
201 +git push (HTTP ou SSH)
202 + │
203 + ▼
204 +receive-pack handler
205 + │
206 + ├── CiDetectionService::detect(bare_repo, commit_sha)
207 + │ → Easy / Power / None
208 + │
209 + ├── CiService::create_pipeline(repo_id, sha, mode)
210 + │
211 + └── mpsc::Sender.send(job) ──► CiWorker (tokio::spawn)
212 + │
213 + ├── 1. Validation statique
214 + │ Easy: schéma YAML, whitelist images/packages
215 + │ Power: analyse code .dagger/ (si activé)
216 + │
217 + ├── 2. SBOM Gate (si CI_SBOM_ENABLED)
218 + │ syft scan → sbom.cdx.json
219 + │ → Dependency-Track (si CI_DTRACK_ENABLED)
220 + │ → PASS/FAIL selon politique
221 + │
222 + ├── 3. Résolution variables (héritage team → repo)
223 + │ CiVariableService::resolve_for_pipeline()
224 + │
225 + ├── 4. Exécution Dagger (isolé, timeout, cgroups)
226 + │ Easy: dagger call -m ci-engine test --profile=...
227 + │ Power: dagger call -m .dagger/ <function>
228 + │
229 + └── 5. Rapport + audit
230 + Status, logs (broadcast SSE), ci_audit_log
231 +```
232 +
233 +### Composants externes (tous optionnels sauf Dagger)
234 +
235 +| Composant | Rôle | Variable de contrôle |
236 +|-----------|------|---------------------|
237 +| Dagger Engine | Exécution des pipelines dans des containers isolés | `CI_ENABLED` |
238 +| ci-engine (Python) | Moteur générique pour Easy Mode | `CI_DAGGER_MODULE_PATH` |
239 +| Syft | Génération SBOM CycloneDX | `CI_SBOM_ENABLED` |
240 +| Dependency-Track | Analyse de vulnérabilités sur les SBOM | `CI_DTRACK_ENABLED` |
241 +
242 +### Variables et secrets CI
243 +
244 +Héritage **team → repo** : les variables définies au niveau team sont partagées entre tous les repos de l'équipe. Le repo peut surcharger une clé team avec sa propre valeur. Les secrets sont chiffrés en base (AES-256-GCM) et masqués dans les logs (`***`).
245 +
246 +---
247 +
248 +## Sécurité (ANSSI PA-074)
249 +
250 +| Directive | Scope |
251 +|-----------|-------|
252 +| `#![forbid(unsafe_code)]` | gitrust-core, gitrust-web, gitrust-hooks |
253 +| `#![deny(unsafe_code)]` | gitrust-git, gitrust-ssh (FFI libgit2/russh) |
254 +| `deny(clippy::unwrap_used, expect_used, panic)` | Tous les crates |
255 +| `deny(clippy::indexing_slicing)` | Tous les crates |
256 +| `deny(clippy::mem_forget)` | Tous les crates |
257 +| `Zeroize` on drop | `TokenHash` (ANSSI R23) |
258 +| RSA minimum 4096 bits | `SshKeyService` |
259 +| Path traversal validation | `RepositoryService`, `gitrust-git` |
260 +| Slug validation + noms réservés | `RepoSlug`, `TeamSlug` |
A developer_manual/reference/git-hooks-post-receive.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Hooks Git post-receive
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/reference/index.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Référence
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/reference/regles-qa-anssi.md
+130 -0
@@ -0,0 +1,130 @@
1 +# Règles QA & conformité ANSSI
2 +
3 +Ce document définit les règles de qualité et de sécurité applicables à tout le projet gitrust. Chaque lot doit satisfaire ces règles avant merge.
4 +
5 +---
6 +
7 +## 1. Gates de compilation obligatoires
8 +
9 +Toute modification doit passer ces 4 gates sans erreur :
10 +
11 +| Gate | Commande | Critère |
12 +|------|----------|---------|
13 +| Formatage | `cargo fmt --all -- --check` | Zéro diff |
14 +| Linting | `cargo clippy --workspace -- -D warnings` | Zéro warning |
15 +| Tests unitaires | `cargo test --workspace` | 100% pass |
16 +| Build CSS | `npx tailwindcss -i static/css/input.css -o static/css/style.css --minify` | Si templates modifiés |
17 +
18 +### Gates supplémentaires (à mettre en place)
19 +
20 +| Gate | Outil | Rôle |
21 +|------|-------|------|
22 +| Audit dépendances | `cargo audit` | Détection CVE dans les deps |
23 +| Licences & bans | `cargo deny check` | Licences compatibles, pas de crate bannie |
24 +| Secrets dans le code | Recherche de patterns sensibles | Pas de token/mot de passe en dur |
25 +
26 +---
27 +
28 +## 2. Règles de sécurité (ANSSI PA-074)
29 +
30 +### 2.1 Lints Rust obligatoires (déjà en place)
31 +
32 +```rust
33 +#![forbid(unsafe_code)] // core, web, hooks
34 +#![deny(unsafe_code)] // git, ssh (FFI nécessaire)
35 +#![deny(clippy::unwrap_used)]
36 +#![deny(clippy::expect_used)]
37 +#![deny(clippy::panic)]
38 +#![deny(clippy::indexing_slicing)]
39 +#![deny(clippy::mem_forget)]
40 +```
41 +
42 +### 2.2 Checklist sécurité par feature
43 +
44 +Avant toute implémentation touchant l'authentification, les secrets ou les permissions, vérifier :
45 +
46 +- [ ] **Secrets jamais en clair en base** — hash SHA-256 ou bcrypt
47 +- [ ] **Secrets jamais loggés** — vérifier `tracing::info/debug/warn`, `Display` et `Debug` impls ne révèlent pas le secret
48 +- [ ] **Comparaison constant-time** — `subtle::ConstantTimeEq` pour toute validation de secret (pas de `==` sur des hash)
49 +- [ ] **Rate-limiting** — endpoint d'authentification protégé
50 +- [ ] **CSRF** — token valide sur toute action mutante (POST/PUT/DELETE)
51 +- [ ] **Ownership vérifiée (anti-IDOR)** — le user ne peut agir que sur ses propres ressources (vérifier `user_id` côté serveur)
52 +- [ ] **Expiration obligatoire** — tout token/session a une durée de vie max
53 +- [ ] **Audit log** — création, révocation, utilisation suspecte tracées
54 +- [ ] **Zeroize** — types sensibles implémentent `Zeroize`/`ZeroizeOnDrop`
55 +- [ ] **Path traversal** — validation des chemins disque (pas de `..`, `/`, `\`)
56 +
57 +### 2.3 Marqueurs SEC-
58 +
59 +Le code utilise des commentaires `// SEC-XX` pour tracer les décisions de sécurité. Tout nouveau contrôle doit être marqué avec le prochain numéro disponible dans sa catégorie :
60 +
61 +| Préfixe | Catégorie | Exemples |
62 +|---------|-----------|----------|
63 +| SEC-C | Cryptographie | Timing attack, CSRF, PKCE |
64 +| SEC-H | HTTP/Headers | X-Forwarded-For, cookies, nonce |
65 +| SEC-L | Logique métier | Hashing, validation, defaults |
66 +| SEC-M | Mémoire/sessions | Rate-limit DoS, refresh tokens |
67 +
68 +---
69 +
70 +## 3. Tests requis par catégorie
71 +
72 +### 3.1 Matrice de couverture
73 +
74 +| Catégorie | Quand appliquer | Exemples |
75 +|-----------|-----------------|----------|
76 +| **Unitaire** | Logique pure (validation, parsing, conversion) | `RepoSlug::new("../evil")` → erreur |
77 +| **Intégration** | Service avec DB (CRUD, contraintes, transactions) | `PatService::validate` token expiré → None |
78 +| **Handler** | Endpoint HTTP (status, redirect, CSRF, auth) | POST sans CSRF → 403 |
79 +| **E2E Playwright** | Flow utilisateur complet | Créer token → copier → cloner un dépôt |
80 +| **Sécurité négatif** | Tout bypass imaginable | Token user A sur ressource user B → 401 |
81 +
82 +### 3.2 Règles de tests
83 +
84 +1. **Tests d'intégration sur vraie DB** — pas de mocks pour la couche persistence (les mocks masquent les bugs de migration)
85 +2. **Tests négatifs obligatoires** — pour chaque chemin heureux, tester au moins : input invalide, non-authentifié, non-autorisé, expiré, révoqué
86 +3. **Tests E2E en français** — cohérent avec l'UI (locale `fr-FR`)
87 +4. **Pas de `sleep()` dans les tests** — utiliser des retry/poll avec timeout
88 +5. **Données de test isolées** — chaque test crée ses propres données (pas de dépendance sur l'ordre d'exécution)
89 +
90 +---
91 +
92 +## 4. Règles de code
93 +
94 +### 4.1 Framework boundary
95 +
96 +- **Ne jamais modifier** `crates/rustwarden-core/`
97 +- Réutiliser les services framework avant d'implémenter (auth, users, sessions, ResourceService, i18n, middleware)
98 +- Si un service manque, l'étendre côté gitrust (wrappers, trait impls)
99 +
100 +### 4.2 Assets
101 +
102 +- **Zéro CDN** — tous les CSS/JS servis depuis `static/`
103 +- La CSP du framework bloque les domaines externes
104 +
105 +### 4.3 Gestion d'erreurs
106 +
107 +- `GitrustError` avec `IntoResponse` pour le mapping HTTP
108 +- Pas de `.unwrap()` / `.expect()` / `panic!()` / `[index]`
109 +- Errors utilisateur : messages génériques (pas de leak d'info interne)
110 +
111 +### 4.4 Validation aux frontières
112 +
113 +- Valider les inputs utilisateur (formulaires, query params, headers)
114 +- Ne pas re-valider entre services internes
115 +- Newtypes avec validation à la construction (`RepoSlug`, `TeamSlug`, `Fingerprint`, `TokenHash`)
116 +
117 +---
118 +
119 +## 5. Checklist pré-merge
120 +
121 +Avant chaque merge de lot :
122 +
123 +- [ ] `cargo fmt --all -- --check` passe
124 +- [ ] `cargo clippy --workspace -- -D warnings` passe
125 +- [ ] `cargo test --workspace` — tous les tests passent
126 +- [ ] Tests E2E Playwright passent (`npm run test:e2e`)
127 +- [ ] CSS rebuild si templates modifiés
128 +- [ ] Aucun secret en clair dans le code ou les logs
129 +- [ ] Checklist sécurité §2.2 validée (si applicable)
130 +- [ ] Pas de modification dans `crates/rustwarden-core/`
A developer_manual/reference/rustwarden-core-api.md
+11 -0
@@ -0,0 +1,11 @@
1 +# API rustwarden-core
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/reference/schema-base-donnees.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Schéma de la base de données
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/reference/services-api-interne.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Services et API interne
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/tutorials/01-getting-started.md
+385 -0
@@ -0,0 +1,385 @@
1 +# Premiers pas avec gitrust : compilez, configurez et poussez votre premier commit
2 +
3 +> **Source** : ce tutoriel intègre le contenu de `gitrust/docs/GETTING_STARTED.md` avec la structure pédagogique complète (objectifs Bloom, modèle mental, checkpoints observables, section « Et si ça ne marche pas »).
4 +
5 +## Objectifs
6 +
7 +À la fin de ce tutoriel, vous saurez :
8 +
9 +- **O1. Compiler** gitrust depuis les sources et lancer l'instance de développement localement
10 +- **O2. Configurer** l'environnement de développement (base de données, variables d'environnement, assets CSS)
11 +- **O3. Exécuter** un premier push SSH vers votre instance locale et vérifier le résultat dans l'interface web
12 +
13 +## Pré-requis
14 +
15 +- **Technique** : Rust stable ≥ 1.80 (`rustc --version`), PostgreSQL ≥ 15 (`psql --version`), Node.js ≥ 18 (`node --version`), Git 2.x (`git --version`), Docker (optionnel, recommandé pour la base de données)
16 +- **Pédagogique** : être un utilisateur autonome de gitrust (parcours `user_manual` complété ou équivalent) ; familiarité avec Rust (au moins 3 mois de pratique) et avec HTTP/PostgreSQL
17 +- **Temps estimé** : ~45 minutes
18 +
19 +## Vue d'ensemble
20 +
21 +Avant d'exécuter la première commande, prenons 3 minutes pour comprendre ce que vous allez monter et comment les pièces s'articulent.
22 +
23 +gitrust est un **monorepo Rust à 6 crates** qui compile en un seul binaire. Quand vous lancez `cargo run`, ce binaire démarre deux serveurs simultanément : un serveur HTTP (`:4000`) pour l'interface web et l'API REST, et un serveur SSH (`:2222`) pour les opérations `git push/pull`. Ils partagent la même base de données PostgreSQL et le même stockage de dépôts bare sur disque.
24 +
25 +```mermaid
26 +graph TB
27 + subgraph sources ["Sources gitrust (monorepo Rust)"]
28 + C1[rustwarden-core<br/>auth, sessions, middleware]
29 + C2[gitrust-core<br/>modèles, services métier]
30 + C3[gitrust-git<br/>opérations Git bare]
31 + C4[gitrust-web<br/>handlers HTTP + templates]
32 + C5[gitrust-ssh<br/>serveur SSH Git]
33 + C6[gitrust-hooks<br/>post-receive, pre-receive]
34 + end
35 +
36 + subgraph runtime ["Processus unique (cargo run)"]
37 + HTTP["HTTP :4000<br/>UI + API REST"]
38 + SSH["SSH :2222<br/>git push/pull"]
39 + end
40 +
41 + subgraph storage ["Stockage"]
42 + PG[(PostgreSQL<br/>comptes, dépôts,<br/>issues, PRs)]
43 + REPOS[Dépôts bare<br/>data/repos/]
44 + end
45 +
46 + C1 & C2 & C3 & C4 & C5 & C6 -->|cargo build| HTTP
47 + C1 & C2 & C3 & C4 & C5 & C6 -->|cargo build| SSH
48 + HTTP & SSH --> PG
49 + HTTP & SSH --> REPOS
50 +```
51 +
52 +**Ce que vous allez faire** : cloner les sources → préparer PostgreSQL → copier et remplir `.env` → compiler les assets CSS → lancer `cargo run` → vérifier l'instance → pousser un premier commit via SSH.
53 +
54 +---
55 +
56 +## Étape 1 : Vérifiez les pré-requis système
57 +
58 +Avant de cloner quoi que ce soit, vérifiez que tous les outils nécessaires sont installés :
59 +
60 +```bash
61 +rustc --version && cargo --version && psql --version && node --version && git --version
62 +```
63 +
64 +Sortie attendue (versions exactes peuvent varier) :
65 +```
66 +rustc 1.82.0 (f6e511eec 2024-10-15)
67 +cargo 1.82.0 (8f40fc59f 2024-10-15)
68 +psql (PostgreSQL) 16.3
69 +v20.11.0
70 +git version 2.43.0
71 +```
72 +
73 +Si des dépendances système manquent, installez-les :
74 +
75 +```bash
76 +# Debian / Ubuntu
77 +sudo apt install build-essential pkg-config libssl-dev libpq-dev cmake git
78 +
79 +# macOS
80 +brew install postgresql openssl cmake
81 +```
82 +
83 +**Checkpoint** : toutes les commandes de vérification doivent retourner un numéro de version sans erreur. Si `rustc` n'est pas trouvé, installez Rust via `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh` puis rechargez votre shell.
84 +
85 +---
86 +
87 +## Étape 2 : Clonez le projet
88 +
89 +```bash
90 +git clone https://demo.gitrust.eu/gitrust/gitrust.git
91 +cd gitrust
92 +```
93 +
94 +Sortie attendue :
95 +```
96 +Cloning into 'gitrust'...
97 +remote: Enumerating objects: 12847, done.
98 +remote: Counting objects: 100% (12847/12847), done.
99 +Receiving objects: 100% (12847/12847), 18.42 MiB | 4.20 MiB/s, done.
100 +```
101 +
102 +**Checkpoint** : vérifiez que la structure de crates est présente :
103 +
104 +```bash
105 +ls crates/
106 +```
107 +
108 +Sortie attendue :
109 +```
110 +gitrust-core gitrust-git gitrust-hooks gitrust-ssh gitrust-web rustwarden-core
111 +```
112 +
113 +---
114 +
115 +## Étape 3 : Configurez l'environnement (.env)
116 +
117 +Copiez le fichier d'exemple et éditez les 5 valeurs essentielles :
118 +
119 +```bash
120 +cp .env.example .env
121 +```
122 +
123 +Ouvrez `.env` dans votre éditeur et renseignez ces valeurs :
124 +
125 +```env
126 +# Connexion à la base de données
127 +DATABASE_URL=postgres://gitrust:motdepasse@localhost:5432/gitrust
128 +
129 +# Clé secrète JWT (générez-la avec : openssl rand -hex 32)
130 +JWT_SECRET=votre_cle_secrete_64_caracteres
131 +
132 +# Compte administrateur créé au premier lancement
133 +ADMIN_USERNAME=admin
134 +ADMIN_EMAIL=admin@example.com
135 +ADMIN_PASSWORD=MotDePasseFort123!
136 +```
137 +
138 +> Les autres variables ont des valeurs par défaut raisonnables pour le développement. Consultez `.env.example` pour la liste complète.
139 +
140 +Générez une vraie valeur pour `JWT_SECRET` :
141 +
142 +```bash
143 +openssl rand -hex 32
144 +```
145 +
146 +Sortie attendue (valeur différente à chaque exécution) :
147 +```
148 +4a7f2c9e1b8d3f6a0e5c2b9d7f4a1e8c3b6d9f2a5e8c1b4d7f0a3e6c9b2d5f8a
149 +```
150 +
151 +Copiez cette valeur dans `.env` pour `JWT_SECRET`.
152 +
153 +**Checkpoint** : vérifiez qu'aucune valeur d'exemple reste dans `.env` :
154 +
155 +```bash
156 +grep -E "votre_cle|example\.com|MotDePasse" .env
157 +```
158 +
159 +La commande doit retourner vide (aucune ligne). Si elle retourne des lignes, ces valeurs placeholder sont encore présentes — l'application démarrera mais avec une configuration non sécurisée.
160 +
161 +---
162 +
163 +## Étape 4 : Préparez la base de données PostgreSQL
164 +
165 +Vous avez deux options :
166 +
167 +**Option A — Docker (recommandé pour débuter) :**
168 +
169 +```bash
170 +cd database && docker compose up -d && cd ..
171 +```
172 +
173 +Sortie attendue :
174 +```
175 +[+] Running 2/2
176 + ✔ Container gitrust_postgres_dev Started 0.8s
177 + ✔ Container gitrust_pgadmin Started 1.1s
178 +```
179 +
180 +**Option B — PostgreSQL existant sur la machine :**
181 +
182 +```bash
183 +psql -U postgres << 'SQL'
184 +CREATE USER gitrust WITH PASSWORD 'motdepasse';
185 +CREATE DATABASE gitrust OWNER gitrust;
186 +SQL
187 +```
188 +
189 +Sortie attendue :
190 +```
191 +CREATE ROLE
192 +CREATE DATABASE
193 +```
194 +
195 +Adaptez le mot de passe dans `DATABASE_URL` dans `.env` si vous utilisez l'option B.
196 +
197 +**Checkpoint** : vérifiez que la base est accessible depuis l'application :
198 +
199 +```bash
200 +psql "$DATABASE_URL" -c "SELECT version();"
201 +```
202 +
203 +Sortie attendue :
204 +```
205 + version
206 +-------------------------------------------------------------------------------------------------------
207 + PostgreSQL 16.3 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0, 64-bit
208 +(1 row)
209 +```
210 +
211 +Si vous obtenez `psql: error: connection to server failed`, vérifiez que PostgreSQL tourne et que `DATABASE_URL` correspond.
212 +
213 +---
214 +
215 +## Étape 5 : Compilez les assets CSS
216 +
217 +gitrust utilise Tailwind CSS + DaisyUI. Les assets doivent être compilés localement — aucun CDN, tous les fichiers sont servis depuis `static/` :
218 +
219 +```bash
220 +npm install
221 +npx tailwindcss -i static/css/input.css -o static/css/style.css --minify
222 +```
223 +
224 +Sortie attendue :
225 +```
226 +added 98 packages in 3s
227 +
228 +Rebuilding...
229 +Done in 1842ms.
230 +```
231 +
232 +**Checkpoint** : vérifiez que le fichier CSS est généré :
233 +
234 +```bash
235 +ls -lh static/css/style.css
236 +```
237 +
238 +Sortie attendue :
239 +```
240 +-rw-r--r-- 1 vous vous 45K avr 17 10:15 static/css/style.css
241 +```
242 +
243 +Si le fichier fait 0 octet ou n'existe pas, la compilation a échoué — relancez `npm install` puis la commande `npx tailwindcss`.
244 +
245 +---
246 +
247 +## Étape 6 : Lancez l'application
248 +
249 +```bash
250 +cargo run
251 +```
252 +
253 +La première compilation prend 2 à 5 minutes (toutes les dépendances sont compilées). Les compilations suivantes sont incrémentales et beaucoup plus rapides.
254 +
255 +Au premier lancement, gitrust exécute automatiquement :
256 +1. Les migrations de base de données (création de toutes les tables)
257 +2. La création du compte administrateur (depuis `.env`)
258 +3. La génération de la clé SSH host (`data/ssh_host_ed25519_key`)
259 +4. La création du répertoire de stockage des dépôts (`data/repos/`)
260 +
261 +Sortie attendue (après compilation) :
262 +```
263 + Compiling gitrust-web v0.9.0 (/home/vous/gitrust/crates/gitrust-web)
264 + Finished `dev` profile [unoptimized + debuginfo] target(s) in 187.42s
265 + Running `target/debug/gitrust`
266 +2026-04-17T10:20:00Z INFO gitrust > Starting gitrust v0.9.0
267 +2026-04-17T10:20:00Z INFO gitrust > Running database migrations... applied 42
268 +2026-04-17T10:20:01Z INFO gitrust > Admin account created: admin
269 +2026-04-17T10:20:01Z INFO gitrust > SSH host key: SHA256:xxxxxxxxxxxxxxxxxxxx
270 +Server listening on http://0.0.0.0:4000
271 +```
272 +
273 +**Checkpoint** : ouvrez `http://localhost:4000` dans votre navigateur. Vous devez voir la page d'accueil gitrust. Connectez-vous avec les identifiants `ADMIN_USERNAME` / `ADMIN_PASSWORD` définis dans `.env`. Si la page ne charge pas, vérifiez que le message `Server listening on http://0.0.0.0:4000` est bien apparu dans les logs.
274 +
275 +---
276 +
277 +## Étape 7 : Créez un dépôt et poussez votre premier commit
278 +
279 +Dans l'interface web (`http://localhost:4000`), cliquez sur **« New repository »**, donnez un nom (ex. `mon-projet`) et cliquez **Créer**.
280 +
281 +Ajoutez votre clé SSH publique dans **Settings > SSH Keys** en collant le contenu de `~/.ssh/id_ed25519.pub`.
282 +
283 +Puis dans votre terminal :
284 +
285 +```bash
286 +git clone ssh://git@localhost:2222/admin/mon-projet.git
287 +cd mon-projet
288 +
289 +echo "# Mon projet" > README.md
290 +git add README.md
291 +git commit -m "Initial commit"
292 +git push origin main
293 +```
294 +
295 +Sortie attendue :
296 +```
297 +Cloning into 'mon-projet'...
298 +warning: You appear to have cloned an empty repository.
299 +[main (root-commit) a1b2c3d] Initial commit
300 + 1 file changed, 1 insertion(+)
301 + create mode 100644 README.md
302 +Enumerating objects: 3, done.
303 +Counting objects: 100% (3/3), done.
304 +Writing objects: 100% (3/3), 226 bytes | 226.00 KiB/s, done.
305 +Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
306 +To ssh://localhost:2222/admin/mon-projet.git
307 + * [new branch] main -> main
308 +```
309 +
310 +**Checkpoint** : retournez dans le navigateur sur `http://localhost:4000/admin/mon-projet`. La page doit afficher le fichier `README.md` avec le contenu `# Mon projet` et indiquer 1 commit sur la branche `main`.
311 +
312 +---
313 +
314 +## Fonctionnalités supplémentaires disponibles
315 +
316 +### CI intégrée (optionnelle)
317 +
318 +La CI s'exécute sur un serveur de build via SSH + rsync. Configurez dans `.env` :
319 +
320 +```env
321 +# Même machine (défaut pour le développement)
322 +CI_REMOTE_HOST=localhost
323 +
324 +# Ou serveur dédié
325 +CI_REMOTE_HOST=192.168.13.110
326 +CI_REMOTE_USER=ci-runner
327 +```
328 +
329 +**Easy Mode** — ajoutez `.gitrust-ci.yml` à la racine de votre dépôt :
330 +
331 +```yaml
332 +language: rust
333 +
334 +build:
335 + command: "cargo build --release"
336 +
337 +tests:
338 + command: "cargo test"
339 +```
340 +
341 +**Power Mode** — placez un module Dagger dans `.dagger/` à la racine. gitrust exécutera `dagger call -m .dagger/ ci`.
342 +
343 +### Notifications
344 +
345 +Configurez SMTP dans `.env` pour les notifications e-mail :
346 +
347 +```env
348 +SMTP_HOST=smtp.example.com
349 +SMTP_PORT=587
350 +SMTP_USER=user
351 +SMTP_PASSWORD=password
352 +SMTP_FROM=noreply@gitrust.eu
353 +```
354 +
355 +### Langue de l'interface
356 +
357 +gitrust est disponible en 6 langues (fr, en, de, es, pt, it). Définissez la langue par défaut de l'instance :
358 +
359 +```env
360 +DEFAULT_LOCALE=fr
361 +```
362 +
363 +---
364 +
365 +## Récapitulatif
366 +
367 +- ✓ **O1 accompli** : gitrust est compilé depuis les sources et tourne localement — `cargo run` affiche « Server listening on http://0.0.0.0:4000 »
368 +- ✓ **O2 accompli** : l'environnement est configuré — `.env` rempli, PostgreSQL connecté, assets CSS générés, migrations appliquées
369 +- ✓ **O3 accompli** : un premier push SSH a réussi — le commit est visible dans l'interface web à `http://localhost:4000/admin/mon-projet`
370 +
371 +---
372 +
373 +## Et si ça ne marche pas
374 +
375 +| Symptôme | Cause probable | Correction |
376 +|----------|----------------|------------|
377 +| `error[E0463]: can't find crate for 'std'` à la compilation | Toolchain Rust manquante ou mauvaise version | Exécutez `rustup update stable && rustup default stable`. Vérifiez avec `rustc --version` ≥ 1.80 |
378 +| `connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed` | PostgreSQL non démarré ou `DATABASE_URL` incorrect | Démarrez PostgreSQL (`sudo systemctl start postgresql` ou `docker compose up -d` dans `database/`). Vérifiez que `DATABASE_URL` dans `.env` correspond |
379 +| `Permission denied (publickey)` lors du `git push` | Clé SSH non enregistrée dans gitrust ou mauvais port | Vérifiez dans *Settings > SSH Keys* que la clé est présente. Testez avec `ssh -T git@localhost -p 2222` — vous devez voir « Vous êtes authentifié » |
380 +
381 +---
382 +
383 +## Prochaine étape
384 +
385 +→ [02 — Première contribution : clone, build, test, PR](02-premiere-contribution.md) : apprenez à créer une feature branch, écrire des tests, et soumettre votre première pull request en suivant le workflow gitrust (~90 min)
A developer_manual/tutorials/02-premiere-contribution.md
+11 -0
@@ -0,0 +1,11 @@
1 +# 02 — Première contribution
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/tutorials/03-creer-un-worker-async.md
+11 -0
@@ -0,0 +1,11 @@
1 +# 03 — Créer un worker async (capstone)
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A developer_manual/tutorials/index.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Tutoriels
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A diagrams/architecture-globale.mmd
+98 -0
@@ -0,0 +1,98 @@
1 +%%{init: {"theme": "default"}}%%
2 +flowchart TB
3 + %% -------------------------------------------------------------------------
4 + %% Clients externes
5 + %% -------------------------------------------------------------------------
6 + subgraph Clients
7 + Browser["Navigateur Web"]
8 + GitCLI["Git CLI"]
9 + end
10 +
11 + %% -------------------------------------------------------------------------
12 + %% Point d'entrée binaire
13 + %% -------------------------------------------------------------------------
14 + subgraph Binaire["Binaire gitrust (src/main.rs)"]
15 + Main["main()"]
16 + end
17 +
18 + %% -------------------------------------------------------------------------
19 + %% Crates applicatifs gitrust
20 + %% -------------------------------------------------------------------------
21 + subgraph Crates["Crates Gitrust"]
22 + Web["gitrust-web\nRoutes HTTP · templates Askama\nhandlers Axum · SSR + API REST"]
23 + SSH["gitrust-ssh\nServeur SSH (russh)\nauth par clé · sessions git"]
24 + Hooks["gitrust-hooks\nimpl RustwardenHooks\non_user_registered · on_user_deleted"]
25 + Core["gitrust-core\nModels SeaORM · services métier\nmigrations · rôles · DTOs"]
26 + Git["gitrust-git\nBare repos · tree browser\nblob reader · pack protocol (git2)"]
27 + end
28 +
29 + %% -------------------------------------------------------------------------
30 + %% Framework rustwarden-core
31 + %% -------------------------------------------------------------------------
32 + subgraph Framework["Framework"]
33 + RW["rustwarden-core\nAuth · JWT · sessions\nResourceService · i18n · SMTP worker"]
34 + end
35 +
36 + %% -------------------------------------------------------------------------
37 + %% Stockage persistant
38 + %% -------------------------------------------------------------------------
39 + subgraph Stockage["Stockage"]
40 + PG[("PostgreSQL\nusers · repositories · ssh_keys\nteams · ci_pipelines · notifications")]
41 + FS[("Filesystem\nbare repos .git\nSSH host key")]
42 + end
43 +
44 + %% -------------------------------------------------------------------------
45 + %% CI/CD (optionnel — CI_ENABLED=true)
46 + %% -------------------------------------------------------------------------
47 + subgraph CI["CI/CD (optionnel)"]
48 + CiWorker["CiWorker\ntokio::spawn · mpsc"]
49 + Dagger["Dagger Engine\ncontainers isolés · cache"]
50 + CiEngine["ci-engine\nmodule Dagger Python\nEasy Mode"]
51 + Syft["Syft\ngénération SBOM CycloneDX"]
52 + DTrack["Dependency-Track\nanalyse vulnérabilités CVE"]
53 + end
54 +
55 + %% -------------------------------------------------------------------------
56 + %% Flux clients → serveurs
57 + %% -------------------------------------------------------------------------
58 + Browser -->|"HTTP :4000"| Web
59 + GitCLI -->|"SSH :2222"| SSH
60 + GitCLI -->|"HTTPS :4000"| Web
61 +
62 + %% -------------------------------------------------------------------------
63 + %% main() → crates
64 + %% -------------------------------------------------------------------------
65 + Main --> Web
66 + Main --> SSH
67 + Main --> Hooks
68 + Main -.->|"si CI_ENABLED"| CiWorker
69 +
70 + %% -------------------------------------------------------------------------
71 + %% Crates → Core et Git
72 + %% -------------------------------------------------------------------------
73 + Web --> Core
74 + Web --> Git
75 + SSH --> Core
76 + SSH --> Git
77 + Hooks --> Core
78 +
79 + %% -------------------------------------------------------------------------
80 + %% Core → Framework et PostgreSQL
81 + %% -------------------------------------------------------------------------
82 + Core --> RW
83 + Core --> PG
84 +
85 + %% -------------------------------------------------------------------------
86 + %% Git → Filesystem
87 + %% -------------------------------------------------------------------------
88 + Git --> FS
89 +
90 + %% -------------------------------------------------------------------------
91 + %% CI pipeline
92 + %% -------------------------------------------------------------------------
93 + CiWorker --> Core
94 + CiWorker -->|"dagger call"| Dagger
95 + Dagger -->|"Easy Mode"| CiEngine
96 + Dagger -->|"Power Mode (.dagger/)"| FS
97 + CiWorker -.->|"si CI_SBOM_ENABLED"| Syft
98 + Syft -.->|"si CI_DTRACK_ENABLED"| DTrack
A diagrams/flux-requetes.mmd
+68 -0
@@ -0,0 +1,68 @@
1 +%%{init: {"theme": "default"}}%%
2 +sequenceDiagram
3 + %% -------------------------------------------------------------------------
4 + %% Flux : Push SSH authentifié
5 + %% Source : gitrust/docs/SEQUENCES.md §3 (Push SSH)
6 + %% -------------------------------------------------------------------------
7 +
8 + actor Dev as Développeur
9 + participant Client as Git CLI
10 + participant SSH as gitrust-ssh
11 + participant Auth as SshKeyService
12 + participant Access as AccessService
13 + participant Git as gitrust-git
14 + participant DB as PostgreSQL
15 + participant FS as Bare repo (.git)
16 +
17 + %% --- Phase 1 : connexion et authentification par clé publique ---
18 + Dev->>Client: git push ssh://git@host:2222/alice/my-repo.git
19 + Client->>SSH: Connexion TCP :2222
20 + SSH-->>Client: Banner SSH + échange de clés
21 +
22 + Client->>SSH: Auth publickey (signature Ed25519/RSA)
23 + SSH->>Auth: find_by_fingerprint(db, fingerprint)
24 + Auth->>DB: SELECT FROM ssh_keys WHERE fingerprint = ?
25 + DB-->>Auth: ssh_key::Model {user_id, key_id}
26 + Auth-->>SSH: user_id
27 +
28 + SSH->>Auth: update_last_used(db, key_id)
29 + Auth->>DB: UPDATE ssh_keys SET last_used_at = now()
30 + DB-->>Auth: Ok
31 +
32 + SSH-->>Client: Auth OK
33 +
34 + %% --- Phase 2 : commande git-receive-pack ---
35 + Client->>SSH: exec "git-receive-pack 'alice/my-repo.git'"
36 + SSH->>SSH: CommandHandler::parse(...)
37 + Note over SSH: owner=alice · repo=my-repo
38 +
39 + %% --- Phase 3 : vérification des droits ---
40 + SSH->>Access: effective_role(db, user_id, repo_id)
41 + Access->>DB: ownership + resource_shares + team_repository_access
42 + DB-->>Access: Role::Developer
43 + Access-->>SSH: can_push = true (Developer ≥ Developer)
44 +
45 + %% --- Phase 4 : négociation git pack protocol ---
46 + SSH->>Git: pack_protocol::advertise_refs(repo_path)
47 + Git->>FS: Lecture refs (heads, tags)
48 + FS-->>Git: refs/heads/main · ...
49 + Git-->>SSH: refs advertisement
50 +
51 + SSH-->>Client: refs advertisement
52 + Client->>SSH: pack data + update commands
53 +
54 + %% --- Phase 5 : écriture des objets ---
55 + SSH->>Git: pack_protocol::serve_pack(repo_path, receive-pack)
56 + Git->>FS: Écriture objets packfile + update refs
57 + FS-->>Git: Ok
58 + Git-->>SSH: Ok
59 +
60 + %% --- Phase 6 : mise à jour metadata ---
61 + SSH->>DB: UPDATE repositories SET is_empty=false, updated_at=now()
62 + DB-->>SSH: Ok
63 +
64 + SSH-->>Client: Push OK (unpack ok · refs mis à jour)
65 + Client-->>Dev: Push réussi
66 +
67 + %% --- Phase 7 : déclenchement CI (si CI_ENABLED=true) ---
68 + Note over SSH,DB: Si CI_ENABLED=true et .gitrust-ci.yml ou .dagger/ détecté :<br/>CiDetectionService::detect() → CiService::create_pipeline() → mpsc::Sender → CiWorker
A po/de.po
+21 -0
@@ -0,0 +1,21 @@
1 +# Documentation gitrust — traduction allemande
2 +# Copyright (C) 2024 L'équipe gitrust
3 +# This file is distributed under the same license as the gitrust documentation package.
4 +#
5 +# REMARQUE : Ce fichier est un stub vide.
6 +# Il sera complété progressivement une fois la version anglaise (en.po) stabilisée.
7 +# Pour contribuer : voir CONTRIBUTING.md § Workflow de traduction
8 +#
9 +msgid ""
10 +msgstr ""
11 +"Project-Id-Version: girust_doc 1.0\n"
12 +"Report-Msgid-Bugs-To: contact@ebii.fr\n"
13 +"POT-Creation-Date: 2024-01-01 00:00+0000\n"
14 +"PO-Revision-Date: 2024-01-01 00:00+0000\n"
15 +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
16 +"Language-Team: German <LL@li.org>\n"
17 +"Language: de\n"
18 +"MIME-Version: 1.0\n"
19 +"Content-Type: text/plain; charset=UTF-8\n"
20 +"Content-Transfer-Encoding: 8bit\n"
21 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
A po/en.po
+21 -0
@@ -0,0 +1,21 @@
1 +# Documentation gitrust — traduction anglaise
2 +# Copyright (C) 2024 L'équipe gitrust
3 +# This file is distributed under the same license as the gitrust documentation package.
4 +#
5 +# REMARQUE : Ce fichier est un stub initial.
6 +# Il sera régénéré par `mdbook-xgettext` une fois les sources FR stabilisées.
7 +# Pour contribuer à la traduction : voir CONTRIBUTING.md § Workflow de traduction
8 +#
9 +msgid ""
10 +msgstr ""
11 +"Project-Id-Version: girust_doc 1.0\n"
12 +"Report-Msgid-Bugs-To: contact@ebii.fr\n"
13 +"POT-Creation-Date: 2024-01-01 00:00+0000\n"
14 +"PO-Revision-Date: 2024-01-01 00:00+0000\n"
15 +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
16 +"Language-Team: English <LL@li.org>\n"
17 +"Language: en\n"
18 +"MIME-Version: 1.0\n"
19 +"Content-Type: text/plain; charset=UTF-8\n"
20 +"Content-Transfer-Encoding: 8bit\n"
21 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
A po/es.po
+21 -0
@@ -0,0 +1,21 @@
1 +# Documentation gitrust — traduction espagnole
2 +# Copyright (C) 2024 L'équipe gitrust
3 +# This file is distributed under the same license as the gitrust documentation package.
4 +#
5 +# REMARQUE : Ce fichier est un stub vide.
6 +# Il sera complété progressivement une fois la version anglaise (en.po) stabilisée.
7 +# Pour contribuer : voir CONTRIBUTING.md § Workflow de traduction
8 +#
9 +msgid ""
10 +msgstr ""
11 +"Project-Id-Version: girust_doc 1.0\n"
12 +"Report-Msgid-Bugs-To: contact@ebii.fr\n"
13 +"POT-Creation-Date: 2024-01-01 00:00+0000\n"
14 +"PO-Revision-Date: 2024-01-01 00:00+0000\n"
15 +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
16 +"Language-Team: Spanish <LL@li.org>\n"
17 +"Language: es\n"
18 +"MIME-Version: 1.0\n"
19 +"Content-Type: text/plain; charset=UTF-8\n"
20 +"Content-Transfer-Encoding: 8bit\n"
21 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
A po/it.po
+21 -0
@@ -0,0 +1,21 @@
1 +# Documentation gitrust — traduction italienne
2 +# Copyright (C) 2024 L'équipe gitrust
3 +# This file is distributed under the same license as the gitrust documentation package.
4 +#
5 +# REMARQUE : Ce fichier est un stub vide.
6 +# Il sera complété progressivement une fois la version anglaise (en.po) stabilisée.
7 +# Pour contribuer : voir CONTRIBUTING.md § Workflow de traduction
8 +#
9 +msgid ""
10 +msgstr ""
11 +"Project-Id-Version: girust_doc 1.0\n"
12 +"Report-Msgid-Bugs-To: contact@ebii.fr\n"
13 +"POT-Creation-Date: 2024-01-01 00:00+0000\n"
14 +"PO-Revision-Date: 2024-01-01 00:00+0000\n"
15 +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
16 +"Language-Team: Italian <LL@li.org>\n"
17 +"Language: it\n"
18 +"MIME-Version: 1.0\n"
19 +"Content-Type: text/plain; charset=UTF-8\n"
20 +"Content-Transfer-Encoding: 8bit\n"
21 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
A po/pt.po
+21 -0
@@ -0,0 +1,21 @@
1 +# Documentation gitrust — traduction portugaise
2 +# Copyright (C) 2024 L'équipe gitrust
3 +# This file is distributed under the same license as the gitrust documentation package.
4 +#
5 +# REMARQUE : Ce fichier est un stub vide.
6 +# Il sera complété progressivement une fois la version anglaise (en.po) stabilisée.
7 +# Pour contribuer : voir CONTRIBUTING.md § Workflow de traduction
8 +#
9 +msgid ""
10 +msgstr ""
11 +"Project-Id-Version: girust_doc 1.0\n"
12 +"Report-Msgid-Bugs-To: contact@ebii.fr\n"
13 +"POT-Creation-Date: 2024-01-01 00:00+0000\n"
14 +"PO-Revision-Date: 2024-01-01 00:00+0000\n"
15 +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
16 +"Language-Team: Portuguese <LL@li.org>\n"
17 +"Language: pt\n"
18 +"MIME-Version: 1.0\n"
19 +"Content-Type: text/plain; charset=UTF-8\n"
20 +"Content-Transfer-Encoding: 8bit\n"
21 +"Plural-Forms: nplurals=2; plural=(n > 1);\n"
A src/.omc/state/idle-notif-cooldown.json
+3 -0
@@ -0,0 +1,3 @@
1 +{
2 + "lastSentAt": "2026-04-17T14:23:23.237Z"
3 +}
3 < \ No newline at end of file
A src/SUMMARY.md
+115 -0
@@ -0,0 +1,115 @@
1 +# Sommaire
2 +
3 +[Introduction](introduction.md)
4 +
5 +---
6 +
7 +# Manuel utilisateur
8 +
9 +- [Vue d'ensemble](user_manual/index.md)
10 +- [Tutoriels](user_manual/tutorials/index.md)
11 + - [01 — Premier pas sur gitrust](user_manual/tutorials/01-premier-pas.md)
12 + - [02 — Cloner et pousser du code](user_manual/tutorials/02-cloner-pousser.md)
13 + - [03 — Collaborer : équipes, issues, pull requests](user_manual/tutorials/03-collaborer.md)
14 + - [04 — Automatiser avec la CI](user_manual/tutorials/04-automatiser-ci.md)
15 +- [Guides pratiques](user_manual/how-to/index.md)
16 + - [Gérer ses clés SSH](user_manual/how-to/gerer-cles-ssh.md)
17 + - [Configurer la double authentification (2FA)](user_manual/how-to/configurer-2fa.md)
18 + - [Créer un Personal Access Token](user_manual/how-to/creer-personal-access-token.md)
19 + - [Gérer les équipes et les permissions](user_manual/how-to/gerer-equipes-permissions.md)
20 + - [Ouvrir une pull request](user_manual/how-to/ouvrir-pull-request.md)
21 + - [Stratégies de fusion (ff / squash / merge commit)](user_manual/how-to/fusionner-strategies.md)
22 + - [Utiliser les labels et les issues](user_manual/how-to/utiliser-labels-issues.md)
23 + - [Importer un dépôt externe](user_manual/how-to/importer-depot-externe.md)
24 + - [Consulter le SBOM d'un dépôt](user_manual/how-to/consulter-sbom.md)
25 +- [Référence](user_manual/reference/index.md)
26 + - [Modèle de permissions (4 rôles)](user_manual/reference/modele-permissions.md)
27 + - [API REST v1](user_manual/reference/api-rest-v1.md)
28 + - [Schéma du fichier .gitrust-ci.yml](user_manual/reference/gitrust-ci-yml-schema.md)
29 + - [Markdown et syntaxe supportée](user_manual/reference/markdown-et-syntaxe.md)
30 + - [Notifications](user_manual/reference/notifications.md)
31 +- [Explication](user_manual/explanation/index.md)
32 + - [Modèle de collaboration sur gitrust](user_manual/explanation/modele-collaboration.md)
33 + - [Sécurité côté utilisateur](user_manual/explanation/securite-utilisateur.md)
34 + - [Cycle de vie d'une pull request](user_manual/explanation/cycle-vie-pull-request.md)
35 +
36 +---
37 +
38 +# Manuel d'administration
39 +
40 +- [Vue d'ensemble](administration_manual/index.md)
41 +- [Tutoriels](administration_manual/tutorials/index.md)
42 + - [01 — Installation avec Docker](administration_manual/tutorials/01-installation-docker.md)
43 + - [02 — Installation avec systemd](administration_manual/tutorials/02-installation-systemd.md)
44 + - [03 — Premier démarrage](administration_manual/tutorials/03-premier-demarrage.md)
45 + - [04 — Mise en production (réseau local)](administration_manual/tutorials/04-mise-en-production-192-168.md)
46 +- [Guides pratiques](administration_manual/how-to/index.md)
47 + - [Sauvegarder et restaurer](administration_manual/how-to/sauvegarder-restaurer.md)
48 + - [Mettre à jour gitrust](administration_manual/how-to/mettre-a-jour.md)
49 + - [Configurer SMTP](administration_manual/how-to/configurer-smtp.md)
50 + - [Configurer OAuth](administration_manual/how-to/configurer-oauth.md)
51 + - [Configurer un runner CI distant](administration_manual/how-to/configurer-ci-runner-remote.md)
52 + - [Intégrer Dependency-Track (SBOM)](administration_manual/how-to/integrer-dependency-track.md)
53 + - [Durcir avec Fail2ban](administration_manual/how-to/durcir-avec-fail2ban.md)
54 + - [Régler le rate limiting](administration_manual/how-to/tuner-rate-limiting.md)
55 + - [Forcer le 2FA sur toute l'instance](administration_manual/how-to/forcer-2fa-globalement.md)
56 + - [Dépanner SSH](administration_manual/how-to/depanner-ssh.md)
57 + - [Dépanner la CI](administration_manual/how-to/depanner-ci.md)
58 + - [Gérer les utilisateurs (panel /admin)](administration_manual/how-to/gerer-utilisateurs-admin.md)
59 + - [Auditer une instance](administration_manual/how-to/auditer-instance.md)
60 +- [Référence](administration_manual/reference/index.md)
61 + - [Variables d'environnement](administration_manual/reference/variables-environnement.md)
62 + - [Paramètres dynamiques](administration_manual/reference/parametres-dynamiques.md)
63 + - [Schéma de la base de données](administration_manual/reference/schema-base-de-donnees.md)
64 + - [Ports et services](administration_manual/reference/ports-et-services.md)
65 + - [Conformité ANSSI PA-074](administration_manual/reference/conformite-anssi-pa074.md)
66 +- [Explication](administration_manual/explanation/index.md)
67 + - [Architecture globale](administration_manual/explanation/architecture-globale.md)
68 + - [Modèle de déploiement](administration_manual/explanation/modele-deploiement.md)
69 + - [CI Dagger : Easy Mode vs Power Mode](administration_manual/explanation/ci-dagger.md)
70 + - [Stratégie de sauvegarde](administration_manual/explanation/strategie-sauvegarde.md)
71 +
72 +---
73 +
74 +# Manuel développeur
75 +
76 +- [Vue d'ensemble](developer_manual/index.md)
77 +- [Tutoriels](developer_manual/tutorials/index.md)
78 + - [01 — Démarrer avec le code gitrust](developer_manual/tutorials/01-getting-started.md)
79 + - [02 — Première contribution](developer_manual/tutorials/02-premiere-contribution.md)
80 + - [03 — Créer un worker async (capstone)](developer_manual/tutorials/03-creer-un-worker-async.md)
81 +- [Guides pratiques](developer_manual/how-to/index.md)
82 + - [Workflow de contribution et PR](developer_manual/how-to/contribuer-workflow-pr.md)
83 + - [Lancer les tests unitaires](developer_manual/how-to/lancer-tests-unitaires.md)
84 + - [Lancer les tests E2E](developer_manual/how-to/lancer-tests-e2e.md)
85 + - [Ajouter une route web](developer_manual/how-to/ajouter-route-web.md)
86 + - [Ajouter un service métier](developer_manual/how-to/ajouter-service-metier.md)
87 + - [Ajouter une migration de base de données](developer_manual/how-to/ajouter-migration-db.md)
88 + - [Implémenter des webhooks](developer_manual/how-to/implementer-webhooks.md)
89 + - [Implémenter un endpoint API](developer_manual/how-to/implementer-endpoint-api.md)
90 + - [Importer un dépôt externe (code)](developer_manual/how-to/importer-depot-externe-code.md)
91 + - [Contribuer à rustwarden upstream](developer_manual/how-to/contribuer-a-rustwarden.md)
92 + - [Passer la QA avant un merge](developer_manual/how-to/passer-la-qa-avant-merge.md)
93 +- [Référence](developer_manual/reference/index.md)
94 + - [Architecture des crates](developer_manual/reference/architecture-crates.md)
95 + - [Services et API interne](developer_manual/reference/services-api-interne.md)
96 + - [Schéma de la base de données](developer_manual/reference/schema-base-donnees.md)
97 + - [Règles QA et conformité ANSSI](developer_manual/reference/regles-qa-anssi.md)
98 + - [API REST v1](developer_manual/reference/api-rest-v1.md)
99 + - [Hooks Git post-receive](developer_manual/reference/git-hooks-post-receive.md)
100 + - [API rustwarden-core](developer_manual/reference/rustwarden-core-api.md)
101 +- [Explication](developer_manual/explanation/index.md)
102 + - [Vue d'ensemble de l'architecture](developer_manual/explanation/vue-ensemble-architecture.md)
103 + - [Flux de requêtes](developer_manual/explanation/flux-requetes.md)
104 + - [Modèle de permissions RBAC](developer_manual/explanation/modele-permissions-rbac.md)
105 + - [Fonctionnement du 2FA](developer_manual/explanation/2fa-fonctionnement.md)
106 + - [Hiérarchie des labels](developer_manual/explanation/hierarchie-labels.md)
107 + - [CI Dagger : Easy Mode vs Power Mode](developer_manual/explanation/ci-dagger-easy-vs-power.md)
108 + - [Décisions UI (HTMX, DaisyUI)](developer_manual/explanation/decisions-ui-htmx.md)
109 + - [Patron worker async](developer_manual/explanation/patron-worker-async.md)
110 +
111 +---
112 +
113 +# Bibliothèque de templates
114 +
115 +- [Catalogue des templates](template/index.md)
A src/administration_manual
+1 -0
@@ -0,0 +1 @@
1 +../administration_manual
1 < \ No newline at end of file
A src/developer_manual
+1 -0
@@ -0,0 +1 @@
1 +../developer_manual
1 < \ No newline at end of file
A src/introduction.md
+36 -0
@@ -0,0 +1,36 @@
1 +# Introduction
2 +
3 +## Qu'est-ce que gitrust ?
4 +
5 +**gitrust** est une forge Git self-hosted écrite en Rust, conçue pour les équipes de 3 à 20 personnes qui souhaitent maîtriser leur infrastructure de développement. Elle offre un serveur HTTP (`:4000`) et SSH (`:2222`), une CI intégrée via Dagger, la génération de SBOM avec Syft et l'intégration Dependency-Track, une gestion fine des permissions (4 rôles), la double authentification, des labels hiérarchiques et une conformité ANSSI PA-074.
6 +
7 +Une instance publique de démonstration est accessible sur [demo.gitrust.eu](https://demo.gitrust.eu).
8 +
9 +## À qui s'adresse cette documentation ?
10 +
11 +Cette documentation est organisée en quatre parties selon leurs publics respectifs :
12 +
13 +- **Manuel utilisateur** — pour les développeurs qui *utilisent* une instance gitrust existante : push/pull, pull requests, issues, CI, notifications. Prérequis : savoir utiliser Git en ligne de commande.
14 +- **Manuel d'administration** — pour les ops et self-hosters qui déploient, configurent et maintiennent une instance en production. Prérequis : administration Linux, notions de réseau et TLS.
15 +- **Manuel développeur** — pour les contributeurs au code gitrust et les développeurs qui construisent des intégrations sur l'API publique. Prérequis : Rust (pour contribuer) ou un langage client (pour l'API).
16 +- **Bibliothèque de templates** — pour tous les profils, lorsqu'ils cherchent un point de départ prêt à l'emploi (fichiers `.env`, `docker-compose.yml`, configs reverse-proxy, scripts de backup, exemples de clients API).
17 +
18 +## Comment cette documentation est-elle structurée ?
19 +
20 +Cette documentation suit le cadre **Diátaxis**, qui distingue quatre types de contenu selon le besoin du lecteur :
21 +
22 +| Type | Quand l'utiliser | Exemples |
23 +|---|---|---|
24 +| **Tutoriels** | Quand vous apprenez | Installer gitrust, créer votre premier dépôt |
25 +| **Guides pratiques** | Quand vous résolvez un problème précis | Configurer SMTP, gérer les clés SSH |
26 +| **Référence** | Quand vous cherchez une information technique | Variables d'environnement, schéma API REST |
27 +| **Explication** | Quand vous voulez comprendre le pourquoi | Architecture des crates, modèle RBAC |
28 +
29 +Chaque manuel (utilisateur, administration, développeur) contient ces quatre types de contenu organisés de manière indépendante.
30 +
31 +## Naviguer dans la documentation
32 +
33 +- [Manuel utilisateur](user_manual/index.md) — collaborer sur gitrust en tant que développeur
34 +- [Manuel d'administration](administration_manual/index.md) — déployer et exploiter une instance
35 +- [Manuel développeur](developer_manual/index.md) — contribuer au code ou consommer l'API
36 +- [Bibliothèque de templates](template/index.md) — configs et scripts copiables
A src/template
+1 -0
@@ -0,0 +1 @@
1 +../template
1 < \ No newline at end of file
A src/user_manual
+1 -0
@@ -0,0 +1 @@
1 +../user_manual
1 < \ No newline at end of file
A template/docker/docker-compose.minimal.yml
+101 -0
@@ -0,0 +1,101 @@
1 +# =============================================================================
2 +# Gitrust — Docker Compose minimal (dev local / évaluation)
3 +# =============================================================================
4 +# Usage :
5 +# cp template/env/dev-local.env .env
6 +# # Editer .env : JWT_SECRET (openssl rand -hex 32), ADMIN_PASSWORD
7 +# docker compose up -d
8 +# docker compose logs -f gitrust
9 +#
10 +# Ce fichier démarre uniquement les services indispensables :
11 +# - gitrust : application principale (HTTP :4000, SSH :2222)
12 +# - postgres : base de données PostgreSQL 15
13 +#
14 +# Pour une stack production (Redis sessions, SMTP local, CI runner) :
15 +# voir template/docker/docker-compose.production.yml
16 +# =============================================================================
17 +
18 +services:
19 +
20 + # ---------------------------------------------------------------------------
21 + # gitrust — application principale
22 + # ---------------------------------------------------------------------------
23 + gitrust:
24 + # Remplacer par l'image officielle publiée sur le registry du projet.
25 + # Format attendu : ghcr.io/<org>/gitrust:<tag>
26 + # Exemple : ghcr.io/gitrust/gitrust:latest
27 + image: ghcr.io/gitrust/gitrust:latest # <AJUSTER_REGISTRY_ET_TAG>
28 +
29 + depends_on:
30 + postgres:
31 + condition: service_healthy
32 +
33 + ports:
34 + # HTTP — interface web et API REST
35 + - "4000:4000"
36 + # SSH — git clone/push via SSH
37 + - "2222:2222"
38 +
39 + volumes:
40 + # Bare repos git (persistés entre redémarrages)
41 + - gitrust_repos:/opt/gitrust/data/repos
42 + # Clé hôte SSH (générée au premier démarrage, doit survivre aux redémarrages)
43 + - gitrust_keys:/opt/gitrust/data
44 +
45 + env_file:
46 + # Le .env doit être dans le même dossier que ce fichier (ou à la racine du projet).
47 + # Variables critiques à renseigner avant le premier démarrage :
48 + # DATABASE_URL, JWT_SECRET, ADMIN_PASSWORD
49 + - ./.env
50 +
51 + restart: unless-stopped
52 +
53 + healthcheck:
54 + test: ["CMD", "curl", "-f", "http://localhost:4000/api/v1/auth/me"]
55 + interval: 30s
56 + timeout: 10s
57 + retries: 5
58 + start_period: 20s
59 +
60 + # ---------------------------------------------------------------------------
61 + # postgres — base de données
62 + # ---------------------------------------------------------------------------
63 + postgres:
64 + image: postgres:15-alpine
65 +
66 + environment:
67 + # Ces valeurs doivent correspondre à DATABASE_URL dans .env.
68 + # Format : postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}
69 + POSTGRES_USER: gitrust
70 + POSTGRES_PASSWORD: gitrust # <CHANGER_EN_PRODUCTION>
71 + POSTGRES_DB: gitrust_dev
72 +
73 + volumes:
74 + - postgres_data:/var/lib/postgresql/data
75 +
76 + # Ne pas exposer PostgreSQL sur le réseau hôte en production.
77 + # Décommenter uniquement pour debug local (accès psql depuis l'hôte) :
78 + # ports:
79 + # - "127.0.0.1:5432:5432"
80 +
81 + restart: unless-stopped
82 +
83 + healthcheck:
84 + test: ["CMD-SHELL", "pg_isready -U gitrust -d gitrust_dev"]
85 + interval: 10s
86 + timeout: 5s
87 + retries: 5
88 +
89 +# -----------------------------------------------------------------------------
90 +# Volumes nommés — persistés sur le système hôte
91 +# -----------------------------------------------------------------------------
92 +volumes:
93 + # Bare repos git : contient tous les dépôts hébergés
94 + gitrust_repos:
95 +
96 + # Clé hôte SSH ed25519 — NE PAS SUPPRIMER après le premier démarrage.
97 + # La supprimer invalide les known_hosts de tous les utilisateurs.
98 + gitrust_keys:
99 +
100 + # Données PostgreSQL
101 + postgres_data:
A template/env/dev-local.env
+173 -0
@@ -0,0 +1,173 @@
1 +# =============================================================================
2 +# Gitrust — Configuration de developpement local
3 +# =============================================================================
4 +# Usage :
5 +# cp template/env/dev-local.env .env
6 +# $EDITOR .env # ajuster DATABASE_URL, JWT_SECRET, ADMIN_PASSWORD
7 +# docker compose up -d # demarre postgres puis gitrust
8 +#
9 +# Ce fichier cible un poste de dev local avec Docker Compose.
10 +# NE PAS utiliser tel quel en production — voir template/env/production-mono-machine.env
11 +# =============================================================================
12 +
13 +
14 +# =============================================================================
15 +# 1. BASE DE DONNEES
16 +# =============================================================================
17 +# Valeurs par defaut compatibles avec docker-compose.minimal.yml (service postgres).
18 +# Le mot de passe "gitrust" est acceptable en dev local uniquement.
19 +DATABASE_URL=postgres://gitrust:gitrust@localhost:5432/gitrust_dev
20 +
21 +
22 +# =============================================================================
23 +# 2. SERVEUR HTTP
24 +# =============================================================================
25 +# Accessible depuis localhost et le LAN local (pratique pour tester sur mobile).
26 +SERVER_HOST=0.0.0.0
27 +SERVER_PORT=4000
28 +
29 +
30 +# =============================================================================
31 +# 3. LOGGING
32 +# =============================================================================
33 +# Mode debug : toutes les requetes, migrations, sessions affichees.
34 +# Syntaxe avancee : "info,gitrust_core=debug,sea_orm=warn"
35 +RUST_LOG=debug
36 +
37 +
38 +# =============================================================================
39 +# 4. SERVEUR SSH GIT
40 +# =============================================================================
41 +# Cle hote generee automatiquement au premier demarrage si absente.
42 +# En dev : chemin relatif OK. En prod : chemin absolu obligatoire.
43 +# Permissions requises : 600, proprietaire = user qui lance gitrust.
44 +SSH_HOST_KEY_PATH=./data/ssh_host_ed25519_key
45 +
46 +# Port SSH non-privilegie — pas de conflit avec sshd systeme (port 22).
47 +SSH_PORT=2222
48 +SSH_LISTEN_ADDR=0.0.0.0
49 +
50 +# Affiché dans l'UI pour les instructions "Clone via SSH".
51 +SSH_PUBLIC_HOST=localhost
52 +
53 +
54 +# =============================================================================
55 +# 5. JWT & AUTHENTIFICATION
56 +# =============================================================================
57 +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
58 +# JWT_SECRET DOIT etre regenere avant tout usage reel.
59 +# Commande : openssl rand -hex 32
60 +# Les valeurs generiques ("change-me", "my-secret-key", etc.) sont REJETEES
61 +# au demarrage par AuthConfig::from_env().
62 +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
63 +JWT_SECRET=<REMPLACER_openssl_rand_-hex_32>
64 +
65 +JWT_EXPIRATION_MINUTES=15
66 +JWT_ISSUER=gitrust-dev
67 +REFRESH_TOKEN_EXPIRATION_DAYS=7
68 +REMEMBER_ME_EXPIRATION_DAYS=30
69 +
70 +
71 +# =============================================================================
72 +# 6. SESSIONS
73 +# =============================================================================
74 +SESSION_TIMEOUT_MINUTES=30
75 +# seaorm : persiste en base PostgreSQL — recommande meme en dev.
76 +# memory : volatil, perdu au redemarrage (dev ultra-rapide uniquement).
77 +SESSION_BACKEND=seaorm
78 +
79 +
80 +# =============================================================================
81 +# 7. RATE LIMITING — assoupli pour les tests
82 +# =============================================================================
83 +# Valeurs larges pour ne pas bloquer les tests intensifs en dev.
84 +# voir .env.example ligne 134 pour les valeurs de production recommandees.
85 +RATE_LIMIT_LOGIN_PER_MINUTE=60
86 +RATE_LIMIT_REFRESH_PER_MINUTE=120
87 +RATE_LIMIT_GENERAL_PER_MINUTE=1000
88 +
89 +
90 +# =============================================================================
91 +# 8. COOKIES & DEBUG
92 +# =============================================================================
93 +# APP_DEBUG=true desactive les cookies Secure pour HTTP local.
94 +# Ne jamais mettre true en production.
95 +APP_DEBUG=true
96 +COOKIE_SECURE=false
97 +COOKIE_SAME_SITE=Lax
98 +
99 +
100 +# =============================================================================
101 +# 9. ADMIN INITIAL
102 +# =============================================================================
103 +# Cree l'utilisateur admin au premier demarrage si la table users est vide.
104 +ADMIN_USERNAME=admin
105 +ADMIN_EMAIL=admin@localhost.dev
106 +# Remplacer par un mot de passe quelconque en dev (min 8 chars).
107 +ADMIN_PASSWORD=<REMPLACER_MOT_DE_PASSE_DEV>
108 +
109 +
110 +# =============================================================================
111 +# 10. EMAIL SMTP — desactive en dev
112 +# =============================================================================
113 +# SMTP non configure = gitrust demarre, mais les emails ne partent pas.
114 +# Pour tester les emails en local, utiliser Mailpit (docker run -p 1025:1025 -p 8025:8025 axllent/mailpit).
115 +# Puis decommenter les lignes ci-dessous :
116 +# SMTP_HOST=localhost
117 +# SMTP_PORT=1025
118 +# SMTP_USER=dev
119 +# SMTP_PASSWORD=dev
120 +# SMTP_FROM=noreply@localhost.dev
121 +# SMTP_FROM_NAME=Gitrust Dev
122 +# SMTP_USE_TLS=false
123 +# SMTP_USE_STARTTLS=false
124 +# SMTP_ACCEPT_INVALID_CERTS=true
125 +# EMAIL_BASE_URL=http://localhost:4000
126 +EMAIL_VALIDATION_REQUIRED=false
127 +
128 +
129 +# =============================================================================
130 +# 11. INSCRIPTION
131 +# =============================================================================
132 +# Ouvert en dev pour faciliter les tests multi-utilisateurs.
133 +ALLOW_REGISTRATION=true
134 +
135 +
136 +# =============================================================================
137 +# 12. APPLICATION
138 +# =============================================================================
139 +APP_NAME="Gitrust Dev"
140 +DEFAULT_LOCALE=fr
141 +
142 +
143 +# =============================================================================
144 +# 15. DEPOTS GIT
145 +# =============================================================================
146 +# Chemin relatif acceptable en dev (binaire lance depuis la racine du projet).
147 +# En prod : chemin absolu obligatoire (/opt/gitrust/data/repos).
148 +GIT_REPOS_BASE_PATH=./data/repos
149 +
150 +
151 +# =============================================================================
152 +# 18. CI/CD DAGGER — desactive en dev par defaut
153 +# =============================================================================
154 +# Mettre CI_ENABLED=true uniquement si dagger est installe et teste localement.
155 +CI_ENABLED=false
156 +CI_MAX_CONCURRENT=2
157 +CI_DEFAULT_TIMEOUT=3600
158 +CI_WORKSPACE_PATH=/tmp/gitrust-ci
159 +CI_LOG_RETENTION_DAYS=7
160 +
161 +
162 +# =============================================================================
163 +# 20. IMPORT DE DEPOTS EXTERNES
164 +# =============================================================================
165 +IMPORT_MAX_CONCURRENT=1
166 +IMPORT_TIMEOUT_SECS=1800
167 +
168 +
169 +# =============================================================================
170 +# 21. SBOM / DEPENDENCY-TRACK — desactive en dev
171 +# =============================================================================
172 +CI_SBOM_ENABLED=false
173 +CI_DTRACK_ENABLED=false
A template/index.md
+101 -0
@@ -0,0 +1,101 @@
1 +# Bibliothèque de templates gitrust
2 +
3 +Bienvenue dans l'atelier gitrust. Chaque fichier ici est **standalone et copiable tel quel** — un fichier, un cas d'usage. Les commentaires internes suffisent à l'adapter. Pour les explications pédagogiques, référez-vous aux manuels qui pointent vers ces templates.
4 +
5 +> **Convention** : copiez le fichier qui correspond à votre cas, adaptez les valeurs marquées `CHANGE_ME`, puis supprimez les commentaires si vous le souhaitez. Ne modifiez pas les fichiers dans ce dépôt — travaillez toujours sur une copie locale.
6 +
7 +---
8 +
9 +## Fichiers d'environnement (`env/`)
10 +
11 +| Fichier | Cas d'usage |
12 +|---------|-------------|
13 +| [`env/dev-local.env`](env/dev-local.env) | Instance de développement local sur `localhost:4000` — PostgreSQL local, pas de TLS, debug activé |
14 +| [`env/production-mono-machine.env`](env/production-mono-machine.env) | Production mono-machine derrière reverse-proxy — PostgreSQL, SMTP, Redis sessions, TLS délégué |
15 +| [`env/production-ci-heavy.env`](env/production-ci-heavy.env) | Production avec CI runners distants intensifs — tuning pool de connexions, rate limiting ajusté |
16 +| [`env/tests-e2e.env`](env/tests-e2e.env) | Environnement E2E Playwright — base éphémère, seed de données, SMTP mock |
17 +
18 +---
19 +
20 +## Stacks Docker (`docker/`)
21 +
22 +| Fichier | Cas d'usage |
23 +|---------|-------------|
24 +| [`docker/docker-compose.minimal.yml`](docker/docker-compose.minimal.yml) | Stack minimale : gitrust + PostgreSQL uniquement — idéale pour l'évaluation et les tutoriels |
25 +| [`docker/docker-compose.production.yml`](docker/docker-compose.production.yml) | Stack production : gitrust + PostgreSQL + Redis sessions + relay SMTP Postfix |
26 +| [`docker/docker-compose.with-ci-runner.yml`](docker/docker-compose.with-ci-runner.yml) | Stack production + CI runner Dagger en sidecar — pour instances avec builds fréquents |
27 +| [`docker/podman-quadlet.container`](docker/podman-quadlet.container) | Alternative Podman Quadlet — déploiement rootless systemd-native sans Docker daemon |
28 +
29 +---
30 +
31 +## Reverse-proxy (`reverse-proxy/`)
32 +
33 +| Fichier | Cas d'usage |
34 +|---------|-------------|
35 +| [`reverse-proxy/nginx-tls.conf`](reverse-proxy/nginx-tls.conf) | Nginx avec TLS Let's Encrypt — virtual host gitrust, headers de sécurité, proxy WebSocket SSE |
36 +| [`reverse-proxy/caddy-Caddyfile`](reverse-proxy/caddy-Caddyfile) | Caddyfile — TLS automatique, configuration minimale, idéal pour les petites instances |
37 +| [`reverse-proxy/traefik-dynamic.yml`](reverse-proxy/traefik-dynamic.yml) | Traefik config dynamique — intégration labels Docker, middlewares rate-limit et auth |
38 +
39 +---
40 +
41 +## Systemd (`systemd/`)
42 +
43 +| Fichier | Cas d'usage |
44 +|---------|-------------|
45 +| [`systemd/gitrust.service`](systemd/gitrust.service) | Service systemd avec hardening AppArmor/seccomp — pour déploiement binaire natif sans Docker |
46 +| [`systemd/gitrust-backup.timer`](systemd/gitrust-backup.timer) | Timer systemd de sauvegarde quotidienne — déclenche `backup.sh` à 2h00 avec journalisation |
47 +
48 +---
49 +
50 +## Configurations CI (`.gitrust-ci.yml`) (`ci/`)
51 +
52 +| Fichier | Cas d'usage |
53 +|---------|-------------|
54 +| [`ci/rust.gitrust-ci.yml`](ci/rust.gitrust-ci.yml) | Pipeline CI pour projet Rust — fmt, clippy, test, audit de dépendances, SBOM |
55 +| [`ci/go.gitrust-ci.yml`](ci/go.gitrust-ci.yml) | Pipeline CI pour projet Go — vet, staticcheck, test, build multi-arch |
56 +| [`ci/python.gitrust-ci.yml`](ci/python.gitrust-ci.yml) | Pipeline CI pour projet Python — ruff, mypy, pytest, packaging wheel |
57 +| [`ci/node.gitrust-ci.yml`](ci/node.gitrust-ci.yml) | Pipeline CI pour projet Node.js — ESLint, Vitest, build, audit npm |
58 +| [`ci/dagger-power-mode/dagger.json`](ci/dagger-power-mode/dagger.json) | Squelette Dagger Power Mode — module Go minimal à étendre pour pipelines complexes |
59 +| [`ci/dagger-power-mode/main.go`](ci/dagger-power-mode/main.go) | Module Dagger Go — fonctions build/test/publish prêtes à adapter |
60 +
61 +---
62 +
63 +## Scripts de sauvegarde et restauration (`backup/`)
64 +
65 +| Fichier | Cas d'usage |
66 +|---------|-------------|
67 +| [`backup/backup.sh`](backup/backup.sh) | Sauvegarde complète — `pg_dump` + `rsync` des dépôts bare + copie des clés SSH host |
68 +| [`backup/restore.sh`](backup/restore.sh) | Restauration complète depuis une archive de sauvegarde — avec vérification d'intégrité |
69 +
70 +---
71 +
72 +## Clients API d'exemple (`api-clients/`)
73 +
74 +Ces exemples illustrent l'authentification par Personal Access Token (PAT) et les opérations CRUD de base sur l'API REST gitrust v1.
75 +
76 +| Fichier | Cas d'usage |
77 +|---------|-------------|
78 +| [`api-clients/python-create-repo.py`](api-clients/python-create-repo.py) | Client Python — créer un dépôt via l'API v1 avec `httpx` et PAT |
79 +| [`api-clients/rust-list-repos.rs`](api-clients/rust-list-repos.rs) | Client Rust — lister les dépôts avec pagination via `reqwest` et PAT |
80 +| [`api-clients/curl-pat-auth.sh`](api-clients/curl-pat-auth.sh) | Shell curl — exemples d'authentification PAT, GET/POST/DELETE sur les endpoints principaux |
81 +
82 +---
83 +
84 +## Scripts de migration (`migration/`)
85 +
86 +| Fichier | Cas d'usage |
87 +|---------|-------------|
88 +| [`migration/from-gitea.sh`](migration/from-gitea.sh) | Import en masse depuis Gitea — dépôts, membres, issues via le worker d'import gitrust |
89 +| [`migration/from-forgejo.sh`](migration/from-forgejo.sh) | Import en masse depuis Forgejo — même mécanique, adaptée à l'API Forgejo |
90 +
91 +---
92 +
93 +## Comment utiliser ces templates depuis les manuels
94 +
95 +Les manuels narratifs pointent vers ces fichiers depuis leurs sections how-to. Par exemple :
96 +
97 +- `administration_manual/how-to/configurer-smtp.md` → *« Copiez `template/env/production-mono-machine.env` puis... »*
98 +- `administration_manual/tutorials/01-installation-docker.md` → *« La stack s'appuie sur `template/docker/docker-compose.minimal.yml` »*
99 +- `developer_manual/how-to/implementer-endpoint-api.md` → *« Testez avec `template/api-clients/curl-pat-auth.sh` »*
100 +
101 +Les templates ne contiennent pas d'explication pédagogique — tout le contexte se trouve dans les manuels.
A template/reverse-proxy/nginx-tls.conf
+208 -0
@@ -0,0 +1,208 @@
1 +# =============================================================================
2 +# Gitrust — Reverse proxy Nginx avec TLS (Let's Encrypt)
3 +# =============================================================================
4 +# Déploiement :
5 +# sudo cp template/reverse-proxy/nginx-tls.conf /etc/nginx/sites-available/gitrust
6 +# sudo ln -s /etc/nginx/sites-available/gitrust /etc/nginx/sites-enabled/gitrust
7 +# sudo nginx -t && sudo systemctl reload nginx
8 +#
9 +# TLS (Let's Encrypt, après que le bloc HTTP ci-dessous soit actif) :
10 +# sudo certbot --nginx -d <YOUR_DOMAIN>
11 +#
12 +# SSH git :
13 +# Nginx HTTP ne peut pas proxifier SSH. Deux options :
14 +# 1) Exposer le port 2222 directement dans le firewall (recommandé, simple)
15 +# 2) Proxy stream nginx sur :22 → 127.0.0.1:2222 (voir commentaire en bas)
16 +# Prérequis : paquet libnginx-mod-stream + bloc stream{} dans nginx.conf
17 +# =============================================================================
18 +
19 +upstream gitrust_backend {
20 + server 127.0.0.1:4000;
21 + keepalive 32;
22 +}
23 +
24 +# =============================================================================
25 +# HTTP — redirection HTTPS + ACME challenge Let's Encrypt
26 +# =============================================================================
27 +server {
28 + listen 80;
29 + listen [::]:80;
30 + server_name <YOUR_DOMAIN>; # Remplacer par le FQDN de l'instance
31 +
32 + # Répertoire de validation certbot — doit être accessible avant TLS
33 + location /.well-known/acme-challenge/ {
34 + root /var/www/html;
35 + }
36 +
37 + # Tout le reste → HTTPS permanent
38 + location / {
39 + return 301 https://$host$request_uri;
40 + }
41 +}
42 +
43 +# =============================================================================
44 +# HTTPS — reverse proxy vers gitrust
45 +# =============================================================================
46 +server {
47 + listen 443 ssl;
48 + listen [::]:443 ssl;
49 + # Syntaxe nginx >= 1.25. Pour nginx <= 1.24, remplacer les deux lignes
50 + # listen ci-dessus par :
51 + # listen 443 ssl http2;
52 + # listen [::]:443 ssl http2;
53 + http2 on;
54 + server_name <YOUR_DOMAIN>; # Remplacer par le FQDN de l'instance
55 +
56 + # -------------------------------------------------------------------------
57 + # TLS — certificats Let's Encrypt (remplis automatiquement par certbot)
58 + # -------------------------------------------------------------------------
59 + # Décommenter après : sudo certbot --nginx -d <YOUR_DOMAIN>
60 + # ssl_certificate /etc/letsencrypt/live/<YOUR_DOMAIN>/fullchain.pem;
61 + # ssl_certificate_key /etc/letsencrypt/live/<YOUR_DOMAIN>/privkey.pem;
62 + # include /etc/letsencrypt/options-ssl-nginx.conf;
63 + # ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
64 +
65 + # Certificat auto-signé pour valider la config avant certbot (commenter après)
66 + ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
67 + ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
68 +
69 + # Hardening TLS
70 + ssl_protocols TLSv1.2 TLSv1.3;
71 + ssl_prefer_server_ciphers on;
72 + ssl_session_cache shared:SSL:10m;
73 + ssl_session_timeout 1d;
74 +
75 + # -------------------------------------------------------------------------
76 + # En-têtes de sécurité
77 + # -------------------------------------------------------------------------
78 + # HSTS : force HTTPS pendant 1 an, inclut sous-domaines.
79 + # Attention : n'activer includeSubDomains que si TOUS les sous-domaines ont TLS.
80 + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
81 +
82 + # Empêche le navigateur de détecter automatiquement le type MIME (MIME sniffing)
83 + add_header X-Content-Type-Options "nosniff" always;
84 +
85 + # Politique referrer : envoie l'origine complète pour requêtes same-origin,
86 + # uniquement l'origine (sans path) pour requêtes cross-origin HTTPS.
87 + add_header Referrer-Policy "strict-origin-when-cross-origin" always;
88 +
89 + # Empêche l'intégration dans des iframes d'autres origines
90 + add_header X-Frame-Options "SAMEORIGIN" always;
91 +
92 + # -------------------------------------------------------------------------
93 + # Taille max des corps de requête
94 + # -------------------------------------------------------------------------
95 + # 1G pour les git push HTTP de gros dépôts (monorepos, dépôts avec LFS,
96 + # binaires commités). Réduire si l'espace disque est contraint.
97 + # La location git spécifique ci-dessous passe à 2G pour les push volumineux.
98 + client_max_body_size 1G;
99 + client_body_buffer_size 128k;
100 +
101 + # -------------------------------------------------------------------------
102 + # Timeouts étendus pour clone/push de gros dépôts
103 + # -------------------------------------------------------------------------
104 + proxy_connect_timeout 300s;
105 + proxy_send_timeout 3600s;
106 + proxy_read_timeout 3600s;
107 + send_timeout 3600s;
108 +
109 + # -------------------------------------------------------------------------
110 + # Logs
111 + # -------------------------------------------------------------------------
112 + access_log /var/log/nginx/gitrust.access.log;
113 + error_log /var/log/nginx/gitrust.error.log warn;
114 +
115 + # =========================================================================
116 + # Route principale — toutes les pages et l'API REST
117 + # =========================================================================
118 + location / {
119 + proxy_pass http://gitrust_backend;
120 + proxy_http_version 1.1;
121 +
122 + # En-têtes forwarded
123 + proxy_set_header Host $host;
124 + proxy_set_header X-Real-IP $remote_addr;
125 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
126 + proxy_set_header X-Forwarded-Proto $scheme;
127 + proxy_set_header X-Forwarded-Host $host;
128 + proxy_set_header X-Forwarded-Port $server_port;
129 +
130 + # Keep-alive vers l'upstream (connexion réutilisée)
131 + proxy_set_header Connection "";
132 +
133 + # SSE et WebSocket — désactiver la mise en tampon pour :
134 + # - notifications temps réel (/notifications/stream)
135 + # - logs CI en streaming (/repos/.../ci/.../logs)
136 + # - HTMX SSE
137 + proxy_buffering off;
138 + proxy_cache off;
139 + proxy_set_header X-Accel-Buffering no;
140 + }
141 +
142 + # =========================================================================
143 + # Git smart HTTP — clone et push via HTTPS
144 + # =========================================================================
145 + # Pattern : /<owner>/<repo>.git/info/refs, /git-upload-pack, /git-receive-pack
146 + location ~ ^/[^/]+/[^/]+\.git/ {
147 + proxy_pass http://gitrust_backend;
148 + proxy_http_version 1.1;
149 +
150 + proxy_set_header Host $host;
151 + proxy_set_header X-Real-IP $remote_addr;
152 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
153 + proxy_set_header X-Forwarded-Proto $scheme;
154 +
155 + # Désactiver la mise en tampon côté client ET serveur pour les push/clone
156 + proxy_buffering off;
157 + proxy_request_buffering off;
158 + proxy_cache off;
159 +
160 + # Push de gros dépôts peut dépasser 1G (monorepos lourds)
161 + client_max_body_size 2G;
162 + }
163 +
164 + # =========================================================================
165 + # Assets statiques — optionnel : servir directement depuis le filesystem
166 + # =========================================================================
167 + # Décommenter si les fichiers /opt/gitrust/static/ sont lisibles par www-data.
168 + # Réduit la charge sur gitrust pour CSS/JS/images (cache navigateur 7 jours).
169 + # location ^~ /static/ {
170 + # alias /opt/gitrust/static/;
171 + # expires 7d;
172 + # add_header Cache-Control "public, immutable";
173 + # try_files $uri @gitrust;
174 + # }
175 + # location @gitrust {
176 + # proxy_pass http://gitrust_backend;
177 + # }
178 +}
179 +
180 +# =============================================================================
181 +# BONUS — Proxy SSH git via nginx stream (port 22 → gitrust SSH :2222)
182 +# =============================================================================
183 +# ATTENTION : ce bloc `stream {}` est de niveau RACINE nginx et NE PEUT PAS
184 +# être placé dans ce fichier (qui est inclus dans le bloc http{}).
185 +# Le décommenter ici provoquerait : nginx: [emerg] "stream" directive is not allowed here
186 +#
187 +# Méthode correcte : ajouter le bloc ci-dessous À LA FIN de /etc/nginx/nginx.conf
188 +# (hors du bloc http{}), ou dans /etc/nginx/conf.d-stream/gitrust-ssh.conf
189 +# inclus au niveau racine.
190 +#
191 +# Prérequis :
192 +# - paquet libnginx-mod-stream installé (apt install libnginx-mod-stream)
193 +# - sshd système déplacé sur un autre port (ex: 2022) si l'hôte est aussi administré par SSH
194 +#
195 +# stream {
196 +# upstream gitrust_ssh {
197 +# server 127.0.0.1:2222;
198 +# }
199 +# server {
200 +# listen 22;
201 +# listen [::]:22;
202 +# proxy_pass gitrust_ssh;
203 +# proxy_timeout 1h;
204 +# proxy_connect_timeout 30s;
205 +# error_log /var/log/nginx/gitrust-ssh-stream.log;
206 +# }
207 +# }
208 +# =============================================================================
A template/systemd/gitrust.service
+112 -0
@@ -0,0 +1,112 @@
1 +# =============================================================================
2 +# Gitrust — unité systemd avec hardening
3 +# =============================================================================
4 +# Déploiement :
5 +# sudo cp template/systemd/gitrust.service /etc/systemd/system/gitrust.service
6 +# sudo systemctl daemon-reload
7 +# sudo systemctl enable --now gitrust
8 +# sudo systemctl status gitrust
9 +#
10 +# Prérequis :
11 +# - Binaire installé dans /opt/gitrust/gitrust (chmod 755, owned by root)
12 +# - Utilisateur et groupe système créés :
13 +# sudo useradd --system --no-create-home --shell /usr/sbin/nologin gitrust
14 +# - Répertoire de données créé et attribué :
15 +# sudo mkdir -p /opt/gitrust/data/repos /opt/gitrust/data/ssh_keys
16 +# sudo chown -R gitrust:gitrust /opt/gitrust/data
17 +# - Fichier .env placé dans /opt/gitrust/.env (chmod 640, owned by root:gitrust)
18 +# =============================================================================
19 +
20 +[Unit]
21 +Description=Gitrust - Self-hosted Git platform
22 +Documentation=https://gitrust.eu/docs
23 +After=network.target postgresql.service
24 +# postgresql.service : décommenter si PostgreSQL tourne sur la même machine.
25 +# Retirer si PostgreSQL est distant (le service ne doit pas bloquer au démarrage).
26 +Wants=network.target
27 +
28 +[Service]
29 +Type=simple
30 +User=gitrust
31 +Group=gitrust
32 +WorkingDirectory=/opt/gitrust
33 +EnvironmentFile=/opt/gitrust/.env
34 +ExecStart=/opt/gitrust/gitrust
35 +Restart=on-failure
36 +RestartSec=5
37 +
38 +# -------------------------------------------------------------------------
39 +# Hardening systemd
40 +# -------------------------------------------------------------------------
41 +
42 +# Interdit d'acquérir de nouveaux privilèges via execve (setuid/setgid binaires)
43 +NoNewPrivileges=true
44 +
45 +# Système de fichiers racine en lecture seule (hors ReadWritePaths ci-dessous)
46 +ProtectSystem=strict
47 +
48 +# Répertoires home des utilisateurs inaccessibles
49 +ProtectHome=true
50 +
51 +# /tmp et /var/tmp privés et isolés du reste du système
52 +PrivateTmp=true
53 +
54 +# Périphériques physiques inaccessibles (/dev/sda, /dev/mem, etc.)
55 +PrivateDevices=true
56 +
57 +# Espace de noms réseau partagé avec l'hôte (gitrust a besoin du réseau)
58 +# PrivateNetwork=false # valeur par défaut, laisser commenté
59 +
60 +# Protège le kernel et les paramètres systèmes (/proc/sys, /sys, etc.)
61 +ProtectKernelTunables=true
62 +ProtectKernelModules=true
63 +ProtectKernelLogs=true
64 +ProtectControlGroups=true
65 +
66 +# Restreint les appels système aux familles nécessaires pour Rust/tokio/git2
67 +SystemCallArchitectures=native
68 +
69 +# Limite les familles d'appels système autorisés
70 +# @system-service couvre les appels standards pour un serveur (network, io, process)
71 +SystemCallFilter=@system-service @network-io @file-system @io-event @process
72 +
73 +# Interdit d'écrire en mémoire exécutable (exploits JIT/shellcode)
74 +MemoryDenyWriteExecute=true
75 +
76 +# Interdit de modifier les capabilities du processus
77 +RestrictRealtime=true
78 +LockPersonality=true
79 +
80 +# Limite les namespaces créables (gitrust n'a pas besoin de créer de namespaces)
81 +RestrictNamespaces=true
82 +
83 +# -------------------------------------------------------------------------
84 +# Chemins en écriture — tout le reste est en lecture seule (ProtectSystem=strict)
85 +# -------------------------------------------------------------------------
86 +# Repos git bare, clé hôte SSH, workspaces CI temporaires
87 +ReadWritePaths=/opt/gitrust/data
88 +# Workspace CI (si CI_WORKSPACE_PATH pointe ailleurs que /opt/gitrust/data)
89 +# ReadWritePaths=/var/lib/gitrust-ci
90 +
91 +# -------------------------------------------------------------------------
92 +# Ports privilégiés (< 1024)
93 +# -------------------------------------------------------------------------
94 +# Décommenter UNIQUEMENT si gitrust doit écouter directement sur :80 ou :22.
95 +# En configuration normale (nginx devant, SSH sur :2222), cette ligne est inutile.
96 +# AmbientCapabilities=CAP_NET_BIND_SERVICE
97 +
98 +# -------------------------------------------------------------------------
99 +# Journalisation
100 +# -------------------------------------------------------------------------
101 +StandardOutput=journal
102 +StandardError=journal
103 +SyslogIdentifier=gitrust
104 +
105 +# -------------------------------------------------------------------------
106 +# Limites de ressources
107 +# -------------------------------------------------------------------------
108 +# Nombre de fichiers ouverts — gros dépôts git2 + connexions SSH simultanées
109 +LimitNOFILE=65536
110 +
111 +[Install]
112 +WantedBy=multi-user.target
A theme/.gitkeep
+0 -0
A theme/mermaid-init.js
+39 -0
@@ -0,0 +1,39 @@
1 +// This Source Code Form is subject to the terms of the Mozilla Public
2 +// License, v. 2.0. If a copy of the MPL was not distributed with this
3 +// file, You can obtain one at https://mozilla.org/MPL/2.0/.
4 +
5 +(() => {
6 + const darkThemes = ['ayu', 'navy', 'coal'];
7 + const lightThemes = ['light', 'rust'];
8 +
9 + const classList = document.getElementsByTagName('html')[0].classList;
10 +
11 + let lastThemeWasLight = true;
12 + for (const cssClass of classList) {
13 + if (darkThemes.includes(cssClass)) {
14 + lastThemeWasLight = false;
15 + break;
16 + }
17 + }
18 +
19 + const theme = lastThemeWasLight ? 'default' : 'dark';
20 + mermaid.initialize({ startOnLoad: true, theme });
21 +
22 + // Simplest way to make mermaid re-render the diagrams in the new theme is via refreshing the page
23 +
24 + for (const darkTheme of darkThemes) {
25 + document.getElementById(darkTheme).addEventListener('click', () => {
26 + if (lastThemeWasLight) {
27 + window.location.reload();
28 + }
29 + });
30 + }
31 +
32 + for (const lightTheme of lightThemes) {
33 + document.getElementById(lightTheme).addEventListener('click', () => {
34 + if (!lastThemeWasLight) {
35 + window.location.reload();
36 + }
37 + });
38 + }
39 +})();
A theme/mermaid.min.js
+2609 -0
@@ -0,0 +1,2609 @@
1 +/* MIT Licensed. Copyright (c) 2014 - 2022 Knut Sveidqvist */
2 +/* For license information please see https://github.com/mermaid-js/mermaid/blob/develop/LICENSE */
3 +"use strict";var __esbuild_esm_mermaid=(()=>{var B2e=Object.create;var by=Object.defineProperty;var F2e=Object.getOwnPropertyDescriptor;var $2e=Object.getOwnPropertyNames;var z2e=Object.getPrototypeOf,G2e=Object.prototype.hasOwnProperty;var o=(t,e)=>by(t,"name",{value:e,configurable:!0});var N=(t,e)=>()=>(t&&(e=t(t=0)),e);var Mi=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),hr=(t,e)=>{for(var r in e)by(t,r,{get:e[r],enumerable:!0})},L4=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of $2e(e))!G2e.call(t,i)&&i!==r&&by(t,i,{get:()=>e[i],enumerable:!(n=F2e(e,i))||n.enumerable});return t},Sr=(t,e,r)=>(L4(t,e,"default"),r&&L4(r,e,"default")),Sa=(t,e,r)=>(r=t!=null?B2e(z2e(t)):{},L4(e||!t||!t.__esModule?by(r,"default",{value:t,enumerable:!0}):r,t)),V2e=t=>L4(by({},"__esModule",{value:!0}),t);var R4=Mi((EC,SC)=>{"use strict";(function(t,e){typeof EC=="object"&&typeof SC<"u"?SC.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs=e()})(EC,function(){"use strict";var t=1e3,e=6e4,r=36e5,n="millisecond",i="second",a="minute",s="hour",l="day",u="week",h="month",f="quarter",d="year",p="date",m="Invalid Date",g=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,v={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:o(function(k){var L=["th","st","nd","rd"],R=k%100;return"["+k+(L[(R-20)%10]||L[R]||L[0])+"]"},"ordinal")},x=o(function(k,L,R){var O=String(k);return!O||O.length>=L?k:""+Array(L+1-O.length).join(R)+k},"m"),b={s:x,z:o(function(k){var L=-k.utcOffset(),R=Math.abs(L),O=Math.floor(R/60),M=R%60;return(L<=0?"+":"-")+x(O,2,"0")+":"+x(M,2,"0")},"z"),m:o(function k(L,R){if(L.date()<R.date())return-k(R,L);var O=12*(R.year()-L.year())+(R.month()-L.month()),M=L.clone().add(O,h),B=R-M<0,F=L.clone().add(O+(B?-1:1),h);return+(-(O+(R-M)/(B?M-F:F-M))||0)},"t"),a:o(function(k){return k<0?Math.ceil(k)||0:Math.floor(k)},"a"),p:o(function(k){return{M:h,y:d,w:u,d:l,D:p,h:s,m:a,s:i,ms:n,Q:f}[k]||String(k||"").toLowerCase().replace(/s$/,"")},"p"),u:o(function(k){return k===void 0},"u")},w="en",C={};C[w]=v;var T="$isDayjsObject",E=o(function(k){return k instanceof I||!(!k||!k[T])},"S"),A=o(function k(L,R,O){var M;if(!L)return w;if(typeof L=="string"){var B=L.toLowerCase();C[B]&&(M=B),R&&(C[B]=R,M=B);var F=L.split("-");if(!M&&F.length>1)return k(F[0])}else{var P=L.name;C[P]=L,M=P}return!O&&M&&(w=M),M||!O&&w},"t"),S=o(function(k,L){if(E(k))return k.clone();var R=typeof L=="object"?L:{};return R.date=k,R.args=arguments,new I(R)},"O"),_=b;_.l=A,_.i=E,_.w=function(k,L){return S(k,{locale:L.$L,utc:L.$u,x:L.$x,$offset:L.$offset})};var I=function(){function k(R){this.$L=A(R.locale,null,!0),this.parse(R),this.$x=this.$x||R.x||{},this[T]=!0}o(k,"M");var L=k.prototype;return L.parse=function(R){this.$d=function(O){var M=O.date,B=O.utc;if(M===null)return new Date(NaN);if(_.u(M))return new Date;if(M instanceof Date)return new Date(M);if(typeof M=="string"&&!/Z$/i.test(M)){var F=M.match(g);if(F){var P=F[2]-1||0,z=(F[7]||"0").substring(0,3);return B?new Date(Date.UTC(F[1],P,F[3]||1,F[4]||0,F[5]||0,F[6]||0,z)):new Date(F[1],P,F[3]||1,F[4]||0,F[5]||0,F[6]||0,z)}}return new Date(M)}(R),this.init()},L.init=function(){var R=this.$d;this.$y=R.getFullYear(),this.$M=R.getMonth(),this.$D=R.getDate(),this.$W=R.getDay(),this.$H=R.getHours(),this.$m=R.getMinutes(),this.$s=R.getSeconds(),this.$ms=R.getMilliseconds()},L.$utils=function(){return _},L.isValid=function(){return this.$d.toString()!==m},L.isSame=function(R,O){var M=S(R);return this.startOf(O)<=M&&M<=this.endOf(O)},L.isAfter=function(R,O){return S(R)<this.startOf(O)},L.isBefore=function(R,O){return this.endOf(O)<S(R)},L.$g=function(R,O,M){return _.u(R)?this[O]:this.set(M,R)},L.unix=function(){return Math.floor(this.valueOf()/1e3)},L.valueOf=function(){return this.$d.getTime()},L.startOf=function(R,O){var M=this,B=!!_.u(O)||O,F=_.p(R),P=o(function(le,he){var K=_.w(M.$u?Date.UTC(M.$y,he,le):new Date(M.$y,he,le),M);return B?K:K.endOf(l)},"l"),z=o(function(le,he){return _.w(M.toDate()[le].apply(M.toDate("s"),(B?[0,0,0,0]:[23,59,59,999]).slice(he)),M)},"$"),$=this.$W,H=this.$M,Q=this.$D,j="set"+(this.$u?"UTC":"");switch(F){case d:return B?P(1,0):P(31,11);case h:return B?P(1,H):P(0,H+1);case u:var ie=this.$locale().weekStart||0,ne=($<ie?$+7:$)-ie;return P(B?Q-ne:Q+(6-ne),H);case l:case p:return z(j+"Hours",0);case s:return z(j+"Minutes",1);case a:return z(j+"Seconds",2);case i:return z(j+"Milliseconds",3);default:return this.clone()}},L.endOf=function(R){return this.startOf(R,!1)},L.$set=function(R,O){var M,B=_.p(R),F="set"+(this.$u?"UTC":""),P=(M={},M[l]=F+"Date",M[p]=F+"Date",M[h]=F+"Month",M[d]=F+"FullYear",M[s]=F+"Hours",M[a]=F+"Minutes",M[i]=F+"Seconds",M[n]=F+"Milliseconds",M)[B],z=B===l?this.$D+(O-this.$W):O;if(B===h||B===d){var $=this.clone().set(p,1);$.$d[P](z),$.init(),this.$d=$.set(p,Math.min(this.$D,$.daysInMonth())).$d}else P&&this.$d[P](z);return this.init(),this},L.set=function(R,O){return this.clone().$set(R,O)},L.get=function(R){return this[_.p(R)]()},L.add=function(R,O){var M,B=this;R=Number(R);var F=_.p(O),P=o(function(H){var Q=S(B);return _.w(Q.date(Q.date()+Math.round(H*R)),B)},"y");if(F===h)return this.set(h,this.$M+R);if(F===d)return this.set(d,this.$y+R);if(F===l)return P(1);if(F===u)return P(7);var z=(M={},M[a]=e,M[s]=r,M[i]=t,M)[F]||1,$=this.$d.getTime()+R*z;return _.w($,this)},L.subtract=function(R,O){return this.add(-1*R,O)},L.format=function(R){var O=this,M=this.$locale();if(!this.isValid())return M.invalidDate||m;var B=R||"YYYY-MM-DDTHH:mm:ssZ",F=_.z(this),P=this.$H,z=this.$m,$=this.$M,H=M.weekdays,Q=M.months,j=M.meridiem,ie=o(function(he,K,X,te){return he&&(he[K]||he(O,B))||X[K].slice(0,te)},"h"),ne=o(function(he){return _.s(P%12||12,he,"0")},"d"),le=j||function(he,K,X){var te=he<12?"AM":"PM";return X?te.toLowerCase():te};return B.replace(y,function(he,K){return K||function(X){switch(X){case"YY":return String(O.$y).slice(-2);case"YYYY":return _.s(O.$y,4,"0");case"M":return $+1;case"MM":return _.s($+1,2,"0");case"MMM":return ie(M.monthsShort,$,Q,3);case"MMMM":return ie(Q,$);case"D":return O.$D;case"DD":return _.s(O.$D,2,"0");case"d":return String(O.$W);case"dd":return ie(M.weekdaysMin,O.$W,H,2);case"ddd":return ie(M.weekdaysShort,O.$W,H,3);case"dddd":return H[O.$W];case"H":return String(P);case"HH":return _.s(P,2,"0");case"h":return ne(1);case"hh":return ne(2);case"a":return le(P,z,!0);case"A":return le(P,z,!1);case"m":return String(z);case"mm":return _.s(z,2,"0");case"s":return String(O.$s);case"ss":return _.s(O.$s,2,"0");case"SSS":return _.s(O.$ms,3,"0");case"Z":return F}return null}(he)||F.replace(":","")})},L.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},L.diff=function(R,O,M){var B,F=this,P=_.p(O),z=S(R),$=(z.utcOffset()-this.utcOffset())*e,H=this-z,Q=o(function(){return _.m(F,z)},"D");switch(P){case d:B=Q()/12;break;case h:B=Q();break;case f:B=Q()/3;break;case u:B=(H-$)/6048e5;break;case l:B=(H-$)/864e5;break;case s:B=H/r;break;case a:B=H/e;break;case i:B=H/t;break;default:B=H}return M?B:_.a(B)},L.daysInMonth=function(){return this.endOf(h).$D},L.$locale=function(){return C[this.$L]},L.locale=function(R,O){if(!R)return this.$L;var M=this.clone(),B=A(R,O,!0);return B&&(M.$L=B),M},L.clone=function(){return _.w(this.$d,this)},L.toDate=function(){return new Date(this.valueOf())},L.toJSON=function(){return this.isValid()?this.toISOString():null},L.toISOString=function(){return this.$d.toISOString()},L.toString=function(){return this.$d.toUTCString()},k}(),D=I.prototype;return S.prototype=D,[["$ms",n],["$s",i],["$m",a],["$H",s],["$W",l],["$M",h],["$y",d],["$D",p]].forEach(function(k){D[k[1]]=function(L){return this.$g(L,k[0],k[1])}}),S.extend=function(k,L){return k.$i||(k(L,I,S),k.$i=!0),S},S.locale=A,S.isDayjs=E,S.unix=function(k){return S(1e3*k)},S.en=C[w],S.Ls=C,S.p={},S})});var CF,eu,Y,wy,bo,vt=N(()=>{"use strict";CF=Sa(R4(),1),eu={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},Y={trace:o((...t)=>{},"trace"),debug:o((...t)=>{},"debug"),info:o((...t)=>{},"info"),warn:o((...t)=>{},"warn"),error:o((...t)=>{},"error"),fatal:o((...t)=>{},"fatal")},wy=o(function(t="fatal"){let e=eu.fatal;typeof t=="string"?t.toLowerCase()in eu&&(e=eu[t]):typeof t=="number"&&(e=t),Y.trace=()=>{},Y.debug=()=>{},Y.info=()=>{},Y.warn=()=>{},Y.error=()=>{},Y.fatal=()=>{},e<=eu.fatal&&(Y.fatal=console.error?console.error.bind(console,bo("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",bo("FATAL"))),e<=eu.error&&(Y.error=console.error?console.error.bind(console,bo("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",bo("ERROR"))),e<=eu.warn&&(Y.warn=console.warn?console.warn.bind(console,bo("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",bo("WARN"))),e<=eu.info&&(Y.info=console.info?console.info.bind(console,bo("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",bo("INFO"))),e<=eu.debug&&(Y.debug=console.debug?console.debug.bind(console,bo("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",bo("DEBUG"))),e<=eu.trace&&(Y.trace=console.debug?console.debug.bind(console,bo("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",bo("TRACE")))},"setLogLevel"),bo=o(t=>`%c${(0,CF.default)().format("ss.SSS")} : ${t} : `,"format")});var U2e,e0,CC,AF,N4=N(()=>{"use strict";U2e=Object.freeze({left:0,top:0,width:16,height:16}),e0=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),CC=Object.freeze({...U2e,...e0}),AF=Object.freeze({...CC,body:"",hidden:!1})});var H2e,_F,DF=N(()=>{"use strict";N4();H2e=Object.freeze({width:null,height:null}),_F=Object.freeze({...H2e,...e0})});var AC,M4,LF=N(()=>{"use strict";AC=o((t,e,r,n="")=>{let i=t.split(":");if(t.slice(0,1)==="@"){if(i.length<2||i.length>3)return null;n=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){let l=i.pop(),u=i.pop(),h={provider:i.length>0?i[0]:n,prefix:u,name:l};return e&&!M4(h)?null:h}let a=i[0],s=a.split("-");if(s.length>1){let l={provider:n,prefix:s.shift(),name:s.join("-")};return e&&!M4(l)?null:l}if(r&&n===""){let l={provider:n,prefix:"",name:a};return e&&!M4(l,r)?null:l}return null},"stringToIcon"),M4=o((t,e)=>t?!!((e&&t.prefix===""||t.prefix)&&t.name):!1,"validateIconName")});function RF(t,e){let r={};!t.hFlip!=!e.hFlip&&(r.hFlip=!0),!t.vFlip!=!e.vFlip&&(r.vFlip=!0);let n=((t.rotate||0)+(e.rotate||0))%4;return n&&(r.rotate=n),r}var NF=N(()=>{"use strict";o(RF,"mergeIconTransformations")});function _C(t,e){let r=RF(t,e);for(let n in AF)n in e0?n in t&&!(n in r)&&(r[n]=e0[n]):n in e?r[n]=e[n]:n in t&&(r[n]=t[n]);return r}var MF=N(()=>{"use strict";N4();NF();o(_C,"mergeIconData")});function IF(t,e){let r=t.icons,n=t.aliases||Object.create(null),i=Object.create(null);function a(s){if(r[s])return i[s]=[];if(!(s in i)){i[s]=null;let l=n[s]&&n[s].parent,u=l&&a(l);u&&(i[s]=[l].concat(u))}return i[s]}return o(a,"resolve"),(e||Object.keys(r).concat(Object.keys(n))).forEach(a),i}var OF=N(()=>{"use strict";o(IF,"getIconsTree")});function PF(t,e,r){let n=t.icons,i=t.aliases||Object.create(null),a={};function s(l){a=_C(n[l]||i[l],a)}return o(s,"parse"),s(e),r.forEach(s),_C(t,a)}function DC(t,e){if(t.icons[e])return PF(t,e,[]);let r=IF(t,[e])[e];return r?PF(t,e,r):null}var BF=N(()=>{"use strict";MF();OF();o(PF,"internalGetIconData");o(DC,"getIconData")});function LC(t,e,r){if(e===1)return t;if(r=r||100,typeof t=="number")return Math.ceil(t*e*r)/r;if(typeof t!="string")return t;let n=t.split(W2e);if(n===null||!n.length)return t;let i=[],a=n.shift(),s=q2e.test(a);for(;;){if(s){let l=parseFloat(a);isNaN(l)?i.push(a):i.push(Math.ceil(l*e*r)/r)}else i.push(a);if(a=n.shift(),a===void 0)return i.join("");s=!s}}var W2e,q2e,FF=N(()=>{"use strict";W2e=/(-?[0-9.]*[0-9]+[0-9.]*)/g,q2e=/^-?[0-9.]*[0-9]+[0-9.]*$/g;o(LC,"calculateSize")});function Y2e(t,e="defs"){let r="",n=t.indexOf("<"+e);for(;n>=0;){let i=t.indexOf(">",n),a=t.indexOf("</"+e);if(i===-1||a===-1)break;let s=t.indexOf(">",a);if(s===-1)break;r+=t.slice(i+1,a).trim(),t=t.slice(0,n).trim()+t.slice(s+1)}return{defs:r,content:t}}function X2e(t,e){return t?"<defs>"+t+"</defs>"+e:e}function $F(t,e,r){let n=Y2e(t);return X2e(n.defs,e+n.content+r)}var zF=N(()=>{"use strict";o(Y2e,"splitSVGDefs");o(X2e,"mergeDefsAndContent");o($F,"wrapSVGContent")});function RC(t,e){let r={...CC,...t},n={..._F,...e},i={left:r.left,top:r.top,width:r.width,height:r.height},a=r.body;[r,n].forEach(y=>{let v=[],x=y.hFlip,b=y.vFlip,w=y.rotate;x?b?w+=2:(v.push("translate("+(i.width+i.left).toString()+" "+(0-i.top).toString()+")"),v.push("scale(-1 1)"),i.top=i.left=0):b&&(v.push("translate("+(0-i.left).toString()+" "+(i.height+i.top).toString()+")"),v.push("scale(1 -1)"),i.top=i.left=0);let C;switch(w<0&&(w-=Math.floor(w/4)*4),w=w%4,w){case 1:C=i.height/2+i.top,v.unshift("rotate(90 "+C.toString()+" "+C.toString()+")");break;case 2:v.unshift("rotate(180 "+(i.width/2+i.left).toString()+" "+(i.height/2+i.top).toString()+")");break;case 3:C=i.width/2+i.left,v.unshift("rotate(-90 "+C.toString()+" "+C.toString()+")");break}w%2===1&&(i.left!==i.top&&(C=i.left,i.left=i.top,i.top=C),i.width!==i.height&&(C=i.width,i.width=i.height,i.height=C)),v.length&&(a=$F(a,'<g transform="'+v.join(" ")+'">',"</g>"))});let s=n.width,l=n.height,u=i.width,h=i.height,f,d;s===null?(d=l===null?"1em":l==="auto"?h:l,f=LC(d,u/h)):(f=s==="auto"?u:s,d=l===null?LC(f,h/u):l==="auto"?h:l);let p={},m=o((y,v)=>{j2e(v)||(p[y]=v.toString())},"setAttr");m("width",f),m("height",d);let g=[i.left,i.top,u,h];return p.viewBox=g.join(" "),{attributes:p,viewBox:g,body:a}}var j2e,GF=N(()=>{"use strict";N4();DF();FF();zF();j2e=o(t=>t==="unset"||t==="undefined"||t==="none","isUnsetKeyword");o(RC,"iconToSVG")});function NC(t,e=Q2e){let r=[],n;for(;n=K2e.exec(t);)r.push(n[1]);if(!r.length)return t;let i="suffix"+(Math.random()*16777216|Date.now()).toString(16);return r.forEach(a=>{let s=typeof e=="function"?e(a):e+(Z2e++).toString(),l=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");t=t.replace(new RegExp('([#;"])('+l+')([")]|\\.[a-z])',"g"),"$1"+s+i+"$3")}),t=t.replace(new RegExp(i,"g"),""),t}var K2e,Q2e,Z2e,VF=N(()=>{"use strict";K2e=/\sid="(\S+)"/g,Q2e="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16),Z2e=0;o(NC,"replaceIDs")});function MC(t,e){let r=t.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(let n in e)r+=" "+n+'="'+e[n]+'"';return'<svg xmlns="http://www.w3.org/2000/svg"'+r+">"+t+"</svg>"}var UF=N(()=>{"use strict";o(MC,"iconToHTML")});var WF=Mi((iit,HF)=>{"use strict";var t0=1e3,r0=t0*60,n0=r0*60,Wf=n0*24,J2e=Wf*7,exe=Wf*365.25;HF.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return txe(t);if(r==="number"&&isFinite(t))return e.long?nxe(t):rxe(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function txe(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*exe;case"weeks":case"week":case"w":return r*J2e;case"days":case"day":case"d":return r*Wf;case"hours":case"hour":case"hrs":case"hr":case"h":return r*n0;case"minutes":case"minute":case"mins":case"min":case"m":return r*r0;case"seconds":case"second":case"secs":case"sec":case"s":return r*t0;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}o(txe,"parse");function rxe(t){var e=Math.abs(t);return e>=Wf?Math.round(t/Wf)+"d":e>=n0?Math.round(t/n0)+"h":e>=r0?Math.round(t/r0)+"m":e>=t0?Math.round(t/t0)+"s":t+"ms"}o(rxe,"fmtShort");function nxe(t){var e=Math.abs(t);return e>=Wf?I4(t,e,Wf,"day"):e>=n0?I4(t,e,n0,"hour"):e>=r0?I4(t,e,r0,"minute"):e>=t0?I4(t,e,t0,"second"):t+" ms"}o(nxe,"fmtLong");function I4(t,e,r,n){var i=e>=r*1.5;return Math.round(t/r)+" "+n+(i?"s":"")}o(I4,"plural")});var YF=Mi((sit,qF)=>{"use strict";function ixe(t){r.debug=r,r.default=r,r.coerce=u,r.disable=s,r.enable=i,r.enabled=l,r.humanize=WF(),r.destroy=h,Object.keys(t).forEach(f=>{r[f]=t[f]}),r.names=[],r.skips=[],r.formatters={};function e(f){let d=0;for(let p=0;p<f.length;p++)d=(d<<5)-d+f.charCodeAt(p),d|=0;return r.colors[Math.abs(d)%r.colors.length]}o(e,"selectColor"),r.selectColor=e;function r(f){let d,p=null,m,g;function y(...v){if(!y.enabled)return;let x=y,b=Number(new Date),w=b-(d||b);x.diff=w,x.prev=d,x.curr=b,d=b,v[0]=r.coerce(v[0]),typeof v[0]!="string"&&v.unshift("%O");let C=0;v[0]=v[0].replace(/%([a-zA-Z%])/g,(E,A)=>{if(E==="%%")return"%";C++;let S=r.formatters[A];if(typeof S=="function"){let _=v[C];E=S.call(x,_),v.splice(C,1),C--}return E}),r.formatArgs.call(x,v),(x.log||r.log).apply(x,v)}return o(y,"debug"),y.namespace=f,y.useColors=r.useColors(),y.color=r.selectColor(f),y.extend=n,y.destroy=r.destroy,Object.defineProperty(y,"enabled",{enumerable:!0,configurable:!1,get:o(()=>p!==null?p:(m!==r.namespaces&&(m=r.namespaces,g=r.enabled(f)),g),"get"),set:o(v=>{p=v},"set")}),typeof r.init=="function"&&r.init(y),y}o(r,"createDebug");function n(f,d){let p=r(this.namespace+(typeof d>"u"?":":d)+f);return p.log=this.log,p}o(n,"extend");function i(f){r.save(f),r.namespaces=f,r.names=[],r.skips=[];let d=(typeof f=="string"?f:"").trim().replace(" ",",").split(",").filter(Boolean);for(let p of d)p[0]==="-"?r.skips.push(p.slice(1)):r.names.push(p)}o(i,"enable");function a(f,d){let p=0,m=0,g=-1,y=0;for(;p<f.length;)if(m<d.length&&(d[m]===f[p]||d[m]==="*"))d[m]==="*"?(g=m,y=p,m++):(p++,m++);else if(g!==-1)m=g+1,y++,p=y;else return!1;for(;m<d.length&&d[m]==="*";)m++;return m===d.length}o(a,"matchesTemplate");function s(){let f=[...r.names,...r.skips.map(d=>"-"+d)].join(",");return r.enable(""),f}o(s,"disable");function l(f){for(let d of r.skips)if(a(f,d))return!1;for(let d of r.names)if(a(f,d))return!0;return!1}o(l,"enabled");function u(f){return f instanceof Error?f.stack||f.message:f}o(u,"coerce");function h(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return o(h,"destroy"),r.enable(r.load()),r}o(ixe,"setup");qF.exports=ixe});var XF=Mi((qs,O4)=>{"use strict";qs.formatArgs=sxe;qs.save=oxe;qs.load=lxe;qs.useColors=axe;qs.storage=cxe();qs.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();qs.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function axe(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let t;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(t=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(t[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}o(axe,"useColors");function sxe(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+O4.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,n=0;t[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(r++,i==="%c"&&(n=r))}),t.splice(n,0,e)}o(sxe,"formatArgs");qs.log=console.debug||console.log||(()=>{});function oxe(t){try{t?qs.storage.setItem("debug",t):qs.storage.removeItem("debug")}catch{}}o(oxe,"save");function lxe(){let t;try{t=qs.storage.getItem("debug")}catch{}return!t&&typeof process<"u"&&"env"in process&&(t=process.env.DEBUG),t}o(lxe,"load");function cxe(){try{return localStorage}catch{}}o(cxe,"localstorage");O4.exports=YF()(qs);var{formatters:uxe}=O4.exports;uxe.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var uit,jF=N(()=>{"use strict";LF();BF();GF();VF();UF();uit=Sa(XF(),1)});var OC,IC,KF,P4,hxe,wo,tu=N(()=>{"use strict";vt();jF();OC={body:'<g><rect width="80" height="80" style="fill: #087ebf; stroke-width: 0px;"/><text transform="translate(21.16 64.67)" style="fill: #fff; font-family: ArialMT, Arial; font-size: 67.75px;"><tspan x="0" y="0">?</tspan></text></g>',height:80,width:80},IC=new Map,KF=new Map,P4=o(t=>{for(let e of t){if(!e.name)throw new Error('Invalid icon loader. Must have a "name" property with non-empty string value.');if(Y.debug("Registering icon pack:",e.name),"loader"in e)KF.set(e.name,e.loader);else if("icons"in e)IC.set(e.name,e.icons);else throw Y.error("Invalid icon loader:",e),new Error('Invalid icon loader. Must have either "icons" or "loader" property.')}},"registerIconPacks"),hxe=o(async(t,e)=>{let r=AC(t,!0,e!==void 0);if(!r)throw new Error(`Invalid icon name: ${t}`);let n=r.prefix||e;if(!n)throw new Error(`Icon name must contain a prefix: ${t}`);let i=IC.get(n);if(!i){let s=KF.get(n);if(!s)throw new Error(`Icon set not found: ${r.prefix}`);try{i={...await s(),prefix:n},IC.set(n,i)}catch(l){throw Y.error(l),new Error(`Failed to load icon set: ${r.prefix}`)}}let a=DC(i,r.name);if(!a)throw new Error(`Icon not found: ${t}`);return a},"getRegisteredIconData"),wo=o(async(t,e)=>{let r;try{r=await hxe(t,e?.fallbackPrefix)}catch(a){Y.error(a),r=OC}let n=RC(r,e);return MC(NC(n.body),n.attributes)},"getIconSVG")});function B4(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=Array.from(typeof t=="string"?[t]:t);n[n.length-1]=n[n.length-1].replace(/\r?\n([\t ]*)$/,"");var i=n.reduce(function(l,u){var h=u.match(/\n([\t ]+|(?!\s).)/g);return h?l.concat(h.map(function(f){var d,p;return(p=(d=f.match(/[\t ]/g))===null||d===void 0?void 0:d.length)!==null&&p!==void 0?p:0})):l},[]);if(i.length){var a=new RegExp(`
4 +[ ]{`+Math.min.apply(Math,i)+"}","g");n=n.map(function(l){return l.replace(a,`
5 +`)})}n[0]=n[0].replace(/^\r?\n/,"");var s=n[0];return e.forEach(function(l,u){var h=s.match(/(?:^|\n)( *)$/),f=h?h[1]:"",d=l;typeof l=="string"&&l.includes(`
6 +`)&&(d=String(l).split(`
7 +`).map(function(p,m){return m===0?p:""+f+p}).join(`
8 +`)),s+=d+n[u+1]}),s}var PC=N(()=>{"use strict";o(B4,"dedent")});var F4,qf,QF,$4=N(()=>{"use strict";F4=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,qf=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,QF=/\s*%%.*\n/gm});var i0,BC=N(()=>{"use strict";i0=class extends Error{static{o(this,"UnknownDiagramError")}constructor(e){super(e),this.name="UnknownDiagramError"}}});var Yf,a0,z4,FC,ZF,Xf=N(()=>{"use strict";vt();$4();BC();Yf={},a0=o(function(t,e){t=t.replace(F4,"").replace(qf,"").replace(QF,`
9 +`);for(let[r,{detector:n}]of Object.entries(Yf))if(n(t,e))return r;throw new i0(`No diagram type detected matching given configuration for text: ${t}`)},"detectType"),z4=o((...t)=>{for(let{id:e,detector:r,loader:n}of t)FC(e,r,n)},"registerLazyLoadedDiagrams"),FC=o((t,e,r)=>{Yf[t]&&Y.warn(`Detector with key ${t} already exists. Overwriting.`),Yf[t]={detector:e,loader:r},Y.debug(`Detector with key ${t} added${r?" with loader":""}`)},"addDetector"),ZF=o(t=>Yf[t].loader,"getDiagramLoader")});var Ty,JF,$C=N(()=>{"use strict";Ty=function(){var t=o(function($e,Re,Ie,be){for(Ie=Ie||{},be=$e.length;be--;Ie[$e[be]]=Re);return Ie},"o"),e=[1,24],r=[1,25],n=[1,26],i=[1,27],a=[1,28],s=[1,63],l=[1,64],u=[1,65],h=[1,66],f=[1,67],d=[1,68],p=[1,69],m=[1,29],g=[1,30],y=[1,31],v=[1,32],x=[1,33],b=[1,34],w=[1,35],C=[1,36],T=[1,37],E=[1,38],A=[1,39],S=[1,40],_=[1,41],I=[1,42],D=[1,43],k=[1,44],L=[1,45],R=[1,46],O=[1,47],M=[1,48],B=[1,50],F=[1,51],P=[1,52],z=[1,53],$=[1,54],H=[1,55],Q=[1,56],j=[1,57],ie=[1,58],ne=[1,59],le=[1,60],he=[14,42],K=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],X=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],te=[1,82],J=[1,83],se=[1,84],ue=[1,85],Z=[12,14,42],Se=[12,14,33,42],ce=[12,14,33,42,76,77,79,80],ae=[12,33],Oe=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],ge={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:o(function(Re,Ie,be,W,de,re,oe){var V=re.length-1;switch(de){case 3:W.setDirection("TB");break;case 4:W.setDirection("BT");break;case 5:W.setDirection("RL");break;case 6:W.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:W.setC4Type(re[V-3]);break;case 19:W.setTitle(re[V].substring(6)),this.$=re[V].substring(6);break;case 20:W.setAccDescription(re[V].substring(15)),this.$=re[V].substring(15);break;case 21:this.$=re[V].trim(),W.setTitle(this.$);break;case 22:case 23:this.$=re[V].trim(),W.setAccDescription(this.$);break;case 28:re[V].splice(2,0,"ENTERPRISE"),W.addPersonOrSystemBoundary(...re[V]),this.$=re[V];break;case 29:re[V].splice(2,0,"SYSTEM"),W.addPersonOrSystemBoundary(...re[V]),this.$=re[V];break;case 30:W.addPersonOrSystemBoundary(...re[V]),this.$=re[V];break;case 31:re[V].splice(2,0,"CONTAINER"),W.addContainerBoundary(...re[V]),this.$=re[V];break;case 32:W.addDeploymentNode("node",...re[V]),this.$=re[V];break;case 33:W.addDeploymentNode("nodeL",...re[V]),this.$=re[V];break;case 34:W.addDeploymentNode("nodeR",...re[V]),this.$=re[V];break;case 35:W.popBoundaryParseStack();break;case 39:W.addPersonOrSystem("person",...re[V]),this.$=re[V];break;case 40:W.addPersonOrSystem("external_person",...re[V]),this.$=re[V];break;case 41:W.addPersonOrSystem("system",...re[V]),this.$=re[V];break;case 42:W.addPersonOrSystem("system_db",...re[V]),this.$=re[V];break;case 43:W.addPersonOrSystem("system_queue",...re[V]),this.$=re[V];break;case 44:W.addPersonOrSystem("external_system",...re[V]),this.$=re[V];break;case 45:W.addPersonOrSystem("external_system_db",...re[V]),this.$=re[V];break;case 46:W.addPersonOrSystem("external_system_queue",...re[V]),this.$=re[V];break;case 47:W.addContainer("container",...re[V]),this.$=re[V];break;case 48:W.addContainer("container_db",...re[V]),this.$=re[V];break;case 49:W.addContainer("container_queue",...re[V]),this.$=re[V];break;case 50:W.addContainer("external_container",...re[V]),this.$=re[V];break;case 51:W.addContainer("external_container_db",...re[V]),this.$=re[V];break;case 52:W.addContainer("external_container_queue",...re[V]),this.$=re[V];break;case 53:W.addComponent("component",...re[V]),this.$=re[V];break;case 54:W.addComponent("component_db",...re[V]),this.$=re[V];break;case 55:W.addComponent("component_queue",...re[V]),this.$=re[V];break;case 56:W.addComponent("external_component",...re[V]),this.$=re[V];break;case 57:W.addComponent("external_component_db",...re[V]),this.$=re[V];break;case 58:W.addComponent("external_component_queue",...re[V]),this.$=re[V];break;case 60:W.addRel("rel",...re[V]),this.$=re[V];break;case 61:W.addRel("birel",...re[V]),this.$=re[V];break;case 62:W.addRel("rel_u",...re[V]),this.$=re[V];break;case 63:W.addRel("rel_d",...re[V]),this.$=re[V];break;case 64:W.addRel("rel_l",...re[V]),this.$=re[V];break;case 65:W.addRel("rel_r",...re[V]),this.$=re[V];break;case 66:W.addRel("rel_b",...re[V]),this.$=re[V];break;case 67:re[V].splice(0,1),W.addRel("rel",...re[V]),this.$=re[V];break;case 68:W.updateElStyle("update_el_style",...re[V]),this.$=re[V];break;case 69:W.updateRelStyle("update_rel_style",...re[V]),this.$=re[V];break;case 70:W.updateLayoutConfig("update_layout_config",...re[V]),this.$=re[V];break;case 71:this.$=[re[V]];break;case 72:re[V].unshift(re[V-1]),this.$=re[V];break;case 73:case 75:this.$=re[V].trim();break;case 74:let xe={};xe[re[V-1].trim()]=re[V].trim(),this.$=xe;break;case 76:this.$="";break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{13:70,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{13:71,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{13:72,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{13:73,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{14:[1,74]},t(he,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le}),t(he,[2,14]),t(K,[2,16],{12:[1,76]}),t(he,[2,36],{12:[1,77]}),t(X,[2,19]),t(X,[2,20]),{25:[1,78]},{27:[1,79]},t(X,[2,23]),{35:80,75:81,76:te,77:J,79:se,80:ue},{35:86,75:81,76:te,77:J,79:se,80:ue},{35:87,75:81,76:te,77:J,79:se,80:ue},{35:88,75:81,76:te,77:J,79:se,80:ue},{35:89,75:81,76:te,77:J,79:se,80:ue},{35:90,75:81,76:te,77:J,79:se,80:ue},{35:91,75:81,76:te,77:J,79:se,80:ue},{35:92,75:81,76:te,77:J,79:se,80:ue},{35:93,75:81,76:te,77:J,79:se,80:ue},{35:94,75:81,76:te,77:J,79:se,80:ue},{35:95,75:81,76:te,77:J,79:se,80:ue},{35:96,75:81,76:te,77:J,79:se,80:ue},{35:97,75:81,76:te,77:J,79:se,80:ue},{35:98,75:81,76:te,77:J,79:se,80:ue},{35:99,75:81,76:te,77:J,79:se,80:ue},{35:100,75:81,76:te,77:J,79:se,80:ue},{35:101,75:81,76:te,77:J,79:se,80:ue},{35:102,75:81,76:te,77:J,79:se,80:ue},{35:103,75:81,76:te,77:J,79:se,80:ue},{35:104,75:81,76:te,77:J,79:se,80:ue},t(Z,[2,59]),{35:105,75:81,76:te,77:J,79:se,80:ue},{35:106,75:81,76:te,77:J,79:se,80:ue},{35:107,75:81,76:te,77:J,79:se,80:ue},{35:108,75:81,76:te,77:J,79:se,80:ue},{35:109,75:81,76:te,77:J,79:se,80:ue},{35:110,75:81,76:te,77:J,79:se,80:ue},{35:111,75:81,76:te,77:J,79:se,80:ue},{35:112,75:81,76:te,77:J,79:se,80:ue},{35:113,75:81,76:te,77:J,79:se,80:ue},{35:114,75:81,76:te,77:J,79:se,80:ue},{35:115,75:81,76:te,77:J,79:se,80:ue},{20:116,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le},{12:[1,118],33:[1,117]},{35:119,75:81,76:te,77:J,79:se,80:ue},{35:120,75:81,76:te,77:J,79:se,80:ue},{35:121,75:81,76:te,77:J,79:se,80:ue},{35:122,75:81,76:te,77:J,79:se,80:ue},{35:123,75:81,76:te,77:J,79:se,80:ue},{35:124,75:81,76:te,77:J,79:se,80:ue},{35:125,75:81,76:te,77:J,79:se,80:ue},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},t(he,[2,15]),t(K,[2,17],{21:22,19:130,22:e,23:r,24:n,26:i,28:a}),t(he,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:e,23:r,24:n,26:i,28:a,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:D,59:k,60:L,61:R,62:O,63:M,64:B,65:F,66:P,67:z,68:$,69:H,70:Q,71:j,72:ie,73:ne,74:le}),t(X,[2,21]),t(X,[2,22]),t(Z,[2,39]),t(Se,[2,71],{75:81,35:132,76:te,77:J,79:se,80:ue}),t(ce,[2,73]),{78:[1,133]},t(ce,[2,75]),t(ce,[2,76]),t(Z,[2,40]),t(Z,[2,41]),t(Z,[2,42]),t(Z,[2,43]),t(Z,[2,44]),t(Z,[2,45]),t(Z,[2,46]),t(Z,[2,47]),t(Z,[2,48]),t(Z,[2,49]),t(Z,[2,50]),t(Z,[2,51]),t(Z,[2,52]),t(Z,[2,53]),t(Z,[2,54]),t(Z,[2,55]),t(Z,[2,56]),t(Z,[2,57]),t(Z,[2,58]),t(Z,[2,60]),t(Z,[2,61]),t(Z,[2,62]),t(Z,[2,63]),t(Z,[2,64]),t(Z,[2,65]),t(Z,[2,66]),t(Z,[2,67]),t(Z,[2,68]),t(Z,[2,69]),t(Z,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},t(ae,[2,28]),t(ae,[2,29]),t(ae,[2,30]),t(ae,[2,31]),t(ae,[2,32]),t(ae,[2,33]),t(ae,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},t(K,[2,18]),t(he,[2,38]),t(Se,[2,72]),t(ce,[2,74]),t(Z,[2,24]),t(Z,[2,35]),t(Oe,[2,25]),t(Oe,[2,26],{12:[1,138]}),t(Oe,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:o(function(Re,Ie){if(Ie.recoverable)this.trace(Re);else{var be=new Error(Re);throw be.hash=Ie,be}},"parseError"),parse:o(function(Re){var Ie=this,be=[0],W=[],de=[null],re=[],oe=this.table,V="",xe=0,q=0,pe=0,ve=2,Pe=1,_e=re.slice.call(arguments,1),we=Object.create(this.lexer),Ve={yy:{}};for(var De in this.yy)Object.prototype.hasOwnProperty.call(this.yy,De)&&(Ve.yy[De]=this.yy[De]);we.setInput(Re,Ve.yy),Ve.yy.lexer=we,Ve.yy.parser=this,typeof we.yylloc>"u"&&(we.yylloc={});var qe=we.yylloc;re.push(qe);var at=we.options&&we.options.ranges;typeof Ve.yy.parseError=="function"?this.parseError=Ve.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Rt(nt){be.length=be.length-2*nt,de.length=de.length-nt,re.length=re.length-nt}o(Rt,"popStack");function st(){var nt;return nt=W.pop()||we.lex()||Pe,typeof nt!="number"&&(nt instanceof Array&&(W=nt,nt=W.pop()),nt=Ie.symbols_[nt]||nt),nt}o(st,"lex");for(var Ue,ct,We,ot,Yt,bt,Mt={},xt,ut,Et,ft;;){if(We=be[be.length-1],this.defaultActions[We]?ot=this.defaultActions[We]:((Ue===null||typeof Ue>"u")&&(Ue=st()),ot=oe[We]&&oe[We][Ue]),typeof ot>"u"||!ot.length||!ot[0]){var yt="";ft=[];for(xt in oe[We])this.terminals_[xt]&&xt>ve&&ft.push("'"+this.terminals_[xt]+"'");we.showPosition?yt="Parse error on line "+(xe+1)+`:
10 +`+we.showPosition()+`
11 +Expecting `+ft.join(", ")+", got '"+(this.terminals_[Ue]||Ue)+"'":yt="Parse error on line "+(xe+1)+": Unexpected "+(Ue==Pe?"end of input":"'"+(this.terminals_[Ue]||Ue)+"'"),this.parseError(yt,{text:we.match,token:this.terminals_[Ue]||Ue,line:we.yylineno,loc:qe,expected:ft})}if(ot[0]instanceof Array&&ot.length>1)throw new Error("Parse Error: multiple actions possible at state: "+We+", token: "+Ue);switch(ot[0]){case 1:be.push(Ue),de.push(we.yytext),re.push(we.yylloc),be.push(ot[1]),Ue=null,ct?(Ue=ct,ct=null):(q=we.yyleng,V=we.yytext,xe=we.yylineno,qe=we.yylloc,pe>0&&pe--);break;case 2:if(ut=this.productions_[ot[1]][1],Mt.$=de[de.length-ut],Mt._$={first_line:re[re.length-(ut||1)].first_line,last_line:re[re.length-1].last_line,first_column:re[re.length-(ut||1)].first_column,last_column:re[re.length-1].last_column},at&&(Mt._$.range=[re[re.length-(ut||1)].range[0],re[re.length-1].range[1]]),bt=this.performAction.apply(Mt,[V,q,xe,Ve.yy,ot[1],de,re].concat(_e)),typeof bt<"u")return bt;ut&&(be=be.slice(0,-1*ut*2),de=de.slice(0,-1*ut),re=re.slice(0,-1*ut)),be.push(this.productions_[ot[1]][0]),de.push(Mt.$),re.push(Mt._$),Et=oe[be[be.length-2]][be[be.length-1]],be.push(Et);break;case 3:return!0}}return!0},"parse")},ze=function(){var $e={EOF:1,parseError:o(function(Ie,be){if(this.yy.parser)this.yy.parser.parseError(Ie,be);else throw new Error(Ie)},"parseError"),setInput:o(function(Re,Ie){return this.yy=Ie||this.yy||{},this._input=Re,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Re=this._input[0];this.yytext+=Re,this.yyleng++,this.offset++,this.match+=Re,this.matched+=Re;var Ie=Re.match(/(?:\r\n?|\n).*/g);return Ie?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Re},"input"),unput:o(function(Re){var Ie=Re.length,be=Re.split(/(?:\r\n?|\n)/g);this._input=Re+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ie),this.offset-=Ie;var W=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),be.length-1&&(this.yylineno-=be.length-1);var de=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:be?(be.length===W.length?this.yylloc.first_column:0)+W[W.length-be.length].length-be[0].length:this.yylloc.first_column-Ie},this.options.ranges&&(this.yylloc.range=[de[0],de[0]+this.yyleng-Ie]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
12 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Re){this.unput(this.match.slice(Re))},"less"),pastInput:o(function(){var Re=this.matched.substr(0,this.matched.length-this.match.length);return(Re.length>20?"...":"")+Re.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Re=this.match;return Re.length<20&&(Re+=this._input.substr(0,20-Re.length)),(Re.substr(0,20)+(Re.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Re=this.pastInput(),Ie=new Array(Re.length+1).join("-");return Re+this.upcomingInput()+`
13 +`+Ie+"^"},"showPosition"),test_match:o(function(Re,Ie){var be,W,de;if(this.options.backtrack_lexer&&(de={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(de.yylloc.range=this.yylloc.range.slice(0))),W=Re[0].match(/(?:\r\n?|\n).*/g),W&&(this.yylineno+=W.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:W?W[W.length-1].length-W[W.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Re[0].length},this.yytext+=Re[0],this.match+=Re[0],this.matches=Re,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Re[0].length),this.matched+=Re[0],be=this.performAction.call(this,this.yy,this,Ie,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),be)return be;if(this._backtrack){for(var re in de)this[re]=de[re];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Re,Ie,be,W;this._more||(this.yytext="",this.match="");for(var de=this._currentRules(),re=0;re<de.length;re++)if(be=this._input.match(this.rules[de[re]]),be&&(!Ie||be[0].length>Ie[0].length)){if(Ie=be,W=re,this.options.backtrack_lexer){if(Re=this.test_match(be,de[re]),Re!==!1)return Re;if(this._backtrack){Ie=!1;continue}else return!1}else if(!this.options.flex)break}return Ie?(Re=this.test_match(Ie,de[W]),Re!==!1?Re:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
14 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Ie=this.next();return Ie||this.lex()},"lex"),begin:o(function(Ie){this.conditionStack.push(Ie)},"begin"),popState:o(function(){var Ie=this.conditionStack.length-1;return Ie>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Ie){return Ie=this.conditionStack.length-1-Math.abs(Ie||0),Ie>=0?this.conditionStack[Ie]:"INITIAL"},"topState"),pushState:o(function(Ie){this.begin(Ie)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(Ie,be,W,de){var re=de;switch(W){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),26;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;break;case 23:return this.begin("person"),44;break;case 24:return this.begin("system_ext_queue"),51;break;case 25:return this.begin("system_ext_db"),50;break;case 26:return this.begin("system_ext"),49;break;case 27:return this.begin("system_queue"),48;break;case 28:return this.begin("system_db"),47;break;case 29:return this.begin("system"),46;break;case 30:return this.begin("boundary"),37;break;case 31:return this.begin("enterprise_boundary"),34;break;case 32:return this.begin("system_boundary"),36;break;case 33:return this.begin("container_ext_queue"),57;break;case 34:return this.begin("container_ext_db"),56;break;case 35:return this.begin("container_ext"),55;break;case 36:return this.begin("container_queue"),54;break;case 37:return this.begin("container_db"),53;break;case 38:return this.begin("container"),52;break;case 39:return this.begin("container_boundary"),38;break;case 40:return this.begin("component_ext_queue"),63;break;case 41:return this.begin("component_ext_db"),62;break;case 42:return this.begin("component_ext"),61;break;case 43:return this.begin("component_queue"),60;break;case 44:return this.begin("component_db"),59;break;case 45:return this.begin("component"),58;break;case 46:return this.begin("node"),39;break;case 47:return this.begin("node"),39;break;case 48:return this.begin("node_l"),40;break;case 49:return this.begin("node_r"),41;break;case 50:return this.begin("rel"),64;break;case 51:return this.begin("birel"),65;break;case 52:return this.begin("rel_u"),66;break;case 53:return this.begin("rel_u"),66;break;case 54:return this.begin("rel_d"),67;break;case 55:return this.begin("rel_d"),67;break;case 56:return this.begin("rel_l"),68;break;case 57:return this.begin("rel_l"),68;break;case 58:return this.begin("rel_r"),69;break;case 59:return this.begin("rel_r"),69;break;case 60:return this.begin("rel_b"),70;break;case 61:return this.begin("rel_index"),71;break;case 62:return this.begin("update_el_style"),72;break;case 63:return this.begin("update_rel_style"),73;break;case 64:return this.begin("update_layout_config"),74;break;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";break;case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";break;case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};return $e}();ge.lexer=ze;function He(){this.yy={}}return o(He,"Parser"),He.prototype=ge,ge.Parser=He,new He}();Ty.parser=Ty;JF=Ty});var zC,Gn,s0=N(()=>{"use strict";zC=o((t,e,{depth:r=2,clobber:n=!1}={})=>{let i={depth:r,clobber:n};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(a=>zC(t,a,i)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(a=>{t.includes(a)||t.push(a)}),t):t===void 0||r<=0?t!=null&&typeof t=="object"&&typeof e=="object"?Object.assign(t,e):e:(e!==void 0&&typeof t=="object"&&typeof e=="object"&&Object.keys(e).forEach(a=>{typeof e[a]=="object"&&(t[a]===void 0||typeof t[a]=="object")?(t[a]===void 0&&(t[a]=Array.isArray(e[a])?[]:{}),t[a]=zC(t[a],e[a],{depth:r-1,clobber:n})):(n||typeof t[a]!="object"&&typeof e[a]!="object")&&(t[a]=e[a])}),t)},"assignWithDepth"),Gn=zC});var G4,e$,t$=N(()=>{"use strict";G4={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:o(t=>t>=255?255:t<0?0:t,"r"),g:o(t=>t>=255?255:t<0?0:t,"g"),b:o(t=>t>=255?255:t<0?0:t,"b"),h:o(t=>t%360,"h"),s:o(t=>t>=100?100:t<0?0:t,"s"),l:o(t=>t>=100?100:t<0?0:t,"l"),a:o(t=>t>=1?1:t<0?0:t,"a")},toLinear:o(t=>{let e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},"toLinear"),hue2rgb:o((t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<.16666666666666666?t+(e-t)*6*r:r<.5?e:r<.6666666666666666?t+(e-t)*(.6666666666666666-r)*6:t),"hue2rgb"),hsl2rgb:o(({h:t,s:e,l:r},n)=>{if(!e)return r*2.55;t/=360,e/=100,r/=100;let i=r<.5?r*(1+e):r+e-r*e,a=2*r-i;switch(n){case"r":return G4.hue2rgb(a,i,t+.3333333333333333)*255;case"g":return G4.hue2rgb(a,i,t)*255;case"b":return G4.hue2rgb(a,i,t-.3333333333333333)*255}},"hsl2rgb"),rgb2hsl:o(({r:t,g:e,b:r},n)=>{t/=255,e/=255,r/=255;let i=Math.max(t,e,r),a=Math.min(t,e,r),s=(i+a)/2;if(n==="l")return s*100;if(i===a)return 0;let l=i-a,u=s>.5?l/(2-i-a):l/(i+a);if(n==="s")return u*100;switch(i){case t:return((e-r)/l+(e<r?6:0))*60;case e:return((r-t)/l+2)*60;case r:return((t-e)/l+4)*60;default:return-1}},"rgb2hsl")},e$=G4});var fxe,r$,n$=N(()=>{"use strict";fxe={clamp:o((t,e,r)=>e>r?Math.min(e,Math.max(r,t)):Math.min(r,Math.max(e,t)),"clamp"),round:o(t=>Math.round(t*1e10)/1e10,"round")},r$=fxe});var dxe,i$,a$=N(()=>{"use strict";dxe={dec2hex:o(t=>{let e=Math.round(t).toString(16);return e.length>1?e:`0${e}`},"dec2hex")},i$=dxe});var pxe,jt,Wl=N(()=>{"use strict";t$();n$();a$();pxe={channel:e$,lang:r$,unit:i$},jt=pxe});var ru,Ii,ky=N(()=>{"use strict";Wl();ru={};for(let t=0;t<=255;t++)ru[t]=jt.unit.dec2hex(t);Ii={ALL:0,RGB:1,HSL:2}});var GC,s$,o$=N(()=>{"use strict";ky();GC=class{static{o(this,"Type")}constructor(){this.type=Ii.ALL}get(){return this.type}set(e){if(this.type&&this.type!==e)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=e}reset(){this.type=Ii.ALL}is(e){return this.type===e}},s$=GC});var VC,l$,c$=N(()=>{"use strict";Wl();o$();ky();VC=class{static{o(this,"Channels")}constructor(e,r){this.color=r,this.changed=!1,this.data=e,this.type=new s$}set(e,r){return this.color=r,this.changed=!1,this.data=e,this.type.type=Ii.ALL,this}_ensureHSL(){let e=this.data,{h:r,s:n,l:i}=e;r===void 0&&(e.h=jt.channel.rgb2hsl(e,"h")),n===void 0&&(e.s=jt.channel.rgb2hsl(e,"s")),i===void 0&&(e.l=jt.channel.rgb2hsl(e,"l"))}_ensureRGB(){let e=this.data,{r,g:n,b:i}=e;r===void 0&&(e.r=jt.channel.hsl2rgb(e,"r")),n===void 0&&(e.g=jt.channel.hsl2rgb(e,"g")),i===void 0&&(e.b=jt.channel.hsl2rgb(e,"b"))}get r(){let e=this.data,r=e.r;return!this.type.is(Ii.HSL)&&r!==void 0?r:(this._ensureHSL(),jt.channel.hsl2rgb(e,"r"))}get g(){let e=this.data,r=e.g;return!this.type.is(Ii.HSL)&&r!==void 0?r:(this._ensureHSL(),jt.channel.hsl2rgb(e,"g"))}get b(){let e=this.data,r=e.b;return!this.type.is(Ii.HSL)&&r!==void 0?r:(this._ensureHSL(),jt.channel.hsl2rgb(e,"b"))}get h(){let e=this.data,r=e.h;return!this.type.is(Ii.RGB)&&r!==void 0?r:(this._ensureRGB(),jt.channel.rgb2hsl(e,"h"))}get s(){let e=this.data,r=e.s;return!this.type.is(Ii.RGB)&&r!==void 0?r:(this._ensureRGB(),jt.channel.rgb2hsl(e,"s"))}get l(){let e=this.data,r=e.l;return!this.type.is(Ii.RGB)&&r!==void 0?r:(this._ensureRGB(),jt.channel.rgb2hsl(e,"l"))}get a(){return this.data.a}set r(e){this.type.set(Ii.RGB),this.changed=!0,this.data.r=e}set g(e){this.type.set(Ii.RGB),this.changed=!0,this.data.g=e}set b(e){this.type.set(Ii.RGB),this.changed=!0,this.data.b=e}set h(e){this.type.set(Ii.HSL),this.changed=!0,this.data.h=e}set s(e){this.type.set(Ii.HSL),this.changed=!0,this.data.s=e}set l(e){this.type.set(Ii.HSL),this.changed=!0,this.data.l=e}set a(e){this.changed=!0,this.data.a=e}},l$=VC});var mxe,ih,Ey=N(()=>{"use strict";c$();mxe=new l$({r:0,g:0,b:0,a:0},"transparent"),ih=mxe});var u$,jf,UC=N(()=>{"use strict";Ey();ky();u$={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:o(t=>{if(t.charCodeAt(0)!==35)return;let e=t.match(u$.re);if(!e)return;let r=e[1],n=parseInt(r,16),i=r.length,a=i%4===0,s=i>4,l=s?1:17,u=s?8:4,h=a?0:-1,f=s?255:15;return ih.set({r:(n>>u*(h+3)&f)*l,g:(n>>u*(h+2)&f)*l,b:(n>>u*(h+1)&f)*l,a:a?(n&f)*l/255:1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`#${ru[Math.round(e)]}${ru[Math.round(r)]}${ru[Math.round(n)]}${ru[Math.round(i*255)]}`:`#${ru[Math.round(e)]}${ru[Math.round(r)]}${ru[Math.round(n)]}`},"stringify")},jf=u$});var V4,Sy,h$=N(()=>{"use strict";Wl();Ey();V4={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:o(t=>{let e=t.match(V4.hueRe);if(e){let[,r,n]=e;switch(n){case"grad":return jt.channel.clamp.h(parseFloat(r)*.9);case"rad":return jt.channel.clamp.h(parseFloat(r)*180/Math.PI);case"turn":return jt.channel.clamp.h(parseFloat(r)*360)}}return jt.channel.clamp.h(parseFloat(t))},"_hue2deg"),parse:o(t=>{let e=t.charCodeAt(0);if(e!==104&&e!==72)return;let r=t.match(V4.re);if(!r)return;let[,n,i,a,s,l]=r;return ih.set({h:V4._hue2deg(n),s:jt.channel.clamp.s(parseFloat(i)),l:jt.channel.clamp.l(parseFloat(a)),a:s?jt.channel.clamp.a(l?parseFloat(s)/100:parseFloat(s)):1},t)},"parse"),stringify:o(t=>{let{h:e,s:r,l:n,a:i}=t;return i<1?`hsla(${jt.lang.round(e)}, ${jt.lang.round(r)}%, ${jt.lang.round(n)}%, ${i})`:`hsl(${jt.lang.round(e)}, ${jt.lang.round(r)}%, ${jt.lang.round(n)}%)`},"stringify")},Sy=V4});var U4,HC,f$=N(()=>{"use strict";UC();U4={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:o(t=>{t=t.toLowerCase();let e=U4.colors[t];if(e)return jf.parse(e)},"parse"),stringify:o(t=>{let e=jf.stringify(t);for(let r in U4.colors)if(U4.colors[r]===e)return r},"stringify")},HC=U4});var d$,Cy,p$=N(()=>{"use strict";Wl();Ey();d$={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:o(t=>{let e=t.charCodeAt(0);if(e!==114&&e!==82)return;let r=t.match(d$.re);if(!r)return;let[,n,i,a,s,l,u,h,f]=r;return ih.set({r:jt.channel.clamp.r(i?parseFloat(n)*2.55:parseFloat(n)),g:jt.channel.clamp.g(s?parseFloat(a)*2.55:parseFloat(a)),b:jt.channel.clamp.b(u?parseFloat(l)*2.55:parseFloat(l)),a:h?jt.channel.clamp.a(f?parseFloat(h)/100:parseFloat(h)):1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`rgba(${jt.lang.round(e)}, ${jt.lang.round(r)}, ${jt.lang.round(n)}, ${jt.lang.round(i)})`:`rgb(${jt.lang.round(e)}, ${jt.lang.round(r)}, ${jt.lang.round(n)})`},"stringify")},Cy=d$});var gxe,Oi,nu=N(()=>{"use strict";UC();h$();f$();p$();ky();gxe={format:{keyword:HC,hex:jf,rgb:Cy,rgba:Cy,hsl:Sy,hsla:Sy},parse:o(t=>{if(typeof t!="string")return t;let e=jf.parse(t)||Cy.parse(t)||Sy.parse(t)||HC.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},"parse"),stringify:o(t=>!t.changed&&t.color?t.color:t.type.is(Ii.HSL)||t.data.r===void 0?Sy.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?Cy.stringify(t):jf.stringify(t),"stringify")},Oi=gxe});var yxe,H4,WC=N(()=>{"use strict";Wl();nu();yxe=o((t,e)=>{let r=Oi.parse(t);for(let n in e)r[n]=jt.channel.clamp[n](e[n]);return Oi.stringify(r)},"change"),H4=yxe});var vxe,qa,qC=N(()=>{"use strict";Wl();Ey();nu();WC();vxe=o((t,e,r=0,n=1)=>{if(typeof t!="number")return H4(t,{a:e});let i=ih.set({r:jt.channel.clamp.r(t),g:jt.channel.clamp.g(e),b:jt.channel.clamp.b(r),a:jt.channel.clamp.a(n)});return Oi.stringify(i)},"rgba"),qa=vxe});var xxe,Kf,m$=N(()=>{"use strict";Wl();nu();xxe=o((t,e)=>jt.lang.round(Oi.parse(t)[e]),"channel"),Kf=xxe});var bxe,g$,y$=N(()=>{"use strict";Wl();nu();bxe=o(t=>{let{r:e,g:r,b:n}=Oi.parse(t),i=.2126*jt.channel.toLinear(e)+.7152*jt.channel.toLinear(r)+.0722*jt.channel.toLinear(n);return jt.lang.round(i)},"luminance"),g$=bxe});var wxe,v$,x$=N(()=>{"use strict";y$();wxe=o(t=>g$(t)>=.5,"isLight"),v$=wxe});var Txe,ca,b$=N(()=>{"use strict";x$();Txe=o(t=>!v$(t),"isDark"),ca=Txe});var kxe,W4,YC=N(()=>{"use strict";Wl();nu();kxe=o((t,e,r)=>{let n=Oi.parse(t),i=n[e],a=jt.channel.clamp[e](i+r);return i!==a&&(n[e]=a),Oi.stringify(n)},"adjustChannel"),W4=kxe});var Exe,Dt,w$=N(()=>{"use strict";YC();Exe=o((t,e)=>W4(t,"l",e),"lighten"),Dt=Exe});var Sxe,Ot,T$=N(()=>{"use strict";YC();Sxe=o((t,e)=>W4(t,"l",-e),"darken"),Ot=Sxe});var Cxe,Me,k$=N(()=>{"use strict";nu();WC();Cxe=o((t,e)=>{let r=Oi.parse(t),n={};for(let i in e)e[i]&&(n[i]=r[i]+e[i]);return H4(t,n)},"adjust"),Me=Cxe});var Axe,E$,S$=N(()=>{"use strict";nu();qC();Axe=o((t,e,r=50)=>{let{r:n,g:i,b:a,a:s}=Oi.parse(t),{r:l,g:u,b:h,a:f}=Oi.parse(e),d=r/100,p=d*2-1,m=s-f,y=((p*m===-1?p:(p+m)/(1+p*m))+1)/2,v=1-y,x=n*y+l*v,b=i*y+u*v,w=a*y+h*v,C=s*d+f*(1-d);return qa(x,b,w,C)},"mix"),E$=Axe});var _xe,wt,C$=N(()=>{"use strict";nu();S$();_xe=o((t,e=100)=>{let r=Oi.parse(t);return r.r=255-r.r,r.g=255-r.g,r.b=255-r.b,E$(r,t,e)},"invert"),wt=_xe});var A$=N(()=>{"use strict";qC();m$();b$();w$();T$();k$();C$()});var Ys=N(()=>{"use strict";A$()});var ah,sh,Ay=N(()=>{"use strict";ah="#ffffff",sh="#f2f2f2"});var Ti,o0=N(()=>{"use strict";Ys();Ti=o((t,e)=>e?Me(t,{s:-40,l:10}):Me(t,{s:-40,l:-10}),"mkBorder")});var jC,_$,D$=N(()=>{"use strict";Ys();Ay();o0();jC=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||Me(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||Me(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Ti(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Ti(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Ti(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||wt(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||wt(this.tertiaryColor),this.lineColor=this.lineColor||wt(this.background),this.arrowheadColor=this.arrowheadColor||wt(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Ot(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Ot(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||wt(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||Dt(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.darkMode?(this.rowOdd=this.rowOdd||Ot(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Ot(this.mainBkg,10)):(this.rowOdd=this.rowOdd||Dt(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||Dt(this.mainBkg,5)),this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this["cScale"+r]=Ot(this["cScale"+r],75);else for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this["cScale"+r]=Ot(this["cScale"+r],25);for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this["cScaleInv"+r]=this["cScaleInv"+r]||wt(this["cScale"+r]);for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this.darkMode?this["cScalePeer"+r]=this["cScalePeer"+r]||Dt(this["cScale"+r],10):this["cScalePeer"+r]=this["cScalePeer"+r]||Ot(this["cScale"+r],10);this.scaleLabelColor=this.scaleLabelColor||this.labelTextColor;for(let r=0;r<this.THEME_COLOR_LIMIT;r++)this["cScaleLabel"+r]=this["cScaleLabel"+r]||this.scaleLabelColor;let e=this.darkMode?-4:-1;for(let r=0;r<5;r++)this["surface"+r]=this["surface"+r]||Me(this.mainBkg,{h:180,s:-15,l:e*(5+r*3)}),this["surfacePeer"+r]=this["surfacePeer"+r]||Me(this.mainBkg,{h:180,s:-15,l:e*(8+r*3)});this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||Me(this.primaryColor,{h:64}),this.fillType3=this.fillType3||Me(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||Me(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||Me(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||Me(this.primaryColor,{h:128}),this.fillType7=this.fillType7||Me(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||Me(this.primaryColor,{l:-10}),this.pie5=this.pie5||Me(this.secondaryColor,{l:-10}),this.pie6=this.pie6||Me(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||Me(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||Me(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||Me(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||Me(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||Me(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||Me(this.primaryColor,{h:120,l:-10}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},this.archEdgeColor=this.archEdgeColor||"#777",this.archEdgeArrowColor=this.archEdgeArrowColor||"#777",this.archEdgeWidth=this.archEdgeWidth||"3",this.archGroupBorderColor=this.archGroupBorderColor||"#000",this.archGroupBorderWidth=this.archGroupBorderWidth||"2px",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.plotColorPalette||"#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?Ot(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||Me(this.primaryColor,{h:-30}),this.git4=this.git4||Me(this.primaryColor,{h:-60}),this.git5=this.git5||Me(this.primaryColor,{h:-90}),this.git6=this.git6||Me(this.primaryColor,{h:60}),this.git7=this.git7||Me(this.primaryColor,{h:120}),this.darkMode?(this.git0=Dt(this.git0,25),this.git1=Dt(this.git1,25),this.git2=Dt(this.git2,25),this.git3=Dt(this.git3,25),this.git4=Dt(this.git4,25),this.git5=Dt(this.git5,25),this.git6=Dt(this.git6,25),this.git7=Dt(this.git7,25)):(this.git0=Ot(this.git0,25),this.git1=Ot(this.git1,25),this.git2=Ot(this.git2,25),this.git3=Ot(this.git3,25),this.git4=Ot(this.git4,25),this.git5=Ot(this.git5,25),this.git6=Ot(this.git6,25),this.git7=Ot(this.git7,25)),this.gitInv0=this.gitInv0||wt(this.git0),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(this.git7),this.branchLabelColor=this.branchLabelColor||(this.darkMode?"black":this.labelTextColor),this.gitBranchLabel0=this.gitBranchLabel0||this.branchLabelColor,this.gitBranchLabel1=this.gitBranchLabel1||this.branchLabelColor,this.gitBranchLabel2=this.gitBranchLabel2||this.branchLabelColor,this.gitBranchLabel3=this.gitBranchLabel3||this.branchLabelColor,this.gitBranchLabel4=this.gitBranchLabel4||this.branchLabelColor,this.gitBranchLabel5=this.gitBranchLabel5||this.branchLabelColor,this.gitBranchLabel6=this.gitBranchLabel6||this.branchLabelColor,this.gitBranchLabel7=this.gitBranchLabel7||this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||ah,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||sh}calculate(e){if(typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},_$=o(t=>{let e=new jC;return e.calculate(t),e},"getThemeVariables")});var KC,L$,R$=N(()=>{"use strict";Ys();o0();KC=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Dt(this.primaryColor,16),this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=wt(this.background),this.secondaryBorderColor=Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Ti(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.tertiaryColor),this.lineColor=wt(this.background),this.textColor=wt(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Dt(wt("#323D47"),10),this.lineColor="calculated",this.border1="#ccc",this.border2=qa(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=Ot("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=Ot(this.sectionBkgColor,10),this.taskBorderColor=qa(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=qa(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||Dt(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Ot(this.mainBkg,10),this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=Dt(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=Dt(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.actorBorder,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=Dt(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330});for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||wt(this["cScale"+e]);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScalePeer"+e]=this["cScalePeer"+e]||Dt(this["cScale"+e],10);for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||Me(this.mainBkg,{h:30,s:-30,l:-(-10+e*4)}),this["surfacePeer"+e]=this["surfacePeer"+e]||Me(this.mainBkg,{h:30,s:-30,l:-(-7+e*4)});this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["pie"+e]=this["cScale"+e];this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.plotColorPalette||"#3498db,#2ecc71,#e74c3c,#f1c40f,#bdc3c7,#ffffff,#34495e,#9b59b6,#1abc9c,#e67e22"},this.packet={startByteColor:this.primaryTextColor,endByteColor:this.primaryTextColor,labelColor:this.primaryTextColor,titleColor:this.primaryTextColor,blockStrokeColor:this.primaryTextColor,blockFillColor:this.background},this.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},this.classText=this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?Ot(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=Dt(this.secondaryColor,20),this.git1=Dt(this.pie2||this.secondaryColor,20),this.git2=Dt(this.pie3||this.tertiaryColor,20),this.git3=Dt(this.pie4||Me(this.primaryColor,{h:-30}),20),this.git4=Dt(this.pie5||Me(this.primaryColor,{h:-60}),20),this.git5=Dt(this.pie6||Me(this.primaryColor,{h:-90}),10),this.git6=Dt(this.pie7||Me(this.primaryColor,{h:60}),10),this.git7=Dt(this.pie8||Me(this.primaryColor,{h:120}),20),this.gitInv0=this.gitInv0||wt(this.git0),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||wt(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||wt(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||Dt(this.background,12),this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Dt(this.background,2),this.nodeBorder=this.nodeBorder||"#999"}calculate(e){if(typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},L$=o(t=>{let e=new KC;return e.calculate(t),e},"getThemeVariables")});var QC,oh,_y=N(()=>{"use strict";Ys();o0();Ay();QC=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=Me(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=Ti(this.primaryColor,this.darkMode),this.secondaryBorderColor=Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Ti(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.tertiaryColor),this.lineColor=wt(this.background),this.textColor=wt(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="rgba(232,232,232, 0.8)",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=qa(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd="calculated",this.rowEven="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Ot(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Ot(this.tertiaryColor,40);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=Ot(this["cScale"+e],10),this["cScalePeer"+e]=this["cScalePeer"+e]||Ot(this["cScale"+e],25);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||Me(this["cScale"+e],{h:180});for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||Me(this.mainBkg,{h:30,l:-(5+e*5)}),this["surfacePeer"+e]=this["surfacePeer"+e]||Me(this.mainBkg,{h:30,l:-(7+e*5)});if(this.scaleLabelColor=this.scaleLabelColor!=="calculated"&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor,this.labelTextColor!=="calculated"){this.cScaleLabel0=this.cScaleLabel0||wt(this.labelTextColor),this.cScaleLabel3=this.cScaleLabel3||wt(this.labelTextColor);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.labelTextColor}this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.textColor,this.edgeLabelBackground=this.labelBackground,this.actorBorder=Dt(this.border1,23),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.signalColor=this.textColor,this.signalTextColor=this.textColor,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.actorLineColor=this.actorBorder,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.rowOdd=this.rowOdd||Dt(this.primaryColor,75)||"#ffffff",this.rowEven=this.rowEven||Dt(this.primaryColor,1),this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||Me(this.tertiaryColor,{l:-40}),this.pie4=this.pie4||Me(this.primaryColor,{l:-10}),this.pie5=this.pie5||Me(this.secondaryColor,{l:-30}),this.pie6=this.pie6||Me(this.tertiaryColor,{l:-20}),this.pie7=this.pie7||Me(this.primaryColor,{h:60,l:-20}),this.pie8=this.pie8||Me(this.primaryColor,{h:-60,l:-40}),this.pie9=this.pie9||Me(this.primaryColor,{h:120,l:-40}),this.pie10=this.pie10||Me(this.primaryColor,{h:60,l:-40}),this.pie11=this.pie11||Me(this.primaryColor,{h:-90,l:-40}),this.pie12=this.pie12||Me(this.primaryColor,{h:120,l:-30}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},this.xyChart={backgroundColor:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.plotColorPalette||"#ECECFF,#8493A6,#FFC3A0,#DCDDE1,#B8E994,#D1A36F,#C3CDE6,#FFB6C1,#496078,#F8F3E3"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.labelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||Me(this.primaryColor,{h:-30}),this.git4=this.git4||Me(this.primaryColor,{h:-60}),this.git5=this.git5||Me(this.primaryColor,{h:-90}),this.git6=this.git6||Me(this.primaryColor,{h:60}),this.git7=this.git7||Me(this.primaryColor,{h:120}),this.darkMode?(this.git0=Dt(this.git0,25),this.git1=Dt(this.git1,25),this.git2=Dt(this.git2,25),this.git3=Dt(this.git3,25),this.git4=Dt(this.git4,25),this.git5=Dt(this.git5,25),this.git6=Dt(this.git6,25),this.git7=Dt(this.git7,25)):(this.git0=Ot(this.git0,25),this.git1=Ot(this.git1,25),this.git2=Ot(this.git2,25),this.git3=Ot(this.git3,25),this.git4=Ot(this.git4,25),this.git5=Ot(this.git5,25),this.git6=Ot(this.git6,25),this.git7=Ot(this.git7,25)),this.gitInv0=this.gitInv0||Ot(wt(this.git0),25),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||wt(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||wt(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||ah,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||sh}calculate(e){if(Object.keys(this).forEach(n=>{this[n]==="calculated"&&(this[n]=void 0)}),typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},oh=o(t=>{let e=new QC;return e.calculate(t),e},"getThemeVariables")});var ZC,N$,M$=N(()=>{"use strict";Ys();Ay();o0();ZC=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=Dt("#cde498",10),this.primaryBorderColor=Ti(this.primaryColor,this.darkMode),this.secondaryBorderColor=Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Ti(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.primaryColor),this.lineColor=wt(this.background),this.textColor=wt(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.actorBorder=Ot(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.actorLineColor=this.actorBorder,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Ot(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Ot(this.tertiaryColor,40);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=Ot(this["cScale"+e],10),this["cScalePeer"+e]=this["cScalePeer"+e]||Ot(this["cScale"+e],25);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||Me(this["cScale"+e],{h:180});this.scaleLabelColor=this.scaleLabelColor!=="calculated"&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||Me(this.mainBkg,{h:30,s:-30,l:-(5+e*5)}),this["surfacePeer"+e]=this["surfacePeer"+e]||Me(this.mainBkg,{h:30,s:-30,l:-(8+e*5)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.taskBorderColor=this.border1,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.rowOdd=this.rowOdd||Dt(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||Dt(this.mainBkg,20),this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||Me(this.primaryColor,{l:-30}),this.pie5=this.pie5||Me(this.secondaryColor,{l:-30}),this.pie6=this.pie6||Me(this.tertiaryColor,{h:40,l:-40}),this.pie7=this.pie7||Me(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||Me(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||Me(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||Me(this.primaryColor,{h:60,l:-50}),this.pie11=this.pie11||Me(this.primaryColor,{h:-60,l:-50}),this.pie12=this.pie12||Me(this.primaryColor,{h:120,l:-50}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.packet={startByteColor:this.primaryTextColor,endByteColor:this.primaryTextColor,labelColor:this.primaryTextColor,titleColor:this.primaryTextColor,blockStrokeColor:this.primaryTextColor,blockFillColor:this.mainBkg},this.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},this.xyChart={backgroundColor:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.plotColorPalette||"#CDE498,#FF6B6B,#A0D2DB,#D7BDE2,#F0F0F0,#FFC3A0,#7FD8BE,#FF9A8B,#FAF3E0,#FFF176"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||Me(this.primaryColor,{h:-30}),this.git4=this.git4||Me(this.primaryColor,{h:-60}),this.git5=this.git5||Me(this.primaryColor,{h:-90}),this.git6=this.git6||Me(this.primaryColor,{h:60}),this.git7=this.git7||Me(this.primaryColor,{h:120}),this.darkMode?(this.git0=Dt(this.git0,25),this.git1=Dt(this.git1,25),this.git2=Dt(this.git2,25),this.git3=Dt(this.git3,25),this.git4=Dt(this.git4,25),this.git5=Dt(this.git5,25),this.git6=Dt(this.git6,25),this.git7=Dt(this.git7,25)):(this.git0=Ot(this.git0,25),this.git1=Ot(this.git1,25),this.git2=Ot(this.git2,25),this.git3=Ot(this.git3,25),this.git4=Ot(this.git4,25),this.git5=Ot(this.git5,25),this.git6=Ot(this.git6,25),this.git7=Ot(this.git7,25)),this.gitInv0=this.gitInv0||wt(this.git0),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||wt(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||wt(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||ah,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||sh}calculate(e){if(typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},N$=o(t=>{let e=new ZC;return e.calculate(t),e},"getThemeVariables")});var JC,I$,O$=N(()=>{"use strict";Ys();o0();Ay();JC=class{static{o(this,"Theme")}constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=Dt(this.contrast,55),this.background="#ffffff",this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=Ti(this.primaryColor,this.darkMode),this.secondaryBorderColor=Ti(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Ti(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.tertiaryColor),this.lineColor=wt(this.background),this.textColor=wt(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor=this.actorBorder,this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||Dt(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||"#f4f4f4",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=Dt(this.contrast,55),this.border2=this.contrast,this.actorBorder=Dt(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.actorBorder,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||wt(this["cScale"+e]);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this.darkMode?this["cScalePeer"+e]=this["cScalePeer"+e]||Dt(this["cScale"+e],10):this["cScalePeer"+e]=this["cScalePeer"+e]||Ot(this["cScale"+e],10);this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor),this.cScaleLabel0=this.cScaleLabel0||this.cScale1,this.cScaleLabel2=this.cScaleLabel2||this.cScale1;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;for(let e=0;e<5;e++)this["surface"+e]=this["surface"+e]||Me(this.mainBkg,{l:-(5+e*5)}),this["surfacePeer"+e]=this["surfacePeer"+e]||Me(this.mainBkg,{l:-(8+e*5)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.text,this.sectionBkgColor=Dt(this.contrast,30),this.sectionBkgColor2=Dt(this.contrast,30),this.taskBorderColor=Ot(this.contrast,10),this.taskBkgColor=this.contrast,this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor=this.text,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.gridColor=Dt(this.border1,30),this.doneTaskBkgColor=this.done,this.doneTaskBorderColor=this.lineColor,this.critBkgColor=this.critical,this.critBorderColor=Ot(this.critBkgColor,10),this.todayLineColor=this.critBkgColor,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.transitionColor=this.transitionColor||"#000",this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f4f4f4",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.stateBorder=this.stateBorder||"#000",this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#222",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(this.secondaryColor,{h:128});for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["pie"+e]=this["cScale"+e];this.pie12=this.pie0,this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||Me(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||Me(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||Me(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||Me(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||Me(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||Me(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||ca(this.quadrant1Fill)?Dt(this.quadrant1Fill):Ot(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:this.xyChart?.backgroundColor||this.background,titleColor:this.xyChart?.titleColor||this.primaryTextColor,xAxisTitleColor:this.xyChart?.xAxisTitleColor||this.primaryTextColor,xAxisLabelColor:this.xyChart?.xAxisLabelColor||this.primaryTextColor,xAxisTickColor:this.xyChart?.xAxisTickColor||this.primaryTextColor,xAxisLineColor:this.xyChart?.xAxisLineColor||this.primaryTextColor,yAxisTitleColor:this.xyChart?.yAxisTitleColor||this.primaryTextColor,yAxisLabelColor:this.xyChart?.yAxisLabelColor||this.primaryTextColor,yAxisTickColor:this.xyChart?.yAxisTickColor||this.primaryTextColor,yAxisLineColor:this.xyChart?.yAxisLineColor||this.primaryTextColor,plotColorPalette:this.xyChart?.plotColorPalette||"#EEE,#6BB8E4,#8ACB88,#C7ACD6,#E8DCC2,#FFB2A8,#FFF380,#7E8D91,#FFD8B1,#FAF3E0"},this.radar={axisColor:this.radar?.axisColor||this.lineColor,axisStrokeWidth:this.radar?.axisStrokeWidth||2,axisLabelFontSize:this.radar?.axisLabelFontSize||12,curveOpacity:this.radar?.curveOpacity||.5,curveStrokeWidth:this.radar?.curveStrokeWidth||2,graticuleColor:this.radar?.graticuleColor||"#DEDEDE",graticuleStrokeWidth:this.radar?.graticuleStrokeWidth||1,graticuleOpacity:this.radar?.graticuleOpacity||.3,legendBoxSize:this.radar?.legendBoxSize||12,legendFontSize:this.radar?.legendFontSize||12},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=Ot(this.pie1,25)||this.primaryColor,this.git1=this.pie2||this.secondaryColor,this.git2=this.pie3||this.tertiaryColor,this.git3=this.pie4||Me(this.primaryColor,{h:-30}),this.git4=this.pie5||Me(this.primaryColor,{h:-60}),this.git5=this.pie6||Me(this.primaryColor,{h:-90}),this.git6=this.pie7||Me(this.primaryColor,{h:60}),this.git7=this.pie8||Me(this.primaryColor,{h:120}),this.gitInv0=this.gitInv0||wt(this.git0),this.gitInv1=this.gitInv1||wt(this.git1),this.gitInv2=this.gitInv2||wt(this.git2),this.gitInv3=this.gitInv3||wt(this.git3),this.gitInv4=this.gitInv4||wt(this.git4),this.gitInv5=this.gitInv5||wt(this.git5),this.gitInv6=this.gitInv6||wt(this.git6),this.gitInv7=this.gitInv7||wt(this.git7),this.branchLabelColor=this.branchLabelColor||this.labelTextColor,this.gitBranchLabel0=this.branchLabelColor,this.gitBranchLabel1="white",this.gitBranchLabel2=this.branchLabelColor,this.gitBranchLabel3="white",this.gitBranchLabel4=this.branchLabelColor,this.gitBranchLabel5=this.branchLabelColor,this.gitBranchLabel6=this.branchLabelColor,this.gitBranchLabel7=this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||ah,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||sh}calculate(e){if(typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},I$=o(t=>{let e=new JC;return e.calculate(t),e},"getThemeVariables")});var To,q4=N(()=>{"use strict";D$();R$();_y();M$();O$();To={base:{getThemeVariables:_$},dark:{getThemeVariables:L$},default:{getThemeVariables:oh},forest:{getThemeVariables:N$},neutral:{getThemeVariables:I$}}});var ql,P$=N(()=>{"use strict";ql={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1,hideEmptyMembersBox:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,nodeSpacing:140,rankSpacing:80,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},kanban:{useMaxWidth:!0,padding:8,sectionWidth:200,ticketBaseUrl:""},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},packet:{useMaxWidth:!0,rowHeight:32,bitWidth:32,bitsPerRow:32,showBits:!0,paddingX:5,paddingY:5},architecture:{useMaxWidth:!0,padding:40,iconSize:80,fontSize:16},radar:{useMaxWidth:!0,width:600,height:600,marginTop:50,marginRight:50,marginBottom:50,marginLeft:50,axisScaleFactor:1,axisLabelFactor:1.05,curveTension:.17},theme:"default",look:"classic",handDrawnSeed:0,layout:"dagre",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","suppressErrorRendering","maxEdges"],legacyMathML:!1,forceLegacyMathML:!1,deterministicIds:!1,fontSize:16,markdownAutoWrap:!0,suppressErrorRendering:!1}});var B$,F$,$$,or,Ya=N(()=>{"use strict";q4();P$();B$={...ql,deterministicIDSeed:void 0,elk:{mergeEdges:!1,nodePlacementStrategy:"BRANDES_KOEPF"},themeCSS:void 0,themeVariables:To.default.getThemeVariables(),sequence:{...ql.sequence,messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont"),noteFont:o(function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},"noteFont"),actorFont:o(function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}},"actorFont")},class:{hideEmptyMembersBox:!1},gantt:{...ql.gantt,tickInterval:void 0,useWidth:void 0},c4:{...ql.c4,useWidth:void 0,personFont:o(function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},"personFont"),external_personFont:o(function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},"external_personFont"),systemFont:o(function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},"systemFont"),external_systemFont:o(function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},"external_systemFont"),system_dbFont:o(function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},"system_dbFont"),external_system_dbFont:o(function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},"external_system_dbFont"),system_queueFont:o(function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},"system_queueFont"),external_system_queueFont:o(function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},"external_system_queueFont"),containerFont:o(function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},"containerFont"),external_containerFont:o(function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},"external_containerFont"),container_dbFont:o(function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},"container_dbFont"),external_container_dbFont:o(function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},"external_container_dbFont"),container_queueFont:o(function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},"container_queueFont"),external_container_queueFont:o(function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},"external_container_queueFont"),componentFont:o(function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},"componentFont"),external_componentFont:o(function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},"external_componentFont"),component_dbFont:o(function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},"component_dbFont"),external_component_dbFont:o(function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},"external_component_dbFont"),component_queueFont:o(function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},"component_queueFont"),external_component_queueFont:o(function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},"external_component_queueFont"),boundaryFont:o(function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},"boundaryFont"),messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont")},pie:{...ql.pie,useWidth:984},xyChart:{...ql.xyChart,useWidth:void 0},requirement:{...ql.requirement,useWidth:void 0},packet:{...ql.packet},radar:{...ql.radar}},F$=o((t,e="")=>Object.keys(t).reduce((r,n)=>Array.isArray(t[n])?r:typeof t[n]=="object"&&t[n]!==null?[...r,e+n,...F$(t[n],"")]:[...r,e+n],[]),"keyify"),$$=new Set(F$(B$,"")),or=B$});var l0,Dxe,e7=N(()=>{"use strict";Ya();vt();l0=o(t=>{if(Y.debug("sanitizeDirective called with",t),!(typeof t!="object"||t==null)){if(Array.isArray(t)){t.forEach(e=>l0(e));return}for(let e of Object.keys(t)){if(Y.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!$$.has(e)||t[e]==null){Y.debug("sanitize deleting key: ",e),delete t[e];continue}if(typeof t[e]=="object"){Y.debug("sanitizing object",e),l0(t[e]);continue}let r=["themeCSS","fontFamily","altFontFamily"];for(let n of r)e.includes(n)&&(Y.debug("sanitizing css option",e),t[e]=Dxe(t[e]))}if(t.themeVariables)for(let e of Object.keys(t.themeVariables)){let r=t.themeVariables[e];r?.match&&!r.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}Y.debug("After sanitization",t)}},"sanitizeDirective"),Dxe=o(t=>{let e=0,r=0;for(let n of t){if(e<r)return"{ /* ERROR: Unbalanced CSS */ }";n==="{"?e++:n==="}"&&r++}return e!==r?"{ /* ERROR: Unbalanced CSS */ }":t},"sanitizeCss")});var lh,xs,G$,c0,Dy,Y4,t7,V$,U$,r7,X4,cr,H$,W$,Ly,Lxe,z$,Rxe,q$,ji=N(()=>{"use strict";s0();vt();q4();Ya();e7();lh=Object.freeze(or),xs=Gn({},lh),c0=[],Dy=Gn({},lh),Y4=o((t,e)=>{let r=Gn({},t),n={};for(let i of e)H$(i),n=Gn(n,i);if(r=Gn(r,n),n.theme&&n.theme in To){let i=Gn({},G$),a=Gn(i.themeVariables||{},n.themeVariables);r.theme&&r.theme in To&&(r.themeVariables=To[r.theme].getThemeVariables(a))}return Dy=r,q$(Dy),Dy},"updateCurrentConfig"),t7=o(t=>(xs=Gn({},lh),xs=Gn(xs,t),t.theme&&To[t.theme]&&(xs.themeVariables=To[t.theme].getThemeVariables(t.themeVariables)),Y4(xs,c0),xs),"setSiteConfig"),V$=o(t=>{G$=Gn({},t)},"saveConfigFromInitialize"),U$=o(t=>(xs=Gn(xs,t),Y4(xs,c0),xs),"updateSiteConfig"),r7=o(()=>Gn({},xs),"getSiteConfig"),X4=o(t=>(q$(t),Gn(Dy,t),cr()),"setConfig"),cr=o(()=>Gn({},Dy),"getConfig"),H$=o(t=>{t&&(["secure",...xs.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(Y.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])}),Object.keys(t).forEach(e=>{e.startsWith("__")&&delete t[e]}),Object.keys(t).forEach(e=>{typeof t[e]=="string"&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],typeof t[e]=="object"&&H$(t[e])}))},"sanitize"),W$=o(t=>{l0(t),t.fontFamily&&!t.themeVariables?.fontFamily&&(t.themeVariables={...t.themeVariables,fontFamily:t.fontFamily}),c0.push(t),Y4(xs,c0)},"addDirective"),Ly=o((t=xs)=>{c0=[],Y4(t,c0)},"reset"),Lxe={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},z$={},Rxe=o(t=>{z$[t]||(Y.warn(Lxe[t]),z$[t]=!0)},"issueWarning"),q$=o(t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&Rxe("LAZY_LOAD_DEPRECATED")},"checkConfig")});function Ka(t){return function(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];return l7(t,e,n)}}function $xe(t){return function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];return c7(t,r)}}function Cr(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Q4;Y$&&Y$(t,null);let n=e.length;for(;n--;){let i=e[n];if(typeof i=="string"){let a=r(i);a!==i&&(Nxe(e)||(e[n]=a),i=a)}t[i]=!0}return t}function zxe(t){for(let e=0;e<t.length;e++)sl(t,e)||(t[e]=null);return t}function Qf(t){let e=nz(null);for(let[r,n]of rz(t))sl(t,r)&&(Array.isArray(n)?e[r]=zxe(n):n&&typeof n=="object"&&n.constructor===Object?e[r]=Qf(n):e[r]=n);return e}function Iy(t,e){for(;t!==null;){let n=Ixe(t,e);if(n){if(n.get)return Ka(n.get);if(typeof n.value=="function")return Ka(n.value)}t=Mxe(t)}function r(){return null}return o(r,"fallbackValue"),r}function sz(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Qxe(),e=o(At=>sz(At),"DOMPurify");if(e.version="3.2.4",e.removed=[],!t||!t.document||t.document.nodeType!==Oy.document||!t.Element)return e.isSupported=!1,e;let{document:r}=t,n=r,i=n.currentScript,{DocumentFragment:a,HTMLTemplateElement:s,Node:l,Element:u,NodeFilter:h,NamedNodeMap:f=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:d,DOMParser:p,trustedTypes:m}=t,g=u.prototype,y=Iy(g,"cloneNode"),v=Iy(g,"remove"),x=Iy(g,"nextSibling"),b=Iy(g,"childNodes"),w=Iy(g,"parentNode");if(typeof s=="function"){let At=r.createElement("template");At.content&&At.content.ownerDocument&&(r=At.content.ownerDocument)}let C,T="",{implementation:E,createNodeIterator:A,createDocumentFragment:S,getElementsByTagName:_}=r,{importNode:I}=n,D=tz();e.isSupported=typeof rz=="function"&&typeof w=="function"&&E&&E.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:k,ERB_EXPR:L,TMPLIT_EXPR:R,DATA_ATTR:O,ARIA_ATTR:M,IS_SCRIPT_OR_DATA:B,ATTR_WHITESPACE:F,CUSTOM_ELEMENT:P}=ez,{IS_ALLOWED_URI:z}=ez,$=null,H=Cr({},[...K$,...i7,...a7,...s7,...Q$]),Q=null,j=Cr({},[...Z$,...o7,...J$,...K4]),ie=Object.seal(nz(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ne=null,le=null,he=!0,K=!0,X=!1,te=!0,J=!1,se=!0,ue=!1,Z=!1,Se=!1,ce=!1,ae=!1,Oe=!1,ge=!0,ze=!1,He="user-content-",$e=!0,Re=!1,Ie={},be=null,W=Cr({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),de=null,re=Cr({},["audio","video","img","source","image","track"]),oe=null,V=Cr({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),xe="http://www.w3.org/1998/Math/MathML",q="http://www.w3.org/2000/svg",pe="http://www.w3.org/1999/xhtml",ve=pe,Pe=!1,_e=null,we=Cr({},[xe,q,pe],n7),Ve=Cr({},["mi","mo","mn","ms","mtext"]),De=Cr({},["annotation-xml"]),qe=Cr({},["title","style","font","a","script"]),at=null,Rt=["application/xhtml+xml","text/html"],st="text/html",Ue=null,ct=null,We=r.createElement("form"),ot=o(function(Ce){return Ce instanceof RegExp||Ce instanceof Function},"isRegexOrFunction"),Yt=o(function(){let Ce=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(ct&&ct===Ce)){if((!Ce||typeof Ce!="object")&&(Ce={}),Ce=Qf(Ce),at=Rt.indexOf(Ce.PARSER_MEDIA_TYPE)===-1?st:Ce.PARSER_MEDIA_TYPE,Ue=at==="application/xhtml+xml"?n7:Q4,$=sl(Ce,"ALLOWED_TAGS")?Cr({},Ce.ALLOWED_TAGS,Ue):H,Q=sl(Ce,"ALLOWED_ATTR")?Cr({},Ce.ALLOWED_ATTR,Ue):j,_e=sl(Ce,"ALLOWED_NAMESPACES")?Cr({},Ce.ALLOWED_NAMESPACES,n7):we,oe=sl(Ce,"ADD_URI_SAFE_ATTR")?Cr(Qf(V),Ce.ADD_URI_SAFE_ATTR,Ue):V,de=sl(Ce,"ADD_DATA_URI_TAGS")?Cr(Qf(re),Ce.ADD_DATA_URI_TAGS,Ue):re,be=sl(Ce,"FORBID_CONTENTS")?Cr({},Ce.FORBID_CONTENTS,Ue):W,ne=sl(Ce,"FORBID_TAGS")?Cr({},Ce.FORBID_TAGS,Ue):{},le=sl(Ce,"FORBID_ATTR")?Cr({},Ce.FORBID_ATTR,Ue):{},Ie=sl(Ce,"USE_PROFILES")?Ce.USE_PROFILES:!1,he=Ce.ALLOW_ARIA_ATTR!==!1,K=Ce.ALLOW_DATA_ATTR!==!1,X=Ce.ALLOW_UNKNOWN_PROTOCOLS||!1,te=Ce.ALLOW_SELF_CLOSE_IN_ATTR!==!1,J=Ce.SAFE_FOR_TEMPLATES||!1,se=Ce.SAFE_FOR_XML!==!1,ue=Ce.WHOLE_DOCUMENT||!1,ce=Ce.RETURN_DOM||!1,ae=Ce.RETURN_DOM_FRAGMENT||!1,Oe=Ce.RETURN_TRUSTED_TYPE||!1,Se=Ce.FORCE_BODY||!1,ge=Ce.SANITIZE_DOM!==!1,ze=Ce.SANITIZE_NAMED_PROPS||!1,$e=Ce.KEEP_CONTENT!==!1,Re=Ce.IN_PLACE||!1,z=Ce.ALLOWED_URI_REGEXP||iz,ve=Ce.NAMESPACE||pe,Ve=Ce.MATHML_TEXT_INTEGRATION_POINTS||Ve,De=Ce.HTML_INTEGRATION_POINTS||De,ie=Ce.CUSTOM_ELEMENT_HANDLING||{},Ce.CUSTOM_ELEMENT_HANDLING&&ot(Ce.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ie.tagNameCheck=Ce.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Ce.CUSTOM_ELEMENT_HANDLING&&ot(Ce.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ie.attributeNameCheck=Ce.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Ce.CUSTOM_ELEMENT_HANDLING&&typeof Ce.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(ie.allowCustomizedBuiltInElements=Ce.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),J&&(K=!1),ae&&(ce=!0),Ie&&($=Cr({},Q$),Q=[],Ie.html===!0&&(Cr($,K$),Cr(Q,Z$)),Ie.svg===!0&&(Cr($,i7),Cr(Q,o7),Cr(Q,K4)),Ie.svgFilters===!0&&(Cr($,a7),Cr(Q,o7),Cr(Q,K4)),Ie.mathMl===!0&&(Cr($,s7),Cr(Q,J$),Cr(Q,K4))),Ce.ADD_TAGS&&($===H&&($=Qf($)),Cr($,Ce.ADD_TAGS,Ue)),Ce.ADD_ATTR&&(Q===j&&(Q=Qf(Q)),Cr(Q,Ce.ADD_ATTR,Ue)),Ce.ADD_URI_SAFE_ATTR&&Cr(oe,Ce.ADD_URI_SAFE_ATTR,Ue),Ce.FORBID_CONTENTS&&(be===W&&(be=Qf(be)),Cr(be,Ce.FORBID_CONTENTS,Ue)),$e&&($["#text"]=!0),ue&&Cr($,["html","head","body"]),$.table&&(Cr($,["tbody"]),delete ne.tbody),Ce.TRUSTED_TYPES_POLICY){if(typeof Ce.TRUSTED_TYPES_POLICY.createHTML!="function")throw My('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Ce.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw My('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');C=Ce.TRUSTED_TYPES_POLICY,T=C.createHTML("")}else C===void 0&&(C=Zxe(m,i)),C!==null&&typeof T=="string"&&(T=C.createHTML(""));ja&&ja(Ce),ct=Ce}},"_parseConfig"),bt=Cr({},[...i7,...a7,...Gxe]),Mt=Cr({},[...s7,...Vxe]),xt=o(function(Ce){let tt=w(Ce);(!tt||!tt.tagName)&&(tt={namespaceURI:ve,tagName:"template"});let St=Q4(Ce.tagName),mr=Q4(tt.tagName);return _e[Ce.namespaceURI]?Ce.namespaceURI===q?tt.namespaceURI===pe?St==="svg":tt.namespaceURI===xe?St==="svg"&&(mr==="annotation-xml"||Ve[mr]):!!bt[St]:Ce.namespaceURI===xe?tt.namespaceURI===pe?St==="math":tt.namespaceURI===q?St==="math"&&De[mr]:!!Mt[St]:Ce.namespaceURI===pe?tt.namespaceURI===q&&!De[mr]||tt.namespaceURI===xe&&!Ve[mr]?!1:!Mt[St]&&(qe[St]||!bt[St]):!!(at==="application/xhtml+xml"&&_e[Ce.namespaceURI]):!1},"_checkValidNamespace"),ut=o(function(Ce){Ry(e.removed,{element:Ce});try{w(Ce).removeChild(Ce)}catch{v(Ce)}},"_forceRemove"),Et=o(function(Ce,tt){try{Ry(e.removed,{attribute:tt.getAttributeNode(Ce),from:tt})}catch{Ry(e.removed,{attribute:null,from:tt})}if(tt.removeAttribute(Ce),Ce==="is")if(ce||ae)try{ut(tt)}catch{}else try{tt.setAttribute(Ce,"")}catch{}},"_removeAttribute"),ft=o(function(Ce){let tt=null,St=null;if(Se)Ce="<remove></remove>"+Ce;else{let gn=j$(Ce,/^[\r\n\t ]+/);St=gn&&gn[0]}at==="application/xhtml+xml"&&ve===pe&&(Ce='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+Ce+"</body></html>");let mr=C?C.createHTML(Ce):Ce;if(ve===pe)try{tt=new p().parseFromString(mr,at)}catch{}if(!tt||!tt.documentElement){tt=E.createDocument(ve,"template",null);try{tt.documentElement.innerHTML=Pe?T:mr}catch{}}let rn=tt.body||tt.documentElement;return Ce&&St&&rn.insertBefore(r.createTextNode(St),rn.childNodes[0]||null),ve===pe?_.call(tt,ue?"html":"body")[0]:ue?tt.documentElement:rn},"_initDocument"),yt=o(function(Ce){return A.call(Ce.ownerDocument||Ce,Ce,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT|h.SHOW_PROCESSING_INSTRUCTION|h.SHOW_CDATA_SECTION,null)},"_createNodeIterator"),nt=o(function(Ce){return Ce instanceof d&&(typeof Ce.nodeName!="string"||typeof Ce.textContent!="string"||typeof Ce.removeChild!="function"||!(Ce.attributes instanceof f)||typeof Ce.removeAttribute!="function"||typeof Ce.setAttribute!="function"||typeof Ce.namespaceURI!="string"||typeof Ce.insertBefore!="function"||typeof Ce.hasChildNodes!="function")},"_isClobbered"),dn=o(function(Ce){return typeof l=="function"&&Ce instanceof l},"_isNode");function Tt(At,Ce,tt){j4(At,St=>{St.call(e,Ce,tt,ct)})}o(Tt,"_executeHooks");let On=o(function(Ce){let tt=null;if(Tt(D.beforeSanitizeElements,Ce,null),nt(Ce))return ut(Ce),!0;let St=Ue(Ce.nodeName);if(Tt(D.uponSanitizeElement,Ce,{tagName:St,allowedTags:$}),Ce.hasChildNodes()&&!dn(Ce.firstElementChild)&&Xa(/<[/\w]/g,Ce.innerHTML)&&Xa(/<[/\w]/g,Ce.textContent)||Ce.nodeType===Oy.progressingInstruction||se&&Ce.nodeType===Oy.comment&&Xa(/<[/\w]/g,Ce.data))return ut(Ce),!0;if(!$[St]||ne[St]){if(!ne[St]&&_r(St)&&(ie.tagNameCheck instanceof RegExp&&Xa(ie.tagNameCheck,St)||ie.tagNameCheck instanceof Function&&ie.tagNameCheck(St)))return!1;if($e&&!be[St]){let mr=w(Ce)||Ce.parentNode,rn=b(Ce)||Ce.childNodes;if(rn&&mr){let gn=rn.length;for(let Zr=gn-1;Zr>=0;--Zr){let Ni=y(rn[Zr],!0);Ni.__removalCount=(Ce.__removalCount||0)+1,mr.insertBefore(Ni,x(Ce))}}}return ut(Ce),!0}return Ce instanceof u&&!xt(Ce)||(St==="noscript"||St==="noembed"||St==="noframes")&&Xa(/<\/no(script|embed|frames)/i,Ce.innerHTML)?(ut(Ce),!0):(J&&Ce.nodeType===Oy.text&&(tt=Ce.textContent,j4([k,L,R],mr=>{tt=Ny(tt,mr," ")}),Ce.textContent!==tt&&(Ry(e.removed,{element:Ce.cloneNode()}),Ce.textContent=tt)),Tt(D.afterSanitizeElements,Ce,null),!1)},"_sanitizeElements"),tn=o(function(Ce,tt,St){if(ge&&(tt==="id"||tt==="name")&&(St in r||St in We))return!1;if(!(K&&!le[tt]&&Xa(O,tt))){if(!(he&&Xa(M,tt))){if(!Q[tt]||le[tt]){if(!(_r(Ce)&&(ie.tagNameCheck instanceof RegExp&&Xa(ie.tagNameCheck,Ce)||ie.tagNameCheck instanceof Function&&ie.tagNameCheck(Ce))&&(ie.attributeNameCheck instanceof RegExp&&Xa(ie.attributeNameCheck,tt)||ie.attributeNameCheck instanceof Function&&ie.attributeNameCheck(tt))||tt==="is"&&ie.allowCustomizedBuiltInElements&&(ie.tagNameCheck instanceof RegExp&&Xa(ie.tagNameCheck,St)||ie.tagNameCheck instanceof Function&&ie.tagNameCheck(St))))return!1}else if(!oe[tt]){if(!Xa(z,Ny(St,F,""))){if(!((tt==="src"||tt==="xlink:href"||tt==="href")&&Ce!=="script"&&Bxe(St,"data:")===0&&de[Ce])){if(!(X&&!Xa(B,Ny(St,F,"")))){if(St)return!1}}}}}}return!0},"_isValidAttribute"),_r=o(function(Ce){return Ce!=="annotation-xml"&&j$(Ce,P)},"_isBasicCustomElement"),Dr=o(function(Ce){Tt(D.beforeSanitizeAttributes,Ce,null);let{attributes:tt}=Ce;if(!tt||nt(Ce))return;let St={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Q,forceKeepAttr:void 0},mr=tt.length;for(;mr--;){let rn=tt[mr],{name:gn,namespaceURI:Zr,value:Ni}=rn,Zn=Ue(gn),Sn=gn==="value"?Ni:Fxe(Ni);if(St.attrName=Zn,St.attrValue=Sn,St.keepAttr=!0,St.forceKeepAttr=void 0,Tt(D.uponSanitizeAttribute,Ce,St),Sn=St.attrValue,ze&&(Zn==="id"||Zn==="name")&&(Et(gn,Ce),Sn=He+Sn),se&&Xa(/((--!?|])>)|<\/(style|title)/i,Sn)){Et(gn,Ce);continue}if(St.forceKeepAttr||(Et(gn,Ce),!St.keepAttr))continue;if(!te&&Xa(/\/>/i,Sn)){Et(gn,Ce);continue}J&&j4([k,L,R],et=>{Sn=Ny(Sn,et," ")});let Hr=Ue(Ce.nodeName);if(tn(Hr,Zn,Sn)){if(C&&typeof m=="object"&&typeof m.getAttributeType=="function"&&!Zr)switch(m.getAttributeType(Hr,Zn)){case"TrustedHTML":{Sn=C.createHTML(Sn);break}case"TrustedScriptURL":{Sn=C.createScriptURL(Sn);break}}try{Zr?Ce.setAttributeNS(Zr,gn,Sn):Ce.setAttribute(gn,Sn),nt(Ce)?ut(Ce):X$(e.removed)}catch{}}}Tt(D.afterSanitizeAttributes,Ce,null)},"_sanitizeAttributes"),Pn=o(function At(Ce){let tt=null,St=yt(Ce);for(Tt(D.beforeSanitizeShadowDOM,Ce,null);tt=St.nextNode();)Tt(D.uponSanitizeShadowNode,tt,null),On(tt),Dr(tt),tt.content instanceof a&&At(tt.content);Tt(D.afterSanitizeShadowDOM,Ce,null)},"_sanitizeShadowDOM");return e.sanitize=function(At){let Ce=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},tt=null,St=null,mr=null,rn=null;if(Pe=!At,Pe&&(At="<!-->"),typeof At!="string"&&!dn(At))if(typeof At.toString=="function"){if(At=At.toString(),typeof At!="string")throw My("dirty is not a string, aborting")}else throw My("toString is not a function");if(!e.isSupported)return At;if(Z||Yt(Ce),e.removed=[],typeof At=="string"&&(Re=!1),Re){if(At.nodeName){let Ni=Ue(At.nodeName);if(!$[Ni]||ne[Ni])throw My("root node is forbidden and cannot be sanitized in-place")}}else if(At instanceof l)tt=ft("<!---->"),St=tt.ownerDocument.importNode(At,!0),St.nodeType===Oy.element&&St.nodeName==="BODY"||St.nodeName==="HTML"?tt=St:tt.appendChild(St);else{if(!ce&&!J&&!ue&&At.indexOf("<")===-1)return C&&Oe?C.createHTML(At):At;if(tt=ft(At),!tt)return ce?null:Oe?T:""}tt&&Se&&ut(tt.firstChild);let gn=yt(Re?At:tt);for(;mr=gn.nextNode();)On(mr),Dr(mr),mr.content instanceof a&&Pn(mr.content);if(Re)return At;if(ce){if(ae)for(rn=S.call(tt.ownerDocument);tt.firstChild;)rn.appendChild(tt.firstChild);else rn=tt;return(Q.shadowroot||Q.shadowrootmode)&&(rn=I.call(n,rn,!0)),rn}let Zr=ue?tt.outerHTML:tt.innerHTML;return ue&&$["!doctype"]&&tt.ownerDocument&&tt.ownerDocument.doctype&&tt.ownerDocument.doctype.name&&Xa(az,tt.ownerDocument.doctype.name)&&(Zr="<!DOCTYPE "+tt.ownerDocument.doctype.name+`>
15 +`+Zr),J&&j4([k,L,R],Ni=>{Zr=Ny(Zr,Ni," ")}),C&&Oe?C.createHTML(Zr):Zr},e.setConfig=function(){let At=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Yt(At),Z=!0},e.clearConfig=function(){ct=null,Z=!1},e.isValidAttribute=function(At,Ce,tt){ct||Yt({});let St=Ue(At),mr=Ue(Ce);return tn(St,mr,tt)},e.addHook=function(At,Ce){typeof Ce=="function"&&Ry(D[At],Ce)},e.removeHook=function(At,Ce){if(Ce!==void 0){let tt=Oxe(D[At],Ce);return tt===-1?void 0:Pxe(D[At],tt,1)[0]}return X$(D[At])},e.removeHooks=function(At){D[At]=[]},e.removeAllHooks=function(){D=tz()},e}var rz,Y$,Nxe,Mxe,Ixe,ja,ko,nz,l7,c7,j4,Oxe,X$,Ry,Pxe,Q4,n7,j$,Ny,Bxe,Fxe,sl,Xa,My,K$,i7,a7,Gxe,s7,Vxe,Q$,Z$,o7,J$,K4,Uxe,Hxe,Wxe,qxe,Yxe,iz,Xxe,jxe,az,Kxe,ez,Oy,Qxe,Zxe,tz,ch,u7=N(()=>{"use strict";({entries:rz,setPrototypeOf:Y$,isFrozen:Nxe,getPrototypeOf:Mxe,getOwnPropertyDescriptor:Ixe}=Object),{freeze:ja,seal:ko,create:nz}=Object,{apply:l7,construct:c7}=typeof Reflect<"u"&&Reflect;ja||(ja=o(function(e){return e},"freeze"));ko||(ko=o(function(e){return e},"seal"));l7||(l7=o(function(e,r,n){return e.apply(r,n)},"apply"));c7||(c7=o(function(e,r){return new e(...r)},"construct"));j4=Ka(Array.prototype.forEach),Oxe=Ka(Array.prototype.lastIndexOf),X$=Ka(Array.prototype.pop),Ry=Ka(Array.prototype.push),Pxe=Ka(Array.prototype.splice),Q4=Ka(String.prototype.toLowerCase),n7=Ka(String.prototype.toString),j$=Ka(String.prototype.match),Ny=Ka(String.prototype.replace),Bxe=Ka(String.prototype.indexOf),Fxe=Ka(String.prototype.trim),sl=Ka(Object.prototype.hasOwnProperty),Xa=Ka(RegExp.prototype.test),My=$xe(TypeError);o(Ka,"unapply");o($xe,"unconstruct");o(Cr,"addToSet");o(zxe,"cleanArray");o(Qf,"clone");o(Iy,"lookupGetter");K$=ja(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),i7=ja(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),a7=ja(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),Gxe=ja(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),s7=ja(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),Vxe=ja(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Q$=ja(["#text"]),Z$=ja(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),o7=ja(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),J$=ja(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),K4=ja(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Uxe=ko(/\{\{[\w\W]*|[\w\W]*\}\}/gm),Hxe=ko(/<%[\w\W]*|[\w\W]*%>/gm),Wxe=ko(/\$\{[\w\W]*/gm),qxe=ko(/^data-[\-\w.\u00B7-\uFFFF]+$/),Yxe=ko(/^aria-[\-\w]+$/),iz=ko(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Xxe=ko(/^(?:\w+script|data):/i),jxe=ko(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),az=ko(/^html$/i),Kxe=ko(/^[a-z][.\w]*(-[.\w]+)+$/i),ez=Object.freeze({__proto__:null,ARIA_ATTR:Yxe,ATTR_WHITESPACE:jxe,CUSTOM_ELEMENT:Kxe,DATA_ATTR:qxe,DOCTYPE_NAME:az,ERB_EXPR:Hxe,IS_ALLOWED_URI:iz,IS_SCRIPT_OR_DATA:Xxe,MUSTACHE_EXPR:Uxe,TMPLIT_EXPR:Wxe}),Oy={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Qxe=o(function(){return typeof window>"u"?null:window},"getGlobal"),Zxe=o(function(e,r){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let n=null,i="data-tt-policy-suffix";r&&r.hasAttribute(i)&&(n=r.getAttribute(i));let a="dompurify"+(n?"#"+n:"");try{return e.createPolicy(a,{createHTML(s){return s},createScriptURL(s){return s}})}catch{return console.warn("TrustedTypes policy "+a+" could not be created."),null}},"_createTrustedTypesPolicy"),tz=o(function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},"_createHooksMap");o(sz,"createDOMPurify");ch=sz()});var MG={};hr(MG,{default:()=>q4e});function abe(t){return String(t).replace(ibe,e=>nbe[e])}function cbe(t){if(t.default)return t.default;var e=t.type,r=Array.isArray(e)?e[0]:e;if(typeof r!="string")return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}function gbe(t){for(var e=0;e<k7.length;e++)for(var r=k7[e],n=0;n<r.blocks.length;n++){var i=r.blocks[n];if(t>=i[0]&&t<=i[1])return r.name}return null}function $z(t){for(var e=0;e<u3.length;e+=2)if(t>=u3[e]&&t<=u3[e+1])return!0;return!1}function Abe(t,e){jl[t]=e}function P7(t,e,r){if(!jl[e])throw new Error("Font metrics not found for font: "+e+".");var n=t.charCodeAt(0),i=jl[e][n];if(!i&&t[0]in lz&&(n=lz[t[0]].charCodeAt(0),i=jl[e][n]),!i&&r==="text"&&$z(n)&&(i=jl[e][77]),i)return{depth:i[0],height:i[1],italic:i[2],skew:i[3],width:i[4]}}function _be(t){var e;if(t>=5?e=0:t>=3?e=1:e=2,!h7[e]){var r=h7[e]={cssEmPerMu:Z4.quad[e]/18};for(var n in Z4)Z4.hasOwnProperty(n)&&(r[n]=Z4[n][e])}return h7[e]}function hz(t){if(t instanceof Ts)return t;throw new Error("Expected symbolNode but got "+String(t)+".")}function Nbe(t){if(t instanceof td)return t;throw new Error("Expected span<HtmlDomNode> but got "+String(t)+".")}function G(t,e,r,n,i,a){An[t][i]={font:e,group:r,replace:n},a&&n&&(An[t][n]=An[t][i])}function Nt(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:n.allowedInMath===void 0?!0:n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:i},u=0;u<r.length;++u)jz[r[u]]=l;e&&(a&&(p3[e]=a),s&&(m3[e]=s))}function rd(t){var{type:e,htmlBuilder:r,mathmlBuilder:n}=t;Nt({type:e,names:[],props:{numArgs:0},handler(){throw new Error("Should never be called.")},htmlBuilder:r,mathmlBuilder:n})}function a3(t,e){var r=lu(["base"],t,e),n=lu(["strut"]);return n.style.height=kt(r.height+r.depth),r.depth&&(n.style.verticalAlign=kt(-r.depth)),r.children.unshift(n),r}function _7(t,e){var r=null;t.length===1&&t[0].type==="tag"&&(r=t[0].tag,t=t[0].body);var n=Pi(t,e,"root"),i;n.length===2&&n[1].hasClass("tag")&&(i=n.pop());for(var a=[],s=[],l=0;l<n.length;l++)if(s.push(n[l]),n[l].hasClass("mbin")||n[l].hasClass("mrel")||n[l].hasClass("allowbreak")){for(var u=!1;l<n.length-1&&n[l+1].hasClass("mspace")&&!n[l+1].hasClass("newline");)l++,s.push(n[l]),n[l].hasClass("nobreak")&&(u=!0);u||(a.push(a3(s,e)),s=[])}else n[l].hasClass("newline")&&(s.pop(),s.length>0&&(a.push(a3(s,e)),s=[]),a.push(n[l]));s.length>0&&a.push(a3(s,e));var h;r?(h=a3(Pi(r,e,!0)),h.classes=["tag"],a.push(h)):i&&a.push(i);var f=lu(["katex-html"],a);if(f.setAttribute("aria-hidden","true"),h){var d=h.children[0];d.style.height=kt(f.height+f.depth),f.depth&&(d.style.verticalAlign=kt(-f.depth))}return f}function Qz(t){return new ed(t)}function gz(t,e,r,n,i){var a=ks(t,r),s;a.length===1&&a[0]instanceof ws&&Jt.contains(["mrow","mtable"],a[0].type)?s=a[0]:s=new dt.MathNode("mrow",a);var l=new dt.MathNode("annotation",[new dt.TextNode(e)]);l.setAttribute("encoding","application/x-tex");var u=new dt.MathNode("semantics",[s,l]),h=new dt.MathNode("math",[u]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&h.setAttribute("display","block");var f=i?"katex":"katex-mathml";return Be.makeSpan([f],[h])}function xr(t,e){if(!t||t.type!==e)throw new Error("Expected node of type "+e+", but got "+(t?"node of type "+t.type:String(t)));return t}function z7(t){var e=w3(t);if(!e)throw new Error("Expected node of symbol group type, but got "+(t?"node of type "+t.type:String(t)));return e}function w3(t){return t&&(t.type==="atom"||Ibe.hasOwnProperty(t.type))?t:null}function tG(t,e){var r=Pi(t.body,e,!0);return u4e([t.mclass],r,e)}function rG(t,e){var r,n=ks(t.body,e);return t.mclass==="minner"?r=new dt.MathNode("mpadded",n):t.mclass==="mord"?t.isCharacterBox?(r=n[0],r.type="mi"):r=new dt.MathNode("mi",n):(t.isCharacterBox?(r=n[0],r.type="mo"):r=new dt.MathNode("mo",n),t.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):t.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):t.mclass==="mopen"||t.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):t.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}function d4e(t,e,r){var n=h4e[t];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[e[0]],[e[1]]);case"\\uparrow":case"\\downarrow":{var i=r.callFunction("\\\\cdleft",[e[0]],[]),a={type:"atom",text:n,mode:"math",family:"rel"},s=r.callFunction("\\Big",[a],[]),l=r.callFunction("\\\\cdright",[e[1]],[]),u={type:"ordgroup",mode:"math",body:[i,s,l]};return r.callFunction("\\\\cdparent",[u],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var h={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[h],[])}default:return{type:"textord",text:" ",mode:"math"}}}function p4e(t){var e=[];for(t.gullet.beginGroup(),t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();;){e.push(t.parseExpression(!1,"\\\\")),t.gullet.endGroup(),t.gullet.beginGroup();var r=t.fetch().text;if(r==="&"||r==="\\\\")t.consume();else if(r==="\\end"){e[e.length-1].length===0&&e.pop();break}else throw new gt("Expected \\\\ or \\cr or \\end",t.nextToken)}for(var n=[],i=[n],a=0;a<e.length;a++){for(var s=e[a],l=yz(),u=0;u<s.length;u++)if(!vz(s[u]))l.body.push(s[u]);else{n.push(l),u+=1;var h=z7(s[u]).text,f=new Array(2);if(f[0]={type:"ordgroup",mode:"math",body:[]},f[1]={type:"ordgroup",mode:"math",body:[]},!("=|.".indexOf(h)>-1))if("<>AV".indexOf(h)>-1)for(var d=0;d<2;d++){for(var p=!0,m=u+1;m<s.length;m++){if(f4e(s[m],h)){p=!1,u=m;break}if(vz(s[m]))throw new gt("Missing a "+h+" character to complete a CD arrow.",s[m]);f[d].body.push(s[m])}if(p)throw new gt("Missing a "+h+" character to complete a CD arrow.",s[u])}else throw new gt('Expected one of "<>AV=|." after @',s[u]);var g=d4e(h,f,t),y={type:"styling",body:[g],mode:"math",style:"display"};n.push(y),l=yz()}a%2===0?n.push(l):n.shift(),n=[],i.push(n)}t.gullet.endGroup(),t.gullet.endGroup();var v=new Array(i[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:i,arraystretch:1,addJot:!0,rowGaps:[null],cols:v,colSeparationType:"CD",hLinesBeforeRow:new Array(i.length+1).fill([])}}function k3(t,e){var r=w3(t);if(r&&Jt.contains(A4e,r.text))return r;throw r?new gt("Invalid delimiter '"+r.text+"' after '"+e.funcName+"'",t):new gt("Invalid delimiter type '"+t.type+"'",t)}function bz(t){if(!t.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}function Ql(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:i},u=0;u<r.length;++u)mG[r[u]]=l;a&&(p3[e]=a),s&&(m3[e]=s)}function fe(t,e){gG[t]=e}function wz(t){var e=[];t.consumeSpaces();var r=t.fetch().text;for(r==="\\relax"&&(t.consume(),t.consumeSpaces(),r=t.fetch().text);r==="\\hline"||r==="\\hdashline";)t.consume(),e.push(r==="\\hdashline"),t.consumeSpaces(),r=t.fetch().text;return e}function W7(t){if(t.indexOf("ed")===-1)return t.indexOf("*")===-1}function ph(t,e,r){var{hskipBeforeAndAfter:n,addJot:i,cols:a,arraystretch:s,colSeparationType:l,autoTag:u,singleRow:h,emptySingleRow:f,maxNumCols:d,leqno:p}=e;if(t.gullet.beginGroup(),h||t.gullet.macros.set("\\cr","\\\\\\relax"),!s){var m=t.gullet.expandMacroAsText("\\arraystretch");if(m==null)s=1;else if(s=parseFloat(m),!s||s<0)throw new gt("Invalid \\arraystretch: "+m)}t.gullet.beginGroup();var g=[],y=[g],v=[],x=[],b=u!=null?[]:void 0;function w(){u&&t.gullet.macros.set("\\@eqnsw","1",!0)}o(w,"beginRow");function C(){b&&(t.gullet.macros.get("\\df@tag")?(b.push(t.subparse([new So("\\df@tag")])),t.gullet.macros.set("\\df@tag",void 0,!0)):b.push(!!u&&t.gullet.macros.get("\\@eqnsw")==="1"))}for(o(C,"endRow"),w(),x.push(wz(t));;){var T=t.parseExpression(!1,h?"\\end":"\\\\");t.gullet.endGroup(),t.gullet.beginGroup(),T={type:"ordgroup",mode:t.mode,body:T},r&&(T={type:"styling",mode:t.mode,style:r,body:[T]}),g.push(T);var E=t.fetch().text;if(E==="&"){if(d&&g.length===d){if(h||l)throw new gt("Too many tab characters: &",t.nextToken);t.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}t.consume()}else if(E==="\\end"){C(),g.length===1&&T.type==="styling"&&T.body[0].body.length===0&&(y.length>1||!f)&&y.pop(),x.length<y.length+1&&x.push([]);break}else if(E==="\\\\"){t.consume();var A=void 0;t.gullet.future().text!==" "&&(A=t.parseSizeGroup(!0)),v.push(A?A.value:null),C(),x.push(wz(t)),g=[],y.push(g),w()}else throw new gt("Expected & or \\\\ or \\cr or \\end",t.nextToken)}return t.gullet.endGroup(),t.gullet.endGroup(),{type:"array",mode:t.mode,addJot:i,arraystretch:s,body:y,cols:a,rowGaps:v,hskipBeforeAndAfter:n,hLinesBeforeRow:x,colSeparationType:l,tags:b,leqno:p}}function q7(t){return t.slice(0,1)==="d"?"display":"text"}function SG(t,e,r){for(var n=Pi(t,e,!1),i=e.sizeMultiplier/r.sizeMultiplier,a=0;a<n.length;a++){var s=n[a].classes.indexOf("sizing");s<0?Array.prototype.push.apply(n[a].classes,e.sizingClasses(r)):n[a].classes[s+1]==="reset-size"+e.size&&(n[a].classes[s+1]="reset-size"+r.size),n[a].height*=i,n[a].depth*=i}return Be.makeFragment(n)}var Xs,So,gt,Jxe,ebe,tbe,rbe,nbe,ibe,Fz,sbe,obe,lbe,Jt,c3,zy,Yl,O7,h3,f0,su,Gy,Eo,d0,Qa,Xl,ube,hbe,fbe,dbe,pbe,mbe,tr,k7,u3,h0,ybe,vbe,xbe,bbe,wbe,Tbe,kbe,Ebe,Sbe,oz,Cbe,ed,jl,Z4,lz,h7,Dbe,cz,uz,f3,E7,Lbe,zz,ti,kt,fh,Gz,Vz,Uz,td,Vy,S7,Rbe,Ts,ll,Kl,Uy,Mbe,Ibe,An,U,it,ee,ke,Vn,It,Za,p0,er,ki,js,x3,Ee,uu,Le,Hz,fz,f7,J4,dz,d7,e3,d3,Py,t3,sr,Jn,Ca,iu,uh,C7,By,r3,n3,pz,Obe,b3,ol,Pbe,Bbe,Fbe,$be,zbe,B7,bs,Wz,Gbe,Vbe,qz,Ube,Hbe,Wbe,qbe,i3,Yz,Xz,Ybe,Be,ei,Zf,au,Xbe,jbe,jz,p3,m3,g3,di,lu,Kbe,Qbe,Zbe,Jbe,Pi,mz,Kz,e4e,A7,Hy,Fr,ws,Jf,D7,dt,Co,F7,$7,ks,dh,yn,Zz,Jz,t4e,r4e,n4e,i4e,a4e,s4e,o4e,l4e,cu,G7,eG,c4e,s3,u4e,T3,h4e,yz,vz,f4e,nG,iG,L7,aG,m4e,sG,Fy,V7,oG,g4e,y4e,lG,p7,m7,R7,o3,v4e,x4e,cG,g7,y7,v7,b4e,uG,w4e,hG,$y,T4e,k4e,E4e,fG,S4e,dG,pG,C4e,ou,xz,A4e,U7,H7,mG,gG,E3,Zl,_4e,Jl,yG,Tz,vG,xG,kz,bG,Y7,X7,Ez,Sz,wG,D4e,x7,Cz,TG,kG,m0,Wy,L4e,R4e,EG,N4e,Az,M4e,_z,I4e,CG,b7,w7,Dz,Lz,Rz,O4e,Nz,Mz,hh,AG,P4e,B4e,F4e,$4e,N7,z4e,G4e,y3,M7,V4e,Iz,j7,Oz,K7,_G,DG,LG,I7,Pz,l3,T7,Bz,v3,Q7,RG,U4e,H4e,NG,Z7,W4e,q4e,IG=N(()=>{"use strict";Xs=class t{static{o(this,"SourceLocation")}constructor(e,r,n){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=r,this.end=n}static range(e,r){return r?!e||!e.loc||!r.loc||e.loc.lexer!==r.loc.lexer?null:new t(e.loc.lexer,e.loc.start,r.loc.end):e&&e.loc}},So=class t{static{o(this,"Token")}constructor(e,r){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=r}range(e,r){return new t(r,Xs.range(this,e))}},gt=class t{static{o(this,"ParseError")}constructor(e,r){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var n="KaTeX parse error: "+e,i,a,s=r&&r.loc;if(s&&s.start<=s.end){var l=s.lexer.input;i=s.start,a=s.end,i===l.length?n+=" at end of input: ":n+=" at position "+(i+1)+": ";var u=l.slice(i,a).replace(/[^]/g,"$&\u0332"),h;i>15?h="\u2026"+l.slice(i-15,i):h=l.slice(0,i);var f;a+15<l.length?f=l.slice(a,a+15)+"\u2026":f=l.slice(a),n+=h+u+f}var d=new Error(n);return d.name="ParseError",d.__proto__=t.prototype,d.position=i,i!=null&&a!=null&&(d.length=a-i),d.rawMessage=e,d}};gt.prototype.__proto__=Error.prototype;Jxe=o(function(e,r){return e.indexOf(r)!==-1},"contains"),ebe=o(function(e,r){return e===void 0?r:e},"deflt"),tbe=/([A-Z])/g,rbe=o(function(e){return e.replace(tbe,"-$1").toLowerCase()},"hyphenate"),nbe={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#x27;"},ibe=/[&><"']/g;o(abe,"escape");Fz=o(function t(e){return e.type==="ordgroup"||e.type==="color"?e.body.length===1?t(e.body[0]):e:e.type==="font"?t(e.body):e},"getBaseElem"),sbe=o(function(e){var r=Fz(e);return r.type==="mathord"||r.type==="textord"||r.type==="atom"},"isCharacterBox"),obe=o(function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e},"assert"),lbe=o(function(e){var r=/^[\x00-\x20]*([^\\/#?]*?)(:|&#0*58|&#x0*3a|&colon)/i.exec(e);return r?r[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(r[1])?null:r[1].toLowerCase():"_relative"},"protocolFromUrl"),Jt={contains:Jxe,deflt:ebe,escape:abe,hyphenate:rbe,getBaseElem:Fz,isCharacterBox:sbe,protocolFromUrl:lbe},c3={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format <type>"},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color <color>",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:o(t=>"#"+t,"cliProcessor")},macros:{type:"object",cli:"-m, --macro <def>",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:o((t,e)=>(e.push(t),e),"cliProcessor")},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:o(t=>Math.max(0,t),"processor"),cli:"--min-rule-thickness <size>",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:o(t=>Math.max(0,t),"processor"),cli:"-s, --max-size <n>",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:o(t=>Math.max(0,t),"processor"),cli:"-e, --max-expand <n>",cliProcessor:o(t=>t==="Infinity"?1/0:parseInt(t),"cliProcessor")},globalGroup:{type:"boolean",cli:!1}};o(cbe,"getDefaultValue");zy=class{static{o(this,"Settings")}constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(var r in c3)if(c3.hasOwnProperty(r)){var n=c3[r];this[r]=e[r]!==void 0?n.processor?n.processor(e[r]):e[r]:cbe(n)}}reportNonstrict(e,r,n){var i=this.strict;if(typeof i=="function"&&(i=i(e,r,n)),!(!i||i==="ignore")){if(i===!0||i==="error")throw new gt("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+e+"]"),n);i==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]"))}}useStrictBehavior(e,r,n){var i=this.strict;if(typeof i=="function")try{i=i(e,r,n)}catch{i="error"}return!i||i==="ignore"?!1:i===!0||i==="error"?!0:i==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]")),!1)}isTrusted(e){if(e.url&&!e.protocol){var r=Jt.protocolFromUrl(e.url);if(r==null)return!1;e.protocol=r}var n=typeof this.trust=="function"?this.trust(e):this.trust;return!!n}},Yl=class{static{o(this,"Style")}constructor(e,r,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=r,this.cramped=n}sup(){return Xl[ube[this.id]]}sub(){return Xl[hbe[this.id]]}fracNum(){return Xl[fbe[this.id]]}fracDen(){return Xl[dbe[this.id]]}cramp(){return Xl[pbe[this.id]]}text(){return Xl[mbe[this.id]]}isTight(){return this.size>=2}},O7=0,h3=1,f0=2,su=3,Gy=4,Eo=5,d0=6,Qa=7,Xl=[new Yl(O7,0,!1),new Yl(h3,0,!0),new Yl(f0,1,!1),new Yl(su,1,!0),new Yl(Gy,2,!1),new Yl(Eo,2,!0),new Yl(d0,3,!1),new Yl(Qa,3,!0)],ube=[Gy,Eo,Gy,Eo,d0,Qa,d0,Qa],hbe=[Eo,Eo,Eo,Eo,Qa,Qa,Qa,Qa],fbe=[f0,su,Gy,Eo,d0,Qa,d0,Qa],dbe=[su,su,Eo,Eo,Qa,Qa,Qa,Qa],pbe=[h3,h3,su,su,Eo,Eo,Qa,Qa],mbe=[O7,h3,f0,su,f0,su,f0,su],tr={DISPLAY:Xl[O7],TEXT:Xl[f0],SCRIPT:Xl[Gy],SCRIPTSCRIPT:Xl[d0]},k7=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];o(gbe,"scriptFromCodepoint");u3=[];k7.forEach(t=>t.blocks.forEach(e=>u3.push(...e)));o($z,"supportedCodepoint");h0=80,ybe=o(function(e,r){return"M95,"+(622+e+r)+`
16 +c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14
17 +c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54
18 +c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10
19 +s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429
20 +c69,-144,104.5,-217.7,106.5,-221
21 +l`+e/2.075+" -"+e+`
22 +c5.3,-9.3,12,-14,20,-14
23 +H400000v`+(40+e)+`H845.2724
24 +s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7
25 +c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z
26 +M`+(834+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtMain"),vbe=o(function(e,r){return"M263,"+(601+e+r)+`c0.7,0,18,39.7,52,119
27 +c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120
28 +c340,-704.7,510.7,-1060.3,512,-1067
29 +l`+e/2.084+" -"+e+`
30 +c4.7,-7.3,11,-11,19,-11
31 +H40000v`+(40+e)+`H1012.3
32 +s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232
33 +c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1
34 +s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26
35 +c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z
36 +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize1"),xbe=o(function(e,r){return"M983 "+(10+e+r)+`
37 +l`+e/3.13+" -"+e+`
38 +c4,-6.7,10,-10,18,-10 H400000v`+(40+e)+`
39 +H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7
40 +s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744
41 +c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30
42 +c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722
43 +c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5
44 +c53.7,-170.3,84.5,-266.8,92.5,-289.5z
45 +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize2"),bbe=o(function(e,r){return"M424,"+(2398+e+r)+`
46 +c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514
47 +c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20
48 +s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121
49 +s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081
50 +l`+e/4.223+" -"+e+`c4,-6.7,10,-10,18,-10 H400000
51 +v`+(40+e)+`H1014.6
52 +s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185
53 +c-2,6,-10,9,-24,9
54 +c-8,0,-12,-0.7,-12,-2z M`+(1001+e)+" "+r+`
55 +h400000v`+(40+e)+"h-400000z"},"sqrtSize3"),wbe=o(function(e,r){return"M473,"+(2713+e+r)+`
56 +c339.3,-1799.3,509.3,-2700,510,-2702 l`+e/5.298+" -"+e+`
57 +c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+e)+`H1017.7
58 +s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9
59 +c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200
60 +c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26
61 +s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,
62 +606zM`+(1001+e)+" "+r+"h400000v"+(40+e)+"H1017.7z"},"sqrtSize4"),Tbe=o(function(e){var r=e/2;return"M400000 "+e+" H0 L"+r+" 0 l65 45 L145 "+(e-80)+" H400000z"},"phasePath"),kbe=o(function(e,r,n){var i=n-54-r-e;return"M702 "+(e+r)+"H400000"+(40+e)+`
63 +H742v`+i+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1
64 +h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170
65 +c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667
66 +219 661 l218 661zM702 `+r+"H400000v"+(40+e)+"H742z"},"sqrtTall"),Ebe=o(function(e,r,n){r=1e3*r;var i="";switch(e){case"sqrtMain":i=ybe(r,h0);break;case"sqrtSize1":i=vbe(r,h0);break;case"sqrtSize2":i=xbe(r,h0);break;case"sqrtSize3":i=bbe(r,h0);break;case"sqrtSize4":i=wbe(r,h0);break;case"sqrtTall":i=kbe(r,h0,n)}return i},"sqrtPath"),Sbe=o(function(e,r){switch(e){case"\u239C":return"M291 0 H417 V"+r+" H291z M291 0 H417 V"+r+" H291z";case"\u2223":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z";case"\u2225":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z"+("M367 0 H410 V"+r+" H367z M367 0 H410 V"+r+" H367z");case"\u239F":return"M457 0 H583 V"+r+" H457z M457 0 H583 V"+r+" H457z";case"\u23A2":return"M319 0 H403 V"+r+" H319z M319 0 H403 V"+r+" H319z";case"\u23A5":return"M263 0 H347 V"+r+" H263z M263 0 H347 V"+r+" H263z";case"\u23AA":return"M384 0 H504 V"+r+" H384z M384 0 H504 V"+r+" H384z";case"\u23D0":return"M312 0 H355 V"+r+" H312z M312 0 H355 V"+r+" H312z";case"\u2016":return"M257 0 H300 V"+r+" H257z M257 0 H300 V"+r+" H257z"+("M478 0 H521 V"+r+" H478z M478 0 H521 V"+r+" H478z");default:return""}},"innerPath"),oz={doubleleftarrow:`M262 157
67 +l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3
68 + 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28
69 + 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5
70 +c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5
71 + 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87
72 +-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7
73 +-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z
74 +m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l
75 +-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5
76 + 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88
77 +-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68
78 +-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18
79 +-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782
80 +c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3
81 +-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120
82 + 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8
83 +-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247
84 +c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208
85 + 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3
86 + 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202
87 + l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117
88 +-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7
89 + 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13
90 + 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688
91 + 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7
92 +-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80
93 +H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0
94 + 435 0h399565z`,leftgroupunder:`M400000 262
95 +H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219
96 + 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3
97 +-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5
98 +-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7
99 +-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5
100 + 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3
101 +-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7
102 +-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z
103 +m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333
104 + 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5
105 + 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667
106 +-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12
107 + 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7
108 +-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0
109 +v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5
110 +-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3
111 +-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21
112 + 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:`M40 281 V428 H0 V94 H40 V241 H400000 v40z
113 +M40 281 V428 H0 V94 H40 V241 H400000 v40z`,leftmapsto:`M40 281 V448H0V74H40V241H400000v40z
114 +M40 281 V448H0V74H40V241H400000v40z`,leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23
115 +-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8
116 +c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3
117 + 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:`M0 50 h400000 v40H0z m0 194h40000v40H0z
118 +M0 50 h400000 v40H0z m0 194h40000v40H0z`,midbrace:`M200428 334
119 +c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14
120 +-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7
121 + 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11
122 + 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214
123 +c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14
124 + 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3
125 + 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0
126 +-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6
127 +-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z
128 +m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8
129 +60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8
130 +-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z
131 +m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2
132 +c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6
133 +-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z
134 +m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0
135 +85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8
136 +-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z
137 +m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1
138 +c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128
139 +-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20
140 + 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7
141 + 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85
142 +-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5
143 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67
144 + 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l
145 +-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5
146 +s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1
147 +c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3
148 + 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237
149 +-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0
150 + 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18
151 + 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3
152 +-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2
153 +-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58
154 + 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11
155 +-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7
156 + 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z
157 +m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8
158 + 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5
159 +-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95
160 +-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8
161 + 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3
162 + 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3
163 +-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z
164 +m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3
165 + 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0
166 +-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21
167 + 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:`M399960 241 V94 h40 V428 h-40 V281 H0 v-40z
168 +M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`,rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23
169 + 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32
170 +-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142
171 +-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40
172 + 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69
173 +-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3
174 +-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19
175 +-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101
176 + 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167
177 +c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3
178 + 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42
179 + 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333
180 +-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70
181 + 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7
182 +-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0
183 + 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0
184 + 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128
185 +-68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418
186 +-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9
187 + 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114
188 +c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751
189 + 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457
190 +-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0
191 + 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697
192 + 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696
193 + -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345
194 +-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409
195 + 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9
196 + 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409
197 + -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5
198 +3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11
199 +10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63
200 +-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1
201 +-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59
202 +H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359
203 +c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22
204 +c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10
205 +-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10
206 +-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10
207 +-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,
208 +-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,
209 +-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,
210 +-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,
211 +-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202
212 +c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5
213 +c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130
214 +s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47
215 +121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6
216 +s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11
217 +c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z
218 +M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32
219 +-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0
220 +13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39
221 +-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5
222 +-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5
223 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67
224 +151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11
225 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17
226 +c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21
227 +c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40
228 +c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z
229 +M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0
230 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,
231 +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6
232 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z
233 +M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11
234 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,
235 +1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,
236 +-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z
237 +M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0
238 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,
239 +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6
240 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z
241 +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Cbe=o(function(e,r){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 h347 v-84
242 +H403z M403 1759 V0 H319 V1759 v`+r+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v1759 H0 v84 H347z
243 +M347 1759 V0 H263 V1759 v`+r+" v1759 h84z";case"vert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15
244 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15
245 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+" v585 h43z";case"doublevert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15
246 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15
247 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+` v585 h43z
248 +M367 15 v585 v`+r+` v585 c2.667,10,9.667,15,21,15
249 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15
250 +c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+r+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+r+` v1715 h263 v84 H319z
251 +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+r+` v1799 H0 v-84 H319z
252 +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v602 h84z
253 +M403 1759 V0 H319 V1759 v`+r+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v602 h84z
254 +M347 1759 V0 h-84 V1759 v`+r+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1
255 +c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,
256 +-36,557 l0,`+(r+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,
257 +949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9
258 +c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,
259 +-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189
260 +l0,-`+(r+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,
261 +-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,
262 +63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5
263 +c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(r+9)+`
264 +c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664
265 +c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11
266 +c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17
267 +c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558
268 +l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,
269 +-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}},"tallDelim"),ed=class{static{o(this,"DocumentFragment")}constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return Jt.contains(this.classes,e)}toNode(){for(var e=document.createDocumentFragment(),r=0;r<this.children.length;r++)e.appendChild(this.children[r].toNode());return e}toMarkup(){for(var e="",r=0;r<this.children.length;r++)e+=this.children[r].toMarkup();return e}toText(){var e=o(r=>r.toText(),"toText");return this.children.map(e).join("")}},jl={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},Z4={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},lz={\u00C5:"A",\u00D0:"D",\u00DE:"o",\u00E5:"a",\u00F0:"d",\u00FE:"o",\u0410:"A",\u0411:"B",\u0412:"B",\u0413:"F",\u0414:"A",\u0415:"E",\u0416:"K",\u0417:"3",\u0418:"N",\u0419:"N",\u041A:"K",\u041B:"N",\u041C:"M",\u041D:"H",\u041E:"O",\u041F:"N",\u0420:"P",\u0421:"C",\u0422:"T",\u0423:"y",\u0424:"O",\u0425:"X",\u0426:"U",\u0427:"h",\u0428:"W",\u0429:"W",\u042A:"B",\u042B:"X",\u042C:"B",\u042D:"3",\u042E:"X",\u042F:"R",\u0430:"a",\u0431:"b",\u0432:"a",\u0433:"r",\u0434:"y",\u0435:"e",\u0436:"m",\u0437:"e",\u0438:"n",\u0439:"n",\u043A:"n",\u043B:"n",\u043C:"m",\u043D:"n",\u043E:"o",\u043F:"n",\u0440:"p",\u0441:"c",\u0442:"o",\u0443:"y",\u0444:"b",\u0445:"x",\u0446:"n",\u0447:"n",\u0448:"w",\u0449:"w",\u044A:"a",\u044B:"m",\u044C:"a",\u044D:"e",\u044E:"m",\u044F:"r"};o(Abe,"setFontMetrics");o(P7,"getCharacterMetrics");h7={};o(_be,"getGlobalMetrics");Dbe=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],cz=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],uz=o(function(e,r){return r.size<2?e:Dbe[e-1][r.size-1]},"sizeAtStyle"),f3=class t{static{o(this,"Options")}constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||t.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=cz[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var n in e)e.hasOwnProperty(n)&&(r[n]=e[n]);return new t(r)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:uz(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:cz[e-1]})}havingBaseStyle(e){e=e||this.style.text();var r=uz(t.BASESIZE,e);return this.size===r&&this.textSize===t.BASESIZE&&this.style===e?this:this.extend({style:e,size:r})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==t.BASESIZE?["sizing","reset-size"+this.size,"size"+t.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=_be(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}};f3.BASESIZE=6;E7={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},Lbe={ex:!0,em:!0,mu:!0},zz=o(function(e){return typeof e!="string"&&(e=e.unit),e in E7||e in Lbe||e==="ex"},"validUnit"),ti=o(function(e,r){var n;if(e.unit in E7)n=E7[e.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(e.unit==="mu")n=r.fontMetrics().cssEmPerMu;else{var i;if(r.style.isTight()?i=r.havingStyle(r.style.text()):i=r,e.unit==="ex")n=i.fontMetrics().xHeight;else if(e.unit==="em")n=i.fontMetrics().quad;else throw new gt("Invalid unit: '"+e.unit+"'");i!==r&&(n*=i.sizeMultiplier/r.sizeMultiplier)}return Math.min(e.number*n,r.maxSize)},"calculateSize"),kt=o(function(e){return+e.toFixed(4)+"em"},"makeEm"),fh=o(function(e){return e.filter(r=>r).join(" ")},"createClass"),Gz=o(function(e,r,n){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=n||{},r){r.style.isTight()&&this.classes.push("mtight");var i=r.getColor();i&&(this.style.color=i)}},"initNode"),Vz=o(function(e){var r=document.createElement(e);r.className=fh(this.classes);for(var n in this.style)this.style.hasOwnProperty(n)&&(r.style[n]=this.style[n]);for(var i in this.attributes)this.attributes.hasOwnProperty(i)&&r.setAttribute(i,this.attributes[i]);for(var a=0;a<this.children.length;a++)r.appendChild(this.children[a].toNode());return r},"toNode"),Uz=o(function(e){var r="<"+e;this.classes.length&&(r+=' class="'+Jt.escape(fh(this.classes))+'"');var n="";for(var i in this.style)this.style.hasOwnProperty(i)&&(n+=Jt.hyphenate(i)+":"+this.style[i]+";");n&&(r+=' style="'+Jt.escape(n)+'"');for(var a in this.attributes)this.attributes.hasOwnProperty(a)&&(r+=" "+a+'="'+Jt.escape(this.attributes[a])+'"');r+=">";for(var s=0;s<this.children.length;s++)r+=this.children[s].toMarkup();return r+="</"+e+">",r},"toMarkup"),td=class{static{o(this,"Span")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,Gz.call(this,e,n,i),this.children=r||[]}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Jt.contains(this.classes,e)}toNode(){return Vz.call(this,"span")}toMarkup(){return Uz.call(this,"span")}},Vy=class{static{o(this,"Anchor")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,Gz.call(this,r,i),this.children=n||[],this.setAttribute("href",e)}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Jt.contains(this.classes,e)}toNode(){return Vz.call(this,"a")}toMarkup(){return Uz.call(this,"a")}},S7=class{static{o(this,"Img")}constructor(e,r,n){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=e,this.classes=["mord"],this.style=n}hasClass(e){return Jt.contains(this.classes,e)}toNode(){var e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(var r in this.style)this.style.hasOwnProperty(r)&&(e.style[r]=this.style[r]);return e}toMarkup(){var e='<img src="'+Jt.escape(this.src)+'"'+(' alt="'+Jt.escape(this.alt)+'"'),r="";for(var n in this.style)this.style.hasOwnProperty(n)&&(r+=Jt.hyphenate(n)+":"+this.style[n]+";");return r&&(e+=' style="'+Jt.escape(r)+'"'),e+="'/>",e}},Rbe={\u00EE:"\u0131\u0302",\u00EF:"\u0131\u0308",\u00ED:"\u0131\u0301",\u00EC:"\u0131\u0300"},Ts=class{static{o(this,"SymbolNode")}constructor(e,r,n,i,a,s,l,u){this.text=void 0,this.height=void 0,this.depth=void 0,this.italic=void 0,this.skew=void 0,this.width=void 0,this.maxFontSize=void 0,this.classes=void 0,this.style=void 0,this.text=e,this.height=r||0,this.depth=n||0,this.italic=i||0,this.skew=a||0,this.width=s||0,this.classes=l||[],this.style=u||{},this.maxFontSize=0;var h=gbe(this.text.charCodeAt(0));h&&this.classes.push(h+"_fallback"),/[îïíì]/.test(this.text)&&(this.text=Rbe[this.text])}hasClass(e){return Jt.contains(this.classes,e)}toNode(){var e=document.createTextNode(this.text),r=null;this.italic>0&&(r=document.createElement("span"),r.style.marginRight=kt(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=fh(this.classes));for(var n in this.style)this.style.hasOwnProperty(n)&&(r=r||document.createElement("span"),r.style[n]=this.style[n]);return r?(r.appendChild(e),r):e}toMarkup(){var e=!1,r="<span";this.classes.length&&(e=!0,r+=' class="',r+=Jt.escape(fh(this.classes)),r+='"');var n="";this.italic>0&&(n+="margin-right:"+this.italic+"em;");for(var i in this.style)this.style.hasOwnProperty(i)&&(n+=Jt.hyphenate(i)+":"+this.style[i]+";");n&&(e=!0,r+=' style="'+Jt.escape(n)+'"');var a=Jt.escape(this.text);return e?(r+=">",r+=a,r+="</span>",r):a}},ll=class{static{o(this,"SvgNode")}constructor(e,r){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=r||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"svg");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);for(var i=0;i<this.children.length;i++)r.appendChild(this.children[i].toNode());return r}toMarkup(){var e='<svg xmlns="http://www.w3.org/2000/svg"';for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&(e+=" "+r+'="'+Jt.escape(this.attributes[r])+'"');e+=">";for(var n=0;n<this.children.length;n++)e+=this.children[n].toMarkup();return e+="</svg>",e}},Kl=class{static{o(this,"PathNode")}constructor(e,r){this.pathName=void 0,this.alternate=void 0,this.pathName=e,this.alternate=r}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"path");return this.alternate?r.setAttribute("d",this.alternate):r.setAttribute("d",oz[this.pathName]),r}toMarkup(){return this.alternate?'<path d="'+Jt.escape(this.alternate)+'"/>':'<path d="'+Jt.escape(oz[this.pathName])+'"/>'}},Uy=class{static{o(this,"LineNode")}constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"line");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);return r}toMarkup(){var e="<line";for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&(e+=" "+r+'="'+Jt.escape(this.attributes[r])+'"');return e+="/>",e}};o(hz,"assertSymbolDomNode");o(Nbe,"assertSpan");Mbe={bin:1,close:1,inner:1,open:1,punct:1,rel:1},Ibe={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1},An={math:{},text:{}};o(G,"defineSymbol");U="math",it="text",ee="main",ke="ams",Vn="accent-token",It="bin",Za="close",p0="inner",er="mathord",ki="op-token",js="open",x3="punct",Ee="rel",uu="spacing",Le="textord";G(U,ee,Ee,"\u2261","\\equiv",!0);G(U,ee,Ee,"\u227A","\\prec",!0);G(U,ee,Ee,"\u227B","\\succ",!0);G(U,ee,Ee,"\u223C","\\sim",!0);G(U,ee,Ee,"\u22A5","\\perp");G(U,ee,Ee,"\u2AAF","\\preceq",!0);G(U,ee,Ee,"\u2AB0","\\succeq",!0);G(U,ee,Ee,"\u2243","\\simeq",!0);G(U,ee,Ee,"\u2223","\\mid",!0);G(U,ee,Ee,"\u226A","\\ll",!0);G(U,ee,Ee,"\u226B","\\gg",!0);G(U,ee,Ee,"\u224D","\\asymp",!0);G(U,ee,Ee,"\u2225","\\parallel");G(U,ee,Ee,"\u22C8","\\bowtie",!0);G(U,ee,Ee,"\u2323","\\smile",!0);G(U,ee,Ee,"\u2291","\\sqsubseteq",!0);G(U,ee,Ee,"\u2292","\\sqsupseteq",!0);G(U,ee,Ee,"\u2250","\\doteq",!0);G(U,ee,Ee,"\u2322","\\frown",!0);G(U,ee,Ee,"\u220B","\\ni",!0);G(U,ee,Ee,"\u221D","\\propto",!0);G(U,ee,Ee,"\u22A2","\\vdash",!0);G(U,ee,Ee,"\u22A3","\\dashv",!0);G(U,ee,Ee,"\u220B","\\owns");G(U,ee,x3,".","\\ldotp");G(U,ee,x3,"\u22C5","\\cdotp");G(U,ee,Le,"#","\\#");G(it,ee,Le,"#","\\#");G(U,ee,Le,"&","\\&");G(it,ee,Le,"&","\\&");G(U,ee,Le,"\u2135","\\aleph",!0);G(U,ee,Le,"\u2200","\\forall",!0);G(U,ee,Le,"\u210F","\\hbar",!0);G(U,ee,Le,"\u2203","\\exists",!0);G(U,ee,Le,"\u2207","\\nabla",!0);G(U,ee,Le,"\u266D","\\flat",!0);G(U,ee,Le,"\u2113","\\ell",!0);G(U,ee,Le,"\u266E","\\natural",!0);G(U,ee,Le,"\u2663","\\clubsuit",!0);G(U,ee,Le,"\u2118","\\wp",!0);G(U,ee,Le,"\u266F","\\sharp",!0);G(U,ee,Le,"\u2662","\\diamondsuit",!0);G(U,ee,Le,"\u211C","\\Re",!0);G(U,ee,Le,"\u2661","\\heartsuit",!0);G(U,ee,Le,"\u2111","\\Im",!0);G(U,ee,Le,"\u2660","\\spadesuit",!0);G(U,ee,Le,"\xA7","\\S",!0);G(it,ee,Le,"\xA7","\\S");G(U,ee,Le,"\xB6","\\P",!0);G(it,ee,Le,"\xB6","\\P");G(U,ee,Le,"\u2020","\\dag");G(it,ee,Le,"\u2020","\\dag");G(it,ee,Le,"\u2020","\\textdagger");G(U,ee,Le,"\u2021","\\ddag");G(it,ee,Le,"\u2021","\\ddag");G(it,ee,Le,"\u2021","\\textdaggerdbl");G(U,ee,Za,"\u23B1","\\rmoustache",!0);G(U,ee,js,"\u23B0","\\lmoustache",!0);G(U,ee,Za,"\u27EF","\\rgroup",!0);G(U,ee,js,"\u27EE","\\lgroup",!0);G(U,ee,It,"\u2213","\\mp",!0);G(U,ee,It,"\u2296","\\ominus",!0);G(U,ee,It,"\u228E","\\uplus",!0);G(U,ee,It,"\u2293","\\sqcap",!0);G(U,ee,It,"\u2217","\\ast");G(U,ee,It,"\u2294","\\sqcup",!0);G(U,ee,It,"\u25EF","\\bigcirc",!0);G(U,ee,It,"\u2219","\\bullet",!0);G(U,ee,It,"\u2021","\\ddagger");G(U,ee,It,"\u2240","\\wr",!0);G(U,ee,It,"\u2A3F","\\amalg");G(U,ee,It,"&","\\And");G(U,ee,Ee,"\u27F5","\\longleftarrow",!0);G(U,ee,Ee,"\u21D0","\\Leftarrow",!0);G(U,ee,Ee,"\u27F8","\\Longleftarrow",!0);G(U,ee,Ee,"\u27F6","\\longrightarrow",!0);G(U,ee,Ee,"\u21D2","\\Rightarrow",!0);G(U,ee,Ee,"\u27F9","\\Longrightarrow",!0);G(U,ee,Ee,"\u2194","\\leftrightarrow",!0);G(U,ee,Ee,"\u27F7","\\longleftrightarrow",!0);G(U,ee,Ee,"\u21D4","\\Leftrightarrow",!0);G(U,ee,Ee,"\u27FA","\\Longleftrightarrow",!0);G(U,ee,Ee,"\u21A6","\\mapsto",!0);G(U,ee,Ee,"\u27FC","\\longmapsto",!0);G(U,ee,Ee,"\u2197","\\nearrow",!0);G(U,ee,Ee,"\u21A9","\\hookleftarrow",!0);G(U,ee,Ee,"\u21AA","\\hookrightarrow",!0);G(U,ee,Ee,"\u2198","\\searrow",!0);G(U,ee,Ee,"\u21BC","\\leftharpoonup",!0);G(U,ee,Ee,"\u21C0","\\rightharpoonup",!0);G(U,ee,Ee,"\u2199","\\swarrow",!0);G(U,ee,Ee,"\u21BD","\\leftharpoondown",!0);G(U,ee,Ee,"\u21C1","\\rightharpoondown",!0);G(U,ee,Ee,"\u2196","\\nwarrow",!0);G(U,ee,Ee,"\u21CC","\\rightleftharpoons",!0);G(U,ke,Ee,"\u226E","\\nless",!0);G(U,ke,Ee,"\uE010","\\@nleqslant");G(U,ke,Ee,"\uE011","\\@nleqq");G(U,ke,Ee,"\u2A87","\\lneq",!0);G(U,ke,Ee,"\u2268","\\lneqq",!0);G(U,ke,Ee,"\uE00C","\\@lvertneqq");G(U,ke,Ee,"\u22E6","\\lnsim",!0);G(U,ke,Ee,"\u2A89","\\lnapprox",!0);G(U,ke,Ee,"\u2280","\\nprec",!0);G(U,ke,Ee,"\u22E0","\\npreceq",!0);G(U,ke,Ee,"\u22E8","\\precnsim",!0);G(U,ke,Ee,"\u2AB9","\\precnapprox",!0);G(U,ke,Ee,"\u2241","\\nsim",!0);G(U,ke,Ee,"\uE006","\\@nshortmid");G(U,ke,Ee,"\u2224","\\nmid",!0);G(U,ke,Ee,"\u22AC","\\nvdash",!0);G(U,ke,Ee,"\u22AD","\\nvDash",!0);G(U,ke,Ee,"\u22EA","\\ntriangleleft");G(U,ke,Ee,"\u22EC","\\ntrianglelefteq",!0);G(U,ke,Ee,"\u228A","\\subsetneq",!0);G(U,ke,Ee,"\uE01A","\\@varsubsetneq");G(U,ke,Ee,"\u2ACB","\\subsetneqq",!0);G(U,ke,Ee,"\uE017","\\@varsubsetneqq");G(U,ke,Ee,"\u226F","\\ngtr",!0);G(U,ke,Ee,"\uE00F","\\@ngeqslant");G(U,ke,Ee,"\uE00E","\\@ngeqq");G(U,ke,Ee,"\u2A88","\\gneq",!0);G(U,ke,Ee,"\u2269","\\gneqq",!0);G(U,ke,Ee,"\uE00D","\\@gvertneqq");G(U,ke,Ee,"\u22E7","\\gnsim",!0);G(U,ke,Ee,"\u2A8A","\\gnapprox",!0);G(U,ke,Ee,"\u2281","\\nsucc",!0);G(U,ke,Ee,"\u22E1","\\nsucceq",!0);G(U,ke,Ee,"\u22E9","\\succnsim",!0);G(U,ke,Ee,"\u2ABA","\\succnapprox",!0);G(U,ke,Ee,"\u2246","\\ncong",!0);G(U,ke,Ee,"\uE007","\\@nshortparallel");G(U,ke,Ee,"\u2226","\\nparallel",!0);G(U,ke,Ee,"\u22AF","\\nVDash",!0);G(U,ke,Ee,"\u22EB","\\ntriangleright");G(U,ke,Ee,"\u22ED","\\ntrianglerighteq",!0);G(U,ke,Ee,"\uE018","\\@nsupseteqq");G(U,ke,Ee,"\u228B","\\supsetneq",!0);G(U,ke,Ee,"\uE01B","\\@varsupsetneq");G(U,ke,Ee,"\u2ACC","\\supsetneqq",!0);G(U,ke,Ee,"\uE019","\\@varsupsetneqq");G(U,ke,Ee,"\u22AE","\\nVdash",!0);G(U,ke,Ee,"\u2AB5","\\precneqq",!0);G(U,ke,Ee,"\u2AB6","\\succneqq",!0);G(U,ke,Ee,"\uE016","\\@nsubseteqq");G(U,ke,It,"\u22B4","\\unlhd");G(U,ke,It,"\u22B5","\\unrhd");G(U,ke,Ee,"\u219A","\\nleftarrow",!0);G(U,ke,Ee,"\u219B","\\nrightarrow",!0);G(U,ke,Ee,"\u21CD","\\nLeftarrow",!0);G(U,ke,Ee,"\u21CF","\\nRightarrow",!0);G(U,ke,Ee,"\u21AE","\\nleftrightarrow",!0);G(U,ke,Ee,"\u21CE","\\nLeftrightarrow",!0);G(U,ke,Ee,"\u25B3","\\vartriangle");G(U,ke,Le,"\u210F","\\hslash");G(U,ke,Le,"\u25BD","\\triangledown");G(U,ke,Le,"\u25CA","\\lozenge");G(U,ke,Le,"\u24C8","\\circledS");G(U,ke,Le,"\xAE","\\circledR");G(it,ke,Le,"\xAE","\\circledR");G(U,ke,Le,"\u2221","\\measuredangle",!0);G(U,ke,Le,"\u2204","\\nexists");G(U,ke,Le,"\u2127","\\mho");G(U,ke,Le,"\u2132","\\Finv",!0);G(U,ke,Le,"\u2141","\\Game",!0);G(U,ke,Le,"\u2035","\\backprime");G(U,ke,Le,"\u25B2","\\blacktriangle");G(U,ke,Le,"\u25BC","\\blacktriangledown");G(U,ke,Le,"\u25A0","\\blacksquare");G(U,ke,Le,"\u29EB","\\blacklozenge");G(U,ke,Le,"\u2605","\\bigstar");G(U,ke,Le,"\u2222","\\sphericalangle",!0);G(U,ke,Le,"\u2201","\\complement",!0);G(U,ke,Le,"\xF0","\\eth",!0);G(it,ee,Le,"\xF0","\xF0");G(U,ke,Le,"\u2571","\\diagup");G(U,ke,Le,"\u2572","\\diagdown");G(U,ke,Le,"\u25A1","\\square");G(U,ke,Le,"\u25A1","\\Box");G(U,ke,Le,"\u25CA","\\Diamond");G(U,ke,Le,"\xA5","\\yen",!0);G(it,ke,Le,"\xA5","\\yen",!0);G(U,ke,Le,"\u2713","\\checkmark",!0);G(it,ke,Le,"\u2713","\\checkmark");G(U,ke,Le,"\u2136","\\beth",!0);G(U,ke,Le,"\u2138","\\daleth",!0);G(U,ke,Le,"\u2137","\\gimel",!0);G(U,ke,Le,"\u03DD","\\digamma",!0);G(U,ke,Le,"\u03F0","\\varkappa");G(U,ke,js,"\u250C","\\@ulcorner",!0);G(U,ke,Za,"\u2510","\\@urcorner",!0);G(U,ke,js,"\u2514","\\@llcorner",!0);G(U,ke,Za,"\u2518","\\@lrcorner",!0);G(U,ke,Ee,"\u2266","\\leqq",!0);G(U,ke,Ee,"\u2A7D","\\leqslant",!0);G(U,ke,Ee,"\u2A95","\\eqslantless",!0);G(U,ke,Ee,"\u2272","\\lesssim",!0);G(U,ke,Ee,"\u2A85","\\lessapprox",!0);G(U,ke,Ee,"\u224A","\\approxeq",!0);G(U,ke,It,"\u22D6","\\lessdot");G(U,ke,Ee,"\u22D8","\\lll",!0);G(U,ke,Ee,"\u2276","\\lessgtr",!0);G(U,ke,Ee,"\u22DA","\\lesseqgtr",!0);G(U,ke,Ee,"\u2A8B","\\lesseqqgtr",!0);G(U,ke,Ee,"\u2251","\\doteqdot");G(U,ke,Ee,"\u2253","\\risingdotseq",!0);G(U,ke,Ee,"\u2252","\\fallingdotseq",!0);G(U,ke,Ee,"\u223D","\\backsim",!0);G(U,ke,Ee,"\u22CD","\\backsimeq",!0);G(U,ke,Ee,"\u2AC5","\\subseteqq",!0);G(U,ke,Ee,"\u22D0","\\Subset",!0);G(U,ke,Ee,"\u228F","\\sqsubset",!0);G(U,ke,Ee,"\u227C","\\preccurlyeq",!0);G(U,ke,Ee,"\u22DE","\\curlyeqprec",!0);G(U,ke,Ee,"\u227E","\\precsim",!0);G(U,ke,Ee,"\u2AB7","\\precapprox",!0);G(U,ke,Ee,"\u22B2","\\vartriangleleft");G(U,ke,Ee,"\u22B4","\\trianglelefteq");G(U,ke,Ee,"\u22A8","\\vDash",!0);G(U,ke,Ee,"\u22AA","\\Vvdash",!0);G(U,ke,Ee,"\u2323","\\smallsmile");G(U,ke,Ee,"\u2322","\\smallfrown");G(U,ke,Ee,"\u224F","\\bumpeq",!0);G(U,ke,Ee,"\u224E","\\Bumpeq",!0);G(U,ke,Ee,"\u2267","\\geqq",!0);G(U,ke,Ee,"\u2A7E","\\geqslant",!0);G(U,ke,Ee,"\u2A96","\\eqslantgtr",!0);G(U,ke,Ee,"\u2273","\\gtrsim",!0);G(U,ke,Ee,"\u2A86","\\gtrapprox",!0);G(U,ke,It,"\u22D7","\\gtrdot");G(U,ke,Ee,"\u22D9","\\ggg",!0);G(U,ke,Ee,"\u2277","\\gtrless",!0);G(U,ke,Ee,"\u22DB","\\gtreqless",!0);G(U,ke,Ee,"\u2A8C","\\gtreqqless",!0);G(U,ke,Ee,"\u2256","\\eqcirc",!0);G(U,ke,Ee,"\u2257","\\circeq",!0);G(U,ke,Ee,"\u225C","\\triangleq",!0);G(U,ke,Ee,"\u223C","\\thicksim");G(U,ke,Ee,"\u2248","\\thickapprox");G(U,ke,Ee,"\u2AC6","\\supseteqq",!0);G(U,ke,Ee,"\u22D1","\\Supset",!0);G(U,ke,Ee,"\u2290","\\sqsupset",!0);G(U,ke,Ee,"\u227D","\\succcurlyeq",!0);G(U,ke,Ee,"\u22DF","\\curlyeqsucc",!0);G(U,ke,Ee,"\u227F","\\succsim",!0);G(U,ke,Ee,"\u2AB8","\\succapprox",!0);G(U,ke,Ee,"\u22B3","\\vartriangleright");G(U,ke,Ee,"\u22B5","\\trianglerighteq");G(U,ke,Ee,"\u22A9","\\Vdash",!0);G(U,ke,Ee,"\u2223","\\shortmid");G(U,ke,Ee,"\u2225","\\shortparallel");G(U,ke,Ee,"\u226C","\\between",!0);G(U,ke,Ee,"\u22D4","\\pitchfork",!0);G(U,ke,Ee,"\u221D","\\varpropto");G(U,ke,Ee,"\u25C0","\\blacktriangleleft");G(U,ke,Ee,"\u2234","\\therefore",!0);G(U,ke,Ee,"\u220D","\\backepsilon");G(U,ke,Ee,"\u25B6","\\blacktriangleright");G(U,ke,Ee,"\u2235","\\because",!0);G(U,ke,Ee,"\u22D8","\\llless");G(U,ke,Ee,"\u22D9","\\gggtr");G(U,ke,It,"\u22B2","\\lhd");G(U,ke,It,"\u22B3","\\rhd");G(U,ke,Ee,"\u2242","\\eqsim",!0);G(U,ee,Ee,"\u22C8","\\Join");G(U,ke,Ee,"\u2251","\\Doteq",!0);G(U,ke,It,"\u2214","\\dotplus",!0);G(U,ke,It,"\u2216","\\smallsetminus");G(U,ke,It,"\u22D2","\\Cap",!0);G(U,ke,It,"\u22D3","\\Cup",!0);G(U,ke,It,"\u2A5E","\\doublebarwedge",!0);G(U,ke,It,"\u229F","\\boxminus",!0);G(U,ke,It,"\u229E","\\boxplus",!0);G(U,ke,It,"\u22C7","\\divideontimes",!0);G(U,ke,It,"\u22C9","\\ltimes",!0);G(U,ke,It,"\u22CA","\\rtimes",!0);G(U,ke,It,"\u22CB","\\leftthreetimes",!0);G(U,ke,It,"\u22CC","\\rightthreetimes",!0);G(U,ke,It,"\u22CF","\\curlywedge",!0);G(U,ke,It,"\u22CE","\\curlyvee",!0);G(U,ke,It,"\u229D","\\circleddash",!0);G(U,ke,It,"\u229B","\\circledast",!0);G(U,ke,It,"\u22C5","\\centerdot");G(U,ke,It,"\u22BA","\\intercal",!0);G(U,ke,It,"\u22D2","\\doublecap");G(U,ke,It,"\u22D3","\\doublecup");G(U,ke,It,"\u22A0","\\boxtimes",!0);G(U,ke,Ee,"\u21E2","\\dashrightarrow",!0);G(U,ke,Ee,"\u21E0","\\dashleftarrow",!0);G(U,ke,Ee,"\u21C7","\\leftleftarrows",!0);G(U,ke,Ee,"\u21C6","\\leftrightarrows",!0);G(U,ke,Ee,"\u21DA","\\Lleftarrow",!0);G(U,ke,Ee,"\u219E","\\twoheadleftarrow",!0);G(U,ke,Ee,"\u21A2","\\leftarrowtail",!0);G(U,ke,Ee,"\u21AB","\\looparrowleft",!0);G(U,ke,Ee,"\u21CB","\\leftrightharpoons",!0);G(U,ke,Ee,"\u21B6","\\curvearrowleft",!0);G(U,ke,Ee,"\u21BA","\\circlearrowleft",!0);G(U,ke,Ee,"\u21B0","\\Lsh",!0);G(U,ke,Ee,"\u21C8","\\upuparrows",!0);G(U,ke,Ee,"\u21BF","\\upharpoonleft",!0);G(U,ke,Ee,"\u21C3","\\downharpoonleft",!0);G(U,ee,Ee,"\u22B6","\\origof",!0);G(U,ee,Ee,"\u22B7","\\imageof",!0);G(U,ke,Ee,"\u22B8","\\multimap",!0);G(U,ke,Ee,"\u21AD","\\leftrightsquigarrow",!0);G(U,ke,Ee,"\u21C9","\\rightrightarrows",!0);G(U,ke,Ee,"\u21C4","\\rightleftarrows",!0);G(U,ke,Ee,"\u21A0","\\twoheadrightarrow",!0);G(U,ke,Ee,"\u21A3","\\rightarrowtail",!0);G(U,ke,Ee,"\u21AC","\\looparrowright",!0);G(U,ke,Ee,"\u21B7","\\curvearrowright",!0);G(U,ke,Ee,"\u21BB","\\circlearrowright",!0);G(U,ke,Ee,"\u21B1","\\Rsh",!0);G(U,ke,Ee,"\u21CA","\\downdownarrows",!0);G(U,ke,Ee,"\u21BE","\\upharpoonright",!0);G(U,ke,Ee,"\u21C2","\\downharpoonright",!0);G(U,ke,Ee,"\u21DD","\\rightsquigarrow",!0);G(U,ke,Ee,"\u21DD","\\leadsto");G(U,ke,Ee,"\u21DB","\\Rrightarrow",!0);G(U,ke,Ee,"\u21BE","\\restriction");G(U,ee,Le,"\u2018","`");G(U,ee,Le,"$","\\$");G(it,ee,Le,"$","\\$");G(it,ee,Le,"$","\\textdollar");G(U,ee,Le,"%","\\%");G(it,ee,Le,"%","\\%");G(U,ee,Le,"_","\\_");G(it,ee,Le,"_","\\_");G(it,ee,Le,"_","\\textunderscore");G(U,ee,Le,"\u2220","\\angle",!0);G(U,ee,Le,"\u221E","\\infty",!0);G(U,ee,Le,"\u2032","\\prime");G(U,ee,Le,"\u25B3","\\triangle");G(U,ee,Le,"\u0393","\\Gamma",!0);G(U,ee,Le,"\u0394","\\Delta",!0);G(U,ee,Le,"\u0398","\\Theta",!0);G(U,ee,Le,"\u039B","\\Lambda",!0);G(U,ee,Le,"\u039E","\\Xi",!0);G(U,ee,Le,"\u03A0","\\Pi",!0);G(U,ee,Le,"\u03A3","\\Sigma",!0);G(U,ee,Le,"\u03A5","\\Upsilon",!0);G(U,ee,Le,"\u03A6","\\Phi",!0);G(U,ee,Le,"\u03A8","\\Psi",!0);G(U,ee,Le,"\u03A9","\\Omega",!0);G(U,ee,Le,"A","\u0391");G(U,ee,Le,"B","\u0392");G(U,ee,Le,"E","\u0395");G(U,ee,Le,"Z","\u0396");G(U,ee,Le,"H","\u0397");G(U,ee,Le,"I","\u0399");G(U,ee,Le,"K","\u039A");G(U,ee,Le,"M","\u039C");G(U,ee,Le,"N","\u039D");G(U,ee,Le,"O","\u039F");G(U,ee,Le,"P","\u03A1");G(U,ee,Le,"T","\u03A4");G(U,ee,Le,"X","\u03A7");G(U,ee,Le,"\xAC","\\neg",!0);G(U,ee,Le,"\xAC","\\lnot");G(U,ee,Le,"\u22A4","\\top");G(U,ee,Le,"\u22A5","\\bot");G(U,ee,Le,"\u2205","\\emptyset");G(U,ke,Le,"\u2205","\\varnothing");G(U,ee,er,"\u03B1","\\alpha",!0);G(U,ee,er,"\u03B2","\\beta",!0);G(U,ee,er,"\u03B3","\\gamma",!0);G(U,ee,er,"\u03B4","\\delta",!0);G(U,ee,er,"\u03F5","\\epsilon",!0);G(U,ee,er,"\u03B6","\\zeta",!0);G(U,ee,er,"\u03B7","\\eta",!0);G(U,ee,er,"\u03B8","\\theta",!0);G(U,ee,er,"\u03B9","\\iota",!0);G(U,ee,er,"\u03BA","\\kappa",!0);G(U,ee,er,"\u03BB","\\lambda",!0);G(U,ee,er,"\u03BC","\\mu",!0);G(U,ee,er,"\u03BD","\\nu",!0);G(U,ee,er,"\u03BE","\\xi",!0);G(U,ee,er,"\u03BF","\\omicron",!0);G(U,ee,er,"\u03C0","\\pi",!0);G(U,ee,er,"\u03C1","\\rho",!0);G(U,ee,er,"\u03C3","\\sigma",!0);G(U,ee,er,"\u03C4","\\tau",!0);G(U,ee,er,"\u03C5","\\upsilon",!0);G(U,ee,er,"\u03D5","\\phi",!0);G(U,ee,er,"\u03C7","\\chi",!0);G(U,ee,er,"\u03C8","\\psi",!0);G(U,ee,er,"\u03C9","\\omega",!0);G(U,ee,er,"\u03B5","\\varepsilon",!0);G(U,ee,er,"\u03D1","\\vartheta",!0);G(U,ee,er,"\u03D6","\\varpi",!0);G(U,ee,er,"\u03F1","\\varrho",!0);G(U,ee,er,"\u03C2","\\varsigma",!0);G(U,ee,er,"\u03C6","\\varphi",!0);G(U,ee,It,"\u2217","*",!0);G(U,ee,It,"+","+");G(U,ee,It,"\u2212","-",!0);G(U,ee,It,"\u22C5","\\cdot",!0);G(U,ee,It,"\u2218","\\circ",!0);G(U,ee,It,"\xF7","\\div",!0);G(U,ee,It,"\xB1","\\pm",!0);G(U,ee,It,"\xD7","\\times",!0);G(U,ee,It,"\u2229","\\cap",!0);G(U,ee,It,"\u222A","\\cup",!0);G(U,ee,It,"\u2216","\\setminus",!0);G(U,ee,It,"\u2227","\\land");G(U,ee,It,"\u2228","\\lor");G(U,ee,It,"\u2227","\\wedge",!0);G(U,ee,It,"\u2228","\\vee",!0);G(U,ee,Le,"\u221A","\\surd");G(U,ee,js,"\u27E8","\\langle",!0);G(U,ee,js,"\u2223","\\lvert");G(U,ee,js,"\u2225","\\lVert");G(U,ee,Za,"?","?");G(U,ee,Za,"!","!");G(U,ee,Za,"\u27E9","\\rangle",!0);G(U,ee,Za,"\u2223","\\rvert");G(U,ee,Za,"\u2225","\\rVert");G(U,ee,Ee,"=","=");G(U,ee,Ee,":",":");G(U,ee,Ee,"\u2248","\\approx",!0);G(U,ee,Ee,"\u2245","\\cong",!0);G(U,ee,Ee,"\u2265","\\ge");G(U,ee,Ee,"\u2265","\\geq",!0);G(U,ee,Ee,"\u2190","\\gets");G(U,ee,Ee,">","\\gt",!0);G(U,ee,Ee,"\u2208","\\in",!0);G(U,ee,Ee,"\uE020","\\@not");G(U,ee,Ee,"\u2282","\\subset",!0);G(U,ee,Ee,"\u2283","\\supset",!0);G(U,ee,Ee,"\u2286","\\subseteq",!0);G(U,ee,Ee,"\u2287","\\supseteq",!0);G(U,ke,Ee,"\u2288","\\nsubseteq",!0);G(U,ke,Ee,"\u2289","\\nsupseteq",!0);G(U,ee,Ee,"\u22A8","\\models");G(U,ee,Ee,"\u2190","\\leftarrow",!0);G(U,ee,Ee,"\u2264","\\le");G(U,ee,Ee,"\u2264","\\leq",!0);G(U,ee,Ee,"<","\\lt",!0);G(U,ee,Ee,"\u2192","\\rightarrow",!0);G(U,ee,Ee,"\u2192","\\to");G(U,ke,Ee,"\u2271","\\ngeq",!0);G(U,ke,Ee,"\u2270","\\nleq",!0);G(U,ee,uu,"\xA0","\\ ");G(U,ee,uu,"\xA0","\\space");G(U,ee,uu,"\xA0","\\nobreakspace");G(it,ee,uu,"\xA0","\\ ");G(it,ee,uu,"\xA0"," ");G(it,ee,uu,"\xA0","\\space");G(it,ee,uu,"\xA0","\\nobreakspace");G(U,ee,uu,null,"\\nobreak");G(U,ee,uu,null,"\\allowbreak");G(U,ee,x3,",",",");G(U,ee,x3,";",";");G(U,ke,It,"\u22BC","\\barwedge",!0);G(U,ke,It,"\u22BB","\\veebar",!0);G(U,ee,It,"\u2299","\\odot",!0);G(U,ee,It,"\u2295","\\oplus",!0);G(U,ee,It,"\u2297","\\otimes",!0);G(U,ee,Le,"\u2202","\\partial",!0);G(U,ee,It,"\u2298","\\oslash",!0);G(U,ke,It,"\u229A","\\circledcirc",!0);G(U,ke,It,"\u22A1","\\boxdot",!0);G(U,ee,It,"\u25B3","\\bigtriangleup");G(U,ee,It,"\u25BD","\\bigtriangledown");G(U,ee,It,"\u2020","\\dagger");G(U,ee,It,"\u22C4","\\diamond");G(U,ee,It,"\u22C6","\\star");G(U,ee,It,"\u25C3","\\triangleleft");G(U,ee,It,"\u25B9","\\triangleright");G(U,ee,js,"{","\\{");G(it,ee,Le,"{","\\{");G(it,ee,Le,"{","\\textbraceleft");G(U,ee,Za,"}","\\}");G(it,ee,Le,"}","\\}");G(it,ee,Le,"}","\\textbraceright");G(U,ee,js,"{","\\lbrace");G(U,ee,Za,"}","\\rbrace");G(U,ee,js,"[","\\lbrack",!0);G(it,ee,Le,"[","\\lbrack",!0);G(U,ee,Za,"]","\\rbrack",!0);G(it,ee,Le,"]","\\rbrack",!0);G(U,ee,js,"(","\\lparen",!0);G(U,ee,Za,")","\\rparen",!0);G(it,ee,Le,"<","\\textless",!0);G(it,ee,Le,">","\\textgreater",!0);G(U,ee,js,"\u230A","\\lfloor",!0);G(U,ee,Za,"\u230B","\\rfloor",!0);G(U,ee,js,"\u2308","\\lceil",!0);G(U,ee,Za,"\u2309","\\rceil",!0);G(U,ee,Le,"\\","\\backslash");G(U,ee,Le,"\u2223","|");G(U,ee,Le,"\u2223","\\vert");G(it,ee,Le,"|","\\textbar",!0);G(U,ee,Le,"\u2225","\\|");G(U,ee,Le,"\u2225","\\Vert");G(it,ee,Le,"\u2225","\\textbardbl");G(it,ee,Le,"~","\\textasciitilde");G(it,ee,Le,"\\","\\textbackslash");G(it,ee,Le,"^","\\textasciicircum");G(U,ee,Ee,"\u2191","\\uparrow",!0);G(U,ee,Ee,"\u21D1","\\Uparrow",!0);G(U,ee,Ee,"\u2193","\\downarrow",!0);G(U,ee,Ee,"\u21D3","\\Downarrow",!0);G(U,ee,Ee,"\u2195","\\updownarrow",!0);G(U,ee,Ee,"\u21D5","\\Updownarrow",!0);G(U,ee,ki,"\u2210","\\coprod");G(U,ee,ki,"\u22C1","\\bigvee");G(U,ee,ki,"\u22C0","\\bigwedge");G(U,ee,ki,"\u2A04","\\biguplus");G(U,ee,ki,"\u22C2","\\bigcap");G(U,ee,ki,"\u22C3","\\bigcup");G(U,ee,ki,"\u222B","\\int");G(U,ee,ki,"\u222B","\\intop");G(U,ee,ki,"\u222C","\\iint");G(U,ee,ki,"\u222D","\\iiint");G(U,ee,ki,"\u220F","\\prod");G(U,ee,ki,"\u2211","\\sum");G(U,ee,ki,"\u2A02","\\bigotimes");G(U,ee,ki,"\u2A01","\\bigoplus");G(U,ee,ki,"\u2A00","\\bigodot");G(U,ee,ki,"\u222E","\\oint");G(U,ee,ki,"\u222F","\\oiint");G(U,ee,ki,"\u2230","\\oiiint");G(U,ee,ki,"\u2A06","\\bigsqcup");G(U,ee,ki,"\u222B","\\smallint");G(it,ee,p0,"\u2026","\\textellipsis");G(U,ee,p0,"\u2026","\\mathellipsis");G(it,ee,p0,"\u2026","\\ldots",!0);G(U,ee,p0,"\u2026","\\ldots",!0);G(U,ee,p0,"\u22EF","\\@cdots",!0);G(U,ee,p0,"\u22F1","\\ddots",!0);G(U,ee,Le,"\u22EE","\\varvdots");G(U,ee,Vn,"\u02CA","\\acute");G(U,ee,Vn,"\u02CB","\\grave");G(U,ee,Vn,"\xA8","\\ddot");G(U,ee,Vn,"~","\\tilde");G(U,ee,Vn,"\u02C9","\\bar");G(U,ee,Vn,"\u02D8","\\breve");G(U,ee,Vn,"\u02C7","\\check");G(U,ee,Vn,"^","\\hat");G(U,ee,Vn,"\u20D7","\\vec");G(U,ee,Vn,"\u02D9","\\dot");G(U,ee,Vn,"\u02DA","\\mathring");G(U,ee,er,"\uE131","\\@imath");G(U,ee,er,"\uE237","\\@jmath");G(U,ee,Le,"\u0131","\u0131");G(U,ee,Le,"\u0237","\u0237");G(it,ee,Le,"\u0131","\\i",!0);G(it,ee,Le,"\u0237","\\j",!0);G(it,ee,Le,"\xDF","\\ss",!0);G(it,ee,Le,"\xE6","\\ae",!0);G(it,ee,Le,"\u0153","\\oe",!0);G(it,ee,Le,"\xF8","\\o",!0);G(it,ee,Le,"\xC6","\\AE",!0);G(it,ee,Le,"\u0152","\\OE",!0);G(it,ee,Le,"\xD8","\\O",!0);G(it,ee,Vn,"\u02CA","\\'");G(it,ee,Vn,"\u02CB","\\`");G(it,ee,Vn,"\u02C6","\\^");G(it,ee,Vn,"\u02DC","\\~");G(it,ee,Vn,"\u02C9","\\=");G(it,ee,Vn,"\u02D8","\\u");G(it,ee,Vn,"\u02D9","\\.");G(it,ee,Vn,"\xB8","\\c");G(it,ee,Vn,"\u02DA","\\r");G(it,ee,Vn,"\u02C7","\\v");G(it,ee,Vn,"\xA8",'\\"');G(it,ee,Vn,"\u02DD","\\H");G(it,ee,Vn,"\u25EF","\\textcircled");Hz={"--":!0,"---":!0,"``":!0,"''":!0};G(it,ee,Le,"\u2013","--",!0);G(it,ee,Le,"\u2013","\\textendash");G(it,ee,Le,"\u2014","---",!0);G(it,ee,Le,"\u2014","\\textemdash");G(it,ee,Le,"\u2018","`",!0);G(it,ee,Le,"\u2018","\\textquoteleft");G(it,ee,Le,"\u2019","'",!0);G(it,ee,Le,"\u2019","\\textquoteright");G(it,ee,Le,"\u201C","``",!0);G(it,ee,Le,"\u201C","\\textquotedblleft");G(it,ee,Le,"\u201D","''",!0);G(it,ee,Le,"\u201D","\\textquotedblright");G(U,ee,Le,"\xB0","\\degree",!0);G(it,ee,Le,"\xB0","\\degree");G(it,ee,Le,"\xB0","\\textdegree",!0);G(U,ee,Le,"\xA3","\\pounds");G(U,ee,Le,"\xA3","\\mathsterling",!0);G(it,ee,Le,"\xA3","\\pounds");G(it,ee,Le,"\xA3","\\textsterling",!0);G(U,ke,Le,"\u2720","\\maltese");G(it,ke,Le,"\u2720","\\maltese");fz='0123456789/@."';for(J4=0;J4<fz.length;J4++)f7=fz.charAt(J4),G(U,ee,Le,f7,f7);dz='0123456789!@*()-=+";:?/.,';for(e3=0;e3<dz.length;e3++)d7=dz.charAt(e3),G(it,ee,Le,d7,d7);d3="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";for(t3=0;t3<d3.length;t3++)Py=d3.charAt(t3),G(U,ee,er,Py,Py),G(it,ee,Le,Py,Py);G(U,ke,Le,"C","\u2102");G(it,ke,Le,"C","\u2102");G(U,ke,Le,"H","\u210D");G(it,ke,Le,"H","\u210D");G(U,ke,Le,"N","\u2115");G(it,ke,Le,"N","\u2115");G(U,ke,Le,"P","\u2119");G(it,ke,Le,"P","\u2119");G(U,ke,Le,"Q","\u211A");G(it,ke,Le,"Q","\u211A");G(U,ke,Le,"R","\u211D");G(it,ke,Le,"R","\u211D");G(U,ke,Le,"Z","\u2124");G(it,ke,Le,"Z","\u2124");G(U,ee,er,"h","\u210E");G(it,ee,er,"h","\u210E");sr="";for(Ca=0;Ca<d3.length;Ca++)Jn=d3.charAt(Ca),sr=String.fromCharCode(55349,56320+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56372+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56424+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56580+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56684+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56736+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56788+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56840+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56944+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),Ca<26&&(sr=String.fromCharCode(55349,56632+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr),sr=String.fromCharCode(55349,56476+Ca),G(U,ee,er,Jn,sr),G(it,ee,Le,Jn,sr));sr="\u{1D55C}";G(U,ee,er,"k",sr);G(it,ee,Le,"k",sr);for(uh=0;uh<10;uh++)iu=uh.toString(),sr=String.fromCharCode(55349,57294+uh),G(U,ee,er,iu,sr),G(it,ee,Le,iu,sr),sr=String.fromCharCode(55349,57314+uh),G(U,ee,er,iu,sr),G(it,ee,Le,iu,sr),sr=String.fromCharCode(55349,57324+uh),G(U,ee,er,iu,sr),G(it,ee,Le,iu,sr),sr=String.fromCharCode(55349,57334+uh),G(U,ee,er,iu,sr),G(it,ee,Le,iu,sr);C7="\xD0\xDE\xFE";for(r3=0;r3<C7.length;r3++)By=C7.charAt(r3),G(U,ee,er,By,By),G(it,ee,Le,By,By);n3=[["mathbf","textbf","Main-Bold"],["mathbf","textbf","Main-Bold"],["mathnormal","textit","Math-Italic"],["mathnormal","textit","Math-Italic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["mathscr","textscr","Script-Regular"],["","",""],["","",""],["","",""],["mathfrak","textfrak","Fraktur-Regular"],["mathfrak","textfrak","Fraktur-Regular"],["mathbb","textbb","AMS-Regular"],["mathbb","textbb","AMS-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathitsf","textitsf","SansSerif-Italic"],["mathitsf","textitsf","SansSerif-Italic"],["","",""],["","",""],["mathtt","texttt","Typewriter-Regular"],["mathtt","texttt","Typewriter-Regular"]],pz=[["mathbf","textbf","Main-Bold"],["","",""],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathtt","texttt","Typewriter-Regular"]],Obe=o(function(e,r){var n=e.charCodeAt(0),i=e.charCodeAt(1),a=(n-55296)*1024+(i-56320)+65536,s=r==="math"?0:1;if(119808<=a&&a<120484){var l=Math.floor((a-119808)/26);return[n3[l][2],n3[l][s]]}else if(120782<=a&&a<=120831){var u=Math.floor((a-120782)/10);return[pz[u][2],pz[u][s]]}else{if(a===120485||a===120486)return[n3[0][2],n3[0][s]];if(120486<a&&a<120782)return["",""];throw new gt("Unsupported character: "+e)}},"wideCharacterFont"),b3=o(function(e,r,n){return An[n][e]&&An[n][e].replace&&(e=An[n][e].replace),{value:e,metrics:P7(e,r,n)}},"lookupSymbol"),ol=o(function(e,r,n,i,a){var s=b3(e,r,n),l=s.metrics;e=s.value;var u;if(l){var h=l.italic;(n==="text"||i&&i.font==="mathit")&&(h=0),u=new Ts(e,l.height,l.depth,h,l.skew,l.width,a)}else typeof console<"u"&&console.warn("No character metrics "+("for '"+e+"' in style '"+r+"' and mode '"+n+"'")),u=new Ts(e,0,0,0,0,0,a);if(i){u.maxFontSize=i.sizeMultiplier,i.style.isTight()&&u.classes.push("mtight");var f=i.getColor();f&&(u.style.color=f)}return u},"makeSymbol"),Pbe=o(function(e,r,n,i){return i===void 0&&(i=[]),n.font==="boldsymbol"&&b3(e,"Main-Bold",r).metrics?ol(e,"Main-Bold",r,n,i.concat(["mathbf"])):e==="\\"||An[r][e].font==="main"?ol(e,"Main-Regular",r,n,i):ol(e,"AMS-Regular",r,n,i.concat(["amsrm"]))},"mathsym"),Bbe=o(function(e,r,n,i,a){return a!=="textord"&&b3(e,"Math-BoldItalic",r).metrics?{fontName:"Math-BoldItalic",fontClass:"boldsymbol"}:{fontName:"Main-Bold",fontClass:"mathbf"}},"boldsymbol"),Fbe=o(function(e,r,n){var i=e.mode,a=e.text,s=["mord"],l=i==="math"||i==="text"&&r.font,u=l?r.font:r.fontFamily,h="",f="";if(a.charCodeAt(0)===55349&&([h,f]=Obe(a,i)),h.length>0)return ol(a,h,i,r,s.concat(f));if(u){var d,p;if(u==="boldsymbol"){var m=Bbe(a,i,r,s,n);d=m.fontName,p=[m.fontClass]}else l?(d=Yz[u].fontName,p=[u]):(d=i3(u,r.fontWeight,r.fontShape),p=[u,r.fontWeight,r.fontShape]);if(b3(a,d,i).metrics)return ol(a,d,i,r,s.concat(p));if(Hz.hasOwnProperty(a)&&d.slice(0,10)==="Typewriter"){for(var g=[],y=0;y<a.length;y++)g.push(ol(a[y],d,i,r,s.concat(p)));return qz(g)}}if(n==="mathord")return ol(a,"Math-Italic",i,r,s.concat(["mathnormal"]));if(n==="textord"){var v=An[i][a]&&An[i][a].font;if(v==="ams"){var x=i3("amsrm",r.fontWeight,r.fontShape);return ol(a,x,i,r,s.concat("amsrm",r.fontWeight,r.fontShape))}else if(v==="main"||!v){var b=i3("textrm",r.fontWeight,r.fontShape);return ol(a,b,i,r,s.concat(r.fontWeight,r.fontShape))}else{var w=i3(v,r.fontWeight,r.fontShape);return ol(a,w,i,r,s.concat(w,r.fontWeight,r.fontShape))}}else throw new Error("unexpected type: "+n+" in makeOrd")},"makeOrd"),$be=o((t,e)=>{if(fh(t.classes)!==fh(e.classes)||t.skew!==e.skew||t.maxFontSize!==e.maxFontSize)return!1;if(t.classes.length===1){var r=t.classes[0];if(r==="mbin"||r==="mord")return!1}for(var n in t.style)if(t.style.hasOwnProperty(n)&&t.style[n]!==e.style[n])return!1;for(var i in e.style)if(e.style.hasOwnProperty(i)&&t.style[i]!==e.style[i])return!1;return!0},"canCombine"),zbe=o(t=>{for(var e=0;e<t.length-1;e++){var r=t[e],n=t[e+1];r instanceof Ts&&n instanceof Ts&&$be(r,n)&&(r.text+=n.text,r.height=Math.max(r.height,n.height),r.depth=Math.max(r.depth,n.depth),r.italic=n.italic,t.splice(e+1,1),e--)}return t},"tryCombineChars"),B7=o(function(e){for(var r=0,n=0,i=0,a=0;a<e.children.length;a++){var s=e.children[a];s.height>r&&(r=s.height),s.depth>n&&(n=s.depth),s.maxFontSize>i&&(i=s.maxFontSize)}e.height=r,e.depth=n,e.maxFontSize=i},"sizeElementFromChildren"),bs=o(function(e,r,n,i){var a=new td(e,r,n,i);return B7(a),a},"makeSpan"),Wz=o((t,e,r,n)=>new td(t,e,r,n),"makeSvgSpan"),Gbe=o(function(e,r,n){var i=bs([e],[],r);return i.height=Math.max(n||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),i.style.borderBottomWidth=kt(i.height),i.maxFontSize=1,i},"makeLineSpan"),Vbe=o(function(e,r,n,i){var a=new Vy(e,r,n,i);return B7(a),a},"makeAnchor"),qz=o(function(e){var r=new ed(e);return B7(r),r},"makeFragment"),Ube=o(function(e,r){return e instanceof ed?bs([],[e],r):e},"wrapFragment"),Hbe=o(function(e){if(e.positionType==="individualShift"){for(var r=e.children,n=[r[0]],i=-r[0].shift-r[0].elem.depth,a=i,s=1;s<r.length;s++){var l=-r[s].shift-a-r[s].elem.depth,u=l-(r[s-1].elem.height+r[s-1].elem.depth);a=a+l,n.push({type:"kern",size:u}),n.push(r[s])}return{children:n,depth:i}}var h;if(e.positionType==="top"){for(var f=e.positionData,d=0;d<e.children.length;d++){var p=e.children[d];f-=p.type==="kern"?p.size:p.elem.height+p.elem.depth}h=f}else if(e.positionType==="bottom")h=-e.positionData;else{var m=e.children[0];if(m.type!=="elem")throw new Error('First child must have type "elem".');if(e.positionType==="shift")h=-m.elem.depth-e.positionData;else if(e.positionType==="firstBaseline")h=-m.elem.depth;else throw new Error("Invalid positionType "+e.positionType+".")}return{children:e.children,depth:h}},"getVListChildrenAndDepth"),Wbe=o(function(e,r){for(var{children:n,depth:i}=Hbe(e),a=0,s=0;s<n.length;s++){var l=n[s];if(l.type==="elem"){var u=l.elem;a=Math.max(a,u.maxFontSize,u.height)}}a+=2;var h=bs(["pstrut"],[]);h.style.height=kt(a);for(var f=[],d=i,p=i,m=i,g=0;g<n.length;g++){var y=n[g];if(y.type==="kern")m+=y.size;else{var v=y.elem,x=y.wrapperClasses||[],b=y.wrapperStyle||{},w=bs(x,[h,v],void 0,b);w.style.top=kt(-a-m-v.depth),y.marginLeft&&(w.style.marginLeft=y.marginLeft),y.marginRight&&(w.style.marginRight=y.marginRight),f.push(w),m+=v.height+v.depth}d=Math.min(d,m),p=Math.max(p,m)}var C=bs(["vlist"],f);C.style.height=kt(p);var T;if(d<0){var E=bs([],[]),A=bs(["vlist"],[E]);A.style.height=kt(-d);var S=bs(["vlist-s"],[new Ts("\u200B")]);T=[bs(["vlist-r"],[C,S]),bs(["vlist-r"],[A])]}else T=[bs(["vlist-r"],[C])];var _=bs(["vlist-t"],T);return T.length===2&&_.classes.push("vlist-t2"),_.height=p,_.depth=-d,_},"makeVList"),qbe=o((t,e)=>{var r=bs(["mspace"],[],e),n=ti(t,e);return r.style.marginRight=kt(n),r},"makeGlue"),i3=o(function(e,r,n){var i="";switch(e){case"amsrm":i="AMS";break;case"textrm":i="Main";break;case"textsf":i="SansSerif";break;case"texttt":i="Typewriter";break;default:i=e}var a;return r==="textbf"&&n==="textit"?a="BoldItalic":r==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",i+"-"+a},"retrieveTextFontName"),Yz={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Xz={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Ybe=o(function(e,r){var[n,i,a]=Xz[e],s=new Kl(n),l=new ll([s],{width:kt(i),height:kt(a),style:"width:"+kt(i),viewBox:"0 0 "+1e3*i+" "+1e3*a,preserveAspectRatio:"xMinYMin"}),u=Wz(["overlay"],[l],r);return u.height=a,u.style.height=kt(a),u.style.width=kt(i),u},"staticSvg"),Be={fontMap:Yz,makeSymbol:ol,mathsym:Pbe,makeSpan:bs,makeSvgSpan:Wz,makeLineSpan:Gbe,makeAnchor:Vbe,makeFragment:qz,wrapFragment:Ube,makeVList:Wbe,makeOrd:Fbe,makeGlue:qbe,staticSvg:Ybe,svgData:Xz,tryCombineChars:zbe},ei={number:3,unit:"mu"},Zf={number:4,unit:"mu"},au={number:5,unit:"mu"},Xbe={mord:{mop:ei,mbin:Zf,mrel:au,minner:ei},mop:{mord:ei,mop:ei,mrel:au,minner:ei},mbin:{mord:Zf,mop:Zf,mopen:Zf,minner:Zf},mrel:{mord:au,mop:au,mopen:au,minner:au},mopen:{},mclose:{mop:ei,mbin:Zf,mrel:au,minner:ei},mpunct:{mord:ei,mop:ei,mrel:au,mopen:ei,mclose:ei,mpunct:ei,minner:ei},minner:{mord:ei,mop:ei,mbin:Zf,mrel:au,mopen:ei,mpunct:ei,minner:ei}},jbe={mord:{mop:ei},mop:{mord:ei,mop:ei},mbin:{},mrel:{},mopen:{},mclose:{mop:ei},mpunct:{},minner:{mop:ei}},jz={},p3={},m3={};o(Nt,"defineFunction");o(rd,"defineFunctionBuilders");g3=o(function(e){return e.type==="ordgroup"&&e.body.length===1?e.body[0]:e},"normalizeArgument"),di=o(function(e){return e.type==="ordgroup"?e.body:[e]},"ordargument"),lu=Be.makeSpan,Kbe=["leftmost","mbin","mopen","mrel","mop","mpunct"],Qbe=["rightmost","mrel","mclose","mpunct"],Zbe={display:tr.DISPLAY,text:tr.TEXT,script:tr.SCRIPT,scriptscript:tr.SCRIPTSCRIPT},Jbe={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},Pi=o(function(e,r,n,i){i===void 0&&(i=[null,null]);for(var a=[],s=0;s<e.length;s++){var l=Fr(e[s],r);if(l instanceof ed){var u=l.children;a.push(...u)}else a.push(l)}if(Be.tryCombineChars(a),!n)return a;var h=r;if(e.length===1){var f=e[0];f.type==="sizing"?h=r.havingSize(f.size):f.type==="styling"&&(h=r.havingStyle(Zbe[f.style]))}var d=lu([i[0]||"leftmost"],[],r),p=lu([i[1]||"rightmost"],[],r),m=n==="root";return mz(a,(g,y)=>{var v=y.classes[0],x=g.classes[0];v==="mbin"&&Jt.contains(Qbe,x)?y.classes[0]="mord":x==="mbin"&&Jt.contains(Kbe,v)&&(g.classes[0]="mord")},{node:d},p,m),mz(a,(g,y)=>{var v=A7(y),x=A7(g),b=v&&x?g.hasClass("mtight")?jbe[v][x]:Xbe[v][x]:null;if(b)return Be.makeGlue(b,h)},{node:d},p,m),a},"buildExpression"),mz=o(function t(e,r,n,i,a){i&&e.push(i);for(var s=0;s<e.length;s++){var l=e[s],u=Kz(l);if(u){t(u.children,r,n,null,a);continue}var h=!l.hasClass("mspace");if(h){var f=r(l,n.node);f&&(n.insertAfter?n.insertAfter(f):(e.unshift(f),s++))}h?n.node=l:a&&l.hasClass("newline")&&(n.node=lu(["leftmost"])),n.insertAfter=(d=>p=>{e.splice(d+1,0,p),s++})(s)}i&&e.pop()},"traverseNonSpaceNodes"),Kz=o(function(e){return e instanceof ed||e instanceof Vy||e instanceof td&&e.hasClass("enclosing")?e:null},"checkPartialGroup"),e4e=o(function t(e,r){var n=Kz(e);if(n){var i=n.children;if(i.length){if(r==="right")return t(i[i.length-1],"right");if(r==="left")return t(i[0],"left")}}return e},"getOutermostNode"),A7=o(function(e,r){return e?(r&&(e=e4e(e,r)),Jbe[e.classes[0]]||null):null},"getTypeOfDomTree"),Hy=o(function(e,r){var n=["nulldelimiter"].concat(e.baseSizingClasses());return lu(r.concat(n))},"makeNullDelimiter"),Fr=o(function(e,r,n){if(!e)return lu();if(p3[e.type]){var i=p3[e.type](e,r);if(n&&r.size!==n.size){i=lu(r.sizingClasses(n),[i],r);var a=r.sizeMultiplier/n.sizeMultiplier;i.height*=a,i.depth*=a}return i}else throw new gt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(a3,"buildHTMLUnbreakable");o(_7,"buildHTML");o(Qz,"newDocumentFragment");ws=class{static{o(this,"MathNode")}constructor(e,r,n){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=r||[],this.classes=n||[]}setAttribute(e,r){this.attributes[e]=r}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&e.setAttribute(r,this.attributes[r]);this.classes.length>0&&(e.className=fh(this.classes));for(var n=0;n<this.children.length;n++)e.appendChild(this.children[n].toNode());return e}toMarkup(){var e="<"+this.type;for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&(e+=" "+r+'="',e+=Jt.escape(this.attributes[r]),e+='"');this.classes.length>0&&(e+=' class ="'+Jt.escape(fh(this.classes))+'"'),e+=">";for(var n=0;n<this.children.length;n++)e+=this.children[n].toMarkup();return e+="</"+this.type+">",e}toText(){return this.children.map(e=>e.toText()).join("")}},Jf=class{static{o(this,"TextNode")}constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return Jt.escape(this.toText())}toText(){return this.text}},D7=class{static{o(this,"SpaceNode")}constructor(e){this.width=void 0,this.character=void 0,this.width=e,e>=.05555&&e<=.05556?this.character="\u200A":e>=.1666&&e<=.1667?this.character="\u2009":e>=.2222&&e<=.2223?this.character="\u2005":e>=.2777&&e<=.2778?this.character="\u2005\u200A":e>=-.05556&&e<=-.05555?this.character="\u200A\u2063":e>=-.1667&&e<=-.1666?this.character="\u2009\u2063":e>=-.2223&&e<=-.2222?this.character="\u205F\u2063":e>=-.2778&&e<=-.2777?this.character="\u2005\u2063":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",kt(this.width)),e}toMarkup(){return this.character?"<mtext>"+this.character+"</mtext>":'<mspace width="'+kt(this.width)+'"/>'}toText(){return this.character?this.character:" "}},dt={MathNode:ws,TextNode:Jf,SpaceNode:D7,newDocumentFragment:Qz},Co=o(function(e,r,n){return An[r][e]&&An[r][e].replace&&e.charCodeAt(0)!==55349&&!(Hz.hasOwnProperty(e)&&n&&(n.fontFamily&&n.fontFamily.slice(4,6)==="tt"||n.font&&n.font.slice(4,6)==="tt"))&&(e=An[r][e].replace),new dt.TextNode(e)},"makeText"),F7=o(function(e){return e.length===1?e[0]:new dt.MathNode("mrow",e)},"makeRow"),$7=o(function(e,r){if(r.fontFamily==="texttt")return"monospace";if(r.fontFamily==="textsf")return r.fontShape==="textit"&&r.fontWeight==="textbf"?"sans-serif-bold-italic":r.fontShape==="textit"?"sans-serif-italic":r.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(r.fontShape==="textit"&&r.fontWeight==="textbf")return"bold-italic";if(r.fontShape==="textit")return"italic";if(r.fontWeight==="textbf")return"bold";var n=r.font;if(!n||n==="mathnormal")return null;var i=e.mode;if(n==="mathit")return"italic";if(n==="boldsymbol")return e.type==="textord"?"bold":"bold-italic";if(n==="mathbf")return"bold";if(n==="mathbb")return"double-struck";if(n==="mathfrak")return"fraktur";if(n==="mathscr"||n==="mathcal")return"script";if(n==="mathsf")return"sans-serif";if(n==="mathtt")return"monospace";var a=e.text;if(Jt.contains(["\\imath","\\jmath"],a))return null;An[i][a]&&An[i][a].replace&&(a=An[i][a].replace);var s=Be.fontMap[n].fontName;return P7(a,s,i)?Be.fontMap[n].variant:null},"getVariant"),ks=o(function(e,r,n){if(e.length===1){var i=yn(e[0],r);return n&&i instanceof ws&&i.type==="mo"&&(i.setAttribute("lspace","0em"),i.setAttribute("rspace","0em")),[i]}for(var a=[],s,l=0;l<e.length;l++){var u=yn(e[l],r);if(u instanceof ws&&s instanceof ws){if(u.type==="mtext"&&s.type==="mtext"&&u.getAttribute("mathvariant")===s.getAttribute("mathvariant")){s.children.push(...u.children);continue}else if(u.type==="mn"&&s.type==="mn"){s.children.push(...u.children);continue}else if(u.type==="mi"&&u.children.length===1&&s.type==="mn"){var h=u.children[0];if(h instanceof Jf&&h.text==="."){s.children.push(...u.children);continue}}else if(s.type==="mi"&&s.children.length===1){var f=s.children[0];if(f instanceof Jf&&f.text==="\u0338"&&(u.type==="mo"||u.type==="mi"||u.type==="mn")){var d=u.children[0];d instanceof Jf&&d.text.length>0&&(d.text=d.text.slice(0,1)+"\u0338"+d.text.slice(1),a.pop())}}}a.push(u),s=u}return a},"buildExpression"),dh=o(function(e,r,n){return F7(ks(e,r,n))},"buildExpressionRow"),yn=o(function(e,r){if(!e)return new dt.MathNode("mrow");if(m3[e.type]){var n=m3[e.type](e,r);return n}else throw new gt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(gz,"buildMathML");Zz=o(function(e){return new f3({style:e.displayMode?tr.DISPLAY:tr.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},"optionsFromSettings"),Jz=o(function(e,r){if(r.displayMode){var n=["katex-display"];r.leqno&&n.push("leqno"),r.fleqn&&n.push("fleqn"),e=Be.makeSpan(n,[e])}return e},"displayWrap"),t4e=o(function(e,r,n){var i=Zz(n),a;if(n.output==="mathml")return gz(e,r,i,n.displayMode,!0);if(n.output==="html"){var s=_7(e,i);a=Be.makeSpan(["katex"],[s])}else{var l=gz(e,r,i,n.displayMode,!1),u=_7(e,i);a=Be.makeSpan(["katex"],[l,u])}return Jz(a,n)},"buildTree"),r4e=o(function(e,r,n){var i=Zz(n),a=_7(e,i),s=Be.makeSpan(["katex"],[a]);return Jz(s,n)},"buildHTMLTree"),n4e={widehat:"^",widecheck:"\u02C7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23DF",overbrace:"\u23DE",overgroup:"\u23E0",undergroup:"\u23E1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21D2",xRightarrow:"\u21D2",overleftharpoon:"\u21BC",xleftharpoonup:"\u21BC",overrightharpoon:"\u21C0",xrightharpoonup:"\u21C0",xLeftarrow:"\u21D0",xLeftrightarrow:"\u21D4",xhookleftarrow:"\u21A9",xhookrightarrow:"\u21AA",xmapsto:"\u21A6",xrightharpoondown:"\u21C1",xleftharpoondown:"\u21BD",xrightleftharpoons:"\u21CC",xleftrightharpoons:"\u21CB",xtwoheadleftarrow:"\u219E",xtwoheadrightarrow:"\u21A0",xlongequal:"=",xtofrom:"\u21C4",xrightleftarrows:"\u21C4",xrightequilibrium:"\u21CC",xleftequilibrium:"\u21CB","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},i4e=o(function(e){var r=new dt.MathNode("mo",[new dt.TextNode(n4e[e.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},"mathMLnode"),a4e={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},s4e=o(function(e){return e.type==="ordgroup"?e.body.length:1},"groupLength"),o4e=o(function(e,r){function n(){var l=4e5,u=e.label.slice(1);if(Jt.contains(["widehat","widecheck","widetilde","utilde"],u)){var h=e,f=s4e(h.base),d,p,m;if(f>5)u==="widehat"||u==="widecheck"?(d=420,l=2364,m=.42,p=u+"4"):(d=312,l=2340,m=.34,p="tilde4");else{var g=[1,1,2,2,3,3][f];u==="widehat"||u==="widecheck"?(l=[0,1062,2364,2364,2364][g],d=[0,239,300,360,420][g],m=[0,.24,.3,.3,.36,.42][g],p=u+g):(l=[0,600,1033,2339,2340][g],d=[0,260,286,306,312][g],m=[0,.26,.286,.3,.306,.34][g],p="tilde"+g)}var y=new Kl(p),v=new ll([y],{width:"100%",height:kt(m),viewBox:"0 0 "+l+" "+d,preserveAspectRatio:"none"});return{span:Be.makeSvgSpan([],[v],r),minWidth:0,height:m}}else{var x=[],b=a4e[u],[w,C,T]=b,E=T/1e3,A=w.length,S,_;if(A===1){var I=b[3];S=["hide-tail"],_=[I]}else if(A===2)S=["halfarrow-left","halfarrow-right"],_=["xMinYMin","xMaxYMin"];else if(A===3)S=["brace-left","brace-center","brace-right"],_=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support
270 + `+A+" children.");for(var D=0;D<A;D++){var k=new Kl(w[D]),L=new ll([k],{width:"400em",height:kt(E),viewBox:"0 0 "+l+" "+T,preserveAspectRatio:_[D]+" slice"}),R=Be.makeSvgSpan([S[D]],[L],r);if(A===1)return{span:R,minWidth:C,height:E};R.style.height=kt(E),x.push(R)}return{span:Be.makeSpan(["stretchy"],x,r),minWidth:C,height:E}}}o(n,"buildSvgSpan_");var{span:i,minWidth:a,height:s}=n();return i.height=s,i.style.height=kt(s),a>0&&(i.style.minWidth=kt(a)),i},"svgSpan"),l4e=o(function(e,r,n,i,a){var s,l=e.height+e.depth+n+i;if(/fbox|color|angl/.test(r)){if(s=Be.makeSpan(["stretchy",r],[],a),r==="fbox"){var u=a.color&&a.getColor();u&&(s.style.borderColor=u)}}else{var h=[];/^[bx]cancel$/.test(r)&&h.push(new Uy({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&h.push(new Uy({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var f=new ll(h,{width:"100%",height:kt(l)});s=Be.makeSvgSpan([],[f],a)}return s.height=l,s.style.height=kt(l),s},"encloseSpan"),cu={encloseSpan:l4e,mathMLnode:i4e,svgSpan:o4e};o(xr,"assertNodeType");o(z7,"assertSymbolNodeType");o(w3,"checkSymbolNodeType");G7=o((t,e)=>{var r,n,i;t&&t.type==="supsub"?(n=xr(t.base,"accent"),r=n.base,t.base=r,i=Nbe(Fr(t,e)),t.base=n):(n=xr(t,"accent"),r=n.base);var a=Fr(r,e.havingCrampedStyle()),s=n.isShifty&&Jt.isCharacterBox(r),l=0;if(s){var u=Jt.getBaseElem(r),h=Fr(u,e.havingCrampedStyle());l=hz(h).skew}var f=n.label==="\\c",d=f?a.height+a.depth:Math.min(a.height,e.fontMetrics().xHeight),p;if(n.isStretchy)p=cu.svgSpan(n,e),p=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"elem",elem:p,wrapperClasses:["svg-align"],wrapperStyle:l>0?{width:"calc(100% - "+kt(2*l)+")",marginLeft:kt(2*l)}:void 0}]},e);else{var m,g;n.label==="\\vec"?(m=Be.staticSvg("vec",e),g=Be.svgData.vec[1]):(m=Be.makeOrd({mode:n.mode,text:n.label},e,"textord"),m=hz(m),m.italic=0,g=m.width,f&&(d+=m.depth)),p=Be.makeSpan(["accent-body"],[m]);var y=n.label==="\\textcircled";y&&(p.classes.push("accent-full"),d=a.height);var v=l;y||(v-=g/2),p.style.left=kt(v),n.label==="\\textcircled"&&(p.style.top=".2em"),p=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:-d},{type:"elem",elem:p}]},e)}var x=Be.makeSpan(["mord","accent"],[p],e);return i?(i.children[0]=x,i.height=Math.max(x.height,i.height),i.classes[0]="mord",i):x},"htmlBuilder$a"),eG=o((t,e)=>{var r=t.isStretchy?cu.mathMLnode(t.label):new dt.MathNode("mo",[Co(t.label,t.mode)]),n=new dt.MathNode("mover",[yn(t.base,e),r]);return n.setAttribute("accent","true"),n},"mathmlBuilder$9"),c4e=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(t=>"\\"+t).join("|"));Nt({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:o((t,e)=>{var r=g3(e[0]),n=!c4e.test(t.funcName),i=!n||t.funcName==="\\widehat"||t.funcName==="\\widetilde"||t.funcName==="\\widecheck";return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:n,isShifty:i,base:r}},"handler"),htmlBuilder:G7,mathmlBuilder:eG});Nt({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:o((t,e)=>{var r=e[0],n=t.parser.mode;return n==="math"&&(t.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+t.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:t.funcName,isStretchy:!1,isShifty:!0,base:r}},"handler"),htmlBuilder:G7,mathmlBuilder:eG});Nt({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"accentUnder",mode:r.mode,label:n,base:i}},"handler"),htmlBuilder:o((t,e)=>{var r=Fr(t.base,e),n=cu.svgSpan(t,e),i=t.label==="\\utilde"?.12:0,a=Be.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:i},{type:"elem",elem:r}]},e);return Be.makeSpan(["mord","accentunder"],[a],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=cu.mathMLnode(t.label),n=new dt.MathNode("munder",[yn(t.base,e),r]);return n.setAttribute("accentunder","true"),n},"mathmlBuilder")});s3=o(t=>{var e=new dt.MathNode("mpadded",t?[t]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e},"paddedNode");Nt({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n,funcName:i}=t;return{type:"xArrow",mode:n.mode,label:i,body:e[0],below:r[0]}},htmlBuilder(t,e){var r=e.style,n=e.havingStyle(r.sup()),i=Be.wrapFragment(Fr(t.body,n,e),e),a=t.label.slice(0,2)==="\\x"?"x":"cd";i.classes.push(a+"-arrow-pad");var s;t.below&&(n=e.havingStyle(r.sub()),s=Be.wrapFragment(Fr(t.below,n,e),e),s.classes.push(a+"-arrow-pad"));var l=cu.svgSpan(t,e),u=-e.fontMetrics().axisHeight+.5*l.height,h=-e.fontMetrics().axisHeight-.5*l.height-.111;(i.depth>.25||t.label==="\\xleftequilibrium")&&(h-=i.depth);var f;if(s){var d=-e.fontMetrics().axisHeight+s.height+.5*l.height+.111;f=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u},{type:"elem",elem:s,shift:d}]},e)}else f=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u}]},e);return f.children[0].children[0].children[1].classes.push("svg-align"),Be.makeSpan(["mrel","x-arrow"],[f],e)},mathmlBuilder(t,e){var r=cu.mathMLnode(t.label);r.setAttribute("minsize",t.label.charAt(0)==="x"?"1.75em":"3.0em");var n;if(t.body){var i=s3(yn(t.body,e));if(t.below){var a=s3(yn(t.below,e));n=new dt.MathNode("munderover",[r,a,i])}else n=new dt.MathNode("mover",[r,i])}else if(t.below){var s=s3(yn(t.below,e));n=new dt.MathNode("munder",[r,s])}else n=s3(),n=new dt.MathNode("mover",[r,n]);return n}});u4e=Be.makeSpan;o(tG,"htmlBuilder$9");o(rG,"mathmlBuilder$8");Nt({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:di(i),isCharacterBox:Jt.isCharacterBox(i)}},htmlBuilder:tG,mathmlBuilder:rG});T3=o(t=>{var e=t.type==="ordgroup"&&t.body.length?t.body[0]:t;return e.type==="atom"&&(e.family==="bin"||e.family==="rel")?"m"+e.family:"mord"},"binrelClass");Nt({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(t,e){var{parser:r}=t;return{type:"mclass",mode:r.mode,mclass:T3(e[0]),body:di(e[1]),isCharacterBox:Jt.isCharacterBox(e[1])}}});Nt({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(t,e){var{parser:r,funcName:n}=t,i=e[1],a=e[0],s;n!=="\\stackrel"?s=T3(i):s="mrel";var l={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:n!=="\\stackrel",body:di(i)},u={type:"supsub",mode:a.mode,base:l,sup:n==="\\underset"?null:a,sub:n==="\\underset"?a:null};return{type:"mclass",mode:r.mode,mclass:s,body:[u],isCharacterBox:Jt.isCharacterBox(u)}},htmlBuilder:tG,mathmlBuilder:rG});Nt({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"pmb",mode:r.mode,mclass:T3(e[0]),body:di(e[0])}},htmlBuilder(t,e){var r=Pi(t.body,e,!0),n=Be.makeSpan([t.mclass],r,e);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(t,e){var r=ks(t.body,e),n=new dt.MathNode("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});h4e={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},yz=o(()=>({type:"styling",body:[],mode:"math",style:"display"}),"newCell"),vz=o(t=>t.type==="textord"&&t.text==="@","isStartOfArrow"),f4e=o((t,e)=>(t.type==="mathord"||t.type==="atom")&&t.text===e,"isLabelEnd");o(d4e,"cdArrow");o(p4e,"parseCD");Nt({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:e[0]}},htmlBuilder(t,e){var r=e.havingStyle(e.style.sup()),n=Be.wrapFragment(Fr(t.label,r,e),e);return n.classes.push("cd-label-"+t.side),n.style.bottom=kt(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(t,e){var r=new dt.MathNode("mrow",[yn(t.label,e)]);return r=new dt.MathNode("mpadded",[r]),r.setAttribute("width","0"),t.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new dt.MathNode("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});Nt({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(t,e){var{parser:r}=t;return{type:"cdlabelparent",mode:r.mode,fragment:e[0]}},htmlBuilder(t,e){var r=Be.wrapFragment(Fr(t.fragment,e),e);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(t,e){return new dt.MathNode("mrow",[yn(t.fragment,e)])}});Nt({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(t,e){for(var{parser:r}=t,n=xr(e[0],"ordgroup"),i=n.body,a="",s=0;s<i.length;s++){var l=xr(i[s],"textord");a+=l.text}var u=parseInt(a),h;if(isNaN(u))throw new gt("\\@char has non-numeric argument "+a);if(u<0||u>=1114111)throw new gt("\\@char with invalid code point "+a);return u<=65535?h=String.fromCharCode(u):(u-=65536,h=String.fromCharCode((u>>10)+55296,(u&1023)+56320)),{type:"textord",mode:r.mode,text:h}}});nG=o((t,e)=>{var r=Pi(t.body,e.withColor(t.color),!1);return Be.makeFragment(r)},"htmlBuilder$8"),iG=o((t,e)=>{var r=ks(t.body,e.withColor(t.color)),n=new dt.MathNode("mstyle",r);return n.setAttribute("mathcolor",t.color),n},"mathmlBuilder$7");Nt({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(t,e){var{parser:r}=t,n=xr(e[0],"color-token").color,i=e[1];return{type:"color",mode:r.mode,color:n,body:di(i)}},htmlBuilder:nG,mathmlBuilder:iG});Nt({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(t,e){var{parser:r,breakOnTokenText:n}=t,i=xr(e[0],"color-token").color;r.gullet.macros.set("\\current@color",i);var a=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:i,body:a}},htmlBuilder:nG,mathmlBuilder:iG});Nt({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(t,e,r){var{parser:n}=t,i=n.gullet.future().text==="["?n.parseSizeGroup(!0):null,a=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:a,size:i&&xr(i,"size").value}},htmlBuilder(t,e){var r=Be.makeSpan(["mspace"],[],e);return t.newLine&&(r.classes.push("newline"),t.size&&(r.style.marginTop=kt(ti(t.size,e)))),r},mathmlBuilder(t,e){var r=new dt.MathNode("mspace");return t.newLine&&(r.setAttribute("linebreak","newline"),t.size&&r.setAttribute("height",kt(ti(t.size,e)))),r}});L7={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},aG=o(t=>{var e=t.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(e))throw new gt("Expected a control sequence",t);return e},"checkControlSequence"),m4e=o(t=>{var e=t.gullet.popToken();return e.text==="="&&(e=t.gullet.popToken(),e.text===" "&&(e=t.gullet.popToken())),e},"getRHS"),sG=o((t,e,r,n)=>{var i=t.gullet.macros.get(r.text);i==null&&(r.noexpand=!0,i={tokens:[r],numArgs:0,unexpandable:!t.gullet.isExpandable(r.text)}),t.gullet.macros.set(e,i,n)},"letCommand");Nt({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e,funcName:r}=t;e.consumeSpaces();var n=e.fetch();if(L7[n.text])return(r==="\\global"||r==="\\\\globallong")&&(n.text=L7[n.text]),xr(e.parseFunction(),"internal");throw new gt("Invalid token after macro prefix",n)}});Nt({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=e.gullet.popToken(),i=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new gt("Expected a control sequence",n);for(var a=0,s,l=[[]];e.gullet.future().text!=="{";)if(n=e.gullet.popToken(),n.text==="#"){if(e.gullet.future().text==="{"){s=e.gullet.future(),l[a].push("{");break}if(n=e.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new gt('Invalid argument number "'+n.text+'"');if(parseInt(n.text)!==a+1)throw new gt('Argument number "'+n.text+'" out of order');a++,l.push([])}else{if(n.text==="EOF")throw new gt("Expected a macro definition");l[a].push(n.text)}var{tokens:u}=e.gullet.consumeArg();return s&&u.unshift(s),(r==="\\edef"||r==="\\xdef")&&(u=e.gullet.expandTokens(u),u.reverse()),e.gullet.macros.set(i,{tokens:u,numArgs:a,delimiters:l},r===L7[r]),{type:"internal",mode:e.mode}}});Nt({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=aG(e.gullet.popToken());e.gullet.consumeSpaces();var i=m4e(e);return sG(e,n,i,r==="\\\\globallet"),{type:"internal",mode:e.mode}}});Nt({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=aG(e.gullet.popToken()),i=e.gullet.popToken(),a=e.gullet.popToken();return sG(e,n,a,r==="\\\\globalfuture"),e.gullet.pushToken(a),e.gullet.pushToken(i),{type:"internal",mode:e.mode}}});Fy=o(function(e,r,n){var i=An.math[e]&&An.math[e].replace,a=P7(i||e,r,n);if(!a)throw new Error("Unsupported symbol "+e+" and font size "+r+".");return a},"getMetrics"),V7=o(function(e,r,n,i){var a=n.havingBaseStyle(r),s=Be.makeSpan(i.concat(a.sizingClasses(n)),[e],n),l=a.sizeMultiplier/n.sizeMultiplier;return s.height*=l,s.depth*=l,s.maxFontSize=a.sizeMultiplier,s},"styleWrap"),oG=o(function(e,r,n){var i=r.havingBaseStyle(n),a=(1-r.sizeMultiplier/i.sizeMultiplier)*r.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=kt(a),e.height-=a,e.depth+=a},"centerSpan"),g4e=o(function(e,r,n,i,a,s){var l=Be.makeSymbol(e,"Main-Regular",a,i),u=V7(l,r,i,s);return n&&oG(u,i,r),u},"makeSmallDelim"),y4e=o(function(e,r,n,i){return Be.makeSymbol(e,"Size"+r+"-Regular",n,i)},"mathrmSize"),lG=o(function(e,r,n,i,a,s){var l=y4e(e,r,a,i),u=V7(Be.makeSpan(["delimsizing","size"+r],[l],i),tr.TEXT,i,s);return n&&oG(u,i,tr.TEXT),u},"makeLargeDelim"),p7=o(function(e,r,n){var i;r==="Size1-Regular"?i="delim-size1":i="delim-size4";var a=Be.makeSpan(["delimsizinginner",i],[Be.makeSpan([],[Be.makeSymbol(e,r,n)])]);return{type:"elem",elem:a}},"makeGlyphSpan"),m7=o(function(e,r,n){var i=jl["Size4-Regular"][e.charCodeAt(0)]?jl["Size4-Regular"][e.charCodeAt(0)][4]:jl["Size1-Regular"][e.charCodeAt(0)][4],a=new Kl("inner",Sbe(e,Math.round(1e3*r))),s=new ll([a],{width:kt(i),height:kt(r),style:"width:"+kt(i),viewBox:"0 0 "+1e3*i+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),l=Be.makeSvgSpan([],[s],n);return l.height=r,l.style.height=kt(r),l.style.width=kt(i),{type:"elem",elem:l}},"makeInner"),R7=.008,o3={type:"kern",size:-1*R7},v4e=["|","\\lvert","\\rvert","\\vert"],x4e=["\\|","\\lVert","\\rVert","\\Vert"],cG=o(function(e,r,n,i,a,s){var l,u,h,f,d="",p=0;l=h=f=e,u=null;var m="Size1-Regular";e==="\\uparrow"?h=f="\u23D0":e==="\\Uparrow"?h=f="\u2016":e==="\\downarrow"?l=h="\u23D0":e==="\\Downarrow"?l=h="\u2016":e==="\\updownarrow"?(l="\\uparrow",h="\u23D0",f="\\downarrow"):e==="\\Updownarrow"?(l="\\Uparrow",h="\u2016",f="\\Downarrow"):Jt.contains(v4e,e)?(h="\u2223",d="vert",p=333):Jt.contains(x4e,e)?(h="\u2225",d="doublevert",p=556):e==="["||e==="\\lbrack"?(l="\u23A1",h="\u23A2",f="\u23A3",m="Size4-Regular",d="lbrack",p=667):e==="]"||e==="\\rbrack"?(l="\u23A4",h="\u23A5",f="\u23A6",m="Size4-Regular",d="rbrack",p=667):e==="\\lfloor"||e==="\u230A"?(h=l="\u23A2",f="\u23A3",m="Size4-Regular",d="lfloor",p=667):e==="\\lceil"||e==="\u2308"?(l="\u23A1",h=f="\u23A2",m="Size4-Regular",d="lceil",p=667):e==="\\rfloor"||e==="\u230B"?(h=l="\u23A5",f="\u23A6",m="Size4-Regular",d="rfloor",p=667):e==="\\rceil"||e==="\u2309"?(l="\u23A4",h=f="\u23A5",m="Size4-Regular",d="rceil",p=667):e==="("||e==="\\lparen"?(l="\u239B",h="\u239C",f="\u239D",m="Size4-Regular",d="lparen",p=875):e===")"||e==="\\rparen"?(l="\u239E",h="\u239F",f="\u23A0",m="Size4-Regular",d="rparen",p=875):e==="\\{"||e==="\\lbrace"?(l="\u23A7",u="\u23A8",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\}"||e==="\\rbrace"?(l="\u23AB",u="\u23AC",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lgroup"||e==="\u27EE"?(l="\u23A7",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\rgroup"||e==="\u27EF"?(l="\u23AB",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lmoustache"||e==="\u23B0"?(l="\u23A7",f="\u23AD",h="\u23AA",m="Size4-Regular"):(e==="\\rmoustache"||e==="\u23B1")&&(l="\u23AB",f="\u23A9",h="\u23AA",m="Size4-Regular");var g=Fy(l,m,a),y=g.height+g.depth,v=Fy(h,m,a),x=v.height+v.depth,b=Fy(f,m,a),w=b.height+b.depth,C=0,T=1;if(u!==null){var E=Fy(u,m,a);C=E.height+E.depth,T=2}var A=y+w+C,S=Math.max(0,Math.ceil((r-A)/(T*x))),_=A+S*T*x,I=i.fontMetrics().axisHeight;n&&(I*=i.sizeMultiplier);var D=_/2-I,k=[];if(d.length>0){var L=_-y-w,R=Math.round(_*1e3),O=Cbe(d,Math.round(L*1e3)),M=new Kl(d,O),B=(p/1e3).toFixed(3)+"em",F=(R/1e3).toFixed(3)+"em",P=new ll([M],{width:B,height:F,viewBox:"0 0 "+p+" "+R}),z=Be.makeSvgSpan([],[P],i);z.height=R/1e3,z.style.width=B,z.style.height=F,k.push({type:"elem",elem:z})}else{if(k.push(p7(f,m,a)),k.push(o3),u===null){var $=_-y-w+2*R7;k.push(m7(h,$,i))}else{var H=(_-y-w-C)/2+2*R7;k.push(m7(h,H,i)),k.push(o3),k.push(p7(u,m,a)),k.push(o3),k.push(m7(h,H,i))}k.push(o3),k.push(p7(l,m,a))}var Q=i.havingBaseStyle(tr.TEXT),j=Be.makeVList({positionType:"bottom",positionData:D,children:k},Q);return V7(Be.makeSpan(["delimsizing","mult"],[j],Q),tr.TEXT,i,s)},"makeStackedDelim"),g7=80,y7=.08,v7=o(function(e,r,n,i,a){var s=Ebe(e,i,n),l=new Kl(e,s),u=new ll([l],{width:"400em",height:kt(r),viewBox:"0 0 400000 "+n,preserveAspectRatio:"xMinYMin slice"});return Be.makeSvgSpan(["hide-tail"],[u],a)},"sqrtSvg"),b4e=o(function(e,r){var n=r.havingBaseSizing(),i=dG("\\surd",e*n.sizeMultiplier,fG,n),a=n.sizeMultiplier,s=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),l,u=0,h=0,f=0,d;return i.type==="small"?(f=1e3+1e3*s+g7,e<1?a=1:e<1.4&&(a=.7),u=(1+s+y7)/a,h=(1+s)/a,l=v7("sqrtMain",u,f,s,r),l.style.minWidth="0.853em",d=.833/a):i.type==="large"?(f=(1e3+g7)*$y[i.size],h=($y[i.size]+s)/a,u=($y[i.size]+s+y7)/a,l=v7("sqrtSize"+i.size,u,f,s,r),l.style.minWidth="1.02em",d=1/a):(u=e+s+y7,h=e+s,f=Math.floor(1e3*e+s)+g7,l=v7("sqrtTall",u,f,s,r),l.style.minWidth="0.742em",d=1.056),l.height=h,l.style.height=kt(u),{span:l,advanceWidth:d,ruleWidth:(r.fontMetrics().sqrtRuleThickness+s)*a}},"makeSqrtImage"),uG=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","\\surd"],w4e=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1"],hG=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],$y=[0,1.2,1.8,2.4,3],T4e=o(function(e,r,n,i,a){if(e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle"),Jt.contains(uG,e)||Jt.contains(hG,e))return lG(e,r,!1,n,i,a);if(Jt.contains(w4e,e))return cG(e,$y[r],!1,n,i,a);throw new gt("Illegal delimiter: '"+e+"'")},"makeSizedDelim"),k4e=[{type:"small",style:tr.SCRIPTSCRIPT},{type:"small",style:tr.SCRIPT},{type:"small",style:tr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],E4e=[{type:"small",style:tr.SCRIPTSCRIPT},{type:"small",style:tr.SCRIPT},{type:"small",style:tr.TEXT},{type:"stack"}],fG=[{type:"small",style:tr.SCRIPTSCRIPT},{type:"small",style:tr.SCRIPT},{type:"small",style:tr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],S4e=o(function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},"delimTypeToFont"),dG=o(function(e,r,n,i){for(var a=Math.min(2,3-i.style.size),s=a;s<n.length&&n[s].type!=="stack";s++){var l=Fy(e,S4e(n[s]),"math"),u=l.height+l.depth;if(n[s].type==="small"){var h=i.havingBaseStyle(n[s].style);u*=h.sizeMultiplier}if(u>r)return n[s]}return n[n.length-1]},"traverseSequence"),pG=o(function(e,r,n,i,a,s){e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle");var l;Jt.contains(hG,e)?l=k4e:Jt.contains(uG,e)?l=fG:l=E4e;var u=dG(e,r,l,i);return u.type==="small"?g4e(e,u.style,n,i,a,s):u.type==="large"?lG(e,u.size,n,i,a,s):cG(e,r,n,i,a,s)},"makeCustomSizedDelim"),C4e=o(function(e,r,n,i,a,s){var l=i.fontMetrics().axisHeight*i.sizeMultiplier,u=901,h=5/i.fontMetrics().ptPerEm,f=Math.max(r-l,n+l),d=Math.max(f/500*u,2*f-h);return pG(e,d,!0,i,a,s)},"makeLeftRightDelim"),ou={sqrtImage:b4e,sizedDelim:T4e,sizeToMaxHeight:$y,customSizedDelim:pG,leftRightDelim:C4e},xz={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},A4e=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27E8","\\rangle","\u27E9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];o(k3,"checkDelimiter");Nt({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:o((t,e)=>{var r=k3(e[0],t);return{type:"delimsizing",mode:t.parser.mode,size:xz[t.funcName].size,mclass:xz[t.funcName].mclass,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>t.delim==="."?Be.makeSpan([t.mclass]):ou.sizedDelim(t.delim,t.size,e,t.mode,[t.mclass]),"htmlBuilder"),mathmlBuilder:o(t=>{var e=[];t.delim!=="."&&e.push(Co(t.delim,t.mode));var r=new dt.MathNode("mo",e);t.mclass==="mopen"||t.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=kt(ou.sizeToMaxHeight[t.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r},"mathmlBuilder")});o(bz,"assertParsed");Nt({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=t.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new gt("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:t.parser.mode,delim:k3(e[0],t).text,color:r}},"handler")});Nt({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=k3(e[0],t),n=t.parser;++n.leftrightDepth;var i=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var a=xr(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:i,left:r.text,right:a.delim,rightColor:a.color}},"handler"),htmlBuilder:o((t,e)=>{bz(t);for(var r=Pi(t.body,e,!0,["mopen","mclose"]),n=0,i=0,a=!1,s=0;s<r.length;s++)r[s].isMiddle?a=!0:(n=Math.max(r[s].height,n),i=Math.max(r[s].depth,i));n*=e.sizeMultiplier,i*=e.sizeMultiplier;var l;if(t.left==="."?l=Hy(e,["mopen"]):l=ou.leftRightDelim(t.left,n,i,e,t.mode,["mopen"]),r.unshift(l),a)for(var u=1;u<r.length;u++){var h=r[u],f=h.isMiddle;f&&(r[u]=ou.leftRightDelim(f.delim,n,i,f.options,t.mode,[]))}var d;if(t.right===".")d=Hy(e,["mclose"]);else{var p=t.rightColor?e.withColor(t.rightColor):e;d=ou.leftRightDelim(t.right,n,i,p,t.mode,["mclose"])}return r.push(d),Be.makeSpan(["minner"],r,e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{bz(t);var r=ks(t.body,e);if(t.left!=="."){var n=new dt.MathNode("mo",[Co(t.left,t.mode)]);n.setAttribute("fence","true"),r.unshift(n)}if(t.right!=="."){var i=new dt.MathNode("mo",[Co(t.right,t.mode)]);i.setAttribute("fence","true"),t.rightColor&&i.setAttribute("mathcolor",t.rightColor),r.push(i)}return F7(r)},"mathmlBuilder")});Nt({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=k3(e[0],t);if(!t.parser.leftrightDepth)throw new gt("\\middle without preceding \\left",r);return{type:"middle",mode:t.parser.mode,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>{var r;if(t.delim===".")r=Hy(e,[]);else{r=ou.sizedDelim(t.delim,1,e,t.mode,[]);var n={delim:t.delim,options:e};r.isMiddle=n}return r},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=t.delim==="\\vert"||t.delim==="|"?Co("|","text"):Co(t.delim,t.mode),n=new dt.MathNode("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n},"mathmlBuilder")});U7=o((t,e)=>{var r=Be.wrapFragment(Fr(t.body,e),e),n=t.label.slice(1),i=e.sizeMultiplier,a,s=0,l=Jt.isCharacterBox(t.body);if(n==="sout")a=Be.makeSpan(["stretchy","sout"]),a.height=e.fontMetrics().defaultRuleThickness/i,s=-.5*e.fontMetrics().xHeight;else if(n==="phase"){var u=ti({number:.6,unit:"pt"},e),h=ti({number:.35,unit:"ex"},e),f=e.havingBaseSizing();i=i/f.sizeMultiplier;var d=r.height+r.depth+u+h;r.style.paddingLeft=kt(d/2+u);var p=Math.floor(1e3*d*i),m=Tbe(p),g=new ll([new Kl("phase",m)],{width:"400em",height:kt(p/1e3),viewBox:"0 0 400000 "+p,preserveAspectRatio:"xMinYMin slice"});a=Be.makeSvgSpan(["hide-tail"],[g],e),a.style.height=kt(d),s=r.depth+u+h}else{/cancel/.test(n)?l||r.classes.push("cancel-pad"):n==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var y=0,v=0,x=0;/box/.test(n)?(x=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),y=e.fontMetrics().fboxsep+(n==="colorbox"?0:x),v=y):n==="angl"?(x=Math.max(e.fontMetrics().defaultRuleThickness,e.minRuleThickness),y=4*x,v=Math.max(0,.25-r.depth)):(y=l?.2:0,v=y),a=cu.encloseSpan(r,n,y,v,e),/fbox|boxed|fcolorbox/.test(n)?(a.style.borderStyle="solid",a.style.borderWidth=kt(x)):n==="angl"&&x!==.049&&(a.style.borderTopWidth=kt(x),a.style.borderRightWidth=kt(x)),s=r.depth+v,t.backgroundColor&&(a.style.backgroundColor=t.backgroundColor,t.borderColor&&(a.style.borderColor=t.borderColor))}var b;if(t.backgroundColor)b=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:a,shift:s},{type:"elem",elem:r,shift:0}]},e);else{var w=/cancel|phase/.test(n)?["svg-align"]:[];b=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:a,shift:s,wrapperClasses:w}]},e)}return/cancel/.test(n)&&(b.height=r.height,b.depth=r.depth),/cancel/.test(n)&&!l?Be.makeSpan(["mord","cancel-lap"],[b],e):Be.makeSpan(["mord"],[b],e)},"htmlBuilder$7"),H7=o((t,e)=>{var r=0,n=new dt.MathNode(t.label.indexOf("colorbox")>-1?"mpadded":"menclose",[yn(t.body,e)]);switch(t.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),t.label==="\\fcolorbox"){var i=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);n.setAttribute("style","border: "+i+"em solid "+String(t.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return t.backgroundColor&&n.setAttribute("mathbackground",t.backgroundColor),n},"mathmlBuilder$6");Nt({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=xr(e[0],"color-token").color,s=e[1];return{type:"enclose",mode:n.mode,label:i,backgroundColor:a,body:s}},htmlBuilder:U7,mathmlBuilder:H7});Nt({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=xr(e[0],"color-token").color,s=xr(e[1],"color-token").color,l=e[2];return{type:"enclose",mode:n.mode,label:i,backgroundColor:s,borderColor:a,body:l}},htmlBuilder:U7,mathmlBuilder:H7});Nt({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\fbox",body:e[0]}}});Nt({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"enclose",mode:r.mode,label:n,body:i}},htmlBuilder:U7,mathmlBuilder:H7});Nt({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\angl",body:e[0]}}});mG={};o(Ql,"defineEnvironment");gG={};o(fe,"defineMacro");o(wz,"getHLines");E3=o(t=>{var e=t.parser.settings;if(!e.displayMode)throw new gt("{"+t.envName+"} can be used only in display mode.")},"validateAmsEnvironmentContext");o(W7,"getAutoTag");o(ph,"parseArray");o(q7,"dCellStyle");Zl=o(function(e,r){var n,i,a=e.body.length,s=e.hLinesBeforeRow,l=0,u=new Array(a),h=[],f=Math.max(r.fontMetrics().arrayRuleWidth,r.minRuleThickness),d=1/r.fontMetrics().ptPerEm,p=5*d;if(e.colSeparationType&&e.colSeparationType==="small"){var m=r.havingStyle(tr.SCRIPT).sizeMultiplier;p=.2778*(m/r.sizeMultiplier)}var g=e.colSeparationType==="CD"?ti({number:3,unit:"ex"},r):12*d,y=3*d,v=e.arraystretch*g,x=.7*v,b=.3*v,w=0;function C(ae){for(var Oe=0;Oe<ae.length;++Oe)Oe>0&&(w+=.25),h.push({pos:w,isDashed:ae[Oe]})}for(o(C,"setHLinePos"),C(s[0]),n=0;n<e.body.length;++n){var T=e.body[n],E=x,A=b;l<T.length&&(l=T.length);var S=new Array(T.length);for(i=0;i<T.length;++i){var _=Fr(T[i],r);A<_.depth&&(A=_.depth),E<_.height&&(E=_.height),S[i]=_}var I=e.rowGaps[n],D=0;I&&(D=ti(I,r),D>0&&(D+=b,A<D&&(A=D),D=0)),e.addJot&&(A+=y),S.height=E,S.depth=A,w+=E,S.pos=w,w+=A+D,u[n]=S,C(s[n+1])}var k=w/2+r.fontMetrics().axisHeight,L=e.cols||[],R=[],O,M,B=[];if(e.tags&&e.tags.some(ae=>ae))for(n=0;n<a;++n){var F=u[n],P=F.pos-k,z=e.tags[n],$=void 0;z===!0?$=Be.makeSpan(["eqn-num"],[],r):z===!1?$=Be.makeSpan([],[],r):$=Be.makeSpan([],Pi(z,r,!0),r),$.depth=F.depth,$.height=F.height,B.push({type:"elem",elem:$,shift:P})}for(i=0,M=0;i<l||M<L.length;++i,++M){for(var H=L[M]||{},Q=!0;H.type==="separator";){if(Q||(O=Be.makeSpan(["arraycolsep"],[]),O.style.width=kt(r.fontMetrics().doubleRuleSep),R.push(O)),H.separator==="|"||H.separator===":"){var j=H.separator==="|"?"solid":"dashed",ie=Be.makeSpan(["vertical-separator"],[],r);ie.style.height=kt(w),ie.style.borderRightWidth=kt(f),ie.style.borderRightStyle=j,ie.style.margin="0 "+kt(-f/2);var ne=w-k;ne&&(ie.style.verticalAlign=kt(-ne)),R.push(ie)}else throw new gt("Invalid separator type: "+H.separator);M++,H=L[M]||{},Q=!1}if(!(i>=l)){var le=void 0;(i>0||e.hskipBeforeAndAfter)&&(le=Jt.deflt(H.pregap,p),le!==0&&(O=Be.makeSpan(["arraycolsep"],[]),O.style.width=kt(le),R.push(O)));var he=[];for(n=0;n<a;++n){var K=u[n],X=K[i];if(X){var te=K.pos-k;X.depth=K.depth,X.height=K.height,he.push({type:"elem",elem:X,shift:te})}}he=Be.makeVList({positionType:"individualShift",children:he},r),he=Be.makeSpan(["col-align-"+(H.align||"c")],[he]),R.push(he),(i<l-1||e.hskipBeforeAndAfter)&&(le=Jt.deflt(H.postgap,p),le!==0&&(O=Be.makeSpan(["arraycolsep"],[]),O.style.width=kt(le),R.push(O)))}}if(u=Be.makeSpan(["mtable"],R),h.length>0){for(var J=Be.makeLineSpan("hline",r,f),se=Be.makeLineSpan("hdashline",r,f),ue=[{type:"elem",elem:u,shift:0}];h.length>0;){var Z=h.pop(),Se=Z.pos-k;Z.isDashed?ue.push({type:"elem",elem:se,shift:Se}):ue.push({type:"elem",elem:J,shift:Se})}u=Be.makeVList({positionType:"individualShift",children:ue},r)}if(B.length===0)return Be.makeSpan(["mord"],[u],r);var ce=Be.makeVList({positionType:"individualShift",children:B},r);return ce=Be.makeSpan(["tag"],[ce],r),Be.makeFragment([u,ce])},"htmlBuilder"),_4e={c:"center ",l:"left ",r:"right "},Jl=o(function(e,r){for(var n=[],i=new dt.MathNode("mtd",[],["mtr-glue"]),a=new dt.MathNode("mtd",[],["mml-eqn-num"]),s=0;s<e.body.length;s++){for(var l=e.body[s],u=[],h=0;h<l.length;h++)u.push(new dt.MathNode("mtd",[yn(l[h],r)]));e.tags&&e.tags[s]&&(u.unshift(i),u.push(i),e.leqno?u.unshift(a):u.push(a)),n.push(new dt.MathNode("mtr",u))}var f=new dt.MathNode("mtable",n),d=e.arraystretch===.5?.1:.16+e.arraystretch-1+(e.addJot?.09:0);f.setAttribute("rowspacing",kt(d));var p="",m="";if(e.cols&&e.cols.length>0){var g=e.cols,y="",v=!1,x=0,b=g.length;g[0].type==="separator"&&(p+="top ",x=1),g[g.length-1].type==="separator"&&(p+="bottom ",b-=1);for(var w=x;w<b;w++)g[w].type==="align"?(m+=_4e[g[w].align],v&&(y+="none "),v=!0):g[w].type==="separator"&&v&&(y+=g[w].separator==="|"?"solid ":"dashed ",v=!1);f.setAttribute("columnalign",m.trim()),/[sd]/.test(y)&&f.setAttribute("columnlines",y.trim())}if(e.colSeparationType==="align"){for(var C=e.cols||[],T="",E=1;E<C.length;E++)T+=E%2?"0em ":"1em ";f.setAttribute("columnspacing",T.trim())}else e.colSeparationType==="alignat"||e.colSeparationType==="gather"?f.setAttribute("columnspacing","0em"):e.colSeparationType==="small"?f.setAttribute("columnspacing","0.2778em"):e.colSeparationType==="CD"?f.setAttribute("columnspacing","0.5em"):f.setAttribute("columnspacing","1em");var A="",S=e.hLinesBeforeRow;p+=S[0].length>0?"left ":"",p+=S[S.length-1].length>0?"right ":"";for(var _=1;_<S.length-1;_++)A+=S[_].length===0?"none ":S[_][0]?"dashed ":"solid ";return/[sd]/.test(A)&&f.setAttribute("rowlines",A.trim()),p!==""&&(f=new dt.MathNode("menclose",[f]),f.setAttribute("notation",p.trim())),e.arraystretch&&e.arraystretch<1&&(f=new dt.MathNode("mstyle",[f]),f.setAttribute("scriptlevel","1")),f},"mathmlBuilder"),yG=o(function(e,r){e.envName.indexOf("ed")===-1&&E3(e);var n=[],i=e.envName.indexOf("at")>-1?"alignat":"align",a=e.envName==="split",s=ph(e.parser,{cols:n,addJot:!0,autoTag:a?void 0:W7(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:a?2:void 0,leqno:e.parser.settings.leqno},"display"),l,u=0,h={type:"ordgroup",mode:e.mode,body:[]};if(r[0]&&r[0].type==="ordgroup"){for(var f="",d=0;d<r[0].body.length;d++){var p=xr(r[0].body[d],"textord");f+=p.text}l=Number(f),u=l*2}var m=!u;s.body.forEach(function(x){for(var b=1;b<x.length;b+=2){var w=xr(x[b],"styling"),C=xr(w.body[0],"ordgroup");C.body.unshift(h)}if(m)u<x.length&&(u=x.length);else{var T=x.length/2;if(l<T)throw new gt("Too many math in a row: "+("expected "+l+", but got "+T),x[0])}});for(var g=0;g<u;++g){var y="r",v=0;g%2===1?y="l":g>0&&m&&(v=1),n[g]={type:"align",align:y,pregap:v,postgap:0}}return s.colSeparationType=m?"align":"alignat",s},"alignedHandler");Ql({type:"array",names:["array","darray"],props:{numArgs:1},handler(t,e){var r=w3(e[0]),n=r?[e[0]]:xr(e[0],"ordgroup").body,i=n.map(function(s){var l=z7(s),u=l.text;if("lcr".indexOf(u)!==-1)return{type:"align",align:u};if(u==="|")return{type:"separator",separator:"|"};if(u===":")return{type:"separator",separator:":"};throw new gt("Unknown column alignment: "+u,s)}),a={cols:i,hskipBeforeAndAfter:!0,maxNumCols:i.length};return ph(t.parser,a,q7(t.envName))},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(t){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[t.envName.replace("*","")],r="c",n={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(t.envName.charAt(t.envName.length-1)==="*"){var i=t.parser;if(i.consumeSpaces(),i.fetch().text==="["){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,"lcr".indexOf(r)===-1)throw new gt("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),n.cols=[{type:"align",align:r}]}}var a=ph(t.parser,n,q7(t.envName)),s=Math.max(0,...a.body.map(l=>l.length));return a.cols=new Array(s).fill({type:"align",align:r}),e?{type:"leftright",mode:t.mode,body:[a],left:e[0],right:e[1],rightColor:void 0}:a},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(t){var e={arraystretch:.5},r=ph(t.parser,e,"script");return r.colSeparationType="small",r},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["subarray"],props:{numArgs:1},handler(t,e){var r=w3(e[0]),n=r?[e[0]]:xr(e[0],"ordgroup").body,i=n.map(function(s){var l=z7(s),u=l.text;if("lc".indexOf(u)!==-1)return{type:"align",align:u};throw new gt("Unknown column alignment: "+u,s)});if(i.length>1)throw new gt("{subarray} can contain only one column");var a={cols:i,hskipBeforeAndAfter:!1,arraystretch:.5};if(a=ph(t.parser,a,"script"),a.body.length>0&&a.body[0].length>1)throw new gt("{subarray} can contain only one column");return a},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(t){var e={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=ph(t.parser,e,q7(t.envName));return{type:"leftright",mode:t.mode,body:[r],left:t.envName.indexOf("r")>-1?".":"\\{",right:t.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:yG,htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(t){Jt.contains(["gather","gather*"],t.envName)&&E3(t);var e={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:W7(t.envName),emptySingleRow:!0,leqno:t.parser.settings.leqno};return ph(t.parser,e,"display")},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:yG,htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(t){E3(t);var e={autoTag:W7(t.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:t.parser.settings.leqno};return ph(t.parser,e,"display")},htmlBuilder:Zl,mathmlBuilder:Jl});Ql({type:"array",names:["CD"],props:{numArgs:0},handler(t){return E3(t),p4e(t.parser)},htmlBuilder:Zl,mathmlBuilder:Jl});fe("\\nonumber","\\gdef\\@eqnsw{0}");fe("\\notag","\\nonumber");Nt({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(t,e){throw new gt(t.funcName+" valid only within array environment")}});Tz=mG;Nt({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];if(i.type!=="ordgroup")throw new gt("Invalid environment name",i);for(var a="",s=0;s<i.body.length;++s)a+=xr(i.body[s],"textord").text;if(n==="\\begin"){if(!Tz.hasOwnProperty(a))throw new gt("No such environment: "+a,i);var l=Tz[a],{args:u,optArgs:h}=r.parseArguments("\\begin{"+a+"}",l),f={mode:r.mode,envName:a,parser:r},d=l.handler(f,u,h);r.expect("\\end",!1);var p=r.nextToken,m=xr(r.parseFunction(),"environment");if(m.name!==a)throw new gt("Mismatch: \\begin{"+a+"} matched by \\end{"+m.name+"}",p);return d}return{type:"environment",mode:r.mode,name:a,nameGroup:i}}});vG=o((t,e)=>{var r=t.font,n=e.withFont(r);return Fr(t.body,n)},"htmlBuilder$5"),xG=o((t,e)=>{var r=t.font,n=e.withFont(r);return yn(t.body,n)},"mathmlBuilder$4"),kz={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};Nt({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=g3(e[0]),a=n;return a in kz&&(a=kz[a]),{type:"font",mode:r.mode,font:a.slice(1),body:i}},"handler"),htmlBuilder:vG,mathmlBuilder:xG});Nt({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r}=t,n=e[0],i=Jt.isCharacterBox(n);return{type:"mclass",mode:r.mode,mclass:T3(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:i}},"handler")});Nt({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n,breakOnTokenText:i}=t,{mode:a}=r,s=r.parseExpression(!0,i),l="math"+n.slice(1);return{type:"font",mode:a,font:l,body:{type:"ordgroup",mode:r.mode,body:s}}},"handler"),htmlBuilder:vG,mathmlBuilder:xG});bG=o((t,e)=>{var r=e;return t==="display"?r=r.id>=tr.SCRIPT.id?r.text():tr.DISPLAY:t==="text"&&r.size===tr.DISPLAY.size?r=tr.TEXT:t==="script"?r=tr.SCRIPT:t==="scriptscript"&&(r=tr.SCRIPTSCRIPT),r},"adjustStyle"),Y7=o((t,e)=>{var r=bG(t.size,e.style),n=r.fracNum(),i=r.fracDen(),a;a=e.havingStyle(n);var s=Fr(t.numer,a,e);if(t.continued){var l=8.5/e.fontMetrics().ptPerEm,u=3.5/e.fontMetrics().ptPerEm;s.height=s.height<l?l:s.height,s.depth=s.depth<u?u:s.depth}a=e.havingStyle(i);var h=Fr(t.denom,a,e),f,d,p;t.hasBarLine?(t.barSize?(d=ti(t.barSize,e),f=Be.makeLineSpan("frac-line",e,d)):f=Be.makeLineSpan("frac-line",e),d=f.height,p=f.height):(f=null,d=0,p=e.fontMetrics().defaultRuleThickness);var m,g,y;r.size===tr.DISPLAY.size||t.size==="display"?(m=e.fontMetrics().num1,d>0?g=3*p:g=7*p,y=e.fontMetrics().denom1):(d>0?(m=e.fontMetrics().num2,g=p):(m=e.fontMetrics().num3,g=3*p),y=e.fontMetrics().denom2);var v;if(f){var b=e.fontMetrics().axisHeight;m-s.depth-(b+.5*d)<g&&(m+=g-(m-s.depth-(b+.5*d))),b-.5*d-(h.height-y)<g&&(y+=g-(b-.5*d-(h.height-y)));var w=-(b-.5*d);v=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:h,shift:y},{type:"elem",elem:f,shift:w},{type:"elem",elem:s,shift:-m}]},e)}else{var x=m-s.depth-(h.height-y);x<g&&(m+=.5*(g-x),y+=.5*(g-x)),v=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:h,shift:y},{type:"elem",elem:s,shift:-m}]},e)}a=e.havingStyle(r),v.height*=a.sizeMultiplier/e.sizeMultiplier,v.depth*=a.sizeMultiplier/e.sizeMultiplier;var C;r.size===tr.DISPLAY.size?C=e.fontMetrics().delim1:r.size===tr.SCRIPTSCRIPT.size?C=e.havingStyle(tr.SCRIPT).fontMetrics().delim2:C=e.fontMetrics().delim2;var T,E;return t.leftDelim==null?T=Hy(e,["mopen"]):T=ou.customSizedDelim(t.leftDelim,C,!0,e.havingStyle(r),t.mode,["mopen"]),t.continued?E=Be.makeSpan([]):t.rightDelim==null?E=Hy(e,["mclose"]):E=ou.customSizedDelim(t.rightDelim,C,!0,e.havingStyle(r),t.mode,["mclose"]),Be.makeSpan(["mord"].concat(a.sizingClasses(e)),[T,Be.makeSpan(["mfrac"],[v]),E],e)},"htmlBuilder$4"),X7=o((t,e)=>{var r=new dt.MathNode("mfrac",[yn(t.numer,e),yn(t.denom,e)]);if(!t.hasBarLine)r.setAttribute("linethickness","0px");else if(t.barSize){var n=ti(t.barSize,e);r.setAttribute("linethickness",kt(n))}var i=bG(t.size,e.style);if(i.size!==e.style.size){r=new dt.MathNode("mstyle",[r]);var a=i.size===tr.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",a),r.setAttribute("scriptlevel","0")}if(t.leftDelim!=null||t.rightDelim!=null){var s=[];if(t.leftDelim!=null){var l=new dt.MathNode("mo",[new dt.TextNode(t.leftDelim.replace("\\",""))]);l.setAttribute("fence","true"),s.push(l)}if(s.push(r),t.rightDelim!=null){var u=new dt.MathNode("mo",[new dt.TextNode(t.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),s.push(u)}return F7(s)}return r},"mathmlBuilder$3");Nt({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1],s,l=null,u=null,h="auto";switch(n){case"\\dfrac":case"\\frac":case"\\tfrac":s=!0;break;case"\\\\atopfrac":s=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":s=!1,l="(",u=")";break;case"\\\\bracefrac":s=!1,l="\\{",u="\\}";break;case"\\\\brackfrac":s=!1,l="[",u="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text";break}return{type:"genfrac",mode:r.mode,continued:!1,numer:i,denom:a,hasBarLine:s,leftDelim:l,rightDelim:u,size:h,barSize:null}},"handler"),htmlBuilder:Y7,mathmlBuilder:X7});Nt({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:i,denom:a,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}},"handler")});Nt({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(t){var{parser:e,funcName:r,token:n}=t,i;switch(r){case"\\over":i="\\frac";break;case"\\choose":i="\\binom";break;case"\\atop":i="\\\\atopfrac";break;case"\\brace":i="\\\\bracefrac";break;case"\\brack":i="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:i,token:n}}});Ez=["display","text","script","scriptscript"],Sz=o(function(e){var r=null;return e.length>0&&(r=e,r=r==="."?null:r),r},"delimFromValue");Nt({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(t,e){var{parser:r}=t,n=e[4],i=e[5],a=g3(e[0]),s=a.type==="atom"&&a.family==="open"?Sz(a.text):null,l=g3(e[1]),u=l.type==="atom"&&l.family==="close"?Sz(l.text):null,h=xr(e[2],"size"),f,d=null;h.isBlank?f=!0:(d=h.value,f=d.number>0);var p="auto",m=e[3];if(m.type==="ordgroup"){if(m.body.length>0){var g=xr(m.body[0],"textord");p=Ez[Number(g.text)]}}else m=xr(m,"textord"),p=Ez[Number(m.text)];return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:f,barSize:d,leftDelim:s,rightDelim:u,size:p}},htmlBuilder:Y7,mathmlBuilder:X7});Nt({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(t,e){var{parser:r,funcName:n,token:i}=t;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:xr(e[0],"size").value,token:i}}});Nt({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=obe(xr(e[1],"infix").size),s=e[2],l=a.number>0;return{type:"genfrac",mode:r.mode,numer:i,denom:s,continued:!1,hasBarLine:l,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},"handler"),htmlBuilder:Y7,mathmlBuilder:X7});wG=o((t,e)=>{var r=e.style,n,i;t.type==="supsub"?(n=t.sup?Fr(t.sup,e.havingStyle(r.sup()),e):Fr(t.sub,e.havingStyle(r.sub()),e),i=xr(t.base,"horizBrace")):i=xr(t,"horizBrace");var a=Fr(i.base,e.havingBaseStyle(tr.DISPLAY)),s=cu.svgSpan(i,e),l;if(i.isOver?(l=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:.1},{type:"elem",elem:s}]},e),l.children[0].children[0].children[1].classes.push("svg-align")):(l=Be.makeVList({positionType:"bottom",positionData:a.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:a}]},e),l.children[0].children[0].children[0].classes.push("svg-align")),n){var u=Be.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e);i.isOver?l=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:u},{type:"kern",size:.2},{type:"elem",elem:n}]},e):l=Be.makeVList({positionType:"bottom",positionData:u.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:u}]},e)}return Be.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e)},"htmlBuilder$3"),D4e=o((t,e)=>{var r=cu.mathMLnode(t.label);return new dt.MathNode(t.isOver?"mover":"munder",[yn(t.base,e),r])},"mathmlBuilder$2");Nt({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:e[0]}},htmlBuilder:wG,mathmlBuilder:D4e});Nt({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[1],i=xr(e[0],"url").url;return r.settings.isTrusted({command:"\\href",url:i})?{type:"href",mode:r.mode,href:i,body:di(n)}:r.formatUnsupportedCmd("\\href")},"handler"),htmlBuilder:o((t,e)=>{var r=Pi(t.body,e,!1);return Be.makeAnchor(t.href,[],r,e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=dh(t.body,e);return r instanceof ws||(r=new ws("mrow",[r])),r.setAttribute("href",t.href),r},"mathmlBuilder")});Nt({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=xr(e[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var i=[],a=0;a<n.length;a++){var s=n[a];s==="~"&&(s="\\textasciitilde"),i.push({type:"textord",mode:"text",text:s})}var l={type:"text",mode:r.mode,font:"\\texttt",body:i};return{type:"href",mode:r.mode,href:n,body:di(l)}},"handler")});Nt({type:"hbox",names:["\\hbox"],props:{numArgs:1,argTypes:["text"],allowedInText:!0,primitive:!0},handler(t,e){var{parser:r}=t;return{type:"hbox",mode:r.mode,body:di(e[0])}},htmlBuilder(t,e){var r=Pi(t.body,e,!1);return Be.makeFragment(r)},mathmlBuilder(t,e){return new dt.MathNode("mrow",ks(t.body,e))}});Nt({type:"html",names:["\\htmlClass","\\htmlId","\\htmlStyle","\\htmlData"],props:{numArgs:2,argTypes:["raw","original"],allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n,token:i}=t,a=xr(e[0],"raw").string,s=e[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var l,u={};switch(n){case"\\htmlClass":u.class=a,l={command:"\\htmlClass",class:a};break;case"\\htmlId":u.id=a,l={command:"\\htmlId",id:a};break;case"\\htmlStyle":u.style=a,l={command:"\\htmlStyle",style:a};break;case"\\htmlData":{for(var h=a.split(","),f=0;f<h.length;f++){var d=h[f].split("=");if(d.length!==2)throw new gt("Error parsing key-value for \\htmlData");u["data-"+d[0].trim()]=d[1].trim()}l={command:"\\htmlData",attributes:u};break}default:throw new Error("Unrecognized html command")}return r.settings.isTrusted(l)?{type:"html",mode:r.mode,attributes:u,body:di(s)}:r.formatUnsupportedCmd(n)},"handler"),htmlBuilder:o((t,e)=>{var r=Pi(t.body,e,!1),n=["enclosing"];t.attributes.class&&n.push(...t.attributes.class.trim().split(/\s+/));var i=Be.makeSpan(n,r,e);for(var a in t.attributes)a!=="class"&&t.attributes.hasOwnProperty(a)&&i.setAttribute(a,t.attributes[a]);return i},"htmlBuilder"),mathmlBuilder:o((t,e)=>dh(t.body,e),"mathmlBuilder")});Nt({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"htmlmathml",mode:r.mode,html:di(e[0]),mathml:di(e[1])}},"handler"),htmlBuilder:o((t,e)=>{var r=Pi(t.html,e,!1);return Be.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>dh(t.mathml,e),"mathmlBuilder")});x7=o(function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!r)throw new gt("Invalid size: '"+e+"' in \\includegraphics");var n={number:+(r[1]+r[2]),unit:r[3]};if(!zz(n))throw new gt("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n},"sizeData");Nt({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:o((t,e,r)=>{var{parser:n}=t,i={number:0,unit:"em"},a={number:.9,unit:"em"},s={number:0,unit:"em"},l="";if(r[0])for(var u=xr(r[0],"raw").string,h=u.split(","),f=0;f<h.length;f++){var d=h[f].split("=");if(d.length===2){var p=d[1].trim();switch(d[0].trim()){case"alt":l=p;break;case"width":i=x7(p);break;case"height":a=x7(p);break;case"totalheight":s=x7(p);break;default:throw new gt("Invalid key: '"+d[0]+"' in \\includegraphics.")}}}var m=xr(e[0],"url").url;return l===""&&(l=m,l=l.replace(/^.*[\\/]/,""),l=l.substring(0,l.lastIndexOf("."))),n.settings.isTrusted({command:"\\includegraphics",url:m})?{type:"includegraphics",mode:n.mode,alt:l,width:i,height:a,totalheight:s,src:m}:n.formatUnsupportedCmd("\\includegraphics")},"handler"),htmlBuilder:o((t,e)=>{var r=ti(t.height,e),n=0;t.totalheight.number>0&&(n=ti(t.totalheight,e)-r);var i=0;t.width.number>0&&(i=ti(t.width,e));var a={height:kt(r+n)};i>0&&(a.width=kt(i)),n>0&&(a.verticalAlign=kt(-n));var s=new S7(t.src,t.alt,a);return s.height=r,s.depth=n,s},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new dt.MathNode("mglyph",[]);r.setAttribute("alt",t.alt);var n=ti(t.height,e),i=0;if(t.totalheight.number>0&&(i=ti(t.totalheight,e)-n,r.setAttribute("valign",kt(-i))),r.setAttribute("height",kt(n+i)),t.width.number>0){var a=ti(t.width,e);r.setAttribute("width",kt(a))}return r.setAttribute("src",t.src),r},"mathmlBuilder")});Nt({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=xr(e[0],"size");if(r.settings.strict){var a=n[1]==="m",s=i.value.unit==="mu";a?(s||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, "+("not "+i.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):s&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:i.value}},htmlBuilder(t,e){return Be.makeGlue(t.dimension,e)},mathmlBuilder(t,e){var r=ti(t.dimension,e);return new dt.SpaceNode(r)}});Nt({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:i}},"handler"),htmlBuilder:o((t,e)=>{var r;t.alignment==="clap"?(r=Be.makeSpan([],[Fr(t.body,e)]),r=Be.makeSpan(["inner"],[r],e)):r=Be.makeSpan(["inner"],[Fr(t.body,e)]);var n=Be.makeSpan(["fix"],[]),i=Be.makeSpan([t.alignment],[r,n],e),a=Be.makeSpan(["strut"]);return a.style.height=kt(i.height+i.depth),i.depth&&(a.style.verticalAlign=kt(-i.depth)),i.children.unshift(a),i=Be.makeSpan(["thinbox"],[i],e),Be.makeSpan(["mord","vbox"],[i],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new dt.MathNode("mpadded",[yn(t.body,e)]);if(t.alignment!=="rlap"){var n=t.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r},"mathmlBuilder")});Nt({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){var{funcName:r,parser:n}=t,i=n.mode;n.switchMode("math");var a=r==="\\("?"\\)":"$",s=n.parseExpression(!1,a);return n.expect(a),n.switchMode(i),{type:"styling",mode:n.mode,style:"text",body:s}}});Nt({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){throw new gt("Mismatched "+t.funcName)}});Cz=o((t,e)=>{switch(e.style.size){case tr.DISPLAY.size:return t.display;case tr.TEXT.size:return t.text;case tr.SCRIPT.size:return t.script;case tr.SCRIPTSCRIPT.size:return t.scriptscript;default:return t.text}},"chooseMathStyle");Nt({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"mathchoice",mode:r.mode,display:di(e[0]),text:di(e[1]),script:di(e[2]),scriptscript:di(e[3])}},"handler"),htmlBuilder:o((t,e)=>{var r=Cz(t,e),n=Pi(r,e,!1);return Be.makeFragment(n)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=Cz(t,e);return dh(r,e)},"mathmlBuilder")});TG=o((t,e,r,n,i,a,s)=>{t=Be.makeSpan([],[t]);var l=r&&Jt.isCharacterBox(r),u,h;if(e){var f=Fr(e,n.havingStyle(i.sup()),n);h={elem:f,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-f.depth)}}if(r){var d=Fr(r,n.havingStyle(i.sub()),n);u={elem:d,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-d.height)}}var p;if(h&&u){var m=n.fontMetrics().bigOpSpacing5+u.elem.height+u.elem.depth+u.kern+t.depth+s;p=Be.makeVList({positionType:"bottom",positionData:m,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:kt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:kt(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(u){var g=t.height-s;p=Be.makeVList({positionType:"top",positionData:g,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:kt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t}]},n)}else if(h){var y=t.depth+s;p=Be.makeVList({positionType:"bottom",positionData:y,children:[{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:kt(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else return t;var v=[p];if(u&&a!==0&&!l){var x=Be.makeSpan(["mspace"],[],n);x.style.marginRight=kt(a),v.unshift(x)}return Be.makeSpan(["mop","op-limits"],v,n)},"assembleSupSub"),kG=["\\smallint"],m0=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=xr(t.base,"op"),i=!0):a=xr(t,"op");var s=e.style,l=!1;s.size===tr.DISPLAY.size&&a.symbol&&!Jt.contains(kG,a.name)&&(l=!0);var u;if(a.symbol){var h=l?"Size2-Regular":"Size1-Regular",f="";if((a.name==="\\oiint"||a.name==="\\oiiint")&&(f=a.name.slice(1),a.name=f==="oiint"?"\\iint":"\\iiint"),u=Be.makeSymbol(a.name,h,"math",e,["mop","op-symbol",l?"large-op":"small-op"]),f.length>0){var d=u.italic,p=Be.staticSvg(f+"Size"+(l?"2":"1"),e);u=Be.makeVList({positionType:"individualShift",children:[{type:"elem",elem:u,shift:0},{type:"elem",elem:p,shift:l?.08:0}]},e),a.name="\\"+f,u.classes.unshift("mop"),u.italic=d}}else if(a.body){var m=Pi(a.body,e,!0);m.length===1&&m[0]instanceof Ts?(u=m[0],u.classes[0]="mop"):u=Be.makeSpan(["mop"],m,e)}else{for(var g=[],y=1;y<a.name.length;y++)g.push(Be.mathsym(a.name[y],a.mode,e));u=Be.makeSpan(["mop"],g,e)}var v=0,x=0;return(u instanceof Ts||a.name==="\\oiint"||a.name==="\\oiiint")&&!a.suppressBaseShift&&(v=(u.height-u.depth)/2-e.fontMetrics().axisHeight,x=u.italic),i?TG(u,r,n,e,s,x,v):(v&&(u.style.position="relative",u.style.top=kt(v)),u)},"htmlBuilder$2"),Wy=o((t,e)=>{var r;if(t.symbol)r=new ws("mo",[Co(t.name,t.mode)]),Jt.contains(kG,t.name)&&r.setAttribute("largeop","false");else if(t.body)r=new ws("mo",ks(t.body,e));else{r=new ws("mi",[new Jf(t.name.slice(1))]);var n=new ws("mo",[Co("\u2061","text")]);t.parentIsSupSub?r=new ws("mrow",[r,n]):r=Qz([r,n])}return r},"mathmlBuilder$1"),L4e={"\u220F":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22C0":"\\bigwedge","\u22C1":"\\bigvee","\u22C2":"\\bigcap","\u22C3":"\\bigcup","\u2A00":"\\bigodot","\u2A01":"\\bigoplus","\u2A02":"\\bigotimes","\u2A04":"\\biguplus","\u2A06":"\\bigsqcup"};Nt({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220F","\u2210","\u2211","\u22C0","\u22C1","\u22C2","\u22C3","\u2A00","\u2A01","\u2A02","\u2A04","\u2A06"],props:{numArgs:0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=n;return i.length===1&&(i=L4e[i]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:i}},"handler"),htmlBuilder:m0,mathmlBuilder:Wy});Nt({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:di(n)}},"handler"),htmlBuilder:m0,mathmlBuilder:Wy});R4e={"\u222B":"\\int","\u222C":"\\iint","\u222D":"\\iiint","\u222E":"\\oint","\u222F":"\\oiint","\u2230":"\\oiiint"};Nt({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:m0,mathmlBuilder:Wy});Nt({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:m0,mathmlBuilder:Wy});Nt({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222B","\u222C","\u222D","\u222E","\u222F","\u2230"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t,n=r;return n.length===1&&(n=R4e[n]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:m0,mathmlBuilder:Wy});EG=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=xr(t.base,"operatorname"),i=!0):a=xr(t,"operatorname");var s;if(a.body.length>0){for(var l=a.body.map(d=>{var p=d.text;return typeof p=="string"?{type:"textord",mode:d.mode,text:p}:d}),u=Pi(l,e.withFont("mathrm"),!0),h=0;h<u.length;h++){var f=u[h];f instanceof Ts&&(f.text=f.text.replace(/\u2212/,"-").replace(/\u2217/,"*"))}s=Be.makeSpan(["mop"],u,e)}else s=Be.makeSpan(["mop"],[],e);return i?TG(s,r,n,e,e.style,0,0):s},"htmlBuilder$1"),N4e=o((t,e)=>{for(var r=ks(t.body,e.withFont("mathrm")),n=!0,i=0;i<r.length;i++){var a=r[i];if(!(a instanceof dt.SpaceNode))if(a instanceof dt.MathNode)switch(a.type){case"mi":case"mn":case"ms":case"mspace":case"mtext":break;case"mo":{var s=a.children[0];a.children.length===1&&s instanceof dt.TextNode?s.text=s.text.replace(/\u2212/,"-").replace(/\u2217/,"*"):n=!1;break}default:n=!1}else n=!1}if(n){var l=r.map(f=>f.toText()).join("");r=[new dt.TextNode(l)]}var u=new dt.MathNode("mi",r);u.setAttribute("mathvariant","normal");var h=new dt.MathNode("mo",[Co("\u2061","text")]);return t.parentIsSupSub?new dt.MathNode("mrow",[u,h]):dt.newDocumentFragment([u,h])},"mathmlBuilder");Nt({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"operatorname",mode:r.mode,body:di(i),alwaysHandleSupSub:n==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},"handler"),htmlBuilder:EG,mathmlBuilder:N4e});fe("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");rd({type:"ordgroup",htmlBuilder(t,e){return t.semisimple?Be.makeFragment(Pi(t.body,e,!1)):Be.makeSpan(["mord"],Pi(t.body,e,!0),e)},mathmlBuilder(t,e){return dh(t.body,e,!0)}});Nt({type:"overline",names:["\\overline"],props:{numArgs:1},handler(t,e){var{parser:r}=t,n=e[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(t,e){var r=Fr(t.body,e.havingCrampedStyle()),n=Be.makeLineSpan("overline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*i},{type:"elem",elem:n},{type:"kern",size:i}]},e);return Be.makeSpan(["mord","overline"],[a],e)},mathmlBuilder(t,e){var r=new dt.MathNode("mo",[new dt.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new dt.MathNode("mover",[yn(t.body,e),r]);return n.setAttribute("accent","true"),n}});Nt({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"phantom",mode:r.mode,body:di(n)}},"handler"),htmlBuilder:o((t,e)=>{var r=Pi(t.body,e.withPhantom(),!1);return Be.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ks(t.body,e);return new dt.MathNode("mphantom",r)},"mathmlBuilder")});Nt({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"hphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Be.makeSpan([],[Fr(t.body,e.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var n=0;n<r.children.length;n++)r.children[n].height=0,r.children[n].depth=0;return r=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r}]},e),Be.makeSpan(["mord"],[r],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ks(di(t.body),e),n=new dt.MathNode("mphantom",r),i=new dt.MathNode("mpadded",[n]);return i.setAttribute("height","0px"),i.setAttribute("depth","0px"),i},"mathmlBuilder")});Nt({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"vphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Be.makeSpan(["inner"],[Fr(t.body,e.withPhantom())]),n=Be.makeSpan(["fix"],[]);return Be.makeSpan(["mord","rlap"],[r,n],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=ks(di(t.body),e),n=new dt.MathNode("mphantom",r),i=new dt.MathNode("mpadded",[n]);return i.setAttribute("width","0px"),i},"mathmlBuilder")});Nt({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t,n=xr(e[0],"size").value,i=e[1];return{type:"raisebox",mode:r.mode,dy:n,body:i}},htmlBuilder(t,e){var r=Fr(t.body,e),n=ti(t.dy,e);return Be.makeVList({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){var r=new dt.MathNode("mpadded",[yn(t.body,e)]),n=t.dy.number+t.dy.unit;return r.setAttribute("voffset",n),r}});Nt({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e}=t;return{type:"internal",mode:e.mode}}});Nt({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},handler(t,e,r){var{parser:n}=t,i=r[0],a=xr(e[0],"size"),s=xr(e[1],"size");return{type:"rule",mode:n.mode,shift:i&&xr(i,"size").value,width:a.value,height:s.value}},htmlBuilder(t,e){var r=Be.makeSpan(["mord","rule"],[],e),n=ti(t.width,e),i=ti(t.height,e),a=t.shift?ti(t.shift,e):0;return r.style.borderRightWidth=kt(n),r.style.borderTopWidth=kt(i),r.style.bottom=kt(a),r.width=n,r.height=i+a,r.depth=-a,r.maxFontSize=i*1.125*e.sizeMultiplier,r},mathmlBuilder(t,e){var r=ti(t.width,e),n=ti(t.height,e),i=t.shift?ti(t.shift,e):0,a=e.color&&e.getColor()||"black",s=new dt.MathNode("mspace");s.setAttribute("mathbackground",a),s.setAttribute("width",kt(r)),s.setAttribute("height",kt(n));var l=new dt.MathNode("mpadded",[s]);return i>=0?l.setAttribute("height",kt(i)):(l.setAttribute("height",kt(i)),l.setAttribute("depth",kt(-i))),l.setAttribute("voffset",kt(i)),l}});o(SG,"sizingGroup");Az=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],M4e=o((t,e)=>{var r=e.havingSize(t.size);return SG(t.body,r,e)},"htmlBuilder");Nt({type:"sizing",names:Az,props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!1,r);return{type:"sizing",mode:i.mode,size:Az.indexOf(n)+1,body:a}},"handler"),htmlBuilder:M4e,mathmlBuilder:o((t,e)=>{var r=e.havingSize(t.size),n=ks(t.body,r),i=new dt.MathNode("mstyle",n);return i.setAttribute("mathsize",kt(r.sizeMultiplier)),i},"mathmlBuilder")});Nt({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:o((t,e,r)=>{var{parser:n}=t,i=!1,a=!1,s=r[0]&&xr(r[0],"ordgroup");if(s)for(var l="",u=0;u<s.body.length;++u){var h=s.body[u];if(l=h.text,l==="t")i=!0;else if(l==="b")a=!0;else{i=!1,a=!1;break}}else i=!0,a=!0;var f=e[0];return{type:"smash",mode:n.mode,body:f,smashHeight:i,smashDepth:a}},"handler"),htmlBuilder:o((t,e)=>{var r=Be.makeSpan([],[Fr(t.body,e)]);if(!t.smashHeight&&!t.smashDepth)return r;if(t.smashHeight&&(r.height=0,r.children))for(var n=0;n<r.children.length;n++)r.children[n].height=0;if(t.smashDepth&&(r.depth=0,r.children))for(var i=0;i<r.children.length;i++)r.children[i].depth=0;var a=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r}]},e);return Be.makeSpan(["mord"],[a],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new dt.MathNode("mpadded",[yn(t.body,e)]);return t.smashHeight&&r.setAttribute("height","0px"),t.smashDepth&&r.setAttribute("depth","0px"),r},"mathmlBuilder")});Nt({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n}=t,i=r[0],a=e[0];return{type:"sqrt",mode:n.mode,body:a,index:i}},htmlBuilder(t,e){var r=Fr(t.body,e.havingCrampedStyle());r.height===0&&(r.height=e.fontMetrics().xHeight),r=Be.wrapFragment(r,e);var n=e.fontMetrics(),i=n.defaultRuleThickness,a=i;e.style.id<tr.TEXT.id&&(a=e.fontMetrics().xHeight);var s=i+a/4,l=r.height+r.depth+s+i,{span:u,ruleWidth:h,advanceWidth:f}=ou.sqrtImage(l,e),d=u.height-h;d>r.height+r.depth+s&&(s=(s+d-r.height-r.depth)/2);var p=u.height-r.height-s-h;r.style.paddingLeft=kt(f);var m=Be.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+p)},{type:"elem",elem:u},{type:"kern",size:h}]},e);if(t.index){var g=e.havingStyle(tr.SCRIPTSCRIPT),y=Fr(t.index,g,e),v=.6*(m.height-m.depth),x=Be.makeVList({positionType:"shift",positionData:-v,children:[{type:"elem",elem:y}]},e),b=Be.makeSpan(["root"],[x]);return Be.makeSpan(["mord","sqrt"],[b,m],e)}else return Be.makeSpan(["mord","sqrt"],[m],e)},mathmlBuilder(t,e){var{body:r,index:n}=t;return n?new dt.MathNode("mroot",[yn(r,e),yn(n,e)]):new dt.MathNode("msqrt",[yn(r,e)])}});_z={display:tr.DISPLAY,text:tr.TEXT,script:tr.SCRIPT,scriptscript:tr.SCRIPTSCRIPT};Nt({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t,e){var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!0,r),s=n.slice(1,n.length-5);return{type:"styling",mode:i.mode,style:s,body:a}},htmlBuilder(t,e){var r=_z[t.style],n=e.havingStyle(r).withFont("");return SG(t.body,n,e)},mathmlBuilder(t,e){var r=_z[t.style],n=e.havingStyle(r),i=ks(t.body,n),a=new dt.MathNode("mstyle",i),s={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},l=s[t.style];return a.setAttribute("scriptlevel",l[0]),a.setAttribute("displaystyle",l[1]),a}});I4e=o(function(e,r){var n=e.base;if(n)if(n.type==="op"){var i=n.limits&&(r.style.size===tr.DISPLAY.size||n.alwaysHandleSupSub);return i?m0:null}else if(n.type==="operatorname"){var a=n.alwaysHandleSupSub&&(r.style.size===tr.DISPLAY.size||n.limits);return a?EG:null}else{if(n.type==="accent")return Jt.isCharacterBox(n.base)?G7:null;if(n.type==="horizBrace"){var s=!e.sub;return s===n.isOver?wG:null}else return null}else return null},"htmlBuilderDelegate");rd({type:"supsub",htmlBuilder(t,e){var r=I4e(t,e);if(r)return r(t,e);var{base:n,sup:i,sub:a}=t,s=Fr(n,e),l,u,h=e.fontMetrics(),f=0,d=0,p=n&&Jt.isCharacterBox(n);if(i){var m=e.havingStyle(e.style.sup());l=Fr(i,m,e),p||(f=s.height-m.fontMetrics().supDrop*m.sizeMultiplier/e.sizeMultiplier)}if(a){var g=e.havingStyle(e.style.sub());u=Fr(a,g,e),p||(d=s.depth+g.fontMetrics().subDrop*g.sizeMultiplier/e.sizeMultiplier)}var y;e.style===tr.DISPLAY?y=h.sup1:e.style.cramped?y=h.sup3:y=h.sup2;var v=e.sizeMultiplier,x=kt(.5/h.ptPerEm/v),b=null;if(u){var w=t.base&&t.base.type==="op"&&t.base.name&&(t.base.name==="\\oiint"||t.base.name==="\\oiiint");(s instanceof Ts||w)&&(b=kt(-s.italic))}var C;if(l&&u){f=Math.max(f,y,l.depth+.25*h.xHeight),d=Math.max(d,h.sub2);var T=h.defaultRuleThickness,E=4*T;if(f-l.depth-(u.height-d)<E){d=E-(f-l.depth)+u.height;var A=.8*h.xHeight-(f-l.depth);A>0&&(f+=A,d-=A)}var S=[{type:"elem",elem:u,shift:d,marginRight:x,marginLeft:b},{type:"elem",elem:l,shift:-f,marginRight:x}];C=Be.makeVList({positionType:"individualShift",children:S},e)}else if(u){d=Math.max(d,h.sub1,u.height-.8*h.xHeight);var _=[{type:"elem",elem:u,marginLeft:b,marginRight:x}];C=Be.makeVList({positionType:"shift",positionData:d,children:_},e)}else if(l)f=Math.max(f,y,l.depth+.25*h.xHeight),C=Be.makeVList({positionType:"shift",positionData:-f,children:[{type:"elem",elem:l,marginRight:x}]},e);else throw new Error("supsub must have either sup or sub.");var I=A7(s,"right")||"mord";return Be.makeSpan([I],[s,Be.makeSpan(["msupsub"],[C])],e)},mathmlBuilder(t,e){var r=!1,n,i;t.base&&t.base.type==="horizBrace"&&(i=!!t.sup,i===t.base.isOver&&(r=!0,n=t.base.isOver)),t.base&&(t.base.type==="op"||t.base.type==="operatorname")&&(t.base.parentIsSupSub=!0);var a=[yn(t.base,e)];t.sub&&a.push(yn(t.sub,e)),t.sup&&a.push(yn(t.sup,e));var s;if(r)s=n?"mover":"munder";else if(t.sub)if(t.sup){var h=t.base;h&&h.type==="op"&&h.limits&&e.style===tr.DISPLAY||h&&h.type==="operatorname"&&h.alwaysHandleSupSub&&(e.style===tr.DISPLAY||h.limits)?s="munderover":s="msubsup"}else{var u=t.base;u&&u.type==="op"&&u.limits&&(e.style===tr.DISPLAY||u.alwaysHandleSupSub)||u&&u.type==="operatorname"&&u.alwaysHandleSupSub&&(u.limits||e.style===tr.DISPLAY)?s="munder":s="msub"}else{var l=t.base;l&&l.type==="op"&&l.limits&&(e.style===tr.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||e.style===tr.DISPLAY)?s="mover":s="msup"}return new dt.MathNode(s,a)}});rd({type:"atom",htmlBuilder(t,e){return Be.mathsym(t.text,t.mode,e,["m"+t.family])},mathmlBuilder(t,e){var r=new dt.MathNode("mo",[Co(t.text,t.mode)]);if(t.family==="bin"){var n=$7(t,e);n==="bold-italic"&&r.setAttribute("mathvariant",n)}else t.family==="punct"?r.setAttribute("separator","true"):(t.family==="open"||t.family==="close")&&r.setAttribute("stretchy","false");return r}});CG={mi:"italic",mn:"normal",mtext:"normal"};rd({type:"mathord",htmlBuilder(t,e){return Be.makeOrd(t,e,"mathord")},mathmlBuilder(t,e){var r=new dt.MathNode("mi",[Co(t.text,t.mode,e)]),n=$7(t,e)||"italic";return n!==CG[r.type]&&r.setAttribute("mathvariant",n),r}});rd({type:"textord",htmlBuilder(t,e){return Be.makeOrd(t,e,"textord")},mathmlBuilder(t,e){var r=Co(t.text,t.mode,e),n=$7(t,e)||"normal",i;return t.mode==="text"?i=new dt.MathNode("mtext",[r]):/[0-9]/.test(t.text)?i=new dt.MathNode("mn",[r]):t.text==="\\prime"?i=new dt.MathNode("mo",[r]):i=new dt.MathNode("mi",[r]),n!==CG[i.type]&&i.setAttribute("mathvariant",n),i}});b7={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},w7={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};rd({type:"spacing",htmlBuilder(t,e){if(w7.hasOwnProperty(t.text)){var r=w7[t.text].className||"";if(t.mode==="text"){var n=Be.makeOrd(t,e,"textord");return n.classes.push(r),n}else return Be.makeSpan(["mspace",r],[Be.mathsym(t.text,t.mode,e)],e)}else{if(b7.hasOwnProperty(t.text))return Be.makeSpan(["mspace",b7[t.text]],[],e);throw new gt('Unknown type of space "'+t.text+'"')}},mathmlBuilder(t,e){var r;if(w7.hasOwnProperty(t.text))r=new dt.MathNode("mtext",[new dt.TextNode("\xA0")]);else{if(b7.hasOwnProperty(t.text))return new dt.MathNode("mspace");throw new gt('Unknown type of space "'+t.text+'"')}return r}});Dz=o(()=>{var t=new dt.MathNode("mtd",[]);return t.setAttribute("width","50%"),t},"pad");rd({type:"tag",mathmlBuilder(t,e){var r=new dt.MathNode("mtable",[new dt.MathNode("mtr",[Dz(),new dt.MathNode("mtd",[dh(t.body,e)]),Dz(),new dt.MathNode("mtd",[dh(t.tag,e)])])]);return r.setAttribute("width","100%"),r}});Lz={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},Rz={"\\textbf":"textbf","\\textmd":"textmd"},O4e={"\\textit":"textit","\\textup":"textup"},Nz=o((t,e)=>{var r=t.font;if(r){if(Lz[r])return e.withTextFontFamily(Lz[r]);if(Rz[r])return e.withTextFontWeight(Rz[r]);if(r==="\\emph")return e.fontShape==="textit"?e.withTextFontShape("textup"):e.withTextFontShape("textit")}else return e;return e.withTextFontShape(O4e[r])},"optionsWithFont");Nt({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"text",mode:r.mode,body:di(i),font:n}},htmlBuilder(t,e){var r=Nz(t,e),n=Pi(t.body,r,!0);return Be.makeSpan(["mord","text"],n,r)},mathmlBuilder(t,e){var r=Nz(t,e);return dh(t.body,r)}});Nt({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"underline",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Fr(t.body,e),n=Be.makeLineSpan("underline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Be.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:i},{type:"elem",elem:n},{type:"kern",size:3*i},{type:"elem",elem:r}]},e);return Be.makeSpan(["mord","underline"],[a],e)},mathmlBuilder(t,e){var r=new dt.MathNode("mo",[new dt.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new dt.MathNode("munder",[yn(t.body,e),r]);return n.setAttribute("accentunder","true"),n}});Nt({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"vcenter",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Fr(t.body,e),n=e.fontMetrics().axisHeight,i=.5*(r.height-n-(r.depth+n));return Be.makeVList({positionType:"shift",positionData:i,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){return new dt.MathNode("mpadded",[yn(t.body,e)],["vcenter"])}});Nt({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(t,e,r){throw new gt("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(t,e){for(var r=Mz(t),n=[],i=e.havingStyle(e.style.text()),a=0;a<r.length;a++){var s=r[a];s==="~"&&(s="\\textasciitilde"),n.push(Be.makeSymbol(s,"Typewriter-Regular",t.mode,i,["mord","texttt"]))}return Be.makeSpan(["mord","text"].concat(i.sizingClasses(e)),Be.tryCombineChars(n),i)},mathmlBuilder(t,e){var r=new dt.TextNode(Mz(t)),n=new dt.MathNode("mtext",[r]);return n.setAttribute("mathvariant","monospace"),n}});Mz=o(t=>t.body.replace(/ /g,t.star?"\u2423":"\xA0"),"makeVerb"),hh=jz,AG=`[ \r
271 + ]`,P4e="\\\\[a-zA-Z@]+",B4e="\\\\[^\uD800-\uDFFF]",F4e="("+P4e+")"+AG+"*",$4e=`\\\\(
272 +|[ \r ]+
273 +?)[ \r ]*`,N7="[\u0300-\u036F]",z4e=new RegExp(N7+"+$"),G4e="("+AG+"+)|"+($4e+"|")+"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]"+(N7+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(N7+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+F4e)+("|"+B4e+")"),y3=class{static{o(this,"Lexer")}constructor(e,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=r,this.tokenRegex=new RegExp(G4e,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,r){this.catcodes[e]=r}lex(){var e=this.input,r=this.tokenRegex.lastIndex;if(r===e.length)return new So("EOF",new Xs(this,r,r));var n=this.tokenRegex.exec(e);if(n===null||n.index!==r)throw new gt("Unexpected character: '"+e[r]+"'",new So(e[r],new Xs(this,r,r+1)));var i=n[6]||n[3]||(n[2]?"\\ ":" ");if(this.catcodes[i]===14){var a=e.indexOf(`
274 +`,this.tokenRegex.lastIndex);return a===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=a+1,this.lex()}return new So(i,new Xs(this,r,this.tokenRegex.lastIndex))}},M7=class{static{o(this,"Namespace")}constructor(e,r){e===void 0&&(e={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new gt("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var r in e)e.hasOwnProperty(r)&&(e[r]==null?delete this.current[r]:this.current[r]=e[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,r,n){if(n===void 0&&(n=!1),n){for(var i=0;i<this.undefStack.length;i++)delete this.undefStack[i][e];this.undefStack.length>0&&(this.undefStack[this.undefStack.length-1][e]=r)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}r==null?delete this.current[e]:this.current[e]=r}},V4e=gG;fe("\\noexpand",function(t){var e=t.popToken();return t.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}});fe("\\expandafter",function(t){var e=t.popToken();return t.expandOnce(!0),{tokens:[e],numArgs:0}});fe("\\@firstoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[0],numArgs:0}});fe("\\@secondoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[1],numArgs:0}});fe("\\@ifnextchar",function(t){var e=t.consumeArgs(3);t.consumeSpaces();var r=t.future();return e[0].length===1&&e[0][0].text===r.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}});fe("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");fe("\\TextOrMath",function(t){var e=t.consumeArgs(2);return t.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});Iz={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};fe("\\char",function(t){var e=t.popToken(),r,n="";if(e.text==="'")r=8,e=t.popToken();else if(e.text==='"')r=16,e=t.popToken();else if(e.text==="`")if(e=t.popToken(),e.text[0]==="\\")n=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new gt("\\char` missing argument");n=e.text.charCodeAt(0)}else r=10;if(r){if(n=Iz[e.text],n==null||n>=r)throw new gt("Invalid base-"+r+" digit "+e.text);for(var i;(i=Iz[t.future().text])!=null&&i<r;)n*=r,n+=i,t.popToken()}return"\\@char{"+n+"}"});j7=o((t,e,r)=>{var n=t.consumeArg().tokens;if(n.length!==1)throw new gt("\\newcommand's first argument must be a macro name");var i=n[0].text,a=t.isDefined(i);if(a&&!e)throw new gt("\\newcommand{"+i+"} attempting to redefine "+(i+"; use \\renewcommand"));if(!a&&!r)throw new gt("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");var s=0;if(n=t.consumeArg().tokens,n.length===1&&n[0].text==="["){for(var l="",u=t.expandNextToken();u.text!=="]"&&u.text!=="EOF";)l+=u.text,u=t.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new gt("Invalid number of arguments: "+l);s=parseInt(l),n=t.consumeArg().tokens}return t.macros.set(i,{tokens:n,numArgs:s}),""},"newcommand");fe("\\newcommand",t=>j7(t,!1,!0));fe("\\renewcommand",t=>j7(t,!0,!1));fe("\\providecommand",t=>j7(t,!0,!0));fe("\\message",t=>{var e=t.consumeArgs(1)[0];return console.log(e.reverse().map(r=>r.text).join("")),""});fe("\\errmessage",t=>{var e=t.consumeArgs(1)[0];return console.error(e.reverse().map(r=>r.text).join("")),""});fe("\\show",t=>{var e=t.popToken(),r=e.text;return console.log(e,t.macros.get(r),hh[r],An.math[r],An.text[r]),""});fe("\\bgroup","{");fe("\\egroup","}");fe("~","\\nobreakspace");fe("\\lq","`");fe("\\rq","'");fe("\\aa","\\r a");fe("\\AA","\\r A");fe("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xA9}");fe("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");fe("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xAE}");fe("\u212C","\\mathscr{B}");fe("\u2130","\\mathscr{E}");fe("\u2131","\\mathscr{F}");fe("\u210B","\\mathscr{H}");fe("\u2110","\\mathscr{I}");fe("\u2112","\\mathscr{L}");fe("\u2133","\\mathscr{M}");fe("\u211B","\\mathscr{R}");fe("\u212D","\\mathfrak{C}");fe("\u210C","\\mathfrak{H}");fe("\u2128","\\mathfrak{Z}");fe("\\Bbbk","\\Bbb{k}");fe("\xB7","\\cdotp");fe("\\llap","\\mathllap{\\textrm{#1}}");fe("\\rlap","\\mathrlap{\\textrm{#1}}");fe("\\clap","\\mathclap{\\textrm{#1}}");fe("\\mathstrut","\\vphantom{(}");fe("\\underbar","\\underline{\\text{#1}}");fe("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}');fe("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}");fe("\\ne","\\neq");fe("\u2260","\\neq");fe("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}");fe("\u2209","\\notin");fe("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}");fe("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");fe("\u225A","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");fe("\u225B","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225B}}");fe("\u225D","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225D}}");fe("\u225E","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225E}}");fe("\u225F","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}");fe("\u27C2","\\perp");fe("\u203C","\\mathclose{!\\mkern-0.8mu!}");fe("\u220C","\\notni");fe("\u231C","\\ulcorner");fe("\u231D","\\urcorner");fe("\u231E","\\llcorner");fe("\u231F","\\lrcorner");fe("\xA9","\\copyright");fe("\xAE","\\textregistered");fe("\uFE0F","\\textregistered");fe("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');fe("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');fe("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');fe("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');fe("\\vdots","\\mathord{\\varvdots\\rule{0pt}{15pt}}");fe("\u22EE","\\vdots");fe("\\varGamma","\\mathit{\\Gamma}");fe("\\varDelta","\\mathit{\\Delta}");fe("\\varTheta","\\mathit{\\Theta}");fe("\\varLambda","\\mathit{\\Lambda}");fe("\\varXi","\\mathit{\\Xi}");fe("\\varPi","\\mathit{\\Pi}");fe("\\varSigma","\\mathit{\\Sigma}");fe("\\varUpsilon","\\mathit{\\Upsilon}");fe("\\varPhi","\\mathit{\\Phi}");fe("\\varPsi","\\mathit{\\Psi}");fe("\\varOmega","\\mathit{\\Omega}");fe("\\substack","\\begin{subarray}{c}#1\\end{subarray}");fe("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");fe("\\boxed","\\fbox{$\\displaystyle{#1}$}");fe("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");fe("\\implies","\\DOTSB\\;\\Longrightarrow\\;");fe("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");Oz={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};fe("\\dots",function(t){var e="\\dotso",r=t.expandAfterFuture().text;return r in Oz?e=Oz[r]:(r.slice(0,4)==="\\not"||r in An.math&&Jt.contains(["bin","rel"],An.math[r].group))&&(e="\\dotsb"),e});K7={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};fe("\\dotso",function(t){var e=t.future().text;return e in K7?"\\ldots\\,":"\\ldots"});fe("\\dotsc",function(t){var e=t.future().text;return e in K7&&e!==","?"\\ldots\\,":"\\ldots"});fe("\\cdots",function(t){var e=t.future().text;return e in K7?"\\@cdots\\,":"\\@cdots"});fe("\\dotsb","\\cdots");fe("\\dotsm","\\cdots");fe("\\dotsi","\\!\\cdots");fe("\\dotsx","\\ldots\\,");fe("\\DOTSI","\\relax");fe("\\DOTSB","\\relax");fe("\\DOTSX","\\relax");fe("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");fe("\\,","\\tmspace+{3mu}{.1667em}");fe("\\thinspace","\\,");fe("\\>","\\mskip{4mu}");fe("\\:","\\tmspace+{4mu}{.2222em}");fe("\\medspace","\\:");fe("\\;","\\tmspace+{5mu}{.2777em}");fe("\\thickspace","\\;");fe("\\!","\\tmspace-{3mu}{.1667em}");fe("\\negthinspace","\\!");fe("\\negmedspace","\\tmspace-{4mu}{.2222em}");fe("\\negthickspace","\\tmspace-{5mu}{.277em}");fe("\\enspace","\\kern.5em ");fe("\\enskip","\\hskip.5em\\relax");fe("\\quad","\\hskip1em\\relax");fe("\\qquad","\\hskip2em\\relax");fe("\\tag","\\@ifstar\\tag@literal\\tag@paren");fe("\\tag@paren","\\tag@literal{({#1})}");fe("\\tag@literal",t=>{if(t.macros.get("\\df@tag"))throw new gt("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});fe("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");fe("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");fe("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");fe("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");fe("\\newline","\\\\\\relax");fe("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");_G=kt(jl["Main-Regular"][84][1]-.7*jl["Main-Regular"][65][1]);fe("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+_G+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");fe("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+_G+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");fe("\\hspace","\\@ifstar\\@hspacer\\@hspace");fe("\\@hspace","\\hskip #1\\relax");fe("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");fe("\\ordinarycolon",":");fe("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");fe("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');fe("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');fe("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');fe("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');fe("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');fe("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');fe("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');fe("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');fe("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');fe("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');fe("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');fe("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');fe("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');fe("\u2237","\\dblcolon");fe("\u2239","\\eqcolon");fe("\u2254","\\coloneqq");fe("\u2255","\\eqqcolon");fe("\u2A74","\\Coloneqq");fe("\\ratio","\\vcentcolon");fe("\\coloncolon","\\dblcolon");fe("\\colonequals","\\coloneqq");fe("\\coloncolonequals","\\Coloneqq");fe("\\equalscolon","\\eqqcolon");fe("\\equalscoloncolon","\\Eqqcolon");fe("\\colonminus","\\coloneq");fe("\\coloncolonminus","\\Coloneq");fe("\\minuscolon","\\eqcolon");fe("\\minuscoloncolon","\\Eqcolon");fe("\\coloncolonapprox","\\Colonapprox");fe("\\coloncolonsim","\\Colonsim");fe("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");fe("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");fe("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");fe("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");fe("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");fe("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");fe("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");fe("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");fe("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");fe("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");fe("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");fe("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");fe("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");fe("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}");fe("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}");fe("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}");fe("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}");fe("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}");fe("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}");fe("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}");fe("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}");fe("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}");fe("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}");fe("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228A}");fe("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2ACB}");fe("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228B}");fe("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2ACC}");fe("\\imath","\\html@mathml{\\@imath}{\u0131}");fe("\\jmath","\\html@mathml{\\@jmath}{\u0237}");fe("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27E6}}");fe("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27E7}}");fe("\u27E6","\\llbracket");fe("\u27E7","\\rrbracket");fe("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}");fe("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}");fe("\u2983","\\lBrace");fe("\u2984","\\rBrace");fe("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29B5}}");fe("\u29B5","\\minuso");fe("\\darr","\\downarrow");fe("\\dArr","\\Downarrow");fe("\\Darr","\\Downarrow");fe("\\lang","\\langle");fe("\\rang","\\rangle");fe("\\uarr","\\uparrow");fe("\\uArr","\\Uparrow");fe("\\Uarr","\\Uparrow");fe("\\N","\\mathbb{N}");fe("\\R","\\mathbb{R}");fe("\\Z","\\mathbb{Z}");fe("\\alef","\\aleph");fe("\\alefsym","\\aleph");fe("\\Alpha","\\mathrm{A}");fe("\\Beta","\\mathrm{B}");fe("\\bull","\\bullet");fe("\\Chi","\\mathrm{X}");fe("\\clubs","\\clubsuit");fe("\\cnums","\\mathbb{C}");fe("\\Complex","\\mathbb{C}");fe("\\Dagger","\\ddagger");fe("\\diamonds","\\diamondsuit");fe("\\empty","\\emptyset");fe("\\Epsilon","\\mathrm{E}");fe("\\Eta","\\mathrm{H}");fe("\\exist","\\exists");fe("\\harr","\\leftrightarrow");fe("\\hArr","\\Leftrightarrow");fe("\\Harr","\\Leftrightarrow");fe("\\hearts","\\heartsuit");fe("\\image","\\Im");fe("\\infin","\\infty");fe("\\Iota","\\mathrm{I}");fe("\\isin","\\in");fe("\\Kappa","\\mathrm{K}");fe("\\larr","\\leftarrow");fe("\\lArr","\\Leftarrow");fe("\\Larr","\\Leftarrow");fe("\\lrarr","\\leftrightarrow");fe("\\lrArr","\\Leftrightarrow");fe("\\Lrarr","\\Leftrightarrow");fe("\\Mu","\\mathrm{M}");fe("\\natnums","\\mathbb{N}");fe("\\Nu","\\mathrm{N}");fe("\\Omicron","\\mathrm{O}");fe("\\plusmn","\\pm");fe("\\rarr","\\rightarrow");fe("\\rArr","\\Rightarrow");fe("\\Rarr","\\Rightarrow");fe("\\real","\\Re");fe("\\reals","\\mathbb{R}");fe("\\Reals","\\mathbb{R}");fe("\\Rho","\\mathrm{P}");fe("\\sdot","\\cdot");fe("\\sect","\\S");fe("\\spades","\\spadesuit");fe("\\sub","\\subset");fe("\\sube","\\subseteq");fe("\\supe","\\supseteq");fe("\\Tau","\\mathrm{T}");fe("\\thetasym","\\vartheta");fe("\\weierp","\\wp");fe("\\Zeta","\\mathrm{Z}");fe("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");fe("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");fe("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");fe("\\bra","\\mathinner{\\langle{#1}|}");fe("\\ket","\\mathinner{|{#1}\\rangle}");fe("\\braket","\\mathinner{\\langle{#1}\\rangle}");fe("\\Bra","\\left\\langle#1\\right|");fe("\\Ket","\\left|#1\\right\\rangle");DG=o(t=>e=>{var r=e.consumeArg().tokens,n=e.consumeArg().tokens,i=e.consumeArg().tokens,a=e.consumeArg().tokens,s=e.macros.get("|"),l=e.macros.get("\\|");e.macros.beginGroup();var u=o(d=>p=>{t&&(p.macros.set("|",s),i.length&&p.macros.set("\\|",l));var m=d;if(!d&&i.length){var g=p.future();g.text==="|"&&(p.popToken(),m=!0)}return{tokens:m?i:n,numArgs:0}},"midMacro");e.macros.set("|",u(!1)),i.length&&e.macros.set("\\|",u(!0));var h=e.consumeArg().tokens,f=e.expandTokens([...a,...h,...r]);return e.macros.endGroup(),{tokens:f.reverse(),numArgs:0}},"braketHelper");fe("\\bra@ket",DG(!1));fe("\\bra@set",DG(!0));fe("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");fe("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");fe("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");fe("\\angln","{\\angl n}");fe("\\blue","\\textcolor{##6495ed}{#1}");fe("\\orange","\\textcolor{##ffa500}{#1}");fe("\\pink","\\textcolor{##ff00af}{#1}");fe("\\red","\\textcolor{##df0030}{#1}");fe("\\green","\\textcolor{##28ae7b}{#1}");fe("\\gray","\\textcolor{gray}{#1}");fe("\\purple","\\textcolor{##9d38bd}{#1}");fe("\\blueA","\\textcolor{##ccfaff}{#1}");fe("\\blueB","\\textcolor{##80f6ff}{#1}");fe("\\blueC","\\textcolor{##63d9ea}{#1}");fe("\\blueD","\\textcolor{##11accd}{#1}");fe("\\blueE","\\textcolor{##0c7f99}{#1}");fe("\\tealA","\\textcolor{##94fff5}{#1}");fe("\\tealB","\\textcolor{##26edd5}{#1}");fe("\\tealC","\\textcolor{##01d1c1}{#1}");fe("\\tealD","\\textcolor{##01a995}{#1}");fe("\\tealE","\\textcolor{##208170}{#1}");fe("\\greenA","\\textcolor{##b6ffb0}{#1}");fe("\\greenB","\\textcolor{##8af281}{#1}");fe("\\greenC","\\textcolor{##74cf70}{#1}");fe("\\greenD","\\textcolor{##1fab54}{#1}");fe("\\greenE","\\textcolor{##0d923f}{#1}");fe("\\goldA","\\textcolor{##ffd0a9}{#1}");fe("\\goldB","\\textcolor{##ffbb71}{#1}");fe("\\goldC","\\textcolor{##ff9c39}{#1}");fe("\\goldD","\\textcolor{##e07d10}{#1}");fe("\\goldE","\\textcolor{##a75a05}{#1}");fe("\\redA","\\textcolor{##fca9a9}{#1}");fe("\\redB","\\textcolor{##ff8482}{#1}");fe("\\redC","\\textcolor{##f9685d}{#1}");fe("\\redD","\\textcolor{##e84d39}{#1}");fe("\\redE","\\textcolor{##bc2612}{#1}");fe("\\maroonA","\\textcolor{##ffbde0}{#1}");fe("\\maroonB","\\textcolor{##ff92c6}{#1}");fe("\\maroonC","\\textcolor{##ed5fa6}{#1}");fe("\\maroonD","\\textcolor{##ca337c}{#1}");fe("\\maroonE","\\textcolor{##9e034e}{#1}");fe("\\purpleA","\\textcolor{##ddd7ff}{#1}");fe("\\purpleB","\\textcolor{##c6b9fc}{#1}");fe("\\purpleC","\\textcolor{##aa87ff}{#1}");fe("\\purpleD","\\textcolor{##7854ab}{#1}");fe("\\purpleE","\\textcolor{##543b78}{#1}");fe("\\mintA","\\textcolor{##f5f9e8}{#1}");fe("\\mintB","\\textcolor{##edf2df}{#1}");fe("\\mintC","\\textcolor{##e0e5cc}{#1}");fe("\\grayA","\\textcolor{##f6f7f7}{#1}");fe("\\grayB","\\textcolor{##f0f1f2}{#1}");fe("\\grayC","\\textcolor{##e3e5e6}{#1}");fe("\\grayD","\\textcolor{##d6d8da}{#1}");fe("\\grayE","\\textcolor{##babec2}{#1}");fe("\\grayF","\\textcolor{##888d93}{#1}");fe("\\grayG","\\textcolor{##626569}{#1}");fe("\\grayH","\\textcolor{##3b3e40}{#1}");fe("\\grayI","\\textcolor{##21242c}{#1}");fe("\\kaBlue","\\textcolor{##314453}{#1}");fe("\\kaGreen","\\textcolor{##71B307}{#1}");LG={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},I7=class{static{o(this,"MacroExpander")}constructor(e,r,n){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(e),this.macros=new M7(V4e,r.macros),this.mode=n,this.stack=[]}feed(e){this.lexer=new y3(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var r,n,i;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:i,end:n}=this.consumeArg(["]"])}else({tokens:i,start:r,end:n}=this.consumeArg());return this.pushToken(new So("EOF",n.loc)),this.pushTokens(i),r.range(n,"")}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var r=[],n=e&&e.length>0;n||this.consumeSpaces();var i=this.future(),a,s=0,l=0;do{if(a=this.popToken(),r.push(a),a.text==="{")++s;else if(a.text==="}"){if(--s,s===-1)throw new gt("Extra }",a)}else if(a.text==="EOF")throw new gt("Unexpected end of input in a macro argument, expected '"+(e&&n?e[l]:"}")+"'",a);if(e&&n)if((s===0||s===1&&e[l]==="{")&&a.text===e[l]){if(++l,l===e.length){r.splice(-l,l);break}}else l=0}while(s!==0||n);return i.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:i,end:a}}consumeArgs(e,r){if(r){if(r.length!==e+1)throw new gt("The length of delimiters doesn't match the number of args!");for(var n=r[0],i=0;i<n.length;i++){var a=this.popToken();if(n[i]!==a.text)throw new gt("Use of the macro doesn't match its definition",a)}}for(var s=[],l=0;l<e;l++)s.push(this.consumeArg(r&&r[l+1]).tokens);return s}countExpansion(e){if(this.expansionCount+=e,this.expansionCount>this.settings.maxExpand)throw new gt("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var r=this.popToken(),n=r.text,i=r.noexpand?null:this._getExpansion(n);if(i==null||e&&i.unexpandable){if(e&&i==null&&n[0]==="\\"&&!this.isDefined(n))throw new gt("Undefined control sequence: "+n);return this.pushToken(r),!1}this.countExpansion(1);var a=i.tokens,s=this.consumeArgs(i.numArgs,i.delimiters);if(i.numArgs){a=a.slice();for(var l=a.length-1;l>=0;--l){var u=a[l];if(u.text==="#"){if(l===0)throw new gt("Incomplete placeholder at end of macro body",u);if(u=a[--l],u.text==="#")a.splice(l+1,1);else if(/^[1-9]$/.test(u.text))a.splice(l,2,...s[+u.text-1]);else throw new gt("Not a valid argument number",u)}}}return this.pushTokens(a),a.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new So(e)]):void 0}expandTokens(e){var r=[],n=this.stack.length;for(this.pushTokens(e);this.stack.length>n;)if(this.expandOnce(!0)===!1){var i=this.stack.pop();i.treatAsRelax&&(i.noexpand=!1,i.treatAsRelax=!1),r.push(i)}return this.countExpansion(r.length),r}expandMacroAsText(e){var r=this.expandMacro(e);return r&&r.map(n=>n.text).join("")}_getExpansion(e){var r=this.macros.get(e);if(r==null)return r;if(e.length===1){var n=this.lexer.catcodes[e];if(n!=null&&n!==13)return}var i=typeof r=="function"?r(this):r;if(typeof i=="string"){var a=0;if(i.indexOf("#")!==-1)for(var s=i.replace(/##/g,"");s.indexOf("#"+(a+1))!==-1;)++a;for(var l=new y3(i,this.settings),u=[],h=l.lex();h.text!=="EOF";)u.push(h),h=l.lex();u.reverse();var f={tokens:u,numArgs:a};return f}return i}isDefined(e){return this.macros.has(e)||hh.hasOwnProperty(e)||An.math.hasOwnProperty(e)||An.text.hasOwnProperty(e)||LG.hasOwnProperty(e)}isExpandable(e){var r=this.macros.get(e);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:hh.hasOwnProperty(e)&&!hh[e].primitive}},Pz=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,l3=Object.freeze({"\u208A":"+","\u208B":"-","\u208C":"=","\u208D":"(","\u208E":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1D62":"i","\u2C7C":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209A":"p","\u1D63":"r","\u209B":"s","\u209C":"t","\u1D64":"u","\u1D65":"v","\u2093":"x","\u1D66":"\u03B2","\u1D67":"\u03B3","\u1D68":"\u03C1","\u1D69":"\u03D5","\u1D6A":"\u03C7","\u207A":"+","\u207B":"-","\u207C":"=","\u207D":"(","\u207E":")","\u2070":"0","\xB9":"1","\xB2":"2","\xB3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1D2C":"A","\u1D2E":"B","\u1D30":"D","\u1D31":"E","\u1D33":"G","\u1D34":"H","\u1D35":"I","\u1D36":"J","\u1D37":"K","\u1D38":"L","\u1D39":"M","\u1D3A":"N","\u1D3C":"O","\u1D3E":"P","\u1D3F":"R","\u1D40":"T","\u1D41":"U","\u2C7D":"V","\u1D42":"W","\u1D43":"a","\u1D47":"b","\u1D9C":"c","\u1D48":"d","\u1D49":"e","\u1DA0":"f","\u1D4D":"g",\u02B0:"h","\u2071":"i",\u02B2:"j","\u1D4F":"k",\u02E1:"l","\u1D50":"m",\u207F:"n","\u1D52":"o","\u1D56":"p",\u02B3:"r",\u02E2:"s","\u1D57":"t","\u1D58":"u","\u1D5B":"v",\u02B7:"w",\u02E3:"x",\u02B8:"y","\u1DBB":"z","\u1D5D":"\u03B2","\u1D5E":"\u03B3","\u1D5F":"\u03B4","\u1D60":"\u03D5","\u1D61":"\u03C7","\u1DBF":"\u03B8"}),T7={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030C":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030A":{text:"\\r",math:"\\mathring"},"\u030B":{text:"\\H"},"\u0327":{text:"\\c"}},Bz={\u00E1:"a\u0301",\u00E0:"a\u0300",\u00E4:"a\u0308",\u01DF:"a\u0308\u0304",\u00E3:"a\u0303",\u0101:"a\u0304",\u0103:"a\u0306",\u1EAF:"a\u0306\u0301",\u1EB1:"a\u0306\u0300",\u1EB5:"a\u0306\u0303",\u01CE:"a\u030C",\u00E2:"a\u0302",\u1EA5:"a\u0302\u0301",\u1EA7:"a\u0302\u0300",\u1EAB:"a\u0302\u0303",\u0227:"a\u0307",\u01E1:"a\u0307\u0304",\u00E5:"a\u030A",\u01FB:"a\u030A\u0301",\u1E03:"b\u0307",\u0107:"c\u0301",\u1E09:"c\u0327\u0301",\u010D:"c\u030C",\u0109:"c\u0302",\u010B:"c\u0307",\u00E7:"c\u0327",\u010F:"d\u030C",\u1E0B:"d\u0307",\u1E11:"d\u0327",\u00E9:"e\u0301",\u00E8:"e\u0300",\u00EB:"e\u0308",\u1EBD:"e\u0303",\u0113:"e\u0304",\u1E17:"e\u0304\u0301",\u1E15:"e\u0304\u0300",\u0115:"e\u0306",\u1E1D:"e\u0327\u0306",\u011B:"e\u030C",\u00EA:"e\u0302",\u1EBF:"e\u0302\u0301",\u1EC1:"e\u0302\u0300",\u1EC5:"e\u0302\u0303",\u0117:"e\u0307",\u0229:"e\u0327",\u1E1F:"f\u0307",\u01F5:"g\u0301",\u1E21:"g\u0304",\u011F:"g\u0306",\u01E7:"g\u030C",\u011D:"g\u0302",\u0121:"g\u0307",\u0123:"g\u0327",\u1E27:"h\u0308",\u021F:"h\u030C",\u0125:"h\u0302",\u1E23:"h\u0307",\u1E29:"h\u0327",\u00ED:"i\u0301",\u00EC:"i\u0300",\u00EF:"i\u0308",\u1E2F:"i\u0308\u0301",\u0129:"i\u0303",\u012B:"i\u0304",\u012D:"i\u0306",\u01D0:"i\u030C",\u00EE:"i\u0302",\u01F0:"j\u030C",\u0135:"j\u0302",\u1E31:"k\u0301",\u01E9:"k\u030C",\u0137:"k\u0327",\u013A:"l\u0301",\u013E:"l\u030C",\u013C:"l\u0327",\u1E3F:"m\u0301",\u1E41:"m\u0307",\u0144:"n\u0301",\u01F9:"n\u0300",\u00F1:"n\u0303",\u0148:"n\u030C",\u1E45:"n\u0307",\u0146:"n\u0327",\u00F3:"o\u0301",\u00F2:"o\u0300",\u00F6:"o\u0308",\u022B:"o\u0308\u0304",\u00F5:"o\u0303",\u1E4D:"o\u0303\u0301",\u1E4F:"o\u0303\u0308",\u022D:"o\u0303\u0304",\u014D:"o\u0304",\u1E53:"o\u0304\u0301",\u1E51:"o\u0304\u0300",\u014F:"o\u0306",\u01D2:"o\u030C",\u00F4:"o\u0302",\u1ED1:"o\u0302\u0301",\u1ED3:"o\u0302\u0300",\u1ED7:"o\u0302\u0303",\u022F:"o\u0307",\u0231:"o\u0307\u0304",\u0151:"o\u030B",\u1E55:"p\u0301",\u1E57:"p\u0307",\u0155:"r\u0301",\u0159:"r\u030C",\u1E59:"r\u0307",\u0157:"r\u0327",\u015B:"s\u0301",\u1E65:"s\u0301\u0307",\u0161:"s\u030C",\u1E67:"s\u030C\u0307",\u015D:"s\u0302",\u1E61:"s\u0307",\u015F:"s\u0327",\u1E97:"t\u0308",\u0165:"t\u030C",\u1E6B:"t\u0307",\u0163:"t\u0327",\u00FA:"u\u0301",\u00F9:"u\u0300",\u00FC:"u\u0308",\u01D8:"u\u0308\u0301",\u01DC:"u\u0308\u0300",\u01D6:"u\u0308\u0304",\u01DA:"u\u0308\u030C",\u0169:"u\u0303",\u1E79:"u\u0303\u0301",\u016B:"u\u0304",\u1E7B:"u\u0304\u0308",\u016D:"u\u0306",\u01D4:"u\u030C",\u00FB:"u\u0302",\u016F:"u\u030A",\u0171:"u\u030B",\u1E7D:"v\u0303",\u1E83:"w\u0301",\u1E81:"w\u0300",\u1E85:"w\u0308",\u0175:"w\u0302",\u1E87:"w\u0307",\u1E98:"w\u030A",\u1E8D:"x\u0308",\u1E8B:"x\u0307",\u00FD:"y\u0301",\u1EF3:"y\u0300",\u00FF:"y\u0308",\u1EF9:"y\u0303",\u0233:"y\u0304",\u0177:"y\u0302",\u1E8F:"y\u0307",\u1E99:"y\u030A",\u017A:"z\u0301",\u017E:"z\u030C",\u1E91:"z\u0302",\u017C:"z\u0307",\u00C1:"A\u0301",\u00C0:"A\u0300",\u00C4:"A\u0308",\u01DE:"A\u0308\u0304",\u00C3:"A\u0303",\u0100:"A\u0304",\u0102:"A\u0306",\u1EAE:"A\u0306\u0301",\u1EB0:"A\u0306\u0300",\u1EB4:"A\u0306\u0303",\u01CD:"A\u030C",\u00C2:"A\u0302",\u1EA4:"A\u0302\u0301",\u1EA6:"A\u0302\u0300",\u1EAA:"A\u0302\u0303",\u0226:"A\u0307",\u01E0:"A\u0307\u0304",\u00C5:"A\u030A",\u01FA:"A\u030A\u0301",\u1E02:"B\u0307",\u0106:"C\u0301",\u1E08:"C\u0327\u0301",\u010C:"C\u030C",\u0108:"C\u0302",\u010A:"C\u0307",\u00C7:"C\u0327",\u010E:"D\u030C",\u1E0A:"D\u0307",\u1E10:"D\u0327",\u00C9:"E\u0301",\u00C8:"E\u0300",\u00CB:"E\u0308",\u1EBC:"E\u0303",\u0112:"E\u0304",\u1E16:"E\u0304\u0301",\u1E14:"E\u0304\u0300",\u0114:"E\u0306",\u1E1C:"E\u0327\u0306",\u011A:"E\u030C",\u00CA:"E\u0302",\u1EBE:"E\u0302\u0301",\u1EC0:"E\u0302\u0300",\u1EC4:"E\u0302\u0303",\u0116:"E\u0307",\u0228:"E\u0327",\u1E1E:"F\u0307",\u01F4:"G\u0301",\u1E20:"G\u0304",\u011E:"G\u0306",\u01E6:"G\u030C",\u011C:"G\u0302",\u0120:"G\u0307",\u0122:"G\u0327",\u1E26:"H\u0308",\u021E:"H\u030C",\u0124:"H\u0302",\u1E22:"H\u0307",\u1E28:"H\u0327",\u00CD:"I\u0301",\u00CC:"I\u0300",\u00CF:"I\u0308",\u1E2E:"I\u0308\u0301",\u0128:"I\u0303",\u012A:"I\u0304",\u012C:"I\u0306",\u01CF:"I\u030C",\u00CE:"I\u0302",\u0130:"I\u0307",\u0134:"J\u0302",\u1E30:"K\u0301",\u01E8:"K\u030C",\u0136:"K\u0327",\u0139:"L\u0301",\u013D:"L\u030C",\u013B:"L\u0327",\u1E3E:"M\u0301",\u1E40:"M\u0307",\u0143:"N\u0301",\u01F8:"N\u0300",\u00D1:"N\u0303",\u0147:"N\u030C",\u1E44:"N\u0307",\u0145:"N\u0327",\u00D3:"O\u0301",\u00D2:"O\u0300",\u00D6:"O\u0308",\u022A:"O\u0308\u0304",\u00D5:"O\u0303",\u1E4C:"O\u0303\u0301",\u1E4E:"O\u0303\u0308",\u022C:"O\u0303\u0304",\u014C:"O\u0304",\u1E52:"O\u0304\u0301",\u1E50:"O\u0304\u0300",\u014E:"O\u0306",\u01D1:"O\u030C",\u00D4:"O\u0302",\u1ED0:"O\u0302\u0301",\u1ED2:"O\u0302\u0300",\u1ED6:"O\u0302\u0303",\u022E:"O\u0307",\u0230:"O\u0307\u0304",\u0150:"O\u030B",\u1E54:"P\u0301",\u1E56:"P\u0307",\u0154:"R\u0301",\u0158:"R\u030C",\u1E58:"R\u0307",\u0156:"R\u0327",\u015A:"S\u0301",\u1E64:"S\u0301\u0307",\u0160:"S\u030C",\u1E66:"S\u030C\u0307",\u015C:"S\u0302",\u1E60:"S\u0307",\u015E:"S\u0327",\u0164:"T\u030C",\u1E6A:"T\u0307",\u0162:"T\u0327",\u00DA:"U\u0301",\u00D9:"U\u0300",\u00DC:"U\u0308",\u01D7:"U\u0308\u0301",\u01DB:"U\u0308\u0300",\u01D5:"U\u0308\u0304",\u01D9:"U\u0308\u030C",\u0168:"U\u0303",\u1E78:"U\u0303\u0301",\u016A:"U\u0304",\u1E7A:"U\u0304\u0308",\u016C:"U\u0306",\u01D3:"U\u030C",\u00DB:"U\u0302",\u016E:"U\u030A",\u0170:"U\u030B",\u1E7C:"V\u0303",\u1E82:"W\u0301",\u1E80:"W\u0300",\u1E84:"W\u0308",\u0174:"W\u0302",\u1E86:"W\u0307",\u1E8C:"X\u0308",\u1E8A:"X\u0307",\u00DD:"Y\u0301",\u1EF2:"Y\u0300",\u0178:"Y\u0308",\u1EF8:"Y\u0303",\u0232:"Y\u0304",\u0176:"Y\u0302",\u1E8E:"Y\u0307",\u0179:"Z\u0301",\u017D:"Z\u030C",\u1E90:"Z\u0302",\u017B:"Z\u0307",\u03AC:"\u03B1\u0301",\u1F70:"\u03B1\u0300",\u1FB1:"\u03B1\u0304",\u1FB0:"\u03B1\u0306",\u03AD:"\u03B5\u0301",\u1F72:"\u03B5\u0300",\u03AE:"\u03B7\u0301",\u1F74:"\u03B7\u0300",\u03AF:"\u03B9\u0301",\u1F76:"\u03B9\u0300",\u03CA:"\u03B9\u0308",\u0390:"\u03B9\u0308\u0301",\u1FD2:"\u03B9\u0308\u0300",\u1FD1:"\u03B9\u0304",\u1FD0:"\u03B9\u0306",\u03CC:"\u03BF\u0301",\u1F78:"\u03BF\u0300",\u03CD:"\u03C5\u0301",\u1F7A:"\u03C5\u0300",\u03CB:"\u03C5\u0308",\u03B0:"\u03C5\u0308\u0301",\u1FE2:"\u03C5\u0308\u0300",\u1FE1:"\u03C5\u0304",\u1FE0:"\u03C5\u0306",\u03CE:"\u03C9\u0301",\u1F7C:"\u03C9\u0300",\u038E:"\u03A5\u0301",\u1FEA:"\u03A5\u0300",\u03AB:"\u03A5\u0308",\u1FE9:"\u03A5\u0304",\u1FE8:"\u03A5\u0306",\u038F:"\u03A9\u0301",\u1FFA:"\u03A9\u0300"},v3=class t{static{o(this,"Parser")}constructor(e,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new I7(e,r,this.mode),this.settings=r,this.leftrightDepth=0}expect(e,r){if(r===void 0&&(r=!0),this.fetch().text!==e)throw new gt("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var r=this.nextToken;this.consume(),this.gullet.pushToken(new So("}")),this.gullet.pushTokens(e);var n=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,n}parseExpression(e,r){for(var n=[];;){this.mode==="math"&&this.consumeSpaces();var i=this.fetch();if(t.endOfExpression.indexOf(i.text)!==-1||r&&i.text===r||e&&hh[i.text]&&hh[i.text].infix)break;var a=this.parseAtom(r);if(a){if(a.type==="internal")continue}else break;n.push(a)}return this.mode==="text"&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(e){for(var r=-1,n,i=0;i<e.length;i++)if(e[i].type==="infix"){if(r!==-1)throw new gt("only one infix operator per group",e[i].token);r=i,n=e[i].replaceWith}if(r!==-1&&n){var a,s,l=e.slice(0,r),u=e.slice(r+1);l.length===1&&l[0].type==="ordgroup"?a=l[0]:a={type:"ordgroup",mode:this.mode,body:l},u.length===1&&u[0].type==="ordgroup"?s=u[0]:s={type:"ordgroup",mode:this.mode,body:u};var h;return n==="\\\\abovefrac"?h=this.callFunction(n,[a,e[r],s],[]):h=this.callFunction(n,[a,s],[]),[h]}else return e}handleSupSubscript(e){var r=this.fetch(),n=r.text;this.consume(),this.consumeSpaces();var i=this.parseGroup(e);if(!i)throw new gt("Expected group after '"+n+"'",r);return i}formatUnsupportedCmd(e){for(var r=[],n=0;n<e.length;n++)r.push({type:"textord",mode:"text",text:e[n]});var i={type:"text",mode:this.mode,body:r},a={type:"color",mode:this.mode,color:this.settings.errorColor,body:[i]};return a}parseAtom(e){var r=this.parseGroup("atom",e);if(this.mode==="text")return r;for(var n,i;;){this.consumeSpaces();var a=this.fetch();if(a.text==="\\limits"||a.text==="\\nolimits"){if(r&&r.type==="op"){var s=a.text==="\\limits";r.limits=s,r.alwaysHandleSupSub=!0}else if(r&&r.type==="operatorname")r.alwaysHandleSupSub&&(r.limits=a.text==="\\limits");else throw new gt("Limit controls must follow a math operator",a);this.consume()}else if(a.text==="^"){if(n)throw new gt("Double superscript",a);n=this.handleSupSubscript("superscript")}else if(a.text==="_"){if(i)throw new gt("Double subscript",a);i=this.handleSupSubscript("subscript")}else if(a.text==="'"){if(n)throw new gt("Double superscript",a);var l={type:"textord",mode:this.mode,text:"\\prime"},u=[l];for(this.consume();this.fetch().text==="'";)u.push(l),this.consume();this.fetch().text==="^"&&u.push(this.handleSupSubscript("superscript")),n={type:"ordgroup",mode:this.mode,body:u}}else if(l3[a.text]){var h=Pz.test(a.text),f=[];for(f.push(new So(l3[a.text])),this.consume();;){var d=this.fetch().text;if(!l3[d]||Pz.test(d)!==h)break;f.unshift(new So(l3[d])),this.consume()}var p=this.subparse(f);h?i={type:"ordgroup",mode:"math",body:p}:n={type:"ordgroup",mode:"math",body:p}}else break}return n||i?{type:"supsub",mode:this.mode,base:r,sup:n,sub:i}:r}parseFunction(e,r){var n=this.fetch(),i=n.text,a=hh[i];if(!a)return null;if(this.consume(),r&&r!=="atom"&&!a.allowedInArgument)throw new gt("Got function '"+i+"' with no arguments"+(r?" as "+r:""),n);if(this.mode==="text"&&!a.allowedInText)throw new gt("Can't use function '"+i+"' in text mode",n);if(this.mode==="math"&&a.allowedInMath===!1)throw new gt("Can't use function '"+i+"' in math mode",n);var{args:s,optArgs:l}=this.parseArguments(i,a);return this.callFunction(i,s,l,n,e)}callFunction(e,r,n,i,a){var s={funcName:e,parser:this,token:i,breakOnTokenText:a},l=hh[e];if(l&&l.handler)return l.handler(s,r,n);throw new gt("No function handler for "+e)}parseArguments(e,r){var n=r.numArgs+r.numOptionalArgs;if(n===0)return{args:[],optArgs:[]};for(var i=[],a=[],s=0;s<n;s++){var l=r.argTypes&&r.argTypes[s],u=s<r.numOptionalArgs;(r.primitive&&l==null||r.type==="sqrt"&&s===1&&a[0]==null)&&(l="primitive");var h=this.parseGroupOfType("argument to '"+e+"'",l,u);if(u)a.push(h);else if(h!=null)i.push(h);else throw new gt("Null argument, please report this as a bug")}return{args:i,optArgs:a}}parseGroupOfType(e,r,n){switch(r){case"color":return this.parseColorGroup(n);case"size":return this.parseSizeGroup(n);case"url":return this.parseUrlGroup(n);case"math":case"text":return this.parseArgumentGroup(n,r);case"hbox":{var i=this.parseArgumentGroup(n,"text");return i!=null?{type:"styling",mode:i.mode,body:[i],style:"text"}:null}case"raw":{var a=this.parseStringGroup("raw",n);return a!=null?{type:"raw",mode:"text",string:a.text}:null}case"primitive":{if(n)throw new gt("A primitive argument cannot be optional");var s=this.parseGroup(e);if(s==null)throw new gt("Expected group as "+e,this.fetch());return s}case"original":case null:case void 0:return this.parseArgumentGroup(n);default:throw new gt("Unknown group type as "+e,this.fetch())}}consumeSpaces(){for(;this.fetch().text===" ";)this.consume()}parseStringGroup(e,r){var n=this.gullet.scanArgument(r);if(n==null)return null;for(var i="",a;(a=this.fetch()).text!=="EOF";)i+=a.text,this.consume();return this.consume(),n.text=i,n}parseRegexGroup(e,r){for(var n=this.fetch(),i=n,a="",s;(s=this.fetch()).text!=="EOF"&&e.test(a+s.text);)i=s,a+=i.text,this.consume();if(a==="")throw new gt("Invalid "+r+": '"+n.text+"'",n);return n.range(i,a)}parseColorGroup(e){var r=this.parseStringGroup("color",e);if(r==null)return null;var n=/^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(r.text);if(!n)throw new gt("Invalid color: '"+r.text+"'",r);var i=n[0];return/^[0-9a-f]{6}$/i.test(i)&&(i="#"+i),{type:"color-token",mode:this.mode,color:i}}parseSizeGroup(e){var r,n=!1;if(this.gullet.consumeSpaces(),!e&&this.gullet.future().text!=="{"?r=this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/,"size"):r=this.parseStringGroup("size",e),!r)return null;!e&&r.text.length===0&&(r.text="0pt",n=!0);var i=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(r.text);if(!i)throw new gt("Invalid size: '"+r.text+"'",r);var a={number:+(i[1]+i[2]),unit:i[3]};if(!zz(a))throw new gt("Invalid unit: '"+a.unit+"'",r);return{type:"size",mode:this.mode,value:a,isBlank:n}}parseUrlGroup(e){this.gullet.lexer.setCatcode("%",13),this.gullet.lexer.setCatcode("~",12);var r=this.parseStringGroup("url",e);if(this.gullet.lexer.setCatcode("%",14),this.gullet.lexer.setCatcode("~",13),r==null)return null;var n=r.text.replace(/\\([#$%&~_^{}])/g,"$1");return{type:"url",mode:this.mode,url:n}}parseArgumentGroup(e,r){var n=this.gullet.scanArgument(e);if(n==null)return null;var i=this.mode;r&&this.switchMode(r),this.gullet.beginGroup();var a=this.parseExpression(!1,"EOF");this.expect("EOF"),this.gullet.endGroup();var s={type:"ordgroup",mode:this.mode,loc:n.loc,body:a};return r&&this.switchMode(i),s}parseGroup(e,r){var n=this.fetch(),i=n.text,a;if(i==="{"||i==="\\begingroup"){this.consume();var s=i==="{"?"}":"\\endgroup";this.gullet.beginGroup();var l=this.parseExpression(!1,s),u=this.fetch();this.expect(s),this.gullet.endGroup(),a={type:"ordgroup",mode:this.mode,loc:Xs.range(n,u),body:l,semisimple:i==="\\begingroup"||void 0}}else if(a=this.parseFunction(r,e)||this.parseSymbol(),a==null&&i[0]==="\\"&&!LG.hasOwnProperty(i)){if(this.settings.throwOnError)throw new gt("Undefined control sequence: "+i,n);a=this.formatUnsupportedCmd(i),this.consume()}return a}formLigatures(e){for(var r=e.length-1,n=0;n<r;++n){var i=e[n],a=i.text;a==="-"&&e[n+1].text==="-"&&(n+1<r&&e[n+2].text==="-"?(e.splice(n,3,{type:"textord",mode:"text",loc:Xs.range(i,e[n+2]),text:"---"}),r-=2):(e.splice(n,2,{type:"textord",mode:"text",loc:Xs.range(i,e[n+1]),text:"--"}),r-=1)),(a==="'"||a==="`")&&e[n+1].text===a&&(e.splice(n,2,{type:"textord",mode:"text",loc:Xs.range(i,e[n+1]),text:a+a}),r-=1)}}parseSymbol(){var e=this.fetch(),r=e.text;if(/^\\verb[^a-zA-Z]/.test(r)){this.consume();var n=r.slice(5),i=n.charAt(0)==="*";if(i&&(n=n.slice(1)),n.length<2||n.charAt(0)!==n.slice(-1))throw new gt(`\\verb assertion failed --
275 + please report what input caused this bug`);return n=n.slice(1,-1),{type:"verb",mode:"text",body:n,star:i}}Bz.hasOwnProperty(r[0])&&!An[this.mode][r[0]]&&(this.settings.strict&&this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Accented Unicode text character "'+r[0]+'" used in math mode',e),r=Bz[r[0]]+r.slice(1));var a=z4e.exec(r);a&&(r=r.substring(0,a.index),r==="i"?r="\u0131":r==="j"&&(r="\u0237"));var s;if(An[this.mode][r]){this.settings.strict&&this.mode==="math"&&C7.indexOf(r)>=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+r[0]+'" used in math mode',e);var l=An[this.mode][r].group,u=Xs.range(e),h;if(Mbe.hasOwnProperty(l)){var f=l;h={type:"atom",mode:this.mode,family:f,loc:u,text:r}}else h={type:l,mode:this.mode,loc:u,text:r};s=h}else if(r.charCodeAt(0)>=128)this.settings.strict&&($z(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),e)),s={type:"textord",mode:"text",loc:Xs.range(e),text:r};else return null;if(this.consume(),a)for(var d=0;d<a[0].length;d++){var p=a[0][d];if(!T7[p])throw new gt("Unknown accent ' "+p+"'",e);var m=T7[p][this.mode]||T7[p].text;if(!m)throw new gt("Accent "+p+" unsupported in "+this.mode+" mode",e);s={type:"accent",mode:this.mode,loc:Xs.range(e),label:m,isStretchy:!1,isShifty:!0,base:s}}return s}};v3.endOfExpression=["}","\\endgroup","\\end","\\right","&"];Q7=o(function(e,r){if(!(typeof e=="string"||e instanceof String))throw new TypeError("KaTeX can only parse string typed expression");var n=new v3(e,r);delete n.gullet.macros.current["\\df@tag"];var i=n.parse();if(delete n.gullet.macros.current["\\current@color"],delete n.gullet.macros.current["\\color"],n.gullet.macros.get("\\df@tag")){if(!r.displayMode)throw new gt("\\tag works only in display equations");i=[{type:"tag",mode:"text",body:i,tag:n.subparse([new So("\\df@tag")])}]}return i},"parseTree"),RG=o(function(e,r,n){r.textContent="";var i=Z7(e,n).toNode();r.appendChild(i)},"render");typeof document<"u"&&document.compatMode!=="CSS1Compat"&&(typeof console<"u"&&console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype."),RG=o(function(){throw new gt("KaTeX doesn't work in quirks mode.")},"render"));U4e=o(function(e,r){var n=Z7(e,r).toMarkup();return n},"renderToString"),H4e=o(function(e,r){var n=new zy(r);return Q7(e,n)},"generateParseTree"),NG=o(function(e,r,n){if(n.throwOnError||!(e instanceof gt))throw e;var i=Be.makeSpan(["katex-error"],[new Ts(r)]);return i.setAttribute("title",e.toString()),i.setAttribute("style","color:"+n.errorColor),i},"renderError"),Z7=o(function(e,r){var n=new zy(r);try{var i=Q7(e,n);return t4e(i,e,n)}catch(a){return NG(a,e,n)}},"renderToDomTree"),W4e=o(function(e,r){var n=new zy(r);try{var i=Q7(e,n);return r4e(i,e,n)}catch(a){return NG(a,e,n)}},"renderToHTMLTree"),q4e={version:"0.16.11",render:RG,renderToString:U4e,ParseError:gt,SETTINGS_SCHEMA:c3,__parse:H4e,__renderToDomTree:Z7,__renderToHTMLTree:W4e,__setFontMetrics:Abe,__defineSymbol:G,__defineFunction:Nt,__defineMacro:fe,__domTree:{Span:td,Anchor:Vy,SymbolNode:Ts,SvgNode:ll,PathNode:Kl,LineNode:Uy}}});function j4e(){let t="data-temp-href-target";ch.addHook("beforeSanitizeAttributes",e=>{e instanceof Element&&e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")??"")}),ch.addHook("afterSanitizeAttributes",e=>{e instanceof Element&&e.tagName==="A"&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)??""),e.removeAttribute(t),e.getAttribute("target")==="_blank"&&e.setAttribute("rel","noopener"))})}var nd,Y4e,X4e,BG,OG,Tr,K4e,Q4e,Z4e,J4e,FG,e3e,fr,t3e,r3e,ec,J7,n3e,i3e,PG,eA,pi,id,mh,Ze,gr=N(()=>{"use strict";u7();nd=/<br\s*\/?>/gi,Y4e=o(t=>t?FG(t).replace(/\\n/g,"#br#").split("#br#"):[""],"getRows"),X4e=(()=>{let t=!1;return()=>{t||(j4e(),t=!0)}})();o(j4e,"setupDompurifyHooks");BG=o(t=>(X4e(),ch.sanitize(t)),"removeScript"),OG=o((t,e)=>{if(e.flowchart?.htmlLabels!==!1){let r=e.securityLevel;r==="antiscript"||r==="strict"?t=BG(t):r!=="loose"&&(t=FG(t),t=t.replace(/</g,"&lt;").replace(/>/g,"&gt;"),t=t.replace(/=/g,"&equals;"),t=J4e(t))}return t},"sanitizeMore"),Tr=o((t,e)=>t&&(e.dompurifyConfig?t=ch.sanitize(OG(t,e),e.dompurifyConfig).toString():t=ch.sanitize(OG(t,e),{FORBID_TAGS:["style"]}).toString(),t),"sanitizeText"),K4e=o((t,e)=>typeof t=="string"?Tr(t,e):t.flat().map(r=>Tr(r,e)),"sanitizeTextOrArray"),Q4e=o(t=>nd.test(t),"hasBreaks"),Z4e=o(t=>t.split(nd),"splitBreaks"),J4e=o(t=>t.replace(/#br#/g,"<br/>"),"placeholderToBreak"),FG=o(t=>t.replace(nd,"#br#"),"breakToPlaceholder"),e3e=o(t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=e.replaceAll(/\(/g,"\\("),e=e.replaceAll(/\)/g,"\\)")),e},"getUrl"),fr=o(t=>!(t===!1||["false","null","0"].includes(String(t).trim().toLowerCase())),"evaluate"),t3e=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.max(...e)},"getMax"),r3e=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.min(...e)},"getMin"),ec=o(function(t){let e=t.split(/(,)/),r=[];for(let n=0;n<e.length;n++){let i=e[n];if(i===","&&n>0&&n+1<e.length){let a=e[n-1],s=e[n+1];n3e(a,s)&&(i=a+","+s,n++,r.pop())}r.push(i3e(i))}return r.join("")},"parseGenericTypes"),J7=o((t,e)=>Math.max(0,t.split(e).length-1),"countOccurrence"),n3e=o((t,e)=>{let r=J7(t,"~"),n=J7(e,"~");return r===1&&n===1},"shouldCombineSets"),i3e=o(t=>{let e=J7(t,"~"),r=!1;if(e<=1)return t;e%2!==0&&t.startsWith("~")&&(t=t.substring(1),r=!0);let n=[...t],i=n.indexOf("~"),a=n.lastIndexOf("~");for(;i!==-1&&a!==-1&&i!==a;)n[i]="<",n[a]=">",i=n.indexOf("~"),a=n.lastIndexOf("~");return r&&n.unshift("~"),n.join("")},"processSet"),PG=o(()=>window.MathMLElement!==void 0,"isMathMLSupported"),eA=/\$\$(.*)\$\$/g,pi=o(t=>(t.match(eA)?.length??0)>0,"hasKatex"),id=o(async(t,e)=>{t=await mh(t,e);let r=document.createElement("div");r.innerHTML=t,r.id="katex-temp",r.style.visibility="hidden",r.style.position="absolute",r.style.top="0",document.querySelector("body")?.insertAdjacentElement("beforeend",r);let i={width:r.clientWidth,height:r.clientHeight};return r.remove(),i},"calculateMathMLDimensions"),mh=o(async(t,e)=>{if(!pi(t))return t;if(!(PG()||e.legacyMathML||e.forceLegacyMathML))return t.replace(eA,"MathML is unsupported in this environment.");let{default:r}=await Promise.resolve().then(()=>(IG(),MG)),n=e.forceLegacyMathML||!PG()&&e.legacyMathML?"htmlAndMathml":"mathml";return t.split(nd).map(i=>pi(i)?`<div style="display: flex; align-items: center; justify-content: center; white-space: nowrap;">${i}</div>`:`<div>${i}</div>`).join("").replace(eA,(i,a)=>r.renderToString(a,{throwOnError:!0,displayMode:!0,output:n}).replace(/\n/g," ").replace(/<annotation.*<\/annotation>/g,""))},"renderKatex"),Ze={getRows:Y4e,sanitizeText:Tr,sanitizeTextOrArray:K4e,hasBreaks:Q4e,splitBreaks:Z4e,lineBreakRegex:nd,removeScript:BG,getUrl:e3e,evaluate:fr,getMax:t3e,getMin:r3e}});var a3e,s3e,vn,Ao,Ei=N(()=>{"use strict";vt();a3e=o(function(t,e){for(let r of e)t.attr(r[0],r[1])},"d3Attrs"),s3e=o(function(t,e,r){let n=new Map;return r?(n.set("width","100%"),n.set("style",`max-width: ${e}px;`)):(n.set("height",t),n.set("width",e)),n},"calculateSvgSizeAttrs"),vn=o(function(t,e,r,n){let i=s3e(e,r,n);a3e(t,i)},"configureSvgSize"),Ao=o(function(t,e,r,n){let i=e.node().getBBox(),a=i.width,s=i.height;Y.info(`SVG bounds: ${a}x${s}`,i);let l=0,u=0;Y.info(`Graph bounds: ${l}x${u}`,t),l=a+r*2,u=s+r*2,Y.info(`Calculated bounds: ${l}x${u}`),vn(e,u,l,n);let h=`${i.x-r} ${i.y-r} ${i.width+2*r} ${i.height+2*r}`;e.attr("viewBox",h)},"setupGraphViewbox")});var S3,o3e,$G,zG,tA=N(()=>{"use strict";vt();S3={},o3e=o((t,e,r)=>{let n="";return t in S3&&S3[t]?n=S3[t](r):Y.warn(`No theme found for ${t}`),` & {
276 + font-family: ${r.fontFamily};
277 + font-size: ${r.fontSize};
278 + fill: ${r.textColor}
279 + }
280 + @keyframes edge-animation-frame {
281 + from {
282 + stroke-dashoffset: 0;
283 + }
284 + }
285 + @keyframes dash {
286 + to {
287 + stroke-dashoffset: 0;
288 + }
289 + }
290 + & .edge-animation-slow {
291 + stroke-dasharray: 9,5 !important;
292 + stroke-dashoffset: 900;
293 + animation: dash 50s linear infinite;
294 + stroke-linecap: round;
295 + }
296 + & .edge-animation-fast {
297 + stroke-dasharray: 9,5 !important;
298 + stroke-dashoffset: 900;
299 + animation: dash 20s linear infinite;
300 + stroke-linecap: round;
301 + }
302 + /* Classes common for multiple diagrams */
303 +
304 + & .error-icon {
305 + fill: ${r.errorBkgColor};
306 + }
307 + & .error-text {
308 + fill: ${r.errorTextColor};
309 + stroke: ${r.errorTextColor};
310 + }
311 +
312 + & .edge-thickness-normal {
313 + stroke-width: 1px;
314 + }
315 + & .edge-thickness-thick {
316 + stroke-width: 3.5px
317 + }
318 + & .edge-pattern-solid {
319 + stroke-dasharray: 0;
320 + }
321 + & .edge-thickness-invisible {
322 + stroke-width: 0;
323 + fill: none;
324 + }
325 + & .edge-pattern-dashed{
326 + stroke-dasharray: 3;
327 + }
328 + .edge-pattern-dotted {
329 + stroke-dasharray: 2;
330 + }
331 +
332 + & .marker {
333 + fill: ${r.lineColor};
334 + stroke: ${r.lineColor};
335 + }
336 + & .marker.cross {
337 + stroke: ${r.lineColor};
338 + }
339 +
340 + & svg {
341 + font-family: ${r.fontFamily};
342 + font-size: ${r.fontSize};
343 + }
344 + & p {
345 + margin: 0
346 + }
347 +
348 + ${n}
349 +
350 + ${e}
351 +`},"getStyles"),$G=o((t,e)=>{e!==void 0&&(S3[t]=e)},"addStylesForDiagram"),zG=o3e});var qy={};hr(qy,{clear:()=>Ar,getAccDescription:()=>Mr,getAccTitle:()=>Rr,getDiagramTitle:()=>Ir,setAccDescription:()=>Nr,setAccTitle:()=>Lr,setDiagramTitle:()=>$r});var rA,nA,iA,aA,Ar,Lr,Rr,Nr,Mr,$r,Ir,mi=N(()=>{"use strict";gr();ji();rA="",nA="",iA="",aA=o(t=>Tr(t,cr()),"sanitizeText"),Ar=o(()=>{rA="",iA="",nA=""},"clear"),Lr=o(t=>{rA=aA(t).replace(/^\s+/g,"")},"setAccTitle"),Rr=o(()=>rA,"getAccTitle"),Nr=o(t=>{iA=aA(t).replace(/\n\s+/g,`
352 +`)},"setAccDescription"),Mr=o(()=>iA,"getAccDescription"),$r=o(t=>{nA=aA(t)},"setDiagramTitle"),Ir=o(()=>nA,"getDiagramTitle")});var GG,l3e,me,Yy,A3,Xy,oA,c3e,C3,ad,jy,sA,zt=N(()=>{"use strict";Xf();vt();ji();gr();Ei();tA();mi();GG=Y,l3e=wy,me=cr,Yy=X4,A3=lh,Xy=o(t=>Tr(t,me()),"sanitizeText"),oA=Ao,c3e=o(()=>qy,"getCommonDb"),C3={},ad=o((t,e,r)=>{C3[t]&&GG.warn(`Diagram with id ${t} already registered. Overwriting.`),C3[t]=e,r&&FC(t,r),$G(t,e.styles),e.injectUtils?.(GG,l3e,me,Xy,oA,c3e(),()=>{})},"registerDiagram"),jy=o(t=>{if(t in C3)return C3[t];throw new sA(t)},"getDiagram"),sA=class extends Error{static{o(this,"DiagramNotFoundError")}constructor(e){super(`Diagram ${e} not found.`)}}});var ul,gh,Ja,cl,tc,Ky,lA,cA,_3,D3,VG,u3e,h3e,f3e,d3e,p3e,m3e,g3e,y3e,v3e,x3e,b3e,w3e,T3e,k3e,E3e,S3e,C3e,UG,A3e,_3e,HG,D3e,L3e,R3e,N3e,yh,M3e,I3e,O3e,P3e,B3e,Qy,uA=N(()=>{"use strict";zt();gr();mi();ul=[],gh=[""],Ja="global",cl="",tc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],Ky=[],lA="",cA=!1,_3=4,D3=2,u3e=o(function(){return VG},"getC4Type"),h3e=o(function(t){VG=Tr(t,me())},"setC4Type"),f3e=o(function(t,e,r,n,i,a,s,l,u){if(t==null||e===void 0||e===null||r===void 0||r===null||n===void 0||n===null)return;let h={},f=Ky.find(d=>d.from===e&&d.to===r);if(f?h=f:Ky.push(h),h.type=t,h.from=e,h.to=r,h.label={text:n},i==null)h.techn={text:""};else if(typeof i=="object"){let[d,p]=Object.entries(i)[0];h[d]={text:p}}else h.techn={text:i};if(a==null)h.descr={text:""};else if(typeof a=="object"){let[d,p]=Object.entries(a)[0];h[d]={text:p}}else h.descr={text:a};if(typeof s=="object"){let[d,p]=Object.entries(s)[0];h[d]=p}else h.sprite=s;if(typeof l=="object"){let[d,p]=Object.entries(l)[0];h[d]=p}else h.tags=l;if(typeof u=="object"){let[d,p]=Object.entries(u)[0];h[d]=p}else h.link=u;h.wrap=yh()},"addRel"),d3e=o(function(t,e,r,n,i,a,s){if(e===null||r===null)return;let l={},u=ul.find(h=>h.alias===e);if(u&&e===u.alias?l=u:(l.alias=e,ul.push(l)),r==null?l.label={text:""}:l.label={text:r},n==null)l.descr={text:""};else if(typeof n=="object"){let[h,f]=Object.entries(n)[0];l[h]={text:f}}else l.descr={text:n};if(typeof i=="object"){let[h,f]=Object.entries(i)[0];l[h]=f}else l.sprite=i;if(typeof a=="object"){let[h,f]=Object.entries(a)[0];l[h]=f}else l.tags=a;if(typeof s=="object"){let[h,f]=Object.entries(s)[0];l[h]=f}else l.link=s;l.typeC4Shape={text:t},l.parentBoundary=Ja,l.wrap=yh()},"addPersonOrSystem"),p3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=ul.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,ul.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=yh(),u.typeC4Shape={text:t},u.parentBoundary=Ja},"addContainer"),m3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=ul.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,ul.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=yh(),u.typeC4Shape={text:t},u.parentBoundary=Ja},"addComponent"),g3e=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=tc.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,tc.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"system"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=Ja,a.wrap=yh(),cl=Ja,Ja=t,gh.push(cl)},"addPersonOrSystemBoundary"),y3e=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=tc.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,tc.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"container"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=Ja,a.wrap=yh(),cl=Ja,Ja=t,gh.push(cl)},"addContainerBoundary"),v3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=tc.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,tc.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.type={text:"node"};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.type={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.nodeType=t,u.parentBoundary=Ja,u.wrap=yh(),cl=Ja,Ja=e,gh.push(cl)},"addDeploymentNode"),x3e=o(function(){Ja=cl,gh.pop(),cl=gh.pop(),gh.push(cl)},"popBoundaryParseStack"),b3e=o(function(t,e,r,n,i,a,s,l,u,h,f){let d=ul.find(p=>p.alias===e);if(!(d===void 0&&(d=tc.find(p=>p.alias===e),d===void 0))){if(r!=null)if(typeof r=="object"){let[p,m]=Object.entries(r)[0];d[p]=m}else d.bgColor=r;if(n!=null)if(typeof n=="object"){let[p,m]=Object.entries(n)[0];d[p]=m}else d.fontColor=n;if(i!=null)if(typeof i=="object"){let[p,m]=Object.entries(i)[0];d[p]=m}else d.borderColor=i;if(a!=null)if(typeof a=="object"){let[p,m]=Object.entries(a)[0];d[p]=m}else d.shadowing=a;if(s!=null)if(typeof s=="object"){let[p,m]=Object.entries(s)[0];d[p]=m}else d.shape=s;if(l!=null)if(typeof l=="object"){let[p,m]=Object.entries(l)[0];d[p]=m}else d.sprite=l;if(u!=null)if(typeof u=="object"){let[p,m]=Object.entries(u)[0];d[p]=m}else d.techn=u;if(h!=null)if(typeof h=="object"){let[p,m]=Object.entries(h)[0];d[p]=m}else d.legendText=h;if(f!=null)if(typeof f=="object"){let[p,m]=Object.entries(f)[0];d[p]=m}else d.legendSprite=f}},"updateElStyle"),w3e=o(function(t,e,r,n,i,a,s){let l=Ky.find(u=>u.from===e&&u.to===r);if(l!==void 0){if(n!=null)if(typeof n=="object"){let[u,h]=Object.entries(n)[0];l[u]=h}else l.textColor=n;if(i!=null)if(typeof i=="object"){let[u,h]=Object.entries(i)[0];l[u]=h}else l.lineColor=i;if(a!=null)if(typeof a=="object"){let[u,h]=Object.entries(a)[0];l[u]=parseInt(h)}else l.offsetX=parseInt(a);if(s!=null)if(typeof s=="object"){let[u,h]=Object.entries(s)[0];l[u]=parseInt(h)}else l.offsetY=parseInt(s)}},"updateRelStyle"),T3e=o(function(t,e,r){let n=_3,i=D3;if(typeof e=="object"){let a=Object.values(e)[0];n=parseInt(a)}else n=parseInt(e);if(typeof r=="object"){let a=Object.values(r)[0];i=parseInt(a)}else i=parseInt(r);n>=1&&(_3=n),i>=1&&(D3=i)},"updateLayoutConfig"),k3e=o(function(){return _3},"getC4ShapeInRow"),E3e=o(function(){return D3},"getC4BoundaryInRow"),S3e=o(function(){return Ja},"getCurrentBoundaryParse"),C3e=o(function(){return cl},"getParentBoundaryParse"),UG=o(function(t){return t==null?ul:ul.filter(e=>e.parentBoundary===t)},"getC4ShapeArray"),A3e=o(function(t){return ul.find(e=>e.alias===t)},"getC4Shape"),_3e=o(function(t){return Object.keys(UG(t))},"getC4ShapeKeys"),HG=o(function(t){return t==null?tc:tc.filter(e=>e.parentBoundary===t)},"getBoundaries"),D3e=HG,L3e=o(function(){return Ky},"getRels"),R3e=o(function(){return lA},"getTitle"),N3e=o(function(t){cA=t},"setWrap"),yh=o(function(){return cA},"autoWrap"),M3e=o(function(){ul=[],tc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],cl="",Ja="global",gh=[""],Ky=[],gh=[""],lA="",cA=!1,_3=4,D3=2},"clear"),I3e={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},O3e={FILLED:0,OPEN:1},P3e={LEFTOF:0,RIGHTOF:1,OVER:2},B3e=o(function(t){lA=Tr(t,me())},"setTitle"),Qy={addPersonOrSystem:d3e,addPersonOrSystemBoundary:g3e,addContainer:p3e,addContainerBoundary:y3e,addComponent:m3e,addDeploymentNode:v3e,popBoundaryParseStack:x3e,addRel:f3e,updateElStyle:b3e,updateRelStyle:w3e,updateLayoutConfig:T3e,autoWrap:yh,setWrap:N3e,getC4ShapeArray:UG,getC4Shape:A3e,getC4ShapeKeys:_3e,getBoundaries:HG,getBoundarys:D3e,getCurrentBoundaryParse:S3e,getParentBoundaryParse:C3e,getRels:L3e,getTitle:R3e,getC4Type:u3e,getC4ShapeInRow:k3e,getC4BoundaryInRow:E3e,setAccTitle:Lr,getAccTitle:Rr,getAccDescription:Mr,setAccDescription:Nr,getConfig:o(()=>me().c4,"getConfig"),clear:M3e,LINETYPE:I3e,ARROWTYPE:O3e,PLACEMENT:P3e,setTitle:B3e,setC4Type:h3e}});function sd(t,e){return t==null||e==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}var hA=N(()=>{"use strict";o(sd,"ascending")});function fA(t,e){return t==null||e==null?NaN:e<t?-1:e>t?1:e>=t?0:NaN}var WG=N(()=>{"use strict";o(fA,"descending")});function od(t){let e,r,n;t.length!==2?(e=sd,r=o((l,u)=>sd(t(l),u),"compare2"),n=o((l,u)=>t(l)-u,"delta")):(e=t===sd||t===fA?t:F3e,r=t,n=t);function i(l,u,h=0,f=l.length){if(h<f){if(e(u,u)!==0)return f;do{let d=h+f>>>1;r(l[d],u)<0?h=d+1:f=d}while(h<f)}return h}o(i,"left");function a(l,u,h=0,f=l.length){if(h<f){if(e(u,u)!==0)return f;do{let d=h+f>>>1;r(l[d],u)<=0?h=d+1:f=d}while(h<f)}return h}o(a,"right");function s(l,u,h=0,f=l.length){let d=i(l,u,h,f-1);return d>h&&n(l[d-1],u)>-n(l[d],u)?d-1:d}return o(s,"center"),{left:i,center:s,right:a}}function F3e(){return 0}var dA=N(()=>{"use strict";hA();WG();o(od,"bisector");o(F3e,"zero")});function pA(t){return t===null?NaN:+t}var qG=N(()=>{"use strict";o(pA,"number")});var YG,XG,$3e,z3e,mA,jG=N(()=>{"use strict";hA();dA();qG();YG=od(sd),XG=YG.right,$3e=YG.left,z3e=od(pA).center,mA=XG});function KG({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):r}function G3e({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):(t.set(n,r),r)}function V3e({_intern:t,_key:e},r){let n=e(r);return t.has(n)&&(r=t.get(n),t.delete(n)),r}function U3e(t){return t!==null&&typeof t=="object"?t.valueOf():t}var g0,QG=N(()=>{"use strict";g0=class extends Map{static{o(this,"InternMap")}constructor(e,r=U3e){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),e!=null)for(let[n,i]of e)this.set(n,i)}get(e){return super.get(KG(this,e))}has(e){return super.has(KG(this,e))}set(e,r){return super.set(G3e(this,e),r)}delete(e){return super.delete(V3e(this,e))}};o(KG,"intern_get");o(G3e,"intern_set");o(V3e,"intern_delete");o(U3e,"keyof")});function L3(t,e,r){let n=(e-t)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),s=a>=H3e?10:a>=W3e?5:a>=q3e?2:1,l,u,h;return i<0?(h=Math.pow(10,-i)/s,l=Math.round(t*h),u=Math.round(e*h),l/h<t&&++l,u/h>e&&--u,h=-h):(h=Math.pow(10,i)*s,l=Math.round(t/h),u=Math.round(e/h),l*h<t&&++l,u*h>e&&--u),u<l&&.5<=r&&r<2?L3(t,e,r*2):[l,u,h]}function R3(t,e,r){if(e=+e,t=+t,r=+r,!(r>0))return[];if(t===e)return[t];let n=e<t,[i,a,s]=n?L3(e,t,r):L3(t,e,r);if(!(a>=i))return[];let l=a-i+1,u=new Array(l);if(n)if(s<0)for(let h=0;h<l;++h)u[h]=(a-h)/-s;else for(let h=0;h<l;++h)u[h]=(a-h)*s;else if(s<0)for(let h=0;h<l;++h)u[h]=(i+h)/-s;else for(let h=0;h<l;++h)u[h]=(i+h)*s;return u}function Zy(t,e,r){return e=+e,t=+t,r=+r,L3(t,e,r)[2]}function y0(t,e,r){e=+e,t=+t,r=+r;let n=e<t,i=n?Zy(e,t,r):Zy(t,e,r);return(n?-1:1)*(i<0?1/-i:i)}var H3e,W3e,q3e,ZG=N(()=>{"use strict";H3e=Math.sqrt(50),W3e=Math.sqrt(10),q3e=Math.sqrt(2);o(L3,"tickSpec");o(R3,"ticks");o(Zy,"tickIncrement");o(y0,"tickStep")});function N3(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r<n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r<i||r===void 0&&i>=i)&&(r=i)}return r}var JG=N(()=>{"use strict";o(N3,"max")});function M3(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var eV=N(()=>{"use strict";o(M3,"min")});function I3(t,e,r){t=+t,e=+e,r=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((e-t)/r))|0,a=new Array(i);++n<i;)a[n]=t+n*r;return a}var tV=N(()=>{"use strict";o(I3,"range")});var vh=N(()=>{"use strict";jG();dA();JG();eV();tV();ZG();QG()});function gA(t){return t}var rV=N(()=>{"use strict";o(gA,"default")});function Y3e(t){return"translate("+t+",0)"}function X3e(t){return"translate(0,"+t+")"}function j3e(t){return e=>+t(e)}function K3e(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function Q3e(){return!this.__axis}function iV(t,e){var r=[],n=null,i=null,a=6,s=6,l=3,u=typeof window<"u"&&window.devicePixelRatio>1?0:.5,h=t===P3||t===O3?-1:1,f=t===O3||t===yA?"x":"y",d=t===P3||t===vA?Y3e:X3e;function p(m){var g=n??(e.ticks?e.ticks.apply(e,r):e.domain()),y=i??(e.tickFormat?e.tickFormat.apply(e,r):gA),v=Math.max(a,0)+l,x=e.range(),b=+x[0]+u,w=+x[x.length-1]+u,C=(e.bandwidth?K3e:j3e)(e.copy(),u),T=m.selection?m.selection():m,E=T.selectAll(".domain").data([null]),A=T.selectAll(".tick").data(g,e).order(),S=A.exit(),_=A.enter().append("g").attr("class","tick"),I=A.select("line"),D=A.select("text");E=E.merge(E.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),A=A.merge(_),I=I.merge(_.append("line").attr("stroke","currentColor").attr(f+"2",h*a)),D=D.merge(_.append("text").attr("fill","currentColor").attr(f,h*v).attr("dy",t===P3?"0em":t===vA?"0.71em":"0.32em")),m!==T&&(E=E.transition(m),A=A.transition(m),I=I.transition(m),D=D.transition(m),S=S.transition(m).attr("opacity",nV).attr("transform",function(k){return isFinite(k=C(k))?d(k+u):this.getAttribute("transform")}),_.attr("opacity",nV).attr("transform",function(k){var L=this.parentNode.__axis;return d((L&&isFinite(L=L(k))?L:C(k))+u)})),S.remove(),E.attr("d",t===O3||t===yA?s?"M"+h*s+","+b+"H"+u+"V"+w+"H"+h*s:"M"+u+","+b+"V"+w:s?"M"+b+","+h*s+"V"+u+"H"+w+"V"+h*s:"M"+b+","+u+"H"+w),A.attr("opacity",1).attr("transform",function(k){return d(C(k)+u)}),I.attr(f+"2",h*a),D.attr(f,h*v).text(y),T.filter(Q3e).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===yA?"start":t===O3?"end":"middle"),T.each(function(){this.__axis=C})}return o(p,"axis"),p.scale=function(m){return arguments.length?(e=m,p):e},p.ticks=function(){return r=Array.from(arguments),p},p.tickArguments=function(m){return arguments.length?(r=m==null?[]:Array.from(m),p):r.slice()},p.tickValues=function(m){return arguments.length?(n=m==null?null:Array.from(m),p):n&&n.slice()},p.tickFormat=function(m){return arguments.length?(i=m,p):i},p.tickSize=function(m){return arguments.length?(a=s=+m,p):a},p.tickSizeInner=function(m){return arguments.length?(a=+m,p):a},p.tickSizeOuter=function(m){return arguments.length?(s=+m,p):s},p.tickPadding=function(m){return arguments.length?(l=+m,p):l},p.offset=function(m){return arguments.length?(u=+m,p):u},p}function xA(t){return iV(P3,t)}function bA(t){return iV(vA,t)}var P3,yA,vA,O3,nV,aV=N(()=>{"use strict";rV();P3=1,yA=2,vA=3,O3=4,nV=1e-6;o(Y3e,"translateX");o(X3e,"translateY");o(j3e,"number");o(K3e,"center");o(Q3e,"entering");o(iV,"axis");o(xA,"axisTop");o(bA,"axisBottom")});var sV=N(()=>{"use strict";aV()});function lV(){for(var t=0,e=arguments.length,r={},n;t<e;++t){if(!(n=arguments[t]+"")||n in r||/[\s.]/.test(n))throw new Error("illegal type: "+n);r[n]=[]}return new B3(r)}function B3(t){this._=t}function J3e(t,e){return t.trim().split(/^|\s+/).map(function(r){var n="",i=r.indexOf(".");if(i>=0&&(n=r.slice(i+1),r=r.slice(0,i)),r&&!e.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:n}})}function e5e(t,e){for(var r=0,n=t.length,i;r<n;++r)if((i=t[r]).name===e)return i.value}function oV(t,e,r){for(var n=0,i=t.length;n<i;++n)if(t[n].name===e){t[n]=Z3e,t=t.slice(0,n).concat(t.slice(n+1));break}return r!=null&&t.push({name:e,value:r}),t}var Z3e,wA,cV=N(()=>{"use strict";Z3e={value:o(()=>{},"value")};o(lV,"dispatch");o(B3,"Dispatch");o(J3e,"parseTypenames");B3.prototype=lV.prototype={constructor:B3,on:o(function(t,e){var r=this._,n=J3e(t+"",r),i,a=-1,s=n.length;if(arguments.length<2){for(;++a<s;)if((i=(t=n[a]).type)&&(i=e5e(r[i],t.name)))return i;return}if(e!=null&&typeof e!="function")throw new Error("invalid callback: "+e);for(;++a<s;)if(i=(t=n[a]).type)r[i]=oV(r[i],t.name,e);else if(e==null)for(i in r)r[i]=oV(r[i],t.name,null);return this},"on"),copy:o(function(){var t={},e=this._;for(var r in e)t[r]=e[r].slice();return new B3(t)},"copy"),call:o(function(t,e){if((i=arguments.length-2)>0)for(var r=new Array(i),n=0,i,a;n<i;++n)r[n]=arguments[n+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(a=this._[t],n=0,i=a.length;n<i;++n)a[n].value.apply(e,r)},"call"),apply:o(function(t,e,r){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var n=this._[t],i=0,a=n.length;i<a;++i)n[i].value.apply(e,r)},"apply")};o(e5e,"get");o(oV,"set");wA=lV});var TA=N(()=>{"use strict";cV()});var F3,kA,EA=N(()=>{"use strict";F3="http://www.w3.org/1999/xhtml",kA={svg:"http://www.w3.org/2000/svg",xhtml:F3,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"}});function rc(t){var e=t+="",r=e.indexOf(":");return r>=0&&(e=t.slice(0,r))!=="xmlns"&&(t=t.slice(r+1)),kA.hasOwnProperty(e)?{space:kA[e],local:t}:t}var $3=N(()=>{"use strict";EA();o(rc,"default")});function t5e(t){return function(){var e=this.ownerDocument,r=this.namespaceURI;return r===F3&&e.documentElement.namespaceURI===F3?e.createElement(t):e.createElementNS(r,t)}}function r5e(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function Jy(t){var e=rc(t);return(e.local?r5e:t5e)(e)}var SA=N(()=>{"use strict";$3();EA();o(t5e,"creatorInherit");o(r5e,"creatorFixed");o(Jy,"default")});function n5e(){}function xh(t){return t==null?n5e:function(){return this.querySelector(t)}}var z3=N(()=>{"use strict";o(n5e,"none");o(xh,"default")});function CA(t){typeof t!="function"&&(t=xh(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i<r;++i)for(var a=e[i],s=a.length,l=n[i]=new Array(s),u,h,f=0;f<s;++f)(u=a[f])&&(h=t.call(u,u.__data__,f,a))&&("__data__"in u&&(h.__data__=u.__data__),l[f]=h);return new oi(n,this._parents)}var uV=N(()=>{"use strict";hl();z3();o(CA,"default")});function AA(t){return t==null?[]:Array.isArray(t)?t:Array.from(t)}var hV=N(()=>{"use strict";o(AA,"array")});function i5e(){return[]}function v0(t){return t==null?i5e:function(){return this.querySelectorAll(t)}}var _A=N(()=>{"use strict";o(i5e,"empty");o(v0,"default")});function a5e(t){return function(){return AA(t.apply(this,arguments))}}function DA(t){typeof t=="function"?t=a5e(t):t=v0(t);for(var e=this._groups,r=e.length,n=[],i=[],a=0;a<r;++a)for(var s=e[a],l=s.length,u,h=0;h<l;++h)(u=s[h])&&(n.push(t.call(u,u.__data__,h,s)),i.push(u));return new oi(n,i)}var fV=N(()=>{"use strict";hl();hV();_A();o(a5e,"arrayAll");o(DA,"default")});function x0(t){return function(){return this.matches(t)}}function G3(t){return function(e){return e.matches(t)}}var ev=N(()=>{"use strict";o(x0,"default");o(G3,"childMatcher")});function o5e(t){return function(){return s5e.call(this.children,t)}}function l5e(){return this.firstElementChild}function LA(t){return this.select(t==null?l5e:o5e(typeof t=="function"?t:G3(t)))}var s5e,dV=N(()=>{"use strict";ev();s5e=Array.prototype.find;o(o5e,"childFind");o(l5e,"childFirst");o(LA,"default")});function u5e(){return Array.from(this.children)}function h5e(t){return function(){return c5e.call(this.children,t)}}function RA(t){return this.selectAll(t==null?u5e:h5e(typeof t=="function"?t:G3(t)))}var c5e,pV=N(()=>{"use strict";ev();c5e=Array.prototype.filter;o(u5e,"children");o(h5e,"childrenFilter");o(RA,"default")});function NA(t){typeof t!="function"&&(t=x0(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i<r;++i)for(var a=e[i],s=a.length,l=n[i]=[],u,h=0;h<s;++h)(u=a[h])&&t.call(u,u.__data__,h,a)&&l.push(u);return new oi(n,this._parents)}var mV=N(()=>{"use strict";hl();ev();o(NA,"default")});function tv(t){return new Array(t.length)}var MA=N(()=>{"use strict";o(tv,"default")});function IA(){return new oi(this._enter||this._groups.map(tv),this._parents)}function rv(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}var OA=N(()=>{"use strict";MA();hl();o(IA,"default");o(rv,"EnterNode");rv.prototype={constructor:rv,appendChild:o(function(t){return this._parent.insertBefore(t,this._next)},"appendChild"),insertBefore:o(function(t,e){return this._parent.insertBefore(t,e)},"insertBefore"),querySelector:o(function(t){return this._parent.querySelector(t)},"querySelector"),querySelectorAll:o(function(t){return this._parent.querySelectorAll(t)},"querySelectorAll")}});function PA(t){return function(){return t}}var gV=N(()=>{"use strict";o(PA,"default")});function f5e(t,e,r,n,i,a){for(var s=0,l,u=e.length,h=a.length;s<h;++s)(l=e[s])?(l.__data__=a[s],n[s]=l):r[s]=new rv(t,a[s]);for(;s<u;++s)(l=e[s])&&(i[s]=l)}function d5e(t,e,r,n,i,a,s){var l,u,h=new Map,f=e.length,d=a.length,p=new Array(f),m;for(l=0;l<f;++l)(u=e[l])&&(p[l]=m=s.call(u,u.__data__,l,e)+"",h.has(m)?i[l]=u:h.set(m,u));for(l=0;l<d;++l)m=s.call(t,a[l],l,a)+"",(u=h.get(m))?(n[l]=u,u.__data__=a[l],h.delete(m)):r[l]=new rv(t,a[l]);for(l=0;l<f;++l)(u=e[l])&&h.get(p[l])===u&&(i[l]=u)}function p5e(t){return t.__data__}function BA(t,e){if(!arguments.length)return Array.from(this,p5e);var r=e?d5e:f5e,n=this._parents,i=this._groups;typeof t!="function"&&(t=PA(t));for(var a=i.length,s=new Array(a),l=new Array(a),u=new Array(a),h=0;h<a;++h){var f=n[h],d=i[h],p=d.length,m=m5e(t.call(f,f&&f.__data__,h,n)),g=m.length,y=l[h]=new Array(g),v=s[h]=new Array(g),x=u[h]=new Array(p);r(f,d,y,v,x,m,e);for(var b=0,w=0,C,T;b<g;++b)if(C=y[b]){for(b>=w&&(w=b+1);!(T=v[w])&&++w<g;);C._next=T||null}}return s=new oi(s,n),s._enter=l,s._exit=u,s}function m5e(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}var yV=N(()=>{"use strict";hl();OA();gV();o(f5e,"bindIndex");o(d5e,"bindKey");o(p5e,"datum");o(BA,"default");o(m5e,"arraylike")});function FA(){return new oi(this._exit||this._groups.map(tv),this._parents)}var vV=N(()=>{"use strict";MA();hl();o(FA,"default")});function $A(t,e,r){var n=this.enter(),i=this,a=this.exit();return typeof t=="function"?(n=t(n),n&&(n=n.selection())):n=n.append(t+""),e!=null&&(i=e(i),i&&(i=i.selection())),r==null?a.remove():r(a),n&&i?n.merge(i).order():i}var xV=N(()=>{"use strict";o($A,"default")});function zA(t){for(var e=t.selection?t.selection():t,r=this._groups,n=e._groups,i=r.length,a=n.length,s=Math.min(i,a),l=new Array(i),u=0;u<s;++u)for(var h=r[u],f=n[u],d=h.length,p=l[u]=new Array(d),m,g=0;g<d;++g)(m=h[g]||f[g])&&(p[g]=m);for(;u<i;++u)l[u]=r[u];return new oi(l,this._parents)}var bV=N(()=>{"use strict";hl();o(zA,"default")});function GA(){for(var t=this._groups,e=-1,r=t.length;++e<r;)for(var n=t[e],i=n.length-1,a=n[i],s;--i>=0;)(s=n[i])&&(a&&s.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(s,a),a=s);return this}var wV=N(()=>{"use strict";o(GA,"default")});function VA(t){t||(t=g5e);function e(d,p){return d&&p?t(d.__data__,p.__data__):!d-!p}o(e,"compareNode");for(var r=this._groups,n=r.length,i=new Array(n),a=0;a<n;++a){for(var s=r[a],l=s.length,u=i[a]=new Array(l),h,f=0;f<l;++f)(h=s[f])&&(u[f]=h);u.sort(e)}return new oi(i,this._parents).order()}function g5e(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}var TV=N(()=>{"use strict";hl();o(VA,"default");o(g5e,"ascending")});function UA(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}var kV=N(()=>{"use strict";o(UA,"default")});function HA(){return Array.from(this)}var EV=N(()=>{"use strict";o(HA,"default")});function WA(){for(var t=this._groups,e=0,r=t.length;e<r;++e)for(var n=t[e],i=0,a=n.length;i<a;++i){var s=n[i];if(s)return s}return null}var SV=N(()=>{"use strict";o(WA,"default")});function qA(){let t=0;for(let e of this)++t;return t}var CV=N(()=>{"use strict";o(qA,"default")});function YA(){return!this.node()}var AV=N(()=>{"use strict";o(YA,"default")});function XA(t){for(var e=this._groups,r=0,n=e.length;r<n;++r)for(var i=e[r],a=0,s=i.length,l;a<s;++a)(l=i[a])&&t.call(l,l.__data__,a,i);return this}var _V=N(()=>{"use strict";o(XA,"default")});function y5e(t){return function(){this.removeAttribute(t)}}function v5e(t){return function(){this.removeAttributeNS(t.space,t.local)}}function x5e(t,e){return function(){this.setAttribute(t,e)}}function b5e(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function w5e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttribute(t):this.setAttribute(t,r)}}function T5e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function jA(t,e){var r=rc(t);if(arguments.length<2){var n=this.node();return r.local?n.getAttributeNS(r.space,r.local):n.getAttribute(r)}return this.each((e==null?r.local?v5e:y5e:typeof e=="function"?r.local?T5e:w5e:r.local?b5e:x5e)(r,e))}var DV=N(()=>{"use strict";$3();o(y5e,"attrRemove");o(v5e,"attrRemoveNS");o(x5e,"attrConstant");o(b5e,"attrConstantNS");o(w5e,"attrFunction");o(T5e,"attrFunctionNS");o(jA,"default")});function nv(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}var KA=N(()=>{"use strict";o(nv,"default")});function k5e(t){return function(){this.style.removeProperty(t)}}function E5e(t,e,r){return function(){this.style.setProperty(t,e,r)}}function S5e(t,e,r){return function(){var n=e.apply(this,arguments);n==null?this.style.removeProperty(t):this.style.setProperty(t,n,r)}}function QA(t,e,r){return arguments.length>1?this.each((e==null?k5e:typeof e=="function"?S5e:E5e)(t,e,r??"")):bh(this.node(),t)}function bh(t,e){return t.style.getPropertyValue(e)||nv(t).getComputedStyle(t,null).getPropertyValue(e)}var ZA=N(()=>{"use strict";KA();o(k5e,"styleRemove");o(E5e,"styleConstant");o(S5e,"styleFunction");o(QA,"default");o(bh,"styleValue")});function C5e(t){return function(){delete this[t]}}function A5e(t,e){return function(){this[t]=e}}function _5e(t,e){return function(){var r=e.apply(this,arguments);r==null?delete this[t]:this[t]=r}}function JA(t,e){return arguments.length>1?this.each((e==null?C5e:typeof e=="function"?_5e:A5e)(t,e)):this.node()[t]}var LV=N(()=>{"use strict";o(C5e,"propertyRemove");o(A5e,"propertyConstant");o(_5e,"propertyFunction");o(JA,"default")});function RV(t){return t.trim().split(/^|\s+/)}function e8(t){return t.classList||new NV(t)}function NV(t){this._node=t,this._names=RV(t.getAttribute("class")||"")}function MV(t,e){for(var r=e8(t),n=-1,i=e.length;++n<i;)r.add(e[n])}function IV(t,e){for(var r=e8(t),n=-1,i=e.length;++n<i;)r.remove(e[n])}function D5e(t){return function(){MV(this,t)}}function L5e(t){return function(){IV(this,t)}}function R5e(t,e){return function(){(e.apply(this,arguments)?MV:IV)(this,t)}}function t8(t,e){var r=RV(t+"");if(arguments.length<2){for(var n=e8(this.node()),i=-1,a=r.length;++i<a;)if(!n.contains(r[i]))return!1;return!0}return this.each((typeof e=="function"?R5e:e?D5e:L5e)(r,e))}var OV=N(()=>{"use strict";o(RV,"classArray");o(e8,"classList");o(NV,"ClassList");NV.prototype={add:o(function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},"add"),remove:o(function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},"remove"),contains:o(function(t){return this._names.indexOf(t)>=0},"contains")};o(MV,"classedAdd");o(IV,"classedRemove");o(D5e,"classedTrue");o(L5e,"classedFalse");o(R5e,"classedFunction");o(t8,"default")});function N5e(){this.textContent=""}function M5e(t){return function(){this.textContent=t}}function I5e(t){return function(){var e=t.apply(this,arguments);this.textContent=e??""}}function r8(t){return arguments.length?this.each(t==null?N5e:(typeof t=="function"?I5e:M5e)(t)):this.node().textContent}var PV=N(()=>{"use strict";o(N5e,"textRemove");o(M5e,"textConstant");o(I5e,"textFunction");o(r8,"default")});function O5e(){this.innerHTML=""}function P5e(t){return function(){this.innerHTML=t}}function B5e(t){return function(){var e=t.apply(this,arguments);this.innerHTML=e??""}}function n8(t){return arguments.length?this.each(t==null?O5e:(typeof t=="function"?B5e:P5e)(t)):this.node().innerHTML}var BV=N(()=>{"use strict";o(O5e,"htmlRemove");o(P5e,"htmlConstant");o(B5e,"htmlFunction");o(n8,"default")});function F5e(){this.nextSibling&&this.parentNode.appendChild(this)}function i8(){return this.each(F5e)}var FV=N(()=>{"use strict";o(F5e,"raise");o(i8,"default")});function $5e(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function a8(){return this.each($5e)}var $V=N(()=>{"use strict";o($5e,"lower");o(a8,"default")});function s8(t){var e=typeof t=="function"?t:Jy(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})}var zV=N(()=>{"use strict";SA();o(s8,"default")});function z5e(){return null}function o8(t,e){var r=typeof t=="function"?t:Jy(t),n=e==null?z5e:typeof e=="function"?e:xh(e);return this.select(function(){return this.insertBefore(r.apply(this,arguments),n.apply(this,arguments)||null)})}var GV=N(()=>{"use strict";SA();z3();o(z5e,"constantNull");o(o8,"default")});function G5e(){var t=this.parentNode;t&&t.removeChild(this)}function l8(){return this.each(G5e)}var VV=N(()=>{"use strict";o(G5e,"remove");o(l8,"default")});function V5e(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function U5e(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function c8(t){return this.select(t?U5e:V5e)}var UV=N(()=>{"use strict";o(V5e,"selection_cloneShallow");o(U5e,"selection_cloneDeep");o(c8,"default")});function u8(t){return arguments.length?this.property("__data__",t):this.node().__data__}var HV=N(()=>{"use strict";o(u8,"default")});function H5e(t){return function(e){t.call(this,e,this.__data__)}}function W5e(t){return t.trim().split(/^|\s+/).map(function(e){var r="",n=e.indexOf(".");return n>=0&&(r=e.slice(n+1),e=e.slice(0,n)),{type:e,name:r}})}function q5e(t){return function(){var e=this.__on;if(e){for(var r=0,n=-1,i=e.length,a;r<i;++r)a=e[r],(!t.type||a.type===t.type)&&a.name===t.name?this.removeEventListener(a.type,a.listener,a.options):e[++n]=a;++n?e.length=n:delete this.__on}}}function Y5e(t,e,r){return function(){var n=this.__on,i,a=H5e(e);if(n){for(var s=0,l=n.length;s<l;++s)if((i=n[s]).type===t.type&&i.name===t.name){this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=a,i.options=r),i.value=e;return}}this.addEventListener(t.type,a,r),i={type:t.type,name:t.name,value:e,listener:a,options:r},n?n.push(i):this.__on=[i]}}function h8(t,e,r){var n=W5e(t+""),i,a=n.length,s;if(arguments.length<2){var l=this.node().__on;if(l){for(var u=0,h=l.length,f;u<h;++u)for(i=0,f=l[u];i<a;++i)if((s=n[i]).type===f.type&&s.name===f.name)return f.value}return}for(l=e?Y5e:q5e,i=0;i<a;++i)this.each(l(n[i],e,r));return this}var WV=N(()=>{"use strict";o(H5e,"contextListener");o(W5e,"parseTypenames");o(q5e,"onRemove");o(Y5e,"onAdd");o(h8,"default")});function qV(t,e,r){var n=nv(t),i=n.CustomEvent;typeof i=="function"?i=new i(e,r):(i=n.document.createEvent("Event"),r?(i.initEvent(e,r.bubbles,r.cancelable),i.detail=r.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function X5e(t,e){return function(){return qV(this,t,e)}}function j5e(t,e){return function(){return qV(this,t,e.apply(this,arguments))}}function f8(t,e){return this.each((typeof e=="function"?j5e:X5e)(t,e))}var YV=N(()=>{"use strict";KA();o(qV,"dispatchEvent");o(X5e,"dispatchConstant");o(j5e,"dispatchFunction");o(f8,"default")});function*d8(){for(var t=this._groups,e=0,r=t.length;e<r;++e)for(var n=t[e],i=0,a=n.length,s;i<a;++i)(s=n[i])&&(yield s)}var XV=N(()=>{"use strict";o(d8,"default")});function oi(t,e){this._groups=t,this._parents=e}function jV(){return new oi([[document.documentElement]],p8)}function K5e(){return this}var p8,hu,hl=N(()=>{"use strict";uV();fV();dV();pV();mV();yV();OA();vV();xV();bV();wV();TV();kV();EV();SV();CV();AV();_V();DV();ZA();LV();OV();PV();BV();FV();$V();zV();GV();VV();UV();HV();WV();YV();XV();p8=[null];o(oi,"Selection");o(jV,"selection");o(K5e,"selection_selection");oi.prototype=jV.prototype={constructor:oi,select:CA,selectAll:DA,selectChild:LA,selectChildren:RA,filter:NA,data:BA,enter:IA,exit:FA,join:$A,merge:zA,selection:K5e,order:GA,sort:VA,call:UA,nodes:HA,node:WA,size:qA,empty:YA,each:XA,attr:jA,style:QA,property:JA,classed:t8,text:r8,html:n8,raise:i8,lower:a8,append:s8,insert:o8,remove:l8,clone:c8,datum:u8,on:h8,dispatch:f8,[Symbol.iterator]:d8};hu=jV});function Ge(t){return typeof t=="string"?new oi([[document.querySelector(t)]],[document.documentElement]):new oi([[t]],p8)}var KV=N(()=>{"use strict";hl();o(Ge,"default")});var fl=N(()=>{"use strict";ev();$3();KV();hl();z3();_A();ZA()});var QV=N(()=>{"use strict"});function wh(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function b0(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}var m8=N(()=>{"use strict";o(wh,"default");o(b0,"extend")});function Th(){}function JV(){return this.rgb().formatHex()}function iwe(){return this.rgb().formatHex8()}function awe(){return sU(this).formatHsl()}function eU(){return this.rgb().formatRgb()}function pl(t){var e,r;return t=(t+"").trim().toLowerCase(),(e=Q5e.exec(t))?(r=e[1].length,e=parseInt(e[1],16),r===6?tU(e):r===3?new ua(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?V3(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?V3(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=Z5e.exec(t))?new ua(e[1],e[2],e[3],1):(e=J5e.exec(t))?new ua(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=ewe.exec(t))?V3(e[1],e[2],e[3],e[4]):(e=twe.exec(t))?V3(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=rwe.exec(t))?iU(e[1],e[2]/100,e[3]/100,1):(e=nwe.exec(t))?iU(e[1],e[2]/100,e[3]/100,e[4]):ZV.hasOwnProperty(t)?tU(ZV[t]):t==="transparent"?new ua(NaN,NaN,NaN,0):null}function tU(t){return new ua(t>>16&255,t>>8&255,t&255,1)}function V3(t,e,r,n){return n<=0&&(t=e=r=NaN),new ua(t,e,r,n)}function y8(t){return t instanceof Th||(t=pl(t)),t?(t=t.rgb(),new ua(t.r,t.g,t.b,t.opacity)):new ua}function T0(t,e,r,n){return arguments.length===1?y8(t):new ua(t,e,r,n??1)}function ua(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function rU(){return`#${ld(this.r)}${ld(this.g)}${ld(this.b)}`}function swe(){return`#${ld(this.r)}${ld(this.g)}${ld(this.b)}${ld((isNaN(this.opacity)?1:this.opacity)*255)}`}function nU(){let t=W3(this.opacity);return`${t===1?"rgb(":"rgba("}${cd(this.r)}, ${cd(this.g)}, ${cd(this.b)}${t===1?")":`, ${t})`}`}function W3(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function cd(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function ld(t){return t=cd(t),(t<16?"0":"")+t.toString(16)}function iU(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new dl(t,e,r,n)}function sU(t){if(t instanceof dl)return new dl(t.h,t.s,t.l,t.opacity);if(t instanceof Th||(t=pl(t)),!t)return new dl;if(t instanceof dl)return t;t=t.rgb();var e=t.r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),a=Math.max(e,r,n),s=NaN,l=a-i,u=(a+i)/2;return l?(e===a?s=(r-n)/l+(r<n)*6:r===a?s=(n-e)/l+2:s=(e-r)/l+4,l/=u<.5?a+i:2-a-i,s*=60):l=u>0&&u<1?0:s,new dl(s,l,u,t.opacity)}function oU(t,e,r,n){return arguments.length===1?sU(t):new dl(t,e,r,n??1)}function dl(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function aU(t){return t=(t||0)%360,t<0?t+360:t}function U3(t){return Math.max(0,Math.min(1,t||0))}function g8(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}var iv,H3,w0,av,nc,Q5e,Z5e,J5e,ewe,twe,rwe,nwe,ZV,v8=N(()=>{"use strict";m8();o(Th,"Color");iv=.7,H3=1/iv,w0="\\s*([+-]?\\d+)\\s*",av="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",nc="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Q5e=/^#([0-9a-f]{3,8})$/,Z5e=new RegExp(`^rgb\\(${w0},${w0},${w0}\\)$`),J5e=new RegExp(`^rgb\\(${nc},${nc},${nc}\\)$`),ewe=new RegExp(`^rgba\\(${w0},${w0},${w0},${av}\\)$`),twe=new RegExp(`^rgba\\(${nc},${nc},${nc},${av}\\)$`),rwe=new RegExp(`^hsl\\(${av},${nc},${nc}\\)$`),nwe=new RegExp(`^hsla\\(${av},${nc},${nc},${av}\\)$`),ZV={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};wh(Th,pl,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:JV,formatHex:JV,formatHex8:iwe,formatHsl:awe,formatRgb:eU,toString:eU});o(JV,"color_formatHex");o(iwe,"color_formatHex8");o(awe,"color_formatHsl");o(eU,"color_formatRgb");o(pl,"color");o(tU,"rgbn");o(V3,"rgba");o(y8,"rgbConvert");o(T0,"rgb");o(ua,"Rgb");wh(ua,T0,b0(Th,{brighter(t){return t=t==null?H3:Math.pow(H3,t),new ua(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?iv:Math.pow(iv,t),new ua(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new ua(cd(this.r),cd(this.g),cd(this.b),W3(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:rU,formatHex:rU,formatHex8:swe,formatRgb:nU,toString:nU}));o(rU,"rgb_formatHex");o(swe,"rgb_formatHex8");o(nU,"rgb_formatRgb");o(W3,"clampa");o(cd,"clampi");o(ld,"hex");o(iU,"hsla");o(sU,"hslConvert");o(oU,"hsl");o(dl,"Hsl");wh(dl,oU,b0(Th,{brighter(t){return t=t==null?H3:Math.pow(H3,t),new dl(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?iv:Math.pow(iv,t),new dl(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new ua(g8(t>=240?t-240:t+120,i,n),g8(t,i,n),g8(t<120?t+240:t-120,i,n),this.opacity)},clamp(){return new dl(aU(this.h),U3(this.s),U3(this.l),W3(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let t=W3(this.opacity);return`${t===1?"hsl(":"hsla("}${aU(this.h)}, ${U3(this.s)*100}%, ${U3(this.l)*100}%${t===1?")":`, ${t})`}`}}));o(aU,"clamph");o(U3,"clampt");o(g8,"hsl2rgb")});var lU,cU,uU=N(()=>{"use strict";lU=Math.PI/180,cU=180/Math.PI});function gU(t){if(t instanceof ic)return new ic(t.l,t.a,t.b,t.opacity);if(t instanceof fu)return yU(t);t instanceof ua||(t=y8(t));var e=T8(t.r),r=T8(t.g),n=T8(t.b),i=x8((.2225045*e+.7168786*r+.0606169*n)/fU),a,s;return e===r&&r===n?a=s=i:(a=x8((.4360747*e+.3850649*r+.1430804*n)/hU),s=x8((.0139322*e+.0971045*r+.7141733*n)/dU)),new ic(116*i-16,500*(a-i),200*(i-s),t.opacity)}function k8(t,e,r,n){return arguments.length===1?gU(t):new ic(t,e,r,n??1)}function ic(t,e,r,n){this.l=+t,this.a=+e,this.b=+r,this.opacity=+n}function x8(t){return t>owe?Math.pow(t,1/3):t/mU+pU}function b8(t){return t>k0?t*t*t:mU*(t-pU)}function w8(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function T8(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function lwe(t){if(t instanceof fu)return new fu(t.h,t.c,t.l,t.opacity);if(t instanceof ic||(t=gU(t)),t.a===0&&t.b===0)return new fu(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*cU;return new fu(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function sv(t,e,r,n){return arguments.length===1?lwe(t):new fu(t,e,r,n??1)}function fu(t,e,r,n){this.h=+t,this.c=+e,this.l=+r,this.opacity=+n}function yU(t){if(isNaN(t.h))return new ic(t.l,0,0,t.opacity);var e=t.h*lU;return new ic(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}var q3,hU,fU,dU,pU,k0,mU,owe,vU=N(()=>{"use strict";m8();v8();uU();q3=18,hU=.96422,fU=1,dU=.82521,pU=4/29,k0=6/29,mU=3*k0*k0,owe=k0*k0*k0;o(gU,"labConvert");o(k8,"lab");o(ic,"Lab");wh(ic,k8,b0(Th,{brighter(t){return new ic(this.l+q3*(t??1),this.a,this.b,this.opacity)},darker(t){return new ic(this.l-q3*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return e=hU*b8(e),t=fU*b8(t),r=dU*b8(r),new ua(w8(3.1338561*e-1.6168667*t-.4906146*r),w8(-.9787684*e+1.9161415*t+.033454*r),w8(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}}));o(x8,"xyz2lab");o(b8,"lab2xyz");o(w8,"lrgb2rgb");o(T8,"rgb2lrgb");o(lwe,"hclConvert");o(sv,"hcl");o(fu,"Hcl");o(yU,"hcl2lab");wh(fu,sv,b0(Th,{brighter(t){return new fu(this.h,this.c,this.l+q3*(t??1),this.opacity)},darker(t){return new fu(this.h,this.c,this.l-q3*(t??1),this.opacity)},rgb(){return yU(this).rgb()}}))});var E0=N(()=>{"use strict";v8();vU()});function E8(t,e,r,n,i){var a=t*t,s=a*t;return((1-3*t+3*a-s)*e+(4-6*a+3*s)*r+(1+3*t+3*a-3*s)*n+s*i)/6}function S8(t){var e=t.length-1;return function(r){var n=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),i=t[n],a=t[n+1],s=n>0?t[n-1]:2*i-a,l=n<e-1?t[n+2]:2*a-i;return E8((r-n/e)*e,s,i,a,l)}}var C8=N(()=>{"use strict";o(E8,"basis");o(S8,"default")});function A8(t){var e=t.length;return function(r){var n=Math.floor(((r%=1)<0?++r:r)*e),i=t[(n+e-1)%e],a=t[n%e],s=t[(n+1)%e],l=t[(n+2)%e];return E8((r-n/e)*e,i,a,s,l)}}var xU=N(()=>{"use strict";C8();o(A8,"default")});var S0,_8=N(()=>{"use strict";S0=o(t=>()=>t,"default")});function bU(t,e){return function(r){return t+r*e}}function cwe(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}function wU(t,e){var r=e-t;return r?bU(t,r>180||r<-180?r-360*Math.round(r/360):r):S0(isNaN(t)?e:t)}function TU(t){return(t=+t)==1?du:function(e,r){return r-e?cwe(e,r,t):S0(isNaN(e)?r:e)}}function du(t,e){var r=e-t;return r?bU(t,r):S0(isNaN(t)?e:t)}var D8=N(()=>{"use strict";_8();o(bU,"linear");o(cwe,"exponential");o(wU,"hue");o(TU,"gamma");o(du,"nogamma")});function kU(t){return function(e){var r=e.length,n=new Array(r),i=new Array(r),a=new Array(r),s,l;for(s=0;s<r;++s)l=T0(e[s]),n[s]=l.r||0,i[s]=l.g||0,a[s]=l.b||0;return n=t(n),i=t(i),a=t(a),l.opacity=1,function(u){return l.r=n(u),l.g=i(u),l.b=a(u),l+""}}}var ud,uwe,hwe,L8=N(()=>{"use strict";E0();C8();xU();D8();ud=o(function t(e){var r=TU(e);function n(i,a){var s=r((i=T0(i)).r,(a=T0(a)).r),l=r(i.g,a.g),u=r(i.b,a.b),h=du(i.opacity,a.opacity);return function(f){return i.r=s(f),i.g=l(f),i.b=u(f),i.opacity=h(f),i+""}}return o(n,"rgb"),n.gamma=t,n},"rgbGamma")(1);o(kU,"rgbSpline");uwe=kU(S8),hwe=kU(A8)});function R8(t,e){e||(e=[]);var r=t?Math.min(e.length,t.length):0,n=e.slice(),i;return function(a){for(i=0;i<r;++i)n[i]=t[i]*(1-a)+e[i]*a;return n}}function EU(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}var SU=N(()=>{"use strict";o(R8,"default");o(EU,"isNumberArray")});function CU(t,e){var r=e?e.length:0,n=t?Math.min(r,t.length):0,i=new Array(n),a=new Array(r),s;for(s=0;s<n;++s)i[s]=kh(t[s],e[s]);for(;s<r;++s)a[s]=e[s];return function(l){for(s=0;s<n;++s)a[s]=i[s](l);return a}}var AU=N(()=>{"use strict";Y3();o(CU,"genericArray")});function N8(t,e){var r=new Date;return t=+t,e=+e,function(n){return r.setTime(t*(1-n)+e*n),r}}var _U=N(()=>{"use strict";o(N8,"default")});function Ki(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}var ov=N(()=>{"use strict";o(Ki,"default")});function M8(t,e){var r={},n={},i;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(i in e)i in t?r[i]=kh(t[i],e[i]):n[i]=e[i];return function(a){for(i in r)n[i]=r[i](a);return n}}var DU=N(()=>{"use strict";Y3();o(M8,"default")});function fwe(t){return function(){return t}}function dwe(t){return function(e){return t(e)+""}}function C0(t,e){var r=O8.lastIndex=I8.lastIndex=0,n,i,a,s=-1,l=[],u=[];for(t=t+"",e=e+"";(n=O8.exec(t))&&(i=I8.exec(e));)(a=i.index)>r&&(a=e.slice(r,a),l[s]?l[s]+=a:l[++s]=a),(n=n[0])===(i=i[0])?l[s]?l[s]+=i:l[++s]=i:(l[++s]=null,u.push({i:s,x:Ki(n,i)})),r=I8.lastIndex;return r<e.length&&(a=e.slice(r),l[s]?l[s]+=a:l[++s]=a),l.length<2?u[0]?dwe(u[0].x):fwe(e):(e=u.length,function(h){for(var f=0,d;f<e;++f)l[(d=u[f]).i]=d.x(h);return l.join("")})}var O8,I8,P8=N(()=>{"use strict";ov();O8=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,I8=new RegExp(O8.source,"g");o(fwe,"zero");o(dwe,"one");o(C0,"default")});function kh(t,e){var r=typeof e,n;return e==null||r==="boolean"?S0(e):(r==="number"?Ki:r==="string"?(n=pl(e))?(e=n,ud):C0:e instanceof pl?ud:e instanceof Date?N8:EU(e)?R8:Array.isArray(e)?CU:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?M8:Ki)(t,e)}var Y3=N(()=>{"use strict";E0();L8();AU();_U();ov();DU();P8();_8();SU();o(kh,"default")});function X3(t,e){return t=+t,e=+e,function(r){return Math.round(t*(1-r)+e*r)}}var LU=N(()=>{"use strict";o(X3,"default")});function K3(t,e,r,n,i,a){var s,l,u;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(u=t*r+e*n)&&(r-=t*u,n-=e*u),(l=Math.sqrt(r*r+n*n))&&(r/=l,n/=l,u/=l),t*n<e*r&&(t=-t,e=-e,u=-u,s=-s),{translateX:i,translateY:a,rotate:Math.atan2(e,t)*RU,skewX:Math.atan(u)*RU,scaleX:s,scaleY:l}}var RU,j3,NU=N(()=>{"use strict";RU=180/Math.PI,j3={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};o(K3,"default")});function MU(t){let e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?j3:K3(e.a,e.b,e.c,e.d,e.e,e.f)}function IU(t){return t==null?j3:(Q3||(Q3=document.createElementNS("http://www.w3.org/2000/svg","g")),Q3.setAttribute("transform",t),(t=Q3.transform.baseVal.consolidate())?(t=t.matrix,K3(t.a,t.b,t.c,t.d,t.e,t.f)):j3)}var Q3,OU=N(()=>{"use strict";NU();o(MU,"parseCss");o(IU,"parseSvg")});function PU(t,e,r,n){function i(h){return h.length?h.pop()+" ":""}o(i,"pop");function a(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push("translate(",null,e,null,r);g.push({i:y-4,x:Ki(h,d)},{i:y-2,x:Ki(f,p)})}else(d||p)&&m.push("translate("+d+e+p+r)}o(a,"translate");function s(h,f,d,p){h!==f?(h-f>180?f+=360:f-h>180&&(h+=360),p.push({i:d.push(i(d)+"rotate(",null,n)-2,x:Ki(h,f)})):f&&d.push(i(d)+"rotate("+f+n)}o(s,"rotate");function l(h,f,d,p){h!==f?p.push({i:d.push(i(d)+"skewX(",null,n)-2,x:Ki(h,f)}):f&&d.push(i(d)+"skewX("+f+n)}o(l,"skewX");function u(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push(i(m)+"scale(",null,",",null,")");g.push({i:y-4,x:Ki(h,d)},{i:y-2,x:Ki(f,p)})}else(d!==1||p!==1)&&m.push(i(m)+"scale("+d+","+p+")")}return o(u,"scale"),function(h,f){var d=[],p=[];return h=t(h),f=t(f),a(h.translateX,h.translateY,f.translateX,f.translateY,d,p),s(h.rotate,f.rotate,d,p),l(h.skewX,f.skewX,d,p),u(h.scaleX,h.scaleY,f.scaleX,f.scaleY,d,p),h=f=null,function(m){for(var g=-1,y=p.length,v;++g<y;)d[(v=p[g]).i]=v.x(m);return d.join("")}}}var B8,F8,BU=N(()=>{"use strict";ov();OU();o(PU,"interpolateTransform");B8=PU(MU,"px, ","px)","deg)"),F8=PU(IU,", ",")",")")});function FU(t){return function(e,r){var n=t((e=sv(e)).h,(r=sv(r)).h),i=du(e.c,r.c),a=du(e.l,r.l),s=du(e.opacity,r.opacity);return function(l){return e.h=n(l),e.c=i(l),e.l=a(l),e.opacity=s(l),e+""}}}var $8,pwe,$U=N(()=>{"use strict";E0();D8();o(FU,"hcl");$8=FU(wU),pwe=FU(du)});var A0=N(()=>{"use strict";Y3();ov();LU();P8();BU();L8();$U()});function dv(){return hd||(VU(mwe),hd=hv.now()+e5)}function mwe(){hd=0}function fv(){this._call=this._time=this._next=null}function t5(t,e,r){var n=new fv;return n.restart(t,e,r),n}function UU(){dv(),++_0;for(var t=Z3,e;t;)(e=hd-t._time)>=0&&t._call.call(void 0,e),t=t._next;--_0}function zU(){hd=(J3=hv.now())+e5,_0=cv=0;try{UU()}finally{_0=0,ywe(),hd=0}}function gwe(){var t=hv.now(),e=t-J3;e>GU&&(e5-=e,J3=t)}function ywe(){for(var t,e=Z3,r,n=1/0;e;)e._call?(n>e._time&&(n=e._time),t=e,e=e._next):(r=e._next,e._next=null,e=t?t._next=r:Z3=r);uv=t,z8(n)}function z8(t){if(!_0){cv&&(cv=clearTimeout(cv));var e=t-hd;e>24?(t<1/0&&(cv=setTimeout(zU,t-hv.now()-e5)),lv&&(lv=clearInterval(lv))):(lv||(J3=hv.now(),lv=setInterval(gwe,GU)),_0=1,VU(zU))}}var _0,cv,lv,GU,Z3,uv,J3,hd,e5,hv,VU,G8=N(()=>{"use strict";_0=0,cv=0,lv=0,GU=1e3,J3=0,hd=0,e5=0,hv=typeof performance=="object"&&performance.now?performance:Date,VU=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};o(dv,"now");o(mwe,"clearNow");o(fv,"Timer");fv.prototype=t5.prototype={constructor:fv,restart:o(function(t,e,r){if(typeof t!="function")throw new TypeError("callback is not a function");r=(r==null?dv():+r)+(e==null?0:+e),!this._next&&uv!==this&&(uv?uv._next=this:Z3=this,uv=this),this._call=t,this._time=r,z8()},"restart"),stop:o(function(){this._call&&(this._call=null,this._time=1/0,z8())},"stop")};o(t5,"timer");o(UU,"timerFlush");o(zU,"wake");o(gwe,"poke");o(ywe,"nap");o(z8,"sleep")});function pv(t,e,r){var n=new fv;return e=e==null?0:+e,n.restart(i=>{n.stop(),t(i+e)},e,r),n}var HU=N(()=>{"use strict";G8();o(pv,"default")});var r5=N(()=>{"use strict";G8();HU()});function pu(t,e,r,n,i,a){var s=t.__transition;if(!s)t.__transition={};else if(r in s)return;bwe(t,r,{name:e,index:n,group:i,on:vwe,tween:xwe,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:YU})}function gv(t,e){var r=Bi(t,e);if(r.state>YU)throw new Error("too late; already scheduled");return r}function ha(t,e){var r=Bi(t,e);if(r.state>n5)throw new Error("too late; already running");return r}function Bi(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function bwe(t,e,r){var n=t.__transition,i;n[e]=r,r.timer=t5(a,0,r.time);function a(h){r.state=WU,r.timer.restart(s,r.delay,r.time),r.delay<=h&&s(h-r.delay)}o(a,"schedule");function s(h){var f,d,p,m;if(r.state!==WU)return u();for(f in n)if(m=n[f],m.name===r.name){if(m.state===n5)return pv(s);m.state===qU?(m.state=mv,m.timer.stop(),m.on.call("interrupt",t,t.__data__,m.index,m.group),delete n[f]):+f<e&&(m.state=mv,m.timer.stop(),m.on.call("cancel",t,t.__data__,m.index,m.group),delete n[f])}if(pv(function(){r.state===n5&&(r.state=qU,r.timer.restart(l,r.delay,r.time),l(h))}),r.state=i5,r.on.call("start",t,t.__data__,r.index,r.group),r.state===i5){for(r.state=n5,i=new Array(p=r.tween.length),f=0,d=-1;f<p;++f)(m=r.tween[f].value.call(t,t.__data__,r.index,r.group))&&(i[++d]=m);i.length=d+1}}o(s,"start");function l(h){for(var f=h<r.duration?r.ease.call(null,h/r.duration):(r.timer.restart(u),r.state=a5,1),d=-1,p=i.length;++d<p;)i[d].call(t,f);r.state===a5&&(r.on.call("end",t,t.__data__,r.index,r.group),u())}o(l,"tick");function u(){r.state=mv,r.timer.stop(),delete n[e];for(var h in n)return;delete t.__transition}o(u,"stop")}var vwe,xwe,YU,WU,i5,n5,qU,a5,mv,Es=N(()=>{"use strict";TA();r5();vwe=wA("start","end","cancel","interrupt"),xwe=[],YU=0,WU=1,i5=2,n5=3,qU=4,a5=5,mv=6;o(pu,"default");o(gv,"init");o(ha,"set");o(Bi,"get");o(bwe,"create")});function yv(t,e){var r=t.__transition,n,i,a=!0,s;if(r){e=e==null?null:e+"";for(s in r){if((n=r[s]).name!==e){a=!1;continue}i=n.state>i5&&n.state<a5,n.state=mv,n.timer.stop(),n.on.call(i?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete r[s]}a&&delete t.__transition}}var XU=N(()=>{"use strict";Es();o(yv,"default")});function V8(t){return this.each(function(){yv(this,t)})}var jU=N(()=>{"use strict";XU();o(V8,"default")});function wwe(t,e){var r,n;return function(){var i=ha(this,t),a=i.tween;if(a!==r){n=r=a;for(var s=0,l=n.length;s<l;++s)if(n[s].name===e){n=n.slice(),n.splice(s,1);break}}i.tween=n}}function Twe(t,e,r){var n,i;if(typeof r!="function")throw new Error;return function(){var a=ha(this,t),s=a.tween;if(s!==n){i=(n=s).slice();for(var l={name:e,value:r},u=0,h=i.length;u<h;++u)if(i[u].name===e){i[u]=l;break}u===h&&i.push(l)}a.tween=i}}function U8(t,e){var r=this._id;if(t+="",arguments.length<2){for(var n=Bi(this.node(),r).tween,i=0,a=n.length,s;i<a;++i)if((s=n[i]).name===t)return s.value;return null}return this.each((e==null?wwe:Twe)(r,t,e))}function D0(t,e,r){var n=t._id;return t.each(function(){var i=ha(this,n);(i.value||(i.value={}))[e]=r.apply(this,arguments)}),function(i){return Bi(i,n).value[e]}}var vv=N(()=>{"use strict";Es();o(wwe,"tweenRemove");o(Twe,"tweenFunction");o(U8,"default");o(D0,"tweenValue")});function xv(t,e){var r;return(typeof e=="number"?Ki:e instanceof pl?ud:(r=pl(e))?(e=r,ud):C0)(t,e)}var H8=N(()=>{"use strict";E0();A0();o(xv,"default")});function kwe(t){return function(){this.removeAttribute(t)}}function Ewe(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Swe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttribute(t);return s===i?null:s===n?a:a=e(n=s,r)}}function Cwe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttributeNS(t.space,t.local);return s===i?null:s===n?a:a=e(n=s,r)}}function Awe(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttribute(t):(s=this.getAttribute(t),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function _we(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttributeNS(t.space,t.local):(s=this.getAttributeNS(t.space,t.local),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function W8(t,e){var r=rc(t),n=r==="transform"?F8:xv;return this.attrTween(t,typeof e=="function"?(r.local?_we:Awe)(r,n,D0(this,"attr."+t,e)):e==null?(r.local?Ewe:kwe)(r):(r.local?Cwe:Swe)(r,n,e))}var KU=N(()=>{"use strict";A0();fl();vv();H8();o(kwe,"attrRemove");o(Ewe,"attrRemoveNS");o(Swe,"attrConstant");o(Cwe,"attrConstantNS");o(Awe,"attrFunction");o(_we,"attrFunctionNS");o(W8,"default")});function Dwe(t,e){return function(r){this.setAttribute(t,e.call(this,r))}}function Lwe(t,e){return function(r){this.setAttributeNS(t.space,t.local,e.call(this,r))}}function Rwe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&Lwe(t,a)),r}return o(i,"tween"),i._value=e,i}function Nwe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&Dwe(t,a)),r}return o(i,"tween"),i._value=e,i}function q8(t,e){var r="attr."+t;if(arguments.length<2)return(r=this.tween(r))&&r._value;if(e==null)return this.tween(r,null);if(typeof e!="function")throw new Error;var n=rc(t);return this.tween(r,(n.local?Rwe:Nwe)(n,e))}var QU=N(()=>{"use strict";fl();o(Dwe,"attrInterpolate");o(Lwe,"attrInterpolateNS");o(Rwe,"attrTweenNS");o(Nwe,"attrTween");o(q8,"default")});function Mwe(t,e){return function(){gv(this,t).delay=+e.apply(this,arguments)}}function Iwe(t,e){return e=+e,function(){gv(this,t).delay=e}}function Y8(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?Mwe:Iwe)(e,t)):Bi(this.node(),e).delay}var ZU=N(()=>{"use strict";Es();o(Mwe,"delayFunction");o(Iwe,"delayConstant");o(Y8,"default")});function Owe(t,e){return function(){ha(this,t).duration=+e.apply(this,arguments)}}function Pwe(t,e){return e=+e,function(){ha(this,t).duration=e}}function X8(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?Owe:Pwe)(e,t)):Bi(this.node(),e).duration}var JU=N(()=>{"use strict";Es();o(Owe,"durationFunction");o(Pwe,"durationConstant");o(X8,"default")});function Bwe(t,e){if(typeof e!="function")throw new Error;return function(){ha(this,t).ease=e}}function j8(t){var e=this._id;return arguments.length?this.each(Bwe(e,t)):Bi(this.node(),e).ease}var eH=N(()=>{"use strict";Es();o(Bwe,"easeConstant");o(j8,"default")});function Fwe(t,e){return function(){var r=e.apply(this,arguments);if(typeof r!="function")throw new Error;ha(this,t).ease=r}}function K8(t){if(typeof t!="function")throw new Error;return this.each(Fwe(this._id,t))}var tH=N(()=>{"use strict";Es();o(Fwe,"easeVarying");o(K8,"default")});function Q8(t){typeof t!="function"&&(t=x0(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i<r;++i)for(var a=e[i],s=a.length,l=n[i]=[],u,h=0;h<s;++h)(u=a[h])&&t.call(u,u.__data__,h,a)&&l.push(u);return new es(n,this._parents,this._name,this._id)}var rH=N(()=>{"use strict";fl();fd();o(Q8,"default")});function Z8(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,r=t._groups,n=e.length,i=r.length,a=Math.min(n,i),s=new Array(n),l=0;l<a;++l)for(var u=e[l],h=r[l],f=u.length,d=s[l]=new Array(f),p,m=0;m<f;++m)(p=u[m]||h[m])&&(d[m]=p);for(;l<n;++l)s[l]=e[l];return new es(s,this._parents,this._name,this._id)}var nH=N(()=>{"use strict";fd();o(Z8,"default")});function $we(t){return(t+"").trim().split(/^|\s+/).every(function(e){var r=e.indexOf(".");return r>=0&&(e=e.slice(0,r)),!e||e==="start"})}function zwe(t,e,r){var n,i,a=$we(e)?gv:ha;return function(){var s=a(this,t),l=s.on;l!==n&&(i=(n=l).copy()).on(e,r),s.on=i}}function J8(t,e){var r=this._id;return arguments.length<2?Bi(this.node(),r).on.on(t):this.each(zwe(r,t,e))}var iH=N(()=>{"use strict";Es();o($we,"start");o(zwe,"onFunction");o(J8,"default")});function Gwe(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}function e_(){return this.on("end.remove",Gwe(this._id))}var aH=N(()=>{"use strict";o(Gwe,"removeFunction");o(e_,"default")});function t_(t){var e=this._name,r=this._id;typeof t!="function"&&(t=xh(t));for(var n=this._groups,i=n.length,a=new Array(i),s=0;s<i;++s)for(var l=n[s],u=l.length,h=a[s]=new Array(u),f,d,p=0;p<u;++p)(f=l[p])&&(d=t.call(f,f.__data__,p,l))&&("__data__"in f&&(d.__data__=f.__data__),h[p]=d,pu(h[p],e,r,p,h,Bi(f,r)));return new es(a,this._parents,e,r)}var sH=N(()=>{"use strict";fl();fd();Es();o(t_,"default")});function r_(t){var e=this._name,r=this._id;typeof t!="function"&&(t=v0(t));for(var n=this._groups,i=n.length,a=[],s=[],l=0;l<i;++l)for(var u=n[l],h=u.length,f,d=0;d<h;++d)if(f=u[d]){for(var p=t.call(f,f.__data__,d,u),m,g=Bi(f,r),y=0,v=p.length;y<v;++y)(m=p[y])&&pu(m,e,r,y,p,g);a.push(p),s.push(f)}return new es(a,s,e,r)}var oH=N(()=>{"use strict";fl();fd();Es();o(r_,"default")});function n_(){return new Vwe(this._groups,this._parents)}var Vwe,lH=N(()=>{"use strict";fl();Vwe=hu.prototype.constructor;o(n_,"default")});function Uwe(t,e){var r,n,i;return function(){var a=bh(this,t),s=(this.style.removeProperty(t),bh(this,t));return a===s?null:a===r&&s===n?i:i=e(r=a,n=s)}}function cH(t){return function(){this.style.removeProperty(t)}}function Hwe(t,e,r){var n,i=r+"",a;return function(){var s=bh(this,t);return s===i?null:s===n?a:a=e(n=s,r)}}function Wwe(t,e,r){var n,i,a;return function(){var s=bh(this,t),l=r(this),u=l+"";return l==null&&(u=l=(this.style.removeProperty(t),bh(this,t))),s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l))}}function qwe(t,e){var r,n,i,a="style."+e,s="end."+a,l;return function(){var u=ha(this,t),h=u.on,f=u.value[a]==null?l||(l=cH(e)):void 0;(h!==r||i!==f)&&(n=(r=h).copy()).on(s,i=f),u.on=n}}function i_(t,e,r){var n=(t+="")=="transform"?B8:xv;return e==null?this.styleTween(t,Uwe(t,n)).on("end.style."+t,cH(t)):typeof e=="function"?this.styleTween(t,Wwe(t,n,D0(this,"style."+t,e))).each(qwe(this._id,t)):this.styleTween(t,Hwe(t,n,e),r).on("end.style."+t,null)}var uH=N(()=>{"use strict";A0();fl();Es();vv();H8();o(Uwe,"styleNull");o(cH,"styleRemove");o(Hwe,"styleConstant");o(Wwe,"styleFunction");o(qwe,"styleMaybeRemove");o(i_,"default")});function Ywe(t,e,r){return function(n){this.style.setProperty(t,e.call(this,n),r)}}function Xwe(t,e,r){var n,i;function a(){var s=e.apply(this,arguments);return s!==i&&(n=(i=s)&&Ywe(t,s,r)),n}return o(a,"tween"),a._value=e,a}function a_(t,e,r){var n="style."+(t+="");if(arguments.length<2)return(n=this.tween(n))&&n._value;if(e==null)return this.tween(n,null);if(typeof e!="function")throw new Error;return this.tween(n,Xwe(t,e,r??""))}var hH=N(()=>{"use strict";o(Ywe,"styleInterpolate");o(Xwe,"styleTween");o(a_,"default")});function jwe(t){return function(){this.textContent=t}}function Kwe(t){return function(){var e=t(this);this.textContent=e??""}}function s_(t){return this.tween("text",typeof t=="function"?Kwe(D0(this,"text",t)):jwe(t==null?"":t+""))}var fH=N(()=>{"use strict";vv();o(jwe,"textConstant");o(Kwe,"textFunction");o(s_,"default")});function Qwe(t){return function(e){this.textContent=t.call(this,e)}}function Zwe(t){var e,r;function n(){var i=t.apply(this,arguments);return i!==r&&(e=(r=i)&&Qwe(i)),e}return o(n,"tween"),n._value=t,n}function o_(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(t==null)return this.tween(e,null);if(typeof t!="function")throw new Error;return this.tween(e,Zwe(t))}var dH=N(()=>{"use strict";o(Qwe,"textInterpolate");o(Zwe,"textTween");o(o_,"default")});function l_(){for(var t=this._name,e=this._id,r=s5(),n=this._groups,i=n.length,a=0;a<i;++a)for(var s=n[a],l=s.length,u,h=0;h<l;++h)if(u=s[h]){var f=Bi(u,e);pu(u,t,r,h,s,{time:f.time+f.delay+f.duration,delay:0,duration:f.duration,ease:f.ease})}return new es(n,this._parents,t,r)}var pH=N(()=>{"use strict";fd();Es();o(l_,"default")});function c_(){var t,e,r=this,n=r._id,i=r.size();return new Promise(function(a,s){var l={value:s},u={value:o(function(){--i===0&&a()},"value")};r.each(function(){var h=ha(this,n),f=h.on;f!==t&&(e=(t=f).copy(),e._.cancel.push(l),e._.interrupt.push(l),e._.end.push(u)),h.on=e}),i===0&&a()})}var mH=N(()=>{"use strict";Es();o(c_,"default")});function es(t,e,r,n){this._groups=t,this._parents=e,this._name=r,this._id=n}function gH(t){return hu().transition(t)}function s5(){return++Jwe}var Jwe,mu,fd=N(()=>{"use strict";fl();KU();QU();ZU();JU();eH();tH();rH();nH();iH();aH();sH();oH();lH();uH();hH();fH();dH();pH();vv();mH();Jwe=0;o(es,"Transition");o(gH,"transition");o(s5,"newId");mu=hu.prototype;es.prototype=gH.prototype={constructor:es,select:t_,selectAll:r_,selectChild:mu.selectChild,selectChildren:mu.selectChildren,filter:Q8,merge:Z8,selection:n_,transition:l_,call:mu.call,nodes:mu.nodes,node:mu.node,size:mu.size,empty:mu.empty,each:mu.each,on:J8,attr:W8,attrTween:q8,style:i_,styleTween:a_,text:s_,textTween:o_,remove:e_,tween:U8,delay:Y8,duration:X8,ease:j8,easeVarying:K8,end:c_,[Symbol.iterator]:mu[Symbol.iterator]}});function o5(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}var yH=N(()=>{"use strict";o(o5,"cubicInOut")});var u_=N(()=>{"use strict";yH()});function tTe(t,e){for(var r;!(r=t.__transition)||!(r=r[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return r}function h_(t){var e,r;t instanceof es?(e=t._id,t=t._name):(e=s5(),(r=eTe).time=dv(),t=t==null?null:t+"");for(var n=this._groups,i=n.length,a=0;a<i;++a)for(var s=n[a],l=s.length,u,h=0;h<l;++h)(u=s[h])&&pu(u,t,e,h,s,r||tTe(u,e));return new es(n,this._parents,t,e)}var eTe,vH=N(()=>{"use strict";fd();Es();u_();r5();eTe={time:null,delay:0,duration:250,ease:o5};o(tTe,"inherit");o(h_,"default")});var xH=N(()=>{"use strict";fl();jU();vH();hu.prototype.interrupt=V8;hu.prototype.transition=h_});var l5=N(()=>{"use strict";xH()});var bH=N(()=>{"use strict"});var wH=N(()=>{"use strict"});var TH=N(()=>{"use strict"});function kH(t){return[+t[0],+t[1]]}function rTe(t){return[kH(t[0]),kH(t[1])]}function f_(t){return{type:t}}var Z0t,J0t,emt,tmt,rmt,nmt,EH=N(()=>{"use strict";l5();bH();wH();TH();({abs:Z0t,max:J0t,min:emt}=Math);o(kH,"number1");o(rTe,"number2");tmt={name:"x",handles:["w","e"].map(f_),input:o(function(t,e){return t==null?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},"input"),output:o(function(t){return t&&[t[0][0],t[1][0]]},"output")},rmt={name:"y",handles:["n","s"].map(f_),input:o(function(t,e){return t==null?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},"input"),output:o(function(t){return t&&[t[0][1],t[1][1]]},"output")},nmt={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(f_),input:o(function(t){return t==null?null:rTe(t)},"input"),output:o(function(t){return t},"output")};o(f_,"type")});var SH=N(()=>{"use strict";EH()});function CH(t){this._+=t[0];for(let e=1,r=t.length;e<r;++e)this._+=arguments[e]+t[e]}function iTe(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return CH;let r=10**e;return function(n){this._+=n[0];for(let i=1,a=n.length;i<a;++i)this._+=Math.round(arguments[i]*r)/r+n[i]}}function AH(){return new pd}var d_,p_,dd,nTe,pd,_H=N(()=>{"use strict";d_=Math.PI,p_=2*d_,dd=1e-6,nTe=p_-dd;o(CH,"append");o(iTe,"appendRound");pd=class{static{o(this,"Path")}constructor(e){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=e==null?CH:iTe(e)}moveTo(e,r){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(e,r){this._append`L${this._x1=+e},${this._y1=+r}`}quadraticCurveTo(e,r,n,i){this._append`Q${+e},${+r},${this._x1=+n},${this._y1=+i}`}bezierCurveTo(e,r,n,i,a,s){this._append`C${+e},${+r},${+n},${+i},${this._x1=+a},${this._y1=+s}`}arcTo(e,r,n,i,a){if(e=+e,r=+r,n=+n,i=+i,a=+a,a<0)throw new Error(`negative radius: ${a}`);let s=this._x1,l=this._y1,u=n-e,h=i-r,f=s-e,d=l-r,p=f*f+d*d;if(this._x1===null)this._append`M${this._x1=e},${this._y1=r}`;else if(p>dd)if(!(Math.abs(d*u-h*f)>dd)||!a)this._append`L${this._x1=e},${this._y1=r}`;else{let m=n-s,g=i-l,y=u*u+h*h,v=m*m+g*g,x=Math.sqrt(y),b=Math.sqrt(p),w=a*Math.tan((d_-Math.acos((y+p-v)/(2*x*b)))/2),C=w/b,T=w/x;Math.abs(C-1)>dd&&this._append`L${e+C*f},${r+C*d}`,this._append`A${a},${a},0,0,${+(d*m>f*g)},${this._x1=e+T*u},${this._y1=r+T*h}`}}arc(e,r,n,i,a,s){if(e=+e,r=+r,n=+n,s=!!s,n<0)throw new Error(`negative radius: ${n}`);let l=n*Math.cos(i),u=n*Math.sin(i),h=e+l,f=r+u,d=1^s,p=s?i-a:a-i;this._x1===null?this._append`M${h},${f}`:(Math.abs(this._x1-h)>dd||Math.abs(this._y1-f)>dd)&&this._append`L${h},${f}`,n&&(p<0&&(p=p%p_+p_),p>nTe?this._append`A${n},${n},0,1,${d},${e-l},${r-u}A${n},${n},0,1,${d},${this._x1=h},${this._y1=f}`:p>dd&&this._append`A${n},${n},0,${+(p>=d_)},${d},${this._x1=e+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(e,r,n,i){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}};o(AH,"path");AH.prototype=pd.prototype});var m_=N(()=>{"use strict";_H()});var DH=N(()=>{"use strict"});var LH=N(()=>{"use strict"});var RH=N(()=>{"use strict"});var NH=N(()=>{"use strict"});var MH=N(()=>{"use strict"});var IH=N(()=>{"use strict"});var OH=N(()=>{"use strict"});function g_(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function md(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}var bv=N(()=>{"use strict";o(g_,"default");o(md,"formatDecimalParts")});function ml(t){return t=md(Math.abs(t)),t?t[1]:NaN}var wv=N(()=>{"use strict";bv();o(ml,"default")});function y_(t,e){return function(r,n){for(var i=r.length,a=[],s=0,l=t[0],u=0;i>0&&l>0&&(u+l+1>n&&(l=Math.max(1,n-u)),a.push(r.substring(i-=l,i+l)),!((u+=l+1)>n));)l=t[s=(s+1)%t.length];return a.reverse().join(e)}}var PH=N(()=>{"use strict";o(y_,"default")});function v_(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var BH=N(()=>{"use strict";o(v_,"default")});function Eh(t){if(!(e=aTe.exec(t)))throw new Error("invalid format: "+t);var e;return new c5({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function c5(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}var aTe,x_=N(()=>{"use strict";aTe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;o(Eh,"formatSpecifier");Eh.prototype=c5.prototype;o(c5,"FormatSpecifier");c5.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type}});function b_(t){e:for(var e=t.length,r=1,n=-1,i;r<e;++r)switch(t[r]){case".":n=i=r;break;case"0":n===0&&(n=r),i=r;break;default:if(!+t[r])break e;n>0&&(n=0);break}return n>0?t.slice(0,n)+t.slice(i+1):t}var FH=N(()=>{"use strict";o(b_,"default")});function T_(t,e){var r=md(t,e);if(!r)return t+"";var n=r[0],i=r[1],a=i-(w_=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=n.length;return a===s?n:a>s?n+new Array(a-s+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+md(t,Math.max(0,e+a-1))[0]}var w_,k_=N(()=>{"use strict";bv();o(T_,"default")});function u5(t,e){var r=md(t,e);if(!r)return t+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}var $H=N(()=>{"use strict";bv();o(u5,"default")});var E_,zH=N(()=>{"use strict";bv();k_();$H();E_={"%":o((t,e)=>(t*100).toFixed(e),"%"),b:o(t=>Math.round(t).toString(2),"b"),c:o(t=>t+"","c"),d:g_,e:o((t,e)=>t.toExponential(e),"e"),f:o((t,e)=>t.toFixed(e),"f"),g:o((t,e)=>t.toPrecision(e),"g"),o:o(t=>Math.round(t).toString(8),"o"),p:o((t,e)=>u5(t*100,e),"p"),r:u5,s:T_,X:o(t=>Math.round(t).toString(16).toUpperCase(),"X"),x:o(t=>Math.round(t).toString(16),"x")}});function h5(t){return t}var GH=N(()=>{"use strict";o(h5,"default")});function S_(t){var e=t.grouping===void 0||t.thousands===void 0?h5:y_(VH.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",n=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",a=t.numerals===void 0?h5:v_(VH.call(t.numerals,String)),s=t.percent===void 0?"%":t.percent+"",l=t.minus===void 0?"\u2212":t.minus+"",u=t.nan===void 0?"NaN":t.nan+"";function h(d){d=Eh(d);var p=d.fill,m=d.align,g=d.sign,y=d.symbol,v=d.zero,x=d.width,b=d.comma,w=d.precision,C=d.trim,T=d.type;T==="n"?(b=!0,T="g"):E_[T]||(w===void 0&&(w=12),C=!0,T="g"),(v||p==="0"&&m==="=")&&(v=!0,p="0",m="=");var E=y==="$"?r:y==="#"&&/[boxX]/.test(T)?"0"+T.toLowerCase():"",A=y==="$"?n:/[%p]/.test(T)?s:"",S=E_[T],_=/[defgprs%]/.test(T);w=w===void 0?6:/[gprs]/.test(T)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function I(D){var k=E,L=A,R,O,M;if(T==="c")L=S(D)+L,D="";else{D=+D;var B=D<0||1/D<0;if(D=isNaN(D)?u:S(Math.abs(D),w),C&&(D=b_(D)),B&&+D==0&&g!=="+"&&(B=!1),k=(B?g==="("?g:l:g==="-"||g==="("?"":g)+k,L=(T==="s"?UH[8+w_/3]:"")+L+(B&&g==="("?")":""),_){for(R=-1,O=D.length;++R<O;)if(M=D.charCodeAt(R),48>M||M>57){L=(M===46?i+D.slice(R+1):D.slice(R))+L,D=D.slice(0,R);break}}}b&&!v&&(D=e(D,1/0));var F=k.length+D.length+L.length,P=F<x?new Array(x-F+1).join(p):"";switch(b&&v&&(D=e(P+D,P.length?x-L.length:1/0),P=""),m){case"<":D=k+D+L+P;break;case"=":D=k+P+D+L;break;case"^":D=P.slice(0,F=P.length>>1)+k+D+L+P.slice(F);break;default:D=P+k+D+L;break}return a(D)}return o(I,"format"),I.toString=function(){return d+""},I}o(h,"newFormat");function f(d,p){var m=h((d=Eh(d),d.type="f",d)),g=Math.max(-8,Math.min(8,Math.floor(ml(p)/3)))*3,y=Math.pow(10,-g),v=UH[8+g/3];return function(x){return m(y*x)+v}}return o(f,"formatPrefix"),{format:h,formatPrefix:f}}var VH,UH,HH=N(()=>{"use strict";wv();PH();BH();x_();FH();zH();k_();GH();VH=Array.prototype.map,UH=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];o(S_,"default")});function C_(t){return f5=S_(t),d5=f5.format,p5=f5.formatPrefix,f5}var f5,d5,p5,WH=N(()=>{"use strict";HH();C_({thousands:",",grouping:[3],currency:["$",""]});o(C_,"defaultLocale")});function m5(t){return Math.max(0,-ml(Math.abs(t)))}var qH=N(()=>{"use strict";wv();o(m5,"default")});function g5(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(ml(e)/3)))*3-ml(Math.abs(t)))}var YH=N(()=>{"use strict";wv();o(g5,"default")});function y5(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,ml(e)-ml(t))+1}var XH=N(()=>{"use strict";wv();o(y5,"default")});var A_=N(()=>{"use strict";WH();x_();qH();YH();XH()});var jH=N(()=>{"use strict"});var KH=N(()=>{"use strict"});var QH=N(()=>{"use strict"});var ZH=N(()=>{"use strict"});function Sh(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}var Tv=N(()=>{"use strict";o(Sh,"initRange")});function gu(){var t=new g0,e=[],r=[],n=__;function i(a){let s=t.get(a);if(s===void 0){if(n!==__)return n;t.set(a,s=e.push(a)-1)}return r[s%r.length]}return o(i,"scale"),i.domain=function(a){if(!arguments.length)return e.slice();e=[],t=new g0;for(let s of a)t.has(s)||t.set(s,e.push(s)-1);return i},i.range=function(a){return arguments.length?(r=Array.from(a),i):r.slice()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return gu(e,r).unknown(n)},Sh.apply(i,arguments),i}var __,D_=N(()=>{"use strict";vh();Tv();__=Symbol("implicit");o(gu,"ordinal")});function L0(){var t=gu().unknown(void 0),e=t.domain,r=t.range,n=0,i=1,a,s,l=!1,u=0,h=0,f=.5;delete t.unknown;function d(){var p=e().length,m=i<n,g=m?i:n,y=m?n:i;a=(y-g)/Math.max(1,p-u+h*2),l&&(a=Math.floor(a)),g+=(y-g-a*(p-u))*f,s=a*(1-u),l&&(g=Math.round(g),s=Math.round(s));var v=I3(p).map(function(x){return g+a*x});return r(m?v.reverse():v)}return o(d,"rescale"),t.domain=function(p){return arguments.length?(e(p),d()):e()},t.range=function(p){return arguments.length?([n,i]=p,n=+n,i=+i,d()):[n,i]},t.rangeRound=function(p){return[n,i]=p,n=+n,i=+i,l=!0,d()},t.bandwidth=function(){return s},t.step=function(){return a},t.round=function(p){return arguments.length?(l=!!p,d()):l},t.padding=function(p){return arguments.length?(u=Math.min(1,h=+p),d()):u},t.paddingInner=function(p){return arguments.length?(u=Math.min(1,p),d()):u},t.paddingOuter=function(p){return arguments.length?(h=+p,d()):h},t.align=function(p){return arguments.length?(f=Math.max(0,Math.min(1,p)),d()):f},t.copy=function(){return L0(e(),[n,i]).round(l).paddingInner(u).paddingOuter(h).align(f)},Sh.apply(d(),arguments)}var JH=N(()=>{"use strict";vh();Tv();D_();o(L0,"band")});function L_(t){return function(){return t}}var eW=N(()=>{"use strict";o(L_,"constants")});function R_(t){return+t}var tW=N(()=>{"use strict";o(R_,"number")});function R0(t){return t}function N_(t,e){return(e-=t=+t)?function(r){return(r-t)/e}:L_(isNaN(e)?NaN:.5)}function sTe(t,e){var r;return t>e&&(r=t,t=e,e=r),function(n){return Math.max(t,Math.min(e,n))}}function oTe(t,e,r){var n=t[0],i=t[1],a=e[0],s=e[1];return i<n?(n=N_(i,n),a=r(s,a)):(n=N_(n,i),a=r(a,s)),function(l){return a(n(l))}}function lTe(t,e,r){var n=Math.min(t.length,e.length)-1,i=new Array(n),a=new Array(n),s=-1;for(t[n]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++s<n;)i[s]=N_(t[s],t[s+1]),a[s]=r(e[s],e[s+1]);return function(l){var u=mA(t,l,1,n)-1;return a[u](i[u](l))}}function v5(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function cTe(){var t=rW,e=rW,r=kh,n,i,a,s=R0,l,u,h;function f(){var p=Math.min(t.length,e.length);return s!==R0&&(s=sTe(t[0],t[p-1])),l=p>2?lTe:oTe,u=h=null,d}o(f,"rescale");function d(p){return p==null||isNaN(p=+p)?a:(u||(u=l(t.map(n),e,r)))(n(s(p)))}return o(d,"scale"),d.invert=function(p){return s(i((h||(h=l(e,t.map(n),Ki)))(p)))},d.domain=function(p){return arguments.length?(t=Array.from(p,R_),f()):t.slice()},d.range=function(p){return arguments.length?(e=Array.from(p),f()):e.slice()},d.rangeRound=function(p){return e=Array.from(p),r=X3,f()},d.clamp=function(p){return arguments.length?(s=p?!0:R0,f()):s!==R0},d.interpolate=function(p){return arguments.length?(r=p,f()):r},d.unknown=function(p){return arguments.length?(a=p,d):a},function(p,m){return n=p,i=m,f()}}function kv(){return cTe()(R0,R0)}var rW,M_=N(()=>{"use strict";vh();A0();eW();tW();rW=[0,1];o(R0,"identity");o(N_,"normalize");o(sTe,"clamper");o(oTe,"bimap");o(lTe,"polymap");o(v5,"copy");o(cTe,"transformer");o(kv,"continuous")});function I_(t,e,r,n){var i=y0(t,e,r),a;switch(n=Eh(n??",f"),n.type){case"s":{var s=Math.max(Math.abs(t),Math.abs(e));return n.precision==null&&!isNaN(a=g5(i,s))&&(n.precision=a),p5(n,s)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=y5(i,Math.max(Math.abs(t),Math.abs(e))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=m5(i))&&(n.precision=a-(n.type==="%")*2);break}}return d5(n)}var nW=N(()=>{"use strict";vh();A_();o(I_,"tickFormat")});function uTe(t){var e=t.domain;return t.ticks=function(r){var n=e();return R3(n[0],n[n.length-1],r??10)},t.tickFormat=function(r,n){var i=e();return I_(i[0],i[i.length-1],r??10,n)},t.nice=function(r){r==null&&(r=10);var n=e(),i=0,a=n.length-1,s=n[i],l=n[a],u,h,f=10;for(l<s&&(h=s,s=l,l=h,h=i,i=a,a=h);f-- >0;){if(h=Zy(s,l,r),h===u)return n[i]=s,n[a]=l,e(n);if(h>0)s=Math.floor(s/h)*h,l=Math.ceil(l/h)*h;else if(h<0)s=Math.ceil(s*h)/h,l=Math.floor(l*h)/h;else break;u=h}return t},t}function gl(){var t=kv();return t.copy=function(){return v5(t,gl())},Sh.apply(t,arguments),uTe(t)}var iW=N(()=>{"use strict";vh();M_();Tv();nW();o(uTe,"linearish");o(gl,"linear")});function O_(t,e){t=t.slice();var r=0,n=t.length-1,i=t[r],a=t[n],s;return a<i&&(s=r,r=n,n=s,s=i,i=a,a=s),t[r]=e.floor(i),t[n]=e.ceil(a),t}var aW=N(()=>{"use strict";o(O_,"nice")});function xn(t,e,r,n){function i(a){return t(a=arguments.length===0?new Date:new Date(+a)),a}return o(i,"interval"),i.floor=a=>(t(a=new Date(+a)),a),i.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),i.round=a=>{let s=i(a),l=i.ceil(a);return a-s<l-a?s:l},i.offset=(a,s)=>(e(a=new Date(+a),s==null?1:Math.floor(s)),a),i.range=(a,s,l)=>{let u=[];if(a=i.ceil(a),l=l==null?1:Math.floor(l),!(a<s)||!(l>0))return u;let h;do u.push(h=new Date(+a)),e(a,l),t(a);while(h<a&&a<s);return u},i.filter=a=>xn(s=>{if(s>=s)for(;t(s),!a(s);)s.setTime(s-1)},(s,l)=>{if(s>=s)if(l<0)for(;++l<=0;)for(;e(s,-1),!a(s););else for(;--l>=0;)for(;e(s,1),!a(s););}),r&&(i.count=(a,s)=>(P_.setTime(+a),B_.setTime(+s),t(P_),t(B_),Math.floor(r(P_,B_))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?s=>n(s)%a===0:s=>i.count(0,s)%a===0):i)),i}var P_,B_,yu=N(()=>{"use strict";P_=new Date,B_=new Date;o(xn,"timeInterval")});var ac,sW,F_=N(()=>{"use strict";yu();ac=xn(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);ac.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?xn(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):ac);sW=ac.range});var Ks,oW,$_=N(()=>{"use strict";yu();Ks=xn(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*1e3)},(t,e)=>(e-t)/1e3,t=>t.getUTCSeconds()),oW=Ks.range});var vu,hTe,x5,fTe,z_=N(()=>{"use strict";yu();vu=xn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getMinutes()),hTe=vu.range,x5=xn(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getUTCMinutes()),fTe=x5.range});var xu,dTe,b5,pTe,G_=N(()=>{"use strict";yu();xu=xn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3-t.getMinutes()*6e4)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getHours()),dTe=xu.range,b5=xn(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getUTCHours()),pTe=b5.range});var _o,mTe,Sv,gTe,w5,yTe,V_=N(()=>{"use strict";yu();_o=xn(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5,t=>t.getDate()-1),mTe=_o.range,Sv=xn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>t.getUTCDate()-1),gTe=Sv.range,w5=xn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>Math.floor(t/864e5)),yTe=w5.range});function vd(t){return xn(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,r)=>{e.setDate(e.getDate()+r*7)},(e,r)=>(r-e-(r.getTimezoneOffset()-e.getTimezoneOffset())*6e4)/6048e5)}function xd(t){return xn(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCDate(e.getUTCDate()+r*7)},(e,r)=>(r-e)/6048e5)}var yl,Ch,T5,k5,oc,E5,S5,cW,vTe,xTe,bTe,wTe,TTe,kTe,bd,N0,uW,hW,Ah,fW,dW,pW,ETe,STe,CTe,ATe,_Te,DTe,U_=N(()=>{"use strict";yu();o(vd,"timeWeekday");yl=vd(0),Ch=vd(1),T5=vd(2),k5=vd(3),oc=vd(4),E5=vd(5),S5=vd(6),cW=yl.range,vTe=Ch.range,xTe=T5.range,bTe=k5.range,wTe=oc.range,TTe=E5.range,kTe=S5.range;o(xd,"utcWeekday");bd=xd(0),N0=xd(1),uW=xd(2),hW=xd(3),Ah=xd(4),fW=xd(5),dW=xd(6),pW=bd.range,ETe=N0.range,STe=uW.range,CTe=hW.range,ATe=Ah.range,_Te=fW.range,DTe=dW.range});var bu,LTe,C5,RTe,H_=N(()=>{"use strict";yu();bu=xn(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth()),LTe=bu.range,C5=xn(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth()),RTe=C5.range});var Qs,NTe,vl,MTe,W_=N(()=>{"use strict";yu();Qs=xn(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());Qs.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:xn(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)});NTe=Qs.range,vl=xn(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());vl.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:xn(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)});MTe=vl.range});function gW(t,e,r,n,i,a){let s=[[Ks,1,1e3],[Ks,5,5*1e3],[Ks,15,15*1e3],[Ks,30,30*1e3],[a,1,6e4],[a,5,5*6e4],[a,15,15*6e4],[a,30,30*6e4],[i,1,36e5],[i,3,3*36e5],[i,6,6*36e5],[i,12,12*36e5],[n,1,864e5],[n,2,2*864e5],[r,1,6048e5],[e,1,2592e6],[e,3,3*2592e6],[t,1,31536e6]];function l(h,f,d){let p=f<h;p&&([h,f]=[f,h]);let m=d&&typeof d.range=="function"?d:u(h,f,d),g=m?m.range(h,+f+1):[];return p?g.reverse():g}o(l,"ticks");function u(h,f,d){let p=Math.abs(f-h)/d,m=od(([,,v])=>v).right(s,p);if(m===s.length)return t.every(y0(h/31536e6,f/31536e6,d));if(m===0)return ac.every(Math.max(y0(h,f,d),1));let[g,y]=s[p/s[m-1][2]<s[m][2]/p?m-1:m];return g.every(y)}return o(u,"tickInterval"),[l,u]}var OTe,PTe,q_,Y_,yW=N(()=>{"use strict";vh();F_();$_();z_();G_();V_();U_();H_();W_();o(gW,"ticker");[OTe,PTe]=gW(vl,C5,bd,w5,b5,x5),[q_,Y_]=gW(Qs,bu,yl,_o,xu,vu)});var A5=N(()=>{"use strict";F_();$_();z_();G_();V_();U_();H_();W_();yW()});function X_(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function j_(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Cv(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function K_(t){var e=t.dateTime,r=t.date,n=t.time,i=t.periods,a=t.days,s=t.shortDays,l=t.months,u=t.shortMonths,h=Av(i),f=_v(i),d=Av(a),p=_v(a),m=Av(s),g=_v(s),y=Av(l),v=_v(l),x=Av(u),b=_v(u),w={a:B,A:F,b:P,B:z,c:null,d:kW,e:kW,f:ake,g:mke,G:yke,H:rke,I:nke,j:ike,L:_W,m:ske,M:oke,p:$,q:H,Q:CW,s:AW,S:lke,u:cke,U:uke,V:hke,w:fke,W:dke,x:null,X:null,y:pke,Y:gke,Z:vke,"%":SW},C={a:Q,A:j,b:ie,B:ne,c:null,d:EW,e:EW,f:Tke,g:Nke,G:Ike,H:xke,I:bke,j:wke,L:LW,m:kke,M:Eke,p:le,q:he,Q:CW,s:AW,S:Ske,u:Cke,U:Ake,V:_ke,w:Dke,W:Lke,x:null,X:null,y:Rke,Y:Mke,Z:Oke,"%":SW},T={a:I,A:D,b:k,B:L,c:R,d:wW,e:wW,f:ZTe,g:bW,G:xW,H:TW,I:TW,j:XTe,L:QTe,m:YTe,M:jTe,p:_,q:qTe,Q:eke,s:tke,S:KTe,u:GTe,U:VTe,V:UTe,w:zTe,W:HTe,x:O,X:M,y:bW,Y:xW,Z:WTe,"%":JTe};w.x=E(r,w),w.X=E(n,w),w.c=E(e,w),C.x=E(r,C),C.X=E(n,C),C.c=E(e,C);function E(K,X){return function(te){var J=[],se=-1,ue=0,Z=K.length,Se,ce,ae;for(te instanceof Date||(te=new Date(+te));++se<Z;)K.charCodeAt(se)===37&&(J.push(K.slice(ue,se)),(ce=vW[Se=K.charAt(++se)])!=null?Se=K.charAt(++se):ce=Se==="e"?" ":"0",(ae=X[Se])&&(Se=ae(te,ce)),J.push(Se),ue=se+1);return J.push(K.slice(ue,se)),J.join("")}}o(E,"newFormat");function A(K,X){return function(te){var J=Cv(1900,void 0,1),se=S(J,K,te+="",0),ue,Z;if(se!=te.length)return null;if("Q"in J)return new Date(J.Q);if("s"in J)return new Date(J.s*1e3+("L"in J?J.L:0));if(X&&!("Z"in J)&&(J.Z=0),"p"in J&&(J.H=J.H%12+J.p*12),J.m===void 0&&(J.m="q"in J?J.q:0),"V"in J){if(J.V<1||J.V>53)return null;"w"in J||(J.w=1),"Z"in J?(ue=j_(Cv(J.y,0,1)),Z=ue.getUTCDay(),ue=Z>4||Z===0?N0.ceil(ue):N0(ue),ue=Sv.offset(ue,(J.V-1)*7),J.y=ue.getUTCFullYear(),J.m=ue.getUTCMonth(),J.d=ue.getUTCDate()+(J.w+6)%7):(ue=X_(Cv(J.y,0,1)),Z=ue.getDay(),ue=Z>4||Z===0?Ch.ceil(ue):Ch(ue),ue=_o.offset(ue,(J.V-1)*7),J.y=ue.getFullYear(),J.m=ue.getMonth(),J.d=ue.getDate()+(J.w+6)%7)}else("W"in J||"U"in J)&&("w"in J||(J.w="u"in J?J.u%7:"W"in J?1:0),Z="Z"in J?j_(Cv(J.y,0,1)).getUTCDay():X_(Cv(J.y,0,1)).getDay(),J.m=0,J.d="W"in J?(J.w+6)%7+J.W*7-(Z+5)%7:J.w+J.U*7-(Z+6)%7);return"Z"in J?(J.H+=J.Z/100|0,J.M+=J.Z%100,j_(J)):X_(J)}}o(A,"newParse");function S(K,X,te,J){for(var se=0,ue=X.length,Z=te.length,Se,ce;se<ue;){if(J>=Z)return-1;if(Se=X.charCodeAt(se++),Se===37){if(Se=X.charAt(se++),ce=T[Se in vW?X.charAt(se++):Se],!ce||(J=ce(K,te,J))<0)return-1}else if(Se!=te.charCodeAt(J++))return-1}return J}o(S,"parseSpecifier");function _(K,X,te){var J=h.exec(X.slice(te));return J?(K.p=f.get(J[0].toLowerCase()),te+J[0].length):-1}o(_,"parsePeriod");function I(K,X,te){var J=m.exec(X.slice(te));return J?(K.w=g.get(J[0].toLowerCase()),te+J[0].length):-1}o(I,"parseShortWeekday");function D(K,X,te){var J=d.exec(X.slice(te));return J?(K.w=p.get(J[0].toLowerCase()),te+J[0].length):-1}o(D,"parseWeekday");function k(K,X,te){var J=x.exec(X.slice(te));return J?(K.m=b.get(J[0].toLowerCase()),te+J[0].length):-1}o(k,"parseShortMonth");function L(K,X,te){var J=y.exec(X.slice(te));return J?(K.m=v.get(J[0].toLowerCase()),te+J[0].length):-1}o(L,"parseMonth");function R(K,X,te){return S(K,e,X,te)}o(R,"parseLocaleDateTime");function O(K,X,te){return S(K,r,X,te)}o(O,"parseLocaleDate");function M(K,X,te){return S(K,n,X,te)}o(M,"parseLocaleTime");function B(K){return s[K.getDay()]}o(B,"formatShortWeekday");function F(K){return a[K.getDay()]}o(F,"formatWeekday");function P(K){return u[K.getMonth()]}o(P,"formatShortMonth");function z(K){return l[K.getMonth()]}o(z,"formatMonth");function $(K){return i[+(K.getHours()>=12)]}o($,"formatPeriod");function H(K){return 1+~~(K.getMonth()/3)}o(H,"formatQuarter");function Q(K){return s[K.getUTCDay()]}o(Q,"formatUTCShortWeekday");function j(K){return a[K.getUTCDay()]}o(j,"formatUTCWeekday");function ie(K){return u[K.getUTCMonth()]}o(ie,"formatUTCShortMonth");function ne(K){return l[K.getUTCMonth()]}o(ne,"formatUTCMonth");function le(K){return i[+(K.getUTCHours()>=12)]}o(le,"formatUTCPeriod");function he(K){return 1+~~(K.getUTCMonth()/3)}return o(he,"formatUTCQuarter"),{format:o(function(K){var X=E(K+="",w);return X.toString=function(){return K},X},"format"),parse:o(function(K){var X=A(K+="",!1);return X.toString=function(){return K},X},"parse"),utcFormat:o(function(K){var X=E(K+="",C);return X.toString=function(){return K},X},"utcFormat"),utcParse:o(function(K){var X=A(K+="",!0);return X.toString=function(){return K},X},"utcParse")}}function Wr(t,e,r){var n=t<0?"-":"",i=(n?-t:t)+"",a=i.length;return n+(a<r?new Array(r-a+1).join(e)+i:i)}function $Te(t){return t.replace(FTe,"\\$&")}function Av(t){return new RegExp("^(?:"+t.map($Te).join("|")+")","i")}function _v(t){return new Map(t.map((e,r)=>[e.toLowerCase(),r]))}function zTe(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function GTe(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function VTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function UTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function HTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function xW(t,e,r){var n=Qi.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function bW(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function WTe(t,e,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function qTe(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.q=n[0]*3-3,r+n[0].length):-1}function YTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function wW(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function XTe(t,e,r){var n=Qi.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function TW(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function jTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function KTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function QTe(t,e,r){var n=Qi.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function ZTe(t,e,r){var n=Qi.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function JTe(t,e,r){var n=BTe.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function eke(t,e,r){var n=Qi.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function tke(t,e,r){var n=Qi.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function kW(t,e){return Wr(t.getDate(),e,2)}function rke(t,e){return Wr(t.getHours(),e,2)}function nke(t,e){return Wr(t.getHours()%12||12,e,2)}function ike(t,e){return Wr(1+_o.count(Qs(t),t),e,3)}function _W(t,e){return Wr(t.getMilliseconds(),e,3)}function ake(t,e){return _W(t,e)+"000"}function ske(t,e){return Wr(t.getMonth()+1,e,2)}function oke(t,e){return Wr(t.getMinutes(),e,2)}function lke(t,e){return Wr(t.getSeconds(),e,2)}function cke(t){var e=t.getDay();return e===0?7:e}function uke(t,e){return Wr(yl.count(Qs(t)-1,t),e,2)}function DW(t){var e=t.getDay();return e>=4||e===0?oc(t):oc.ceil(t)}function hke(t,e){return t=DW(t),Wr(oc.count(Qs(t),t)+(Qs(t).getDay()===4),e,2)}function fke(t){return t.getDay()}function dke(t,e){return Wr(Ch.count(Qs(t)-1,t),e,2)}function pke(t,e){return Wr(t.getFullYear()%100,e,2)}function mke(t,e){return t=DW(t),Wr(t.getFullYear()%100,e,2)}function gke(t,e){return Wr(t.getFullYear()%1e4,e,4)}function yke(t,e){var r=t.getDay();return t=r>=4||r===0?oc(t):oc.ceil(t),Wr(t.getFullYear()%1e4,e,4)}function vke(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Wr(e/60|0,"0",2)+Wr(e%60,"0",2)}function EW(t,e){return Wr(t.getUTCDate(),e,2)}function xke(t,e){return Wr(t.getUTCHours(),e,2)}function bke(t,e){return Wr(t.getUTCHours()%12||12,e,2)}function wke(t,e){return Wr(1+Sv.count(vl(t),t),e,3)}function LW(t,e){return Wr(t.getUTCMilliseconds(),e,3)}function Tke(t,e){return LW(t,e)+"000"}function kke(t,e){return Wr(t.getUTCMonth()+1,e,2)}function Eke(t,e){return Wr(t.getUTCMinutes(),e,2)}function Ske(t,e){return Wr(t.getUTCSeconds(),e,2)}function Cke(t){var e=t.getUTCDay();return e===0?7:e}function Ake(t,e){return Wr(bd.count(vl(t)-1,t),e,2)}function RW(t){var e=t.getUTCDay();return e>=4||e===0?Ah(t):Ah.ceil(t)}function _ke(t,e){return t=RW(t),Wr(Ah.count(vl(t),t)+(vl(t).getUTCDay()===4),e,2)}function Dke(t){return t.getUTCDay()}function Lke(t,e){return Wr(N0.count(vl(t)-1,t),e,2)}function Rke(t,e){return Wr(t.getUTCFullYear()%100,e,2)}function Nke(t,e){return t=RW(t),Wr(t.getUTCFullYear()%100,e,2)}function Mke(t,e){return Wr(t.getUTCFullYear()%1e4,e,4)}function Ike(t,e){var r=t.getUTCDay();return t=r>=4||r===0?Ah(t):Ah.ceil(t),Wr(t.getUTCFullYear()%1e4,e,4)}function Oke(){return"+0000"}function SW(){return"%"}function CW(t){return+t}function AW(t){return Math.floor(+t/1e3)}var vW,Qi,BTe,FTe,NW=N(()=>{"use strict";A5();o(X_,"localDate");o(j_,"utcDate");o(Cv,"newDate");o(K_,"formatLocale");vW={"-":"",_:" ",0:"0"},Qi=/^\s*\d+/,BTe=/^%/,FTe=/[\\^$*+?|[\]().{}]/g;o(Wr,"pad");o($Te,"requote");o(Av,"formatRe");o(_v,"formatLookup");o(zTe,"parseWeekdayNumberSunday");o(GTe,"parseWeekdayNumberMonday");o(VTe,"parseWeekNumberSunday");o(UTe,"parseWeekNumberISO");o(HTe,"parseWeekNumberMonday");o(xW,"parseFullYear");o(bW,"parseYear");o(WTe,"parseZone");o(qTe,"parseQuarter");o(YTe,"parseMonthNumber");o(wW,"parseDayOfMonth");o(XTe,"parseDayOfYear");o(TW,"parseHour24");o(jTe,"parseMinutes");o(KTe,"parseSeconds");o(QTe,"parseMilliseconds");o(ZTe,"parseMicroseconds");o(JTe,"parseLiteralPercent");o(eke,"parseUnixTimestamp");o(tke,"parseUnixTimestampSeconds");o(kW,"formatDayOfMonth");o(rke,"formatHour24");o(nke,"formatHour12");o(ike,"formatDayOfYear");o(_W,"formatMilliseconds");o(ake,"formatMicroseconds");o(ske,"formatMonthNumber");o(oke,"formatMinutes");o(lke,"formatSeconds");o(cke,"formatWeekdayNumberMonday");o(uke,"formatWeekNumberSunday");o(DW,"dISO");o(hke,"formatWeekNumberISO");o(fke,"formatWeekdayNumberSunday");o(dke,"formatWeekNumberMonday");o(pke,"formatYear");o(mke,"formatYearISO");o(gke,"formatFullYear");o(yke,"formatFullYearISO");o(vke,"formatZone");o(EW,"formatUTCDayOfMonth");o(xke,"formatUTCHour24");o(bke,"formatUTCHour12");o(wke,"formatUTCDayOfYear");o(LW,"formatUTCMilliseconds");o(Tke,"formatUTCMicroseconds");o(kke,"formatUTCMonthNumber");o(Eke,"formatUTCMinutes");o(Ske,"formatUTCSeconds");o(Cke,"formatUTCWeekdayNumberMonday");o(Ake,"formatUTCWeekNumberSunday");o(RW,"UTCdISO");o(_ke,"formatUTCWeekNumberISO");o(Dke,"formatUTCWeekdayNumberSunday");o(Lke,"formatUTCWeekNumberMonday");o(Rke,"formatUTCYear");o(Nke,"formatUTCYearISO");o(Mke,"formatUTCFullYear");o(Ike,"formatUTCFullYearISO");o(Oke,"formatUTCZone");o(SW,"formatLiteralPercent");o(CW,"formatUnixTimestamp");o(AW,"formatUnixTimestampSeconds")});function Q_(t){return M0=K_(t),wd=M0.format,MW=M0.parse,IW=M0.utcFormat,OW=M0.utcParse,M0}var M0,wd,MW,IW,OW,PW=N(()=>{"use strict";NW();Q_({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});o(Q_,"defaultLocale")});var Z_=N(()=>{"use strict";PW()});function Pke(t){return new Date(t)}function Bke(t){return t instanceof Date?+t:+new Date(+t)}function BW(t,e,r,n,i,a,s,l,u,h){var f=kv(),d=f.invert,p=f.domain,m=h(".%L"),g=h(":%S"),y=h("%I:%M"),v=h("%I %p"),x=h("%a %d"),b=h("%b %d"),w=h("%B"),C=h("%Y");function T(E){return(u(E)<E?m:l(E)<E?g:s(E)<E?y:a(E)<E?v:n(E)<E?i(E)<E?x:b:r(E)<E?w:C)(E)}return o(T,"tickFormat"),f.invert=function(E){return new Date(d(E))},f.domain=function(E){return arguments.length?p(Array.from(E,Bke)):p().map(Pke)},f.ticks=function(E){var A=p();return t(A[0],A[A.length-1],E??10)},f.tickFormat=function(E,A){return A==null?T:h(A)},f.nice=function(E){var A=p();return(!E||typeof E.range!="function")&&(E=e(A[0],A[A.length-1],E??10)),E?p(O_(A,E)):f},f.copy=function(){return v5(f,BW(t,e,r,n,i,a,s,l,u,h))},f}function _5(){return Sh.apply(BW(q_,Y_,Qs,bu,yl,_o,xu,vu,Ks,wd).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}var FW=N(()=>{"use strict";A5();Z_();M_();Tv();aW();o(Pke,"date");o(Bke,"number");o(BW,"calendar");o(_5,"time")});var $W=N(()=>{"use strict";JH();iW();D_();FW()});function J_(t){for(var e=t.length/6|0,r=new Array(e),n=0;n<e;)r[n]="#"+t.slice(n*6,++n*6);return r}var zW=N(()=>{"use strict";o(J_,"default")});var e9,GW=N(()=>{"use strict";zW();e9=J_("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab")});var VW=N(()=>{"use strict";GW()});function Bn(t){return o(function(){return t},"constant")}var D5=N(()=>{"use strict";o(Bn,"default")});function HW(t){return t>1?0:t<-1?I0:Math.acos(t)}function r9(t){return t>=1?Dv:t<=-1?-Dv:Math.asin(t)}var t9,fa,_h,UW,L5,xl,Td,Zi,I0,Dv,O0,R5=N(()=>{"use strict";t9=Math.abs,fa=Math.atan2,_h=Math.cos,UW=Math.max,L5=Math.min,xl=Math.sin,Td=Math.sqrt,Zi=1e-12,I0=Math.PI,Dv=I0/2,O0=2*I0;o(HW,"acos");o(r9,"asin")});function N5(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(r==null)e=null;else{let n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);e=n}return t},()=>new pd(e)}var n9=N(()=>{"use strict";m_();o(N5,"withPath")});function Fke(t){return t.innerRadius}function $ke(t){return t.outerRadius}function zke(t){return t.startAngle}function Gke(t){return t.endAngle}function Vke(t){return t&&t.padAngle}function Uke(t,e,r,n,i,a,s,l){var u=r-t,h=n-e,f=s-i,d=l-a,p=d*u-f*h;if(!(p*p<Zi))return p=(f*(e-a)-d*(t-i))/p,[t+p*u,e+p*h]}function M5(t,e,r,n,i,a,s){var l=t-r,u=e-n,h=(s?a:-a)/Td(l*l+u*u),f=h*u,d=-h*l,p=t+f,m=e+d,g=r+f,y=n+d,v=(p+g)/2,x=(m+y)/2,b=g-p,w=y-m,C=b*b+w*w,T=i-a,E=p*y-g*m,A=(w<0?-1:1)*Td(UW(0,T*T*C-E*E)),S=(E*w-b*A)/C,_=(-E*b-w*A)/C,I=(E*w+b*A)/C,D=(-E*b+w*A)/C,k=S-v,L=_-x,R=I-v,O=D-x;return k*k+L*L>R*R+O*O&&(S=I,_=D),{cx:S,cy:_,x01:-f,y01:-d,x11:S*(i/T-1),y11:_*(i/T-1)}}function bl(){var t=Fke,e=$ke,r=Bn(0),n=null,i=zke,a=Gke,s=Vke,l=null,u=N5(h);function h(){var f,d,p=+t.apply(this,arguments),m=+e.apply(this,arguments),g=i.apply(this,arguments)-Dv,y=a.apply(this,arguments)-Dv,v=t9(y-g),x=y>g;if(l||(l=f=u()),m<p&&(d=m,m=p,p=d),!(m>Zi))l.moveTo(0,0);else if(v>O0-Zi)l.moveTo(m*_h(g),m*xl(g)),l.arc(0,0,m,g,y,!x),p>Zi&&(l.moveTo(p*_h(y),p*xl(y)),l.arc(0,0,p,y,g,x));else{var b=g,w=y,C=g,T=y,E=v,A=v,S=s.apply(this,arguments)/2,_=S>Zi&&(n?+n.apply(this,arguments):Td(p*p+m*m)),I=L5(t9(m-p)/2,+r.apply(this,arguments)),D=I,k=I,L,R;if(_>Zi){var O=r9(_/p*xl(S)),M=r9(_/m*xl(S));(E-=O*2)>Zi?(O*=x?1:-1,C+=O,T-=O):(E=0,C=T=(g+y)/2),(A-=M*2)>Zi?(M*=x?1:-1,b+=M,w-=M):(A=0,b=w=(g+y)/2)}var B=m*_h(b),F=m*xl(b),P=p*_h(T),z=p*xl(T);if(I>Zi){var $=m*_h(w),H=m*xl(w),Q=p*_h(C),j=p*xl(C),ie;if(v<I0)if(ie=Uke(B,F,Q,j,$,H,P,z)){var ne=B-ie[0],le=F-ie[1],he=$-ie[0],K=H-ie[1],X=1/xl(HW((ne*he+le*K)/(Td(ne*ne+le*le)*Td(he*he+K*K)))/2),te=Td(ie[0]*ie[0]+ie[1]*ie[1]);D=L5(I,(p-te)/(X-1)),k=L5(I,(m-te)/(X+1))}else D=k=0}A>Zi?k>Zi?(L=M5(Q,j,B,F,m,k,x),R=M5($,H,P,z,m,k,x),l.moveTo(L.cx+L.x01,L.cy+L.y01),k<I?l.arc(L.cx,L.cy,k,fa(L.y01,L.x01),fa(R.y01,R.x01),!x):(l.arc(L.cx,L.cy,k,fa(L.y01,L.x01),fa(L.y11,L.x11),!x),l.arc(0,0,m,fa(L.cy+L.y11,L.cx+L.x11),fa(R.cy+R.y11,R.cx+R.x11),!x),l.arc(R.cx,R.cy,k,fa(R.y11,R.x11),fa(R.y01,R.x01),!x))):(l.moveTo(B,F),l.arc(0,0,m,b,w,!x)):l.moveTo(B,F),!(p>Zi)||!(E>Zi)?l.lineTo(P,z):D>Zi?(L=M5(P,z,$,H,p,-D,x),R=M5(B,F,Q,j,p,-D,x),l.lineTo(L.cx+L.x01,L.cy+L.y01),D<I?l.arc(L.cx,L.cy,D,fa(L.y01,L.x01),fa(R.y01,R.x01),!x):(l.arc(L.cx,L.cy,D,fa(L.y01,L.x01),fa(L.y11,L.x11),!x),l.arc(0,0,p,fa(L.cy+L.y11,L.cx+L.x11),fa(R.cy+R.y11,R.cx+R.x11),x),l.arc(R.cx,R.cy,D,fa(R.y11,R.x11),fa(R.y01,R.x01),!x))):l.arc(0,0,p,T,C,x)}if(l.closePath(),f)return l=null,f+""||null}return o(h,"arc"),h.centroid=function(){var f=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,d=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-I0/2;return[_h(d)*f,xl(d)*f]},h.innerRadius=function(f){return arguments.length?(t=typeof f=="function"?f:Bn(+f),h):t},h.outerRadius=function(f){return arguments.length?(e=typeof f=="function"?f:Bn(+f),h):e},h.cornerRadius=function(f){return arguments.length?(r=typeof f=="function"?f:Bn(+f),h):r},h.padRadius=function(f){return arguments.length?(n=f==null?null:typeof f=="function"?f:Bn(+f),h):n},h.startAngle=function(f){return arguments.length?(i=typeof f=="function"?f:Bn(+f),h):i},h.endAngle=function(f){return arguments.length?(a=typeof f=="function"?f:Bn(+f),h):a},h.padAngle=function(f){return arguments.length?(s=typeof f=="function"?f:Bn(+f),h):s},h.context=function(f){return arguments.length?(l=f??null,h):l},h}var WW=N(()=>{"use strict";D5();R5();n9();o(Fke,"arcInnerRadius");o($ke,"arcOuterRadius");o(zke,"arcStartAngle");o(Gke,"arcEndAngle");o(Vke,"arcPadAngle");o(Uke,"intersect");o(M5,"cornerTangents");o(bl,"default")});function Lv(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}var Nyt,i9=N(()=>{"use strict";Nyt=Array.prototype.slice;o(Lv,"default")});function qW(t){this._context=t}function wu(t){return new qW(t)}var a9=N(()=>{"use strict";o(qW,"Linear");qW.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e);break}},"point")};o(wu,"default")});function YW(t){return t[0]}function XW(t){return t[1]}var jW=N(()=>{"use strict";o(YW,"x");o(XW,"y")});function wl(t,e){var r=Bn(!0),n=null,i=wu,a=null,s=N5(l);t=typeof t=="function"?t:t===void 0?YW:Bn(t),e=typeof e=="function"?e:e===void 0?XW:Bn(e);function l(u){var h,f=(u=Lv(u)).length,d,p=!1,m;for(n==null&&(a=i(m=s())),h=0;h<=f;++h)!(h<f&&r(d=u[h],h,u))===p&&((p=!p)?a.lineStart():a.lineEnd()),p&&a.point(+t(d,h,u),+e(d,h,u));if(m)return a=null,m+""||null}return o(l,"line"),l.x=function(u){return arguments.length?(t=typeof u=="function"?u:Bn(+u),l):t},l.y=function(u){return arguments.length?(e=typeof u=="function"?u:Bn(+u),l):e},l.defined=function(u){return arguments.length?(r=typeof u=="function"?u:Bn(!!u),l):r},l.curve=function(u){return arguments.length?(i=u,n!=null&&(a=i(n)),l):i},l.context=function(u){return arguments.length?(u==null?n=a=null:a=i(n=u),l):n},l}var KW=N(()=>{"use strict";i9();D5();a9();n9();jW();o(wl,"default")});function s9(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}var QW=N(()=>{"use strict";o(s9,"default")});function o9(t){return t}var ZW=N(()=>{"use strict";o(o9,"default")});function I5(){var t=o9,e=s9,r=null,n=Bn(0),i=Bn(O0),a=Bn(0);function s(l){var u,h=(l=Lv(l)).length,f,d,p=0,m=new Array(h),g=new Array(h),y=+n.apply(this,arguments),v=Math.min(O0,Math.max(-O0,i.apply(this,arguments)-y)),x,b=Math.min(Math.abs(v)/h,a.apply(this,arguments)),w=b*(v<0?-1:1),C;for(u=0;u<h;++u)(C=g[m[u]=u]=+t(l[u],u,l))>0&&(p+=C);for(e!=null?m.sort(function(T,E){return e(g[T],g[E])}):r!=null&&m.sort(function(T,E){return r(l[T],l[E])}),u=0,d=p?(v-h*w)/p:0;u<h;++u,y=x)f=m[u],C=g[f],x=y+(C>0?C*d:0)+w,g[f]={data:l[f],index:u,value:C,startAngle:y,endAngle:x,padAngle:b};return g}return o(s,"pie"),s.value=function(l){return arguments.length?(t=typeof l=="function"?l:Bn(+l),s):t},s.sortValues=function(l){return arguments.length?(e=l,r=null,s):e},s.sort=function(l){return arguments.length?(r=l,e=null,s):r},s.startAngle=function(l){return arguments.length?(n=typeof l=="function"?l:Bn(+l),s):n},s.endAngle=function(l){return arguments.length?(i=typeof l=="function"?l:Bn(+l),s):i},s.padAngle=function(l){return arguments.length?(a=typeof l=="function"?l:Bn(+l),s):a},s}var JW=N(()=>{"use strict";i9();D5();QW();ZW();R5();o(I5,"default")});function Rv(t){return new O5(t,!0)}function Nv(t){return new O5(t,!1)}var O5,eq=N(()=>{"use strict";O5=class{static{o(this,"Bump")}constructor(e,r){this._context=e,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,r){switch(e=+e,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,r,e,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,e,this._y0,e,r);break}}this._x0=e,this._y0=r}};o(Rv,"bumpX");o(Nv,"bumpY")});function Zs(){}var Mv=N(()=>{"use strict";o(Zs,"default")});function P0(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function Iv(t){this._context=t}function Do(t){return new Iv(t)}var Ov=N(()=>{"use strict";o(P0,"point");o(Iv,"Basis");Iv.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 3:P0(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:P0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(Do,"default")});function tq(t){this._context=t}function P5(t){return new tq(t)}var rq=N(()=>{"use strict";Mv();Ov();o(tq,"BasisClosed");tq.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:P0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(P5,"default")});function nq(t){this._context=t}function B5(t){return new nq(t)}var iq=N(()=>{"use strict";Ov();o(nq,"BasisOpen");nq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:P0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(B5,"default")});function aq(t,e){this._basis=new Iv(t),this._beta=e}var l9,sq=N(()=>{"use strict";Ov();o(aq,"Bundle");aq.prototype={lineStart:o(function(){this._x=[],this._y=[],this._basis.lineStart()},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var n=t[0],i=e[0],a=t[r]-n,s=e[r]-i,l=-1,u;++l<=r;)u=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(n+u*a),this._beta*e[l]+(1-this._beta)*(i+u*s));this._x=this._y=null,this._basis.lineEnd()},"lineEnd"),point:o(function(t,e){this._x.push(+t),this._y.push(+e)},"point")};l9=o(function t(e){function r(n){return e===1?new Iv(n):new aq(n,e)}return o(r,"bundle"),r.beta=function(n){return t(+n)},r},"custom")(.85)});function B0(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function F5(t,e){this._context=t,this._k=(1-e)/6}var Pv,Bv=N(()=>{"use strict";o(B0,"point");o(F5,"Cardinal");F5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:B0(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:B0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};Pv=o(function t(e){function r(n){return new F5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function $5(t,e){this._context=t,this._k=(1-e)/6}var c9,u9=N(()=>{"use strict";Mv();Bv();o($5,"CardinalClosed");$5.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:B0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};c9=o(function t(e){function r(n){return new $5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function z5(t,e){this._context=t,this._k=(1-e)/6}var h9,f9=N(()=>{"use strict";Bv();o(z5,"CardinalOpen");z5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:B0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};h9=o(function t(e){function r(n){return new z5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function Fv(t,e,r){var n=t._x1,i=t._y1,a=t._x2,s=t._y2;if(t._l01_a>Zi){var l=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,u=3*t._l01_a*(t._l01_a+t._l12_a);n=(n*l-t._x0*t._l12_2a+t._x2*t._l01_2a)/u,i=(i*l-t._y0*t._l12_2a+t._y2*t._l01_2a)/u}if(t._l23_a>Zi){var h=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*h+t._x1*t._l23_2a-e*t._l12_2a)/f,s=(s*h+t._y1*t._l23_2a-r*t._l12_2a)/f}t._context.bezierCurveTo(n,i,a,s,t._x2,t._y2)}function oq(t,e){this._context=t,this._alpha=e}var $v,G5=N(()=>{"use strict";R5();Bv();o(Fv,"point");o(oq,"CatmullRom");oq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Fv(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};$v=o(function t(e){function r(n){return e?new oq(n,e):new F5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function lq(t,e){this._context=t,this._alpha=e}var d9,cq=N(()=>{"use strict";u9();Mv();G5();o(lq,"CatmullRomClosed");lq.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Fv(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};d9=o(function t(e){function r(n){return e?new lq(n,e):new $5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function uq(t,e){this._context=t,this._alpha=e}var p9,hq=N(()=>{"use strict";f9();G5();o(uq,"CatmullRomOpen");uq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Fv(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};p9=o(function t(e){function r(n){return e?new uq(n,e):new z5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function fq(t){this._context=t}function V5(t){return new fq(t)}var dq=N(()=>{"use strict";Mv();o(fq,"LinearClosed");fq.prototype={areaStart:Zs,areaEnd:Zs,lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){this._point&&this._context.closePath()},"lineEnd"),point:o(function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))},"point")};o(V5,"default")});function pq(t){return t<0?-1:1}function mq(t,e,r){var n=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(n||i<0&&-0),s=(r-t._y1)/(i||n<0&&-0),l=(a*i+s*n)/(n+i);return(pq(a)+pq(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(l))||0}function gq(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function m9(t,e,r){var n=t._x0,i=t._y0,a=t._x1,s=t._y1,l=(a-n)/3;t._context.bezierCurveTo(n+l,i+l*e,a-l,s-l*r,a,s)}function U5(t){this._context=t}function yq(t){this._context=new vq(t)}function vq(t){this._context=t}function zv(t){return new U5(t)}function Gv(t){return new yq(t)}var xq=N(()=>{"use strict";o(pq,"sign");o(mq,"slope3");o(gq,"slope2");o(m9,"point");o(U5,"MonotoneX");U5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:m9(this,this._t0,gq(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){var r=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,m9(this,gq(this,r=mq(this,t,e)),r);break;default:m9(this,this._t0,r=mq(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}},"point")};o(yq,"MonotoneY");(yq.prototype=Object.create(U5.prototype)).point=function(t,e){U5.prototype.point.call(this,e,t)};o(vq,"ReflectContext");vq.prototype={moveTo:o(function(t,e){this._context.moveTo(e,t)},"moveTo"),closePath:o(function(){this._context.closePath()},"closePath"),lineTo:o(function(t,e){this._context.lineTo(e,t)},"lineTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._context.bezierCurveTo(e,t,n,r,a,i)},"bezierCurveTo")};o(zv,"monotoneX");o(Gv,"monotoneY")});function wq(t){this._context=t}function bq(t){var e,r=t.length-1,n,i=new Array(r),a=new Array(r),s=new Array(r);for(i[0]=0,a[0]=2,s[0]=t[0]+2*t[1],e=1;e<r-1;++e)i[e]=1,a[e]=4,s[e]=4*t[e]+2*t[e+1];for(i[r-1]=2,a[r-1]=7,s[r-1]=8*t[r-1]+t[r],e=1;e<r;++e)n=i[e]/a[e-1],a[e]-=n,s[e]-=n*s[e-1];for(i[r-1]=s[r-1]/a[r-1],e=r-2;e>=0;--e)i[e]=(s[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e<r-1;++e)a[e]=2*t[e+1]-i[e+1];return[i,a]}function F0(t){return new wq(t)}var Tq=N(()=>{"use strict";o(wq,"Natural");wq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=[],this._y=[]},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),r===2)this._context.lineTo(t[1],e[1]);else for(var n=bq(t),i=bq(e),a=0,s=1;s<r;++a,++s)this._context.bezierCurveTo(n[0][a],i[0][a],n[1][a],i[1][a],t[s],e[s]);(this._line||this._line!==0&&r===1)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},"lineEnd"),point:o(function(t,e){this._x.push(+t),this._y.push(+e)},"point")};o(bq,"controlPoints");o(F0,"default")});function H5(t,e){this._context=t,this._t=e}function $0(t){return new H5(t,.5)}function Vv(t){return new H5(t,0)}function Uv(t){return new H5(t,1)}var kq=N(()=>{"use strict";o(H5,"Step");H5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=this._y=NaN,this._point=0},"lineStart"),lineEnd:o(function(){0<this._t&&this._t<1&&this._point===2&&this._context.lineTo(this._x,this._y),(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}break}}this._x=t,this._y=e},"point")};o($0,"default");o(Vv,"stepBefore");o(Uv,"stepAfter")});var Eq=N(()=>{"use strict";WW();KW();JW();rq();iq();Ov();eq();sq();u9();f9();Bv();cq();hq();G5();dq();a9();xq();Tq();kq()});var Sq=N(()=>{"use strict"});var Cq=N(()=>{"use strict"});function Dh(t,e,r){this.k=t,this.x=e,this.y=r}function y9(t){for(;!t.__zoom;)if(!(t=t.parentNode))return g9;return t.__zoom}var g9,v9=N(()=>{"use strict";o(Dh,"Transform");Dh.prototype={constructor:Dh,scale:o(function(t){return t===1?this:new Dh(this.k*t,this.x,this.y)},"scale"),translate:o(function(t,e){return t===0&e===0?this:new Dh(this.k,this.x+this.k*t,this.y+this.k*e)},"translate"),apply:o(function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},"apply"),applyX:o(function(t){return t*this.k+this.x},"applyX"),applyY:o(function(t){return t*this.k+this.y},"applyY"),invert:o(function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},"invert"),invertX:o(function(t){return(t-this.x)/this.k},"invertX"),invertY:o(function(t){return(t-this.y)/this.k},"invertY"),rescaleX:o(function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},"rescaleX"),rescaleY:o(function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},"rescaleY"),toString:o(function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"},"toString")};g9=new Dh(1,0,0);y9.prototype=Dh.prototype;o(y9,"transform")});var Aq=N(()=>{"use strict"});var _q=N(()=>{"use strict";l5();Sq();Cq();v9();Aq()});var Dq=N(()=>{"use strict";_q();v9()});var dr=N(()=>{"use strict";vh();sV();SH();DH();E0();LH();RH();TA();QV();NH();u_();MH();OH();A_();jH();KH();A0();m_();QH();IH();ZH();$W();VW();fl();Eq();A5();Z_();r5();l5();Dq()});var Lq=Mi(Ji=>{"use strict";Object.defineProperty(Ji,"__esModule",{value:!0});Ji.BLANK_URL=Ji.relativeFirstCharacters=Ji.whitespaceEscapeCharsRegex=Ji.urlSchemeRegex=Ji.ctrlCharactersRegex=Ji.htmlCtrlEntityRegex=Ji.htmlEntitiesRegex=Ji.invalidProtocolRegex=void 0;Ji.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im;Ji.htmlEntitiesRegex=/&#(\w+)(^\w|;)?/g;Ji.htmlCtrlEntityRegex=/&(newline|tab);/gi;Ji.ctrlCharactersRegex=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;Ji.urlSchemeRegex=/^.+(:|&colon;)/gim;Ji.whitespaceEscapeCharsRegex=/(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;Ji.relativeFirstCharacters=[".","/"];Ji.BLANK_URL="about:blank"});var z0=Mi(W5=>{"use strict";Object.defineProperty(W5,"__esModule",{value:!0});W5.sanitizeUrl=void 0;var Aa=Lq();function Hke(t){return Aa.relativeFirstCharacters.indexOf(t[0])>-1}o(Hke,"isRelativeUrlWithoutProtocol");function Wke(t){var e=t.replace(Aa.ctrlCharactersRegex,"");return e.replace(Aa.htmlEntitiesRegex,function(r,n){return String.fromCharCode(n)})}o(Wke,"decodeHtmlCharacters");function qke(t){return URL.canParse(t)}o(qke,"isValidUrl");function Rq(t){try{return decodeURIComponent(t)}catch{return t}}o(Rq,"decodeURI");function Yke(t){if(!t)return Aa.BLANK_URL;var e,r=Rq(t.trim());do r=Wke(r).replace(Aa.htmlCtrlEntityRegex,"").replace(Aa.ctrlCharactersRegex,"").replace(Aa.whitespaceEscapeCharsRegex,"").trim(),r=Rq(r),e=r.match(Aa.ctrlCharactersRegex)||r.match(Aa.htmlEntitiesRegex)||r.match(Aa.htmlCtrlEntityRegex)||r.match(Aa.whitespaceEscapeCharsRegex);while(e&&e.length>0);var n=r;if(!n)return Aa.BLANK_URL;if(Hke(n))return n;var i=n.trimStart(),a=i.match(Aa.urlSchemeRegex);if(!a)return n;var s=a[0].toLowerCase().trim();if(Aa.invalidProtocolRegex.test(s))return Aa.BLANK_URL;var l=i.replace(/\\/g,"/");if(s==="mailto:"||s.includes("://"))return l;if(s==="http:"||s==="https:"){if(!qke(l))return Aa.BLANK_URL;var u=new URL(l);return u.protocol=u.protocol.toLowerCase(),u.hostname=u.hostname.toLowerCase(),u.toString()}return l}o(Yke,"sanitizeUrl");W5.sanitizeUrl=Yke});var x9,kd,q5,Nq,Mq,Iq,Tl,Hv,Wv=N(()=>{"use strict";x9=Sa(z0(),1);gr();kd=o((t,e)=>{let r=t.append("rect");if(r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),e.name&&r.attr("name",e.name),e.rx&&r.attr("rx",e.rx),e.ry&&r.attr("ry",e.ry),e.attrs!==void 0)for(let n in e.attrs)r.attr(n,e.attrs[n]);return e.class&&r.attr("class",e.class),r},"drawRect"),q5=o((t,e)=>{let r={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};kd(t,r).lower()},"drawBackgroundRect"),Nq=o((t,e)=>{let r=e.text.replace(nd," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),Mq=o((t,e,r,n)=>{let i=t.append("image");i.attr("x",e),i.attr("y",r);let a=(0,x9.sanitizeUrl)(n);i.attr("xlink:href",a)},"drawImage"),Iq=o((t,e,r,n)=>{let i=t.append("use");i.attr("x",e),i.attr("y",r);let a=(0,x9.sanitizeUrl)(n);i.attr("xlink:href",`#${a}`)},"drawEmbeddedImage"),Tl=o(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),Hv=o(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj")});var Oq,b9,Pq,Xke,jke,Kke,Qke,Zke,Jke,eEe,tEe,rEe,nEe,iEe,aEe,Tu,kl,Bq=N(()=>{"use strict";gr();Wv();Oq=Sa(z0(),1),b9=o(function(t,e){return kd(t,e)},"drawRect"),Pq=o(function(t,e,r,n,i,a){let s=t.append("image");s.attr("width",e),s.attr("height",r),s.attr("x",n),s.attr("y",i);let l=a.startsWith("data:image/png;base64")?a:(0,Oq.sanitizeUrl)(a);s.attr("xlink:href",l)},"drawImage"),Xke=o((t,e,r)=>{let n=t.append("g"),i=0;for(let a of e){let s=a.textColor?a.textColor:"#444444",l=a.lineColor?a.lineColor:"#444444",u=a.offsetX?parseInt(a.offsetX):0,h=a.offsetY?parseInt(a.offsetY):0,f="";if(i===0){let p=n.append("line");p.attr("x1",a.startPoint.x),p.attr("y1",a.startPoint.y),p.attr("x2",a.endPoint.x),p.attr("y2",a.endPoint.y),p.attr("stroke-width","1"),p.attr("stroke",l),p.style("fill","none"),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)"),i=-1}else{let p=n.append("path");p.attr("fill","none").attr("stroke-width","1").attr("stroke",l).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",a.startPoint.x).replaceAll("starty",a.startPoint.y).replaceAll("controlx",a.startPoint.x+(a.endPoint.x-a.startPoint.x)/2-(a.endPoint.x-a.startPoint.x)/4).replaceAll("controly",a.startPoint.y+(a.endPoint.y-a.startPoint.y)/2).replaceAll("stopx",a.endPoint.x).replaceAll("stopy",a.endPoint.y)),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)")}let d=r.messageFont();Tu(r)(a.label.text,n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+h,a.label.width,a.label.height,{fill:s},d),a.techn&&a.techn.text!==""&&(d=r.messageFont(),Tu(r)("["+a.techn.text+"]",n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+r.messageFontSize+5+h,Math.max(a.label.width,a.techn.width),a.techn.height,{fill:s,"font-style":"italic"},d))}},"drawRels"),jke=o(function(t,e,r){let n=t.append("g"),i=e.bgColor?e.bgColor:"none",a=e.borderColor?e.borderColor:"#444444",s=e.fontColor?e.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(l={"stroke-width":1});let u={x:e.x,y:e.y,fill:i,stroke:a,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};b9(n,u);let h=r.boundaryFont();h.fontWeight="bold",h.fontSize=h.fontSize+2,h.fontColor=s,Tu(r)(e.label.text,n,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},h),e.type&&e.type.text!==""&&(h=r.boundaryFont(),h.fontColor=s,Tu(r)(e.type.text,n,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},h)),e.descr&&e.descr.text!==""&&(h=r.boundaryFont(),h.fontSize=h.fontSize-2,h.fontColor=s,Tu(r)(e.descr.text,n,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},h))},"drawBoundary"),Kke=o(function(t,e,r){let n=e.bgColor?e.bgColor:r[e.typeC4Shape.text+"_bg_color"],i=e.borderColor?e.borderColor:r[e.typeC4Shape.text+"_border_color"],a=e.fontColor?e.fontColor:"#FFFFFF",s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}let l=t.append("g");l.attr("class","person-man");let u=Tl();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":u.x=e.x,u.y=e.y,u.fill=n,u.width=e.width,u.height=e.height,u.stroke=i,u.rx=2.5,u.ry=2.5,u.attrs={"stroke-width":.5},b9(l,u);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2));break}let h=aEe(r,e.typeC4Shape.text);switch(l.append("text").attr("fill",a).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":Pq(l,48,48,e.x+e.width/2-24,e.y+e.image.Y,s);break}let f=r[e.typeC4Shape.text+"Font"]();return f.fontWeight="bold",f.fontSize=f.fontSize+2,f.fontColor=a,Tu(r)(e.label.text,l,e.x,e.y+e.label.Y,e.width,e.height,{fill:a},f),f=r[e.typeC4Shape.text+"Font"](),f.fontColor=a,e.techn&&e.techn?.text!==""?Tu(r)(e.techn.text,l,e.x,e.y+e.techn.Y,e.width,e.height,{fill:a,"font-style":"italic"},f):e.type&&e.type.text!==""&&Tu(r)(e.type.text,l,e.x,e.y+e.type.Y,e.width,e.height,{fill:a,"font-style":"italic"},f),e.descr&&e.descr.text!==""&&(f=r.personFont(),f.fontColor=a,Tu(r)(e.descr.text,l,e.x,e.y+e.descr.Y,e.width,e.height,{fill:a},f)),e.height},"drawC4Shape"),Qke=o(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),Zke=o(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),Jke=o(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),eEe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},"insertArrowHead"),tEe=o(function(t){t.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},"insertArrowEnd"),rEe=o(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),nEe=o(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertDynamicNumber"),iEe=o(function(t){let r=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);r.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),r.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},"insertArrowCrossHead"),aEe=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"getC4ShapeFont"),Tu=function(){function t(i,a,s,l,u,h,f){let d=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("text-anchor","middle").text(i);n(d,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d){let{fontSize:p,fontFamily:m,fontWeight:g}=d,y=i.split(Ze.lineBreakRegex);for(let v=0;v<y.length;v++){let x=v*p-p*(y.length-1)/2,b=a.append("text").attr("x",s+u/2).attr("y",l).style("text-anchor","middle").attr("dominant-baseline","middle").style("font-size",p).style("font-weight",g).style("font-family",m);b.append("tspan").attr("dy",x).text(y[v]).attr("alignment-baseline","mathematical"),n(b,f)}}o(e,"byTspan");function r(i,a,s,l,u,h,f,d){let p=a.append("switch"),g=p.append("foreignObject").attr("x",s).attr("y",l).attr("width",u).attr("height",h).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");g.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,p,s,l,u,h,f,d),n(g,f)}o(r,"byFo");function n(i,a){for(let s in a)a.hasOwnProperty(s)&&i.attr(s,a[s])}return o(n,"_setTextAttrs"),function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),kl={drawRect:b9,drawBoundary:jke,drawC4Shape:Kke,drawRels:Xke,drawImage:Pq,insertArrowHead:eEe,insertArrowEnd:tEe,insertArrowFilledHead:rEe,insertDynamicNumber:nEe,insertArrowCrossHead:iEe,insertDatabaseIcon:Qke,insertComputerIcon:Zke,insertClockIcon:Jke}});var sEe,X5,w9=N(()=>{"use strict";sEe=typeof global=="object"&&global&&global.Object===Object&&global,X5=sEe});var oEe,lEe,li,Lo=N(()=>{"use strict";w9();oEe=typeof self=="object"&&self&&self.Object===Object&&self,lEe=X5||oEe||Function("return this")(),li=lEe});var cEe,ea,Ed=N(()=>{"use strict";Lo();cEe=li.Symbol,ea=cEe});function fEe(t){var e=uEe.call(t,qv),r=t[qv];try{t[qv]=void 0;var n=!0}catch{}var i=hEe.call(t);return n&&(e?t[qv]=r:delete t[qv]),i}var Fq,uEe,hEe,qv,$q,zq=N(()=>{"use strict";Ed();Fq=Object.prototype,uEe=Fq.hasOwnProperty,hEe=Fq.toString,qv=ea?ea.toStringTag:void 0;o(fEe,"getRawTag");$q=fEe});function mEe(t){return pEe.call(t)}var dEe,pEe,Gq,Vq=N(()=>{"use strict";dEe=Object.prototype,pEe=dEe.toString;o(mEe,"objectToString");Gq=mEe});function vEe(t){return t==null?t===void 0?yEe:gEe:Uq&&Uq in Object(t)?$q(t):Gq(t)}var gEe,yEe,Uq,da,ku=N(()=>{"use strict";Ed();zq();Vq();gEe="[object Null]",yEe="[object Undefined]",Uq=ea?ea.toStringTag:void 0;o(vEe,"baseGetTag");da=vEe});function xEe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var bn,Js=N(()=>{"use strict";o(xEe,"isObject");bn=xEe});function EEe(t){if(!bn(t))return!1;var e=da(t);return e==wEe||e==TEe||e==bEe||e==kEe}var bEe,wEe,TEe,kEe,Si,Yv=N(()=>{"use strict";ku();Js();bEe="[object AsyncFunction]",wEe="[object Function]",TEe="[object GeneratorFunction]",kEe="[object Proxy]";o(EEe,"isFunction");Si=EEe});var SEe,j5,Hq=N(()=>{"use strict";Lo();SEe=li["__core-js_shared__"],j5=SEe});function CEe(t){return!!Wq&&Wq in t}var Wq,qq,Yq=N(()=>{"use strict";Hq();Wq=function(){var t=/[^.]+$/.exec(j5&&j5.keys&&j5.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();o(CEe,"isMasked");qq=CEe});function DEe(t){if(t!=null){try{return _Ee.call(t)}catch{}try{return t+""}catch{}}return""}var AEe,_Ee,Eu,T9=N(()=>{"use strict";AEe=Function.prototype,_Ee=AEe.toString;o(DEe,"toSource");Eu=DEe});function BEe(t){if(!bn(t)||qq(t))return!1;var e=Si(t)?PEe:REe;return e.test(Eu(t))}var LEe,REe,NEe,MEe,IEe,OEe,PEe,Xq,jq=N(()=>{"use strict";Yv();Yq();Js();T9();LEe=/[\\^$.*+?()[\]{}|]/g,REe=/^\[object .+?Constructor\]$/,NEe=Function.prototype,MEe=Object.prototype,IEe=NEe.toString,OEe=MEe.hasOwnProperty,PEe=RegExp("^"+IEe.call(OEe).replace(LEe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(BEe,"baseIsNative");Xq=BEe});function FEe(t,e){return t?.[e]}var Kq,Qq=N(()=>{"use strict";o(FEe,"getValue");Kq=FEe});function $Ee(t,e){var r=Kq(t,e);return Xq(r)?r:void 0}var Ss,Lh=N(()=>{"use strict";jq();Qq();o($Ee,"getNative");Ss=$Ee});var zEe,Su,Xv=N(()=>{"use strict";Lh();zEe=Ss(Object,"create"),Su=zEe});function GEe(){this.__data__=Su?Su(null):{},this.size=0}var Zq,Jq=N(()=>{"use strict";Xv();o(GEe,"hashClear");Zq=GEe});function VEe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var eY,tY=N(()=>{"use strict";o(VEe,"hashDelete");eY=VEe});function qEe(t){var e=this.__data__;if(Su){var r=e[t];return r===UEe?void 0:r}return WEe.call(e,t)?e[t]:void 0}var UEe,HEe,WEe,rY,nY=N(()=>{"use strict";Xv();UEe="__lodash_hash_undefined__",HEe=Object.prototype,WEe=HEe.hasOwnProperty;o(qEe,"hashGet");rY=qEe});function jEe(t){var e=this.__data__;return Su?e[t]!==void 0:XEe.call(e,t)}var YEe,XEe,iY,aY=N(()=>{"use strict";Xv();YEe=Object.prototype,XEe=YEe.hasOwnProperty;o(jEe,"hashHas");iY=jEe});function QEe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Su&&e===void 0?KEe:e,this}var KEe,sY,oY=N(()=>{"use strict";Xv();KEe="__lodash_hash_undefined__";o(QEe,"hashSet");sY=QEe});function G0(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}var k9,lY=N(()=>{"use strict";Jq();tY();nY();aY();oY();o(G0,"Hash");G0.prototype.clear=Zq;G0.prototype.delete=eY;G0.prototype.get=rY;G0.prototype.has=iY;G0.prototype.set=sY;k9=G0});function ZEe(){this.__data__=[],this.size=0}var cY,uY=N(()=>{"use strict";o(ZEe,"listCacheClear");cY=ZEe});function JEe(t,e){return t===e||t!==t&&e!==e}var Ro,Sd=N(()=>{"use strict";o(JEe,"eq");Ro=JEe});function e6e(t,e){for(var r=t.length;r--;)if(Ro(t[r][0],e))return r;return-1}var Rh,jv=N(()=>{"use strict";Sd();o(e6e,"assocIndexOf");Rh=e6e});function n6e(t){var e=this.__data__,r=Rh(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():r6e.call(e,r,1),--this.size,!0}var t6e,r6e,hY,fY=N(()=>{"use strict";jv();t6e=Array.prototype,r6e=t6e.splice;o(n6e,"listCacheDelete");hY=n6e});function i6e(t){var e=this.__data__,r=Rh(e,t);return r<0?void 0:e[r][1]}var dY,pY=N(()=>{"use strict";jv();o(i6e,"listCacheGet");dY=i6e});function a6e(t){return Rh(this.__data__,t)>-1}var mY,gY=N(()=>{"use strict";jv();o(a6e,"listCacheHas");mY=a6e});function s6e(t,e){var r=this.__data__,n=Rh(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}var yY,vY=N(()=>{"use strict";jv();o(s6e,"listCacheSet");yY=s6e});function V0(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}var Nh,Kv=N(()=>{"use strict";uY();fY();pY();gY();vY();o(V0,"ListCache");V0.prototype.clear=cY;V0.prototype.delete=hY;V0.prototype.get=dY;V0.prototype.has=mY;V0.prototype.set=yY;Nh=V0});var o6e,Mh,K5=N(()=>{"use strict";Lh();Lo();o6e=Ss(li,"Map"),Mh=o6e});function l6e(){this.size=0,this.__data__={hash:new k9,map:new(Mh||Nh),string:new k9}}var xY,bY=N(()=>{"use strict";lY();Kv();K5();o(l6e,"mapCacheClear");xY=l6e});function c6e(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}var wY,TY=N(()=>{"use strict";o(c6e,"isKeyable");wY=c6e});function u6e(t,e){var r=t.__data__;return wY(e)?r[typeof e=="string"?"string":"hash"]:r.map}var Ih,Qv=N(()=>{"use strict";TY();o(u6e,"getMapData");Ih=u6e});function h6e(t){var e=Ih(this,t).delete(t);return this.size-=e?1:0,e}var kY,EY=N(()=>{"use strict";Qv();o(h6e,"mapCacheDelete");kY=h6e});function f6e(t){return Ih(this,t).get(t)}var SY,CY=N(()=>{"use strict";Qv();o(f6e,"mapCacheGet");SY=f6e});function d6e(t){return Ih(this,t).has(t)}var AY,_Y=N(()=>{"use strict";Qv();o(d6e,"mapCacheHas");AY=d6e});function p6e(t,e){var r=Ih(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}var DY,LY=N(()=>{"use strict";Qv();o(p6e,"mapCacheSet");DY=p6e});function U0(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}var Cd,Q5=N(()=>{"use strict";bY();EY();CY();_Y();LY();o(U0,"MapCache");U0.prototype.clear=xY;U0.prototype.delete=kY;U0.prototype.get=SY;U0.prototype.has=AY;U0.prototype.set=DY;Cd=U0});function E9(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(m6e);var r=o(function(){var n=arguments,i=e?e.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var s=t.apply(this,n);return r.cache=a.set(i,s)||a,s},"memoized");return r.cache=new(E9.Cache||Cd),r}var m6e,H0,S9=N(()=>{"use strict";Q5();m6e="Expected a function";o(E9,"memoize");E9.Cache=Cd;H0=E9});function g6e(){this.__data__=new Nh,this.size=0}var RY,NY=N(()=>{"use strict";Kv();o(g6e,"stackClear");RY=g6e});function y6e(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}var MY,IY=N(()=>{"use strict";o(y6e,"stackDelete");MY=y6e});function v6e(t){return this.__data__.get(t)}var OY,PY=N(()=>{"use strict";o(v6e,"stackGet");OY=v6e});function x6e(t){return this.__data__.has(t)}var BY,FY=N(()=>{"use strict";o(x6e,"stackHas");BY=x6e});function w6e(t,e){var r=this.__data__;if(r instanceof Nh){var n=r.__data__;if(!Mh||n.length<b6e-1)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new Cd(n)}return r.set(t,e),this.size=r.size,this}var b6e,$Y,zY=N(()=>{"use strict";Kv();K5();Q5();b6e=200;o(w6e,"stackSet");$Y=w6e});function W0(t){var e=this.__data__=new Nh(t);this.size=e.size}var lc,Zv=N(()=>{"use strict";Kv();NY();IY();PY();FY();zY();o(W0,"Stack");W0.prototype.clear=RY;W0.prototype.delete=MY;W0.prototype.get=OY;W0.prototype.has=BY;W0.prototype.set=$Y;lc=W0});var T6e,q0,C9=N(()=>{"use strict";Lh();T6e=function(){try{var t=Ss(Object,"defineProperty");return t({},"",{}),t}catch{}}(),q0=T6e});function k6e(t,e,r){e=="__proto__"&&q0?q0(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var cc,Y0=N(()=>{"use strict";C9();o(k6e,"baseAssignValue");cc=k6e});function E6e(t,e,r){(r!==void 0&&!Ro(t[e],r)||r===void 0&&!(e in t))&&cc(t,e,r)}var Jv,A9=N(()=>{"use strict";Y0();Sd();o(E6e,"assignMergeValue");Jv=E6e});function S6e(t){return function(e,r,n){for(var i=-1,a=Object(e),s=n(e),l=s.length;l--;){var u=s[t?l:++i];if(r(a[u],u,a)===!1)break}return e}}var GY,VY=N(()=>{"use strict";o(S6e,"createBaseFor");GY=S6e});var C6e,X0,Z5=N(()=>{"use strict";VY();C6e=GY(),X0=C6e});function _6e(t,e){if(e)return t.slice();var r=t.length,n=WY?WY(r):new t.constructor(r);return t.copy(n),n}var qY,UY,A6e,HY,WY,J5,_9=N(()=>{"use strict";Lo();qY=typeof exports=="object"&&exports&&!exports.nodeType&&exports,UY=qY&&typeof module=="object"&&module&&!module.nodeType&&module,A6e=UY&&UY.exports===qY,HY=A6e?li.Buffer:void 0,WY=HY?HY.allocUnsafe:void 0;o(_6e,"cloneBuffer");J5=_6e});var D6e,j0,D9=N(()=>{"use strict";Lo();D6e=li.Uint8Array,j0=D6e});function L6e(t){var e=new t.constructor(t.byteLength);return new j0(e).set(new j0(t)),e}var K0,ew=N(()=>{"use strict";D9();o(L6e,"cloneArrayBuffer");K0=L6e});function R6e(t,e){var r=e?K0(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}var tw,L9=N(()=>{"use strict";ew();o(R6e,"cloneTypedArray");tw=R6e});function N6e(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}var rw,R9=N(()=>{"use strict";o(N6e,"copyArray");rw=N6e});var YY,M6e,XY,jY=N(()=>{"use strict";Js();YY=Object.create,M6e=function(){function t(){}return o(t,"object"),function(e){if(!bn(e))return{};if(YY)return YY(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}(),XY=M6e});function I6e(t,e){return function(r){return t(e(r))}}var nw,N9=N(()=>{"use strict";o(I6e,"overArg");nw=I6e});var O6e,Q0,iw=N(()=>{"use strict";N9();O6e=nw(Object.getPrototypeOf,Object),Q0=O6e});function B6e(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||P6e;return t===r}var P6e,uc,Z0=N(()=>{"use strict";P6e=Object.prototype;o(B6e,"isPrototype");uc=B6e});function F6e(t){return typeof t.constructor=="function"&&!uc(t)?XY(Q0(t)):{}}var aw,M9=N(()=>{"use strict";jY();iw();Z0();o(F6e,"initCloneObject");aw=F6e});function $6e(t){return t!=null&&typeof t=="object"}var ri,No=N(()=>{"use strict";o($6e,"isObjectLike");ri=$6e});function G6e(t){return ri(t)&&da(t)==z6e}var z6e,I9,KY=N(()=>{"use strict";ku();No();z6e="[object Arguments]";o(G6e,"baseIsArguments");I9=G6e});var QY,V6e,U6e,H6e,El,J0=N(()=>{"use strict";KY();No();QY=Object.prototype,V6e=QY.hasOwnProperty,U6e=QY.propertyIsEnumerable,H6e=I9(function(){return arguments}())?I9:function(t){return ri(t)&&V6e.call(t,"callee")&&!U6e.call(t,"callee")},El=H6e});var W6e,Pt,Un=N(()=>{"use strict";W6e=Array.isArray,Pt=W6e});function Y6e(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=q6e}var q6e,em,sw=N(()=>{"use strict";q6e=9007199254740991;o(Y6e,"isLength");em=Y6e});function X6e(t){return t!=null&&em(t.length)&&!Si(t)}var ci,Mo=N(()=>{"use strict";Yv();sw();o(X6e,"isArrayLike");ci=X6e});function j6e(t){return ri(t)&&ci(t)}var Ad,ow=N(()=>{"use strict";Mo();No();o(j6e,"isArrayLikeObject");Ad=j6e});function K6e(){return!1}var ZY,JY=N(()=>{"use strict";o(K6e,"stubFalse");ZY=K6e});var rX,eX,Q6e,tX,Z6e,J6e,Sl,tm=N(()=>{"use strict";Lo();JY();rX=typeof exports=="object"&&exports&&!exports.nodeType&&exports,eX=rX&&typeof module=="object"&&module&&!module.nodeType&&module,Q6e=eX&&eX.exports===rX,tX=Q6e?li.Buffer:void 0,Z6e=tX?tX.isBuffer:void 0,J6e=Z6e||ZY,Sl=J6e});function aSe(t){if(!ri(t)||da(t)!=eSe)return!1;var e=Q0(t);if(e===null)return!0;var r=nSe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&nX.call(r)==iSe}var eSe,tSe,rSe,nX,nSe,iSe,iX,aX=N(()=>{"use strict";ku();iw();No();eSe="[object Object]",tSe=Function.prototype,rSe=Object.prototype,nX=tSe.toString,nSe=rSe.hasOwnProperty,iSe=nX.call(Object);o(aSe,"isPlainObject");iX=aSe});function LSe(t){return ri(t)&&em(t.length)&&!!Fn[da(t)]}var sSe,oSe,lSe,cSe,uSe,hSe,fSe,dSe,pSe,mSe,gSe,ySe,vSe,xSe,bSe,wSe,TSe,kSe,ESe,SSe,CSe,ASe,_Se,DSe,Fn,sX,oX=N(()=>{"use strict";ku();sw();No();sSe="[object Arguments]",oSe="[object Array]",lSe="[object Boolean]",cSe="[object Date]",uSe="[object Error]",hSe="[object Function]",fSe="[object Map]",dSe="[object Number]",pSe="[object Object]",mSe="[object RegExp]",gSe="[object Set]",ySe="[object String]",vSe="[object WeakMap]",xSe="[object ArrayBuffer]",bSe="[object DataView]",wSe="[object Float32Array]",TSe="[object Float64Array]",kSe="[object Int8Array]",ESe="[object Int16Array]",SSe="[object Int32Array]",CSe="[object Uint8Array]",ASe="[object Uint8ClampedArray]",_Se="[object Uint16Array]",DSe="[object Uint32Array]",Fn={};Fn[wSe]=Fn[TSe]=Fn[kSe]=Fn[ESe]=Fn[SSe]=Fn[CSe]=Fn[ASe]=Fn[_Se]=Fn[DSe]=!0;Fn[sSe]=Fn[oSe]=Fn[xSe]=Fn[lSe]=Fn[bSe]=Fn[cSe]=Fn[uSe]=Fn[hSe]=Fn[fSe]=Fn[dSe]=Fn[pSe]=Fn[mSe]=Fn[gSe]=Fn[ySe]=Fn[vSe]=!1;o(LSe,"baseIsTypedArray");sX=LSe});function RSe(t){return function(e){return t(e)}}var Io,_d=N(()=>{"use strict";o(RSe,"baseUnary");Io=RSe});var lX,e2,NSe,O9,MSe,Oo,t2=N(()=>{"use strict";w9();lX=typeof exports=="object"&&exports&&!exports.nodeType&&exports,e2=lX&&typeof module=="object"&&module&&!module.nodeType&&module,NSe=e2&&e2.exports===lX,O9=NSe&&X5.process,MSe=function(){try{var t=e2&&e2.require&&e2.require("util").types;return t||O9&&O9.binding&&O9.binding("util")}catch{}}(),Oo=MSe});var cX,ISe,Oh,r2=N(()=>{"use strict";oX();_d();t2();cX=Oo&&Oo.isTypedArray,ISe=cX?Io(cX):sX,Oh=ISe});function OSe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}var n2,P9=N(()=>{"use strict";o(OSe,"safeGet");n2=OSe});function FSe(t,e,r){var n=t[e];(!(BSe.call(t,e)&&Ro(n,r))||r===void 0&&!(e in t))&&cc(t,e,r)}var PSe,BSe,hc,rm=N(()=>{"use strict";Y0();Sd();PSe=Object.prototype,BSe=PSe.hasOwnProperty;o(FSe,"assignValue");hc=FSe});function $Se(t,e,r,n){var i=!r;r||(r={});for(var a=-1,s=e.length;++a<s;){var l=e[a],u=n?n(r[l],t[l],l,r,t):void 0;u===void 0&&(u=t[l]),i?cc(r,l,u):hc(r,l,u)}return r}var Po,Dd=N(()=>{"use strict";rm();Y0();o($Se,"copyObject");Po=$Se});function zSe(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}var uX,hX=N(()=>{"use strict";o(zSe,"baseTimes");uX=zSe});function USe(t,e){var r=typeof t;return e=e??GSe,!!e&&(r=="number"||r!="symbol"&&VSe.test(t))&&t>-1&&t%1==0&&t<e}var GSe,VSe,Ph,i2=N(()=>{"use strict";GSe=9007199254740991,VSe=/^(?:0|[1-9]\d*)$/;o(USe,"isIndex");Ph=USe});function qSe(t,e){var r=Pt(t),n=!r&&El(t),i=!r&&!n&&Sl(t),a=!r&&!n&&!i&&Oh(t),s=r||n||i||a,l=s?uX(t.length,String):[],u=l.length;for(var h in t)(e||WSe.call(t,h))&&!(s&&(h=="length"||i&&(h=="offset"||h=="parent")||a&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||Ph(h,u)))&&l.push(h);return l}var HSe,WSe,lw,B9=N(()=>{"use strict";hX();J0();Un();tm();i2();r2();HSe=Object.prototype,WSe=HSe.hasOwnProperty;o(qSe,"arrayLikeKeys");lw=qSe});function YSe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}var fX,dX=N(()=>{"use strict";o(YSe,"nativeKeysIn");fX=YSe});function KSe(t){if(!bn(t))return fX(t);var e=uc(t),r=[];for(var n in t)n=="constructor"&&(e||!jSe.call(t,n))||r.push(n);return r}var XSe,jSe,pX,mX=N(()=>{"use strict";Js();Z0();dX();XSe=Object.prototype,jSe=XSe.hasOwnProperty;o(KSe,"baseKeysIn");pX=KSe});function QSe(t){return ci(t)?lw(t,!0):pX(t)}var Cs,Bh=N(()=>{"use strict";B9();mX();Mo();o(QSe,"keysIn");Cs=QSe});function ZSe(t){return Po(t,Cs(t))}var gX,yX=N(()=>{"use strict";Dd();Bh();o(ZSe,"toPlainObject");gX=ZSe});function JSe(t,e,r,n,i,a,s){var l=n2(t,r),u=n2(e,r),h=s.get(u);if(h){Jv(t,r,h);return}var f=a?a(l,u,r+"",t,e,s):void 0,d=f===void 0;if(d){var p=Pt(u),m=!p&&Sl(u),g=!p&&!m&&Oh(u);f=u,p||m||g?Pt(l)?f=l:Ad(l)?f=rw(l):m?(d=!1,f=J5(u,!0)):g?(d=!1,f=tw(u,!0)):f=[]:iX(u)||El(u)?(f=l,El(l)?f=gX(l):(!bn(l)||Si(l))&&(f=aw(u))):d=!1}d&&(s.set(u,f),i(f,u,n,a,s),s.delete(u)),Jv(t,r,f)}var vX,xX=N(()=>{"use strict";A9();_9();L9();R9();M9();J0();Un();ow();tm();Yv();Js();aX();r2();P9();yX();o(JSe,"baseMergeDeep");vX=JSe});function bX(t,e,r,n,i){t!==e&&X0(e,function(a,s){if(i||(i=new lc),bn(a))vX(t,e,s,r,bX,n,i);else{var l=n?n(n2(t,s),a,s+"",t,e,i):void 0;l===void 0&&(l=a),Jv(t,s,l)}},Cs)}var wX,TX=N(()=>{"use strict";Zv();A9();Z5();xX();Js();Bh();P9();o(bX,"baseMerge");wX=bX});function eCe(t){return t}var ta,Cu=N(()=>{"use strict";o(eCe,"identity");ta=eCe});function tCe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}var kX,EX=N(()=>{"use strict";o(tCe,"apply");kX=tCe});function rCe(t,e,r){return e=SX(e===void 0?t.length-1:e,0),function(){for(var n=arguments,i=-1,a=SX(n.length-e,0),s=Array(a);++i<a;)s[i]=n[e+i];i=-1;for(var l=Array(e+1);++i<e;)l[i]=n[i];return l[e]=r(s),kX(t,this,l)}}var SX,cw,F9=N(()=>{"use strict";EX();SX=Math.max;o(rCe,"overRest");cw=rCe});function nCe(t){return function(){return t}}var As,$9=N(()=>{"use strict";o(nCe,"constant");As=nCe});var iCe,CX,AX=N(()=>{"use strict";$9();C9();Cu();iCe=q0?function(t,e){return q0(t,"toString",{configurable:!0,enumerable:!1,value:As(e),writable:!0})}:ta,CX=iCe});function lCe(t){var e=0,r=0;return function(){var n=oCe(),i=sCe-(n-r);if(r=n,i>0){if(++e>=aCe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var aCe,sCe,oCe,_X,DX=N(()=>{"use strict";aCe=800,sCe=16,oCe=Date.now;o(lCe,"shortOut");_X=lCe});var cCe,uw,z9=N(()=>{"use strict";AX();DX();cCe=_X(CX),uw=cCe});function uCe(t,e){return uw(cw(t,e,ta),t+"")}var fc,nm=N(()=>{"use strict";Cu();F9();z9();o(uCe,"baseRest");fc=uCe});function hCe(t,e,r){if(!bn(r))return!1;var n=typeof e;return(n=="number"?ci(r)&&Ph(e,r.length):n=="string"&&e in r)?Ro(r[e],t):!1}var eo,Ld=N(()=>{"use strict";Sd();Mo();i2();Js();o(hCe,"isIterateeCall");eo=hCe});function fCe(t){return fc(function(e,r){var n=-1,i=r.length,a=i>1?r[i-1]:void 0,s=i>2?r[2]:void 0;for(a=t.length>3&&typeof a=="function"?(i--,a):void 0,s&&eo(r[0],r[1],s)&&(a=i<3?void 0:a,i=1),e=Object(e);++n<i;){var l=r[n];l&&t(e,l,n,a)}return e})}var hw,G9=N(()=>{"use strict";nm();Ld();o(fCe,"createAssigner");hw=fCe});var dCe,Fh,V9=N(()=>{"use strict";TX();G9();dCe=hw(function(t,e,r){wX(t,e,r)}),Fh=dCe});function W9(t,e){if(!t)return e;let r=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return pCe[r]??e}function vCe(t,e){let r=t.trim();if(r)return e.securityLevel!=="loose"?(0,NX.sanitizeUrl)(r):r}function OX(t,e){return!t||!e?0:Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function bCe(t){let e,r=0;t.forEach(i=>{r+=OX(i,e),e=i});let n=r/2;return q9(t,n)}function wCe(t){return t.length===1?t[0]:bCe(t)}function kCe(t,e,r){let n=structuredClone(r);Y.info("our points",n),e!=="start_left"&&e!=="start_right"&&n.reverse();let i=25+t,a=q9(n,i),s=10+t*.5,l=Math.atan2(n[0].y-a.y,n[0].x-a.x),u={x:0,y:0};return e==="start_left"?(u.x=Math.sin(l+Math.PI)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l+Math.PI)*s+(n[0].y+a.y)/2):e==="end_right"?(u.x=Math.sin(l-Math.PI)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l-Math.PI)*s+(n[0].y+a.y)/2-5):e==="end_left"?(u.x=Math.sin(l)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2-5):(u.x=Math.sin(l)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2),u}function Y9(t){let e="",r="";for(let n of t)n!==void 0&&(n.startsWith("color:")||n.startsWith("text-align:")?r=r+n+";":e=e+n+";");return{style:e,labelStyle:r}}function ECe(t){let e="",r="0123456789abcdef",n=r.length;for(let i=0;i<t;i++)e+=r.charAt(Math.floor(Math.random()*n));return e}function dw(t,e){return Q9(t,e).height}function ra(t,e){return Q9(t,e).width}function Z9(t){return"str"in t}function Fi(t,e){return Fh({},t,e)}function $n(t){return t??null}var NX,H9,pCe,mCe,gCe,MX,IX,yCe,xCe,LX,q9,TCe,RX,X9,j9,SCe,CCe,K9,ACe,Q9,U9,fw,_Ce,DCe,Bo,Gt,PX,na,$h,ir=N(()=>{"use strict";NX=Sa(z0(),1);dr();gr();e7();vt();Xf();s0();S9();V9();$4();H9="\u200B",pCe={curveBasis:Do,curveBasisClosed:P5,curveBasisOpen:B5,curveBumpX:Rv,curveBumpY:Nv,curveBundle:l9,curveCardinalClosed:c9,curveCardinalOpen:h9,curveCardinal:Pv,curveCatmullRomClosed:d9,curveCatmullRomOpen:p9,curveCatmullRom:$v,curveLinear:wu,curveLinearClosed:V5,curveMonotoneX:zv,curveMonotoneY:Gv,curveNatural:F0,curveStep:$0,curveStepAfter:Uv,curveStepBefore:Vv},mCe=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,gCe=o(function(t,e){let r=MX(t,/(?:init\b)|(?:initialize\b)/),n={};if(Array.isArray(r)){let s=r.map(l=>l.args);l0(s),n=Gn(n,[...s])}else n=r.args;if(!n)return;let i=a0(t,e),a="config";return n[a]!==void 0&&(i==="flowchart-v2"&&(i="flowchart"),n[i]=n[a],delete n[a]),n},"detectInit"),MX=o(function(t,e=null){try{let r=new RegExp(`[%]{2}(?![{]${mCe.source})(?=[}][%]{2}).*
353 +`,"ig");t=t.trim().replace(r,"").replace(/'/gm,'"'),Y.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let n,i=[];for(;(n=qf.exec(t))!==null;)if(n.index===qf.lastIndex&&qf.lastIndex++,n&&!e||e&&n[1]?.match(e)||e&&n[2]?.match(e)){let a=n[1]?n[1]:n[2],s=n[3]?n[3].trim():n[4]?JSON.parse(n[4].trim()):null;i.push({type:a,args:s})}return i.length===0?{type:t,args:null}:i.length===1?i[0]:i}catch(r){return Y.error(`ERROR: ${r.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},"detectDirective"),IX=o(function(t){return t.replace(qf,"")},"removeDirectives"),yCe=o(function(t,e){for(let[r,n]of e.entries())if(n.match(t))return r;return-1},"isSubstringInArray");o(W9,"interpolateToCurve");o(vCe,"formatUrl");xCe=o((t,...e)=>{let r=t.split("."),n=r.length-1,i=r[n],a=window;for(let s=0;s<n;s++)if(a=a[r[s]],!a){Y.error(`Function name: ${t} not found in window`);return}a[i](...e)},"runFunc");o(OX,"distance");o(bCe,"traverseEdge");o(wCe,"calcLabelPosition");LX=o((t,e=2)=>{let r=Math.pow(10,e);return Math.round(t*r)/r},"roundNumber"),q9=o((t,e)=>{let r,n=e;for(let i of t){if(r){let a=OX(i,r);if(a===0)return r;if(a<n)n-=a;else{let s=n/a;if(s<=0)return r;if(s>=1)return{x:i.x,y:i.y};if(s>0&&s<1)return{x:LX((1-s)*r.x+s*i.x,5),y:LX((1-s)*r.y+s*i.y,5)}}}r=i}throw new Error("Could not find a suitable point for the given distance")},"calculatePoint"),TCe=o((t,e,r)=>{Y.info(`our points ${JSON.stringify(e)}`),e[0]!==r&&(e=e.reverse());let i=q9(e,25),a=t?10:5,s=Math.atan2(e[0].y-i.y,e[0].x-i.x),l={x:0,y:0};return l.x=Math.sin(s)*a+(e[0].x+i.x)/2,l.y=-Math.cos(s)*a+(e[0].y+i.y)/2,l},"calcCardinalityPosition");o(kCe,"calcTerminalLabelPosition");o(Y9,"getStylesFromArray");RX=0,X9=o(()=>(RX++,"id-"+Math.random().toString(36).substr(2,12)+"-"+RX),"generateId");o(ECe,"makeRandomHex");j9=o(t=>ECe(t.length),"random"),SCe=o(function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},"getTextObj"),CCe=o(function(t,e){let r=e.text.replace(Ze.lineBreakRegex," "),[,n]=Bo(e.fontSize),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.style("font-family",e.fontFamily),i.style("font-size",n),i.style("font-weight",e.fontWeight),i.attr("fill",e.fill),e.class!==void 0&&i.attr("class",e.class);let a=i.append("tspan");return a.attr("x",e.x+e.textMargin*2),a.attr("fill",e.fill),a.text(r),i},"drawSimpleText"),K9=H0((t,e,r)=>{if(!t||(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},r),Ze.lineBreakRegex.test(t)))return t;let n=t.split(" ").filter(Boolean),i=[],a="";return n.forEach((s,l)=>{let u=ra(`${s} `,r),h=ra(a,r);if(u>e){let{hyphenatedStrings:p,remainingWord:m}=ACe(s,e,"-",r);i.push(a,...p),a=m}else h+u>=e?(i.push(a),a=s):a=[a,s].filter(Boolean).join(" ");l+1===n.length&&i.push(a)}),i.filter(s=>s!=="").join(r.joinWith)},(t,e,r)=>`${t}${e}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),ACe=H0((t,e,r="-",n)=>{n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},n);let i=[...t],a=[],s="";return i.forEach((l,u)=>{let h=`${s}${l}`;if(ra(h,n)>=e){let d=u+1,p=i.length===d,m=`${h}${r}`;a.push(p?h:m),s=""}else s=h}),{hyphenatedStrings:a,remainingWord:s}},(t,e,r="-",n)=>`${t}${e}${r}${n.fontSize}${n.fontWeight}${n.fontFamily}`);o(dw,"calculateTextHeight");o(ra,"calculateTextWidth");Q9=H0((t,e)=>{let{fontSize:r=12,fontFamily:n="Arial",fontWeight:i=400}=e;if(!t)return{width:0,height:0};let[,a]=Bo(r),s=["sans-serif",n],l=t.split(Ze.lineBreakRegex),u=[],h=Ge("body");if(!h.remove)return{width:0,height:0,lineHeight:0};let f=h.append("svg");for(let p of s){let m=0,g={width:0,height:0,lineHeight:0};for(let y of l){let v=SCe();v.text=y||H9;let x=CCe(f,v).style("font-size",a).style("font-weight",i).style("font-family",p),b=(x._groups||x)[0][0].getBBox();if(b.width===0&&b.height===0)throw new Error("svg element not in render tree");g.width=Math.round(Math.max(g.width,b.width)),m=Math.round(b.height),g.height+=m,g.lineHeight=Math.round(Math.max(g.lineHeight,m))}u.push(g)}f.remove();let d=isNaN(u[1].height)||isNaN(u[1].width)||isNaN(u[1].lineHeight)||u[0].height>u[1].height&&u[0].width>u[1].width&&u[0].lineHeight>u[1].lineHeight?0:1;return u[d]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`),U9=class{constructor(e=!1,r){this.count=0;this.count=r?r.length:0,this.next=e?()=>this.count++:()=>Date.now()}static{o(this,"InitIDGenerator")}},_Ce=o(function(t){return fw=fw||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),fw.innerHTML=t,unescape(fw.textContent)},"entityDecode");o(Z9,"isDetailedError");DCe=o((t,e,r,n)=>{if(!n)return;let i=t.node()?.getBBox();i&&t.append("text").text(n).attr("text-anchor","middle").attr("x",i.x+i.width/2).attr("y",-r).attr("class",e)},"insertTitle"),Bo=o(t=>{if(typeof t=="number")return[t,t+"px"];let e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]},"parseFontSize");o(Fi,"cleanAndMerge");Gt={assignWithDepth:Gn,wrapLabel:K9,calculateTextHeight:dw,calculateTextWidth:ra,calculateTextDimensions:Q9,cleanAndMerge:Fi,detectInit:gCe,detectDirective:MX,isSubstringInArray:yCe,interpolateToCurve:W9,calcLabelPosition:wCe,calcCardinalityPosition:TCe,calcTerminalLabelPosition:kCe,formatUrl:vCe,getStylesFromArray:Y9,generateId:X9,random:j9,runFunc:xCe,entityDecode:_Ce,insertTitle:DCe,parseFontSize:Bo,InitIDGenerator:U9},PX=o(function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/#\w+;/g,function(r){let n=r.substring(1,r.length-1);return/^\+?\d+$/.test(n)?"\uFB02\xB0\xB0"+n+"\xB6\xDF":"\uFB02\xB0"+n+"\xB6\xDF"}),e},"encodeEntities"),na=o(function(t){return t.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},"decodeEntities"),$h=o((t,e,{counter:r=0,prefix:n,suffix:i},a)=>a||`${n?`${n}_`:""}${t}_${e}_${r}${i?`_${i}`:""}`,"getEdgeId");o($n,"handleUndefinedAttr")});function Cl(t,e,r,n,i){if(!e[t].width)if(r)e[t].text=K9(e[t].text,i,n),e[t].textLines=e[t].text.split(Ze.lineBreakRegex).length,e[t].width=i,e[t].height=dw(e[t].text,n);else{let a=e[t].text.split(Ze.lineBreakRegex);e[t].textLines=a.length;let s=0;e[t].height=0,e[t].width=0;for(let l of a)e[t].width=Math.max(ra(l,n),e[t].width),s=dw(l,n),e[t].height=e[t].height+s}}function GX(t,e,r,n,i){let a=new yw(i);a.data.widthLimit=r.data.widthLimit/Math.min(J9,n.length);for(let[s,l]of n.entries()){let u=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=u,u=l.image.Y+l.image.height);let h=l.wrap&&Vt.wrap,f=pw(Vt);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Cl("label",l,h,f,a.data.widthLimit),l.label.Y=u+8,u=l.label.Y+l.label.height,l.type&&l.type.text!==""){l.type.text="["+l.type.text+"]";let g=pw(Vt);Cl("type",l,h,g,a.data.widthLimit),l.type.Y=u+5,u=l.type.Y+l.type.height}if(l.descr&&l.descr.text!==""){let g=pw(Vt);g.fontSize=g.fontSize-2,Cl("descr",l,h,g,a.data.widthLimit),l.descr.Y=u+20,u=l.descr.Y+l.descr.height}if(s==0||s%J9===0){let g=r.data.startx+Vt.diagramMarginX,y=r.data.stopy+Vt.diagramMarginY+u;a.setData(g,g,y,y)}else{let g=a.data.stopx!==a.data.startx?a.data.stopx+Vt.diagramMarginX:a.data.startx,y=a.data.starty;a.setData(g,g,y,y)}a.name=l.alias;let d=i.db.getC4ShapeArray(l.alias),p=i.db.getC4ShapeKeys(l.alias);p.length>0&&zX(a,t,d,p),e=l.alias;let m=i.db.getBoundarys(e);m.length>0&&GX(t,e,a,m,i),l.alias!=="global"&&$X(t,l,a),r.data.stopy=Math.max(a.data.stopy+Vt.c4ShapeMargin,r.data.stopy),r.data.stopx=Math.max(a.data.stopx+Vt.c4ShapeMargin,r.data.stopx),mw=Math.max(mw,r.data.stopx),gw=Math.max(gw,r.data.stopy)}}var mw,gw,FX,J9,Vt,yw,eD,a2,pw,LCe,$X,zX,_s,BX,RCe,NCe,MCe,tD,VX=N(()=>{"use strict";dr();Bq();vt();$C();gr();uA();zt();s0();ir();Ei();mw=0,gw=0,FX=4,J9=2;Ty.yy=Qy;Vt={},yw=class{static{o(this,"Bounds")}constructor(e){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,eD(e.db.getConfig())}setData(e,r,n,i){this.nextData.startx=this.data.startx=e,this.nextData.stopx=this.data.stopx=r,this.nextData.starty=this.data.starty=n,this.nextData.stopy=this.data.stopy=i}updateVal(e,r,n,i){e[r]===void 0?e[r]=n:e[r]=i(n,e[r])}insert(e){this.nextData.cnt=this.nextData.cnt+1;let r=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+e.margin:this.nextData.stopx+e.margin*2,n=r+e.width,i=this.nextData.starty+e.margin*2,a=i+e.height;(r>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>FX)&&(r=this.nextData.startx+e.margin+Vt.nextLinePaddingX,i=this.nextData.stopy+e.margin*2,this.nextData.stopx=n=r+e.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=i+e.height,this.nextData.cnt=1),e.x=r,e.y=i,this.updateVal(this.data,"startx",r,Math.min),this.updateVal(this.data,"starty",i,Math.min),this.updateVal(this.data,"stopx",n,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",r,Math.min),this.updateVal(this.nextData,"starty",i,Math.min),this.updateVal(this.nextData,"stopx",n,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(e){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},eD(e.db.getConfig())}bumpLastMargin(e){this.data.stopx+=e,this.data.stopy+=e}},eD=o(function(t){Gn(Vt,t),t.fontFamily&&(Vt.personFontFamily=Vt.systemFontFamily=Vt.messageFontFamily=t.fontFamily),t.fontSize&&(Vt.personFontSize=Vt.systemFontSize=Vt.messageFontSize=t.fontSize),t.fontWeight&&(Vt.personFontWeight=Vt.systemFontWeight=Vt.messageFontWeight=t.fontWeight)},"setConf"),a2=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"c4ShapeFont"),pw=o(t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight}),"boundaryFont"),LCe=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont");o(Cl,"calcC4ShapeTextWH");$X=o(function(t,e,r){e.x=r.data.startx,e.y=r.data.starty,e.width=r.data.stopx-r.data.startx,e.height=r.data.stopy-r.data.starty,e.label.y=Vt.c4ShapeMargin-35;let n=e.wrap&&Vt.wrap,i=pw(Vt);i.fontSize=i.fontSize+2,i.fontWeight="bold";let a=ra(e.label.text,i);Cl("label",e,n,i,a),kl.drawBoundary(t,e,Vt)},"drawBoundary"),zX=o(function(t,e,r,n){let i=0;for(let a of n){i=0;let s=r[a],l=a2(Vt,s.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,s.typeC4Shape.width=ra("\xAB"+s.typeC4Shape.text+"\xBB",l),s.typeC4Shape.height=l.fontSize+2,s.typeC4Shape.Y=Vt.c4ShapePadding,i=s.typeC4Shape.Y+s.typeC4Shape.height-4,s.image={width:0,height:0,Y:0},s.typeC4Shape.text){case"person":case"external_person":s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height;break}s.sprite&&(s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height);let u=s.wrap&&Vt.wrap,h=Vt.width-Vt.c4ShapePadding*2,f=a2(Vt,s.typeC4Shape.text);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Cl("label",s,u,f,h),s.label.Y=i+8,i=s.label.Y+s.label.height,s.type&&s.type.text!==""){s.type.text="["+s.type.text+"]";let m=a2(Vt,s.typeC4Shape.text);Cl("type",s,u,m,h),s.type.Y=i+5,i=s.type.Y+s.type.height}else if(s.techn&&s.techn.text!==""){s.techn.text="["+s.techn.text+"]";let m=a2(Vt,s.techn.text);Cl("techn",s,u,m,h),s.techn.Y=i+5,i=s.techn.Y+s.techn.height}let d=i,p=s.label.width;if(s.descr&&s.descr.text!==""){let m=a2(Vt,s.typeC4Shape.text);Cl("descr",s,u,m,h),s.descr.Y=i+20,i=s.descr.Y+s.descr.height,p=Math.max(s.label.width,s.descr.width),d=i-s.descr.textLines*5}p=p+Vt.c4ShapePadding,s.width=Math.max(s.width||Vt.width,p,Vt.width),s.height=Math.max(s.height||Vt.height,d,Vt.height),s.margin=s.margin||Vt.c4ShapeMargin,t.insert(s),kl.drawC4Shape(e,s,Vt)}t.bumpLastMargin(Vt.c4ShapeMargin)},"drawC4ShapeArray"),_s=class{static{o(this,"Point")}constructor(e,r){this.x=e,this.y=r}},BX=o(function(t,e){let r=t.x,n=t.y,i=e.x,a=e.y,s=r+t.width/2,l=n+t.height/2,u=Math.abs(r-i),h=Math.abs(n-a),f=h/u,d=t.height/t.width,p=null;return n==a&&r<i?p=new _s(r+t.width,l):n==a&&r>i?p=new _s(r,l):r==i&&n<a?p=new _s(s,n+t.height):r==i&&n>a&&(p=new _s(s,n)),r>i&&n<a?d>=f?p=new _s(r,l+f*t.width/2):p=new _s(s-u/h*t.height/2,n+t.height):r<i&&n<a?d>=f?p=new _s(r+t.width,l+f*t.width/2):p=new _s(s+u/h*t.height/2,n+t.height):r<i&&n>a?d>=f?p=new _s(r+t.width,l-f*t.width/2):p=new _s(s+t.height/2*u/h,n):r>i&&n>a&&(d>=f?p=new _s(r,l-t.width/2*f):p=new _s(s-t.height/2*u/h,n)),p},"getIntersectPoint"),RCe=o(function(t,e){let r={x:0,y:0};r.x=e.x+e.width/2,r.y=e.y+e.height/2;let n=BX(t,r);r.x=t.x+t.width/2,r.y=t.y+t.height/2;let i=BX(e,r);return{startPoint:n,endPoint:i}},"getIntersectPoints"),NCe=o(function(t,e,r,n){let i=0;for(let a of e){i=i+1;let s=a.wrap&&Vt.wrap,l=LCe(Vt);n.db.getC4Type()==="C4Dynamic"&&(a.label.text=i+": "+a.label.text);let h=ra(a.label.text,l);Cl("label",a,s,l,h),a.techn&&a.techn.text!==""&&(h=ra(a.techn.text,l),Cl("techn",a,s,l,h)),a.descr&&a.descr.text!==""&&(h=ra(a.descr.text,l),Cl("descr",a,s,l,h));let f=r(a.from),d=r(a.to),p=RCe(f,d);a.startPoint=p.startPoint,a.endPoint=p.endPoint}kl.drawRels(t,e,Vt)},"drawRels");o(GX,"drawInsideBoundary");MCe=o(function(t,e,r,n){Vt=me().c4;let i=me().securityLevel,a;i==="sandbox"&&(a=Ge("#i"+e));let s=i==="sandbox"?Ge(a.nodes()[0].contentDocument.body):Ge("body"),l=n.db;n.db.setWrap(Vt.wrap),FX=l.getC4ShapeInRow(),J9=l.getC4BoundaryInRow(),Y.debug(`C:${JSON.stringify(Vt,null,2)}`);let u=i==="sandbox"?s.select(`[id="${e}"]`):Ge(`[id="${e}"]`);kl.insertComputerIcon(u),kl.insertDatabaseIcon(u),kl.insertClockIcon(u);let h=new yw(n);h.setData(Vt.diagramMarginX,Vt.diagramMarginX,Vt.diagramMarginY,Vt.diagramMarginY),h.data.widthLimit=screen.availWidth,mw=Vt.diagramMarginX,gw=Vt.diagramMarginY;let f=n.db.getTitle(),d=n.db.getBoundarys("");GX(u,"",h,d,n),kl.insertArrowHead(u),kl.insertArrowEnd(u),kl.insertArrowCrossHead(u),kl.insertArrowFilledHead(u),NCe(u,n.db.getRels(),n.db.getC4Shape,n),h.data.stopx=mw,h.data.stopy=gw;let p=h.data,g=p.stopy-p.starty+2*Vt.diagramMarginY,v=p.stopx-p.startx+2*Vt.diagramMarginX;f&&u.append("text").text(f).attr("x",(p.stopx-p.startx)/2-4*Vt.diagramMarginX).attr("y",p.starty+Vt.diagramMarginY),vn(u,g,v,Vt.useMaxWidth);let x=f?60:0;u.attr("viewBox",p.startx-Vt.diagramMarginX+" -"+(Vt.diagramMarginY+x)+" "+v+" "+(g+x)),Y.debug("models:",p)},"draw"),tD={drawPersonOrSystemArray:zX,drawBoundary:$X,setConf:eD,draw:MCe}});var ICe,UX,HX=N(()=>{"use strict";ICe=o(t=>`.person {
354 + stroke: ${t.personBorder};
355 + fill: ${t.personBkg};
356 + }
357 +`,"getStyles"),UX=ICe});var WX={};hr(WX,{diagram:()=>OCe});var OCe,qX=N(()=>{"use strict";$C();uA();VX();HX();OCe={parser:JF,db:Qy,renderer:tD,styles:UX,init:o(({c4:t,wrap:e})=>{tD.setConf(t),Qy.setWrap(e)},"init")}});function uj(t){return typeof t>"u"||t===null}function $Ce(t){return typeof t=="object"&&t!==null}function zCe(t){return Array.isArray(t)?t:uj(t)?[]:[t]}function GCe(t,e){var r,n,i,a;if(e)for(a=Object.keys(e),r=0,n=a.length;r<n;r+=1)i=a[r],t[i]=e[i];return t}function VCe(t,e){var r="",n;for(n=0;n<e;n+=1)r+=t;return r}function UCe(t){return t===0&&Number.NEGATIVE_INFINITY===1/t}function hj(t,e){var r="",n=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(r+='in "'+t.mark.name+'" '),r+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!e&&t.mark.snippet&&(r+=`
358 +
359 +`+t.mark.snippet),n+" "+r):n}function o2(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=hj(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}function rD(t,e,r,n,i){var a="",s="",l=Math.floor(i/2)-1;return n-e>l&&(a=" ... ",e=n-l+a.length),r-n>l&&(s=" ...",r=n+l-s.length),{str:a+t.slice(e,r).replace(/\t/g,"\u2192")+s,pos:n-e+a.length}}function nD(t,e){return $i.repeat(" ",e-t.length)+t}function KCe(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var r=/\r?\n|\r|\0/g,n=[0],i=[],a,s=-1;a=r.exec(t.buffer);)i.push(a.index),n.push(a.index+a[0].length),t.position<=a.index&&s<0&&(s=n.length-2);s<0&&(s=n.length-1);var l="",u,h,f=Math.min(t.line+e.linesAfter,i.length).toString().length,d=e.maxLength-(e.indent+f+3);for(u=1;u<=e.linesBefore&&!(s-u<0);u++)h=rD(t.buffer,n[s-u],i[s-u],t.position-(n[s]-n[s-u]),d),l=$i.repeat(" ",e.indent)+nD((t.line-u+1).toString(),f)+" | "+h.str+`
360 +`+l;for(h=rD(t.buffer,n[s],i[s],t.position,d),l+=$i.repeat(" ",e.indent)+nD((t.line+1).toString(),f)+" | "+h.str+`
361 +`,l+=$i.repeat("-",e.indent+f+3+h.pos)+`^
362 +`,u=1;u<=e.linesAfter&&!(s+u>=i.length);u++)h=rD(t.buffer,n[s+u],i[s+u],t.position-(n[s]-n[s+u]),d),l+=$i.repeat(" ",e.indent)+nD((t.line+u+1).toString(),f)+" | "+h.str+`
363 +`;return l.replace(/\n$/,"")}function e7e(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(n){e[String(n)]=r})}),e}function t7e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(ZCe.indexOf(r)===-1)throw new Ds('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=e7e(e.styleAliases||null),JCe.indexOf(this.kind)===-1)throw new Ds('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}function jX(t,e){var r=[];return t[e].forEach(function(n){var i=r.length;r.forEach(function(a,s){a.tag===n.tag&&a.kind===n.kind&&a.multi===n.multi&&(i=s)}),r[i]=n}),r}function r7e(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},e,r;function n(i){i.multi?(t.multi[i.kind].push(i),t.multi.fallback.push(i)):t[i.kind][i.tag]=t.fallback[i.tag]=i}for(o(n,"collectType"),e=0,r=arguments.length;e<r;e+=1)arguments[e].forEach(n);return t}function aD(t){return this.extend(t)}function l7e(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function c7e(){return null}function u7e(t){return t===null}function f7e(t){if(t===null)return!1;var e=t.length;return e===4&&(t==="true"||t==="True"||t==="TRUE")||e===5&&(t==="false"||t==="False"||t==="FALSE")}function d7e(t){return t==="true"||t==="True"||t==="TRUE"}function p7e(t){return Object.prototype.toString.call(t)==="[object Boolean]"}function g7e(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function y7e(t){return 48<=t&&t<=55}function v7e(t){return 48<=t&&t<=57}function x7e(t){if(t===null)return!1;var e=t.length,r=0,n=!1,i;if(!e)return!1;if(i=t[r],(i==="-"||i==="+")&&(i=t[++r]),i==="0"){if(r+1===e)return!0;if(i=t[++r],i==="b"){for(r++;r<e;r++)if(i=t[r],i!=="_"){if(i!=="0"&&i!=="1")return!1;n=!0}return n&&i!=="_"}if(i==="x"){for(r++;r<e;r++)if(i=t[r],i!=="_"){if(!g7e(t.charCodeAt(r)))return!1;n=!0}return n&&i!=="_"}if(i==="o"){for(r++;r<e;r++)if(i=t[r],i!=="_"){if(!y7e(t.charCodeAt(r)))return!1;n=!0}return n&&i!=="_"}}if(i==="_")return!1;for(;r<e;r++)if(i=t[r],i!=="_"){if(!v7e(t.charCodeAt(r)))return!1;n=!0}return!(!n||i==="_")}function b7e(t){var e=t,r=1,n;if(e.indexOf("_")!==-1&&(e=e.replace(/_/g,"")),n=e[0],(n==="-"||n==="+")&&(n==="-"&&(r=-1),e=e.slice(1),n=e[0]),e==="0")return 0;if(n==="0"){if(e[1]==="b")return r*parseInt(e.slice(2),2);if(e[1]==="x")return r*parseInt(e.slice(2),16);if(e[1]==="o")return r*parseInt(e.slice(2),8)}return r*parseInt(e,10)}function w7e(t){return Object.prototype.toString.call(t)==="[object Number]"&&t%1===0&&!$i.isNegativeZero(t)}function E7e(t){return!(t===null||!k7e.test(t)||t[t.length-1]==="_")}function S7e(t){var e,r;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:r*parseFloat(e,10)}function A7e(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if($i.isNegativeZero(t))return"-0.0";return r=t.toString(10),C7e.test(r)?r.replace("e",".e"):r}function _7e(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||$i.isNegativeZero(t))}function R7e(t){return t===null?!1:dj.exec(t)!==null||pj.exec(t)!==null}function N7e(t){var e,r,n,i,a,s,l,u=0,h=null,f,d,p;if(e=dj.exec(t),e===null&&(e=pj.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],n=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(r,n,i));if(a=+e[4],s=+e[5],l=+e[6],e[7]){for(u=e[7].slice(0,3);u.length<3;)u+="0";u=+u}return e[9]&&(f=+e[10],d=+(e[11]||0),h=(f*60+d)*6e4,e[9]==="-"&&(h=-h)),p=new Date(Date.UTC(r,n,i,a,s,l,u)),h&&p.setTime(p.getTime()-h),p}function M7e(t){return t.toISOString()}function O7e(t){return t==="<<"||t===null}function B7e(t){if(t===null)return!1;var e,r,n=0,i=t.length,a=uD;for(r=0;r<i;r++)if(e=a.indexOf(t.charAt(r)),!(e>64)){if(e<0)return!1;n+=6}return n%8===0}function F7e(t){var e,r,n=t.replace(/[\r\n=]/g,""),i=n.length,a=uD,s=0,l=[];for(e=0;e<i;e++)e%4===0&&e&&(l.push(s>>16&255),l.push(s>>8&255),l.push(s&255)),s=s<<6|a.indexOf(n.charAt(e));return r=i%4*6,r===0?(l.push(s>>16&255),l.push(s>>8&255),l.push(s&255)):r===18?(l.push(s>>10&255),l.push(s>>2&255)):r===12&&l.push(s>>4&255),new Uint8Array(l)}function $7e(t){var e="",r=0,n,i,a=t.length,s=uD;for(n=0;n<a;n++)n%3===0&&n&&(e+=s[r>>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]),r=(r<<8)+t[n];return i=a%3,i===0?(e+=s[r>>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]):i===2?(e+=s[r>>10&63],e+=s[r>>4&63],e+=s[r<<2&63],e+=s[64]):i===1&&(e+=s[r>>2&63],e+=s[r<<4&63],e+=s[64],e+=s[64]),e}function z7e(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}function H7e(t){if(t===null)return!0;var e=[],r,n,i,a,s,l=t;for(r=0,n=l.length;r<n;r+=1){if(i=l[r],s=!1,U7e.call(i)!=="[object Object]")return!1;for(a in i)if(V7e.call(i,a))if(!s)s=!0;else return!1;if(!s)return!1;if(e.indexOf(a)===-1)e.push(a);else return!1}return!0}function W7e(t){return t!==null?t:[]}function X7e(t){if(t===null)return!0;var e,r,n,i,a,s=t;for(a=new Array(s.length),e=0,r=s.length;e<r;e+=1){if(n=s[e],Y7e.call(n)!=="[object Object]"||(i=Object.keys(n),i.length!==1))return!1;a[e]=[i[0],n[i[0]]]}return!0}function j7e(t){if(t===null)return[];var e,r,n,i,a,s=t;for(a=new Array(s.length),e=0,r=s.length;e<r;e+=1)n=s[e],i=Object.keys(n),a[e]=[i[0],n[i[0]]];return a}function Z7e(t){if(t===null)return!0;var e,r=t;for(e in r)if(Q7e.call(r,e)&&r[e]!==null)return!1;return!0}function J7e(t){return t!==null?t:{}}function QX(t){return Object.prototype.toString.call(t)}function dc(t){return t===10||t===13}function Nd(t){return t===9||t===32}function Ls(t){return t===9||t===32||t===10||t===13}function am(t){return t===44||t===91||t===93||t===123||t===125}function aAe(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function sAe(t){return t===120?2:t===117?4:t===85?8:0}function oAe(t){return 48<=t&&t<=57?t-48:-1}function ZX(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?`
364 +`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"\x85":t===95?"\xA0":t===76?"\u2028":t===80?"\u2029":""}function lAe(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}function cAe(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||mj,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function Tj(t,e){var r={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return r.snippet=QCe(r),new Ds(e,r)}function Qt(t,e){throw Tj(t,e)}function bw(t,e){t.onWarning&&t.onWarning.call(null,Tj(t,e))}function zh(t,e,r,n){var i,a,s,l;if(e<r){if(l=t.input.slice(e,r),n)for(i=0,a=l.length;i<a;i+=1)s=l.charCodeAt(i),s===9||32<=s&&s<=1114111||Qt(t,"expected valid JSON character");else rAe.test(l)&&Qt(t,"the stream contains non-printable characters");t.result+=l}}function ej(t,e,r,n){var i,a,s,l;for($i.isObject(r)||Qt(t,"cannot merge mappings; the provided source object is unacceptable"),i=Object.keys(r),s=0,l=i.length;s<l;s+=1)a=i[s],Gh.call(e,a)||(e[a]=r[a],n[a]=!0)}function sm(t,e,r,n,i,a,s,l,u){var h,f;if(Array.isArray(i))for(i=Array.prototype.slice.call(i),h=0,f=i.length;h<f;h+=1)Array.isArray(i[h])&&Qt(t,"nested arrays are not supported inside keys"),typeof i=="object"&&QX(i[h])==="[object Object]"&&(i[h]="[object Object]");if(typeof i=="object"&&QX(i)==="[object Object]"&&(i="[object Object]"),i=String(i),e===null&&(e={}),n==="tag:yaml.org,2002:merge")if(Array.isArray(a))for(h=0,f=a.length;h<f;h+=1)ej(t,e,a[h],r);else ej(t,e,a,r);else!t.json&&!Gh.call(r,i)&&Gh.call(e,i)&&(t.line=s||t.line,t.lineStart=l||t.lineStart,t.position=u||t.position,Qt(t,"duplicated mapping key")),i==="__proto__"?Object.defineProperty(e,i,{configurable:!0,enumerable:!0,writable:!0,value:a}):e[i]=a,delete r[i];return e}function hD(t){var e;e=t.input.charCodeAt(t.position),e===10?t.position++:e===13?(t.position++,t.input.charCodeAt(t.position)===10&&t.position++):Qt(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function Ci(t,e,r){for(var n=0,i=t.input.charCodeAt(t.position);i!==0;){for(;Nd(i);)i===9&&t.firstTabInLine===-1&&(t.firstTabInLine=t.position),i=t.input.charCodeAt(++t.position);if(e&&i===35)do i=t.input.charCodeAt(++t.position);while(i!==10&&i!==13&&i!==0);if(dc(i))for(hD(t),i=t.input.charCodeAt(t.position),n++,t.lineIndent=0;i===32;)t.lineIndent++,i=t.input.charCodeAt(++t.position);else break}return r!==-1&&n!==0&&t.lineIndent<r&&bw(t,"deficient indentation"),n}function kw(t){var e=t.position,r;return r=t.input.charCodeAt(e),!!((r===45||r===46)&&r===t.input.charCodeAt(e+1)&&r===t.input.charCodeAt(e+2)&&(e+=3,r=t.input.charCodeAt(e),r===0||Ls(r)))}function fD(t,e){e===1?t.result+=" ":e>1&&(t.result+=$i.repeat(`
365 +`,e-1))}function uAe(t,e,r){var n,i,a,s,l,u,h,f,d=t.kind,p=t.result,m;if(m=t.input.charCodeAt(t.position),Ls(m)||am(m)||m===35||m===38||m===42||m===33||m===124||m===62||m===39||m===34||m===37||m===64||m===96||(m===63||m===45)&&(i=t.input.charCodeAt(t.position+1),Ls(i)||r&&am(i)))return!1;for(t.kind="scalar",t.result="",a=s=t.position,l=!1;m!==0;){if(m===58){if(i=t.input.charCodeAt(t.position+1),Ls(i)||r&&am(i))break}else if(m===35){if(n=t.input.charCodeAt(t.position-1),Ls(n))break}else{if(t.position===t.lineStart&&kw(t)||r&&am(m))break;if(dc(m))if(u=t.line,h=t.lineStart,f=t.lineIndent,Ci(t,!1,-1),t.lineIndent>=e){l=!0,m=t.input.charCodeAt(t.position);continue}else{t.position=s,t.line=u,t.lineStart=h,t.lineIndent=f;break}}l&&(zh(t,a,s,!1),fD(t,t.line-u),a=s=t.position,l=!1),Nd(m)||(s=t.position+1),m=t.input.charCodeAt(++t.position)}return zh(t,a,s,!1),t.result?!0:(t.kind=d,t.result=p,!1)}function hAe(t,e){var r,n,i;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,n=i=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(zh(t,n,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)n=t.position,t.position++,i=t.position;else return!0;else dc(r)?(zh(t,n,i,!0),fD(t,Ci(t,!1,e)),n=i=t.position):t.position===t.lineStart&&kw(t)?Qt(t,"unexpected end of the document within a single quoted scalar"):(t.position++,i=t.position);Qt(t,"unexpected end of the stream within a single quoted scalar")}function fAe(t,e){var r,n,i,a,s,l;if(l=t.input.charCodeAt(t.position),l!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;(l=t.input.charCodeAt(t.position))!==0;){if(l===34)return zh(t,r,t.position,!0),t.position++,!0;if(l===92){if(zh(t,r,t.position,!0),l=t.input.charCodeAt(++t.position),dc(l))Ci(t,!1,e);else if(l<256&&bj[l])t.result+=wj[l],t.position++;else if((s=sAe(l))>0){for(i=s,a=0;i>0;i--)l=t.input.charCodeAt(++t.position),(s=aAe(l))>=0?a=(a<<4)+s:Qt(t,"expected hexadecimal character");t.result+=lAe(a),t.position++}else Qt(t,"unknown escape sequence");r=n=t.position}else dc(l)?(zh(t,r,n,!0),fD(t,Ci(t,!1,e)),r=n=t.position):t.position===t.lineStart&&kw(t)?Qt(t,"unexpected end of the document within a double quoted scalar"):(t.position++,n=t.position)}Qt(t,"unexpected end of the stream within a double quoted scalar")}function dAe(t,e){var r=!0,n,i,a,s=t.tag,l,u=t.anchor,h,f,d,p,m,g=Object.create(null),y,v,x,b;if(b=t.input.charCodeAt(t.position),b===91)f=93,m=!1,l=[];else if(b===123)f=125,m=!0,l={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=l),b=t.input.charCodeAt(++t.position);b!==0;){if(Ci(t,!0,e),b=t.input.charCodeAt(t.position),b===f)return t.position++,t.tag=s,t.anchor=u,t.kind=m?"mapping":"sequence",t.result=l,!0;r?b===44&&Qt(t,"expected the node content, but found ','"):Qt(t,"missed comma between flow collection entries"),v=y=x=null,d=p=!1,b===63&&(h=t.input.charCodeAt(t.position+1),Ls(h)&&(d=p=!0,t.position++,Ci(t,!0,e))),n=t.line,i=t.lineStart,a=t.position,om(t,e,vw,!1,!0),v=t.tag,y=t.result,Ci(t,!0,e),b=t.input.charCodeAt(t.position),(p||t.line===n)&&b===58&&(d=!0,b=t.input.charCodeAt(++t.position),Ci(t,!0,e),om(t,e,vw,!1,!0),x=t.result),m?sm(t,l,g,v,y,x,n,i,a):d?l.push(sm(t,null,g,v,y,x,n,i,a)):l.push(y),Ci(t,!0,e),b=t.input.charCodeAt(t.position),b===44?(r=!0,b=t.input.charCodeAt(++t.position)):r=!1}Qt(t,"unexpected end of the stream within a flow collection")}function pAe(t,e){var r,n,i=iD,a=!1,s=!1,l=e,u=0,h=!1,f,d;if(d=t.input.charCodeAt(t.position),d===124)n=!1;else if(d===62)n=!0;else return!1;for(t.kind="scalar",t.result="";d!==0;)if(d=t.input.charCodeAt(++t.position),d===43||d===45)iD===i?i=d===43?KX:tAe:Qt(t,"repeat of a chomping mode identifier");else if((f=oAe(d))>=0)f===0?Qt(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?Qt(t,"repeat of an indentation width identifier"):(l=e+f-1,s=!0);else break;if(Nd(d)){do d=t.input.charCodeAt(++t.position);while(Nd(d));if(d===35)do d=t.input.charCodeAt(++t.position);while(!dc(d)&&d!==0)}for(;d!==0;){for(hD(t),t.lineIndent=0,d=t.input.charCodeAt(t.position);(!s||t.lineIndent<l)&&d===32;)t.lineIndent++,d=t.input.charCodeAt(++t.position);if(!s&&t.lineIndent>l&&(l=t.lineIndent),dc(d)){u++;continue}if(t.lineIndent<l){i===KX?t.result+=$i.repeat(`
366 +`,a?1+u:u):i===iD&&a&&(t.result+=`
367 +`);break}for(n?Nd(d)?(h=!0,t.result+=$i.repeat(`
368 +`,a?1+u:u)):h?(h=!1,t.result+=$i.repeat(`
369 +`,u+1)):u===0?a&&(t.result+=" "):t.result+=$i.repeat(`
370 +`,u):t.result+=$i.repeat(`
371 +`,a?1+u:u),a=!0,s=!0,u=0,r=t.position;!dc(d)&&d!==0;)d=t.input.charCodeAt(++t.position);zh(t,r,t.position,!1)}return!0}function tj(t,e){var r,n=t.tag,i=t.anchor,a=[],s,l=!1,u;if(t.firstTabInLine!==-1)return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=a),u=t.input.charCodeAt(t.position);u!==0&&(t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,Qt(t,"tab characters must not be used in indentation")),!(u!==45||(s=t.input.charCodeAt(t.position+1),!Ls(s))));){if(l=!0,t.position++,Ci(t,!0,-1)&&t.lineIndent<=e){a.push(null),u=t.input.charCodeAt(t.position);continue}if(r=t.line,om(t,e,yj,!1,!0),a.push(t.result),Ci(t,!0,-1),u=t.input.charCodeAt(t.position),(t.line===r||t.lineIndent>e)&&u!==0)Qt(t,"bad indentation of a sequence entry");else if(t.lineIndent<e)break}return l?(t.tag=n,t.anchor=i,t.kind="sequence",t.result=a,!0):!1}function mAe(t,e,r){var n,i,a,s,l,u,h=t.tag,f=t.anchor,d={},p=Object.create(null),m=null,g=null,y=null,v=!1,x=!1,b;if(t.firstTabInLine!==-1)return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=d),b=t.input.charCodeAt(t.position);b!==0;){if(!v&&t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,Qt(t,"tab characters must not be used in indentation")),n=t.input.charCodeAt(t.position+1),a=t.line,(b===63||b===58)&&Ls(n))b===63?(v&&(sm(t,d,p,m,g,null,s,l,u),m=g=y=null),x=!0,v=!0,i=!0):v?(v=!1,i=!0):Qt(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,b=n;else{if(s=t.line,l=t.lineStart,u=t.position,!om(t,r,gj,!1,!0))break;if(t.line===a){for(b=t.input.charCodeAt(t.position);Nd(b);)b=t.input.charCodeAt(++t.position);if(b===58)b=t.input.charCodeAt(++t.position),Ls(b)||Qt(t,"a whitespace character is expected after the key-value separator within a block mapping"),v&&(sm(t,d,p,m,g,null,s,l,u),m=g=y=null),x=!0,v=!1,i=!1,m=t.tag,g=t.result;else if(x)Qt(t,"can not read an implicit mapping pair; a colon is missed");else return t.tag=h,t.anchor=f,!0}else if(x)Qt(t,"can not read a block mapping entry; a multiline key may not be an implicit key");else return t.tag=h,t.anchor=f,!0}if((t.line===a||t.lineIndent>e)&&(v&&(s=t.line,l=t.lineStart,u=t.position),om(t,e,xw,!0,i)&&(v?g=t.result:y=t.result),v||(sm(t,d,p,m,g,y,s,l,u),m=g=y=null),Ci(t,!0,-1),b=t.input.charCodeAt(t.position)),(t.line===a||t.lineIndent>e)&&b!==0)Qt(t,"bad indentation of a mapping entry");else if(t.lineIndent<e)break}return v&&sm(t,d,p,m,g,null,s,l,u),x&&(t.tag=h,t.anchor=f,t.kind="mapping",t.result=d),x}function gAe(t){var e,r=!1,n=!1,i,a,s;if(s=t.input.charCodeAt(t.position),s!==33)return!1;if(t.tag!==null&&Qt(t,"duplication of a tag property"),s=t.input.charCodeAt(++t.position),s===60?(r=!0,s=t.input.charCodeAt(++t.position)):s===33?(n=!0,i="!!",s=t.input.charCodeAt(++t.position)):i="!",e=t.position,r){do s=t.input.charCodeAt(++t.position);while(s!==0&&s!==62);t.position<t.length?(a=t.input.slice(e,t.position),s=t.input.charCodeAt(++t.position)):Qt(t,"unexpected end of the stream within a verbatim tag")}else{for(;s!==0&&!Ls(s);)s===33&&(n?Qt(t,"tag suffix cannot contain exclamation marks"):(i=t.input.slice(e-1,t.position+1),vj.test(i)||Qt(t,"named tag handle cannot contain such characters"),n=!0,e=t.position+1)),s=t.input.charCodeAt(++t.position);a=t.input.slice(e,t.position),iAe.test(a)&&Qt(t,"tag suffix cannot contain flow indicator characters")}a&&!xj.test(a)&&Qt(t,"tag name cannot contain such characters: "+a);try{a=decodeURIComponent(a)}catch{Qt(t,"tag name is malformed: "+a)}return r?t.tag=a:Gh.call(t.tagMap,i)?t.tag=t.tagMap[i]+a:i==="!"?t.tag="!"+a:i==="!!"?t.tag="tag:yaml.org,2002:"+a:Qt(t,'undeclared tag handle "'+i+'"'),!0}function yAe(t){var e,r;if(r=t.input.charCodeAt(t.position),r!==38)return!1;for(t.anchor!==null&&Qt(t,"duplication of an anchor property"),r=t.input.charCodeAt(++t.position),e=t.position;r!==0&&!Ls(r)&&!am(r);)r=t.input.charCodeAt(++t.position);return t.position===e&&Qt(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(e,t.position),!0}function vAe(t){var e,r,n;if(n=t.input.charCodeAt(t.position),n!==42)return!1;for(n=t.input.charCodeAt(++t.position),e=t.position;n!==0&&!Ls(n)&&!am(n);)n=t.input.charCodeAt(++t.position);return t.position===e&&Qt(t,"name of an alias node must contain at least one character"),r=t.input.slice(e,t.position),Gh.call(t.anchorMap,r)||Qt(t,'unidentified alias "'+r+'"'),t.result=t.anchorMap[r],Ci(t,!0,-1),!0}function om(t,e,r,n,i){var a,s,l,u=1,h=!1,f=!1,d,p,m,g,y,v;if(t.listener!==null&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,a=s=l=xw===r||yj===r,n&&Ci(t,!0,-1)&&(h=!0,t.lineIndent>e?u=1:t.lineIndent===e?u=0:t.lineIndent<e&&(u=-1)),u===1)for(;gAe(t)||yAe(t);)Ci(t,!0,-1)?(h=!0,l=a,t.lineIndent>e?u=1:t.lineIndent===e?u=0:t.lineIndent<e&&(u=-1)):l=!1;if(l&&(l=h||i),(u===1||xw===r)&&(vw===r||gj===r?y=e:y=e+1,v=t.position-t.lineStart,u===1?l&&(tj(t,v)||mAe(t,v,y))||dAe(t,y)?f=!0:(s&&pAe(t,y)||hAe(t,y)||fAe(t,y)?f=!0:vAe(t)?(f=!0,(t.tag!==null||t.anchor!==null)&&Qt(t,"alias node should not have any properties")):uAe(t,y,vw===r)&&(f=!0,t.tag===null&&(t.tag="?")),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):u===0&&(f=l&&tj(t,v))),t.tag===null)t.anchor!==null&&(t.anchorMap[t.anchor]=t.result);else if(t.tag==="?"){for(t.result!==null&&t.kind!=="scalar"&&Qt(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),d=0,p=t.implicitTypes.length;d<p;d+=1)if(g=t.implicitTypes[d],g.resolve(t.result)){t.result=g.construct(t.result),t.tag=g.tag,t.anchor!==null&&(t.anchorMap[t.anchor]=t.result);break}}else if(t.tag!=="!"){if(Gh.call(t.typeMap[t.kind||"fallback"],t.tag))g=t.typeMap[t.kind||"fallback"][t.tag];else for(g=null,m=t.typeMap.multi[t.kind||"fallback"],d=0,p=m.length;d<p;d+=1)if(t.tag.slice(0,m[d].tag.length)===m[d].tag){g=m[d];break}g||Qt(t,"unknown tag !<"+t.tag+">"),t.result!==null&&g.kind!==t.kind&&Qt(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+g.kind+'", not "'+t.kind+'"'),g.resolve(t.result,t.tag)?(t.result=g.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Qt(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||f}function xAe(t){var e=t.position,r,n,i,a=!1,s;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(s=t.input.charCodeAt(t.position))!==0&&(Ci(t,!0,-1),s=t.input.charCodeAt(t.position),!(t.lineIndent>0||s!==37));){for(a=!0,s=t.input.charCodeAt(++t.position),r=t.position;s!==0&&!Ls(s);)s=t.input.charCodeAt(++t.position);for(n=t.input.slice(r,t.position),i=[],n.length<1&&Qt(t,"directive name must not be less than one character in length");s!==0;){for(;Nd(s);)s=t.input.charCodeAt(++t.position);if(s===35){do s=t.input.charCodeAt(++t.position);while(s!==0&&!dc(s));break}if(dc(s))break;for(r=t.position;s!==0&&!Ls(s);)s=t.input.charCodeAt(++t.position);i.push(t.input.slice(r,t.position))}s!==0&&hD(t),Gh.call(JX,n)?JX[n](t,n,i):bw(t,'unknown document directive "'+n+'"')}if(Ci(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Ci(t,!0,-1)):a&&Qt(t,"directives end mark is expected"),om(t,t.lineIndent-1,xw,!1,!0),Ci(t,!0,-1),t.checkLineBreaks&&nAe.test(t.input.slice(e,t.position))&&bw(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&kw(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Ci(t,!0,-1));return}if(t.position<t.length-1)Qt(t,"end of the stream or a document separator is expected");else return}function kj(t,e){t=String(t),e=e||{},t.length!==0&&(t.charCodeAt(t.length-1)!==10&&t.charCodeAt(t.length-1)!==13&&(t+=`
372 +`),t.charCodeAt(0)===65279&&(t=t.slice(1)));var r=new cAe(t,e),n=t.indexOf("\0");for(n!==-1&&(r.position=n,Qt(r,"null byte is not allowed in input")),r.input+="\0";r.input.charCodeAt(r.position)===32;)r.lineIndent+=1,r.position+=1;for(;r.position<r.length-1;)xAe(r);return r.documents}function bAe(t,e,r){e!==null&&typeof e=="object"&&typeof r>"u"&&(r=e,e=null);var n=kj(t,r);if(typeof e!="function")return n;for(var i=0,a=n.length;i<a;i+=1)e(n[i])}function wAe(t,e){var r=kj(t,e);if(r.length!==0){if(r.length===1)return r[0];throw new Ds("expected a single document in the stream, but found more")}}function VAe(t,e){var r,n,i,a,s,l,u;if(e===null)return{};for(r={},n=Object.keys(e),i=0,a=n.length;i<a;i+=1)s=n[i],l=String(e[s]),s.slice(0,2)==="!!"&&(s="tag:yaml.org,2002:"+s.slice(2)),u=t.compiledTypeMap.fallback[s],u&&Cj.call(u.styleAliases,l)&&(l=u.styleAliases[l]),r[s]=l;return r}function UAe(t){var e,r,n;if(e=t.toString(16).toUpperCase(),t<=255)r="x",n=2;else if(t<=65535)r="u",n=4;else if(t<=4294967295)r="U",n=8;else throw new Ds("code point within a string may not be greater than 0xFFFFFFFF");return"\\"+r+$i.repeat("0",n-e.length)+e}function WAe(t){this.schema=t.schema||mj,this.indent=Math.max(1,t.indent||2),this.noArrayIndent=t.noArrayIndent||!1,this.skipInvalid=t.skipInvalid||!1,this.flowLevel=$i.isNothing(t.flowLevel)?-1:t.flowLevel,this.styleMap=VAe(this.schema,t.styles||null),this.sortKeys=t.sortKeys||!1,this.lineWidth=t.lineWidth||80,this.noRefs=t.noRefs||!1,this.noCompatMode=t.noCompatMode||!1,this.condenseFlow=t.condenseFlow||!1,this.quotingType=t.quotingType==='"'?c2:HAe,this.forceQuotes=t.forceQuotes||!1,this.replacer=typeof t.replacer=="function"?t.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function rj(t,e){for(var r=$i.repeat(" ",e),n=0,i=-1,a="",s,l=t.length;n<l;)i=t.indexOf(`
373 +`,n),i===-1?(s=t.slice(n),n=l):(s=t.slice(n,i+1),n=i+1),s.length&&s!==`
374 +`&&(a+=r),a+=s;return a}function oD(t,e){return`
375 +`+$i.repeat(" ",t.indent*e)}function qAe(t,e){var r,n,i;for(r=0,n=t.implicitTypes.length;r<n;r+=1)if(i=t.implicitTypes[r],i.resolve(e))return!0;return!1}function Tw(t){return t===CAe||t===EAe}function u2(t){return 32<=t&&t<=126||161<=t&&t<=55295&&t!==8232&&t!==8233||57344<=t&&t<=65533&&t!==dD||65536<=t&&t<=1114111}function nj(t){return u2(t)&&t!==dD&&t!==SAe&&t!==l2}function ij(t,e,r){var n=nj(t),i=n&&!Tw(t);return(r?n:n&&t!==Aj&&t!==_j&&t!==Dj&&t!==Lj&&t!==Rj)&&t!==sD&&!(e===ww&&!i)||nj(e)&&!Tw(e)&&t===sD||e===ww&&i}function YAe(t){return u2(t)&&t!==dD&&!Tw(t)&&t!==MAe&&t!==PAe&&t!==ww&&t!==Aj&&t!==_j&&t!==Dj&&t!==Lj&&t!==Rj&&t!==sD&&t!==LAe&&t!==NAe&&t!==AAe&&t!==$Ae&&t!==IAe&&t!==OAe&&t!==RAe&&t!==_Ae&&t!==DAe&&t!==BAe&&t!==FAe}function XAe(t){return!Tw(t)&&t!==ww}function s2(t,e){var r=t.charCodeAt(e),n;return r>=55296&&r<=56319&&e+1<t.length&&(n=t.charCodeAt(e+1),n>=56320&&n<=57343)?(r-55296)*1024+n-56320+65536:r}function Nj(t){var e=/^\n* /;return e.test(t)}function jAe(t,e,r,n,i,a,s,l){var u,h=0,f=null,d=!1,p=!1,m=n!==-1,g=-1,y=YAe(s2(t,0))&&XAe(s2(t,t.length-1));if(e||s)for(u=0;u<t.length;h>=65536?u+=2:u++){if(h=s2(t,u),!u2(h))return im;y=y&&ij(h,f,l),f=h}else{for(u=0;u<t.length;h>=65536?u+=2:u++){if(h=s2(t,u),h===l2)d=!0,m&&(p=p||u-g-1>n&&t[g+1]!==" ",g=u);else if(!u2(h))return im;y=y&&ij(h,f,l),f=h}p=p||m&&u-g-1>n&&t[g+1]!==" "}return!d&&!p?y&&!s&&!i(t)?Mj:a===c2?im:lD:r>9&&Nj(t)?im:s?a===c2?im:lD:p?Oj:Ij}function KAe(t,e,r,n,i){t.dump=function(){if(e.length===0)return t.quotingType===c2?'""':"''";if(!t.noCompatMode&&(zAe.indexOf(e)!==-1||GAe.test(e)))return t.quotingType===c2?'"'+e+'"':"'"+e+"'";var a=t.indent*Math.max(1,r),s=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),l=n||t.flowLevel>-1&&r>=t.flowLevel;function u(h){return qAe(t,h)}switch(o(u,"testAmbiguity"),jAe(e,l,t.indent,s,u,t.quotingType,t.forceQuotes&&!n,i)){case Mj:return e;case lD:return"'"+e.replace(/'/g,"''")+"'";case Ij:return"|"+aj(e,t.indent)+sj(rj(e,a));case Oj:return">"+aj(e,t.indent)+sj(rj(QAe(e,s),a));case im:return'"'+ZAe(e)+'"';default:throw new Ds("impossible error: invalid scalar style")}}()}function aj(t,e){var r=Nj(t)?String(e):"",n=t[t.length-1]===`
376 +`,i=n&&(t[t.length-2]===`
377 +`||t===`
378 +`),a=i?"+":n?"":"-";return r+a+`
379 +`}function sj(t){return t[t.length-1]===`
380 +`?t.slice(0,-1):t}function QAe(t,e){for(var r=/(\n+)([^\n]*)/g,n=function(){var h=t.indexOf(`
381 +`);return h=h!==-1?h:t.length,r.lastIndex=h,oj(t.slice(0,h),e)}(),i=t[0]===`
382 +`||t[0]===" ",a,s;s=r.exec(t);){var l=s[1],u=s[2];a=u[0]===" ",n+=l+(!i&&!a&&u!==""?`
383 +`:"")+oj(u,e),i=a}return n}function oj(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,n,i=0,a,s=0,l=0,u="";n=r.exec(t);)l=n.index,l-i>e&&(a=s>i?s:l,u+=`
384 +`+t.slice(i,a),i=a+1),s=l;return u+=`
385 +`,t.length-i>e&&s>i?u+=t.slice(i,s)+`
386 +`+t.slice(s+1):u+=t.slice(i),u.slice(1)}function ZAe(t){for(var e="",r=0,n,i=0;i<t.length;r>=65536?i+=2:i++)r=s2(t,i),n=Da[r],!n&&u2(r)?(e+=t[i],r>=65536&&(e+=t[i+1])):e+=n||UAe(r);return e}function JAe(t,e,r){var n="",i=t.tag,a,s,l;for(a=0,s=r.length;a<s;a+=1)l=r[a],t.replacer&&(l=t.replacer.call(r,String(a),l)),(Au(t,e,l,!1,!1)||typeof l>"u"&&Au(t,e,null,!1,!1))&&(n!==""&&(n+=","+(t.condenseFlow?"":" ")),n+=t.dump);t.tag=i,t.dump="["+n+"]"}function lj(t,e,r,n){var i="",a=t.tag,s,l,u;for(s=0,l=r.length;s<l;s+=1)u=r[s],t.replacer&&(u=t.replacer.call(r,String(s),u)),(Au(t,e+1,u,!0,!0,!1,!0)||typeof u>"u"&&Au(t,e+1,null,!0,!0,!1,!0))&&((!n||i!=="")&&(i+=oD(t,e)),t.dump&&l2===t.dump.charCodeAt(0)?i+="-":i+="- ",i+=t.dump);t.tag=a,t.dump=i||"[]"}function e8e(t,e,r){var n="",i=t.tag,a=Object.keys(r),s,l,u,h,f;for(s=0,l=a.length;s<l;s+=1)f="",n!==""&&(f+=", "),t.condenseFlow&&(f+='"'),u=a[s],h=r[u],t.replacer&&(h=t.replacer.call(r,u,h)),Au(t,e,u,!1,!1)&&(t.dump.length>1024&&(f+="? "),f+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Au(t,e,h,!1,!1)&&(f+=t.dump,n+=f));t.tag=i,t.dump="{"+n+"}"}function t8e(t,e,r,n){var i="",a=t.tag,s=Object.keys(r),l,u,h,f,d,p;if(t.sortKeys===!0)s.sort();else if(typeof t.sortKeys=="function")s.sort(t.sortKeys);else if(t.sortKeys)throw new Ds("sortKeys must be a boolean or a function");for(l=0,u=s.length;l<u;l+=1)p="",(!n||i!=="")&&(p+=oD(t,e)),h=s[l],f=r[h],t.replacer&&(f=t.replacer.call(r,h,f)),Au(t,e+1,h,!0,!0,!0)&&(d=t.tag!==null&&t.tag!=="?"||t.dump&&t.dump.length>1024,d&&(t.dump&&l2===t.dump.charCodeAt(0)?p+="?":p+="? "),p+=t.dump,d&&(p+=oD(t,e)),Au(t,e+1,f,!0,d)&&(t.dump&&l2===t.dump.charCodeAt(0)?p+=":":p+=": ",p+=t.dump,i+=p));t.tag=a,t.dump=i||"{}"}function cj(t,e,r){var n,i,a,s,l,u;for(i=r?t.explicitTypes:t.implicitTypes,a=0,s=i.length;a<s;a+=1)if(l=i[a],(l.instanceOf||l.predicate)&&(!l.instanceOf||typeof e=="object"&&e instanceof l.instanceOf)&&(!l.predicate||l.predicate(e))){if(r?l.multi&&l.representName?t.tag=l.representName(e):t.tag=l.tag:t.tag="?",l.represent){if(u=t.styleMap[l.tag]||l.defaultStyle,Sj.call(l.represent)==="[object Function]")n=l.represent(e,u);else if(Cj.call(l.represent,u))n=l.represent[u](e,u);else throw new Ds("!<"+l.tag+'> tag resolver accepts not "'+u+'" style');t.dump=n}return!0}return!1}function Au(t,e,r,n,i,a,s){t.tag=null,t.dump=r,cj(t,r,!1)||cj(t,r,!0);var l=Sj.call(t.dump),u=n,h;n&&(n=t.flowLevel<0||t.flowLevel>e);var f=l==="[object Object]"||l==="[object Array]",d,p;if(f&&(d=t.duplicates.indexOf(r),p=d!==-1),(t.tag!==null&&t.tag!=="?"||p||t.indent!==2&&e>0)&&(i=!1),p&&t.usedDuplicates[d])t.dump="*ref_"+d;else{if(f&&p&&!t.usedDuplicates[d]&&(t.usedDuplicates[d]=!0),l==="[object Object]")n&&Object.keys(t.dump).length!==0?(t8e(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(e8e(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object Array]")n&&t.dump.length!==0?(t.noArrayIndent&&!s&&e>0?lj(t,e-1,t.dump,i):lj(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(JAe(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object String]")t.tag!=="?"&&KAe(t,t.dump,e,a,u);else{if(l==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new Ds("unacceptable kind of an object to dump "+l)}t.tag!==null&&t.tag!=="?"&&(h=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?h="!"+h:h.slice(0,18)==="tag:yaml.org,2002:"?h="!!"+h.slice(18):h="!<"+h+">",t.dump=h+" "+t.dump)}return!0}function r8e(t,e){var r=[],n=[],i,a;for(cD(t,r,n),i=0,a=n.length;i<a;i+=1)e.duplicates.push(r[n[i]]);e.usedDuplicates=new Array(a)}function cD(t,e,r){var n,i,a;if(t!==null&&typeof t=="object")if(i=e.indexOf(t),i!==-1)r.indexOf(i)===-1&&r.push(i);else if(e.push(t),Array.isArray(t))for(i=0,a=t.length;i<a;i+=1)cD(t[i],e,r);else for(n=Object.keys(t),i=0,a=n.length;i<a;i+=1)cD(t[n[i]],e,r)}function n8e(t,e){e=e||{};var r=new WAe(e);r.noRefs||r8e(t,r);var n=t;return r.replacer&&(n=r.replacer.call({"":n},"",n)),Au(r,0,n,!0,!0)?r.dump+`
387 +`:""}function pD(t,e){return function(){throw new Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+e+" instead, which is now safe by default.")}}var HCe,WCe,qCe,YCe,XCe,jCe,$i,Ds,QCe,ZCe,JCe,_a,n7e,i7e,a7e,s7e,o7e,h7e,m7e,T7e,k7e,C7e,D7e,fj,L7e,dj,pj,I7e,P7e,uD,G7e,V7e,U7e,q7e,Y7e,K7e,Q7e,eAe,mj,Gh,vw,gj,yj,xw,iD,tAe,KX,rAe,nAe,iAe,vj,xj,bj,wj,Rd,JX,TAe,kAe,Ej,Sj,Cj,dD,EAe,l2,SAe,CAe,AAe,_Ae,sD,DAe,LAe,RAe,NAe,Aj,MAe,ww,IAe,OAe,PAe,BAe,_j,Dj,FAe,Lj,$Ae,Rj,Da,zAe,GAe,HAe,c2,Mj,lD,Ij,Oj,im,i8e,a8e,lm,cm,okt,lkt,ckt,ukt,hkt,Ew=N(()=>{"use strict";o(uj,"isNothing");o($Ce,"isObject");o(zCe,"toArray");o(GCe,"extend");o(VCe,"repeat");o(UCe,"isNegativeZero");HCe=uj,WCe=$Ce,qCe=zCe,YCe=VCe,XCe=UCe,jCe=GCe,$i={isNothing:HCe,isObject:WCe,toArray:qCe,repeat:YCe,isNegativeZero:XCe,extend:jCe};o(hj,"formatError");o(o2,"YAMLException$1");o2.prototype=Object.create(Error.prototype);o2.prototype.constructor=o2;o2.prototype.toString=o(function(e){return this.name+": "+hj(this,e)},"toString");Ds=o2;o(rD,"getLine");o(nD,"padStart");o(KCe,"makeSnippet");QCe=KCe,ZCe=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],JCe=["scalar","sequence","mapping"];o(e7e,"compileStyleAliases");o(t7e,"Type$1");_a=t7e;o(jX,"compileList");o(r7e,"compileMap");o(aD,"Schema$1");aD.prototype.extend=o(function(e){var r=[],n=[];if(e instanceof _a)n.push(e);else if(Array.isArray(e))n=n.concat(e);else if(e&&(Array.isArray(e.implicit)||Array.isArray(e.explicit)))e.implicit&&(r=r.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit));else throw new Ds("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");r.forEach(function(a){if(!(a instanceof _a))throw new Ds("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(a.loadKind&&a.loadKind!=="scalar")throw new Ds("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(a.multi)throw new Ds("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),n.forEach(function(a){if(!(a instanceof _a))throw new Ds("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var i=Object.create(aD.prototype);return i.implicit=(this.implicit||[]).concat(r),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=jX(i,"implicit"),i.compiledExplicit=jX(i,"explicit"),i.compiledTypeMap=r7e(i.compiledImplicit,i.compiledExplicit),i},"extend");n7e=aD,i7e=new _a("tag:yaml.org,2002:str",{kind:"scalar",construct:o(function(t){return t!==null?t:""},"construct")}),a7e=new _a("tag:yaml.org,2002:seq",{kind:"sequence",construct:o(function(t){return t!==null?t:[]},"construct")}),s7e=new _a("tag:yaml.org,2002:map",{kind:"mapping",construct:o(function(t){return t!==null?t:{}},"construct")}),o7e=new n7e({explicit:[i7e,a7e,s7e]});o(l7e,"resolveYamlNull");o(c7e,"constructYamlNull");o(u7e,"isNull");h7e=new _a("tag:yaml.org,2002:null",{kind:"scalar",resolve:l7e,construct:c7e,predicate:u7e,represent:{canonical:o(function(){return"~"},"canonical"),lowercase:o(function(){return"null"},"lowercase"),uppercase:o(function(){return"NULL"},"uppercase"),camelcase:o(function(){return"Null"},"camelcase"),empty:o(function(){return""},"empty")},defaultStyle:"lowercase"});o(f7e,"resolveYamlBoolean");o(d7e,"constructYamlBoolean");o(p7e,"isBoolean");m7e=new _a("tag:yaml.org,2002:bool",{kind:"scalar",resolve:f7e,construct:d7e,predicate:p7e,represent:{lowercase:o(function(t){return t?"true":"false"},"lowercase"),uppercase:o(function(t){return t?"TRUE":"FALSE"},"uppercase"),camelcase:o(function(t){return t?"True":"False"},"camelcase")},defaultStyle:"lowercase"});o(g7e,"isHexCode");o(y7e,"isOctCode");o(v7e,"isDecCode");o(x7e,"resolveYamlInteger");o(b7e,"constructYamlInteger");o(w7e,"isInteger");T7e=new _a("tag:yaml.org,2002:int",{kind:"scalar",resolve:x7e,construct:b7e,predicate:w7e,represent:{binary:o(function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},"binary"),octal:o(function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},"octal"),decimal:o(function(t){return t.toString(10)},"decimal"),hexadecimal:o(function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)},"hexadecimal")},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),k7e=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");o(E7e,"resolveYamlFloat");o(S7e,"constructYamlFloat");C7e=/^[-+]?[0-9]+e/;o(A7e,"representYamlFloat");o(_7e,"isFloat");D7e=new _a("tag:yaml.org,2002:float",{kind:"scalar",resolve:E7e,construct:S7e,predicate:_7e,represent:A7e,defaultStyle:"lowercase"}),fj=o7e.extend({implicit:[h7e,m7e,T7e,D7e]}),L7e=fj,dj=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),pj=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");o(R7e,"resolveYamlTimestamp");o(N7e,"constructYamlTimestamp");o(M7e,"representYamlTimestamp");I7e=new _a("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:R7e,construct:N7e,instanceOf:Date,represent:M7e});o(O7e,"resolveYamlMerge");P7e=new _a("tag:yaml.org,2002:merge",{kind:"scalar",resolve:O7e}),uD=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
388 +\r`;o(B7e,"resolveYamlBinary");o(F7e,"constructYamlBinary");o($7e,"representYamlBinary");o(z7e,"isBinary");G7e=new _a("tag:yaml.org,2002:binary",{kind:"scalar",resolve:B7e,construct:F7e,predicate:z7e,represent:$7e}),V7e=Object.prototype.hasOwnProperty,U7e=Object.prototype.toString;o(H7e,"resolveYamlOmap");o(W7e,"constructYamlOmap");q7e=new _a("tag:yaml.org,2002:omap",{kind:"sequence",resolve:H7e,construct:W7e}),Y7e=Object.prototype.toString;o(X7e,"resolveYamlPairs");o(j7e,"constructYamlPairs");K7e=new _a("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:X7e,construct:j7e}),Q7e=Object.prototype.hasOwnProperty;o(Z7e,"resolveYamlSet");o(J7e,"constructYamlSet");eAe=new _a("tag:yaml.org,2002:set",{kind:"mapping",resolve:Z7e,construct:J7e}),mj=L7e.extend({implicit:[I7e,P7e],explicit:[G7e,q7e,K7e,eAe]}),Gh=Object.prototype.hasOwnProperty,vw=1,gj=2,yj=3,xw=4,iD=1,tAe=2,KX=3,rAe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,nAe=/[\x85\u2028\u2029]/,iAe=/[,\[\]\{\}]/,vj=/^(?:!|!!|![a-z\-]+!)$/i,xj=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;o(QX,"_class");o(dc,"is_EOL");o(Nd,"is_WHITE_SPACE");o(Ls,"is_WS_OR_EOL");o(am,"is_FLOW_INDICATOR");o(aAe,"fromHexCode");o(sAe,"escapedHexLen");o(oAe,"fromDecimalCode");o(ZX,"simpleEscapeSequence");o(lAe,"charFromCodepoint");bj=new Array(256),wj=new Array(256);for(Rd=0;Rd<256;Rd++)bj[Rd]=ZX(Rd)?1:0,wj[Rd]=ZX(Rd);o(cAe,"State$1");o(Tj,"generateError");o(Qt,"throwError");o(bw,"throwWarning");JX={YAML:o(function(e,r,n){var i,a,s;e.version!==null&&Qt(e,"duplication of %YAML directive"),n.length!==1&&Qt(e,"YAML directive accepts exactly one argument"),i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),i===null&&Qt(e,"ill-formed argument of the YAML directive"),a=parseInt(i[1],10),s=parseInt(i[2],10),a!==1&&Qt(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=s<2,s!==1&&s!==2&&bw(e,"unsupported YAML version of the document")},"handleYamlDirective"),TAG:o(function(e,r,n){var i,a;n.length!==2&&Qt(e,"TAG directive accepts exactly two arguments"),i=n[0],a=n[1],vj.test(i)||Qt(e,"ill-formed tag handle (first argument) of the TAG directive"),Gh.call(e.tagMap,i)&&Qt(e,'there is a previously declared suffix for "'+i+'" tag handle'),xj.test(a)||Qt(e,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch{Qt(e,"tag prefix is malformed: "+a)}e.tagMap[i]=a},"handleTagDirective")};o(zh,"captureSegment");o(ej,"mergeMappings");o(sm,"storeMappingPair");o(hD,"readLineBreak");o(Ci,"skipSeparationSpace");o(kw,"testDocumentSeparator");o(fD,"writeFoldedLines");o(uAe,"readPlainScalar");o(hAe,"readSingleQuotedScalar");o(fAe,"readDoubleQuotedScalar");o(dAe,"readFlowCollection");o(pAe,"readBlockScalar");o(tj,"readBlockSequence");o(mAe,"readBlockMapping");o(gAe,"readTagProperty");o(yAe,"readAnchorProperty");o(vAe,"readAlias");o(om,"composeNode");o(xAe,"readDocument");o(kj,"loadDocuments");o(bAe,"loadAll$1");o(wAe,"load$1");TAe=bAe,kAe=wAe,Ej={loadAll:TAe,load:kAe},Sj=Object.prototype.toString,Cj=Object.prototype.hasOwnProperty,dD=65279,EAe=9,l2=10,SAe=13,CAe=32,AAe=33,_Ae=34,sD=35,DAe=37,LAe=38,RAe=39,NAe=42,Aj=44,MAe=45,ww=58,IAe=61,OAe=62,PAe=63,BAe=64,_j=91,Dj=93,FAe=96,Lj=123,$Ae=124,Rj=125,Da={};Da[0]="\\0";Da[7]="\\a";Da[8]="\\b";Da[9]="\\t";Da[10]="\\n";Da[11]="\\v";Da[12]="\\f";Da[13]="\\r";Da[27]="\\e";Da[34]='\\"';Da[92]="\\\\";Da[133]="\\N";Da[160]="\\_";Da[8232]="\\L";Da[8233]="\\P";zAe=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],GAe=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;o(VAe,"compileStyleMap");o(UAe,"encodeHex");HAe=1,c2=2;o(WAe,"State");o(rj,"indentString");o(oD,"generateNextLine");o(qAe,"testImplicitResolving");o(Tw,"isWhitespace");o(u2,"isPrintable");o(nj,"isNsCharOrWhitespace");o(ij,"isPlainSafe");o(YAe,"isPlainSafeFirst");o(XAe,"isPlainSafeLast");o(s2,"codePointAt");o(Nj,"needIndentIndicator");Mj=1,lD=2,Ij=3,Oj=4,im=5;o(jAe,"chooseScalarStyle");o(KAe,"writeScalar");o(aj,"blockHeader");o(sj,"dropEndingNewline");o(QAe,"foldString");o(oj,"foldLine");o(ZAe,"escapeString");o(JAe,"writeFlowSequence");o(lj,"writeBlockSequence");o(e8e,"writeFlowMapping");o(t8e,"writeBlockMapping");o(cj,"detectType");o(Au,"writeNode");o(r8e,"getDuplicateReferences");o(cD,"inspectNode");o(n8e,"dump$1");i8e=n8e,a8e={dump:i8e};o(pD,"renamed");lm=fj,cm=Ej.load,okt=Ej.loadAll,lkt=a8e.dump,ckt=pD("safeLoad","load"),ukt=pD("safeLoadAll","loadAll"),hkt=pD("safeDump","dump")});function vD(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function Gj(t){Id=t}function nn(t,e=""){let r=typeof t=="string"?t:t.source,n={replace:o((i,a)=>{let s=typeof a=="string"?a:a.source;return s=s.replace(ts.caret,"$1"),r=r.replace(i,s),n},"replace"),getRegex:o(()=>new RegExp(r,e),"getRegex")};return n}function pc(t,e){if(e){if(ts.escapeTest.test(t))return t.replace(ts.escapeReplace,Bj)}else if(ts.escapeTestNoEncode.test(t))return t.replace(ts.escapeReplaceNoEncode,Bj);return t}function Fj(t){try{t=encodeURI(t).replace(ts.percentDecode,"%")}catch{return null}return t}function $j(t,e){let r=t.replace(ts.findPipe,(a,s,l)=>{let u=!1,h=s;for(;--h>=0&&l[h]==="\\";)u=!u;return u?"|":" |"}),n=r.split(ts.splitPipe),i=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push("");for(;i<n.length;i++)n[i]=n[i].trim().replace(ts.slashPipe,"|");return n}function f2(t,e,r){let n=t.length;if(n===0)return"";let i=0;for(;i<n&&t.charAt(n-i-1)===e;)i++;return t.slice(0,n-i)}function $8e(t,e){if(t.indexOf(e[1])===-1)return-1;let r=0;for(let n=0;n<t.length;n++)if(t[n]==="\\")n++;else if(t[n]===e[0])r++;else if(t[n]===e[1]&&(r--,r<0))return n;return-1}function zj(t,e,r,n,i){let a=e.href,s=e.title||null,l=t[1].replace(i.other.outputLinkReplace,"$1");if(t[0].charAt(0)!=="!"){n.state.inLink=!0;let u={type:"link",raw:r,href:a,title:s,text:l,tokens:n.inlineTokens(l)};return n.state.inLink=!1,u}return{type:"image",raw:r,href:a,title:s,text:l}}function z8e(t,e,r){let n=t.match(r.other.indentCodeCompensation);if(n===null)return e;let i=n[1];return e.split(`
389 +`).map(a=>{let s=a.match(r.other.beginningSpace);if(s===null)return a;let[l]=s;return l.length>=i.length?a.slice(i.length):a}).join(`
390 +`)}function Jr(t,e){return Md.parse(t,e)}var Id,d2,ts,s8e,o8e,l8e,m2,c8e,xD,Vj,Uj,u8e,bD,h8e,wD,f8e,d8e,Aw,TD,p8e,Hj,m8e,kD,Pj,g8e,y8e,v8e,x8e,Wj,b8e,_w,ED,qj,w8e,Yj,T8e,k8e,E8e,Xj,S8e,C8e,jj,A8e,_8e,D8e,L8e,R8e,N8e,M8e,Cw,I8e,Kj,Qj,O8e,SD,P8e,gD,B8e,Sw,h2,F8e,Bj,hm,Al,fm,p2,_l,um,yD,Md,dkt,pkt,mkt,gkt,ykt,vkt,xkt,Zj=N(()=>{"use strict";o(vD,"_getDefaults");Id=vD();o(Gj,"changeDefaults");d2={exec:o(()=>null,"exec")};o(nn,"edit");ts={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:o(t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),"listItemRegex"),nextBulletRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),"nextBulletRegex"),hrRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),"hrRegex"),fencesBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:\`\`\`|~~~)`),"fencesBeginRegex"),headingBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}#`),"headingBeginRegex"),htmlBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}<(?:[a-z].*>|!--)`,"i"),"htmlBeginRegex")},s8e=/^(?:[ \t]*(?:\n|$))+/,o8e=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,l8e=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,m2=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,c8e=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,xD=/(?:[*+-]|\d{1,9}[.)])/,Vj=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Uj=nn(Vj).replace(/bull/g,xD).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),u8e=nn(Vj).replace(/bull/g,xD).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),bD=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,h8e=/^[^\n]+/,wD=/(?!\s*\])(?:\\.|[^\[\]\\])+/,f8e=nn(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",wD).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),d8e=nn(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,xD).getRegex(),Aw="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",TD=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,p8e=nn("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",TD).replace("tag",Aw).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Hj=nn(bD).replace("hr",m2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Aw).getRegex(),m8e=nn(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Hj).getRegex(),kD={blockquote:m8e,code:o8e,def:f8e,fences:l8e,heading:c8e,hr:m2,html:p8e,lheading:Uj,list:d8e,newline:s8e,paragraph:Hj,table:d2,text:h8e},Pj=nn("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",m2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Aw).getRegex(),g8e={...kD,lheading:u8e,table:Pj,paragraph:nn(bD).replace("hr",m2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Pj).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Aw).getRegex()},y8e={...kD,html:nn(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",TD).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:d2,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:nn(bD).replace("hr",m2).replace("heading",` *#{1,6} *[^
391 +]`).replace("lheading",Uj).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},v8e=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,x8e=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Wj=/^( {2,}|\\)\n(?!\s*$)/,b8e=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,_w=/[\p{P}\p{S}]/u,ED=/[\s\p{P}\p{S}]/u,qj=/[^\s\p{P}\p{S}]/u,w8e=nn(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,ED).getRegex(),Yj=/(?!~)[\p{P}\p{S}]/u,T8e=/(?!~)[\s\p{P}\p{S}]/u,k8e=/(?:[^\s\p{P}\p{S}]|~)/u,E8e=/\[[^[\]]*?\]\((?:\\.|[^\\\(\)]|\((?:\\.|[^\\\(\)])*\))*\)|`[^`]*?`|<[^<>]*?>/g,Xj=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,S8e=nn(Xj,"u").replace(/punct/g,_w).getRegex(),C8e=nn(Xj,"u").replace(/punct/g,Yj).getRegex(),jj="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",A8e=nn(jj,"gu").replace(/notPunctSpace/g,qj).replace(/punctSpace/g,ED).replace(/punct/g,_w).getRegex(),_8e=nn(jj,"gu").replace(/notPunctSpace/g,k8e).replace(/punctSpace/g,T8e).replace(/punct/g,Yj).getRegex(),D8e=nn("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,qj).replace(/punctSpace/g,ED).replace(/punct/g,_w).getRegex(),L8e=nn(/\\(punct)/,"gu").replace(/punct/g,_w).getRegex(),R8e=nn(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),N8e=nn(TD).replace("(?:-->|$)","-->").getRegex(),M8e=nn("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",N8e).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Cw=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,I8e=nn(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",Cw).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Kj=nn(/^!?\[(label)\]\[(ref)\]/).replace("label",Cw).replace("ref",wD).getRegex(),Qj=nn(/^!?\[(ref)\](?:\[\])?/).replace("ref",wD).getRegex(),O8e=nn("reflink|nolink(?!\\()","g").replace("reflink",Kj).replace("nolink",Qj).getRegex(),SD={_backpedal:d2,anyPunctuation:L8e,autolink:R8e,blockSkip:E8e,br:Wj,code:x8e,del:d2,emStrongLDelim:S8e,emStrongRDelimAst:A8e,emStrongRDelimUnd:D8e,escape:v8e,link:I8e,nolink:Qj,punctuation:w8e,reflink:Kj,reflinkSearch:O8e,tag:M8e,text:b8e,url:d2},P8e={...SD,link:nn(/^!?\[(label)\]\((.*?)\)/).replace("label",Cw).getRegex(),reflink:nn(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Cw).getRegex()},gD={...SD,emStrongRDelimAst:_8e,emStrongLDelim:C8e,url:nn(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/},B8e={...gD,br:nn(Wj).replace("{2,}","*").getRegex(),text:nn(gD.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},Sw={normal:kD,gfm:g8e,pedantic:y8e},h2={normal:SD,gfm:gD,breaks:B8e,pedantic:P8e},F8e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Bj=o(t=>F8e[t],"getEscapeReplacement");o(pc,"escape");o(Fj,"cleanUrl");o($j,"splitCells");o(f2,"rtrim");o($8e,"findClosingBracket");o(zj,"outputLink");o(z8e,"indentCodeCompensation");hm=class{static{o(this,"_Tokenizer")}options;rules;lexer;constructor(e){this.options=e||Id}space(e){let r=this.rules.block.newline.exec(e);if(r&&r[0].length>0)return{type:"space",raw:r[0]}}code(e){let r=this.rules.block.code.exec(e);if(r){let n=r[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:r[0],codeBlockStyle:"indented",text:this.options.pedantic?n:f2(n,`
392 +`)}}}fences(e){let r=this.rules.block.fences.exec(e);if(r){let n=r[0],i=z8e(n,r[3]||"",this.rules);return{type:"code",raw:n,lang:r[2]?r[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):r[2],text:i}}}heading(e){let r=this.rules.block.heading.exec(e);if(r){let n=r[2].trim();if(this.rules.other.endingHash.test(n)){let i=f2(n,"#");(this.options.pedantic||!i||this.rules.other.endingSpaceChar.test(i))&&(n=i.trim())}return{type:"heading",raw:r[0],depth:r[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let r=this.rules.block.hr.exec(e);if(r)return{type:"hr",raw:f2(r[0],`
393 +`)}}blockquote(e){let r=this.rules.block.blockquote.exec(e);if(r){let n=f2(r[0],`
394 +`).split(`
395 +`),i="",a="",s=[];for(;n.length>0;){let l=!1,u=[],h;for(h=0;h<n.length;h++)if(this.rules.other.blockquoteStart.test(n[h]))u.push(n[h]),l=!0;else if(!l)u.push(n[h]);else break;n=n.slice(h);let f=u.join(`
396 +`),d=f.replace(this.rules.other.blockquoteSetextReplace,`
397 + $1`).replace(this.rules.other.blockquoteSetextReplace2,"");i=i?`${i}
398 +${f}`:f,a=a?`${a}
399 +${d}`:d;let p=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(d,s,!0),this.lexer.state.top=p,n.length===0)break;let m=s.at(-1);if(m?.type==="code")break;if(m?.type==="blockquote"){let g=m,y=g.raw+`
400 +`+n.join(`
401 +`),v=this.blockquote(y);s[s.length-1]=v,i=i.substring(0,i.length-g.raw.length)+v.raw,a=a.substring(0,a.length-g.text.length)+v.text;break}else if(m?.type==="list"){let g=m,y=g.raw+`
402 +`+n.join(`
403 +`),v=this.list(y);s[s.length-1]=v,i=i.substring(0,i.length-m.raw.length)+v.raw,a=a.substring(0,a.length-g.raw.length)+v.raw,n=y.substring(s.at(-1).raw.length).split(`
404 +`);continue}}return{type:"blockquote",raw:i,tokens:s,text:a}}}list(e){let r=this.rules.block.list.exec(e);if(r){let n=r[1].trim(),i=n.length>1,a={type:"list",raw:"",ordered:i,start:i?+n.slice(0,-1):"",loose:!1,items:[]};n=i?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=i?n:"[*+-]");let s=this.rules.other.listItemRegex(n),l=!1;for(;e;){let h=!1,f="",d="";if(!(r=s.exec(e))||this.rules.block.hr.test(e))break;f=r[0],e=e.substring(f.length);let p=r[2].split(`
405 +`,1)[0].replace(this.rules.other.listReplaceTabs,b=>" ".repeat(3*b.length)),m=e.split(`
406 +`,1)[0],g=!p.trim(),y=0;if(this.options.pedantic?(y=2,d=p.trimStart()):g?y=r[1].length+1:(y=r[2].search(this.rules.other.nonSpaceChar),y=y>4?1:y,d=p.slice(y),y+=r[1].length),g&&this.rules.other.blankLine.test(m)&&(f+=m+`
407 +`,e=e.substring(m.length+1),h=!0),!h){let b=this.rules.other.nextBulletRegex(y),w=this.rules.other.hrRegex(y),C=this.rules.other.fencesBeginRegex(y),T=this.rules.other.headingBeginRegex(y),E=this.rules.other.htmlBeginRegex(y);for(;e;){let A=e.split(`
408 +`,1)[0],S;if(m=A,this.options.pedantic?(m=m.replace(this.rules.other.listReplaceNesting," "),S=m):S=m.replace(this.rules.other.tabCharGlobal," "),C.test(m)||T.test(m)||E.test(m)||b.test(m)||w.test(m))break;if(S.search(this.rules.other.nonSpaceChar)>=y||!m.trim())d+=`
409 +`+S.slice(y);else{if(g||p.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||C.test(p)||T.test(p)||w.test(p))break;d+=`
410 +`+m}!g&&!m.trim()&&(g=!0),f+=A+`
411 +`,e=e.substring(A.length+1),p=S.slice(y)}}a.loose||(l?a.loose=!0:this.rules.other.doubleBlankLine.test(f)&&(l=!0));let v=null,x;this.options.gfm&&(v=this.rules.other.listIsTask.exec(d),v&&(x=v[0]!=="[ ] ",d=d.replace(this.rules.other.listReplaceTask,""))),a.items.push({type:"list_item",raw:f,task:!!v,checked:x,loose:!1,text:d,tokens:[]}),a.raw+=f}let u=a.items.at(-1);if(u)u.raw=u.raw.trimEnd(),u.text=u.text.trimEnd();else return;a.raw=a.raw.trimEnd();for(let h=0;h<a.items.length;h++)if(this.lexer.state.top=!1,a.items[h].tokens=this.lexer.blockTokens(a.items[h].text,[]),!a.loose){let f=a.items[h].tokens.filter(p=>p.type==="space"),d=f.length>0&&f.some(p=>this.rules.other.anyLine.test(p.raw));a.loose=d}if(a.loose)for(let h=0;h<a.items.length;h++)a.items[h].loose=!0;return a}}html(e){let r=this.rules.block.html.exec(e);if(r)return{type:"html",block:!0,raw:r[0],pre:r[1]==="pre"||r[1]==="script"||r[1]==="style",text:r[0]}}def(e){let r=this.rules.block.def.exec(e);if(r){let n=r[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),i=r[2]?r[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",a=r[3]?r[3].substring(1,r[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):r[3];return{type:"def",tag:n,raw:r[0],href:i,title:a}}}table(e){let r=this.rules.block.table.exec(e);if(!r||!this.rules.other.tableDelimiter.test(r[2]))return;let n=$j(r[1]),i=r[2].replace(this.rules.other.tableAlignChars,"").split("|"),a=r[3]?.trim()?r[3].replace(this.rules.other.tableRowBlankLine,"").split(`
412 +`):[],s={type:"table",raw:r[0],header:[],align:[],rows:[]};if(n.length===i.length){for(let l of i)this.rules.other.tableAlignRight.test(l)?s.align.push("right"):this.rules.other.tableAlignCenter.test(l)?s.align.push("center"):this.rules.other.tableAlignLeft.test(l)?s.align.push("left"):s.align.push(null);for(let l=0;l<n.length;l++)s.header.push({text:n[l],tokens:this.lexer.inline(n[l]),header:!0,align:s.align[l]});for(let l of a)s.rows.push($j(l,s.header.length).map((u,h)=>({text:u,tokens:this.lexer.inline(u),header:!1,align:s.align[h]})));return s}}lheading(e){let r=this.rules.block.lheading.exec(e);if(r)return{type:"heading",raw:r[0],depth:r[2].charAt(0)==="="?1:2,text:r[1],tokens:this.lexer.inline(r[1])}}paragraph(e){let r=this.rules.block.paragraph.exec(e);if(r){let n=r[1].charAt(r[1].length-1)===`
413 +`?r[1].slice(0,-1):r[1];return{type:"paragraph",raw:r[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let r=this.rules.block.text.exec(e);if(r)return{type:"text",raw:r[0],text:r[0],tokens:this.lexer.inline(r[0])}}escape(e){let r=this.rules.inline.escape.exec(e);if(r)return{type:"escape",raw:r[0],text:r[1]}}tag(e){let r=this.rules.inline.tag.exec(e);if(r)return!this.lexer.state.inLink&&this.rules.other.startATag.test(r[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(r[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(r[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(r[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:r[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:r[0]}}link(e){let r=this.rules.inline.link.exec(e);if(r){let n=r[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=f2(n.slice(0,-1),"\\");if((n.length-s.length)%2===0)return}else{let s=$8e(r[2],"()");if(s>-1){let u=(r[0].indexOf("!")===0?5:4)+r[1].length+s;r[2]=r[2].substring(0,s),r[0]=r[0].substring(0,u).trim(),r[3]=""}}let i=r[2],a="";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(i);s&&(i=s[1],a=s[3])}else a=r[3]?r[3].slice(1,-1):"";return i=i.trim(),this.rules.other.startAngleBracket.test(i)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?i=i.slice(1):i=i.slice(1,-1)),zj(r,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:a&&a.replace(this.rules.inline.anyPunctuation,"$1")},r[0],this.lexer,this.rules)}}reflink(e,r){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let i=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),a=r[i.toLowerCase()];if(!a){let s=n[0].charAt(0);return{type:"text",raw:s,text:s}}return zj(n,a,n[0],this.lexer,this.rules)}}emStrong(e,r,n=""){let i=this.rules.inline.emStrongLDelim.exec(e);if(!i||i[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(i[1]||i[2]||"")||!n||this.rules.inline.punctuation.exec(n)){let s=[...i[0]].length-1,l,u,h=s,f=0,d=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(d.lastIndex=0,r=r.slice(-1*e.length+s);(i=d.exec(r))!=null;){if(l=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!l)continue;if(u=[...l].length,i[3]||i[4]){h+=u;continue}else if((i[5]||i[6])&&s%3&&!((s+u)%3)){f+=u;continue}if(h-=u,h>0)continue;u=Math.min(u,u+h+f);let p=[...i[0]][0].length,m=e.slice(0,s+i.index+p+u);if(Math.min(s,u)%2){let y=m.slice(1,-1);return{type:"em",raw:m,text:y,tokens:this.lexer.inlineTokens(y)}}let g=m.slice(2,-2);return{type:"strong",raw:m,text:g,tokens:this.lexer.inlineTokens(g)}}}}codespan(e){let r=this.rules.inline.code.exec(e);if(r){let n=r[2].replace(this.rules.other.newLineCharGlobal," "),i=this.rules.other.nonSpaceChar.test(n),a=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return i&&a&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:r[0],text:n}}}br(e){let r=this.rules.inline.br.exec(e);if(r)return{type:"br",raw:r[0]}}del(e){let r=this.rules.inline.del.exec(e);if(r)return{type:"del",raw:r[0],text:r[2],tokens:this.lexer.inlineTokens(r[2])}}autolink(e){let r=this.rules.inline.autolink.exec(e);if(r){let n,i;return r[2]==="@"?(n=r[1],i="mailto:"+n):(n=r[1],i=n),{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let r;if(r=this.rules.inline.url.exec(e)){let n,i;if(r[2]==="@")n=r[0],i="mailto:"+n;else{let a;do a=r[0],r[0]=this.rules.inline._backpedal.exec(r[0])?.[0]??"";while(a!==r[0]);n=r[0],r[1]==="www."?i="http://"+r[0]:i=r[0]}return{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let r=this.rules.inline.text.exec(e);if(r){let n=this.lexer.state.inRawBlock;return{type:"text",raw:r[0],text:r[0],escaped:n}}}},Al=class t{static{o(this,"_Lexer")}tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||Id,this.options.tokenizer=this.options.tokenizer||new hm,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let r={other:ts,block:Sw.normal,inline:h2.normal};this.options.pedantic?(r.block=Sw.pedantic,r.inline=h2.pedantic):this.options.gfm&&(r.block=Sw.gfm,this.options.breaks?r.inline=h2.breaks:r.inline=h2.gfm),this.tokenizer.rules=r}static get rules(){return{block:Sw,inline:h2}}static lex(e,r){return new t(r).lex(e)}static lexInline(e,r){return new t(r).inlineTokens(e)}lex(e){e=e.replace(ts.carriageReturn,`
414 +`),this.blockTokens(e,this.tokens);for(let r=0;r<this.inlineQueue.length;r++){let n=this.inlineQueue[r];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,r=[],n=!1){for(this.options.pedantic&&(e=e.replace(ts.tabCharGlobal," ").replace(ts.spaceLine,""));e;){let i;if(this.options.extensions?.block?.some(s=>(i=s.call({lexer:this},e,r))?(e=e.substring(i.raw.length),r.push(i),!0):!1))continue;if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length);let s=r.at(-1);i.raw.length===1&&s!==void 0?s.raw+=`
415 +`:r.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=`
416 +`+i.raw,s.text+=`
417 +`+i.text,this.inlineQueue.at(-1).src=s.text):r.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=`
418 +`+i.raw,s.text+=`
419 +`+i.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title});continue}if(i=this.tokenizer.table(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.lheading(e)){e=e.substring(i.raw.length),r.push(i);continue}let a=e;if(this.options.extensions?.startBlock){let s=1/0,l=e.slice(1),u;this.options.extensions.startBlock.forEach(h=>{u=h.call({lexer:this},l),typeof u=="number"&&u>=0&&(s=Math.min(s,u))}),s<1/0&&s>=0&&(a=e.substring(0,s+1))}if(this.state.top&&(i=this.tokenizer.paragraph(a))){let s=r.at(-1);n&&s?.type==="paragraph"?(s.raw+=`
420 +`+i.raw,s.text+=`
421 +`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(i),n=a.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length);let s=r.at(-1);s?.type==="text"?(s.raw+=`
422 +`+i.raw,s.text+=`
423 +`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(i);continue}if(e){let s="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,r}inline(e,r=[]){return this.inlineQueue.push({src:e,tokens:r}),r}inlineTokens(e,r=[]){let n=e,i=null;if(this.tokens.links){let l=Object.keys(this.tokens.links);if(l.length>0)for(;(i=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)l.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(n=n.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(i=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(i=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,i.index)+"++"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let a=!1,s="";for(;e;){a||(s=""),a=!1;let l;if(this.options.extensions?.inline?.some(h=>(l=h.call({lexer:this},e,r))?(e=e.substring(l.raw.length),r.push(l),!0):!1))continue;if(l=this.tokenizer.escape(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.tag(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.link(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(l.raw.length);let h=r.at(-1);l.type==="text"&&h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(l=this.tokenizer.emStrong(e,n,s)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.codespan(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.br(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.del(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.autolink(e)){e=e.substring(l.raw.length),r.push(l);continue}if(!this.state.inLink&&(l=this.tokenizer.url(e))){e=e.substring(l.raw.length),r.push(l);continue}let u=e;if(this.options.extensions?.startInline){let h=1/0,f=e.slice(1),d;this.options.extensions.startInline.forEach(p=>{d=p.call({lexer:this},f),typeof d=="number"&&d>=0&&(h=Math.min(h,d))}),h<1/0&&h>=0&&(u=e.substring(0,h+1))}if(l=this.tokenizer.inlineText(u)){e=e.substring(l.raw.length),l.raw.slice(-1)!=="_"&&(s=l.raw.slice(-1)),a=!0;let h=r.at(-1);h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(e){let h="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(h);break}else throw new Error(h)}}return r}},fm=class{static{o(this,"_Renderer")}options;parser;constructor(e){this.options=e||Id}space(e){return""}code({text:e,lang:r,escaped:n}){let i=(r||"").match(ts.notSpaceStart)?.[0],a=e.replace(ts.endingNewline,"")+`
424 +`;return i?'<pre><code class="language-'+pc(i)+'">'+(n?a:pc(a,!0))+`</code></pre>
425 +`:"<pre><code>"+(n?a:pc(a,!0))+`</code></pre>
426 +`}blockquote({tokens:e}){return`<blockquote>
427 +${this.parser.parse(e)}</blockquote>
428 +`}html({text:e}){return e}heading({tokens:e,depth:r}){return`<h${r}>${this.parser.parseInline(e)}</h${r}>
429 +`}hr(e){return`<hr>
430 +`}list(e){let r=e.ordered,n=e.start,i="";for(let l=0;l<e.items.length;l++){let u=e.items[l];i+=this.listitem(u)}let a=r?"ol":"ul",s=r&&n!==1?' start="'+n+'"':"";return"<"+a+s+`>
431 +`+i+"</"+a+`>
432 +`}listitem(e){let r="";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type==="paragraph"?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type==="text"&&(e.tokens[0].tokens[0].text=n+" "+pc(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" ",escaped:!0}):r+=n+" "}return r+=this.parser.parse(e.tokens,!!e.loose),`<li>${r}</li>
433 +`}checkbox({checked:e}){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox">'}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>
434 +`}table(e){let r="",n="";for(let a=0;a<e.header.length;a++)n+=this.tablecell(e.header[a]);r+=this.tablerow({text:n});let i="";for(let a=0;a<e.rows.length;a++){let s=e.rows[a];n="";for(let l=0;l<s.length;l++)n+=this.tablecell(s[l]);i+=this.tablerow({text:n})}return i&&(i=`<tbody>${i}</tbody>`),`<table>
435 +<thead>
436 +`+r+`</thead>
437 +`+i+`</table>
438 +`}tablerow({text:e}){return`<tr>
439 +${e}</tr>
440 +`}tablecell(e){let r=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+r+`</${n}>
441 +`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${pc(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:r,tokens:n}){let i=this.parser.parseInline(n),a=Fj(e);if(a===null)return i;e=a;let s='<a href="'+e+'"';return r&&(s+=' title="'+pc(r)+'"'),s+=">"+i+"</a>",s}image({href:e,title:r,text:n}){let i=Fj(e);if(i===null)return pc(n);e=i;let a=`<img src="${e}" alt="${n}"`;return r&&(a+=` title="${pc(r)}"`),a+=">",a}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:pc(e.text)}},p2=class{static{o(this,"_TextRenderer")}strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}},_l=class t{static{o(this,"_Parser")}options;renderer;textRenderer;constructor(e){this.options=e||Id,this.options.renderer=this.options.renderer||new fm,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new p2}static parse(e,r){return new t(r).parse(e)}static parseInline(e,r){return new t(r).parseInline(e)}parse(e,r=!0){let n="";for(let i=0;i<e.length;i++){let a=e[i];if(this.options.extensions?.renderers?.[a.type]){let l=a,u=this.options.extensions.renderers[l.type].call({parser:this},l);if(u!==!1||!["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(l.type)){n+=u||"";continue}}let s=a;switch(s.type){case"space":{n+=this.renderer.space(s);continue}case"hr":{n+=this.renderer.hr(s);continue}case"heading":{n+=this.renderer.heading(s);continue}case"code":{n+=this.renderer.code(s);continue}case"table":{n+=this.renderer.table(s);continue}case"blockquote":{n+=this.renderer.blockquote(s);continue}case"list":{n+=this.renderer.list(s);continue}case"html":{n+=this.renderer.html(s);continue}case"paragraph":{n+=this.renderer.paragraph(s);continue}case"text":{let l=s,u=this.renderer.text(l);for(;i+1<e.length&&e[i+1].type==="text";)l=e[++i],u+=`
442 +`+this.renderer.text(l);r?n+=this.renderer.paragraph({type:"paragraph",raw:u,text:u,tokens:[{type:"text",raw:u,text:u,escaped:!0}]}):n+=u;continue}default:{let l='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(l),"";throw new Error(l)}}}return n}parseInline(e,r=this.renderer){let n="";for(let i=0;i<e.length;i++){let a=e[i];if(this.options.extensions?.renderers?.[a.type]){let l=this.options.extensions.renderers[a.type].call({parser:this},a);if(l!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(a.type)){n+=l||"";continue}}let s=a;switch(s.type){case"escape":{n+=r.text(s);break}case"html":{n+=r.html(s);break}case"link":{n+=r.link(s);break}case"image":{n+=r.image(s);break}case"strong":{n+=r.strong(s);break}case"em":{n+=r.em(s);break}case"codespan":{n+=r.codespan(s);break}case"br":{n+=r.br(s);break}case"del":{n+=r.del(s);break}case"text":{n+=r.text(s);break}default:{let l='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(l),"";throw new Error(l)}}}return n}},um=class{static{o(this,"_Hooks")}options;block;constructor(e){this.options=e||Id}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}provideLexer(){return this.block?Al.lex:Al.lexInline}provideParser(){return this.block?_l.parse:_l.parseInline}},yD=class{static{o(this,"Marked")}defaults=vD();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=_l;Renderer=fm;TextRenderer=p2;Lexer=Al;Tokenizer=hm;Hooks=um;constructor(...e){this.use(...e)}walkTokens(e,r){let n=[];for(let i of e)switch(n=n.concat(r.call(this,i)),i.type){case"table":{let a=i;for(let s of a.header)n=n.concat(this.walkTokens(s.tokens,r));for(let s of a.rows)for(let l of s)n=n.concat(this.walkTokens(l.tokens,r));break}case"list":{let a=i;n=n.concat(this.walkTokens(a.items,r));break}default:{let a=i;this.defaults.extensions?.childTokens?.[a.type]?this.defaults.extensions.childTokens[a.type].forEach(s=>{let l=a[s].flat(1/0);n=n.concat(this.walkTokens(l,r))}):a.tokens&&(n=n.concat(this.walkTokens(a.tokens,r)))}}return n}use(...e){let r=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let i={...n};if(i.async=this.defaults.async||i.async||!1,n.extensions&&(n.extensions.forEach(a=>{if(!a.name)throw new Error("extension name required");if("renderer"in a){let s=r.renderers[a.name];s?r.renderers[a.name]=function(...l){let u=a.renderer.apply(this,l);return u===!1&&(u=s.apply(this,l)),u}:r.renderers[a.name]=a.renderer}if("tokenizer"in a){if(!a.level||a.level!=="block"&&a.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let s=r[a.level];s?s.unshift(a.tokenizer):r[a.level]=[a.tokenizer],a.start&&(a.level==="block"?r.startBlock?r.startBlock.push(a.start):r.startBlock=[a.start]:a.level==="inline"&&(r.startInline?r.startInline.push(a.start):r.startInline=[a.start]))}"childTokens"in a&&a.childTokens&&(r.childTokens[a.name]=a.childTokens)}),i.extensions=r),n.renderer){let a=this.defaults.renderer||new fm(this.defaults);for(let s in n.renderer){if(!(s in a))throw new Error(`renderer '${s}' does not exist`);if(["options","parser"].includes(s))continue;let l=s,u=n.renderer[l],h=a[l];a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d||""}}i.renderer=a}if(n.tokenizer){let a=this.defaults.tokenizer||new hm(this.defaults);for(let s in n.tokenizer){if(!(s in a))throw new Error(`tokenizer '${s}' does not exist`);if(["options","rules","lexer"].includes(s))continue;let l=s,u=n.tokenizer[l],h=a[l];a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d}}i.tokenizer=a}if(n.hooks){let a=this.defaults.hooks||new um;for(let s in n.hooks){if(!(s in a))throw new Error(`hook '${s}' does not exist`);if(["options","block"].includes(s))continue;let l=s,u=n.hooks[l],h=a[l];um.passThroughHooks.has(s)?a[l]=f=>{if(this.defaults.async)return Promise.resolve(u.call(a,f)).then(p=>h.call(a,p));let d=u.call(a,f);return h.call(a,d)}:a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d}}i.hooks=a}if(n.walkTokens){let a=this.defaults.walkTokens,s=n.walkTokens;i.walkTokens=function(l){let u=[];return u.push(s.call(this,l)),a&&(u=u.concat(a.call(this,l))),u}}this.defaults={...this.defaults,...i}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,r){return Al.lex(e,r??this.defaults)}parser(e,r){return _l.parse(e,r??this.defaults)}parseMarkdown(e){return o((n,i)=>{let a={...i},s={...this.defaults,...a},l=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&a.async===!1)return l(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof n>"u"||n===null)return l(new Error("marked(): input parameter is undefined or null"));if(typeof n!="string")return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));s.hooks&&(s.hooks.options=s,s.hooks.block=e);let u=s.hooks?s.hooks.provideLexer():e?Al.lex:Al.lexInline,h=s.hooks?s.hooks.provideParser():e?_l.parse:_l.parseInline;if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then(f=>u(f,s)).then(f=>s.hooks?s.hooks.processAllTokens(f):f).then(f=>s.walkTokens?Promise.all(this.walkTokens(f,s.walkTokens)).then(()=>f):f).then(f=>h(f,s)).then(f=>s.hooks?s.hooks.postprocess(f):f).catch(l);try{s.hooks&&(n=s.hooks.preprocess(n));let f=u(n,s);s.hooks&&(f=s.hooks.processAllTokens(f)),s.walkTokens&&this.walkTokens(f,s.walkTokens);let d=h(f,s);return s.hooks&&(d=s.hooks.postprocess(d)),d}catch(f){return l(f)}},"parse")}onError(e,r){return n=>{if(n.message+=`
443 +Please report this to https://github.com/markedjs/marked.`,e){let i="<p>An error occurred:</p><pre>"+pc(n.message+"",!0)+"</pre>";return r?Promise.resolve(i):i}if(r)return Promise.reject(n);throw n}}},Md=new yD;o(Jr,"marked");Jr.options=Jr.setOptions=function(t){return Md.setOptions(t),Jr.defaults=Md.defaults,Gj(Jr.defaults),Jr};Jr.getDefaults=vD;Jr.defaults=Id;Jr.use=function(...t){return Md.use(...t),Jr.defaults=Md.defaults,Gj(Jr.defaults),Jr};Jr.walkTokens=function(t,e){return Md.walkTokens(t,e)};Jr.parseInline=Md.parseInline;Jr.Parser=_l;Jr.parser=_l.parse;Jr.Renderer=fm;Jr.TextRenderer=p2;Jr.Lexer=Al;Jr.lexer=Al.lex;Jr.Tokenizer=hm;Jr.Hooks=um;Jr.parse=Jr;dkt=Jr.options,pkt=Jr.setOptions,mkt=Jr.use,gkt=Jr.walkTokens,ykt=Jr.parseInline,vkt=_l.parse,xkt=Al.lex});function G8e(t,{markdownAutoWrap:e}){let n=t.replace(/<br\/>/g,`
444 +`).replace(/\n{2,}/g,`
445 +`),i=B4(n);return e===!1?i.replace(/ /g,"&nbsp;"):i}function Jj(t,e={}){let r=G8e(t,e),n=Jr.lexer(r),i=[[]],a=0;function s(l,u="normal"){l.type==="text"?l.text.split(`
446 +`).forEach((f,d)=>{d!==0&&(a++,i.push([])),f.split(" ").forEach(p=>{p=p.replace(/&#39;/g,"'"),p&&i[a].push({content:p,type:u})})}):l.type==="strong"||l.type==="em"?l.tokens.forEach(h=>{s(h,l.type)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}return o(s,"processNode"),n.forEach(l=>{l.type==="paragraph"?l.tokens?.forEach(u=>{s(u)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}),i}function eK(t,{markdownAutoWrap:e}={}){let r=Jr.lexer(t);function n(i){return i.type==="text"?e===!1?i.text.replace(/\n */g,"<br/>").replace(/ /g,"&nbsp;"):i.text.replace(/\n */g,"<br/>"):i.type==="strong"?`<strong>${i.tokens?.map(n).join("")}</strong>`:i.type==="em"?`<em>${i.tokens?.map(n).join("")}</em>`:i.type==="paragraph"?`<p>${i.tokens?.map(n).join("")}</p>`:i.type==="space"?"":i.type==="html"?`${i.text}`:i.type==="escape"?i.text:`Unsupported markdown: ${i.type}`}return o(n,"output"),r.map(n).join("")}var tK=N(()=>{"use strict";Zj();PC();o(G8e,"preprocessMarkdown");o(Jj,"markdownToLines");o(eK,"markdownToHTML")});function V8e(t){return Intl.Segmenter?[...new Intl.Segmenter().segment(t)].map(e=>e.segment):[...t]}function U8e(t,e){let r=V8e(e.content);return rK(t,[],r,e.type)}function rK(t,e,r,n){if(r.length===0)return[{content:e.join(""),type:n},{content:"",type:n}];let[i,...a]=r,s=[...e,i];return t([{content:s.join(""),type:n}])?rK(t,s,a,n):(e.length===0&&i&&(e.push(i),r.shift()),[{content:e.join(""),type:n},{content:r.join(""),type:n}])}function nK(t,e){if(t.some(({content:r})=>r.includes(`
447 +`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return CD(t,e)}function CD(t,e,r=[],n=[]){if(t.length===0)return n.length>0&&r.push(n),r.length>0?r:[];let i="";t[0].content===" "&&(i=" ",t.shift());let a=t.shift()??{content:" ",type:"normal"},s=[...n];if(i!==""&&s.push({content:i,type:"normal"}),s.push(a),e(s))return CD(t,e,r,s);if(n.length>0)r.push(n),t.unshift(a);else if(a.content){let[l,u]=U8e(e,a);r.push([l]),u.content&&t.unshift(u)}return CD(t,e,r)}var iK=N(()=>{"use strict";o(V8e,"splitTextToChars");o(U8e,"splitWordToFitWidth");o(rK,"splitWordToFitWidthRecursion");o(nK,"splitLineToFitWidth");o(CD,"splitLineToFitWidthRecursion")});function aK(t,e){e&&t.attr("style",e)}async function H8e(t,e,r,n,i=!1){let a=t.append("foreignObject");a.attr("width",`${10*r}px`),a.attr("height",`${10*r}px`);let s=a.append("xhtml:div"),l=e.label;e.label&&pi(e.label)&&(l=await mh(e.label.replace(Ze.lineBreakRegex,`
448 +`),me()));let u=e.isNode?"nodeLabel":"edgeLabel",h=s.append("span");h.html(l),aK(h,e.labelStyle),h.attr("class",`${u} ${n}`),aK(s,e.labelStyle),s.style("display","table-cell"),s.style("white-space","nowrap"),s.style("line-height","1.5"),s.style("max-width",r+"px"),s.style("text-align","center"),s.attr("xmlns","http://www.w3.org/1999/xhtml"),i&&s.attr("class","labelBkg");let f=s.node().getBoundingClientRect();return f.width===r&&(s.style("display","table"),s.style("white-space","break-spaces"),s.style("width",r+"px"),f=s.node().getBoundingClientRect()),a.node()}function AD(t,e,r){return t.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",e*r-.1+"em").attr("dy",r+"em")}function W8e(t,e,r){let n=t.append("text"),i=AD(n,1,e);_D(i,r);let a=i.node().getComputedTextLength();return n.remove(),a}function sK(t,e,r){let n=t.append("text"),i=AD(n,1,e);_D(i,[{content:r,type:"normal"}]);let a=i.node()?.getBoundingClientRect();return a&&n.remove(),a}function q8e(t,e,r,n=!1){let a=e.append("g"),s=a.insert("rect").attr("class","background").attr("style","stroke: none"),l=a.append("text").attr("y","-10.1"),u=0;for(let h of r){let f=o(p=>W8e(a,1.1,p)<=t,"checkWidth"),d=f(h)?[h]:nK(h,f);for(let p of d){let m=AD(l,u,1.1);_D(m,p),u++}}if(n){let h=l.node().getBBox(),f=2;return s.attr("x",h.x-f).attr("y",h.y-f).attr("width",h.width+2*f).attr("height",h.height+2*f),a.node()}else return l.node()}function _D(t,e){t.text(""),e.forEach((r,n)=>{let i=t.append("tspan").attr("font-style",r.type==="em"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",r.type==="strong"?"bold":"normal");n===0?i.text(r.content):i.text(" "+r.content)})}function DD(t){return t.replace(/fa[bklrs]?:fa-[\w-]+/g,e=>`<i class='${e.replace(":"," ")}'></i>`)}var Hn,to=N(()=>{"use strict";zt();gr();dr();vt();tK();ir();iK();o(aK,"applyStyle");o(H8e,"addHtmlSpan");o(AD,"createTspan");o(W8e,"computeWidthOfText");o(sK,"computeDimensionOfText");o(q8e,"createFormattedText");o(_D,"updateTextContentAndStyles");o(DD,"replaceIconSubstring");Hn=o(async(t,e="",{style:r="",isTitle:n=!1,classes:i="",useHtmlLabels:a=!0,isNode:s=!0,width:l=200,addSvgBackground:u=!1}={},h)=>{if(Y.debug("XYZ createText",e,r,n,i,a,s,"addSvgBackground: ",u),a){let f=eK(e,h),d=DD(na(f)),p=e.replace(/\\\\/g,"\\"),m={isNode:s,label:pi(e)?p:d,labelStyle:r.replace("fill:","color:")};return await H8e(t,m,l,i,u)}else{let f=e.replace(/<br\s*\/?>/g,"<br/>"),d=Jj(f.replace("<br>","<br/>"),h),p=q8e(l,t,d,e?u:!1);if(s){/stroke:/.exec(r)&&(r=r.replace("stroke:","lineColor:"));let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ge(p).attr("style",m)}else{let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/background:/g,"fill:");Ge(p).select("rect").attr("style",m.replace(/background:/g,"fill:"));let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ge(p).select("text").attr("style",g)}return p}},"createText")});function Xt(t){let e=t.map((r,n)=>`${n===0?"M":"L"}${r.x},${r.y}`);return e.push("Z"),e.join(" ")}function Fo(t,e,r,n,i,a){let s=[],u=r-t,h=n-e,f=u/a,d=2*Math.PI/f,p=e+h/2;for(let m=0;m<=50;m++){let g=m/50,y=t+g*u,v=p+i*Math.sin(d*(y-t));s.push({x:y,y:v})}return s}function Lw(t,e,r,n,i,a){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d<n;d++){let p=l+d*f,m=t+r*Math.cos(p),g=e+r*Math.sin(p);s.push({x:-m,y:-g})}return s}var pt,Dw,je,ht,Ft=N(()=>{"use strict";to();zt();dr();Ya();gr();ir();pt=o(async(t,e,r)=>{let n,i=e.useHtmlLabels||fr(me()?.htmlLabels);r?n=r:n="node default";let a=t.insert("g").attr("class",n).attr("id",e.domId||e.id),s=a.insert("g").attr("class","label").attr("style",$n(e.labelStyle)),l;e.label===void 0?l="":l=typeof e.label=="string"?e.label:e.label[0];let u=await Hn(s,Tr(na(l),me()),{useHtmlLabels:i,width:e.width||me().flowchart?.wrappingWidth,cssClasses:"markdown-node-label",style:e.labelStyle,addSvgBackground:!!e.icon||!!e.img}),h=u.getBBox(),f=(e?.padding??0)/2;if(i){let d=u.children[0],p=Ge(u),m=d.getElementsByTagName("img");if(m){let g=l.replace(/<img[^>]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=me().fontSize?me().fontSize:window.getComputedStyle(document.body).fontSize,w=5,[C=or.fontSize]=Bo(b),T=C*w+"px";y.style.minWidth=T,y.style.maxWidth=T}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}return i?s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"):s.attr("transform","translate(0, "+-h.height/2+")"),e.centerLabel&&s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),s.insert("rect",":first-child"),{shapeSvg:a,bbox:h,halfPadding:f,label:s}},"labelHelper"),Dw=o(async(t,e,r)=>{let n=r.useHtmlLabels||fr(me()?.flowchart?.htmlLabels),i=t.insert("g").attr("class","label").attr("style",r.labelStyle||""),a=await Hn(i,Tr(na(e),me()),{useHtmlLabels:n,width:r.width||me()?.flowchart?.wrappingWidth,style:r.labelStyle,addSvgBackground:!!r.icon||!!r.img}),s=a.getBBox(),l=r.padding/2;if(fr(me()?.flowchart?.htmlLabels)){let u=a.children[0],h=Ge(a);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}return n?i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"):i.attr("transform","translate(0, "+-s.height/2+")"),r.centerLabel&&i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),i.insert("rect",":first-child"),{shapeSvg:t,bbox:s,halfPadding:l,label:i}},"insertLabel"),je=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds"),ht=o((t,e)=>(t.look==="handDrawn"?"rough-node":"node")+" "+t.cssClasses+" "+(e||""),"getNodeClasses");o(Xt,"createPathFromPoints");o(Fo,"generateFullSineWavePoints");o(Lw,"generateCirclePoints")});function Y8e(t,e){return t.intersect(e)}var oK,lK=N(()=>{"use strict";o(Y8e,"intersectNode");oK=Y8e});function X8e(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x<i&&(h=-h);var f=Math.abs(e*r*l/u);return n.y<a&&(f=-f),{x:i+h,y:a+f}}var Rw,LD=N(()=>{"use strict";o(X8e,"intersectEllipse");Rw=X8e});function j8e(t,e,r){return Rw(t,e,e,r)}var cK,uK=N(()=>{"use strict";LD();o(j8e,"intersectCircle");cK=j8e});function K8e(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&hK(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&hK(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function hK(t,e){return t*e>0}var fK,dK=N(()=>{"use strict";o(K8e,"intersectLine");o(hK,"sameSign");fK=K8e});function Q8e(t,e,r){let n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(f){s=Math.min(s,f.x),l=Math.min(l,f.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));let u=n-t.width/2-s,h=i-t.height/2-l;for(let f=0;f<e.length;f++){let d=e[f],p=e[f<e.length-1?f+1:0],m=fK(t,r,{x:u+d.x,y:h+d.y},{x:u+p.x,y:h+p.y});m&&a.push(m)}return a.length?(a.length>1&&a.sort(function(f,d){let p=f.x-r.x,m=f.y-r.y,g=Math.sqrt(p*p+m*m),y=d.x-r.x,v=d.y-r.y,x=Math.sqrt(y*y+v*v);return g<x?-1:g===x?0:1}),a[0]):t}var pK,mK=N(()=>{"use strict";dK();o(Q8e,"intersectPolygon");pK=Q8e});var Z8e,Vh,RD=N(()=>{"use strict";Z8e=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),Vh=Z8e});var Ye,Ht=N(()=>{"use strict";lK();uK();LD();mK();RD();Ye={node:oK,circle:cK,ellipse:Rw,polygon:pK,rect:Vh}});var gK,mc,J8e,ND,Qe,Ke,Ut=N(()=>{"use strict";zt();gK=o(t=>{let{handDrawnSeed:e}=me();return{fill:t,hachureAngle:120,hachureGap:4,fillWeight:2,roughness:.7,stroke:t,seed:e}},"solidStateFill"),mc=o(t=>{let e=J8e([...t.cssCompiledStyles||[],...t.cssStyles||[]]);return{stylesMap:e,stylesArray:[...e]}},"compileStyles"),J8e=o(t=>{let e=new Map;return t.forEach(r=>{let[n,i]=r.split(":");e.set(n.trim(),i?.trim())}),e},"styles2Map"),ND=o(t=>t==="color"||t==="font-size"||t==="font-family"||t==="font-weight"||t==="font-style"||t==="text-decoration"||t==="text-align"||t==="text-transform"||t==="line-height"||t==="letter-spacing"||t==="word-spacing"||t==="text-shadow"||t==="text-overflow"||t==="white-space"||t==="word-wrap"||t==="word-break"||t==="overflow-wrap"||t==="hyphens","isLabelStyle"),Qe=o(t=>{let{stylesArray:e}=mc(t),r=[],n=[],i=[],a=[];return e.forEach(s=>{let l=s[0];ND(l)?r.push(s.join(":")+" !important"):(n.push(s.join(":")+" !important"),l.includes("stroke")&&i.push(s.join(":")+" !important"),l==="fill"&&a.push(s.join(":")+" !important"))}),{labelStyles:r.join(";"),nodeStyles:n.join(";"),stylesArray:e,borderStyles:i,backgroundStyles:a}},"styles2String"),Ke=o((t,e)=>{let{themeVariables:r,handDrawnSeed:n}=me(),{nodeBorder:i,mainBkg:a}=r,{stylesMap:s}=mc(t);return Object.assign({roughness:.7,fill:s.get("fill")||a,fillStyle:"hachure",fillWeight:4,hachureGap:5.2,stroke:s.get("stroke")||i,seed:n,strokeWidth:s.get("stroke-width")?.replace("px","")||1.3,fillLineDash:[0,0]},e)},"userNodeOverrides")});function MD(t,e,r){if(t&&t.length){let[n,i]=e,a=Math.PI/180*r,s=Math.cos(a),l=Math.sin(a);for(let u of t){let[h,f]=u;u[0]=(h-n)*s-(f-i)*l+n,u[1]=(h-n)*l+(f-i)*s+i}}}function e_e(t,e){return t[0]===e[0]&&t[1]===e[1]}function t_e(t,e,r,n=1){let i=r,a=Math.max(e,.1),s=t[0]&&t[0][0]&&typeof t[0][0]=="number"?[t]:t,l=[0,0];if(i)for(let h of s)MD(h,l,i);let u=function(h,f,d){let p=[];for(let b of h){let w=[...b];e_e(w[0],w[w.length-1])||w.push([w[0][0],w[0][1]]),w.length>2&&p.push(w)}let m=[];f=Math.max(f,.1);let g=[];for(let b of p)for(let w=0;w<b.length-1;w++){let C=b[w],T=b[w+1];if(C[1]!==T[1]){let E=Math.min(C[1],T[1]);g.push({ymin:E,ymax:Math.max(C[1],T[1]),x:E===C[1]?C[0]:T[0],islope:(T[0]-C[0])/(T[1]-C[1])})}}if(g.sort((b,w)=>b.ymin<w.ymin?-1:b.ymin>w.ymin?1:b.x<w.x?-1:b.x>w.x?1:b.ymax===w.ymax?0:(b.ymax-w.ymax)/Math.abs(b.ymax-w.ymax)),!g.length)return m;let y=[],v=g[0].ymin,x=0;for(;y.length||g.length;){if(g.length){let b=-1;for(let w=0;w<g.length&&!(g[w].ymin>v);w++)b=w;g.splice(0,b+1).forEach(w=>{y.push({s:v,edge:w})})}if(y=y.filter(b=>!(b.edge.ymax<=v)),y.sort((b,w)=>b.edge.x===w.edge.x?0:(b.edge.x-w.edge.x)/Math.abs(b.edge.x-w.edge.x)),(d!==1||x%f==0)&&y.length>1)for(let b=0;b<y.length;b+=2){let w=b+1;if(w>=y.length)break;let C=y[b].edge,T=y[w].edge;m.push([[Math.round(C.x),v],[Math.round(T.x),v]])}v+=d,y.forEach(b=>{b.edge.x=b.edge.x+d*b.edge.islope}),x++}return m}(s,a,n);if(i){for(let h of s)MD(h,l,-i);(function(h,f,d){let p=[];h.forEach(m=>p.push(...m)),MD(p,f,d)})(u,l,-i)}return u}function x2(t,e){var r;let n=e.hachureAngle+90,i=e.hachureGap;i<0&&(i=4*e.strokeWidth),i=Math.round(Math.max(i,.1));let a=1;return e.roughness>=1&&(((r=e.randomizer)===null||r===void 0?void 0:r.next())||Math.random())>.7&&(a=i),t_e(t,i,n,a||1)}function zw(t){let e=t[0],r=t[1];return Math.sqrt(Math.pow(e[0]-r[0],2)+Math.pow(e[1]-r[1],2))}function OD(t,e){return t.type===e}function jD(t){let e=[],r=function(s){let l=new Array;for(;s!=="";)if(s.match(/^([ \t\r\n,]+)/))s=s.substr(RegExp.$1.length);else if(s.match(/^([aAcChHlLmMqQsStTvVzZ])/))l[l.length]={type:r_e,text:RegExp.$1},s=s.substr(RegExp.$1.length);else{if(!s.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))return[];l[l.length]={type:ID,text:`${parseFloat(RegExp.$1)}`},s=s.substr(RegExp.$1.length)}return l[l.length]={type:yK,text:""},l}(t),n="BOD",i=0,a=r[i];for(;!OD(a,yK);){let s=0,l=[];if(n==="BOD"){if(a.text!=="M"&&a.text!=="m")return jD("M0,0"+t);i++,s=Nw[a.text],n=a.text}else OD(a,ID)?s=Nw[n]:(i++,s=Nw[a.text],n=a.text);if(!(i+s<r.length))throw new Error("Path data ended short");for(let u=i;u<i+s;u++){let h=r[u];if(!OD(h,ID))throw new Error("Param not a number: "+n+","+h.text);l[l.length]=+h.text}if(typeof Nw[n]!="number")throw new Error("Bad segment: "+n);{let u={key:n,data:l};e.push(u),i+=s,a=r[i],n==="M"&&(n="L"),n==="m"&&(n="l")}}return e}function SK(t){let e=0,r=0,n=0,i=0,a=[];for(let{key:s,data:l}of t)switch(s){case"M":a.push({key:"M",data:[...l]}),[e,r]=l,[n,i]=l;break;case"m":e+=l[0],r+=l[1],a.push({key:"M",data:[e,r]}),n=e,i=r;break;case"L":a.push({key:"L",data:[...l]}),[e,r]=l;break;case"l":e+=l[0],r+=l[1],a.push({key:"L",data:[e,r]});break;case"C":a.push({key:"C",data:[...l]}),e=l[4],r=l[5];break;case"c":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"C",data:u}),e=u[4],r=u[5];break}case"Q":a.push({key:"Q",data:[...l]}),e=l[2],r=l[3];break;case"q":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"Q",data:u}),e=u[2],r=u[3];break}case"A":a.push({key:"A",data:[...l]}),e=l[5],r=l[6];break;case"a":e+=l[5],r+=l[6],a.push({key:"A",data:[l[0],l[1],l[2],l[3],l[4],e,r]});break;case"H":a.push({key:"H",data:[...l]}),e=l[0];break;case"h":e+=l[0],a.push({key:"H",data:[e]});break;case"V":a.push({key:"V",data:[...l]}),r=l[0];break;case"v":r+=l[0],a.push({key:"V",data:[r]});break;case"S":a.push({key:"S",data:[...l]}),e=l[2],r=l[3];break;case"s":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"S",data:u}),e=u[2],r=u[3];break}case"T":a.push({key:"T",data:[...l]}),e=l[0],r=l[1];break;case"t":e+=l[0],r+=l[1],a.push({key:"T",data:[e,r]});break;case"Z":case"z":a.push({key:"Z",data:[]}),e=n,r=i}return a}function CK(t){let e=[],r="",n=0,i=0,a=0,s=0,l=0,u=0;for(let{key:h,data:f}of t){switch(h){case"M":e.push({key:"M",data:[...f]}),[n,i]=f,[a,s]=f;break;case"C":e.push({key:"C",data:[...f]}),n=f[4],i=f[5],l=f[2],u=f[3];break;case"L":e.push({key:"L",data:[...f]}),[n,i]=f;break;case"H":n=f[0],e.push({key:"L",data:[n,i]});break;case"V":i=f[0],e.push({key:"L",data:[n,i]});break;case"S":{let d=0,p=0;r==="C"||r==="S"?(d=n+(n-l),p=i+(i-u)):(d=n,p=i),e.push({key:"C",data:[d,p,...f]}),l=f[0],u=f[1],n=f[2],i=f[3];break}case"T":{let[d,p]=f,m=0,g=0;r==="Q"||r==="T"?(m=n+(n-l),g=i+(i-u)):(m=n,g=i);let y=n+2*(m-n)/3,v=i+2*(g-i)/3,x=d+2*(m-d)/3,b=p+2*(g-p)/3;e.push({key:"C",data:[y,v,x,b,d,p]}),l=m,u=g,n=d,i=p;break}case"Q":{let[d,p,m,g]=f,y=n+2*(d-n)/3,v=i+2*(p-i)/3,x=m+2*(d-m)/3,b=g+2*(p-g)/3;e.push({key:"C",data:[y,v,x,b,m,g]}),l=d,u=p,n=m,i=g;break}case"A":{let d=Math.abs(f[0]),p=Math.abs(f[1]),m=f[2],g=f[3],y=f[4],v=f[5],x=f[6];d===0||p===0?(e.push({key:"C",data:[n,i,v,x,v,x]}),n=v,i=x):(n!==v||i!==x)&&(AK(n,i,v,x,d,p,m,g,y).forEach(function(b){e.push({key:"C",data:b})}),n=v,i=x);break}case"Z":e.push({key:"Z",data:[]}),n=a,i=s}r=h}return e}function g2(t,e,r){return[t*Math.cos(r)-e*Math.sin(r),t*Math.sin(r)+e*Math.cos(r)]}function AK(t,e,r,n,i,a,s,l,u,h){let f=(d=s,Math.PI*d/180);var d;let p=[],m=0,g=0,y=0,v=0;if(h)[m,g,y,v]=h;else{[t,e]=g2(t,e,-f),[r,n]=g2(r,n,-f);let L=(t-r)/2,R=(e-n)/2,O=L*L/(i*i)+R*R/(a*a);O>1&&(O=Math.sqrt(O),i*=O,a*=O);let M=i*i,B=a*a,F=M*B-M*R*R-B*L*L,P=M*R*R+B*L*L,z=(l===u?-1:1)*Math.sqrt(Math.abs(F/P));y=z*i*R/a+(t+r)/2,v=z*-a*L/i+(e+n)/2,m=Math.asin(parseFloat(((e-v)/a).toFixed(9))),g=Math.asin(parseFloat(((n-v)/a).toFixed(9))),t<y&&(m=Math.PI-m),r<y&&(g=Math.PI-g),m<0&&(m=2*Math.PI+m),g<0&&(g=2*Math.PI+g),u&&m>g&&(m-=2*Math.PI),!u&&g>m&&(g-=2*Math.PI)}let x=g-m;if(Math.abs(x)>120*Math.PI/180){let L=g,R=r,O=n;g=u&&g>m?m+120*Math.PI/180*1:m+120*Math.PI/180*-1,p=AK(r=y+i*Math.cos(g),n=v+a*Math.sin(g),R,O,i,a,s,0,u,[g,L,y,v])}x=g-m;let b=Math.cos(m),w=Math.sin(m),C=Math.cos(g),T=Math.sin(g),E=Math.tan(x/4),A=4/3*i*E,S=4/3*a*E,_=[t,e],I=[t+A*w,e-S*b],D=[r+A*T,n-S*C],k=[r,n];if(I[0]=2*_[0]-I[0],I[1]=2*_[1]-I[1],h)return[I,D,k].concat(p);{p=[I,D,k].concat(p);let L=[];for(let R=0;R<p.length;R+=3){let O=g2(p[R][0],p[R][1],f),M=g2(p[R+1][0],p[R+1][1],f),B=g2(p[R+2][0],p[R+2][1],f);L.push([O[0],O[1],M[0],M[1],B[0],B[1]])}return L}}function _K(t,e,r,n,i){return{type:"path",ops:Uh(t,e,r,n,i)}}function Ow(t,e,r){let n=(t||[]).length;if(n>2){let i=[];for(let a=0;a<n-1;a++)i.push(...Uh(t[a][0],t[a][1],t[a+1][0],t[a+1][1],r));return e&&i.push(...Uh(t[n-1][0],t[n-1][1],t[0][0],t[0][1],r)),{type:"path",ops:i}}return n===2?_K(t[0][0],t[0][1],t[1][0],t[1][1],r):{type:"path",ops:[]}}function i_e(t,e,r,n,i){return function(a,s){return Ow(a,!0,s)}([[t,e],[t+r,e],[t+r,e+n],[t,e+n]],i)}function vK(t,e){if(t.length){let r=typeof t[0][0]=="number"?[t]:t,n=Mw(r[0],1*(1+.2*e.roughness),e),i=e.disableMultiStroke?[]:Mw(r[0],1.5*(1+.22*e.roughness),wK(e));for(let a=1;a<r.length;a++){let s=r[a];if(s.length){let l=Mw(s,1*(1+.2*e.roughness),e),u=e.disableMultiStroke?[]:Mw(s,1.5*(1+.22*e.roughness),wK(e));for(let h of l)h.op!=="move"&&n.push(h);for(let h of u)h.op!=="move"&&i.push(h)}}return{type:"path",ops:n.concat(i)}}return{type:"path",ops:[]}}function DK(t,e,r){let n=Math.sqrt(2*Math.PI*Math.sqrt((Math.pow(t/2,2)+Math.pow(e/2,2))/2)),i=Math.ceil(Math.max(r.curveStepCount,r.curveStepCount/Math.sqrt(200)*n)),a=2*Math.PI/i,s=Math.abs(t/2),l=Math.abs(e/2),u=1-r.curveFitting;return s+=nr(s*u,r),l+=nr(l*u,r),{increment:a,rx:s,ry:l}}function HD(t,e,r,n){let[i,a]=TK(n.increment,t,e,n.rx,n.ry,1,n.increment*Bw(.1,Bw(.4,1,r),r),r),s=Fw(i,null,r);if(!r.disableMultiStroke&&r.roughness!==0){let[l]=TK(n.increment,t,e,n.rx,n.ry,1.5,0,r),u=Fw(l,null,r);s=s.concat(u)}return{estimatedPoints:a,opset:{type:"path",ops:s}}}function xK(t,e,r,n,i,a,s,l,u){let h=t,f=e,d=Math.abs(r/2),p=Math.abs(n/2);d+=nr(.01*d,u),p+=nr(.01*p,u);let m=i,g=a;for(;m<0;)m+=2*Math.PI,g+=2*Math.PI;g-m>2*Math.PI&&(m=0,g=2*Math.PI);let y=2*Math.PI/u.curveStepCount,v=Math.min(y/2,(g-m)/2),x=kK(v,h,f,d,p,m,g,1,u);if(!u.disableMultiStroke){let b=kK(v,h,f,d,p,m,g,1.5,u);x.push(...b)}return s&&(l?x.push(...Uh(h,f,h+d*Math.cos(m),f+p*Math.sin(m),u),...Uh(h,f,h+d*Math.cos(g),f+p*Math.sin(g),u)):x.push({op:"lineTo",data:[h,f]},{op:"lineTo",data:[h+d*Math.cos(m),f+p*Math.sin(m)]})),{type:"path",ops:x}}function bK(t,e){let r=CK(SK(jD(t))),n=[],i=[0,0],a=[0,0];for(let{key:s,data:l}of r)switch(s){case"M":a=[l[0],l[1]],i=[l[0],l[1]];break;case"L":n.push(...Uh(a[0],a[1],l[0],l[1],e)),a=[l[0],l[1]];break;case"C":{let[u,h,f,d,p,m]=l;n.push(...a_e(u,h,f,d,p,m,a,e)),a=[p,m];break}case"Z":n.push(...Uh(a[0],a[1],i[0],i[1],e)),a=[i[0],i[1]]}return{type:"path",ops:n}}function PD(t,e){let r=[];for(let n of t)if(n.length){let i=e.maxRandomnessOffset||0,a=n.length;if(a>2){r.push({op:"move",data:[n[0][0]+nr(i,e),n[0][1]+nr(i,e)]});for(let s=1;s<a;s++)r.push({op:"lineTo",data:[n[s][0]+nr(i,e),n[s][1]+nr(i,e)]})}}return{type:"fillPath",ops:r}}function dm(t,e){return function(r,n){let i=r.fillStyle||"hachure";if(!Rs[i])switch(i){case"zigzag":Rs[i]||(Rs[i]=new FD(n));break;case"cross-hatch":Rs[i]||(Rs[i]=new $D(n));break;case"dots":Rs[i]||(Rs[i]=new zD(n));break;case"dashed":Rs[i]||(Rs[i]=new GD(n));break;case"zigzag-line":Rs[i]||(Rs[i]=new VD(n));break;default:i="hachure",Rs[i]||(Rs[i]=new v2(n))}return Rs[i]}(e,n_e).fillPolygons(t,e)}function wK(t){let e=Object.assign({},t);return e.randomizer=void 0,t.seed&&(e.seed=t.seed+1),e}function LK(t){return t.randomizer||(t.randomizer=new UD(t.seed||0)),t.randomizer.next()}function Bw(t,e,r,n=1){return r.roughness*n*(LK(r)*(e-t)+t)}function nr(t,e,r=1){return Bw(-t,t,e,r)}function Uh(t,e,r,n,i,a=!1){let s=a?i.disableMultiStrokeFill:i.disableMultiStroke,l=WD(t,e,r,n,i,!0,!1);if(s)return l;let u=WD(t,e,r,n,i,!0,!0);return l.concat(u)}function WD(t,e,r,n,i,a,s){let l=Math.pow(t-r,2)+Math.pow(e-n,2),u=Math.sqrt(l),h=1;h=u<200?1:u>500?.4:-.0016668*u+1.233334;let f=i.maxRandomnessOffset||0;f*f*100>l&&(f=u/10);let d=f/2,p=.2+.2*LK(i),m=i.bowing*i.maxRandomnessOffset*(n-e)/200,g=i.bowing*i.maxRandomnessOffset*(t-r)/200;m=nr(m,i,h),g=nr(g,i,h);let y=[],v=o(()=>nr(d,i,h),"M"),x=o(()=>nr(f,i,h),"k"),b=i.preserveVertices;return a&&(s?y.push({op:"move",data:[t+(b?0:v()),e+(b?0:v())]}):y.push({op:"move",data:[t+(b?0:nr(f,i,h)),e+(b?0:nr(f,i,h))]})),s?y.push({op:"bcurveTo",data:[m+t+(r-t)*p+v(),g+e+(n-e)*p+v(),m+t+2*(r-t)*p+v(),g+e+2*(n-e)*p+v(),r+(b?0:v()),n+(b?0:v())]}):y.push({op:"bcurveTo",data:[m+t+(r-t)*p+x(),g+e+(n-e)*p+x(),m+t+2*(r-t)*p+x(),g+e+2*(n-e)*p+x(),r+(b?0:x()),n+(b?0:x())]}),y}function Mw(t,e,r){if(!t.length)return[];let n=[];n.push([t[0][0]+nr(e,r),t[0][1]+nr(e,r)]),n.push([t[0][0]+nr(e,r),t[0][1]+nr(e,r)]);for(let i=1;i<t.length;i++)n.push([t[i][0]+nr(e,r),t[i][1]+nr(e,r)]),i===t.length-1&&n.push([t[i][0]+nr(e,r),t[i][1]+nr(e,r)]);return Fw(n,null,r)}function Fw(t,e,r){let n=t.length,i=[];if(n>3){let a=[],s=1-r.curveTightness;i.push({op:"move",data:[t[1][0],t[1][1]]});for(let l=1;l+2<n;l++){let u=t[l];a[0]=[u[0],u[1]],a[1]=[u[0]+(s*t[l+1][0]-s*t[l-1][0])/6,u[1]+(s*t[l+1][1]-s*t[l-1][1])/6],a[2]=[t[l+1][0]+(s*t[l][0]-s*t[l+2][0])/6,t[l+1][1]+(s*t[l][1]-s*t[l+2][1])/6],a[3]=[t[l+1][0],t[l+1][1]],i.push({op:"bcurveTo",data:[a[1][0],a[1][1],a[2][0],a[2][1],a[3][0],a[3][1]]})}if(e&&e.length===2){let l=r.maxRandomnessOffset;i.push({op:"lineTo",data:[e[0]+nr(l,r),e[1]+nr(l,r)]})}}else n===3?(i.push({op:"move",data:[t[1][0],t[1][1]]}),i.push({op:"bcurveTo",data:[t[1][0],t[1][1],t[2][0],t[2][1],t[2][0],t[2][1]]})):n===2&&i.push(...WD(t[0][0],t[0][1],t[1][0],t[1][1],r,!0,!0));return i}function TK(t,e,r,n,i,a,s,l){let u=[],h=[];if(l.roughness===0){t/=4,h.push([e+n*Math.cos(-t),r+i*Math.sin(-t)]);for(let f=0;f<=2*Math.PI;f+=t){let d=[e+n*Math.cos(f),r+i*Math.sin(f)];u.push(d),h.push(d)}h.push([e+n*Math.cos(0),r+i*Math.sin(0)]),h.push([e+n*Math.cos(t),r+i*Math.sin(t)])}else{let f=nr(.5,l)-Math.PI/2;h.push([nr(a,l)+e+.9*n*Math.cos(f-t),nr(a,l)+r+.9*i*Math.sin(f-t)]);let d=2*Math.PI+f-.01;for(let p=f;p<d;p+=t){let m=[nr(a,l)+e+n*Math.cos(p),nr(a,l)+r+i*Math.sin(p)];u.push(m),h.push(m)}h.push([nr(a,l)+e+n*Math.cos(f+2*Math.PI+.5*s),nr(a,l)+r+i*Math.sin(f+2*Math.PI+.5*s)]),h.push([nr(a,l)+e+.98*n*Math.cos(f+s),nr(a,l)+r+.98*i*Math.sin(f+s)]),h.push([nr(a,l)+e+.9*n*Math.cos(f+.5*s),nr(a,l)+r+.9*i*Math.sin(f+.5*s)])}return[h,u]}function kK(t,e,r,n,i,a,s,l,u){let h=a+nr(.1,u),f=[];f.push([nr(l,u)+e+.9*n*Math.cos(h-t),nr(l,u)+r+.9*i*Math.sin(h-t)]);for(let d=h;d<=s;d+=t)f.push([nr(l,u)+e+n*Math.cos(d),nr(l,u)+r+i*Math.sin(d)]);return f.push([e+n*Math.cos(s),r+i*Math.sin(s)]),f.push([e+n*Math.cos(s),r+i*Math.sin(s)]),Fw(f,null,u)}function a_e(t,e,r,n,i,a,s,l){let u=[],h=[l.maxRandomnessOffset||1,(l.maxRandomnessOffset||1)+.3],f=[0,0],d=l.disableMultiStroke?1:2,p=l.preserveVertices;for(let m=0;m<d;m++)m===0?u.push({op:"move",data:[s[0],s[1]]}):u.push({op:"move",data:[s[0]+(p?0:nr(h[0],l)),s[1]+(p?0:nr(h[0],l))]}),f=p?[i,a]:[i+nr(h[m],l),a+nr(h[m],l)],u.push({op:"bcurveTo",data:[t+nr(h[m],l),e+nr(h[m],l),r+nr(h[m],l),n+nr(h[m],l),f[0],f[1]]});return u}function y2(t){return[...t]}function EK(t,e=0){let r=t.length;if(r<3)throw new Error("A curve must have at least three points.");let n=[];if(r===3)n.push(y2(t[0]),y2(t[1]),y2(t[2]),y2(t[2]));else{let i=[];i.push(t[0],t[0]);for(let l=1;l<t.length;l++)i.push(t[l]),l===t.length-1&&i.push(t[l]);let a=[],s=1-e;n.push(y2(i[0]));for(let l=1;l+2<i.length;l++){let u=i[l];a[0]=[u[0],u[1]],a[1]=[u[0]+(s*i[l+1][0]-s*i[l-1][0])/6,u[1]+(s*i[l+1][1]-s*i[l-1][1])/6],a[2]=[i[l+1][0]+(s*i[l][0]-s*i[l+2][0])/6,i[l+1][1]+(s*i[l][1]-s*i[l+2][1])/6],a[3]=[i[l+1][0],i[l+1][1]],n.push(a[1],a[2],a[3])}}return n}function Pw(t,e){return Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2)}function s_e(t,e,r){let n=Pw(e,r);if(n===0)return Pw(t,e);let i=((t[0]-e[0])*(r[0]-e[0])+(t[1]-e[1])*(r[1]-e[1]))/n;return i=Math.max(0,Math.min(1,i)),Pw(t,Od(e,r,i))}function Od(t,e,r){return[t[0]+(e[0]-t[0])*r,t[1]+(e[1]-t[1])*r]}function qD(t,e,r,n){let i=n||[];if(function(l,u){let h=l[u+0],f=l[u+1],d=l[u+2],p=l[u+3],m=3*f[0]-2*h[0]-p[0];m*=m;let g=3*f[1]-2*h[1]-p[1];g*=g;let y=3*d[0]-2*p[0]-h[0];y*=y;let v=3*d[1]-2*p[1]-h[1];return v*=v,m<y&&(m=y),g<v&&(g=v),m+g}(t,e)<r){let l=t[e+0];i.length?(a=i[i.length-1],s=l,Math.sqrt(Pw(a,s))>1&&i.push(l)):i.push(l),i.push(t[e+3])}else{let u=t[e+0],h=t[e+1],f=t[e+2],d=t[e+3],p=Od(u,h,.5),m=Od(h,f,.5),g=Od(f,d,.5),y=Od(p,m,.5),v=Od(m,g,.5),x=Od(y,v,.5);qD([u,p,y,x],0,r,i),qD([x,v,g,d],0,r,i)}var a,s;return i}function o_e(t,e){return $w(t,0,t.length,e)}function $w(t,e,r,n,i){let a=i||[],s=t[e],l=t[r-1],u=0,h=1;for(let f=e+1;f<r-1;++f){let d=s_e(t[f],s,l);d>u&&(u=d,h=f)}return Math.sqrt(u)>n?($w(t,e,h+1,n,a),$w(t,h,r,n,a)):(a.length||a.push(s),a.push(l)),a}function BD(t,e=.15,r){let n=[],i=(t.length-1)/3;for(let a=0;a<i;a++)qD(t,3*a,e,n);return r&&r>0?$w(n,0,n.length,r):n}var v2,FD,$D,zD,GD,VD,Rs,UD,r_e,ID,yK,Nw,n_e,ro,pm,YD,Iw,XD,Xe,Wt=N(()=>{"use strict";o(MD,"t");o(e_e,"e");o(t_e,"s");o(x2,"n");v2=class{static{o(this,"o")}constructor(e){this.helper=e}fillPolygons(e,r){return this._fillPolygons(e,r)}_fillPolygons(e,r){let n=x2(e,r);return{type:"fillSketch",ops:this.renderLines(n,r)}}renderLines(e,r){let n=[];for(let i of e)n.push(...this.helper.doubleLineOps(i[0][0],i[0][1],i[1][0],i[1][1],r));return n}};o(zw,"a");FD=class extends v2{static{o(this,"h")}fillPolygons(e,r){let n=r.hachureGap;n<0&&(n=4*r.strokeWidth),n=Math.max(n,.1);let i=x2(e,Object.assign({},r,{hachureGap:n})),a=Math.PI/180*r.hachureAngle,s=[],l=.5*n*Math.cos(a),u=.5*n*Math.sin(a);for(let[h,f]of i)zw([h,f])&&s.push([[h[0]-l,h[1]+u],[...f]],[[h[0]+l,h[1]-u],[...f]]);return{type:"fillSketch",ops:this.renderLines(s,r)}}},$D=class extends v2{static{o(this,"r")}fillPolygons(e,r){let n=this._fillPolygons(e,r),i=Object.assign({},r,{hachureAngle:r.hachureAngle+90}),a=this._fillPolygons(e,i);return n.ops=n.ops.concat(a.ops),n}},zD=class{static{o(this,"i")}constructor(e){this.helper=e}fillPolygons(e,r){let n=x2(e,r=Object.assign({},r,{hachureAngle:0}));return this.dotsOnLines(n,r)}dotsOnLines(e,r){let n=[],i=r.hachureGap;i<0&&(i=4*r.strokeWidth),i=Math.max(i,.1);let a=r.fillWeight;a<0&&(a=r.strokeWidth/2);let s=i/4;for(let l of e){let u=zw(l),h=u/i,f=Math.ceil(h)-1,d=u-f*i,p=(l[0][0]+l[1][0])/2-i/4,m=Math.min(l[0][1],l[1][1]);for(let g=0;g<f;g++){let y=m+d+g*i,v=p-s+2*Math.random()*s,x=y-s+2*Math.random()*s,b=this.helper.ellipse(v,x,a,a,r);n.push(...b.ops)}}return{type:"fillSketch",ops:n}}},GD=class{static{o(this,"c")}constructor(e){this.helper=e}fillPolygons(e,r){let n=x2(e,r);return{type:"fillSketch",ops:this.dashedLine(n,r)}}dashedLine(e,r){let n=r.dashOffset<0?r.hachureGap<0?4*r.strokeWidth:r.hachureGap:r.dashOffset,i=r.dashGap<0?r.hachureGap<0?4*r.strokeWidth:r.hachureGap:r.dashGap,a=[];return e.forEach(s=>{let l=zw(s),u=Math.floor(l/(n+i)),h=(l+i-u*(n+i))/2,f=s[0],d=s[1];f[0]>d[0]&&(f=s[1],d=s[0]);let p=Math.atan((d[1]-f[1])/(d[0]-f[0]));for(let m=0;m<u;m++){let g=m*(n+i),y=g+n,v=[f[0]+g*Math.cos(p)+h*Math.cos(p),f[1]+g*Math.sin(p)+h*Math.sin(p)],x=[f[0]+y*Math.cos(p)+h*Math.cos(p),f[1]+y*Math.sin(p)+h*Math.sin(p)];a.push(...this.helper.doubleLineOps(v[0],v[1],x[0],x[1],r))}}),a}},VD=class{static{o(this,"l")}constructor(e){this.helper=e}fillPolygons(e,r){let n=r.hachureGap<0?4*r.strokeWidth:r.hachureGap,i=r.zigzagOffset<0?n:r.zigzagOffset,a=x2(e,r=Object.assign({},r,{hachureGap:n+i}));return{type:"fillSketch",ops:this.zigzagLines(a,i,r)}}zigzagLines(e,r,n){let i=[];return e.forEach(a=>{let s=zw(a),l=Math.round(s/(2*r)),u=a[0],h=a[1];u[0]>h[0]&&(u=a[1],h=a[0]);let f=Math.atan((h[1]-u[1])/(h[0]-u[0]));for(let d=0;d<l;d++){let p=2*d*r,m=2*(d+1)*r,g=Math.sqrt(2*Math.pow(r,2)),y=[u[0]+p*Math.cos(f),u[1]+p*Math.sin(f)],v=[u[0]+m*Math.cos(f),u[1]+m*Math.sin(f)],x=[y[0]+g*Math.cos(f+Math.PI/4),y[1]+g*Math.sin(f+Math.PI/4)];i.push(...this.helper.doubleLineOps(y[0],y[1],x[0],x[1],n),...this.helper.doubleLineOps(x[0],x[1],v[0],v[1],n))}}),i}},Rs={},UD=class{static{o(this,"p")}constructor(e){this.seed=e}next(){return this.seed?(2**31-1&(this.seed=Math.imul(48271,this.seed)))/2**31:Math.random()}},r_e=0,ID=1,yK=2,Nw={A:7,a:7,C:6,c:6,H:1,h:1,L:2,l:2,M:2,m:2,Q:4,q:4,S:4,s:4,T:2,t:2,V:1,v:1,Z:0,z:0};o(OD,"k");o(jD,"b");o(SK,"y");o(CK,"m");o(g2,"w");o(AK,"x");n_e={randOffset:o(function(t,e){return nr(t,e)},"randOffset"),randOffsetWithRange:o(function(t,e,r){return Bw(t,e,r)},"randOffsetWithRange"),ellipse:o(function(t,e,r,n,i){let a=DK(r,n,i);return HD(t,e,i,a).opset},"ellipse"),doubleLineOps:o(function(t,e,r,n,i){return Uh(t,e,r,n,i,!0)},"doubleLineOps")};o(_K,"v");o(Ow,"S");o(i_e,"O");o(vK,"L");o(DK,"T");o(HD,"D");o(xK,"A");o(bK,"_");o(PD,"I");o(dm,"C");o(wK,"z");o(LK,"W");o(Bw,"E");o(nr,"G");o(Uh,"$");o(WD,"R");o(Mw,"j");o(Fw,"q");o(TK,"F");o(kK,"V");o(a_e,"Z");o(y2,"Q");o(EK,"H");o(Pw,"N");o(s_e,"B");o(Od,"J");o(qD,"K");o(o_e,"U");o($w,"X");o(BD,"Y");ro="none",pm=class{static{o(this,"et")}constructor(e){this.defaultOptions={maxRandomnessOffset:2,roughness:1,bowing:1,stroke:"#000",strokeWidth:1,curveTightness:0,curveFitting:.95,curveStepCount:9,fillStyle:"hachure",fillWeight:-1,hachureAngle:-41,hachureGap:-1,dashOffset:-1,dashGap:-1,zigzagOffset:-1,seed:0,disableMultiStroke:!1,disableMultiStrokeFill:!1,preserveVertices:!1,fillShapeRoughnessGain:.8},this.config=e||{},this.config.options&&(this.defaultOptions=this._o(this.config.options))}static newSeed(){return Math.floor(Math.random()*2**31)}_o(e){return e?Object.assign({},this.defaultOptions,e):this.defaultOptions}_d(e,r,n){return{shape:e,sets:r||[],options:n||this.defaultOptions}}line(e,r,n,i,a){let s=this._o(a);return this._d("line",[_K(e,r,n,i,s)],s)}rectangle(e,r,n,i,a){let s=this._o(a),l=[],u=i_e(e,r,n,i,s);if(s.fill){let h=[[e,r],[e+n,r],[e+n,r+i],[e,r+i]];s.fillStyle==="solid"?l.push(PD([h],s)):l.push(dm([h],s))}return s.stroke!==ro&&l.push(u),this._d("rectangle",l,s)}ellipse(e,r,n,i,a){let s=this._o(a),l=[],u=DK(n,i,s),h=HD(e,r,s,u);if(s.fill)if(s.fillStyle==="solid"){let f=HD(e,r,s,u).opset;f.type="fillPath",l.push(f)}else l.push(dm([h.estimatedPoints],s));return s.stroke!==ro&&l.push(h.opset),this._d("ellipse",l,s)}circle(e,r,n,i){let a=this.ellipse(e,r,n,n,i);return a.shape="circle",a}linearPath(e,r){let n=this._o(r);return this._d("linearPath",[Ow(e,!1,n)],n)}arc(e,r,n,i,a,s,l=!1,u){let h=this._o(u),f=[],d=xK(e,r,n,i,a,s,l,!0,h);if(l&&h.fill)if(h.fillStyle==="solid"){let p=Object.assign({},h);p.disableMultiStroke=!0;let m=xK(e,r,n,i,a,s,!0,!1,p);m.type="fillPath",f.push(m)}else f.push(function(p,m,g,y,v,x,b){let w=p,C=m,T=Math.abs(g/2),E=Math.abs(y/2);T+=nr(.01*T,b),E+=nr(.01*E,b);let A=v,S=x;for(;A<0;)A+=2*Math.PI,S+=2*Math.PI;S-A>2*Math.PI&&(A=0,S=2*Math.PI);let _=(S-A)/b.curveStepCount,I=[];for(let D=A;D<=S;D+=_)I.push([w+T*Math.cos(D),C+E*Math.sin(D)]);return I.push([w+T*Math.cos(S),C+E*Math.sin(S)]),I.push([w,C]),dm([I],b)}(e,r,n,i,a,s,h));return h.stroke!==ro&&f.push(d),this._d("arc",f,h)}curve(e,r){let n=this._o(r),i=[],a=vK(e,n);if(n.fill&&n.fill!==ro)if(n.fillStyle==="solid"){let s=vK(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(s.ops)})}else{let s=[],l=e;if(l.length){let u=typeof l[0][0]=="number"?[l]:l;for(let h of u)h.length<3?s.push(...h):h.length===3?s.push(...BD(EK([h[0],h[0],h[1],h[2]]),10,(1+n.roughness)/2)):s.push(...BD(EK(h),10,(1+n.roughness)/2))}s.length&&i.push(dm([s],n))}return n.stroke!==ro&&i.push(a),this._d("curve",i,n)}polygon(e,r){let n=this._o(r),i=[],a=Ow(e,!0,n);return n.fill&&(n.fillStyle==="solid"?i.push(PD([e],n)):i.push(dm([e],n))),n.stroke!==ro&&i.push(a),this._d("polygon",i,n)}path(e,r){let n=this._o(r),i=[];if(!e)return this._d("path",i,n);e=(e||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");let a=n.fill&&n.fill!=="transparent"&&n.fill!==ro,s=n.stroke!==ro,l=!!(n.simplification&&n.simplification<1),u=function(f,d,p){let m=CK(SK(jD(f))),g=[],y=[],v=[0,0],x=[],b=o(()=>{x.length>=4&&y.push(...BD(x,d)),x=[]},"i"),w=o(()=>{b(),y.length&&(g.push(y),y=[])},"c");for(let{key:T,data:E}of m)switch(T){case"M":w(),v=[E[0],E[1]],y.push(v);break;case"L":b(),y.push([E[0],E[1]]);break;case"C":if(!x.length){let A=y.length?y[y.length-1]:v;x.push([A[0],A[1]])}x.push([E[0],E[1]]),x.push([E[2],E[3]]),x.push([E[4],E[5]]);break;case"Z":b(),y.push([v[0],v[1]])}if(w(),!p)return g;let C=[];for(let T of g){let E=o_e(T,p);E.length&&C.push(E)}return C}(e,1,l?4-4*(n.simplification||1):(1+n.roughness)/2),h=bK(e,n);if(a)if(n.fillStyle==="solid")if(u.length===1){let f=bK(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(f.ops)})}else i.push(PD(u,n));else i.push(dm(u,n));return s&&(l?u.forEach(f=>{i.push(Ow(f,!1,n))}):i.push(h)),this._d("path",i,n)}opsToPath(e,r){let n="";for(let i of e.ops){let a=typeof r=="number"&&r>=0?i.data.map(s=>+s.toFixed(r)):i.data;switch(i.op){case"move":n+=`M${a[0]} ${a[1]} `;break;case"bcurveTo":n+=`C${a[0]} ${a[1]}, ${a[2]} ${a[3]}, ${a[4]} ${a[5]} `;break;case"lineTo":n+=`L${a[0]} ${a[1]} `}}return n.trim()}toPaths(e){let r=e.sets||[],n=e.options||this.defaultOptions,i=[];for(let a of r){let s=null;switch(a.type){case"path":s={d:this.opsToPath(a),stroke:n.stroke,strokeWidth:n.strokeWidth,fill:ro};break;case"fillPath":s={d:this.opsToPath(a),stroke:ro,strokeWidth:0,fill:n.fill||ro};break;case"fillSketch":s=this.fillSketch(a,n)}s&&i.push(s)}return i}fillSketch(e,r){let n=r.fillWeight;return n<0&&(n=r.strokeWidth/2),{d:this.opsToPath(e),stroke:r.fill||ro,strokeWidth:n,fill:ro}}_mergedShape(e){return e.filter((r,n)=>n===0||r.op!=="move")}},YD=class{static{o(this,"st")}constructor(e,r){this.canvas=e,this.ctx=this.canvas.getContext("2d"),this.gen=new pm(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.ctx,a=e.options.fixedDecimalPlaceDigits;for(let s of r)switch(s.type){case"path":i.save(),i.strokeStyle=n.stroke==="none"?"transparent":n.stroke,i.lineWidth=n.strokeWidth,n.strokeLineDash&&i.setLineDash(n.strokeLineDash),n.strokeLineDashOffset&&(i.lineDashOffset=n.strokeLineDashOffset),this._drawToContext(i,s,a),i.restore();break;case"fillPath":{i.save(),i.fillStyle=n.fill||"";let l=e.shape==="curve"||e.shape==="polygon"||e.shape==="path"?"evenodd":"nonzero";this._drawToContext(i,s,a,l),i.restore();break}case"fillSketch":this.fillSketch(i,s,n)}}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2),e.save(),n.fillLineDash&&e.setLineDash(n.fillLineDash),n.fillLineDashOffset&&(e.lineDashOffset=n.fillLineDashOffset),e.strokeStyle=n.fill||"",e.lineWidth=i,this._drawToContext(e,r,n.fixedDecimalPlaceDigits),e.restore()}_drawToContext(e,r,n,i="nonzero"){e.beginPath();for(let a of r.ops){let s=typeof n=="number"&&n>=0?a.data.map(l=>+l.toFixed(n)):a.data;switch(a.op){case"move":e.moveTo(s[0],s[1]);break;case"bcurveTo":e.bezierCurveTo(s[0],s[1],s[2],s[3],s[4],s[5]);break;case"lineTo":e.lineTo(s[0],s[1])}}r.type==="fillPath"?e.fill(i):e.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s),s}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s),s}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s),s}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a),a}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n),n}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n),n}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h),h}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n),n}path(e,r){let n=this.gen.path(e,r);return this.draw(n),n}},Iw="http://www.w3.org/2000/svg",XD=class{static{o(this,"ot")}constructor(e,r){this.svg=e,this.gen=new pm(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.svg.ownerDocument||window.document,a=i.createElementNS(Iw,"g"),s=e.options.fixedDecimalPlaceDigits;for(let l of r){let u=null;switch(l.type){case"path":u=i.createElementNS(Iw,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke",n.stroke),u.setAttribute("stroke-width",n.strokeWidth+""),u.setAttribute("fill","none"),n.strokeLineDash&&u.setAttribute("stroke-dasharray",n.strokeLineDash.join(" ").trim()),n.strokeLineDashOffset&&u.setAttribute("stroke-dashoffset",`${n.strokeLineDashOffset}`);break;case"fillPath":u=i.createElementNS(Iw,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke","none"),u.setAttribute("stroke-width","0"),u.setAttribute("fill",n.fill||""),e.shape!=="curve"&&e.shape!=="polygon"||u.setAttribute("fill-rule","evenodd");break;case"fillSketch":u=this.fillSketch(i,l,n)}u&&a.appendChild(u)}return a}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2);let a=e.createElementNS(Iw,"path");return a.setAttribute("d",this.opsToPath(r,n.fixedDecimalPlaceDigits)),a.setAttribute("stroke",n.fill||""),a.setAttribute("stroke-width",i+""),a.setAttribute("fill","none"),n.fillLineDash&&a.setAttribute("stroke-dasharray",n.fillLineDash.join(" ").trim()),n.fillLineDashOffset&&a.setAttribute("stroke-dashoffset",`${n.fillLineDashOffset}`),a}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(e,r){return this.gen.opsToPath(e,r)}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s)}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s)}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s)}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a)}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n)}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n)}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h)}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n)}path(e,r){let n=this.gen.path(e,r);return this.draw(n)}},Xe={canvas:o((t,e)=>new YD(t,e),"canvas"),svg:o((t,e)=>new XD(t,e),"svg"),generator:o(t=>new pm(t),"generator"),newSeed:o(()=>pm.newSeed(),"newSeed")}});function RK(t,e){let{labelStyles:r}=Qe(e);e.labelStyle=r;let n=ht(e),i=n;n||(i="anchor");let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=1,{cssStyles:l}=e,u=Xe.svg(a),h=Ke(e,{fill:"black",stroke:"none",fillStyle:"solid"});e.look!=="handDrawn"&&(h.roughness=0);let f=u.circle(0,0,s*2,h),d=a.insert(()=>f,":first-child");return d.attr("class","anchor").attr("style",$n(l)),je(e,d),e.intersect=function(p){return Y.info("Circle intersect",e,s,p),Ye.circle(e,s,p)},a}var NK=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();ir();o(RK,"anchor")});function MK(t,e,r,n,i,a,s){let u=(t+r)/2,h=(e+n)/2,f=Math.atan2(n-e,r-t),d=(r-t)/2,p=(n-e)/2,m=d/i,g=p/a,y=Math.sqrt(m**2+g**2);if(y>1)throw new Error("The given radii are too small to create an arc between the points.");let v=Math.sqrt(1-y**2),x=u+v*a*Math.sin(f)*(s?-1:1),b=h-v*i*Math.cos(f)*(s?-1:1),w=Math.atan2((e-b)/a,(t-x)/i),T=Math.atan2((n-b)/a,(r-x)/i)-w;s&&T<0&&(T+=2*Math.PI),!s&&T>0&&(T-=2*Math.PI);let E=[];for(let A=0;A<20;A++){let S=A/19,_=w+S*T,I=x+i*Math.cos(_),D=b+a*Math.sin(_);E.push({x:I,y:D})}return E}async function IK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.width+e.padding+20,l=a.height+e.padding,u=l/2,h=u/(2.5+l/50),{cssStyles:f}=e,d=[{x:s/2,y:-l/2},{x:-s/2,y:-l/2},...MK(-s/2,-l/2,-s/2,l/2,h,u,!1),{x:s/2,y:l/2},...MK(s/2,l/2,s/2,-l/2,h,u,!0)],p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Xt(d),y=p.path(g,m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(${h/2}, 0)`),je(e,v),e.intersect=function(x){return Ye.polygon(e,d,x)},i}var OK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(MK,"generateArcPoints");o(IK,"bowTieRect")});function La(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var _u=N(()=>{"use strict";o(La,"insertPolygonShape")});async function PK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.height+e.padding,l=12,u=a.width+e.padding+l,h=0,f=u,d=-s,p=0,m=[{x:h+l,y:d},{x:f,y:d},{x:f,y:p},{x:h,y:p},{x:h,y:d+l},{x:h+l,y:d}],g,{cssStyles:y}=e;if(e.look==="handDrawn"){let v=Xe.svg(i),x=Ke(e,{}),b=Xt(m),w=v.path(b,x);g=i.insert(()=>w,":first-child").attr("transform",`translate(${-u/2}, ${s/2})`),y&&g.attr("style",y)}else g=La(i,u,s,m);return n&&g.attr("style",n),je(e,g),e.intersect=function(v){return Ye.polygon(e,m,v)},i}var BK=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();Ft();o(PK,"card")});function FK(t,e){let{nodeStyles:r}=Qe(e);e.label="";let n=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),{cssStyles:i}=e,a=Math.max(28,e.width??0),s=[{x:0,y:a/2},{x:a/2,y:0},{x:0,y:-a/2},{x:-a/2,y:0}],l=Xe.svg(n),u=Ke(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=Xt(s),f=l.path(h,u),d=n.insert(()=>f,":first-child");return i&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",i),r&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",r),e.width=28,e.height=28,e.intersect=function(p){return Ye.polygon(e,s,p)},n}var $K=N(()=>{"use strict";Ht();Wt();Ut();Ft();o(FK,"choice")});async function zK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await pt(t,e,ht(e)),l=a.width/2+s,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=Xe.svg(i),d=Ke(e,{}),p=f.circle(0,0,l*2,d);u=i.insert(()=>p,":first-child"),u.attr("class","basic label-container").attr("style",$n(h))}else u=i.insert("circle",":first-child").attr("class","basic label-container").attr("style",n).attr("r",l).attr("cx",0).attr("cy",0);return je(e,u),e.intersect=function(f){return Y.info("Circle intersect",e,l,f),Ye.circle(e,l,f)},i}var GK=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();ir();o(zK,"circle")});function l_e(t){let e=Math.cos(Math.PI/4),r=Math.sin(Math.PI/4),n=t*2,i={x:n/2*e,y:n/2*r},a={x:-(n/2)*e,y:n/2*r},s={x:-(n/2)*e,y:-(n/2)*r},l={x:n/2*e,y:-(n/2)*r};return`M ${a.x},${a.y} L ${l.x},${l.y}
449 + M ${i.x},${i.y} L ${s.x},${s.y}`}function VK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r,e.label="";let i=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),a=Math.max(30,e?.width??0),{cssStyles:s}=e,l=Xe.svg(i),u=Ke(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=l.circle(0,0,a*2,u),f=l_e(a),d=l.path(f,u),p=i.insert(()=>h,":first-child");return p.insert(()=>d),s&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",s),n&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",n),je(e,p),e.intersect=function(m){return Y.info("crossedCircle intersect",e,{radius:a,point:m}),Ye.circle(e,a,m)},i}var UK=N(()=>{"use strict";vt();Ft();Ut();Wt();Ht();o(l_e,"createLine");o(VK,"crossedCircle")});function Hh(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d<n;d++){let p=l+d*f,m=t+r*Math.cos(p),g=e+r*Math.sin(p);s.push({x:-m,y:-g})}return s}async function HK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+(e.padding??0),u=a.height+(e.padding??0),h=Math.max(5,u*.1),{cssStyles:f}=e,d=[...Hh(l/2,-u/2,h,30,-90,0),{x:-l/2-h,y:h},...Hh(l/2+h*2,-h,h,20,-180,-270),...Hh(l/2+h*2,h,h,20,-90,-180),{x:-l/2-h,y:-u/2},...Hh(l/2,u/2,h,20,0,90)],p=[{x:l/2,y:-u/2-h},{x:-l/2,y:-u/2-h},...Hh(l/2,-u/2,h,20,-90,0),{x:-l/2-h,y:-h},...Hh(l/2+l*.1,-h,h,20,-180,-270),...Hh(l/2+l*.1,h,h,20,-90,-180),{x:-l/2-h,y:u/2},...Hh(l/2,u/2,h,20,0,90),{x:-l/2,y:u/2+h},{x:l/2,y:u/2+h}],m=Xe.svg(i),g=Ke(e,{fill:"none"});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let v=Xt(d).replace("Z",""),x=m.path(v,g),b=Xt(p),w=m.path(b,{...g}),C=i.insert("g",":first-child");return C.insert(()=>w,":first-child").attr("stroke-opacity",0),C.insert(()=>x,":first-child"),C.attr("class","text"),f&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(${h}, 0)`),s.attr("transform",`translate(${-l/2+h-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,C),e.intersect=function(T){return Ye.polygon(e,p,T)},i}var WK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(Hh,"generateCirclePoints");o(HK,"curlyBraceLeft")});function Wh(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d<n;d++){let p=l+d*f,m=t+r*Math.cos(p),g=e+r*Math.sin(p);s.push({x:m,y:g})}return s}async function qK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+(e.padding??0),u=a.height+(e.padding??0),h=Math.max(5,u*.1),{cssStyles:f}=e,d=[...Wh(l/2,-u/2,h,20,-90,0),{x:l/2+h,y:-h},...Wh(l/2+h*2,-h,h,20,-180,-270),...Wh(l/2+h*2,h,h,20,-90,-180),{x:l/2+h,y:u/2},...Wh(l/2,u/2,h,20,0,90)],p=[{x:-l/2,y:-u/2-h},{x:l/2,y:-u/2-h},...Wh(l/2,-u/2,h,20,-90,0),{x:l/2+h,y:-h},...Wh(l/2+h*2,-h,h,20,-180,-270),...Wh(l/2+h*2,h,h,20,-90,-180),{x:l/2+h,y:u/2},...Wh(l/2,u/2,h,20,0,90),{x:l/2,y:u/2+h},{x:-l/2,y:u/2+h}],m=Xe.svg(i),g=Ke(e,{fill:"none"});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let v=Xt(d).replace("Z",""),x=m.path(v,g),b=Xt(p),w=m.path(b,{...g}),C=i.insert("g",":first-child");return C.insert(()=>w,":first-child").attr("stroke-opacity",0),C.insert(()=>x,":first-child"),C.attr("class","text"),f&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(${-h}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,C),e.intersect=function(T){return Ye.polygon(e,p,T)},i}var YK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(Wh,"generateCirclePoints");o(qK,"curlyBraceRight")});function Ra(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d<n;d++){let p=l+d*f,m=t+r*Math.cos(p),g=e+r*Math.sin(p);s.push({x:-m,y:-g})}return s}async function XK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+(e.padding??0),u=a.height+(e.padding??0),h=Math.max(5,u*.1),{cssStyles:f}=e,d=[...Ra(l/2,-u/2,h,30,-90,0),{x:-l/2-h,y:h},...Ra(l/2+h*2,-h,h,20,-180,-270),...Ra(l/2+h*2,h,h,20,-90,-180),{x:-l/2-h,y:-u/2},...Ra(l/2,u/2,h,20,0,90)],p=[...Ra(-l/2+h+h/2,-u/2,h,20,-90,-180),{x:l/2-h/2,y:h},...Ra(-l/2-h/2,-h,h,20,0,90),...Ra(-l/2-h/2,h,h,20,-90,0),{x:l/2-h/2,y:-h},...Ra(-l/2+h+h/2,u/2,h,30,-180,-270)],m=[{x:l/2,y:-u/2-h},{x:-l/2,y:-u/2-h},...Ra(l/2,-u/2,h,20,-90,0),{x:-l/2-h,y:-h},...Ra(l/2+h*2,-h,h,20,-180,-270),...Ra(l/2+h*2,h,h,20,-90,-180),{x:-l/2-h,y:u/2},...Ra(l/2,u/2,h,20,0,90),{x:-l/2,y:u/2+h},{x:l/2-h-h/2,y:u/2+h},...Ra(-l/2+h+h/2,-u/2,h,20,-90,-180),{x:l/2-h/2,y:h},...Ra(-l/2-h/2,-h,h,20,0,90),...Ra(-l/2-h/2,h,h,20,-90,0),{x:l/2-h/2,y:-h},...Ra(-l/2+h+h/2,u/2,h,30,-180,-270)],g=Xe.svg(i),y=Ke(e,{fill:"none"});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let x=Xt(d).replace("Z",""),b=g.path(x,y),C=Xt(p).replace("Z",""),T=g.path(C,y),E=Xt(m),A=g.path(E,{...y}),S=i.insert("g",":first-child");return S.insert(()=>A,":first-child").attr("stroke-opacity",0),S.insert(()=>b,":first-child"),S.insert(()=>T,":first-child"),S.attr("class","text"),f&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(${h-h/4}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,S),e.intersect=function(_){return Ye.polygon(e,m,_)},i}var jK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(Ra,"generateCirclePoints");o(XK,"curlyBraces")});async function KK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=80,l=20,u=Math.max(s,(a.width+(e.padding??0)*2)*1.25,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=u,y=h,v=g-f,x=y/4,b=[{x:v,y:0},{x,y:0},{x:0,y:y/2},{x,y},{x:v,y},...Lw(-v,-y/2,f,50,270,90)],w=Xt(b),C=p.path(w,m),T=i.insert(()=>C,":first-child");return T.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",n),T.attr("transform",`translate(${-u/2}, ${-h/2})`),je(e,T),e.intersect=function(E){return Ye.polygon(e,b,E)},i}var QK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(KK,"curvedTrapezoid")});async function ZK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+e.padding,e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+e.padding,e.height??0),d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Xe.svg(i),g=u_e(0,0,l,f,u,h),y=h_e(0,h,l,f,u,h),v=m.path(g,Ke(e,{})),x=m.path(y,Ke(e,{fill:"none"}));d=i.insert(()=>x,":first-child"),d=i.insert(()=>v,":first-child"),d.attr("class","basic label-container"),p&&d.attr("style",p)}else{let m=c_e(0,0,l,f,u,h);d=i.insert("path",":first-child").attr("d",m).attr("class","basic label-container").attr("style",$n(p)).attr("style",n)}return d.attr("label-offset-y",h),d.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),je(e,d),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+(e.padding??0)/1.5-(a.y-(a.top??0))})`),e.intersect=function(m){let g=Ye.rect(e,m),y=g.x-(e.x??0);if(u!=0&&(Math.abs(y)<(e.width??0)/2||Math.abs(y)==(e.width??0)/2&&Math.abs(g.y-(e.y??0))>(e.height??0)/2-h)){let v=h*h*(1-y*y/(u*u));v>0&&(v=Math.sqrt(v)),v=h-v,m.y-(e.y??0)>0&&(v=-v),g.y+=v}return g},i}var c_e,u_e,h_e,JK=N(()=>{"use strict";Ft();Ht();Ut();Wt();ir();c_e=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createCylinderPathD"),u_e=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createOuterCylinderPathD"),h_e=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(ZK,"cylinder")});async function eQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+e.padding,u=a.height+e.padding,h=u*.2,f=-l/2,d=-u/2-h/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d+h},{x:-f,y:d+h},{x:-f,y:-d},{x:f,y:-d},{x:f,y:d},{x:-f,y:d},{x:-f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${f+(e.padding??0)/2-(a.x-(a.left??0))}, ${d+h+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.rect(e,b)},i}var tQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(eQ,"dividedRectangle")});async function rQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await pt(t,e,ht(e)),u=a.width/2+s+5,h=a.width/2+s,f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{roughness:.2,strokeWidth:2.5}),g=Ke(e,{roughness:.2,strokeWidth:1.5}),y=p.circle(0,0,u*2,m),v=p.circle(0,0,h*2,g);f=i.insert("g",":first-child"),f.attr("class",$n(e.cssClasses)).attr("style",$n(d)),f.node()?.appendChild(y),f.node()?.appendChild(v)}else{f=i.insert("g",":first-child");let p=f.insert("circle",":first-child"),m=f.insert("circle");f.attr("class","basic label-container").attr("style",n),p.attr("class","outer-circle").attr("style",n).attr("r",u).attr("cx",0).attr("cy",0),m.attr("class","inner-circle").attr("style",n).attr("r",h).attr("cx",0).attr("cy",0)}return je(e,f),e.intersect=function(p){return Y.info("DoubleCircle intersect",e,u,p),Ye.circle(e,u,p)},i}var nQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();ir();o(rQ,"doublecircle")});function iQ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.label="",e.labelStyle=n;let a=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),s=7,{cssStyles:l}=e,u=Xe.svg(a),{nodeBorder:h}=r,f=Ke(e,{fillStyle:"solid"});e.look!=="handDrawn"&&(f.roughness=0);let d=u.circle(0,0,s*2,f),p=a.insert(()=>d,":first-child");return p.selectAll("path").attr("style",`fill: ${h} !important;`),l&&l.length>0&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",l),i&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",i),je(e,p),e.intersect=function(m){return Y.info("filledCircle intersect",e,{radius:s,point:m}),Ye.circle(e,s,m)},a}var aQ=N(()=>{"use strict";Wt();vt();Ht();Ut();Ft();o(iQ,"filledCircle")});async function sQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+(e.padding??0),u=l+a.height,h=l+a.height,f=[{x:0,y:-u},{x:h,y:-u},{x:h/2,y:0}],{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Xt(f),y=p.path(g,m),v=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`);return d&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),e.width=l,e.height=u,je(e,v),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${-u/2+(e.padding??0)/2+(a.y-(a.top??0))})`),e.intersect=function(x){return Y.info("Triangle intersect",e,f,x),Ye.polygon(e,f,x)},i}var oQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();Ft();o(sQ,"flippedTriangle")});function lQ(t,e,{dir:r,config:{state:n,themeVariables:i}}){let{nodeStyles:a}=Qe(e);e.label="";let s=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),{cssStyles:l}=e,u=Math.max(70,e?.width??0),h=Math.max(10,e?.height??0);r==="LR"&&(u=Math.max(10,e?.width??0),h=Math.max(70,e?.height??0));let f=-1*u/2,d=-1*h/2,p=Xe.svg(s),m=Ke(e,{stroke:i.lineColor,fill:i.lineColor});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=p.rectangle(f,d,u,h,m),y=s.insert(()=>g,":first-child");l&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",l),a&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",a),je(e,y);let v=n?.padding??0;return e.width&&e.height&&(e.width+=v/2||0,e.height+=v/2||0),e.intersect=function(x){return Ye.rect(e,x)},s}var cQ=N(()=>{"use strict";Wt();Ht();Ut();Ft();o(lQ,"forkJoin")});async function uQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let i=80,a=50,{shapeSvg:s,bbox:l}=await pt(t,e,ht(e)),u=Math.max(i,l.width+(e.padding??0)*2,e?.width??0),h=Math.max(a,l.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=Xe.svg(s),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-u/2,y:-h/2},{x:u/2-f,y:-h/2},...Lw(-u/2+f,0,f,50,90,270),{x:u/2-f,y:h/2},{x:-u/2,y:h/2}],y=Xt(g),v=p.path(y,m),x=s.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),je(e,x),e.intersect=function(b){return Y.info("Pill intersect",e,{radius:f,point:b}),Ye.polygon(e,g,b)},s}var hQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();o(uQ,"halfRoundedRectangle")});async function fQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=4,l=a.height+e.padding,u=l/s,h=a.width+2*u+e.padding,f=[{x:u,y:0},{x:h-u,y:0},{x:h,y:-l/2},{x:h-u,y:-l},{x:u,y:-l},{x:0,y:-l/2}],d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Xe.svg(i),g=Ke(e,{}),y=f_e(0,0,h,l,u),v=m.path(y,g);d=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${l/2})`),p&&d.attr("style",p)}else d=La(i,h,l,f);return n&&d.attr("style",n),e.width=h,e.height=l,je(e,d),e.intersect=function(m){return Ye.polygon(e,f,m)},i}var f_e,dQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();f_e=o((t,e,r,n,i)=>[`M${t+i},${e}`,`L${t+r-i},${e}`,`L${t+r},${e-n/2}`,`L${t+r-i},${e-n}`,`L${t+i},${e-n}`,`L${t},${e-n/2}`,"Z"].join(" "),"createHexagonPathD");o(fQ,"hexagon")});async function pQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.label="",e.labelStyle=r;let{shapeSvg:i}=await pt(t,e,ht(e)),a=Math.max(30,e?.width??0),s=Math.max(30,e?.height??0),{cssStyles:l}=e,u=Xe.svg(i),h=Ke(e,{});e.look!=="handDrawn"&&(h.roughness=0,h.fillStyle="solid");let f=[{x:0,y:0},{x:a,y:0},{x:0,y:s},{x:a,y:s}],d=Xt(f),p=u.path(d,h),m=i.insert(()=>p,":first-child");return m.attr("class","basic label-container"),l&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",l),n&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",n),m.attr("transform",`translate(${-a/2}, ${-s/2})`),je(e,m),e.intersect=function(g){return Y.info("Pill intersect",e,{points:f}),Ye.polygon(e,f,g)},i}var mQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();o(pQ,"hourglass")});async function gQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await pt(t,e,"icon-shape default"),p=e.pos==="t",m=l,g=l,{nodeBorder:y}=r,{stylesMap:v}=mc(e),x=-g/2,b=-m/2,w=e.label?8:0,C=Xe.svg(h),T=Ke(e,{stroke:"none",fill:"none"});e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let E=C.rectangle(x,b,g,m,T),A=Math.max(g,f.width),S=m+f.height+w,_=C.rectangle(-A/2,-S/2,A,S,{...T,fill:"transparent",stroke:"none"}),I=h.insert(()=>E,":first-child"),D=h.insert(()=>_);if(e.icon){let k=h.append("g");k.html(`<g>${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}</g>`);let L=k.node().getBBox(),R=L.width,O=L.height,M=L.x,B=L.y;k.attr("transform",`translate(${-R/2-M},${p?f.height/2+w/2-O/2-B:-f.height/2-w/2-O/2-B})`),k.attr("style",`color: ${v.get("stroke")??y};`)}return d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${p?-S/2:S/2-f.height})`),I.attr("transform",`translate(0,${p?f.height/2+w/2:-f.height/2-w/2})`),je(e,D),e.intersect=function(k){if(Y.info("iconSquare intersect",e,k),!e.label)return Ye.rect(e,k);let L=e.x??0,R=e.y??0,O=e.height??0,M=[];return p?M=[{x:L-f.width/2,y:R-O/2},{x:L+f.width/2,y:R-O/2},{x:L+f.width/2,y:R-O/2+f.height+w},{x:L+g/2,y:R-O/2+f.height+w},{x:L+g/2,y:R+O/2},{x:L-g/2,y:R+O/2},{x:L-g/2,y:R-O/2+f.height+w},{x:L-f.width/2,y:R-O/2+f.height+w}]:M=[{x:L-g/2,y:R-O/2},{x:L+g/2,y:R-O/2},{x:L+g/2,y:R-O/2+m},{x:L+f.width/2,y:R-O/2+m},{x:L+f.width/2/2,y:R+O/2},{x:L-f.width/2,y:R+O/2},{x:L-f.width/2,y:R-O/2+m},{x:L-g/2,y:R-O/2+m}],Ye.polygon(e,M,k)},h}var yQ=N(()=>{"use strict";Wt();vt();tu();Ht();Ut();Ft();o(gQ,"icon")});async function vQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await pt(t,e,"icon-shape default"),p=20,m=e.label?8:0,g=e.pos==="t",{nodeBorder:y,mainBkg:v}=r,{stylesMap:x}=mc(e),b=Xe.svg(h),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let C=x.get("fill");w.stroke=C??v;let T=h.append("g");e.icon&&T.html(`<g>${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}</g>`);let E=T.node().getBBox(),A=E.width,S=E.height,_=E.x,I=E.y,D=Math.max(A,S)*Math.SQRT2+p*2,k=b.circle(0,0,D,w),L=Math.max(D,f.width),R=D+f.height+m,O=b.rectangle(-L/2,-R/2,L,R,{...w,fill:"transparent",stroke:"none"}),M=h.insert(()=>k,":first-child"),B=h.insert(()=>O);return T.attr("transform",`translate(${-A/2-_},${g?f.height/2+m/2-S/2-I:-f.height/2-m/2-S/2-I})`),T.attr("style",`color: ${x.get("stroke")??y};`),d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${g?-R/2:R/2-f.height})`),M.attr("transform",`translate(0,${g?f.height/2+m/2:-f.height/2-m/2})`),je(e,B),e.intersect=function(F){return Y.info("iconSquare intersect",e,F),Ye.rect(e,F)},h}var xQ=N(()=>{"use strict";Wt();vt();tu();Ht();Ut();Ft();o(vQ,"iconCircle")});var Na,qh=N(()=>{"use strict";Na=o((t,e,r,n,i)=>["M",t+i,e,"H",t+r-i,"A",i,i,0,0,1,t+r,e+i,"V",e+n-i,"A",i,i,0,0,1,t+r-i,e+n,"H",t+i,"A",i,i,0,0,1,t,e+n-i,"V",e+i,"A",i,i,0,0,1,t+i,e,"Z"].join(" "),"createRoundedRectPathD")});async function bQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await pt(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=mc(e),w=-y/2,C=-g/2,T=e.label?8:0,E=Xe.svg(h),A=Ke(e,{});e.look!=="handDrawn"&&(A.roughness=0,A.fillStyle="solid");let S=b.get("fill");A.stroke=S??x;let _=E.path(Na(w,C,y,g,5),A),I=Math.max(y,f.width),D=g+f.height+T,k=E.rectangle(-I/2,-D/2,I,D,{...A,fill:"transparent",stroke:"none"}),L=h.insert(()=>_,":first-child").attr("class","icon-shape2"),R=h.insert(()=>k);if(e.icon){let O=h.append("g");O.html(`<g>${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}</g>`);let M=O.node().getBBox(),B=M.width,F=M.height,P=M.x,z=M.y;O.attr("transform",`translate(${-B/2-P},${m?f.height/2+T/2-F/2-z:-f.height/2-T/2-F/2-z})`),O.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-D/2:D/2-f.height})`),L.attr("transform",`translate(0,${m?f.height/2+T/2:-f.height/2-T/2})`),je(e,R),e.intersect=function(O){if(Y.info("iconSquare intersect",e,O),!e.label)return Ye.rect(e,O);let M=e.x??0,B=e.y??0,F=e.height??0,P=[];return m?P=[{x:M-f.width/2,y:B-F/2},{x:M+f.width/2,y:B-F/2},{x:M+f.width/2,y:B-F/2+f.height+T},{x:M+y/2,y:B-F/2+f.height+T},{x:M+y/2,y:B+F/2},{x:M-y/2,y:B+F/2},{x:M-y/2,y:B-F/2+f.height+T},{x:M-f.width/2,y:B-F/2+f.height+T}]:P=[{x:M-y/2,y:B-F/2},{x:M+y/2,y:B-F/2},{x:M+y/2,y:B-F/2+g},{x:M+f.width/2,y:B-F/2+g},{x:M+f.width/2/2,y:B+F/2},{x:M-f.width/2,y:B+F/2},{x:M-f.width/2,y:B-F/2+g},{x:M-y/2,y:B-F/2+g}],Ye.polygon(e,P,O)},h}var wQ=N(()=>{"use strict";Wt();vt();tu();Ht();Ut();qh();Ft();o(bQ,"iconRounded")});async function TQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await pt(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=mc(e),w=-y/2,C=-g/2,T=e.label?8:0,E=Xe.svg(h),A=Ke(e,{});e.look!=="handDrawn"&&(A.roughness=0,A.fillStyle="solid");let S=b.get("fill");A.stroke=S??x;let _=E.path(Na(w,C,y,g,.1),A),I=Math.max(y,f.width),D=g+f.height+T,k=E.rectangle(-I/2,-D/2,I,D,{...A,fill:"transparent",stroke:"none"}),L=h.insert(()=>_,":first-child"),R=h.insert(()=>k);if(e.icon){let O=h.append("g");O.html(`<g>${await wo(e.icon,{height:l,width:l,fallbackPrefix:""})}</g>`);let M=O.node().getBBox(),B=M.width,F=M.height,P=M.x,z=M.y;O.attr("transform",`translate(${-B/2-P},${m?f.height/2+T/2-F/2-z:-f.height/2-T/2-F/2-z})`),O.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-D/2:D/2-f.height})`),L.attr("transform",`translate(0,${m?f.height/2+T/2:-f.height/2-T/2})`),je(e,R),e.intersect=function(O){if(Y.info("iconSquare intersect",e,O),!e.label)return Ye.rect(e,O);let M=e.x??0,B=e.y??0,F=e.height??0,P=[];return m?P=[{x:M-f.width/2,y:B-F/2},{x:M+f.width/2,y:B-F/2},{x:M+f.width/2,y:B-F/2+f.height+T},{x:M+y/2,y:B-F/2+f.height+T},{x:M+y/2,y:B+F/2},{x:M-y/2,y:B+F/2},{x:M-y/2,y:B-F/2+f.height+T},{x:M-f.width/2,y:B-F/2+f.height+T}]:P=[{x:M-y/2,y:B-F/2},{x:M+y/2,y:B-F/2},{x:M+y/2,y:B-F/2+g},{x:M+f.width/2,y:B-F/2+g},{x:M+f.width/2/2,y:B+F/2},{x:M-f.width/2,y:B+F/2},{x:M-f.width/2,y:B-F/2+g},{x:M-y/2,y:B-F/2+g}],Ye.polygon(e,P,O)},h}var kQ=N(()=>{"use strict";Wt();vt();tu();Ht();qh();Ut();Ft();o(TQ,"iconSquare")});async function EQ(t,e,{config:{flowchart:r}}){let n=new Image;n.src=e?.img??"",await n.decode();let i=Number(n.naturalWidth.toString().replace("px","")),a=Number(n.naturalHeight.toString().replace("px",""));e.imageAspectRatio=i/a;let{labelStyles:s}=Qe(e);e.labelStyle=s;let l=r?.wrappingWidth;e.defaultWidth=r?.wrappingWidth;let u=Math.max(e.label?l??0:0,e?.assetWidth??i),h=e.constraint==="on"&&e?.assetHeight?e.assetHeight*e.imageAspectRatio:u,f=e.constraint==="on"?h/e.imageAspectRatio:e?.assetHeight??a;e.width=Math.max(h,l??0);let{shapeSvg:d,bbox:p,label:m}=await pt(t,e,"image-shape default"),g=e.pos==="t",y=-h/2,v=-f/2,x=e.label?8:0,b=Xe.svg(d),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let C=b.rectangle(y,v,h,f,w),T=Math.max(h,p.width),E=f+p.height+x,A=b.rectangle(-T/2,-E/2,T,E,{...w,fill:"none",stroke:"none"}),S=d.insert(()=>C,":first-child"),_=d.insert(()=>A);if(e.img){let I=d.append("image");I.attr("href",e.img),I.attr("width",h),I.attr("height",f),I.attr("preserveAspectRatio","none"),I.attr("transform",`translate(${-h/2},${g?E/2-f:-E/2})`)}return m.attr("transform",`translate(${-p.width/2-(p.x-(p.left??0))},${g?-f/2-p.height/2-x/2:f/2-p.height/2+x/2})`),S.attr("transform",`translate(0,${g?p.height/2+x/2:-p.height/2-x/2})`),je(e,_),e.intersect=function(I){if(Y.info("iconSquare intersect",e,I),!e.label)return Ye.rect(e,I);let D=e.x??0,k=e.y??0,L=e.height??0,R=[];return g?R=[{x:D-p.width/2,y:k-L/2},{x:D+p.width/2,y:k-L/2},{x:D+p.width/2,y:k-L/2+p.height+x},{x:D+h/2,y:k-L/2+p.height+x},{x:D+h/2,y:k+L/2},{x:D-h/2,y:k+L/2},{x:D-h/2,y:k-L/2+p.height+x},{x:D-p.width/2,y:k-L/2+p.height+x}]:R=[{x:D-h/2,y:k-L/2},{x:D+h/2,y:k-L/2},{x:D+h/2,y:k-L/2+f},{x:D+p.width/2,y:k-L/2+f},{x:D+p.width/2/2,y:k+L/2},{x:D-p.width/2,y:k+L/2},{x:D-p.width/2,y:k-L/2+f},{x:D-h/2,y:k-L/2+f}],Ye.polygon(e,R,I)},d}var SQ=N(()=>{"use strict";Wt();vt();Ht();Ut();Ft();o(EQ,"imageSquare")});async function CQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=[{x:0,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:-3*l/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var AQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();o(CQ,"inv_trapezoid")});async function Du(t,e,r){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n;let{shapeSvg:a,bbox:s}=await pt(t,e,ht(e)),l=Math.max(s.width+r.labelPaddingX*2,e?.width||0),u=Math.max(s.height+r.labelPaddingY*2,e?.height||0),h=-l/2,f=-u/2,d,{rx:p,ry:m}=e,{cssStyles:g}=e;if(r?.rx&&r.ry&&(p=r.rx,m=r.ry),e.look==="handDrawn"){let y=Xe.svg(a),v=Ke(e,{}),x=p||m?y.path(Na(h,f,l,u,p||0),v):y.rectangle(h,f,l,u,v);d=a.insert(()=>x,":first-child"),d.attr("class","basic label-container").attr("style",$n(g))}else d=a.insert("rect",":first-child"),d.attr("class","basic label-container").attr("style",i).attr("rx",$n(p)).attr("ry",$n(m)).attr("x",h).attr("y",f).attr("width",l).attr("height",u);return je(e,d),e.intersect=function(y){return Ye.rect(e,y)},a}var mm=N(()=>{"use strict";Ft();Ht();qh();Ut();Wt();ir();o(Du,"drawRect")});async function _Q(t,e){let{shapeSvg:r,bbox:n,label:i}=await pt(t,e,"label"),a=r.insert("rect",":first-child");return a.attr("width",.1).attr("height",.1),r.attr("class","label edgeLabel"),i.attr("transform",`translate(${-(n.width/2)-(n.x-(n.left??0))}, ${-(n.height/2)-(n.y-(n.top??0))})`),je(e,a),e.intersect=function(u){return Ye.rect(e,u)},r}var DQ=N(()=>{"use strict";mm();Ft();Ht();o(_Q,"labelRect")});async function LQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:0,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:-(3*l)/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var RQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();o(LQ,"lean_left")});async function NQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:-3*l/6,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var MQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();o(NQ,"lean_right")});function IQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.label="",e.labelStyle=r;let i=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),{cssStyles:a}=e,s=Math.max(35,e?.width??0),l=Math.max(35,e?.height??0),u=7,h=[{x:s,y:0},{x:0,y:l+u/2},{x:s-2*u,y:l+u/2},{x:0,y:2*l},{x:s,y:l-u/2},{x:2*u,y:l-u/2}],f=Xe.svg(i),d=Ke(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=Xt(h),m=f.path(p,d),g=i.insert(()=>m,":first-child");return a&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",a),n&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",n),g.attr("transform",`translate(-${s/2},${-l})`),je(e,g),e.intersect=function(y){return Y.info("lightningBolt intersect",e,y),Ye.polygon(e,h,y)},i}var OQ=N(()=>{"use strict";vt();Ft();Ut();Wt();Ht();Ft();o(IQ,"lightningBolt")});async function PQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0),e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+(e.padding??0),e.height??0),d=f*.1,p,{cssStyles:m}=e;if(e.look==="handDrawn"){let g=Xe.svg(i),y=p_e(0,0,l,f,u,h,d),v=m_e(0,h,l,f,u,h),x=Ke(e,{}),b=g.path(y,x),w=g.path(v,x);i.insert(()=>w,":first-child").attr("class","line"),p=i.insert(()=>b,":first-child"),p.attr("class","basic label-container"),m&&p.attr("style",m)}else{let g=d_e(0,0,l,f,u,h,d);p=i.insert("path",":first-child").attr("d",g).attr("class","basic label-container").attr("style",$n(m)).attr("style",n)}return p.attr("label-offset-y",h),p.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),je(e,p),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),e.intersect=function(g){let y=Ye.rect(e,g),v=y.x-(e.x??0);if(u!=0&&(Math.abs(v)<(e.width??0)/2||Math.abs(v)==(e.width??0)/2&&Math.abs(y.y-(e.y??0))>(e.height??0)/2-h)){let x=h*h*(1-v*v/(u*u));x>0&&(x=Math.sqrt(x)),x=h-x,g.y-(e.y??0)>0&&(x=-x),y.y+=x}return y},i}var d_e,p_e,m_e,BQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();ir();d_e=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createCylinderPathD"),p_e=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createOuterCylinderPathD"),m_e=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(PQ,"linedCylinder")});async function FQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-l/2-l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:f/2},...Fo(-l/2-l/2*.1,f/2,l/2+l/2*.1,f/2,h,.8),{x:l/2+l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:-f/2},{x:-l/2,y:-f/2},{x:-l/2,y:f/2*1.1},{x:-l/2,y:-f/2}],y=p.polygon(g.map(x=>[x.x,x.y]),m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)+l/2*.1/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),je(e,v),e.intersect=function(x){return Ye.polygon(e,g,x)},i}var $Q=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(FQ,"linedWaveEdgedRect")});async function zQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:f-h,y:d+h},{x:f-h,y:d+u+h},{x:f+l-h,y:d+u+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d+u-h},{x:f+l+h,y:d+u-h},{x:f+l+h,y:d-h},{x:f+h,y:d-h},{x:f+h,y:d},{x:f,y:d},{x:f,y:d+h}],v=[{x:f,y:d+h},{x:f+l-h,y:d+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d},{x:f,y:d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Xt(y),b=m.path(x,g),w=Xt(v),C=m.path(w,{...g,fill:"none"}),T=i.insert(()=>C,":first-child");return T.insert(()=>b,":first-child"),T.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)-h-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),je(e,T),e.intersect=function(E){return Ye.polygon(e,y,E)},i}var GQ=N(()=>{"use strict";Ft();Ut();Wt();Ht();o(zQ,"multiRect")});async function VQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,d=-l/2,p=-f/2,m=5,{cssStyles:g}=e,y=Fo(d-m,p+f+m,d+l-m,p+f+m,h,.8),v=y?.[y.length-1],x=[{x:d-m,y:p+m},{x:d-m,y:p+f+m},...y,{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:v.y-2*m},{x:d+l+m,y:v.y-2*m},{x:d+l+m,y:p-m},{x:d+m,y:p-m},{x:d+m,y:p},{x:d,y:p},{x:d,y:p+m}],b=[{x:d,y:p+m},{x:d+l-m,y:p+m},{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:p},{x:d,y:p}],w=Xe.svg(i),C=Ke(e,{});e.look!=="handDrawn"&&(C.roughness=0,C.fillStyle="solid");let T=Xt(x),E=w.path(T,C),A=Xt(b),S=w.path(A,C),_=i.insert(()=>E,":first-child");return _.insert(()=>S),_.attr("class","basic label-container"),g&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",g),n&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",n),_.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-(a.width/2)-m-(a.x-(a.left??0))}, ${-(a.height/2)+m-h/2-(a.y-(a.top??0))})`),je(e,_),e.intersect=function(I){return Ye.polygon(e,x,I)},i}var UQ=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(VQ,"multiWaveEdgedRectangle")});async function HQ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n,e.useHtmlLabels||cr().flowchart?.htmlLabels!==!1||(e.centerLabel=!0);let{shapeSvg:s,bbox:l}=await pt(t,e,ht(e)),u=Math.max(l.width+(e.padding??0)*2,e?.width??0),h=Math.max(l.height+(e.padding??0)*2,e?.height??0),f=-u/2,d=-h/2,{cssStyles:p}=e,m=Xe.svg(s),g=Ke(e,{fill:r.noteBkgColor,stroke:r.noteBorderColor});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=m.rectangle(f,d,u,h,g),v=s.insert(()=>y,":first-child");return v.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",p),i&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",i),je(e,v),e.intersect=function(x){return Ye.rect(e,x)},s}var WQ=N(()=>{"use strict";Wt();Ht();Ut();Ft();ji();o(HQ,"note")});async function qQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.width+e.padding,l=a.height+e.padding,u=s+l,h=[{x:u/2,y:0},{x:u,y:-u/2},{x:u/2,y:-u},{x:0,y:-u/2}],f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{}),g=g_e(0,0,u),y=p.path(g,m);f=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`),d&&f.attr("style",d)}else f=La(i,u,u,h);return n&&f.attr("style",n),je(e,f),e.intersect=function(p){return Y.debug(`APA12 Intersect called SPLIT
450 +point:`,p,`
451 +node:
452 +`,e,`
453 +res:`,Ye.polygon(e,h,p)),Ye.polygon(e,h,p)},i}var g_e,YQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();_u();g_e=o((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD");o(qQ,"question")});async function XQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0),e?.width??0),u=Math.max(a.height+(e.padding??0),e?.height??0),h=-l/2,f=-u/2,d=f/2,p=[{x:h+d,y:f},{x:h,y:0},{x:h+d,y:-f},{x:-h,y:-f},{x:-h,y:f}],{cssStyles:m}=e,g=Xe.svg(i),y=Ke(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=Xt(p),x=g.path(v,y),b=i.insert(()=>x,":first-child");return b.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),b.attr("transform",`translate(${-d/2},0)`),s.attr("transform",`translate(${-d/2-a.width/2-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),je(e,b),e.intersect=function(w){return Ye.polygon(e,p,w)},i}var jQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(XQ,"rect_left_inv_arrow")});function y_e(t,e){e&&t.attr("style",e)}async function v_e(t){let e=Ge(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label;t.label&&pi(t.label)&&(n=await mh(t.label.replace(Ze.lineBreakRegex,`
454 +`),me()));let i=t.isNode?"nodeLabel":"edgeLabel";return r.html('<span class="'+i+'" '+(t.labelStyle?'style="'+t.labelStyle+'"':"")+">"+n+"</span>"),y_e(r,t.labelStyle),r.style("display","inline-block"),r.style("padding-right","1px"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var x_e,gc,Gw=N(()=>{"use strict";dr();vt();zt();gr();ir();o(y_e,"applyStyle");o(v_e,"addHtmlLabel");x_e=o(async(t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),fr(me().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"<br />"),Y.info("vertexText"+i);let a={isNode:n,label:na(i).replace(/fa[blrs]?:fa-[\w-]+/g,l=>`<i class='${l.replace(":"," ")}'></i>`),labelStyle:e&&e.replace("fill:","color:")};return await v_e(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),gc=x_e});async function KQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let i;e.cssClasses?i="node "+e.cssClasses:i="node default";let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=a.insert("g"),l=a.insert("g").attr("class","label").attr("style",n),u=e.description,h=e.label,f=l.node().appendChild(await gc(h,e.labelStyle,!0,!0)),d={width:0,height:0};if(fr(me()?.flowchart?.htmlLabels)){let S=f.children[0],_=Ge(f);d=S.getBoundingClientRect(),_.attr("width",d.width),_.attr("height",d.height)}Y.info("Text 2",u);let p=u||[],m=f.getBBox(),g=l.node().appendChild(await gc(p.join?p.join("<br/>"):p,e.labelStyle,!0,!0)),y=g.children[0],v=Ge(g);d=y.getBoundingClientRect(),v.attr("width",d.width),v.attr("height",d.height);let x=(e.padding||0)/2;Ge(g).attr("transform","translate( "+(d.width>m.width?0:(m.width-d.width)/2)+", "+(m.height+x+5)+")"),Ge(f).attr("transform","translate( "+(d.width<m.width?0:-(m.width-d.width)/2)+", 0)"),d=l.node().getBBox(),l.attr("transform","translate("+-d.width/2+", "+(-d.height/2-x+3)+")");let b=d.width+(e.padding||0),w=d.height+(e.padding||0),C=-d.width/2-x,T=-d.height/2-x,E,A;if(e.look==="handDrawn"){let S=Xe.svg(a),_=Ke(e,{}),I=S.path(Na(C,T,b,w,e.rx||0),_),D=S.line(-d.width/2-x,-d.height/2-x+m.height+x,d.width/2+x,-d.height/2-x+m.height+x,_);A=a.insert(()=>(Y.debug("Rough node insert CXC",I),D),":first-child"),E=a.insert(()=>(Y.debug("Rough node insert CXC",I),I),":first-child")}else E=s.insert("rect",":first-child"),A=s.insert("line"),E.attr("class","outer title-state").attr("style",n).attr("x",-d.width/2-x).attr("y",-d.height/2-x).attr("width",d.width+(e.padding||0)).attr("height",d.height+(e.padding||0)),A.attr("class","divider").attr("x1",-d.width/2-x).attr("x2",d.width/2+x).attr("y1",-d.height/2-x+m.height+x).attr("y2",-d.height/2-x+m.height+x);return je(e,E),e.intersect=function(S){return Ye.rect(e,S)},a}var QQ=N(()=>{"use strict";dr();gr();Ft();Gw();Ht();Ut();Wt();zt();qh();vt();o(KQ,"rectWithTitle")});async function ZQ(t,e){let r={rx:5,ry:5,classes:"",labelPaddingX:(e?.padding||0)*1,labelPaddingY:(e?.padding||0)*1};return Du(t,e,r)}var JQ=N(()=>{"use strict";mm();o(ZQ,"roundedRect")});async function eZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=e?.padding??0,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=-a.width/2-l,d=-a.height/2-l,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d},{x:f+u+8,y:d},{x:f+u+8,y:d+h},{x:f-8,y:d+h},{x:f-8,y:d},{x:f,y:d},{x:f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container").attr("style",$n(p)),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${-u/2+4+(e.padding??0)-(a.x-(a.left??0))},${-h/2+(e.padding??0)-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.rect(e,b)},i}var tZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();ir();o(eZ,"shadedProcess")});async function rZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=-l/2,f=-u/2,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:h,y:f},{x:h,y:f+u},{x:h+l,y:f+u},{x:h+l,y:f-u/2}],y=Xt(g),v=p.path(y,m),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),x.attr("transform",`translate(0, ${u/4})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))}, ${-u/4+(e.padding??0)-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.polygon(e,g,b)},i}var nZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(rZ,"slopedRect")});async function iZ(t,e){let r={rx:0,ry:0,classes:"",labelPaddingX:(e?.padding||0)*2,labelPaddingY:(e?.padding||0)*1};return Du(t,e,r)}var aZ=N(()=>{"use strict";mm();o(iZ,"squareRect")});async function sZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.height+e.padding,l=a.width+s/4+e.padding,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=Xe.svg(i),d=Ke(e,{}),p=Na(-l/2,-s/2,l,s,s/2),m=f.path(p,d);u=i.insert(()=>m,":first-child"),u.attr("class","basic label-container").attr("style",$n(h))}else u=i.insert("rect",":first-child"),u.attr("class","basic label-container").attr("style",n).attr("rx",s/2).attr("ry",s/2).attr("x",-l/2).attr("y",-s/2).attr("width",l).attr("height",s);return je(e,u),e.intersect=function(f){return Ye.rect(e,f)},i}var oZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();qh();ir();o(sZ,"stadium")});async function lZ(t,e){return Du(t,e,{rx:5,ry:5,classes:"flowchart-node"})}var cZ=N(()=>{"use strict";mm();o(lZ,"state")});function uZ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n;let{cssStyles:a}=e,{lineColor:s,stateBorder:l,nodeBorder:u}=r,h=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),f=Xe.svg(h),d=Ke(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=f.circle(0,0,14,{...d,stroke:s,strokeWidth:2}),m=l??u,g=f.circle(0,0,5,{...d,fill:m,stroke:m,strokeWidth:2,fillStyle:"solid"}),y=h.insert(()=>p,":first-child");return y.insert(()=>g),a&&y.selectAll("path").attr("style",a),i&&y.selectAll("path").attr("style",i),je(e,y),e.intersect=function(v){return Ye.circle(e,7,v)},h}var hZ=N(()=>{"use strict";Wt();Ht();Ut();Ft();o(uZ,"stateEnd")});function fZ(t,e,{config:{themeVariables:r}}){let{lineColor:n}=r,i=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),a;if(e.look==="handDrawn"){let l=Xe.svg(i).circle(0,0,14,gK(n));a=i.insert(()=>l),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14)}else a=i.insert("circle",":first-child"),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14);return je(e,a),e.intersect=function(s){return Ye.circle(e,7,s)},i}var dZ=N(()=>{"use strict";Wt();Ht();Ut();Ft();o(fZ,"stateStart")});async function pZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=(e?.padding||0)/2,l=a.width+e.padding,u=a.height+e.padding,h=-a.width/2-s,f=-a.height/2-s,d=[{x:0,y:0},{x:l,y:0},{x:l,y:-u},{x:0,y:-u},{x:0,y:0},{x:-8,y:0},{x:l+8,y:0},{x:l+8,y:-u},{x:-8,y:-u},{x:-8,y:0}];if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{}),g=p.rectangle(h-8,f,l+16,u,m),y=p.line(h,f,h,f+u,m),v=p.line(h+l,f,h+l,f+u,m);i.insert(()=>y,":first-child"),i.insert(()=>v,":first-child");let x=i.insert(()=>g,":first-child"),{cssStyles:b}=e;x.attr("class","basic label-container").attr("style",$n(b)),je(e,x)}else{let p=La(i,l,u,d);n&&p.attr("style",n),je(e,p)}return e.intersect=function(p){return Ye.polygon(e,d,p)},i}var mZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();ir();o(pZ,"subroutine")});async function gZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=-s/2,h=-l/2,f=.2*l,d=.2*l,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:u-f/2,y:h},{x:u+s+f/2,y:h},{x:u+s+f/2,y:h+l},{x:u-f/2,y:h+l}],v=[{x:u+s-f/2,y:h+l},{x:u+s+f/2,y:h+l},{x:u+s+f/2,y:h+l-d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Xt(y),b=m.path(x,g),w=Xt(v),C=m.path(w,{...g,fillStyle:"solid"}),T=i.insert(()=>C,":first-child");return T.insert(()=>b,":first-child"),T.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),je(e,T),e.intersect=function(E){return Ye.polygon(e,y,E)},i}var yZ=N(()=>{"use strict";Ft();Ut();Wt();Ht();o(gZ,"taggedRect")});async function vZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=.2*l,d=.2*u,p=u+h,{cssStyles:m}=e,g=Xe.svg(i),y=Ke(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=[{x:-l/2-l/2*.1,y:p/2},...Fo(-l/2-l/2*.1,p/2,l/2+l/2*.1,p/2,h,.8),{x:l/2+l/2*.1,y:-p/2},{x:-l/2-l/2*.1,y:-p/2}],x=-l/2+l/2*.1,b=-p/2-d*.4,w=[{x:x+l-f,y:(b+u)*1.4},{x:x+l,y:b+u-d},{x:x+l,y:(b+u)*.9},...Fo(x+l,(b+u)*1.3,x+l-f,(b+u)*1.5,-u*.03,.5)],C=Xt(v),T=g.path(C,y),E=Xt(w),A=g.path(E,{...y,fillStyle:"solid"}),S=i.insert(()=>A,":first-child");return S.insert(()=>T,":first-child"),S.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),je(e,S),e.intersect=function(_){return Ye.polygon(e,v,_)},i}var xZ=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(vZ,"taggedWaveEdgedRectangle")});async function bZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+e.padding,e?.width||0),l=Math.max(a.height+e.padding,e?.height||0),u=-s/2,h=-l/2,f=i.insert("rect",":first-child");return f.attr("class","text").attr("style",n).attr("rx",0).attr("ry",0).attr("x",u).attr("y",h).attr("width",s).attr("height",l),je(e,f),e.intersect=function(d){return Ye.rect(e,d)},i}var wZ=N(()=>{"use strict";Ft();Ht();Ut();o(bZ,"text")});async function TZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s,halfPadding:l}=await pt(t,e,ht(e)),u=e.look==="neo"?l*2:l,h=a.height+u,f=h/2,d=f/(2.5+h/50),p=a.width+d+u,{cssStyles:m}=e,g;if(e.look==="handDrawn"){let y=Xe.svg(i),v=w_e(0,0,p,h,d,f),x=T_e(0,0,p,h,d,f),b=y.path(v,Ke(e,{})),w=y.path(x,Ke(e,{fill:"none"}));g=i.insert(()=>w,":first-child"),g=i.insert(()=>b,":first-child"),g.attr("class","basic label-container"),m&&g.attr("style",m)}else{let y=b_e(0,0,p,h,d,f);g=i.insert("path",":first-child").attr("d",y).attr("class","basic label-container").attr("style",$n(m)).attr("style",n),g.attr("class","basic label-container"),m&&g.selectAll("path").attr("style",m),n&&g.selectAll("path").attr("style",n)}return g.attr("label-offset-x",d),g.attr("transform",`translate(${-p/2}, ${h/2} )`),s.attr("transform",`translate(${-(a.width/2)-d-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),je(e,g),e.intersect=function(y){let v=Ye.rect(e,y),x=v.y-(e.y??0);if(f!=0&&(Math.abs(x)<(e.height??0)/2||Math.abs(x)==(e.height??0)/2&&Math.abs(v.x-(e.x??0))>(e.width??0)/2-d)){let b=d*d*(1-x*x/(f*f));b!=0&&(b=Math.sqrt(Math.abs(b))),b=d-b,y.x-(e.x??0)>0&&(b=-b),v.x+=b}return v},i}var b_e,w_e,T_e,kZ=N(()=>{"use strict";Ft();Ut();Wt();Ht();ir();b_e=o((t,e,r,n,i,a)=>`M${t},${e}
455 + a${i},${a} 0,0,1 0,${-n}
456 + l${r},0
457 + a${i},${a} 0,0,1 0,${n}
458 + M${r},${-n}
459 + a${i},${a} 0,0,0 0,${n}
460 + l${-r},0`,"createCylinderPathD"),w_e=o((t,e,r,n,i,a)=>[`M${t},${e}`,`M${t+r},${e}`,`a${i},${a} 0,0,0 0,${-n}`,`l${-r},0`,`a${i},${a} 0,0,0 0,${n}`,`l${r},0`].join(" "),"createOuterCylinderPathD"),T_e=o((t,e,r,n,i,a)=>[`M${t+r/2},${-n/2}`,`a${i},${a} 0,0,0 0,${n}`].join(" "),"createInnerCylinderPathD");o(TZ,"tiltedCylinder")});async function EZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.width+e.padding,l=a.height+e.padding,u=[{x:-3*l/6,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var SZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();_u();o(EZ,"trapezoid")});async function CZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=60,l=20,u=Math.max(s,a.width+(e.padding??0)*2,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),{cssStyles:f}=e,d=Xe.svg(i),p=Ke(e,{});e.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");let m=[{x:-u/2*.8,y:-h/2},{x:u/2*.8,y:-h/2},{x:u/2,y:-h/2*.6},{x:u/2,y:h/2},{x:-u/2,y:h/2},{x:-u/2,y:-h/2*.6}],g=Xt(m),y=d.path(g,p),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),je(e,v),e.intersect=function(x){return Ye.polygon(e,m,x)},i}var AZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(CZ,"trapezoidalPentagon")});async function _Z(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=fr(me().flowchart?.htmlLabels),u=a.width+(e.padding??0),h=u+a.height,f=u+a.height,d=[{x:0,y:0},{x:f,y:0},{x:f/2,y:-h}],{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=Xt(d),v=m.path(y,g),x=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${h/2})`);return p&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),e.width=u,e.height=h,je(e,x),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${h/2-(a.height+(e.padding??0)/(l?2:1)-(a.y-(a.top??0)))})`),e.intersect=function(b){return Y.info("Triangle intersect",e,d,b),Ye.polygon(e,d,b)},i}var DZ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();Ft();gr();zt();o(_Z,"triangle")});async function LZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/8,f=u+h,{cssStyles:d}=e,m=70-l,g=m>0?m/2:0,y=Xe.svg(i),v=Ke(e,{});e.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=[{x:-l/2-g,y:f/2},...Fo(-l/2-g,f/2,l/2+g,f/2,h,.8),{x:l/2+g,y:-f/2},{x:-l/2-g,y:-f/2}],b=Xt(x),w=y.path(b,v),C=i.insert(()=>w,":first-child");return C.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h-(a.y-(a.top??0))})`),je(e,C),e.intersect=function(T){return Ye.polygon(e,x,T)},i}var RZ=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(LZ,"waveEdgedRectangle")});async function NZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=100,l=50,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=u/h,d=u,p=h;d>p*f?p=d/f:d=p*f,d=Math.max(d,s),p=Math.max(p,l);let m=Math.min(p*.2,p/4),g=p+m*2,{cssStyles:y}=e,v=Xe.svg(i),x=Ke(e,{});e.look!=="handDrawn"&&(x.roughness=0,x.fillStyle="solid");let b=[{x:-d/2,y:g/2},...Fo(-d/2,g/2,d/2,g/2,m,1),{x:d/2,y:-g/2},...Fo(d/2,-g/2,-d/2,-g/2,m,-1)],w=Xt(b),C=v.path(w,x),T=i.insert(()=>C,":first-child");return T.attr("class","basic label-container"),y&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",y),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),je(e,T),e.intersect=function(E){return Ye.polygon(e,b,E)},i}var MZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(NZ,"waveRectangle")});async function IZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:f-h,y:d-h},{x:f-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d-h}],v=`M${f-h},${d-h} L${f+l},${d-h} L${f+l},${d+u} L${f-h},${d+u} L${f-h},${d-h}
461 + M${f-h},${d} L${f+l},${d}
462 + M${f},${d-h} L${f},${d+u}`;e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=m.path(v,g),b=i.insert(()=>x,":first-child");return b.attr("transform",`translate(${h/2}, ${h/2})`),b.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)+h/2-(a.x-(a.left??0))}, ${-(a.height/2)+h/2-(a.y-(a.top??0))})`),je(e,b),e.intersect=function(w){return Ye.polygon(e,y,w)},i}var OZ=N(()=>{"use strict";Ft();Ut();Wt();Ht();o(IZ,"windowPane")});async function KD(t,e){let r=e;if(r.alias&&(e.label=r.alias),e.look==="handDrawn"){let{themeVariables:P}=cr(),{background:z}=P,$={...e,id:e.id+"-background",look:"default",cssStyles:["stroke: none",`fill: ${z}`]};await KD(t,$)}let n=cr();e.useHtmlLabels=n.htmlLabels;let i=n.er?.diagramPadding??10,a=n.er?.entityPadding??6,{cssStyles:s}=e,{labelStyles:l}=Qe(e);if(r.attributes.length===0&&e.label){let P={rx:0,ry:0,labelPaddingX:i,labelPaddingY:i*1.5,classes:""};ra(e.label,n)+P.labelPaddingX*2<n.er.minEntityWidth&&(e.width=n.er.minEntityWidth);let z=await Du(t,e,P);if(!fr(n.htmlLabels)){let $=z.select("text"),H=$.node()?.getBBox();$.attr("transform",`translate(${-H.width/2}, 0)`)}return z}n.htmlLabels||(i*=1.25,a*=1.25);let u=ht(e);u||(u="node default");let h=t.insert("g").attr("class",u).attr("id",e.domId||e.id),f=await b2(h,e.label??"",n,0,0,["name"],l);f.height+=a;let d=0,p=[],m=0,g=0,y=0,v=0,x=!0,b=!0;for(let P of r.attributes){let z=await b2(h,P.type,n,0,d,["attribute-type"],l);m=Math.max(m,z.width+i);let $=await b2(h,P.name,n,0,d,["attribute-name"],l);g=Math.max(g,$.width+i);let H=await b2(h,P.keys.join(),n,0,d,["attribute-keys"],l);y=Math.max(y,H.width+i);let Q=await b2(h,P.comment,n,0,d,["attribute-comment"],l);v=Math.max(v,Q.width+i),d+=Math.max(z.height,$.height,H.height,Q.height)+a,p.push(d)}p.pop();let w=4;y<=i&&(x=!1,y=0,w--),v<=i&&(b=!1,v=0,w--);let C=h.node().getBBox();if(f.width+i*2-(m+g+y+v)>0){let P=f.width+i*2-(m+g+y+v);m+=P/w,g+=P/w,y>0&&(y+=P/w),v>0&&(v+=P/w)}let T=m+g+y+v,E=Xe.svg(h),A=Ke(e,{});e.look!=="handDrawn"&&(A.roughness=0,A.fillStyle="solid");let S=Math.max(C.width+i*2,e?.width||0,T),_=Math.max(C.height+(p[0]||d)+a,e?.height||0),I=-S/2,D=-_/2;h.selectAll("g:not(:first-child)").each((P,z,$)=>{let H=Ge($[z]),Q=H.attr("transform"),j=0,ie=0;if(Q){let le=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(Q);le&&(j=parseFloat(le[1]),ie=parseFloat(le[2]),H.attr("class").includes("attribute-name")?j+=m:H.attr("class").includes("attribute-keys")?j+=m+g:H.attr("class").includes("attribute-comment")&&(j+=m+g+y))}H.attr("transform",`translate(${I+i/2+j}, ${ie+D+f.height+a/2})`)}),h.select(".name").attr("transform","translate("+-f.width/2+", "+(D+a/2)+")");let k=E.rectangle(I,D,S,_,A),L=h.insert(()=>k,":first-child").attr("style",s.join("")),{themeVariables:R}=cr(),{rowEven:O,rowOdd:M,nodeBorder:B}=R;p.push(0);for(let[P,z]of p.entries()){if(P===0&&p.length>1)continue;let $=P%2===0&&z!==0,H=E.rectangle(I,f.height+D+z,S,f.height,{...A,fill:$?O:M,stroke:B});h.insert(()=>H,"g.label").attr("style",s.join("")).attr("class",`row-rect-${P%2===0?"even":"odd"}`)}let F=E.line(I,f.height+D,S+I,f.height+D,A);h.insert(()=>F).attr("class","divider"),F=E.line(m+I,f.height+D,m+I,_+D,A),h.insert(()=>F).attr("class","divider"),x&&(F=E.line(m+g+I,f.height+D,m+g+I,_+D,A),h.insert(()=>F).attr("class","divider")),b&&(F=E.line(m+g+y+I,f.height+D,m+g+y+I,_+D,A),h.insert(()=>F).attr("class","divider"));for(let P of p)F=E.line(I,f.height+D+P,S+I,f.height+D+P,A),h.insert(()=>F).attr("class","divider");return je(e,L),e.intersect=function(P){return Ye.rect(e,P)},h}async function b2(t,e,r,n=0,i=0,a=[],s=""){let l=t.insert("g").attr("class",`label ${a.join(" ")}`).attr("transform",`translate(${n}, ${i})`).attr("style",s);e!==ec(e)&&(e=ec(e),e=e.replaceAll("<","&lt;").replaceAll(">","&gt;"));let u=l.node().appendChild(await Hn(l,e,{width:ra(e,r)+100,style:s,useHtmlLabels:r.htmlLabels},r));if(e.includes("&lt;")||e.includes("&gt;")){let f=u.children[0];for(f.textContent=f.textContent.replaceAll("&lt;","<").replaceAll("&gt;",">");f.childNodes[0];)f=f.childNodes[0],f.textContent=f.textContent.replaceAll("&lt;","<").replaceAll("&gt;",">")}let h=u.getBBox();if(fr(r.htmlLabels)){let f=u.children[0];f.style.textAlign="start";let d=Ge(u);h=f.getBoundingClientRect(),d.attr("width",h.width),d.attr("height",h.height)}return h}var PZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();mm();ji();to();gr();dr();ir();o(KD,"erBox");o(b2,"addText")});async function BZ(t,e,r,n,i=r.class.padding??12){let a=n?0:3,s=t.insert("g").attr("class",ht(e)).attr("id",e.domId||e.id),l=null,u=null,h=null,f=null,d=0,p=0,m=0;if(l=s.insert("g").attr("class","annotation-group text"),e.annotations.length>0){let b=e.annotations[0];await Vw(l,{text:`\xAB${b}\xBB`},0),d=l.node().getBBox().height}u=s.insert("g").attr("class","label-group text"),await Vw(u,e,0,["font-weight: bolder"]);let g=u.node().getBBox();p=g.height,h=s.insert("g").attr("class","members-group text");let y=0;for(let b of e.members){let w=await Vw(h,b,y,[b.parseClassifier()]);y+=w+a}m=h.node().getBBox().height,m<=0&&(m=i/2),f=s.insert("g").attr("class","methods-group text");let v=0;for(let b of e.methods){let w=await Vw(f,b,v,[b.parseClassifier()]);v+=w+a}let x=s.node().getBBox();if(l!==null){let b=l.node().getBBox();l.attr("transform",`translate(${-b.width/2})`)}return u.attr("transform",`translate(${-g.width/2}, ${d})`),x=s.node().getBBox(),h.attr("transform",`translate(0, ${d+p+i*2})`),x=s.node().getBBox(),f.attr("transform",`translate(0, ${d+p+(m?m+i*4:i*2)})`),x=s.node().getBBox(),{shapeSvg:s,bbox:x}}async function Vw(t,e,r,n=[]){let i=t.insert("g").attr("class","label").attr("style",n.join("; ")),a=cr(),s="useHtmlLabels"in e?e.useHtmlLabels:fr(a.htmlLabels)??!0,l="";"text"in e?l=e.text:l=e.label,!s&&l.startsWith("\\")&&(l=l.substring(1)),pi(l)&&(s=!0);let u=await Hn(i,Xy(na(l)),{width:ra(l,a)+50,classes:"markdown-node-label",useHtmlLabels:s},a),h,f=1;if(s){let d=u.children[0],p=Ge(u);f=d.innerHTML.split("<br>").length,d.innerHTML.includes("</math>")&&(f+=d.innerHTML.split("<mrow>").length-1);let m=d.getElementsByTagName("img");if(m){let g=l.replace(/<img[^>]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=a.fontSize?.toString()??window.getComputedStyle(document.body).fontSize,C=parseInt(b,10)*5+"px";y.style.minWidth=C,y.style.maxWidth=C}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}else{n.includes("font-weight: bolder")&&Ge(u).selectAll("tspan").attr("font-weight",""),f=u.children.length;let d=u.children[0];(u.textContent===""||u.textContent.includes("&gt"))&&(d.textContent=l[0]+l.substring(1).replaceAll("&gt;",">").replaceAll("&lt;","<").trim(),l[1]===" "&&(d.textContent=d.textContent[0]+" "+d.textContent.substring(1))),d.textContent==="undefined"&&(d.textContent=""),h=u.getBBox()}return i.attr("transform","translate(0,"+(-h.height/(2*f)+r)+")"),h.height}var FZ=N(()=>{"use strict";dr();ji();Ft();ir();zt();to();gr();o(BZ,"textHelper");o(Vw,"addText")});async function $Z(t,e){let r=me(),n=r.class.padding??12,i=n,a=e.useHtmlLabels??fr(r.htmlLabels)??!0,s=e;s.annotations=s.annotations??[],s.members=s.members??[],s.methods=s.methods??[];let{shapeSvg:l,bbox:u}=await BZ(t,e,r,a,i),{labelStyles:h,nodeStyles:f}=Qe(e);e.labelStyle=h,e.cssStyles=s.styles||"";let d=s.styles?.join(";")||f||"";e.cssStyles||(e.cssStyles=d.replaceAll("!important","").split(";"));let p=s.members.length===0&&s.methods.length===0&&!r.class?.hideEmptyMembersBox,m=Xe.svg(l),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=u.width,v=u.height;s.members.length===0&&s.methods.length===0?v+=i:s.members.length>0&&s.methods.length===0&&(v+=i*2);let x=-y/2,b=-v/2,w=m.rectangle(x-n,b-n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0),y+2*n,v+2*n+(p?n*2:s.members.length===0&&s.methods.length===0?-n:0),g),C=l.insert(()=>w,":first-child");C.attr("class","basic label-container");let T=C.node().getBBox();l.selectAll(".text").each((_,I,D)=>{let k=Ge(D[I]),L=k.attr("transform"),R=0;if(L){let F=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(L);F&&(R=parseFloat(F[2]))}let O=R+b+n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0);a||(O-=4);let M=x;(k.attr("class").includes("label-group")||k.attr("class").includes("annotation-group"))&&(M=-k.node()?.getBBox().width/2||0,l.selectAll("text").each(function(B,F,P){window.getComputedStyle(P[F]).textAnchor==="middle"&&(M=0)})),k.attr("transform",`translate(${M}, ${O})`)});let E=l.select(".annotation-group").node().getBBox().height-(p?n/2:0)||0,A=l.select(".label-group").node().getBBox().height-(p?n/2:0)||0,S=l.select(".members-group").node().getBBox().height-(p?n/2:0)||0;if(s.members.length>0||s.methods.length>0||p){let _=m.line(T.x,E+A+b+n,T.x+T.width,E+A+b+n,g);l.insert(()=>_).attr("class","divider").attr("style",d)}if(p||s.members.length>0||s.methods.length>0){let _=m.line(T.x,E+A+S+b+i*2+n,T.x+T.width,E+A+S+b+n+i*2,g);l.insert(()=>_).attr("class","divider").attr("style",d)}if(s.look!=="handDrawn"&&l.selectAll("path").attr("style",d),C.select(":nth-child(2)").attr("style",d),l.selectAll(".divider").select("path").attr("style",d),e.labelStyle?l.selectAll("span").attr("style",e.labelStyle):l.selectAll("span").attr("style",d),!a){let _=RegExp(/color\s*:\s*([^;]*)/),I=_.exec(d);if(I){let D=I[0].replace("color","fill");l.selectAll("tspan").attr("style",D)}else if(h){let D=_.exec(h);if(D){let k=D[0].replace("color","fill");l.selectAll("tspan").attr("style",k)}}}return je(e,C),e.intersect=function(_){return Ye.rect(e,_)},l}var zZ=N(()=>{"use strict";Ft();zt();dr();Wt();Ut();Ht();FZ();gr();o($Z,"classBox")});async function GZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let i=e,a=e,s=20,l=20,u="verifyMethod"in e,h=ht(e),f=t.insert("g").attr("class",h).attr("id",e.domId??e.id),d;u?d=await Lu(f,`&lt;&lt;${i.type}&gt;&gt;`,0,e.labelStyle):d=await Lu(f,"&lt;&lt;Element&gt;&gt;",0,e.labelStyle);let p=d,m=await Lu(f,i.name,p,e.labelStyle+"; font-weight: bold;");if(p+=m+l,u){let E=await Lu(f,`${i.requirementId?`Id: ${i.requirementId}`:""}`,p,e.labelStyle);p+=E;let A=await Lu(f,`${i.text?`Text: ${i.text}`:""}`,p,e.labelStyle);p+=A;let S=await Lu(f,`${i.risk?`Risk: ${i.risk}`:""}`,p,e.labelStyle);p+=S,await Lu(f,`${i.verifyMethod?`Verification: ${i.verifyMethod}`:""}`,p,e.labelStyle)}else{let E=await Lu(f,`${a.type?`Type: ${a.type}`:""}`,p,e.labelStyle);p+=E,await Lu(f,`${a.docRef?`Doc Ref: ${a.docRef}`:""}`,p,e.labelStyle)}let g=(f.node()?.getBBox().width??200)+s,y=(f.node()?.getBBox().height??200)+s,v=-g/2,x=-y/2,b=Xe.svg(f),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let C=b.rectangle(v,x,g,y,w),T=f.insert(()=>C,":first-child");if(T.attr("class","basic label-container").attr("style",n),f.selectAll(".label").each((E,A,S)=>{let _=Ge(S[A]),I=_.attr("transform"),D=0,k=0;if(I){let M=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(I);M&&(D=parseFloat(M[1]),k=parseFloat(M[2]))}let L=k-y/2,R=v+s/2;(A===0||A===1)&&(R=D),_.attr("transform",`translate(${R}, ${L+s})`)}),p>d+m+l){let E=b.line(v,x+d+m+l,v+g,x+d+m+l,w);f.insert(()=>E).attr("style",n)}return je(e,T),e.intersect=function(E){return Ye.rect(e,E)},f}async function Lu(t,e,r,n=""){if(e==="")return 0;let i=t.insert("g").attr("class","label").attr("style",n),a=me(),s=a.htmlLabels??!0,l=await Hn(i,Xy(na(e)),{width:ra(e,a)+50,classes:"markdown-node-label",useHtmlLabels:s,style:n},a),u;if(s){let h=l.children[0],f=Ge(l);u=h.getBoundingClientRect(),f.attr("width",u.width),f.attr("height",u.height)}else{let h=l.children[0];for(let f of h.children)f.textContent=f.textContent.replaceAll("&gt;",">").replaceAll("&lt;","<"),n&&f.setAttribute("style",n);u=l.getBBox(),u.height+=6}return i.attr("transform",`translate(${-u.width/2},${-u.height/2+r})`),u.height}var VZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();ir();zt();to();dr();o(GZ,"requirementBox");o(Lu,"addText")});async function UZ(t,e,{config:r}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n||"";let a=10,s=e.width;e.width=(e.width??200)-10;let{shapeSvg:l,bbox:u,label:h}=await pt(t,e,ht(e)),f=e.padding||10,d="",p;"ticket"in e&&e.ticket&&r?.kanban?.ticketBaseUrl&&(d=r?.kanban?.ticketBaseUrl.replace("#TICKET#",e.ticket),p=l.insert("svg:a",":first-child").attr("class","kanban-ticket-link").attr("xlink:href",d).attr("target","_blank"));let m={useHtmlLabels:e.useHtmlLabels,labelStyle:e.labelStyle||"",width:e.width,img:e.img,padding:e.padding||8,centerLabel:!1},g,y;p?{label:g,bbox:y}=await Dw(p,"ticket"in e&&e.ticket||"",m):{label:g,bbox:y}=await Dw(l,"ticket"in e&&e.ticket||"",m);let{label:v,bbox:x}=await Dw(l,"assigned"in e&&e.assigned||"",m);e.width=s;let b=10,w=e?.width||0,C=Math.max(y.height,x.height)/2,T=Math.max(u.height+b*2,e?.height||0)+C,E=-w/2,A=-T/2;h.attr("transform","translate("+(f-w/2)+", "+(-C-u.height/2)+")"),g.attr("transform","translate("+(f-w/2)+", "+(-C+u.height/2)+")"),v.attr("transform","translate("+(f+w/2-x.width-2*a)+", "+(-C+u.height/2)+")");let S,{rx:_,ry:I}=e,{cssStyles:D}=e;if(e.look==="handDrawn"){let k=Xe.svg(l),L=Ke(e,{}),R=_||I?k.path(Na(E,A,w,T,_||0),L):k.rectangle(E,A,w,T,L);S=l.insert(()=>R,":first-child"),S.attr("class","basic label-container").attr("style",D||null)}else{S=l.insert("rect",":first-child"),S.attr("class","basic label-container __APA__").attr("style",i).attr("rx",_??5).attr("ry",I??5).attr("x",E).attr("y",A).attr("width",w).attr("height",T);let k="priority"in e&&e.priority;if(k){let L=l.append("line"),R=E+2,O=A+Math.floor((_??0)/2),M=A+T-Math.floor((_??0)/2);L.attr("x1",R).attr("y1",O).attr("x2",R).attr("y2",M).attr("stroke-width","4").attr("stroke",k_e(k))}}return je(e,S),e.height=T,e.intersect=function(k){return Ye.rect(e,k)},l}var k_e,HZ=N(()=>{"use strict";Ft();Ht();qh();Ut();Wt();k_e=o(t=>{switch(t){case"Very High":return"red";case"High":return"orange";case"Medium":return null;case"Low":return"blue";case"Very Low":return"lightblue"}},"colorFromPriority");o(UZ,"kanbanItem")});function WZ(t){return t in QD}var E_e,S_e,QD,ZD=N(()=>{"use strict";NK();OK();BK();$K();GK();UK();WK();YK();jK();QK();JK();tQ();nQ();aQ();oQ();cQ();hQ();dQ();mQ();yQ();xQ();wQ();kQ();SQ();AQ();DQ();RQ();MQ();OQ();BQ();$Q();GQ();UQ();WQ();YQ();jQ();QQ();JQ();tZ();nZ();aZ();oZ();cZ();hZ();dZ();mZ();yZ();xZ();wZ();kZ();SZ();AZ();DZ();RZ();MZ();OZ();PZ();zZ();VZ();HZ();E_e=[{semanticName:"Process",name:"Rectangle",shortName:"rect",description:"Standard process shape",aliases:["proc","process","rectangle"],internalAliases:["squareRect"],handler:iZ},{semanticName:"Event",name:"Rounded Rectangle",shortName:"rounded",description:"Represents an event",aliases:["event"],internalAliases:["roundedRect"],handler:ZQ},{semanticName:"Terminal Point",name:"Stadium",shortName:"stadium",description:"Terminal point",aliases:["terminal","pill"],handler:sZ},{semanticName:"Subprocess",name:"Framed Rectangle",shortName:"fr-rect",description:"Subprocess",aliases:["subprocess","subproc","framed-rectangle","subroutine"],handler:pZ},{semanticName:"Database",name:"Cylinder",shortName:"cyl",description:"Database storage",aliases:["db","database","cylinder"],handler:ZK},{semanticName:"Start",name:"Circle",shortName:"circle",description:"Starting point",aliases:["circ"],handler:zK},{semanticName:"Decision",name:"Diamond",shortName:"diam",description:"Decision-making step",aliases:["decision","diamond","question"],handler:qQ},{semanticName:"Prepare Conditional",name:"Hexagon",shortName:"hex",description:"Preparation or condition step",aliases:["hexagon","prepare"],handler:fQ},{semanticName:"Data Input/Output",name:"Lean Right",shortName:"lean-r",description:"Represents input or output",aliases:["lean-right","in-out"],internalAliases:["lean_right"],handler:NQ},{semanticName:"Data Input/Output",name:"Lean Left",shortName:"lean-l",description:"Represents output or input",aliases:["lean-left","out-in"],internalAliases:["lean_left"],handler:LQ},{semanticName:"Priority Action",name:"Trapezoid Base Bottom",shortName:"trap-b",description:"Priority action",aliases:["priority","trapezoid-bottom","trapezoid"],handler:EZ},{semanticName:"Manual Operation",name:"Trapezoid Base Top",shortName:"trap-t",description:"Represents a manual task",aliases:["manual","trapezoid-top","inv-trapezoid"],internalAliases:["inv_trapezoid"],handler:CQ},{semanticName:"Stop",name:"Double Circle",shortName:"dbl-circ",description:"Represents a stop point",aliases:["double-circle"],internalAliases:["doublecircle"],handler:rQ},{semanticName:"Text Block",name:"Text Block",shortName:"text",description:"Text block",handler:bZ},{semanticName:"Card",name:"Notched Rectangle",shortName:"notch-rect",description:"Represents a card",aliases:["card","notched-rectangle"],handler:PK},{semanticName:"Lined/Shaded Process",name:"Lined Rectangle",shortName:"lin-rect",description:"Lined process shape",aliases:["lined-rectangle","lined-process","lin-proc","shaded-process"],handler:eZ},{semanticName:"Start",name:"Small Circle",shortName:"sm-circ",description:"Small starting point",aliases:["start","small-circle"],internalAliases:["stateStart"],handler:fZ},{semanticName:"Stop",name:"Framed Circle",shortName:"fr-circ",description:"Stop point",aliases:["stop","framed-circle"],internalAliases:["stateEnd"],handler:uZ},{semanticName:"Fork/Join",name:"Filled Rectangle",shortName:"fork",description:"Fork or join in process flow",aliases:["join"],internalAliases:["forkJoin"],handler:lQ},{semanticName:"Collate",name:"Hourglass",shortName:"hourglass",description:"Represents a collate operation",aliases:["hourglass","collate"],handler:pQ},{semanticName:"Comment",name:"Curly Brace",shortName:"brace",description:"Adds a comment",aliases:["comment","brace-l"],handler:HK},{semanticName:"Comment Right",name:"Curly Brace",shortName:"brace-r",description:"Adds a comment",handler:qK},{semanticName:"Comment with braces on both sides",name:"Curly Braces",shortName:"braces",description:"Adds a comment",handler:XK},{semanticName:"Com Link",name:"Lightning Bolt",shortName:"bolt",description:"Communication link",aliases:["com-link","lightning-bolt"],handler:IQ},{semanticName:"Document",name:"Document",shortName:"doc",description:"Represents a document",aliases:["doc","document"],handler:LZ},{semanticName:"Delay",name:"Half-Rounded Rectangle",shortName:"delay",description:"Represents a delay",aliases:["half-rounded-rectangle"],handler:uQ},{semanticName:"Direct Access Storage",name:"Horizontal Cylinder",shortName:"h-cyl",description:"Direct access storage",aliases:["das","horizontal-cylinder"],handler:TZ},{semanticName:"Disk Storage",name:"Lined Cylinder",shortName:"lin-cyl",description:"Disk storage",aliases:["disk","lined-cylinder"],handler:PQ},{semanticName:"Display",name:"Curved Trapezoid",shortName:"curv-trap",description:"Represents a display",aliases:["curved-trapezoid","display"],handler:KK},{semanticName:"Divided Process",name:"Divided Rectangle",shortName:"div-rect",description:"Divided process shape",aliases:["div-proc","divided-rectangle","divided-process"],handler:eQ},{semanticName:"Extract",name:"Triangle",shortName:"tri",description:"Extraction process",aliases:["extract","triangle"],handler:_Z},{semanticName:"Internal Storage",name:"Window Pane",shortName:"win-pane",description:"Internal storage",aliases:["internal-storage","window-pane"],handler:IZ},{semanticName:"Junction",name:"Filled Circle",shortName:"f-circ",description:"Junction point",aliases:["junction","filled-circle"],handler:iQ},{semanticName:"Loop Limit",name:"Trapezoidal Pentagon",shortName:"notch-pent",description:"Loop limit step",aliases:["loop-limit","notched-pentagon"],handler:CZ},{semanticName:"Manual File",name:"Flipped Triangle",shortName:"flip-tri",description:"Manual file operation",aliases:["manual-file","flipped-triangle"],handler:sQ},{semanticName:"Manual Input",name:"Sloped Rectangle",shortName:"sl-rect",description:"Manual input step",aliases:["manual-input","sloped-rectangle"],handler:rZ},{semanticName:"Multi-Document",name:"Stacked Document",shortName:"docs",description:"Multiple documents",aliases:["documents","st-doc","stacked-document"],handler:VQ},{semanticName:"Multi-Process",name:"Stacked Rectangle",shortName:"st-rect",description:"Multiple processes",aliases:["procs","processes","stacked-rectangle"],handler:zQ},{semanticName:"Stored Data",name:"Bow Tie Rectangle",shortName:"bow-rect",description:"Stored data",aliases:["stored-data","bow-tie-rectangle"],handler:IK},{semanticName:"Summary",name:"Crossed Circle",shortName:"cross-circ",description:"Summary",aliases:["summary","crossed-circle"],handler:VK},{semanticName:"Tagged Document",name:"Tagged Document",shortName:"tag-doc",description:"Tagged document",aliases:["tag-doc","tagged-document"],handler:vZ},{semanticName:"Tagged Process",name:"Tagged Rectangle",shortName:"tag-rect",description:"Tagged process",aliases:["tagged-rectangle","tag-proc","tagged-process"],handler:gZ},{semanticName:"Paper Tape",name:"Flag",shortName:"flag",description:"Paper tape",aliases:["paper-tape"],handler:NZ},{semanticName:"Odd",name:"Odd",shortName:"odd",description:"Odd shape",internalAliases:["rect_left_inv_arrow"],handler:XQ},{semanticName:"Lined Document",name:"Lined Document",shortName:"lin-doc",description:"Lined document",aliases:["lined-document"],handler:FQ}],S_e=o(()=>{let e=[...Object.entries({state:lZ,choice:FK,note:HQ,rectWithTitle:KQ,labelRect:_Q,iconSquare:TQ,iconCircle:vQ,icon:gQ,iconRounded:bQ,imageSquare:EQ,anchor:RK,kanbanItem:UZ,classBox:$Z,erBox:KD,requirementBox:GZ}),...E_e.flatMap(r=>[r.shortName,..."aliases"in r?r.aliases:[],..."internalAliases"in r?r.internalAliases:[]].map(i=>[i,r.handler]))];return Object.fromEntries(e)},"generateShapeMap"),QD=S_e();o(WZ,"isValidShape")});var C_e,Uw,qZ=N(()=>{"use strict";dr();Ew();zt();vt();ZD();ir();gr();mi();C_e="flowchart-",Uw=class{constructor(){this.vertexCounter=0;this.config=me();this.vertices=new Map;this.edges=[];this.classes=new Map;this.subGraphs=[];this.subGraphLookup=new Map;this.tooltips=new Map;this.subCount=0;this.firstGraphFlag=!0;this.secCount=-1;this.posCrossRef=[];this.funs=[];this.setAccTitle=Lr;this.setAccDescription=Nr;this.setDiagramTitle=$r;this.getAccTitle=Rr;this.getAccDescription=Mr;this.getDiagramTitle=Ir;this.funs.push(this.setupToolTips.bind(this)),this.addVertex=this.addVertex.bind(this),this.firstGraph=this.firstGraph.bind(this),this.setDirection=this.setDirection.bind(this),this.addSubGraph=this.addSubGraph.bind(this),this.addLink=this.addLink.bind(this),this.setLink=this.setLink.bind(this),this.updateLink=this.updateLink.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.destructLink=this.destructLink.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setTooltip=this.setTooltip.bind(this),this.updateLinkInterpolate=this.updateLinkInterpolate.bind(this),this.setClickFun=this.setClickFun.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.lex={firstGraph:this.firstGraph.bind(this)},this.clear(),this.setGen("gen-2")}static{o(this,"FlowDB")}sanitizeText(e){return Ze.sanitizeText(e,this.config)}lookUpDomId(e){for(let r of this.vertices.values())if(r.id===e)return r.domId;return e}addVertex(e,r,n,i,a,s,l={},u){if(!e||e.trim().length===0)return;let h;if(u!==void 0){let m;u.includes(`
463 +`)?m=u+`
464 +`:m=`{
465 +`+u+`
466 +}`,h=cm(m,{schema:lm})}let f=this.edges.find(m=>m.id===e);if(f){let m=h;m?.animate!==void 0&&(f.animate=m.animate),m?.animation!==void 0&&(f.animation=m.animation);return}let d,p=this.vertices.get(e);if(p===void 0&&(p={id:e,labelType:"text",domId:C_e+e+"-"+this.vertexCounter,styles:[],classes:[]},this.vertices.set(e,p)),this.vertexCounter++,r!==void 0?(this.config=me(),d=this.sanitizeText(r.text.trim()),p.labelType=r.type,d.startsWith('"')&&d.endsWith('"')&&(d=d.substring(1,d.length-1)),p.text=d):p.text===void 0&&(p.text=e),n!==void 0&&(p.type=n),i?.forEach(m=>{p.styles.push(m)}),a?.forEach(m=>{p.classes.push(m)}),s!==void 0&&(p.dir=s),p.props===void 0?p.props=l:l!==void 0&&Object.assign(p.props,l),h!==void 0){if(h.shape){if(h.shape!==h.shape.toLowerCase()||h.shape.includes("_"))throw new Error(`No such shape: ${h.shape}. Shape names should be lowercase.`);if(!WZ(h.shape))throw new Error(`No such shape: ${h.shape}.`);p.type=h?.shape}h?.label&&(p.text=h?.label),h?.icon&&(p.icon=h?.icon,!h.label?.trim()&&p.text===e&&(p.text="")),h?.form&&(p.form=h?.form),h?.pos&&(p.pos=h?.pos),h?.img&&(p.img=h?.img,!h.label?.trim()&&p.text===e&&(p.text="")),h?.constraint&&(p.constraint=h.constraint),h.w&&(p.assetWidth=Number(h.w)),h.h&&(p.assetHeight=Number(h.h))}}addSingleLink(e,r,n,i){let l={start:e,end:r,type:void 0,text:"",labelType:"text",classes:[],isUserDefinedId:!1,interpolate:this.edges.defaultInterpolate};Y.info("abc78 Got edge...",l);let u=n.text;if(u!==void 0&&(l.text=this.sanitizeText(u.text.trim()),l.text.startsWith('"')&&l.text.endsWith('"')&&(l.text=l.text.substring(1,l.text.length-1)),l.labelType=u.type),n!==void 0&&(l.type=n.type,l.stroke=n.stroke,l.length=n.length>10?10:n.length),i&&!this.edges.some(h=>h.id===i))l.id=i,l.isUserDefinedId=!0;else{let h=this.edges.filter(f=>f.start===l.start&&f.end===l.end);h.length===0?l.id=$h(l.start,l.end,{counter:0,prefix:"L"}):l.id=$h(l.start,l.end,{counter:h.length+1,prefix:"L"})}if(this.edges.length<(this.config.maxEdges??500))Y.info("Pushing edge..."),this.edges.push(l);else throw new Error(`Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}.
467 +
468 +Initialize mermaid with maxEdges set to a higher number to allow more edges.
469 +You cannot set this config via configuration inside the diagram as it is a secure config.
470 +You have to call mermaid.initialize.`)}isLinkData(e){return e!==null&&typeof e=="object"&&"id"in e&&typeof e.id=="string"}addLink(e,r,n){let i=this.isLinkData(n)?n.id.replace("@",""):void 0;Y.info("addLink",e,r,i);for(let a of e)for(let s of r){let l=a===e[e.length-1],u=s===r[0];l&&u?this.addSingleLink(a,s,n,i):this.addSingleLink(a,s,n,void 0)}}updateLinkInterpolate(e,r){e.forEach(n=>{n==="default"?this.edges.defaultInterpolate=r:this.edges[n].interpolate=r})}updateLink(e,r){e.forEach(n=>{if(typeof n=="number"&&n>=this.edges.length)throw new Error(`The index ${n} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${this.edges.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);n==="default"?this.edges.defaultStyle=r:(this.edges[n].style=r,(this.edges[n]?.style?.length??0)>0&&!this.edges[n]?.style?.some(i=>i?.startsWith("fill"))&&this.edges[n]?.style?.push("fill:none"))})}addClass(e,r){let n=r.join().replace(/\\,/g,"\xA7\xA7\xA7").replace(/,/g,";").replace(/§§§/g,",").split(";");e.split(",").forEach(i=>{let a=this.classes.get(i);a===void 0&&(a={id:i,styles:[],textStyles:[]},this.classes.set(i,a)),n?.forEach(s=>{if(/color/.exec(s)){let l=s.replace("fill","bgFill");a.textStyles.push(l)}a.styles.push(s)})})}setDirection(e){this.direction=e,/.*</.exec(this.direction)&&(this.direction="RL"),/.*\^/.exec(this.direction)&&(this.direction="BT"),/.*>/.exec(this.direction)&&(this.direction="LR"),/.*v/.exec(this.direction)&&(this.direction="TB"),this.direction==="TD"&&(this.direction="TB")}setClass(e,r){for(let n of e.split(",")){let i=this.vertices.get(n);i&&i.classes.push(r);let a=this.edges.find(l=>l.id===n);a&&a.classes.push(r);let s=this.subGraphLookup.get(n);s&&s.classes.push(r)}}setTooltip(e,r){if(r!==void 0){r=this.sanitizeText(r);for(let n of e.split(","))this.tooltips.set(this.version==="gen-1"?this.lookUpDomId(n):n,r)}}setClickFun(e,r,n){let i=this.lookUpDomId(e);if(me().securityLevel!=="loose"||r===void 0)return;let a=[];if(typeof n=="string"){a=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let l=0;l<a.length;l++){let u=a[l].trim();u.startsWith('"')&&u.endsWith('"')&&(u=u.substr(1,u.length-2)),a[l]=u}}a.length===0&&a.push(e);let s=this.vertices.get(e);s&&(s.haveCallback=!0,this.funs.push(()=>{let l=document.querySelector(`[id="${i}"]`);l!==null&&l.addEventListener("click",()=>{Gt.runFunc(r,...a)},!1)}))}setLink(e,r,n){e.split(",").forEach(i=>{let a=this.vertices.get(i);a!==void 0&&(a.link=Gt.formatUrl(r,this.config),a.linkTarget=n)}),this.setClass(e,"clickable")}getTooltip(e){return this.tooltips.get(e)}setClickEvent(e,r,n){e.split(",").forEach(i=>{this.setClickFun(i,r,n)}),this.setClass(e,"clickable")}bindFunctions(e){this.funs.forEach(r=>{r(e)})}getDirection(){return this.direction?.trim()}getVertices(){return this.vertices}getEdges(){return this.edges}getClasses(){return this.classes}setupToolTips(e){let r=Ge(".mermaidTooltip");(r._groups||r)[0][0]===null&&(r=Ge("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),Ge(e).select("svg").selectAll("g.node").on("mouseover",a=>{let s=Ge(a.currentTarget);if(s.attr("title")===null)return;let u=a.currentTarget?.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.text(s.attr("title")).style("left",window.scrollX+u.left+(u.right-u.left)/2+"px").style("top",window.scrollY+u.bottom+"px"),r.html(r.html().replace(/&lt;br\/&gt;/g,"<br/>")),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),Ge(a.currentTarget).classed("hover",!1)})}clear(e="gen-2"){this.vertices=new Map,this.classes=new Map,this.edges=[],this.funs=[this.setupToolTips.bind(this)],this.subGraphs=[],this.subGraphLookup=new Map,this.subCount=0,this.tooltips=new Map,this.firstGraphFlag=!0,this.version=e,this.config=me(),Ar()}setGen(e){this.version=e||"gen-2"}defaultStyle(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"}addSubGraph(e,r,n){let i=e.text.trim(),a=n.text;e===n&&/\s/.exec(n.text)&&(i=void 0);let s=o(f=>{let d={boolean:{},number:{},string:{}},p=[],m;return{nodeList:f.filter(function(y){let v=typeof y;return y.stmt&&y.stmt==="dir"?(m=y.value,!1):y.trim()===""?!1:v in d?d[v].hasOwnProperty(y)?!1:d[v][y]=!0:p.includes(y)?!1:p.push(y)}),dir:m}},"uniq"),{nodeList:l,dir:u}=s(r.flat());if(this.version==="gen-1")for(let f=0;f<l.length;f++)l[f]=this.lookUpDomId(l[f]);i=i??"subGraph"+this.subCount,a=a||"",a=this.sanitizeText(a),this.subCount=this.subCount+1;let h={id:i,nodes:l,title:a.trim(),classes:[],dir:u,labelType:n.type};return Y.info("Adding",h.id,h.nodes,h.dir),h.nodes=this.makeUniq(h,this.subGraphs).nodes,this.subGraphs.push(h),this.subGraphLookup.set(i,h),i}getPosForId(e){for(let[r,n]of this.subGraphs.entries())if(n.id===e)return r;return-1}indexNodes2(e,r){let n=this.subGraphs[r].nodes;if(this.secCount=this.secCount+1,this.secCount>2e3)return{result:!1,count:0};if(this.posCrossRef[this.secCount]=r,this.subGraphs[r].id===e)return{result:!0,count:0};let i=0,a=1;for(;i<n.length;){let s=this.getPosForId(n[i]);if(s>=0){let l=this.indexNodes2(e,s);if(l.result)return{result:!0,count:a+l.count};a=a+l.count}i=i+1}return{result:!1,count:a}}getDepthFirstPos(e){return this.posCrossRef[e]}indexNodes(){this.secCount=-1,this.subGraphs.length>0&&this.indexNodes2("none",this.subGraphs.length-1)}getSubGraphs(){return this.subGraphs}firstGraph(){return this.firstGraphFlag?(this.firstGraphFlag=!1,!0):!1}destructStartLink(e){let r=e.trim(),n="arrow_open";switch(r[0]){case"<":n="arrow_point",r=r.slice(1);break;case"x":n="arrow_cross",r=r.slice(1);break;case"o":n="arrow_circle",r=r.slice(1);break}let i="normal";return r.includes("=")&&(i="thick"),r.includes(".")&&(i="dotted"),{type:n,stroke:i}}countChar(e,r){let n=r.length,i=0;for(let a=0;a<n;++a)r[a]===e&&++i;return i}destructEndLink(e){let r=e.trim(),n=r.slice(0,-1),i="arrow_open";switch(r.slice(-1)){case"x":i="arrow_cross",r.startsWith("x")&&(i="double_"+i,n=n.slice(1));break;case">":i="arrow_point",r.startsWith("<")&&(i="double_"+i,n=n.slice(1));break;case"o":i="arrow_circle",r.startsWith("o")&&(i="double_"+i,n=n.slice(1));break}let a="normal",s=n.length-1;n.startsWith("=")&&(a="thick"),n.startsWith("~")&&(a="invisible");let l=this.countChar(".",n);return l&&(a="dotted",s=l),{type:i,stroke:a,length:s}}destructLink(e,r){let n=this.destructEndLink(e),i;if(r){if(i=this.destructStartLink(r),i.stroke!==n.stroke)return{type:"INVALID",stroke:"INVALID"};if(i.type==="arrow_open")i.type=n.type;else{if(i.type!==n.type)return{type:"INVALID",stroke:"INVALID"};i.type="double_"+i.type}return i.type==="double_arrow"&&(i.type="double_arrow_point"),i.length=n.length,i}return n}exists(e,r){for(let n of e)if(n.nodes.includes(r))return!0;return!1}makeUniq(e,r){let n=[];return e.nodes.forEach((i,a)=>{this.exists(r,i)||n.push(e.nodes[a])}),{nodes:n}}getTypeFromVertex(e){if(e.img)return"imageSquare";if(e.icon)return e.form==="circle"?"iconCircle":e.form==="square"?"iconSquare":e.form==="rounded"?"iconRounded":"icon";switch(e.type){case"square":case void 0:return"squareRect";case"round":return"roundedRect";case"ellipse":return"ellipse";default:return e.type}}findNode(e,r){return e.find(n=>n.id===r)}destructEdgeType(e){let r="none",n="arrow_point";switch(e){case"arrow_point":case"arrow_circle":case"arrow_cross":n=e;break;case"double_arrow_point":case"double_arrow_circle":case"double_arrow_cross":r=e.replace("double_",""),n=r;break}return{arrowTypeStart:r,arrowTypeEnd:n}}addNodeFromVertex(e,r,n,i,a,s){let l=n.get(e.id),u=i.get(e.id)??!1,h=this.findNode(r,e.id);if(h)h.cssStyles=e.styles,h.cssCompiledStyles=this.getCompiledStyles(e.classes),h.cssClasses=e.classes.join(" ");else{let f={id:e.id,label:e.text,labelStyle:"",parentId:l,padding:a.flowchart?.padding||8,cssStyles:e.styles,cssCompiledStyles:this.getCompiledStyles(["default","node",...e.classes]),cssClasses:"default "+e.classes.join(" "),dir:e.dir,domId:e.domId,look:s,link:e.link,linkTarget:e.linkTarget,tooltip:this.getTooltip(e.id),icon:e.icon,pos:e.pos,img:e.img,assetWidth:e.assetWidth,assetHeight:e.assetHeight,constraint:e.constraint};u?r.push({...f,isGroup:!0,shape:"rect"}):r.push({...f,isGroup:!1,shape:this.getTypeFromVertex(e)})}}getCompiledStyles(e){let r=[];for(let n of e){let i=this.classes.get(n);i?.styles&&(r=[...r,...i.styles??[]].map(a=>a.trim())),i?.textStyles&&(r=[...r,...i.textStyles??[]].map(a=>a.trim()))}return r}getData(){let e=me(),r=[],n=[],i=this.getSubGraphs(),a=new Map,s=new Map;for(let h=i.length-1;h>=0;h--){let f=i[h];f.nodes.length>0&&s.set(f.id,!0);for(let d of f.nodes)a.set(d,f.id)}for(let h=i.length-1;h>=0;h--){let f=i[h];r.push({id:f.id,label:f.title,labelStyle:"",parentId:a.get(f.id),padding:8,cssCompiledStyles:this.getCompiledStyles(f.classes),cssClasses:f.classes.join(" "),shape:"rect",dir:f.dir,isGroup:!0,look:e.look})}this.getVertices().forEach(h=>{this.addNodeFromVertex(h,r,a,s,e,e.look||"classic")});let u=this.getEdges();return u.forEach((h,f)=>{let{arrowTypeStart:d,arrowTypeEnd:p}=this.destructEdgeType(h.type),m=[...u.defaultStyle??[]];h.style&&m.push(...h.style);let g={id:$h(h.start,h.end,{counter:f,prefix:"L"},h.id),isUserDefinedId:h.isUserDefinedId,start:h.start,end:h.end,type:h.type??"normal",label:h.text,labelpos:"c",thickness:h.stroke,minlen:h.length,classes:h?.stroke==="invisible"?"":"edge-thickness-normal edge-pattern-solid flowchart-link",arrowTypeStart:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":d,arrowTypeEnd:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":p,arrowheadStyle:"fill: #333",cssCompiledStyles:this.getCompiledStyles(h.classes),labelStyle:m,style:m,pattern:h.stroke,look:e.look,animate:h.animate,animation:h.animation,curve:h.interpolate||this.edges.defaultInterpolate||e.flowchart?.curve};n.push(g)}),{nodes:r,edges:n,other:{},config:e}}defaultConfig(){return A3.flowchart}}});var yc,gm=N(()=>{"use strict";dr();yc=o((t,e)=>{let r;return e==="sandbox"&&(r=Ge("#i"+t)),(e==="sandbox"?Ge(r.nodes()[0].contentDocument.body):Ge("body")).select(`[id="${t}"]`)},"getDiagramElement")});var Ru,w2=N(()=>{"use strict";Ru=o(({flowchart:t})=>{let e=t?.subGraphTitleMargin?.top??0,r=t?.subGraphTitleMargin?.bottom??0,n=e+r;return{subGraphTitleTopMargin:e,subGraphTitleBottomMargin:r,subGraphTitleTotalMargin:n}},"getSubGraphTitleMargins")});var YZ,A_e,__e,D_e,L_e,R_e,N_e,XZ,ym,jZ,Hw=N(()=>{"use strict";zt();gr();vt();w2();dr();Wt();to();RD();Gw();qh();Ut();YZ=o(async(t,e)=>{Y.info("Creating subgraph rect for ",e.id,e);let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=Qe(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=fr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await Hn(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0}),y=g.getBBox();if(fr(r.flowchart.htmlLabels)){let A=g.children[0],S=Ge(g);y=A.getBoundingClientRect(),S.attr("width",y.width),S.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,w=e.y-x/2;Y.trace("Data ",e,JSON.stringify(e));let C;if(e.look==="handDrawn"){let A=Xe.svg(d),S=Ke(e,{roughness:.7,fill:a,stroke:s,fillWeight:3,seed:i}),_=A.path(Na(b,w,v,x,0),S);C=d.insert(()=>(Y.debug("Rough node insert CXC",_),_),":first-child"),C.select("path:nth-child(2)").attr("style",h.join(";")),C.select("path").attr("style",f.join(";").replace("fill","stroke"))}else C=d.insert("rect",":first-child"),C.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",w).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:T}=Ru(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+T})`),l){let A=m.select("span");A&&A.attr("style",l)}let E=C.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(A){return Vh(e,A)},{cluster:d,labelBBox:y}},"rect"),A_e=o((t,e)=>{let r=t.insert("g").attr("class","note-cluster").attr("id",e.id),n=r.insert("rect",":first-child"),i=0*e.padding,a=i/2;n.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");let s=n.node().getBBox();return e.width=s.width,e.height=s.height,e.intersect=function(l){return Vh(e,l)},{cluster:r,labelBBox:{width:0,height:0}}},"noteGroup"),__e=o(async(t,e)=>{let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{altBackground:a,compositeBackground:s,compositeTitleBackground:l,nodeBorder:u}=n,h=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-id",e.id).attr("data-look",e.look),f=h.insert("g",":first-child"),d=h.insert("g").attr("class","cluster-label"),p=h.append("rect"),m=d.node().appendChild(await gc(e.label,e.labelStyle,void 0,!0)),g=m.getBBox();if(fr(r.flowchart.htmlLabels)){let _=m.children[0],I=Ge(m);g=_.getBoundingClientRect(),I.attr("width",g.width),I.attr("height",g.height)}let y=0*e.padding,v=y/2,x=(e.width<=g.width+e.padding?g.width+e.padding:e.width)+y;e.width<=g.width+e.padding?e.diff=(x-e.width)/2-e.padding:e.diff=-e.padding;let b=e.height+y,w=e.height+y-g.height-6,C=e.x-x/2,T=e.y-b/2;e.width=x;let E=e.y-e.height/2-v+g.height+2,A;if(e.look==="handDrawn"){let _=e.cssClasses.includes("statediagram-cluster-alt"),I=Xe.svg(h),D=e.rx||e.ry?I.path(Na(C,T,x,b,10),{roughness:.7,fill:l,fillStyle:"solid",stroke:u,seed:i}):I.rectangle(C,T,x,b,{seed:i});A=h.insert(()=>D,":first-child");let k=I.rectangle(C,E,x,w,{fill:_?a:s,fillStyle:_?"hachure":"solid",stroke:u,seed:i});A=h.insert(()=>D,":first-child"),p=h.insert(()=>k)}else A=f.insert("rect",":first-child"),A.attr("class","outer").attr("x",C).attr("y",T).attr("width",x).attr("height",b).attr("data-look",e.look),p.attr("class","inner").attr("x",C).attr("y",E).attr("width",x).attr("height",w);d.attr("transform",`translate(${e.x-g.width/2}, ${T+1-(fr(r.flowchart.htmlLabels)?0:3)})`);let S=A.node().getBBox();return e.height=S.height,e.offsetX=0,e.offsetY=g.height-e.padding/2,e.labelBBox=g,e.intersect=function(_){return Vh(e,_)},{cluster:h,labelBBox:g}},"roundedWithTitle"),D_e=o(async(t,e)=>{Y.info("Creating subgraph rect for ",e.id,e);let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=Qe(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=fr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await Hn(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0,width:e.width}),y=g.getBBox();if(fr(r.flowchart.htmlLabels)){let A=g.children[0],S=Ge(g);y=A.getBoundingClientRect(),S.attr("width",y.width),S.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,w=e.y-x/2;Y.trace("Data ",e,JSON.stringify(e));let C;if(e.look==="handDrawn"){let A=Xe.svg(d),S=Ke(e,{roughness:.7,fill:a,stroke:s,fillWeight:4,seed:i}),_=A.path(Na(b,w,v,x,e.rx),S);C=d.insert(()=>(Y.debug("Rough node insert CXC",_),_),":first-child"),C.select("path:nth-child(2)").attr("style",h.join(";")),C.select("path").attr("style",f.join(";").replace("fill","stroke"))}else C=d.insert("rect",":first-child"),C.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",w).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:T}=Ru(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+T})`),l){let A=m.select("span");A&&A.attr("style",l)}let E=C.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(A){return Vh(e,A)},{cluster:d,labelBBox:y}},"kanbanSection"),L_e=o((t,e)=>{let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{nodeBorder:a}=n,s=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-look",e.look),l=s.insert("g",":first-child"),u=0*e.padding,h=e.width+u;e.diff=-e.padding;let f=e.height+u,d=e.x-h/2,p=e.y-f/2;e.width=h;let m;if(e.look==="handDrawn"){let v=Xe.svg(s).rectangle(d,p,h,f,{fill:"lightgrey",roughness:.5,strokeLineDash:[5],stroke:a,seed:i});m=s.insert(()=>v,":first-child")}else m=l.insert("rect",":first-child"),m.attr("class","divider").attr("x",d).attr("y",p).attr("width",h).attr("height",f).attr("data-look",e.look);let g=m.node().getBBox();return e.height=g.height,e.offsetX=0,e.offsetY=0,e.intersect=function(y){return Vh(e,y)},{cluster:s,labelBBox:{}}},"divider"),R_e=YZ,N_e={rect:YZ,squareRect:R_e,roundedWithTitle:__e,noteGroup:A_e,divider:L_e,kanbanSection:D_e},XZ=new Map,ym=o(async(t,e)=>{let r=e.shape||"rect",n=await N_e[r](t,e);return XZ.set(e.id,n),n},"insertCluster"),jZ=o(()=>{XZ=new Map},"clear")});function Ww(t,e){if(t===void 0||e===void 0)return{angle:0,deltaX:0,deltaY:0};t=Wn(t),e=Wn(e);let[r,n]=[t.x,t.y],[i,a]=[e.x,e.y],s=i-r,l=a-n;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}var $o,Wn,qw,JD=N(()=>{"use strict";$o={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:4};o(Ww,"calculateDeltaAndAngle");Wn=o(t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,"pointTransformer"),qw=o(t=>({x:o(function(e,r,n){let i=0,a=Wn(n[0]).x<Wn(n[n.length-1]).x?"left":"right";if(r===0&&Object.hasOwn($o,t.arrowTypeStart)){let{angle:m,deltaX:g}=Ww(n[0],n[1]);i=$o[t.arrowTypeStart]*Math.cos(m)*(g>=0?1:-1)}else if(r===n.length-1&&Object.hasOwn($o,t.arrowTypeEnd)){let{angle:m,deltaX:g}=Ww(n[n.length-1],n[n.length-2]);i=$o[t.arrowTypeEnd]*Math.cos(m)*(g>=0?1:-1)}let s=Math.abs(Wn(e).x-Wn(n[n.length-1]).x),l=Math.abs(Wn(e).y-Wn(n[n.length-1]).y),u=Math.abs(Wn(e).x-Wn(n[0]).x),h=Math.abs(Wn(e).y-Wn(n[0]).y),f=$o[t.arrowTypeStart],d=$o[t.arrowTypeEnd],p=1;if(s<d&&s>0&&l<d){let m=d+p-s;m*=a==="right"?-1:1,i-=m}if(u<f&&u>0&&h<f){let m=f+p-u;m*=a==="right"?-1:1,i+=m}return Wn(e).x+i},"x"),y:o(function(e,r,n){let i=0,a=Wn(n[0]).y<Wn(n[n.length-1]).y?"down":"up";if(r===0&&Object.hasOwn($o,t.arrowTypeStart)){let{angle:m,deltaY:g}=Ww(n[0],n[1]);i=$o[t.arrowTypeStart]*Math.abs(Math.sin(m))*(g>=0?1:-1)}else if(r===n.length-1&&Object.hasOwn($o,t.arrowTypeEnd)){let{angle:m,deltaY:g}=Ww(n[n.length-1],n[n.length-2]);i=$o[t.arrowTypeEnd]*Math.abs(Math.sin(m))*(g>=0?1:-1)}let s=Math.abs(Wn(e).y-Wn(n[n.length-1]).y),l=Math.abs(Wn(e).x-Wn(n[n.length-1]).x),u=Math.abs(Wn(e).y-Wn(n[0]).y),h=Math.abs(Wn(e).x-Wn(n[0]).x),f=$o[t.arrowTypeStart],d=$o[t.arrowTypeEnd],p=1;if(s<d&&s>0&&l<d){let m=d+p-s;m*=a==="up"?-1:1,i-=m}if(u<f&&u>0&&h<f){let m=f+p-u;m*=a==="up"?-1:1,i+=m}return Wn(e).y+i},"y")}),"getLineFunctionsWithOffset")});var QZ,M_e,KZ,ZZ=N(()=>{"use strict";vt();QZ=o((t,e,r,n,i,a)=>{e.arrowTypeStart&&KZ(t,"start",e.arrowTypeStart,r,n,i,a),e.arrowTypeEnd&&KZ(t,"end",e.arrowTypeEnd,r,n,i,a)},"addEdgeMarkers"),M_e={arrow_cross:{type:"cross",fill:!1},arrow_point:{type:"point",fill:!0},arrow_barb:{type:"barb",fill:!0},arrow_circle:{type:"circle",fill:!1},aggregation:{type:"aggregation",fill:!1},extension:{type:"extension",fill:!1},composition:{type:"composition",fill:!0},dependency:{type:"dependency",fill:!0},lollipop:{type:"lollipop",fill:!1},only_one:{type:"onlyOne",fill:!1},zero_or_one:{type:"zeroOrOne",fill:!1},one_or_more:{type:"oneOrMore",fill:!1},zero_or_more:{type:"zeroOrMore",fill:!1},requirement_arrow:{type:"requirement_arrow",fill:!1},requirement_contains:{type:"requirement_contains",fill:!1}},KZ=o((t,e,r,n,i,a,s)=>{let l=M_e[r];if(!l){Y.warn(`Unknown arrow type: ${r}`);return}let u=l.type,f=`${i}_${a}-${u}${e==="start"?"Start":"End"}`;if(s&&s.trim()!==""){let d=s.replace(/[^\dA-Za-z]/g,"_"),p=`${f}_${d}`;if(!document.getElementById(p)){let m=document.getElementById(f);if(m){let g=m.cloneNode(!0);g.id=p,g.querySelectorAll("path, circle, line").forEach(v=>{v.setAttribute("stroke",s),l.fill&&v.setAttribute("fill",s)}),m.parentNode?.appendChild(g)}}t.attr(`marker-${e}`,`url(${n}#${p})`)}else t.attr(`marker-${e}`,`url(${n}#${f})`)},"addEdgeMarker")});function Yw(t,e){me().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}function P_e(t){let e=[],r=[];for(let n=1;n<t.length-1;n++){let i=t[n-1],a=t[n],s=t[n+1];(i.x===a.x&&a.y===s.y&&Math.abs(a.x-s.x)>5&&Math.abs(a.y-i.y)>5||i.y===a.y&&a.x===s.x&&Math.abs(a.x-i.x)>5&&Math.abs(a.y-s.y)>5)&&(e.push(a),r.push(n))}return{cornerPoints:e,cornerPointPositions:r}}var Xw,pa,tJ,T2,jw,Kw,I_e,O_e,JZ,eJ,B_e,Qw,eL=N(()=>{"use strict";zt();gr();vt();to();ir();JD();w2();dr();Wt();Gw();ZZ();Ut();Xw=new Map,pa=new Map,tJ=o(()=>{Xw.clear(),pa.clear()},"clear"),T2=o(t=>t?t.reduce((r,n)=>r+";"+n,""):"","getLabelStyles"),jw=o(async(t,e)=>{let r=fr(me().flowchart.htmlLabels),n=await Hn(t,e.label,{style:T2(e.labelStyle),useHtmlLabels:r,addSvgBackground:!0,isNode:!1});Y.info("abc82",e,e.labelType);let i=t.insert("g").attr("class","edgeLabel"),a=i.insert("g").attr("class","label");a.node().appendChild(n);let s=n.getBBox();if(r){let u=n.children[0],h=Ge(n);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}a.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),Xw.set(e.id,i),e.width=s.width,e.height=s.height;let l;if(e.startLabelLeft){let u=await gc(e.startLabelLeft,T2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).startLeft=h,Yw(l,e.startLabelLeft)}if(e.startLabelRight){let u=await gc(e.startLabelRight,T2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=h.node().appendChild(u),f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).startRight=h,Yw(l,e.startLabelRight)}if(e.endLabelLeft){let u=await gc(e.endLabelLeft,T2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).endLeft=h,Yw(l,e.endLabelLeft)}if(e.endLabelRight){let u=await gc(e.endLabelRight,T2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).endRight=h,Yw(l,e.endLabelRight)}return n},"insertEdgeLabel");o(Yw,"setTerminalWidth");Kw=o((t,e)=>{Y.debug("Moving label abc88 ",t.id,t.label,Xw.get(t.id),e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=me(),{subGraphTitleTotalMargin:i}=Ru(n);if(t.label){let a=Xw.get(t.id),s=t.x,l=t.y;if(r){let u=Gt.calcLabelPosition(r);Y.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=pa.get(t.id).startLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=pa.get(t.id).startRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=pa.get(t.id).endLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=pa.get(t.id).endRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),I_e=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),O_e=o((t,e,r)=>{Y.debug(`intersection calc abc89:
471 + outsidePoint: ${JSON.stringify(e)}
472 + insidePoint : ${JSON.stringify(r)}
473 + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.x<e.x?s-a:s+a,u=t.height/2,h=Math.abs(e.y-r.y),f=Math.abs(e.x-r.x);if(Math.abs(i-e.y)*s>Math.abs(n-e.x)*u){let d=r.y<e.y?e.y-u-i:i-u-e.y;l=f*d/h;let p={x:r.x<e.x?r.x+l:r.x-f+l,y:r.y<e.y?r.y+h-d:r.y-h+d};return l===0&&(p.x=e.x,p.y=e.y),f===0&&(p.x=e.x),h===0&&(p.y=e.y),Y.debug(`abc89 top/bottom calc, Q ${h}, q ${d}, R ${f}, r ${l}`,p),p}else{r.x<e.x?l=e.x-s-n:l=n-s-e.x;let d=h*l/f,p=r.x<e.x?r.x+f-l:r.x-f+l,m=r.y<e.y?r.y+d:r.y-d;return Y.debug(`sides calc abc89, Q ${h}, q ${d}, R ${f}, r ${l}`,{_x:p,_y:m}),l===0&&(p=e.x,m=e.y),f===0&&(p=e.x),h===0&&(m=e.y),{x:p,y:m}}},"intersection"),JZ=o((t,e)=>{Y.warn("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(Y.info("abc88 checking point",a,e),!I_e(e,a)&&!i){let s=O_e(e,n,a);Y.debug("abc88 inside",a,n,s),Y.debug("abc88 intersection",s,e);let l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)?Y.warn("abc88 no intersect",s,r):r.push(s),i=!0}else Y.warn("abc88 outside",a,n),n=a,i||r.push(a)}),Y.debug("returning points",r),r},"cutPathAtIntersect");o(P_e,"extractCornerPoints");eJ=o(function(t,e,r){let n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),s=r/a;return{x:e.x-s*n,y:e.y-s*i}},"findAdjacentPoint"),B_e=o(function(t){let{cornerPointPositions:e}=P_e(t),r=[];for(let n=0;n<t.length;n++)if(e.includes(n)){let i=t[n-1],a=t[n+1],s=t[n],l=eJ(i,s,5),u=eJ(a,s,5),h=u.x-l.x,f=u.y-l.y;r.push(l);let d=Math.sqrt(2)*2,p={x:s.x,y:s.y};if(Math.abs(a.x-i.x)>10&&Math.abs(a.y-i.y)>=10){Y.debug("Corner point fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));let m=5;s.x===l.x?p={x:h<0?l.x-m+d:l.x+m-d,y:f<0?l.y-d:l.y+d}:p={x:h<0?l.x-d:l.x+d,y:f<0?l.y-m+d:l.y+m-d}}else Y.debug("Corner point skipping fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));r.push(p,u)}else r.push(t[n]);return r},"fixCorners"),Qw=o(function(t,e,r,n,i,a,s){let{handDrawnSeed:l}=me(),u=e.points,h=!1,f=i;var d=a;let p=[];for(let _ in e.cssCompiledStyles)ND(_)||p.push(e.cssCompiledStyles[_]);d.intersect&&f.intersect&&(u=u.slice(1,e.points.length-1),u.unshift(f.intersect(u[0])),Y.debug("Last point APA12",e.start,"-->",e.end,u[u.length-1],d,d.intersect(u[u.length-1])),u.push(d.intersect(u[u.length-1]))),e.toCluster&&(Y.info("to cluster abc88",r.get(e.toCluster)),u=JZ(e.points,r.get(e.toCluster).node),h=!0),e.fromCluster&&(Y.debug("from cluster abc88",r.get(e.fromCluster),JSON.stringify(u,null,2)),u=JZ(u.reverse(),r.get(e.fromCluster).node).reverse(),h=!0);let m=u.filter(_=>!Number.isNaN(_.y));m=B_e(m);let g=Do;switch(g=wu,e.curve){case"linear":g=wu;break;case"basis":g=Do;break;case"cardinal":g=Pv;break;case"bumpX":g=Rv;break;case"bumpY":g=Nv;break;case"catmullRom":g=$v;break;case"monotoneX":g=zv;break;case"monotoneY":g=Gv;break;case"natural":g=F0;break;case"step":g=$0;break;case"stepAfter":g=Uv;break;case"stepBefore":g=Vv;break;default:g=Do}let{x:y,y:v}=qw(e),x=wl().x(y).y(v).curve(g),b;switch(e.thickness){case"normal":b="edge-thickness-normal";break;case"thick":b="edge-thickness-thick";break;case"invisible":b="edge-thickness-invisible";break;default:b="edge-thickness-normal"}switch(e.pattern){case"solid":b+=" edge-pattern-solid";break;case"dotted":b+=" edge-pattern-dotted";break;case"dashed":b+=" edge-pattern-dashed";break;default:b+=" edge-pattern-solid"}let w,C=x(m),T=Array.isArray(e.style)?e.style:[e.style],E=T.find(_=>_?.startsWith("stroke:"));if(e.look==="handDrawn"){let _=Xe.svg(t);Object.assign([],m);let I=_.path(C,{roughness:.3,seed:l});b+=" transition",w=Ge(I).select("path").attr("id",e.id).attr("class"," "+b+(e.classes?" "+e.classes:"")).attr("style",T?T.reduce((k,L)=>k+";"+L,""):"");let D=w.attr("d");w.attr("d",D),t.node().appendChild(w.node())}else{let _=p.join(";"),I=T?T.reduce((L,R)=>L+R+";",""):"",D="";e.animate&&(D=" edge-animation-fast"),e.animation&&(D=" edge-animation-"+e.animation);let k=_?_+";"+I+";":I;w=t.append("path").attr("d",C).attr("id",e.id).attr("class"," "+b+(e.classes?" "+e.classes:"")+(D??"")).attr("style",k),E=k.match(/stroke:([^;]+)/)?.[1]}let A="";(me().flowchart.arrowMarkerAbsolute||me().state.arrowMarkerAbsolute)&&(A=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,A=A.replace(/\(/g,"\\(").replace(/\)/g,"\\)")),Y.info("arrowTypeStart",e.arrowTypeStart),Y.info("arrowTypeEnd",e.arrowTypeEnd),QZ(w,e,A,s,n,E);let S={};return h&&(S.updatedPath=u),S.originalPath=e.points,S},"insertEdge")});var F_e,$_e,z_e,G_e,V_e,U_e,H_e,W_e,q_e,Y_e,X_e,j_e,K_e,Q_e,Z_e,J_e,e9e,Zw,tL=N(()=>{"use strict";vt();F_e=o((t,e,r,n)=>{e.forEach(i=>{e9e[i](t,r,n)})},"insertMarkers"),$_e=o((t,e,r)=>{Y.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),z_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),G_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),V_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),U_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),H_e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),W_e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),q_e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),Y_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),X_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneStart").attr("class","marker onlyOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneEnd").attr("class","marker onlyOne "+e).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M3,0 L3,18 M9,0 L9,18")},"only_one"),j_e=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneStart").attr("class","marker zeroOrOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("d","M9,0 L9,18");let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneEnd").attr("class","marker zeroOrOne "+e).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),i.append("path").attr("d","M21,0 L21,18")},"zero_or_one"),K_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreStart").attr("class","marker oneOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreEnd").attr("class","marker oneOrMore "+e).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18")},"one_or_more"),Q_e=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreStart").attr("class","marker zeroOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18");let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreEnd").attr("class","marker zeroOrMore "+e).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),i.append("path").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"zero_or_more"),Z_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_arrowEnd").attr("refX",20).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("path").attr("d",`M0,0
474 + L20,10
475 + M20,10
476 + L0,20`)},"requirement_arrow"),J_e=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("g");n.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),n.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),n.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10)},"requirement_contains"),e9e={extension:$_e,composition:z_e,aggregation:G_e,dependency:V_e,lollipop:U_e,point:H_e,circle:W_e,cross:q_e,barb:Y_e,only_one:X_e,zero_or_one:j_e,one_or_more:K_e,zero_or_more:Q_e,requirement_arrow:Z_e,requirement_contains:J_e},Zw=F_e});async function vm(t,e,r){let n,i;e.shape==="rect"&&(e.rx&&e.ry?e.shape="roundedRect":e.shape="squareRect");let a=e.shape?QD[e.shape]:void 0;if(!a)throw new Error(`No such shape: ${e.shape}. Please check your syntax.`);if(e.link){let s;r.config.securityLevel==="sandbox"?s="_top":e.linkTarget&&(s=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",s??null),i=await a(n,e,r)}else i=await a(t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),Jw.set(e.id,n),e.haveCallback&&n.attr("class",n.attr("class")+" clickable"),n}var Jw,rJ,nJ,k2,eT=N(()=>{"use strict";vt();ZD();Jw=new Map;o(vm,"insertNode");rJ=o((t,e)=>{Jw.set(e.id,t)},"setNodeElem"),nJ=o(()=>{Jw.clear()},"clear"),k2=o(t=>{let e=Jw.get(t.id);Y.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});var iJ,aJ=N(()=>{"use strict";ji();gr();vt();Hw();eL();tL();eT();Ft();ir();iJ={common:Ze,getConfig:cr,insertCluster:ym,insertEdge:Qw,insertEdgeLabel:jw,insertMarkers:Zw,insertNode:vm,interpolateToCurve:W9,labelHelper:pt,log:Y,positionEdgeLabel:Kw}});function r9e(t){return typeof t=="symbol"||ri(t)&&da(t)==t9e}var t9e,no,Pd=N(()=>{"use strict";ku();No();t9e="[object Symbol]";o(r9e,"isSymbol");no=r9e});function n9e(t,e){for(var r=-1,n=t==null?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}var Ns,Bd=N(()=>{"use strict";o(n9e,"arrayMap");Ns=n9e});function lJ(t){if(typeof t=="string")return t;if(Pt(t))return Ns(t,lJ)+"";if(no(t))return oJ?oJ.call(t):"";var e=t+"";return e=="0"&&1/t==-i9e?"-0":e}var i9e,sJ,oJ,cJ,uJ=N(()=>{"use strict";Ed();Bd();Un();Pd();i9e=1/0,sJ=ea?ea.prototype:void 0,oJ=sJ?sJ.toString:void 0;o(lJ,"baseToString");cJ=lJ});function s9e(t){for(var e=t.length;e--&&a9e.test(t.charAt(e)););return e}var a9e,hJ,fJ=N(()=>{"use strict";a9e=/\s/;o(s9e,"trimmedEndIndex");hJ=s9e});function l9e(t){return t&&t.slice(0,hJ(t)+1).replace(o9e,"")}var o9e,dJ,pJ=N(()=>{"use strict";fJ();o9e=/^\s+/;o(l9e,"baseTrim");dJ=l9e});function d9e(t){if(typeof t=="number")return t;if(no(t))return mJ;if(bn(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=bn(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=dJ(t);var r=u9e.test(t);return r||h9e.test(t)?f9e(t.slice(2),r?2:8):c9e.test(t)?mJ:+t}var mJ,c9e,u9e,h9e,f9e,gJ,yJ=N(()=>{"use strict";pJ();Js();Pd();mJ=NaN,c9e=/^[-+]0x[0-9a-f]+$/i,u9e=/^0b[01]+$/i,h9e=/^0o[0-7]+$/i,f9e=parseInt;o(d9e,"toNumber");gJ=d9e});function m9e(t){if(!t)return t===0?t:0;if(t=gJ(t),t===vJ||t===-vJ){var e=t<0?-1:1;return e*p9e}return t===t?t:0}var vJ,p9e,xm,rL=N(()=>{"use strict";yJ();vJ=1/0,p9e=17976931348623157e292;o(m9e,"toFinite");xm=m9e});function g9e(t){var e=xm(t),r=e%1;return e===e?r?e-r:e:0}var vc,bm=N(()=>{"use strict";rL();o(g9e,"toInteger");vc=g9e});var y9e,tT,xJ=N(()=>{"use strict";Lh();Lo();y9e=Ss(li,"WeakMap"),tT=y9e});function v9e(){}var ni,nL=N(()=>{"use strict";o(v9e,"noop");ni=v9e});function x9e(t,e){for(var r=-1,n=t==null?0:t.length;++r<n&&e(t[r],r,t)!==!1;);return t}var rT,iL=N(()=>{"use strict";o(x9e,"arrayEach");rT=x9e});function b9e(t,e,r,n){for(var i=t.length,a=r+(n?1:-1);n?a--:++a<i;)if(e(t[a],a,t))return a;return-1}var nT,aL=N(()=>{"use strict";o(b9e,"baseFindIndex");nT=b9e});function w9e(t){return t!==t}var bJ,wJ=N(()=>{"use strict";o(w9e,"baseIsNaN");bJ=w9e});function T9e(t,e,r){for(var n=r-1,i=t.length;++n<i;)if(t[n]===e)return n;return-1}var TJ,kJ=N(()=>{"use strict";o(T9e,"strictIndexOf");TJ=T9e});function k9e(t,e,r){return e===e?TJ(t,e,r):nT(t,bJ,r)}var wm,iT=N(()=>{"use strict";aL();wJ();kJ();o(k9e,"baseIndexOf");wm=k9e});function E9e(t,e){var r=t==null?0:t.length;return!!r&&wm(t,e,0)>-1}var aT,sL=N(()=>{"use strict";iT();o(E9e,"arrayIncludes");aT=E9e});var S9e,EJ,SJ=N(()=>{"use strict";N9();S9e=nw(Object.keys,Object),EJ=S9e});function _9e(t){if(!uc(t))return EJ(t);var e=[];for(var r in Object(t))A9e.call(t,r)&&r!="constructor"&&e.push(r);return e}var C9e,A9e,Tm,sT=N(()=>{"use strict";Z0();SJ();C9e=Object.prototype,A9e=C9e.hasOwnProperty;o(_9e,"baseKeys");Tm=_9e});function D9e(t){return ci(t)?lw(t):Tm(t)}var zr,xc=N(()=>{"use strict";B9();sT();Mo();o(D9e,"keys");zr=D9e});var L9e,R9e,N9e,ma,CJ=N(()=>{"use strict";rm();Dd();G9();Mo();Z0();xc();L9e=Object.prototype,R9e=L9e.hasOwnProperty,N9e=hw(function(t,e){if(uc(e)||ci(e)){Po(e,zr(e),t);return}for(var r in e)R9e.call(e,r)&&hc(t,r,e[r])}),ma=N9e});function O9e(t,e){if(Pt(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||no(t)?!0:I9e.test(t)||!M9e.test(t)||e!=null&&t in Object(e)}var M9e,I9e,km,oT=N(()=>{"use strict";Un();Pd();M9e=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,I9e=/^\w*$/;o(O9e,"isKey");km=O9e});function B9e(t){var e=H0(t,function(n){return r.size===P9e&&r.clear(),n}),r=e.cache;return e}var P9e,AJ,_J=N(()=>{"use strict";S9();P9e=500;o(B9e,"memoizeCapped");AJ=B9e});var F9e,$9e,z9e,DJ,LJ=N(()=>{"use strict";_J();F9e=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$9e=/\\(\\)?/g,z9e=AJ(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(F9e,function(r,n,i,a){e.push(i?a.replace($9e,"$1"):n||r)}),e}),DJ=z9e});function G9e(t){return t==null?"":cJ(t)}var lT,oL=N(()=>{"use strict";uJ();o(G9e,"toString");lT=G9e});function V9e(t,e){return Pt(t)?t:km(t,e)?[t]:DJ(lT(t))}var Yh,E2=N(()=>{"use strict";Un();oT();LJ();oL();o(V9e,"castPath");Yh=V9e});function H9e(t){if(typeof t=="string"||no(t))return t;var e=t+"";return e=="0"&&1/t==-U9e?"-0":e}var U9e,bc,Em=N(()=>{"use strict";Pd();U9e=1/0;o(H9e,"toKey");bc=H9e});function W9e(t,e){e=Yh(e,t);for(var r=0,n=e.length;t!=null&&r<n;)t=t[bc(e[r++])];return r&&r==n?t:void 0}var Xh,S2=N(()=>{"use strict";E2();Em();o(W9e,"baseGet");Xh=W9e});function q9e(t,e,r){var n=t==null?void 0:Xh(t,e);return n===void 0?r:n}var RJ,NJ=N(()=>{"use strict";S2();o(q9e,"get");RJ=q9e});function Y9e(t,e){for(var r=-1,n=e.length,i=t.length;++r<n;)t[i+r]=e[r];return t}var Sm,cT=N(()=>{"use strict";o(Y9e,"arrayPush");Sm=Y9e});function X9e(t){return Pt(t)||El(t)||!!(MJ&&t&&t[MJ])}var MJ,IJ,OJ=N(()=>{"use strict";Ed();J0();Un();MJ=ea?ea.isConcatSpreadable:void 0;o(X9e,"isFlattenable");IJ=X9e});function PJ(t,e,r,n,i){var a=-1,s=t.length;for(r||(r=IJ),i||(i=[]);++a<s;){var l=t[a];e>0&&r(l)?e>1?PJ(l,e-1,r,n,i):Sm(i,l):n||(i[i.length]=l)}return i}var wc,Cm=N(()=>{"use strict";cT();OJ();o(PJ,"baseFlatten");wc=PJ});function j9e(t){var e=t==null?0:t.length;return e?wc(t,1):[]}var qr,uT=N(()=>{"use strict";Cm();o(j9e,"flatten");qr=j9e});function K9e(t){return uw(cw(t,void 0,qr),t+"")}var BJ,FJ=N(()=>{"use strict";uT();F9();z9();o(K9e,"flatRest");BJ=K9e});function Q9e(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),r=r>i?i:r,r<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var a=Array(i);++n<i;)a[n]=t[n+e];return a}var hT,lL=N(()=>{"use strict";o(Q9e,"baseSlice");hT=Q9e});function sDe(t){return aDe.test(t)}var Z9e,J9e,eDe,tDe,rDe,nDe,iDe,aDe,$J,zJ=N(()=>{"use strict";Z9e="\\ud800-\\udfff",J9e="\\u0300-\\u036f",eDe="\\ufe20-\\ufe2f",tDe="\\u20d0-\\u20ff",rDe=J9e+eDe+tDe,nDe="\\ufe0e\\ufe0f",iDe="\\u200d",aDe=RegExp("["+iDe+Z9e+rDe+nDe+"]");o(sDe,"hasUnicode");$J=sDe});function oDe(t,e,r,n){var i=-1,a=t==null?0:t.length;for(n&&a&&(r=t[++i]);++i<a;)r=e(r,t[i],i,t);return r}var GJ,VJ=N(()=>{"use strict";o(oDe,"arrayReduce");GJ=oDe});function lDe(t,e){return t&&Po(e,zr(e),t)}var UJ,HJ=N(()=>{"use strict";Dd();xc();o(lDe,"baseAssign");UJ=lDe});function cDe(t,e){return t&&Po(e,Cs(e),t)}var WJ,qJ=N(()=>{"use strict";Dd();Bh();o(cDe,"baseAssignIn");WJ=cDe});function uDe(t,e){for(var r=-1,n=t==null?0:t.length,i=0,a=[];++r<n;){var s=t[r];e(s,r,t)&&(a[i++]=s)}return a}var Am,fT=N(()=>{"use strict";o(uDe,"arrayFilter");Am=uDe});function hDe(){return[]}var dT,cL=N(()=>{"use strict";o(hDe,"stubArray");dT=hDe});var fDe,dDe,YJ,pDe,_m,pT=N(()=>{"use strict";fT();cL();fDe=Object.prototype,dDe=fDe.propertyIsEnumerable,YJ=Object.getOwnPropertySymbols,pDe=YJ?function(t){return t==null?[]:(t=Object(t),Am(YJ(t),function(e){return dDe.call(t,e)}))}:dT,_m=pDe});function mDe(t,e){return Po(t,_m(t),e)}var XJ,jJ=N(()=>{"use strict";Dd();pT();o(mDe,"copySymbols");XJ=mDe});var gDe,yDe,mT,uL=N(()=>{"use strict";cT();iw();pT();cL();gDe=Object.getOwnPropertySymbols,yDe=gDe?function(t){for(var e=[];t;)Sm(e,_m(t)),t=Q0(t);return e}:dT,mT=yDe});function vDe(t,e){return Po(t,mT(t),e)}var KJ,QJ=N(()=>{"use strict";Dd();uL();o(vDe,"copySymbolsIn");KJ=vDe});function xDe(t,e,r){var n=e(t);return Pt(t)?n:Sm(n,r(t))}var gT,hL=N(()=>{"use strict";cT();Un();o(xDe,"baseGetAllKeys");gT=xDe});function bDe(t){return gT(t,zr,_m)}var C2,fL=N(()=>{"use strict";hL();pT();xc();o(bDe,"getAllKeys");C2=bDe});function wDe(t){return gT(t,Cs,mT)}var yT,dL=N(()=>{"use strict";hL();uL();Bh();o(wDe,"getAllKeysIn");yT=wDe});var TDe,vT,ZJ=N(()=>{"use strict";Lh();Lo();TDe=Ss(li,"DataView"),vT=TDe});var kDe,xT,JJ=N(()=>{"use strict";Lh();Lo();kDe=Ss(li,"Promise"),xT=kDe});var EDe,jh,pL=N(()=>{"use strict";Lh();Lo();EDe=Ss(li,"Set"),jh=EDe});var eee,SDe,tee,ree,nee,iee,CDe,ADe,_De,DDe,LDe,Fd,io,$d=N(()=>{"use strict";ZJ();K5();JJ();pL();xJ();ku();T9();eee="[object Map]",SDe="[object Object]",tee="[object Promise]",ree="[object Set]",nee="[object WeakMap]",iee="[object DataView]",CDe=Eu(vT),ADe=Eu(Mh),_De=Eu(xT),DDe=Eu(jh),LDe=Eu(tT),Fd=da;(vT&&Fd(new vT(new ArrayBuffer(1)))!=iee||Mh&&Fd(new Mh)!=eee||xT&&Fd(xT.resolve())!=tee||jh&&Fd(new jh)!=ree||tT&&Fd(new tT)!=nee)&&(Fd=o(function(t){var e=da(t),r=e==SDe?t.constructor:void 0,n=r?Eu(r):"";if(n)switch(n){case CDe:return iee;case ADe:return eee;case _De:return tee;case DDe:return ree;case LDe:return nee}return e},"getTag"));io=Fd});function MDe(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&NDe.call(t,"index")&&(r.index=t.index,r.input=t.input),r}var RDe,NDe,aee,see=N(()=>{"use strict";RDe=Object.prototype,NDe=RDe.hasOwnProperty;o(MDe,"initCloneArray");aee=MDe});function IDe(t,e){var r=e?K0(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}var oee,lee=N(()=>{"use strict";ew();o(IDe,"cloneDataView");oee=IDe});function PDe(t){var e=new t.constructor(t.source,ODe.exec(t));return e.lastIndex=t.lastIndex,e}var ODe,cee,uee=N(()=>{"use strict";ODe=/\w*$/;o(PDe,"cloneRegExp");cee=PDe});function BDe(t){return fee?Object(fee.call(t)):{}}var hee,fee,dee,pee=N(()=>{"use strict";Ed();hee=ea?ea.prototype:void 0,fee=hee?hee.valueOf:void 0;o(BDe,"cloneSymbol");dee=BDe});function nLe(t,e,r){var n=t.constructor;switch(e){case qDe:return K0(t);case FDe:case $De:return new n(+t);case YDe:return oee(t,r);case XDe:case jDe:case KDe:case QDe:case ZDe:case JDe:case eLe:case tLe:case rLe:return tw(t,r);case zDe:return new n;case GDe:case HDe:return new n(t);case VDe:return cee(t);case UDe:return new n;case WDe:return dee(t)}}var FDe,$De,zDe,GDe,VDe,UDe,HDe,WDe,qDe,YDe,XDe,jDe,KDe,QDe,ZDe,JDe,eLe,tLe,rLe,mee,gee=N(()=>{"use strict";ew();lee();uee();pee();L9();FDe="[object Boolean]",$De="[object Date]",zDe="[object Map]",GDe="[object Number]",VDe="[object RegExp]",UDe="[object Set]",HDe="[object String]",WDe="[object Symbol]",qDe="[object ArrayBuffer]",YDe="[object DataView]",XDe="[object Float32Array]",jDe="[object Float64Array]",KDe="[object Int8Array]",QDe="[object Int16Array]",ZDe="[object Int32Array]",JDe="[object Uint8Array]",eLe="[object Uint8ClampedArray]",tLe="[object Uint16Array]",rLe="[object Uint32Array]";o(nLe,"initCloneByTag");mee=nLe});function aLe(t){return ri(t)&&io(t)==iLe}var iLe,yee,vee=N(()=>{"use strict";$d();No();iLe="[object Map]";o(aLe,"baseIsMap");yee=aLe});var xee,sLe,bee,wee=N(()=>{"use strict";vee();_d();t2();xee=Oo&&Oo.isMap,sLe=xee?Io(xee):yee,bee=sLe});function lLe(t){return ri(t)&&io(t)==oLe}var oLe,Tee,kee=N(()=>{"use strict";$d();No();oLe="[object Set]";o(lLe,"baseIsSet");Tee=lLe});var Eee,cLe,See,Cee=N(()=>{"use strict";kee();_d();t2();Eee=Oo&&Oo.isSet,cLe=Eee?Io(Eee):Tee,See=cLe});function bT(t,e,r,n,i,a){var s,l=e&uLe,u=e&hLe,h=e&fLe;if(r&&(s=i?r(t,n,i,a):r(t)),s!==void 0)return s;if(!bn(t))return t;var f=Pt(t);if(f){if(s=aee(t),!l)return rw(t,s)}else{var d=io(t),p=d==_ee||d==yLe;if(Sl(t))return J5(t,l);if(d==Dee||d==Aee||p&&!i){if(s=u||p?{}:aw(t),!l)return u?KJ(t,WJ(s,t)):XJ(t,UJ(s,t))}else{if(!_n[d])return i?t:{};s=mee(t,d,l)}}a||(a=new lc);var m=a.get(t);if(m)return m;a.set(t,s),See(t)?t.forEach(function(v){s.add(bT(v,e,r,v,t,a))}):bee(t)&&t.forEach(function(v,x){s.set(x,bT(v,e,r,x,t,a))});var g=h?u?yT:C2:u?Cs:zr,y=f?void 0:g(t);return rT(y||t,function(v,x){y&&(x=v,v=t[x]),hc(s,x,bT(v,e,r,x,t,a))}),s}var uLe,hLe,fLe,Aee,dLe,pLe,mLe,gLe,_ee,yLe,vLe,xLe,Dee,bLe,wLe,TLe,kLe,ELe,SLe,CLe,ALe,_Le,DLe,LLe,RLe,NLe,MLe,ILe,OLe,_n,wT,mL=N(()=>{"use strict";Zv();iL();rm();HJ();qJ();_9();R9();jJ();QJ();fL();dL();$d();see();gee();M9();Un();tm();wee();Js();Cee();xc();Bh();uLe=1,hLe=2,fLe=4,Aee="[object Arguments]",dLe="[object Array]",pLe="[object Boolean]",mLe="[object Date]",gLe="[object Error]",_ee="[object Function]",yLe="[object GeneratorFunction]",vLe="[object Map]",xLe="[object Number]",Dee="[object Object]",bLe="[object RegExp]",wLe="[object Set]",TLe="[object String]",kLe="[object Symbol]",ELe="[object WeakMap]",SLe="[object ArrayBuffer]",CLe="[object DataView]",ALe="[object Float32Array]",_Le="[object Float64Array]",DLe="[object Int8Array]",LLe="[object Int16Array]",RLe="[object Int32Array]",NLe="[object Uint8Array]",MLe="[object Uint8ClampedArray]",ILe="[object Uint16Array]",OLe="[object Uint32Array]",_n={};_n[Aee]=_n[dLe]=_n[SLe]=_n[CLe]=_n[pLe]=_n[mLe]=_n[ALe]=_n[_Le]=_n[DLe]=_n[LLe]=_n[RLe]=_n[vLe]=_n[xLe]=_n[Dee]=_n[bLe]=_n[wLe]=_n[TLe]=_n[kLe]=_n[NLe]=_n[MLe]=_n[ILe]=_n[OLe]=!0;_n[gLe]=_n[_ee]=_n[ELe]=!1;o(bT,"baseClone");wT=bT});function BLe(t){return wT(t,PLe)}var PLe,an,gL=N(()=>{"use strict";mL();PLe=4;o(BLe,"clone");an=BLe});function zLe(t){return wT(t,FLe|$Le)}var FLe,$Le,yL,Lee=N(()=>{"use strict";mL();FLe=1,$Le=4;o(zLe,"cloneDeep");yL=zLe});function GLe(t){for(var e=-1,r=t==null?0:t.length,n=0,i=[];++e<r;){var a=t[e];a&&(i[n++]=a)}return i}var Tc,Ree=N(()=>{"use strict";o(GLe,"compact");Tc=GLe});function ULe(t){return this.__data__.set(t,VLe),this}var VLe,Nee,Mee=N(()=>{"use strict";VLe="__lodash_hash_undefined__";o(ULe,"setCacheAdd");Nee=ULe});function HLe(t){return this.__data__.has(t)}var Iee,Oee=N(()=>{"use strict";o(HLe,"setCacheHas");Iee=HLe});function TT(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new Cd;++e<r;)this.add(t[e])}var Dm,kT=N(()=>{"use strict";Q5();Mee();Oee();o(TT,"SetCache");TT.prototype.add=TT.prototype.push=Nee;TT.prototype.has=Iee;Dm=TT});function WLe(t,e){for(var r=-1,n=t==null?0:t.length;++r<n;)if(e(t[r],r,t))return!0;return!1}var ET,vL=N(()=>{"use strict";o(WLe,"arraySome");ET=WLe});function qLe(t,e){return t.has(e)}var Lm,ST=N(()=>{"use strict";o(qLe,"cacheHas");Lm=qLe});function jLe(t,e,r,n,i,a){var s=r&YLe,l=t.length,u=e.length;if(l!=u&&!(s&&u>l))return!1;var h=a.get(t),f=a.get(e);if(h&&f)return h==e&&f==t;var d=-1,p=!0,m=r&XLe?new Dm:void 0;for(a.set(t,e),a.set(e,t);++d<l;){var g=t[d],y=e[d];if(n)var v=s?n(y,g,d,e,t,a):n(g,y,d,t,e,a);if(v!==void 0){if(v)continue;p=!1;break}if(m){if(!ET(e,function(x,b){if(!Lm(m,b)&&(g===x||i(g,x,r,n,a)))return m.push(b)})){p=!1;break}}else if(!(g===y||i(g,y,r,n,a))){p=!1;break}}return a.delete(t),a.delete(e),p}var YLe,XLe,CT,xL=N(()=>{"use strict";kT();vL();ST();YLe=1,XLe=2;o(jLe,"equalArrays");CT=jLe});function KLe(t){var e=-1,r=Array(t.size);return t.forEach(function(n,i){r[++e]=[i,n]}),r}var Pee,Bee=N(()=>{"use strict";o(KLe,"mapToArray");Pee=KLe});function QLe(t){var e=-1,r=Array(t.size);return t.forEach(function(n){r[++e]=n}),r}var Rm,AT=N(()=>{"use strict";o(QLe,"setToArray");Rm=QLe});function hRe(t,e,r,n,i,a,s){switch(r){case uRe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case cRe:return!(t.byteLength!=e.byteLength||!a(new j0(t),new j0(e)));case eRe:case tRe:case iRe:return Ro(+t,+e);case rRe:return t.name==e.name&&t.message==e.message;case aRe:case oRe:return t==e+"";case nRe:var l=Pee;case sRe:var u=n&ZLe;if(l||(l=Rm),t.size!=e.size&&!u)return!1;var h=s.get(t);if(h)return h==e;n|=JLe,s.set(t,e);var f=CT(l(t),l(e),n,i,a,s);return s.delete(t),f;case lRe:if(bL)return bL.call(t)==bL.call(e)}return!1}var ZLe,JLe,eRe,tRe,rRe,nRe,iRe,aRe,sRe,oRe,lRe,cRe,uRe,Fee,bL,$ee,zee=N(()=>{"use strict";Ed();D9();Sd();xL();Bee();AT();ZLe=1,JLe=2,eRe="[object Boolean]",tRe="[object Date]",rRe="[object Error]",nRe="[object Map]",iRe="[object Number]",aRe="[object RegExp]",sRe="[object Set]",oRe="[object String]",lRe="[object Symbol]",cRe="[object ArrayBuffer]",uRe="[object DataView]",Fee=ea?ea.prototype:void 0,bL=Fee?Fee.valueOf:void 0;o(hRe,"equalByTag");$ee=hRe});function mRe(t,e,r,n,i,a){var s=r&fRe,l=C2(t),u=l.length,h=C2(e),f=h.length;if(u!=f&&!s)return!1;for(var d=u;d--;){var p=l[d];if(!(s?p in e:pRe.call(e,p)))return!1}var m=a.get(t),g=a.get(e);if(m&&g)return m==e&&g==t;var y=!0;a.set(t,e),a.set(e,t);for(var v=s;++d<u;){p=l[d];var x=t[p],b=e[p];if(n)var w=s?n(b,x,p,e,t,a):n(x,b,p,t,e,a);if(!(w===void 0?x===b||i(x,b,r,n,a):w)){y=!1;break}v||(v=p=="constructor")}if(y&&!v){var C=t.constructor,T=e.constructor;C!=T&&"constructor"in t&&"constructor"in e&&!(typeof C=="function"&&C instanceof C&&typeof T=="function"&&T instanceof T)&&(y=!1)}return a.delete(t),a.delete(e),y}var fRe,dRe,pRe,Gee,Vee=N(()=>{"use strict";fL();fRe=1,dRe=Object.prototype,pRe=dRe.hasOwnProperty;o(mRe,"equalObjects");Gee=mRe});function vRe(t,e,r,n,i,a){var s=Pt(t),l=Pt(e),u=s?Hee:io(t),h=l?Hee:io(e);u=u==Uee?_T:u,h=h==Uee?_T:h;var f=u==_T,d=h==_T,p=u==h;if(p&&Sl(t)){if(!Sl(e))return!1;s=!0,f=!1}if(p&&!f)return a||(a=new lc),s||Oh(t)?CT(t,e,r,n,i,a):$ee(t,e,u,r,n,i,a);if(!(r&gRe)){var m=f&&Wee.call(t,"__wrapped__"),g=d&&Wee.call(e,"__wrapped__");if(m||g){var y=m?t.value():t,v=g?e.value():e;return a||(a=new lc),i(y,v,r,n,a)}}return p?(a||(a=new lc),Gee(t,e,r,n,i,a)):!1}var gRe,Uee,Hee,_T,yRe,Wee,qee,Yee=N(()=>{"use strict";Zv();xL();zee();Vee();$d();Un();tm();r2();gRe=1,Uee="[object Arguments]",Hee="[object Array]",_T="[object Object]",yRe=Object.prototype,Wee=yRe.hasOwnProperty;o(vRe,"baseIsEqualDeep");qee=vRe});function Xee(t,e,r,n,i){return t===e?!0:t==null||e==null||!ri(t)&&!ri(e)?t!==t&&e!==e:qee(t,e,r,n,Xee,i)}var DT,wL=N(()=>{"use strict";Yee();No();o(Xee,"baseIsEqual");DT=Xee});function wRe(t,e,r,n){var i=r.length,a=i,s=!n;if(t==null)return!a;for(t=Object(t);i--;){var l=r[i];if(s&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++i<a;){l=r[i];var u=l[0],h=t[u],f=l[1];if(s&&l[2]){if(h===void 0&&!(u in t))return!1}else{var d=new lc;if(n)var p=n(h,f,u,t,e,d);if(!(p===void 0?DT(f,h,xRe|bRe,n,d):p))return!1}}return!0}var xRe,bRe,jee,Kee=N(()=>{"use strict";Zv();wL();xRe=1,bRe=2;o(wRe,"baseIsMatch");jee=wRe});function TRe(t){return t===t&&!bn(t)}var LT,TL=N(()=>{"use strict";Js();o(TRe,"isStrictComparable");LT=TRe});function kRe(t){for(var e=zr(t),r=e.length;r--;){var n=e[r],i=t[n];e[r]=[n,i,LT(i)]}return e}var Qee,Zee=N(()=>{"use strict";TL();xc();o(kRe,"getMatchData");Qee=kRe});function ERe(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==void 0||t in Object(r))}}var RT,kL=N(()=>{"use strict";o(ERe,"matchesStrictComparable");RT=ERe});function SRe(t){var e=Qee(t);return e.length==1&&e[0][2]?RT(e[0][0],e[0][1]):function(r){return r===t||jee(r,t,e)}}var Jee,ete=N(()=>{"use strict";Kee();Zee();kL();o(SRe,"baseMatches");Jee=SRe});function CRe(t,e){return t!=null&&e in Object(t)}var tte,rte=N(()=>{"use strict";o(CRe,"baseHasIn");tte=CRe});function ARe(t,e,r){e=Yh(e,t);for(var n=-1,i=e.length,a=!1;++n<i;){var s=bc(e[n]);if(!(a=t!=null&&r(t,s)))break;t=t[s]}return a||++n!=i?a:(i=t==null?0:t.length,!!i&&em(i)&&Ph(s,i)&&(Pt(t)||El(t)))}var NT,EL=N(()=>{"use strict";E2();J0();Un();i2();sw();Em();o(ARe,"hasPath");NT=ARe});function _Re(t,e){return t!=null&&NT(t,e,tte)}var MT,SL=N(()=>{"use strict";rte();EL();o(_Re,"hasIn");MT=_Re});function RRe(t,e){return km(t)&&LT(e)?RT(bc(t),e):function(r){var n=RJ(r,t);return n===void 0&&n===e?MT(r,t):DT(e,n,DRe|LRe)}}var DRe,LRe,nte,ite=N(()=>{"use strict";wL();NJ();SL();oT();TL();kL();Em();DRe=1,LRe=2;o(RRe,"baseMatchesProperty");nte=RRe});function NRe(t){return function(e){return e?.[t]}}var IT,CL=N(()=>{"use strict";o(NRe,"baseProperty");IT=NRe});function MRe(t){return function(e){return Xh(e,t)}}var ate,ste=N(()=>{"use strict";S2();o(MRe,"basePropertyDeep");ate=MRe});function IRe(t){return km(t)?IT(bc(t)):ate(t)}var ote,lte=N(()=>{"use strict";CL();ste();oT();Em();o(IRe,"property");ote=IRe});function ORe(t){return typeof t=="function"?t:t==null?ta:typeof t=="object"?Pt(t)?nte(t[0],t[1]):Jee(t):ote(t)}var pn,rs=N(()=>{"use strict";ete();ite();Cu();Un();lte();o(ORe,"baseIteratee");pn=ORe});function PRe(t,e,r,n){for(var i=-1,a=t==null?0:t.length;++i<a;){var s=t[i];e(n,s,r(s),t)}return n}var cte,ute=N(()=>{"use strict";o(PRe,"arrayAggregator");cte=PRe});function BRe(t,e){return t&&X0(t,e,zr)}var Nm,OT=N(()=>{"use strict";Z5();xc();o(BRe,"baseForOwn");Nm=BRe});function FRe(t,e){return function(r,n){if(r==null)return r;if(!ci(r))return t(r,n);for(var i=r.length,a=e?i:-1,s=Object(r);(e?a--:++a<i)&&n(s[a],a,s)!==!1;);return r}}var hte,fte=N(()=>{"use strict";Mo();o(FRe,"createBaseEach");hte=FRe});var $Re,Ms,Kh=N(()=>{"use strict";OT();fte();$Re=hte(Nm),Ms=$Re});function zRe(t,e,r,n){return Ms(t,function(i,a,s){e(n,i,r(i),s)}),n}var dte,pte=N(()=>{"use strict";Kh();o(zRe,"baseAggregator");dte=zRe});function GRe(t,e){return function(r,n){var i=Pt(r)?cte:dte,a=e?e():{};return i(r,t,pn(n,2),a)}}var mte,gte=N(()=>{"use strict";ute();pte();rs();Un();o(GRe,"createAggregator");mte=GRe});var VRe,PT,yte=N(()=>{"use strict";Lo();VRe=o(function(){return li.Date.now()},"now"),PT=VRe});var vte,URe,HRe,Qh,xte=N(()=>{"use strict";nm();Sd();Ld();Bh();vte=Object.prototype,URe=vte.hasOwnProperty,HRe=fc(function(t,e){t=Object(t);var r=-1,n=e.length,i=n>2?e[2]:void 0;for(i&&eo(e[0],e[1],i)&&(n=1);++r<n;)for(var a=e[r],s=Cs(a),l=-1,u=s.length;++l<u;){var h=s[l],f=t[h];(f===void 0||Ro(f,vte[h])&&!URe.call(t,h))&&(t[h]=a[h])}return t}),Qh=HRe});function WRe(t,e,r){for(var n=-1,i=t==null?0:t.length;++n<i;)if(r(e,t[n]))return!0;return!1}var BT,AL=N(()=>{"use strict";o(WRe,"arrayIncludesWith");BT=WRe});function YRe(t,e,r,n){var i=-1,a=aT,s=!0,l=t.length,u=[],h=e.length;if(!l)return u;r&&(e=Ns(e,Io(r))),n?(a=BT,s=!1):e.length>=qRe&&(a=Lm,s=!1,e=new Dm(e));e:for(;++i<l;){var f=t[i],d=r==null?f:r(f);if(f=n||f!==0?f:0,s&&d===d){for(var p=h;p--;)if(e[p]===d)continue e;u.push(f)}else a(e,d,n)||u.push(f)}return u}var qRe,bte,wte=N(()=>{"use strict";kT();sL();AL();Bd();_d();ST();qRe=200;o(YRe,"baseDifference");bte=YRe});var XRe,Zh,Tte=N(()=>{"use strict";wte();Cm();nm();ow();XRe=fc(function(t,e){return Ad(t)?bte(t,wc(e,1,Ad,!0)):[]}),Zh=XRe});function jRe(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var ga,kte=N(()=>{"use strict";o(jRe,"last");ga=jRe});function KRe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:vc(e),hT(t,e<0?0:e,n)):[]}var gi,Ete=N(()=>{"use strict";lL();bm();o(KRe,"drop");gi=KRe});function QRe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:vc(e),e=n-e,hT(t,0,e<0?0:e)):[]}var Nu,Ste=N(()=>{"use strict";lL();bm();o(QRe,"dropRight");Nu=QRe});function ZRe(t){return typeof t=="function"?t:ta}var Mm,FT=N(()=>{"use strict";Cu();o(ZRe,"castFunction");Mm=ZRe});function JRe(t,e){var r=Pt(t)?rT:Ms;return r(t,Mm(e))}var Ae,$T=N(()=>{"use strict";iL();Kh();FT();Un();o(JRe,"forEach");Ae=JRe});var Cte=N(()=>{"use strict";$T()});function eNe(t,e){for(var r=-1,n=t==null?0:t.length;++r<n;)if(!e(t[r],r,t))return!1;return!0}var Ate,_te=N(()=>{"use strict";o(eNe,"arrayEvery");Ate=eNe});function tNe(t,e){var r=!0;return Ms(t,function(n,i,a){return r=!!e(n,i,a),r}),r}var Dte,Lte=N(()=>{"use strict";Kh();o(tNe,"baseEvery");Dte=tNe});function rNe(t,e,r){var n=Pt(t)?Ate:Dte;return r&&eo(t,e,r)&&(e=void 0),n(t,pn(e,3))}var Ma,Rte=N(()=>{"use strict";_te();Lte();rs();Un();Ld();o(rNe,"every");Ma=rNe});function nNe(t,e){var r=[];return Ms(t,function(n,i,a){e(n,i,a)&&r.push(n)}),r}var zT,_L=N(()=>{"use strict";Kh();o(nNe,"baseFilter");zT=nNe});function iNe(t,e){var r=Pt(t)?Am:zT;return r(t,pn(e,3))}var Yr,DL=N(()=>{"use strict";fT();_L();rs();Un();o(iNe,"filter");Yr=iNe});function aNe(t){return function(e,r,n){var i=Object(e);if(!ci(e)){var a=pn(r,3);e=zr(e),r=o(function(l){return a(i[l],l,i)},"predicate")}var s=t(e,r,n);return s>-1?i[a?e[s]:s]:void 0}}var Nte,Mte=N(()=>{"use strict";rs();Mo();xc();o(aNe,"createFind");Nte=aNe});function oNe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:vc(r);return i<0&&(i=sNe(n+i,0)),nT(t,pn(e,3),i)}var sNe,Ite,Ote=N(()=>{"use strict";aL();rs();bm();sNe=Math.max;o(oNe,"findIndex");Ite=oNe});var lNe,ns,Pte=N(()=>{"use strict";Mte();Ote();lNe=Nte(Ite),ns=lNe});function cNe(t){return t&&t.length?t[0]:void 0}var ia,Bte=N(()=>{"use strict";o(cNe,"head");ia=cNe});var Fte=N(()=>{"use strict";Bte()});function uNe(t,e){var r=-1,n=ci(t)?Array(t.length):[];return Ms(t,function(i,a,s){n[++r]=e(i,a,s)}),n}var GT,LL=N(()=>{"use strict";Kh();Mo();o(uNe,"baseMap");GT=uNe});function hNe(t,e){var r=Pt(t)?Ns:GT;return r(t,pn(e,3))}var Je,Im=N(()=>{"use strict";Bd();rs();LL();Un();o(hNe,"map");Je=hNe});function fNe(t,e){return wc(Je(t,e),1)}var ya,RL=N(()=>{"use strict";Cm();Im();o(fNe,"flatMap");ya=fNe});function dNe(t,e){return t==null?t:X0(t,Mm(e),Cs)}var NL,$te=N(()=>{"use strict";Z5();FT();Bh();o(dNe,"forIn");NL=dNe});function pNe(t,e){return t&&Nm(t,Mm(e))}var ML,zte=N(()=>{"use strict";OT();FT();o(pNe,"forOwn");ML=pNe});var mNe,gNe,yNe,IL,Gte=N(()=>{"use strict";Y0();gte();mNe=Object.prototype,gNe=mNe.hasOwnProperty,yNe=mte(function(t,e,r){gNe.call(t,r)?t[r].push(e):cc(t,r,[e])}),IL=yNe});function vNe(t,e){return t>e}var Vte,Ute=N(()=>{"use strict";o(vNe,"baseGt");Vte=vNe});function wNe(t,e){return t!=null&&bNe.call(t,e)}var xNe,bNe,Hte,Wte=N(()=>{"use strict";xNe=Object.prototype,bNe=xNe.hasOwnProperty;o(wNe,"baseHas");Hte=wNe});function TNe(t,e){return t!=null&&NT(t,e,Hte)}var Bt,qte=N(()=>{"use strict";Wte();EL();o(TNe,"has");Bt=TNe});function ENe(t){return typeof t=="string"||!Pt(t)&&ri(t)&&da(t)==kNe}var kNe,yi,VT=N(()=>{"use strict";ku();Un();No();kNe="[object String]";o(ENe,"isString");yi=ENe});function SNe(t,e){return Ns(e,function(r){return t[r]})}var Yte,Xte=N(()=>{"use strict";Bd();o(SNe,"baseValues");Yte=SNe});function CNe(t){return t==null?[]:Yte(t,zr(t))}var br,OL=N(()=>{"use strict";Xte();xc();o(CNe,"values");br=CNe});function _Ne(t,e,r,n){t=ci(t)?t:br(t),r=r&&!n?vc(r):0;var i=t.length;return r<0&&(r=ANe(i+r,0)),yi(t)?r<=i&&t.indexOf(e,r)>-1:!!i&&wm(t,e,r)>-1}var ANe,qn,jte=N(()=>{"use strict";iT();Mo();VT();bm();OL();ANe=Math.max;o(_Ne,"includes");qn=_Ne});function LNe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:vc(r);return i<0&&(i=DNe(n+i,0)),wm(t,e,i)}var DNe,UT,Kte=N(()=>{"use strict";iT();bm();DNe=Math.max;o(LNe,"indexOf");UT=LNe});function ONe(t){if(t==null)return!0;if(ci(t)&&(Pt(t)||typeof t=="string"||typeof t.splice=="function"||Sl(t)||Oh(t)||El(t)))return!t.length;var e=io(t);if(e==RNe||e==NNe)return!t.size;if(uc(t))return!Tm(t).length;for(var r in t)if(INe.call(t,r))return!1;return!0}var RNe,NNe,MNe,INe,ur,HT=N(()=>{"use strict";sT();$d();J0();Un();Mo();tm();Z0();r2();RNe="[object Map]",NNe="[object Set]",MNe=Object.prototype,INe=MNe.hasOwnProperty;o(ONe,"isEmpty");ur=ONe});function BNe(t){return ri(t)&&da(t)==PNe}var PNe,Qte,Zte=N(()=>{"use strict";ku();No();PNe="[object RegExp]";o(BNe,"baseIsRegExp");Qte=BNe});var Jte,FNe,zo,ere=N(()=>{"use strict";Zte();_d();t2();Jte=Oo&&Oo.isRegExp,FNe=Jte?Io(Jte):Qte,zo=FNe});function $Ne(t){return t===void 0}var pr,tre=N(()=>{"use strict";o($Ne,"isUndefined");pr=$Ne});function zNe(t,e){return t<e}var WT,PL=N(()=>{"use strict";o(zNe,"baseLt");WT=zNe});function GNe(t,e){var r={};return e=pn(e,3),Nm(t,function(n,i,a){cc(r,i,e(n,i,a))}),r}var zd,rre=N(()=>{"use strict";Y0();OT();rs();o(GNe,"mapValues");zd=GNe});function VNe(t,e,r){for(var n=-1,i=t.length;++n<i;){var a=t[n],s=e(a);if(s!=null&&(l===void 0?s===s&&!no(s):r(s,l)))var l=s,u=a}return u}var Om,qT=N(()=>{"use strict";Pd();o(VNe,"baseExtremum");Om=VNe});function UNe(t){return t&&t.length?Om(t,ta,Vte):void 0}var Is,nre=N(()=>{"use strict";qT();Ute();Cu();o(UNe,"max");Is=UNe});function HNe(t){return t&&t.length?Om(t,ta,WT):void 0}var Dl,BL=N(()=>{"use strict";qT();PL();Cu();o(HNe,"min");Dl=HNe});function WNe(t,e){return t&&t.length?Om(t,pn(e,2),WT):void 0}var Gd,ire=N(()=>{"use strict";qT();rs();PL();o(WNe,"minBy");Gd=WNe});function YNe(t){if(typeof t!="function")throw new TypeError(qNe);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}var qNe,are,sre=N(()=>{"use strict";qNe="Expected a function";o(YNe,"negate");are=YNe});function XNe(t,e,r,n){if(!bn(t))return t;e=Yh(e,t);for(var i=-1,a=e.length,s=a-1,l=t;l!=null&&++i<a;){var u=bc(e[i]),h=r;if(u==="__proto__"||u==="constructor"||u==="prototype")return t;if(i!=s){var f=l[u];h=n?n(f,u,l):void 0,h===void 0&&(h=bn(f)?f:Ph(e[i+1])?[]:{})}hc(l,u,h),l=l[u]}return t}var ore,lre=N(()=>{"use strict";rm();E2();i2();Js();Em();o(XNe,"baseSet");ore=XNe});function jNe(t,e,r){for(var n=-1,i=e.length,a={};++n<i;){var s=e[n],l=Xh(t,s);r(l,s)&&ore(a,Yh(s,t),l)}return a}var YT,FL=N(()=>{"use strict";S2();lre();E2();o(jNe,"basePickBy");YT=jNe});function KNe(t,e){if(t==null)return{};var r=Ns(yT(t),function(n){return[n]});return e=pn(e),YT(t,r,function(n,i){return e(n,i[0])})}var Os,cre=N(()=>{"use strict";Bd();rs();FL();dL();o(KNe,"pickBy");Os=KNe});function QNe(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}var ure,hre=N(()=>{"use strict";o(QNe,"baseSortBy");ure=QNe});function ZNe(t,e){if(t!==e){var r=t!==void 0,n=t===null,i=t===t,a=no(t),s=e!==void 0,l=e===null,u=e===e,h=no(e);if(!l&&!h&&!a&&t>e||a&&s&&u&&!l&&!h||n&&s&&u||!r&&u||!i)return 1;if(!n&&!a&&!h&&t<e||h&&r&&i&&!n&&!a||l&&r&&i||!s&&i||!u)return-1}return 0}var fre,dre=N(()=>{"use strict";Pd();o(ZNe,"compareAscending");fre=ZNe});function JNe(t,e,r){for(var n=-1,i=t.criteria,a=e.criteria,s=i.length,l=r.length;++n<s;){var u=fre(i[n],a[n]);if(u){if(n>=l)return u;var h=r[n];return u*(h=="desc"?-1:1)}}return t.index-e.index}var pre,mre=N(()=>{"use strict";dre();o(JNe,"compareMultiple");pre=JNe});function eMe(t,e,r){e.length?e=Ns(e,function(a){return Pt(a)?function(s){return Xh(s,a.length===1?a[0]:a)}:a}):e=[ta];var n=-1;e=Ns(e,Io(pn));var i=GT(t,function(a,s,l){var u=Ns(e,function(h){return h(a)});return{criteria:u,index:++n,value:a}});return ure(i,function(a,s){return pre(a,s,r)})}var gre,yre=N(()=>{"use strict";Bd();S2();rs();LL();hre();_d();mre();Cu();Un();o(eMe,"baseOrderBy");gre=eMe});var tMe,vre,xre=N(()=>{"use strict";CL();tMe=IT("length"),vre=tMe});function dMe(t){for(var e=bre.lastIndex=0;bre.test(t);)++e;return e}var wre,rMe,nMe,iMe,aMe,sMe,oMe,$L,zL,lMe,Tre,kre,Ere,cMe,Sre,Cre,uMe,hMe,fMe,bre,Are,_re=N(()=>{"use strict";wre="\\ud800-\\udfff",rMe="\\u0300-\\u036f",nMe="\\ufe20-\\ufe2f",iMe="\\u20d0-\\u20ff",aMe=rMe+nMe+iMe,sMe="\\ufe0e\\ufe0f",oMe="["+wre+"]",$L="["+aMe+"]",zL="\\ud83c[\\udffb-\\udfff]",lMe="(?:"+$L+"|"+zL+")",Tre="[^"+wre+"]",kre="(?:\\ud83c[\\udde6-\\uddff]){2}",Ere="[\\ud800-\\udbff][\\udc00-\\udfff]",cMe="\\u200d",Sre=lMe+"?",Cre="["+sMe+"]?",uMe="(?:"+cMe+"(?:"+[Tre,kre,Ere].join("|")+")"+Cre+Sre+")*",hMe=Cre+Sre+uMe,fMe="(?:"+[Tre+$L+"?",$L,kre,Ere,oMe].join("|")+")",bre=RegExp(zL+"(?="+zL+")|"+fMe+hMe,"g");o(dMe,"unicodeSize");Are=dMe});function pMe(t){return $J(t)?Are(t):vre(t)}var Dre,Lre=N(()=>{"use strict";xre();zJ();_re();o(pMe,"stringSize");Dre=pMe});function mMe(t,e){return YT(t,e,function(r,n){return MT(t,n)})}var Rre,Nre=N(()=>{"use strict";FL();SL();o(mMe,"basePick");Rre=mMe});var gMe,Vd,Mre=N(()=>{"use strict";Nre();FJ();gMe=BJ(function(t,e){return t==null?{}:Rre(t,e)}),Vd=gMe});function xMe(t,e,r,n){for(var i=-1,a=vMe(yMe((e-t)/(r||1)),0),s=Array(a);a--;)s[n?a:++i]=t,t+=r;return s}var yMe,vMe,Ire,Ore=N(()=>{"use strict";yMe=Math.ceil,vMe=Math.max;o(xMe,"baseRange");Ire=xMe});function bMe(t){return function(e,r,n){return n&&typeof n!="number"&&eo(e,r,n)&&(r=n=void 0),e=xm(e),r===void 0?(r=e,e=0):r=xm(r),n=n===void 0?e<r?1:-1:xm(n),Ire(e,r,n,t)}}var Pre,Bre=N(()=>{"use strict";Ore();Ld();rL();o(bMe,"createRange");Pre=bMe});var wMe,Go,Fre=N(()=>{"use strict";Bre();wMe=Pre(),Go=wMe});function TMe(t,e,r,n,i){return i(t,function(a,s,l){r=n?(n=!1,a):e(r,a,s,l)}),r}var $re,zre=N(()=>{"use strict";o(TMe,"baseReduce");$re=TMe});function kMe(t,e,r){var n=Pt(t)?GJ:$re,i=arguments.length<3;return n(t,pn(e,4),r,i,Ms)}var Xr,GL=N(()=>{"use strict";VJ();Kh();rs();zre();Un();o(kMe,"reduce");Xr=kMe});function EMe(t,e){var r=Pt(t)?Am:zT;return r(t,are(pn(e,3)))}var Jh,Gre=N(()=>{"use strict";fT();_L();rs();Un();sre();o(EMe,"reject");Jh=EMe});function AMe(t){if(t==null)return 0;if(ci(t))return yi(t)?Dre(t):t.length;var e=io(t);return e==SMe||e==CMe?t.size:Tm(t).length}var SMe,CMe,VL,Vre=N(()=>{"use strict";sT();$d();Mo();VT();Lre();SMe="[object Map]",CMe="[object Set]";o(AMe,"size");VL=AMe});function _Me(t,e){var r;return Ms(t,function(n,i,a){return r=e(n,i,a),!r}),!!r}var Ure,Hre=N(()=>{"use strict";Kh();o(_Me,"baseSome");Ure=_Me});function DMe(t,e,r){var n=Pt(t)?ET:Ure;return r&&eo(t,e,r)&&(e=void 0),n(t,pn(e,3))}var A2,Wre=N(()=>{"use strict";vL();rs();Hre();Un();Ld();o(DMe,"some");A2=DMe});var LMe,kc,qre=N(()=>{"use strict";Cm();yre();nm();Ld();LMe=fc(function(t,e){if(t==null)return[];var r=e.length;return r>1&&eo(t,e[0],e[1])?e=[]:r>2&&eo(e[0],e[1],e[2])&&(e=[e[0]]),gre(t,wc(e,1),[])}),kc=LMe});var RMe,NMe,Yre,Xre=N(()=>{"use strict";pL();nL();AT();RMe=1/0,NMe=jh&&1/Rm(new jh([,-0]))[1]==RMe?function(t){return new jh(t)}:ni,Yre=NMe});function IMe(t,e,r){var n=-1,i=aT,a=t.length,s=!0,l=[],u=l;if(r)s=!1,i=BT;else if(a>=MMe){var h=e?null:Yre(t);if(h)return Rm(h);s=!1,i=Lm,u=new Dm}else u=e?[]:l;e:for(;++n<a;){var f=t[n],d=e?e(f):f;if(f=r||f!==0?f:0,s&&d===d){for(var p=u.length;p--;)if(u[p]===d)continue e;e&&u.push(d),l.push(f)}else i(u,d,r)||(u!==l&&u.push(d),l.push(f))}return l}var MMe,Pm,XT=N(()=>{"use strict";kT();sL();AL();ST();Xre();AT();MMe=200;o(IMe,"baseUniq");Pm=IMe});var OMe,UL,jre=N(()=>{"use strict";Cm();nm();XT();ow();OMe=fc(function(t){return Pm(wc(t,1,Ad,!0))}),UL=OMe});function PMe(t){return t&&t.length?Pm(t):[]}var Bm,Kre=N(()=>{"use strict";XT();o(PMe,"uniq");Bm=PMe});function BMe(t,e){return t&&t.length?Pm(t,pn(e,2)):[]}var Qre,Zre=N(()=>{"use strict";rs();XT();o(BMe,"uniqBy");Qre=BMe});function $Me(t){var e=++FMe;return lT(t)+e}var FMe,Ud,Jre=N(()=>{"use strict";oL();FMe=0;o($Me,"uniqueId");Ud=$Me});function zMe(t,e,r){for(var n=-1,i=t.length,a=e.length,s={};++n<i;){var l=n<a?e[n]:void 0;r(s,t[n],l)}return s}var ene,tne=N(()=>{"use strict";o(zMe,"baseZipObject");ene=zMe});function GMe(t,e){return ene(t||[],e||[],hc)}var jT,rne=N(()=>{"use strict";rm();tne();o(GMe,"zipObject");jT=GMe});var qt=N(()=>{"use strict";CJ();gL();Lee();Ree();$9();xte();Tte();Ete();Ste();Cte();Rte();DL();Pte();Fte();RL();uT();$T();$te();zte();Gte();qte();Cu();jte();Kte();Un();HT();Yv();Js();ere();VT();tre();xc();kte();Im();rre();nre();V9();BL();ire();nL();yte();Mre();cre();Fre();GL();Gre();Vre();Wre();qre();jre();Kre();Jre();OL();rne();});function ine(t,e){t[e]?t[e]++:t[e]=1}function ane(t,e){--t[e]||delete t[e]}function _2(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}return i+nne+a+nne+(pr(n)?VMe:n)}function UMe(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}var l={v:i,w:a};return n&&(l.name=n),l}function HL(t,e){return _2(t,e.v,e.w,e.name)}var VMe,Hd,nne,sn,KT=N(()=>{"use strict";qt();VMe="\0",Hd="\0",nne="",sn=class{static{o(this,"Graph")}constructor(e={}){this._isDirected=Object.prototype.hasOwnProperty.call(e,"directed")?e.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(e,"multigraph")?e.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=As(void 0),this._defaultEdgeLabelFn=As(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[Hd]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return Si(e)||(e=As(e)),this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return zr(this._nodes)}sources(){var e=this;return Yr(this.nodes(),function(r){return ur(e._in[r])})}sinks(){var e=this;return Yr(this.nodes(),function(r){return ur(e._out[r])})}setNodes(e,r){var n=arguments,i=this;return Ae(e,function(a){n.length>1?i.setNode(a,r):i.setNode(a)}),this}setNode(e,r){return Object.prototype.hasOwnProperty.call(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=r),this):(this._nodes[e]=arguments.length>1?r:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=Hd,this._children[e]={},this._children[Hd][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return Object.prototype.hasOwnProperty.call(this._nodes,e)}removeNode(e){if(Object.prototype.hasOwnProperty.call(this._nodes,e)){var r=o(n=>this.removeEdge(this._edgeObjs[n]),"removeEdge");delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],Ae(this.children(e),n=>{this.setParent(n)}),delete this._children[e]),Ae(zr(this._in[e]),r),delete this._in[e],delete this._preds[e],Ae(zr(this._out[e]),r),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(pr(r))r=Hd;else{r+="";for(var n=r;!pr(n);n=this.parent(n))if(n===e)throw new Error("Setting "+r+" as parent of "+e+" would create a cycle");this.setNode(r)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=r,this._children[r][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var r=this._parent[e];if(r!==Hd)return r}}children(e){if(pr(e)&&(e=Hd),this._isCompound){var r=this._children[e];if(r)return zr(r)}else{if(e===Hd)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var r=this._preds[e];if(r)return zr(r)}successors(e){var r=this._sucs[e];if(r)return zr(r)}neighbors(e){var r=this.predecessors(e);if(r)return UL(r,this.successors(e))}isLeaf(e){var r;return this.isDirected()?r=this.successors(e):r=this.neighbors(e),r.length===0}filterNodes(e){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var n=this;Ae(this._nodes,function(s,l){e(l)&&r.setNode(l,s)}),Ae(this._edgeObjs,function(s){r.hasNode(s.v)&&r.hasNode(s.w)&&r.setEdge(s,n.edge(s))});var i={};function a(s){var l=n.parent(s);return l===void 0||r.hasNode(l)?(i[s]=l,l):l in i?i[l]:a(l)}return o(a,"findParent"),this._isCompound&&Ae(r.nodes(),function(s){r.setParent(s,a(s))}),r}setDefaultEdgeLabel(e){return Si(e)||(e=As(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return br(this._edgeObjs)}setPath(e,r){var n=this,i=arguments;return Xr(e,function(a,s){return i.length>1?n.setEdge(a,s,r):n.setEdge(a,s),s}),this}setEdge(){var e,r,n,i,a=!1,s=arguments[0];typeof s=="object"&&s!==null&&"v"in s?(e=s.v,r=s.w,n=s.name,arguments.length===2&&(i=arguments[1],a=!0)):(e=s,r=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),e=""+e,r=""+r,pr(n)||(n=""+n);var l=_2(this._isDirected,e,r,n);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,l))return a&&(this._edgeLabels[l]=i),this;if(!pr(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(r),this._edgeLabels[l]=a?i:this._defaultEdgeLabelFn(e,r,n);var u=UMe(this._isDirected,e,r,n);return e=u.v,r=u.w,Object.freeze(u),this._edgeObjs[l]=u,ine(this._preds[r],e),ine(this._sucs[e],r),this._in[r][l]=u,this._out[e][l]=u,this._edgeCount++,this}edge(e,r,n){var i=arguments.length===1?HL(this._isDirected,arguments[0]):_2(this._isDirected,e,r,n);return this._edgeLabels[i]}hasEdge(e,r,n){var i=arguments.length===1?HL(this._isDirected,arguments[0]):_2(this._isDirected,e,r,n);return Object.prototype.hasOwnProperty.call(this._edgeLabels,i)}removeEdge(e,r,n){var i=arguments.length===1?HL(this._isDirected,arguments[0]):_2(this._isDirected,e,r,n),a=this._edgeObjs[i];return a&&(e=a.v,r=a.w,delete this._edgeLabels[i],delete this._edgeObjs[i],ane(this._preds[r],e),ane(this._sucs[e],r),delete this._in[r][i],delete this._out[e][i],this._edgeCount--),this}inEdges(e,r){var n=this._in[e];if(n){var i=br(n);return r?Yr(i,function(a){return a.v===r}):i}}outEdges(e,r){var n=this._out[e];if(n){var i=br(n);return r?Yr(i,function(a){return a.w===r}):i}}nodeEdges(e,r){var n=this.inEdges(e,r);if(n)return n.concat(this.outEdges(e,r))}};sn.prototype._nodeCount=0;sn.prototype._edgeCount=0;o(ine,"incrementOrInitEntry");o(ane,"decrementOrRemoveEntry");o(_2,"edgeArgsToId");o(UMe,"edgeArgsToObj");o(HL,"edgeObjToId")});var Vo=N(()=>{"use strict";KT()});function sne(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function HMe(t,e){if(t!=="_next"&&t!=="_prev")return e}var ZT,one=N(()=>{"use strict";ZT=class{static{o(this,"List")}constructor(){var e={};e._next=e._prev=e,this._sentinel=e}dequeue(){var e=this._sentinel,r=e._prev;if(r!==e)return sne(r),r}enqueue(e){var r=this._sentinel;e._prev&&e._next&&sne(e),e._next=r._next,r._next._prev=e,r._next=e,e._prev=r}toString(){for(var e=[],r=this._sentinel,n=r._prev;n!==r;)e.push(JSON.stringify(n,HMe)),n=n._prev;return"["+e.join(", ")+"]"}};o(sne,"unlink");o(HMe,"filterOutLinks")});function lne(t,e){if(t.nodeCount()<=1)return[];var r=YMe(t,e||WMe),n=qMe(r.graph,r.buckets,r.zeroIdx);return qr(Je(n,function(i){return t.outEdges(i.v,i.w)}))}function qMe(t,e,r){for(var n=[],i=e[e.length-1],a=e[0],s;t.nodeCount();){for(;s=a.dequeue();)WL(t,e,r,s);for(;s=i.dequeue();)WL(t,e,r,s);if(t.nodeCount()){for(var l=e.length-2;l>0;--l)if(s=e[l].dequeue(),s){n=n.concat(WL(t,e,r,s,!0));break}}}return n}function WL(t,e,r,n,i){var a=i?[]:void 0;return Ae(t.inEdges(n.v),function(s){var l=t.edge(s),u=t.node(s.v);i&&a.push({v:s.v,w:s.w}),u.out-=l,qL(e,r,u)}),Ae(t.outEdges(n.v),function(s){var l=t.edge(s),u=s.w,h=t.node(u);h.in-=l,qL(e,r,h)}),t.removeNode(n.v),a}function YMe(t,e){var r=new sn,n=0,i=0;Ae(t.nodes(),function(l){r.setNode(l,{v:l,in:0,out:0})}),Ae(t.edges(),function(l){var u=r.edge(l.v,l.w)||0,h=e(l),f=u+h;r.setEdge(l.v,l.w,f),i=Math.max(i,r.node(l.v).out+=h),n=Math.max(n,r.node(l.w).in+=h)});var a=Go(i+n+3).map(function(){return new ZT}),s=n+1;return Ae(r.nodes(),function(l){qL(a,s,r.node(l))}),{graph:r,buckets:a,zeroIdx:s}}function qL(t,e,r){r.out?r.in?t[r.out-r.in+e].enqueue(r):t[t.length-1].enqueue(r):t[0].enqueue(r)}var WMe,cne=N(()=>{"use strict";qt();Vo();one();WMe=As(1);o(lne,"greedyFAS");o(qMe,"doGreedyFAS");o(WL,"removeNode");o(YMe,"buildState");o(qL,"assignBucket")});function une(t){var e=t.graph().acyclicer==="greedy"?lne(t,r(t)):XMe(t);Ae(e,function(n){var i=t.edge(n);t.removeEdge(n),i.forwardName=n.name,i.reversed=!0,t.setEdge(n.w,n.v,i,Ud("rev"))});function r(n){return function(i){return n.edge(i).weight}}o(r,"weightFn")}function XMe(t){var e=[],r={},n={};function i(a){Object.prototype.hasOwnProperty.call(n,a)||(n[a]=!0,r[a]=!0,Ae(t.outEdges(a),function(s){Object.prototype.hasOwnProperty.call(r,s.w)?e.push(s):i(s.w)}),delete r[a])}return o(i,"dfs"),Ae(t.nodes(),i),e}function hne(t){Ae(t.edges(),function(e){var r=t.edge(e);if(r.reversed){t.removeEdge(e);var n=r.forwardName;delete r.reversed,delete r.forwardName,t.setEdge(e.w,e.v,r,n)}})}var YL=N(()=>{"use strict";qt();cne();o(une,"run");o(XMe,"dfsFAS");o(hne,"undo")});function Ec(t,e,r,n){var i;do i=Ud(n);while(t.hasNode(i));return r.dummy=e,t.setNode(i,r),i}function dne(t){var e=new sn().setGraph(t.graph());return Ae(t.nodes(),function(r){e.setNode(r,t.node(r))}),Ae(t.edges(),function(r){var n=e.edge(r.v,r.w)||{weight:0,minlen:1},i=t.edge(r);e.setEdge(r.v,r.w,{weight:n.weight+i.weight,minlen:Math.max(n.minlen,i.minlen)})}),e}function JT(t){var e=new sn({multigraph:t.isMultigraph()}).setGraph(t.graph());return Ae(t.nodes(),function(r){t.children(r).length||e.setNode(r,t.node(r))}),Ae(t.edges(),function(r){e.setEdge(r,t.edge(r))}),e}function XL(t,e){var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2;if(!i&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=l*i/a,h=l):(i<0&&(s=-s),u=s,h=s*a/i),{x:r+u,y:n+h}}function ef(t){var e=Je(Go(KL(t)+1),function(){return[]});return Ae(t.nodes(),function(r){var n=t.node(r),i=n.rank;pr(i)||(e[i][n.order]=r)}),e}function pne(t){var e=Dl(Je(t.nodes(),function(r){return t.node(r).rank}));Ae(t.nodes(),function(r){var n=t.node(r);Bt(n,"rank")&&(n.rank-=e)})}function mne(t){var e=Dl(Je(t.nodes(),function(a){return t.node(a).rank})),r=[];Ae(t.nodes(),function(a){var s=t.node(a).rank-e;r[s]||(r[s]=[]),r[s].push(a)});var n=0,i=t.graph().nodeRankFactor;Ae(r,function(a,s){pr(a)&&s%i!==0?--n:n&&Ae(a,function(l){t.node(l).rank+=n})})}function jL(t,e,r,n){var i={width:0,height:0};return arguments.length>=4&&(i.rank=r,i.order=n),Ec(t,"border",i,e)}function KL(t){return Is(Je(t.nodes(),function(e){var r=t.node(e).rank;if(!pr(r))return r}))}function gne(t,e){var r={lhs:[],rhs:[]};return Ae(t,function(n){e(n)?r.lhs.push(n):r.rhs.push(n)}),r}function yne(t,e){var r=PT();try{return e()}finally{console.log(t+" time: "+(PT()-r)+"ms")}}function vne(t,e){return e()}var Sc=N(()=>{"use strict";qt();Vo();o(Ec,"addDummyNode");o(dne,"simplify");o(JT,"asNonCompoundGraph");o(XL,"intersectRect");o(ef,"buildLayerMatrix");o(pne,"normalizeRanks");o(mne,"removeEmptyRanks");o(jL,"addBorderNode");o(KL,"maxRank");o(gne,"partition");o(yne,"time");o(vne,"notime")});function bne(t){function e(r){var n=t.children(r),i=t.node(r);if(n.length&&Ae(n,e),Object.prototype.hasOwnProperty.call(i,"minRank")){i.borderLeft=[],i.borderRight=[];for(var a=i.minRank,s=i.maxRank+1;a<s;++a)xne(t,"borderLeft","_bl",r,i,a),xne(t,"borderRight","_br",r,i,a)}}o(e,"dfs"),Ae(t.children(),e)}function xne(t,e,r,n,i,a){var s={width:0,height:0,rank:a,borderType:e},l=i[e][a-1],u=Ec(t,"border",s,r);i[e][a]=u,t.setParent(u,n),l&&t.setEdge(l,u,{weight:1})}var wne=N(()=>{"use strict";qt();Sc();o(bne,"addBorderSegments");o(xne,"addBorderNode")});function kne(t){var e=t.graph().rankdir.toLowerCase();(e==="lr"||e==="rl")&&Sne(t)}function Ene(t){var e=t.graph().rankdir.toLowerCase();(e==="bt"||e==="rl")&&jMe(t),(e==="lr"||e==="rl")&&(KMe(t),Sne(t))}function Sne(t){Ae(t.nodes(),function(e){Tne(t.node(e))}),Ae(t.edges(),function(e){Tne(t.edge(e))})}function Tne(t){var e=t.width;t.width=t.height,t.height=e}function jMe(t){Ae(t.nodes(),function(e){QL(t.node(e))}),Ae(t.edges(),function(e){var r=t.edge(e);Ae(r.points,QL),Object.prototype.hasOwnProperty.call(r,"y")&&QL(r)})}function QL(t){t.y=-t.y}function KMe(t){Ae(t.nodes(),function(e){ZL(t.node(e))}),Ae(t.edges(),function(e){var r=t.edge(e);Ae(r.points,ZL),Object.prototype.hasOwnProperty.call(r,"x")&&ZL(r)})}function ZL(t){var e=t.x;t.x=t.y,t.y=e}var Cne=N(()=>{"use strict";qt();o(kne,"adjust");o(Ene,"undo");o(Sne,"swapWidthHeight");o(Tne,"swapWidthHeightOne");o(jMe,"reverseY");o(QL,"reverseYOne");o(KMe,"swapXY");o(ZL,"swapXYOne")});function Ane(t){t.graph().dummyChains=[],Ae(t.edges(),function(e){ZMe(t,e)})}function ZMe(t,e){var r=e.v,n=t.node(r).rank,i=e.w,a=t.node(i).rank,s=e.name,l=t.edge(e),u=l.labelRank;if(a!==n+1){t.removeEdge(e);var h=void 0,f,d;for(d=0,++n;n<a;++d,++n)l.points=[],h={width:0,height:0,edgeLabel:l,edgeObj:e,rank:n},f=Ec(t,"edge",h,"_d"),n===u&&(h.width=l.width,h.height=l.height,h.dummy="edge-label",h.labelpos=l.labelpos),t.setEdge(r,f,{weight:l.weight},s),d===0&&t.graph().dummyChains.push(f),r=f;t.setEdge(r,i,{weight:l.weight},s)}}function _ne(t){Ae(t.graph().dummyChains,function(e){var r=t.node(e),n=r.edgeLabel,i;for(t.setEdge(r.edgeObj,n);r.dummy;)i=t.successors(e)[0],t.removeNode(e),n.points.push({x:r.x,y:r.y}),r.dummy==="edge-label"&&(n.x=r.x,n.y=r.y,n.width=r.width,n.height=r.height),e=i,r=t.node(e)})}var JL=N(()=>{"use strict";qt();Sc();o(Ane,"run");o(ZMe,"normalizeEdge");o(_ne,"undo")});function D2(t){var e={};function r(n){var i=t.node(n);if(Object.prototype.hasOwnProperty.call(e,n))return i.rank;e[n]=!0;var a=Dl(Je(t.outEdges(n),function(s){return r(s.w)-t.edge(s).minlen}));return(a===Number.POSITIVE_INFINITY||a===void 0||a===null)&&(a=0),i.rank=a}o(r,"dfs"),Ae(t.sources(),r)}function Wd(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}var ek=N(()=>{"use strict";qt();o(D2,"longestPath");o(Wd,"slack")});function tk(t){var e=new sn({directed:!1}),r=t.nodes()[0],n=t.nodeCount();e.setNode(r,{});for(var i,a;JMe(e,t)<n;)i=eIe(e,t),a=e.hasNode(i.v)?Wd(t,i):-Wd(t,i),tIe(e,t,a);return e}function JMe(t,e){function r(n){Ae(e.nodeEdges(n),function(i){var a=i.v,s=n===a?i.w:a;!t.hasNode(s)&&!Wd(e,i)&&(t.setNode(s,{}),t.setEdge(n,s,{}),r(s))})}return o(r,"dfs"),Ae(t.nodes(),r),t.nodeCount()}function eIe(t,e){return Gd(e.edges(),function(r){if(t.hasNode(r.v)!==t.hasNode(r.w))return Wd(e,r)})}function tIe(t,e,r){Ae(t.nodes(),function(n){e.node(n).rank+=r})}var eR=N(()=>{"use strict";qt();Vo();ek();o(tk,"feasibleTree");o(JMe,"tightTree");o(eIe,"findMinSlackEdge");o(tIe,"shiftRanks")});var Lne=N(()=>{"use strict"});var tR=N(()=>{"use strict"});var cWt,rR=N(()=>{"use strict";qt();tR();cWt=As(1)});var Rne=N(()=>{"use strict";rR()});var nR=N(()=>{"use strict"});var Nne=N(()=>{"use strict";nR()});var bWt,Mne=N(()=>{"use strict";qt();bWt=As(1)});function iR(t){var e={},r={},n=[];function i(a){if(Object.prototype.hasOwnProperty.call(r,a))throw new L2;Object.prototype.hasOwnProperty.call(e,a)||(r[a]=!0,e[a]=!0,Ae(t.predecessors(a),i),delete r[a],n.push(a))}if(o(i,"visit"),Ae(t.sinks(),i),VL(e)!==t.nodeCount())throw new L2;return n}function L2(){}var aR=N(()=>{"use strict";qt();iR.CycleException=L2;o(iR,"topsort");o(L2,"CycleException");L2.prototype=new Error});var Ine=N(()=>{"use strict";aR()});function rk(t,e,r){Pt(e)||(e=[e]);var n=(t.isDirected()?t.successors:t.neighbors).bind(t),i=[],a={};return Ae(e,function(s){if(!t.hasNode(s))throw new Error("Graph does not have node: "+s);One(t,s,r==="post",a,n,i)}),i}function One(t,e,r,n,i,a){Object.prototype.hasOwnProperty.call(n,e)||(n[e]=!0,r||a.push(e),Ae(i(e),function(s){One(t,s,r,n,i,a)}),r&&a.push(e))}var sR=N(()=>{"use strict";qt();o(rk,"dfs");o(One,"doDfs")});function oR(t,e){return rk(t,e,"post")}var Pne=N(()=>{"use strict";sR();o(oR,"postorder")});function lR(t,e){return rk(t,e,"pre")}var Bne=N(()=>{"use strict";sR();o(lR,"preorder")});var Fne=N(()=>{"use strict";tR();KT()});var $ne=N(()=>{"use strict";Lne();rR();Rne();Nne();Mne();Ine();Pne();Bne();Fne();nR();aR()});function rf(t){t=dne(t),D2(t);var e=tk(t);uR(e),cR(e,t);for(var r,n;r=Une(e);)n=Hne(e,t,r),Wne(e,t,r,n)}function cR(t,e){var r=oR(t,t.nodes());r=r.slice(0,r.length-1),Ae(r,function(n){sIe(t,e,n)})}function sIe(t,e,r){var n=t.node(r),i=n.parent;t.edge(r,i).cutvalue=Gne(t,e,r)}function Gne(t,e,r){var n=t.node(r),i=n.parent,a=!0,s=e.edge(r,i),l=0;return s||(a=!1,s=e.edge(i,r)),l=s.weight,Ae(e.nodeEdges(r),function(u){var h=u.v===r,f=h?u.w:u.v;if(f!==i){var d=h===a,p=e.edge(u).weight;if(l+=d?p:-p,lIe(t,r,f)){var m=t.edge(r,f).cutvalue;l+=d?-m:m}}}),l}function uR(t,e){arguments.length<2&&(e=t.nodes()[0]),Vne(t,{},1,e)}function Vne(t,e,r,n,i){var a=r,s=t.node(n);return e[n]=!0,Ae(t.neighbors(n),function(l){Object.prototype.hasOwnProperty.call(e,l)||(r=Vne(t,e,r,l,n))}),s.low=a,s.lim=r++,i?s.parent=i:delete s.parent,r}function Une(t){return ns(t.edges(),function(e){return t.edge(e).cutvalue<0})}function Hne(t,e,r){var n=r.v,i=r.w;e.hasEdge(n,i)||(n=r.w,i=r.v);var a=t.node(n),s=t.node(i),l=a,u=!1;a.lim>s.lim&&(l=s,u=!0);var h=Yr(e.edges(),function(f){return u===zne(t,t.node(f.v),l)&&u!==zne(t,t.node(f.w),l)});return Gd(h,function(f){return Wd(e,f)})}function Wne(t,e,r,n){var i=r.v,a=r.w;t.removeEdge(i,a),t.setEdge(n.v,n.w,{}),uR(t),cR(t,e),oIe(t,e)}function oIe(t,e){var r=ns(t.nodes(),function(i){return!e.node(i).parent}),n=lR(t,r);n=n.slice(1),Ae(n,function(i){var a=t.node(i).parent,s=e.edge(i,a),l=!1;s||(s=e.edge(a,i),l=!0),e.node(i).rank=e.node(a).rank+(l?s.minlen:-s.minlen)})}function lIe(t,e,r){return t.hasEdge(e,r)}function zne(t,e,r){return r.low<=e.lim&&e.lim<=r.lim}var qne=N(()=>{"use strict";qt();$ne();Sc();eR();ek();rf.initLowLimValues=uR;rf.initCutValues=cR;rf.calcCutValue=Gne;rf.leaveEdge=Une;rf.enterEdge=Hne;rf.exchangeEdges=Wne;o(rf,"networkSimplex");o(cR,"initCutValues");o(sIe,"assignCutValue");o(Gne,"calcCutValue");o(uR,"initLowLimValues");o(Vne,"dfsAssignLowLim");o(Une,"leaveEdge");o(Hne,"enterEdge");o(Wne,"exchangeEdges");o(oIe,"updateRanks");o(lIe,"isTreeEdge");o(zne,"isDescendant")});function hR(t){switch(t.graph().ranker){case"network-simplex":Yne(t);break;case"tight-tree":uIe(t);break;case"longest-path":cIe(t);break;default:Yne(t)}}function uIe(t){D2(t),tk(t)}function Yne(t){rf(t)}var cIe,fR=N(()=>{"use strict";eR();qne();ek();o(hR,"rank");cIe=D2;o(uIe,"tightTreeRanker");o(Yne,"networkSimplexRanker")});function Xne(t){var e=Ec(t,"root",{},"_root"),r=hIe(t),n=Is(br(r))-1,i=2*n+1;t.graph().nestingRoot=e,Ae(t.edges(),function(s){t.edge(s).minlen*=i});var a=fIe(t)+1;Ae(t.children(),function(s){jne(t,e,i,a,n,r,s)}),t.graph().nodeRankFactor=i}function jne(t,e,r,n,i,a,s){var l=t.children(s);if(!l.length){s!==e&&t.setEdge(e,s,{weight:0,minlen:r});return}var u=jL(t,"_bt"),h=jL(t,"_bb"),f=t.node(s);t.setParent(u,s),f.borderTop=u,t.setParent(h,s),f.borderBottom=h,Ae(l,function(d){jne(t,e,r,n,i,a,d);var p=t.node(d),m=p.borderTop?p.borderTop:d,g=p.borderBottom?p.borderBottom:d,y=p.borderTop?n:2*n,v=m!==g?1:i-a[s]+1;t.setEdge(u,m,{weight:y,minlen:v,nestingEdge:!0}),t.setEdge(g,h,{weight:y,minlen:v,nestingEdge:!0})}),t.parent(s)||t.setEdge(e,u,{weight:0,minlen:i+a[s]})}function hIe(t){var e={};function r(n,i){var a=t.children(n);a&&a.length&&Ae(a,function(s){r(s,i+1)}),e[n]=i}return o(r,"dfs"),Ae(t.children(),function(n){r(n,1)}),e}function fIe(t){return Xr(t.edges(),function(e,r){return e+t.edge(r).weight},0)}function Kne(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,Ae(t.edges(),function(r){var n=t.edge(r);n.nestingEdge&&t.removeEdge(r)})}var Qne=N(()=>{"use strict";qt();Sc();o(Xne,"run");o(jne,"dfs");o(hIe,"treeDepths");o(fIe,"sumWeights");o(Kne,"cleanup")});function Zne(t,e,r){var n={},i;Ae(r,function(a){for(var s=t.parent(a),l,u;s;){if(l=t.parent(s),l?(u=n[l],n[l]=s):(u=i,i=s),u&&u!==s){e.setEdge(u,s);return}s=l}})}var Jne=N(()=>{"use strict";qt();o(Zne,"addSubgraphConstraints")});function eie(t,e,r){var n=pIe(t),i=new sn({compound:!0}).setGraph({root:n}).setDefaultNodeLabel(function(a){return t.node(a)});return Ae(t.nodes(),function(a){var s=t.node(a),l=t.parent(a);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(i.setNode(a),i.setParent(a,l||n),Ae(t[r](a),function(u){var h=u.v===a?u.w:u.v,f=i.edge(h,a),d=pr(f)?0:f.weight;i.setEdge(h,a,{weight:t.edge(u).weight+d})}),Object.prototype.hasOwnProperty.call(s,"minRank")&&i.setNode(a,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))}),i}function pIe(t){for(var e;t.hasNode(e=Ud("_root")););return e}var tie=N(()=>{"use strict";qt();Vo();o(eie,"buildLayerGraph");o(pIe,"createRootNode")});function rie(t,e){for(var r=0,n=1;n<e.length;++n)r+=mIe(t,e[n-1],e[n]);return r}function mIe(t,e,r){for(var n=jT(r,Je(r,function(h,f){return f})),i=qr(Je(e,function(h){return kc(Je(t.outEdges(h),function(f){return{pos:n[f.w],weight:t.edge(f).weight}}),"pos")})),a=1;a<r.length;)a<<=1;var s=2*a-1;a-=1;var l=Je(new Array(s),function(){return 0}),u=0;return Ae(i.forEach(function(h){var f=h.pos+a;l[f]+=h.weight;for(var d=0;f>0;)f%2&&(d+=l[f+1]),f=f-1>>1,l[f]+=h.weight;u+=h.weight*d})),u}var nie=N(()=>{"use strict";qt();o(rie,"crossCount");o(mIe,"twoLayerCrossCount")});function iie(t){var e={},r=Yr(t.nodes(),function(l){return!t.children(l).length}),n=Is(Je(r,function(l){return t.node(l).rank})),i=Je(Go(n+1),function(){return[]});function a(l){if(!Bt(e,l)){e[l]=!0;var u=t.node(l);i[u.rank].push(l),Ae(t.successors(l),a)}}o(a,"dfs");var s=kc(r,function(l){return t.node(l).rank});return Ae(s,a),i}var aie=N(()=>{"use strict";qt();o(iie,"initOrder")});function sie(t,e){return Je(e,function(r){var n=t.inEdges(r);if(n.length){var i=Xr(n,function(a,s){var l=t.edge(s),u=t.node(s.v);return{sum:a.sum+l.weight*u.order,weight:a.weight+l.weight}},{sum:0,weight:0});return{v:r,barycenter:i.sum/i.weight,weight:i.weight}}else return{v:r}})}var oie=N(()=>{"use strict";qt();o(sie,"barycenter")});function lie(t,e){var r={};Ae(t,function(i,a){var s=r[i.v]={indegree:0,in:[],out:[],vs:[i.v],i:a};pr(i.barycenter)||(s.barycenter=i.barycenter,s.weight=i.weight)}),Ae(e.edges(),function(i){var a=r[i.v],s=r[i.w];!pr(a)&&!pr(s)&&(s.indegree++,a.out.push(r[i.w]))});var n=Yr(r,function(i){return!i.indegree});return gIe(n)}function gIe(t){var e=[];function r(a){return function(s){s.merged||(pr(s.barycenter)||pr(a.barycenter)||s.barycenter>=a.barycenter)&&yIe(a,s)}}o(r,"handleIn");function n(a){return function(s){s.in.push(a),--s.indegree===0&&t.push(s)}}for(o(n,"handleOut");t.length;){var i=t.pop();e.push(i),Ae(i.in.reverse(),r(i)),Ae(i.out,n(i))}return Je(Yr(e,function(a){return!a.merged}),function(a){return Vd(a,["vs","i","barycenter","weight"])})}function yIe(t,e){var r=0,n=0;t.weight&&(r+=t.barycenter*t.weight,n+=t.weight),e.weight&&(r+=e.barycenter*e.weight,n+=e.weight),t.vs=e.vs.concat(t.vs),t.barycenter=r/n,t.weight=n,t.i=Math.min(e.i,t.i),e.merged=!0}var cie=N(()=>{"use strict";qt();o(lie,"resolveConflicts");o(gIe,"doResolveConflicts");o(yIe,"mergeEntries")});function hie(t,e){var r=gne(t,function(f){return Object.prototype.hasOwnProperty.call(f,"barycenter")}),n=r.lhs,i=kc(r.rhs,function(f){return-f.i}),a=[],s=0,l=0,u=0;n.sort(vIe(!!e)),u=uie(a,i,u),Ae(n,function(f){u+=f.vs.length,a.push(f.vs),s+=f.barycenter*f.weight,l+=f.weight,u=uie(a,i,u)});var h={vs:qr(a)};return l&&(h.barycenter=s/l,h.weight=l),h}function uie(t,e,r){for(var n;e.length&&(n=ga(e)).i<=r;)e.pop(),t.push(n.vs),r++;return r}function vIe(t){return function(e,r){return e.barycenter<r.barycenter?-1:e.barycenter>r.barycenter?1:t?r.i-e.i:e.i-r.i}}var fie=N(()=>{"use strict";qt();Sc();o(hie,"sort");o(uie,"consumeUnsortable");o(vIe,"compareWithBias")});function dR(t,e,r,n){var i=t.children(e),a=t.node(e),s=a?a.borderLeft:void 0,l=a?a.borderRight:void 0,u={};s&&(i=Yr(i,function(g){return g!==s&&g!==l}));var h=sie(t,i);Ae(h,function(g){if(t.children(g.v).length){var y=dR(t,g.v,r,n);u[g.v]=y,Object.prototype.hasOwnProperty.call(y,"barycenter")&&bIe(g,y)}});var f=lie(h,r);xIe(f,u);var d=hie(f,n);if(s&&(d.vs=qr([s,d.vs,l]),t.predecessors(s).length)){var p=t.node(t.predecessors(s)[0]),m=t.node(t.predecessors(l)[0]);Object.prototype.hasOwnProperty.call(d,"barycenter")||(d.barycenter=0,d.weight=0),d.barycenter=(d.barycenter*d.weight+p.order+m.order)/(d.weight+2),d.weight+=2}return d}function xIe(t,e){Ae(t,function(r){r.vs=qr(r.vs.map(function(n){return e[n]?e[n].vs:n}))})}function bIe(t,e){pr(t.barycenter)?(t.barycenter=e.barycenter,t.weight=e.weight):(t.barycenter=(t.barycenter*t.weight+e.barycenter*e.weight)/(t.weight+e.weight),t.weight+=e.weight)}var die=N(()=>{"use strict";qt();oie();cie();fie();o(dR,"sortSubgraph");o(xIe,"expandSubgraphs");o(bIe,"mergeBarycenters")});function gie(t){var e=KL(t),r=pie(t,Go(1,e+1),"inEdges"),n=pie(t,Go(e-1,-1,-1),"outEdges"),i=iie(t);mie(t,i);for(var a=Number.POSITIVE_INFINITY,s,l=0,u=0;u<4;++l,++u){wIe(l%2?r:n,l%4>=2),i=ef(t);var h=rie(t,i);h<a&&(u=0,s=yL(i),a=h)}mie(t,s)}function pie(t,e,r){return Je(e,function(n){return eie(t,n,r)})}function wIe(t,e){var r=new sn;Ae(t,function(n){var i=n.graph().root,a=dR(n,i,r,e);Ae(a.vs,function(s,l){n.node(s).order=l}),Zne(n,r,a.vs)})}function mie(t,e){Ae(e,function(r){Ae(r,function(n,i){t.node(n).order=i})})}var yie=N(()=>{"use strict";qt();Vo();Sc();Jne();tie();nie();aie();die();o(gie,"order");o(pie,"buildLayerGraphs");o(wIe,"sweepLayerGraphs");o(mie,"assignOrder")});function vie(t){var e=kIe(t);Ae(t.graph().dummyChains,function(r){for(var n=t.node(r),i=n.edgeObj,a=TIe(t,e,i.v,i.w),s=a.path,l=a.lca,u=0,h=s[u],f=!0;r!==i.w;){if(n=t.node(r),f){for(;(h=s[u])!==l&&t.node(h).maxRank<n.rank;)u++;h===l&&(f=!1)}if(!f){for(;u<s.length-1&&t.node(h=s[u+1]).minRank<=n.rank;)u++;h=s[u]}t.setParent(r,h),r=t.successors(r)[0]}})}function TIe(t,e,r,n){var i=[],a=[],s=Math.min(e[r].low,e[n].low),l=Math.max(e[r].lim,e[n].lim),u,h;u=r;do u=t.parent(u),i.push(u);while(u&&(e[u].low>s||l>e[u].lim));for(h=u,u=n;(u=t.parent(u))!==h;)a.push(u);return{path:i.concat(a.reverse()),lca:h}}function kIe(t){var e={},r=0;function n(i){var a=r;Ae(t.children(i),n),e[i]={low:a,lim:r++}}return o(n,"dfs"),Ae(t.children(),n),e}var xie=N(()=>{"use strict";qt();o(vie,"parentDummyChains");o(TIe,"findPath");o(kIe,"postorder")});function EIe(t,e){var r={};function n(i,a){var s=0,l=0,u=i.length,h=ga(a);return Ae(a,function(f,d){var p=CIe(t,f),m=p?t.node(p).order:u;(p||f===h)&&(Ae(a.slice(l,d+1),function(g){Ae(t.predecessors(g),function(y){var v=t.node(y),x=v.order;(x<s||m<x)&&!(v.dummy&&t.node(g).dummy)&&bie(r,y,g)})}),l=d+1,s=m)}),a}return o(n,"visitLayer"),Xr(e,n),r}function SIe(t,e){var r={};function n(a,s,l,u,h){var f;Ae(Go(s,l),function(d){f=a[d],t.node(f).dummy&&Ae(t.predecessors(f),function(p){var m=t.node(p);m.dummy&&(m.order<u||m.order>h)&&bie(r,p,f)})})}o(n,"scan");function i(a,s){var l=-1,u,h=0;return Ae(s,function(f,d){if(t.node(f).dummy==="border"){var p=t.predecessors(f);p.length&&(u=t.node(p[0]).order,n(s,h,d,l,u),h=d,l=u)}n(s,h,s.length,u,a.length)}),s}return o(i,"visitLayer"),Xr(e,i),r}function CIe(t,e){if(t.node(e).dummy)return ns(t.predecessors(e),function(r){return t.node(r).dummy})}function bie(t,e,r){if(e>r){var n=e;e=r,r=n}var i=t[e];i||(t[e]=i={}),i[r]=!0}function AIe(t,e,r){if(e>r){var n=e;e=r,r=n}return!!t[e]&&Object.prototype.hasOwnProperty.call(t[e],r)}function _Ie(t,e,r,n){var i={},a={},s={};return Ae(e,function(l){Ae(l,function(u,h){i[u]=u,a[u]=u,s[u]=h})}),Ae(e,function(l){var u=-1;Ae(l,function(h){var f=n(h);if(f.length){f=kc(f,function(y){return s[y]});for(var d=(f.length-1)/2,p=Math.floor(d),m=Math.ceil(d);p<=m;++p){var g=f[p];a[h]===h&&u<s[g]&&!AIe(r,h,g)&&(a[g]=h,a[h]=i[h]=i[g],u=s[g])}}})}),{root:i,align:a}}function DIe(t,e,r,n,i){var a={},s=LIe(t,e,r,i),l=i?"borderLeft":"borderRight";function u(d,p){for(var m=s.nodes(),g=m.pop(),y={};g;)y[g]?d(g):(y[g]=!0,m.push(g),m=m.concat(p(g))),g=m.pop()}o(u,"iterate");function h(d){a[d]=s.inEdges(d).reduce(function(p,m){return Math.max(p,a[m.v]+s.edge(m))},0)}o(h,"pass1");function f(d){var p=s.outEdges(d).reduce(function(g,y){return Math.min(g,a[y.w]-s.edge(y))},Number.POSITIVE_INFINITY),m=t.node(d);p!==Number.POSITIVE_INFINITY&&m.borderType!==l&&(a[d]=Math.max(a[d],p))}return o(f,"pass2"),u(h,s.predecessors.bind(s)),u(f,s.successors.bind(s)),Ae(n,function(d){a[d]=a[r[d]]}),a}function LIe(t,e,r,n){var i=new sn,a=t.graph(),s=IIe(a.nodesep,a.edgesep,n);return Ae(e,function(l){var u;Ae(l,function(h){var f=r[h];if(i.setNode(f),u){var d=r[u],p=i.edge(d,f);i.setEdge(d,f,Math.max(s(t,h,u),p||0))}u=h})}),i}function RIe(t,e){return Gd(br(e),function(r){var n=Number.NEGATIVE_INFINITY,i=Number.POSITIVE_INFINITY;return NL(r,function(a,s){var l=OIe(t,s)/2;n=Math.max(a+l,n),i=Math.min(a-l,i)}),n-i})}function NIe(t,e){var r=br(e),n=Dl(r),i=Is(r);Ae(["u","d"],function(a){Ae(["l","r"],function(s){var l=a+s,u=t[l],h;if(u!==e){var f=br(u);h=s==="l"?n-Dl(f):i-Is(f),h&&(t[l]=zd(u,function(d){return d+h}))}})})}function MIe(t,e){return zd(t.ul,function(r,n){if(e)return t[e.toLowerCase()][n];var i=kc(Je(t,n));return(i[1]+i[2])/2})}function wie(t){var e=ef(t),r=Fh(EIe(t,e),SIe(t,e)),n={},i;Ae(["u","d"],function(s){i=s==="u"?e:br(e).reverse(),Ae(["l","r"],function(l){l==="r"&&(i=Je(i,function(d){return br(d).reverse()}));var u=(s==="u"?t.predecessors:t.successors).bind(t),h=_Ie(t,i,r,u),f=DIe(t,i,h.root,h.align,l==="r");l==="r"&&(f=zd(f,function(d){return-d})),n[s+l]=f})});var a=RIe(t,n);return NIe(n,a),MIe(n,t.graph().align)}function IIe(t,e,r){return function(n,i,a){var s=n.node(i),l=n.node(a),u=0,h;if(u+=s.width/2,Object.prototype.hasOwnProperty.call(s,"labelpos"))switch(s.labelpos.toLowerCase()){case"l":h=-s.width/2;break;case"r":h=s.width/2;break}if(h&&(u+=r?h:-h),h=0,u+=(s.dummy?e:t)/2,u+=(l.dummy?e:t)/2,u+=l.width/2,Object.prototype.hasOwnProperty.call(l,"labelpos"))switch(l.labelpos.toLowerCase()){case"l":h=l.width/2;break;case"r":h=-l.width/2;break}return h&&(u+=r?h:-h),h=0,u}}function OIe(t,e){return t.node(e).width}var Tie=N(()=>{"use strict";qt();Vo();Sc();o(EIe,"findType1Conflicts");o(SIe,"findType2Conflicts");o(CIe,"findOtherInnerSegmentNode");o(bie,"addConflict");o(AIe,"hasConflict");o(_Ie,"verticalAlignment");o(DIe,"horizontalCompaction");o(LIe,"buildBlockGraph");o(RIe,"findSmallestWidthAlignment");o(NIe,"alignCoordinates");o(MIe,"balance");o(wie,"positionX");o(IIe,"sep");o(OIe,"width")});function kie(t){t=JT(t),PIe(t),ML(wie(t),function(e,r){t.node(r).x=e})}function PIe(t){var e=ef(t),r=t.graph().ranksep,n=0;Ae(e,function(i){var a=Is(Je(i,function(s){return t.node(s).height}));Ae(i,function(s){t.node(s).y=n+a/2}),n+=a+r})}var Eie=N(()=>{"use strict";qt();Sc();Tie();o(kie,"position");o(PIe,"positionY")});function R2(t,e){var r=e&&e.debugTiming?yne:vne;r("layout",()=>{var n=r(" buildLayoutGraph",()=>YIe(t));r(" runLayout",()=>BIe(n,r)),r(" updateInputGraph",()=>FIe(t,n))})}function BIe(t,e){e(" makeSpaceForEdgeLabels",()=>XIe(t)),e(" removeSelfEdges",()=>nOe(t)),e(" acyclic",()=>une(t)),e(" nestingGraph.run",()=>Xne(t)),e(" rank",()=>hR(JT(t))),e(" injectEdgeLabelProxies",()=>jIe(t)),e(" removeEmptyRanks",()=>mne(t)),e(" nestingGraph.cleanup",()=>Kne(t)),e(" normalizeRanks",()=>pne(t)),e(" assignRankMinMax",()=>KIe(t)),e(" removeEdgeLabelProxies",()=>QIe(t)),e(" normalize.run",()=>Ane(t)),e(" parentDummyChains",()=>vie(t)),e(" addBorderSegments",()=>bne(t)),e(" order",()=>gie(t)),e(" insertSelfEdges",()=>iOe(t)),e(" adjustCoordinateSystem",()=>kne(t)),e(" position",()=>kie(t)),e(" positionSelfEdges",()=>aOe(t)),e(" removeBorderNodes",()=>rOe(t)),e(" normalize.undo",()=>_ne(t)),e(" fixupEdgeLabelCoords",()=>eOe(t)),e(" undoCoordinateSystem",()=>Ene(t)),e(" translateGraph",()=>ZIe(t)),e(" assignNodeIntersects",()=>JIe(t)),e(" reversePoints",()=>tOe(t)),e(" acyclic.undo",()=>hne(t))}function FIe(t,e){Ae(t.nodes(),function(r){var n=t.node(r),i=e.node(r);n&&(n.x=i.x,n.y=i.y,e.children(r).length&&(n.width=i.width,n.height=i.height))}),Ae(t.edges(),function(r){var n=t.edge(r),i=e.edge(r);n.points=i.points,Object.prototype.hasOwnProperty.call(i,"x")&&(n.x=i.x,n.y=i.y)}),t.graph().width=e.graph().width,t.graph().height=e.graph().height}function YIe(t){var e=new sn({multigraph:!0,compound:!0}),r=mR(t.graph());return e.setGraph(Fh({},zIe,pR(r,$Ie),Vd(r,GIe))),Ae(t.nodes(),function(n){var i=mR(t.node(n));e.setNode(n,Qh(pR(i,VIe),UIe)),e.setParent(n,t.parent(n))}),Ae(t.edges(),function(n){var i=mR(t.edge(n));e.setEdge(n,Fh({},WIe,pR(i,HIe),Vd(i,qIe)))}),e}function XIe(t){var e=t.graph();e.ranksep/=2,Ae(t.edges(),function(r){var n=t.edge(r);n.minlen*=2,n.labelpos.toLowerCase()!=="c"&&(e.rankdir==="TB"||e.rankdir==="BT"?n.width+=n.labeloffset:n.height+=n.labeloffset)})}function jIe(t){Ae(t.edges(),function(e){var r=t.edge(e);if(r.width&&r.height){var n=t.node(e.v),i=t.node(e.w),a={rank:(i.rank-n.rank)/2+n.rank,e};Ec(t,"edge-proxy",a,"_ep")}})}function KIe(t){var e=0;Ae(t.nodes(),function(r){var n=t.node(r);n.borderTop&&(n.minRank=t.node(n.borderTop).rank,n.maxRank=t.node(n.borderBottom).rank,e=Is(e,n.maxRank))}),t.graph().maxRank=e}function QIe(t){Ae(t.nodes(),function(e){var r=t.node(e);r.dummy==="edge-proxy"&&(t.edge(r.e).labelRank=r.rank,t.removeNode(e))})}function ZIe(t){var e=Number.POSITIVE_INFINITY,r=0,n=Number.POSITIVE_INFINITY,i=0,a=t.graph(),s=a.marginx||0,l=a.marginy||0;function u(h){var f=h.x,d=h.y,p=h.width,m=h.height;e=Math.min(e,f-p/2),r=Math.max(r,f+p/2),n=Math.min(n,d-m/2),i=Math.max(i,d+m/2)}o(u,"getExtremes"),Ae(t.nodes(),function(h){u(t.node(h))}),Ae(t.edges(),function(h){var f=t.edge(h);Object.prototype.hasOwnProperty.call(f,"x")&&u(f)}),e-=s,n-=l,Ae(t.nodes(),function(h){var f=t.node(h);f.x-=e,f.y-=n}),Ae(t.edges(),function(h){var f=t.edge(h);Ae(f.points,function(d){d.x-=e,d.y-=n}),Object.prototype.hasOwnProperty.call(f,"x")&&(f.x-=e),Object.prototype.hasOwnProperty.call(f,"y")&&(f.y-=n)}),a.width=r-e+s,a.height=i-n+l}function JIe(t){Ae(t.edges(),function(e){var r=t.edge(e),n=t.node(e.v),i=t.node(e.w),a,s;r.points?(a=r.points[0],s=r.points[r.points.length-1]):(r.points=[],a=i,s=n),r.points.unshift(XL(n,a)),r.points.push(XL(i,s))})}function eOe(t){Ae(t.edges(),function(e){var r=t.edge(e);if(Object.prototype.hasOwnProperty.call(r,"x"))switch((r.labelpos==="l"||r.labelpos==="r")&&(r.width-=r.labeloffset),r.labelpos){case"l":r.x-=r.width/2+r.labeloffset;break;case"r":r.x+=r.width/2+r.labeloffset;break}})}function tOe(t){Ae(t.edges(),function(e){var r=t.edge(e);r.reversed&&r.points.reverse()})}function rOe(t){Ae(t.nodes(),function(e){if(t.children(e).length){var r=t.node(e),n=t.node(r.borderTop),i=t.node(r.borderBottom),a=t.node(ga(r.borderLeft)),s=t.node(ga(r.borderRight));r.width=Math.abs(s.x-a.x),r.height=Math.abs(i.y-n.y),r.x=a.x+r.width/2,r.y=n.y+r.height/2}}),Ae(t.nodes(),function(e){t.node(e).dummy==="border"&&t.removeNode(e)})}function nOe(t){Ae(t.edges(),function(e){if(e.v===e.w){var r=t.node(e.v);r.selfEdges||(r.selfEdges=[]),r.selfEdges.push({e,label:t.edge(e)}),t.removeEdge(e)}})}function iOe(t){var e=ef(t);Ae(e,function(r){var n=0;Ae(r,function(i,a){var s=t.node(i);s.order=a+n,Ae(s.selfEdges,function(l){Ec(t,"selfedge",{width:l.label.width,height:l.label.height,rank:s.rank,order:a+ ++n,e:l.e,label:l.label},"_se")}),delete s.selfEdges})})}function aOe(t){Ae(t.nodes(),function(e){var r=t.node(e);if(r.dummy==="selfedge"){var n=t.node(r.e.v),i=n.x+n.width/2,a=n.y,s=r.x-i,l=n.height/2;t.setEdge(r.e,r.label),t.removeNode(e),r.label.points=[{x:i+2*s/3,y:a-l},{x:i+5*s/6,y:a-l},{x:i+s,y:a},{x:i+5*s/6,y:a+l},{x:i+2*s/3,y:a+l}],r.label.x=r.x,r.label.y=r.y}})}function pR(t,e){return zd(Vd(t,e),Number)}function mR(t){var e={};return Ae(t,function(r,n){e[n.toLowerCase()]=r}),e}var $Ie,zIe,GIe,VIe,UIe,HIe,WIe,qIe,Sie=N(()=>{"use strict";qt();Vo();wne();Cne();YL();JL();fR();Qne();yie();xie();Eie();Sc();o(R2,"layout");o(BIe,"runLayout");o(FIe,"updateInputGraph");$Ie=["nodesep","edgesep","ranksep","marginx","marginy"],zIe={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},GIe=["acyclicer","ranker","rankdir","align"],VIe=["width","height"],UIe={width:0,height:0},HIe=["minlen","weight","width","height","labeloffset"],WIe={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},qIe=["labelpos"];o(YIe,"buildLayoutGraph");o(XIe,"makeSpaceForEdgeLabels");o(jIe,"injectEdgeLabelProxies");o(KIe,"assignRankMinMax");o(QIe,"removeEdgeLabelProxies");o(ZIe,"translateGraph");o(JIe,"assignNodeIntersects");o(eOe,"fixupEdgeLabelCoords");o(tOe,"reversePointsForReversedEdges");o(rOe,"removeBorderNodes");o(nOe,"removeSelfEdges");o(iOe,"insertSelfEdges");o(aOe,"positionSelfEdges");o(pR,"selectNumberAttrs");o(mR,"canonicalize")});var gR=N(()=>{"use strict";YL();Sie();JL();fR()});function Uo(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:sOe(t),edges:oOe(t)};return pr(t.graph())||(e.value=an(t.graph())),e}function sOe(t){return Je(t.nodes(),function(e){var r=t.node(e),n=t.parent(e),i={v:e};return pr(r)||(i.value=r),pr(n)||(i.parent=n),i})}function oOe(t){return Je(t.edges(),function(e){var r=t.edge(e),n={v:e.v,w:e.w};return pr(e.name)||(n.name=e.name),pr(r)||(n.value=r),n})}var yR=N(()=>{"use strict";qt();KT();o(Uo,"write");o(sOe,"writeNodes");o(oOe,"writeEdges")});var wr,qd,_ie,Die,nk,lOe,Lie,Rie,cOe,Fm,Aie,Nie,Mie,Iie,Oie,Pie=N(()=>{"use strict";vt();Vo();yR();wr=new Map,qd=new Map,_ie=new Map,Die=o(()=>{qd.clear(),_ie.clear(),wr.clear()},"clear"),nk=o((t,e)=>{let r=qd.get(e)||[];return Y.trace("In isDescendant",e," ",t," = ",r.includes(t)),r.includes(t)},"isDescendant"),lOe=o((t,e)=>{let r=qd.get(e)||[];return Y.info("Descendants of ",e," is ",r),Y.info("Edge is ",t),t.v===e||t.w===e?!1:r?r.includes(t.v)||nk(t.v,e)||nk(t.w,e)||r.includes(t.w):(Y.debug("Tilt, ",e,",not in descendants"),!1)},"edgeInCluster"),Lie=o((t,e,r,n)=>{Y.warn("Copying children of ",t,"root",n,"data",e.node(t),n);let i=e.children(t)||[];t!==n&&i.push(t),Y.warn("Copying (nodes) clusterId",t,"nodes",i),i.forEach(a=>{if(e.children(a).length>0)Lie(a,e,r,n);else{let s=e.node(a);Y.info("cp ",a," to ",n," with parent ",t),r.setNode(a,s),n!==e.parent(a)&&(Y.warn("Setting parent",a,e.parent(a)),r.setParent(a,e.parent(a))),t!==n&&a!==t?(Y.debug("Setting parent",a,t),r.setParent(a,t)):(Y.info("In copy ",t,"root",n,"data",e.node(t),n),Y.debug("Not Setting parent for node=",a,"cluster!==rootId",t!==n,"node!==clusterId",a!==t));let l=e.edges(a);Y.debug("Copying Edges",l),l.forEach(u=>{Y.info("Edge",u);let h=e.edge(u.v,u.w,u.name);Y.info("Edge data",h,n);try{lOe(u,n)?(Y.info("Copying as ",u.v,u.w,h,u.name),r.setEdge(u.v,u.w,h,u.name),Y.info("newGraph edges ",r.edges(),r.edge(r.edges()[0]))):Y.info("Skipping copy of edge ",u.v,"-->",u.w," rootId: ",n," clusterId:",t)}catch(f){Y.error(f)}})}Y.debug("Removing node",a),e.removeNode(a)})},"copy"),Rie=o((t,e)=>{let r=e.children(t),n=[...r];for(let i of r)_ie.set(i,t),n=[...n,...Rie(i,e)];return n},"extractDescendants"),cOe=o((t,e,r)=>{let n=t.edges().filter(u=>u.v===e||u.w===e),i=t.edges().filter(u=>u.v===r||u.w===r),a=n.map(u=>({v:u.v===e?r:u.v,w:u.w===e?e:u.w})),s=i.map(u=>({v:u.v,w:u.w}));return a.filter(u=>s.some(h=>u.v===h.v&&u.w===h.w))},"findCommonEdges"),Fm=o((t,e,r)=>{let n=e.children(t);if(Y.trace("Searching children of id ",t,n),n.length<1)return t;let i;for(let a of n){let s=Fm(a,e,r),l=cOe(e,r,s);if(s)if(l.length>0)i=s;else return s}return i},"findNonClusterChild"),Aie=o(t=>!wr.has(t)||!wr.get(t).externalConnections?t:wr.has(t)?wr.get(t).id:t,"getAnchorId"),Nie=o((t,e)=>{if(!t||e>10){Y.debug("Opting out, no graph ");return}else Y.debug("Opting in, graph ");t.nodes().forEach(function(r){t.children(r).length>0&&(Y.warn("Cluster identified",r," Replacement id in edges: ",Fm(r,t,r)),qd.set(r,Rie(r,t)),wr.set(r,{id:Fm(r,t,r),clusterData:t.node(r)}))}),t.nodes().forEach(function(r){let n=t.children(r),i=t.edges();n.length>0?(Y.debug("Cluster identified",r,qd),i.forEach(a=>{let s=nk(a.v,r),l=nk(a.w,r);s^l&&(Y.warn("Edge: ",a," leaves cluster ",r),Y.warn("Descendants of XXX ",r,": ",qd.get(r)),wr.get(r).externalConnections=!0)})):Y.debug("Not a cluster ",r,qd)});for(let r of wr.keys()){let n=wr.get(r).id,i=t.parent(n);i!==r&&wr.has(i)&&!wr.get(i).externalConnections&&(wr.get(r).id=i)}t.edges().forEach(function(r){let n=t.edge(r);Y.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(r)),Y.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(t.edge(r)));let i=r.v,a=r.w;if(Y.warn("Fix XXX",wr,"ids:",r.v,r.w,"Translating: ",wr.get(r.v)," --- ",wr.get(r.w)),wr.get(r.v)||wr.get(r.w)){if(Y.warn("Fixing and trying - removing XXX",r.v,r.w,r.name),i=Aie(r.v),a=Aie(r.w),t.removeEdge(r.v,r.w,r.name),i!==r.v){let s=t.parent(i);wr.get(s).externalConnections=!0,n.fromCluster=r.v}if(a!==r.w){let s=t.parent(a);wr.get(s).externalConnections=!0,n.toCluster=r.w}Y.warn("Fix Replacing with XXX",i,a,r.name),t.setEdge(i,a,n,r.name)}}),Y.warn("Adjusted Graph",Uo(t)),Mie(t,0),Y.trace(wr)},"adjustClustersAndEdges"),Mie=o((t,e)=>{if(Y.warn("extractor - ",e,Uo(t),t.children("D")),e>10){Y.error("Bailing out");return}let r=t.nodes(),n=!1;for(let i of r){let a=t.children(i);n=n||a.length>0}if(!n){Y.debug("Done, no node has children",t.nodes());return}Y.debug("Nodes = ",r,e);for(let i of r)if(Y.debug("Extracting node",i,wr,wr.has(i)&&!wr.get(i).externalConnections,!t.parent(i),t.node(i),t.children("D")," Depth ",e),!wr.has(i))Y.debug("Not a cluster",i,e);else if(!wr.get(i).externalConnections&&t.children(i)&&t.children(i).length>0){Y.warn("Cluster without external connections, without a parent and with children",i,e);let s=t.graph().rankdir==="TB"?"LR":"TB";wr.get(i)?.clusterData?.dir&&(s=wr.get(i).clusterData.dir,Y.warn("Fixing dir",wr.get(i).clusterData.dir,s));let l=new sn({multigraph:!0,compound:!0}).setGraph({rankdir:s,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});Y.warn("Old graph before copy",Uo(t)),Lie(i,t,l,i),t.setNode(i,{clusterNode:!0,id:i,clusterData:wr.get(i).clusterData,label:wr.get(i).label,graph:l}),Y.warn("New graph after copy node: (",i,")",Uo(l)),Y.debug("Old graph after copy",Uo(t))}else Y.warn("Cluster ** ",i," **not meeting the criteria !externalConnections:",!wr.get(i).externalConnections," no parent: ",!t.parent(i)," children ",t.children(i)&&t.children(i).length>0,t.children("D"),e),Y.debug(wr);r=t.nodes(),Y.warn("New list of nodes",r);for(let i of r){let a=t.node(i);Y.warn(" Now next level",i,a),a?.clusterNode&&Mie(a.graph,e+1)}},"extractor"),Iie=o((t,e)=>{if(e.length===0)return[];let r=Object.assign([],e);return e.forEach(n=>{let i=t.children(n),a=Iie(t,i);r=[...r,...a]}),r},"sorter"),Oie=o(t=>Iie(t,t.children()),"sortNodesByHierarchy")});var Fie={};hr(Fie,{render:()=>uOe});var Bie,uOe,$ie=N(()=>{"use strict";gR();yR();Vo();tL();Ft();Pie();eT();Hw();eL();vt();w2();zt();Bie=o(async(t,e,r,n,i,a)=>{Y.warn("Graph in recursive render:XAX",Uo(e),i);let s=e.graph().rankdir;Y.trace("Dir in recursive render - dir:",s);let l=t.insert("g").attr("class","root");e.nodes()?Y.info("Recursive render XXX",e.nodes()):Y.info("No nodes found for",e),e.edges().length>0&&Y.info("Recursive edges",e.edge(e.edges()[0]));let u=l.insert("g").attr("class","clusters"),h=l.insert("g").attr("class","edgePaths"),f=l.insert("g").attr("class","edgeLabels"),d=l.insert("g").attr("class","nodes");await Promise.all(e.nodes().map(async function(y){let v=e.node(y);if(i!==void 0){let x=JSON.parse(JSON.stringify(i.clusterData));Y.trace(`Setting data for parent cluster XXX
477 + Node.id = `,y,`
478 + data=`,x.height,`
479 +Parent cluster`,i.height),e.setNode(i.id,x),e.parent(y)||(Y.trace("Setting parent",y,i.id),e.setParent(y,i.id,x))}if(Y.info("(Insert) Node XXX"+y+": "+JSON.stringify(e.node(y))),v?.clusterNode){Y.info("Cluster identified XBX",y,v.width,e.node(y));let{ranksep:x,nodesep:b}=e.graph();v.graph.setGraph({...v.graph.graph(),ranksep:x+25,nodesep:b});let w=await Bie(d,v.graph,r,n,e.node(y),a),C=w.elem;je(v,C),v.diff=w.diff||0,Y.info("New compound node after recursive render XAX",y,"width",v.width,"height",v.height),rJ(C,v)}else e.children(y).length>0?(Y.trace("Cluster - the non recursive path XBX",y,v.id,v,v.width,"Graph:",e),Y.trace(Fm(v.id,e)),wr.set(v.id,{id:Fm(v.id,e),node:v})):(Y.trace("Node - the non recursive path XAX",y,d,e.node(y),s),await vm(d,e.node(y),{config:a,dir:s}))})),await o(async()=>{let y=e.edges().map(async function(v){let x=e.edge(v.v,v.w,v.name);Y.info("Edge "+v.v+" -> "+v.w+": "+JSON.stringify(v)),Y.info("Edge "+v.v+" -> "+v.w+": ",v," ",JSON.stringify(e.edge(v))),Y.info("Fix",wr,"ids:",v.v,v.w,"Translating: ",wr.get(v.v),wr.get(v.w)),await jw(f,x)});await Promise.all(y)},"processEdges")(),Y.info("Graph before layout:",JSON.stringify(Uo(e))),Y.info("############################################# XXX"),Y.info("### Layout ### XXX"),Y.info("############################################# XXX"),R2(e),Y.info("Graph after layout:",JSON.stringify(Uo(e)));let m=0,{subGraphTitleTotalMargin:g}=Ru(a);return await Promise.all(Oie(e).map(async function(y){let v=e.node(y);if(Y.info("Position XBX => "+y+": ("+v.x,","+v.y,") width: ",v.width," height: ",v.height),v?.clusterNode)v.y+=g,Y.info("A tainted cluster node XBX1",y,v.id,v.width,v.height,v.x,v.y,e.parent(y)),wr.get(v.id).node=v,k2(v);else if(e.children(y).length>0){Y.info("A pure cluster node XBX1",y,v.id,v.x,v.y,v.width,v.height,e.parent(y)),v.height+=g,e.node(v.parentId);let x=v?.padding/2||0,b=v?.labelBBox?.height||0,w=b-x||0;Y.debug("OffsetY",w,"labelHeight",b,"halfPadding",x),await ym(u,v),wr.get(v.id).node=v}else{let x=e.node(v.parentId);v.y+=g/2,Y.info("A regular node XBX1 - using the padding",v.id,"parent",v.parentId,v.width,v.height,v.x,v.y,"offsetY",v.offsetY,"parent",x,x?.offsetY,v),k2(v)}})),e.edges().forEach(function(y){let v=e.edge(y);Y.info("Edge "+y.v+" -> "+y.w+": "+JSON.stringify(v),v),v.points.forEach(C=>C.y+=g/2);let x=e.node(y.v);var b=e.node(y.w);let w=Qw(h,v,wr,r,x,b,n);Kw(v,w)}),e.nodes().forEach(function(y){let v=e.node(y);Y.info(y,v.type,v.diff),v.isGroup&&(m=v.diff)}),Y.warn("Returning from recursive render XAX",l,m),{elem:l,diff:m}},"recursiveRender"),uOe=o(async(t,e)=>{let r=new sn({multigraph:!0,compound:!0}).setGraph({rankdir:t.direction,nodesep:t.config?.nodeSpacing||t.config?.flowchart?.nodeSpacing||t.nodeSpacing,ranksep:t.config?.rankSpacing||t.config?.flowchart?.rankSpacing||t.rankSpacing,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),n=e.select("g");Zw(n,t.markers,t.type,t.diagramId),nJ(),tJ(),jZ(),Die(),t.nodes.forEach(a=>{r.setNode(a.id,{...a}),a.parentId&&r.setParent(a.id,a.parentId)}),Y.debug("Edges:",t.edges),t.edges.forEach(a=>{if(a.start===a.end){let s=a.start,l=s+"---"+s+"---1",u=s+"---"+s+"---2",h=r.node(s);r.setNode(l,{domId:l,id:l,parentId:h.parentId,labelStyle:"",label:"",padding:0,shape:"labelRect",style:"",width:10,height:10}),r.setParent(l,h.parentId),r.setNode(u,{domId:u,id:u,parentId:h.parentId,labelStyle:"",padding:0,shape:"labelRect",label:"",style:"",width:10,height:10}),r.setParent(u,h.parentId);let f=structuredClone(a),d=structuredClone(a),p=structuredClone(a);f.label="",f.arrowTypeEnd="none",f.id=s+"-cyclic-special-1",d.arrowTypeStart="none",d.arrowTypeEnd="none",d.id=s+"-cyclic-special-mid",p.label="",h.isGroup&&(f.fromCluster=s,p.toCluster=s),p.id=s+"-cyclic-special-2",p.arrowTypeStart="none",r.setEdge(s,l,f,s+"-cyclic-special-0"),r.setEdge(l,u,d,s+"-cyclic-special-1"),r.setEdge(u,s,p,s+"-cyc<lic-special-2")}else r.setEdge(a.start,a.end,{...a},a.id)}),Y.warn("Graph at first:",JSON.stringify(Uo(r))),Nie(r),Y.warn("Graph after XAX:",JSON.stringify(Uo(r)));let i=me();await Bie(n,r,t.type,t.diagramId,void 0,i)},"render")});var N2,vR,hOe,Cc,nf,Yd=N(()=>{"use strict";aJ();vt();N2={},vR=o(t=>{for(let e of t)N2[e.name]=e},"registerLayoutLoaders"),hOe=o(()=>{vR([{name:"dagre",loader:o(async()=>await Promise.resolve().then(()=>($ie(),Fie)),"loader")}])},"registerDefaultLayoutLoaders");hOe();Cc=o(async(t,e)=>{if(!(t.layoutAlgorithm in N2))throw new Error(`Unknown layout algorithm: ${t.layoutAlgorithm}`);let r=N2[t.layoutAlgorithm];return(await r.loader()).render(t,e,iJ,{algorithm:r.algorithm})},"render"),nf=o((t="",{fallback:e="dagre"}={})=>{if(t in N2)return t;if(e in N2)return Y.warn(`Layout algorithm ${t} is not registered. Using ${e} as fallback.`),e;throw new Error(`Both layout algorithms ${t} and ${e} are not registered.`)},"getRegisteredLayoutAlgorithm")});var Ac,fOe,dOe,$m=N(()=>{"use strict";Ei();vt();Ac=o((t,e,r,n)=>{t.attr("class",r);let{width:i,height:a,x:s,y:l}=fOe(t,e);vn(t,a,i,n);let u=dOe(s,l,i,a,e);t.attr("viewBox",u),Y.debug(`viewBox configured: ${u} with padding: ${e}`)},"setupViewPortForSVG"),fOe=o((t,e)=>{let r=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:r.width+e*2,height:r.height+e*2,x:r.x,y:r.y}},"calculateDimensionsWithPadding"),dOe=o((t,e,r,n,i)=>`${t-i} ${e-i} ${r} ${n}`,"createViewBox")});var pOe,mOe,zie,Gie=N(()=>{"use strict";dr();zt();vt();gm();Yd();$m();ir();pOe=o(function(t,e){return e.db.getClasses()},"getClasses"),mOe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing state diagram (v2)",e);let{securityLevel:i,flowchart:a,layout:s}=me(),l;i==="sandbox"&&(l=Ge("#i"+e));let u=i==="sandbox"?l.nodes()[0].contentDocument:document;Y.debug("Before getData: ");let h=n.db.getData();Y.debug("Data: ",h);let f=yc(e,i),d=n.db.getDirection();h.type=n.type,h.layoutAlgorithm=nf(s),h.layoutAlgorithm==="dagre"&&s==="elk"&&Y.warn("flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."),h.direction=d,h.nodeSpacing=a?.nodeSpacing||50,h.rankSpacing=a?.rankSpacing||50,h.markers=["point","circle","cross"],h.diagramId=e,Y.debug("REF1:",h),await Cc(h,f);let p=h.config.flowchart?.diagramPadding??8;Gt.insertTitle(f,"flowchartTitleText",a?.titleTopMargin||0,n.db.getDiagramTitle()),Ac(f,p,"flowchart",a?.useMaxWidth||!1);for(let m of h.nodes){let g=Ge(`#${e} [id="${m.id}"]`);if(!g||!m.link)continue;let y=u.createElementNS("http://www.w3.org/2000/svg","a");y.setAttributeNS("http://www.w3.org/2000/svg","class",m.cssClasses),y.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),i==="sandbox"?y.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):m.linkTarget&&y.setAttributeNS("http://www.w3.org/2000/svg","target",m.linkTarget);let v=g.insert(function(){return y},":first-child"),x=g.select(".label-container");x&&v.append(function(){return x.node()});let b=g.select(".label");b&&v.append(function(){return b.node()})}},"draw"),zie={getClasses:pOe,draw:mOe}});var xR,bR,Vie=N(()=>{"use strict";xR=function(){var t=o(function(Hr,et,mt,Kt){for(mt=mt||{},Kt=Hr.length;Kt--;mt[Hr[Kt]]=et);return mt},"o"),e=[1,4],r=[1,3],n=[1,5],i=[1,8,9,10,11,27,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],a=[2,2],s=[1,13],l=[1,14],u=[1,15],h=[1,16],f=[1,23],d=[1,25],p=[1,26],m=[1,27],g=[1,49],y=[1,48],v=[1,29],x=[1,30],b=[1,31],w=[1,32],C=[1,33],T=[1,44],E=[1,46],A=[1,42],S=[1,47],_=[1,43],I=[1,50],D=[1,45],k=[1,51],L=[1,52],R=[1,34],O=[1,35],M=[1,36],B=[1,37],F=[1,57],P=[1,8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],z=[1,61],$=[1,60],H=[1,62],Q=[8,9,11,75,77,78],j=[1,78],ie=[1,91],ne=[1,96],le=[1,95],he=[1,92],K=[1,88],X=[1,94],te=[1,90],J=[1,97],se=[1,93],ue=[1,98],Z=[1,89],Se=[8,9,10,11,40,75,77,78],ce=[8,9,10,11,40,46,75,77,78],ae=[8,9,10,11,29,40,44,46,48,50,52,54,56,58,60,63,65,67,68,70,75,77,78,89,102,105,106,109,111,114,115,116],Oe=[8,9,11,44,60,75,77,78,89,102,105,106,109,111,114,115,116],ge=[44,60,89,102,105,106,109,111,114,115,116],ze=[1,121],He=[1,122],$e=[1,124],Re=[1,123],Ie=[44,60,62,74,89,102,105,106,109,111,114,115,116],be=[1,133],W=[1,147],de=[1,148],re=[1,149],oe=[1,150],V=[1,135],xe=[1,137],q=[1,141],pe=[1,142],ve=[1,143],Pe=[1,144],_e=[1,145],we=[1,146],Ve=[1,151],De=[1,152],qe=[1,131],at=[1,132],Rt=[1,139],st=[1,134],Ue=[1,138],ct=[1,136],We=[8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],ot=[1,154],Yt=[1,156],bt=[8,9,11],Mt=[8,9,10,11,14,44,60,89,105,106,109,111,114,115,116],xt=[1,176],ut=[1,172],Et=[1,173],ft=[1,177],yt=[1,174],nt=[1,175],dn=[77,116,119],Tt=[8,9,10,11,12,14,27,29,32,44,60,75,84,85,86,87,88,89,90,105,109,111,114,115,116],On=[10,106],tn=[31,49,51,53,55,57,62,64,66,67,69,71,116,117,118],_r=[1,247],Dr=[1,245],Pn=[1,249],At=[1,243],Ce=[1,244],tt=[1,246],St=[1,248],mr=[1,250],rn=[1,268],gn=[8,9,11,106],Zr=[8,9,10,11,60,84,105,106,109,110,111,112],Ni={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,shapeData:39,SHAPE_DATA:40,link:41,node:42,styledVertex:43,AMP:44,vertex:45,STYLE_SEPARATOR:46,idString:47,DOUBLECIRCLESTART:48,DOUBLECIRCLEEND:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,VERTEX_WITH_PROPS_START:58,"NODE_STRING[field]":59,COLON:60,"NODE_STRING[value]":61,PIPE:62,CYLINDERSTART:63,CYLINDEREND:64,DIAMOND_START:65,DIAMOND_STOP:66,TAGEND:67,TRAPSTART:68,TRAPEND:69,INVTRAPSTART:70,INVTRAPEND:71,linkStatement:72,arrowText:73,TESTSTR:74,START_LINK:75,edgeText:76,LINK:77,LINK_ID:78,edgeTextToken:79,STR:80,MD_STR:81,textToken:82,keywords:83,STYLE:84,LINKSTYLE:85,CLASSDEF:86,CLASS:87,CLICK:88,DOWN:89,UP:90,textNoTagsToken:91,stylesOpt:92,"idString[vertex]":93,"idString[class]":94,CALLBACKNAME:95,CALLBACKARGS:96,HREF:97,LINK_TARGET:98,"STR[link]":99,"STR[tooltip]":100,alphaNum:101,DEFAULT:102,numList:103,INTERPOLATE:104,NUM:105,COMMA:106,style:107,styleComponent:108,NODE_STRING:109,UNIT:110,BRKT:111,PCT:112,idStringToken:113,MINUS:114,MULT:115,UNICODE_TEXT:116,TEXT:117,TAGSTART:118,EDGE_TEXT:119,alphaNumToken:120,direction_tb:121,direction_bt:122,direction_rl:123,direction_lr:124,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",40:"SHAPE_DATA",44:"AMP",46:"STYLE_SEPARATOR",48:"DOUBLECIRCLESTART",49:"DOUBLECIRCLEEND",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"VERTEX_WITH_PROPS_START",59:"NODE_STRING[field]",60:"COLON",61:"NODE_STRING[value]",62:"PIPE",63:"CYLINDERSTART",64:"CYLINDEREND",65:"DIAMOND_START",66:"DIAMOND_STOP",67:"TAGEND",68:"TRAPSTART",69:"TRAPEND",70:"INVTRAPSTART",71:"INVTRAPEND",74:"TESTSTR",75:"START_LINK",77:"LINK",78:"LINK_ID",80:"STR",81:"MD_STR",84:"STYLE",85:"LINKSTYLE",86:"CLASSDEF",87:"CLASS",88:"CLICK",89:"DOWN",90:"UP",93:"idString[vertex]",94:"idString[class]",95:"CALLBACKNAME",96:"CALLBACKARGS",97:"HREF",98:"LINK_TARGET",99:"STR[link]",100:"STR[tooltip]",102:"DEFAULT",104:"INTERPOLATE",105:"NUM",106:"COMMA",109:"NODE_STRING",110:"UNIT",111:"BRKT",112:"PCT",114:"MINUS",115:"MULT",116:"UNICODE_TEXT",117:"TEXT",118:"TAGSTART",119:"EDGE_TEXT",121:"direction_tb",122:"direction_bt",123:"direction_rl",124:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[39,2],[39,1],[20,4],[20,3],[20,4],[20,2],[20,2],[20,1],[42,1],[42,6],[42,5],[43,1],[43,3],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,8],[45,4],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,4],[45,4],[45,1],[41,2],[41,3],[41,3],[41,1],[41,3],[41,4],[76,1],[76,2],[76,1],[76,1],[72,1],[72,2],[73,3],[30,1],[30,2],[30,1],[30,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[103,1],[103,3],[92,1],[92,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[82,1],[82,1],[82,1],[82,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[79,1],[79,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[47,1],[47,2],[101,1],[101,2],[33,1],[33,1],[33,1],[33,1]],performAction:o(function(et,mt,Kt,lt,Cn,ye,Vf){var Te=ye.length-1;switch(Cn){case 2:this.$=[];break;case 3:(!Array.isArray(ye[Te])||ye[Te].length>0)&&ye[Te-1].push(ye[Te]),this.$=ye[Te-1];break;case 4:case 183:this.$=ye[Te];break;case 11:lt.setDirection("TB"),this.$="TB";break;case 12:lt.setDirection(ye[Te-1]),this.$=ye[Te-1];break;case 27:this.$=ye[Te-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=lt.addSubGraph(ye[Te-6],ye[Te-1],ye[Te-4]);break;case 34:this.$=lt.addSubGraph(ye[Te-3],ye[Te-1],ye[Te-3]);break;case 35:this.$=lt.addSubGraph(void 0,ye[Te-1],void 0);break;case 37:this.$=ye[Te].trim(),lt.setAccTitle(this.$);break;case 38:case 39:this.$=ye[Te].trim(),lt.setAccDescription(this.$);break;case 43:this.$=ye[Te-1]+ye[Te];break;case 44:this.$=ye[Te];break;case 45:lt.addVertex(ye[Te-1][ye[Te-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,ye[Te]),lt.addLink(ye[Te-3].stmt,ye[Te-1],ye[Te-2]),this.$={stmt:ye[Te-1],nodes:ye[Te-1].concat(ye[Te-3].nodes)};break;case 46:lt.addLink(ye[Te-2].stmt,ye[Te],ye[Te-1]),this.$={stmt:ye[Te],nodes:ye[Te].concat(ye[Te-2].nodes)};break;case 47:lt.addLink(ye[Te-3].stmt,ye[Te-1],ye[Te-2]),this.$={stmt:ye[Te-1],nodes:ye[Te-1].concat(ye[Te-3].nodes)};break;case 48:this.$={stmt:ye[Te-1],nodes:ye[Te-1]};break;case 49:lt.addVertex(ye[Te-1][ye[Te-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,ye[Te]),this.$={stmt:ye[Te-1],nodes:ye[Te-1],shapeData:ye[Te]};break;case 50:this.$={stmt:ye[Te],nodes:ye[Te]};break;case 51:this.$=[ye[Te]];break;case 52:lt.addVertex(ye[Te-5][ye[Te-5].length-1],void 0,void 0,void 0,void 0,void 0,void 0,ye[Te-4]),this.$=ye[Te-5].concat(ye[Te]);break;case 53:this.$=ye[Te-4].concat(ye[Te]);break;case 54:this.$=ye[Te];break;case 55:this.$=ye[Te-2],lt.setClass(ye[Te-2],ye[Te]);break;case 56:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"square");break;case 57:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"doublecircle");break;case 58:this.$=ye[Te-5],lt.addVertex(ye[Te-5],ye[Te-2],"circle");break;case 59:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"ellipse");break;case 60:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"stadium");break;case 61:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"subroutine");break;case 62:this.$=ye[Te-7],lt.addVertex(ye[Te-7],ye[Te-1],"rect",void 0,void 0,void 0,Object.fromEntries([[ye[Te-5],ye[Te-3]]]));break;case 63:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"cylinder");break;case 64:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"round");break;case 65:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"diamond");break;case 66:this.$=ye[Te-5],lt.addVertex(ye[Te-5],ye[Te-2],"hexagon");break;case 67:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"odd");break;case 68:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"trapezoid");break;case 69:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"inv_trapezoid");break;case 70:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"lean_right");break;case 71:this.$=ye[Te-3],lt.addVertex(ye[Te-3],ye[Te-1],"lean_left");break;case 72:this.$=ye[Te],lt.addVertex(ye[Te]);break;case 73:ye[Te-1].text=ye[Te],this.$=ye[Te-1];break;case 74:case 75:ye[Te-2].text=ye[Te-1],this.$=ye[Te-2];break;case 76:this.$=ye[Te];break;case 77:var wi=lt.destructLink(ye[Te],ye[Te-2]);this.$={type:wi.type,stroke:wi.stroke,length:wi.length,text:ye[Te-1]};break;case 78:var wi=lt.destructLink(ye[Te],ye[Te-2]);this.$={type:wi.type,stroke:wi.stroke,length:wi.length,text:ye[Te-1],id:ye[Te-3]};break;case 79:this.$={text:ye[Te],type:"text"};break;case 80:this.$={text:ye[Te-1].text+""+ye[Te],type:ye[Te-1].type};break;case 81:this.$={text:ye[Te],type:"string"};break;case 82:this.$={text:ye[Te],type:"markdown"};break;case 83:var wi=lt.destructLink(ye[Te]);this.$={type:wi.type,stroke:wi.stroke,length:wi.length};break;case 84:var wi=lt.destructLink(ye[Te]);this.$={type:wi.type,stroke:wi.stroke,length:wi.length,id:ye[Te-1]};break;case 85:this.$=ye[Te-1];break;case 86:this.$={text:ye[Te],type:"text"};break;case 87:this.$={text:ye[Te-1].text+""+ye[Te],type:ye[Te-1].type};break;case 88:this.$={text:ye[Te],type:"string"};break;case 89:case 104:this.$={text:ye[Te],type:"markdown"};break;case 101:this.$={text:ye[Te],type:"text"};break;case 102:this.$={text:ye[Te-1].text+""+ye[Te],type:ye[Te-1].type};break;case 103:this.$={text:ye[Te],type:"text"};break;case 105:this.$=ye[Te-4],lt.addClass(ye[Te-2],ye[Te]);break;case 106:this.$=ye[Te-4],lt.setClass(ye[Te-2],ye[Te]);break;case 107:case 115:this.$=ye[Te-1],lt.setClickEvent(ye[Te-1],ye[Te]);break;case 108:case 116:this.$=ye[Te-3],lt.setClickEvent(ye[Te-3],ye[Te-2]),lt.setTooltip(ye[Te-3],ye[Te]);break;case 109:this.$=ye[Te-2],lt.setClickEvent(ye[Te-2],ye[Te-1],ye[Te]);break;case 110:this.$=ye[Te-4],lt.setClickEvent(ye[Te-4],ye[Te-3],ye[Te-2]),lt.setTooltip(ye[Te-4],ye[Te]);break;case 111:this.$=ye[Te-2],lt.setLink(ye[Te-2],ye[Te]);break;case 112:this.$=ye[Te-4],lt.setLink(ye[Te-4],ye[Te-2]),lt.setTooltip(ye[Te-4],ye[Te]);break;case 113:this.$=ye[Te-4],lt.setLink(ye[Te-4],ye[Te-2],ye[Te]);break;case 114:this.$=ye[Te-6],lt.setLink(ye[Te-6],ye[Te-4],ye[Te]),lt.setTooltip(ye[Te-6],ye[Te-2]);break;case 117:this.$=ye[Te-1],lt.setLink(ye[Te-1],ye[Te]);break;case 118:this.$=ye[Te-3],lt.setLink(ye[Te-3],ye[Te-2]),lt.setTooltip(ye[Te-3],ye[Te]);break;case 119:this.$=ye[Te-3],lt.setLink(ye[Te-3],ye[Te-2],ye[Te]);break;case 120:this.$=ye[Te-5],lt.setLink(ye[Te-5],ye[Te-4],ye[Te]),lt.setTooltip(ye[Te-5],ye[Te-2]);break;case 121:this.$=ye[Te-4],lt.addVertex(ye[Te-2],void 0,void 0,ye[Te]);break;case 122:this.$=ye[Te-4],lt.updateLink([ye[Te-2]],ye[Te]);break;case 123:this.$=ye[Te-4],lt.updateLink(ye[Te-2],ye[Te]);break;case 124:this.$=ye[Te-8],lt.updateLinkInterpolate([ye[Te-6]],ye[Te-2]),lt.updateLink([ye[Te-6]],ye[Te]);break;case 125:this.$=ye[Te-8],lt.updateLinkInterpolate(ye[Te-6],ye[Te-2]),lt.updateLink(ye[Te-6],ye[Te]);break;case 126:this.$=ye[Te-6],lt.updateLinkInterpolate([ye[Te-4]],ye[Te]);break;case 127:this.$=ye[Te-6],lt.updateLinkInterpolate(ye[Te-4],ye[Te]);break;case 128:case 130:this.$=[ye[Te]];break;case 129:case 131:ye[Te-2].push(ye[Te]),this.$=ye[Te-2];break;case 133:this.$=ye[Te-1]+ye[Te];break;case 181:this.$=ye[Te];break;case 182:this.$=ye[Te-1]+""+ye[Te];break;case 184:this.$=ye[Te-1]+""+ye[Te];break;case 185:this.$={stmt:"dir",value:"TB"};break;case 186:this.$={stmt:"dir",value:"BT"};break;case 187:this.$={stmt:"dir",value:"RL"};break;case 188:this.$={stmt:"dir",value:"LR"};break}},"anonymous"),table:[{3:1,4:2,9:e,10:r,12:n},{1:[3]},t(i,a,{5:6}),{4:7,9:e,10:r,12:n},{4:8,9:e,10:r,12:n},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L,121:R,122:O,123:M,124:B},t(i,[2,9]),t(i,[2,10]),t(i,[2,11]),{8:[1,54],9:[1,55],10:F,15:53,18:56},t(P,[2,3]),t(P,[2,4]),t(P,[2,5]),t(P,[2,6]),t(P,[2,7]),t(P,[2,8]),{8:z,9:$,11:H,21:58,41:59,72:63,75:[1,64],77:[1,66],78:[1,65]},{8:z,9:$,11:H,21:67},{8:z,9:$,11:H,21:68},{8:z,9:$,11:H,21:69},{8:z,9:$,11:H,21:70},{8:z,9:$,11:H,21:71},{8:z,9:$,10:[1,72],11:H,21:73},t(P,[2,36]),{35:[1,74]},{37:[1,75]},t(P,[2,39]),t(Q,[2,50],{18:76,39:77,10:F,40:j}),{10:[1,79]},{10:[1,80]},{10:[1,81]},{10:[1,82]},{14:ie,44:ne,60:le,80:[1,86],89:he,95:[1,83],97:[1,84],101:85,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z,120:87},t(P,[2,185]),t(P,[2,186]),t(P,[2,187]),t(P,[2,188]),t(Se,[2,51]),t(Se,[2,54],{46:[1,99]}),t(ce,[2,72],{113:112,29:[1,100],44:g,48:[1,101],50:[1,102],52:[1,103],54:[1,104],56:[1,105],58:[1,106],60:y,63:[1,107],65:[1,108],67:[1,109],68:[1,110],70:[1,111],89:T,102:E,105:A,106:S,109:_,111:I,114:D,115:k,116:L}),t(ae,[2,181]),t(ae,[2,142]),t(ae,[2,143]),t(ae,[2,144]),t(ae,[2,145]),t(ae,[2,146]),t(ae,[2,147]),t(ae,[2,148]),t(ae,[2,149]),t(ae,[2,150]),t(ae,[2,151]),t(ae,[2,152]),t(i,[2,12]),t(i,[2,18]),t(i,[2,19]),{9:[1,113]},t(Oe,[2,26],{18:114,10:F}),t(P,[2,27]),{42:115,43:38,44:g,45:39,47:40,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},t(P,[2,40]),t(P,[2,41]),t(P,[2,42]),t(ge,[2,76],{73:116,62:[1,118],74:[1,117]}),{76:119,79:120,80:ze,81:He,116:$e,119:Re},{75:[1,125],77:[1,126]},t(Ie,[2,83]),t(P,[2,28]),t(P,[2,29]),t(P,[2,30]),t(P,[2,31]),t(P,[2,32]),{10:be,12:W,14:de,27:re,28:127,32:oe,44:V,60:xe,75:q,80:[1,129],81:[1,130],83:140,84:pe,85:ve,86:Pe,87:_e,88:we,89:Ve,90:De,91:128,105:qe,109:at,111:Rt,114:st,115:Ue,116:ct},t(We,a,{5:153}),t(P,[2,37]),t(P,[2,38]),t(Q,[2,48],{44:ot}),t(Q,[2,49],{18:155,10:F,40:Yt}),t(Se,[2,44]),{44:g,47:157,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},{102:[1,158],103:159,105:[1,160]},{44:g,47:161,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},{44:g,47:162,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},t(bt,[2,107],{10:[1,163],96:[1,164]}),{80:[1,165]},t(bt,[2,115],{120:167,10:[1,166],14:ie,44:ne,60:le,89:he,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z}),t(bt,[2,117],{10:[1,168]}),t(Mt,[2,183]),t(Mt,[2,170]),t(Mt,[2,171]),t(Mt,[2,172]),t(Mt,[2,173]),t(Mt,[2,174]),t(Mt,[2,175]),t(Mt,[2,176]),t(Mt,[2,177]),t(Mt,[2,178]),t(Mt,[2,179]),t(Mt,[2,180]),{44:g,47:169,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},{30:170,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:178,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:180,50:[1,179],67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:181,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:182,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:183,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{109:[1,184]},{30:185,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:186,65:[1,187],67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:188,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:189,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:190,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},t(ae,[2,182]),t(i,[2,20]),t(Oe,[2,25]),t(Q,[2,46],{39:191,18:192,10:F,40:j}),t(ge,[2,73],{10:[1,193]}),{10:[1,194]},{30:195,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{77:[1,196],79:197,116:$e,119:Re},t(dn,[2,79]),t(dn,[2,81]),t(dn,[2,82]),t(dn,[2,168]),t(dn,[2,169]),{76:198,79:120,80:ze,81:He,116:$e,119:Re},t(Ie,[2,84]),{8:z,9:$,10:be,11:H,12:W,14:de,21:200,27:re,29:[1,199],32:oe,44:V,60:xe,75:q,83:140,84:pe,85:ve,86:Pe,87:_e,88:we,89:Ve,90:De,91:201,105:qe,109:at,111:Rt,114:st,115:Ue,116:ct},t(Tt,[2,101]),t(Tt,[2,103]),t(Tt,[2,104]),t(Tt,[2,157]),t(Tt,[2,158]),t(Tt,[2,159]),t(Tt,[2,160]),t(Tt,[2,161]),t(Tt,[2,162]),t(Tt,[2,163]),t(Tt,[2,164]),t(Tt,[2,165]),t(Tt,[2,166]),t(Tt,[2,167]),t(Tt,[2,90]),t(Tt,[2,91]),t(Tt,[2,92]),t(Tt,[2,93]),t(Tt,[2,94]),t(Tt,[2,95]),t(Tt,[2,96]),t(Tt,[2,97]),t(Tt,[2,98]),t(Tt,[2,99]),t(Tt,[2,100]),{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,202],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L,121:R,122:O,123:M,124:B},{10:F,18:203},{44:[1,204]},t(Se,[2,43]),{10:[1,205],44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:112,114:D,115:k,116:L},{10:[1,206]},{10:[1,207],106:[1,208]},t(On,[2,128]),{10:[1,209],44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:112,114:D,115:k,116:L},{10:[1,210],44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:112,114:D,115:k,116:L},{80:[1,211]},t(bt,[2,109],{10:[1,212]}),t(bt,[2,111],{10:[1,213]}),{80:[1,214]},t(Mt,[2,184]),{80:[1,215],98:[1,216]},t(Se,[2,55],{113:112,44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,114:D,115:k,116:L}),{31:[1,217],67:xt,82:218,116:ft,117:yt,118:nt},t(tn,[2,86]),t(tn,[2,88]),t(tn,[2,89]),t(tn,[2,153]),t(tn,[2,154]),t(tn,[2,155]),t(tn,[2,156]),{49:[1,219],67:xt,82:218,116:ft,117:yt,118:nt},{30:220,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{51:[1,221],67:xt,82:218,116:ft,117:yt,118:nt},{53:[1,222],67:xt,82:218,116:ft,117:yt,118:nt},{55:[1,223],67:xt,82:218,116:ft,117:yt,118:nt},{57:[1,224],67:xt,82:218,116:ft,117:yt,118:nt},{60:[1,225]},{64:[1,226],67:xt,82:218,116:ft,117:yt,118:nt},{66:[1,227],67:xt,82:218,116:ft,117:yt,118:nt},{30:228,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{31:[1,229],67:xt,82:218,116:ft,117:yt,118:nt},{67:xt,69:[1,230],71:[1,231],82:218,116:ft,117:yt,118:nt},{67:xt,69:[1,233],71:[1,232],82:218,116:ft,117:yt,118:nt},t(Q,[2,45],{18:155,10:F,40:Yt}),t(Q,[2,47],{44:ot}),t(ge,[2,75]),t(ge,[2,74]),{62:[1,234],67:xt,82:218,116:ft,117:yt,118:nt},t(ge,[2,77]),t(dn,[2,80]),{77:[1,235],79:197,116:$e,119:Re},{30:236,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},t(We,a,{5:237}),t(Tt,[2,102]),t(P,[2,35]),{43:238,44:g,45:39,47:40,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},{10:F,18:239},{10:_r,60:Dr,84:Pn,92:240,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{10:_r,60:Dr,84:Pn,92:251,104:[1,252],105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{10:_r,60:Dr,84:Pn,92:253,104:[1,254],105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{105:[1,255]},{10:_r,60:Dr,84:Pn,92:256,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{44:g,47:257,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},t(bt,[2,108]),{80:[1,258]},{80:[1,259],98:[1,260]},t(bt,[2,116]),t(bt,[2,118],{10:[1,261]}),t(bt,[2,119]),t(ce,[2,56]),t(tn,[2,87]),t(ce,[2,57]),{51:[1,262],67:xt,82:218,116:ft,117:yt,118:nt},t(ce,[2,64]),t(ce,[2,59]),t(ce,[2,60]),t(ce,[2,61]),{109:[1,263]},t(ce,[2,63]),t(ce,[2,65]),{66:[1,264],67:xt,82:218,116:ft,117:yt,118:nt},t(ce,[2,67]),t(ce,[2,68]),t(ce,[2,70]),t(ce,[2,69]),t(ce,[2,71]),t([10,44,60,89,102,105,106,109,111,114,115,116],[2,85]),t(ge,[2,78]),{31:[1,265],67:xt,82:218,116:ft,117:yt,118:nt},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,266],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L,121:R,122:O,123:M,124:B},t(Se,[2,53]),{43:267,44:g,45:39,47:40,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L},t(bt,[2,121],{106:rn}),t(gn,[2,130],{108:269,10:_r,60:Dr,84:Pn,105:At,109:Ce,110:tt,111:St,112:mr}),t(Zr,[2,132]),t(Zr,[2,134]),t(Zr,[2,135]),t(Zr,[2,136]),t(Zr,[2,137]),t(Zr,[2,138]),t(Zr,[2,139]),t(Zr,[2,140]),t(Zr,[2,141]),t(bt,[2,122],{106:rn}),{10:[1,270]},t(bt,[2,123],{106:rn}),{10:[1,271]},t(On,[2,129]),t(bt,[2,105],{106:rn}),t(bt,[2,106],{113:112,44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,114:D,115:k,116:L}),t(bt,[2,110]),t(bt,[2,112],{10:[1,272]}),t(bt,[2,113]),{98:[1,273]},{51:[1,274]},{62:[1,275]},{66:[1,276]},{8:z,9:$,11:H,21:277},t(P,[2,34]),t(Se,[2,52]),{10:_r,60:Dr,84:Pn,105:At,107:278,108:242,109:Ce,110:tt,111:St,112:mr},t(Zr,[2,133]),{14:ie,44:ne,60:le,89:he,101:279,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z,120:87},{14:ie,44:ne,60:le,89:he,101:280,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z,120:87},{98:[1,281]},t(bt,[2,120]),t(ce,[2,58]),{30:282,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},t(ce,[2,66]),t(We,a,{5:283}),t(gn,[2,131],{108:269,10:_r,60:Dr,84:Pn,105:At,109:Ce,110:tt,111:St,112:mr}),t(bt,[2,126],{120:167,10:[1,284],14:ie,44:ne,60:le,89:he,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z}),t(bt,[2,127],{120:167,10:[1,285],14:ie,44:ne,60:le,89:he,105:K,106:X,109:te,111:J,114:se,115:ue,116:Z}),t(bt,[2,114]),{31:[1,286],67:xt,82:218,116:ft,117:yt,118:nt},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,287],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:D,115:k,116:L,121:R,122:O,123:M,124:B},{10:_r,60:Dr,84:Pn,92:288,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},{10:_r,60:Dr,84:Pn,92:289,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:mr},t(ce,[2,62]),t(P,[2,33]),t(bt,[2,124],{106:rn}),t(bt,[2,125],{106:rn})],defaultActions:{},parseError:o(function(et,mt){if(mt.recoverable)this.trace(et);else{var Kt=new Error(et);throw Kt.hash=mt,Kt}},"parseError"),parse:o(function(et){var mt=this,Kt=[0],lt=[],Cn=[null],ye=[],Vf=this.table,Te="",wi=0,TF=0,kF=0,M2e=2,EF=1,I2e=ye.slice.call(arguments,1),Xi=Object.create(this.lexer),Uf={yy:{}};for(var xC in this.yy)Object.prototype.hasOwnProperty.call(this.yy,xC)&&(Uf.yy[xC]=this.yy[xC]);Xi.setInput(et,Uf.yy),Uf.yy.lexer=Xi,Uf.yy.parser=this,typeof Xi.yylloc>"u"&&(Xi.yylloc={});var bC=Xi.yylloc;ye.push(bC);var O2e=Xi.options&&Xi.options.ranges;typeof Uf.yy.parseError=="function"?this.parseError=Uf.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function wnt(Ws){Kt.length=Kt.length-2*Ws,Cn.length=Cn.length-Ws,ye.length=ye.length-Ws}o(wnt,"popStack");function P2e(){var Ws;return Ws=lt.pop()||Xi.lex()||EF,typeof Ws!="number"&&(Ws instanceof Array&&(lt=Ws,Ws=lt.pop()),Ws=mt.symbols_[Ws]||Ws),Ws}o(P2e,"lex");for(var Wa,wC,Hf,xo,Tnt,TC,Jp={},_4,Jc,SF,D4;;){if(Hf=Kt[Kt.length-1],this.defaultActions[Hf]?xo=this.defaultActions[Hf]:((Wa===null||typeof Wa>"u")&&(Wa=P2e()),xo=Vf[Hf]&&Vf[Hf][Wa]),typeof xo>"u"||!xo.length||!xo[0]){var kC="";D4=[];for(_4 in Vf[Hf])this.terminals_[_4]&&_4>M2e&&D4.push("'"+this.terminals_[_4]+"'");Xi.showPosition?kC="Parse error on line "+(wi+1)+`:
480 +`+Xi.showPosition()+`
481 +Expecting `+D4.join(", ")+", got '"+(this.terminals_[Wa]||Wa)+"'":kC="Parse error on line "+(wi+1)+": Unexpected "+(Wa==EF?"end of input":"'"+(this.terminals_[Wa]||Wa)+"'"),this.parseError(kC,{text:Xi.match,token:this.terminals_[Wa]||Wa,line:Xi.yylineno,loc:bC,expected:D4})}if(xo[0]instanceof Array&&xo.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Hf+", token: "+Wa);switch(xo[0]){case 1:Kt.push(Wa),Cn.push(Xi.yytext),ye.push(Xi.yylloc),Kt.push(xo[1]),Wa=null,wC?(Wa=wC,wC=null):(TF=Xi.yyleng,Te=Xi.yytext,wi=Xi.yylineno,bC=Xi.yylloc,kF>0&&kF--);break;case 2:if(Jc=this.productions_[xo[1]][1],Jp.$=Cn[Cn.length-Jc],Jp._$={first_line:ye[ye.length-(Jc||1)].first_line,last_line:ye[ye.length-1].last_line,first_column:ye[ye.length-(Jc||1)].first_column,last_column:ye[ye.length-1].last_column},O2e&&(Jp._$.range=[ye[ye.length-(Jc||1)].range[0],ye[ye.length-1].range[1]]),TC=this.performAction.apply(Jp,[Te,TF,wi,Uf.yy,xo[1],Cn,ye].concat(I2e)),typeof TC<"u")return TC;Jc&&(Kt=Kt.slice(0,-1*Jc*2),Cn=Cn.slice(0,-1*Jc),ye=ye.slice(0,-1*Jc)),Kt.push(this.productions_[xo[1]][0]),Cn.push(Jp.$),ye.push(Jp._$),SF=Vf[Kt[Kt.length-2]][Kt[Kt.length-1]],Kt.push(SF);break;case 3:return!0}}return!0},"parse")},Zn=function(){var Hr={EOF:1,parseError:o(function(mt,Kt){if(this.yy.parser)this.yy.parser.parseError(mt,Kt);else throw new Error(mt)},"parseError"),setInput:o(function(et,mt){return this.yy=mt||this.yy||{},this._input=et,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var et=this._input[0];this.yytext+=et,this.yyleng++,this.offset++,this.match+=et,this.matched+=et;var mt=et.match(/(?:\r\n?|\n).*/g);return mt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),et},"input"),unput:o(function(et){var mt=et.length,Kt=et.split(/(?:\r\n?|\n)/g);this._input=et+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-mt),this.offset-=mt;var lt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Kt.length-1&&(this.yylineno-=Kt.length-1);var Cn=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Kt?(Kt.length===lt.length?this.yylloc.first_column:0)+lt[lt.length-Kt.length].length-Kt[0].length:this.yylloc.first_column-mt},this.options.ranges&&(this.yylloc.range=[Cn[0],Cn[0]+this.yyleng-mt]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
482 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(et){this.unput(this.match.slice(et))},"less"),pastInput:o(function(){var et=this.matched.substr(0,this.matched.length-this.match.length);return(et.length>20?"...":"")+et.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var et=this.match;return et.length<20&&(et+=this._input.substr(0,20-et.length)),(et.substr(0,20)+(et.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var et=this.pastInput(),mt=new Array(et.length+1).join("-");return et+this.upcomingInput()+`
483 +`+mt+"^"},"showPosition"),test_match:o(function(et,mt){var Kt,lt,Cn;if(this.options.backtrack_lexer&&(Cn={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Cn.yylloc.range=this.yylloc.range.slice(0))),lt=et[0].match(/(?:\r\n?|\n).*/g),lt&&(this.yylineno+=lt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:lt?lt[lt.length-1].length-lt[lt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+et[0].length},this.yytext+=et[0],this.match+=et[0],this.matches=et,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(et[0].length),this.matched+=et[0],Kt=this.performAction.call(this,this.yy,this,mt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Kt)return Kt;if(this._backtrack){for(var ye in Cn)this[ye]=Cn[ye];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var et,mt,Kt,lt;this._more||(this.yytext="",this.match="");for(var Cn=this._currentRules(),ye=0;ye<Cn.length;ye++)if(Kt=this._input.match(this.rules[Cn[ye]]),Kt&&(!mt||Kt[0].length>mt[0].length)){if(mt=Kt,lt=ye,this.options.backtrack_lexer){if(et=this.test_match(Kt,Cn[ye]),et!==!1)return et;if(this._backtrack){mt=!1;continue}else return!1}else if(!this.options.flex)break}return mt?(et=this.test_match(mt,Cn[lt]),et!==!1?et:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
484 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var mt=this.next();return mt||this.lex()},"lex"),begin:o(function(mt){this.conditionStack.push(mt)},"begin"),popState:o(function(){var mt=this.conditionStack.length-1;return mt>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(mt){return mt=this.conditionStack.length-1-Math.abs(mt||0),mt>=0?this.conditionStack[mt]:"INITIAL"},"topState"),pushState:o(function(mt){this.begin(mt)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(mt,Kt,lt,Cn){var ye=Cn;switch(lt){case 0:return this.begin("acc_title"),34;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),36;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.pushState("shapeData"),Kt.yytext="",40;break;case 8:return this.pushState("shapeDataStr"),40;break;case 9:return this.popState(),40;break;case 10:let Vf=/\n\s*/g;return Kt.yytext=Kt.yytext.replace(Vf,"<br/>"),40;break;case 11:return 40;case 12:this.popState();break;case 13:this.begin("callbackname");break;case 14:this.popState();break;case 15:this.popState(),this.begin("callbackargs");break;case 16:return 95;case 17:this.popState();break;case 18:return 96;case 19:return"MD_STR";case 20:this.popState();break;case 21:this.begin("md_string");break;case 22:return"STR";case 23:this.popState();break;case 24:this.pushState("string");break;case 25:return 84;case 26:return 102;case 27:return 85;case 28:return 104;case 29:return 86;case 30:return 87;case 31:return 97;case 32:this.begin("click");break;case 33:this.popState();break;case 34:return 88;case 35:return mt.lex.firstGraph()&&this.begin("dir"),12;break;case 36:return mt.lex.firstGraph()&&this.begin("dir"),12;break;case 37:return mt.lex.firstGraph()&&this.begin("dir"),12;break;case 38:return 27;case 39:return 32;case 40:return 98;case 41:return 98;case 42:return 98;case 43:return 98;case 44:return this.popState(),13;break;case 45:return this.popState(),14;break;case 46:return this.popState(),14;break;case 47:return this.popState(),14;break;case 48:return this.popState(),14;break;case 49:return this.popState(),14;break;case 50:return this.popState(),14;break;case 51:return this.popState(),14;break;case 52:return this.popState(),14;break;case 53:return this.popState(),14;break;case 54:return this.popState(),14;break;case 55:return 121;case 56:return 122;case 57:return 123;case 58:return 124;case 59:return 78;case 60:return 105;case 61:return 111;case 62:return 46;case 63:return 60;case 64:return 44;case 65:return 8;case 66:return 106;case 67:return 115;case 68:return this.popState(),77;break;case 69:return this.pushState("edgeText"),75;break;case 70:return 119;case 71:return this.popState(),77;break;case 72:return this.pushState("thickEdgeText"),75;break;case 73:return 119;case 74:return this.popState(),77;break;case 75:return this.pushState("dottedEdgeText"),75;break;case 76:return 119;case 77:return 77;case 78:return this.popState(),53;break;case 79:return"TEXT";case 80:return this.pushState("ellipseText"),52;break;case 81:return this.popState(),55;break;case 82:return this.pushState("text"),54;break;case 83:return this.popState(),57;break;case 84:return this.pushState("text"),56;break;case 85:return 58;case 86:return this.pushState("text"),67;break;case 87:return this.popState(),64;break;case 88:return this.pushState("text"),63;break;case 89:return this.popState(),49;break;case 90:return this.pushState("text"),48;break;case 91:return this.popState(),69;break;case 92:return this.popState(),71;break;case 93:return 117;case 94:return this.pushState("trapText"),68;break;case 95:return this.pushState("trapText"),70;break;case 96:return 118;case 97:return 67;case 98:return 90;case 99:return"SEP";case 100:return 89;case 101:return 115;case 102:return 111;case 103:return 44;case 104:return 109;case 105:return 114;case 106:return 116;case 107:return this.popState(),62;break;case 108:return this.pushState("text"),62;break;case 109:return this.popState(),51;break;case 110:return this.pushState("text"),50;break;case 111:return this.popState(),31;break;case 112:return this.pushState("text"),29;break;case 113:return this.popState(),66;break;case 114:return this.pushState("text"),65;break;case 115:return"TEXT";case 116:return"QUOTE";case 117:return 9;case 118:return 10;case 119:return 11}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:@\{)/,/^(?:["])/,/^(?:["])/,/^(?:[^\"]+)/,/^(?:[^}^"]+)/,/^(?:\})/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[^\s\"]+@(?=[^\{\"]))/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{shapeDataEndBracket:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},shapeDataStr:{rules:[9,10,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},shapeData:{rules:[8,11,12,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},callbackargs:{rules:[17,18,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},callbackname:{rules:[14,15,16,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},href:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},click:{rules:[21,24,33,34,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},dottedEdgeText:{rules:[21,24,74,76,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},thickEdgeText:{rules:[21,24,71,73,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},edgeText:{rules:[21,24,68,70,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},trapText:{rules:[21,24,77,80,82,84,88,90,91,92,93,94,95,108,110,112,114],inclusive:!1},ellipseText:{rules:[21,24,77,78,79,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},text:{rules:[21,24,77,80,81,82,83,84,87,88,89,90,94,95,107,108,109,110,111,112,113,114,115],inclusive:!1},vertex:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},dir:{rules:[21,24,44,45,46,47,48,49,50,51,52,53,54,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_descr_multiline:{rules:[5,6,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_descr:{rules:[3,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_title:{rules:[1,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},md_string:{rules:[19,20,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},string:{rules:[21,22,23,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},INITIAL:{rules:[0,2,4,7,13,21,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,71,72,74,75,77,80,82,84,85,86,88,90,94,95,96,97,98,99,100,101,102,103,104,105,106,108,110,112,114,116,117,118,119],inclusive:!0}}};return Hr}();Ni.lexer=Zn;function Sn(){this.yy={}}return o(Sn,"Parser"),Sn.prototype=Ni,Ni.Parser=Sn,new Sn}();xR.parser=xR;bR=xR});var Uie,Hie,Wie=N(()=>{"use strict";Vie();Uie=Object.assign({},bR);Uie.parse=t=>{let e=t.replace(/}\s*\n/g,`}
485 +`);return bR.parse(e)};Hie=Uie});var gOe,yOe,qie,Yie=N(()=>{"use strict";Ys();gOe=o((t,e)=>{let r=Kf,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return qa(n,i,a,e)},"fade"),yOe=o(t=>`.label {
486 + font-family: ${t.fontFamily};
487 + color: ${t.nodeTextColor||t.textColor};
488 + }
489 + .cluster-label text {
490 + fill: ${t.titleColor};
491 + }
492 + .cluster-label span {
493 + color: ${t.titleColor};
494 + }
495 + .cluster-label span p {
496 + background-color: transparent;
497 + }
498 +
499 + .label text,span {
500 + fill: ${t.nodeTextColor||t.textColor};
501 + color: ${t.nodeTextColor||t.textColor};
502 + }
503 +
504 + .node rect,
505 + .node circle,
506 + .node ellipse,
507 + .node polygon,
508 + .node path {
509 + fill: ${t.mainBkg};
510 + stroke: ${t.nodeBorder};
511 + stroke-width: 1px;
512 + }
513 + .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label {
514 + text-anchor: middle;
515 + }
516 + // .flowchart-label .text-outer-tspan {
517 + // text-anchor: middle;
518 + // }
519 + // .flowchart-label .text-inner-tspan {
520 + // text-anchor: start;
521 + // }
522 +
523 + .node .katex path {
524 + fill: #000;
525 + stroke: #000;
526 + stroke-width: 1px;
527 + }
528 +
529 + .rough-node .label,.node .label, .image-shape .label, .icon-shape .label {
530 + text-align: center;
531 + }
532 + .node.clickable {
533 + cursor: pointer;
534 + }
535 +
536 +
537 + .root .anchor path {
538 + fill: ${t.lineColor} !important;
539 + stroke-width: 0;
540 + stroke: ${t.lineColor};
541 + }
542 +
543 + .arrowheadPath {
544 + fill: ${t.arrowheadColor};
545 + }
546 +
547 + .edgePath .path {
548 + stroke: ${t.lineColor};
549 + stroke-width: 2.0px;
550 + }
551 +
552 + .flowchart-link {
553 + stroke: ${t.lineColor};
554 + fill: none;
555 + }
556 +
557 + .edgeLabel {
558 + background-color: ${t.edgeLabelBackground};
559 + p {
560 + background-color: ${t.edgeLabelBackground};
561 + }
562 + rect {
563 + opacity: 0.5;
564 + background-color: ${t.edgeLabelBackground};
565 + fill: ${t.edgeLabelBackground};
566 + }
567 + text-align: center;
568 + }
569 +
570 + /* For html labels only */
571 + .labelBkg {
572 + background-color: ${gOe(t.edgeLabelBackground,.5)};
573 + // background-color:
574 + }
575 +
576 + .cluster rect {
577 + fill: ${t.clusterBkg};
578 + stroke: ${t.clusterBorder};
579 + stroke-width: 1px;
580 + }
581 +
582 + .cluster text {
583 + fill: ${t.titleColor};
584 + }
585 +
586 + .cluster span {
587 + color: ${t.titleColor};
588 + }
589 + /* .cluster div {
590 + color: ${t.titleColor};
591 + } */
592 +
593 + div.mermaidTooltip {
594 + position: absolute;
595 + text-align: center;
596 + max-width: 200px;
597 + padding: 2px;
598 + font-family: ${t.fontFamily};
599 + font-size: 12px;
600 + background: ${t.tertiaryColor};
601 + border: 1px solid ${t.border2};
602 + border-radius: 2px;
603 + pointer-events: none;
604 + z-index: 100;
605 + }
606 +
607 + .flowchartTitleText {
608 + text-anchor: middle;
609 + font-size: 18px;
610 + fill: ${t.textColor};
611 + }
612 +
613 + rect.text {
614 + fill: none;
615 + stroke-width: 0;
616 + }
617 +
618 + .icon-shape, .image-shape {
619 + background-color: ${t.edgeLabelBackground};
620 + p {
621 + background-color: ${t.edgeLabelBackground};
622 + padding: 2px;
623 + }
624 + rect {
625 + opacity: 0.5;
626 + background-color: ${t.edgeLabelBackground};
627 + fill: ${t.edgeLabelBackground};
628 + }
629 + text-align: center;
630 + }
631 +`,"getStyles"),qie=yOe});var ik={};hr(ik,{diagram:()=>vOe});var vOe,ak=N(()=>{"use strict";zt();qZ();Gie();Wie();Yie();vOe={parser:Hie,get db(){return new Uw},renderer:zie,styles:qie,init:o(t=>{t.flowchart||(t.flowchart={}),t.layout&&Yy({layout:t.layout}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Yy({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}})},"init")}});var wR,Zie,Jie=N(()=>{"use strict";wR=function(){var t=o(function(J,se,ue,Z){for(ue=ue||{},Z=J.length;Z--;ue[J[Z]]=se);return ue},"o"),e=[6,8,10,22,24,26,28,33,34,35,36,37,40,43,44,50],r=[1,10],n=[1,11],i=[1,12],a=[1,13],s=[1,20],l=[1,21],u=[1,22],h=[1,23],f=[1,24],d=[1,19],p=[1,25],m=[1,26],g=[1,18],y=[1,33],v=[1,34],x=[1,35],b=[1,36],w=[1,37],C=[6,8,10,13,15,17,20,21,22,24,26,28,33,34,35,36,37,40,43,44,50,63,64,65,66,67],T=[1,42],E=[1,43],A=[1,52],S=[40,50,68,69],_=[1,63],I=[1,61],D=[1,58],k=[1,62],L=[1,64],R=[6,8,10,13,17,22,24,26,28,33,34,35,36,37,40,41,42,43,44,48,49,50,63,64,65,66,67],O=[63,64,65,66,67],M=[1,81],B=[1,80],F=[1,78],P=[1,79],z=[6,10,42,47],$=[6,10,13,41,42,47,48,49],H=[1,89],Q=[1,88],j=[1,87],ie=[19,56],ne=[1,98],le=[1,97],he=[19,56,58,60],K={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,COLON:13,role:14,STYLE_SEPARATOR:15,idList:16,BLOCK_START:17,attributes:18,BLOCK_STOP:19,SQS:20,SQE:21,title:22,title_value:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,direction:29,classDefStatement:30,classStatement:31,styleStatement:32,direction_tb:33,direction_bt:34,direction_rl:35,direction_lr:36,CLASSDEF:37,stylesOpt:38,separator:39,UNICODE_TEXT:40,STYLE_TEXT:41,COMMA:42,CLASS:43,STYLE:44,style:45,styleComponent:46,SEMI:47,NUM:48,BRKT:49,ENTITY_NAME:50,attribute:51,attributeType:52,attributeName:53,attributeKeyTypeList:54,attributeComment:55,ATTRIBUTE_WORD:56,attributeKeyType:57,",":58,ATTRIBUTE_KEY:59,COMMENT:60,cardinality:61,relType:62,ZERO_OR_ONE:63,ZERO_OR_MORE:64,ONE_OR_MORE:65,ONLY_ONE:66,MD_PARENT:67,NON_IDENTIFYING:68,IDENTIFYING:69,WORD:70,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:"COLON",15:"STYLE_SEPARATOR",17:"BLOCK_START",19:"BLOCK_STOP",20:"SQS",21:"SQE",22:"title",23:"title_value",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"direction_tb",34:"direction_bt",35:"direction_rl",36:"direction_lr",37:"CLASSDEF",40:"UNICODE_TEXT",41:"STYLE_TEXT",42:"COMMA",43:"CLASS",44:"STYLE",47:"SEMI",48:"NUM",49:"BRKT",50:"ENTITY_NAME",56:"ATTRIBUTE_WORD",58:",",59:"ATTRIBUTE_KEY",60:"COMMENT",63:"ZERO_OR_ONE",64:"ZERO_OR_MORE",65:"ONE_OR_MORE",66:"ONLY_ONE",67:"MD_PARENT",68:"NON_IDENTIFYING",69:"IDENTIFYING",70:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,9],[9,7],[9,7],[9,4],[9,6],[9,3],[9,5],[9,1],[9,3],[9,7],[9,9],[9,6],[9,8],[9,4],[9,6],[9,2],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[9,1],[29,1],[29,1],[29,1],[29,1],[30,4],[16,1],[16,1],[16,3],[16,3],[31,3],[32,4],[38,1],[38,3],[45,1],[45,2],[39,1],[39,1],[39,1],[46,1],[46,1],[46,1],[46,1],[11,1],[11,1],[18,1],[18,2],[51,2],[51,3],[51,3],[51,4],[52,1],[53,1],[54,1],[54,3],[57,1],[55,1],[12,3],[61,1],[61,1],[61,1],[61,1],[61,1],[62,1],[62,1],[14,1],[14,1],[14,1]],performAction:o(function(se,ue,Z,Se,ce,ae,Oe){var ge=ae.length-1;switch(ce){case 1:break;case 2:this.$=[];break;case 3:ae[ge-1].push(ae[ge]),this.$=ae[ge-1];break;case 4:case 5:this.$=ae[ge];break;case 6:case 7:this.$=[];break;case 8:Se.addEntity(ae[ge-4]),Se.addEntity(ae[ge-2]),Se.addRelationship(ae[ge-4],ae[ge],ae[ge-2],ae[ge-3]);break;case 9:Se.addEntity(ae[ge-8]),Se.addEntity(ae[ge-4]),Se.addRelationship(ae[ge-8],ae[ge],ae[ge-4],ae[ge-5]),Se.setClass([ae[ge-8]],ae[ge-6]),Se.setClass([ae[ge-4]],ae[ge-2]);break;case 10:Se.addEntity(ae[ge-6]),Se.addEntity(ae[ge-2]),Se.addRelationship(ae[ge-6],ae[ge],ae[ge-2],ae[ge-3]),Se.setClass([ae[ge-6]],ae[ge-4]);break;case 11:Se.addEntity(ae[ge-6]),Se.addEntity(ae[ge-4]),Se.addRelationship(ae[ge-6],ae[ge],ae[ge-4],ae[ge-5]),Se.setClass([ae[ge-4]],ae[ge-2]);break;case 12:Se.addEntity(ae[ge-3]),Se.addAttributes(ae[ge-3],ae[ge-1]);break;case 13:Se.addEntity(ae[ge-5]),Se.addAttributes(ae[ge-5],ae[ge-1]),Se.setClass([ae[ge-5]],ae[ge-3]);break;case 14:Se.addEntity(ae[ge-2]);break;case 15:Se.addEntity(ae[ge-4]),Se.setClass([ae[ge-4]],ae[ge-2]);break;case 16:Se.addEntity(ae[ge]);break;case 17:Se.addEntity(ae[ge-2]),Se.setClass([ae[ge-2]],ae[ge]);break;case 18:Se.addEntity(ae[ge-6],ae[ge-4]),Se.addAttributes(ae[ge-6],ae[ge-1]);break;case 19:Se.addEntity(ae[ge-8],ae[ge-6]),Se.addAttributes(ae[ge-8],ae[ge-1]),Se.setClass([ae[ge-8]],ae[ge-3]);break;case 20:Se.addEntity(ae[ge-5],ae[ge-3]);break;case 21:Se.addEntity(ae[ge-7],ae[ge-5]),Se.setClass([ae[ge-7]],ae[ge-2]);break;case 22:Se.addEntity(ae[ge-3],ae[ge-1]);break;case 23:Se.addEntity(ae[ge-5],ae[ge-3]),Se.setClass([ae[ge-5]],ae[ge]);break;case 24:case 25:this.$=ae[ge].trim(),Se.setAccTitle(this.$);break;case 26:case 27:this.$=ae[ge].trim(),Se.setAccDescription(this.$);break;case 32:Se.setDirection("TB");break;case 33:Se.setDirection("BT");break;case 34:Se.setDirection("RL");break;case 35:Se.setDirection("LR");break;case 36:this.$=ae[ge-3],Se.addClass(ae[ge-2],ae[ge-1]);break;case 37:case 38:case 56:case 64:this.$=[ae[ge]];break;case 39:case 40:this.$=ae[ge-2].concat([ae[ge]]);break;case 41:this.$=ae[ge-2],Se.setClass(ae[ge-1],ae[ge]);break;case 42:this.$=ae[ge-3],Se.addCssStyles(ae[ge-2],ae[ge-1]);break;case 43:this.$=[ae[ge]];break;case 44:ae[ge-2].push(ae[ge]),this.$=ae[ge-2];break;case 46:this.$=ae[ge-1]+ae[ge];break;case 54:case 76:case 77:this.$=ae[ge].replace(/"/g,"");break;case 55:case 78:this.$=ae[ge];break;case 57:ae[ge].push(ae[ge-1]),this.$=ae[ge];break;case 58:this.$={type:ae[ge-1],name:ae[ge]};break;case 59:this.$={type:ae[ge-2],name:ae[ge-1],keys:ae[ge]};break;case 60:this.$={type:ae[ge-2],name:ae[ge-1],comment:ae[ge]};break;case 61:this.$={type:ae[ge-3],name:ae[ge-2],keys:ae[ge-1],comment:ae[ge]};break;case 62:case 63:case 66:this.$=ae[ge];break;case 65:ae[ge-2].push(ae[ge]),this.$=ae[ge-2];break;case 67:this.$=ae[ge].replace(/"/g,"");break;case 68:this.$={cardA:ae[ge],relType:ae[ge-1],cardB:ae[ge-2]};break;case 69:this.$=Se.Cardinality.ZERO_OR_ONE;break;case 70:this.$=Se.Cardinality.ZERO_OR_MORE;break;case 71:this.$=Se.Cardinality.ONE_OR_MORE;break;case 72:this.$=Se.Cardinality.ONLY_ONE;break;case 73:this.$=Se.Cardinality.MD_PARENT;break;case 74:this.$=Se.Identification.NON_IDENTIFYING;break;case 75:this.$=Se.Identification.IDENTIFYING;break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,22:r,24:n,26:i,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:f,40:d,43:p,44:m,50:g},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:27,11:9,22:r,24:n,26:i,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:f,40:d,43:p,44:m,50:g},t(e,[2,5]),t(e,[2,6]),t(e,[2,16],{12:28,61:32,15:[1,29],17:[1,30],20:[1,31],63:y,64:v,65:x,66:b,67:w}),{23:[1,38]},{25:[1,39]},{27:[1,40]},t(e,[2,27]),t(e,[2,28]),t(e,[2,29]),t(e,[2,30]),t(e,[2,31]),t(C,[2,54]),t(C,[2,55]),t(e,[2,32]),t(e,[2,33]),t(e,[2,34]),t(e,[2,35]),{16:41,40:T,41:E},{16:44,40:T,41:E},{16:45,40:T,41:E},t(e,[2,4]),{11:46,40:d,50:g},{16:47,40:T,41:E},{18:48,19:[1,49],51:50,52:51,56:A},{11:53,40:d,50:g},{62:54,68:[1,55],69:[1,56]},t(S,[2,69]),t(S,[2,70]),t(S,[2,71]),t(S,[2,72]),t(S,[2,73]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),{13:_,38:57,41:I,42:D,45:59,46:60,48:k,49:L},t(R,[2,37]),t(R,[2,38]),{16:65,40:T,41:E,42:D},{13:_,38:66,41:I,42:D,45:59,46:60,48:k,49:L},{13:[1,67],15:[1,68]},t(e,[2,17],{61:32,12:69,17:[1,70],42:D,63:y,64:v,65:x,66:b,67:w}),{19:[1,71]},t(e,[2,14]),{18:72,19:[2,56],51:50,52:51,56:A},{53:73,56:[1,74]},{56:[2,62]},{21:[1,75]},{61:76,63:y,64:v,65:x,66:b,67:w},t(O,[2,74]),t(O,[2,75]),{6:M,10:B,39:77,42:F,47:P},{40:[1,82],41:[1,83]},t(z,[2,43],{46:84,13:_,41:I,48:k,49:L}),t($,[2,45]),t($,[2,50]),t($,[2,51]),t($,[2,52]),t($,[2,53]),t(e,[2,41],{42:D}),{6:M,10:B,39:85,42:F,47:P},{14:86,40:H,50:Q,70:j},{16:90,40:T,41:E},{11:91,40:d,50:g},{18:92,19:[1,93],51:50,52:51,56:A},t(e,[2,12]),{19:[2,57]},t(ie,[2,58],{54:94,55:95,57:96,59:ne,60:le}),t([19,56,59,60],[2,63]),t(e,[2,22],{15:[1,100],17:[1,99]}),t([40,50],[2,68]),t(e,[2,36]),{13:_,41:I,45:101,46:60,48:k,49:L},t(e,[2,47]),t(e,[2,48]),t(e,[2,49]),t(R,[2,39]),t(R,[2,40]),t($,[2,46]),t(e,[2,42]),t(e,[2,8]),t(e,[2,76]),t(e,[2,77]),t(e,[2,78]),{13:[1,102],42:D},{13:[1,104],15:[1,103]},{19:[1,105]},t(e,[2,15]),t(ie,[2,59],{55:106,58:[1,107],60:le}),t(ie,[2,60]),t(he,[2,64]),t(ie,[2,67]),t(he,[2,66]),{18:108,19:[1,109],51:50,52:51,56:A},{16:110,40:T,41:E},t(z,[2,44],{46:84,13:_,41:I,48:k,49:L}),{14:111,40:H,50:Q,70:j},{16:112,40:T,41:E},{14:113,40:H,50:Q,70:j},t(e,[2,13]),t(ie,[2,61]),{57:114,59:ne},{19:[1,115]},t(e,[2,20]),t(e,[2,23],{17:[1,116],42:D}),t(e,[2,11]),{13:[1,117],42:D},t(e,[2,10]),t(he,[2,65]),t(e,[2,18]),{18:118,19:[1,119],51:50,52:51,56:A},{14:120,40:H,50:Q,70:j},{19:[1,121]},t(e,[2,21]),t(e,[2,9]),t(e,[2,19])],defaultActions:{52:[2,62],72:[2,57]},parseError:o(function(se,ue){if(ue.recoverable)this.trace(se);else{var Z=new Error(se);throw Z.hash=ue,Z}},"parseError"),parse:o(function(se){var ue=this,Z=[0],Se=[],ce=[null],ae=[],Oe=this.table,ge="",ze=0,He=0,$e=0,Re=2,Ie=1,be=ae.slice.call(arguments,1),W=Object.create(this.lexer),de={yy:{}};for(var re in this.yy)Object.prototype.hasOwnProperty.call(this.yy,re)&&(de.yy[re]=this.yy[re]);W.setInput(se,de.yy),de.yy.lexer=W,de.yy.parser=this,typeof W.yylloc>"u"&&(W.yylloc={});var oe=W.yylloc;ae.push(oe);var V=W.options&&W.options.ranges;typeof de.yy.parseError=="function"?this.parseError=de.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function xe(ct){Z.length=Z.length-2*ct,ce.length=ce.length-ct,ae.length=ae.length-ct}o(xe,"popStack");function q(){var ct;return ct=Se.pop()||W.lex()||Ie,typeof ct!="number"&&(ct instanceof Array&&(Se=ct,ct=Se.pop()),ct=ue.symbols_[ct]||ct),ct}o(q,"lex");for(var pe,ve,Pe,_e,we,Ve,De={},qe,at,Rt,st;;){if(Pe=Z[Z.length-1],this.defaultActions[Pe]?_e=this.defaultActions[Pe]:((pe===null||typeof pe>"u")&&(pe=q()),_e=Oe[Pe]&&Oe[Pe][pe]),typeof _e>"u"||!_e.length||!_e[0]){var Ue="";st=[];for(qe in Oe[Pe])this.terminals_[qe]&&qe>Re&&st.push("'"+this.terminals_[qe]+"'");W.showPosition?Ue="Parse error on line "+(ze+1)+`:
632 +`+W.showPosition()+`
633 +Expecting `+st.join(", ")+", got '"+(this.terminals_[pe]||pe)+"'":Ue="Parse error on line "+(ze+1)+": Unexpected "+(pe==Ie?"end of input":"'"+(this.terminals_[pe]||pe)+"'"),this.parseError(Ue,{text:W.match,token:this.terminals_[pe]||pe,line:W.yylineno,loc:oe,expected:st})}if(_e[0]instanceof Array&&_e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Pe+", token: "+pe);switch(_e[0]){case 1:Z.push(pe),ce.push(W.yytext),ae.push(W.yylloc),Z.push(_e[1]),pe=null,ve?(pe=ve,ve=null):(He=W.yyleng,ge=W.yytext,ze=W.yylineno,oe=W.yylloc,$e>0&&$e--);break;case 2:if(at=this.productions_[_e[1]][1],De.$=ce[ce.length-at],De._$={first_line:ae[ae.length-(at||1)].first_line,last_line:ae[ae.length-1].last_line,first_column:ae[ae.length-(at||1)].first_column,last_column:ae[ae.length-1].last_column},V&&(De._$.range=[ae[ae.length-(at||1)].range[0],ae[ae.length-1].range[1]]),Ve=this.performAction.apply(De,[ge,He,ze,de.yy,_e[1],ce,ae].concat(be)),typeof Ve<"u")return Ve;at&&(Z=Z.slice(0,-1*at*2),ce=ce.slice(0,-1*at),ae=ae.slice(0,-1*at)),Z.push(this.productions_[_e[1]][0]),ce.push(De.$),ae.push(De._$),Rt=Oe[Z[Z.length-2]][Z[Z.length-1]],Z.push(Rt);break;case 3:return!0}}return!0},"parse")},X=function(){var J={EOF:1,parseError:o(function(ue,Z){if(this.yy.parser)this.yy.parser.parseError(ue,Z);else throw new Error(ue)},"parseError"),setInput:o(function(se,ue){return this.yy=ue||this.yy||{},this._input=se,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var se=this._input[0];this.yytext+=se,this.yyleng++,this.offset++,this.match+=se,this.matched+=se;var ue=se.match(/(?:\r\n?|\n).*/g);return ue?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),se},"input"),unput:o(function(se){var ue=se.length,Z=se.split(/(?:\r\n?|\n)/g);this._input=se+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ue),this.offset-=ue;var Se=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Z.length-1&&(this.yylineno-=Z.length-1);var ce=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Z?(Z.length===Se.length?this.yylloc.first_column:0)+Se[Se.length-Z.length].length-Z[0].length:this.yylloc.first_column-ue},this.options.ranges&&(this.yylloc.range=[ce[0],ce[0]+this.yyleng-ue]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
634 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(se){this.unput(this.match.slice(se))},"less"),pastInput:o(function(){var se=this.matched.substr(0,this.matched.length-this.match.length);return(se.length>20?"...":"")+se.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var se=this.match;return se.length<20&&(se+=this._input.substr(0,20-se.length)),(se.substr(0,20)+(se.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var se=this.pastInput(),ue=new Array(se.length+1).join("-");return se+this.upcomingInput()+`
635 +`+ue+"^"},"showPosition"),test_match:o(function(se,ue){var Z,Se,ce;if(this.options.backtrack_lexer&&(ce={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ce.yylloc.range=this.yylloc.range.slice(0))),Se=se[0].match(/(?:\r\n?|\n).*/g),Se&&(this.yylineno+=Se.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Se?Se[Se.length-1].length-Se[Se.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+se[0].length},this.yytext+=se[0],this.match+=se[0],this.matches=se,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(se[0].length),this.matched+=se[0],Z=this.performAction.call(this,this.yy,this,ue,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Z)return Z;if(this._backtrack){for(var ae in ce)this[ae]=ce[ae];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var se,ue,Z,Se;this._more||(this.yytext="",this.match="");for(var ce=this._currentRules(),ae=0;ae<ce.length;ae++)if(Z=this._input.match(this.rules[ce[ae]]),Z&&(!ue||Z[0].length>ue[0].length)){if(ue=Z,Se=ae,this.options.backtrack_lexer){if(se=this.test_match(Z,ce[ae]),se!==!1)return se;if(this._backtrack){ue=!1;continue}else return!1}else if(!this.options.flex)break}return ue?(se=this.test_match(ue,ce[Se]),se!==!1?se:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
636 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var ue=this.next();return ue||this.lex()},"lex"),begin:o(function(ue){this.conditionStack.push(ue)},"begin"),popState:o(function(){var ue=this.conditionStack.length-1;return ue>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(ue){return ue=this.conditionStack.length-1-Math.abs(ue||0),ue>=0?this.conditionStack[ue]:"INITIAL"},"topState"),pushState:o(function(ue){this.begin(ue)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(ue,Z,Se,ce){var ae=ce;switch(Se){case 0:return this.begin("acc_title"),24;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),26;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 33;case 8:return 34;case 9:return 35;case 10:return 36;case 11:return 10;case 12:break;case 13:return 8;case 14:return 50;case 15:return 70;case 16:return 4;case 17:return this.begin("block"),17;break;case 18:return 49;case 19:return 49;case 20:return 42;case 21:return 15;case 22:return 13;case 23:break;case 24:return 59;case 25:return 56;case 26:return 56;case 27:return 60;case 28:break;case 29:return this.popState(),19;break;case 30:return Z.yytext[0];case 31:return 20;case 32:return 21;case 33:return this.begin("style"),44;break;case 34:return this.popState(),10;break;case 35:break;case 36:return 13;case 37:return 42;case 38:return 49;case 39:return this.begin("style"),37;break;case 40:return 43;case 41:return 63;case 42:return 65;case 43:return 65;case 44:return 65;case 45:return 63;case 46:return 63;case 47:return 64;case 48:return 64;case 49:return 64;case 50:return 64;case 51:return 64;case 52:return 65;case 53:return 64;case 54:return 65;case 55:return 66;case 56:return 66;case 57:return 66;case 58:return 66;case 59:return 63;case 60:return 64;case 61:return 65;case 62:return 67;case 63:return 68;case 64:return 69;case 65:return 69;case 66:return 68;case 67:return 68;case 68:return 68;case 69:return 41;case 70:return 47;case 71:return 40;case 72:return 48;case 73:return Z.yytext[0];case 74:return 6}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:#)/i,/^(?:#)/i,/^(?:,)/i,/^(?::::)/i,/^(?::)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:([^\s]*)[~].*[~]([^\s]*))/i,/^(?:([\*A-Za-z_\u00C0-\uFFFF][A-Za-z0-9\-\_\[\]\(\)\u00C0-\uFFFF\*]*))/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:style\b)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?::)/i,/^(?:,)/i,/^(?:#)/i,/^(?:classDef\b)/i,/^(?:class\b)/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:([^\x00-\x7F]|\w|-|\*)+)/i,/^(?:;)/i,/^(?:([^\x00-\x7F]|\w|-|\*)+)/i,/^(?:[0-9])/i,/^(?:.)/i,/^(?:$)/i],conditions:{style:{rules:[34,35,36,37,38,69,70],inclusive:!1},acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[23,24,25,26,27,28,29,30],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,31,32,33,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,71,72,73,74],inclusive:!0}}};return J}();K.lexer=X;function te(){this.yy={}}return o(te,"Parser"),te.prototype=K,K.Parser=te,new te}();wR.parser=wR;Zie=wR});var sk,eae=N(()=>{"use strict";vt();zt();mi();ir();sk=class{constructor(){this.entities=new Map;this.relationships=[];this.classes=new Map;this.direction="TB";this.Cardinality={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"};this.Identification={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"};this.setAccTitle=Lr;this.getAccTitle=Rr;this.setAccDescription=Nr;this.getAccDescription=Mr;this.setDiagramTitle=$r;this.getDiagramTitle=Ir;this.getConfig=o(()=>me().er,"getConfig");this.clear(),this.addEntity=this.addEntity.bind(this),this.addAttributes=this.addAttributes.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setDirection=this.setDirection.bind(this),this.addCssStyles=this.addCssStyles.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"ErDB")}addEntity(e,r=""){return this.entities.has(e)?!this.entities.get(e)?.alias&&r&&(this.entities.get(e).alias=r,Y.info(`Add alias '${r}' to entity '${e}'`)):(this.entities.set(e,{id:`entity-${e}-${this.entities.size}`,label:e,attributes:[],alias:r,shape:"erBox",look:me().look??"default",cssClasses:"default",cssStyles:[]}),Y.info("Added new entity :",e)),this.entities.get(e)}getEntity(e){return this.entities.get(e)}getEntities(){return this.entities}getClasses(){return this.classes}addAttributes(e,r){let n=this.addEntity(e),i;for(i=r.length-1;i>=0;i--)r[i].keys||(r[i].keys=[]),r[i].comment||(r[i].comment=""),n.attributes.push(r[i]),Y.debug("Added attribute ",r[i].name)}addRelationship(e,r,n,i){let a=this.entities.get(e),s=this.entities.get(n);if(!a||!s)return;let l={entityA:a.id,roleA:r,entityB:s.id,relSpec:i};this.relationships.push(l),Y.debug("Added new relationship :",l)}getRelationships(){return this.relationships}getDirection(){return this.direction}setDirection(e){this.direction=e}getCompiledStyles(e){let r=[];for(let n of e){let i=this.classes.get(n);i?.styles&&(r=[...r,...i.styles??[]].map(a=>a.trim())),i?.textStyles&&(r=[...r,...i.textStyles??[]].map(a=>a.trim()))}return r}addCssStyles(e,r){for(let n of e){let i=this.entities.get(n);if(!r||!i)return;for(let a of r)i.cssStyles.push(a)}}addClass(e,r){e.forEach(n=>{let i=this.classes.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.classes.set(n,i)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)})})}setClass(e,r){for(let n of e){let i=this.entities.get(n);if(i)for(let a of r)i.cssClasses+=" "+a}}clear(){this.entities=new Map,this.classes=new Map,this.relationships=[],Ar()}getData(){let e=[],r=[],n=me();for(let a of this.entities.keys()){let s=this.entities.get(a);s&&(s.cssCompiledStyles=this.getCompiledStyles(s.cssClasses.split(" ")),e.push(s))}let i=0;for(let a of this.relationships){let s={id:$h(a.entityA,a.entityB,{prefix:"id",counter:i++}),type:"normal",curve:"basis",start:a.entityA,end:a.entityB,label:a.roleA,labelpos:"c",thickness:"normal",classes:"relationshipLine",arrowTypeStart:a.relSpec.cardB.toLowerCase(),arrowTypeEnd:a.relSpec.cardA.toLowerCase(),pattern:a.relSpec.relType=="IDENTIFYING"?"solid":"dashed",look:n.look};r.push(s)}return{nodes:e,edges:r,other:{},config:n,direction:"TB"}}}});var TR={};hr(TR,{draw:()=>SOe});var SOe,tae=N(()=>{"use strict";zt();vt();gm();Yd();$m();ir();dr();SOe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing er diagram (unified)",e);let{securityLevel:i,er:a,layout:s}=me(),l=n.db.getData(),u=yc(e,i);l.type=n.type,l.layoutAlgorithm=nf(s),l.config.flowchart.nodeSpacing=a?.nodeSpacing||140,l.config.flowchart.rankSpacing=a?.rankSpacing||80,l.direction=n.db.getDirection(),l.markers=["only_one","zero_or_one","one_or_more","zero_or_more"],l.diagramId=e,await Cc(l,u),l.layoutAlgorithm==="elk"&&u.select(".edges").lower();let h=u.selectAll('[id*="-background"]');Array.from(h).length>0&&h.each(function(){let d=Ge(this),m=d.attr("id").replace("-background",""),g=u.select(`#${CSS.escape(m)}`);if(!g.empty()){let y=g.attr("transform");d.attr("transform",y)}});let f=8;Gt.insertTitle(u,"erDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ac(u,f,"erDiagram",a?.useMaxWidth??!0)},"draw")});var COe,AOe,rae,nae=N(()=>{"use strict";Ys();COe=o((t,e)=>{let r=Kf,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return qa(n,i,a,e)},"fade"),AOe=o(t=>`
637 + .entityBox {
638 + fill: ${t.mainBkg};
639 + stroke: ${t.nodeBorder};
640 + }
641 +
642 + .relationshipLabelBox {
643 + fill: ${t.tertiaryColor};
644 + opacity: 0.7;
645 + background-color: ${t.tertiaryColor};
646 + rect {
647 + opacity: 0.5;
648 + }
649 + }
650 +
651 + .labelBkg {
652 + background-color: ${COe(t.tertiaryColor,.5)};
653 + }
654 +
655 + .edgeLabel .label {
656 + fill: ${t.nodeBorder};
657 + font-size: 14px;
658 + }
659 +
660 + .label {
661 + font-family: ${t.fontFamily};
662 + color: ${t.nodeTextColor||t.textColor};
663 + }
664 +
665 + .edge-pattern-dashed {
666 + stroke-dasharray: 8,8;
667 + }
668 +
669 + .node rect,
670 + .node circle,
671 + .node ellipse,
672 + .node polygon
673 + {
674 + fill: ${t.mainBkg};
675 + stroke: ${t.nodeBorder};
676 + stroke-width: 1px;
677 + }
678 +
679 + .relationshipLine {
680 + stroke: ${t.lineColor};
681 + stroke-width: 1;
682 + fill: none;
683 + }
684 +
685 + .marker {
686 + fill: none !important;
687 + stroke: ${t.lineColor} !important;
688 + stroke-width: 1;
689 + }
690 +`,"getStyles"),rae=AOe});var iae={};hr(iae,{diagram:()=>_Oe});var _Oe,aae=N(()=>{"use strict";Jie();eae();tae();nae();_Oe={parser:Zie,get db(){return new sk},renderer:TR,styles:rae}});function ii(t){return typeof t=="object"&&t!==null&&typeof t.$type=="string"}function va(t){return typeof t=="object"&&t!==null&&typeof t.$refText=="string"}function kR(t){return typeof t=="object"&&t!==null&&typeof t.name=="string"&&typeof t.type=="string"&&typeof t.path=="string"}function jd(t){return typeof t=="object"&&t!==null&&ii(t.container)&&va(t.reference)&&typeof t.message=="string"}function Ll(t){return typeof t=="object"&&t!==null&&Array.isArray(t.content)}function af(t){return typeof t=="object"&&t!==null&&typeof t.tokenType=="object"}function M2(t){return Ll(t)&&typeof t.fullText=="string"}var Xd,Rl=N(()=>{"use strict";o(ii,"isAstNode");o(va,"isReference");o(kR,"isAstNodeDescription");o(jd,"isLinkingError");Xd=class{static{o(this,"AbstractAstReflection")}constructor(){this.subtypes={},this.allSubtypes={}}isInstance(e,r){return ii(e)&&this.isSubtype(e.$type,r)}isSubtype(e,r){if(e===r)return!0;let n=this.subtypes[e];n||(n=this.subtypes[e]={});let i=n[r];if(i!==void 0)return i;{let a=this.computeIsSubtype(e,r);return n[r]=a,a}}getAllSubTypes(e){let r=this.allSubtypes[e];if(r)return r;{let n=this.getAllTypes(),i=[];for(let a of n)this.isSubtype(a,e)&&i.push(a);return this.allSubtypes[e]=i,i}}};o(Ll,"isCompositeCstNode");o(af,"isLeafCstNode");o(M2,"isRootCstNode")});function NOe(t){return typeof t=="string"?t:typeof t>"u"?"undefined":typeof t.toString=="function"?t.toString():Object.prototype.toString.call(t)}function ok(t){return!!t&&typeof t[Symbol.iterator]=="function"}function en(...t){if(t.length===1){let e=t[0];if(e instanceof ao)return e;if(ok(e))return new ao(()=>e[Symbol.iterator](),r=>r.next());if(typeof e.length=="number")return new ao(()=>({index:0}),r=>r.index<e.length?{done:!1,value:e[r.index++]}:Ia)}return t.length>1?new ao(()=>({collIndex:0,arrIndex:0}),e=>{do{if(e.iterator){let r=e.iterator.next();if(!r.done)return r;e.iterator=void 0}if(e.array){if(e.arrIndex<e.array.length)return{done:!1,value:e.array[e.arrIndex++]};e.array=void 0,e.arrIndex=0}if(e.collIndex<t.length){let r=t[e.collIndex++];ok(r)?e.iterator=r[Symbol.iterator]():r&&typeof r.length=="number"&&(e.array=r)}}while(e.iterator||e.array||e.collIndex<t.length);return Ia}):I2}var ao,I2,Ia,_c,zm,Ps=N(()=>{"use strict";ao=class t{static{o(this,"StreamImpl")}constructor(e,r){this.startFn=e,this.nextFn=r}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),[Symbol.iterator]:()=>e};return e}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){let e=this.iterator(),r=0,n=e.next();for(;!n.done;)r++,n=e.next();return r}toArray(){let e=[],r=this.iterator(),n;do n=r.next(),n.value!==void 0&&e.push(n.value);while(!n.done);return e}toSet(){return new Set(this)}toMap(e,r){let n=this.map(i=>[e?e(i):i,r?r(i):i]);return new Map(n)}toString(){return this.join()}concat(e){return new t(()=>({first:this.startFn(),firstDone:!1,iterator:e[Symbol.iterator]()}),r=>{let n;if(!r.firstDone){do if(n=this.nextFn(r.first),!n.done)return n;while(!n.done);r.firstDone=!0}do if(n=r.iterator.next(),!n.done)return n;while(!n.done);return Ia})}join(e=","){let r=this.iterator(),n="",i,a=!1;do i=r.next(),i.done||(a&&(n+=e),n+=NOe(i.value)),a=!0;while(!i.done);return n}indexOf(e,r=0){let n=this.iterator(),i=0,a=n.next();for(;!a.done;){if(i>=r&&a.value===e)return i;a=n.next(),i++}return-1}every(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(!e(n.value))return!1;n=r.next()}return!0}some(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return!0;n=r.next()}return!1}forEach(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;)e(i.value,n),i=r.next(),n++}map(e){return new t(this.startFn,r=>{let{done:n,value:i}=this.nextFn(r);return n?Ia:{done:!1,value:e(i)}})}filter(e){return new t(this.startFn,r=>{let n;do if(n=this.nextFn(r),!n.done&&e(n.value))return n;while(!n.done);return Ia})}nonNullable(){return this.filter(e=>e!=null)}reduce(e,r){let n=this.iterator(),i=r,a=n.next();for(;!a.done;)i===void 0?i=a.value:i=e(i,a.value),a=n.next();return i}reduceRight(e,r){return this.recursiveReduce(this.iterator(),e,r)}recursiveReduce(e,r,n){let i=e.next();if(i.done)return n;let a=this.recursiveReduce(e,r,n);return a===void 0?i.value:r(a,i.value)}find(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return n.value;n=r.next()}}findIndex(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;){if(e(i.value))return n;i=r.next(),n++}return-1}includes(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(n.value===e)return!0;n=r.next()}return!1}flatMap(e){return new t(()=>({this:this.startFn()}),r=>{do{if(r.iterator){let a=r.iterator.next();if(a.done)r.iterator=void 0;else return a}let{done:n,value:i}=this.nextFn(r.this);if(!n){let a=e(i);if(ok(a))r.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}}while(r.iterator);return Ia})}flat(e){if(e===void 0&&(e=1),e<=0)return this;let r=e>1?this.flat(e-1):this;return new t(()=>({this:r.startFn()}),n=>{do{if(n.iterator){let s=n.iterator.next();if(s.done)n.iterator=void 0;else return s}let{done:i,value:a}=r.nextFn(n.this);if(!i)if(ok(a))n.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}while(n.iterator);return Ia})}head(){let r=this.iterator().next();if(!r.done)return r.value}tail(e=1){return new t(()=>{let r=this.startFn();for(let n=0;n<e;n++)if(this.nextFn(r).done)return r;return r},this.nextFn)}limit(e){return new t(()=>({size:0,state:this.startFn()}),r=>(r.size++,r.size>e?Ia:this.nextFn(r.state)))}distinct(e){return new t(()=>({set:new Set,internalState:this.startFn()}),r=>{let n;do if(n=this.nextFn(r.internalState),!n.done){let i=e?e(n.value):n.value;if(!r.set.has(i))return r.set.add(i),n}while(!n.done);return Ia})}exclude(e,r){let n=new Set;for(let i of e){let a=r?r(i):i;n.add(a)}return this.filter(i=>{let a=r?r(i):i;return!n.has(a)})}};o(NOe,"toString");o(ok,"isIterable");I2=new ao(()=>{},()=>Ia),Ia=Object.freeze({done:!0,value:void 0});o(en,"stream");_c=class extends ao{static{o(this,"TreeStreamImpl")}constructor(e,r,n){super(()=>({iterators:n?.includeRoot?[[e][Symbol.iterator]()]:[r(e)[Symbol.iterator]()],pruned:!1}),i=>{for(i.pruned&&(i.iterators.pop(),i.pruned=!1);i.iterators.length>0;){let s=i.iterators[i.iterators.length-1].next();if(s.done)i.iterators.pop();else return i.iterators.push(r(s.value)[Symbol.iterator]()),s}return Ia})}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),prune:o(()=>{e.state.pruned=!0},"prune"),[Symbol.iterator]:()=>e};return e}};(function(t){function e(a){return a.reduce((s,l)=>s+l,0)}o(e,"sum"),t.sum=e;function r(a){return a.reduce((s,l)=>s*l,0)}o(r,"product"),t.product=r;function n(a){return a.reduce((s,l)=>Math.min(s,l))}o(n,"min"),t.min=n;function i(a){return a.reduce((s,l)=>Math.max(s,l))}o(i,"max"),t.max=i})(zm||(zm={}))});var ck={};hr(ck,{DefaultNameRegexp:()=>lk,RangeComparison:()=>Dc,compareRange:()=>cae,findCommentNode:()=>AR,findDeclarationNodeAtOffset:()=>IOe,findLeafNodeAtOffset:()=>_R,findLeafNodeBeforeOffset:()=>uae,flattenCst:()=>MOe,getInteriorNodes:()=>BOe,getNextNode:()=>OOe,getPreviousNode:()=>fae,getStartlineNode:()=>POe,inRange:()=>CR,isChildNode:()=>SR,isCommentNode:()=>ER,streamCst:()=>Kd,toDocumentSegment:()=>Qd,tokenToRange:()=>Gm});function Kd(t){return new _c(t,e=>Ll(e)?e.content:[],{includeRoot:!0})}function MOe(t){return Kd(t).filter(af)}function SR(t,e){for(;t.container;)if(t=t.container,t===e)return!0;return!1}function Gm(t){return{start:{character:t.startColumn-1,line:t.startLine-1},end:{character:t.endColumn,line:t.endLine-1}}}function Qd(t){if(!t)return;let{offset:e,end:r,range:n}=t;return{range:n,offset:e,end:r,length:r-e}}function cae(t,e){if(t.end.line<e.start.line||t.end.line===e.start.line&&t.end.character<=e.start.character)return Dc.Before;if(t.start.line>e.end.line||t.start.line===e.end.line&&t.start.character>=e.end.character)return Dc.After;let r=t.start.line>e.start.line||t.start.line===e.start.line&&t.start.character>=e.start.character,n=t.end.line<e.end.line||t.end.line===e.end.line&&t.end.character<=e.end.character;return r&&n?Dc.Inside:r?Dc.OverlapBack:n?Dc.OverlapFront:Dc.Outside}function CR(t,e){return cae(t,e)>Dc.After}function IOe(t,e,r=lk){if(t){if(e>0){let n=e-t.offset,i=t.text.charAt(n);r.test(i)||e--}return _R(t,e)}}function AR(t,e){if(t){let r=fae(t,!0);if(r&&ER(r,e))return r;if(M2(t)){let n=t.content.findIndex(i=>!i.hidden);for(let i=n-1;i>=0;i--){let a=t.content[i];if(ER(a,e))return a}}}}function ER(t,e){return af(t)&&e.includes(t.tokenType.name)}function _R(t,e){if(af(t))return t;if(Ll(t)){let r=hae(t,e,!1);if(r)return _R(r,e)}}function uae(t,e){if(af(t))return t;if(Ll(t)){let r=hae(t,e,!0);if(r)return uae(r,e)}}function hae(t,e,r){let n=0,i=t.content.length-1,a;for(;n<=i;){let s=Math.floor((n+i)/2),l=t.content[s];if(l.offset<=e&&l.end>e)return l;l.end<=e?(a=r?l:void 0,n=s+1):i=s-1}return a}function fae(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t);for(;n>0;){n--;let i=r.content[n];if(e||!i.hidden)return i}t=r}}function OOe(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t),i=r.content.length-1;for(;n<i;){n++;let a=r.content[n];if(e||!a.hidden)return a}t=r}}function POe(t){if(t.range.start.character===0)return t;let e=t.range.start.line,r=t,n;for(;t.container;){let i=t.container,a=n??i.content.indexOf(t);if(a===0?(t=i,n=void 0):(n=a-1,t=i.content[n]),t.range.start.line!==e)break;r=t}return r}function BOe(t,e){let r=FOe(t,e);return r?r.parent.content.slice(r.a+1,r.b):[]}function FOe(t,e){let r=lae(t),n=lae(e),i;for(let a=0;a<r.length&&a<n.length;a++){let s=r[a],l=n[a];if(s.parent===l.parent)i={parent:s.parent,a:s.index,b:l.index};else break}return i}function lae(t){let e=[];for(;t.container;){let r=t.container,n=r.content.indexOf(t);e.push({parent:r,index:n}),t=r}return e.reverse()}var Dc,lk,Nl=N(()=>{"use strict";Rl();Ps();o(Kd,"streamCst");o(MOe,"flattenCst");o(SR,"isChildNode");o(Gm,"tokenToRange");o(Qd,"toDocumentSegment");(function(t){t[t.Before=0]="Before",t[t.After=1]="After",t[t.OverlapFront=2]="OverlapFront",t[t.OverlapBack=3]="OverlapBack",t[t.Inside=4]="Inside",t[t.Outside=5]="Outside"})(Dc||(Dc={}));o(cae,"compareRange");o(CR,"inRange");lk=/^[\w\p{L}]$/u;o(IOe,"findDeclarationNodeAtOffset");o(AR,"findCommentNode");o(ER,"isCommentNode");o(_R,"findLeafNodeAtOffset");o(uae,"findLeafNodeBeforeOffset");o(hae,"binarySearch");o(fae,"getPreviousNode");o(OOe,"getNextNode");o(POe,"getStartlineNode");o(BOe,"getInteriorNodes");o(FOe,"getCommonParent");o(lae,"getParentChain")});function Lc(t){throw new Error("Error! The input value was not handled.")}var Zd,uk=N(()=>{"use strict";Zd=class extends Error{static{o(this,"ErrorWithLocation")}constructor(e,r){super(e?`${r} at ${e.range.start.line}:${e.range.start.character}`:r)}};o(Lc,"assertUnreachable")});var U2={};hr(U2,{AbstractElement:()=>Hm,AbstractRule:()=>Vm,AbstractType:()=>Um,Action:()=>cg,Alternatives:()=>ug,ArrayLiteral:()=>Wm,ArrayType:()=>qm,Assignment:()=>hg,BooleanLiteral:()=>Ym,CharacterRange:()=>fg,Condition:()=>O2,Conjunction:()=>Xm,CrossReference:()=>dg,Disjunction:()=>jm,EndOfFile:()=>pg,Grammar:()=>Km,GrammarImport:()=>B2,Group:()=>mg,InferredType:()=>Qm,Interface:()=>Zm,Keyword:()=>gg,LangiumGrammarAstReflection:()=>Cg,LangiumGrammarTerminals:()=>$Oe,NamedArgument:()=>F2,NegatedToken:()=>yg,Negation:()=>Jm,NumberLiteral:()=>eg,Parameter:()=>tg,ParameterReference:()=>rg,ParserRule:()=>ng,ReferenceType:()=>ig,RegexToken:()=>vg,ReturnType:()=>$2,RuleCall:()=>xg,SimpleType:()=>ag,StringLiteral:()=>sg,TerminalAlternatives:()=>bg,TerminalGroup:()=>wg,TerminalRule:()=>Jd,TerminalRuleCall:()=>Tg,Type:()=>og,TypeAttribute:()=>z2,TypeDefinition:()=>hk,UnionType:()=>lg,UnorderedGroup:()=>kg,UntilToken:()=>Eg,ValueLiteral:()=>P2,Wildcard:()=>Sg,isAbstractElement:()=>G2,isAbstractRule:()=>zOe,isAbstractType:()=>GOe,isAction:()=>Mu,isAlternatives:()=>mk,isArrayLiteral:()=>qOe,isArrayType:()=>DR,isAssignment:()=>Ml,isBooleanLiteral:()=>LR,isCharacterRange:()=>FR,isCondition:()=>VOe,isConjunction:()=>RR,isCrossReference:()=>ep,isDisjunction:()=>NR,isEndOfFile:()=>$R,isFeatureName:()=>UOe,isGrammar:()=>YOe,isGrammarImport:()=>XOe,isGroup:()=>sf,isInferredType:()=>fk,isInterface:()=>dk,isKeyword:()=>Ho,isNamedArgument:()=>jOe,isNegatedToken:()=>zR,isNegation:()=>MR,isNumberLiteral:()=>KOe,isParameter:()=>QOe,isParameterReference:()=>IR,isParserRule:()=>Oa,isPrimitiveType:()=>dae,isReferenceType:()=>OR,isRegexToken:()=>GR,isReturnType:()=>PR,isRuleCall:()=>Il,isSimpleType:()=>pk,isStringLiteral:()=>ZOe,isTerminalAlternatives:()=>VR,isTerminalGroup:()=>UR,isTerminalRule:()=>so,isTerminalRuleCall:()=>gk,isType:()=>V2,isTypeAttribute:()=>JOe,isTypeDefinition:()=>HOe,isUnionType:()=>BR,isUnorderedGroup:()=>yk,isUntilToken:()=>HR,isValueLiteral:()=>WOe,isWildcard:()=>WR,reflection:()=>lr});function zOe(t){return lr.isInstance(t,Vm)}function GOe(t){return lr.isInstance(t,Um)}function VOe(t){return lr.isInstance(t,O2)}function UOe(t){return dae(t)||t==="current"||t==="entry"||t==="extends"||t==="false"||t==="fragment"||t==="grammar"||t==="hidden"||t==="import"||t==="interface"||t==="returns"||t==="terminal"||t==="true"||t==="type"||t==="infer"||t==="infers"||t==="with"||typeof t=="string"&&/\^?[_a-zA-Z][\w_]*/.test(t)}function dae(t){return t==="string"||t==="number"||t==="boolean"||t==="Date"||t==="bigint"}function HOe(t){return lr.isInstance(t,hk)}function WOe(t){return lr.isInstance(t,P2)}function G2(t){return lr.isInstance(t,Hm)}function qOe(t){return lr.isInstance(t,Wm)}function DR(t){return lr.isInstance(t,qm)}function LR(t){return lr.isInstance(t,Ym)}function RR(t){return lr.isInstance(t,Xm)}function NR(t){return lr.isInstance(t,jm)}function YOe(t){return lr.isInstance(t,Km)}function XOe(t){return lr.isInstance(t,B2)}function fk(t){return lr.isInstance(t,Qm)}function dk(t){return lr.isInstance(t,Zm)}function jOe(t){return lr.isInstance(t,F2)}function MR(t){return lr.isInstance(t,Jm)}function KOe(t){return lr.isInstance(t,eg)}function QOe(t){return lr.isInstance(t,tg)}function IR(t){return lr.isInstance(t,rg)}function Oa(t){return lr.isInstance(t,ng)}function OR(t){return lr.isInstance(t,ig)}function PR(t){return lr.isInstance(t,$2)}function pk(t){return lr.isInstance(t,ag)}function ZOe(t){return lr.isInstance(t,sg)}function so(t){return lr.isInstance(t,Jd)}function V2(t){return lr.isInstance(t,og)}function JOe(t){return lr.isInstance(t,z2)}function BR(t){return lr.isInstance(t,lg)}function Mu(t){return lr.isInstance(t,cg)}function mk(t){return lr.isInstance(t,ug)}function Ml(t){return lr.isInstance(t,hg)}function FR(t){return lr.isInstance(t,fg)}function ep(t){return lr.isInstance(t,dg)}function $R(t){return lr.isInstance(t,pg)}function sf(t){return lr.isInstance(t,mg)}function Ho(t){return lr.isInstance(t,gg)}function zR(t){return lr.isInstance(t,yg)}function GR(t){return lr.isInstance(t,vg)}function Il(t){return lr.isInstance(t,xg)}function VR(t){return lr.isInstance(t,bg)}function UR(t){return lr.isInstance(t,wg)}function gk(t){return lr.isInstance(t,Tg)}function yk(t){return lr.isInstance(t,kg)}function HR(t){return lr.isInstance(t,Eg)}function WR(t){return lr.isInstance(t,Sg)}var $Oe,Vm,Um,O2,hk,P2,Hm,Wm,qm,Ym,Xm,jm,Km,B2,Qm,Zm,F2,Jm,eg,tg,rg,ng,ig,$2,ag,sg,Jd,og,z2,lg,cg,ug,hg,fg,dg,pg,mg,gg,yg,vg,xg,bg,wg,Tg,kg,Eg,Sg,Cg,lr,Rc=N(()=>{"use strict";Rl();$Oe={ID:/\^?[_a-zA-Z][\w_]*/,STRING:/"(\\.|[^"\\])*"|'(\\.|[^'\\])*'/,NUMBER:/NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)/,RegexLiteral:/\/(?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+\/[a-z]*/,WS:/\s+/,ML_COMMENT:/\/\*[\s\S]*?\*\//,SL_COMMENT:/\/\/[^\n\r]*/},Vm="AbstractRule";o(zOe,"isAbstractRule");Um="AbstractType";o(GOe,"isAbstractType");O2="Condition";o(VOe,"isCondition");o(UOe,"isFeatureName");o(dae,"isPrimitiveType");hk="TypeDefinition";o(HOe,"isTypeDefinition");P2="ValueLiteral";o(WOe,"isValueLiteral");Hm="AbstractElement";o(G2,"isAbstractElement");Wm="ArrayLiteral";o(qOe,"isArrayLiteral");qm="ArrayType";o(DR,"isArrayType");Ym="BooleanLiteral";o(LR,"isBooleanLiteral");Xm="Conjunction";o(RR,"isConjunction");jm="Disjunction";o(NR,"isDisjunction");Km="Grammar";o(YOe,"isGrammar");B2="GrammarImport";o(XOe,"isGrammarImport");Qm="InferredType";o(fk,"isInferredType");Zm="Interface";o(dk,"isInterface");F2="NamedArgument";o(jOe,"isNamedArgument");Jm="Negation";o(MR,"isNegation");eg="NumberLiteral";o(KOe,"isNumberLiteral");tg="Parameter";o(QOe,"isParameter");rg="ParameterReference";o(IR,"isParameterReference");ng="ParserRule";o(Oa,"isParserRule");ig="ReferenceType";o(OR,"isReferenceType");$2="ReturnType";o(PR,"isReturnType");ag="SimpleType";o(pk,"isSimpleType");sg="StringLiteral";o(ZOe,"isStringLiteral");Jd="TerminalRule";o(so,"isTerminalRule");og="Type";o(V2,"isType");z2="TypeAttribute";o(JOe,"isTypeAttribute");lg="UnionType";o(BR,"isUnionType");cg="Action";o(Mu,"isAction");ug="Alternatives";o(mk,"isAlternatives");hg="Assignment";o(Ml,"isAssignment");fg="CharacterRange";o(FR,"isCharacterRange");dg="CrossReference";o(ep,"isCrossReference");pg="EndOfFile";o($R,"isEndOfFile");mg="Group";o(sf,"isGroup");gg="Keyword";o(Ho,"isKeyword");yg="NegatedToken";o(zR,"isNegatedToken");vg="RegexToken";o(GR,"isRegexToken");xg="RuleCall";o(Il,"isRuleCall");bg="TerminalAlternatives";o(VR,"isTerminalAlternatives");wg="TerminalGroup";o(UR,"isTerminalGroup");Tg="TerminalRuleCall";o(gk,"isTerminalRuleCall");kg="UnorderedGroup";o(yk,"isUnorderedGroup");Eg="UntilToken";o(HR,"isUntilToken");Sg="Wildcard";o(WR,"isWildcard");Cg=class extends Xd{static{o(this,"LangiumGrammarAstReflection")}getAllTypes(){return[Hm,Vm,Um,cg,ug,Wm,qm,hg,Ym,fg,O2,Xm,dg,jm,pg,Km,B2,mg,Qm,Zm,gg,F2,yg,Jm,eg,tg,rg,ng,ig,vg,$2,xg,ag,sg,bg,wg,Jd,Tg,og,z2,hk,lg,kg,Eg,P2,Sg]}computeIsSubtype(e,r){switch(e){case cg:case ug:case hg:case fg:case dg:case pg:case mg:case gg:case yg:case vg:case xg:case bg:case wg:case Tg:case kg:case Eg:case Sg:return this.isSubtype(Hm,r);case Wm:case eg:case sg:return this.isSubtype(P2,r);case qm:case ig:case ag:case lg:return this.isSubtype(hk,r);case Ym:return this.isSubtype(O2,r)||this.isSubtype(P2,r);case Xm:case jm:case Jm:case rg:return this.isSubtype(O2,r);case Qm:case Zm:case og:return this.isSubtype(Um,r);case ng:return this.isSubtype(Vm,r)||this.isSubtype(Um,r);case Jd:return this.isSubtype(Vm,r);default:return!1}}getReferenceType(e){let r=`${e.container.$type}:${e.property}`;switch(r){case"Action:type":case"CrossReference:type":case"Interface:superTypes":case"ParserRule:returnType":case"SimpleType:typeRef":return Um;case"Grammar:hiddenTokens":case"ParserRule:hiddenTokens":case"RuleCall:rule":return Vm;case"Grammar:usedGrammars":return Km;case"NamedArgument:parameter":case"ParameterReference:parameter":return tg;case"TerminalRuleCall:rule":return Jd;default:throw new Error(`${r} is not a valid reference id.`)}}getTypeMetaData(e){switch(e){case Hm:return{name:Hm,properties:[{name:"cardinality"},{name:"lookahead"}]};case Wm:return{name:Wm,properties:[{name:"elements",defaultValue:[]}]};case qm:return{name:qm,properties:[{name:"elementType"}]};case Ym:return{name:Ym,properties:[{name:"true",defaultValue:!1}]};case Xm:return{name:Xm,properties:[{name:"left"},{name:"right"}]};case jm:return{name:jm,properties:[{name:"left"},{name:"right"}]};case Km:return{name:Km,properties:[{name:"definesHiddenTokens",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"imports",defaultValue:[]},{name:"interfaces",defaultValue:[]},{name:"isDeclared",defaultValue:!1},{name:"name"},{name:"rules",defaultValue:[]},{name:"types",defaultValue:[]},{name:"usedGrammars",defaultValue:[]}]};case B2:return{name:B2,properties:[{name:"path"}]};case Qm:return{name:Qm,properties:[{name:"name"}]};case Zm:return{name:Zm,properties:[{name:"attributes",defaultValue:[]},{name:"name"},{name:"superTypes",defaultValue:[]}]};case F2:return{name:F2,properties:[{name:"calledByName",defaultValue:!1},{name:"parameter"},{name:"value"}]};case Jm:return{name:Jm,properties:[{name:"value"}]};case eg:return{name:eg,properties:[{name:"value"}]};case tg:return{name:tg,properties:[{name:"name"}]};case rg:return{name:rg,properties:[{name:"parameter"}]};case ng:return{name:ng,properties:[{name:"dataType"},{name:"definesHiddenTokens",defaultValue:!1},{name:"definition"},{name:"entry",defaultValue:!1},{name:"fragment",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"inferredType"},{name:"name"},{name:"parameters",defaultValue:[]},{name:"returnType"},{name:"wildcard",defaultValue:!1}]};case ig:return{name:ig,properties:[{name:"referenceType"}]};case $2:return{name:$2,properties:[{name:"name"}]};case ag:return{name:ag,properties:[{name:"primitiveType"},{name:"stringType"},{name:"typeRef"}]};case sg:return{name:sg,properties:[{name:"value"}]};case Jd:return{name:Jd,properties:[{name:"definition"},{name:"fragment",defaultValue:!1},{name:"hidden",defaultValue:!1},{name:"name"},{name:"type"}]};case og:return{name:og,properties:[{name:"name"},{name:"type"}]};case z2:return{name:z2,properties:[{name:"defaultValue"},{name:"isOptional",defaultValue:!1},{name:"name"},{name:"type"}]};case lg:return{name:lg,properties:[{name:"types",defaultValue:[]}]};case cg:return{name:cg,properties:[{name:"cardinality"},{name:"feature"},{name:"inferredType"},{name:"lookahead"},{name:"operator"},{name:"type"}]};case ug:return{name:ug,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case hg:return{name:hg,properties:[{name:"cardinality"},{name:"feature"},{name:"lookahead"},{name:"operator"},{name:"terminal"}]};case fg:return{name:fg,properties:[{name:"cardinality"},{name:"left"},{name:"lookahead"},{name:"right"}]};case dg:return{name:dg,properties:[{name:"cardinality"},{name:"deprecatedSyntax",defaultValue:!1},{name:"lookahead"},{name:"terminal"},{name:"type"}]};case pg:return{name:pg,properties:[{name:"cardinality"},{name:"lookahead"}]};case mg:return{name:mg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"guardCondition"},{name:"lookahead"}]};case gg:return{name:gg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"value"}]};case yg:return{name:yg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case vg:return{name:vg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"regex"}]};case xg:return{name:xg,properties:[{name:"arguments",defaultValue:[]},{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case bg:return{name:bg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case wg:return{name:wg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case Tg:return{name:Tg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case kg:return{name:kg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case Eg:return{name:Eg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case Sg:return{name:Sg,properties:[{name:"cardinality"},{name:"lookahead"}]};default:return{name:e,properties:[]}}}},lr=new Cg});var xk={};hr(xk,{assignMandatoryProperties:()=>XR,copyAstNode:()=>YR,findLocalReferences:()=>tPe,findRootNode:()=>H2,getContainerOfType:()=>tp,getDocument:()=>Pa,hasContainerOfType:()=>ePe,linkContentToContainer:()=>vk,streamAllContents:()=>Nc,streamAst:()=>Wo,streamContents:()=>W2,streamReferences:()=>Ag});function vk(t){for(let[e,r]of Object.entries(t))e.startsWith("$")||(Array.isArray(r)?r.forEach((n,i)=>{ii(n)&&(n.$container=t,n.$containerProperty=e,n.$containerIndex=i)}):ii(r)&&(r.$container=t,r.$containerProperty=e))}function tp(t,e){let r=t;for(;r;){if(e(r))return r;r=r.$container}}function ePe(t,e){let r=t;for(;r;){if(e(r))return!0;r=r.$container}return!1}function Pa(t){let r=H2(t).$document;if(!r)throw new Error("AST node has no document.");return r}function H2(t){for(;t.$container;)t=t.$container;return t}function W2(t,e){if(!t)throw new Error("Node must be an AstNode.");let r=e?.range;return new ao(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),n=>{for(;n.keyIndex<n.keys.length;){let i=n.keys[n.keyIndex];if(!i.startsWith("$")){let a=t[i];if(ii(a)){if(n.keyIndex++,qR(a,r))return{done:!1,value:a}}else if(Array.isArray(a)){for(;n.arrayIndex<a.length;){let s=n.arrayIndex++,l=a[s];if(ii(l)&&qR(l,r))return{done:!1,value:l}}n.arrayIndex=0}}n.keyIndex++}return Ia})}function Nc(t,e){if(!t)throw new Error("Root node must be an AstNode.");return new _c(t,r=>W2(r,e))}function Wo(t,e){if(t){if(e?.range&&!qR(t,e.range))return new _c(t,()=>[])}else throw new Error("Root node must be an AstNode.");return new _c(t,r=>W2(r,e),{includeRoot:!0})}function qR(t,e){var r;if(!e)return!0;let n=(r=t.$cstNode)===null||r===void 0?void 0:r.range;return n?CR(n,e):!1}function Ag(t){return new ao(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),e=>{for(;e.keyIndex<e.keys.length;){let r=e.keys[e.keyIndex];if(!r.startsWith("$")){let n=t[r];if(va(n))return e.keyIndex++,{done:!1,value:{reference:n,container:t,property:r}};if(Array.isArray(n)){for(;e.arrayIndex<n.length;){let i=e.arrayIndex++,a=n[i];if(va(a))return{done:!1,value:{reference:a,container:t,property:r,index:i}}}e.arrayIndex=0}}e.keyIndex++}return Ia})}function tPe(t,e=Pa(t).parseResult.value){let r=[];return Wo(e).forEach(n=>{Ag(n).forEach(i=>{i.reference.ref===t&&r.push(i.reference)})}),en(r)}function XR(t,e){let r=t.getTypeMetaData(e.$type),n=e;for(let i of r.properties)i.defaultValue!==void 0&&n[i.name]===void 0&&(n[i.name]=pae(i.defaultValue))}function pae(t){return Array.isArray(t)?[...t.map(pae)]:t}function YR(t,e){let r={$type:t.$type};for(let[n,i]of Object.entries(t))if(!n.startsWith("$"))if(ii(i))r[n]=YR(i,e);else if(va(i))r[n]=e(r,n,i.$refNode,i.$refText);else if(Array.isArray(i)){let a=[];for(let s of i)ii(s)?a.push(YR(s,e)):va(s)?a.push(e(r,n,s.$refNode,s.$refText)):a.push(s);r[n]=a}else r[n]=i;return vk(r),r}var is=N(()=>{"use strict";Rl();Ps();Nl();o(vk,"linkContentToContainer");o(tp,"getContainerOfType");o(ePe,"hasContainerOfType");o(Pa,"getDocument");o(H2,"findRootNode");o(W2,"streamContents");o(Nc,"streamAllContents");o(Wo,"streamAst");o(qR,"isAstNodeInRange");o(Ag,"streamReferences");o(tPe,"findLocalReferences");o(XR,"assignMandatoryProperties");o(pae,"copyDefaultValue");o(YR,"copyAstNode")});function ar(t){return t.charCodeAt(0)}function bk(t,e){Array.isArray(t)?t.forEach(function(r){e.push(r)}):e.push(t)}function _g(t,e){if(t[e]===!0)throw"duplicate flag "+e;let r=t[e];t[e]=!0}function rp(t){if(t===void 0)throw Error("Internal Error - Should never get here!");return!0}function q2(){throw Error("Internal Error - Should never get here!")}function jR(t){return t.type==="Character"}var KR=N(()=>{"use strict";o(ar,"cc");o(bk,"insertToSet");o(_g,"addFlag");o(rp,"ASSERT_EXISTS");o(q2,"ASSERT_NEVER_REACH_HERE");o(jR,"isCharacter")});var Y2,X2,QR,mae=N(()=>{"use strict";KR();Y2=[];for(let t=ar("0");t<=ar("9");t++)Y2.push(t);X2=[ar("_")].concat(Y2);for(let t=ar("a");t<=ar("z");t++)X2.push(t);for(let t=ar("A");t<=ar("Z");t++)X2.push(t);QR=[ar(" "),ar("\f"),ar(`
691 +`),ar("\r"),ar(" "),ar("\v"),ar(" "),ar("\xA0"),ar("\u1680"),ar("\u2000"),ar("\u2001"),ar("\u2002"),ar("\u2003"),ar("\u2004"),ar("\u2005"),ar("\u2006"),ar("\u2007"),ar("\u2008"),ar("\u2009"),ar("\u200A"),ar("\u2028"),ar("\u2029"),ar("\u202F"),ar("\u205F"),ar("\u3000"),ar("\uFEFF")]});var rPe,wk,nPe,np,gae=N(()=>{"use strict";KR();mae();rPe=/[0-9a-fA-F]/,wk=/[0-9]/,nPe=/[1-9]/,np=class{static{o(this,"RegExpParser")}constructor(){this.idx=0,this.input="",this.groupIdx=0}saveState(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}}restoreState(e){this.idx=e.idx,this.input=e.input,this.groupIdx=e.groupIdx}pattern(e){this.idx=0,this.input=e,this.groupIdx=0,this.consumeChar("/");let r=this.disjunction();this.consumeChar("/");let n={type:"Flags",loc:{begin:this.idx,end:e.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};for(;this.isRegExpFlag();)switch(this.popChar()){case"g":_g(n,"global");break;case"i":_g(n,"ignoreCase");break;case"m":_g(n,"multiLine");break;case"u":_g(n,"unicode");break;case"y":_g(n,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:n,value:r,loc:this.loc(0)}}disjunction(){let e=[],r=this.idx;for(e.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),e.push(this.alternative());return{type:"Disjunction",value:e,loc:this.loc(r)}}alternative(){let e=[],r=this.idx;for(;this.isTerm();)e.push(this.term());return{type:"Alternative",value:e,loc:this.loc(r)}}term(){return this.isAssertion()?this.assertion():this.atom()}assertion(){let e=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(e)};case"$":return{type:"EndAnchor",loc:this.loc(e)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(e)};case"B":return{type:"NonWordBoundary",loc:this.loc(e)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");let r;switch(this.popChar()){case"=":r="Lookahead";break;case"!":r="NegativeLookahead";break}rp(r);let n=this.disjunction();return this.consumeChar(")"),{type:r,value:n,loc:this.loc(e)}}return q2()}quantifier(e=!1){let r,n=this.idx;switch(this.popChar()){case"*":r={atLeast:0,atMost:1/0};break;case"+":r={atLeast:1,atMost:1/0};break;case"?":r={atLeast:0,atMost:1};break;case"{":let i=this.integerIncludingZero();switch(this.popChar()){case"}":r={atLeast:i,atMost:i};break;case",":let a;this.isDigit()?(a=this.integerIncludingZero(),r={atLeast:i,atMost:a}):r={atLeast:i,atMost:1/0},this.consumeChar("}");break}if(e===!0&&r===void 0)return;rp(r);break}if(!(e===!0&&r===void 0)&&rp(r))return this.peekChar(0)==="?"?(this.consumeChar("?"),r.greedy=!1):r.greedy=!0,r.type="Quantifier",r.loc=this.loc(n),r}atom(){let e,r=this.idx;switch(this.peekChar()){case".":e=this.dotAll();break;case"\\":e=this.atomEscape();break;case"[":e=this.characterClass();break;case"(":e=this.group();break}return e===void 0&&this.isPatternCharacter()&&(e=this.patternCharacter()),rp(e)?(e.loc=this.loc(r),this.isQuantifier()&&(e.quantifier=this.quantifier()),e):q2()}dotAll(){return this.consumeChar("."),{type:"Set",complement:!0,value:[ar(`
692 +`),ar("\r"),ar("\u2028"),ar("\u2029")]}}atomEscape(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}decimalEscapeAtom(){return{type:"GroupBackReference",value:this.positiveInteger()}}characterClassEscape(){let e,r=!1;switch(this.popChar()){case"d":e=Y2;break;case"D":e=Y2,r=!0;break;case"s":e=QR;break;case"S":e=QR,r=!0;break;case"w":e=X2;break;case"W":e=X2,r=!0;break}return rp(e)?{type:"Set",value:e,complement:r}:q2()}controlEscapeAtom(){let e;switch(this.popChar()){case"f":e=ar("\f");break;case"n":e=ar(`
693 +`);break;case"r":e=ar("\r");break;case"t":e=ar(" ");break;case"v":e=ar("\v");break}return rp(e)?{type:"Character",value:e}:q2()}controlLetterEscapeAtom(){this.consumeChar("c");let e=this.popChar();if(/[a-zA-Z]/.test(e)===!1)throw Error("Invalid ");return{type:"Character",value:e.toUpperCase().charCodeAt(0)-64}}nulCharacterAtom(){return this.consumeChar("0"),{type:"Character",value:ar("\0")}}hexEscapeSequenceAtom(){return this.consumeChar("x"),this.parseHexDigits(2)}regExpUnicodeEscapeSequenceAtom(){return this.consumeChar("u"),this.parseHexDigits(4)}identityEscapeAtom(){let e=this.popChar();return{type:"Character",value:ar(e)}}classPatternCharacterAtom(){switch(this.peekChar()){case`
694 +`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:let e=this.popChar();return{type:"Character",value:ar(e)}}}characterClass(){let e=[],r=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),r=!0);this.isClassAtom();){let n=this.classAtom(),i=n.type==="Character";if(jR(n)&&this.isRangeDash()){this.consumeChar("-");let a=this.classAtom(),s=a.type==="Character";if(jR(a)){if(a.value<n.value)throw Error("Range out of order in character class");e.push({from:n.value,to:a.value})}else bk(n.value,e),e.push(ar("-")),bk(a.value,e)}else bk(n.value,e)}return this.consumeChar("]"),{type:"Set",complement:r,value:e}}classAtom(){switch(this.peekChar()){case"]":case`
695 +`:case"\r":case"\u2028":case"\u2029":throw Error("TBD");case"\\":return this.classEscape();default:return this.classPatternCharacterAtom()}}classEscape(){switch(this.consumeChar("\\"),this.peekChar()){case"b":return this.consumeChar("b"),{type:"Character",value:ar("\b")};case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}group(){let e=!0;switch(this.consumeChar("("),this.peekChar(0)){case"?":this.consumeChar("?"),this.consumeChar(":"),e=!1;break;default:this.groupIdx++;break}let r=this.disjunction();this.consumeChar(")");let n={type:"Group",capturing:e,value:r};return e&&(n.idx=this.groupIdx),n}positiveInteger(){let e=this.popChar();if(nPe.test(e)===!1)throw Error("Expecting a positive integer");for(;wk.test(this.peekChar(0));)e+=this.popChar();return parseInt(e,10)}integerIncludingZero(){let e=this.popChar();if(wk.test(e)===!1)throw Error("Expecting an integer");for(;wk.test(this.peekChar(0));)e+=this.popChar();return parseInt(e,10)}patternCharacter(){let e=this.popChar();switch(e){case`
696 +`:case"\r":case"\u2028":case"\u2029":case"^":case"$":case"\\":case".":case"*":case"+":case"?":case"(":case")":case"[":case"|":throw Error("TBD");default:return{type:"Character",value:ar(e)}}}isRegExpFlag(){switch(this.peekChar(0)){case"g":case"i":case"m":case"u":case"y":return!0;default:return!1}}isRangeDash(){return this.peekChar()==="-"&&this.isClassAtom(1)}isDigit(){return wk.test(this.peekChar(0))}isClassAtom(e=0){switch(this.peekChar(e)){case"]":case`
697 +`:case"\r":case"\u2028":case"\u2029":return!1;default:return!0}}isTerm(){return this.isAtom()||this.isAssertion()}isAtom(){if(this.isPatternCharacter())return!0;switch(this.peekChar(0)){case".":case"\\":case"[":case"(":return!0;default:return!1}}isAssertion(){switch(this.peekChar(0)){case"^":case"$":return!0;case"\\":switch(this.peekChar(1)){case"b":case"B":return!0;default:return!1}case"(":return this.peekChar(1)==="?"&&(this.peekChar(2)==="="||this.peekChar(2)==="!");default:return!1}}isQuantifier(){let e=this.saveState();try{return this.quantifier(!0)!==void 0}catch{return!1}finally{this.restoreState(e)}}isPatternCharacter(){switch(this.peekChar()){case"^":case"$":case"\\":case".":case"*":case"+":case"?":case"(":case")":case"[":case"|":case"/":case`
698 +`:case"\r":case"\u2028":case"\u2029":return!1;default:return!0}}parseHexDigits(e){let r="";for(let i=0;i<e;i++){let a=this.popChar();if(rPe.test(a)===!1)throw Error("Expecting a HexDecimal digits");r+=a}return{type:"Character",value:parseInt(r,16)}}peekChar(e=0){return this.input[this.idx+e]}popChar(){let e=this.peekChar(0);return this.consumeChar(void 0),e}consumeChar(e){if(e!==void 0&&this.input[this.idx]!==e)throw Error("Expected: '"+e+"' but found: '"+this.input[this.idx]+"' at offset: "+this.idx);if(this.idx>=this.input.length)throw Error("Unexpected end of input");this.idx++}loc(e){return{begin:e,end:this.idx}}}});var Mc,yae=N(()=>{"use strict";Mc=class{static{o(this,"BaseRegExpVisitor")}visitChildren(e){for(let r in e){let n=e[r];e.hasOwnProperty(r)&&(n.type!==void 0?this.visit(n):Array.isArray(n)&&n.forEach(i=>{this.visit(i)},this))}}visit(e){switch(e.type){case"Pattern":this.visitPattern(e);break;case"Flags":this.visitFlags(e);break;case"Disjunction":this.visitDisjunction(e);break;case"Alternative":this.visitAlternative(e);break;case"StartAnchor":this.visitStartAnchor(e);break;case"EndAnchor":this.visitEndAnchor(e);break;case"WordBoundary":this.visitWordBoundary(e);break;case"NonWordBoundary":this.visitNonWordBoundary(e);break;case"Lookahead":this.visitLookahead(e);break;case"NegativeLookahead":this.visitNegativeLookahead(e);break;case"Character":this.visitCharacter(e);break;case"Set":this.visitSet(e);break;case"Group":this.visitGroup(e);break;case"GroupBackReference":this.visitGroupBackReference(e);break;case"Quantifier":this.visitQuantifier(e);break}this.visitChildren(e)}visitPattern(e){}visitFlags(e){}visitDisjunction(e){}visitAlternative(e){}visitStartAnchor(e){}visitEndAnchor(e){}visitWordBoundary(e){}visitNonWordBoundary(e){}visitLookahead(e){}visitNegativeLookahead(e){}visitCharacter(e){}visitSet(e){}visitGroup(e){}visitGroupBackReference(e){}visitQuantifier(e){}}});var j2=N(()=>{"use strict";gae();yae()});var Tk={};hr(Tk,{NEWLINE_REGEXP:()=>JR,escapeRegExp:()=>ap,getCaseInsensitivePattern:()=>tN,getTerminalParts:()=>iPe,isMultilineComment:()=>eN,isWhitespace:()=>Dg,partialMatches:()=>rN,partialRegExp:()=>bae,whitespaceCharacters:()=>xae});function iPe(t){try{typeof t!="string"&&(t=t.source),t=`/${t}/`;let e=vae.pattern(t),r=[];for(let n of e.value.value)ip.reset(t),ip.visit(n),r.push({start:ip.startRegexp,end:ip.endRegex});return r}catch{return[]}}function eN(t){try{return typeof t=="string"&&(t=new RegExp(t)),t=t.toString(),ip.reset(t),ip.visit(vae.pattern(t)),ip.multiline}catch{return!1}}function Dg(t){let e=typeof t=="string"?new RegExp(t):t;return xae.some(r=>e.test(r))}function ap(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function tN(t){return Array.prototype.map.call(t,e=>/\w/.test(e)?`[${e.toLowerCase()}${e.toUpperCase()}]`:ap(e)).join("")}function rN(t,e){let r=bae(t),n=e.match(r);return!!n&&n[0].length>0}function bae(t){typeof t=="string"&&(t=new RegExp(t));let e=t,r=t.source,n=0;function i(){let a="",s;function l(h){a+=r.substr(n,h),n+=h}o(l,"appendRaw");function u(h){a+="(?:"+r.substr(n,h)+"|$)",n+=h}for(o(u,"appendOptional");n<r.length;)switch(r[n]){case"\\":switch(r[n+1]){case"c":u(3);break;case"x":u(4);break;case"u":e.unicode?r[n+2]==="{"?u(r.indexOf("}",n)-n+1):u(6):u(2);break;case"p":case"P":e.unicode?u(r.indexOf("}",n)-n+1):u(2);break;case"k":u(r.indexOf(">",n)-n+1);break;default:u(2);break}break;case"[":s=/\[(?:\\.|.)*?\]/g,s.lastIndex=n,s=s.exec(r)||[],u(s[0].length);break;case"|":case"^":case"$":case"*":case"+":case"?":l(1);break;case"{":s=/\{\d+,?\d*\}/g,s.lastIndex=n,s=s.exec(r),s?l(s[0].length):u(1);break;case"(":if(r[n+1]==="?")switch(r[n+2]){case":":a+="(?:",n+=3,a+=i()+"|$)";break;case"=":a+="(?=",n+=3,a+=i()+")";break;case"!":s=n,n+=3,i(),a+=r.substr(s,n-s);break;case"<":switch(r[n+3]){case"=":case"!":s=n,n+=4,i(),a+=r.substr(s,n-s);break;default:l(r.indexOf(">",n)-n+1),a+=i()+"|$)";break}break}else l(1),a+=i()+"|$)";break;case")":return++n,a;default:u(1);break}return a}return o(i,"process"),new RegExp(i(),t.flags)}var JR,vae,ZR,ip,xae,Lg=N(()=>{"use strict";j2();JR=/\r?\n/gm,vae=new np,ZR=class extends Mc{static{o(this,"TerminalRegExpVisitor")}constructor(){super(...arguments),this.isStarting=!0,this.endRegexpStack=[],this.multiline=!1}get endRegex(){return this.endRegexpStack.join("")}reset(e){this.multiline=!1,this.regex=e,this.startRegexp="",this.isStarting=!0,this.endRegexpStack=[]}visitGroup(e){e.quantifier&&(this.isStarting=!1,this.endRegexpStack=[])}visitCharacter(e){let r=String.fromCharCode(e.value);if(!this.multiline&&r===`
699 +`&&(this.multiline=!0),e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let n=ap(r);this.endRegexpStack.push(n),this.isStarting&&(this.startRegexp+=n)}}visitSet(e){if(!this.multiline){let r=this.regex.substring(e.loc.begin,e.loc.end),n=new RegExp(r);this.multiline=!!`
700 +`.match(n)}if(e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let r=this.regex.substring(e.loc.begin,e.loc.end);this.endRegexpStack.push(r),this.isStarting&&(this.startRegexp+=r)}}visitChildren(e){e.type==="Group"&&e.quantifier||super.visitChildren(e)}},ip=new ZR;o(iPe,"getTerminalParts");o(eN,"isMultilineComment");xae=`\f
701 +\r \v \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF`.split("");o(Dg,"isWhitespace");o(ap,"escapeRegExp");o(tN,"getCaseInsensitivePattern");o(rN,"partialMatches");o(bae,"partialRegExp")});var Ek={};hr(Ek,{findAssignment:()=>hN,findNameAssignment:()=>kk,findNodeForKeyword:()=>cN,findNodeForProperty:()=>Q2,findNodesForKeyword:()=>aPe,findNodesForKeywordInternal:()=>uN,findNodesForProperty:()=>oN,getActionAtElement:()=>Sae,getActionType:()=>Aae,getAllReachableRules:()=>K2,getCrossReferenceTerminal:()=>aN,getEntryRule:()=>wae,getExplicitRuleType:()=>Rg,getHiddenRules:()=>Tae,getRuleType:()=>fN,getRuleTypeName:()=>uPe,getTypeName:()=>J2,isArrayCardinality:()=>oPe,isArrayOperator:()=>lPe,isCommentTerminal:()=>sN,isDataType:()=>cPe,isDataTypeRule:()=>Z2,isOptionalCardinality:()=>sPe,terminalRegex:()=>Ng});function wae(t){return t.rules.find(e=>Oa(e)&&e.entry)}function Tae(t){return t.rules.filter(e=>so(e)&&e.hidden)}function K2(t,e){let r=new Set,n=wae(t);if(!n)return new Set(t.rules);let i=[n].concat(Tae(t));for(let s of i)kae(s,r,e);let a=new Set;for(let s of t.rules)(r.has(s.name)||so(s)&&s.hidden)&&a.add(s);return a}function kae(t,e,r){e.add(t.name),Nc(t).forEach(n=>{if(Il(n)||r&&gk(n)){let i=n.rule.ref;i&&!e.has(i.name)&&kae(i,e,r)}})}function aN(t){if(t.terminal)return t.terminal;if(t.type.ref){let e=kk(t.type.ref);return e?.terminal}}function sN(t){return t.hidden&&!Dg(Ng(t))}function oN(t,e){return!t||!e?[]:lN(t,e,t.astNode,!0)}function Q2(t,e,r){if(!t||!e)return;let n=lN(t,e,t.astNode,!0);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function lN(t,e,r,n){if(!n){let i=tp(t.grammarSource,Ml);if(i&&i.feature===e)return[t]}return Ll(t)&&t.astNode===r?t.content.flatMap(i=>lN(i,e,r,!1)):[]}function aPe(t,e){return t?uN(t,e,t?.astNode):[]}function cN(t,e,r){if(!t)return;let n=uN(t,e,t?.astNode);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function uN(t,e,r){if(t.astNode!==r)return[];if(Ho(t.grammarSource)&&t.grammarSource.value===e)return[t];let n=Kd(t).iterator(),i,a=[];do if(i=n.next(),!i.done){let s=i.value;s.astNode===r?Ho(s.grammarSource)&&s.grammarSource.value===e&&a.push(s):n.prune()}while(!i.done);return a}function hN(t){var e;let r=t.astNode;for(;r===((e=t.container)===null||e===void 0?void 0:e.astNode);){let n=tp(t.grammarSource,Ml);if(n)return n;t=t.container}}function kk(t){let e=t;return fk(e)&&(Mu(e.$container)?e=e.$container.$container:Oa(e.$container)?e=e.$container:Lc(e.$container)),Eae(t,e,new Map)}function Eae(t,e,r){var n;function i(a,s){let l;return tp(a,Ml)||(l=Eae(s,s,r)),r.set(t,l),l}if(o(i,"go"),r.has(t))return r.get(t);r.set(t,void 0);for(let a of Nc(e)){if(Ml(a)&&a.feature.toLowerCase()==="name")return r.set(t,a),a;if(Il(a)&&Oa(a.rule.ref))return i(a,a.rule.ref);if(pk(a)&&(!((n=a.typeRef)===null||n===void 0)&&n.ref))return i(a,a.typeRef.ref)}}function Sae(t){let e=t.$container;if(sf(e)){let r=e.elements,n=r.indexOf(t);for(let i=n-1;i>=0;i--){let a=r[i];if(Mu(a))return a;{let s=Nc(r[i]).find(Mu);if(s)return s}}}if(G2(e))return Sae(e)}function sPe(t,e){return t==="?"||t==="*"||sf(e)&&!!e.guardCondition}function oPe(t){return t==="*"||t==="+"}function lPe(t){return t==="+="}function Z2(t){return Cae(t,new Set)}function Cae(t,e){if(e.has(t))return!0;e.add(t);for(let r of Nc(t))if(Il(r)){if(!r.rule.ref||Oa(r.rule.ref)&&!Cae(r.rule.ref,e))return!1}else{if(Ml(r))return!1;if(Mu(r))return!1}return!!t.definition}function cPe(t){return iN(t.type,new Set)}function iN(t,e){if(e.has(t))return!0;if(e.add(t),DR(t))return!1;if(OR(t))return!1;if(BR(t))return t.types.every(r=>iN(r,e));if(pk(t)){if(t.primitiveType!==void 0)return!0;if(t.stringType!==void 0)return!0;if(t.typeRef!==void 0){let r=t.typeRef.ref;return V2(r)?iN(r.type,e):!1}else return!1}else return!1}function Rg(t){if(t.inferredType)return t.inferredType.name;if(t.dataType)return t.dataType;if(t.returnType){let e=t.returnType.ref;if(e){if(Oa(e))return e.name;if(dk(e)||V2(e))return e.name}}}function J2(t){var e;if(Oa(t))return Z2(t)?t.name:(e=Rg(t))!==null&&e!==void 0?e:t.name;if(dk(t)||V2(t)||PR(t))return t.name;if(Mu(t)){let r=Aae(t);if(r)return r}else if(fk(t))return t.name;throw new Error("Cannot get name of Unknown Type")}function Aae(t){var e;if(t.inferredType)return t.inferredType.name;if(!((e=t.type)===null||e===void 0)&&e.ref)return J2(t.type.ref)}function uPe(t){var e,r,n;return so(t)?(r=(e=t.type)===null||e===void 0?void 0:e.name)!==null&&r!==void 0?r:"string":Z2(t)?t.name:(n=Rg(t))!==null&&n!==void 0?n:t.name}function fN(t){var e,r,n;return so(t)?(r=(e=t.type)===null||e===void 0?void 0:e.name)!==null&&r!==void 0?r:"string":(n=Rg(t))!==null&&n!==void 0?n:t.name}function Ng(t){let e={s:!1,i:!1,u:!1},r=Mg(t.definition,e),n=Object.entries(e).filter(([,i])=>i).map(([i])=>i).join("");return new RegExp(r,n)}function Mg(t,e){if(VR(t))return hPe(t);if(UR(t))return fPe(t);if(FR(t))return mPe(t);if(gk(t)){let r=t.rule.ref;if(!r)throw new Error("Missing rule reference.");return Iu(Mg(r.definition),{cardinality:t.cardinality,lookahead:t.lookahead})}else{if(zR(t))return pPe(t);if(HR(t))return dPe(t);if(GR(t)){let r=t.regex.lastIndexOf("/"),n=t.regex.substring(1,r),i=t.regex.substring(r+1);return e&&(e.i=i.includes("i"),e.s=i.includes("s"),e.u=i.includes("u")),Iu(n,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}else{if(WR(t))return Iu(dN,{cardinality:t.cardinality,lookahead:t.lookahead});throw new Error(`Invalid terminal element: ${t?.$type}`)}}}function hPe(t){return Iu(t.elements.map(e=>Mg(e)).join("|"),{cardinality:t.cardinality,lookahead:t.lookahead})}function fPe(t){return Iu(t.elements.map(e=>Mg(e)).join(""),{cardinality:t.cardinality,lookahead:t.lookahead})}function dPe(t){return Iu(`${dN}*?${Mg(t.terminal)}`,{cardinality:t.cardinality,lookahead:t.lookahead})}function pPe(t){return Iu(`(?!${Mg(t.terminal)})${dN}*?`,{cardinality:t.cardinality,lookahead:t.lookahead})}function mPe(t){return t.right?Iu(`[${nN(t.left)}-${nN(t.right)}]`,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1}):Iu(nN(t.left),{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}function nN(t){return ap(t.value)}function Iu(t,e){var r;return(e.wrap!==!1||e.lookahead)&&(t=`(${(r=e.lookahead)!==null&&r!==void 0?r:""}${t})`),e.cardinality?`${t}${e.cardinality}`:t}var dN,Ol=N(()=>{"use strict";uk();Rc();Rl();is();Nl();Lg();o(wae,"getEntryRule");o(Tae,"getHiddenRules");o(K2,"getAllReachableRules");o(kae,"ruleDfs");o(aN,"getCrossReferenceTerminal");o(sN,"isCommentTerminal");o(oN,"findNodesForProperty");o(Q2,"findNodeForProperty");o(lN,"findNodesForPropertyInternal");o(aPe,"findNodesForKeyword");o(cN,"findNodeForKeyword");o(uN,"findNodesForKeywordInternal");o(hN,"findAssignment");o(kk,"findNameAssignment");o(Eae,"findNameAssignmentInternal");o(Sae,"getActionAtElement");o(sPe,"isOptionalCardinality");o(oPe,"isArrayCardinality");o(lPe,"isArrayOperator");o(Z2,"isDataTypeRule");o(Cae,"isDataTypeRuleInternal");o(cPe,"isDataType");o(iN,"isDataTypeInternal");o(Rg,"getExplicitRuleType");o(J2,"getTypeName");o(Aae,"getActionType");o(uPe,"getRuleTypeName");o(fN,"getRuleType");o(Ng,"terminalRegex");dN=/[\s\S]/.source;o(Mg,"abstractElementToRegex");o(hPe,"terminalAlternativesToRegex");o(fPe,"terminalGroupToRegex");o(dPe,"untilTokenToRegex");o(pPe,"negateTokenToRegex");o(mPe,"characterRangeToRegex");o(nN,"keywordToRegex");o(Iu,"withCardinality")});function pN(t){let e=[],r=t.Grammar;for(let n of r.rules)so(n)&&sN(n)&&eN(Ng(n))&&e.push(n.name);return{multilineCommentRules:e,nameRegexp:lk}}var mN=N(()=>{"use strict";Nl();Ol();Lg();Rc();o(pN,"createGrammarConfig")});var gN=N(()=>{"use strict"});function Ig(t){console&&console.error&&console.error(`Error: ${t}`)}function ex(t){console&&console.warn&&console.warn(`Warning: ${t}`)}var _ae=N(()=>{"use strict";o(Ig,"PRINT_ERROR");o(ex,"PRINT_WARNING")});function tx(t){let e=new Date().getTime(),r=t();return{time:new Date().getTime()-e,value:r}}var Dae=N(()=>{"use strict";o(tx,"timer")});function rx(t){function e(){}o(e,"FakeConstructor"),e.prototype=t;let r=new e;function n(){return typeof r.bar}return o(n,"fakeAccess"),n(),n(),t;(0,eval)(t)}var Lae=N(()=>{"use strict";o(rx,"toFastProperties")});var Og=N(()=>{"use strict";_ae();Dae();Lae()});function gPe(t){return yPe(t)?t.LABEL:t.name}function yPe(t){return yi(t.LABEL)&&t.LABEL!==""}function Sk(t){return Je(t,Pg)}function Pg(t){function e(r){return Je(r,Pg)}if(o(e,"convertDefinition"),t instanceof on){let r={type:"NonTerminal",name:t.nonTerminalName,idx:t.idx};return yi(t.label)&&(r.label=t.label),r}else{if(t instanceof Dn)return{type:"Alternative",definition:e(t.definition)};if(t instanceof ln)return{type:"Option",idx:t.idx,definition:e(t.definition)};if(t instanceof Ln)return{type:"RepetitionMandatory",idx:t.idx,definition:e(t.definition)};if(t instanceof Rn)return{type:"RepetitionMandatoryWithSeparator",idx:t.idx,separator:Pg(new kr({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof wn)return{type:"RepetitionWithSeparator",idx:t.idx,separator:Pg(new kr({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof Or)return{type:"Repetition",idx:t.idx,definition:e(t.definition)};if(t instanceof Tn)return{type:"Alternation",idx:t.idx,definition:e(t.definition)};if(t instanceof kr){let r={type:"Terminal",name:t.terminalType.name,label:gPe(t.terminalType),idx:t.idx};yi(t.label)&&(r.terminalLabel=t.label);let n=t.terminalType.PATTERN;return t.terminalType.PATTERN&&(r.pattern=zo(n)?n.source:n),r}else{if(t instanceof as)return{type:"Rule",name:t.name,orgText:t.orgText,definition:e(t.definition)};throw Error("non exhaustive match")}}}var oo,on,as,Dn,ln,Ln,Rn,Or,wn,Tn,kr,Ck=N(()=>{"use strict";qt();o(gPe,"tokenLabel");o(yPe,"hasTokenLabel");oo=class{static{o(this,"AbstractProduction")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){this._definition=e}accept(e){e.visit(this),Ae(this.definition,r=>{r.accept(e)})}},on=class extends oo{static{o(this,"NonTerminal")}constructor(e){super([]),this.idx=1,ma(this,Os(e,r=>r!==void 0))}set definition(e){}get definition(){return this.referencedRule!==void 0?this.referencedRule.definition:[]}accept(e){e.visit(this)}},as=class extends oo{static{o(this,"Rule")}constructor(e){super(e.definition),this.orgText="",ma(this,Os(e,r=>r!==void 0))}},Dn=class extends oo{static{o(this,"Alternative")}constructor(e){super(e.definition),this.ignoreAmbiguities=!1,ma(this,Os(e,r=>r!==void 0))}},ln=class extends oo{static{o(this,"Option")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},Ln=class extends oo{static{o(this,"RepetitionMandatory")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},Rn=class extends oo{static{o(this,"RepetitionMandatoryWithSeparator")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},Or=class extends oo{static{o(this,"Repetition")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},wn=class extends oo{static{o(this,"RepetitionWithSeparator")}constructor(e){super(e.definition),this.idx=1,ma(this,Os(e,r=>r!==void 0))}},Tn=class extends oo{static{o(this,"Alternation")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){super(e.definition),this.idx=1,this.ignoreAmbiguities=!1,this.hasPredicates=!1,ma(this,Os(e,r=>r!==void 0))}},kr=class{static{o(this,"Terminal")}constructor(e){this.idx=1,ma(this,Os(e,r=>r!==void 0))}accept(e){e.visit(this)}};o(Sk,"serializeGrammar");o(Pg,"serializeProduction")});var ss,Rae=N(()=>{"use strict";Ck();ss=class{static{o(this,"GAstVisitor")}visit(e){let r=e;switch(r.constructor){case on:return this.visitNonTerminal(r);case Dn:return this.visitAlternative(r);case ln:return this.visitOption(r);case Ln:return this.visitRepetitionMandatory(r);case Rn:return this.visitRepetitionMandatoryWithSeparator(r);case wn:return this.visitRepetitionWithSeparator(r);case Or:return this.visitRepetition(r);case Tn:return this.visitAlternation(r);case kr:return this.visitTerminal(r);case as:return this.visitRule(r);default:throw Error("non exhaustive match")}}visitNonTerminal(e){}visitAlternative(e){}visitOption(e){}visitRepetition(e){}visitRepetitionMandatory(e){}visitRepetitionMandatoryWithSeparator(e){}visitRepetitionWithSeparator(e){}visitAlternation(e){}visitTerminal(e){}visitRule(e){}}});function yN(t){return t instanceof Dn||t instanceof ln||t instanceof Or||t instanceof Ln||t instanceof Rn||t instanceof wn||t instanceof kr||t instanceof as}function sp(t,e=[]){return t instanceof ln||t instanceof Or||t instanceof wn?!0:t instanceof Tn?A2(t.definition,n=>sp(n,e)):t instanceof on&&qn(e,t)?!1:t instanceof oo?(t instanceof on&&e.push(t),Ma(t.definition,n=>sp(n,e))):!1}function vN(t){return t instanceof Tn}function Bs(t){if(t instanceof on)return"SUBRULE";if(t instanceof ln)return"OPTION";if(t instanceof Tn)return"OR";if(t instanceof Ln)return"AT_LEAST_ONE";if(t instanceof Rn)return"AT_LEAST_ONE_SEP";if(t instanceof wn)return"MANY_SEP";if(t instanceof Or)return"MANY";if(t instanceof kr)return"CONSUME";throw Error("non exhaustive match")}var Nae=N(()=>{"use strict";qt();Ck();o(yN,"isSequenceProd");o(sp,"isOptionalProd");o(vN,"isBranchingProd");o(Bs,"getProductionDslName")});var os=N(()=>{"use strict";Ck();Rae();Nae()});function Mae(t,e,r){return[new ln({definition:[new kr({terminalType:t.separator})].concat(t.definition)})].concat(e,r)}var Ou,Ak=N(()=>{"use strict";qt();os();Ou=class{static{o(this,"RestWalker")}walk(e,r=[]){Ae(e.definition,(n,i)=>{let a=gi(e.definition,i+1);if(n instanceof on)this.walkProdRef(n,a,r);else if(n instanceof kr)this.walkTerminal(n,a,r);else if(n instanceof Dn)this.walkFlat(n,a,r);else if(n instanceof ln)this.walkOption(n,a,r);else if(n instanceof Ln)this.walkAtLeastOne(n,a,r);else if(n instanceof Rn)this.walkAtLeastOneSep(n,a,r);else if(n instanceof wn)this.walkManySep(n,a,r);else if(n instanceof Or)this.walkMany(n,a,r);else if(n instanceof Tn)this.walkOr(n,a,r);else throw Error("non exhaustive match")})}walkTerminal(e,r,n){}walkProdRef(e,r,n){}walkFlat(e,r,n){let i=r.concat(n);this.walk(e,i)}walkOption(e,r,n){let i=r.concat(n);this.walk(e,i)}walkAtLeastOne(e,r,n){let i=[new ln({definition:e.definition})].concat(r,n);this.walk(e,i)}walkAtLeastOneSep(e,r,n){let i=Mae(e,r,n);this.walk(e,i)}walkMany(e,r,n){let i=[new ln({definition:e.definition})].concat(r,n);this.walk(e,i)}walkManySep(e,r,n){let i=Mae(e,r,n);this.walk(e,i)}walkOr(e,r,n){let i=r.concat(n);Ae(e.definition,a=>{let s=new Dn({definition:[a]});this.walk(s,i)})}};o(Mae,"restForRepetitionWithSeparator")});function op(t){if(t instanceof on)return op(t.referencedRule);if(t instanceof kr)return bPe(t);if(yN(t))return vPe(t);if(vN(t))return xPe(t);throw Error("non exhaustive match")}function vPe(t){let e=[],r=t.definition,n=0,i=r.length>n,a,s=!0;for(;i&&s;)a=r[n],s=sp(a),e=e.concat(op(a)),n=n+1,i=r.length>n;return Bm(e)}function xPe(t){let e=Je(t.definition,r=>op(r));return Bm(qr(e))}function bPe(t){return[t.terminalType]}var xN=N(()=>{"use strict";qt();os();o(op,"first");o(vPe,"firstForSequence");o(xPe,"firstForBranching");o(bPe,"firstForTerminal")});var _k,bN=N(()=>{"use strict";_k="_~IN~_"});function Iae(t){let e={};return Ae(t,r=>{let n=new wN(r).startWalking();ma(e,n)}),e}function wPe(t,e){return t.name+e+_k}var wN,Oae=N(()=>{"use strict";Ak();xN();qt();bN();os();wN=class extends Ou{static{o(this,"ResyncFollowsWalker")}constructor(e){super(),this.topProd=e,this.follows={}}startWalking(){return this.walk(this.topProd),this.follows}walkTerminal(e,r,n){}walkProdRef(e,r,n){let i=wPe(e.referencedRule,e.idx)+this.topProd.name,a=r.concat(n),s=new Dn({definition:a}),l=op(s);this.follows[i]=l}};o(Iae,"computeAllProdsFollows");o(wPe,"buildBetweenProdsFollowPrefix")});function Bg(t){let e=t.toString();if(Dk.hasOwnProperty(e))return Dk[e];{let r=TPe.pattern(e);return Dk[e]=r,r}}function Pae(){Dk={}}var Dk,TPe,Lk=N(()=>{"use strict";j2();Dk={},TPe=new np;o(Bg,"getRegExpAst");o(Pae,"clearRegExpParserCache")});function $ae(t,e=!1){try{let r=Bg(t);return TN(r.value,{},r.flags.ignoreCase)}catch(r){if(r.message===Fae)e&&ex(`${nx} Unable to optimize: < ${t.toString()} >
702 + Complement Sets cannot be automatically optimized.
703 + This will disable the lexer's first char optimizations.
704 + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{let n="";e&&(n=`
705 + This will disable the lexer's first char optimizations.
706 + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),Ig(`${nx}
707 + Failed parsing: < ${t.toString()} >
708 + Using the @chevrotain/regexp-to-ast library
709 + Please open an issue at: https://github.com/chevrotain/chevrotain/issues`+n)}}return[]}function TN(t,e,r){switch(t.type){case"Disjunction":for(let i=0;i<t.value.length;i++)TN(t.value[i],e,r);break;case"Alternative":let n=t.value;for(let i=0;i<n.length;i++){let a=n[i];switch(a.type){case"EndAnchor":case"GroupBackReference":case"Lookahead":case"NegativeLookahead":case"StartAnchor":case"WordBoundary":case"NonWordBoundary":continue}let s=a;switch(s.type){case"Character":Rk(s.value,e,r);break;case"Set":if(s.complement===!0)throw Error(Fae);Ae(s.value,u=>{if(typeof u=="number")Rk(u,e,r);else{let h=u;if(r===!0)for(let f=h.from;f<=h.to;f++)Rk(f,e,r);else{for(let f=h.from;f<=h.to&&f<Fg;f++)Rk(f,e,r);if(h.to>=Fg){let f=h.from>=Fg?h.from:Fg,d=h.to,p=Ic(f),m=Ic(d);for(let g=p;g<=m;g++)e[g]=g}}}});break;case"Group":TN(s.value,e,r);break;default:throw Error("Non Exhaustive Match")}let l=s.quantifier!==void 0&&s.quantifier.atLeast===0;if(s.type==="Group"&&kN(s)===!1||s.type!=="Group"&&l===!1)break}break;default:throw Error("non exhaustive match!")}return br(e)}function Rk(t,e,r){let n=Ic(t);e[n]=n,r===!0&&kPe(t,e)}function kPe(t,e){let r=String.fromCharCode(t),n=r.toUpperCase();if(n!==r){let i=Ic(n.charCodeAt(0));e[i]=i}else{let i=r.toLowerCase();if(i!==r){let a=Ic(i.charCodeAt(0));e[a]=a}}}function Bae(t,e){return ns(t.value,r=>{if(typeof r=="number")return qn(e,r);{let n=r;return ns(e,i=>n.from<=i&&i<=n.to)!==void 0}})}function kN(t){let e=t.quantifier;return e&&e.atLeast===0?!0:t.value?Pt(t.value)?Ma(t.value,kN):kN(t.value):!1}function Nk(t,e){if(e instanceof RegExp){let r=Bg(e),n=new EN(t);return n.visit(r),n.found}else return ns(e,r=>qn(t,r.charCodeAt(0)))!==void 0}var Fae,nx,EN,zae=N(()=>{"use strict";j2();qt();Og();Lk();SN();Fae="Complement Sets are not supported for first char optimization",nx=`Unable to use "first char" lexer optimizations:
710 +`;o($ae,"getOptimizedStartCodesIndices");o(TN,"firstCharOptimizedIndices");o(Rk,"addOptimizedIdxToResult");o(kPe,"handleIgnoreCase");o(Bae,"findCode");o(kN,"isWholeOptional");EN=class extends Mc{static{o(this,"CharCodeFinder")}constructor(e){super(),this.targetCharCodes=e,this.found=!1}visitChildren(e){if(this.found!==!0){switch(e.type){case"Lookahead":this.visitLookahead(e);return;case"NegativeLookahead":this.visitNegativeLookahead(e);return}super.visitChildren(e)}}visitCharacter(e){qn(this.targetCharCodes,e.value)&&(this.found=!0)}visitSet(e){e.complement?Bae(e,this.targetCharCodes)===void 0&&(this.found=!0):Bae(e,this.targetCharCodes)!==void 0&&(this.found=!0)}};o(Nk,"canMatchCharCode")});function Uae(t,e){e=Qh(e,{useSticky:AN,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",`
711 +`],tracer:o((b,w)=>w(),"tracer")});let r=e.tracer;r("initCharCodeToOptimizedIndexMap",()=>{GPe()});let n;r("Reject Lexer.NA",()=>{n=Jh(t,b=>b[lp]===Xn.NA)});let i=!1,a;r("Transform Patterns",()=>{i=!1,a=Je(n,b=>{let w=b[lp];if(zo(w)){let C=w.source;return C.length===1&&C!=="^"&&C!=="$"&&C!=="."&&!w.ignoreCase?C:C.length===2&&C[0]==="\\"&&!qn(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],C[1])?C[1]:e.useSticky?Vae(w):Gae(w)}else{if(Si(w))return i=!0,{exec:w};if(typeof w=="object")return i=!0,w;if(typeof w=="string"){if(w.length===1)return w;{let C=w.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),T=new RegExp(C);return e.useSticky?Vae(T):Gae(T)}}else throw Error("non exhaustive match")}})});let s,l,u,h,f;r("misc mapping",()=>{s=Je(n,b=>b.tokenTypeIdx),l=Je(n,b=>{let w=b.GROUP;if(w!==Xn.SKIPPED){if(yi(w))return w;if(pr(w))return!1;throw Error("non exhaustive match")}}),u=Je(n,b=>{let w=b.LONGER_ALT;if(w)return Pt(w)?Je(w,T=>UT(n,T)):[UT(n,w)]}),h=Je(n,b=>b.PUSH_MODE),f=Je(n,b=>Bt(b,"POP_MODE"))});let d;r("Line Terminator Handling",()=>{let b=Qae(e.lineTerminatorCharacters);d=Je(n,w=>!1),e.positionTracking!=="onlyOffset"&&(d=Je(n,w=>Bt(w,"LINE_BREAKS")?!!w.LINE_BREAKS:Kae(w,b)===!1&&Nk(b,w.PATTERN)))});let p,m,g,y;r("Misc Mapping #2",()=>{p=Je(n,Xae),m=Je(a,$Pe),g=Xr(n,(b,w)=>{let C=w.GROUP;return yi(C)&&C!==Xn.SKIPPED&&(b[C]=[]),b},{}),y=Je(a,(b,w)=>({pattern:a[w],longerAlt:u[w],canLineTerminator:d[w],isCustom:p[w],short:m[w],group:l[w],push:h[w],pop:f[w],tokenTypeIdx:s[w],tokenType:n[w]}))});let v=!0,x=[];return e.safeMode||r("First Char Optimization",()=>{x=Xr(n,(b,w,C)=>{if(typeof w.PATTERN=="string"){let T=w.PATTERN.charCodeAt(0),E=Ic(T);CN(b,E,y[C])}else if(Pt(w.START_CHARS_HINT)){let T;Ae(w.START_CHARS_HINT,E=>{let A=typeof E=="string"?E.charCodeAt(0):E,S=Ic(A);T!==S&&(T=S,CN(b,S,y[C]))})}else if(zo(w.PATTERN))if(w.PATTERN.unicode)v=!1,e.ensureOptimizations&&Ig(`${nx} Unable to analyze < ${w.PATTERN.toString()} > pattern.
712 + The regexp unicode flag is not currently supported by the regexp-to-ast library.
713 + This will disable the lexer's first char optimizations.
714 + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{let T=$ae(w.PATTERN,e.ensureOptimizations);ur(T)&&(v=!1),Ae(T,E=>{CN(b,E,y[C])})}else e.ensureOptimizations&&Ig(`${nx} TokenType: <${w.name}> is using a custom token pattern without providing <start_chars_hint> parameter.
715 + This will disable the lexer's first char optimizations.
716 + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),v=!1;return b},[])}),{emptyGroups:g,patternIdxToConfig:y,charCodeToPatternIdxToConfig:x,hasCustom:i,canBeOptimized:v}}function Hae(t,e){let r=[],n=SPe(t);r=r.concat(n.errors);let i=CPe(n.valid),a=i.valid;return r=r.concat(i.errors),r=r.concat(EPe(a)),r=r.concat(IPe(a)),r=r.concat(OPe(a,e)),r=r.concat(PPe(a)),r}function EPe(t){let e=[],r=Yr(t,n=>zo(n[lp]));return e=e.concat(_Pe(r)),e=e.concat(RPe(r)),e=e.concat(NPe(r)),e=e.concat(MPe(r)),e=e.concat(DPe(r)),e}function SPe(t){let e=Yr(t,i=>!Bt(i,lp)),r=Je(e,i=>({message:"Token Type: ->"+i.name+"<- missing static 'PATTERN' property",type:Yn.MISSING_PATTERN,tokenTypes:[i]})),n=Zh(t,e);return{errors:r,valid:n}}function CPe(t){let e=Yr(t,i=>{let a=i[lp];return!zo(a)&&!Si(a)&&!Bt(a,"exec")&&!yi(a)}),r=Je(e,i=>({message:"Token Type: ->"+i.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:Yn.INVALID_PATTERN,tokenTypes:[i]})),n=Zh(t,e);return{errors:r,valid:n}}function _Pe(t){class e extends Mc{static{o(this,"EndAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitEndAnchor(a){this.found=!0}}let r=Yr(t,i=>{let a=i.PATTERN;try{let s=Bg(a),l=new e;return l.visit(s),l.found}catch{return APe.test(a.source)}});return Je(r,i=>({message:`Unexpected RegExp Anchor Error:
717 + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain end of input anchor '$'
718 + See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:Yn.EOI_ANCHOR_FOUND,tokenTypes:[i]}))}function DPe(t){let e=Yr(t,n=>n.PATTERN.test(""));return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' must not match an empty string",type:Yn.EMPTY_MATCH_PATTERN,tokenTypes:[n]}))}function RPe(t){class e extends Mc{static{o(this,"StartAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitStartAnchor(a){this.found=!0}}let r=Yr(t,i=>{let a=i.PATTERN;try{let s=Bg(a),l=new e;return l.visit(s),l.found}catch{return LPe.test(a.source)}});return Je(r,i=>({message:`Unexpected RegExp Anchor Error:
719 + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain start of input anchor '^'
720 + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:Yn.SOI_ANCHOR_FOUND,tokenTypes:[i]}))}function NPe(t){let e=Yr(t,n=>{let i=n[lp];return i instanceof RegExp&&(i.multiline||i.global)});return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:Yn.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[n]}))}function MPe(t){let e=[],r=Je(t,a=>Xr(t,(s,l)=>(a.PATTERN.source===l.PATTERN.source&&!qn(e,l)&&l.PATTERN!==Xn.NA&&(e.push(l),s.push(l)),s),[]));r=Tc(r);let n=Yr(r,a=>a.length>1);return Je(n,a=>{let s=Je(a,u=>u.name);return{message:`The same RegExp pattern ->${ia(a).PATTERN}<-has been used in all of the following Token Types: ${s.join(", ")} <-`,type:Yn.DUPLICATE_PATTERNS_FOUND,tokenTypes:a}})}function IPe(t){let e=Yr(t,n=>{if(!Bt(n,"GROUP"))return!1;let i=n.GROUP;return i!==Xn.SKIPPED&&i!==Xn.NA&&!yi(i)});return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:Yn.INVALID_GROUP_TYPE_FOUND,tokenTypes:[n]}))}function OPe(t,e){let r=Yr(t,i=>i.PUSH_MODE!==void 0&&!qn(e,i.PUSH_MODE));return Je(r,i=>({message:`Token Type: ->${i.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${i.PUSH_MODE}<-which does not exist`,type:Yn.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[i]}))}function PPe(t){let e=[],r=Xr(t,(n,i,a)=>{let s=i.PATTERN;return s===Xn.NA||(yi(s)?n.push({str:s,idx:a,tokenType:i}):zo(s)&&FPe(s)&&n.push({str:s.source,idx:a,tokenType:i})),n},[]);return Ae(t,(n,i)=>{Ae(r,({str:a,idx:s,tokenType:l})=>{if(i<s&&BPe(a,n.PATTERN)){let u=`Token: ->${l.name}<- can never be matched.
721 +Because it appears AFTER the Token Type ->${n.name}<-in the lexer's definition.
722 +See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:u,type:Yn.UNREACHABLE_PATTERN,tokenTypes:[n,l]})}})}),e}function BPe(t,e){if(zo(e)){let r=e.exec(t);return r!==null&&r.index===0}else{if(Si(e))return e(t,0,[],{});if(Bt(e,"exec"))return e.exec(t,0,[],{});if(typeof e=="string")return e===t;throw Error("non exhaustive match")}}function FPe(t){return ns([".","\\","[","]","|","^","$","(",")","?","*","+","{"],r=>t.source.indexOf(r)!==-1)===void 0}function Gae(t){let e=t.ignoreCase?"i":"";return new RegExp(`^(?:${t.source})`,e)}function Vae(t){let e=t.ignoreCase?"iy":"y";return new RegExp(`${t.source}`,e)}function Wae(t,e,r){let n=[];return Bt(t,$g)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+$g+`> property in its definition
723 +`,type:Yn.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),Bt(t,Mk)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+Mk+`> property in its definition
724 +`,type:Yn.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),Bt(t,Mk)&&Bt(t,$g)&&!Bt(t.modes,t.defaultMode)&&n.push({message:`A MultiMode Lexer cannot be initialized with a ${$g}: <${t.defaultMode}>which does not exist
725 +`,type:Yn.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),Bt(t,Mk)&&Ae(t.modes,(i,a)=>{Ae(i,(s,l)=>{if(pr(s))n.push({message:`A Lexer cannot be initialized using an undefined Token Type. Mode:<${a}> at index: <${l}>
726 +`,type:Yn.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED});else if(Bt(s,"LONGER_ALT")){let u=Pt(s.LONGER_ALT)?s.LONGER_ALT:[s.LONGER_ALT];Ae(u,h=>{!pr(h)&&!qn(i,h)&&n.push({message:`A MultiMode Lexer cannot be initialized with a longer_alt <${h.name}> on token <${s.name}> outside of mode <${a}>
727 +`,type:Yn.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE})})}})}),n}function qae(t,e,r){let n=[],i=!1,a=Tc(qr(br(t.modes))),s=Jh(a,u=>u[lp]===Xn.NA),l=Qae(r);return e&&Ae(s,u=>{let h=Kae(u,l);if(h!==!1){let d={message:zPe(u,h),type:h.issue,tokenType:u};n.push(d)}else Bt(u,"LINE_BREAKS")?u.LINE_BREAKS===!0&&(i=!0):Nk(l,u.PATTERN)&&(i=!0)}),e&&!i&&n.push({message:`Warning: No LINE_BREAKS Found.
728 + This Lexer has been defined to track line and column information,
729 + But none of the Token Types can be identified as matching a line terminator.
730 + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS
731 + for details.`,type:Yn.NO_LINE_BREAKS_FLAGS}),n}function Yae(t){let e={},r=zr(t);return Ae(r,n=>{let i=t[n];if(Pt(i))e[n]=[];else throw Error("non exhaustive match")}),e}function Xae(t){let e=t.PATTERN;if(zo(e))return!1;if(Si(e))return!0;if(Bt(e,"exec"))return!0;if(yi(e))return!1;throw Error("non exhaustive match")}function $Pe(t){return yi(t)&&t.length===1?t.charCodeAt(0):!1}function Kae(t,e){if(Bt(t,"LINE_BREAKS"))return!1;if(zo(t.PATTERN)){try{Nk(e,t.PATTERN)}catch(r){return{issue:Yn.IDENTIFY_TERMINATOR,errMsg:r.message}}return!1}else{if(yi(t.PATTERN))return!1;if(Xae(t))return{issue:Yn.CUSTOM_LINE_BREAK};throw Error("non exhaustive match")}}function zPe(t,e){if(e.issue===Yn.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern.
732 + The problem is in the <${t.name}> Token Type
733 + Root cause: ${e.errMsg}.
734 + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;if(e.issue===Yn.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the <line_breaks> option.
735 + The problem is in the <${t.name}> Token Type
736 + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;throw Error("non exhaustive match")}function Qae(t){return Je(t,r=>yi(r)?r.charCodeAt(0):r)}function CN(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}function Ic(t){return t<Fg?t:Ik[t]}function GPe(){if(ur(Ik)){Ik=new Array(65536);for(let t=0;t<65536;t++)Ik[t]=t>255?255+~~(t/255):t}}var lp,$g,Mk,AN,APe,LPe,jae,Fg,Ik,SN=N(()=>{"use strict";j2();ix();qt();Og();zae();Lk();lp="PATTERN",$g="defaultMode",Mk="modes",AN=typeof new RegExp("(?:)").sticky=="boolean";o(Uae,"analyzeTokenTypes");o(Hae,"validatePatterns");o(EPe,"validateRegExpPattern");o(SPe,"findMissingPatterns");o(CPe,"findInvalidPatterns");APe=/[^\\][$]/;o(_Pe,"findEndOfInputAnchor");o(DPe,"findEmptyMatchRegExps");LPe=/[^\\[][\^]|^\^/;o(RPe,"findStartOfInputAnchor");o(NPe,"findUnsupportedFlags");o(MPe,"findDuplicatePatterns");o(IPe,"findInvalidGroupType");o(OPe,"findModesThatDoNotExist");o(PPe,"findUnreachablePatterns");o(BPe,"testTokenType");o(FPe,"noMetaChar");o(Gae,"addStartOfInput");o(Vae,"addStickyFlag");o(Wae,"performRuntimeChecks");o(qae,"performWarningRuntimeChecks");o(Yae,"cloneEmptyGroups");o(Xae,"isCustomPattern");o($Pe,"isShortPattern");jae={test:o(function(t){let e=t.length;for(let r=this.lastIndex;r<e;r++){let n=t.charCodeAt(r);if(n===10)return this.lastIndex=r+1,!0;if(n===13)return t.charCodeAt(r+1)===10?this.lastIndex=r+2:this.lastIndex=r+1,!0}return!1},"test"),lastIndex:0};o(Kae,"checkLineBreaksIssues");o(zPe,"buildLineBreakIssueMessage");o(Qae,"getCharCodes");o(CN,"addToMapOfArrays");Fg=256,Ik=[];o(Ic,"charCodeToOptimizedIndex");o(GPe,"initCharCodeToOptimizedIndexMap")});function Pu(t,e){let r=t.tokenTypeIdx;return r===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[r]===!0}function zg(t,e){return t.tokenTypeIdx===e.tokenTypeIdx}function Bu(t){let e=VPe(t);UPe(e),WPe(e),HPe(e),Ae(e,r=>{r.isParent=r.categoryMatches.length>0})}function VPe(t){let e=an(t),r=t,n=!0;for(;n;){r=Tc(qr(Je(r,a=>a.CATEGORIES)));let i=Zh(r,e);e=e.concat(i),ur(i)?n=!1:r=i}return e}function UPe(t){Ae(t,e=>{_N(e)||(ese[Zae]=e,e.tokenTypeIdx=Zae++),Jae(e)&&!Pt(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Jae(e)||(e.CATEGORIES=[]),qPe(e)||(e.categoryMatches=[]),YPe(e)||(e.categoryMatchesMap={})})}function HPe(t){Ae(t,e=>{e.categoryMatches=[],Ae(e.categoryMatchesMap,(r,n)=>{e.categoryMatches.push(ese[n].tokenTypeIdx)})})}function WPe(t){Ae(t,e=>{tse([],e)})}function tse(t,e){Ae(t,r=>{e.categoryMatchesMap[r.tokenTypeIdx]=!0}),Ae(e.CATEGORIES,r=>{let n=t.concat(e);qn(n,r)||tse(n,r)})}function _N(t){return Bt(t,"tokenTypeIdx")}function Jae(t){return Bt(t,"CATEGORIES")}function qPe(t){return Bt(t,"categoryMatches")}function YPe(t){return Bt(t,"categoryMatchesMap")}function rse(t){return Bt(t,"tokenTypeIdx")}var Zae,ese,cp=N(()=>{"use strict";qt();o(Pu,"tokenStructuredMatcher");o(zg,"tokenStructuredMatcherNoCategories");Zae=1,ese={};o(Bu,"augmentTokenTypes");o(VPe,"expandCategories");o(UPe,"assignTokenDefaultProps");o(HPe,"assignCategoriesTokensProp");o(WPe,"assignCategoriesMapProp");o(tse,"singleAssignCategoriesToksMap");o(_N,"hasShortKeyProperty");o(Jae,"hasCategoriesProperty");o(qPe,"hasExtendingTokensTypesProperty");o(YPe,"hasExtendingTokensTypesMapProperty");o(rse,"isTokenType")});var Gg,DN=N(()=>{"use strict";Gg={buildUnableToPopLexerModeMessage(t){return`Unable to pop Lexer Mode after encountering Token ->${t.image}<- The Mode Stack is empty`},buildUnexpectedCharactersMessage(t,e,r,n,i){return`unexpected character: ->${t.charAt(e)}<- at offset: ${e}, skipped ${r} characters.`}}});var Yn,ax,Xn,ix=N(()=>{"use strict";SN();qt();Og();cp();DN();Lk();(function(t){t[t.MISSING_PATTERN=0]="MISSING_PATTERN",t[t.INVALID_PATTERN=1]="INVALID_PATTERN",t[t.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",t[t.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",t[t.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",t[t.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",t[t.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",t[t.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",t[t.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",t[t.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",t[t.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",t[t.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",t[t.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",t[t.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",t[t.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",t[t.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",t[t.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK",t[t.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE=17]="MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"})(Yn||(Yn={}));ax={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[`
737 +`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:Gg,traceInitPerf:!1,skipValidations:!1,recoveryEnabled:!0};Object.freeze(ax);Xn=class{static{o(this,"Lexer")}constructor(e,r=ax){if(this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},this.TRACE_INIT=(i,a)=>{if(this.traceInitPerf===!0){this.traceInitIndent++;let s=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent<this.traceInitMaxIdent&&console.log(`${s}--> <${i}>`);let{time:l,value:u}=tx(a),h=l>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&h(`${s}<-- <${i}> time: ${l}ms`),this.traceInitIndent--,u}else return a()},typeof r=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object.
738 +a boolean 2nd argument is no longer supported`);this.config=ma({},ax,r);let n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",()=>{let i,a=!0;this.TRACE_INIT("Lexer Config handling",()=>{if(this.config.lineTerminatorsPattern===ax.lineTerminatorsPattern)this.config.lineTerminatorsPattern=jae;else if(this.config.lineTerminatorCharacters===ax.lineTerminatorCharacters)throw Error(`Error: Missing <lineTerminatorCharacters> property on the Lexer config.
739 + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(r.safeMode&&r.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');this.trackStartLines=/full|onlyStart/i.test(this.config.positionTracking),this.trackEndLines=/full/i.test(this.config.positionTracking),Pt(e)?i={modes:{defaultMode:an(e)},defaultMode:$g}:(a=!1,i=an(e))}),this.config.skipValidations===!1&&(this.TRACE_INIT("performRuntimeChecks",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(Wae(i,this.trackStartLines,this.config.lineTerminatorCharacters))}),this.TRACE_INIT("performWarningRuntimeChecks",()=>{this.lexerDefinitionWarning=this.lexerDefinitionWarning.concat(qae(i,this.trackStartLines,this.config.lineTerminatorCharacters))})),i.modes=i.modes?i.modes:{},Ae(i.modes,(l,u)=>{i.modes[u]=Jh(l,h=>pr(h))});let s=zr(i.modes);if(Ae(i.modes,(l,u)=>{this.TRACE_INIT(`Mode: <${u}> processing`,()=>{if(this.modes.push(u),this.config.skipValidations===!1&&this.TRACE_INIT("validatePatterns",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(Hae(l,s))}),ur(this.lexerDefinitionErrors)){Bu(l);let h;this.TRACE_INIT("analyzeTokenTypes",()=>{h=Uae(l,{lineTerminatorCharacters:this.config.lineTerminatorCharacters,positionTracking:r.positionTracking,ensureOptimizations:r.ensureOptimizations,safeMode:r.safeMode,tracer:this.TRACE_INIT})}),this.patternIdxToConfig[u]=h.patternIdxToConfig,this.charCodeToPatternIdxToConfig[u]=h.charCodeToPatternIdxToConfig,this.emptyGroups=ma({},this.emptyGroups,h.emptyGroups),this.hasCustom=h.hasCustom||this.hasCustom,this.canModeBeOptimized[u]=h.canBeOptimized}})}),this.defaultMode=i.defaultMode,!ur(this.lexerDefinitionErrors)&&!this.config.deferDefinitionErrorsHandling){let u=Je(this.lexerDefinitionErrors,h=>h.message).join(`-----------------------
740 +`);throw new Error(`Errors detected in definition of Lexer:
741 +`+u)}Ae(this.lexerDefinitionWarning,l=>{ex(l.message)}),this.TRACE_INIT("Choosing sub-methods implementations",()=>{if(AN?(this.chopInput=ta,this.match=this.matchWithTest):(this.updateLastIndex=ni,this.match=this.matchWithExec),a&&(this.handleModes=ni),this.trackStartLines===!1&&(this.computeNewColumn=ta),this.trackEndLines===!1&&(this.updateTokenEndLineColumnLocation=ni),/full/i.test(this.config.positionTracking))this.createTokenInstance=this.createFullToken;else if(/onlyStart/i.test(this.config.positionTracking))this.createTokenInstance=this.createStartOnlyToken;else if(/onlyOffset/i.test(this.config.positionTracking))this.createTokenInstance=this.createOffsetOnlyToken;else throw Error(`Invalid <positionTracking> config option: "${this.config.positionTracking}"`);this.hasCustom?(this.addToken=this.addTokenUsingPush,this.handlePayload=this.handlePayloadWithCustom):(this.addToken=this.addTokenUsingMemberAccess,this.handlePayload=this.handlePayloadNoCustom)}),this.TRACE_INIT("Failed Optimization Warnings",()=>{let l=Xr(this.canModeBeOptimized,(u,h,f)=>(h===!1&&u.push(f),u),[]);if(r.ensureOptimizations&&!ur(l))throw Error(`Lexer Modes: < ${l.join(", ")} > cannot be optimized.
742 + Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.
743 + Or inspect the console log for details on how to resolve these issues.`)}),this.TRACE_INIT("clearRegExpParserCache",()=>{Pae()}),this.TRACE_INIT("toFastProperties",()=>{rx(this)})})}tokenize(e,r=this.defaultMode){if(!ur(this.lexerDefinitionErrors)){let i=Je(this.lexerDefinitionErrors,a=>a.message).join(`-----------------------
744 +`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer:
745 +`+i)}return this.tokenizeInternal(e,r)}tokenizeInternal(e,r){let n,i,a,s,l,u,h,f,d,p,m,g,y,v,x,b,w=e,C=w.length,T=0,E=0,A=this.hasCustom?0:Math.floor(e.length/10),S=new Array(A),_=[],I=this.trackStartLines?1:void 0,D=this.trackStartLines?1:void 0,k=Yae(this.emptyGroups),L=this.trackStartLines,R=this.config.lineTerminatorsPattern,O=0,M=[],B=[],F=[],P=[];Object.freeze(P);let z;function $(){return M}o($,"getPossiblePatternsSlow");function H(le){let he=Ic(le),K=B[he];return K===void 0?P:K}o(H,"getPossiblePatternsOptimized");let Q=o(le=>{if(F.length===1&&le.tokenType.PUSH_MODE===void 0){let he=this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(le);_.push({offset:le.startOffset,line:le.startLine,column:le.startColumn,length:le.image.length,message:he})}else{F.pop();let he=ga(F);M=this.patternIdxToConfig[he],B=this.charCodeToPatternIdxToConfig[he],O=M.length;let K=this.canModeBeOptimized[he]&&this.config.safeMode===!1;B&&K?z=H:z=$}},"pop_mode");function j(le){F.push(le),B=this.charCodeToPatternIdxToConfig[le],M=this.patternIdxToConfig[le],O=M.length,O=M.length;let he=this.canModeBeOptimized[le]&&this.config.safeMode===!1;B&&he?z=H:z=$}o(j,"push_mode"),j.call(this,r);let ie,ne=this.config.recoveryEnabled;for(;T<C;){u=null;let le=w.charCodeAt(T),he=z(le),K=he.length;for(n=0;n<K;n++){ie=he[n];let X=ie.pattern;h=null;let te=ie.short;if(te!==!1?le===te&&(u=X):ie.isCustom===!0?(b=X.exec(w,T,S,k),b!==null?(u=b[0],b.payload!==void 0&&(h=b.payload)):u=null):(this.updateLastIndex(X,T),u=this.match(X,e,T)),u!==null){if(l=ie.longerAlt,l!==void 0){let J=l.length;for(a=0;a<J;a++){let se=M[l[a]],ue=se.pattern;if(f=null,se.isCustom===!0?(b=ue.exec(w,T,S,k),b!==null?(s=b[0],b.payload!==void 0&&(f=b.payload)):s=null):(this.updateLastIndex(ue,T),s=this.match(ue,e,T)),s&&s.length>u.length){u=s,h=f,ie=se;break}}}break}}if(u!==null){if(d=u.length,p=ie.group,p!==void 0&&(m=ie.tokenTypeIdx,g=this.createTokenInstance(u,T,m,ie.tokenType,I,D,d),this.handlePayload(g,h),p===!1?E=this.addToken(S,E,g):k[p].push(g)),e=this.chopInput(e,d),T=T+d,D=this.computeNewColumn(D,d),L===!0&&ie.canLineTerminator===!0){let X=0,te,J;R.lastIndex=0;do te=R.test(u),te===!0&&(J=R.lastIndex-1,X++);while(te===!0);X!==0&&(I=I+X,D=d-J,this.updateTokenEndLineColumnLocation(g,p,J,X,I,D,d))}this.handleModes(ie,Q,j,g)}else{let X=T,te=I,J=D,se=ne===!1;for(;se===!1&&T<C;)for(e=this.chopInput(e,1),T++,i=0;i<O;i++){let ue=M[i],Z=ue.pattern,Se=ue.short;if(Se!==!1?w.charCodeAt(T)===Se&&(se=!0):ue.isCustom===!0?se=Z.exec(w,T,S,k)!==null:(this.updateLastIndex(Z,T),se=Z.exec(e)!==null),se===!0)break}if(y=T-X,D=this.computeNewColumn(D,y),x=this.config.errorMessageProvider.buildUnexpectedCharactersMessage(w,X,y,te,J),_.push({offset:X,line:te,column:J,length:y,message:x}),ne===!1)break}}return this.hasCustom||(S.length=E),{tokens:S,groups:k,errors:_}}handleModes(e,r,n,i){if(e.pop===!0){let a=e.push;r(i),a!==void 0&&n.call(this,a)}else e.push!==void 0&&n.call(this,e.push)}chopInput(e,r){return e.substring(r)}updateLastIndex(e,r){e.lastIndex=r}updateTokenEndLineColumnLocation(e,r,n,i,a,s,l){let u,h;r!==void 0&&(u=n===l-1,h=u?-1:0,i===1&&u===!0||(e.endLine=a+h,e.endColumn=s-1+-h))}computeNewColumn(e,r){return e+r}createOffsetOnlyToken(e,r,n,i){return{image:e,startOffset:r,tokenTypeIdx:n,tokenType:i}}createStartOnlyToken(e,r,n,i,a,s){return{image:e,startOffset:r,startLine:a,startColumn:s,tokenTypeIdx:n,tokenType:i}}createFullToken(e,r,n,i,a,s,l){return{image:e,startOffset:r,endOffset:r+l-1,startLine:a,endLine:a,startColumn:s,endColumn:s+l-1,tokenTypeIdx:n,tokenType:i}}addTokenUsingPush(e,r,n){return e.push(n),r}addTokenUsingMemberAccess(e,r,n){return e[r]=n,r++,r}handlePayloadNoCustom(e,r){}handlePayloadWithCustom(e,r){r!==null&&(e.payload=r)}matchWithTest(e,r,n){return e.test(r)===!0?r.substring(n,e.lastIndex):null}matchWithExec(e,r){let n=e.exec(r);return n!==null?n[0]:null}};Xn.SKIPPED="This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.";Xn.NA=/NOT_APPLICABLE/});function Fu(t){return LN(t)?t.LABEL:t.name}function LN(t){return yi(t.LABEL)&&t.LABEL!==""}function of(t){return jPe(t)}function jPe(t){let e=t.pattern,r={};if(r.name=t.name,pr(e)||(r.PATTERN=e),Bt(t,XPe))throw`The parent property is no longer supported.
746 +See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return Bt(t,nse)&&(r.CATEGORIES=t[nse]),Bu([r]),Bt(t,ise)&&(r.LABEL=t[ise]),Bt(t,ase)&&(r.GROUP=t[ase]),Bt(t,ose)&&(r.POP_MODE=t[ose]),Bt(t,sse)&&(r.PUSH_MODE=t[sse]),Bt(t,lse)&&(r.LONGER_ALT=t[lse]),Bt(t,cse)&&(r.LINE_BREAKS=t[cse]),Bt(t,use)&&(r.START_CHARS_HINT=t[use]),r}function $u(t,e,r,n,i,a,s,l){return{image:e,startOffset:r,endOffset:n,startLine:i,endLine:a,startColumn:s,endColumn:l,tokenTypeIdx:t.tokenTypeIdx,tokenType:t}}function sx(t,e){return Pu(t,e)}var XPe,nse,ise,ase,sse,ose,lse,cse,use,lo,up=N(()=>{"use strict";qt();ix();cp();o(Fu,"tokenLabel");o(LN,"hasTokenLabel");XPe="parent",nse="categories",ise="label",ase="group",sse="push_mode",ose="pop_mode",lse="longer_alt",cse="line_breaks",use="start_chars_hint";o(of,"createToken");o(jPe,"createTokenInternal");lo=of({name:"EOF",pattern:Xn.NA});Bu([lo]);o($u,"createTokenInstance");o(sx,"tokenMatcher")});var zu,hse,Pl,Vg=N(()=>{"use strict";up();qt();os();zu={buildMismatchTokenMessage({expected:t,actual:e,previous:r,ruleName:n}){return`Expecting ${LN(t)?`--> ${Fu(t)} <--`:`token of type --> ${t.name} <--`} but found --> '${e.image}' <--`},buildNotAllInputParsedMessage({firstRedundant:t,ruleName:e}){return"Redundant input, expecting EOF but found: "+t.image},buildNoViableAltMessage({expectedPathsPerAlt:t,actual:e,previous:r,customUserDescription:n,ruleName:i}){let a="Expecting: ",l=`
747 +but found: '`+ia(e).image+"'";if(n)return a+n+l;{let u=Xr(t,(p,m)=>p.concat(m),[]),h=Je(u,p=>`[${Je(p,m=>Fu(m)).join(", ")}]`),d=`one of these possible Token sequences:
748 +${Je(h,(p,m)=>` ${m+1}. ${p}`).join(`
749 +`)}`;return a+d+l}},buildEarlyExitMessage({expectedIterationPaths:t,actual:e,customUserDescription:r,ruleName:n}){let i="Expecting: ",s=`
750 +but found: '`+ia(e).image+"'";if(r)return i+r+s;{let u=`expecting at least one iteration which starts with one of these possible Token sequences::
751 + <${Je(t,h=>`[${Je(h,f=>Fu(f)).join(",")}]`).join(" ,")}>`;return i+u+s}}};Object.freeze(zu);hse={buildRuleNotFoundError(t,e){return"Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<-
752 +inside top level rule: ->`+t.name+"<-"}},Pl={buildDuplicateFoundError(t,e){function r(f){return f instanceof kr?f.terminalType.name:f instanceof on?f.nonTerminalName:""}o(r,"getExtraProductionArgument");let n=t.name,i=ia(e),a=i.idx,s=Bs(i),l=r(i),u=a>0,h=`->${s}${u?a:""}<- ${l?`with argument: ->${l}<-`:""}
753 + appears more than once (${e.length} times) in the top level rule: ->${n}<-.
754 + For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES
755 + `;return h=h.replace(/[ \t]+/g," "),h=h.replace(/\s\s+/g,`
756 +`),h},buildNamespaceConflictError(t){return`Namespace conflict found in grammar.
757 +The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${t.name}>.
758 +To resolve this make sure each Terminal and Non-Terminal names are unique
759 +This is easy to accomplish by using the convention that Terminal names start with an uppercase letter
760 +and Non-Terminal names start with a lower case letter.`},buildAlternationPrefixAmbiguityError(t){let e=Je(t.prefixPath,i=>Fu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx;return`Ambiguous alternatives: <${t.ambiguityIndices.join(" ,")}> due to common lookahead prefix
761 +in <OR${r}> inside <${t.topLevelRule.name}> Rule,
762 +<${e}> may appears as a prefix path in all these alternatives.
763 +See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX
764 +For Further details.`},buildAlternationAmbiguityError(t){let e=Je(t.prefixPath,i=>Fu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(" ,")}> in <OR${r}> inside <${t.topLevelRule.name}> Rule,
765 +<${e}> may appears as a prefix path in all these alternatives.
766 +`;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES
767 +For Further details.`,n},buildEmptyRepetitionError(t){let e=Bs(t.repetition);return t.repetition.idx!==0&&(e+=t.repetition.idx),`The repetition <${e}> within Rule <${t.topLevelRule.name}> can never consume any tokens.
768 +This could lead to an infinite loop.`},buildTokenNameError(t){return"deprecated"},buildEmptyAlternationError(t){return`Ambiguous empty alternative: <${t.emptyChoiceIdx+1}> in <OR${t.alternation.idx}> inside <${t.topLevelRule.name}> Rule.
769 +Only the last alternative may be an empty alternative.`},buildTooManyAlternativesError(t){return`An Alternation cannot have more than 256 alternatives:
770 +<OR${t.alternation.idx}> inside <${t.topLevelRule.name}> Rule.
771 + has ${t.alternation.definition.length+1} alternatives.`},buildLeftRecursionError(t){let e=t.topLevelRule.name,r=Je(t.leftRecursionPath,a=>a.name),n=`${e} --> ${r.concat([e]).join(" --> ")}`;return`Left Recursion found in grammar.
772 +rule: <${e}> can be invoked from itself (directly or indirectly)
773 +without consuming any Tokens. The grammar path that causes this is:
774 + ${n}
775 + To fix this refactor your grammar to remove the left recursion.
776 +see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`},buildInvalidRuleNameError(t){return"deprecated"},buildDuplicateRuleNameError(t){let e;return t.topLevelRule instanceof as?e=t.topLevelRule.name:e=t.topLevelRule,`Duplicate definition, rule: ->${e}<- is already defined in the grammar: ->${t.grammarName}<-`}}});function fse(t,e){let r=new RN(t,e);return r.resolveRefs(),r.errors}var RN,dse=N(()=>{"use strict";Fs();qt();os();o(fse,"resolveGrammar");RN=class extends ss{static{o(this,"GastRefResolverVisitor")}constructor(e,r){super(),this.nameToTopRule=e,this.errMsgProvider=r,this.errors=[]}resolveRefs(){Ae(br(this.nameToTopRule),e=>{this.currTopLevel=e,e.accept(this)})}visitNonTerminal(e){let r=this.nameToTopRule[e.nonTerminalName];if(r)e.referencedRule=r;else{let n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,e);this.errors.push({message:n,type:zi.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:e.nonTerminalName})}}}});function Fk(t,e,r=[]){r=an(r);let n=[],i=0;function a(l){return l.concat(gi(t,i+1))}o(a,"remainingPathWith");function s(l){let u=Fk(a(l),e,r);return n.concat(u)}for(o(s,"getAlternativesForProd");r.length<e&&i<t.length;){let l=t[i];if(l instanceof Dn)return s(l.definition);if(l instanceof on)return s(l.definition);if(l instanceof ln)n=s(l.definition);else if(l instanceof Ln){let u=l.definition.concat([new Or({definition:l.definition})]);return s(u)}else if(l instanceof Rn){let u=[new Dn({definition:l.definition}),new Or({definition:[new kr({terminalType:l.separator})].concat(l.definition)})];return s(u)}else if(l instanceof wn){let u=l.definition.concat([new Or({definition:[new kr({terminalType:l.separator})].concat(l.definition)})]);n=s(u)}else if(l instanceof Or){let u=l.definition.concat([new Or({definition:l.definition})]);n=s(u)}else{if(l instanceof Tn)return Ae(l.definition,u=>{ur(u.definition)===!1&&(n=s(u.definition))}),n;if(l instanceof kr)r.push(l.terminalType);else throw Error("non exhaustive match")}i++}return n.push({partialPath:r,suffixDef:gi(t,i)}),n}function $k(t,e,r,n){let i="EXIT_NONE_TERMINAL",a=[i],s="EXIT_ALTERNATIVE",l=!1,u=e.length,h=u-n-1,f=[],d=[];for(d.push({idx:-1,def:t,ruleStack:[],occurrenceStack:[]});!ur(d);){let p=d.pop();if(p===s){l&&ga(d).idx<=h&&d.pop();continue}let m=p.def,g=p.idx,y=p.ruleStack,v=p.occurrenceStack;if(ur(m))continue;let x=m[0];if(x===i){let b={idx:g,def:gi(m),ruleStack:Nu(y),occurrenceStack:Nu(v)};d.push(b)}else if(x instanceof kr)if(g<u-1){let b=g+1,w=e[b];if(r(w,x.terminalType)){let C={idx:b,def:gi(m),ruleStack:y,occurrenceStack:v};d.push(C)}}else if(g===u-1)f.push({nextTokenType:x.terminalType,nextTokenOccurrence:x.idx,ruleStack:y,occurrenceStack:v}),l=!0;else throw Error("non exhaustive match");else if(x instanceof on){let b=an(y);b.push(x.nonTerminalName);let w=an(v);w.push(x.idx);let C={idx:g,def:x.definition.concat(a,gi(m)),ruleStack:b,occurrenceStack:w};d.push(C)}else if(x instanceof ln){let b={idx:g,def:gi(m),ruleStack:y,occurrenceStack:v};d.push(b),d.push(s);let w={idx:g,def:x.definition.concat(gi(m)),ruleStack:y,occurrenceStack:v};d.push(w)}else if(x instanceof Ln){let b=new Or({definition:x.definition,idx:x.idx}),w=x.definition.concat([b],gi(m)),C={idx:g,def:w,ruleStack:y,occurrenceStack:v};d.push(C)}else if(x instanceof Rn){let b=new kr({terminalType:x.separator}),w=new Or({definition:[b].concat(x.definition),idx:x.idx}),C=x.definition.concat([w],gi(m)),T={idx:g,def:C,ruleStack:y,occurrenceStack:v};d.push(T)}else if(x instanceof wn){let b={idx:g,def:gi(m),ruleStack:y,occurrenceStack:v};d.push(b),d.push(s);let w=new kr({terminalType:x.separator}),C=new Or({definition:[w].concat(x.definition),idx:x.idx}),T=x.definition.concat([C],gi(m)),E={idx:g,def:T,ruleStack:y,occurrenceStack:v};d.push(E)}else if(x instanceof Or){let b={idx:g,def:gi(m),ruleStack:y,occurrenceStack:v};d.push(b),d.push(s);let w=new Or({definition:x.definition,idx:x.idx}),C=x.definition.concat([w],gi(m)),T={idx:g,def:C,ruleStack:y,occurrenceStack:v};d.push(T)}else if(x instanceof Tn)for(let b=x.definition.length-1;b>=0;b--){let w=x.definition[b],C={idx:g,def:w.definition.concat(gi(m)),ruleStack:y,occurrenceStack:v};d.push(C),d.push(s)}else if(x instanceof Dn)d.push({idx:g,def:x.definition.concat(gi(m)),ruleStack:y,occurrenceStack:v});else if(x instanceof as)d.push(KPe(x,g,y,v));else throw Error("non exhaustive match")}return f}function KPe(t,e,r,n){let i=an(r);i.push(t.name);let a=an(n);return a.push(1),{idx:e,def:t.definition,ruleStack:i,occurrenceStack:a}}var NN,Ok,Ug,Pk,ox,Bk,lx,cx=N(()=>{"use strict";qt();xN();Ak();os();NN=class extends Ou{static{o(this,"AbstractNextPossibleTokensWalker")}constructor(e,r){super(),this.topProd=e,this.path=r,this.possibleTokTypes=[],this.nextProductionName="",this.nextProductionOccurrence=0,this.found=!1,this.isAtEndOfPath=!1}startWalking(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=an(this.path.ruleStack).reverse(),this.occurrenceStack=an(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes}walk(e,r=[]){this.found||super.walk(e,r)}walkProdRef(e,r,n){if(e.referencedRule.name===this.nextProductionName&&e.idx===this.nextProductionOccurrence){let i=r.concat(n);this.updateExpectedNext(),this.walk(e.referencedRule,i)}}updateExpectedNext(){ur(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())}},Ok=class extends NN{static{o(this,"NextAfterTokenWalker")}constructor(e,r){super(e,r),this.path=r,this.nextTerminalName="",this.nextTerminalOccurrence=0,this.nextTerminalName=this.path.lastTok.name,this.nextTerminalOccurrence=this.path.lastTokOccurrence}walkTerminal(e,r,n){if(this.isAtEndOfPath&&e.terminalType.name===this.nextTerminalName&&e.idx===this.nextTerminalOccurrence&&!this.found){let i=r.concat(n),a=new Dn({definition:i});this.possibleTokTypes=op(a),this.found=!0}}},Ug=class extends Ou{static{o(this,"AbstractNextTerminalAfterProductionWalker")}constructor(e,r){super(),this.topRule=e,this.occurrence=r,this.result={token:void 0,occurrence:void 0,isEndOfRule:void 0}}startWalking(){return this.walk(this.topRule),this.result}},Pk=class extends Ug{static{o(this,"NextTerminalAfterManyWalker")}walkMany(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkMany(e,r,n)}},ox=class extends Ug{static{o(this,"NextTerminalAfterManySepWalker")}walkManySep(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkManySep(e,r,n)}},Bk=class extends Ug{static{o(this,"NextTerminalAfterAtLeastOneWalker")}walkAtLeastOne(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOne(e,r,n)}},lx=class extends Ug{static{o(this,"NextTerminalAfterAtLeastOneSepWalker")}walkAtLeastOneSep(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOneSep(e,r,n)}};o(Fk,"possiblePathsFrom");o($k,"nextPossibleTokensAfter");o(KPe,"expandTopLevelRule")});function ux(t){if(t instanceof ln||t==="Option")return jn.OPTION;if(t instanceof Or||t==="Repetition")return jn.REPETITION;if(t instanceof Ln||t==="RepetitionMandatory")return jn.REPETITION_MANDATORY;if(t instanceof Rn||t==="RepetitionMandatoryWithSeparator")return jn.REPETITION_MANDATORY_WITH_SEPARATOR;if(t instanceof wn||t==="RepetitionWithSeparator")return jn.REPETITION_WITH_SEPARATOR;if(t instanceof Tn||t==="Alternation")return jn.ALTERNATION;throw Error("non exhaustive match")}function Gk(t){let{occurrence:e,rule:r,prodType:n,maxLookahead:i}=t,a=ux(n);return a===jn.ALTERNATION?Hg(e,r,i):Wg(e,r,a,i)}function mse(t,e,r,n,i,a){let s=Hg(t,e,r),l=wse(s)?zg:Pu;return a(s,n,l,i)}function gse(t,e,r,n,i,a){let s=Wg(t,e,i,r),l=wse(s)?zg:Pu;return a(s[0],l,n)}function yse(t,e,r,n){let i=t.length,a=Ma(t,s=>Ma(s,l=>l.length===1));if(e)return function(s){let l=Je(s,u=>u.GATE);for(let u=0;u<i;u++){let h=t[u],f=h.length,d=l[u];if(!(d!==void 0&&d.call(this)===!1))e:for(let p=0;p<f;p++){let m=h[p],g=m.length;for(let y=0;y<g;y++){let v=this.LA(y+1);if(r(v,m[y])===!1)continue e}return u}}};if(a&&!n){let s=Je(t,u=>qr(u)),l=Xr(s,(u,h,f)=>(Ae(h,d=>{Bt(u,d.tokenTypeIdx)||(u[d.tokenTypeIdx]=f),Ae(d.categoryMatches,p=>{Bt(u,p)||(u[p]=f)})}),u),{});return function(){let u=this.LA(1);return l[u.tokenTypeIdx]}}else return function(){for(let s=0;s<i;s++){let l=t[s],u=l.length;e:for(let h=0;h<u;h++){let f=l[h],d=f.length;for(let p=0;p<d;p++){let m=this.LA(p+1);if(r(m,f[p])===!1)continue e}return s}}}}function vse(t,e,r){let n=Ma(t,a=>a.length===1),i=t.length;if(n&&!r){let a=qr(t);if(a.length===1&&ur(a[0].categoryMatches)){let l=a[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===l}}else{let s=Xr(a,(l,u,h)=>(l[u.tokenTypeIdx]=!0,Ae(u.categoryMatches,f=>{l[f]=!0}),l),[]);return function(){let l=this.LA(1);return s[l.tokenTypeIdx]===!0}}}else return function(){e:for(let a=0;a<i;a++){let s=t[a],l=s.length;for(let u=0;u<l;u++){let h=this.LA(u+1);if(e(h,s[u])===!1)continue e}return!0}return!1}}function pse(t){let e=new Array(t);for(let r=0;r<t;r++)e[r]=[];return e}function MN(t){let e=[""];for(let r=0;r<t.length;r++){let n=t[r],i=[];for(let a=0;a<e.length;a++){let s=e[a];i.push(s+"_"+n.tokenTypeIdx);for(let l=0;l<n.categoryMatches.length;l++){let u="_"+n.categoryMatches[l];i.push(s+u)}}e=i}return e}function QPe(t,e,r){for(let n=0;n<t.length;n++){if(n===r)continue;let i=t[n];for(let a=0;a<e.length;a++){let s=e[a];if(i[s]===!0)return!1}}return!0}function xse(t,e){let r=Je(t,s=>Fk([s],1)),n=pse(r.length),i=Je(r,s=>{let l={};return Ae(s,u=>{let h=MN(u.partialPath);Ae(h,f=>{l[f]=!0})}),l}),a=r;for(let s=1;s<=e;s++){let l=a;a=pse(l.length);for(let u=0;u<l.length;u++){let h=l[u];for(let f=0;f<h.length;f++){let d=h[f].partialPath,p=h[f].suffixDef,m=MN(d);if(QPe(i,m,u)||ur(p)||d.length===e){let y=n[u];if(Vk(y,d)===!1){y.push(d);for(let v=0;v<m.length;v++){let x=m[v];i[u][x]=!0}}}else{let y=Fk(p,s+1,d);a[u]=a[u].concat(y),Ae(y,v=>{let x=MN(v.partialPath);Ae(x,b=>{i[u][b]=!0})})}}}}return n}function Hg(t,e,r,n){let i=new zk(t,jn.ALTERNATION,n);return e.accept(i),xse(i.result,r)}function Wg(t,e,r,n){let i=new zk(t,r);e.accept(i);let a=i.result,l=new IN(e,t,r).startWalking(),u=new Dn({definition:a}),h=new Dn({definition:l});return xse([u,h],n)}function Vk(t,e){e:for(let r=0;r<t.length;r++){let n=t[r];if(n.length===e.length){for(let i=0;i<n.length;i++){let a=e[i],s=n[i];if((a===s||s.categoryMatchesMap[a.tokenTypeIdx]!==void 0)===!1)continue e}return!0}}return!1}function bse(t,e){return t.length<e.length&&Ma(t,(r,n)=>{let i=e[n];return r===i||i.categoryMatchesMap[r.tokenTypeIdx]})}function wse(t){return Ma(t,e=>Ma(e,r=>Ma(r,n=>ur(n.categoryMatches))))}var jn,IN,zk,qg=N(()=>{"use strict";qt();cx();Ak();cp();os();(function(t){t[t.OPTION=0]="OPTION",t[t.REPETITION=1]="REPETITION",t[t.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",t[t.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",t[t.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",t[t.ALTERNATION=5]="ALTERNATION"})(jn||(jn={}));o(ux,"getProdType");o(Gk,"getLookaheadPaths");o(mse,"buildLookaheadFuncForOr");o(gse,"buildLookaheadFuncForOptionalProd");o(yse,"buildAlternativesLookAheadFunc");o(vse,"buildSingleAlternativeLookaheadFunction");IN=class extends Ou{static{o(this,"RestDefinitionFinderWalker")}constructor(e,r,n){super(),this.topProd=e,this.targetOccurrence=r,this.targetProdType=n}startWalking(){return this.walk(this.topProd),this.restDef}checkIsTarget(e,r,n,i){return e.idx===this.targetOccurrence&&this.targetProdType===r?(this.restDef=n.concat(i),!0):!1}walkOption(e,r,n){this.checkIsTarget(e,jn.OPTION,r,n)||super.walkOption(e,r,n)}walkAtLeastOne(e,r,n){this.checkIsTarget(e,jn.REPETITION_MANDATORY,r,n)||super.walkOption(e,r,n)}walkAtLeastOneSep(e,r,n){this.checkIsTarget(e,jn.REPETITION_MANDATORY_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}walkMany(e,r,n){this.checkIsTarget(e,jn.REPETITION,r,n)||super.walkOption(e,r,n)}walkManySep(e,r,n){this.checkIsTarget(e,jn.REPETITION_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}},zk=class extends ss{static{o(this,"InsideDefinitionFinderVisitor")}constructor(e,r,n){super(),this.targetOccurrence=e,this.targetProdType=r,this.targetRef=n,this.result=[]}checkIsTarget(e,r){e.idx===this.targetOccurrence&&this.targetProdType===r&&(this.targetRef===void 0||e===this.targetRef)&&(this.result=e.definition)}visitOption(e){this.checkIsTarget(e,jn.OPTION)}visitRepetition(e){this.checkIsTarget(e,jn.REPETITION)}visitRepetitionMandatory(e){this.checkIsTarget(e,jn.REPETITION_MANDATORY)}visitRepetitionMandatoryWithSeparator(e){this.checkIsTarget(e,jn.REPETITION_MANDATORY_WITH_SEPARATOR)}visitRepetitionWithSeparator(e){this.checkIsTarget(e,jn.REPETITION_WITH_SEPARATOR)}visitAlternation(e){this.checkIsTarget(e,jn.ALTERNATION)}};o(pse,"initializeArrayOfArrays");o(MN,"pathToHashKeys");o(QPe,"isUniquePrefixHash");o(xse,"lookAheadSequenceFromAlternatives");o(Hg,"getLookaheadPathsForOr");o(Wg,"getLookaheadPathsForOptionalProd");o(Vk,"containsPath");o(bse,"isStrictPrefixOfPath");o(wse,"areTokenCategoriesNotUsed")});function Tse(t){let e=t.lookaheadStrategy.validate({rules:t.rules,tokenTypes:t.tokenTypes,grammarName:t.grammarName});return Je(e,r=>Object.assign({type:zi.CUSTOM_LOOKAHEAD_VALIDATION},r))}function kse(t,e,r,n){let i=ya(t,u=>ZPe(u,r)),a=iBe(t,e,r),s=ya(t,u=>tBe(u,r)),l=ya(t,u=>eBe(u,t,n,r));return i.concat(a,s,l)}function ZPe(t,e){let r=new ON;t.accept(r);let n=r.allProductions,i=IL(n,JPe),a=Os(i,l=>l.length>1);return Je(br(a),l=>{let u=ia(l),h=e.buildDuplicateFoundError(t,l),f=Bs(u),d={message:h,type:zi.DUPLICATE_PRODUCTIONS,ruleName:t.name,dslName:f,occurrence:u.idx},p=Ese(u);return p&&(d.parameter=p),d})}function JPe(t){return`${Bs(t)}_#_${t.idx}_#_${Ese(t)}`}function Ese(t){return t instanceof kr?t.terminalType.name:t instanceof on?t.nonTerminalName:""}function eBe(t,e,r,n){let i=[];if(Xr(e,(s,l)=>l.name===t.name?s+1:s,0)>1){let s=n.buildDuplicateRuleNameError({topLevelRule:t,grammarName:r});i.push({message:s,type:zi.DUPLICATE_RULE_NAME,ruleName:t.name})}return i}function Sse(t,e,r){let n=[],i;return qn(e,t)||(i=`Invalid rule override, rule: ->${t}<- cannot be overridden in the grammar: ->${r}<-as it is not defined in any of the super grammars `,n.push({message:i,type:zi.INVALID_RULE_OVERRIDE,ruleName:t})),n}function BN(t,e,r,n=[]){let i=[],a=Uk(e.definition);if(ur(a))return[];{let s=t.name;qn(a,t)&&i.push({message:r.buildLeftRecursionError({topLevelRule:t,leftRecursionPath:n}),type:zi.LEFT_RECURSION,ruleName:s});let u=Zh(a,n.concat([t])),h=ya(u,f=>{let d=an(n);return d.push(f),BN(t,f,r,d)});return i.concat(h)}}function Uk(t){let e=[];if(ur(t))return e;let r=ia(t);if(r instanceof on)e.push(r.referencedRule);else if(r instanceof Dn||r instanceof ln||r instanceof Ln||r instanceof Rn||r instanceof wn||r instanceof Or)e=e.concat(Uk(r.definition));else if(r instanceof Tn)e=qr(Je(r.definition,a=>Uk(a.definition)));else if(!(r instanceof kr))throw Error("non exhaustive match");let n=sp(r),i=t.length>1;if(n&&i){let a=gi(t);return e.concat(Uk(a))}else return e}function Cse(t,e){let r=new hx;t.accept(r);let n=r.alternations;return ya(n,a=>{let s=Nu(a.definition);return ya(s,(l,u)=>{let h=$k([l],[],Pu,1);return ur(h)?[{message:e.buildEmptyAlternationError({topLevelRule:t,alternation:a,emptyChoiceIdx:u}),type:zi.NONE_LAST_EMPTY_ALT,ruleName:t.name,occurrence:a.idx,alternative:u+1}]:[]})})}function Ase(t,e,r){let n=new hx;t.accept(n);let i=n.alternations;return i=Jh(i,s=>s.ignoreAmbiguities===!0),ya(i,s=>{let l=s.idx,u=s.maxLookahead||e,h=Hg(l,t,u,s),f=rBe(h,s,t,r),d=nBe(h,s,t,r);return f.concat(d)})}function tBe(t,e){let r=new hx;t.accept(r);let n=r.alternations;return ya(n,a=>a.definition.length>255?[{message:e.buildTooManyAlternativesError({topLevelRule:t,alternation:a}),type:zi.TOO_MANY_ALTS,ruleName:t.name,occurrence:a.idx}]:[])}function _se(t,e,r){let n=[];return Ae(t,i=>{let a=new PN;i.accept(a);let s=a.allProductions;Ae(s,l=>{let u=ux(l),h=l.maxLookahead||e,f=l.idx,p=Wg(f,i,u,h)[0];if(ur(qr(p))){let m=r.buildEmptyRepetitionError({topLevelRule:i,repetition:l});n.push({message:m,type:zi.NO_NON_EMPTY_LOOKAHEAD,ruleName:i.name})}})}),n}function rBe(t,e,r,n){let i=[],a=Xr(t,(l,u,h)=>(e.definition[h].ignoreAmbiguities===!0||Ae(u,f=>{let d=[h];Ae(t,(p,m)=>{h!==m&&Vk(p,f)&&e.definition[m].ignoreAmbiguities!==!0&&d.push(m)}),d.length>1&&!Vk(i,f)&&(i.push(f),l.push({alts:d,path:f}))}),l),[]);return Je(a,l=>{let u=Je(l.alts,f=>f+1);return{message:n.buildAlternationAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:u,prefixPath:l.path}),type:zi.AMBIGUOUS_ALTS,ruleName:r.name,occurrence:e.idx,alternatives:l.alts}})}function nBe(t,e,r,n){let i=Xr(t,(s,l,u)=>{let h=Je(l,f=>({idx:u,path:f}));return s.concat(h)},[]);return Tc(ya(i,s=>{if(e.definition[s.idx].ignoreAmbiguities===!0)return[];let u=s.idx,h=s.path,f=Yr(i,p=>e.definition[p.idx].ignoreAmbiguities!==!0&&p.idx<u&&bse(p.path,h));return Je(f,p=>{let m=[p.idx+1,u+1],g=e.idx===0?"":e.idx;return{message:n.buildAlternationPrefixAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:m,prefixPath:p.path}),type:zi.AMBIGUOUS_PREFIX_ALTS,ruleName:r.name,occurrence:g,alternatives:m}})}))}function iBe(t,e,r){let n=[],i=Je(e,a=>a.name);return Ae(t,a=>{let s=a.name;if(qn(i,s)){let l=r.buildNamespaceConflictError(a);n.push({message:l,type:zi.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:s})}}),n}var ON,hx,PN,fx=N(()=>{"use strict";qt();Fs();os();qg();cx();cp();o(Tse,"validateLookahead");o(kse,"validateGrammar");o(ZPe,"validateDuplicateProductions");o(JPe,"identifyProductionForDuplicates");o(Ese,"getExtraProductionArgument");ON=class extends ss{static{o(this,"OccurrenceValidationCollector")}constructor(){super(...arguments),this.allProductions=[]}visitNonTerminal(e){this.allProductions.push(e)}visitOption(e){this.allProductions.push(e)}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}visitAlternation(e){this.allProductions.push(e)}visitTerminal(e){this.allProductions.push(e)}};o(eBe,"validateRuleDoesNotAlreadyExist");o(Sse,"validateRuleIsOverridden");o(BN,"validateNoLeftRecursion");o(Uk,"getFirstNoneTerminal");hx=class extends ss{static{o(this,"OrCollector")}constructor(){super(...arguments),this.alternations=[]}visitAlternation(e){this.alternations.push(e)}};o(Cse,"validateEmptyOrAlternative");o(Ase,"validateAmbiguousAlternationAlternatives");PN=class extends ss{static{o(this,"RepetitionCollector")}constructor(){super(...arguments),this.allProductions=[]}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}};o(tBe,"validateTooManyAlts");o(_se,"validateSomeNonEmptyLookaheadPath");o(rBe,"checkAlternativesAmbiguities");o(nBe,"checkPrefixAlternativesAmbiguities");o(iBe,"checkTerminalAndNoneTerminalsNameSpace")});function Dse(t){let e=Qh(t,{errMsgProvider:hse}),r={};return Ae(t.rules,n=>{r[n.name]=n}),fse(r,e.errMsgProvider)}function Lse(t){return t=Qh(t,{errMsgProvider:Pl}),kse(t.rules,t.tokenTypes,t.errMsgProvider,t.grammarName)}var Rse=N(()=>{"use strict";qt();dse();fx();Vg();o(Dse,"resolveGrammar");o(Lse,"validateGrammar")});function lf(t){return qn(Pse,t.name)}var Nse,Mse,Ise,Ose,Pse,Yg,hp,dx,px,mx,Xg=N(()=>{"use strict";qt();Nse="MismatchedTokenException",Mse="NoViableAltException",Ise="EarlyExitException",Ose="NotAllInputParsedException",Pse=[Nse,Mse,Ise,Ose];Object.freeze(Pse);o(lf,"isRecognitionException");Yg=class extends Error{static{o(this,"RecognitionException")}constructor(e,r){super(e),this.token=r,this.resyncedTokens=[],Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}},hp=class extends Yg{static{o(this,"MismatchedTokenException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=Nse}},dx=class extends Yg{static{o(this,"NoViableAltException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=Mse}},px=class extends Yg{static{o(this,"NotAllInputParsedException")}constructor(e,r){super(e,r),this.name=Ose}},mx=class extends Yg{static{o(this,"EarlyExitException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=Ise}}});function aBe(t,e,r,n,i,a,s){let l=this.getKeyForAutomaticLookahead(n,i),u=this.firstAfterRepMap[l];if(u===void 0){let p=this.getCurrRuleFullName(),m=this.getGAstProductions()[p];u=new a(m,i).startWalking(),this.firstAfterRepMap[l]=u}let h=u.token,f=u.occurrence,d=u.isEndOfRule;this.RULE_STACK.length===1&&d&&h===void 0&&(h=lo,f=1),!(h===void 0||f===void 0)&&this.shouldInRepetitionRecoveryBeTried(h,f,s)&&this.tryInRepetitionRecovery(t,e,r,h)}var FN,zN,$N,Hk,GN=N(()=>{"use strict";up();qt();Xg();bN();Fs();FN={},zN="InRuleRecoveryException",$N=class extends Error{static{o(this,"InRuleRecoveryException")}constructor(e){super(e),this.name=zN}},Hk=class{static{o(this,"Recoverable")}initRecoverable(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=Bt(e,"recoveryEnabled")?e.recoveryEnabled:ls.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=aBe)}getTokenToInsert(e){let r=$u(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return r.isInsertedInRecovery=!0,r}canTokenTypeBeInsertedInRecovery(e){return!0}canTokenTypeBeDeletedInRecovery(e){return!0}tryInRepetitionRecovery(e,r,n,i){let a=this.findReSyncTokenType(),s=this.exportLexerState(),l=[],u=!1,h=this.LA(1),f=this.LA(1),d=o(()=>{let p=this.LA(0),m=this.errorMessageProvider.buildMismatchTokenMessage({expected:i,actual:h,previous:p,ruleName:this.getCurrRuleFullName()}),g=new hp(m,h,this.LA(0));g.resyncedTokens=Nu(l),this.SAVE_ERROR(g)},"generateErrorMessage");for(;!u;)if(this.tokenMatcher(f,i)){d();return}else if(n.call(this)){d(),e.apply(this,r);return}else this.tokenMatcher(f,a)?u=!0:(f=this.SKIP_TOKEN(),this.addToResyncTokens(f,l));this.importLexerState(s)}shouldInRepetitionRecoveryBeTried(e,r,n){return!(n===!1||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,r)))}getFollowsForInRuleRecovery(e,r){let n=this.getCurrentGrammarPath(e,r);return this.getNextPossibleTokenTypes(n)}tryInRuleRecovery(e,r){if(this.canRecoverWithSingleTokenInsertion(e,r))return this.getTokenToInsert(e);if(this.canRecoverWithSingleTokenDeletion(e)){let n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new $N("sad sad panda")}canPerformInRuleRecovery(e,r){return this.canRecoverWithSingleTokenInsertion(e,r)||this.canRecoverWithSingleTokenDeletion(e)}canRecoverWithSingleTokenInsertion(e,r){if(!this.canTokenTypeBeInsertedInRecovery(e)||ur(r))return!1;let n=this.LA(1);return ns(r,a=>this.tokenMatcher(n,a))!==void 0}canRecoverWithSingleTokenDeletion(e){return this.canTokenTypeBeDeletedInRecovery(e)?this.tokenMatcher(this.LA(2),e):!1}isInCurrentRuleReSyncSet(e){let r=this.getCurrFollowKey(),n=this.getFollowSetFromFollowKey(r);return qn(n,e)}findReSyncTokenType(){let e=this.flattenFollowSet(),r=this.LA(1),n=2;for(;;){let i=ns(e,a=>sx(r,a));if(i!==void 0)return i;r=this.LA(n),n++}}getCurrFollowKey(){if(this.RULE_STACK.length===1)return FN;let e=this.getLastExplicitRuleShortName(),r=this.getLastExplicitRuleOccurrenceIndex(),n=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:r,inRule:this.shortRuleNameToFullName(n)}}buildFullFollowKeyStack(){let e=this.RULE_STACK,r=this.RULE_OCCURRENCE_STACK;return Je(e,(n,i)=>i===0?FN:{ruleName:this.shortRuleNameToFullName(n),idxInCallingRule:r[i],inRule:this.shortRuleNameToFullName(e[i-1])})}flattenFollowSet(){let e=Je(this.buildFullFollowKeyStack(),r=>this.getFollowSetFromFollowKey(r));return qr(e)}getFollowSetFromFollowKey(e){if(e===FN)return[lo];let r=e.ruleName+e.idxInCallingRule+_k+e.inRule;return this.resyncFollows[r]}addToResyncTokens(e,r){return this.tokenMatcher(e,lo)||r.push(e),r}reSyncTo(e){let r=[],n=this.LA(1);for(;this.tokenMatcher(n,e)===!1;)n=this.SKIP_TOKEN(),this.addToResyncTokens(n,r);return Nu(r)}attemptInRepetitionRecovery(e,r,n,i,a,s,l){}getCurrentGrammarPath(e,r){let n=this.getHumanReadableRuleStack(),i=an(this.RULE_OCCURRENCE_STACK);return{ruleStack:n,occurrenceStack:i,lastTok:e,lastTokOccurrence:r}}getHumanReadableRuleStack(){return Je(this.RULE_STACK,e=>this.shortRuleNameToFullName(e))}};o(aBe,"attemptInRepetitionRecovery")});function Wk(t,e,r){return r|e|t}var qk=N(()=>{"use strict";o(Wk,"getKeyForAutomaticLookahead")});var Gu,VN=N(()=>{"use strict";qt();Vg();Fs();fx();qg();Gu=class{static{o(this,"LLkLookaheadStrategy")}constructor(e){var r;this.maxLookahead=(r=e?.maxLookahead)!==null&&r!==void 0?r:ls.maxLookahead}validate(e){let r=this.validateNoLeftRecursion(e.rules);if(ur(r)){let n=this.validateEmptyOrAlternatives(e.rules),i=this.validateAmbiguousAlternationAlternatives(e.rules,this.maxLookahead),a=this.validateSomeNonEmptyLookaheadPath(e.rules,this.maxLookahead);return[...r,...n,...i,...a]}return r}validateNoLeftRecursion(e){return ya(e,r=>BN(r,r,Pl))}validateEmptyOrAlternatives(e){return ya(e,r=>Cse(r,Pl))}validateAmbiguousAlternationAlternatives(e,r){return ya(e,n=>Ase(n,r,Pl))}validateSomeNonEmptyLookaheadPath(e,r){return _se(e,r,Pl)}buildLookaheadForAlternation(e){return mse(e.prodOccurrence,e.rule,e.maxLookahead,e.hasPredicates,e.dynamicTokensEnabled,yse)}buildLookaheadForOptional(e){return gse(e.prodOccurrence,e.rule,e.maxLookahead,e.dynamicTokensEnabled,ux(e.prodType),vse)}}});function sBe(t){Yk.reset(),t.accept(Yk);let e=Yk.dslMethods;return Yk.reset(),e}var Xk,UN,Yk,Bse=N(()=>{"use strict";qt();Fs();qk();os();VN();Xk=class{static{o(this,"LooksAhead")}initLooksAhead(e){this.dynamicTokensEnabled=Bt(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:ls.dynamicTokensEnabled,this.maxLookahead=Bt(e,"maxLookahead")?e.maxLookahead:ls.maxLookahead,this.lookaheadStrategy=Bt(e,"lookaheadStrategy")?e.lookaheadStrategy:new Gu({maxLookahead:this.maxLookahead}),this.lookAheadFuncsCache=new Map}preComputeLookaheadFunctions(e){Ae(e,r=>{this.TRACE_INIT(`${r.name} Rule Lookahead`,()=>{let{alternation:n,repetition:i,option:a,repetitionMandatory:s,repetitionMandatoryWithSeparator:l,repetitionWithSeparator:u}=sBe(r);Ae(n,h=>{let f=h.idx===0?"":h.idx;this.TRACE_INIT(`${Bs(h)}${f}`,()=>{let d=this.lookaheadStrategy.buildLookaheadForAlternation({prodOccurrence:h.idx,rule:r,maxLookahead:h.maxLookahead||this.maxLookahead,hasPredicates:h.hasPredicates,dynamicTokensEnabled:this.dynamicTokensEnabled}),p=Wk(this.fullRuleNameToShort[r.name],256,h.idx);this.setLaFuncCache(p,d)})}),Ae(i,h=>{this.computeLookaheadFunc(r,h.idx,768,"Repetition",h.maxLookahead,Bs(h))}),Ae(a,h=>{this.computeLookaheadFunc(r,h.idx,512,"Option",h.maxLookahead,Bs(h))}),Ae(s,h=>{this.computeLookaheadFunc(r,h.idx,1024,"RepetitionMandatory",h.maxLookahead,Bs(h))}),Ae(l,h=>{this.computeLookaheadFunc(r,h.idx,1536,"RepetitionMandatoryWithSeparator",h.maxLookahead,Bs(h))}),Ae(u,h=>{this.computeLookaheadFunc(r,h.idx,1280,"RepetitionWithSeparator",h.maxLookahead,Bs(h))})})})}computeLookaheadFunc(e,r,n,i,a,s){this.TRACE_INIT(`${s}${r===0?"":r}`,()=>{let l=this.lookaheadStrategy.buildLookaheadForOptional({prodOccurrence:r,rule:e,maxLookahead:a||this.maxLookahead,dynamicTokensEnabled:this.dynamicTokensEnabled,prodType:i}),u=Wk(this.fullRuleNameToShort[e.name],n,r);this.setLaFuncCache(u,l)})}getKeyForAutomaticLookahead(e,r){let n=this.getLastExplicitRuleShortName();return Wk(n,e,r)}getLaFuncFromCache(e){return this.lookAheadFuncsCache.get(e)}setLaFuncCache(e,r){this.lookAheadFuncsCache.set(e,r)}},UN=class extends ss{static{o(this,"DslMethodsCollectorVisitor")}constructor(){super(...arguments),this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}reset(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}visitOption(e){this.dslMethods.option.push(e)}visitRepetitionWithSeparator(e){this.dslMethods.repetitionWithSeparator.push(e)}visitRepetitionMandatory(e){this.dslMethods.repetitionMandatory.push(e)}visitRepetitionMandatoryWithSeparator(e){this.dslMethods.repetitionMandatoryWithSeparator.push(e)}visitRepetition(e){this.dslMethods.repetition.push(e)}visitAlternation(e){this.dslMethods.alternation.push(e)}},Yk=new UN;o(sBe,"collectMethods")});function qN(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.endOffset=e.endOffset):t.endOffset<e.endOffset&&(t.endOffset=e.endOffset)}function YN(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.startColumn=e.startColumn,t.startLine=e.startLine,t.endOffset=e.endOffset,t.endColumn=e.endColumn,t.endLine=e.endLine):t.endOffset<e.endOffset&&(t.endOffset=e.endOffset,t.endColumn=e.endColumn,t.endLine=e.endLine)}function Fse(t,e,r){t.children[r]===void 0?t.children[r]=[e]:t.children[r].push(e)}function $se(t,e,r){t.children[e]===void 0?t.children[e]=[r]:t.children[e].push(r)}var zse=N(()=>{"use strict";o(qN,"setNodeLocationOnlyOffset");o(YN,"setNodeLocationFull");o(Fse,"addTerminalToCst");o($se,"addNoneTerminalToCst")});function XN(t,e){Object.defineProperty(t,oBe,{enumerable:!1,configurable:!0,writable:!1,value:e})}var oBe,Gse=N(()=>{"use strict";oBe="name";o(XN,"defineNameProp")});function lBe(t,e){let r=zr(t),n=r.length;for(let i=0;i<n;i++){let a=r[i],s=t[a],l=s.length;for(let u=0;u<l;u++){let h=s[u];h.tokenTypeIdx===void 0&&this[h.name](h.children,e)}}}function Vse(t,e){let r=o(function(){},"derivedConstructor");XN(r,t+"BaseSemantics");let n={visit:o(function(i,a){if(Pt(i)&&(i=i[0]),!pr(i))return this[i.name](i.children,a)},"visit"),validateVisitor:o(function(){let i=cBe(this,e);if(!ur(i)){let a=Je(i,s=>s.msg);throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>:
777 + ${a.join(`
778 +
779 +`).replace(/\n/g,`
780 + `)}`)}},"validateVisitor")};return r.prototype=n,r.prototype.constructor=r,r._RULE_NAMES=e,r}function Use(t,e,r){let n=o(function(){},"derivedConstructor");XN(n,t+"BaseSemanticsWithDefaults");let i=Object.create(r.prototype);return Ae(e,a=>{i[a]=lBe}),n.prototype=i,n.prototype.constructor=n,n}function cBe(t,e){return uBe(t,e)}function uBe(t,e){let r=Yr(e,i=>Si(t[i])===!1),n=Je(r,i=>({msg:`Missing visitor method: <${i}> on ${t.constructor.name} CST Visitor.`,type:jN.MISSING_METHOD,methodName:i}));return Tc(n)}var jN,Hse=N(()=>{"use strict";qt();Gse();o(lBe,"defaultVisit");o(Vse,"createBaseSemanticVisitorConstructor");o(Use,"createBaseVisitorConstructorWithDefaults");(function(t){t[t.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",t[t.MISSING_METHOD=1]="MISSING_METHOD"})(jN||(jN={}));o(cBe,"validateVisitor");o(uBe,"validateMissingCstMethods")});var Zk,Wse=N(()=>{"use strict";zse();qt();Hse();Fs();Zk=class{static{o(this,"TreeBuilder")}initTreeBuilder(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=Bt(e,"nodeLocationTracking")?e.nodeLocationTracking:ls.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=ni,this.cstFinallyStateUpdate=ni,this.cstPostTerminal=ni,this.cstPostNonTerminal=ni,this.cstPostRule=ni;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=YN,this.setNodeLocationFromNode=YN,this.cstPostRule=ni,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=ni,this.setNodeLocationFromNode=ni,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=qN,this.setNodeLocationFromNode=qN,this.cstPostRule=ni,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=ni,this.setNodeLocationFromNode=ni,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=ni,this.setNodeLocationFromNode=ni,this.cstPostRule=ni,this.setInitialNodeLocation=ni;else throw Error(`Invalid <nodeLocationTracking> config option: "${e.nodeLocationTracking}"`)}setInitialNodeLocationOnlyOffsetRecovery(e){e.location={startOffset:NaN,endOffset:NaN}}setInitialNodeLocationOnlyOffsetRegular(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}}setInitialNodeLocationFullRecovery(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}}setInitialNodeLocationFullRegular(e){let r=this.LA(1);e.location={startOffset:r.startOffset,startLine:r.startLine,startColumn:r.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}}cstInvocationStateUpdate(e){let r={name:e,children:Object.create(null)};this.setInitialNodeLocation(r),this.CST_STACK.push(r)}cstFinallyStateUpdate(){this.CST_STACK.pop()}cstPostRuleFull(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?(n.endOffset=r.endOffset,n.endLine=r.endLine,n.endColumn=r.endColumn):(n.startOffset=NaN,n.startLine=NaN,n.startColumn=NaN)}cstPostRuleOnlyOffset(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?n.endOffset=r.endOffset:n.startOffset=NaN}cstPostTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];Fse(n,r,e),this.setNodeLocationFromToken(n.location,r)}cstPostNonTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];$se(n,r,e),this.setNodeLocationFromNode(n.location,e.location)}getBaseCstVisitorConstructor(){if(pr(this.baseCstVisitorConstructor)){let e=Vse(this.className,zr(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor}getBaseCstVisitorConstructorWithDefaults(){if(pr(this.baseCstVisitorWithDefaultsConstructor)){let e=Use(this.className,zr(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor}getLastExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-1]}getPreviousExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-2]}getLastExplicitRuleOccurrenceIndex(){let e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]}}});var Jk,qse=N(()=>{"use strict";Fs();Jk=class{static{o(this,"LexerAdapter")}initLexerAdapter(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1}set input(e){if(this.selfAnalysisDone!==!0)throw Error("Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length}get input(){return this.tokVector}SKIP_TOKEN(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):jg}LA(e){let r=this.currIdx+e;return r<0||this.tokVectorLength<=r?jg:this.tokVector[r]}consumeToken(){this.currIdx++}exportLexerState(){return this.currIdx}importLexerState(e){this.currIdx=e}resetLexerState(){this.currIdx=-1}moveToTerminatedState(){this.currIdx=this.tokVector.length-1}getLexerPosition(){return this.exportLexerState()}}});var eE,Yse=N(()=>{"use strict";qt();Xg();Fs();Vg();fx();os();eE=class{static{o(this,"RecognizerApi")}ACTION(e){return e.call(this)}consume(e,r,n){return this.consumeInternal(r,e,n)}subrule(e,r,n){return this.subruleInternal(r,e,n)}option(e,r){return this.optionInternal(r,e)}or(e,r){return this.orInternal(r,e)}many(e,r){return this.manyInternal(e,r)}atLeastOne(e,r){return this.atLeastOneInternal(e,r)}CONSUME(e,r){return this.consumeInternal(e,0,r)}CONSUME1(e,r){return this.consumeInternal(e,1,r)}CONSUME2(e,r){return this.consumeInternal(e,2,r)}CONSUME3(e,r){return this.consumeInternal(e,3,r)}CONSUME4(e,r){return this.consumeInternal(e,4,r)}CONSUME5(e,r){return this.consumeInternal(e,5,r)}CONSUME6(e,r){return this.consumeInternal(e,6,r)}CONSUME7(e,r){return this.consumeInternal(e,7,r)}CONSUME8(e,r){return this.consumeInternal(e,8,r)}CONSUME9(e,r){return this.consumeInternal(e,9,r)}SUBRULE(e,r){return this.subruleInternal(e,0,r)}SUBRULE1(e,r){return this.subruleInternal(e,1,r)}SUBRULE2(e,r){return this.subruleInternal(e,2,r)}SUBRULE3(e,r){return this.subruleInternal(e,3,r)}SUBRULE4(e,r){return this.subruleInternal(e,4,r)}SUBRULE5(e,r){return this.subruleInternal(e,5,r)}SUBRULE6(e,r){return this.subruleInternal(e,6,r)}SUBRULE7(e,r){return this.subruleInternal(e,7,r)}SUBRULE8(e,r){return this.subruleInternal(e,8,r)}SUBRULE9(e,r){return this.subruleInternal(e,9,r)}OPTION(e){return this.optionInternal(e,0)}OPTION1(e){return this.optionInternal(e,1)}OPTION2(e){return this.optionInternal(e,2)}OPTION3(e){return this.optionInternal(e,3)}OPTION4(e){return this.optionInternal(e,4)}OPTION5(e){return this.optionInternal(e,5)}OPTION6(e){return this.optionInternal(e,6)}OPTION7(e){return this.optionInternal(e,7)}OPTION8(e){return this.optionInternal(e,8)}OPTION9(e){return this.optionInternal(e,9)}OR(e){return this.orInternal(e,0)}OR1(e){return this.orInternal(e,1)}OR2(e){return this.orInternal(e,2)}OR3(e){return this.orInternal(e,3)}OR4(e){return this.orInternal(e,4)}OR5(e){return this.orInternal(e,5)}OR6(e){return this.orInternal(e,6)}OR7(e){return this.orInternal(e,7)}OR8(e){return this.orInternal(e,8)}OR9(e){return this.orInternal(e,9)}MANY(e){this.manyInternal(0,e)}MANY1(e){this.manyInternal(1,e)}MANY2(e){this.manyInternal(2,e)}MANY3(e){this.manyInternal(3,e)}MANY4(e){this.manyInternal(4,e)}MANY5(e){this.manyInternal(5,e)}MANY6(e){this.manyInternal(6,e)}MANY7(e){this.manyInternal(7,e)}MANY8(e){this.manyInternal(8,e)}MANY9(e){this.manyInternal(9,e)}MANY_SEP(e){this.manySepFirstInternal(0,e)}MANY_SEP1(e){this.manySepFirstInternal(1,e)}MANY_SEP2(e){this.manySepFirstInternal(2,e)}MANY_SEP3(e){this.manySepFirstInternal(3,e)}MANY_SEP4(e){this.manySepFirstInternal(4,e)}MANY_SEP5(e){this.manySepFirstInternal(5,e)}MANY_SEP6(e){this.manySepFirstInternal(6,e)}MANY_SEP7(e){this.manySepFirstInternal(7,e)}MANY_SEP8(e){this.manySepFirstInternal(8,e)}MANY_SEP9(e){this.manySepFirstInternal(9,e)}AT_LEAST_ONE(e){this.atLeastOneInternal(0,e)}AT_LEAST_ONE1(e){return this.atLeastOneInternal(1,e)}AT_LEAST_ONE2(e){this.atLeastOneInternal(2,e)}AT_LEAST_ONE3(e){this.atLeastOneInternal(3,e)}AT_LEAST_ONE4(e){this.atLeastOneInternal(4,e)}AT_LEAST_ONE5(e){this.atLeastOneInternal(5,e)}AT_LEAST_ONE6(e){this.atLeastOneInternal(6,e)}AT_LEAST_ONE7(e){this.atLeastOneInternal(7,e)}AT_LEAST_ONE8(e){this.atLeastOneInternal(8,e)}AT_LEAST_ONE9(e){this.atLeastOneInternal(9,e)}AT_LEAST_ONE_SEP(e){this.atLeastOneSepFirstInternal(0,e)}AT_LEAST_ONE_SEP1(e){this.atLeastOneSepFirstInternal(1,e)}AT_LEAST_ONE_SEP2(e){this.atLeastOneSepFirstInternal(2,e)}AT_LEAST_ONE_SEP3(e){this.atLeastOneSepFirstInternal(3,e)}AT_LEAST_ONE_SEP4(e){this.atLeastOneSepFirstInternal(4,e)}AT_LEAST_ONE_SEP5(e){this.atLeastOneSepFirstInternal(5,e)}AT_LEAST_ONE_SEP6(e){this.atLeastOneSepFirstInternal(6,e)}AT_LEAST_ONE_SEP7(e){this.atLeastOneSepFirstInternal(7,e)}AT_LEAST_ONE_SEP8(e){this.atLeastOneSepFirstInternal(8,e)}AT_LEAST_ONE_SEP9(e){this.atLeastOneSepFirstInternal(9,e)}RULE(e,r,n=Kg){if(qn(this.definedRulesNames,e)){let s={message:Pl.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),type:zi.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);let i=this.defineRule(e,r,n);return this[e]=i,i}OVERRIDE_RULE(e,r,n=Kg){let i=Sse(e,this.definedRulesNames,this.className);this.definitionErrors=this.definitionErrors.concat(i);let a=this.defineRule(e,r,n);return this[e]=a,a}BACKTRACK(e,r){return function(){this.isBackTrackingStack.push(1);let n=this.saveRecogState();try{return e.apply(this,r),!0}catch(i){if(lf(i))return!1;throw i}finally{this.reloadRecogState(n),this.isBackTrackingStack.pop()}}}getGAstProductions(){return this.gastProductionsCache}getSerializedGastProductions(){return Sk(br(this.gastProductionsCache))}}});var tE,Xse=N(()=>{"use strict";qt();qk();Xg();qg();cx();Fs();GN();up();cp();tE=class{static{o(this,"RecognizerEngine")}initRecognizerEngine(e,r){if(this.className=this.constructor.name,this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=zg,this.subruleIdx=0,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},Bt(r,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a <serializedGrammar> property.
781 + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0
782 + For Further details.`);if(Pt(e)){if(ur(e))throw Error(`A Token Vocabulary cannot be empty.
783 + Note that the first argument for the parser constructor
784 + is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument.
785 + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0
786 + For Further details.`)}if(Pt(e))this.tokensMap=Xr(e,(a,s)=>(a[s.name]=s,a),{});else if(Bt(e,"modes")&&Ma(qr(br(e.modes)),rse)){let a=qr(br(e.modes)),s=Bm(a);this.tokensMap=Xr(s,(l,u)=>(l[u.name]=u,l),{})}else if(bn(e))this.tokensMap=an(e);else throw new Error("<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=lo;let n=Bt(e,"modes")?qr(br(e.modes)):br(e),i=Ma(n,a=>ur(a.categoryMatches));this.tokenMatcher=i?zg:Pu,Bu(br(this.tokensMap))}defineRule(e,r,n){if(this.selfAnalysisDone)throw Error(`Grammar rule <${e}> may not be defined after the 'performSelfAnalysis' method has been called'
787 +Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);let i=Bt(n,"resyncEnabled")?n.resyncEnabled:Kg.resyncEnabled,a=Bt(n,"recoveryValueFunc")?n.recoveryValueFunc:Kg.recoveryValueFunc,s=this.ruleShortNameIdx<<12;this.ruleShortNameIdx++,this.shortRuleNameToFull[s]=e,this.fullRuleNameToShort[e]=s;let l;return this.outputCst===!0?l=o(function(...f){try{this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f);let d=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(d),d}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTry"):l=o(function(...f){try{return this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f)}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTryCst"),Object.assign(l,{ruleName:e,originalGrammarAction:r})}invokeRuleCatch(e,r,n){let i=this.RULE_STACK.length===1,a=r&&!this.isBackTracking()&&this.recoveryEnabled;if(lf(e)){let s=e;if(a){let l=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(l))if(s.resyncedTokens=this.reSyncTo(l),this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];return u.recoveredNode=!0,u}else return n(e);else{if(this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];u.recoveredNode=!0,s.partialCstResult=u}throw s}}else{if(i)return this.moveToTerminatedState(),n(e);throw s}}else throw e}optionInternal(e,r){let n=this.getKeyForAutomaticLookahead(512,r);return this.optionInternalLogic(e,r,n)}optionInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof e!="function"){a=e.DEF;let s=e.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=e;if(i.call(this)===!0)return a.call(this)}atLeastOneInternal(e,r){let n=this.getKeyForAutomaticLookahead(1024,e);return this.atLeastOneInternalLogic(e,r,n)}atLeastOneInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let s=r.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=r;if(i.call(this)===!0){let s=this.doSingleRepetition(a);for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a)}else throw this.raiseEarlyExitException(e,jn.REPETITION_MANDATORY,r.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,r],i,1024,e,Bk)}atLeastOneSepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1536,e);this.atLeastOneSepFirstInternalLogic(e,r,n)}atLeastOneSepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,lx],l,1536,e,lx)}else throw this.raiseEarlyExitException(e,jn.REPETITION_MANDATORY_WITH_SEPARATOR,r.ERR_MSG)}manyInternal(e,r){let n=this.getKeyForAutomaticLookahead(768,e);return this.manyInternalLogic(e,r,n)}manyInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let l=r.GATE;if(l!==void 0){let u=i;i=o(()=>l.call(this)&&u.call(this),"lookaheadFunction")}}else a=r;let s=!0;for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a);this.attemptInRepetitionRecovery(this.manyInternal,[e,r],i,768,e,Pk,s)}manySepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1280,e);this.manySepFirstInternalLogic(e,r,n)}manySepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,ox],l,1280,e,ox)}}repetitionSepSecondInternal(e,r,n,i,a){for(;n();)this.CONSUME(r),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,r,n,i,a],n,1536,e,a)}doSingleRepetition(e){let r=this.getLexerPosition();return e.call(this),this.getLexerPosition()>r}orInternal(e,r){let n=this.getKeyForAutomaticLookahead(256,r),i=Pt(e)?e:e.DEF,s=this.getLaFuncFromCache(n).call(this,i);if(s!==void 0)return i[s].ALT.call(this);this.raiseNoAltException(r,e.ERR_MSG)}ruleFinallyStateUpdate(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){let e=this.LA(1),r=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new px(r,e))}}subruleInternal(e,r,n){let i;try{let a=n!==void 0?n.ARGS:void 0;return this.subruleIdx=r,i=e.apply(this,a),this.cstPostNonTerminal(i,n!==void 0&&n.LABEL!==void 0?n.LABEL:e.ruleName),i}catch(a){throw this.subruleInternalError(a,n,e.ruleName)}}subruleInternalError(e,r,n){throw lf(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,r!==void 0&&r.LABEL!==void 0?r.LABEL:n),delete e.partialCstResult),e}consumeInternal(e,r,n){let i;try{let a=this.LA(1);this.tokenMatcher(a,e)===!0?(this.consumeToken(),i=a):this.consumeInternalError(e,a,n)}catch(a){i=this.consumeInternalRecovery(e,r,a)}return this.cstPostTerminal(n!==void 0&&n.LABEL!==void 0?n.LABEL:e.name,i),i}consumeInternalError(e,r,n){let i,a=this.LA(0);throw n!==void 0&&n.ERR_MSG?i=n.ERR_MSG:i=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:r,previous:a,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new hp(i,r,a))}consumeInternalRecovery(e,r,n){if(this.recoveryEnabled&&n.name==="MismatchedTokenException"&&!this.isBackTracking()){let i=this.getFollowsForInRuleRecovery(e,r);try{return this.tryInRuleRecovery(e,i)}catch(a){throw a.name===zN?n:a}}else throw n}saveRecogState(){let e=this.errors,r=an(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:r,CST_STACK:this.CST_STACK}}reloadRecogState(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK}ruleInvocationStateUpdate(e,r,n){this.RULE_OCCURRENCE_STACK.push(n),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(r)}isBackTracking(){return this.isBackTrackingStack.length!==0}getCurrRuleFullName(){let e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]}shortRuleNameToFullName(e){return this.shortRuleNameToFull[e]}isAtEndOfInput(){return this.tokenMatcher(this.LA(1),lo)}reset(){this.resetLexerState(),this.subruleIdx=0,this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]}}});var rE,jse=N(()=>{"use strict";Xg();qt();qg();Fs();rE=class{static{o(this,"ErrorHandler")}initErrorHandler(e){this._errors=[],this.errorMessageProvider=Bt(e,"errorMessageProvider")?e.errorMessageProvider:ls.errorMessageProvider}SAVE_ERROR(e){if(lf(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:an(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")}get errors(){return an(this._errors)}set errors(e){this._errors=e}raiseEarlyExitException(e,r,n){let i=this.getCurrRuleFullName(),a=this.getGAstProductions()[i],l=Wg(e,a,r,this.maxLookahead)[0],u=[];for(let f=1;f<=this.maxLookahead;f++)u.push(this.LA(f));let h=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:l,actual:u,previous:this.LA(0),customUserDescription:n,ruleName:i});throw this.SAVE_ERROR(new mx(h,this.LA(1),this.LA(0)))}raiseNoAltException(e,r){let n=this.getCurrRuleFullName(),i=this.getGAstProductions()[n],a=Hg(e,i,this.maxLookahead),s=[];for(let h=1;h<=this.maxLookahead;h++)s.push(this.LA(h));let l=this.LA(0),u=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:a,actual:s,previous:l,customUserDescription:r,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new dx(u,this.LA(1),l))}}});var nE,Kse=N(()=>{"use strict";cx();qt();nE=class{static{o(this,"ContentAssist")}initContentAssist(){}computeContentAssist(e,r){let n=this.gastProductionsCache[e];if(pr(n))throw Error(`Rule ->${e}<- does not exist in this grammar.`);return $k([n],r,this.tokenMatcher,this.maxLookahead)}getNextPossibleTokenTypes(e){let r=ia(e.ruleStack),i=this.getGAstProductions()[r];return new Ok(i,e).startWalking()}}});function yx(t,e,r,n=!1){aE(r);let i=ga(this.recordingProdStack),a=Si(e)?e:e.DEF,s=new t({definition:[],idx:r});return n&&(s.separator=e.SEP),Bt(e,"MAX_LOOKAHEAD")&&(s.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(s),a.call(this),i.definition.push(s),this.recordingProdStack.pop(),sE}function dBe(t,e){aE(e);let r=ga(this.recordingProdStack),n=Pt(t)===!1,i=n===!1?t:t.DEF,a=new Tn({definition:[],idx:e,ignoreAmbiguities:n&&t.IGNORE_AMBIGUITIES===!0});Bt(t,"MAX_LOOKAHEAD")&&(a.maxLookahead=t.MAX_LOOKAHEAD);let s=A2(i,l=>Si(l.GATE));return a.hasPredicates=s,r.definition.push(a),Ae(i,l=>{let u=new Dn({definition:[]});a.definition.push(u),Bt(l,"IGNORE_AMBIGUITIES")?u.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:Bt(l,"GATE")&&(u.ignoreAmbiguities=!0),this.recordingProdStack.push(u),l.ALT.call(this),this.recordingProdStack.pop()}),sE}function Jse(t){return t===0?"":`${t}`}function aE(t){if(t<0||t>Zse){let e=new Error(`Invalid DSL Method idx value: <${t}>
788 + Idx value must be a none negative value smaller than ${Zse+1}`);throw e.KNOWN_RECORDER_ERROR=!0,e}}var sE,Qse,Zse,eoe,toe,fBe,iE,roe=N(()=>{"use strict";qt();os();ix();cp();up();Fs();qk();sE={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(sE);Qse=!0,Zse=Math.pow(2,8)-1,eoe=of({name:"RECORDING_PHASE_TOKEN",pattern:Xn.NA});Bu([eoe]);toe=$u(eoe,`This IToken indicates the Parser is in Recording Phase
789 + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(toe);fBe={name:`This CSTNode indicates the Parser is in Recording Phase
790 + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},iE=class{static{o(this,"GastRecorder")}initGastRecorder(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1}enableRecording(){this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",()=>{for(let e=0;e<10;e++){let r=e>0?e:"";this[`CONSUME${r}`]=function(n,i){return this.consumeInternalRecord(n,e,i)},this[`SUBRULE${r}`]=function(n,i){return this.subruleInternalRecord(n,e,i)},this[`OPTION${r}`]=function(n){return this.optionInternalRecord(n,e)},this[`OR${r}`]=function(n){return this.orInternalRecord(n,e)},this[`MANY${r}`]=function(n){this.manyInternalRecord(e,n)},this[`MANY_SEP${r}`]=function(n){this.manySepFirstInternalRecord(e,n)},this[`AT_LEAST_ONE${r}`]=function(n){this.atLeastOneInternalRecord(e,n)},this[`AT_LEAST_ONE_SEP${r}`]=function(n){this.atLeastOneSepFirstInternalRecord(e,n)}}this.consume=function(e,r,n){return this.consumeInternalRecord(r,e,n)},this.subrule=function(e,r,n){return this.subruleInternalRecord(r,e,n)},this.option=function(e,r){return this.optionInternalRecord(r,e)},this.or=function(e,r){return this.orInternalRecord(r,e)},this.many=function(e,r){this.manyInternalRecord(e,r)},this.atLeastOne=function(e,r){this.atLeastOneInternalRecord(e,r)},this.ACTION=this.ACTION_RECORD,this.BACKTRACK=this.BACKTRACK_RECORD,this.LA=this.LA_RECORD})}disableRecording(){this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",()=>{let e=this;for(let r=0;r<10;r++){let n=r>0?r:"";delete e[`CONSUME${n}`],delete e[`SUBRULE${n}`],delete e[`OPTION${n}`],delete e[`OR${n}`],delete e[`MANY${n}`],delete e[`MANY_SEP${n}`],delete e[`AT_LEAST_ONE${n}`],delete e[`AT_LEAST_ONE_SEP${n}`]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})}ACTION_RECORD(e){}BACKTRACK_RECORD(e,r){return()=>!0}LA_RECORD(e){return jg}topLevelRuleRecord(e,r){try{let n=new as({definition:[],name:e});return n.name=e,this.recordingProdStack.push(n),r.call(this),this.recordingProdStack.pop(),n}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+`
791 + This error was thrown during the "grammar recording phase" For more info see:
792 + https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}}optionInternalRecord(e,r){return yx.call(this,ln,e,r)}atLeastOneInternalRecord(e,r){yx.call(this,Ln,r,e)}atLeastOneSepFirstInternalRecord(e,r){yx.call(this,Rn,r,e,Qse)}manyInternalRecord(e,r){yx.call(this,Or,r,e)}manySepFirstInternalRecord(e,r){yx.call(this,wn,r,e,Qse)}orInternalRecord(e,r){return dBe.call(this,e,r)}subruleInternalRecord(e,r,n){if(aE(r),!e||Bt(e,"ruleName")===!1){let l=new Error(`<SUBRULE${Jse(r)}> argument is invalid expecting a Parser method reference but got: <${JSON.stringify(e)}>
793 + inside top level rule: <${this.recordingProdStack[0].name}>`);throw l.KNOWN_RECORDER_ERROR=!0,l}let i=ga(this.recordingProdStack),a=e.ruleName,s=new on({idx:r,nonTerminalName:a,label:n?.LABEL,referencedRule:void 0});return i.definition.push(s),this.outputCst?fBe:sE}consumeInternalRecord(e,r,n){if(aE(r),!_N(e)){let s=new Error(`<CONSUME${Jse(r)}> argument is invalid expecting a TokenType reference but got: <${JSON.stringify(e)}>
794 + inside top level rule: <${this.recordingProdStack[0].name}>`);throw s.KNOWN_RECORDER_ERROR=!0,s}let i=ga(this.recordingProdStack),a=new kr({idx:r,terminalType:e,label:n?.LABEL});return i.definition.push(a),toe}};o(yx,"recordProd");o(dBe,"recordOrProd");o(Jse,"getIdxSuffix");o(aE,"assertMethodIdxIsValid")});var oE,noe=N(()=>{"use strict";qt();Og();Fs();oE=class{static{o(this,"PerformanceTracer")}initPerformanceTracer(e){if(Bt(e,"traceInitPerf")){let r=e.traceInitPerf,n=typeof r=="number";this.traceInitMaxIdent=n?r:1/0,this.traceInitPerf=n?r>0:r}else this.traceInitMaxIdent=0,this.traceInitPerf=ls.traceInitPerf;this.traceInitIndent=-1}TRACE_INIT(e,r){if(this.traceInitPerf===!0){this.traceInitIndent++;let n=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent<this.traceInitMaxIdent&&console.log(`${n}--> <${e}>`);let{time:i,value:a}=tx(r),s=i>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&s(`${n}<-- <${e}> time: ${i}ms`),this.traceInitIndent--,a}else return r()}}});function ioe(t,e){e.forEach(r=>{let n=r.prototype;Object.getOwnPropertyNames(n).forEach(i=>{if(i==="constructor")return;let a=Object.getOwnPropertyDescriptor(n,i);a&&(a.get||a.set)?Object.defineProperty(t.prototype,i,a):t.prototype[i]=r.prototype[i]})})}var aoe=N(()=>{"use strict";o(ioe,"applyMixins")});function lE(t=void 0){return function(){return t}}var jg,ls,Kg,zi,vx,xx,Fs=N(()=>{"use strict";qt();Og();Oae();up();Vg();Rse();GN();Bse();Wse();qse();Yse();Xse();jse();Kse();roe();noe();aoe();fx();jg=$u(lo,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(jg);ls=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:zu,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1}),Kg=Object.freeze({recoveryValueFunc:o(()=>{},"recoveryValueFunc"),resyncEnabled:!0});(function(t){t[t.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",t[t.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",t[t.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",t[t.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",t[t.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",t[t.LEFT_RECURSION=5]="LEFT_RECURSION",t[t.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",t[t.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",t[t.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",t[t.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",t[t.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",t[t.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",t[t.TOO_MANY_ALTS=12]="TOO_MANY_ALTS",t[t.CUSTOM_LOOKAHEAD_VALIDATION=13]="CUSTOM_LOOKAHEAD_VALIDATION"})(zi||(zi={}));o(lE,"EMPTY_ALT");vx=class t{static{o(this,"Parser")}static performSelfAnalysis(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")}performSelfAnalysis(){this.TRACE_INIT("performSelfAnalysis",()=>{let e;this.selfAnalysisDone=!0;let r=this.className;this.TRACE_INIT("toFastProps",()=>{rx(this)}),this.TRACE_INIT("Grammar Recording",()=>{try{this.enableRecording(),Ae(this.definedRulesNames,i=>{let s=this[i].originalGrammarAction,l;this.TRACE_INIT(`${i} Rule`,()=>{l=this.topLevelRuleRecord(i,s)}),this.gastProductionsCache[i]=l})}finally{this.disableRecording()}});let n=[];if(this.TRACE_INIT("Grammar Resolving",()=>{n=Dse({rules:br(this.gastProductionsCache)}),this.definitionErrors=this.definitionErrors.concat(n)}),this.TRACE_INIT("Grammar Validations",()=>{if(ur(n)&&this.skipValidations===!1){let i=Lse({rules:br(this.gastProductionsCache),tokenTypes:br(this.tokensMap),errMsgProvider:Pl,grammarName:r}),a=Tse({lookaheadStrategy:this.lookaheadStrategy,rules:br(this.gastProductionsCache),tokenTypes:br(this.tokensMap),grammarName:r});this.definitionErrors=this.definitionErrors.concat(i,a)}}),ur(this.definitionErrors)&&(this.recoveryEnabled&&this.TRACE_INIT("computeAllProdsFollows",()=>{let i=Iae(br(this.gastProductionsCache));this.resyncFollows=i}),this.TRACE_INIT("ComputeLookaheadFunctions",()=>{var i,a;(a=(i=this.lookaheadStrategy).initialize)===null||a===void 0||a.call(i,{rules:br(this.gastProductionsCache)}),this.preComputeLookaheadFunctions(br(this.gastProductionsCache))})),!t.DEFER_DEFINITION_ERRORS_HANDLING&&!ur(this.definitionErrors))throw e=Je(this.definitionErrors,i=>i.message),new Error(`Parser Definition Errors detected:
795 + ${e.join(`
796 +-------------------------------
797 +`)}`)})}constructor(e,r){this.definitionErrors=[],this.selfAnalysisDone=!1;let n=this;if(n.initErrorHandler(r),n.initLexerAdapter(),n.initLooksAhead(r),n.initRecognizerEngine(e,r),n.initRecoverable(r),n.initTreeBuilder(r),n.initContentAssist(),n.initGastRecorder(r),n.initPerformanceTracer(r),Bt(r,"ignoredIssues"))throw new Error(`The <ignoredIssues> IParserConfig property has been deprecated.
798 + Please use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.
799 + See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES
800 + For further details.`);this.skipValidations=Bt(r,"skipValidations")?r.skipValidations:ls.skipValidations}};vx.DEFER_DEFINITION_ERRORS_HANDLING=!1;ioe(vx,[Hk,Xk,Zk,Jk,tE,eE,rE,nE,iE,oE]);xx=class extends vx{static{o(this,"EmbeddedActionsParser")}constructor(e,r=ls){let n=an(r);n.outputCst=!1,super(e,n)}}});var soe=N(()=>{"use strict";os()});var ooe=N(()=>{"use strict"});var loe=N(()=>{"use strict";soe();ooe()});var coe=N(()=>{"use strict";gN()});var cf=N(()=>{"use strict";gN();Fs();ix();up();qg();VN();Vg();Xg();DN();os();os();loe();coe()});function fp(t,e,r){return`${t.name}_${e}_${r}`}function doe(t){let e={decisionMap:{},decisionStates:[],ruleToStartState:new Map,ruleToStopState:new Map,states:[]};bBe(e,t);let r=t.length;for(let n=0;n<r;n++){let i=t[n],a=dp(e,i,i);a!==void 0&&RBe(e,i,a)}return e}function bBe(t,e){let r=e.length;for(let n=0;n<r;n++){let i=e[n],a=aa(t,i,void 0,{type:mBe}),s=aa(t,i,void 0,{type:Jg});a.stop=s,t.ruleToStartState.set(i,a),t.ruleToStopState.set(i,s)}}function poe(t,e,r){return r instanceof kr?QN(t,e,r.terminalType,r):r instanceof on?LBe(t,e,r):r instanceof Tn?SBe(t,e,r):r instanceof ln?CBe(t,e,r):r instanceof Or?wBe(t,e,r):r instanceof wn?TBe(t,e,r):r instanceof Ln?kBe(t,e,r):r instanceof Rn?EBe(t,e,r):dp(t,e,r)}function wBe(t,e,r){let n=aa(t,e,r,{type:hoe});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r));return goe(t,e,r,i)}function TBe(t,e,r){let n=aa(t,e,r,{type:hoe});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r)),a=QN(t,e,r.separator,r);return goe(t,e,r,i,a)}function kBe(t,e,r){let n=aa(t,e,r,{type:uoe});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r));return moe(t,e,r,i)}function EBe(t,e,r){let n=aa(t,e,r,{type:uoe});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r)),a=QN(t,e,r.separator,r);return moe(t,e,r,i,a)}function SBe(t,e,r){let n=aa(t,e,r,{type:uf});hf(t,n);let i=Je(r.definition,s=>poe(t,e,s));return e1(t,e,n,r,...i)}function CBe(t,e,r){let n=aa(t,e,r,{type:uf});hf(t,n);let i=e1(t,e,n,r,dp(t,e,r));return ABe(t,e,r,i)}function dp(t,e,r){let n=Yr(Je(r.definition,i=>poe(t,e,i)),i=>i!==void 0);return n.length===1?n[0]:n.length===0?void 0:DBe(t,n)}function moe(t,e,r,n,i){let a=n.left,s=n.right,l=aa(t,e,r,{type:xBe});hf(t,l);let u=aa(t,e,r,{type:foe});return a.loopback=l,u.loopback=l,t.decisionMap[fp(e,i?"RepetitionMandatoryWithSeparator":"RepetitionMandatory",r.idx)]=l,Ai(s,l),i===void 0?(Ai(l,a),Ai(l,u)):(Ai(l,u),Ai(l,i.left),Ai(i.right,a)),{left:a,right:u}}function goe(t,e,r,n,i){let a=n.left,s=n.right,l=aa(t,e,r,{type:vBe});hf(t,l);let u=aa(t,e,r,{type:foe}),h=aa(t,e,r,{type:yBe});return l.loopback=h,u.loopback=h,Ai(l,a),Ai(l,u),Ai(s,h),i!==void 0?(Ai(h,u),Ai(h,i.left),Ai(i.right,a)):Ai(h,l),t.decisionMap[fp(e,i?"RepetitionWithSeparator":"Repetition",r.idx)]=l,{left:l,right:u}}function ABe(t,e,r,n){let i=n.left,a=n.right;return Ai(i,a),t.decisionMap[fp(e,"Option",r.idx)]=i,n}function hf(t,e){return t.decisionStates.push(e),e.decision=t.decisionStates.length-1,e.decision}function e1(t,e,r,n,...i){let a=aa(t,e,n,{type:gBe,start:r});r.end=a;for(let l of i)l!==void 0?(Ai(r,l.left),Ai(l.right,a)):Ai(r,a);let s={left:r,right:a};return t.decisionMap[fp(e,_Be(n),n.idx)]=r,s}function _Be(t){if(t instanceof Tn)return"Alternation";if(t instanceof ln)return"Option";if(t instanceof Or)return"Repetition";if(t instanceof wn)return"RepetitionWithSeparator";if(t instanceof Ln)return"RepetitionMandatory";if(t instanceof Rn)return"RepetitionMandatoryWithSeparator";throw new Error("Invalid production type encountered")}function DBe(t,e){let r=e.length;for(let a=0;a<r-1;a++){let s=e[a],l;s.left.transitions.length===1&&(l=s.left.transitions[0]);let u=l instanceof Zg,h=l,f=e[a+1].left;s.left.type===uf&&s.right.type===uf&&l!==void 0&&(u&&h.followState===s.right||l.target===s.right)?(u?h.followState=f:l.target=f,NBe(t,s.right)):Ai(s.right,f)}let n=e[0],i=e[r-1];return{left:n.left,right:i.right}}function QN(t,e,r,n){let i=aa(t,e,n,{type:uf}),a=aa(t,e,n,{type:uf});return ZN(i,new Qg(a,r)),{left:i,right:a}}function LBe(t,e,r){let n=r.referencedRule,i=t.ruleToStartState.get(n),a=aa(t,e,r,{type:uf}),s=aa(t,e,r,{type:uf}),l=new Zg(i,n,s);return ZN(a,l),{left:a,right:s}}function RBe(t,e,r){let n=t.ruleToStartState.get(e);Ai(n,r.left);let i=t.ruleToStopState.get(e);return Ai(r.right,i),{left:n,right:i}}function Ai(t,e){let r=new wx(e);ZN(t,r)}function aa(t,e,r,n){let i=Object.assign({atn:t,production:r,epsilonOnlyTransitions:!1,rule:e,transitions:[],nextTokenWithinRule:[],stateNumber:t.states.length},n);return t.states.push(i),i}function ZN(t,e){t.transitions.length===0&&(t.epsilonOnlyTransitions=e.isEpsilon()),t.transitions.push(e)}function NBe(t,e){t.states.splice(t.states.indexOf(e),1)}var uf,mBe,uoe,hoe,Jg,gBe,yBe,vBe,xBe,foe,bx,Qg,wx,Zg,yoe=N(()=>{"use strict";Im();DL();cf();o(fp,"buildATNKey");uf=1,mBe=2,uoe=4,hoe=5,Jg=7,gBe=8,yBe=9,vBe=10,xBe=11,foe=12,bx=class{static{o(this,"AbstractTransition")}constructor(e){this.target=e}isEpsilon(){return!1}},Qg=class extends bx{static{o(this,"AtomTransition")}constructor(e,r){super(e),this.tokenType=r}},wx=class extends bx{static{o(this,"EpsilonTransition")}constructor(e){super(e)}isEpsilon(){return!0}},Zg=class extends bx{static{o(this,"RuleTransition")}constructor(e,r,n){super(e),this.rule=r,this.followState=n}isEpsilon(){return!0}};o(doe,"createATN");o(bBe,"createRuleStartAndStopATNStates");o(poe,"atom");o(wBe,"repetition");o(TBe,"repetitionSep");o(kBe,"repetitionMandatory");o(EBe,"repetitionMandatorySep");o(SBe,"alternation");o(CBe,"option");o(dp,"block");o(moe,"plus");o(goe,"star");o(ABe,"optional");o(hf,"defineDecisionState");o(e1,"makeAlts");o(_Be,"getProdType");o(DBe,"makeBlock");o(QN,"tokenRef");o(LBe,"ruleRef");o(RBe,"buildRuleHandle");o(Ai,"epsilon");o(aa,"newState");o(ZN,"addTransition");o(NBe,"removeState")});function JN(t,e=!0){return`${e?`a${t.alt}`:""}s${t.state.stateNumber}:${t.stack.map(r=>r.stateNumber.toString()).join("_")}`}var Tx,t1,voe=N(()=>{"use strict";Im();Tx={},t1=class{static{o(this,"ATNConfigSet")}constructor(){this.map={},this.configs=[]}get size(){return this.configs.length}finalize(){this.map={}}add(e){let r=JN(e);r in this.map||(this.map[r]=this.configs.length,this.configs.push(e))}get elements(){return this.configs}get alts(){return Je(this.configs,e=>e.alt)}get key(){let e="";for(let r in this.map)e+=r+":";return e}};o(JN,"getATNConfigKey")});function MBe(t,e){let r={};return n=>{let i=n.toString(),a=r[i];return a!==void 0||(a={atnStartState:t,decision:e,states:{}},r[i]=a),a}}function boe(t,e=!0){let r=new Set;for(let n of t){let i=new Set;for(let a of n){if(a===void 0){if(e)break;return!1}let s=[a.tokenTypeIdx].concat(a.categoryMatches);for(let l of s)if(r.has(l)){if(!i.has(l))return!1}else r.add(l),i.add(l)}}return!0}function IBe(t){let e=t.decisionStates.length,r=Array(e);for(let n=0;n<e;n++)r[n]=MBe(t.decisionStates[n],n);return r}function eM(t,e,r,n){let i=t[e](r),a=i.start;if(a===void 0){let l=WBe(i.atnStartState);a=koe(i,Toe(l)),i.start=a}return OBe.apply(this,[i,a,r,n])}function OBe(t,e,r,n){let i=e,a=1,s=[],l=this.LA(a++);for(;;){let u=GBe(i,l);if(u===void 0&&(u=PBe.apply(this,[t,i,l,a,r,n])),u===Tx)return zBe(s,i,l);if(u.isAcceptState===!0)return u.prediction;i=u,s.push(l),l=this.LA(a++)}}function PBe(t,e,r,n,i,a){let s=VBe(e.configs,r,i);if(s.size===0)return woe(t,e,r,Tx),Tx;let l=Toe(s),u=HBe(s,i);if(u!==void 0)l.isAcceptState=!0,l.prediction=u,l.configs.uniqueAlt=u;else if(jBe(s)){let h=Dl(s.alts);l.isAcceptState=!0,l.prediction=h,l.configs.uniqueAlt=h,BBe.apply(this,[t,n,s.alts,a])}return l=woe(t,e,r,l),l}function BBe(t,e,r,n){let i=[];for(let h=1;h<=e;h++)i.push(this.LA(h).tokenType);let a=t.atnStartState,s=a.rule,l=a.production,u=FBe({topLevelRule:s,ambiguityIndices:r,production:l,prefixPath:i});n(u)}function FBe(t){let e=Je(t.prefixPath,i=>Fu(i)).join(", "),r=t.production.idx===0?"":t.production.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(", ")}> in <${$Be(t.production)}${r}> inside <${t.topLevelRule.name}> Rule,
801 +<${e}> may appears as a prefix path in all these alternatives.
802 +`;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES
803 +For Further details.`,n}function $Be(t){if(t instanceof on)return"SUBRULE";if(t instanceof ln)return"OPTION";if(t instanceof Tn)return"OR";if(t instanceof Ln)return"AT_LEAST_ONE";if(t instanceof Rn)return"AT_LEAST_ONE_SEP";if(t instanceof wn)return"MANY_SEP";if(t instanceof Or)return"MANY";if(t instanceof kr)return"CONSUME";throw Error("non exhaustive match")}function zBe(t,e,r){let n=ya(e.configs.elements,a=>a.state.transitions),i=Qre(n.filter(a=>a instanceof Qg).map(a=>a.tokenType),a=>a.tokenTypeIdx);return{actualToken:r,possibleTokenTypes:i,tokenPath:t}}function GBe(t,e){return t.edges[e.tokenTypeIdx]}function VBe(t,e,r){let n=new t1,i=[];for(let s of t.elements){if(r.is(s.alt)===!1)continue;if(s.state.type===Jg){i.push(s);continue}let l=s.state.transitions.length;for(let u=0;u<l;u++){let h=s.state.transitions[u],f=UBe(h,e);f!==void 0&&n.add({state:f,alt:s.alt,stack:s.stack})}}let a;if(i.length===0&&n.size===1&&(a=n),a===void 0){a=new t1;for(let s of n.elements)uE(s,a)}if(i.length>0&&!YBe(a))for(let s of i)a.add(s);return a}function UBe(t,e){if(t instanceof Qg&&sx(e,t.tokenType))return t.target}function HBe(t,e){let r;for(let n of t.elements)if(e.is(n.alt)===!0){if(r===void 0)r=n.alt;else if(r!==n.alt)return}return r}function Toe(t){return{configs:t,edges:{},isAcceptState:!1,prediction:-1}}function woe(t,e,r,n){return n=koe(t,n),e.edges[r.tokenTypeIdx]=n,n}function koe(t,e){if(e===Tx)return e;let r=e.configs.key,n=t.states[r];return n!==void 0?n:(e.configs.finalize(),t.states[r]=e,e)}function WBe(t){let e=new t1,r=t.transitions.length;for(let n=0;n<r;n++){let a={state:t.transitions[n].target,alt:n,stack:[]};uE(a,e)}return e}function uE(t,e){let r=t.state;if(r.type===Jg){if(t.stack.length>0){let i=[...t.stack],s={state:i.pop(),alt:t.alt,stack:i};uE(s,e)}else e.add(t);return}r.epsilonOnlyTransitions||e.add(t);let n=r.transitions.length;for(let i=0;i<n;i++){let a=r.transitions[i],s=qBe(t,a);s!==void 0&&uE(s,e)}}function qBe(t,e){if(e instanceof wx)return{state:e.target,alt:t.alt,stack:t.stack};if(e instanceof Zg){let r=[...t.stack,e.followState];return{state:e.target,alt:t.alt,stack:r}}}function YBe(t){for(let e of t.elements)if(e.state.type===Jg)return!0;return!1}function XBe(t){for(let e of t.elements)if(e.state.type!==Jg)return!1;return!0}function jBe(t){if(XBe(t))return!0;let e=KBe(t.elements);return QBe(e)&&!ZBe(e)}function KBe(t){let e=new Map;for(let r of t){let n=JN(r,!1),i=e.get(n);i===void 0&&(i={},e.set(n,i)),i[r.alt]=!0}return e}function QBe(t){for(let e of Array.from(t.values()))if(Object.keys(e).length>1)return!0;return!1}function ZBe(t){for(let e of Array.from(t.values()))if(Object.keys(e).length===1)return!0;return!1}var cE,xoe,kx,Eoe=N(()=>{"use strict";cf();yoe();voe();BL();RL();Zre();Im();uT();$T();HT();GL();o(MBe,"createDFACache");cE=class{static{o(this,"PredicateSet")}constructor(){this.predicates=[]}is(e){return e>=this.predicates.length||this.predicates[e]}set(e,r){this.predicates[e]=r}toString(){let e="",r=this.predicates.length;for(let n=0;n<r;n++)e+=this.predicates[n]===!0?"1":"0";return e}},xoe=new cE,kx=class extends Gu{static{o(this,"LLStarLookaheadStrategy")}constructor(e){var r;super(),this.logging=(r=e?.logging)!==null&&r!==void 0?r:n=>console.log(n)}initialize(e){this.atn=doe(e.rules),this.dfas=IBe(this.atn)}validateAmbiguousAlternationAlternatives(){return[]}validateEmptyOrAlternatives(){return[]}buildLookaheadForAlternation(e){let{prodOccurrence:r,rule:n,hasPredicates:i,dynamicTokensEnabled:a}=e,s=this.dfas,l=this.logging,u=fp(n,"Alternation",r),f=this.atn.decisionMap[u].decision,d=Je(Gk({maxLookahead:1,occurrence:r,prodType:"Alternation",rule:n}),p=>Je(p,m=>m[0]));if(boe(d,!1)&&!a){let p=Xr(d,(m,g,y)=>(Ae(g,v=>{v&&(m[v.tokenTypeIdx]=y,Ae(v.categoryMatches,x=>{m[x]=y}))}),m),{});return i?function(m){var g;let y=this.LA(1),v=p[y.tokenTypeIdx];if(m!==void 0&&v!==void 0){let x=(g=m[v])===null||g===void 0?void 0:g.GATE;if(x!==void 0&&x.call(this)===!1)return}return v}:function(){let m=this.LA(1);return p[m.tokenTypeIdx]}}else return i?function(p){let m=new cE,g=p===void 0?0:p.length;for(let v=0;v<g;v++){let x=p?.[v].GATE;m.set(v,x===void 0||x.call(this))}let y=eM.call(this,s,f,m,l);return typeof y=="number"?y:void 0}:function(){let p=eM.call(this,s,f,xoe,l);return typeof p=="number"?p:void 0}}buildLookaheadForOptional(e){let{prodOccurrence:r,rule:n,prodType:i,dynamicTokensEnabled:a}=e,s=this.dfas,l=this.logging,u=fp(n,i,r),f=this.atn.decisionMap[u].decision,d=Je(Gk({maxLookahead:1,occurrence:r,prodType:i,rule:n}),p=>Je(p,m=>m[0]));if(boe(d)&&d[0][0]&&!a){let p=d[0],m=qr(p);if(m.length===1&&ur(m[0].categoryMatches)){let y=m[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===y}}else{let g=Xr(m,(y,v)=>(v!==void 0&&(y[v.tokenTypeIdx]=!0,Ae(v.categoryMatches,x=>{y[x]=!0})),y),{});return function(){let y=this.LA(1);return g[y.tokenTypeIdx]===!0}}}return function(){let p=eM.call(this,s,f,xoe,l);return typeof p=="object"?!1:p===0}}};o(boe,"isLL1Sequence");o(IBe,"initATNSimulator");o(eM,"adaptivePredict");o(OBe,"performLookahead");o(PBe,"computeLookaheadTarget");o(BBe,"reportLookaheadAmbiguity");o(FBe,"buildAmbiguityError");o($Be,"getProductionDslName");o(zBe,"buildAdaptivePredictError");o(GBe,"getExistingTargetState");o(VBe,"computeReachSet");o(UBe,"getReachableTarget");o(HBe,"getUniqueAlt");o(Toe,"newDFAState");o(woe,"addDFAEdge");o(koe,"addDFAState");o(WBe,"computeStartState");o(uE,"closure");o(qBe,"getEpsilonTarget");o(YBe,"hasConfigInRuleStopState");o(XBe,"allConfigsInRuleStopStates");o(jBe,"hasConflictTerminatingPrediction");o(KBe,"getConflictingAltSets");o(QBe,"hasConflictingAltSet");o(ZBe,"hasStateAssociatedWithOneAlt")});var Soe=N(()=>{"use strict";Eoe()});var Coe,tM,Aoe,hE,jr,Pr,fE,_oe,rM,Doe,Loe,Roe,Noe,nM,Moe,Ioe,Ooe,dE,r1,n1,iM,i1,Poe,aM,sM,oM,lM,cM,Boe,Foe,uM,$oe,hM,Ex,zoe,Goe,Voe,Uoe,Hoe,Woe,qoe,Yoe,pE,Xoe,joe,Koe,Qoe,Zoe,Joe,ele,tle,rle,nle,ile,mE,ale,sle,ole,lle,cle,ule,hle,fle,dle,ple,mle,gle,yle,fM,dM,vle,xle,ble,wle,Tle,kle,Ele,Sle,Cle,pM,Fe,mM=N(()=>{"use strict";(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(Coe||(Coe={}));(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(tM||(tM={}));(function(t){t.MIN_VALUE=-2147483648,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(Aoe||(Aoe={}));(function(t){t.MIN_VALUE=0,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(hE||(hE={}));(function(t){function e(n,i){return n===Number.MAX_VALUE&&(n=hE.MAX_VALUE),i===Number.MAX_VALUE&&(i=hE.MAX_VALUE),{line:n,character:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.uinteger(i.line)&&Fe.uinteger(i.character)}o(r,"is"),t.is=r})(jr||(jr={}));(function(t){function e(n,i,a,s){if(Fe.uinteger(n)&&Fe.uinteger(i)&&Fe.uinteger(a)&&Fe.uinteger(s))return{start:jr.create(n,i),end:jr.create(a,s)};if(jr.is(n)&&jr.is(i))return{start:n,end:i};throw new Error(`Range#create called with invalid arguments[${n}, ${i}, ${a}, ${s}]`)}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&jr.is(i.start)&&jr.is(i.end)}o(r,"is"),t.is=r})(Pr||(Pr={}));(function(t){function e(n,i){return{uri:n,range:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Pr.is(i.range)&&(Fe.string(i.uri)||Fe.undefined(i.uri))}o(r,"is"),t.is=r})(fE||(fE={}));(function(t){function e(n,i,a,s){return{targetUri:n,targetRange:i,targetSelectionRange:a,originSelectionRange:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Pr.is(i.targetRange)&&Fe.string(i.targetUri)&&Pr.is(i.targetSelectionRange)&&(Pr.is(i.originSelectionRange)||Fe.undefined(i.originSelectionRange))}o(r,"is"),t.is=r})(_oe||(_oe={}));(function(t){function e(n,i,a,s){return{red:n,green:i,blue:a,alpha:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.numberRange(i.red,0,1)&&Fe.numberRange(i.green,0,1)&&Fe.numberRange(i.blue,0,1)&&Fe.numberRange(i.alpha,0,1)}o(r,"is"),t.is=r})(rM||(rM={}));(function(t){function e(n,i){return{range:n,color:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Pr.is(i.range)&&rM.is(i.color)}o(r,"is"),t.is=r})(Doe||(Doe={}));(function(t){function e(n,i,a){return{label:n,textEdit:i,additionalTextEdits:a}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.string(i.label)&&(Fe.undefined(i.textEdit)||n1.is(i))&&(Fe.undefined(i.additionalTextEdits)||Fe.typedArray(i.additionalTextEdits,n1.is))}o(r,"is"),t.is=r})(Loe||(Loe={}));(function(t){t.Comment="comment",t.Imports="imports",t.Region="region"})(Roe||(Roe={}));(function(t){function e(n,i,a,s,l,u){let h={startLine:n,endLine:i};return Fe.defined(a)&&(h.startCharacter=a),Fe.defined(s)&&(h.endCharacter=s),Fe.defined(l)&&(h.kind=l),Fe.defined(u)&&(h.collapsedText=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.uinteger(i.startLine)&&Fe.uinteger(i.startLine)&&(Fe.undefined(i.startCharacter)||Fe.uinteger(i.startCharacter))&&(Fe.undefined(i.endCharacter)||Fe.uinteger(i.endCharacter))&&(Fe.undefined(i.kind)||Fe.string(i.kind))}o(r,"is"),t.is=r})(Noe||(Noe={}));(function(t){function e(n,i){return{location:n,message:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&fE.is(i.location)&&Fe.string(i.message)}o(r,"is"),t.is=r})(nM||(nM={}));(function(t){t.Error=1,t.Warning=2,t.Information=3,t.Hint=4})(Moe||(Moe={}));(function(t){t.Unnecessary=1,t.Deprecated=2})(Ioe||(Ioe={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(n)&&Fe.string(n.href)}o(e,"is"),t.is=e})(Ooe||(Ooe={}));(function(t){function e(n,i,a,s,l,u){let h={range:n,message:i};return Fe.defined(a)&&(h.severity=a),Fe.defined(s)&&(h.code=s),Fe.defined(l)&&(h.source=l),Fe.defined(u)&&(h.relatedInformation=u),h}o(e,"create"),t.create=e;function r(n){var i;let a=n;return Fe.defined(a)&&Pr.is(a.range)&&Fe.string(a.message)&&(Fe.number(a.severity)||Fe.undefined(a.severity))&&(Fe.integer(a.code)||Fe.string(a.code)||Fe.undefined(a.code))&&(Fe.undefined(a.codeDescription)||Fe.string((i=a.codeDescription)===null||i===void 0?void 0:i.href))&&(Fe.string(a.source)||Fe.undefined(a.source))&&(Fe.undefined(a.relatedInformation)||Fe.typedArray(a.relatedInformation,nM.is))}o(r,"is"),t.is=r})(dE||(dE={}));(function(t){function e(n,i,...a){let s={title:n,command:i};return Fe.defined(a)&&a.length>0&&(s.arguments=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.title)&&Fe.string(i.command)}o(r,"is"),t.is=r})(r1||(r1={}));(function(t){function e(a,s){return{range:a,newText:s}}o(e,"replace"),t.replace=e;function r(a,s){return{range:{start:a,end:a},newText:s}}o(r,"insert"),t.insert=r;function n(a){return{range:a,newText:""}}o(n,"del"),t.del=n;function i(a){let s=a;return Fe.objectLiteral(s)&&Fe.string(s.newText)&&Pr.is(s.range)}o(i,"is"),t.is=i})(n1||(n1={}));(function(t){function e(n,i,a){let s={label:n};return i!==void 0&&(s.needsConfirmation=i),a!==void 0&&(s.description=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Fe.string(i.label)&&(Fe.boolean(i.needsConfirmation)||i.needsConfirmation===void 0)&&(Fe.string(i.description)||i.description===void 0)}o(r,"is"),t.is=r})(iM||(iM={}));(function(t){function e(r){let n=r;return Fe.string(n)}o(e,"is"),t.is=e})(i1||(i1={}));(function(t){function e(a,s,l){return{range:a,newText:s,annotationId:l}}o(e,"replace"),t.replace=e;function r(a,s,l){return{range:{start:a,end:a},newText:s,annotationId:l}}o(r,"insert"),t.insert=r;function n(a,s){return{range:a,newText:"",annotationId:s}}o(n,"del"),t.del=n;function i(a){let s=a;return n1.is(s)&&(iM.is(s.annotationId)||i1.is(s.annotationId))}o(i,"is"),t.is=i})(Poe||(Poe={}));(function(t){function e(n,i){return{textDocument:n,edits:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&uM.is(i.textDocument)&&Array.isArray(i.edits)}o(r,"is"),t.is=r})(aM||(aM={}));(function(t){function e(n,i,a){let s={kind:"create",uri:n};return i!==void 0&&(i.overwrite!==void 0||i.ignoreIfExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="create"&&Fe.string(i.uri)&&(i.options===void 0||(i.options.overwrite===void 0||Fe.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||Fe.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||i1.is(i.annotationId))}o(r,"is"),t.is=r})(sM||(sM={}));(function(t){function e(n,i,a,s){let l={kind:"rename",oldUri:n,newUri:i};return a!==void 0&&(a.overwrite!==void 0||a.ignoreIfExists!==void 0)&&(l.options=a),s!==void 0&&(l.annotationId=s),l}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="rename"&&Fe.string(i.oldUri)&&Fe.string(i.newUri)&&(i.options===void 0||(i.options.overwrite===void 0||Fe.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||Fe.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||i1.is(i.annotationId))}o(r,"is"),t.is=r})(oM||(oM={}));(function(t){function e(n,i,a){let s={kind:"delete",uri:n};return i!==void 0&&(i.recursive!==void 0||i.ignoreIfNotExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="delete"&&Fe.string(i.uri)&&(i.options===void 0||(i.options.recursive===void 0||Fe.boolean(i.options.recursive))&&(i.options.ignoreIfNotExists===void 0||Fe.boolean(i.options.ignoreIfNotExists)))&&(i.annotationId===void 0||i1.is(i.annotationId))}o(r,"is"),t.is=r})(lM||(lM={}));(function(t){function e(r){let n=r;return n&&(n.changes!==void 0||n.documentChanges!==void 0)&&(n.documentChanges===void 0||n.documentChanges.every(i=>Fe.string(i.kind)?sM.is(i)||oM.is(i)||lM.is(i):aM.is(i)))}o(e,"is"),t.is=e})(cM||(cM={}));(function(t){function e(n){return{uri:n}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)}o(r,"is"),t.is=r})(Boe||(Boe={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)&&Fe.integer(i.version)}o(r,"is"),t.is=r})(Foe||(Foe={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)&&(i.version===null||Fe.integer(i.version))}o(r,"is"),t.is=r})(uM||(uM={}));(function(t){function e(n,i,a,s){return{uri:n,languageId:i,version:a,text:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.string(i.uri)&&Fe.string(i.languageId)&&Fe.integer(i.version)&&Fe.string(i.text)}o(r,"is"),t.is=r})($oe||($oe={}));(function(t){t.PlainText="plaintext",t.Markdown="markdown";function e(r){let n=r;return n===t.PlainText||n===t.Markdown}o(e,"is"),t.is=e})(hM||(hM={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(r)&&hM.is(n.kind)&&Fe.string(n.value)}o(e,"is"),t.is=e})(Ex||(Ex={}));(function(t){t.Text=1,t.Method=2,t.Function=3,t.Constructor=4,t.Field=5,t.Variable=6,t.Class=7,t.Interface=8,t.Module=9,t.Property=10,t.Unit=11,t.Value=12,t.Enum=13,t.Keyword=14,t.Snippet=15,t.Color=16,t.File=17,t.Reference=18,t.Folder=19,t.EnumMember=20,t.Constant=21,t.Struct=22,t.Event=23,t.Operator=24,t.TypeParameter=25})(zoe||(zoe={}));(function(t){t.PlainText=1,t.Snippet=2})(Goe||(Goe={}));(function(t){t.Deprecated=1})(Voe||(Voe={}));(function(t){function e(n,i,a){return{newText:n,insert:i,replace:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Fe.string(i.newText)&&Pr.is(i.insert)&&Pr.is(i.replace)}o(r,"is"),t.is=r})(Uoe||(Uoe={}));(function(t){t.asIs=1,t.adjustIndentation=2})(Hoe||(Hoe={}));(function(t){function e(r){let n=r;return n&&(Fe.string(n.detail)||n.detail===void 0)&&(Fe.string(n.description)||n.description===void 0)}o(e,"is"),t.is=e})(Woe||(Woe={}));(function(t){function e(r){return{label:r}}o(e,"create"),t.create=e})(qoe||(qoe={}));(function(t){function e(r,n){return{items:r||[],isIncomplete:!!n}}o(e,"create"),t.create=e})(Yoe||(Yoe={}));(function(t){function e(n){return n.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}o(e,"fromPlainText"),t.fromPlainText=e;function r(n){let i=n;return Fe.string(i)||Fe.objectLiteral(i)&&Fe.string(i.language)&&Fe.string(i.value)}o(r,"is"),t.is=r})(pE||(pE={}));(function(t){function e(r){let n=r;return!!n&&Fe.objectLiteral(n)&&(Ex.is(n.contents)||pE.is(n.contents)||Fe.typedArray(n.contents,pE.is))&&(r.range===void 0||Pr.is(r.range))}o(e,"is"),t.is=e})(Xoe||(Xoe={}));(function(t){function e(r,n){return n?{label:r,documentation:n}:{label:r}}o(e,"create"),t.create=e})(joe||(joe={}));(function(t){function e(r,n,...i){let a={label:r};return Fe.defined(n)&&(a.documentation=n),Fe.defined(i)?a.parameters=i:a.parameters=[],a}o(e,"create"),t.create=e})(Koe||(Koe={}));(function(t){t.Text=1,t.Read=2,t.Write=3})(Qoe||(Qoe={}));(function(t){function e(r,n){let i={range:r};return Fe.number(n)&&(i.kind=n),i}o(e,"create"),t.create=e})(Zoe||(Zoe={}));(function(t){t.File=1,t.Module=2,t.Namespace=3,t.Package=4,t.Class=5,t.Method=6,t.Property=7,t.Field=8,t.Constructor=9,t.Enum=10,t.Interface=11,t.Function=12,t.Variable=13,t.Constant=14,t.String=15,t.Number=16,t.Boolean=17,t.Array=18,t.Object=19,t.Key=20,t.Null=21,t.EnumMember=22,t.Struct=23,t.Event=24,t.Operator=25,t.TypeParameter=26})(Joe||(Joe={}));(function(t){t.Deprecated=1})(ele||(ele={}));(function(t){function e(r,n,i,a,s){let l={name:r,kind:n,location:{uri:a,range:i}};return s&&(l.containerName=s),l}o(e,"create"),t.create=e})(tle||(tle={}));(function(t){function e(r,n,i,a){return a!==void 0?{name:r,kind:n,location:{uri:i,range:a}}:{name:r,kind:n,location:{uri:i}}}o(e,"create"),t.create=e})(rle||(rle={}));(function(t){function e(n,i,a,s,l,u){let h={name:n,detail:i,kind:a,range:s,selectionRange:l};return u!==void 0&&(h.children=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Fe.string(i.name)&&Fe.number(i.kind)&&Pr.is(i.range)&&Pr.is(i.selectionRange)&&(i.detail===void 0||Fe.string(i.detail))&&(i.deprecated===void 0||Fe.boolean(i.deprecated))&&(i.children===void 0||Array.isArray(i.children))&&(i.tags===void 0||Array.isArray(i.tags))}o(r,"is"),t.is=r})(nle||(nle={}));(function(t){t.Empty="",t.QuickFix="quickfix",t.Refactor="refactor",t.RefactorExtract="refactor.extract",t.RefactorInline="refactor.inline",t.RefactorRewrite="refactor.rewrite",t.Source="source",t.SourceOrganizeImports="source.organizeImports",t.SourceFixAll="source.fixAll"})(ile||(ile={}));(function(t){t.Invoked=1,t.Automatic=2})(mE||(mE={}));(function(t){function e(n,i,a){let s={diagnostics:n};return i!=null&&(s.only=i),a!=null&&(s.triggerKind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.typedArray(i.diagnostics,dE.is)&&(i.only===void 0||Fe.typedArray(i.only,Fe.string))&&(i.triggerKind===void 0||i.triggerKind===mE.Invoked||i.triggerKind===mE.Automatic)}o(r,"is"),t.is=r})(ale||(ale={}));(function(t){function e(n,i,a){let s={title:n},l=!0;return typeof i=="string"?(l=!1,s.kind=i):r1.is(i)?s.command=i:s.edit=i,l&&a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Fe.string(i.title)&&(i.diagnostics===void 0||Fe.typedArray(i.diagnostics,dE.is))&&(i.kind===void 0||Fe.string(i.kind))&&(i.edit!==void 0||i.command!==void 0)&&(i.command===void 0||r1.is(i.command))&&(i.isPreferred===void 0||Fe.boolean(i.isPreferred))&&(i.edit===void 0||cM.is(i.edit))}o(r,"is"),t.is=r})(sle||(sle={}));(function(t){function e(n,i){let a={range:n};return Fe.defined(i)&&(a.data=i),a}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Pr.is(i.range)&&(Fe.undefined(i.command)||r1.is(i.command))}o(r,"is"),t.is=r})(ole||(ole={}));(function(t){function e(n,i){return{tabSize:n,insertSpaces:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Fe.uinteger(i.tabSize)&&Fe.boolean(i.insertSpaces)}o(r,"is"),t.is=r})(lle||(lle={}));(function(t){function e(n,i,a){return{range:n,target:i,data:a}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Pr.is(i.range)&&(Fe.undefined(i.target)||Fe.string(i.target))}o(r,"is"),t.is=r})(cle||(cle={}));(function(t){function e(n,i){return{range:n,parent:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&Pr.is(i.range)&&(i.parent===void 0||t.is(i.parent))}o(r,"is"),t.is=r})(ule||(ule={}));(function(t){t.namespace="namespace",t.type="type",t.class="class",t.enum="enum",t.interface="interface",t.struct="struct",t.typeParameter="typeParameter",t.parameter="parameter",t.variable="variable",t.property="property",t.enumMember="enumMember",t.event="event",t.function="function",t.method="method",t.macro="macro",t.keyword="keyword",t.modifier="modifier",t.comment="comment",t.string="string",t.number="number",t.regexp="regexp",t.operator="operator",t.decorator="decorator"})(hle||(hle={}));(function(t){t.declaration="declaration",t.definition="definition",t.readonly="readonly",t.static="static",t.deprecated="deprecated",t.abstract="abstract",t.async="async",t.modification="modification",t.documentation="documentation",t.defaultLibrary="defaultLibrary"})(fle||(fle={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(n)&&(n.resultId===void 0||typeof n.resultId=="string")&&Array.isArray(n.data)&&(n.data.length===0||typeof n.data[0]=="number")}o(e,"is"),t.is=e})(dle||(dle={}));(function(t){function e(n,i){return{range:n,text:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Pr.is(i.range)&&Fe.string(i.text)}o(r,"is"),t.is=r})(ple||(ple={}));(function(t){function e(n,i,a){return{range:n,variableName:i,caseSensitiveLookup:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Pr.is(i.range)&&Fe.boolean(i.caseSensitiveLookup)&&(Fe.string(i.variableName)||i.variableName===void 0)}o(r,"is"),t.is=r})(mle||(mle={}));(function(t){function e(n,i){return{range:n,expression:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Pr.is(i.range)&&(Fe.string(i.expression)||i.expression===void 0)}o(r,"is"),t.is=r})(gle||(gle={}));(function(t){function e(n,i){return{frameId:n,stoppedLocation:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.defined(i)&&Pr.is(n.stoppedLocation)}o(r,"is"),t.is=r})(yle||(yle={}));(function(t){t.Type=1,t.Parameter=2;function e(r){return r===1||r===2}o(e,"is"),t.is=e})(fM||(fM={}));(function(t){function e(n){return{value:n}}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&(i.tooltip===void 0||Fe.string(i.tooltip)||Ex.is(i.tooltip))&&(i.location===void 0||fE.is(i.location))&&(i.command===void 0||r1.is(i.command))}o(r,"is"),t.is=r})(dM||(dM={}));(function(t){function e(n,i,a){let s={position:n,label:i};return a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Fe.objectLiteral(i)&&jr.is(i.position)&&(Fe.string(i.label)||Fe.typedArray(i.label,dM.is))&&(i.kind===void 0||fM.is(i.kind))&&i.textEdits===void 0||Fe.typedArray(i.textEdits,n1.is)&&(i.tooltip===void 0||Fe.string(i.tooltip)||Ex.is(i.tooltip))&&(i.paddingLeft===void 0||Fe.boolean(i.paddingLeft))&&(i.paddingRight===void 0||Fe.boolean(i.paddingRight))}o(r,"is"),t.is=r})(vle||(vle={}));(function(t){function e(r){return{kind:"snippet",value:r}}o(e,"createSnippet"),t.createSnippet=e})(xle||(xle={}));(function(t){function e(r,n,i,a){return{insertText:r,filterText:n,range:i,command:a}}o(e,"create"),t.create=e})(ble||(ble={}));(function(t){function e(r){return{items:r}}o(e,"create"),t.create=e})(wle||(wle={}));(function(t){t.Invoked=0,t.Automatic=1})(Tle||(Tle={}));(function(t){function e(r,n){return{range:r,text:n}}o(e,"create"),t.create=e})(kle||(kle={}));(function(t){function e(r,n){return{triggerKind:r,selectedCompletionInfo:n}}o(e,"create"),t.create=e})(Ele||(Ele={}));(function(t){function e(r){let n=r;return Fe.objectLiteral(n)&&tM.is(n.uri)&&Fe.string(n.name)}o(e,"is"),t.is=e})(Sle||(Sle={}));(function(t){function e(a,s,l,u){return new pM(a,s,l,u)}o(e,"create"),t.create=e;function r(a){let s=a;return!!(Fe.defined(s)&&Fe.string(s.uri)&&(Fe.undefined(s.languageId)||Fe.string(s.languageId))&&Fe.uinteger(s.lineCount)&&Fe.func(s.getText)&&Fe.func(s.positionAt)&&Fe.func(s.offsetAt))}o(r,"is"),t.is=r;function n(a,s){let l=a.getText(),u=i(s,(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),h=l.length;for(let f=u.length-1;f>=0;f--){let d=u[f],p=a.offsetAt(d.range.start),m=a.offsetAt(d.range.end);if(m<=h)l=l.substring(0,p)+d.newText+l.substring(m,l.length);else throw new Error("Overlapping edit");h=p}return l}o(n,"applyEdits"),t.applyEdits=n;function i(a,s){if(a.length<=1)return a;let l=a.length/2|0,u=a.slice(0,l),h=a.slice(l);i(u,s),i(h,s);let f=0,d=0,p=0;for(;f<u.length&&d<h.length;)s(u[f],h[d])<=0?a[p++]=u[f++]:a[p++]=h[d++];for(;f<u.length;)a[p++]=u[f++];for(;d<h.length;)a[p++]=h[d++];return a}o(i,"mergeSort")})(Cle||(Cle={}));pM=class{static{o(this,"FullTextDocument")}constructor(e,r,n,i){this._uri=e,this._languageId=r,this._version=n,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let r=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(r,n)}return this._content}update(e,r){this._content=e.text,this._version=r,this._lineOffsets=void 0}getLineOffsets(){if(this._lineOffsets===void 0){let e=[],r=this._content,n=!0;for(let i=0;i<r.length;i++){n&&(e.push(i),n=!1);let a=r.charAt(i);n=a==="\r"||a===`
804 +`,a==="\r"&&i+1<r.length&&r.charAt(i+1)===`
805 +`&&i++}n&&r.length>0&&e.push(r.length),this._lineOffsets=e}return this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let r=this.getLineOffsets(),n=0,i=r.length;if(i===0)return jr.create(0,e);for(;n<i;){let s=Math.floor((n+i)/2);r[s]>e?i=s:n=s+1}let a=n-1;return jr.create(a,e-r[a])}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line],i=e.line+1<r.length?r[e.line+1]:this._content.length;return Math.max(Math.min(n+e.character,i),n)}get lineCount(){return this.getLineOffsets().length}};(function(t){let e=Object.prototype.toString;function r(m){return typeof m<"u"}o(r,"defined"),t.defined=r;function n(m){return typeof m>"u"}o(n,"undefined"),t.undefined=n;function i(m){return m===!0||m===!1}o(i,"boolean"),t.boolean=i;function a(m){return e.call(m)==="[object String]"}o(a,"string"),t.string=a;function s(m){return e.call(m)==="[object Number]"}o(s,"number"),t.number=s;function l(m,g,y){return e.call(m)==="[object Number]"&&g<=m&&m<=y}o(l,"numberRange"),t.numberRange=l;function u(m){return e.call(m)==="[object Number]"&&-2147483648<=m&&m<=2147483647}o(u,"integer"),t.integer=u;function h(m){return e.call(m)==="[object Number]"&&0<=m&&m<=2147483647}o(h,"uinteger"),t.uinteger=h;function f(m){return e.call(m)==="[object Function]"}o(f,"func"),t.func=f;function d(m){return m!==null&&typeof m=="object"}o(d,"objectLiteral"),t.objectLiteral=d;function p(m,g){return Array.isArray(m)&&m.every(g)}o(p,"typedArray"),t.typedArray=p})(Fe||(Fe={}))});var Sx,Cx,pp,mp,gM,a1,gE=N(()=>{"use strict";mM();Nl();Sx=class{static{o(this,"CstNodeBuilder")}constructor(){this.nodeStack=[]}get current(){var e;return(e=this.nodeStack[this.nodeStack.length-1])!==null&&e!==void 0?e:this.rootNode}buildRootNode(e){return this.rootNode=new a1(e),this.rootNode.root=this.rootNode,this.nodeStack=[this.rootNode],this.rootNode}buildCompositeNode(e){let r=new mp;return r.grammarSource=e,r.root=this.rootNode,this.current.content.push(r),this.nodeStack.push(r),r}buildLeafNode(e,r){let n=new pp(e.startOffset,e.image.length,Gm(e),e.tokenType,!r);return n.grammarSource=r,n.root=this.rootNode,this.current.content.push(n),n}removeNode(e){let r=e.container;if(r){let n=r.content.indexOf(e);n>=0&&r.content.splice(n,1)}}addHiddenNodes(e){let r=[];for(let a of e){let s=new pp(a.startOffset,a.image.length,Gm(a),a.tokenType,!0);s.root=this.rootNode,r.push(s)}let n=this.current,i=!1;if(n.content.length>0){n.content.push(...r);return}for(;n.container;){let a=n.container.content.indexOf(n);if(a>0){n.container.content.splice(a,0,...r),i=!0;break}n=n.container}i||this.rootNode.content.unshift(...r)}construct(e){let r=this.current;typeof e.$type=="string"&&(this.current.astNode=e),e.$cstNode=r;let n=this.nodeStack.pop();n?.content.length===0&&this.removeNode(n)}},Cx=class{static{o(this,"AbstractCstNode")}get parent(){return this.container}get feature(){return this.grammarSource}get hidden(){return!1}get astNode(){var e,r;let n=typeof((e=this._astNode)===null||e===void 0?void 0:e.$type)=="string"?this._astNode:(r=this.container)===null||r===void 0?void 0:r.astNode;if(!n)throw new Error("This node has no associated AST element");return n}set astNode(e){this._astNode=e}get element(){return this.astNode}get text(){return this.root.fullText.substring(this.offset,this.end)}},pp=class extends Cx{static{o(this,"LeafCstNodeImpl")}get offset(){return this._offset}get length(){return this._length}get end(){return this._offset+this._length}get hidden(){return this._hidden}get tokenType(){return this._tokenType}get range(){return this._range}constructor(e,r,n,i,a=!1){super(),this._hidden=a,this._offset=e,this._tokenType=i,this._length=r,this._range=n}},mp=class extends Cx{static{o(this,"CompositeCstNodeImpl")}constructor(){super(...arguments),this.content=new gM(this)}get children(){return this.content}get offset(){var e,r;return(r=(e=this.firstNonHiddenNode)===null||e===void 0?void 0:e.offset)!==null&&r!==void 0?r:0}get length(){return this.end-this.offset}get end(){var e,r;return(r=(e=this.lastNonHiddenNode)===null||e===void 0?void 0:e.end)!==null&&r!==void 0?r:0}get range(){let e=this.firstNonHiddenNode,r=this.lastNonHiddenNode;if(e&&r){if(this._rangeCache===void 0){let{range:n}=e,{range:i}=r;this._rangeCache={start:n.start,end:i.end.line<n.start.line?n.start:i.end}}return this._rangeCache}else return{start:jr.create(0,0),end:jr.create(0,0)}}get firstNonHiddenNode(){for(let e of this.content)if(!e.hidden)return e;return this.content[0]}get lastNonHiddenNode(){for(let e=this.content.length-1;e>=0;e--){let r=this.content[e];if(!r.hidden)return r}return this.content[this.content.length-1]}},gM=class t extends Array{static{o(this,"CstNodeContainer")}constructor(e){super(),this.parent=e,Object.setPrototypeOf(this,t.prototype)}push(...e){return this.addParents(e),super.push(...e)}unshift(...e){return this.addParents(e),super.unshift(...e)}splice(e,r,...n){return this.addParents(n),super.splice(e,r,...n)}addParents(e){for(let r of e)r.container=this.parent}},a1=class extends mp{static{o(this,"RootCstNodeImpl")}get text(){return this._text.substring(this.offset,this.end)}get fullText(){return this._text}constructor(e){super(),this._text="",this._text=e??""}}});function yM(t){return t.$type===yE}var yE,Ale,_le,Ax,_x,vE,s1,Dx,JBe,vM,Lx=N(()=>{"use strict";cf();Soe();Rc();Ol();is();gE();yE=Symbol("Datatype");o(yM,"isDataTypeNode");Ale="\u200B",_le=o(t=>t.endsWith(Ale)?t:t+Ale,"withRuleSuffix"),Ax=class{static{o(this,"AbstractLangiumParser")}constructor(e){this._unorderedGroups=new Map,this.allRules=new Map,this.lexer=e.parser.Lexer;let r=this.lexer.definition,n=e.LanguageMetaData.mode==="production";this.wrapper=new vM(r,Object.assign(Object.assign({},e.parser.ParserConfig),{skipValidations:n,errorMessageProvider:e.parser.ParserErrorMessageProvider}))}alternatives(e,r){this.wrapper.wrapOr(e,r)}optional(e,r){this.wrapper.wrapOption(e,r)}many(e,r){this.wrapper.wrapMany(e,r)}atLeastOne(e,r){this.wrapper.wrapAtLeastOne(e,r)}getRule(e){return this.allRules.get(e)}isRecording(){return this.wrapper.IS_RECORDING}get unorderedGroups(){return this._unorderedGroups}getRuleStack(){return this.wrapper.RULE_STACK}finalize(){this.wrapper.wrapSelfAnalysis()}},_x=class extends Ax{static{o(this,"LangiumParser")}get current(){return this.stack[this.stack.length-1]}constructor(e){super(e),this.nodeBuilder=new Sx,this.stack=[],this.assignmentMap=new Map,this.linker=e.references.Linker,this.converter=e.parser.ValueConverter,this.astReflection=e.shared.AstReflection}rule(e,r){let n=this.computeRuleType(e),i=this.wrapper.DEFINE_RULE(_le(e.name),this.startImplementation(n,r).bind(this));return this.allRules.set(e.name,i),e.entry&&(this.mainRule=i),i}computeRuleType(e){if(!e.fragment){if(Z2(e))return yE;{let r=Rg(e);return r??e.name}}}parse(e,r={}){this.nodeBuilder.buildRootNode(e);let n=this.lexerResult=this.lexer.tokenize(e);this.wrapper.input=n.tokens;let i=r.rule?this.allRules.get(r.rule):this.mainRule;if(!i)throw new Error(r.rule?`No rule found with name '${r.rule}'`:"No main rule available.");let a=i.call(this.wrapper,{});return this.nodeBuilder.addHiddenNodes(n.hidden),this.unorderedGroups.clear(),this.lexerResult=void 0,{value:a,lexerErrors:n.errors,lexerReport:n.report,parserErrors:this.wrapper.errors}}startImplementation(e,r){return n=>{let i=!this.isRecording()&&e!==void 0;if(i){let s={$type:e};this.stack.push(s),e===yE&&(s.value="")}let a;try{a=r(n)}catch{a=void 0}return a===void 0&&i&&(a=this.construct()),a}}extractHiddenTokens(e){let r=this.lexerResult.hidden;if(!r.length)return[];let n=e.startOffset;for(let i=0;i<r.length;i++)if(r[i].startOffset>n)return r.splice(0,i);return r.splice(0,r.length)}consume(e,r,n){let i=this.wrapper.wrapConsume(e,r);if(!this.isRecording()&&this.isValidToken(i)){let a=this.extractHiddenTokens(i);this.nodeBuilder.addHiddenNodes(a);let s=this.nodeBuilder.buildLeafNode(i,n),{assignment:l,isCrossRef:u}=this.getAssignment(n),h=this.current;if(l){let f=Ho(n)?i.image:this.converter.convert(i.image,s);this.assign(l.operator,l.feature,f,s,u)}else if(yM(h)){let f=i.image;Ho(n)||(f=this.converter.convert(f,s).toString()),h.value+=f}}}isValidToken(e){return!e.isInsertedInRecovery&&!isNaN(e.startOffset)&&typeof e.endOffset=="number"&&!isNaN(e.endOffset)}subrule(e,r,n,i,a){let s;!this.isRecording()&&!n&&(s=this.nodeBuilder.buildCompositeNode(i));let l=this.wrapper.wrapSubrule(e,r,a);!this.isRecording()&&s&&s.length>0&&this.performSubruleAssignment(l,i,s)}performSubruleAssignment(e,r,n){let{assignment:i,isCrossRef:a}=this.getAssignment(r);if(i)this.assign(i.operator,i.feature,e,n,a);else if(!i){let s=this.current;if(yM(s))s.value+=e.toString();else if(typeof e=="object"&&e){let u=this.assignWithoutOverride(e,s);this.stack.pop(),this.stack.push(u)}}}action(e,r){if(!this.isRecording()){let n=this.current;if(r.feature&&r.operator){n=this.construct(),this.nodeBuilder.removeNode(n.$cstNode),this.nodeBuilder.buildCompositeNode(r).content.push(n.$cstNode);let a={$type:e};this.stack.push(a),this.assign(r.operator,r.feature,n,n.$cstNode,!1)}else n.$type=e}}construct(){if(this.isRecording())return;let e=this.current;return vk(e),this.nodeBuilder.construct(e),this.stack.pop(),yM(e)?this.converter.convert(e.value,e.$cstNode):(XR(this.astReflection,e),e)}getAssignment(e){if(!this.assignmentMap.has(e)){let r=tp(e,Ml);this.assignmentMap.set(e,{assignment:r,isCrossRef:r?ep(r.terminal):!1})}return this.assignmentMap.get(e)}assign(e,r,n,i,a){let s=this.current,l;switch(a&&typeof n=="string"?l=this.linker.buildReference(s,r,i,n):l=n,e){case"=":{s[r]=l;break}case"?=":{s[r]=!0;break}case"+=":Array.isArray(s[r])||(s[r]=[]),s[r].push(l)}}assignWithoutOverride(e,r){for(let[i,a]of Object.entries(r)){let s=e[i];s===void 0?e[i]=a:Array.isArray(s)&&Array.isArray(a)&&(a.push(...s),e[i]=a)}let n=e.$cstNode;return n&&(n.astNode=void 0,e.$cstNode=void 0),e}get definitionErrors(){return this.wrapper.definitionErrors}},vE=class{static{o(this,"AbstractParserErrorMessageProvider")}buildMismatchTokenMessage(e){return zu.buildMismatchTokenMessage(e)}buildNotAllInputParsedMessage(e){return zu.buildNotAllInputParsedMessage(e)}buildNoViableAltMessage(e){return zu.buildNoViableAltMessage(e)}buildEarlyExitMessage(e){return zu.buildEarlyExitMessage(e)}},s1=class extends vE{static{o(this,"LangiumParserErrorMessageProvider")}buildMismatchTokenMessage({expected:e,actual:r}){return`Expecting ${e.LABEL?"`"+e.LABEL+"`":e.name.endsWith(":KW")?`keyword '${e.name.substring(0,e.name.length-3)}'`:`token of type '${e.name}'`} but found \`${r.image}\`.`}buildNotAllInputParsedMessage({firstRedundant:e}){return`Expecting end of file but found \`${e.image}\`.`}},Dx=class extends Ax{static{o(this,"LangiumCompletionParser")}constructor(){super(...arguments),this.tokens=[],this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}action(){}construct(){}parse(e){this.resetState();let r=this.lexer.tokenize(e,{mode:"partial"});return this.tokens=r.tokens,this.wrapper.input=[...this.tokens],this.mainRule.call(this.wrapper,{}),this.unorderedGroups.clear(),{tokens:this.tokens,elementStack:[...this.lastElementStack],tokenIndex:this.nextTokenIndex}}rule(e,r){let n=this.wrapper.DEFINE_RULE(_le(e.name),this.startImplementation(r).bind(this));return this.allRules.set(e.name,n),e.entry&&(this.mainRule=n),n}resetState(){this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}startImplementation(e){return r=>{let n=this.keepStackSize();try{e(r)}finally{this.resetStackSize(n)}}}removeUnexpectedElements(){this.elementStack.splice(this.stackSize)}keepStackSize(){let e=this.elementStack.length;return this.stackSize=e,e}resetStackSize(e){this.removeUnexpectedElements(),this.stackSize=e}consume(e,r,n){this.wrapper.wrapConsume(e,r),this.isRecording()||(this.lastElementStack=[...this.elementStack,n],this.nextTokenIndex=this.currIdx+1)}subrule(e,r,n,i,a){this.before(i),this.wrapper.wrapSubrule(e,r,a),this.after(i)}before(e){this.isRecording()||this.elementStack.push(e)}after(e){if(!this.isRecording()){let r=this.elementStack.lastIndexOf(e);r>=0&&this.elementStack.splice(r)}}get currIdx(){return this.wrapper.currIdx}},JBe={recoveryEnabled:!0,nodeLocationTracking:"full",skipValidations:!0,errorMessageProvider:new s1},vM=class extends xx{static{o(this,"ChevrotainWrapper")}constructor(e,r){let n=r&&"maxLookahead"in r;super(e,Object.assign(Object.assign(Object.assign({},JBe),{lookaheadStrategy:n?new Gu({maxLookahead:r.maxLookahead}):new kx({logging:r.skipValidations?()=>{}:void 0})}),r))}get IS_RECORDING(){return this.RECORDING_PHASE}DEFINE_RULE(e,r){return this.RULE(e,r)}wrapSelfAnalysis(){this.performSelfAnalysis()}wrapConsume(e,r){return this.consume(e,r)}wrapSubrule(e,r,n){return this.subrule(e,r,{ARGS:[n]})}wrapOr(e,r){this.or(e,r)}wrapOption(e,r){this.option(e,r)}wrapMany(e,r){this.many(e,r)}wrapAtLeastOne(e,r){this.atLeastOne(e,r)}}});function Rx(t,e,r){return eFe({parser:e,tokens:r,ruleNames:new Map},t),e}function eFe(t,e){let r=K2(e,!1),n=en(e.rules).filter(Oa).filter(i=>r.has(i));for(let i of n){let a=Object.assign(Object.assign({},t),{consume:1,optional:1,subrule:1,many:1,or:1});t.parser.rule(i,gp(a,i.definition))}}function gp(t,e,r=!1){let n;if(Ho(e))n=oFe(t,e);else if(Mu(e))n=tFe(t,e);else if(Ml(e))n=gp(t,e.terminal);else if(ep(e))n=Dle(t,e);else if(Il(e))n=rFe(t,e);else if(mk(e))n=iFe(t,e);else if(yk(e))n=aFe(t,e);else if(sf(e))n=sFe(t,e);else if($R(e)){let i=t.consume++;n=o(()=>t.parser.consume(i,lo,e),"method")}else throw new Zd(e.$cstNode,`Unexpected element type: ${e.$type}`);return Lle(t,r?void 0:xE(e),n,e.cardinality)}function tFe(t,e){let r=J2(e);return()=>t.parser.action(r,e)}function rFe(t,e){let r=e.rule.ref;if(Oa(r)){let n=t.subrule++,i=r.fragment,a=e.arguments.length>0?nFe(r,e.arguments):()=>({});return s=>t.parser.subrule(n,Rle(t,r),i,e,a(s))}else if(so(r)){let n=t.consume++,i=xM(t,r.name);return()=>t.parser.consume(n,i,e)}else if(r)Lc(r);else throw new Zd(e.$cstNode,`Undefined rule: ${e.rule.$refText}`)}function nFe(t,e){let r=e.map(n=>Vu(n.value));return n=>{let i={};for(let a=0;a<r.length;a++){let s=t.parameters[a],l=r[a];i[s.name]=l(n)}return i}}function Vu(t){if(NR(t)){let e=Vu(t.left),r=Vu(t.right);return n=>e(n)||r(n)}else if(RR(t)){let e=Vu(t.left),r=Vu(t.right);return n=>e(n)&&r(n)}else if(MR(t)){let e=Vu(t.value);return r=>!e(r)}else if(IR(t)){let e=t.parameter.ref.name;return r=>r!==void 0&&r[e]===!0}else if(LR(t)){let e=!!t.true;return()=>e}Lc(t)}function iFe(t,e){if(e.elements.length===1)return gp(t,e.elements[0]);{let r=[];for(let i of e.elements){let a={ALT:gp(t,i,!0)},s=xE(i);s&&(a.GATE=Vu(s)),r.push(a)}let n=t.or++;return i=>t.parser.alternatives(n,r.map(a=>{let s={ALT:o(()=>a.ALT(i),"ALT")},l=a.GATE;return l&&(s.GATE=()=>l(i)),s}))}}function aFe(t,e){if(e.elements.length===1)return gp(t,e.elements[0]);let r=[];for(let l of e.elements){let u={ALT:gp(t,l,!0)},h=xE(l);h&&(u.GATE=Vu(h)),r.push(u)}let n=t.or++,i=o((l,u)=>{let h=u.getRuleStack().join("-");return`uGroup_${l}_${h}`},"idFunc"),a=o(l=>t.parser.alternatives(n,r.map((u,h)=>{let f={ALT:o(()=>!0,"ALT")},d=t.parser;f.ALT=()=>{if(u.ALT(l),!d.isRecording()){let m=i(n,d);d.unorderedGroups.get(m)||d.unorderedGroups.set(m,[]);let g=d.unorderedGroups.get(m);typeof g?.[h]>"u"&&(g[h]=!0)}};let p=u.GATE;return p?f.GATE=()=>p(l):f.GATE=()=>{let m=d.unorderedGroups.get(i(n,d));return!m?.[h]},f})),"alternatives"),s=Lle(t,xE(e),a,"*");return l=>{s(l),t.parser.isRecording()||t.parser.unorderedGroups.delete(i(n,t.parser))}}function sFe(t,e){let r=e.elements.map(n=>gp(t,n));return n=>r.forEach(i=>i(n))}function xE(t){if(sf(t))return t.guardCondition}function Dle(t,e,r=e.terminal){if(r)if(Il(r)&&Oa(r.rule.ref)){let n=r.rule.ref,i=t.subrule++;return a=>t.parser.subrule(i,Rle(t,n),!1,e,a)}else if(Il(r)&&so(r.rule.ref)){let n=t.consume++,i=xM(t,r.rule.ref.name);return()=>t.parser.consume(n,i,e)}else if(Ho(r)){let n=t.consume++,i=xM(t,r.value);return()=>t.parser.consume(n,i,e)}else throw new Error("Could not build cross reference parser");else{if(!e.type.ref)throw new Error("Could not resolve reference to type: "+e.type.$refText);let n=kk(e.type.ref),i=n?.terminal;if(!i)throw new Error("Could not find name assignment for type: "+J2(e.type.ref));return Dle(t,e,i)}}function oFe(t,e){let r=t.consume++,n=t.tokens[e.value];if(!n)throw new Error("Could not find token for keyword: "+e.value);return()=>t.parser.consume(r,n,e)}function Lle(t,e,r,n){let i=e&&Vu(e);if(!n)if(i){let a=t.or++;return s=>t.parser.alternatives(a,[{ALT:o(()=>r(s),"ALT"),GATE:o(()=>i(s),"GATE")},{ALT:lE(),GATE:o(()=>!i(s),"GATE")}])}else return r;if(n==="*"){let a=t.many++;return s=>t.parser.many(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else if(n==="+"){let a=t.many++;if(i){let s=t.or++;return l=>t.parser.alternatives(s,[{ALT:o(()=>t.parser.atLeastOne(a,{DEF:o(()=>r(l),"DEF")}),"ALT"),GATE:o(()=>i(l),"GATE")},{ALT:lE(),GATE:o(()=>!i(l),"GATE")}])}else return s=>t.parser.atLeastOne(a,{DEF:o(()=>r(s),"DEF")})}else if(n==="?"){let a=t.optional++;return s=>t.parser.optional(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else Lc(n)}function Rle(t,e){let r=lFe(t,e),n=t.parser.getRule(r);if(!n)throw new Error(`Rule "${r}" not found."`);return n}function lFe(t,e){if(Oa(e))return e.name;if(t.ruleNames.has(e))return t.ruleNames.get(e);{let r=e,n=r.$container,i=e.$type;for(;!Oa(n);)(sf(n)||mk(n)||yk(n))&&(i=n.elements.indexOf(r).toString()+":"+i),r=n,n=n.$container;return i=n.name+":"+i,t.ruleNames.set(e,i),i}}function xM(t,e){let r=t.tokens[e];if(!r)throw new Error(`Token "${e}" not found."`);return r}var bE=N(()=>{"use strict";cf();Rc();uk();Ps();Ol();o(Rx,"createParser");o(eFe,"buildRules");o(gp,"buildElement");o(tFe,"buildAction");o(rFe,"buildRuleCall");o(nFe,"buildRuleCallPredicate");o(Vu,"buildPredicate");o(iFe,"buildAlternatives");o(aFe,"buildUnorderedGroup");o(sFe,"buildGroup");o(xE,"getGuardCondition");o(Dle,"buildCrossReference");o(oFe,"buildKeyword");o(Lle,"wrap");o(Rle,"getRule");o(lFe,"getRuleName");o(xM,"getToken")});function bM(t){let e=t.Grammar,r=t.parser.Lexer,n=new Dx(t);return Rx(e,n,r.definition),n.finalize(),n}var wM=N(()=>{"use strict";Lx();bE();o(bM,"createCompletionParser")});function TM(t){let e=Nle(t);return e.finalize(),e}function Nle(t){let e=t.Grammar,r=t.parser.Lexer,n=new _x(t);return Rx(e,n,r.definition)}var kM=N(()=>{"use strict";Lx();bE();o(TM,"createLangiumParser");o(Nle,"prepareLangiumParser")});var Uu,wE=N(()=>{"use strict";cf();Rc();is();Ol();Lg();Ps();Uu=class{static{o(this,"DefaultTokenBuilder")}constructor(){this.diagnostics=[]}buildTokens(e,r){let n=en(K2(e,!1)),i=this.buildTerminalTokens(n),a=this.buildKeywordTokens(n,i,r);return i.forEach(s=>{let l=s.PATTERN;typeof l=="object"&&l&&"test"in l&&Dg(l)?a.unshift(s):a.push(s)}),a}flushLexingReport(e){return{diagnostics:this.popDiagnostics()}}popDiagnostics(){let e=[...this.diagnostics];return this.diagnostics=[],e}buildTerminalTokens(e){return e.filter(so).filter(r=>!r.fragment).map(r=>this.buildTerminalToken(r)).toArray()}buildTerminalToken(e){let r=Ng(e),n=this.requiresCustomPattern(r)?this.regexPatternFunction(r):r,i={name:e.name,PATTERN:n};return typeof n=="function"&&(i.LINE_BREAKS=!0),e.hidden&&(i.GROUP=Dg(r)?Xn.SKIPPED:"hidden"),i}requiresCustomPattern(e){return e.flags.includes("u")||e.flags.includes("s")?!0:!!(e.source.includes("?<=")||e.source.includes("?<!"))}regexPatternFunction(e){let r=new RegExp(e,e.flags+"y");return(n,i)=>(r.lastIndex=i,r.exec(n))}buildKeywordTokens(e,r,n){return e.filter(Oa).flatMap(i=>Nc(i).filter(Ho)).distinct(i=>i.value).toArray().sort((i,a)=>a.value.length-i.value.length).map(i=>this.buildKeywordToken(i,r,!!n?.caseInsensitive))}buildKeywordToken(e,r,n){let i=this.buildKeywordPattern(e,n),a={name:e.value,PATTERN:i,LONGER_ALT:this.findLongerAlt(e,r)};return typeof i=="function"&&(a.LINE_BREAKS=!0),a}buildKeywordPattern(e,r){return r?new RegExp(tN(e.value)):e.value}findLongerAlt(e,r){return r.reduce((n,i)=>{let a=i?.PATTERN;return a?.source&&rN("^"+a.source+"$",e.value)&&n.push(i),n},[])}}});var yp,Oc,EM=N(()=>{"use strict";Rc();Ol();yp=class{static{o(this,"DefaultValueConverter")}convert(e,r){let n=r.grammarSource;if(ep(n)&&(n=aN(n)),Il(n)){let i=n.rule.ref;if(!i)throw new Error("This cst node was not parsed by a rule.");return this.runConverter(i,e,r)}return e}runConverter(e,r,n){var i;switch(e.name.toUpperCase()){case"INT":return Oc.convertInt(r);case"STRING":return Oc.convertString(r);case"ID":return Oc.convertID(r)}switch((i=fN(e))===null||i===void 0?void 0:i.toLowerCase()){case"number":return Oc.convertNumber(r);case"boolean":return Oc.convertBoolean(r);case"bigint":return Oc.convertBigint(r);case"date":return Oc.convertDate(r);default:return r}}};(function(t){function e(h){let f="";for(let d=1;d<h.length-1;d++){let p=h.charAt(d);if(p==="\\"){let m=h.charAt(++d);f+=r(m)}else f+=p}return f}o(e,"convertString"),t.convertString=e;function r(h){switch(h){case"b":return"\b";case"f":return"\f";case"n":return`
806 +`;case"r":return"\r";case"t":return" ";case"v":return"\v";case"0":return"\0";default:return h}}o(r,"convertEscapeCharacter");function n(h){return h.charAt(0)==="^"?h.substring(1):h}o(n,"convertID"),t.convertID=n;function i(h){return parseInt(h)}o(i,"convertInt"),t.convertInt=i;function a(h){return BigInt(h)}o(a,"convertBigint"),t.convertBigint=a;function s(h){return new Date(h)}o(s,"convertDate"),t.convertDate=s;function l(h){return Number(h)}o(l,"convertNumber"),t.convertNumber=l;function u(h){return h.toLowerCase()==="true"}o(u,"convertBoolean"),t.convertBoolean=u})(Oc||(Oc={}))});var _M=Mi(AM=>{"use strict";Object.defineProperty(AM,"__esModule",{value:!0});var SM;function CM(){if(SM===void 0)throw new Error("No runtime abstraction layer installed");return SM}o(CM,"RAL");(function(t){function e(r){if(r===void 0)throw new Error("No runtime abstraction layer provided");SM=r}o(e,"install"),t.install=e})(CM||(CM={}));AM.default=CM});var Ole=Mi(Ba=>{"use strict";Object.defineProperty(Ba,"__esModule",{value:!0});Ba.stringArray=Ba.array=Ba.func=Ba.error=Ba.number=Ba.string=Ba.boolean=void 0;function cFe(t){return t===!0||t===!1}o(cFe,"boolean");Ba.boolean=cFe;function Mle(t){return typeof t=="string"||t instanceof String}o(Mle,"string");Ba.string=Mle;function uFe(t){return typeof t=="number"||t instanceof Number}o(uFe,"number");Ba.number=uFe;function hFe(t){return t instanceof Error}o(hFe,"error");Ba.error=hFe;function fFe(t){return typeof t=="function"}o(fFe,"func");Ba.func=fFe;function Ile(t){return Array.isArray(t)}o(Ile,"array");Ba.array=Ile;function dFe(t){return Ile(t)&&t.every(e=>Mle(e))}o(dFe,"stringArray");Ba.stringArray=dFe});var LM=Mi(o1=>{"use strict";Object.defineProperty(o1,"__esModule",{value:!0});o1.Emitter=o1.Event=void 0;var pFe=_M(),Ple;(function(t){let e={dispose(){}};t.None=function(){return e}})(Ple||(o1.Event=Ple={}));var DM=class{static{o(this,"CallbackList")}add(e,r=null,n){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(e),this._contexts.push(r),Array.isArray(n)&&n.push({dispose:o(()=>this.remove(e,r),"dispose")})}remove(e,r=null){if(!this._callbacks)return;let n=!1;for(let i=0,a=this._callbacks.length;i<a;i++)if(this._callbacks[i]===e)if(this._contexts[i]===r){this._callbacks.splice(i,1),this._contexts.splice(i,1);return}else n=!0;if(n)throw new Error("When adding a listener with a context, you should remove it with the same context")}invoke(...e){if(!this._callbacks)return[];let r=[],n=this._callbacks.slice(0),i=this._contexts.slice(0);for(let a=0,s=n.length;a<s;a++)try{r.push(n[a].apply(i[a],e))}catch(l){(0,pFe.default)().console.error(l)}return r}isEmpty(){return!this._callbacks||this._callbacks.length===0}dispose(){this._callbacks=void 0,this._contexts=void 0}},TE=class t{static{o(this,"Emitter")}constructor(e){this._options=e}get event(){return this._event||(this._event=(e,r,n)=>{this._callbacks||(this._callbacks=new DM),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(e,r);let i={dispose:o(()=>{this._callbacks&&(this._callbacks.remove(e,r),i.dispose=t._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))},"dispose")};return Array.isArray(n)&&n.push(i),i}),this._event}fire(e){this._callbacks&&this._callbacks.invoke.call(this._callbacks,e)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}};o1.Emitter=TE;TE._noop=function(){}});var Ble=Mi(l1=>{"use strict";Object.defineProperty(l1,"__esModule",{value:!0});l1.CancellationTokenSource=l1.CancellationToken=void 0;var mFe=_M(),gFe=Ole(),RM=LM(),kE;(function(t){t.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:RM.Event.None}),t.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:RM.Event.None});function e(r){let n=r;return n&&(n===t.None||n===t.Cancelled||gFe.boolean(n.isCancellationRequested)&&!!n.onCancellationRequested)}o(e,"is"),t.is=e})(kE||(l1.CancellationToken=kE={}));var yFe=Object.freeze(function(t,e){let r=(0,mFe.default)().timer.setTimeout(t.bind(e),0);return{dispose(){r.dispose()}}}),EE=class{static{o(this,"MutableToken")}constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?yFe:(this._emitter||(this._emitter=new RM.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}},NM=class{static{o(this,"CancellationTokenSource")}get token(){return this._token||(this._token=new EE),this._token}cancel(){this._token?this._token.cancel():this._token=kE.Cancelled}dispose(){this._token?this._token instanceof EE&&this._token.dispose():this._token=kE.None}};l1.CancellationTokenSource=NM});var yr={};var qo=N(()=>{"use strict";Sr(yr,Sa(Ble(),1))});function MM(){return new Promise(t=>{typeof setImmediate>"u"?setTimeout(t,0):setImmediate(t)})}function CE(){return SE=performance.now(),new yr.CancellationTokenSource}function $le(t){Fle=t}function Bc(t){return t===Pc}async function xi(t){if(t===yr.CancellationToken.None)return;let e=performance.now();if(e-SE>=Fle&&(SE=e,await MM(),SE=performance.now()),t.isCancellationRequested)throw Pc}var SE,Fle,Pc,cs,Yo=N(()=>{"use strict";qo();o(MM,"delayNextTick");SE=0,Fle=10;o(CE,"startCancelableOperation");o($le,"setInterruptionPeriod");Pc=Symbol("OperationCancelled");o(Bc,"isOperationCancelled");o(xi,"interruptAndCheck");cs=class{static{o(this,"Deferred")}constructor(){this.promise=new Promise((e,r)=>{this.resolve=n=>(e(n),this),this.reject=n=>(r(n),this)})}}});function IM(t,e){if(t.length<=1)return t;let r=t.length/2|0,n=t.slice(0,r),i=t.slice(r);IM(n,e),IM(i,e);let a=0,s=0,l=0;for(;a<n.length&&s<i.length;)e(n[a],i[s])<=0?t[l++]=n[a++]:t[l++]=i[s++];for(;a<n.length;)t[l++]=n[a++];for(;s<i.length;)t[l++]=i[s++];return t}function zle(t,e,r=0){let n=e?[r]:[];for(let i=0;i<t.length;i++){let a=t.charCodeAt(i);Gle(a)&&(a===13&&i+1<t.length&&t.charCodeAt(i+1)===10&&i++,n.push(r+i+1))}return n}function Gle(t){return t===13||t===10}function Vle(t){let e=t.start,r=t.end;return e.line>r.line||e.line===r.line&&e.character>r.character?{start:r,end:e}:t}function vFe(t){let e=Vle(t.range);return e!==t.range?{newText:t.newText,range:e}:t}var AE,c1,Ule=N(()=>{"use strict";AE=class t{static{o(this,"FullTextDocument")}constructor(e,r,n,i){this._uri=e,this._languageId=r,this._version=n,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let r=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(r,n)}return this._content}update(e,r){for(let n of e)if(t.isIncremental(n)){let i=Vle(n.range),a=this.offsetAt(i.start),s=this.offsetAt(i.end);this._content=this._content.substring(0,a)+n.text+this._content.substring(s,this._content.length);let l=Math.max(i.start.line,0),u=Math.max(i.end.line,0),h=this._lineOffsets,f=zle(n.text,!1,a);if(u-l===f.length)for(let p=0,m=f.length;p<m;p++)h[p+l+1]=f[p];else f.length<1e4?h.splice(l+1,u-l,...f):this._lineOffsets=h=h.slice(0,l+1).concat(f,h.slice(u+1));let d=n.text.length-(s-a);if(d!==0)for(let p=l+1+f.length,m=h.length;p<m;p++)h[p]=h[p]+d}else if(t.isFull(n))this._content=n.text,this._lineOffsets=void 0;else throw new Error("Unknown change event received");this._version=r}getLineOffsets(){return this._lineOffsets===void 0&&(this._lineOffsets=zle(this._content,!0)),this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let r=this.getLineOffsets(),n=0,i=r.length;if(i===0)return{line:0,character:e};for(;n<i;){let s=Math.floor((n+i)/2);r[s]>e?i=s:n=s+1}let a=n-1;return e=this.ensureBeforeEOL(e,r[a]),{line:a,character:e-r[a]}}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line];if(e.character<=0)return n;let i=e.line+1<r.length?r[e.line+1]:this._content.length,a=Math.min(n+e.character,i);return this.ensureBeforeEOL(a,n)}ensureBeforeEOL(e,r){for(;e>r&&Gle(this._content.charCodeAt(e-1));)e--;return e}get lineCount(){return this.getLineOffsets().length}static isIncremental(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range!==void 0&&(r.rangeLength===void 0||typeof r.rangeLength=="number")}static isFull(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range===void 0&&r.rangeLength===void 0}};(function(t){function e(i,a,s,l){return new AE(i,a,s,l)}o(e,"create"),t.create=e;function r(i,a,s){if(i instanceof AE)return i.update(a,s),i;throw new Error("TextDocument.update: document must be created by TextDocument.create")}o(r,"update"),t.update=r;function n(i,a){let s=i.getText(),l=IM(a.map(vFe),(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),u=0,h=[];for(let f of l){let d=i.offsetAt(f.range.start);if(d<u)throw new Error("Overlapping edit");d>u&&h.push(s.substring(u,d)),f.newText.length&&h.push(f.newText),u=i.offsetAt(f.range.end)}return h.push(s.substr(u)),h.join("")}o(n,"applyEdits"),t.applyEdits=n})(c1||(c1={}));o(IM,"mergeSort");o(zle,"computeLineOffsets");o(Gle,"isEOL");o(Vle,"getWellformedRange");o(vFe,"getWellformedEdit")});var Hle,us,u1,OM=N(()=>{"use strict";(()=>{"use strict";var t={470:i=>{function a(u){if(typeof u!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(u))}o(a,"e");function s(u,h){for(var f,d="",p=0,m=-1,g=0,y=0;y<=u.length;++y){if(y<u.length)f=u.charCodeAt(y);else{if(f===47)break;f=47}if(f===47){if(!(m===y-1||g===1))if(m!==y-1&&g===2){if(d.length<2||p!==2||d.charCodeAt(d.length-1)!==46||d.charCodeAt(d.length-2)!==46){if(d.length>2){var v=d.lastIndexOf("/");if(v!==d.length-1){v===-1?(d="",p=0):p=(d=d.slice(0,v)).length-1-d.lastIndexOf("/"),m=y,g=0;continue}}else if(d.length===2||d.length===1){d="",p=0,m=y,g=0;continue}}h&&(d.length>0?d+="/..":d="..",p=2)}else d.length>0?d+="/"+u.slice(m+1,y):d=u.slice(m+1,y),p=y-m-1;m=y,g=0}else f===46&&g!==-1?++g:g=-1}return d}o(s,"r");var l={resolve:o(function(){for(var u,h="",f=!1,d=arguments.length-1;d>=-1&&!f;d--){var p;d>=0?p=arguments[d]:(u===void 0&&(u=process.cwd()),p=u),a(p),p.length!==0&&(h=p+"/"+h,f=p.charCodeAt(0)===47)}return h=s(h,!f),f?h.length>0?"/"+h:"/":h.length>0?h:"."},"resolve"),normalize:o(function(u){if(a(u),u.length===0)return".";var h=u.charCodeAt(0)===47,f=u.charCodeAt(u.length-1)===47;return(u=s(u,!h)).length!==0||h||(u="."),u.length>0&&f&&(u+="/"),h?"/"+u:u},"normalize"),isAbsolute:o(function(u){return a(u),u.length>0&&u.charCodeAt(0)===47},"isAbsolute"),join:o(function(){if(arguments.length===0)return".";for(var u,h=0;h<arguments.length;++h){var f=arguments[h];a(f),f.length>0&&(u===void 0?u=f:u+="/"+f)}return u===void 0?".":l.normalize(u)},"join"),relative:o(function(u,h){if(a(u),a(h),u===h||(u=l.resolve(u))===(h=l.resolve(h)))return"";for(var f=1;f<u.length&&u.charCodeAt(f)===47;++f);for(var d=u.length,p=d-f,m=1;m<h.length&&h.charCodeAt(m)===47;++m);for(var g=h.length-m,y=p<g?p:g,v=-1,x=0;x<=y;++x){if(x===y){if(g>y){if(h.charCodeAt(m+x)===47)return h.slice(m+x+1);if(x===0)return h.slice(m+x)}else p>y&&(u.charCodeAt(f+x)===47?v=x:x===0&&(v=0));break}var b=u.charCodeAt(f+x);if(b!==h.charCodeAt(m+x))break;b===47&&(v=x)}var w="";for(x=f+v+1;x<=d;++x)x!==d&&u.charCodeAt(x)!==47||(w.length===0?w+="..":w+="/..");return w.length>0?w+h.slice(m+v):(m+=v,h.charCodeAt(m)===47&&++m,h.slice(m))},"relative"),_makeLong:o(function(u){return u},"_makeLong"),dirname:o(function(u){if(a(u),u.length===0)return".";for(var h=u.charCodeAt(0),f=h===47,d=-1,p=!0,m=u.length-1;m>=1;--m)if((h=u.charCodeAt(m))===47){if(!p){d=m;break}}else p=!1;return d===-1?f?"/":".":f&&d===1?"//":u.slice(0,d)},"dirname"),basename:o(function(u,h){if(h!==void 0&&typeof h!="string")throw new TypeError('"ext" argument must be a string');a(u);var f,d=0,p=-1,m=!0;if(h!==void 0&&h.length>0&&h.length<=u.length){if(h.length===u.length&&h===u)return"";var g=h.length-1,y=-1;for(f=u.length-1;f>=0;--f){var v=u.charCodeAt(f);if(v===47){if(!m){d=f+1;break}}else y===-1&&(m=!1,y=f+1),g>=0&&(v===h.charCodeAt(g)?--g==-1&&(p=f):(g=-1,p=y))}return d===p?p=y:p===-1&&(p=u.length),u.slice(d,p)}for(f=u.length-1;f>=0;--f)if(u.charCodeAt(f)===47){if(!m){d=f+1;break}}else p===-1&&(m=!1,p=f+1);return p===-1?"":u.slice(d,p)},"basename"),extname:o(function(u){a(u);for(var h=-1,f=0,d=-1,p=!0,m=0,g=u.length-1;g>=0;--g){var y=u.charCodeAt(g);if(y!==47)d===-1&&(p=!1,d=g+1),y===46?h===-1?h=g:m!==1&&(m=1):h!==-1&&(m=-1);else if(!p){f=g+1;break}}return h===-1||d===-1||m===0||m===1&&h===d-1&&h===f+1?"":u.slice(h,d)},"extname"),format:o(function(u){if(u===null||typeof u!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof u);return function(h,f){var d=f.dir||f.root,p=f.base||(f.name||"")+(f.ext||"");return d?d===f.root?d+p:d+"/"+p:p}(0,u)},"format"),parse:o(function(u){a(u);var h={root:"",dir:"",base:"",ext:"",name:""};if(u.length===0)return h;var f,d=u.charCodeAt(0),p=d===47;p?(h.root="/",f=1):f=0;for(var m=-1,g=0,y=-1,v=!0,x=u.length-1,b=0;x>=f;--x)if((d=u.charCodeAt(x))!==47)y===-1&&(v=!1,y=x+1),d===46?m===-1?m=x:b!==1&&(b=1):m!==-1&&(b=-1);else if(!v){g=x+1;break}return m===-1||y===-1||b===0||b===1&&m===y-1&&m===g+1?y!==-1&&(h.base=h.name=g===0&&p?u.slice(1,y):u.slice(g,y)):(g===0&&p?(h.name=u.slice(1,m),h.base=u.slice(1,y)):(h.name=u.slice(g,m),h.base=u.slice(g,y)),h.ext=u.slice(m,y)),g>0?h.dir=u.slice(0,g-1):p&&(h.dir="/"),h},"parse"),sep:"/",delimiter:":",win32:null,posix:null};l.posix=l,i.exports=l}},e={};function r(i){var a=e[i];if(a!==void 0)return a.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}o(r,"r"),r.d=(i,a)=>{for(var s in a)r.o(a,s)&&!r.o(i,s)&&Object.defineProperty(i,s,{enumerable:!0,get:a[s]})},r.o=(i,a)=>Object.prototype.hasOwnProperty.call(i,a),r.r=i=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})};var n={};(()=>{let i;r.r(n),r.d(n,{URI:o(()=>p,"URI"),Utils:o(()=>I,"Utils")}),typeof process=="object"?i=process.platform==="win32":typeof navigator=="object"&&(i=navigator.userAgent.indexOf("Windows")>=0);let a=/^\w[\w\d+.-]*$/,s=/^\//,l=/^\/\//;function u(D,k){if(!D.scheme&&k)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${D.authority}", path: "${D.path}", query: "${D.query}", fragment: "${D.fragment}"}`);if(D.scheme&&!a.test(D.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(D.path){if(D.authority){if(!s.test(D.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(l.test(D.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}o(u,"s");let h="",f="/",d=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class p{static{o(this,"f")}static isUri(k){return k instanceof p||!!k&&typeof k.authority=="string"&&typeof k.fragment=="string"&&typeof k.path=="string"&&typeof k.query=="string"&&typeof k.scheme=="string"&&typeof k.fsPath=="string"&&typeof k.with=="function"&&typeof k.toString=="function"}scheme;authority;path;query;fragment;constructor(k,L,R,O,M,B=!1){typeof k=="object"?(this.scheme=k.scheme||h,this.authority=k.authority||h,this.path=k.path||h,this.query=k.query||h,this.fragment=k.fragment||h):(this.scheme=function(F,P){return F||P?F:"file"}(k,B),this.authority=L||h,this.path=function(F,P){switch(F){case"https":case"http":case"file":P?P[0]!==f&&(P=f+P):P=f}return P}(this.scheme,R||h),this.query=O||h,this.fragment=M||h,u(this,B))}get fsPath(){return b(this,!1)}with(k){if(!k)return this;let{scheme:L,authority:R,path:O,query:M,fragment:B}=k;return L===void 0?L=this.scheme:L===null&&(L=h),R===void 0?R=this.authority:R===null&&(R=h),O===void 0?O=this.path:O===null&&(O=h),M===void 0?M=this.query:M===null&&(M=h),B===void 0?B=this.fragment:B===null&&(B=h),L===this.scheme&&R===this.authority&&O===this.path&&M===this.query&&B===this.fragment?this:new g(L,R,O,M,B)}static parse(k,L=!1){let R=d.exec(k);return R?new g(R[2]||h,E(R[4]||h),E(R[5]||h),E(R[7]||h),E(R[9]||h),L):new g(h,h,h,h,h)}static file(k){let L=h;if(i&&(k=k.replace(/\\/g,f)),k[0]===f&&k[1]===f){let R=k.indexOf(f,2);R===-1?(L=k.substring(2),k=f):(L=k.substring(2,R),k=k.substring(R)||f)}return new g("file",L,k,h,h)}static from(k){let L=new g(k.scheme,k.authority,k.path,k.query,k.fragment);return u(L,!0),L}toString(k=!1){return w(this,k)}toJSON(){return this}static revive(k){if(k){if(k instanceof p)return k;{let L=new g(k);return L._formatted=k.external,L._fsPath=k._sep===m?k.fsPath:null,L}}return k}}let m=i?1:void 0;class g extends p{static{o(this,"l")}_formatted=null;_fsPath=null;get fsPath(){return this._fsPath||(this._fsPath=b(this,!1)),this._fsPath}toString(k=!1){return k?w(this,!0):(this._formatted||(this._formatted=w(this,!1)),this._formatted)}toJSON(){let k={$mid:1};return this._fsPath&&(k.fsPath=this._fsPath,k._sep=m),this._formatted&&(k.external=this._formatted),this.path&&(k.path=this.path),this.scheme&&(k.scheme=this.scheme),this.authority&&(k.authority=this.authority),this.query&&(k.query=this.query),this.fragment&&(k.fragment=this.fragment),k}}let y={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function v(D,k,L){let R,O=-1;for(let M=0;M<D.length;M++){let B=D.charCodeAt(M);if(B>=97&&B<=122||B>=65&&B<=90||B>=48&&B<=57||B===45||B===46||B===95||B===126||k&&B===47||L&&B===91||L&&B===93||L&&B===58)O!==-1&&(R+=encodeURIComponent(D.substring(O,M)),O=-1),R!==void 0&&(R+=D.charAt(M));else{R===void 0&&(R=D.substr(0,M));let F=y[B];F!==void 0?(O!==-1&&(R+=encodeURIComponent(D.substring(O,M)),O=-1),R+=F):O===-1&&(O=M)}}return O!==-1&&(R+=encodeURIComponent(D.substring(O))),R!==void 0?R:D}o(v,"d");function x(D){let k;for(let L=0;L<D.length;L++){let R=D.charCodeAt(L);R===35||R===63?(k===void 0&&(k=D.substr(0,L)),k+=y[R]):k!==void 0&&(k+=D[L])}return k!==void 0?k:D}o(x,"p");function b(D,k){let L;return L=D.authority&&D.path.length>1&&D.scheme==="file"?`//${D.authority}${D.path}`:D.path.charCodeAt(0)===47&&(D.path.charCodeAt(1)>=65&&D.path.charCodeAt(1)<=90||D.path.charCodeAt(1)>=97&&D.path.charCodeAt(1)<=122)&&D.path.charCodeAt(2)===58?k?D.path.substr(1):D.path[1].toLowerCase()+D.path.substr(2):D.path,i&&(L=L.replace(/\//g,"\\")),L}o(b,"m");function w(D,k){let L=k?x:v,R="",{scheme:O,authority:M,path:B,query:F,fragment:P}=D;if(O&&(R+=O,R+=":"),(M||O==="file")&&(R+=f,R+=f),M){let z=M.indexOf("@");if(z!==-1){let $=M.substr(0,z);M=M.substr(z+1),z=$.lastIndexOf(":"),z===-1?R+=L($,!1,!1):(R+=L($.substr(0,z),!1,!1),R+=":",R+=L($.substr(z+1),!1,!0)),R+="@"}M=M.toLowerCase(),z=M.lastIndexOf(":"),z===-1?R+=L(M,!1,!0):(R+=L(M.substr(0,z),!1,!0),R+=M.substr(z))}if(B){if(B.length>=3&&B.charCodeAt(0)===47&&B.charCodeAt(2)===58){let z=B.charCodeAt(1);z>=65&&z<=90&&(B=`/${String.fromCharCode(z+32)}:${B.substr(3)}`)}else if(B.length>=2&&B.charCodeAt(1)===58){let z=B.charCodeAt(0);z>=65&&z<=90&&(B=`${String.fromCharCode(z+32)}:${B.substr(2)}`)}R+=L(B,!0,!1)}return F&&(R+="?",R+=L(F,!1,!1)),P&&(R+="#",R+=k?P:v(P,!1,!1)),R}o(w,"y");function C(D){try{return decodeURIComponent(D)}catch{return D.length>3?D.substr(0,3)+C(D.substr(3)):D}}o(C,"v");let T=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function E(D){return D.match(T)?D.replace(T,k=>C(k)):D}o(E,"C");var A=r(470);let S=A.posix||A,_="/";var I;(function(D){D.joinPath=function(k,...L){return k.with({path:S.join(k.path,...L)})},D.resolvePath=function(k,...L){let R=k.path,O=!1;R[0]!==_&&(R=_+R,O=!0);let M=S.resolve(R,...L);return O&&M[0]===_&&!k.authority&&(M=M.substring(1)),k.with({path:M})},D.dirname=function(k){if(k.path.length===0||k.path===_)return k;let L=S.dirname(k.path);return L.length===1&&L.charCodeAt(0)===46&&(L=""),k.with({path:L})},D.basename=function(k){return S.basename(k.path)},D.extname=function(k){return S.extname(k.path)}})(I||(I={}))})(),Hle=n})();({URI:us,Utils:u1}=Hle)});var hs,Fc=N(()=>{"use strict";OM();(function(t){t.basename=u1.basename,t.dirname=u1.dirname,t.extname=u1.extname,t.joinPath=u1.joinPath,t.resolvePath=u1.resolvePath;function e(i,a){return i?.toString()===a?.toString()}o(e,"equals"),t.equals=e;function r(i,a){let s=typeof i=="string"?i:i.path,l=typeof a=="string"?a:a.path,u=s.split("/").filter(m=>m.length>0),h=l.split("/").filter(m=>m.length>0),f=0;for(;f<u.length&&u[f]===h[f];f++);let d="../".repeat(u.length-f),p=h.slice(f).join("/");return d+p}o(r,"relative"),t.relative=r;function n(i){return us.parse(i.toString()).toString()}o(n,"normalize"),t.normalize=n})(hs||(hs={}))});var kn,Nx,Mx,h1=N(()=>{"use strict";Ule();h1();qo();Ps();Fc();(function(t){t[t.Changed=0]="Changed",t[t.Parsed=1]="Parsed",t[t.IndexedContent=2]="IndexedContent",t[t.ComputedScopes=3]="ComputedScopes",t[t.Linked=4]="Linked",t[t.IndexedReferences=5]="IndexedReferences",t[t.Validated=6]="Validated"})(kn||(kn={}));Nx=class{static{o(this,"DefaultLangiumDocumentFactory")}constructor(e){this.serviceRegistry=e.ServiceRegistry,this.textDocuments=e.workspace.TextDocuments,this.fileSystemProvider=e.workspace.FileSystemProvider}async fromUri(e,r=yr.CancellationToken.None){let n=await this.fileSystemProvider.readFile(e);return this.createAsync(e,n,r)}fromTextDocument(e,r,n){return r=r??us.parse(e.uri),yr.CancellationToken.is(n)?this.createAsync(r,e,n):this.create(r,e,n)}fromString(e,r,n){return yr.CancellationToken.is(n)?this.createAsync(r,e,n):this.create(r,e,n)}fromModel(e,r){return this.create(r,{$model:e})}create(e,r,n){if(typeof r=="string"){let i=this.parse(e,r,n);return this.createLangiumDocument(i,e,void 0,r)}else if("$model"in r){let i={value:r.$model,parserErrors:[],lexerErrors:[]};return this.createLangiumDocument(i,e)}else{let i=this.parse(e,r.getText(),n);return this.createLangiumDocument(i,e,r)}}async createAsync(e,r,n){if(typeof r=="string"){let i=await this.parseAsync(e,r,n);return this.createLangiumDocument(i,e,void 0,r)}else{let i=await this.parseAsync(e,r.getText(),n);return this.createLangiumDocument(i,e,r)}}createLangiumDocument(e,r,n,i){let a;if(n)a={parseResult:e,uri:r,state:kn.Parsed,references:[],textDocument:n};else{let s=this.createTextDocumentGetter(r,i);a={parseResult:e,uri:r,state:kn.Parsed,references:[],get textDocument(){return s()}}}return e.value.$document=a,a}async update(e,r){var n,i;let a=(n=e.parseResult.value.$cstNode)===null||n===void 0?void 0:n.root.fullText,s=(i=this.textDocuments)===null||i===void 0?void 0:i.get(e.uri.toString()),l=s?s.getText():await this.fileSystemProvider.readFile(e.uri);if(s)Object.defineProperty(e,"textDocument",{value:s});else{let u=this.createTextDocumentGetter(e.uri,l);Object.defineProperty(e,"textDocument",{get:u})}return a!==l&&(e.parseResult=await this.parseAsync(e.uri,l,r),e.parseResult.value.$document=e),e.state=kn.Parsed,e}parse(e,r,n){return this.serviceRegistry.getServices(e).parser.LangiumParser.parse(r,n)}parseAsync(e,r,n){return this.serviceRegistry.getServices(e).parser.AsyncParser.parse(r,n)}createTextDocumentGetter(e,r){let n=this.serviceRegistry,i;return()=>i??(i=c1.create(e.toString(),n.getServices(e).LanguageMetaData.languageId,0,r??""))}},Mx=class{static{o(this,"DefaultLangiumDocuments")}constructor(e){this.documentMap=new Map,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.serviceRegistry=e.ServiceRegistry}get all(){return en(this.documentMap.values())}addDocument(e){let r=e.uri.toString();if(this.documentMap.has(r))throw new Error(`A document with the URI '${r}' is already present.`);this.documentMap.set(r,e)}getDocument(e){let r=e.toString();return this.documentMap.get(r)}async getOrCreateDocument(e,r){let n=this.getDocument(e);return n||(n=await this.langiumDocumentFactory.fromUri(e,r),this.addDocument(n),n)}createDocument(e,r,n){if(n)return this.langiumDocumentFactory.fromString(r,e,n).then(i=>(this.addDocument(i),i));{let i=this.langiumDocumentFactory.fromString(r,e);return this.addDocument(i),i}}hasDocument(e){return this.documentMap.has(e.toString())}invalidateDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(this.serviceRegistry.getServices(e).references.Linker.unlink(n),n.state=kn.Changed,n.precomputedScopes=void 0,n.diagnostics=void 0),n}deleteDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(n.state=kn.Changed,this.documentMap.delete(r)),n}}});var PM,Ix,BM=N(()=>{"use strict";qo();Rl();is();Yo();h1();PM=Symbol("ref_resolving"),Ix=class{static{o(this,"DefaultLinker")}constructor(e){this.reflection=e.shared.AstReflection,this.langiumDocuments=()=>e.shared.workspace.LangiumDocuments,this.scopeProvider=e.references.ScopeProvider,this.astNodeLocator=e.workspace.AstNodeLocator}async link(e,r=yr.CancellationToken.None){for(let n of Wo(e.parseResult.value))await xi(r),Ag(n).forEach(i=>this.doLink(i,e))}doLink(e,r){var n;let i=e.reference;if(i._ref===void 0){i._ref=PM;try{let a=this.getCandidate(e);if(jd(a))i._ref=a;else if(i._nodeDescription=a,this.langiumDocuments().hasDocument(a.documentUri)){let s=this.loadAstNode(a);i._ref=s??this.createLinkingError(e,a)}else i._ref=void 0}catch(a){console.error(`An error occurred while resolving reference to '${i.$refText}':`,a);let s=(n=a.message)!==null&&n!==void 0?n:String(a);i._ref=Object.assign(Object.assign({},e),{message:`An error occurred while resolving reference to '${i.$refText}': ${s}`})}r.references.push(i)}}unlink(e){for(let r of e.references)delete r._ref,delete r._nodeDescription;e.references=[]}getCandidate(e){let n=this.scopeProvider.getScope(e).getElement(e.reference.$refText);return n??this.createLinkingError(e)}buildReference(e,r,n,i){let a=this,s={$refNode:n,$refText:i,get ref(){var l;if(ii(this._ref))return this._ref;if(kR(this._nodeDescription)){let u=a.loadAstNode(this._nodeDescription);this._ref=u??a.createLinkingError({reference:s,container:e,property:r},this._nodeDescription)}else if(this._ref===void 0){this._ref=PM;let u=H2(e).$document,h=a.getLinkedNode({reference:s,container:e,property:r});if(h.error&&u&&u.state<kn.ComputedScopes)return this._ref=void 0;this._ref=(l=h.node)!==null&&l!==void 0?l:h.error,this._nodeDescription=h.descr,u?.references.push(this)}else if(this._ref===PM)throw new Error(`Cyclic reference resolution detected: ${a.astNodeLocator.getAstNodePath(e)}/${r} (symbol '${i}')`);return ii(this._ref)?this._ref:void 0},get $nodeDescription(){return this._nodeDescription},get error(){return jd(this._ref)?this._ref:void 0}};return s}getLinkedNode(e){var r;try{let n=this.getCandidate(e);if(jd(n))return{error:n};let i=this.loadAstNode(n);return i?{node:i,descr:n}:{descr:n,error:this.createLinkingError(e,n)}}catch(n){console.error(`An error occurred while resolving reference to '${e.reference.$refText}':`,n);let i=(r=n.message)!==null&&r!==void 0?r:String(n);return{error:Object.assign(Object.assign({},e),{message:`An error occurred while resolving reference to '${e.reference.$refText}': ${i}`})}}}loadAstNode(e){if(e.node)return e.node;let r=this.langiumDocuments().getDocument(e.documentUri);if(r)return this.astNodeLocator.getAstNode(r.parseResult.value,e.path)}createLinkingError(e,r){let n=H2(e.container).$document;n&&n.state<kn.ComputedScopes&&console.warn(`Attempted reference resolution before document reached ComputedScopes state (${n.uri}).`);let i=this.reflection.getReferenceType(e);return Object.assign(Object.assign({},e),{message:`Could not resolve reference to ${i} named '${e.reference.$refText}'.`,targetDescription:r})}}});function Wle(t){return typeof t.name=="string"}var Ox,FM=N(()=>{"use strict";Ol();o(Wle,"isNamed");Ox=class{static{o(this,"DefaultNameProvider")}getName(e){if(Wle(e))return e.name}getNameNode(e){return Q2(e.$cstNode,"name")}}});var Px,$M=N(()=>{"use strict";Ol();Rl();is();Nl();Ps();Fc();Px=class{static{o(this,"DefaultReferences")}constructor(e){this.nameProvider=e.references.NameProvider,this.index=e.shared.workspace.IndexManager,this.nodeLocator=e.workspace.AstNodeLocator}findDeclaration(e){if(e){let r=hN(e),n=e.astNode;if(r&&n){let i=n[r.feature];if(va(i))return i.ref;if(Array.isArray(i)){for(let a of i)if(va(a)&&a.$refNode&&a.$refNode.offset<=e.offset&&a.$refNode.end>=e.end)return a.ref}}if(n){let i=this.nameProvider.getNameNode(n);if(i&&(i===e||SR(e,i)))return n}}}findDeclarationNode(e){let r=this.findDeclaration(e);if(r?.$cstNode){let n=this.nameProvider.getNameNode(r);return n??r.$cstNode}}findReferences(e,r){let n=[];if(r.includeDeclaration){let a=this.getReferenceToSelf(e);a&&n.push(a)}let i=this.index.findAllReferences(e,this.nodeLocator.getAstNodePath(e));return r.documentUri&&(i=i.filter(a=>hs.equals(a.sourceUri,r.documentUri))),n.push(...i),en(n)}getReferenceToSelf(e){let r=this.nameProvider.getNameNode(e);if(r){let n=Pa(e),i=this.nodeLocator.getAstNodePath(e);return{sourceUri:n.uri,sourcePath:i,targetUri:n.uri,targetPath:i,segment:Qd(r),local:!0}}}}});var Bl,vp,f1=N(()=>{"use strict";Ps();Bl=class{static{o(this,"MultiMap")}constructor(e){if(this.map=new Map,e)for(let[r,n]of e)this.add(r,n)}get size(){return zm.sum(en(this.map.values()).map(e=>e.length))}clear(){this.map.clear()}delete(e,r){if(r===void 0)return this.map.delete(e);{let n=this.map.get(e);if(n){let i=n.indexOf(r);if(i>=0)return n.length===1?this.map.delete(e):n.splice(i,1),!0}return!1}}get(e){var r;return(r=this.map.get(e))!==null&&r!==void 0?r:[]}has(e,r){if(r===void 0)return this.map.has(e);{let n=this.map.get(e);return n?n.indexOf(r)>=0:!1}}add(e,r){return this.map.has(e)?this.map.get(e).push(r):this.map.set(e,[r]),this}addAll(e,r){return this.map.has(e)?this.map.get(e).push(...r):this.map.set(e,Array.from(r)),this}forEach(e){this.map.forEach((r,n)=>r.forEach(i=>e(i,n,this)))}[Symbol.iterator](){return this.entries().iterator()}entries(){return en(this.map.entries()).flatMap(([e,r])=>r.map(n=>[e,n]))}keys(){return en(this.map.keys())}values(){return en(this.map.values()).flat()}entriesGroupedByKey(){return en(this.map.entries())}},vp=class{static{o(this,"BiMap")}get size(){return this.map.size}constructor(e){if(this.map=new Map,this.inverse=new Map,e)for(let[r,n]of e)this.set(r,n)}clear(){this.map.clear(),this.inverse.clear()}set(e,r){return this.map.set(e,r),this.inverse.set(r,e),this}get(e){return this.map.get(e)}getKey(e){return this.inverse.get(e)}delete(e){let r=this.map.get(e);return r!==void 0?(this.map.delete(e),this.inverse.delete(r),!0):!1}}});var Bx,zM=N(()=>{"use strict";qo();is();f1();Yo();Bx=class{static{o(this,"DefaultScopeComputation")}constructor(e){this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider}async computeExports(e,r=yr.CancellationToken.None){return this.computeExportsForNode(e.parseResult.value,e,void 0,r)}async computeExportsForNode(e,r,n=W2,i=yr.CancellationToken.None){let a=[];this.exportNode(e,a,r);for(let s of n(e))await xi(i),this.exportNode(s,a,r);return a}exportNode(e,r,n){let i=this.nameProvider.getName(e);i&&r.push(this.descriptions.createDescription(e,i,n))}async computeLocalScopes(e,r=yr.CancellationToken.None){let n=e.parseResult.value,i=new Bl;for(let a of Nc(n))await xi(r),this.processNode(a,e,i);return i}processNode(e,r,n){let i=e.$container;if(i){let a=this.nameProvider.getName(e);a&&n.add(i,this.descriptions.createDescription(e,a,r))}}}});var d1,Fx,xFe,GM=N(()=>{"use strict";Ps();d1=class{static{o(this,"StreamScope")}constructor(e,r,n){var i;this.elements=e,this.outerScope=r,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1}getAllElements(){return this.outerScope?this.elements.concat(this.outerScope.getAllElements()):this.elements}getElement(e){let r=this.caseInsensitive?this.elements.find(n=>n.name.toLowerCase()===e.toLowerCase()):this.elements.find(n=>n.name===e);if(r)return r;if(this.outerScope)return this.outerScope.getElement(e)}},Fx=class{static{o(this,"MapScope")}constructor(e,r,n){var i;this.elements=new Map,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1;for(let a of e){let s=this.caseInsensitive?a.name.toLowerCase():a.name;this.elements.set(s,a)}this.outerScope=r}getElement(e){let r=this.caseInsensitive?e.toLowerCase():e,n=this.elements.get(r);if(n)return n;if(this.outerScope)return this.outerScope.getElement(e)}getAllElements(){let e=en(this.elements.values());return this.outerScope&&(e=e.concat(this.outerScope.getAllElements())),e}},xFe={getElement(){},getAllElements(){return I2}}});var p1,$x,xp,_E,m1,DE=N(()=>{"use strict";p1=class{static{o(this,"DisposableCache")}constructor(){this.toDispose=[],this.isDisposed=!1}onDispose(e){this.toDispose.push(e)}dispose(){this.throwIfDisposed(),this.clear(),this.isDisposed=!0,this.toDispose.forEach(e=>e.dispose())}throwIfDisposed(){if(this.isDisposed)throw new Error("This cache has already been disposed")}},$x=class extends p1{static{o(this,"SimpleCache")}constructor(){super(...arguments),this.cache=new Map}has(e){return this.throwIfDisposed(),this.cache.has(e)}set(e,r){this.throwIfDisposed(),this.cache.set(e,r)}get(e,r){if(this.throwIfDisposed(),this.cache.has(e))return this.cache.get(e);if(r){let n=r();return this.cache.set(e,n),n}else return}delete(e){return this.throwIfDisposed(),this.cache.delete(e)}clear(){this.throwIfDisposed(),this.cache.clear()}},xp=class extends p1{static{o(this,"ContextCache")}constructor(e){super(),this.cache=new Map,this.converter=e??(r=>r)}has(e,r){return this.throwIfDisposed(),this.cacheForContext(e).has(r)}set(e,r,n){this.throwIfDisposed(),this.cacheForContext(e).set(r,n)}get(e,r,n){this.throwIfDisposed();let i=this.cacheForContext(e);if(i.has(r))return i.get(r);if(n){let a=n();return i.set(r,a),a}else return}delete(e,r){return this.throwIfDisposed(),this.cacheForContext(e).delete(r)}clear(e){if(this.throwIfDisposed(),e){let r=this.converter(e);this.cache.delete(r)}else this.cache.clear()}cacheForContext(e){let r=this.converter(e),n=this.cache.get(r);return n||(n=new Map,this.cache.set(r,n)),n}},_E=class extends xp{static{o(this,"DocumentCache")}constructor(e,r){super(n=>n.toString()),r?(this.toDispose.push(e.workspace.DocumentBuilder.onDocumentPhase(r,n=>{this.clear(n.uri.toString())})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{for(let a of i)this.clear(a)}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{let a=n.concat(i);for(let s of a)this.clear(s)}))}},m1=class extends $x{static{o(this,"WorkspaceCache")}constructor(e,r){super(),r?(this.toDispose.push(e.workspace.DocumentBuilder.onBuildPhase(r,()=>{this.clear()})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{i.length>0&&this.clear()}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate(()=>{this.clear()}))}}});var zx,VM=N(()=>{"use strict";GM();is();Ps();DE();zx=class{static{o(this,"DefaultScopeProvider")}constructor(e){this.reflection=e.shared.AstReflection,this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider,this.indexManager=e.shared.workspace.IndexManager,this.globalScopeCache=new m1(e.shared)}getScope(e){let r=[],n=this.reflection.getReferenceType(e),i=Pa(e.container).precomputedScopes;if(i){let s=e.container;do{let l=i.get(s);l.length>0&&r.push(en(l).filter(u=>this.reflection.isSubtype(u.type,n))),s=s.$container}while(s)}let a=this.getGlobalScope(n,e);for(let s=r.length-1;s>=0;s--)a=this.createScope(r[s],a);return a}createScope(e,r,n){return new d1(en(e),r,n)}createScopeForNodes(e,r,n){let i=en(e).map(a=>{let s=this.nameProvider.getName(a);if(s)return this.descriptions.createDescription(a,s)}).nonNullable();return new d1(i,r,n)}getGlobalScope(e,r){return this.globalScopeCache.get(e,()=>new Fx(this.indexManager.allElements(e)))}}});function UM(t){return typeof t.$comment=="string"}function qle(t){return typeof t=="object"&&!!t&&("$ref"in t||"$error"in t)}var Gx,LE=N(()=>{"use strict";OM();Rl();is();Ol();o(UM,"isAstNodeWithComment");o(qle,"isIntermediateReference");Gx=class{static{o(this,"DefaultJsonSerializer")}constructor(e){this.ignoreProperties=new Set(["$container","$containerProperty","$containerIndex","$document","$cstNode"]),this.langiumDocuments=e.shared.workspace.LangiumDocuments,this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider,this.commentProvider=e.documentation.CommentProvider}serialize(e,r){let n=r??{},i=r?.replacer,a=o((l,u)=>this.replacer(l,u,n),"defaultReplacer"),s=i?(l,u)=>i(l,u,a):a;try{return this.currentDocument=Pa(e),JSON.stringify(e,s,r?.space)}finally{this.currentDocument=void 0}}deserialize(e,r){let n=r??{},i=JSON.parse(e);return this.linkNode(i,i,n),i}replacer(e,r,{refText:n,sourceText:i,textRegions:a,comments:s,uriConverter:l}){var u,h,f,d;if(!this.ignoreProperties.has(e))if(va(r)){let p=r.ref,m=n?r.$refText:void 0;if(p){let g=Pa(p),y="";this.currentDocument&&this.currentDocument!==g&&(l?y=l(g.uri,r):y=g.uri.toString());let v=this.astNodeLocator.getAstNodePath(p);return{$ref:`${y}#${v}`,$refText:m}}else return{$error:(h=(u=r.error)===null||u===void 0?void 0:u.message)!==null&&h!==void 0?h:"Could not resolve reference",$refText:m}}else if(ii(r)){let p;if(a&&(p=this.addAstNodeRegionWithAssignmentsTo(Object.assign({},r)),(!e||r.$document)&&p?.$textRegion&&(p.$textRegion.documentURI=(f=this.currentDocument)===null||f===void 0?void 0:f.uri.toString())),i&&!e&&(p??(p=Object.assign({},r)),p.$sourceText=(d=r.$cstNode)===null||d===void 0?void 0:d.text),s){p??(p=Object.assign({},r));let m=this.commentProvider.getComment(r);m&&(p.$comment=m.replace(/\r/g,""))}return p??r}else return r}addAstNodeRegionWithAssignmentsTo(e){let r=o(n=>({offset:n.offset,end:n.end,length:n.length,range:n.range}),"createDocumentSegment");if(e.$cstNode){let n=e.$textRegion=r(e.$cstNode),i=n.assignments={};return Object.keys(e).filter(a=>!a.startsWith("$")).forEach(a=>{let s=oN(e.$cstNode,a).map(r);s.length!==0&&(i[a]=s)}),e}}linkNode(e,r,n,i,a,s){for(let[u,h]of Object.entries(e))if(Array.isArray(h))for(let f=0;f<h.length;f++){let d=h[f];qle(d)?h[f]=this.reviveReference(e,u,r,d,n):ii(d)&&this.linkNode(d,r,n,e,u,f)}else qle(h)?e[u]=this.reviveReference(e,u,r,h,n):ii(h)&&this.linkNode(h,r,n,e,u);let l=e;l.$container=i,l.$containerProperty=a,l.$containerIndex=s}reviveReference(e,r,n,i,a){let s=i.$refText,l=i.$error;if(i.$ref){let u=this.getRefNode(n,i.$ref,a.uriConverter);if(ii(u))return s||(s=this.nameProvider.getName(u)),{$refText:s??"",ref:u};l=u}if(l){let u={$refText:s??""};return u.error={container:e,property:r,message:l,reference:u},u}else return}getRefNode(e,r,n){try{let i=r.indexOf("#");if(i===0){let u=this.astNodeLocator.getAstNode(e,r.substring(1));return u||"Could not resolve path: "+r}if(i<0){let u=n?n(r):us.parse(r),h=this.langiumDocuments.getDocument(u);return h?h.parseResult.value:"Could not find document for URI: "+r}let a=n?n(r.substring(0,i)):us.parse(r.substring(0,i)),s=this.langiumDocuments.getDocument(a);if(!s)return"Could not find document for URI: "+r;if(i===r.length-1)return s.parseResult.value;let l=this.astNodeLocator.getAstNode(s.parseResult.value,r.substring(i+1));return l||"Could not resolve URI: "+r}catch(i){return String(i)}}}});var Vx,HM=N(()=>{"use strict";Fc();Vx=class{static{o(this,"DefaultServiceRegistry")}get map(){return this.fileExtensionMap}constructor(e){this.languageIdMap=new Map,this.fileExtensionMap=new Map,this.textDocuments=e?.workspace.TextDocuments}register(e){let r=e.LanguageMetaData;for(let n of r.fileExtensions)this.fileExtensionMap.has(n)&&console.warn(`The file extension ${n} is used by multiple languages. It is now assigned to '${r.languageId}'.`),this.fileExtensionMap.set(n,e);this.languageIdMap.set(r.languageId,e),this.languageIdMap.size===1?this.singleton=e:this.singleton=void 0}getServices(e){var r,n;if(this.singleton!==void 0)return this.singleton;if(this.languageIdMap.size===0)throw new Error("The service registry is empty. Use `register` to register the services of a language.");let i=(n=(r=this.textDocuments)===null||r===void 0?void 0:r.get(e))===null||n===void 0?void 0:n.languageId;if(i!==void 0){let l=this.languageIdMap.get(i);if(l)return l}let a=hs.extname(e),s=this.fileExtensionMap.get(a);if(!s)throw i?new Error(`The service registry contains no services for the extension '${a}' for language '${i}'.`):new Error(`The service registry contains no services for the extension '${a}'.`);return s}hasServices(e){try{return this.getServices(e),!0}catch{return!1}}get all(){return Array.from(this.languageIdMap.values())}}});function bp(t){return{code:t}}var g1,Ux,Hx=N(()=>{"use strict";Xo();f1();Yo();Ps();o(bp,"diagnosticData");(function(t){t.all=["fast","slow","built-in"]})(g1||(g1={}));Ux=class{static{o(this,"ValidationRegistry")}constructor(e){this.entries=new Bl,this.entriesBefore=[],this.entriesAfter=[],this.reflection=e.shared.AstReflection}register(e,r=this,n="fast"){if(n==="built-in")throw new Error("The 'built-in' category is reserved for lexer, parser, and linker errors.");for(let[i,a]of Object.entries(e)){let s=a;if(Array.isArray(s))for(let l of s){let u={check:this.wrapValidationException(l,r),category:n};this.addEntry(i,u)}else if(typeof s=="function"){let l={check:this.wrapValidationException(s,r),category:n};this.addEntry(i,l)}else Lc(s)}}wrapValidationException(e,r){return async(n,i,a)=>{await this.handleException(()=>e.call(r,n,i,a),"An error occurred during validation",i,n)}}async handleException(e,r,n,i){try{await e()}catch(a){if(Bc(a))throw a;console.error(`${r}:`,a),a instanceof Error&&a.stack&&console.error(a.stack);let s=a instanceof Error?a.message:String(a);n("error",`${r}: ${s}`,{node:i})}}addEntry(e,r){if(e==="AstNode"){this.entries.add("AstNode",r);return}for(let n of this.reflection.getAllSubTypes(e))this.entries.add(n,r)}getChecks(e,r){let n=en(this.entries.get(e)).concat(this.entries.get("AstNode"));return r&&(n=n.filter(i=>r.includes(i.category))),n.map(i=>i.check)}registerBeforeDocument(e,r=this){this.entriesBefore.push(this.wrapPreparationException(e,"An error occurred during set-up of the validation",r))}registerAfterDocument(e,r=this){this.entriesAfter.push(this.wrapPreparationException(e,"An error occurred during tear-down of the validation",r))}wrapPreparationException(e,r,n){return async(i,a,s,l)=>{await this.handleException(()=>e.call(n,i,a,s,l),r,a,i)}}get checksBefore(){return this.entriesBefore}get checksAfter(){return this.entriesAfter}}});function Yle(t){if(t.range)return t.range;let e;return typeof t.property=="string"?e=Q2(t.node.$cstNode,t.property,t.index):typeof t.keyword=="string"&&(e=cN(t.node.$cstNode,t.keyword,t.index)),e??(e=t.node.$cstNode),e?e.range:{start:{line:0,character:0},end:{line:0,character:0}}}function RE(t){switch(t){case"error":return 1;case"warning":return 2;case"info":return 3;case"hint":return 4;default:throw new Error("Invalid diagnostic severity: "+t)}}function Xle(t){switch(t){case"error":return bp(jo.LexingError);case"warning":return bp(jo.LexingWarning);case"info":return bp(jo.LexingInfo);case"hint":return bp(jo.LexingHint);default:throw new Error("Invalid diagnostic severity: "+t)}}var Wx,jo,WM=N(()=>{"use strict";qo();Ol();is();Nl();Yo();Hx();Wx=class{static{o(this,"DefaultDocumentValidator")}constructor(e){this.validationRegistry=e.validation.ValidationRegistry,this.metadata=e.LanguageMetaData}async validateDocument(e,r={},n=yr.CancellationToken.None){let i=e.parseResult,a=[];if(await xi(n),(!r.categories||r.categories.includes("built-in"))&&(this.processLexingErrors(i,a,r),r.stopAfterLexingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===jo.LexingError})||(this.processParsingErrors(i,a,r),r.stopAfterParsingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===jo.ParsingError}))||(this.processLinkingErrors(e,a,r),r.stopAfterLinkingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===jo.LinkingError}))))return a;try{a.push(...await this.validateAst(i.value,r,n))}catch(s){if(Bc(s))throw s;console.error("An error occurred during validation:",s)}return await xi(n),a}processLexingErrors(e,r,n){var i,a,s;let l=[...e.lexerErrors,...(a=(i=e.lexerReport)===null||i===void 0?void 0:i.diagnostics)!==null&&a!==void 0?a:[]];for(let u of l){let h=(s=u.severity)!==null&&s!==void 0?s:"error",f={severity:RE(h),range:{start:{line:u.line-1,character:u.column-1},end:{line:u.line-1,character:u.column+u.length-1}},message:u.message,data:Xle(h),source:this.getSource()};r.push(f)}}processParsingErrors(e,r,n){for(let i of e.parserErrors){let a;if(isNaN(i.token.startOffset)){if("previousToken"in i){let s=i.previousToken;if(isNaN(s.startOffset)){let l={line:0,character:0};a={start:l,end:l}}else{let l={line:s.endLine-1,character:s.endColumn};a={start:l,end:l}}}}else a=Gm(i.token);if(a){let s={severity:RE("error"),range:a,message:i.message,data:bp(jo.ParsingError),source:this.getSource()};r.push(s)}}}processLinkingErrors(e,r,n){for(let i of e.references){let a=i.error;if(a){let s={node:a.container,property:a.property,index:a.index,data:{code:jo.LinkingError,containerType:a.container.$type,property:a.property,refText:a.reference.$refText}};r.push(this.toDiagnostic("error",a.message,s))}}}async validateAst(e,r,n=yr.CancellationToken.None){let i=[],a=o((s,l,u)=>{i.push(this.toDiagnostic(s,l,u))},"acceptor");return await this.validateAstBefore(e,r,a,n),await this.validateAstNodes(e,r,a,n),await this.validateAstAfter(e,r,a,n),i}async validateAstBefore(e,r,n,i=yr.CancellationToken.None){var a;let s=this.validationRegistry.checksBefore;for(let l of s)await xi(i),await l(e,n,(a=r.categories)!==null&&a!==void 0?a:[],i)}async validateAstNodes(e,r,n,i=yr.CancellationToken.None){await Promise.all(Wo(e).map(async a=>{await xi(i);let s=this.validationRegistry.getChecks(a.$type,r.categories);for(let l of s)await l(a,n,i)}))}async validateAstAfter(e,r,n,i=yr.CancellationToken.None){var a;let s=this.validationRegistry.checksAfter;for(let l of s)await xi(i),await l(e,n,(a=r.categories)!==null&&a!==void 0?a:[],i)}toDiagnostic(e,r,n){return{message:r,range:Yle(n),severity:RE(e),code:n.code,codeDescription:n.codeDescription,tags:n.tags,relatedInformation:n.relatedInformation,data:n.data,source:this.getSource()}}getSource(){return this.metadata.languageId}};o(Yle,"getDiagnosticRange");o(RE,"toDiagnosticSeverity");o(Xle,"toDiagnosticData");(function(t){t.LexingError="lexing-error",t.LexingWarning="lexing-warning",t.LexingInfo="lexing-info",t.LexingHint="lexing-hint",t.ParsingError="parsing-error",t.LinkingError="linking-error"})(jo||(jo={}))});var qx,Yx,qM=N(()=>{"use strict";qo();Rl();is();Nl();Yo();Fc();qx=class{static{o(this,"DefaultAstNodeDescriptionProvider")}constructor(e){this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider}createDescription(e,r,n){let i=n??Pa(e);r??(r=this.nameProvider.getName(e));let a=this.astNodeLocator.getAstNodePath(e);if(!r)throw new Error(`Node at path ${a} has no name.`);let s,l=o(()=>{var u;return s??(s=Qd((u=this.nameProvider.getNameNode(e))!==null&&u!==void 0?u:e.$cstNode))},"nameSegmentGetter");return{node:e,name:r,get nameSegment(){return l()},selectionSegment:Qd(e.$cstNode),type:e.$type,documentUri:i.uri,path:a}}},Yx=class{static{o(this,"DefaultReferenceDescriptionProvider")}constructor(e){this.nodeLocator=e.workspace.AstNodeLocator}async createDescriptions(e,r=yr.CancellationToken.None){let n=[],i=e.parseResult.value;for(let a of Wo(i))await xi(r),Ag(a).filter(s=>!jd(s)).forEach(s=>{let l=this.createDescription(s);l&&n.push(l)});return n}createDescription(e){let r=e.reference.$nodeDescription,n=e.reference.$refNode;if(!r||!n)return;let i=Pa(e.container).uri;return{sourceUri:i,sourcePath:this.nodeLocator.getAstNodePath(e.container),targetUri:r.documentUri,targetPath:r.path,segment:Qd(n),local:hs.equals(r.documentUri,i)}}}});var Xx,YM=N(()=>{"use strict";Xx=class{static{o(this,"DefaultAstNodeLocator")}constructor(){this.segmentSeparator="/",this.indexSeparator="@"}getAstNodePath(e){if(e.$container){let r=this.getAstNodePath(e.$container),n=this.getPathSegment(e);return r+this.segmentSeparator+n}return""}getPathSegment({$containerProperty:e,$containerIndex:r}){if(!e)throw new Error("Missing '$containerProperty' in AST node.");return r!==void 0?e+this.indexSeparator+r:e}getAstNode(e,r){return r.split(this.segmentSeparator).reduce((i,a)=>{if(!i||a.length===0)return i;let s=a.indexOf(this.indexSeparator);if(s>0){let l=a.substring(0,s),u=parseInt(a.substring(s+1)),h=i[l];return h?.[u]}return i[a]},e)}}});var Kn={};var NE=N(()=>{"use strict";Sr(Kn,Sa(LM(),1))});var jx,XM=N(()=>{"use strict";NE();Yo();jx=class{static{o(this,"DefaultConfigurationProvider")}constructor(e){this._ready=new cs,this.settings={},this.workspaceConfig=!1,this.onConfigurationSectionUpdateEmitter=new Kn.Emitter,this.serviceRegistry=e.ServiceRegistry}get ready(){return this._ready.promise}initialize(e){var r,n;this.workspaceConfig=(n=(r=e.capabilities.workspace)===null||r===void 0?void 0:r.configuration)!==null&&n!==void 0?n:!1}async initialized(e){if(this.workspaceConfig){if(e.register){let r=this.serviceRegistry.all;e.register({section:r.map(n=>this.toSectionName(n.LanguageMetaData.languageId))})}if(e.fetchConfiguration){let r=this.serviceRegistry.all.map(i=>({section:this.toSectionName(i.LanguageMetaData.languageId)})),n=await e.fetchConfiguration(r);r.forEach((i,a)=>{this.updateSectionConfiguration(i.section,n[a])})}}this._ready.resolve()}updateConfiguration(e){e.settings&&Object.keys(e.settings).forEach(r=>{let n=e.settings[r];this.updateSectionConfiguration(r,n),this.onConfigurationSectionUpdateEmitter.fire({section:r,configuration:n})})}updateSectionConfiguration(e,r){this.settings[e]=r}async getConfiguration(e,r){await this.ready;let n=this.toSectionName(e);if(this.settings[n])return this.settings[n][r]}toSectionName(e){return`${e}`}get onConfigurationSectionUpdate(){return this.onConfigurationSectionUpdateEmitter.event}}});var ff,jM=N(()=>{"use strict";(function(t){function e(r){return{dispose:o(async()=>await r(),"dispose")}}o(e,"create"),t.create=e})(ff||(ff={}))});var Kx,KM=N(()=>{"use strict";qo();jM();f1();Yo();Ps();Hx();h1();Kx=class{static{o(this,"DefaultDocumentBuilder")}constructor(e){this.updateBuildOptions={validation:{categories:["built-in","fast"]}},this.updateListeners=[],this.buildPhaseListeners=new Bl,this.documentPhaseListeners=new Bl,this.buildState=new Map,this.documentBuildWaiters=new Map,this.currentState=kn.Changed,this.langiumDocuments=e.workspace.LangiumDocuments,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.textDocuments=e.workspace.TextDocuments,this.indexManager=e.workspace.IndexManager,this.serviceRegistry=e.ServiceRegistry}async build(e,r={},n=yr.CancellationToken.None){var i,a;for(let s of e){let l=s.uri.toString();if(s.state===kn.Validated){if(typeof r.validation=="boolean"&&r.validation)s.state=kn.IndexedReferences,s.diagnostics=void 0,this.buildState.delete(l);else if(typeof r.validation=="object"){let u=this.buildState.get(l),h=(i=u?.result)===null||i===void 0?void 0:i.validationChecks;if(h){let d=((a=r.validation.categories)!==null&&a!==void 0?a:g1.all).filter(p=>!h.includes(p));d.length>0&&(this.buildState.set(l,{completed:!1,options:{validation:Object.assign(Object.assign({},r.validation),{categories:d})},result:u.result}),s.state=kn.IndexedReferences)}}}else this.buildState.delete(l)}this.currentState=kn.Changed,await this.emitUpdate(e.map(s=>s.uri),[]),await this.buildDocuments(e,r,n)}async update(e,r,n=yr.CancellationToken.None){this.currentState=kn.Changed;for(let s of r)this.langiumDocuments.deleteDocument(s),this.buildState.delete(s.toString()),this.indexManager.remove(s);for(let s of e){if(!this.langiumDocuments.invalidateDocument(s)){let u=this.langiumDocumentFactory.fromModel({$type:"INVALID"},s);u.state=kn.Changed,this.langiumDocuments.addDocument(u)}this.buildState.delete(s.toString())}let i=en(e).concat(r).map(s=>s.toString()).toSet();this.langiumDocuments.all.filter(s=>!i.has(s.uri.toString())&&this.shouldRelink(s,i)).forEach(s=>{this.serviceRegistry.getServices(s.uri).references.Linker.unlink(s),s.state=Math.min(s.state,kn.ComputedScopes),s.diagnostics=void 0}),await this.emitUpdate(e,r),await xi(n);let a=this.sortDocuments(this.langiumDocuments.all.filter(s=>{var l;return s.state<kn.Linked||!(!((l=this.buildState.get(s.uri.toString()))===null||l===void 0)&&l.completed)}).toArray());await this.buildDocuments(a,this.updateBuildOptions,n)}async emitUpdate(e,r){await Promise.all(this.updateListeners.map(n=>n(e,r)))}sortDocuments(e){let r=0,n=e.length-1;for(;r<n;){for(;r<e.length&&this.hasTextDocument(e[r]);)r++;for(;n>=0&&!this.hasTextDocument(e[n]);)n--;r<n&&([e[r],e[n]]=[e[n],e[r]])}return e}hasTextDocument(e){var r;return!!(!((r=this.textDocuments)===null||r===void 0)&&r.get(e.uri))}shouldRelink(e,r){return e.references.some(n=>n.error!==void 0)?!0:this.indexManager.isAffected(e,r)}onUpdate(e){return this.updateListeners.push(e),ff.create(()=>{let r=this.updateListeners.indexOf(e);r>=0&&this.updateListeners.splice(r,1)})}async buildDocuments(e,r,n){this.prepareBuild(e,r),await this.runCancelable(e,kn.Parsed,n,a=>this.langiumDocumentFactory.update(a,n)),await this.runCancelable(e,kn.IndexedContent,n,a=>this.indexManager.updateContent(a,n)),await this.runCancelable(e,kn.ComputedScopes,n,async a=>{let s=this.serviceRegistry.getServices(a.uri).references.ScopeComputation;a.precomputedScopes=await s.computeLocalScopes(a,n)}),await this.runCancelable(e,kn.Linked,n,a=>this.serviceRegistry.getServices(a.uri).references.Linker.link(a,n)),await this.runCancelable(e,kn.IndexedReferences,n,a=>this.indexManager.updateReferences(a,n));let i=e.filter(a=>this.shouldValidate(a));await this.runCancelable(i,kn.Validated,n,a=>this.validate(a,n));for(let a of e){let s=this.buildState.get(a.uri.toString());s&&(s.completed=!0)}}prepareBuild(e,r){for(let n of e){let i=n.uri.toString(),a=this.buildState.get(i);(!a||a.completed)&&this.buildState.set(i,{completed:!1,options:r,result:a?.result})}}async runCancelable(e,r,n,i){let a=e.filter(l=>l.state<r);for(let l of a)await xi(n),await i(l),l.state=r,await this.notifyDocumentPhase(l,r,n);let s=e.filter(l=>l.state===r);await this.notifyBuildPhase(s,r,n),this.currentState=r}onBuildPhase(e,r){return this.buildPhaseListeners.add(e,r),ff.create(()=>{this.buildPhaseListeners.delete(e,r)})}onDocumentPhase(e,r){return this.documentPhaseListeners.add(e,r),ff.create(()=>{this.documentPhaseListeners.delete(e,r)})}waitUntil(e,r,n){let i;if(r&&"path"in r?i=r:n=r,n??(n=yr.CancellationToken.None),i){let a=this.langiumDocuments.getDocument(i);if(a&&a.state>e)return Promise.resolve(i)}return this.currentState>=e?Promise.resolve(void 0):n.isCancellationRequested?Promise.reject(Pc):new Promise((a,s)=>{let l=this.onBuildPhase(e,()=>{if(l.dispose(),u.dispose(),i){let h=this.langiumDocuments.getDocument(i);a(h?.uri)}else a(void 0)}),u=n.onCancellationRequested(()=>{l.dispose(),u.dispose(),s(Pc)})})}async notifyDocumentPhase(e,r,n){let a=this.documentPhaseListeners.get(r).slice();for(let s of a)try{await s(e,n)}catch(l){if(!Bc(l))throw l}}async notifyBuildPhase(e,r,n){if(e.length===0)return;let a=this.buildPhaseListeners.get(r).slice();for(let s of a)await xi(n),await s(e,n)}shouldValidate(e){return!!this.getBuildOptions(e).validation}async validate(e,r){var n,i;let a=this.serviceRegistry.getServices(e.uri).validation.DocumentValidator,s=this.getBuildOptions(e).validation,l=typeof s=="object"?s:void 0,u=await a.validateDocument(e,l,r);e.diagnostics?e.diagnostics.push(...u):e.diagnostics=u;let h=this.buildState.get(e.uri.toString());if(h){(n=h.result)!==null&&n!==void 0||(h.result={});let f=(i=l?.categories)!==null&&i!==void 0?i:g1.all;h.result.validationChecks?h.result.validationChecks.push(...f):h.result.validationChecks=[...f]}}getBuildOptions(e){var r,n;return(n=(r=this.buildState.get(e.uri.toString()))===null||r===void 0?void 0:r.options)!==null&&n!==void 0?n:{}}}});var Qx,QM=N(()=>{"use strict";is();DE();qo();Ps();Fc();Qx=class{static{o(this,"DefaultIndexManager")}constructor(e){this.symbolIndex=new Map,this.symbolByTypeIndex=new xp,this.referenceIndex=new Map,this.documents=e.workspace.LangiumDocuments,this.serviceRegistry=e.ServiceRegistry,this.astReflection=e.AstReflection}findAllReferences(e,r){let n=Pa(e).uri,i=[];return this.referenceIndex.forEach(a=>{a.forEach(s=>{hs.equals(s.targetUri,n)&&s.targetPath===r&&i.push(s)})}),en(i)}allElements(e,r){let n=en(this.symbolIndex.keys());return r&&(n=n.filter(i=>!r||r.has(i))),n.map(i=>this.getFileDescriptions(i,e)).flat()}getFileDescriptions(e,r){var n;return r?this.symbolByTypeIndex.get(e,r,()=>{var a;return((a=this.symbolIndex.get(e))!==null&&a!==void 0?a:[]).filter(l=>this.astReflection.isSubtype(l.type,r))}):(n=this.symbolIndex.get(e))!==null&&n!==void 0?n:[]}remove(e){let r=e.toString();this.symbolIndex.delete(r),this.symbolByTypeIndex.clear(r),this.referenceIndex.delete(r)}async updateContent(e,r=yr.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).references.ScopeComputation.computeExports(e,r),a=e.uri.toString();this.symbolIndex.set(a,i),this.symbolByTypeIndex.clear(a)}async updateReferences(e,r=yr.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).workspace.ReferenceDescriptionProvider.createDescriptions(e,r);this.referenceIndex.set(e.uri.toString(),i)}isAffected(e,r){let n=this.referenceIndex.get(e.uri.toString());return n?n.some(i=>!i.local&&r.has(i.targetUri.toString())):!1}}});var Zx,ZM=N(()=>{"use strict";qo();Yo();Fc();Zx=class{static{o(this,"DefaultWorkspaceManager")}constructor(e){this.initialBuildOptions={},this._ready=new cs,this.serviceRegistry=e.ServiceRegistry,this.langiumDocuments=e.workspace.LangiumDocuments,this.documentBuilder=e.workspace.DocumentBuilder,this.fileSystemProvider=e.workspace.FileSystemProvider,this.mutex=e.workspace.WorkspaceLock}get ready(){return this._ready.promise}get workspaceFolders(){return this.folders}initialize(e){var r;this.folders=(r=e.workspaceFolders)!==null&&r!==void 0?r:void 0}initialized(e){return this.mutex.write(r=>{var n;return this.initializeWorkspace((n=this.folders)!==null&&n!==void 0?n:[],r)})}async initializeWorkspace(e,r=yr.CancellationToken.None){let n=await this.performStartup(e);await xi(r),await this.documentBuilder.build(n,this.initialBuildOptions,r)}async performStartup(e){let r=this.serviceRegistry.all.flatMap(a=>a.LanguageMetaData.fileExtensions),n=[],i=o(a=>{n.push(a),this.langiumDocuments.hasDocument(a.uri)||this.langiumDocuments.addDocument(a)},"collector");return await this.loadAdditionalDocuments(e,i),await Promise.all(e.map(a=>[a,this.getRootFolder(a)]).map(async a=>this.traverseFolder(...a,r,i))),this._ready.resolve(),n}loadAdditionalDocuments(e,r){return Promise.resolve()}getRootFolder(e){return us.parse(e.uri)}async traverseFolder(e,r,n,i){let a=await this.fileSystemProvider.readDirectory(r);await Promise.all(a.map(async s=>{if(this.includeEntry(e,s,n)){if(s.isDirectory)await this.traverseFolder(e,s.uri,n,i);else if(s.isFile){let l=await this.langiumDocuments.getOrCreateDocument(s.uri);i(l)}}}))}includeEntry(e,r,n){let i=hs.basename(r.uri);if(i.startsWith("."))return!1;if(r.isDirectory)return i!=="node_modules"&&i!=="out";if(r.isFile){let a=hs.extname(r.uri);return n.includes(a)}return!1}}});function IE(t){return Array.isArray(t)&&(t.length===0||"name"in t[0])}function eI(t){return t&&"modes"in t&&"defaultMode"in t}function JM(t){return!IE(t)&&!eI(t)}var Jx,ME,wp,OE=N(()=>{"use strict";cf();Jx=class{static{o(this,"DefaultLexerErrorMessageProvider")}buildUnexpectedCharactersMessage(e,r,n,i,a){return Gg.buildUnexpectedCharactersMessage(e,r,n,i,a)}buildUnableToPopLexerModeMessage(e){return Gg.buildUnableToPopLexerModeMessage(e)}},ME={mode:"full"},wp=class{static{o(this,"DefaultLexer")}constructor(e){this.errorMessageProvider=e.parser.LexerErrorMessageProvider,this.tokenBuilder=e.parser.TokenBuilder;let r=this.tokenBuilder.buildTokens(e.Grammar,{caseInsensitive:e.LanguageMetaData.caseInsensitive});this.tokenTypes=this.toTokenTypeDictionary(r);let n=JM(r)?Object.values(r):r,i=e.LanguageMetaData.mode==="production";this.chevrotainLexer=new Xn(n,{positionTracking:"full",skipValidations:i,errorMessageProvider:this.errorMessageProvider})}get definition(){return this.tokenTypes}tokenize(e,r=ME){var n,i,a;let s=this.chevrotainLexer.tokenize(e);return{tokens:s.tokens,errors:s.errors,hidden:(n=s.groups.hidden)!==null&&n!==void 0?n:[],report:(a=(i=this.tokenBuilder).flushLexingReport)===null||a===void 0?void 0:a.call(i,e)}}toTokenTypeDictionary(e){if(JM(e))return e;let r=eI(e)?Object.values(e.modes).flat():e,n={};return r.forEach(i=>n[i.name]=i),n}};o(IE,"isTokenTypeArray");o(eI,"isIMultiModeLexerDefinition");o(JM,"isTokenTypeDictionary")});function nI(t,e,r){let n,i;typeof t=="string"?(i=e,n=r):(i=t.range.start,n=e),i||(i=jr.create(0,0));let a=Qle(t),s=aI(n),l=wFe({lines:a,position:i,options:s});return CFe({index:0,tokens:l,position:i})}function iI(t,e){let r=aI(e),n=Qle(t);if(n.length===0)return!1;let i=n[0],a=n[n.length-1],s=r.start,l=r.end;return!!s?.exec(i)&&!!l?.exec(a)}function Qle(t){let e="";return typeof t=="string"?e=t:e=t.text,e.split(JR)}function wFe(t){var e,r,n;let i=[],a=t.position.line,s=t.position.character;for(let l=0;l<t.lines.length;l++){let u=l===0,h=l===t.lines.length-1,f=t.lines[l],d=0;if(u&&t.options.start){let m=(e=t.options.start)===null||e===void 0?void 0:e.exec(f);m&&(d=m.index+m[0].length)}else{let m=(r=t.options.line)===null||r===void 0?void 0:r.exec(f);m&&(d=m.index+m[0].length)}if(h){let m=(n=t.options.end)===null||n===void 0?void 0:n.exec(f);m&&(f=f.substring(0,m.index))}if(f=f.substring(0,SFe(f)),rI(f,d)>=f.length){if(i.length>0){let m=jr.create(a,s);i.push({type:"break",content:"",range:Pr.create(m,m)})}}else{jle.lastIndex=d;let m=jle.exec(f);if(m){let g=m[0],y=m[1],v=jr.create(a,s+d),x=jr.create(a,s+d+g.length);i.push({type:"tag",content:y,range:Pr.create(v,x)}),d+=g.length,d=rI(f,d)}if(d<f.length){let g=f.substring(d),y=Array.from(g.matchAll(bFe));i.push(...TFe(y,g,a,s+d))}}a++,s=0}return i.length>0&&i[i.length-1].type==="break"?i.slice(0,-1):i}function TFe(t,e,r,n){let i=[];if(t.length===0){let a=jr.create(r,n),s=jr.create(r,n+e.length);i.push({type:"text",content:e,range:Pr.create(a,s)})}else{let a=0;for(let l of t){let u=l.index,h=e.substring(a,u);h.length>0&&i.push({type:"text",content:e.substring(a,u),range:Pr.create(jr.create(r,a+n),jr.create(r,u+n))});let f=h.length+1,d=l[1];if(i.push({type:"inline-tag",content:d,range:Pr.create(jr.create(r,a+f+n),jr.create(r,a+f+d.length+n))}),f+=d.length,l.length===4){f+=l[2].length;let p=l[3];i.push({type:"text",content:p,range:Pr.create(jr.create(r,a+f+n),jr.create(r,a+f+p.length+n))})}else i.push({type:"text",content:"",range:Pr.create(jr.create(r,a+f+n),jr.create(r,a+f+n))});a=u+l[0].length}let s=e.substring(a);s.length>0&&i.push({type:"text",content:s,range:Pr.create(jr.create(r,a+n),jr.create(r,a+n+s.length))})}return i}function rI(t,e){let r=t.substring(e).match(kFe);return r?e+r.index:t.length}function SFe(t){let e=t.match(EFe);if(e&&typeof e.index=="number")return e.index}function CFe(t){var e,r,n,i;let a=jr.create(t.position.line,t.position.character);if(t.tokens.length===0)return new PE([],Pr.create(a,a));let s=[];for(;t.index<t.tokens.length;){let h=AFe(t,s[s.length-1]);h&&s.push(h)}let l=(r=(e=s[0])===null||e===void 0?void 0:e.range.start)!==null&&r!==void 0?r:a,u=(i=(n=s[s.length-1])===null||n===void 0?void 0:n.range.end)!==null&&i!==void 0?i:a;return new PE(s,Pr.create(l,u))}function AFe(t,e){let r=t.tokens[t.index];if(r.type==="tag")return Jle(t,!1);if(r.type==="text"||r.type==="inline-tag")return Zle(t);_Fe(r,e),t.index++}function _Fe(t,e){if(e){let r=new BE("",t.range);"inlines"in e?e.inlines.push(r):e.content.inlines.push(r)}}function Zle(t){let e=t.tokens[t.index],r=e,n=e,i=[];for(;e&&e.type!=="break"&&e.type!=="tag";)i.push(DFe(t)),n=e,e=t.tokens[t.index];return new tb(i,Pr.create(r.range.start,n.range.end))}function DFe(t){return t.tokens[t.index].type==="inline-tag"?Jle(t,!0):ece(t)}function Jle(t,e){let r=t.tokens[t.index++],n=r.content.substring(1),i=t.tokens[t.index];if(i?.type==="text")if(e){let a=ece(t);return new eb(n,new tb([a],a.range),e,Pr.create(r.range.start,a.range.end))}else{let a=Zle(t);return new eb(n,a,e,Pr.create(r.range.start,a.range.end))}else{let a=r.range;return new eb(n,new tb([],a),e,a)}}function ece(t){let e=t.tokens[t.index++];return new BE(e.content,e.range)}function aI(t){if(!t)return aI({start:"/**",end:"*/",line:"*"});let{start:e,end:r,line:n}=t;return{start:tI(e,!0),end:tI(r,!1),line:tI(n,!0)}}function tI(t,e){if(typeof t=="string"||typeof t=="object"){let r=typeof t=="string"?ap(t):t.source;return e?new RegExp(`^\\s*${r}`):new RegExp(`\\s*${r}\\s*$`)}else return t}function LFe(t,e,r){var n,i;if(t==="linkplain"||t==="linkcode"||t==="link"){let a=e.indexOf(" "),s=e;if(a>0){let u=rI(e,a);s=e.substring(u),e=e.substring(0,a)}return(t==="linkcode"||t==="link"&&r.link==="code")&&(s=`\`${s}\``),(i=(n=r.renderLink)===null||n===void 0?void 0:n.call(r,e,s))!==null&&i!==void 0?i:RFe(e,s)}}function RFe(t,e){try{return us.parse(t,!0),`[${e}](${t})`}catch{return t}}function Kle(t){return t.endsWith(`
807 +`)?`
808 +`:`
809 +
810 +`}var jle,bFe,kFe,EFe,PE,eb,tb,BE,sI=N(()=>{"use strict";mM();Lg();Fc();o(nI,"parseJSDoc");o(iI,"isJSDoc");o(Qle,"getLines");jle=/\s*(@([\p{L}][\p{L}\p{N}]*)?)/uy,bFe=/\{(@[\p{L}][\p{L}\p{N}]*)(\s*)([^\r\n}]+)?\}/gu;o(wFe,"tokenize");o(TFe,"buildInlineTokens");kFe=/\S/,EFe=/\s*$/;o(rI,"skipWhitespace");o(SFe,"lastCharacter");o(CFe,"parseJSDocComment");o(AFe,"parseJSDocElement");o(_Fe,"appendEmptyLine");o(Zle,"parseJSDocText");o(DFe,"parseJSDocInline");o(Jle,"parseJSDocTag");o(ece,"parseJSDocLine");o(aI,"normalizeOptions");o(tI,"normalizeOption");PE=class{static{o(this,"JSDocCommentImpl")}constructor(e,r){this.elements=e,this.range=r}getTag(e){return this.getAllTags().find(r=>r.name===e)}getTags(e){return this.getAllTags().filter(r=>r.name===e)}getAllTags(){return this.elements.filter(e=>"name"in e)}toString(){let e="";for(let r of this.elements)if(e.length===0)e=r.toString();else{let n=r.toString();e+=Kle(e)+n}return e.trim()}toMarkdown(e){let r="";for(let n of this.elements)if(r.length===0)r=n.toMarkdown(e);else{let i=n.toMarkdown(e);r+=Kle(r)+i}return r.trim()}},eb=class{static{o(this,"JSDocTagImpl")}constructor(e,r,n,i){this.name=e,this.content=r,this.inline=n,this.range=i}toString(){let e=`@${this.name}`,r=this.content.toString();return this.content.inlines.length===1?e=`${e} ${r}`:this.content.inlines.length>1&&(e=`${e}
811 +${r}`),this.inline?`{${e}}`:e}toMarkdown(e){var r,n;return(n=(r=e?.renderTag)===null||r===void 0?void 0:r.call(e,this))!==null&&n!==void 0?n:this.toMarkdownDefault(e)}toMarkdownDefault(e){let r=this.content.toMarkdown(e);if(this.inline){let a=LFe(this.name,r,e??{});if(typeof a=="string")return a}let n="";e?.tag==="italic"||e?.tag===void 0?n="*":e?.tag==="bold"?n="**":e?.tag==="bold-italic"&&(n="***");let i=`${n}@${this.name}${n}`;return this.content.inlines.length===1?i=`${i} \u2014 ${r}`:this.content.inlines.length>1&&(i=`${i}
812 +${r}`),this.inline?`{${i}}`:i}};o(LFe,"renderInlineTag");o(RFe,"renderLinkDefault");tb=class{static{o(this,"JSDocTextImpl")}constructor(e,r){this.inlines=e,this.range=r}toString(){let e="";for(let r=0;r<this.inlines.length;r++){let n=this.inlines[r],i=this.inlines[r+1];e+=n.toString(),i&&i.range.start.line>n.range.start.line&&(e+=`
813 +`)}return e}toMarkdown(e){let r="";for(let n=0;n<this.inlines.length;n++){let i=this.inlines[n],a=this.inlines[n+1];r+=i.toMarkdown(e),a&&a.range.start.line>i.range.start.line&&(r+=`
814 +`)}return r}},BE=class{static{o(this,"JSDocLineImpl")}constructor(e,r){this.text=e,this.range=r}toString(){return this.text}toMarkdown(){return this.text}};o(Kle,"fillNewlines")});var rb,oI=N(()=>{"use strict";is();sI();rb=class{static{o(this,"JSDocDocumentationProvider")}constructor(e){this.indexManager=e.shared.workspace.IndexManager,this.commentProvider=e.documentation.CommentProvider}getDocumentation(e){let r=this.commentProvider.getComment(e);if(r&&iI(r))return nI(r).toMarkdown({renderLink:o((i,a)=>this.documentationLinkRenderer(e,i,a),"renderLink"),renderTag:o(i=>this.documentationTagRenderer(e,i),"renderTag")})}documentationLinkRenderer(e,r,n){var i;let a=(i=this.findNameInPrecomputedScopes(e,r))!==null&&i!==void 0?i:this.findNameInGlobalScope(e,r);if(a&&a.nameSegment){let s=a.nameSegment.range.start.line+1,l=a.nameSegment.range.start.character+1,u=a.documentUri.with({fragment:`L${s},${l}`});return`[${n}](${u.toString()})`}else return}documentationTagRenderer(e,r){}findNameInPrecomputedScopes(e,r){let i=Pa(e).precomputedScopes;if(!i)return;let a=e;do{let l=i.get(a).find(u=>u.name===r);if(l)return l;a=a.$container}while(a)}findNameInGlobalScope(e,r){return this.indexManager.allElements().find(i=>i.name===r)}}});var nb,lI=N(()=>{"use strict";LE();Nl();nb=class{static{o(this,"DefaultCommentProvider")}constructor(e){this.grammarConfig=()=>e.parser.GrammarConfig}getComment(e){var r;return UM(e)?e.$comment:(r=AR(e.$cstNode,this.grammarConfig().multilineCommentRules))===null||r===void 0?void 0:r.text}}});var ib,cI,uI,hI=N(()=>{"use strict";Yo();NE();ib=class{static{o(this,"DefaultAsyncParser")}constructor(e){this.syncParser=e.parser.LangiumParser}parse(e,r){return Promise.resolve(this.syncParser.parse(e))}},cI=class{static{o(this,"AbstractThreadedAsyncParser")}constructor(e){this.threadCount=8,this.terminationDelay=200,this.workerPool=[],this.queue=[],this.hydrator=e.serializer.Hydrator}initializeWorkers(){for(;this.workerPool.length<this.threadCount;){let e=this.createWorker();e.onReady(()=>{if(this.queue.length>0){let r=this.queue.shift();r&&(e.lock(),r.resolve(e))}}),this.workerPool.push(e)}}async parse(e,r){let n=await this.acquireParserWorker(r),i=new cs,a,s=r.onCancellationRequested(()=>{a=setTimeout(()=>{this.terminateWorker(n)},this.terminationDelay)});return n.parse(e).then(l=>{let u=this.hydrator.hydrate(l);i.resolve(u)}).catch(l=>{i.reject(l)}).finally(()=>{s.dispose(),clearTimeout(a)}),i.promise}terminateWorker(e){e.terminate();let r=this.workerPool.indexOf(e);r>=0&&this.workerPool.splice(r,1)}async acquireParserWorker(e){this.initializeWorkers();for(let n of this.workerPool)if(n.ready)return n.lock(),n;let r=new cs;return e.onCancellationRequested(()=>{let n=this.queue.indexOf(r);n>=0&&this.queue.splice(n,1),r.reject(Pc)}),this.queue.push(r),r.promise}},uI=class{static{o(this,"ParserWorker")}get ready(){return this._ready}get onReady(){return this.onReadyEmitter.event}constructor(e,r,n,i){this.onReadyEmitter=new Kn.Emitter,this.deferred=new cs,this._ready=!0,this._parsing=!1,this.sendMessage=e,this._terminate=i,r(a=>{let s=a;this.deferred.resolve(s),this.unlock()}),n(a=>{this.deferred.reject(a),this.unlock()})}terminate(){this.deferred.reject(Pc),this._terminate()}lock(){this._ready=!1}unlock(){this._parsing=!1,this._ready=!0,this.onReadyEmitter.fire()}parse(e){if(this._parsing)throw new Error("Parser worker is busy");return this._parsing=!0,this.deferred=new cs,this.sendMessage(e),this.deferred.promise}}});var ab,fI=N(()=>{"use strict";qo();Yo();ab=class{static{o(this,"DefaultWorkspaceLock")}constructor(){this.previousTokenSource=new yr.CancellationTokenSource,this.writeQueue=[],this.readQueue=[],this.done=!0}write(e){this.cancelWrite();let r=CE();return this.previousTokenSource=r,this.enqueue(this.writeQueue,e,r.token)}read(e){return this.enqueue(this.readQueue,e)}enqueue(e,r,n=yr.CancellationToken.None){let i=new cs,a={action:r,deferred:i,cancellationToken:n};return e.push(a),this.performNextOperation(),i.promise}async performNextOperation(){if(!this.done)return;let e=[];if(this.writeQueue.length>0)e.push(this.writeQueue.shift());else if(this.readQueue.length>0)e.push(...this.readQueue.splice(0,this.readQueue.length));else return;this.done=!1,await Promise.all(e.map(async({action:r,deferred:n,cancellationToken:i})=>{try{let a=await Promise.resolve().then(()=>r(i));n.resolve(a)}catch(a){Bc(a)?n.resolve(void 0):n.reject(a)}})),this.done=!0,this.performNextOperation()}cancelWrite(){this.previousTokenSource.cancel()}}});var sb,dI=N(()=>{"use strict";gE();Rc();Rl();is();f1();Nl();sb=class{static{o(this,"DefaultHydrator")}constructor(e){this.grammarElementIdMap=new vp,this.tokenTypeIdMap=new vp,this.grammar=e.Grammar,this.lexer=e.parser.Lexer,this.linker=e.references.Linker}dehydrate(e){return{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport?this.dehydrateLexerReport(e.lexerReport):void 0,parserErrors:e.parserErrors.map(r=>Object.assign(Object.assign({},r),{message:r.message})),value:this.dehydrateAstNode(e.value,this.createDehyrationContext(e.value))}}dehydrateLexerReport(e){return e}createDehyrationContext(e){let r=new Map,n=new Map;for(let i of Wo(e))r.set(i,{});if(e.$cstNode)for(let i of Kd(e.$cstNode))n.set(i,{});return{astNodes:r,cstNodes:n}}dehydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode!==void 0&&(n.$cstNode=this.dehydrateCstNode(e.$cstNode,r));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)ii(l)?s.push(this.dehydrateAstNode(l,r)):va(l)?s.push(this.dehydrateReference(l,r)):s.push(l)}else ii(a)?n[i]=this.dehydrateAstNode(a,r):va(a)?n[i]=this.dehydrateReference(a,r):a!==void 0&&(n[i]=a);return n}dehydrateReference(e,r){let n={};return n.$refText=e.$refText,e.$refNode&&(n.$refNode=r.cstNodes.get(e.$refNode)),n}dehydrateCstNode(e,r){let n=r.cstNodes.get(e);return M2(e)?n.fullText=e.fullText:n.grammarSource=this.getGrammarElementId(e.grammarSource),n.hidden=e.hidden,n.astNode=r.astNodes.get(e.astNode),Ll(e)?n.content=e.content.map(i=>this.dehydrateCstNode(i,r)):af(e)&&(n.tokenType=e.tokenType.name,n.offset=e.offset,n.length=e.length,n.startLine=e.range.start.line,n.startColumn=e.range.start.character,n.endLine=e.range.end.line,n.endColumn=e.range.end.character),n}hydrate(e){let r=e.value,n=this.createHydrationContext(r);return"$cstNode"in r&&this.hydrateCstNode(r.$cstNode,n),{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport,parserErrors:e.parserErrors,value:this.hydrateAstNode(r,n)}}createHydrationContext(e){let r=new Map,n=new Map;for(let a of Wo(e))r.set(a,{});let i;if(e.$cstNode)for(let a of Kd(e.$cstNode)){let s;"fullText"in a?(s=new a1(a.fullText),i=s):"content"in a?s=new mp:"tokenType"in a&&(s=this.hydrateCstLeafNode(a)),s&&(n.set(a,s),s.root=i)}return{astNodes:r,cstNodes:n}}hydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode&&(n.$cstNode=r.cstNodes.get(e.$cstNode));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)ii(l)?s.push(this.setParent(this.hydrateAstNode(l,r),n)):va(l)?s.push(this.hydrateReference(l,n,i,r)):s.push(l)}else ii(a)?n[i]=this.setParent(this.hydrateAstNode(a,r),n):va(a)?n[i]=this.hydrateReference(a,n,i,r):a!==void 0&&(n[i]=a);return n}setParent(e,r){return e.$container=r,e}hydrateReference(e,r,n,i){return this.linker.buildReference(r,n,i.cstNodes.get(e.$refNode),e.$refText)}hydrateCstNode(e,r,n=0){let i=r.cstNodes.get(e);if(typeof e.grammarSource=="number"&&(i.grammarSource=this.getGrammarElement(e.grammarSource)),i.astNode=r.astNodes.get(e.astNode),Ll(i))for(let a of e.content){let s=this.hydrateCstNode(a,r,n++);i.content.push(s)}return i}hydrateCstLeafNode(e){let r=this.getTokenType(e.tokenType),n=e.offset,i=e.length,a=e.startLine,s=e.startColumn,l=e.endLine,u=e.endColumn,h=e.hidden;return new pp(n,i,{start:{line:a,character:s},end:{line:l,character:u}},r,h)}getTokenType(e){return this.lexer.definition[e]}getGrammarElementId(e){if(e)return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.get(e)}getGrammarElement(e){return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.getKey(e)}createGrammarElementIdMap(){let e=0;for(let r of Wo(this.grammar))G2(r)&&this.grammarElementIdMap.set(r,e++)}}});function fs(t){return{documentation:{CommentProvider:o(e=>new nb(e),"CommentProvider"),DocumentationProvider:o(e=>new rb(e),"DocumentationProvider")},parser:{AsyncParser:o(e=>new ib(e),"AsyncParser"),GrammarConfig:o(e=>pN(e),"GrammarConfig"),LangiumParser:o(e=>TM(e),"LangiumParser"),CompletionParser:o(e=>bM(e),"CompletionParser"),ValueConverter:o(()=>new yp,"ValueConverter"),TokenBuilder:o(()=>new Uu,"TokenBuilder"),Lexer:o(e=>new wp(e),"Lexer"),ParserErrorMessageProvider:o(()=>new s1,"ParserErrorMessageProvider"),LexerErrorMessageProvider:o(()=>new Jx,"LexerErrorMessageProvider")},workspace:{AstNodeLocator:o(()=>new Xx,"AstNodeLocator"),AstNodeDescriptionProvider:o(e=>new qx(e),"AstNodeDescriptionProvider"),ReferenceDescriptionProvider:o(e=>new Yx(e),"ReferenceDescriptionProvider")},references:{Linker:o(e=>new Ix(e),"Linker"),NameProvider:o(()=>new Ox,"NameProvider"),ScopeProvider:o(e=>new zx(e),"ScopeProvider"),ScopeComputation:o(e=>new Bx(e),"ScopeComputation"),References:o(e=>new Px(e),"References")},serializer:{Hydrator:o(e=>new sb(e),"Hydrator"),JsonSerializer:o(e=>new Gx(e),"JsonSerializer")},validation:{DocumentValidator:o(e=>new Wx(e),"DocumentValidator"),ValidationRegistry:o(e=>new Ux(e),"ValidationRegistry")},shared:o(()=>t.shared,"shared")}}function ds(t){return{ServiceRegistry:o(e=>new Vx(e),"ServiceRegistry"),workspace:{LangiumDocuments:o(e=>new Mx(e),"LangiumDocuments"),LangiumDocumentFactory:o(e=>new Nx(e),"LangiumDocumentFactory"),DocumentBuilder:o(e=>new Kx(e),"DocumentBuilder"),IndexManager:o(e=>new Qx(e),"IndexManager"),WorkspaceManager:o(e=>new Zx(e),"WorkspaceManager"),FileSystemProvider:o(e=>t.fileSystemProvider(e),"FileSystemProvider"),WorkspaceLock:o(()=>new ab,"WorkspaceLock"),ConfigurationProvider:o(e=>new jx(e),"ConfigurationProvider")}}}var pI=N(()=>{"use strict";mN();wM();kM();wE();EM();BM();FM();$M();zM();VM();LE();HM();WM();Hx();qM();YM();XM();KM();h1();QM();ZM();OE();oI();lI();Lx();hI();fI();dI();o(fs,"createDefaultCoreModule");o(ds,"createDefaultSharedCoreModule")});function ui(t,e,r,n,i,a,s,l,u){let h=[t,e,r,n,i,a,s,l,u].reduce(FE,{});return ace(h)}function ice(t){if(t&&t[nce])for(let e of Object.values(t))ice(e);return t}function ace(t,e){let r=new Proxy({},{deleteProperty:o(()=>!1,"deleteProperty"),set:o(()=>{throw new Error("Cannot set property on injected service container")},"set"),get:o((n,i)=>i===nce?!0:rce(n,i,t,e||r),"get"),getOwnPropertyDescriptor:o((n,i)=>(rce(n,i,t,e||r),Object.getOwnPropertyDescriptor(n,i)),"getOwnPropertyDescriptor"),has:o((n,i)=>i in t,"has"),ownKeys:o(()=>[...Object.getOwnPropertyNames(t)],"ownKeys")});return r}function rce(t,e,r,n){if(e in t){if(t[e]instanceof Error)throw new Error("Construction failure. Please make sure that your dependencies are constructable.",{cause:t[e]});if(t[e]===tce)throw new Error('Cycle detected. Please make "'+String(e)+'" lazy. Visit https://langium.org/docs/reference/configuration-services/#resolving-cyclic-dependencies');return t[e]}else if(e in r){let i=r[e];t[e]=tce;try{t[e]=typeof i=="function"?i(n):ace(i,n)}catch(a){throw t[e]=a instanceof Error?a:void 0,a}return t[e]}else return}function FE(t,e){if(e){for(let[r,n]of Object.entries(e))if(n!==void 0){let i=t[r];i!==null&&n!==null&&typeof i=="object"&&typeof n=="object"?t[r]=FE(i,n):t[r]=n}}return t}var mI,nce,tce,gI=N(()=>{"use strict";(function(t){t.merge=(e,r)=>FE(FE({},e),r)})(mI||(mI={}));o(ui,"inject");nce=Symbol("isProxy");o(ice,"eagerLoad");o(ace,"_inject");tce=Symbol();o(rce,"_resolve");o(FE,"_merge")});var sce=N(()=>{"use strict"});var oce=N(()=>{"use strict";lI();oI();sI()});var lce=N(()=>{"use strict"});var cce=N(()=>{"use strict";mN();lce()});var yI,Tp,$E,vI,uce=N(()=>{"use strict";cf();wE();OE();yI={indentTokenName:"INDENT",dedentTokenName:"DEDENT",whitespaceTokenName:"WS",ignoreIndentationDelimiters:[]};(function(t){t.REGULAR="indentation-sensitive",t.IGNORE_INDENTATION="ignore-indentation"})(Tp||(Tp={}));$E=class extends Uu{static{o(this,"IndentationAwareTokenBuilder")}constructor(e=yI){super(),this.indentationStack=[0],this.whitespaceRegExp=/[ \t]+/y,this.options=Object.assign(Object.assign({},yI),e),this.indentTokenType=of({name:this.options.indentTokenName,pattern:this.indentMatcher.bind(this),line_breaks:!1}),this.dedentTokenType=of({name:this.options.dedentTokenName,pattern:this.dedentMatcher.bind(this),line_breaks:!1})}buildTokens(e,r){let n=super.buildTokens(e,r);if(!IE(n))throw new Error("Invalid tokens built by default builder");let{indentTokenName:i,dedentTokenName:a,whitespaceTokenName:s,ignoreIndentationDelimiters:l}=this.options,u,h,f,d=[];for(let p of n){for(let[m,g]of l)p.name===m?p.PUSH_MODE=Tp.IGNORE_INDENTATION:p.name===g&&(p.POP_MODE=!0);p.name===a?u=p:p.name===i?h=p:p.name===s?f=p:d.push(p)}if(!u||!h||!f)throw new Error("Some indentation/whitespace tokens not found!");return l.length>0?{modes:{[Tp.REGULAR]:[u,h,...d,f],[Tp.IGNORE_INDENTATION]:[...d,f]},defaultMode:Tp.REGULAR}:[u,h,f,...d]}flushLexingReport(e){let r=super.flushLexingReport(e);return Object.assign(Object.assign({},r),{remainingDedents:this.flushRemainingDedents(e)})}isStartOfLine(e,r){return r===0||`\r
815 +`.includes(e[r-1])}matchWhitespace(e,r,n,i){var a;this.whitespaceRegExp.lastIndex=r;let s=this.whitespaceRegExp.exec(e);return{currIndentLevel:(a=s?.[0].length)!==null&&a!==void 0?a:0,prevIndentLevel:this.indentationStack.at(-1),match:s}}createIndentationTokenInstance(e,r,n,i){let a=this.getLineNumber(r,i);return $u(e,n,i,i+n.length,a,a,1,n.length)}getLineNumber(e,r){return e.substring(0,r).split(/\r\n|\r|\n/).length}indentMatcher(e,r,n,i){if(!this.isStartOfLine(e,r))return null;let{currIndentLevel:a,prevIndentLevel:s,match:l}=this.matchWhitespace(e,r,n,i);return a<=s?null:(this.indentationStack.push(a),l)}dedentMatcher(e,r,n,i){var a,s,l,u;if(!this.isStartOfLine(e,r))return null;let{currIndentLevel:h,prevIndentLevel:f,match:d}=this.matchWhitespace(e,r,n,i);if(h>=f)return null;let p=this.indentationStack.lastIndexOf(h);if(p===-1)return this.diagnostics.push({severity:"error",message:`Invalid dedent level ${h} at offset: ${r}. Current indentation stack: ${this.indentationStack}`,offset:r,length:(s=(a=d?.[0])===null||a===void 0?void 0:a.length)!==null&&s!==void 0?s:0,line:this.getLineNumber(e,r),column:1}),null;let m=this.indentationStack.length-p-1,g=(u=(l=e.substring(0,r).match(/[\r\n]+$/))===null||l===void 0?void 0:l[0].length)!==null&&u!==void 0?u:1;for(let y=0;y<m;y++){let v=this.createIndentationTokenInstance(this.dedentTokenType,e,"",r-(g-1));n.push(v),this.indentationStack.pop()}return null}buildTerminalToken(e){let r=super.buildTerminalToken(e),{indentTokenName:n,dedentTokenName:i,whitespaceTokenName:a}=this.options;return r.name===n?this.indentTokenType:r.name===i?this.dedentTokenType:r.name===a?of({name:a,pattern:this.whitespaceRegExp,group:Xn.SKIPPED}):r}flushRemainingDedents(e){let r=[];for(;this.indentationStack.length>1;)r.push(this.createIndentationTokenInstance(this.dedentTokenType,e,"",e.length)),this.indentationStack.pop();return this.indentationStack=[0],r}},vI=class extends wp{static{o(this,"IndentationAwareLexer")}constructor(e){if(super(e),e.parser.TokenBuilder instanceof $E)this.indentationTokenBuilder=e.parser.TokenBuilder;else throw new Error("IndentationAwareLexer requires an accompanying IndentationAwareTokenBuilder")}tokenize(e,r=ME){let n=super.tokenize(e),i=n.report;r?.mode==="full"&&n.tokens.push(...i.remainingDedents),i.remainingDedents=[];let{indentTokenType:a,dedentTokenType:s}=this.indentationTokenBuilder,l=a.tokenTypeIdx,u=s.tokenTypeIdx,h=[],f=n.tokens.length-1;for(let d=0;d<f;d++){let p=n.tokens[d],m=n.tokens[d+1];if(p.tokenTypeIdx===l&&m.tokenTypeIdx===u){d++;continue}h.push(p)}return f>=0&&h.push(n.tokens[f]),n.tokens=h,n}}});var hce=N(()=>{"use strict"});var fce=N(()=>{"use strict";hI();wM();gE();uce();kM();Lx();OE();bE();hce();wE();EM()});var dce=N(()=>{"use strict";BM();FM();$M();GM();zM();VM()});var pce=N(()=>{"use strict";dI();LE()});var zE,ps,xI=N(()=>{"use strict";zE=class{static{o(this,"EmptyFileSystemProvider")}readFile(){throw new Error("No file system is available.")}async readDirectory(){return[]}},ps={fileSystemProvider:o(()=>new zE,"fileSystemProvider")}});function IFe(){let t=ui(ds(ps),MFe),e=ui(fs({shared:t}),NFe);return t.ServiceRegistry.register(e),e}function Hu(t){var e;let r=IFe(),n=r.serializer.JsonSerializer.deserialize(t);return r.shared.workspace.LangiumDocumentFactory.fromModel(n,us.parse(`memory://${(e=n.name)!==null&&e!==void 0?e:"grammar"}.langium`)),n}var NFe,MFe,mce=N(()=>{"use strict";pI();gI();Rc();xI();Fc();NFe={Grammar:o(()=>{},"Grammar"),LanguageMetaData:o(()=>({caseInsensitive:!1,fileExtensions:[".langium"],languageId:"langium"}),"LanguageMetaData")},MFe={AstReflection:o(()=>new Cg,"AstReflection")};o(IFe,"createMinimalGrammarServices");o(Hu,"loadGrammarFromJson")});var Gr={};hr(Gr,{AstUtils:()=>xk,BiMap:()=>vp,Cancellation:()=>yr,ContextCache:()=>xp,CstUtils:()=>ck,DONE_RESULT:()=>Ia,Deferred:()=>cs,Disposable:()=>ff,DisposableCache:()=>p1,DocumentCache:()=>_E,EMPTY_STREAM:()=>I2,ErrorWithLocation:()=>Zd,GrammarUtils:()=>Ek,MultiMap:()=>Bl,OperationCancelled:()=>Pc,Reduction:()=>zm,RegExpUtils:()=>Tk,SimpleCache:()=>$x,StreamImpl:()=>ao,TreeStreamImpl:()=>_c,URI:()=>us,UriUtils:()=>hs,WorkspaceCache:()=>m1,assertUnreachable:()=>Lc,delayNextTick:()=>MM,interruptAndCheck:()=>xi,isOperationCancelled:()=>Bc,loadGrammarFromJson:()=>Hu,setInterruptionPeriod:()=>$le,startCancelableOperation:()=>CE,stream:()=>en});var gce=N(()=>{"use strict";DE();NE();Sr(Gr,Kn);f1();jM();uk();mce();Yo();Ps();Fc();is();qo();Nl();Ol();Lg()});var yce=N(()=>{"use strict";WM();Hx()});var vce=N(()=>{"use strict";qM();YM();XM();KM();h1();xI();QM();fI();ZM()});var xa={};hr(xa,{AbstractAstReflection:()=>Xd,AbstractCstNode:()=>Cx,AbstractLangiumParser:()=>Ax,AbstractParserErrorMessageProvider:()=>vE,AbstractThreadedAsyncParser:()=>cI,AstUtils:()=>xk,BiMap:()=>vp,Cancellation:()=>yr,CompositeCstNodeImpl:()=>mp,ContextCache:()=>xp,CstNodeBuilder:()=>Sx,CstUtils:()=>ck,DEFAULT_TOKENIZE_OPTIONS:()=>ME,DONE_RESULT:()=>Ia,DatatypeSymbol:()=>yE,DefaultAstNodeDescriptionProvider:()=>qx,DefaultAstNodeLocator:()=>Xx,DefaultAsyncParser:()=>ib,DefaultCommentProvider:()=>nb,DefaultConfigurationProvider:()=>jx,DefaultDocumentBuilder:()=>Kx,DefaultDocumentValidator:()=>Wx,DefaultHydrator:()=>sb,DefaultIndexManager:()=>Qx,DefaultJsonSerializer:()=>Gx,DefaultLangiumDocumentFactory:()=>Nx,DefaultLangiumDocuments:()=>Mx,DefaultLexer:()=>wp,DefaultLexerErrorMessageProvider:()=>Jx,DefaultLinker:()=>Ix,DefaultNameProvider:()=>Ox,DefaultReferenceDescriptionProvider:()=>Yx,DefaultReferences:()=>Px,DefaultScopeComputation:()=>Bx,DefaultScopeProvider:()=>zx,DefaultServiceRegistry:()=>Vx,DefaultTokenBuilder:()=>Uu,DefaultValueConverter:()=>yp,DefaultWorkspaceLock:()=>ab,DefaultWorkspaceManager:()=>Zx,Deferred:()=>cs,Disposable:()=>ff,DisposableCache:()=>p1,DocumentCache:()=>_E,DocumentState:()=>kn,DocumentValidator:()=>jo,EMPTY_SCOPE:()=>xFe,EMPTY_STREAM:()=>I2,EmptyFileSystem:()=>ps,EmptyFileSystemProvider:()=>zE,ErrorWithLocation:()=>Zd,GrammarAST:()=>U2,GrammarUtils:()=>Ek,IndentationAwareLexer:()=>vI,IndentationAwareTokenBuilder:()=>$E,JSDocDocumentationProvider:()=>rb,LangiumCompletionParser:()=>Dx,LangiumParser:()=>_x,LangiumParserErrorMessageProvider:()=>s1,LeafCstNodeImpl:()=>pp,LexingMode:()=>Tp,MapScope:()=>Fx,Module:()=>mI,MultiMap:()=>Bl,OperationCancelled:()=>Pc,ParserWorker:()=>uI,Reduction:()=>zm,RegExpUtils:()=>Tk,RootCstNodeImpl:()=>a1,SimpleCache:()=>$x,StreamImpl:()=>ao,StreamScope:()=>d1,TextDocument:()=>c1,TreeStreamImpl:()=>_c,URI:()=>us,UriUtils:()=>hs,ValidationCategory:()=>g1,ValidationRegistry:()=>Ux,ValueConverter:()=>Oc,WorkspaceCache:()=>m1,assertUnreachable:()=>Lc,createCompletionParser:()=>bM,createDefaultCoreModule:()=>fs,createDefaultSharedCoreModule:()=>ds,createGrammarConfig:()=>pN,createLangiumParser:()=>TM,createParser:()=>Rx,delayNextTick:()=>MM,diagnosticData:()=>bp,eagerLoad:()=>ice,getDiagnosticRange:()=>Yle,indentationBuilderDefaultOptions:()=>yI,inject:()=>ui,interruptAndCheck:()=>xi,isAstNode:()=>ii,isAstNodeDescription:()=>kR,isAstNodeWithComment:()=>UM,isCompositeCstNode:()=>Ll,isIMultiModeLexerDefinition:()=>eI,isJSDoc:()=>iI,isLeafCstNode:()=>af,isLinkingError:()=>jd,isNamed:()=>Wle,isOperationCancelled:()=>Bc,isReference:()=>va,isRootCstNode:()=>M2,isTokenTypeArray:()=>IE,isTokenTypeDictionary:()=>JM,loadGrammarFromJson:()=>Hu,parseJSDoc:()=>nI,prepareLangiumParser:()=>Nle,setInterruptionPeriod:()=>$le,startCancelableOperation:()=>CE,stream:()=>en,toDiagnosticData:()=>Xle,toDiagnosticSeverity:()=>RE});var Xo=N(()=>{"use strict";pI();gI();HM();sce();Rl();oce();cce();fce();dce();pce();gce();Sr(xa,Gr);yce();vce();Rc()});function Sce(t){return Fl.isInstance(t,ob)}function Cce(t){return Fl.isInstance(t,y1)}function Ace(t){return Fl.isInstance(t,v1)}function _ce(t){return Fl.isInstance(t,WE)}function Dce(t){return Fl.isInstance(t,x1)}function Lce(t){return Fl.isInstance(t,lb)}function Rce(t){return Fl.isInstance(t,b1)}function Nce(t){return Fl.isInstance(t,cb)}function Mce(t){return Fl.isInstance(t,ub)}function Ice(t){return Fl.isInstance(t,hb)}function Oce(t){return Fl.isInstance(t,fb)}var OFe,Lt,AI,ob,GE,y1,VE,UE,v1,WE,bI,wI,TI,x1,kI,lb,EI,b1,SI,cb,ub,hb,fb,qE,CI,HE,Pce,Fl,xce,PFe,bce,BFe,wce,FFe,Tce,$Fe,kce,zFe,Ece,GFe,VFe,UFe,HFe,WFe,qFe,YFe,co,_I,DI,LI,RI,NI,MI,XFe,jFe,KFe,QFe,w1,Wu,$s,ZFe,zs=N(()=>{"use strict";Xo();Xo();Xo();Xo();OFe=Object.defineProperty,Lt=o((t,e)=>OFe(t,"name",{value:e,configurable:!0}),"__name"),AI="Statement",ob="Architecture";o(Sce,"isArchitecture");Lt(Sce,"isArchitecture");GE="Axis",y1="Branch";o(Cce,"isBranch");Lt(Cce,"isBranch");VE="Checkout",UE="CherryPicking",v1="Commit";o(Ace,"isCommit");Lt(Ace,"isCommit");WE="Common";o(_ce,"isCommon");Lt(_ce,"isCommon");bI="Curve",wI="Edge",TI="Entry",x1="GitGraph";o(Dce,"isGitGraph");Lt(Dce,"isGitGraph");kI="Group",lb="Info";o(Lce,"isInfo");Lt(Lce,"isInfo");EI="Junction",b1="Merge";o(Rce,"isMerge");Lt(Rce,"isMerge");SI="Option",cb="Packet";o(Nce,"isPacket");Lt(Nce,"isPacket");ub="PacketBlock";o(Mce,"isPacketBlock");Lt(Mce,"isPacketBlock");hb="Pie";o(Ice,"isPie");Lt(Ice,"isPie");fb="PieSection";o(Oce,"isPieSection");Lt(Oce,"isPieSection");qE="Radar",CI="Service",HE="Direction",Pce=class extends Xd{static{o(this,"MermaidAstReflection")}static{Lt(this,"MermaidAstReflection")}getAllTypes(){return[ob,GE,y1,VE,UE,v1,WE,bI,HE,wI,TI,x1,kI,lb,EI,b1,SI,cb,ub,hb,fb,qE,CI,AI]}computeIsSubtype(t,e){switch(t){case y1:case VE:case UE:case v1:case b1:return this.isSubtype(AI,e);case HE:return this.isSubtype(x1,e);default:return!1}}getReferenceType(t){let e=`${t.container.$type}:${t.property}`;switch(e){case"Entry:axis":return GE;default:throw new Error(`${e} is not a valid reference id.`)}}getTypeMetaData(t){switch(t){case ob:return{name:ob,properties:[{name:"accDescr"},{name:"accTitle"},{name:"edges",defaultValue:[]},{name:"groups",defaultValue:[]},{name:"junctions",defaultValue:[]},{name:"services",defaultValue:[]},{name:"title"}]};case GE:return{name:GE,properties:[{name:"label"},{name:"name"}]};case y1:return{name:y1,properties:[{name:"name"},{name:"order"}]};case VE:return{name:VE,properties:[{name:"branch"}]};case UE:return{name:UE,properties:[{name:"id"},{name:"parent"},{name:"tags",defaultValue:[]}]};case v1:return{name:v1,properties:[{name:"id"},{name:"message"},{name:"tags",defaultValue:[]},{name:"type"}]};case WE:return{name:WE,properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case bI:return{name:bI,properties:[{name:"entries",defaultValue:[]},{name:"label"},{name:"name"}]};case wI:return{name:wI,properties:[{name:"lhsDir"},{name:"lhsGroup",defaultValue:!1},{name:"lhsId"},{name:"lhsInto",defaultValue:!1},{name:"rhsDir"},{name:"rhsGroup",defaultValue:!1},{name:"rhsId"},{name:"rhsInto",defaultValue:!1},{name:"title"}]};case TI:return{name:TI,properties:[{name:"axis"},{name:"value"}]};case x1:return{name:x1,properties:[{name:"accDescr"},{name:"accTitle"},{name:"statements",defaultValue:[]},{name:"title"}]};case kI:return{name:kI,properties:[{name:"icon"},{name:"id"},{name:"in"},{name:"title"}]};case lb:return{name:lb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case EI:return{name:EI,properties:[{name:"id"},{name:"in"}]};case b1:return{name:b1,properties:[{name:"branch"},{name:"id"},{name:"tags",defaultValue:[]},{name:"type"}]};case SI:return{name:SI,properties:[{name:"name"},{name:"value",defaultValue:!1}]};case cb:return{name:cb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"blocks",defaultValue:[]},{name:"title"}]};case ub:return{name:ub,properties:[{name:"end"},{name:"label"},{name:"start"}]};case hb:return{name:hb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"sections",defaultValue:[]},{name:"showData",defaultValue:!1},{name:"title"}]};case fb:return{name:fb,properties:[{name:"label"},{name:"value"}]};case qE:return{name:qE,properties:[{name:"accDescr"},{name:"accTitle"},{name:"axes",defaultValue:[]},{name:"curves",defaultValue:[]},{name:"options",defaultValue:[]},{name:"title"}]};case CI:return{name:CI,properties:[{name:"icon"},{name:"iconText"},{name:"id"},{name:"in"},{name:"title"}]};case HE:return{name:HE,properties:[{name:"accDescr"},{name:"accTitle"},{name:"dir"},{name:"statements",defaultValue:[]},{name:"title"}]};default:return{name:t,properties:[]}}}},Fl=new Pce,PFe=Lt(()=>xce??(xce=Hu('{"$type":"Grammar","isDeclared":true,"name":"Info","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Info","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"InfoGrammar"),BFe=Lt(()=>bce??(bce=Hu(`{"$type":"Grammar","isDeclared":true,"name":"Packet","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Packet","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"packet-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"?"},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}`)),"PacketGrammar"),FFe=Lt(()=>wce??(wce=Hu('{"$type":"Grammar","isDeclared":true,"name":"Pie","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Pie","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"PIE_SECTION_LABEL","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]+\\"/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"PIE_SECTION_VALUE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/(0|[1-9][0-9]*)(\\\\.[0-9]+)?/"},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"PieGrammar"),$Fe=Lt(()=>Tce??(Tce=Hu('{"$type":"Grammar","isDeclared":true,"name":"Architecture","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Architecture","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"groups","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"services","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"junctions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"edges","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"LeftPort","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"RightPort","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Arrow","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"--"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ID","definition":{"$type":"RegexToken","regex":"/[\\\\w]+/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TEXT_ICON","definition":{"$type":"RegexToken","regex":"/\\\\(\\"[^\\"]+\\"\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[[\\\\w ]+\\\\]/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/"},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"ArchitectureGrammar"),zFe=Lt(()=>kce??(kce=Hu(`{"$type":"Grammar","isDeclared":true,"name":"GitGraph","interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"rules":[{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"ParserRule","entry":true,"name":"GitGraph","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Keyword","value":":"}]},{"$type":"Keyword","value":"gitGraph:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Direction","definition":{"$type":"Assignment","feature":"dir","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"LR"},{"$type":"Keyword","value":"TB"},{"$type":"Keyword","value":"BT"}]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Commit","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"commit"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Branch","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"branch"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Merge","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"merge"},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Checkout","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"checkout"},{"$type":"Keyword","value":"switch"}]},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CherryPicking","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"cherry-pick"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+(?=\\\\s)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"types":[],"usedGrammars":[]}`)),"GitGraphGrammar"),GFe=Lt(()=>Ece??(Ece=Hu(`{"$type":"Grammar","isDeclared":true,"name":"Radar","interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]},{"$type":"Interface","name":"Entry","attributes":[{"$type":"TypeAttribute","name":"axis","isOptional":true,"type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@12"}}}},{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}],"superTypes":[]}],"rules":[{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"ParserRule","entry":true,"name":"Radar","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":"radar-beta:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Keyword","value":"axis"},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"curve"},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Label","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Axis","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Curve","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[],"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Entries","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DetailedEntry","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"axis","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@12"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"NumberEntry","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Option","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"showLegend"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"ticks"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"max"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"min"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"graticule"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/(0|[1-9][0-9]*)(\\\\.[0-9]+)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"GRATICULE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"circle"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"polygon"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[a-zA-Z_][a-zA-Z0-9\\\\-_]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"types":[],"usedGrammars":[]}`)),"RadarGrammar"),VFe={languageId:"info",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},UFe={languageId:"packet",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},HFe={languageId:"pie",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},WFe={languageId:"architecture",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},qFe={languageId:"gitGraph",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},YFe={languageId:"radar",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},co={AstReflection:Lt(()=>new Pce,"AstReflection")},_I={Grammar:Lt(()=>PFe(),"Grammar"),LanguageMetaData:Lt(()=>VFe,"LanguageMetaData"),parser:{}},DI={Grammar:Lt(()=>BFe(),"Grammar"),LanguageMetaData:Lt(()=>UFe,"LanguageMetaData"),parser:{}},LI={Grammar:Lt(()=>FFe(),"Grammar"),LanguageMetaData:Lt(()=>HFe,"LanguageMetaData"),parser:{}},RI={Grammar:Lt(()=>$Fe(),"Grammar"),LanguageMetaData:Lt(()=>WFe,"LanguageMetaData"),parser:{}},NI={Grammar:Lt(()=>zFe(),"Grammar"),LanguageMetaData:Lt(()=>qFe,"LanguageMetaData"),parser:{}},MI={Grammar:Lt(()=>GFe(),"Grammar"),LanguageMetaData:Lt(()=>YFe,"LanguageMetaData"),parser:{}},XFe=/accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/,jFe=/accTitle[\t ]*:([^\n\r]*)/,KFe=/title([\t ][^\n\r]*|)/,QFe={ACC_DESCR:XFe,ACC_TITLE:jFe,TITLE:KFe},w1=class extends yp{static{o(this,"AbstractMermaidValueConverter")}static{Lt(this,"AbstractMermaidValueConverter")}runConverter(t,e,r){let n=this.runCommonConverter(t,e,r);return n===void 0&&(n=this.runCustomConverter(t,e,r)),n===void 0?super.runConverter(t,e,r):n}runCommonConverter(t,e,r){let n=QFe[t.name];if(n===void 0)return;let i=n.exec(e);if(i!==null){if(i[1]!==void 0)return i[1].trim().replace(/[\t ]{2,}/gm," ");if(i[2]!==void 0)return i[2].replace(/^\s*/gm,"").replace(/\s+$/gm,"").replace(/[\t ]{2,}/gm," ").replace(/[\n\r]{2,}/gm,`
816 +`)}}},Wu=class extends w1{static{o(this,"CommonValueConverter")}static{Lt(this,"CommonValueConverter")}runCustomConverter(t,e,r){}},$s=class extends Uu{static{o(this,"AbstractMermaidTokenBuilder")}static{Lt(this,"AbstractMermaidTokenBuilder")}constructor(t){super(),this.keywords=new Set(t)}buildKeywordTokens(t,e,r){let n=super.buildKeywordTokens(t,e,r);return n.forEach(i=>{this.keywords.has(i.name)&&i.PATTERN!==void 0&&(i.PATTERN=new RegExp(i.PATTERN.toString()+"(?:(?=%%)|(?!\\S))"))}),n}},ZFe=class extends $s{static{o(this,"CommonTokenBuilder")}static{Lt(this,"CommonTokenBuilder")}}});function XE(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),NI,YE);return e.ServiceRegistry.register(r),{shared:e,GitGraph:r}}var JFe,YE,II=N(()=>{"use strict";zs();Xo();JFe=class extends $s{static{o(this,"GitGraphTokenBuilder")}static{Lt(this,"GitGraphTokenBuilder")}constructor(){super(["gitGraph"])}},YE={parser:{TokenBuilder:Lt(()=>new JFe,"TokenBuilder"),ValueConverter:Lt(()=>new Wu,"ValueConverter")}};o(XE,"createGitGraphServices");Lt(XE,"createGitGraphServices")});function KE(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),_I,jE);return e.ServiceRegistry.register(r),{shared:e,Info:r}}var e$e,jE,OI=N(()=>{"use strict";zs();Xo();e$e=class extends $s{static{o(this,"InfoTokenBuilder")}static{Lt(this,"InfoTokenBuilder")}constructor(){super(["info","showInfo"])}},jE={parser:{TokenBuilder:Lt(()=>new e$e,"TokenBuilder"),ValueConverter:Lt(()=>new Wu,"ValueConverter")}};o(KE,"createInfoServices");Lt(KE,"createInfoServices")});function ZE(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),DI,QE);return e.ServiceRegistry.register(r),{shared:e,Packet:r}}var t$e,QE,PI=N(()=>{"use strict";zs();Xo();t$e=class extends $s{static{o(this,"PacketTokenBuilder")}static{Lt(this,"PacketTokenBuilder")}constructor(){super(["packet-beta"])}},QE={parser:{TokenBuilder:Lt(()=>new t$e,"TokenBuilder"),ValueConverter:Lt(()=>new Wu,"ValueConverter")}};o(ZE,"createPacketServices");Lt(ZE,"createPacketServices")});function e6(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),LI,JE);return e.ServiceRegistry.register(r),{shared:e,Pie:r}}var r$e,n$e,JE,BI=N(()=>{"use strict";zs();Xo();r$e=class extends $s{static{o(this,"PieTokenBuilder")}static{Lt(this,"PieTokenBuilder")}constructor(){super(["pie","showData"])}},n$e=class extends w1{static{o(this,"PieValueConverter")}static{Lt(this,"PieValueConverter")}runCustomConverter(t,e,r){if(t.name==="PIE_SECTION_LABEL")return e.replace(/"/g,"").trim()}},JE={parser:{TokenBuilder:Lt(()=>new r$e,"TokenBuilder"),ValueConverter:Lt(()=>new n$e,"ValueConverter")}};o(e6,"createPieServices");Lt(e6,"createPieServices")});function r6(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),RI,t6);return e.ServiceRegistry.register(r),{shared:e,Architecture:r}}var i$e,a$e,t6,FI=N(()=>{"use strict";zs();Xo();i$e=class extends $s{static{o(this,"ArchitectureTokenBuilder")}static{Lt(this,"ArchitectureTokenBuilder")}constructor(){super(["architecture"])}},a$e=class extends w1{static{o(this,"ArchitectureValueConverter")}static{Lt(this,"ArchitectureValueConverter")}runCustomConverter(t,e,r){if(t.name==="ARCH_ICON")return e.replace(/[()]/g,"").trim();if(t.name==="ARCH_TEXT_ICON")return e.replace(/["()]/g,"");if(t.name==="ARCH_TITLE")return e.replace(/[[\]]/g,"").trim()}},t6={parser:{TokenBuilder:Lt(()=>new i$e,"TokenBuilder"),ValueConverter:Lt(()=>new a$e,"ValueConverter")}};o(r6,"createArchitectureServices");Lt(r6,"createArchitectureServices")});function i6(t=ps){let e=ui(ds(t),co),r=ui(fs({shared:e}),MI,n6);return e.ServiceRegistry.register(r),{shared:e,Radar:r}}var s$e,n6,$I=N(()=>{"use strict";zs();Xo();s$e=class extends $s{static{o(this,"RadarTokenBuilder")}static{Lt(this,"RadarTokenBuilder")}constructor(){super(["radar-beta"])}},n6={parser:{TokenBuilder:Lt(()=>new s$e,"TokenBuilder"),ValueConverter:Lt(()=>new Wu,"ValueConverter")}};o(i6,"createRadarServices");Lt(i6,"createRadarServices")});var Bce={};hr(Bce,{InfoModule:()=>jE,createInfoServices:()=>KE});var Fce=N(()=>{"use strict";OI();zs()});var $ce={};hr($ce,{PacketModule:()=>QE,createPacketServices:()=>ZE});var zce=N(()=>{"use strict";PI();zs()});var Gce={};hr(Gce,{PieModule:()=>JE,createPieServices:()=>e6});var Vce=N(()=>{"use strict";BI();zs()});var Uce={};hr(Uce,{ArchitectureModule:()=>t6,createArchitectureServices:()=>r6});var Hce=N(()=>{"use strict";FI();zs()});var Wce={};hr(Wce,{GitGraphModule:()=>YE,createGitGraphServices:()=>XE});var qce=N(()=>{"use strict";II();zs()});var Yce={};hr(Yce,{RadarModule:()=>n6,createRadarServices:()=>i6});var Xce=N(()=>{"use strict";$I();zs()});async function uo(t,e){let r=o$e[t];if(!r)throw new Error(`Unknown diagram type: ${t}`);df[t]||await r();let i=df[t].parse(e);if(i.lexerErrors.length>0||i.parserErrors.length>0)throw new l$e(i);return i.value}var df,o$e,l$e,kp=N(()=>{"use strict";II();OI();PI();BI();FI();$I();zs();df={},o$e={info:Lt(async()=>{let{createInfoServices:t}=await Promise.resolve().then(()=>(Fce(),Bce)),e=t().Info.parser.LangiumParser;df.info=e},"info"),packet:Lt(async()=>{let{createPacketServices:t}=await Promise.resolve().then(()=>(zce(),$ce)),e=t().Packet.parser.LangiumParser;df.packet=e},"packet"),pie:Lt(async()=>{let{createPieServices:t}=await Promise.resolve().then(()=>(Vce(),Gce)),e=t().Pie.parser.LangiumParser;df.pie=e},"pie"),architecture:Lt(async()=>{let{createArchitectureServices:t}=await Promise.resolve().then(()=>(Hce(),Uce)),e=t().Architecture.parser.LangiumParser;df.architecture=e},"architecture"),gitGraph:Lt(async()=>{let{createGitGraphServices:t}=await Promise.resolve().then(()=>(qce(),Wce)),e=t().GitGraph.parser.LangiumParser;df.gitGraph=e},"gitGraph"),radar:Lt(async()=>{let{createRadarServices:t}=await Promise.resolve().then(()=>(Xce(),Yce)),e=t().Radar.parser.LangiumParser;df.radar=e},"radar")};o(uo,"parse");Lt(uo,"parse");l$e=class extends Error{static{o(this,"MermaidParseError")}constructor(t){let e=t.lexerErrors.map(n=>n.message).join(`
817 +`),r=t.parserErrors.map(n=>n.message).join(`
818 +`);super(`Parsing failed: ${e} ${r}`),this.result=t}static{Lt(this,"MermaidParseError")}}});function $c(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}var T1=N(()=>{"use strict";o($c,"populateCommonDb")});var Kr,a6=N(()=>{"use strict";Kr={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4}});var pf,s6=N(()=>{"use strict";pf=class{constructor(e){this.init=e;this.records=this.init()}static{o(this,"ImperativeState")}reset(){this.records=this.init()}}});function zI(){return j9({length:7})}function u$e(t,e){let r=Object.create(null);return t.reduce((n,i)=>{let a=e(i);return r[a]||(r[a]=!0,n.push(i)),n},[])}function jce(t,e,r){let n=t.indexOf(e);n===-1?t.push(r):t.splice(n,1,r)}function Qce(t){let e=t.reduce((i,a)=>i.seq>a.seq?i:a,t[0]),r="";t.forEach(function(i){i===e?r+=" *":r+=" |"});let n=[r,e.id,e.seq];for(let i in _t.records.branches)_t.records.branches.get(i)===e.id&&n.push(i);if(Y.debug(n.join(" ")),e.parents&&e.parents.length==2&&e.parents[0]&&e.parents[1]){let i=_t.records.commits.get(e.parents[0]);jce(t,e,i),e.parents[1]&&t.push(_t.records.commits.get(e.parents[1]))}else{if(e.parents.length==0)return;if(e.parents[0]){let i=_t.records.commits.get(e.parents[0]);jce(t,e,i)}}t=u$e(t,i=>i.id),Qce(t)}var c$e,Ep,_t,h$e,f$e,d$e,p$e,m$e,g$e,y$e,Kce,v$e,x$e,b$e,w$e,T$e,Zce,k$e,E$e,S$e,o6,GI=N(()=>{"use strict";vt();ir();ji();gr();mi();a6();s6();Ya();c$e=or.gitGraph,Ep=o(()=>Fi({...c$e,...cr().gitGraph}),"getConfig"),_t=new pf(()=>{let t=Ep(),e=t.mainBranchName,r=t.mainBranchOrder;return{mainBranchName:e,commits:new Map,head:null,branchConfig:new Map([[e,{name:e,order:r}]]),branches:new Map([[e,null]]),currBranch:e,direction:"LR",seq:0,options:{}}});o(zI,"getID");o(u$e,"uniqBy");h$e=o(function(t){_t.records.direction=t},"setDirection"),f$e=o(function(t){Y.debug("options str",t),t=t?.trim(),t=t||"{}";try{_t.records.options=JSON.parse(t)}catch(e){Y.error("error while parsing gitGraph options",e.message)}},"setOptions"),d$e=o(function(){return _t.records.options},"getOptions"),p$e=o(function(t){let e=t.msg,r=t.id,n=t.type,i=t.tags;Y.info("commit",e,r,n,i),Y.debug("Entering commit:",e,r,n,i);let a=Ep();r=Ze.sanitizeText(r,a),e=Ze.sanitizeText(e,a),i=i?.map(l=>Ze.sanitizeText(l,a));let s={id:r||_t.records.seq+"-"+zI(),message:e,seq:_t.records.seq++,type:n??Kr.NORMAL,tags:i??[],parents:_t.records.head==null?[]:[_t.records.head.id],branch:_t.records.currBranch};_t.records.head=s,Y.info("main branch",a.mainBranchName),_t.records.commits.set(s.id,s),_t.records.branches.set(_t.records.currBranch,s.id),Y.debug("in pushCommit "+s.id)},"commit"),m$e=o(function(t){let e=t.name,r=t.order;if(e=Ze.sanitizeText(e,Ep()),_t.records.branches.has(e))throw new Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${e}")`);_t.records.branches.set(e,_t.records.head!=null?_t.records.head.id:null),_t.records.branchConfig.set(e,{name:e,order:r}),Kce(e),Y.debug("in createBranch")},"branch"),g$e=o(t=>{let e=t.branch,r=t.id,n=t.type,i=t.tags,a=Ep();e=Ze.sanitizeText(e,a),r&&(r=Ze.sanitizeText(r,a));let s=_t.records.branches.get(_t.records.currBranch),l=_t.records.branches.get(e),u=s?_t.records.commits.get(s):void 0,h=l?_t.records.commits.get(l):void 0;if(u&&h&&u.branch===e)throw new Error(`Cannot merge branch '${e}' into itself.`);if(_t.records.currBranch===e){let p=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(u===void 0||!u){let p=new Error(`Incorrect usage of "merge". Current branch (${_t.records.currBranch})has no commits`);throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["commit"]},p}if(!_t.records.branches.has(e)){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") does not exist");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:[`branch ${e}`]},p}if(h===void 0||!h){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") has no commits");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:['"commit"']},p}if(u===h){let p=new Error('Incorrect usage of "merge". Both branches have same head');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(r&&_t.records.commits.has(r)){let p=new Error('Incorrect usage of "merge". Commit with id:'+r+" already exists, use different custom Id");throw p.hash={text:`merge ${e} ${r} ${n} ${i?.join(" ")}`,token:`merge ${e} ${r} ${n} ${i?.join(" ")}`,expected:[`merge ${e} ${r}_UNIQUE ${n} ${i?.join(" ")}`]},p}let f=l||"",d={id:r||`${_t.records.seq}-${zI()}`,message:`merged branch ${e} into ${_t.records.currBranch}`,seq:_t.records.seq++,parents:_t.records.head==null?[]:[_t.records.head.id,f],branch:_t.records.currBranch,type:Kr.MERGE,customType:n,customId:!!r,tags:i??[]};_t.records.head=d,_t.records.commits.set(d.id,d),_t.records.branches.set(_t.records.currBranch,d.id),Y.debug(_t.records.branches),Y.debug("in mergeBranch")},"merge"),y$e=o(function(t){let e=t.id,r=t.targetId,n=t.tags,i=t.parent;Y.debug("Entering cherryPick:",e,r,n);let a=Ep();if(e=Ze.sanitizeText(e,a),r=Ze.sanitizeText(r,a),n=n?.map(u=>Ze.sanitizeText(u,a)),i=Ze.sanitizeText(i,a),!e||!_t.records.commits.has(e)){let u=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw u.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},u}let s=_t.records.commits.get(e);if(s===void 0||!s)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(i&&!(Array.isArray(s.parents)&&s.parents.includes(i)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");let l=s.branch;if(s.type===Kr.MERGE&&!i)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!r||!_t.records.commits.has(r)){if(l===_t.records.currBranch){let d=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let u=_t.records.branches.get(_t.records.currBranch);if(u===void 0||!u){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${_t.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let h=_t.records.commits.get(u);if(h===void 0||!h){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${_t.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let f={id:_t.records.seq+"-"+zI(),message:`cherry-picked ${s?.message} into ${_t.records.currBranch}`,seq:_t.records.seq++,parents:_t.records.head==null?[]:[_t.records.head.id,s.id],branch:_t.records.currBranch,type:Kr.CHERRY_PICK,tags:n?n.filter(Boolean):[`cherry-pick:${s.id}${s.type===Kr.MERGE?`|parent:${i}`:""}`]};_t.records.head=f,_t.records.commits.set(f.id,f),_t.records.branches.set(_t.records.currBranch,f.id),Y.debug(_t.records.branches),Y.debug("in cherryPick")}},"cherryPick"),Kce=o(function(t){if(t=Ze.sanitizeText(t,Ep()),_t.records.branches.has(t)){_t.records.currBranch=t;let e=_t.records.branches.get(_t.records.currBranch);e===void 0||!e?_t.records.head=null:_t.records.head=_t.records.commits.get(e)??null}else{let e=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${t}")`);throw e.hash={text:`checkout ${t}`,token:`checkout ${t}`,expected:[`branch ${t}`]},e}},"checkout");o(jce,"upsert");o(Qce,"prettyPrintCommitHistory");v$e=o(function(){Y.debug(_t.records.commits);let t=Zce()[0];Qce([t])},"prettyPrint"),x$e=o(function(){_t.reset(),Ar()},"clear"),b$e=o(function(){return[..._t.records.branchConfig.values()].map((e,r)=>e.order!==null&&e.order!==void 0?e:{...e,order:parseFloat(`0.${r}`)}).sort((e,r)=>(e.order??0)-(r.order??0)).map(({name:e})=>({name:e}))},"getBranchesAsObjArray"),w$e=o(function(){return _t.records.branches},"getBranches"),T$e=o(function(){return _t.records.commits},"getCommits"),Zce=o(function(){let t=[..._t.records.commits.values()];return t.forEach(function(e){Y.debug(e.id)}),t.sort((e,r)=>e.seq-r.seq),t},"getCommitsArray"),k$e=o(function(){return _t.records.currBranch},"getCurrentBranch"),E$e=o(function(){return _t.records.direction},"getDirection"),S$e=o(function(){return _t.records.head},"getHead"),o6={commitType:Kr,getConfig:Ep,setDirection:h$e,setOptions:f$e,getOptions:d$e,commit:p$e,branch:m$e,merge:g$e,cherryPick:y$e,checkout:Kce,prettyPrint:v$e,clear:x$e,getBranchesAsObjArray:b$e,getBranches:w$e,getCommits:T$e,getCommitsArray:Zce,getCurrentBranch:k$e,getDirection:E$e,getHead:S$e,setAccTitle:Lr,getAccTitle:Rr,getAccDescription:Mr,setAccDescription:Nr,setDiagramTitle:$r,getDiagramTitle:Ir}});var C$e,A$e,_$e,D$e,L$e,R$e,N$e,Jce,eue=N(()=>{"use strict";kp();vt();T1();GI();a6();C$e=o((t,e)=>{$c(t,e),t.dir&&e.setDirection(t.dir);for(let r of t.statements)A$e(r,e)},"populate"),A$e=o((t,e)=>{let n={Commit:o(i=>e.commit(_$e(i)),"Commit"),Branch:o(i=>e.branch(D$e(i)),"Branch"),Merge:o(i=>e.merge(L$e(i)),"Merge"),Checkout:o(i=>e.checkout(R$e(i)),"Checkout"),CherryPicking:o(i=>e.cherryPick(N$e(i)),"CherryPicking")}[t.$type];n?n(t):Y.error(`Unknown statement type: ${t.$type}`)},"parseStatement"),_$e=o(t=>({id:t.id,msg:t.message??"",type:t.type!==void 0?Kr[t.type]:Kr.NORMAL,tags:t.tags??void 0}),"parseCommit"),D$e=o(t=>({name:t.name,order:t.order??0}),"parseBranch"),L$e=o(t=>({branch:t.branch,id:t.id??"",type:t.type!==void 0?Kr[t.type]:void 0,tags:t.tags??void 0}),"parseMerge"),R$e=o(t=>t.branch,"parseCheckout"),N$e=o(t=>({id:t.id,targetId:"",tags:t.tags?.length===0?void 0:t.tags,parent:t.parent}),"parseCherryPicking"),Jce={parse:o(async t=>{let e=await uo("gitGraph",t);Y.debug(e),C$e(e,o6)},"parse")}});var M$e,Ko,gf,yf,zc,qu,Sp,Gs,Vs,l6,db,c6,mf,Br,I$e,rue,nue,O$e,P$e,B$e,F$e,$$e,z$e,G$e,V$e,U$e,H$e,W$e,q$e,tue,Y$e,pb,X$e,j$e,K$e,Q$e,Z$e,iue,aue=N(()=>{"use strict";dr();zt();vt();ir();a6();M$e=me(),Ko=M$e?.gitGraph,gf=10,yf=40,zc=4,qu=2,Sp=8,Gs=new Map,Vs=new Map,l6=30,db=new Map,c6=[],mf=0,Br="LR",I$e=o(()=>{Gs.clear(),Vs.clear(),db.clear(),mf=0,c6=[],Br="LR"},"clear"),rue=o(t=>{let e=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof t=="string"?t.split(/\\n|\n|<br\s*\/?>/gi):t).forEach(n=>{let i=document.createElementNS("http://www.w3.org/2000/svg","tspan");i.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),i.setAttribute("dy","1em"),i.setAttribute("x","0"),i.setAttribute("class","row"),i.textContent=n.trim(),e.appendChild(i)}),e},"drawText"),nue=o(t=>{let e,r,n;return Br==="BT"?(r=o((i,a)=>i<=a,"comparisonFunc"),n=1/0):(r=o((i,a)=>i>=a,"comparisonFunc"),n=0),t.forEach(i=>{let a=Br==="TB"||Br=="BT"?Vs.get(i)?.y:Vs.get(i)?.x;a!==void 0&&r(a,n)&&(e=i,n=a)}),e},"findClosestParent"),O$e=o(t=>{let e="",r=1/0;return t.forEach(n=>{let i=Vs.get(n).y;i<=r&&(e=n,r=i)}),e||void 0},"findClosestParentBT"),P$e=o((t,e,r)=>{let n=r,i=r,a=[];t.forEach(s=>{let l=e.get(s);if(!l)throw new Error(`Commit not found for key ${s}`);l.parents.length?(n=F$e(l),i=Math.max(n,i)):a.push(l),$$e(l,n)}),n=i,a.forEach(s=>{z$e(s,n,r)}),t.forEach(s=>{let l=e.get(s);if(l?.parents.length){let u=O$e(l.parents);n=Vs.get(u).y-yf,n<=i&&(i=n);let h=Gs.get(l.branch).pos,f=n-gf;Vs.set(l.id,{x:h,y:f})}})},"setParallelBTPos"),B$e=o(t=>{let e=nue(t.parents.filter(n=>n!==null));if(!e)throw new Error(`Closest parent not found for commit ${t.id}`);let r=Vs.get(e)?.y;if(r===void 0)throw new Error(`Closest parent position not found for commit ${t.id}`);return r},"findClosestParentPos"),F$e=o(t=>B$e(t)+yf,"calculateCommitPosition"),$$e=o((t,e)=>{let r=Gs.get(t.branch);if(!r)throw new Error(`Branch not found for commit ${t.id}`);let n=r.pos,i=e+gf;return Vs.set(t.id,{x:n,y:i}),{x:n,y:i}},"setCommitPosition"),z$e=o((t,e,r)=>{let n=Gs.get(t.branch);if(!n)throw new Error(`Branch not found for commit ${t.id}`);let i=e+r,a=n.pos;Vs.set(t.id,{x:a,y:i})},"setRootPosition"),G$e=o((t,e,r,n,i,a)=>{if(a===Kr.HIGHLIGHT)t.append("rect").attr("x",r.x-10).attr("y",r.y-10).attr("width",20).attr("height",20).attr("class",`commit ${e.id} commit-highlight${i%Sp} ${n}-outer`),t.append("rect").attr("x",r.x-6).attr("y",r.y-6).attr("width",12).attr("height",12).attr("class",`commit ${e.id} commit${i%Sp} ${n}-inner`);else if(a===Kr.CHERRY_PICK)t.append("circle").attr("cx",r.x).attr("cy",r.y).attr("r",10).attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x-3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x+3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x+3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x-3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`);else{let s=t.append("circle");if(s.attr("cx",r.x),s.attr("cy",r.y),s.attr("r",e.type===Kr.MERGE?9:10),s.attr("class",`commit ${e.id} commit${i%Sp}`),a===Kr.MERGE){let l=t.append("circle");l.attr("cx",r.x),l.attr("cy",r.y),l.attr("r",6),l.attr("class",`commit ${n} ${e.id} commit${i%Sp}`)}a===Kr.REVERSE&&t.append("path").attr("d",`M ${r.x-5},${r.y-5}L${r.x+5},${r.y+5}M${r.x-5},${r.y+5}L${r.x+5},${r.y-5}`).attr("class",`commit ${n} ${e.id} commit${i%Sp}`)}},"drawCommitBullet"),V$e=o((t,e,r,n)=>{if(e.type!==Kr.CHERRY_PICK&&(e.customId&&e.type===Kr.MERGE||e.type!==Kr.MERGE)&&Ko?.showCommitLabel){let i=t.append("g"),a=i.insert("rect").attr("class","commit-label-bkg"),s=i.append("text").attr("x",n).attr("y",r.y+25).attr("class","commit-label").text(e.id),l=s.node()?.getBBox();if(l&&(a.attr("x",r.posWithOffset-l.width/2-qu).attr("y",r.y+13.5).attr("width",l.width+2*qu).attr("height",l.height+2*qu),Br==="TB"||Br==="BT"?(a.attr("x",r.x-(l.width+4*zc+5)).attr("y",r.y-12),s.attr("x",r.x-(l.width+4*zc)).attr("y",r.y+l.height-12)):s.attr("x",r.posWithOffset-l.width/2),Ko.rotateCommitLabel))if(Br==="TB"||Br==="BT")s.attr("transform","rotate(-45, "+r.x+", "+r.y+")"),a.attr("transform","rotate(-45, "+r.x+", "+r.y+")");else{let u=-7.5-(l.width+10)/25*9.5,h=10+l.width/25*8.5;i.attr("transform","translate("+u+", "+h+") rotate(-45, "+n+", "+r.y+")")}}},"drawCommitLabel"),U$e=o((t,e,r,n)=>{if(e.tags.length>0){let i=0,a=0,s=0,l=[];for(let u of e.tags.reverse()){let h=t.insert("polygon"),f=t.append("circle"),d=t.append("text").attr("y",r.y-16-i).attr("class","tag-label").text(u),p=d.node()?.getBBox();if(!p)throw new Error("Tag bbox not found");a=Math.max(a,p.width),s=Math.max(s,p.height),d.attr("x",r.posWithOffset-p.width/2),l.push({tag:d,hole:f,rect:h,yOffset:i}),i+=20}for(let{tag:u,hole:h,rect:f,yOffset:d}of l){let p=s/2,m=r.y-19.2-d;if(f.attr("class","tag-label-bkg").attr("points",`
819 + ${n-a/2-zc/2},${m+qu}
820 + ${n-a/2-zc/2},${m-qu}
821 + ${r.posWithOffset-a/2-zc},${m-p-qu}
822 + ${r.posWithOffset+a/2+zc},${m-p-qu}
823 + ${r.posWithOffset+a/2+zc},${m+p+qu}
824 + ${r.posWithOffset-a/2-zc},${m+p+qu}`),h.attr("cy",m).attr("cx",n-a/2+zc/2).attr("r",1.5).attr("class","tag-hole"),Br==="TB"||Br==="BT"){let g=n+d;f.attr("class","tag-label-bkg").attr("points",`
825 + ${r.x},${g+2}
826 + ${r.x},${g-2}
827 + ${r.x+gf},${g-p-2}
828 + ${r.x+gf+a+4},${g-p-2}
829 + ${r.x+gf+a+4},${g+p+2}
830 + ${r.x+gf},${g+p+2}`).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),h.attr("cx",r.x+zc/2).attr("cy",g).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),u.attr("x",r.x+5).attr("y",g+3).attr("transform","translate(14,14) rotate(45, "+r.x+","+n+")")}}}},"drawCommitTags"),H$e=o(t=>{switch(t.customType??t.type){case Kr.NORMAL:return"commit-normal";case Kr.REVERSE:return"commit-reverse";case Kr.HIGHLIGHT:return"commit-highlight";case Kr.MERGE:return"commit-merge";case Kr.CHERRY_PICK:return"commit-cherry-pick";default:return"commit-normal"}},"getCommitClassType"),W$e=o((t,e,r,n)=>{let i={x:0,y:0};if(t.parents.length>0){let a=nue(t.parents);if(a){let s=n.get(a)??i;return e==="TB"?s.y+yf:e==="BT"?(n.get(t.id)??i).y-yf:s.x+yf}}else return e==="TB"?l6:e==="BT"?(n.get(t.id)??i).y-yf:0;return 0},"calculatePosition"),q$e=o((t,e,r)=>{let n=Br==="BT"&&r?e:e+gf,i=Br==="TB"||Br==="BT"?n:Gs.get(t.branch)?.pos,a=Br==="TB"||Br==="BT"?Gs.get(t.branch)?.pos:n;if(a===void 0||i===void 0)throw new Error(`Position were undefined for commit ${t.id}`);return{x:a,y:i,posWithOffset:n}},"getCommitPosition"),tue=o((t,e,r)=>{if(!Ko)throw new Error("GitGraph config not found");let n=t.append("g").attr("class","commit-bullets"),i=t.append("g").attr("class","commit-labels"),a=Br==="TB"||Br==="BT"?l6:0,s=[...e.keys()],l=Ko?.parallelCommits??!1,u=o((f,d)=>{let p=e.get(f)?.seq,m=e.get(d)?.seq;return p!==void 0&&m!==void 0?p-m:0},"sortKeys"),h=s.sort(u);Br==="BT"&&(l&&P$e(h,e,a),h=h.reverse()),h.forEach(f=>{let d=e.get(f);if(!d)throw new Error(`Commit not found for key ${f}`);l&&(a=W$e(d,Br,a,Vs));let p=q$e(d,a,l);if(r){let m=H$e(d),g=d.customType??d.type,y=Gs.get(d.branch)?.index??0;G$e(n,d,p,m,y,g),V$e(i,d,p,a),U$e(i,d,p,a)}Br==="TB"||Br==="BT"?Vs.set(d.id,{x:p.x,y:p.posWithOffset}):Vs.set(d.id,{x:p.posWithOffset,y:p.y}),a=Br==="BT"&&l?a+yf:a+yf+gf,a>mf&&(mf=a)})},"drawCommits"),Y$e=o((t,e,r,n,i)=>{let s=(Br==="TB"||Br==="BT"?r.x<n.x:r.y<n.y)?e.branch:t.branch,l=o(h=>h.branch===s,"isOnBranchToGetCurve"),u=o(h=>h.seq>t.seq&&h.seq<e.seq,"isBetweenCommits");return[...i.values()].some(h=>u(h)&&l(h))},"shouldRerouteArrow"),pb=o((t,e,r=0)=>{let n=t+Math.abs(t-e)/2;if(r>5)return n;if(c6.every(s=>Math.abs(s-n)>=10))return c6.push(n),n;let a=Math.abs(t-e);return pb(t,e-a/5,r+1)},"findLane"),X$e=o((t,e,r,n)=>{let i=Vs.get(e.id),a=Vs.get(r.id);if(i===void 0||a===void 0)throw new Error(`Commit positions not found for commits ${e.id} and ${r.id}`);let s=Y$e(e,r,i,a,n),l="",u="",h=0,f=0,d=Gs.get(r.branch)?.index;r.type===Kr.MERGE&&e.id!==r.parents[0]&&(d=Gs.get(e.branch)?.index);let p;if(s){l="A 10 10, 0, 0, 0,",u="A 10 10, 0, 0, 1,",h=10,f=10;let m=i.y<a.y?pb(i.y,a.y):pb(a.y,i.y),g=i.x<a.x?pb(i.x,a.x):pb(a.x,i.x);Br==="TB"?i.x<a.x?p=`M ${i.x} ${i.y} L ${g-h} ${i.y} ${u} ${g} ${i.y+f} L ${g} ${a.y-h} ${l} ${g+f} ${a.y} L ${a.x} ${a.y}`:(d=Gs.get(e.branch)?.index,p=`M ${i.x} ${i.y} L ${g+h} ${i.y} ${l} ${g} ${i.y+f} L ${g} ${a.y-h} ${u} ${g-f} ${a.y} L ${a.x} ${a.y}`):Br==="BT"?i.x<a.x?p=`M ${i.x} ${i.y} L ${g-h} ${i.y} ${l} ${g} ${i.y-f} L ${g} ${a.y+h} ${u} ${g+f} ${a.y} L ${a.x} ${a.y}`:(d=Gs.get(e.branch)?.index,p=`M ${i.x} ${i.y} L ${g+h} ${i.y} ${u} ${g} ${i.y-f} L ${g} ${a.y+h} ${l} ${g-f} ${a.y} L ${a.x} ${a.y}`):i.y<a.y?p=`M ${i.x} ${i.y} L ${i.x} ${m-h} ${l} ${i.x+f} ${m} L ${a.x-h} ${m} ${u} ${a.x} ${m+f} L ${a.x} ${a.y}`:(d=Gs.get(e.branch)?.index,p=`M ${i.x} ${i.y} L ${i.x} ${m+h} ${u} ${i.x+f} ${m} L ${a.x-h} ${m} ${l} ${a.x} ${m-f} L ${a.x} ${a.y}`)}else l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,Br==="TB"?(i.x<a.x&&(r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${l} ${i.x+f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${u} ${a.x} ${i.y+f} L ${a.x} ${a.y}`),i.x>a.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${u} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x+h} ${i.y} ${l} ${a.x} ${i.y+f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):Br==="BT"?(i.x<a.x&&(r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${u} ${i.x+f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`),i.x>a.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${l} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):(i.y<a.y&&(r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${u} ${a.x} ${i.y+f} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${l} ${i.x+f} ${a.y} L ${a.x} ${a.y}`),i.y>a.y&&(r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${u} ${i.x+f} ${a.y} L ${a.x} ${a.y}`),i.y===a.y&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`));if(p===void 0)throw new Error("Line definition not found");t.append("path").attr("d",p).attr("class","arrow arrow"+d%Sp)},"drawArrow"),j$e=o((t,e)=>{let r=t.append("g").attr("class","commit-arrows");[...e.keys()].forEach(n=>{let i=e.get(n);i.parents&&i.parents.length>0&&i.parents.forEach(a=>{X$e(r,e.get(a),i,e)})})},"drawArrows"),K$e=o((t,e)=>{let r=t.append("g");e.forEach((n,i)=>{let a=i%Sp,s=Gs.get(n.name)?.pos;if(s===void 0)throw new Error(`Position not found for branch ${n.name}`);let l=r.append("line");l.attr("x1",0),l.attr("y1",s),l.attr("x2",mf),l.attr("y2",s),l.attr("class","branch branch"+a),Br==="TB"?(l.attr("y1",l6),l.attr("x1",s),l.attr("y2",mf),l.attr("x2",s)):Br==="BT"&&(l.attr("y1",mf),l.attr("x1",s),l.attr("y2",l6),l.attr("x2",s)),c6.push(s);let u=n.name,h=rue(u),f=r.insert("rect"),p=r.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+a);p.node().appendChild(h);let m=h.getBBox();f.attr("class","branchLabelBkg label"+a).attr("rx",4).attr("ry",4).attr("x",-m.width-4-(Ko?.rotateCommitLabel===!0?30:0)).attr("y",-m.height/2+8).attr("width",m.width+18).attr("height",m.height+4),p.attr("transform","translate("+(-m.width-14-(Ko?.rotateCommitLabel===!0?30:0))+", "+(s-m.height/2-1)+")"),Br==="TB"?(f.attr("x",s-m.width/2-10).attr("y",0),p.attr("transform","translate("+(s-m.width/2-5)+", 0)")):Br==="BT"?(f.attr("x",s-m.width/2-10).attr("y",mf),p.attr("transform","translate("+(s-m.width/2-5)+", "+mf+")")):f.attr("transform","translate(-19, "+(s-m.height/2)+")")})},"drawBranches"),Q$e=o(function(t,e,r,n,i){return Gs.set(t,{pos:e,index:r}),e+=50+(i?40:0)+(Br==="TB"||Br==="BT"?n.width/2:0),e},"setBranchPosition"),Z$e=o(function(t,e,r,n){if(I$e(),Y.debug("in gitgraph renderer",t+`
831 +`,"id:",e,r),!Ko)throw new Error("GitGraph config not found");let i=Ko.rotateCommitLabel??!1,a=n.db;db=a.getCommits();let s=a.getBranchesAsObjArray();Br=a.getDirection();let l=Ge(`[id="${e}"]`),u=0;s.forEach((h,f)=>{let d=rue(h.name),p=l.append("g"),m=p.insert("g").attr("class","branchLabel"),g=m.insert("g").attr("class","label branch-label");g.node()?.appendChild(d);let y=d.getBBox();u=Q$e(h.name,u,f,y,i),g.remove(),m.remove(),p.remove()}),tue(l,db,!1),Ko.showBranches&&K$e(l,s),j$e(l,db),tue(l,db,!0),Gt.insertTitle(l,"gitTitleText",Ko.titleTopMargin??0,a.getDiagramTitle()),oA(void 0,l,Ko.diagramPadding,Ko.useMaxWidth)},"draw"),iue={draw:Z$e}});var J$e,sue,oue=N(()=>{"use strict";J$e=o(t=>`
832 + .commit-id,
833 + .commit-msg,
834 + .branch-label {
835 + fill: lightgrey;
836 + color: lightgrey;
837 + font-family: 'trebuchet ms', verdana, arial, sans-serif;
838 + font-family: var(--mermaid-font-family);
839 + }
840 + ${[0,1,2,3,4,5,6,7].map(e=>`
841 + .branch-label${e} { fill: ${t["gitBranchLabel"+e]}; }
842 + .commit${e} { stroke: ${t["git"+e]}; fill: ${t["git"+e]}; }
843 + .commit-highlight${e} { stroke: ${t["gitInv"+e]}; fill: ${t["gitInv"+e]}; }
844 + .label${e} { fill: ${t["git"+e]}; }
845 + .arrow${e} { stroke: ${t["git"+e]}; }
846 + `).join(`
847 +`)}
848 +
849 + .branch {
850 + stroke-width: 1;
851 + stroke: ${t.lineColor};
852 + stroke-dasharray: 2;
853 + }
854 + .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelColor};}
855 + .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelBackground}; opacity: 0.5; }
856 + .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};}
857 + .tag-label-bkg { fill: ${t.tagLabelBackground}; stroke: ${t.tagLabelBorder}; }
858 + .tag-hole { fill: ${t.textColor}; }
859 +
860 + .commit-merge {
861 + stroke: ${t.primaryColor};
862 + fill: ${t.primaryColor};
863 + }
864 + .commit-reverse {
865 + stroke: ${t.primaryColor};
866 + fill: ${t.primaryColor};
867 + stroke-width: 3;
868 + }
869 + .commit-highlight-outer {
870 + }
871 + .commit-highlight-inner {
872 + stroke: ${t.primaryColor};
873 + fill: ${t.primaryColor};
874 + }
875 +
876 + .arrow { stroke-width: 8; stroke-linecap: round; fill: none}
877 + .gitTitleText {
878 + text-anchor: middle;
879 + font-size: 18px;
880 + fill: ${t.textColor};
881 + }
882 +`,"getStyles"),sue=J$e});var lue={};hr(lue,{diagram:()=>eze});var eze,cue=N(()=>{"use strict";eue();GI();aue();oue();eze={parser:Jce,db:o6,renderer:iue,styles:sue}});var VI,fue,due=N(()=>{"use strict";VI=function(){var t=o(function(L,R,O,M){for(O=O||{},M=L.length;M--;O[L[M]]=R);return O},"o"),e=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],r=[1,26],n=[1,27],i=[1,28],a=[1,29],s=[1,30],l=[1,31],u=[1,32],h=[1,33],f=[1,34],d=[1,9],p=[1,10],m=[1,11],g=[1,12],y=[1,13],v=[1,14],x=[1,15],b=[1,16],w=[1,19],C=[1,20],T=[1,21],E=[1,22],A=[1,23],S=[1,25],_=[1,35],I={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:o(function(R,O,M,B,F,P,z){var $=P.length-1;switch(F){case 1:return P[$-1];case 2:this.$=[];break;case 3:P[$-1].push(P[$]),this.$=P[$-1];break;case 4:case 5:this.$=P[$];break;case 6:case 7:this.$=[];break;case 8:B.setWeekday("monday");break;case 9:B.setWeekday("tuesday");break;case 10:B.setWeekday("wednesday");break;case 11:B.setWeekday("thursday");break;case 12:B.setWeekday("friday");break;case 13:B.setWeekday("saturday");break;case 14:B.setWeekday("sunday");break;case 15:B.setWeekend("friday");break;case 16:B.setWeekend("saturday");break;case 17:B.setDateFormat(P[$].substr(11)),this.$=P[$].substr(11);break;case 18:B.enableInclusiveEndDates(),this.$=P[$].substr(18);break;case 19:B.TopAxis(),this.$=P[$].substr(8);break;case 20:B.setAxisFormat(P[$].substr(11)),this.$=P[$].substr(11);break;case 21:B.setTickInterval(P[$].substr(13)),this.$=P[$].substr(13);break;case 22:B.setExcludes(P[$].substr(9)),this.$=P[$].substr(9);break;case 23:B.setIncludes(P[$].substr(9)),this.$=P[$].substr(9);break;case 24:B.setTodayMarker(P[$].substr(12)),this.$=P[$].substr(12);break;case 27:B.setDiagramTitle(P[$].substr(6)),this.$=P[$].substr(6);break;case 28:this.$=P[$].trim(),B.setAccTitle(this.$);break;case 29:case 30:this.$=P[$].trim(),B.setAccDescription(this.$);break;case 31:B.addSection(P[$].substr(8)),this.$=P[$].substr(8);break;case 33:B.addTask(P[$-1],P[$]),this.$="task";break;case 34:this.$=P[$-1],B.setClickEvent(P[$-1],P[$],null);break;case 35:this.$=P[$-2],B.setClickEvent(P[$-2],P[$-1],P[$]);break;case 36:this.$=P[$-2],B.setClickEvent(P[$-2],P[$-1],null),B.setLink(P[$-2],P[$]);break;case 37:this.$=P[$-3],B.setClickEvent(P[$-3],P[$-2],P[$-1]),B.setLink(P[$-3],P[$]);break;case 38:this.$=P[$-2],B.setClickEvent(P[$-2],P[$],null),B.setLink(P[$-2],P[$-1]);break;case 39:this.$=P[$-3],B.setClickEvent(P[$-3],P[$-1],P[$]),B.setLink(P[$-3],P[$-2]);break;case 40:this.$=P[$-1],B.setLink(P[$-1],P[$]);break;case 41:case 47:this.$=P[$-1]+" "+P[$];break;case 42:case 43:case 45:this.$=P[$-2]+" "+P[$-1]+" "+P[$];break;case 44:case 46:this.$=P[$-3]+" "+P[$-2]+" "+P[$-1]+" "+P[$];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:w,31:C,33:T,35:E,36:A,37:24,38:S,40:_},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:36,11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:w,31:C,33:T,35:E,36:A,37:24,38:S,40:_},t(e,[2,5]),t(e,[2,6]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),t(e,[2,27]),{32:[1,37]},{34:[1,38]},t(e,[2,30]),t(e,[2,31]),t(e,[2,32]),{39:[1,39]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),{41:[1,40],43:[1,41]},t(e,[2,4]),t(e,[2,28]),t(e,[2,29]),t(e,[2,33]),t(e,[2,34],{42:[1,42],43:[1,43]}),t(e,[2,40],{41:[1,44]}),t(e,[2,35],{43:[1,45]}),t(e,[2,36]),t(e,[2,38],{42:[1,46]}),t(e,[2,37]),t(e,[2,39])],defaultActions:{},parseError:o(function(R,O){if(O.recoverable)this.trace(R);else{var M=new Error(R);throw M.hash=O,M}},"parseError"),parse:o(function(R){var O=this,M=[0],B=[],F=[null],P=[],z=this.table,$="",H=0,Q=0,j=0,ie=2,ne=1,le=P.slice.call(arguments,1),he=Object.create(this.lexer),K={yy:{}};for(var X in this.yy)Object.prototype.hasOwnProperty.call(this.yy,X)&&(K.yy[X]=this.yy[X]);he.setInput(R,K.yy),K.yy.lexer=he,K.yy.parser=this,typeof he.yylloc>"u"&&(he.yylloc={});var te=he.yylloc;P.push(te);var J=he.options&&he.options.ranges;typeof K.yy.parseError=="function"?this.parseError=K.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function se(W){M.length=M.length-2*W,F.length=F.length-W,P.length=P.length-W}o(se,"popStack");function ue(){var W;return W=B.pop()||he.lex()||ne,typeof W!="number"&&(W instanceof Array&&(B=W,W=B.pop()),W=O.symbols_[W]||W),W}o(ue,"lex");for(var Z,Se,ce,ae,Oe,ge,ze={},He,$e,Re,Ie;;){if(ce=M[M.length-1],this.defaultActions[ce]?ae=this.defaultActions[ce]:((Z===null||typeof Z>"u")&&(Z=ue()),ae=z[ce]&&z[ce][Z]),typeof ae>"u"||!ae.length||!ae[0]){var be="";Ie=[];for(He in z[ce])this.terminals_[He]&&He>ie&&Ie.push("'"+this.terminals_[He]+"'");he.showPosition?be="Parse error on line "+(H+1)+`:
883 +`+he.showPosition()+`
884 +Expecting `+Ie.join(", ")+", got '"+(this.terminals_[Z]||Z)+"'":be="Parse error on line "+(H+1)+": Unexpected "+(Z==ne?"end of input":"'"+(this.terminals_[Z]||Z)+"'"),this.parseError(be,{text:he.match,token:this.terminals_[Z]||Z,line:he.yylineno,loc:te,expected:Ie})}if(ae[0]instanceof Array&&ae.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ce+", token: "+Z);switch(ae[0]){case 1:M.push(Z),F.push(he.yytext),P.push(he.yylloc),M.push(ae[1]),Z=null,Se?(Z=Se,Se=null):(Q=he.yyleng,$=he.yytext,H=he.yylineno,te=he.yylloc,j>0&&j--);break;case 2:if($e=this.productions_[ae[1]][1],ze.$=F[F.length-$e],ze._$={first_line:P[P.length-($e||1)].first_line,last_line:P[P.length-1].last_line,first_column:P[P.length-($e||1)].first_column,last_column:P[P.length-1].last_column},J&&(ze._$.range=[P[P.length-($e||1)].range[0],P[P.length-1].range[1]]),ge=this.performAction.apply(ze,[$,Q,H,K.yy,ae[1],F,P].concat(le)),typeof ge<"u")return ge;$e&&(M=M.slice(0,-1*$e*2),F=F.slice(0,-1*$e),P=P.slice(0,-1*$e)),M.push(this.productions_[ae[1]][0]),F.push(ze.$),P.push(ze._$),Re=z[M[M.length-2]][M[M.length-1]],M.push(Re);break;case 3:return!0}}return!0},"parse")},D=function(){var L={EOF:1,parseError:o(function(O,M){if(this.yy.parser)this.yy.parser.parseError(O,M);else throw new Error(O)},"parseError"),setInput:o(function(R,O){return this.yy=O||this.yy||{},this._input=R,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var R=this._input[0];this.yytext+=R,this.yyleng++,this.offset++,this.match+=R,this.matched+=R;var O=R.match(/(?:\r\n?|\n).*/g);return O?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),R},"input"),unput:o(function(R){var O=R.length,M=R.split(/(?:\r\n?|\n)/g);this._input=R+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-O),this.offset-=O;var B=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),M.length-1&&(this.yylineno-=M.length-1);var F=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:M?(M.length===B.length?this.yylloc.first_column:0)+B[B.length-M.length].length-M[0].length:this.yylloc.first_column-O},this.options.ranges&&(this.yylloc.range=[F[0],F[0]+this.yyleng-O]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
885 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(R){this.unput(this.match.slice(R))},"less"),pastInput:o(function(){var R=this.matched.substr(0,this.matched.length-this.match.length);return(R.length>20?"...":"")+R.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var R=this.match;return R.length<20&&(R+=this._input.substr(0,20-R.length)),(R.substr(0,20)+(R.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var R=this.pastInput(),O=new Array(R.length+1).join("-");return R+this.upcomingInput()+`
886 +`+O+"^"},"showPosition"),test_match:o(function(R,O){var M,B,F;if(this.options.backtrack_lexer&&(F={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(F.yylloc.range=this.yylloc.range.slice(0))),B=R[0].match(/(?:\r\n?|\n).*/g),B&&(this.yylineno+=B.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:B?B[B.length-1].length-B[B.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+R[0].length},this.yytext+=R[0],this.match+=R[0],this.matches=R,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(R[0].length),this.matched+=R[0],M=this.performAction.call(this,this.yy,this,O,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),M)return M;if(this._backtrack){for(var P in F)this[P]=F[P];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var R,O,M,B;this._more||(this.yytext="",this.match="");for(var F=this._currentRules(),P=0;P<F.length;P++)if(M=this._input.match(this.rules[F[P]]),M&&(!O||M[0].length>O[0].length)){if(O=M,B=P,this.options.backtrack_lexer){if(R=this.test_match(M,F[P]),R!==!1)return R;if(this._backtrack){O=!1;continue}else return!1}else if(!this.options.flex)break}return O?(R=this.test_match(O,F[B]),R!==!1?R:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
887 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var O=this.next();return O||this.lex()},"lex"),begin:o(function(O){this.conditionStack.push(O)},"begin"),popState:o(function(){var O=this.conditionStack.length-1;return O>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(O){return O=this.conditionStack.length-1-Math.abs(O||0),O>=0?this.conditionStack[O]:"INITIAL"},"topState"),pushState:o(function(O){this.begin(O)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(O,M,B,F){var P=F;switch(B){case 0:return this.begin("open_directive"),"open_directive";break;case 1:return this.begin("acc_title"),31;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),33;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:this.begin("href");break;case 15:this.popState();break;case 16:return 43;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 41;case 21:this.popState();break;case 22:return 42;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 40;case 26:return 4;case 27:return 22;case 28:return 23;case 29:return 24;case 30:return 25;case 31:return 26;case 32:return 28;case 33:return 27;case 34:return 29;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return 20;case 43:return 21;case 44:return"date";case 45:return 30;case 46:return"accDescription";case 47:return 36;case 48:return 38;case 49:return 39;case 50:return":";case 51:return 6;case 52:return"INVALID"}},"anonymous"),rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:weekend\s+friday\b)/i,/^(?:weekend\s+saturday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],inclusive:!0}}};return L}();I.lexer=D;function k(){this.yy={}}return o(k,"Parser"),k.prototype=I,I.Parser=k,new k}();VI.parser=VI;fue=VI});var pue=Mi((UI,HI)=>{"use strict";(function(t,e){typeof UI=="object"&&typeof HI<"u"?HI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_isoWeek=e()})(UI,function(){"use strict";var t="day";return function(e,r,n){var i=o(function(l){return l.add(4-l.isoWeekday(),t)},"a"),a=r.prototype;a.isoWeekYear=function(){return i(this).year()},a.isoWeek=function(l){if(!this.$utils().u(l))return this.add(7*(l-this.isoWeek()),t);var u,h,f,d,p=i(this),m=(u=this.isoWeekYear(),h=this.$u,f=(h?n.utc:n)().year(u).startOf("year"),d=4-f.isoWeekday(),f.isoWeekday()>4&&(d+=7),f.add(d,t));return p.diff(m,"week")+1},a.isoWeekday=function(l){return this.$utils().u(l)?this.day()||7:this.day(this.day()%7?l:l-7)};var s=a.startOf;a.startOf=function(l,u){var h=this.$utils(),f=!!h.u(u)||u;return h.p(l)==="isoweek"?f?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(l,u)}}})});var mue=Mi((WI,qI)=>{"use strict";(function(t,e){typeof WI=="object"&&typeof qI<"u"?qI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_customParseFormat=e()})(WI,function(){"use strict";var t={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,r=/\d/,n=/\d\d/,i=/\d\d?/,a=/\d*[^-_:/,()\s\d]+/,s={},l=o(function(g){return(g=+g)+(g>68?1900:2e3)},"a"),u=o(function(g){return function(y){this[g]=+y}},"f"),h=[/[+-]\d\d:?(\d\d)?|Z/,function(g){(this.zone||(this.zone={})).offset=function(y){if(!y||y==="Z")return 0;var v=y.match(/([+-]|\d\d)/g),x=60*v[1]+(+v[2]||0);return x===0?0:v[0]==="+"?-x:x}(g)}],f=o(function(g){var y=s[g];return y&&(y.indexOf?y:y.s.concat(y.f))},"u"),d=o(function(g,y){var v,x=s.meridiem;if(x){for(var b=1;b<=24;b+=1)if(g.indexOf(x(b,0,y))>-1){v=b>12;break}}else v=g===(y?"pm":"PM");return v},"d"),p={A:[a,function(g){this.afternoon=d(g,!1)}],a:[a,function(g){this.afternoon=d(g,!0)}],Q:[r,function(g){this.month=3*(g-1)+1}],S:[r,function(g){this.milliseconds=100*+g}],SS:[n,function(g){this.milliseconds=10*+g}],SSS:[/\d{3}/,function(g){this.milliseconds=+g}],s:[i,u("seconds")],ss:[i,u("seconds")],m:[i,u("minutes")],mm:[i,u("minutes")],H:[i,u("hours")],h:[i,u("hours")],HH:[i,u("hours")],hh:[i,u("hours")],D:[i,u("day")],DD:[n,u("day")],Do:[a,function(g){var y=s.ordinal,v=g.match(/\d+/);if(this.day=v[0],y)for(var x=1;x<=31;x+=1)y(x).replace(/\[|\]/g,"")===g&&(this.day=x)}],w:[i,u("week")],ww:[n,u("week")],M:[i,u("month")],MM:[n,u("month")],MMM:[a,function(g){var y=f("months"),v=(f("monthsShort")||y.map(function(x){return x.slice(0,3)})).indexOf(g)+1;if(v<1)throw new Error;this.month=v%12||v}],MMMM:[a,function(g){var y=f("months").indexOf(g)+1;if(y<1)throw new Error;this.month=y%12||y}],Y:[/[+-]?\d+/,u("year")],YY:[n,function(g){this.year=l(g)}],YYYY:[/\d{4}/,u("year")],Z:h,ZZ:h};function m(g){var y,v;y=g,v=s&&s.formats;for(var x=(g=y.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(S,_,I){var D=I&&I.toUpperCase();return _||v[I]||t[I]||v[D].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(k,L,R){return L||R.slice(1)})})).match(e),b=x.length,w=0;w<b;w+=1){var C=x[w],T=p[C],E=T&&T[0],A=T&&T[1];x[w]=A?{regex:E,parser:A}:C.replace(/^\[|\]$/g,"")}return function(S){for(var _={},I=0,D=0;I<b;I+=1){var k=x[I];if(typeof k=="string")D+=k.length;else{var L=k.regex,R=k.parser,O=S.slice(D),M=L.exec(O)[0];R.call(_,M),S=S.replace(M,"")}}return function(B){var F=B.afternoon;if(F!==void 0){var P=B.hours;F?P<12&&(B.hours+=12):P===12&&(B.hours=0),delete B.afternoon}}(_),_}}return o(m,"l"),function(g,y,v){v.p.customParseFormat=!0,g&&g.parseTwoDigitYear&&(l=g.parseTwoDigitYear);var x=y.prototype,b=x.parse;x.parse=function(w){var C=w.date,T=w.utc,E=w.args;this.$u=T;var A=E[1];if(typeof A=="string"){var S=E[2]===!0,_=E[3]===!0,I=S||_,D=E[2];_&&(D=E[2]),s=this.$locale(),!S&&D&&(s=v.Ls[D]),this.$d=function(O,M,B,F){try{if(["x","X"].indexOf(M)>-1)return new Date((M==="X"?1e3:1)*O);var P=m(M)(O),z=P.year,$=P.month,H=P.day,Q=P.hours,j=P.minutes,ie=P.seconds,ne=P.milliseconds,le=P.zone,he=P.week,K=new Date,X=H||(z||$?1:K.getDate()),te=z||K.getFullYear(),J=0;z&&!$||(J=$>0?$-1:K.getMonth());var se,ue=Q||0,Z=j||0,Se=ie||0,ce=ne||0;return le?new Date(Date.UTC(te,J,X,ue,Z,Se,ce+60*le.offset*1e3)):B?new Date(Date.UTC(te,J,X,ue,Z,Se,ce)):(se=new Date(te,J,X,ue,Z,Se,ce),he&&(se=F(se).week(he).toDate()),se)}catch{return new Date("")}}(C,A,T,v),this.init(),D&&D!==!0&&(this.$L=this.locale(D).$L),I&&C!=this.format(A)&&(this.$d=new Date("")),s={}}else if(A instanceof Array)for(var k=A.length,L=1;L<=k;L+=1){E[1]=A[L-1];var R=v.apply(this,E);if(R.isValid()){this.$d=R.$d,this.$L=R.$L,this.init();break}L===k&&(this.$d=new Date(""))}else b.call(this,w)}}})});var gue=Mi((YI,XI)=>{"use strict";(function(t,e){typeof YI=="object"&&typeof XI<"u"?XI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_advancedFormat=e()})(YI,function(){"use strict";return function(t,e){var r=e.prototype,n=r.format;r.format=function(i){var a=this,s=this.$locale();if(!this.isValid())return n.bind(this)(i);var l=this.$utils(),u=(i||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(h){switch(h){case"Q":return Math.ceil((a.$M+1)/3);case"Do":return s.ordinal(a.$D);case"gggg":return a.weekYear();case"GGGG":return a.isoWeekYear();case"wo":return s.ordinal(a.week(),"W");case"w":case"ww":return l.s(a.week(),h==="w"?1:2,"0");case"W":case"WW":return l.s(a.isoWeek(),h==="W"?1:2,"0");case"k":case"kk":return l.s(String(a.$H===0?24:a.$H),h==="k"?1:2,"0");case"X":return Math.floor(a.$d.getTime()/1e3);case"x":return a.$d.getTime();case"z":return"["+a.offsetName()+"]";case"zzz":return"["+a.offsetName("long")+"]";default:return h}});return n.bind(this)(u)}}})});function Nue(t,e,r){let n=!0;for(;n;)n=!1,r.forEach(function(i){let a="^\\s*"+i+"\\s*$",s=new RegExp(a);t[0].match(s)&&(e[i]=!0,t.shift(1),n=!0)})}var xue,ho,bue,wue,Tue,yue,Gc,ZI,JI,eO,mb,gb,tO,rO,f6,E1,nO,kue,iO,yb,aO,sO,d6,jI,ize,aze,sze,oze,lze,cze,uze,hze,fze,dze,pze,mze,gze,yze,vze,xze,bze,wze,Tze,kze,Eze,Sze,Cze,Eue,Aze,_ze,Dze,Sue,Lze,KI,Cue,Aue,u6,k1,Rze,Nze,QI,h6,Gi,_ue,Mze,Cp,Ize,vue,Oze,Due,Pze,Lue,Bze,Fze,Rue,Mue=N(()=>{"use strict";xue=Sa(z0(),1),ho=Sa(R4(),1),bue=Sa(pue(),1),wue=Sa(mue(),1),Tue=Sa(gue(),1);vt();zt();ir();mi();ho.default.extend(bue.default);ho.default.extend(wue.default);ho.default.extend(Tue.default);yue={friday:5,saturday:6},Gc="",ZI="",eO="",mb=[],gb=[],tO=new Map,rO=[],f6=[],E1="",nO="",kue=["active","done","crit","milestone"],iO=[],yb=!1,aO=!1,sO="sunday",d6="saturday",jI=0,ize=o(function(){rO=[],f6=[],E1="",iO=[],u6=0,QI=void 0,h6=void 0,Gi=[],Gc="",ZI="",nO="",JI=void 0,eO="",mb=[],gb=[],yb=!1,aO=!1,jI=0,tO=new Map,Ar(),sO="sunday",d6="saturday"},"clear"),aze=o(function(t){ZI=t},"setAxisFormat"),sze=o(function(){return ZI},"getAxisFormat"),oze=o(function(t){JI=t},"setTickInterval"),lze=o(function(){return JI},"getTickInterval"),cze=o(function(t){eO=t},"setTodayMarker"),uze=o(function(){return eO},"getTodayMarker"),hze=o(function(t){Gc=t},"setDateFormat"),fze=o(function(){yb=!0},"enableInclusiveEndDates"),dze=o(function(){return yb},"endDatesAreInclusive"),pze=o(function(){aO=!0},"enableTopAxis"),mze=o(function(){return aO},"topAxisEnabled"),gze=o(function(t){nO=t},"setDisplayMode"),yze=o(function(){return nO},"getDisplayMode"),vze=o(function(){return Gc},"getDateFormat"),xze=o(function(t){mb=t.toLowerCase().split(/[\s,]+/)},"setIncludes"),bze=o(function(){return mb},"getIncludes"),wze=o(function(t){gb=t.toLowerCase().split(/[\s,]+/)},"setExcludes"),Tze=o(function(){return gb},"getExcludes"),kze=o(function(){return tO},"getLinks"),Eze=o(function(t){E1=t,rO.push(t)},"addSection"),Sze=o(function(){return rO},"getSections"),Cze=o(function(){let t=vue(),e=10,r=0;for(;!t&&r<e;)t=vue(),r++;return f6=Gi,f6},"getTasks"),Eue=o(function(t,e,r,n){return n.includes(t.format(e.trim()))?!1:r.includes("weekends")&&(t.isoWeekday()===yue[d6]||t.isoWeekday()===yue[d6]+1)||r.includes(t.format("dddd").toLowerCase())?!0:r.includes(t.format(e.trim()))},"isInvalidDate"),Aze=o(function(t){sO=t},"setWeekday"),_ze=o(function(){return sO},"getWeekday"),Dze=o(function(t){d6=t},"setWeekend"),Sue=o(function(t,e,r,n){if(!r.length||t.manualEndTime)return;let i;t.startTime instanceof Date?i=(0,ho.default)(t.startTime):i=(0,ho.default)(t.startTime,e,!0),i=i.add(1,"d");let a;t.endTime instanceof Date?a=(0,ho.default)(t.endTime):a=(0,ho.default)(t.endTime,e,!0);let[s,l]=Lze(i,a,e,r,n);t.endTime=s.toDate(),t.renderEndTime=l},"checkTaskDates"),Lze=o(function(t,e,r,n,i){let a=!1,s=null;for(;t<=e;)a||(s=e.toDate()),a=Eue(t,r,n,i),a&&(e=e.add(1,"d")),t=t.add(1,"d");return[e,s]},"fixTaskDates"),KI=o(function(t,e,r){r=r.trim();let i=/^after\s+(?<ids>[\d\w- ]+)/.exec(r);if(i!==null){let s=null;for(let u of i.groups.ids.split(" ")){let h=Cp(u);h!==void 0&&(!s||h.endTime>s.endTime)&&(s=h)}if(s)return s.endTime;let l=new Date;return l.setHours(0,0,0,0),l}let a=(0,ho.default)(r,e.trim(),!0);if(a.isValid())return a.toDate();{Y.debug("Invalid date:"+r),Y.debug("With date format:"+e.trim());let s=new Date(r);if(s===void 0||isNaN(s.getTime())||s.getFullYear()<-1e4||s.getFullYear()>1e4)throw new Error("Invalid date:"+r);return s}},"getStartDate"),Cue=o(function(t){let e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return e!==null?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},"parseDuration"),Aue=o(function(t,e,r,n=!1){r=r.trim();let a=/^until\s+(?<ids>[\d\w- ]+)/.exec(r);if(a!==null){let f=null;for(let p of a.groups.ids.split(" ")){let m=Cp(p);m!==void 0&&(!f||m.startTime<f.startTime)&&(f=m)}if(f)return f.startTime;let d=new Date;return d.setHours(0,0,0,0),d}let s=(0,ho.default)(r,e.trim(),!0);if(s.isValid())return n&&(s=s.add(1,"d")),s.toDate();let l=(0,ho.default)(t),[u,h]=Cue(r);if(!Number.isNaN(u)){let f=l.add(u,h);f.isValid()&&(l=f)}return l.toDate()},"getEndDate"),u6=0,k1=o(function(t){return t===void 0?(u6=u6+1,"task"+u6):t},"parseId"),Rze=o(function(t,e){let r;e.substr(0,1)===":"?r=e.substr(1,e.length):r=e;let n=r.split(","),i={};Nue(n,i,kue);for(let s=0;s<n.length;s++)n[s]=n[s].trim();let a="";switch(n.length){case 1:i.id=k1(),i.startTime=t.endTime,a=n[0];break;case 2:i.id=k1(),i.startTime=KI(void 0,Gc,n[0]),a=n[1];break;case 3:i.id=k1(n[0]),i.startTime=KI(void 0,Gc,n[1]),a=n[2];break;default:}return a&&(i.endTime=Aue(i.startTime,Gc,a,yb),i.manualEndTime=(0,ho.default)(a,"YYYY-MM-DD",!0).isValid(),Sue(i,Gc,gb,mb)),i},"compileData"),Nze=o(function(t,e){let r;e.substr(0,1)===":"?r=e.substr(1,e.length):r=e;let n=r.split(","),i={};Nue(n,i,kue);for(let a=0;a<n.length;a++)n[a]=n[a].trim();switch(n.length){case 1:i.id=k1(),i.startTime={type:"prevTaskEnd",id:t},i.endTime={data:n[0]};break;case 2:i.id=k1(),i.startTime={type:"getStartDate",startData:n[0]},i.endTime={data:n[1]};break;case 3:i.id=k1(n[0]),i.startTime={type:"getStartDate",startData:n[1]},i.endTime={data:n[2]};break;default:}return i},"parseData"),Gi=[],_ue={},Mze=o(function(t,e){let r={section:E1,type:E1,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:e},task:t,classes:[]},n=Nze(h6,e);r.raw.startTime=n.startTime,r.raw.endTime=n.endTime,r.id=n.id,r.prevTaskId=h6,r.active=n.active,r.done=n.done,r.crit=n.crit,r.milestone=n.milestone,r.order=jI,jI++;let i=Gi.push(r);h6=r.id,_ue[r.id]=i-1},"addTask"),Cp=o(function(t){let e=_ue[t];return Gi[e]},"findTaskById"),Ize=o(function(t,e){let r={section:E1,type:E1,description:t,task:t,classes:[]},n=Rze(QI,e);r.startTime=n.startTime,r.endTime=n.endTime,r.id=n.id,r.active=n.active,r.done=n.done,r.crit=n.crit,r.milestone=n.milestone,QI=r,f6.push(r)},"addTaskOrg"),vue=o(function(){let t=o(function(r){let n=Gi[r],i="";switch(Gi[r].raw.startTime.type){case"prevTaskEnd":{let a=Cp(n.prevTaskId);n.startTime=a.endTime;break}case"getStartDate":i=KI(void 0,Gc,Gi[r].raw.startTime.startData),i&&(Gi[r].startTime=i);break}return Gi[r].startTime&&(Gi[r].endTime=Aue(Gi[r].startTime,Gc,Gi[r].raw.endTime.data,yb),Gi[r].endTime&&(Gi[r].processed=!0,Gi[r].manualEndTime=(0,ho.default)(Gi[r].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),Sue(Gi[r],Gc,gb,mb))),Gi[r].processed},"compileTask"),e=!0;for(let[r,n]of Gi.entries())t(r),e=e&&n.processed;return e},"compileTasks"),Oze=o(function(t,e){let r=e;me().securityLevel!=="loose"&&(r=(0,xue.sanitizeUrl)(e)),t.split(",").forEach(function(n){Cp(n)!==void 0&&(Lue(n,()=>{window.open(r,"_self")}),tO.set(n,r))}),Due(t,"clickable")},"setLink"),Due=o(function(t,e){t.split(",").forEach(function(r){let n=Cp(r);n!==void 0&&n.classes.push(e)})},"setClass"),Pze=o(function(t,e,r){if(me().securityLevel!=="loose"||e===void 0)return;let n=[];if(typeof r=="string"){n=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a<n.length;a++){let s=n[a].trim();s.startsWith('"')&&s.endsWith('"')&&(s=s.substr(1,s.length-2)),n[a]=s}}n.length===0&&n.push(t),Cp(t)!==void 0&&Lue(t,()=>{Gt.runFunc(e,...n)})},"setClickFun"),Lue=o(function(t,e){iO.push(function(){let r=document.querySelector(`[id="${t}"]`);r!==null&&r.addEventListener("click",function(){e()})},function(){let r=document.querySelector(`[id="${t}-text"]`);r!==null&&r.addEventListener("click",function(){e()})})},"pushFun"),Bze=o(function(t,e,r){t.split(",").forEach(function(n){Pze(n,e,r)}),Due(t,"clickable")},"setClickEvent"),Fze=o(function(t){iO.forEach(function(e){e(t)})},"bindFunctions"),Rue={getConfig:o(()=>me().gantt,"getConfig"),clear:ize,setDateFormat:hze,getDateFormat:vze,enableInclusiveEndDates:fze,endDatesAreInclusive:dze,enableTopAxis:pze,topAxisEnabled:mze,setAxisFormat:aze,getAxisFormat:sze,setTickInterval:oze,getTickInterval:lze,setTodayMarker:cze,getTodayMarker:uze,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,setDisplayMode:gze,getDisplayMode:yze,setAccDescription:Nr,getAccDescription:Mr,addSection:Eze,getSections:Sze,getTasks:Cze,addTask:Mze,findTaskById:Cp,addTaskOrg:Ize,setIncludes:xze,getIncludes:bze,setExcludes:wze,getExcludes:Tze,setClickEvent:Bze,setLink:Oze,getLinks:kze,bindFunctions:Fze,parseDuration:Cue,isInvalidDate:Eue,setWeekday:Aze,getWeekday:_ze,setWeekend:Dze};o(Nue,"getTaskTags")});var p6,$ze,Iue,zze,Yu,Gze,Oue,Pue=N(()=>{"use strict";p6=Sa(R4(),1);vt();dr();gr();zt();Ei();$ze=o(function(){Y.debug("Something is calling, setConf, remove the call")},"setConf"),Iue={monday:Ch,tuesday:T5,wednesday:k5,thursday:oc,friday:E5,saturday:S5,sunday:yl},zze=o((t,e)=>{let r=[...t].map(()=>-1/0),n=[...t].sort((a,s)=>a.startTime-s.startTime||a.order-s.order),i=0;for(let a of n)for(let s=0;s<r.length;s++)if(a.startTime>=r[s]){r[s]=a.endTime,a.order=s+e,s>i&&(i=s);break}return i},"getMaxIntersections"),Gze=o(function(t,e,r,n){let i=me().gantt,a=me().securityLevel,s;a==="sandbox"&&(s=Ge("#i"+e));let l=a==="sandbox"?Ge(s.nodes()[0].contentDocument.body):Ge("body"),u=a==="sandbox"?s.nodes()[0].contentDocument:document,h=u.getElementById(e);Yu=h.parentElement.offsetWidth,Yu===void 0&&(Yu=1200),i.useWidth!==void 0&&(Yu=i.useWidth);let f=n.db.getTasks(),d=[];for(let S of f)d.push(S.type);d=A(d);let p={},m=2*i.topPadding;if(n.db.getDisplayMode()==="compact"||i.displayMode==="compact"){let S={};for(let I of f)S[I.section]===void 0?S[I.section]=[I]:S[I.section].push(I);let _=0;for(let I of Object.keys(S)){let D=zze(S[I],_)+1;_+=D,m+=D*(i.barHeight+i.barGap),p[I]=D}}else{m+=f.length*(i.barHeight+i.barGap);for(let S of d)p[S]=f.filter(_=>_.type===S).length}h.setAttribute("viewBox","0 0 "+Yu+" "+m);let g=l.select(`[id="${e}"]`),y=_5().domain([M3(f,function(S){return S.startTime}),N3(f,function(S){return S.endTime})]).rangeRound([0,Yu-i.leftPadding-i.rightPadding]);function v(S,_){let I=S.startTime,D=_.startTime,k=0;return I>D?k=1:I<D&&(k=-1),k}o(v,"taskCompare"),f.sort(v),x(f,Yu,m),vn(g,m,Yu,i.useMaxWidth),g.append("text").text(n.db.getDiagramTitle()).attr("x",Yu/2).attr("y",i.titleTopMargin).attr("class","titleText");function x(S,_,I){let D=i.barHeight,k=D+i.barGap,L=i.topPadding,R=i.leftPadding,O=gl().domain([0,d.length]).range(["#00B9FA","#F95002"]).interpolate($8);w(k,L,R,_,I,S,n.db.getExcludes(),n.db.getIncludes()),C(R,L,_,I),b(S,k,L,R,D,O,_,I),T(k,L,R,D,O),E(R,L,_,I)}o(x,"makeGantt");function b(S,_,I,D,k,L,R){let M=[...new Set(S.map(z=>z.order))].map(z=>S.find($=>$.order===z));g.append("g").selectAll("rect").data(M).enter().append("rect").attr("x",0).attr("y",function(z,$){return $=z.order,$*_+I-2}).attr("width",function(){return R-i.rightPadding/2}).attr("height",_).attr("class",function(z){for(let[$,H]of d.entries())if(z.type===H)return"section section"+$%i.numberSectionStyles;return"section section0"});let B=g.append("g").selectAll("rect").data(S).enter(),F=n.db.getLinks();if(B.append("rect").attr("id",function(z){return z.id}).attr("rx",3).attr("ry",3).attr("x",function(z){return z.milestone?y(z.startTime)+D+.5*(y(z.endTime)-y(z.startTime))-.5*k:y(z.startTime)+D}).attr("y",function(z,$){return $=z.order,$*_+I}).attr("width",function(z){return z.milestone?k:y(z.renderEndTime||z.endTime)-y(z.startTime)}).attr("height",k).attr("transform-origin",function(z,$){return $=z.order,(y(z.startTime)+D+.5*(y(z.endTime)-y(z.startTime))).toString()+"px "+($*_+I+.5*k).toString()+"px"}).attr("class",function(z){let $="task",H="";z.classes.length>0&&(H=z.classes.join(" "));let Q=0;for(let[ie,ne]of d.entries())z.type===ne&&(Q=ie%i.numberSectionStyles);let j="";return z.active?z.crit?j+=" activeCrit":j=" active":z.done?z.crit?j=" doneCrit":j=" done":z.crit&&(j+=" crit"),j.length===0&&(j=" task"),z.milestone&&(j=" milestone "+j),j+=Q,j+=" "+H,$+j}),B.append("text").attr("id",function(z){return z.id+"-text"}).text(function(z){return z.task}).attr("font-size",i.fontSize).attr("x",function(z){let $=y(z.startTime),H=y(z.renderEndTime||z.endTime);z.milestone&&($+=.5*(y(z.endTime)-y(z.startTime))-.5*k),z.milestone&&(H=$+k);let Q=this.getBBox().width;return Q>H-$?H+Q+1.5*i.leftPadding>R?$+D-5:H+D+5:(H-$)/2+$+D}).attr("y",function(z,$){return $=z.order,$*_+i.barHeight/2+(i.fontSize/2-2)+I}).attr("text-height",k).attr("class",function(z){let $=y(z.startTime),H=y(z.endTime);z.milestone&&(H=$+k);let Q=this.getBBox().width,j="";z.classes.length>0&&(j=z.classes.join(" "));let ie=0;for(let[le,he]of d.entries())z.type===he&&(ie=le%i.numberSectionStyles);let ne="";return z.active&&(z.crit?ne="activeCritText"+ie:ne="activeText"+ie),z.done?z.crit?ne=ne+" doneCritText"+ie:ne=ne+" doneText"+ie:z.crit&&(ne=ne+" critText"+ie),z.milestone&&(ne+=" milestoneText"),Q>H-$?H+Q+1.5*i.leftPadding>R?j+" taskTextOutsideLeft taskTextOutside"+ie+" "+ne:j+" taskTextOutsideRight taskTextOutside"+ie+" "+ne+" width-"+Q:j+" taskText taskText"+ie+" "+ne+" width-"+Q}),me().securityLevel==="sandbox"){let z;z=Ge("#i"+e);let $=z.nodes()[0].contentDocument;B.filter(function(H){return F.has(H.id)}).each(function(H){var Q=$.querySelector("#"+H.id),j=$.querySelector("#"+H.id+"-text");let ie=Q.parentNode;var ne=$.createElement("a");ne.setAttribute("xlink:href",F.get(H.id)),ne.setAttribute("target","_top"),ie.appendChild(ne),ne.appendChild(Q),ne.appendChild(j)})}}o(b,"drawRects");function w(S,_,I,D,k,L,R,O){if(R.length===0&&O.length===0)return;let M,B;for(let{startTime:Q,endTime:j}of L)(M===void 0||Q<M)&&(M=Q),(B===void 0||j>B)&&(B=j);if(!M||!B)return;if((0,p6.default)(B).diff((0,p6.default)(M),"year")>5){Y.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}let F=n.db.getDateFormat(),P=[],z=null,$=(0,p6.default)(M);for(;$.valueOf()<=B;)n.db.isInvalidDate($,F,R,O)?z?z.end=$:z={start:$,end:$}:z&&(P.push(z),z=null),$=$.add(1,"d");g.append("g").selectAll("rect").data(P).enter().append("rect").attr("id",function(Q){return"exclude-"+Q.start.format("YYYY-MM-DD")}).attr("x",function(Q){return y(Q.start)+I}).attr("y",i.gridLineStartPadding).attr("width",function(Q){let j=Q.end.add(1,"day");return y(j)-y(Q.start)}).attr("height",k-_-i.gridLineStartPadding).attr("transform-origin",function(Q,j){return(y(Q.start)+I+.5*(y(Q.end)-y(Q.start))).toString()+"px "+(j*S+.5*k).toString()+"px"}).attr("class","exclude-range")}o(w,"drawExcludeDays");function C(S,_,I,D){let k=bA(y).tickSize(-D+_+i.gridLineStartPadding).tickFormat(wd(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d")),R=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(n.db.getTickInterval()||i.tickInterval);if(R!==null){let O=R[1],M=R[2],B=n.db.getWeekday()||i.weekday;switch(M){case"millisecond":k.ticks(ac.every(O));break;case"second":k.ticks(Ks.every(O));break;case"minute":k.ticks(vu.every(O));break;case"hour":k.ticks(xu.every(O));break;case"day":k.ticks(_o.every(O));break;case"week":k.ticks(Iue[B].every(O));break;case"month":k.ticks(bu.every(O));break}}if(g.append("g").attr("class","grid").attr("transform","translate("+S+", "+(D-50)+")").call(k).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),n.db.topAxisEnabled()||i.topAxis){let O=xA(y).tickSize(-D+_+i.gridLineStartPadding).tickFormat(wd(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));if(R!==null){let M=R[1],B=R[2],F=n.db.getWeekday()||i.weekday;switch(B){case"millisecond":O.ticks(ac.every(M));break;case"second":O.ticks(Ks.every(M));break;case"minute":O.ticks(vu.every(M));break;case"hour":O.ticks(xu.every(M));break;case"day":O.ticks(_o.every(M));break;case"week":O.ticks(Iue[F].every(M));break;case"month":O.ticks(bu.every(M));break}}g.append("g").attr("class","grid").attr("transform","translate("+S+", "+_+")").call(O).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}o(C,"makeGrid");function T(S,_){let I=0,D=Object.keys(p).map(k=>[k,p[k]]);g.append("g").selectAll("text").data(D).enter().append(function(k){let L=k[0].split(Ze.lineBreakRegex),R=-(L.length-1)/2,O=u.createElementNS("http://www.w3.org/2000/svg","text");O.setAttribute("dy",R+"em");for(let[M,B]of L.entries()){let F=u.createElementNS("http://www.w3.org/2000/svg","tspan");F.setAttribute("alignment-baseline","central"),F.setAttribute("x","10"),M>0&&F.setAttribute("dy","1em"),F.textContent=B,O.appendChild(F)}return O}).attr("x",10).attr("y",function(k,L){if(L>0)for(let R=0;R<L;R++)return I+=D[L-1][1],k[1]*S/2+I*S+_;else return k[1]*S/2+_}).attr("font-size",i.sectionFontSize).attr("class",function(k){for(let[L,R]of d.entries())if(k[0]===R)return"sectionTitle sectionTitle"+L%i.numberSectionStyles;return"sectionTitle"})}o(T,"vertLabels");function E(S,_,I,D){let k=n.db.getTodayMarker();if(k==="off")return;let L=g.append("g").attr("class","today"),R=new Date,O=L.append("line");O.attr("x1",y(R)+S).attr("x2",y(R)+S).attr("y1",i.titleTopMargin).attr("y2",D-i.titleTopMargin).attr("class","today"),k!==""&&O.attr("style",k.replace(/,/g,";"))}o(E,"drawToday");function A(S){let _={},I=[];for(let D=0,k=S.length;D<k;++D)Object.prototype.hasOwnProperty.call(_,S[D])||(_[S[D]]=!0,I.push(S[D]));return I}o(A,"checkUnique")},"draw"),Oue={setConf:$ze,draw:Gze}});var Vze,Bue,Fue=N(()=>{"use strict";Vze=o(t=>`
888 + .mermaid-main-font {
889 + font-family: ${t.fontFamily};
890 + }
891 +
892 + .exclude-range {
893 + fill: ${t.excludeBkgColor};
894 + }
895 +
896 + .section {
897 + stroke: none;
898 + opacity: 0.2;
899 + }
900 +
901 + .section0 {
902 + fill: ${t.sectionBkgColor};
903 + }
904 +
905 + .section2 {
906 + fill: ${t.sectionBkgColor2};
907 + }
908 +
909 + .section1,
910 + .section3 {
911 + fill: ${t.altSectionBkgColor};
912 + opacity: 0.2;
913 + }
914 +
915 + .sectionTitle0 {
916 + fill: ${t.titleColor};
917 + }
918 +
919 + .sectionTitle1 {
920 + fill: ${t.titleColor};
921 + }
922 +
923 + .sectionTitle2 {
924 + fill: ${t.titleColor};
925 + }
926 +
927 + .sectionTitle3 {
928 + fill: ${t.titleColor};
929 + }
930 +
931 + .sectionTitle {
932 + text-anchor: start;
933 + font-family: ${t.fontFamily};
934 + }
935 +
936 +
937 + /* Grid and axis */
938 +
939 + .grid .tick {
940 + stroke: ${t.gridColor};
941 + opacity: 0.8;
942 + shape-rendering: crispEdges;
943 + }
944 +
945 + .grid .tick text {
946 + font-family: ${t.fontFamily};
947 + fill: ${t.textColor};
948 + }
949 +
950 + .grid path {
951 + stroke-width: 0;
952 + }
953 +
954 +
955 + /* Today line */
956 +
957 + .today {
958 + fill: none;
959 + stroke: ${t.todayLineColor};
960 + stroke-width: 2px;
961 + }
962 +
963 +
964 + /* Task styling */
965 +
966 + /* Default task */
967 +
968 + .task {
969 + stroke-width: 2;
970 + }
971 +
972 + .taskText {
973 + text-anchor: middle;
974 + font-family: ${t.fontFamily};
975 + }
976 +
977 + .taskTextOutsideRight {
978 + fill: ${t.taskTextDarkColor};
979 + text-anchor: start;
980 + font-family: ${t.fontFamily};
981 + }
982 +
983 + .taskTextOutsideLeft {
984 + fill: ${t.taskTextDarkColor};
985 + text-anchor: end;
986 + }
987 +
988 +
989 + /* Special case clickable */
990 +
991 + .task.clickable {
992 + cursor: pointer;
993 + }
994 +
995 + .taskText.clickable {
996 + cursor: pointer;
997 + fill: ${t.taskTextClickableColor} !important;
998 + font-weight: bold;
999 + }
1000 +
1001 + .taskTextOutsideLeft.clickable {
1002 + cursor: pointer;
1003 + fill: ${t.taskTextClickableColor} !important;
1004 + font-weight: bold;
1005 + }
1006 +
1007 + .taskTextOutsideRight.clickable {
1008 + cursor: pointer;
1009 + fill: ${t.taskTextClickableColor} !important;
1010 + font-weight: bold;
1011 + }
1012 +
1013 +
1014 + /* Specific task settings for the sections*/
1015 +
1016 + .taskText0,
1017 + .taskText1,
1018 + .taskText2,
1019 + .taskText3 {
1020 + fill: ${t.taskTextColor};
1021 + }
1022 +
1023 + .task0,
1024 + .task1,
1025 + .task2,
1026 + .task3 {
1027 + fill: ${t.taskBkgColor};
1028 + stroke: ${t.taskBorderColor};
1029 + }
1030 +
1031 + .taskTextOutside0,
1032 + .taskTextOutside2
1033 + {
1034 + fill: ${t.taskTextOutsideColor};
1035 + }
1036 +
1037 + .taskTextOutside1,
1038 + .taskTextOutside3 {
1039 + fill: ${t.taskTextOutsideColor};
1040 + }
1041 +
1042 +
1043 + /* Active task */
1044 +
1045 + .active0,
1046 + .active1,
1047 + .active2,
1048 + .active3 {
1049 + fill: ${t.activeTaskBkgColor};
1050 + stroke: ${t.activeTaskBorderColor};
1051 + }
1052 +
1053 + .activeText0,
1054 + .activeText1,
1055 + .activeText2,
1056 + .activeText3 {
1057 + fill: ${t.taskTextDarkColor} !important;
1058 + }
1059 +
1060 +
1061 + /* Completed task */
1062 +
1063 + .done0,
1064 + .done1,
1065 + .done2,
1066 + .done3 {
1067 + stroke: ${t.doneTaskBorderColor};
1068 + fill: ${t.doneTaskBkgColor};
1069 + stroke-width: 2;
1070 + }
1071 +
1072 + .doneText0,
1073 + .doneText1,
1074 + .doneText2,
1075 + .doneText3 {
1076 + fill: ${t.taskTextDarkColor} !important;
1077 + }
1078 +
1079 +
1080 + /* Tasks on the critical line */
1081 +
1082 + .crit0,
1083 + .crit1,
1084 + .crit2,
1085 + .crit3 {
1086 + stroke: ${t.critBorderColor};
1087 + fill: ${t.critBkgColor};
1088 + stroke-width: 2;
1089 + }
1090 +
1091 + .activeCrit0,
1092 + .activeCrit1,
1093 + .activeCrit2,
1094 + .activeCrit3 {
1095 + stroke: ${t.critBorderColor};
1096 + fill: ${t.activeTaskBkgColor};
1097 + stroke-width: 2;
1098 + }
1099 +
1100 + .doneCrit0,
1101 + .doneCrit1,
1102 + .doneCrit2,
1103 + .doneCrit3 {
1104 + stroke: ${t.critBorderColor};
1105 + fill: ${t.doneTaskBkgColor};
1106 + stroke-width: 2;
1107 + cursor: pointer;
1108 + shape-rendering: crispEdges;
1109 + }
1110 +
1111 + .milestone {
1112 + transform: rotate(45deg) scale(0.8,0.8);
1113 + }
1114 +
1115 + .milestoneText {
1116 + font-style: italic;
1117 + }
1118 + .doneCritText0,
1119 + .doneCritText1,
1120 + .doneCritText2,
1121 + .doneCritText3 {
1122 + fill: ${t.taskTextDarkColor} !important;
1123 + }
1124 +
1125 + .activeCritText0,
1126 + .activeCritText1,
1127 + .activeCritText2,
1128 + .activeCritText3 {
1129 + fill: ${t.taskTextDarkColor} !important;
1130 + }
1131 +
1132 + .titleText {
1133 + text-anchor: middle;
1134 + font-size: 18px;
1135 + fill: ${t.titleColor||t.textColor};
1136 + font-family: ${t.fontFamily};
1137 + }
1138 +`,"getStyles"),Bue=Vze});var $ue={};hr($ue,{diagram:()=>Uze});var Uze,zue=N(()=>{"use strict";due();Mue();Pue();Fue();Uze={parser:fue,db:Rue,renderer:Oue,styles:Bue}});var Uue,Hue=N(()=>{"use strict";kp();vt();Uue={parse:o(async t=>{let e=await uo("info",t);Y.debug(e)},"parse")}});var vb,oO=N(()=>{vb={name:"mermaid",version:"11.6.0",description:"Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.",type:"module",module:"./dist/mermaid.core.mjs",types:"./dist/mermaid.d.ts",exports:{".":{types:"./dist/mermaid.d.ts",import:"./dist/mermaid.core.mjs",default:"./dist/mermaid.core.mjs"},"./*":"./*"},keywords:["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph","mindmap","packet diagram","c4 diagram","er diagram","pie chart","pie diagram","quadrant chart","requirement diagram","graph"],scripts:{clean:"rimraf dist",dev:"pnpm -w dev","docs:code":"typedoc src/defaultConfig.ts src/config.ts src/mermaid.ts && prettier --write ./src/docs/config/setup","docs:build":"rimraf ../../docs && pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts","docs:verify":"pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts --verify","docs:pre:vitepress":"pnpm --filter ./src/docs prefetch && rimraf src/vitepress && pnpm docs:code && tsx scripts/docs.cli.mts --vitepress && pnpm --filter ./src/vitepress install --no-frozen-lockfile --ignore-scripts","docs:build:vitepress":"pnpm docs:pre:vitepress && (cd src/vitepress && pnpm run build) && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing","docs:dev":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:dev:docker":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev:docker" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:serve":"pnpm docs:build:vitepress && vitepress serve src/vitepress","docs:spellcheck":'cspell "src/docs/**/*.md"',"docs:release-version":"tsx scripts/update-release-version.mts","docs:verify-version":"tsx scripts/update-release-version.mts --verify","types:build-config":"tsx scripts/create-types-from-json-schema.mts","types:verify-config":"tsx scripts/create-types-from-json-schema.mts --verify",checkCircle:"npx madge --circular ./src",prepublishOnly:"pnpm docs:verify-version"},repository:{type:"git",url:"https://github.com/mermaid-js/mermaid"},author:"Knut Sveidqvist",license:"MIT",standard:{ignore:["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],globals:["page"]},dependencies:{"@braintree/sanitize-url":"^7.0.4","@iconify/utils":"^2.1.33","@mermaid-js/parser":"workspace:^","@types/d3":"^7.4.3",cytoscape:"^3.29.3","cytoscape-cose-bilkent":"^4.1.0","cytoscape-fcose":"^2.2.0",d3:"^7.9.0","d3-sankey":"^0.12.3","dagre-d3-es":"7.0.11",dayjs:"^1.11.13",dompurify:"^3.2.4",katex:"^0.16.9",khroma:"^2.1.0","lodash-es":"^4.17.21",marked:"^15.0.7",roughjs:"^4.6.6",stylis:"^4.3.6","ts-dedent":"^2.2.0",uuid:"^11.1.0"},devDependencies:{"@adobe/jsonschema2md":"^8.0.2","@iconify/types":"^2.0.0","@types/cytoscape":"^3.21.9","@types/cytoscape-fcose":"^2.2.4","@types/d3-sankey":"^0.12.4","@types/d3-scale":"^4.0.9","@types/d3-scale-chromatic":"^3.1.0","@types/d3-selection":"^3.0.11","@types/d3-shape":"^3.1.7","@types/jsdom":"^21.1.7","@types/katex":"^0.16.7","@types/lodash-es":"^4.17.12","@types/micromatch":"^4.0.9","@types/stylis":"^4.2.7","@types/uuid":"^10.0.0",ajv:"^8.17.1",chokidar:"^4.0.3",concurrently:"^9.1.2","csstree-validator":"^4.0.1",globby:"^14.0.2",jison:"^0.4.18","js-base64":"^3.7.7",jsdom:"^26.0.0","json-schema-to-typescript":"^15.0.4",micromatch:"^4.0.8","path-browserify":"^1.0.1",prettier:"^3.5.2",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-gfm":"^4.0.1",rimraf:"^6.0.1","start-server-and-test":"^2.0.10","type-fest":"^4.35.0",typedoc:"^0.27.8","typedoc-plugin-markdown":"^4.4.2",typescript:"~5.7.3","unist-util-flatmap":"^1.0.0","unist-util-visit":"^5.0.0",vitepress:"^1.0.2","vitepress-plugin-search":"1.0.4-alpha.22"},files:["dist/","README.md"],publishConfig:{access:"public"}}});var Xze,jze,Wue,que=N(()=>{"use strict";oO();Xze={version:vb.version},jze=o(()=>Xze.version,"getVersion"),Wue={getVersion:jze}});var sa,Vc=N(()=>{"use strict";dr();zt();sa=o(t=>{let{securityLevel:e}=me(),r=Ge("body");if(e==="sandbox"){let a=Ge(`#i${t}`).node()?.contentDocument??document;r=Ge(a.body)}return r.select(`#${t}`)},"selectSvgElement")});var Kze,Yue,Xue=N(()=>{"use strict";vt();Vc();Ei();Kze=o((t,e,r)=>{Y.debug(`rendering info diagram
1139 +`+t);let n=sa(e);vn(n,100,400,!0),n.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${r}`)},"draw"),Yue={draw:Kze}});var jue={};hr(jue,{diagram:()=>Qze});var Qze,Kue=N(()=>{"use strict";Hue();que();Xue();Qze={parser:Uue,db:Wue,renderer:Yue}});var Jue,lO,m6,cO,eGe,tGe,rGe,nGe,iGe,aGe,sGe,g6,uO=N(()=>{"use strict";vt();mi();Ya();Jue=or.pie,lO={sections:new Map,showData:!1,config:Jue},m6=lO.sections,cO=lO.showData,eGe=structuredClone(Jue),tGe=o(()=>structuredClone(eGe),"getConfig"),rGe=o(()=>{m6=new Map,cO=lO.showData,Ar()},"clear"),nGe=o(({label:t,value:e})=>{m6.has(t)||(m6.set(t,e),Y.debug(`added new section: ${t}, with value: ${e}`))},"addSection"),iGe=o(()=>m6,"getSections"),aGe=o(t=>{cO=t},"setShowData"),sGe=o(()=>cO,"getShowData"),g6={getConfig:tGe,clear:rGe,setDiagramTitle:$r,getDiagramTitle:Ir,setAccTitle:Lr,getAccTitle:Rr,setAccDescription:Nr,getAccDescription:Mr,addSection:nGe,getSections:iGe,setShowData:aGe,getShowData:sGe}});var oGe,ehe,the=N(()=>{"use strict";kp();vt();T1();uO();oGe=o((t,e)=>{$c(t,e),e.setShowData(t.showData),t.sections.map(e.addSection)},"populateDb"),ehe={parse:o(async t=>{let e=await uo("pie",t);Y.debug(e),oGe(e,g6)},"parse")}});var lGe,rhe,nhe=N(()=>{"use strict";lGe=o(t=>`
1140 + .pieCircle{
1141 + stroke: ${t.pieStrokeColor};
1142 + stroke-width : ${t.pieStrokeWidth};
1143 + opacity : ${t.pieOpacity};
1144 + }
1145 + .pieOuterCircle{
1146 + stroke: ${t.pieOuterStrokeColor};
1147 + stroke-width: ${t.pieOuterStrokeWidth};
1148 + fill: none;
1149 + }
1150 + .pieTitleText {
1151 + text-anchor: middle;
1152 + font-size: ${t.pieTitleTextSize};
1153 + fill: ${t.pieTitleTextColor};
1154 + font-family: ${t.fontFamily};
1155 + }
1156 + .slice {
1157 + font-family: ${t.fontFamily};
1158 + fill: ${t.pieSectionTextColor};
1159 + font-size:${t.pieSectionTextSize};
1160 + // fill: white;
1161 + }
1162 + .legend text {
1163 + fill: ${t.pieLegendTextColor};
1164 + font-family: ${t.fontFamily};
1165 + font-size: ${t.pieLegendTextSize};
1166 + }
1167 +`,"getStyles"),rhe=lGe});var cGe,uGe,ihe,ahe=N(()=>{"use strict";dr();zt();vt();Vc();Ei();ir();cGe=o(t=>{let e=[...t.entries()].map(n=>({label:n[0],value:n[1]})).sort((n,i)=>i.value-n.value);return I5().value(n=>n.value)(e)},"createPieArcs"),uGe=o((t,e,r,n)=>{Y.debug(`rendering pie chart
1168 +`+t);let i=n.db,a=me(),s=Fi(i.getConfig(),a.pie),l=40,u=18,h=4,f=450,d=f,p=sa(e),m=p.append("g");m.attr("transform","translate("+d/2+","+f/2+")");let{themeVariables:g}=a,[y]=Bo(g.pieOuterStrokeWidth);y??=2;let v=s.textPosition,x=Math.min(d,f)/2-l,b=bl().innerRadius(0).outerRadius(x),w=bl().innerRadius(x*v).outerRadius(x*v);m.append("circle").attr("cx",0).attr("cy",0).attr("r",x+y/2).attr("class","pieOuterCircle");let C=i.getSections(),T=cGe(C),E=[g.pie1,g.pie2,g.pie3,g.pie4,g.pie5,g.pie6,g.pie7,g.pie8,g.pie9,g.pie10,g.pie11,g.pie12],A=gu(E);m.selectAll("mySlices").data(T).enter().append("path").attr("d",b).attr("fill",k=>A(k.data.label)).attr("class","pieCircle");let S=0;C.forEach(k=>{S+=k}),m.selectAll("mySlices").data(T).enter().append("text").text(k=>(k.data.value/S*100).toFixed(0)+"%").attr("transform",k=>"translate("+w.centroid(k)+")").style("text-anchor","middle").attr("class","slice"),m.append("text").text(i.getDiagramTitle()).attr("x",0).attr("y",-(f-50)/2).attr("class","pieTitleText");let _=m.selectAll(".legend").data(A.domain()).enter().append("g").attr("class","legend").attr("transform",(k,L)=>{let R=u+h,O=R*A.domain().length/2,M=12*u,B=L*R-O;return"translate("+M+","+B+")"});_.append("rect").attr("width",u).attr("height",u).style("fill",A).style("stroke",A),_.data(T).append("text").attr("x",u+h).attr("y",u-h).text(k=>{let{label:L,value:R}=k.data;return i.getShowData()?`${L} [${R}]`:L});let I=Math.max(..._.selectAll("text").nodes().map(k=>k?.getBoundingClientRect().width??0)),D=d+l+u+h+I;p.attr("viewBox",`0 0 ${D} ${f}`),vn(p,f,D,s.useMaxWidth)},"draw"),ihe={draw:uGe}});var she={};hr(she,{diagram:()=>hGe});var hGe,ohe=N(()=>{"use strict";the();uO();nhe();ahe();hGe={parser:ehe,db:g6,renderer:ihe,styles:rhe}});var hO,uhe,hhe=N(()=>{"use strict";hO=function(){var t=o(function(xe,q,pe,ve){for(pe=pe||{},ve=xe.length;ve--;pe[xe[ve]]=q);return pe},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[1,7],s=[1,4,5,10,12,13,14,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],l=[1,4,5,10,12,13,14,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],u=[55,56,57],h=[2,36],f=[1,37],d=[1,36],p=[1,38],m=[1,35],g=[1,43],y=[1,41],v=[1,14],x=[1,23],b=[1,18],w=[1,19],C=[1,20],T=[1,21],E=[1,22],A=[1,24],S=[1,25],_=[1,26],I=[1,27],D=[1,28],k=[1,29],L=[1,32],R=[1,33],O=[1,34],M=[1,39],B=[1,40],F=[1,42],P=[1,44],z=[1,62],$=[1,61],H=[4,5,8,10,12,13,14,18,44,47,49,55,56,57,63,64,65,66,67],Q=[1,65],j=[1,66],ie=[1,67],ne=[1,68],le=[1,69],he=[1,70],K=[1,71],X=[1,72],te=[1,73],J=[1,74],se=[1,75],ue=[1,76],Z=[4,5,6,7,8,9,10,11,12,13,14,15,18],Se=[1,90],ce=[1,91],ae=[1,92],Oe=[1,99],ge=[1,93],ze=[1,96],He=[1,94],$e=[1,95],Re=[1,97],Ie=[1,98],be=[1,102],W=[10,55,56,57],de=[4,5,6,8,10,11,13,17,18,19,20,55,56,57],re={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,idStringToken:3,ALPHA:4,NUM:5,NODE_STRING:6,DOWN:7,MINUS:8,DEFAULT:9,COMMA:10,COLON:11,AMP:12,BRKT:13,MULT:14,UNICODE_TEXT:15,styleComponent:16,UNIT:17,SPACE:18,STYLE:19,PCT:20,idString:21,style:22,stylesOpt:23,classDefStatement:24,CLASSDEF:25,start:26,eol:27,QUADRANT:28,document:29,line:30,statement:31,axisDetails:32,quadrantDetails:33,points:34,title:35,title_value:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,section:42,text:43,point_start:44,point_x:45,point_y:46,class_name:47,"X-AXIS":48,"AXIS-TEXT-DELIMITER":49,"Y-AXIS":50,QUADRANT_1:51,QUADRANT_2:52,QUADRANT_3:53,QUADRANT_4:54,NEWLINE:55,SEMI:56,EOF:57,alphaNumToken:58,textNoTagsToken:59,STR:60,MD_STR:61,alphaNum:62,PUNCTUATION:63,PLUS:64,EQUALS:65,DOT:66,UNDERSCORE:67,$accept:0,$end:1},terminals_:{2:"error",4:"ALPHA",5:"NUM",6:"NODE_STRING",7:"DOWN",8:"MINUS",9:"DEFAULT",10:"COMMA",11:"COLON",12:"AMP",13:"BRKT",14:"MULT",15:"UNICODE_TEXT",17:"UNIT",18:"SPACE",19:"STYLE",20:"PCT",25:"CLASSDEF",28:"QUADRANT",35:"title",36:"title_value",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"section",44:"point_start",45:"point_x",46:"point_y",47:"class_name",48:"X-AXIS",49:"AXIS-TEXT-DELIMITER",50:"Y-AXIS",51:"QUADRANT_1",52:"QUADRANT_2",53:"QUADRANT_3",54:"QUADRANT_4",55:"NEWLINE",56:"SEMI",57:"EOF",60:"STR",61:"MD_STR",63:"PUNCTUATION",64:"PLUS",65:"EQUALS",66:"DOT",67:"UNDERSCORE"},productions_:[0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],performAction:o(function(q,pe,ve,Pe,_e,we,Ve){var De=we.length-1;switch(_e){case 23:this.$=we[De];break;case 24:this.$=we[De-1]+""+we[De];break;case 26:this.$=we[De-1]+we[De];break;case 27:this.$=[we[De].trim()];break;case 28:we[De-2].push(we[De].trim()),this.$=we[De-2];break;case 29:this.$=we[De-4],Pe.addClass(we[De-2],we[De]);break;case 37:this.$=[];break;case 42:this.$=we[De].trim(),Pe.setDiagramTitle(this.$);break;case 43:this.$=we[De].trim(),Pe.setAccTitle(this.$);break;case 44:case 45:this.$=we[De].trim(),Pe.setAccDescription(this.$);break;case 46:Pe.addSection(we[De].substr(8)),this.$=we[De].substr(8);break;case 47:Pe.addPoint(we[De-3],"",we[De-1],we[De],[]);break;case 48:Pe.addPoint(we[De-4],we[De-3],we[De-1],we[De],[]);break;case 49:Pe.addPoint(we[De-4],"",we[De-2],we[De-1],we[De]);break;case 50:Pe.addPoint(we[De-5],we[De-4],we[De-2],we[De-1],we[De]);break;case 51:Pe.setXAxisLeftText(we[De-2]),Pe.setXAxisRightText(we[De]);break;case 52:we[De-1].text+=" \u27F6 ",Pe.setXAxisLeftText(we[De-1]);break;case 53:Pe.setXAxisLeftText(we[De]);break;case 54:Pe.setYAxisBottomText(we[De-2]),Pe.setYAxisTopText(we[De]);break;case 55:we[De-1].text+=" \u27F6 ",Pe.setYAxisBottomText(we[De-1]);break;case 56:Pe.setYAxisBottomText(we[De]);break;case 57:Pe.setQuadrant1Text(we[De]);break;case 58:Pe.setQuadrant2Text(we[De]);break;case 59:Pe.setQuadrant3Text(we[De]);break;case 60:Pe.setQuadrant4Text(we[De]);break;case 64:this.$={text:we[De],type:"text"};break;case 65:this.$={text:we[De-1].text+""+we[De],type:we[De-1].type};break;case 66:this.$={text:we[De],type:"text"};break;case 67:this.$={text:we[De],type:"markdown"};break;case 68:this.$=we[De];break;case 69:this.$=we[De-1]+""+we[De];break}},"anonymous"),table:[{18:e,26:1,27:2,28:r,55:n,56:i,57:a},{1:[3]},{18:e,26:8,27:2,28:r,55:n,56:i,57:a},{18:e,26:9,27:2,28:r,55:n,56:i,57:a},t(s,[2,33],{29:10}),t(l,[2,61]),t(l,[2,62]),t(l,[2,63]),{1:[2,30]},{1:[2,31]},t(u,h,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:w,39:C,41:T,42:E,48:A,50:S,51:_,52:I,53:D,54:k,60:L,61:R,63:O,64:M,65:B,66:F,67:P}),t(s,[2,34]),{27:45,55:n,56:i,57:a},t(u,[2,37]),t(u,h,{24:13,32:15,33:16,34:17,43:30,58:31,31:46,4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:w,39:C,41:T,42:E,48:A,50:S,51:_,52:I,53:D,54:k,60:L,61:R,63:O,64:M,65:B,66:F,67:P}),t(u,[2,39]),t(u,[2,40]),t(u,[2,41]),{36:[1,47]},{38:[1,48]},{40:[1,49]},t(u,[2,45]),t(u,[2,46]),{18:[1,50]},{4:f,5:d,10:p,12:m,13:g,14:y,43:51,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:52,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:53,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:54,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:55,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,10:p,12:m,13:g,14:y,43:56,58:31,60:L,61:R,63:O,64:M,65:B,66:F,67:P},{4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,44:[1,57],47:[1,58],58:60,59:59,63:O,64:M,65:B,66:F,67:P},t(H,[2,64]),t(H,[2,66]),t(H,[2,67]),t(H,[2,70]),t(H,[2,71]),t(H,[2,72]),t(H,[2,73]),t(H,[2,74]),t(H,[2,75]),t(H,[2,76]),t(H,[2,77]),t(H,[2,78]),t(H,[2,79]),t(H,[2,80]),t(s,[2,35]),t(u,[2,38]),t(u,[2,42]),t(u,[2,43]),t(u,[2,44]),{3:64,4:Q,5:j,6:ie,7:ne,8:le,9:he,10:K,11:X,12:te,13:J,14:se,15:ue,21:63},t(u,[2,53],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,49:[1,77],63:O,64:M,65:B,66:F,67:P}),t(u,[2,56],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,49:[1,78],63:O,64:M,65:B,66:F,67:P}),t(u,[2,57],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,58],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,59],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,60],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),{45:[1,79]},{44:[1,80]},t(H,[2,65]),t(H,[2,81]),t(H,[2,82]),t(H,[2,83]),{3:82,4:Q,5:j,6:ie,7:ne,8:le,9:he,10:K,11:X,12:te,13:J,14:se,15:ue,18:[1,81]},t(Z,[2,23]),t(Z,[2,1]),t(Z,[2,2]),t(Z,[2,3]),t(Z,[2,4]),t(Z,[2,5]),t(Z,[2,6]),t(Z,[2,7]),t(Z,[2,8]),t(Z,[2,9]),t(Z,[2,10]),t(Z,[2,11]),t(Z,[2,12]),t(u,[2,52],{58:31,43:83,4:f,5:d,10:p,12:m,13:g,14:y,60:L,61:R,63:O,64:M,65:B,66:F,67:P}),t(u,[2,55],{58:31,43:84,4:f,5:d,10:p,12:m,13:g,14:y,60:L,61:R,63:O,64:M,65:B,66:F,67:P}),{46:[1,85]},{45:[1,86]},{4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,16:89,17:He,18:$e,19:Re,20:Ie,22:88,23:87},t(Z,[2,24]),t(u,[2,51],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,54],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:B,66:F,67:P}),t(u,[2,47],{22:88,16:89,23:100,4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,17:He,18:$e,19:Re,20:Ie}),{46:[1,101]},t(u,[2,29],{10:be}),t(W,[2,27],{16:103,4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,17:He,18:$e,19:Re,20:Ie}),t(de,[2,25]),t(de,[2,13]),t(de,[2,14]),t(de,[2,15]),t(de,[2,16]),t(de,[2,17]),t(de,[2,18]),t(de,[2,19]),t(de,[2,20]),t(de,[2,21]),t(de,[2,22]),t(u,[2,49],{10:be}),t(u,[2,48],{22:88,16:89,23:104,4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,17:He,18:$e,19:Re,20:Ie}),{4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,16:89,17:He,18:$e,19:Re,20:Ie,22:105},t(de,[2,26]),t(u,[2,50],{10:be}),t(W,[2,28],{16:103,4:Se,5:ce,6:ae,8:Oe,11:ge,13:ze,17:He,18:$e,19:Re,20:Ie})],defaultActions:{8:[2,30],9:[2,31]},parseError:o(function(q,pe){if(pe.recoverable)this.trace(q);else{var ve=new Error(q);throw ve.hash=pe,ve}},"parseError"),parse:o(function(q){var pe=this,ve=[0],Pe=[],_e=[null],we=[],Ve=this.table,De="",qe=0,at=0,Rt=0,st=2,Ue=1,ct=we.slice.call(arguments,1),We=Object.create(this.lexer),ot={yy:{}};for(var Yt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Yt)&&(ot.yy[Yt]=this.yy[Yt]);We.setInput(q,ot.yy),ot.yy.lexer=We,ot.yy.parser=this,typeof We.yylloc>"u"&&(We.yylloc={});var bt=We.yylloc;we.push(bt);var Mt=We.options&&We.options.ranges;typeof ot.yy.parseError=="function"?this.parseError=ot.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function xt(Ce){ve.length=ve.length-2*Ce,_e.length=_e.length-Ce,we.length=we.length-Ce}o(xt,"popStack");function ut(){var Ce;return Ce=Pe.pop()||We.lex()||Ue,typeof Ce!="number"&&(Ce instanceof Array&&(Pe=Ce,Ce=Pe.pop()),Ce=pe.symbols_[Ce]||Ce),Ce}o(ut,"lex");for(var Et,ft,yt,nt,dn,Tt,On={},tn,_r,Dr,Pn;;){if(yt=ve[ve.length-1],this.defaultActions[yt]?nt=this.defaultActions[yt]:((Et===null||typeof Et>"u")&&(Et=ut()),nt=Ve[yt]&&Ve[yt][Et]),typeof nt>"u"||!nt.length||!nt[0]){var At="";Pn=[];for(tn in Ve[yt])this.terminals_[tn]&&tn>st&&Pn.push("'"+this.terminals_[tn]+"'");We.showPosition?At="Parse error on line "+(qe+1)+`:
1169 +`+We.showPosition()+`
1170 +Expecting `+Pn.join(", ")+", got '"+(this.terminals_[Et]||Et)+"'":At="Parse error on line "+(qe+1)+": Unexpected "+(Et==Ue?"end of input":"'"+(this.terminals_[Et]||Et)+"'"),this.parseError(At,{text:We.match,token:this.terminals_[Et]||Et,line:We.yylineno,loc:bt,expected:Pn})}if(nt[0]instanceof Array&&nt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+yt+", token: "+Et);switch(nt[0]){case 1:ve.push(Et),_e.push(We.yytext),we.push(We.yylloc),ve.push(nt[1]),Et=null,ft?(Et=ft,ft=null):(at=We.yyleng,De=We.yytext,qe=We.yylineno,bt=We.yylloc,Rt>0&&Rt--);break;case 2:if(_r=this.productions_[nt[1]][1],On.$=_e[_e.length-_r],On._$={first_line:we[we.length-(_r||1)].first_line,last_line:we[we.length-1].last_line,first_column:we[we.length-(_r||1)].first_column,last_column:we[we.length-1].last_column},Mt&&(On._$.range=[we[we.length-(_r||1)].range[0],we[we.length-1].range[1]]),Tt=this.performAction.apply(On,[De,at,qe,ot.yy,nt[1],_e,we].concat(ct)),typeof Tt<"u")return Tt;_r&&(ve=ve.slice(0,-1*_r*2),_e=_e.slice(0,-1*_r),we=we.slice(0,-1*_r)),ve.push(this.productions_[nt[1]][0]),_e.push(On.$),we.push(On._$),Dr=Ve[ve[ve.length-2]][ve[ve.length-1]],ve.push(Dr);break;case 3:return!0}}return!0},"parse")},oe=function(){var xe={EOF:1,parseError:o(function(pe,ve){if(this.yy.parser)this.yy.parser.parseError(pe,ve);else throw new Error(pe)},"parseError"),setInput:o(function(q,pe){return this.yy=pe||this.yy||{},this._input=q,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var q=this._input[0];this.yytext+=q,this.yyleng++,this.offset++,this.match+=q,this.matched+=q;var pe=q.match(/(?:\r\n?|\n).*/g);return pe?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),q},"input"),unput:o(function(q){var pe=q.length,ve=q.split(/(?:\r\n?|\n)/g);this._input=q+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-pe),this.offset-=pe;var Pe=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ve.length-1&&(this.yylineno-=ve.length-1);var _e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ve?(ve.length===Pe.length?this.yylloc.first_column:0)+Pe[Pe.length-ve.length].length-ve[0].length:this.yylloc.first_column-pe},this.options.ranges&&(this.yylloc.range=[_e[0],_e[0]+this.yyleng-pe]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
1171 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(q){this.unput(this.match.slice(q))},"less"),pastInput:o(function(){var q=this.matched.substr(0,this.matched.length-this.match.length);return(q.length>20?"...":"")+q.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var q=this.match;return q.length<20&&(q+=this._input.substr(0,20-q.length)),(q.substr(0,20)+(q.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var q=this.pastInput(),pe=new Array(q.length+1).join("-");return q+this.upcomingInput()+`
1172 +`+pe+"^"},"showPosition"),test_match:o(function(q,pe){var ve,Pe,_e;if(this.options.backtrack_lexer&&(_e={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(_e.yylloc.range=this.yylloc.range.slice(0))),Pe=q[0].match(/(?:\r\n?|\n).*/g),Pe&&(this.yylineno+=Pe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Pe?Pe[Pe.length-1].length-Pe[Pe.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+q[0].length},this.yytext+=q[0],this.match+=q[0],this.matches=q,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(q[0].length),this.matched+=q[0],ve=this.performAction.call(this,this.yy,this,pe,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ve)return ve;if(this._backtrack){for(var we in _e)this[we]=_e[we];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var q,pe,ve,Pe;this._more||(this.yytext="",this.match="");for(var _e=this._currentRules(),we=0;we<_e.length;we++)if(ve=this._input.match(this.rules[_e[we]]),ve&&(!pe||ve[0].length>pe[0].length)){if(pe=ve,Pe=we,this.options.backtrack_lexer){if(q=this.test_match(ve,_e[we]),q!==!1)return q;if(this._backtrack){pe=!1;continue}else return!1}else if(!this.options.flex)break}return pe?(q=this.test_match(pe,_e[Pe]),q!==!1?q:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
1173 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var pe=this.next();return pe||this.lex()},"lex"),begin:o(function(pe){this.conditionStack.push(pe)},"begin"),popState:o(function(){var pe=this.conditionStack.length-1;return pe>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(pe){return pe=this.conditionStack.length-1-Math.abs(pe||0),pe>=0?this.conditionStack[pe]:"INITIAL"},"topState"),pushState:o(function(pe){this.begin(pe)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(pe,ve,Pe,_e){var we=_e;switch(Pe){case 0:break;case 1:break;case 2:return 55;case 3:break;case 4:return this.begin("title"),35;break;case 5:return this.popState(),"title_value";break;case 6:return this.begin("acc_title"),37;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),39;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 48;case 14:return 50;case 15:return 49;case 16:return 51;case 17:return 52;case 18:return 53;case 19:return 54;case 20:return 25;case 21:this.begin("md_string");break;case 22:return"MD_STR";case 23:this.popState();break;case 24:this.begin("string");break;case 25:this.popState();break;case 26:return"STR";case 27:this.begin("class_name");break;case 28:return this.popState(),47;break;case 29:return this.begin("point_start"),44;break;case 30:return this.begin("point_x"),45;break;case 31:this.popState();break;case 32:this.popState(),this.begin("point_y");break;case 33:return this.popState(),46;break;case 34:return 28;case 35:return 4;case 36:return 11;case 37:return 64;case 38:return 10;case 39:return 65;case 40:return 65;case 41:return 14;case 42:return 13;case 43:return 67;case 44:return 66;case 45:return 12;case 46:return 8;case 47:return 5;case 48:return 18;case 49:return 56;case 50:return 63;case 51:return 57}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:classDef\b)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?::::)/i,/^(?:^\w+)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{class_name:{rules:[28],inclusive:!1},point_y:{rules:[33],inclusive:!1},point_x:{rules:[32],inclusive:!1},point_start:{rules:[30,31],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[22,23],inclusive:!1},string:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,21,24,27,29,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inclusive:!0}}};return xe}();re.lexer=oe;function V(){this.yy={}}return o(V,"Parser"),V.prototype=re,re.Parser=V,new V}();hO.parser=hO;uhe=hO});var ms,y6,fhe=N(()=>{"use strict";dr();Ya();vt();_y();ms=oh(),y6=class{constructor(){this.classes=new Map;this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}static{o(this,"QuadrantBuilder")}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:or.quadrantChart?.chartWidth||500,chartWidth:or.quadrantChart?.chartHeight||500,titlePadding:or.quadrantChart?.titlePadding||10,titleFontSize:or.quadrantChart?.titleFontSize||20,quadrantPadding:or.quadrantChart?.quadrantPadding||5,xAxisLabelPadding:or.quadrantChart?.xAxisLabelPadding||5,yAxisLabelPadding:or.quadrantChart?.yAxisLabelPadding||5,xAxisLabelFontSize:or.quadrantChart?.xAxisLabelFontSize||16,yAxisLabelFontSize:or.quadrantChart?.yAxisLabelFontSize||16,quadrantLabelFontSize:or.quadrantChart?.quadrantLabelFontSize||16,quadrantTextTopPadding:or.quadrantChart?.quadrantTextTopPadding||5,pointTextPadding:or.quadrantChart?.pointTextPadding||5,pointLabelFontSize:or.quadrantChart?.pointLabelFontSize||12,pointRadius:or.quadrantChart?.pointRadius||5,xAxisPosition:or.quadrantChart?.xAxisPosition||"top",yAxisPosition:or.quadrantChart?.yAxisPosition||"left",quadrantInternalBorderStrokeWidth:or.quadrantChart?.quadrantInternalBorderStrokeWidth||1,quadrantExternalBorderStrokeWidth:or.quadrantChart?.quadrantExternalBorderStrokeWidth||2}}getDefaultThemeConfig(){return{quadrant1Fill:ms.quadrant1Fill,quadrant2Fill:ms.quadrant2Fill,quadrant3Fill:ms.quadrant3Fill,quadrant4Fill:ms.quadrant4Fill,quadrant1TextFill:ms.quadrant1TextFill,quadrant2TextFill:ms.quadrant2TextFill,quadrant3TextFill:ms.quadrant3TextFill,quadrant4TextFill:ms.quadrant4TextFill,quadrantPointFill:ms.quadrantPointFill,quadrantPointTextFill:ms.quadrantPointTextFill,quadrantXAxisTextFill:ms.quadrantXAxisTextFill,quadrantYAxisTextFill:ms.quadrantYAxisTextFill,quadrantTitleFill:ms.quadrantTitleFill,quadrantInternalBorderStrokeFill:ms.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:ms.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),this.classes=new Map,Y.info("clear called")}setData(e){this.data={...this.data,...e}}addPoints(e){this.data.points=[...e,...this.data.points]}addClass(e,r){this.classes.set(e,r)}setConfig(e){Y.trace("setConfig called with: ",e),this.config={...this.config,...e}}setThemeConfig(e){Y.trace("setThemeConfig called with: ",e),this.themeConfig={...this.themeConfig,...e}}calculateSpace(e,r,n,i){let a=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,s={top:e==="top"&&r?a:0,bottom:e==="bottom"&&r?a:0},l=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,u={left:this.config.yAxisPosition==="left"&&n?l:0,right:this.config.yAxisPosition==="right"&&n?l:0},h=this.config.titleFontSize+this.config.titlePadding*2,f={top:i?h:0},d=this.config.quadrantPadding+u.left,p=this.config.quadrantPadding+s.top+f.top,m=this.config.chartWidth-this.config.quadrantPadding*2-u.left-u.right,g=this.config.chartHeight-this.config.quadrantPadding*2-s.top-s.bottom-f.top,y=m/2,v=g/2;return{xAxisSpace:s,yAxisSpace:u,titleSpace:f,quadrantSpace:{quadrantLeft:d,quadrantTop:p,quadrantWidth:m,quadrantHalfWidth:y,quadrantHeight:g,quadrantHalfHeight:v}}}getAxisLabels(e,r,n,i){let{quadrantSpace:a,titleSpace:s}=i,{quadrantHalfHeight:l,quadrantHeight:u,quadrantLeft:h,quadrantHalfWidth:f,quadrantTop:d,quadrantWidth:p}=a,m=!!this.data.xAxisRightText,g=!!this.data.yAxisTopText,y=[];return this.data.xAxisLeftText&&r&&y.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&r&&y.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+f+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&n&&y.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+u-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&n&&y.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+l-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),y}getQuadrants(e){let{quadrantSpace:r}=e,{quadrantHalfHeight:n,quadrantLeft:i,quadrantHalfWidth:a,quadrantTop:s}=r,l=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s,width:a,height:n,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i,y:s,width:a,height:n,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant4Fill}];for(let u of l)u.text.x=u.x+u.width/2,this.data.points.length===0?(u.text.y=u.y+u.height/2,u.text.horizontalPos="middle"):(u.text.y=u.y+this.config.quadrantTextTopPadding,u.text.horizontalPos="top");return l}getQuadrantPoints(e){let{quadrantSpace:r}=e,{quadrantHeight:n,quadrantLeft:i,quadrantTop:a,quadrantWidth:s}=r,l=gl().domain([0,1]).range([i,s+i]),u=gl().domain([0,1]).range([n+a,a]);return this.data.points.map(f=>{let d=this.classes.get(f.className);return d&&(f={...d,...f}),{x:l(f.x),y:u(f.y),fill:f.color??this.themeConfig.quadrantPointFill,radius:f.radius??this.config.pointRadius,text:{text:f.text,fill:this.themeConfig.quadrantPointTextFill,x:l(f.x),y:u(f.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0},strokeColor:f.strokeColor??this.themeConfig.quadrantPointFill,strokeWidth:f.strokeWidth??"0px"}})}getBorders(e){let r=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:n}=e,{quadrantHalfHeight:i,quadrantHeight:a,quadrantLeft:s,quadrantHalfWidth:l,quadrantTop:u,quadrantWidth:h}=n;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u,x2:s+h+r,y2:u},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s+h,y1:u+r,x2:s+h,y2:u+a-r},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u+a,x2:s+h+r,y2:u+a},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s,y1:u+r,x2:s,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+l,y1:u+r,x2:s+l,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+r,y1:u+i,x2:s+h-r,y2:u+i}]}getTitle(e){if(e)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){let e=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),r=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),n=this.config.showTitle&&!!this.data.titleText,i=this.data.points.length>0?"bottom":this.config.xAxisPosition,a=this.calculateSpace(i,e,r,n);return{points:this.getQuadrantPoints(a),quadrants:this.getQuadrants(a),axisLabels:this.getAxisLabels(i,e,r,a),borderLines:this.getBorders(a),title:this.getTitle(n)}}}});function fO(t){return!/^#?([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/.test(t)}function dhe(t){return!/^\d+$/.test(t)}function phe(t){return!/^\d+px$/.test(t)}var Ap,mhe=N(()=>{"use strict";Ap=class extends Error{static{o(this,"InvalidStyleError")}constructor(e,r,n){super(`value for ${e} ${r} is invalid, please use a valid ${n}`),this.name="InvalidStyleError"}};o(fO,"validateHexCode");o(dhe,"validateNumber");o(phe,"validateSizeInPixels")});function Xu(t){return Tr(t.trim(),pGe)}function mGe(t){ba.setData({quadrant1Text:Xu(t.text)})}function gGe(t){ba.setData({quadrant2Text:Xu(t.text)})}function yGe(t){ba.setData({quadrant3Text:Xu(t.text)})}function vGe(t){ba.setData({quadrant4Text:Xu(t.text)})}function xGe(t){ba.setData({xAxisLeftText:Xu(t.text)})}function bGe(t){ba.setData({xAxisRightText:Xu(t.text)})}function wGe(t){ba.setData({yAxisTopText:Xu(t.text)})}function TGe(t){ba.setData({yAxisBottomText:Xu(t.text)})}function dO(t){let e={};for(let r of t){let[n,i]=r.trim().split(/\s*:\s*/);if(n==="radius"){if(dhe(i))throw new Ap(n,i,"number");e.radius=parseInt(i)}else if(n==="color"){if(fO(i))throw new Ap(n,i,"hex code");e.color=i}else if(n==="stroke-color"){if(fO(i))throw new Ap(n,i,"hex code");e.strokeColor=i}else if(n==="stroke-width"){if(phe(i))throw new Ap(n,i,"number of pixels (eg. 10px)");e.strokeWidth=i}else throw new Error(`style named ${n} is not supported.`)}return e}function kGe(t,e,r,n,i){let a=dO(i);ba.addPoints([{x:r,y:n,text:Xu(t.text),className:e,...a}])}function EGe(t,e){ba.addClass(t,dO(e))}function SGe(t){ba.setConfig({chartWidth:t})}function CGe(t){ba.setConfig({chartHeight:t})}function AGe(){let t=me(),{themeVariables:e,quadrantChart:r}=t;return r&&ba.setConfig(r),ba.setThemeConfig({quadrant1Fill:e.quadrant1Fill,quadrant2Fill:e.quadrant2Fill,quadrant3Fill:e.quadrant3Fill,quadrant4Fill:e.quadrant4Fill,quadrant1TextFill:e.quadrant1TextFill,quadrant2TextFill:e.quadrant2TextFill,quadrant3TextFill:e.quadrant3TextFill,quadrant4TextFill:e.quadrant4TextFill,quadrantPointFill:e.quadrantPointFill,quadrantPointTextFill:e.quadrantPointTextFill,quadrantXAxisTextFill:e.quadrantXAxisTextFill,quadrantYAxisTextFill:e.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:e.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:e.quadrantInternalBorderStrokeFill,quadrantTitleFill:e.quadrantTitleFill}),ba.setData({titleText:Ir()}),ba.build()}var pGe,ba,_Ge,ghe,yhe=N(()=>{"use strict";zt();gr();mi();fhe();mhe();pGe=me();o(Xu,"textSanitizer");ba=new y6;o(mGe,"setQuadrant1Text");o(gGe,"setQuadrant2Text");o(yGe,"setQuadrant3Text");o(vGe,"setQuadrant4Text");o(xGe,"setXAxisLeftText");o(bGe,"setXAxisRightText");o(wGe,"setYAxisTopText");o(TGe,"setYAxisBottomText");o(dO,"parseStyles");o(kGe,"addPoint");o(EGe,"addClass");o(SGe,"setWidth");o(CGe,"setHeight");o(AGe,"getQuadrantData");_Ge=o(function(){ba.clear(),Ar()},"clear"),ghe={setWidth:SGe,setHeight:CGe,setQuadrant1Text:mGe,setQuadrant2Text:gGe,setQuadrant3Text:yGe,setQuadrant4Text:vGe,setXAxisLeftText:xGe,setXAxisRightText:bGe,setYAxisTopText:wGe,setYAxisBottomText:TGe,parseStyles:dO,addPoint:kGe,addClass:EGe,getQuadrantData:AGe,clear:_Ge,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr}});var DGe,vhe,xhe=N(()=>{"use strict";dr();zt();vt();Ei();DGe=o((t,e,r,n)=>{function i(S){return S==="top"?"hanging":"middle"}o(i,"getDominantBaseLine");function a(S){return S==="left"?"start":"middle"}o(a,"getTextAnchor");function s(S){return`translate(${S.x}, ${S.y}) rotate(${S.rotation||0})`}o(s,"getTransformation");let l=me();Y.debug(`Rendering quadrant chart
1174 +`+t);let u=l.securityLevel,h;u==="sandbox"&&(h=Ge("#i"+e));let d=(u==="sandbox"?Ge(h.nodes()[0].contentDocument.body):Ge("body")).select(`[id="${e}"]`),p=d.append("g").attr("class","main"),m=l.quadrantChart?.chartWidth??500,g=l.quadrantChart?.chartHeight??500;vn(d,g,m,l.quadrantChart?.useMaxWidth??!0),d.attr("viewBox","0 0 "+m+" "+g),n.db.setHeight(g),n.db.setWidth(m);let y=n.db.getQuadrantData(),v=p.append("g").attr("class","quadrants"),x=p.append("g").attr("class","border"),b=p.append("g").attr("class","data-points"),w=p.append("g").attr("class","labels"),C=p.append("g").attr("class","title");y.title&&C.append("text").attr("x",0).attr("y",0).attr("fill",y.title.fill).attr("font-size",y.title.fontSize).attr("dominant-baseline",i(y.title.horizontalPos)).attr("text-anchor",a(y.title.verticalPos)).attr("transform",s(y.title)).text(y.title.text),y.borderLines&&x.selectAll("line").data(y.borderLines).enter().append("line").attr("x1",S=>S.x1).attr("y1",S=>S.y1).attr("x2",S=>S.x2).attr("y2",S=>S.y2).style("stroke",S=>S.strokeFill).style("stroke-width",S=>S.strokeWidth);let T=v.selectAll("g.quadrant").data(y.quadrants).enter().append("g").attr("class","quadrant");T.append("rect").attr("x",S=>S.x).attr("y",S=>S.y).attr("width",S=>S.width).attr("height",S=>S.height).attr("fill",S=>S.fill),T.append("text").attr("x",0).attr("y",0).attr("fill",S=>S.text.fill).attr("font-size",S=>S.text.fontSize).attr("dominant-baseline",S=>i(S.text.horizontalPos)).attr("text-anchor",S=>a(S.text.verticalPos)).attr("transform",S=>s(S.text)).text(S=>S.text.text),w.selectAll("g.label").data(y.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(S=>S.text).attr("fill",S=>S.fill).attr("font-size",S=>S.fontSize).attr("dominant-baseline",S=>i(S.horizontalPos)).attr("text-anchor",S=>a(S.verticalPos)).attr("transform",S=>s(S));let A=b.selectAll("g.data-point").data(y.points).enter().append("g").attr("class","data-point");A.append("circle").attr("cx",S=>S.x).attr("cy",S=>S.y).attr("r",S=>S.radius).attr("fill",S=>S.fill).attr("stroke",S=>S.strokeColor).attr("stroke-width",S=>S.strokeWidth),A.append("text").attr("x",0).attr("y",0).text(S=>S.text.text).attr("fill",S=>S.text.fill).attr("font-size",S=>S.text.fontSize).attr("dominant-baseline",S=>i(S.text.horizontalPos)).attr("text-anchor",S=>a(S.text.verticalPos)).attr("transform",S=>s(S.text))},"draw"),vhe={draw:DGe}});var bhe={};hr(bhe,{diagram:()=>LGe});var LGe,whe=N(()=>{"use strict";hhe();yhe();xhe();LGe={parser:uhe,db:ghe,renderer:vhe,styles:o(()=>"","styles")}});var pO,Ehe,She=N(()=>{"use strict";pO=function(){var t=o(function(O,M,B,F){for(B=B||{},F=O.length;F--;B[O[F]]=M);return B},"o"),e=[1,10,12,14,16,18,19,21,23],r=[2,6],n=[1,3],i=[1,5],a=[1,6],s=[1,7],l=[1,5,10,12,14,16,18,19,21,23,34,35,36],u=[1,25],h=[1,26],f=[1,28],d=[1,29],p=[1,30],m=[1,31],g=[1,32],y=[1,33],v=[1,34],x=[1,35],b=[1,36],w=[1,37],C=[1,43],T=[1,42],E=[1,47],A=[1,50],S=[1,10,12,14,16,18,19,21,23,34,35,36],_=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],I=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],D=[1,64],k={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:o(function(M,B,F,P,z,$,H){var Q=$.length-1;switch(z){case 5:P.setOrientation($[Q]);break;case 9:P.setDiagramTitle($[Q].text.trim());break;case 12:P.setLineData({text:"",type:"text"},$[Q]);break;case 13:P.setLineData($[Q-1],$[Q]);break;case 14:P.setBarData({text:"",type:"text"},$[Q]);break;case 15:P.setBarData($[Q-1],$[Q]);break;case 16:this.$=$[Q].trim(),P.setAccTitle(this.$);break;case 17:case 18:this.$=$[Q].trim(),P.setAccDescription(this.$);break;case 19:this.$=$[Q-1];break;case 20:this.$=[Number($[Q-2]),...$[Q]];break;case 21:this.$=[Number($[Q])];break;case 22:P.setXAxisTitle($[Q]);break;case 23:P.setXAxisTitle($[Q-1]);break;case 24:P.setXAxisTitle({type:"text",text:""});break;case 25:P.setXAxisBand($[Q]);break;case 26:P.setXAxisRangeData(Number($[Q-2]),Number($[Q]));break;case 27:this.$=$[Q-1];break;case 28:this.$=[$[Q-2],...$[Q]];break;case 29:this.$=[$[Q]];break;case 30:P.setYAxisTitle($[Q]);break;case 31:P.setYAxisTitle($[Q-1]);break;case 32:P.setYAxisTitle({type:"text",text:""});break;case 33:P.setYAxisRangeData(Number($[Q-2]),Number($[Q]));break;case 37:this.$={text:$[Q],type:"text"};break;case 38:this.$={text:$[Q],type:"text"};break;case 39:this.$={text:$[Q],type:"markdown"};break;case 40:this.$=$[Q];break;case 41:this.$=$[Q-1]+""+$[Q];break}},"anonymous"),table:[t(e,r,{3:1,4:2,7:4,5:n,34:i,35:a,36:s}),{1:[3]},t(e,r,{4:2,7:4,3:8,5:n,34:i,35:a,36:s}),t(e,r,{4:2,7:4,6:9,3:10,5:n,8:[1,11],34:i,35:a,36:s}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},t(l,[2,34]),t(l,[2,35]),t(l,[2,36]),{1:[2,1]},t(e,r,{4:2,7:4,3:21,5:n,34:i,35:a,36:s}),{1:[2,3]},t(l,[2,5]),t(e,[2,7],{4:22,34:i,35:a,36:s}),{11:23,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:39,13:38,24:C,27:T,29:40,30:41,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:45,15:44,27:E,33:46,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:49,17:48,24:A,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:52,17:51,24:A,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{20:[1,53]},{22:[1,54]},t(S,[2,18]),{1:[2,2]},t(S,[2,8]),t(S,[2,9]),t(_,[2,37],{40:55,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w}),t(_,[2,38]),t(_,[2,39]),t(I,[2,40]),t(I,[2,42]),t(I,[2,43]),t(I,[2,44]),t(I,[2,45]),t(I,[2,46]),t(I,[2,47]),t(I,[2,48]),t(I,[2,49]),t(I,[2,50]),t(I,[2,51]),t(S,[2,10]),t(S,[2,22],{30:41,29:56,24:C,27:T}),t(S,[2,24]),t(S,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},t(S,[2,11]),t(S,[2,30],{33:60,27:E}),t(S,[2,32]),{31:[1,61]},t(S,[2,12]),{17:62,24:A},{25:63,27:D},t(S,[2,14]),{17:65,24:A},t(S,[2,16]),t(S,[2,17]),t(I,[2,41]),t(S,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},t(S,[2,31]),{27:[1,69]},t(S,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},t(S,[2,15]),t(S,[2,26]),t(S,[2,27]),{11:59,32:72,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},t(S,[2,33]),t(S,[2,19]),{25:73,27:D},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:o(function(M,B){if(B.recoverable)this.trace(M);else{var F=new Error(M);throw F.hash=B,F}},"parseError"),parse:o(function(M){var B=this,F=[0],P=[],z=[null],$=[],H=this.table,Q="",j=0,ie=0,ne=0,le=2,he=1,K=$.slice.call(arguments,1),X=Object.create(this.lexer),te={yy:{}};for(var J in this.yy)Object.prototype.hasOwnProperty.call(this.yy,J)&&(te.yy[J]=this.yy[J]);X.setInput(M,te.yy),te.yy.lexer=X,te.yy.parser=this,typeof X.yylloc>"u"&&(X.yylloc={});var se=X.yylloc;$.push(se);var ue=X.options&&X.options.ranges;typeof te.yy.parseError=="function"?this.parseError=te.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Z(re){F.length=F.length-2*re,z.length=z.length-re,$.length=$.length-re}o(Z,"popStack");function Se(){var re;return re=P.pop()||X.lex()||he,typeof re!="number"&&(re instanceof Array&&(P=re,re=P.pop()),re=B.symbols_[re]||re),re}o(Se,"lex");for(var ce,ae,Oe,ge,ze,He,$e={},Re,Ie,be,W;;){if(Oe=F[F.length-1],this.defaultActions[Oe]?ge=this.defaultActions[Oe]:((ce===null||typeof ce>"u")&&(ce=Se()),ge=H[Oe]&&H[Oe][ce]),typeof ge>"u"||!ge.length||!ge[0]){var de="";W=[];for(Re in H[Oe])this.terminals_[Re]&&Re>le&&W.push("'"+this.terminals_[Re]+"'");X.showPosition?de="Parse error on line "+(j+1)+`:
1175 +`+X.showPosition()+`
1176 +Expecting `+W.join(", ")+", got '"+(this.terminals_[ce]||ce)+"'":de="Parse error on line "+(j+1)+": Unexpected "+(ce==he?"end of input":"'"+(this.terminals_[ce]||ce)+"'"),this.parseError(de,{text:X.match,token:this.terminals_[ce]||ce,line:X.yylineno,loc:se,expected:W})}if(ge[0]instanceof Array&&ge.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Oe+", token: "+ce);switch(ge[0]){case 1:F.push(ce),z.push(X.yytext),$.push(X.yylloc),F.push(ge[1]),ce=null,ae?(ce=ae,ae=null):(ie=X.yyleng,Q=X.yytext,j=X.yylineno,se=X.yylloc,ne>0&&ne--);break;case 2:if(Ie=this.productions_[ge[1]][1],$e.$=z[z.length-Ie],$e._$={first_line:$[$.length-(Ie||1)].first_line,last_line:$[$.length-1].last_line,first_column:$[$.length-(Ie||1)].first_column,last_column:$[$.length-1].last_column},ue&&($e._$.range=[$[$.length-(Ie||1)].range[0],$[$.length-1].range[1]]),He=this.performAction.apply($e,[Q,ie,j,te.yy,ge[1],z,$].concat(K)),typeof He<"u")return He;Ie&&(F=F.slice(0,-1*Ie*2),z=z.slice(0,-1*Ie),$=$.slice(0,-1*Ie)),F.push(this.productions_[ge[1]][0]),z.push($e.$),$.push($e._$),be=H[F[F.length-2]][F[F.length-1]],F.push(be);break;case 3:return!0}}return!0},"parse")},L=function(){var O={EOF:1,parseError:o(function(B,F){if(this.yy.parser)this.yy.parser.parseError(B,F);else throw new Error(B)},"parseError"),setInput:o(function(M,B){return this.yy=B||this.yy||{},this._input=M,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var M=this._input[0];this.yytext+=M,this.yyleng++,this.offset++,this.match+=M,this.matched+=M;var B=M.match(/(?:\r\n?|\n).*/g);return B?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),M},"input"),unput:o(function(M){var B=M.length,F=M.split(/(?:\r\n?|\n)/g);this._input=M+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-B),this.offset-=B;var P=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),F.length-1&&(this.yylineno-=F.length-1);var z=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:F?(F.length===P.length?this.yylloc.first_column:0)+P[P.length-F.length].length-F[0].length:this.yylloc.first_column-B},this.options.ranges&&(this.yylloc.range=[z[0],z[0]+this.yyleng-B]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
1177 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(M){this.unput(this.match.slice(M))},"less"),pastInput:o(function(){var M=this.matched.substr(0,this.matched.length-this.match.length);return(M.length>20?"...":"")+M.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var M=this.match;return M.length<20&&(M+=this._input.substr(0,20-M.length)),(M.substr(0,20)+(M.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var M=this.pastInput(),B=new Array(M.length+1).join("-");return M+this.upcomingInput()+`
1178 +`+B+"^"},"showPosition"),test_match:o(function(M,B){var F,P,z;if(this.options.backtrack_lexer&&(z={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(z.yylloc.range=this.yylloc.range.slice(0))),P=M[0].match(/(?:\r\n?|\n).*/g),P&&(this.yylineno+=P.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:P?P[P.length-1].length-P[P.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+M[0].length},this.yytext+=M[0],this.match+=M[0],this.matches=M,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(M[0].length),this.matched+=M[0],F=this.performAction.call(this,this.yy,this,B,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),F)return F;if(this._backtrack){for(var $ in z)this[$]=z[$];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var M,B,F,P;this._more||(this.yytext="",this.match="");for(var z=this._currentRules(),$=0;$<z.length;$++)if(F=this._input.match(this.rules[z[$]]),F&&(!B||F[0].length>B[0].length)){if(B=F,P=$,this.options.backtrack_lexer){if(M=this.test_match(F,z[$]),M!==!1)return M;if(this._backtrack){B=!1;continue}else return!1}else if(!this.options.flex)break}return B?(M=this.test_match(B,z[P]),M!==!1?M:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
1179 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var B=this.next();return B||this.lex()},"lex"),begin:o(function(B){this.conditionStack.push(B)},"begin"),popState:o(function(){var B=this.conditionStack.length-1;return B>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(B){return B=this.conditionStack.length-1-Math.abs(B||0),B>=0?this.conditionStack[B]:"INITIAL"},"topState"),pushState:o(function(B){this.begin(B)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(B,F,P,z){var $=z;switch(P){case 0:break;case 1:break;case 2:return this.popState(),34;break;case 3:return this.popState(),34;break;case 4:return 34;case 5:break;case 6:return 10;case 7:return this.pushState("acc_title"),19;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.pushState("acc_descr"),21;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.pushState("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 8;case 16:return this.pushState("axis_data"),"X_AXIS";break;case 17:return this.pushState("axis_data"),"Y_AXIS";break;case 18:return this.pushState("axis_band_data"),24;break;case 19:return 31;case 20:return this.pushState("data"),16;break;case 21:return this.pushState("data"),18;break;case 22:return this.pushState("data_inner"),24;break;case 23:return 27;case 24:return this.popState(),26;break;case 25:this.popState();break;case 26:this.pushState("string");break;case 27:this.popState();break;case 28:return"STR";case 29:return 24;case 30:return 26;case 31:return 43;case 32:return"COLON";case 33:return 44;case 34:return 28;case 35:return 45;case 36:return 46;case 37:return 48;case 38:return 50;case 39:return 47;case 40:return 41;case 41:return 49;case 42:return 42;case 43:break;case 44:return 35;case 45:return 36}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n<md_string>\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n<md_string>\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,20,21,22,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,23,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[27,28],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0}}};return O}();k.lexer=L;function R(){this.yy={}}return o(R,"Parser"),R.prototype=k,k.Parser=R,new R}();pO.parser=pO;Ehe=pO});function mO(t){return t.type==="bar"}function v6(t){return t.type==="band"}function S1(t){return t.type==="linear"}var x6=N(()=>{"use strict";o(mO,"isBarPlot");o(v6,"isBandAxisData");o(S1,"isLinearAxisData")});var C1,gO=N(()=>{"use strict";to();C1=class{constructor(e){this.parentGroup=e}static{o(this,"TextDimensionCalculatorWithFont")}getMaxDimension(e,r){if(!this.parentGroup)return{width:e.reduce((a,s)=>Math.max(s.length,a),0)*r,height:r};let n={width:0,height:0},i=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",r);for(let a of e){let s=sK(i,1,a),l=s?s.width:a.length*r,u=s?s.height:r;n.width=Math.max(n.width,l),n.height=Math.max(n.height,u)}return i.remove(),n}}});var A1,yO=N(()=>{"use strict";A1=class{constructor(e,r,n,i){this.axisConfig=e;this.title=r;this.textDimensionCalculator=n;this.axisThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0};this.axisPosition="left";this.showTitle=!1;this.showLabel=!1;this.showTick=!1;this.showAxisLine=!1;this.outerPadding=0;this.titleTextHeight=0;this.labelTextHeight=0;this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}static{o(this,"BaseAxis")}setRange(e){this.range=e,this.axisPosition==="left"||this.axisPosition==="right"?this.boundingRect.height=e[1]-e[0]:this.boundingRect.width=e[1]-e[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(e){this.axisPosition=e,this.setRange(this.range)}getTickDistance(){let e=this.getRange();return Math.abs(e[0]-e[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map(e=>e.toString()),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){.7*this.getTickDistance()>this.outerPadding*2&&(this.outerPadding=Math.floor(.7*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(e){let r=e.height;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.width;this.outerPadding=Math.min(n.width/2,i);let a=n.height+this.axisConfig.labelPadding*2;this.labelTextHeight=n.height,a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width,this.boundingRect.height=e.height-r}calculateSpaceIfDrawnVertical(e){let r=e.width;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.height;this.outerPadding=Math.min(n.height/2,i);let a=n.width+this.axisConfig.labelPadding*2;a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width-r,this.boundingRect.height=e.height}calculateSpace(e){return this.axisPosition==="left"||this.axisPosition==="right"?this.calculateSpaceIfDrawnVertical(e):this.calculateSpaceIfDrawnHorizontally(e),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}getDrawableElementsForLeftAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${r},${this.boundingRect.y} L ${r},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(r),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"}))}),this.showTick){let r=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${r},${this.getScaleValue(n)} L ${r-this.axisConfig.tickLength},${this.getScaleValue(n)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForBottomAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r} L ${this.getScaleValue(n)},${r+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForTopAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+this.axisConfig.titlePadding*2:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y;e.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(n)},${r+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElements(){if(this.axisPosition==="left")return this.getDrawableElementsForLeftAxis();if(this.axisPosition==="right")throw Error("Drawing of right axis is not implemented");return this.axisPosition==="bottom"?this.getDrawableElementsForBottomAxis():this.axisPosition==="top"?this.getDrawableElementsForTopAxis():[]}}});var b6,Che=N(()=>{"use strict";dr();vt();yO();b6=class extends A1{static{o(this,"BandAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.categories=n,this.scale=L0().domain(this.categories).range(this.getRange())}setRange(e){super.setRange(e)}recalculateScale(){this.scale=L0().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),Y.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(e){return this.scale(e)??this.getRange()[0]}}});var w6,Ahe=N(()=>{"use strict";dr();yO();w6=class extends A1{static{o(this,"LinearAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.domain=n,this.scale=gl().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){let e=[...this.domain];this.axisPosition==="left"&&e.reverse(),this.scale=gl().domain(e).range(this.getRange())}getScaleValue(e){return this.scale(e)}}});function vO(t,e,r,n){let i=new C1(n);return v6(t)?new b6(e,r,t.categories,t.title,i):new w6(e,r,[t.min,t.max],t.title,i)}var _he=N(()=>{"use strict";x6();gO();Che();Ahe();o(vO,"getAxis")});function Dhe(t,e,r,n){let i=new C1(n);return new xO(i,t,e,r)}var xO,Lhe=N(()=>{"use strict";gO();xO=class{constructor(e,r,n,i){this.textDimensionCalculator=e;this.chartConfig=r;this.chartData=n;this.chartThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}static{o(this,"ChartTitle")}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){let r=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),n=Math.max(r.width,e.width),i=r.height+2*this.chartConfig.titlePadding;return r.width<=n&&r.height<=i&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=n,this.boundingRect.height=i,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){let e=[];return this.showChartTitle&&e.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),e}};o(Dhe,"getChartTitleComponent")});var T6,Rhe=N(()=>{"use strict";dr();T6=class{constructor(e,r,n,i,a){this.plotData=e;this.xAxis=r;this.yAxis=n;this.orientation=i;this.plotIndex=a}static{o(this,"LinePlot")}getDrawableElement(){let e=this.plotData.data.map(n=>[this.xAxis.getScaleValue(n[0]),this.yAxis.getScaleValue(n[1])]),r;return this.orientation==="horizontal"?r=wl().y(n=>n[0]).x(n=>n[1])(e):r=wl().x(n=>n[0]).y(n=>n[1])(e),r?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:r,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}});var k6,Nhe=N(()=>{"use strict";k6=class{constructor(e,r,n,i,a,s){this.barData=e;this.boundingRect=r;this.xAxis=n;this.yAxis=i;this.orientation=a;this.plotIndex=s}static{o(this,"BarPlot")}getDrawableElement(){let e=this.barData.data.map(a=>[this.xAxis.getScaleValue(a[0]),this.yAxis.getScaleValue(a[1])]),n=Math.min(this.xAxis.getAxisOuterPadding()*2,this.xAxis.getTickDistance())*(1-.05),i=n/2;return this.orientation==="horizontal"?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:this.boundingRect.x,y:a[0]-i,height:n,width:a[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:a[0]-i,y:a[1],width:n,height:this.boundingRect.y+this.boundingRect.height-a[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]}}});function Mhe(t,e,r){return new bO(t,e,r)}var bO,Ihe=N(()=>{"use strict";Rhe();Nhe();bO=class{constructor(e,r,n){this.chartConfig=e;this.chartData=r;this.chartThemeConfig=n;this.boundingRect={x:0,y:0,width:0,height:0}}static{o(this,"BasePlot")}setAxes(e,r){this.xAxis=e,this.yAxis=r}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){return this.boundingRect.width=e.width,this.boundingRect.height=e.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!(this.xAxis&&this.yAxis))throw Error("Axes must be passed to render Plots");let e=[];for(let[r,n]of this.chartData.plots.entries())switch(n.type){case"line":{let i=new T6(n,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break;case"bar":{let i=new k6(n,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break}return e}};o(Mhe,"getPlotComponent")});var E6,Ohe=N(()=>{"use strict";_he();Lhe();Ihe();x6();E6=class{constructor(e,r,n,i){this.chartConfig=e;this.chartData=r;this.componentStore={title:Dhe(e,r,n,i),plot:Mhe(e,r,n),xAxis:vO(r.xAxis,e.xAxis,{titleColor:n.xAxisTitleColor,labelColor:n.xAxisLabelColor,tickColor:n.xAxisTickColor,axisLineColor:n.xAxisLineColor},i),yAxis:vO(r.yAxis,e.yAxis,{titleColor:n.yAxisTitleColor,labelColor:n.yAxisLabelColor,tickColor:n.yAxisTickColor,axisLineColor:n.yAxisLineColor},i)}}static{o(this,"Orchestrator")}calculateVerticalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),s=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),l=this.componentStore.plot.calculateSpace({width:a,height:s});e-=l.width,r-=l.height,l=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),i=l.height,r-=l.height,this.componentStore.xAxis.setAxisPosition("bottom"),l=this.componentStore.xAxis.calculateSpace({width:e,height:r}),r-=l.height,this.componentStore.yAxis.setAxisPosition("left"),l=this.componentStore.yAxis.calculateSpace({width:e,height:r}),n=l.width,e-=l.width,e>0&&(a+=e,e=0),r>0&&(s+=r,r=0),this.componentStore.plot.calculateSpace({width:a,height:s}),this.componentStore.plot.setBoundingBoxXY({x:n,y:i}),this.componentStore.xAxis.setRange([n,n+a]),this.componentStore.xAxis.setBoundingBoxXY({x:n,y:i+s}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:i}),this.chartData.plots.some(u=>mO(u))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=0,s=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),l=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),u=this.componentStore.plot.calculateSpace({width:s,height:l});e-=u.width,r-=u.height,u=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),n=u.height,r-=u.height,this.componentStore.xAxis.setAxisPosition("left"),u=this.componentStore.xAxis.calculateSpace({width:e,height:r}),e-=u.width,i=u.width,this.componentStore.yAxis.setAxisPosition("top"),u=this.componentStore.yAxis.calculateSpace({width:e,height:r}),r-=u.height,a=n+u.height,e>0&&(s+=e,e=0),r>0&&(l+=r,r=0),this.componentStore.plot.calculateSpace({width:s,height:l}),this.componentStore.plot.setBoundingBoxXY({x:i,y:a}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:i,y:n}),this.componentStore.xAxis.setRange([a,a+l]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:a}),this.chartData.plots.some(h=>mO(h))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){this.chartConfig.chartOrientation==="horizontal"?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();let e=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(let r of Object.values(this.componentStore))e.push(...r.getDrawableElements());return e}}});var S6,Phe=N(()=>{"use strict";Ohe();S6=class{static{o(this,"XYChartBuilder")}static build(e,r,n,i){return new E6(e,r,n,i).getDrawableElement()}}});function Fhe(){let t=oh(),e=cr();return Fi(t.xyChart,e.themeVariables.xyChart)}function $he(){let t=cr();return Fi(or.xyChart,t.xyChart)}function zhe(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function kO(t){let e=cr();return Tr(t.trim(),e)}function IGe(t){Bhe=t}function OGe(t){t==="horizontal"?bb.chartOrientation="horizontal":bb.chartOrientation="vertical"}function PGe(t){fn.xAxis.title=kO(t.text)}function Ghe(t,e){fn.xAxis={type:"linear",title:fn.xAxis.title,min:t,max:e},C6=!0}function BGe(t){fn.xAxis={type:"band",title:fn.xAxis.title,categories:t.map(e=>kO(e.text))},C6=!0}function FGe(t){fn.yAxis.title=kO(t.text)}function $Ge(t,e){fn.yAxis={type:"linear",title:fn.yAxis.title,min:t,max:e},TO=!0}function zGe(t){let e=Math.min(...t),r=Math.max(...t),n=S1(fn.yAxis)?fn.yAxis.min:1/0,i=S1(fn.yAxis)?fn.yAxis.max:-1/0;fn.yAxis={type:"linear",title:fn.yAxis.title,min:Math.min(n,e),max:Math.max(i,r)}}function Vhe(t){let e=[];if(t.length===0)return e;if(!C6){let r=S1(fn.xAxis)?fn.xAxis.min:1/0,n=S1(fn.xAxis)?fn.xAxis.max:-1/0;Ghe(Math.min(r,1),Math.max(n,t.length))}if(TO||zGe(t),v6(fn.xAxis)&&(e=fn.xAxis.categories.map((r,n)=>[r,t[n]])),S1(fn.xAxis)){let r=fn.xAxis.min,n=fn.xAxis.max,i=(n-r)/(t.length-1),a=[];for(let s=r;s<=n;s+=i)a.push(`${s}`);e=a.map((s,l)=>[s,t[l]])}return e}function Uhe(t){return wO[t===0?0:t%wO.length]}function GGe(t,e){let r=Vhe(e);fn.plots.push({type:"line",strokeFill:Uhe(xb),strokeWidth:2,data:r}),xb++}function VGe(t,e){let r=Vhe(e);fn.plots.push({type:"bar",fill:Uhe(xb),data:r}),xb++}function UGe(){if(fn.plots.length===0)throw Error("No Plot to render, please provide a plot with some data");return fn.title=Ir(),S6.build(bb,fn,wb,Bhe)}function HGe(){return wb}function WGe(){return bb}var xb,Bhe,bb,wb,fn,wO,C6,TO,qGe,Hhe,Whe=N(()=>{"use strict";ji();Ya();_y();ir();gr();mi();Phe();x6();xb=0,bb=$he(),wb=Fhe(),fn=zhe(),wO=wb.plotColorPalette.split(",").map(t=>t.trim()),C6=!1,TO=!1;o(Fhe,"getChartDefaultThemeConfig");o($he,"getChartDefaultConfig");o(zhe,"getChartDefaultData");o(kO,"textSanitizer");o(IGe,"setTmpSVGG");o(OGe,"setOrientation");o(PGe,"setXAxisTitle");o(Ghe,"setXAxisRangeData");o(BGe,"setXAxisBand");o(FGe,"setYAxisTitle");o($Ge,"setYAxisRangeData");o(zGe,"setYAxisRangeFromPlotData");o(Vhe,"transformDataWithoutCategory");o(Uhe,"getPlotColorFromPalette");o(GGe,"setLineData");o(VGe,"setBarData");o(UGe,"getDrawableElem");o(HGe,"getChartThemeConfig");o(WGe,"getChartConfig");qGe=o(function(){Ar(),xb=0,bb=$he(),fn=zhe(),wb=Fhe(),wO=wb.plotColorPalette.split(",").map(t=>t.trim()),C6=!1,TO=!1},"clear"),Hhe={getDrawableElem:UGe,clear:qGe,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr,setOrientation:OGe,setXAxisTitle:PGe,setXAxisRangeData:Ghe,setXAxisBand:BGe,setYAxisTitle:FGe,setYAxisRangeData:$Ge,setLineData:GGe,setBarData:VGe,setTmpSVGG:IGe,getChartThemeConfig:HGe,getChartConfig:WGe}});var YGe,qhe,Yhe=N(()=>{"use strict";vt();Vc();Ei();YGe=o((t,e,r,n)=>{let i=n.db,a=i.getChartThemeConfig(),s=i.getChartConfig();function l(v){return v==="top"?"text-before-edge":"middle"}o(l,"getDominantBaseLine");function u(v){return v==="left"?"start":v==="right"?"end":"middle"}o(u,"getTextAnchor");function h(v){return`translate(${v.x}, ${v.y}) rotate(${v.rotation||0})`}o(h,"getTextTransformation"),Y.debug(`Rendering xychart chart
1180 +`+t);let f=sa(e),d=f.append("g").attr("class","main"),p=d.append("rect").attr("width",s.width).attr("height",s.height).attr("class","background");vn(f,s.height,s.width,!0),f.attr("viewBox",`0 0 ${s.width} ${s.height}`),p.attr("fill",a.backgroundColor),i.setTmpSVGG(f.append("g").attr("class","mermaid-tmp-group"));let m=i.getDrawableElem(),g={};function y(v){let x=d,b="";for(let[w]of v.entries()){let C=d;w>0&&g[b]&&(C=g[b]),b+=v[w],x=g[b],x||(x=g[b]=C.append("g").attr("class",v[w]))}return x}o(y,"getGroup");for(let v of m){if(v.data.length===0)continue;let x=y(v.groupTexts);switch(v.type){case"rect":x.selectAll("rect").data(v.data).enter().append("rect").attr("x",b=>b.x).attr("y",b=>b.y).attr("width",b=>b.width).attr("height",b=>b.height).attr("fill",b=>b.fill).attr("stroke",b=>b.strokeFill).attr("stroke-width",b=>b.strokeWidth);break;case"text":x.selectAll("text").data(v.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",b=>b.fill).attr("font-size",b=>b.fontSize).attr("dominant-baseline",b=>l(b.verticalPos)).attr("text-anchor",b=>u(b.horizontalPos)).attr("transform",b=>h(b)).text(b=>b.text);break;case"path":x.selectAll("path").data(v.data).enter().append("path").attr("d",b=>b.path).attr("fill",b=>b.fill?b.fill:"none").attr("stroke",b=>b.strokeFill).attr("stroke-width",b=>b.strokeWidth);break}}},"draw"),qhe={draw:YGe}});var Xhe={};hr(Xhe,{diagram:()=>XGe});var XGe,jhe=N(()=>{"use strict";She();Whe();Yhe();XGe={parser:Ehe,db:Hhe,renderer:qhe}});var EO,Zhe,Jhe=N(()=>{"use strict";EO=function(){var t=o(function(re,oe,V,xe){for(V=V||{},xe=re.length;xe--;V[re[xe]]=oe);return V},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[5,6,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],s=[1,22],l=[2,7],u=[1,26],h=[1,27],f=[1,28],d=[1,29],p=[1,33],m=[1,34],g=[1,35],y=[1,36],v=[1,37],x=[1,38],b=[1,24],w=[1,31],C=[1,32],T=[1,30],E=[1,39],A=[1,40],S=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],_=[1,61],I=[89,90],D=[5,8,9,11,13,21,22,23,24,27,29,41,42,43,44,45,46,54,61,63,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],k=[27,29],L=[1,70],R=[1,71],O=[1,72],M=[1,73],B=[1,74],F=[1,75],P=[1,76],z=[1,83],$=[1,80],H=[1,84],Q=[1,85],j=[1,86],ie=[1,87],ne=[1,88],le=[1,89],he=[1,90],K=[1,91],X=[1,92],te=[5,8,9,11,13,21,22,23,24,27,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],J=[63,64],se=[1,101],ue=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,76,77,89,90],Z=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],Se=[1,110],ce=[1,106],ae=[1,107],Oe=[1,108],ge=[1,109],ze=[1,111],He=[1,116],$e=[1,117],Re=[1,114],Ie=[1,115],be={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,direction:17,styleStatement:18,classDefStatement:19,classStatement:20,direction_tb:21,direction_bt:22,direction_rl:23,direction_lr:24,requirementType:25,requirementName:26,STRUCT_START:27,requirementBody:28,STYLE_SEPARATOR:29,idList:30,ID:31,COLONSEP:32,id:33,TEXT:34,text:35,RISK:36,riskLevel:37,VERIFYMTHD:38,verifyType:39,STRUCT_STOP:40,REQUIREMENT:41,FUNCTIONAL_REQUIREMENT:42,INTERFACE_REQUIREMENT:43,PERFORMANCE_REQUIREMENT:44,PHYSICAL_REQUIREMENT:45,DESIGN_CONSTRAINT:46,LOW_RISK:47,MED_RISK:48,HIGH_RISK:49,VERIFY_ANALYSIS:50,VERIFY_DEMONSTRATION:51,VERIFY_INSPECTION:52,VERIFY_TEST:53,ELEMENT:54,elementName:55,elementBody:56,TYPE:57,type:58,DOCREF:59,ref:60,END_ARROW_L:61,relationship:62,LINE:63,END_ARROW_R:64,CONTAINS:65,COPIES:66,DERIVES:67,SATISFIES:68,VERIFIES:69,REFINES:70,TRACES:71,CLASSDEF:72,stylesOpt:73,CLASS:74,ALPHA:75,COMMA:76,STYLE:77,style:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,MINUS:86,LABEL:87,SEMICOLON:88,unqString:89,qString:90,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",21:"direction_tb",22:"direction_bt",23:"direction_rl",24:"direction_lr",27:"STRUCT_START",29:"STYLE_SEPARATOR",31:"ID",32:"COLONSEP",34:"TEXT",36:"RISK",38:"VERIFYMTHD",40:"STRUCT_STOP",41:"REQUIREMENT",42:"FUNCTIONAL_REQUIREMENT",43:"INTERFACE_REQUIREMENT",44:"PERFORMANCE_REQUIREMENT",45:"PHYSICAL_REQUIREMENT",46:"DESIGN_CONSTRAINT",47:"LOW_RISK",48:"MED_RISK",49:"HIGH_RISK",50:"VERIFY_ANALYSIS",51:"VERIFY_DEMONSTRATION",52:"VERIFY_INSPECTION",53:"VERIFY_TEST",54:"ELEMENT",57:"TYPE",59:"DOCREF",61:"END_ARROW_L",63:"LINE",64:"END_ARROW_R",65:"CONTAINS",66:"COPIES",67:"DERIVES",68:"SATISFIES",69:"VERIFIES",70:"REFINES",71:"TRACES",72:"CLASSDEF",74:"CLASS",75:"ALPHA",76:"COMMA",77:"STYLE",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",86:"MINUS",87:"LABEL",88:"SEMICOLON",89:"unqString",90:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[17,1],[17,1],[17,1],[17,1],[14,5],[14,7],[28,5],[28,5],[28,5],[28,5],[28,2],[28,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[37,1],[37,1],[37,1],[39,1],[39,1],[39,1],[39,1],[15,5],[15,7],[56,5],[56,5],[56,2],[56,1],[16,5],[16,5],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[19,3],[20,3],[20,3],[30,1],[30,3],[30,1],[30,3],[18,3],[73,1],[73,3],[78,1],[78,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[26,1],[26,1],[33,1],[33,1],[35,1],[35,1],[55,1],[55,1],[58,1],[58,1],[60,1],[60,1]],performAction:o(function(oe,V,xe,q,pe,ve,Pe){var _e=ve.length-1;switch(pe){case 4:this.$=ve[_e].trim(),q.setAccTitle(this.$);break;case 5:case 6:this.$=ve[_e].trim(),q.setAccDescription(this.$);break;case 7:this.$=[];break;case 17:q.setDirection("TB");break;case 18:q.setDirection("BT");break;case 19:q.setDirection("RL");break;case 20:q.setDirection("LR");break;case 21:q.addRequirement(ve[_e-3],ve[_e-4]);break;case 22:q.addRequirement(ve[_e-5],ve[_e-6]),q.setClass([ve[_e-5]],ve[_e-3]);break;case 23:q.setNewReqId(ve[_e-2]);break;case 24:q.setNewReqText(ve[_e-2]);break;case 25:q.setNewReqRisk(ve[_e-2]);break;case 26:q.setNewReqVerifyMethod(ve[_e-2]);break;case 29:this.$=q.RequirementType.REQUIREMENT;break;case 30:this.$=q.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 31:this.$=q.RequirementType.INTERFACE_REQUIREMENT;break;case 32:this.$=q.RequirementType.PERFORMANCE_REQUIREMENT;break;case 33:this.$=q.RequirementType.PHYSICAL_REQUIREMENT;break;case 34:this.$=q.RequirementType.DESIGN_CONSTRAINT;break;case 35:this.$=q.RiskLevel.LOW_RISK;break;case 36:this.$=q.RiskLevel.MED_RISK;break;case 37:this.$=q.RiskLevel.HIGH_RISK;break;case 38:this.$=q.VerifyType.VERIFY_ANALYSIS;break;case 39:this.$=q.VerifyType.VERIFY_DEMONSTRATION;break;case 40:this.$=q.VerifyType.VERIFY_INSPECTION;break;case 41:this.$=q.VerifyType.VERIFY_TEST;break;case 42:q.addElement(ve[_e-3]);break;case 43:q.addElement(ve[_e-5]),q.setClass([ve[_e-5]],ve[_e-3]);break;case 44:q.setNewElementType(ve[_e-2]);break;case 45:q.setNewElementDocRef(ve[_e-2]);break;case 48:q.addRelationship(ve[_e-2],ve[_e],ve[_e-4]);break;case 49:q.addRelationship(ve[_e-2],ve[_e-4],ve[_e]);break;case 50:this.$=q.Relationships.CONTAINS;break;case 51:this.$=q.Relationships.COPIES;break;case 52:this.$=q.Relationships.DERIVES;break;case 53:this.$=q.Relationships.SATISFIES;break;case 54:this.$=q.Relationships.VERIFIES;break;case 55:this.$=q.Relationships.REFINES;break;case 56:this.$=q.Relationships.TRACES;break;case 57:this.$=ve[_e-2],q.defineClass(ve[_e-1],ve[_e]);break;case 58:q.setClass(ve[_e-1],ve[_e]);break;case 59:q.setClass([ve[_e-2]],ve[_e]);break;case 60:case 62:this.$=[ve[_e]];break;case 61:case 63:this.$=ve[_e-2].concat([ve[_e]]);break;case 64:this.$=ve[_e-2],q.setCssStyle(ve[_e-1],ve[_e]);break;case 65:this.$=[ve[_e]];break;case 66:ve[_e-2].push(ve[_e]),this.$=ve[_e-2];break;case 68:this.$=ve[_e-1]+ve[_e];break}},"anonymous"),table:[{3:1,4:2,6:e,9:r,11:n,13:i},{1:[3]},{3:8,4:2,5:[1,7],6:e,9:r,11:n,13:i},{5:[1,9]},{10:[1,10]},{12:[1,11]},t(a,[2,6]),{3:12,4:2,6:e,9:r,11:n,13:i},{1:[2,2]},{4:17,5:s,7:13,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},t(a,[2,4]),t(a,[2,5]),{1:[2,1]},{8:[1,41]},{4:17,5:s,7:42,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:43,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:44,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:45,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:46,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:47,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:48,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:49,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:50,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{26:51,89:[1,52],90:[1,53]},{55:54,89:[1,55],90:[1,56]},{29:[1,59],61:[1,57],63:[1,58]},t(S,[2,17]),t(S,[2,18]),t(S,[2,19]),t(S,[2,20]),{30:60,33:62,75:_,89:E,90:A},{30:63,33:62,75:_,89:E,90:A},{30:64,33:62,75:_,89:E,90:A},t(I,[2,29]),t(I,[2,30]),t(I,[2,31]),t(I,[2,32]),t(I,[2,33]),t(I,[2,34]),t(D,[2,81]),t(D,[2,82]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{27:[1,65],29:[1,66]},t(k,[2,79]),t(k,[2,80]),{27:[1,67],29:[1,68]},t(k,[2,85]),t(k,[2,86]),{62:69,65:L,66:R,67:O,68:M,69:B,70:F,71:P},{62:77,65:L,66:R,67:O,68:M,69:B,70:F,71:P},{30:78,33:62,75:_,89:E,90:A},{73:79,75:z,76:$,78:81,79:82,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X},t(te,[2,60]),t(te,[2,62]),{73:93,75:z,76:$,78:81,79:82,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X},{30:94,33:62,75:_,76:$,89:E,90:A},{5:[1,95]},{30:96,33:62,75:_,89:E,90:A},{5:[1,97]},{30:98,33:62,75:_,89:E,90:A},{63:[1,99]},t(J,[2,50]),t(J,[2,51]),t(J,[2,52]),t(J,[2,53]),t(J,[2,54]),t(J,[2,55]),t(J,[2,56]),{64:[1,100]},t(S,[2,59],{76:$}),t(S,[2,64],{76:se}),{33:103,75:[1,102],89:E,90:A},t(ue,[2,65],{79:104,75:z,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X}),t(Z,[2,67]),t(Z,[2,69]),t(Z,[2,70]),t(Z,[2,71]),t(Z,[2,72]),t(Z,[2,73]),t(Z,[2,74]),t(Z,[2,75]),t(Z,[2,76]),t(Z,[2,77]),t(Z,[2,78]),t(S,[2,57],{76:se}),t(S,[2,58],{76:$}),{5:Se,28:105,31:ce,34:ae,36:Oe,38:ge,40:ze},{27:[1,112],76:$},{5:He,40:$e,56:113,57:Re,59:Ie},{27:[1,118],76:$},{33:119,89:E,90:A},{33:120,89:E,90:A},{75:z,78:121,79:82,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X},t(te,[2,61]),t(te,[2,63]),t(Z,[2,68]),t(S,[2,21]),{32:[1,122]},{32:[1,123]},{32:[1,124]},{32:[1,125]},{5:Se,28:126,31:ce,34:ae,36:Oe,38:ge,40:ze},t(S,[2,28]),{5:[1,127]},t(S,[2,42]),{32:[1,128]},{32:[1,129]},{5:He,40:$e,56:130,57:Re,59:Ie},t(S,[2,47]),{5:[1,131]},t(S,[2,48]),t(S,[2,49]),t(ue,[2,66],{79:104,75:z,80:H,81:Q,82:j,83:ie,84:ne,85:le,86:he,87:K,88:X}),{33:132,89:E,90:A},{35:133,89:[1,134],90:[1,135]},{37:136,47:[1,137],48:[1,138],49:[1,139]},{39:140,50:[1,141],51:[1,142],52:[1,143],53:[1,144]},t(S,[2,27]),{5:Se,28:145,31:ce,34:ae,36:Oe,38:ge,40:ze},{58:146,89:[1,147],90:[1,148]},{60:149,89:[1,150],90:[1,151]},t(S,[2,46]),{5:He,40:$e,56:152,57:Re,59:Ie},{5:[1,153]},{5:[1,154]},{5:[2,83]},{5:[2,84]},{5:[1,155]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[1,156]},{5:[2,38]},{5:[2,39]},{5:[2,40]},{5:[2,41]},t(S,[2,22]),{5:[1,157]},{5:[2,87]},{5:[2,88]},{5:[1,158]},{5:[2,89]},{5:[2,90]},t(S,[2,43]),{5:Se,28:159,31:ce,34:ae,36:Oe,38:ge,40:ze},{5:Se,28:160,31:ce,34:ae,36:Oe,38:ge,40:ze},{5:Se,28:161,31:ce,34:ae,36:Oe,38:ge,40:ze},{5:Se,28:162,31:ce,34:ae,36:Oe,38:ge,40:ze},{5:He,40:$e,56:163,57:Re,59:Ie},{5:He,40:$e,56:164,57:Re,59:Ie},t(S,[2,23]),t(S,[2,24]),t(S,[2,25]),t(S,[2,26]),t(S,[2,44]),t(S,[2,45])],defaultActions:{8:[2,2],12:[2,1],41:[2,3],42:[2,8],43:[2,9],44:[2,10],45:[2,11],46:[2,12],47:[2,13],48:[2,14],49:[2,15],50:[2,16],134:[2,83],135:[2,84],137:[2,35],138:[2,36],139:[2,37],141:[2,38],142:[2,39],143:[2,40],144:[2,41],147:[2,87],148:[2,88],150:[2,89],151:[2,90]},parseError:o(function(oe,V){if(V.recoverable)this.trace(oe);else{var xe=new Error(oe);throw xe.hash=V,xe}},"parseError"),parse:o(function(oe){var V=this,xe=[0],q=[],pe=[null],ve=[],Pe=this.table,_e="",we=0,Ve=0,De=0,qe=2,at=1,Rt=ve.slice.call(arguments,1),st=Object.create(this.lexer),Ue={yy:{}};for(var ct in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ct)&&(Ue.yy[ct]=this.yy[ct]);st.setInput(oe,Ue.yy),Ue.yy.lexer=st,Ue.yy.parser=this,typeof st.yylloc>"u"&&(st.yylloc={});var We=st.yylloc;ve.push(We);var ot=st.options&&st.options.ranges;typeof Ue.yy.parseError=="function"?this.parseError=Ue.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Yt(Dr){xe.length=xe.length-2*Dr,pe.length=pe.length-Dr,ve.length=ve.length-Dr}o(Yt,"popStack");function bt(){var Dr;return Dr=q.pop()||st.lex()||at,typeof Dr!="number"&&(Dr instanceof Array&&(q=Dr,Dr=q.pop()),Dr=V.symbols_[Dr]||Dr),Dr}o(bt,"lex");for(var Mt,xt,ut,Et,ft,yt,nt={},dn,Tt,On,tn;;){if(ut=xe[xe.length-1],this.defaultActions[ut]?Et=this.defaultActions[ut]:((Mt===null||typeof Mt>"u")&&(Mt=bt()),Et=Pe[ut]&&Pe[ut][Mt]),typeof Et>"u"||!Et.length||!Et[0]){var _r="";tn=[];for(dn in Pe[ut])this.terminals_[dn]&&dn>qe&&tn.push("'"+this.terminals_[dn]+"'");st.showPosition?_r="Parse error on line "+(we+1)+`:
1181 +`+st.showPosition()+`
1182 +Expecting `+tn.join(", ")+", got '"+(this.terminals_[Mt]||Mt)+"'":_r="Parse error on line "+(we+1)+": Unexpected "+(Mt==at?"end of input":"'"+(this.terminals_[Mt]||Mt)+"'"),this.parseError(_r,{text:st.match,token:this.terminals_[Mt]||Mt,line:st.yylineno,loc:We,expected:tn})}if(Et[0]instanceof Array&&Et.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ut+", token: "+Mt);switch(Et[0]){case 1:xe.push(Mt),pe.push(st.yytext),ve.push(st.yylloc),xe.push(Et[1]),Mt=null,xt?(Mt=xt,xt=null):(Ve=st.yyleng,_e=st.yytext,we=st.yylineno,We=st.yylloc,De>0&&De--);break;case 2:if(Tt=this.productions_[Et[1]][1],nt.$=pe[pe.length-Tt],nt._$={first_line:ve[ve.length-(Tt||1)].first_line,last_line:ve[ve.length-1].last_line,first_column:ve[ve.length-(Tt||1)].first_column,last_column:ve[ve.length-1].last_column},ot&&(nt._$.range=[ve[ve.length-(Tt||1)].range[0],ve[ve.length-1].range[1]]),yt=this.performAction.apply(nt,[_e,Ve,we,Ue.yy,Et[1],pe,ve].concat(Rt)),typeof yt<"u")return yt;Tt&&(xe=xe.slice(0,-1*Tt*2),pe=pe.slice(0,-1*Tt),ve=ve.slice(0,-1*Tt)),xe.push(this.productions_[Et[1]][0]),pe.push(nt.$),ve.push(nt._$),On=Pe[xe[xe.length-2]][xe[xe.length-1]],xe.push(On);break;case 3:return!0}}return!0},"parse")},W=function(){var re={EOF:1,parseError:o(function(V,xe){if(this.yy.parser)this.yy.parser.parseError(V,xe);else throw new Error(V)},"parseError"),setInput:o(function(oe,V){return this.yy=V||this.yy||{},this._input=oe,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var oe=this._input[0];this.yytext+=oe,this.yyleng++,this.offset++,this.match+=oe,this.matched+=oe;var V=oe.match(/(?:\r\n?|\n).*/g);return V?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),oe},"input"),unput:o(function(oe){var V=oe.length,xe=oe.split(/(?:\r\n?|\n)/g);this._input=oe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-V),this.offset-=V;var q=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),xe.length-1&&(this.yylineno-=xe.length-1);var pe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:xe?(xe.length===q.length?this.yylloc.first_column:0)+q[q.length-xe.length].length-xe[0].length:this.yylloc.first_column-V},this.options.ranges&&(this.yylloc.range=[pe[0],pe[0]+this.yyleng-V]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
1183 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(oe){this.unput(this.match.slice(oe))},"less"),pastInput:o(function(){var oe=this.matched.substr(0,this.matched.length-this.match.length);return(oe.length>20?"...":"")+oe.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var oe=this.match;return oe.length<20&&(oe+=this._input.substr(0,20-oe.length)),(oe.substr(0,20)+(oe.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var oe=this.pastInput(),V=new Array(oe.length+1).join("-");return oe+this.upcomingInput()+`
1184 +`+V+"^"},"showPosition"),test_match:o(function(oe,V){var xe,q,pe;if(this.options.backtrack_lexer&&(pe={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(pe.yylloc.range=this.yylloc.range.slice(0))),q=oe[0].match(/(?:\r\n?|\n).*/g),q&&(this.yylineno+=q.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:q?q[q.length-1].length-q[q.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+oe[0].length},this.yytext+=oe[0],this.match+=oe[0],this.matches=oe,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(oe[0].length),this.matched+=oe[0],xe=this.performAction.call(this,this.yy,this,V,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),xe)return xe;if(this._backtrack){for(var ve in pe)this[ve]=pe[ve];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var oe,V,xe,q;this._more||(this.yytext="",this.match="");for(var pe=this._currentRules(),ve=0;ve<pe.length;ve++)if(xe=this._input.match(this.rules[pe[ve]]),xe&&(!V||xe[0].length>V[0].length)){if(V=xe,q=ve,this.options.backtrack_lexer){if(oe=this.test_match(xe,pe[ve]),oe!==!1)return oe;if(this._backtrack){V=!1;continue}else return!1}else if(!this.options.flex)break}return V?(oe=this.test_match(V,pe[q]),oe!==!1?oe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
1185 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var V=this.next();return V||this.lex()},"lex"),begin:o(function(V){this.conditionStack.push(V)},"begin"),popState:o(function(){var V=this.conditionStack.length-1;return V>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(V){return V=this.conditionStack.length-1-Math.abs(V||0),V>=0?this.conditionStack[V]:"INITIAL"},"topState"),pushState:o(function(V){this.begin(V)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(V,xe,q,pe){var ve=pe;switch(q){case 0:return"title";case 1:return this.begin("acc_title"),9;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),11;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 21;case 9:return 22;case 10:return 23;case 11:return 24;case 12:return 5;case 13:break;case 14:break;case 15:break;case 16:return 8;case 17:return 6;case 18:return 27;case 19:return 40;case 20:return 29;case 21:return 32;case 22:return 31;case 23:return 34;case 24:return 36;case 25:return 38;case 26:return 41;case 27:return 42;case 28:return 43;case 29:return 44;case 30:return 45;case 31:return 46;case 32:return 47;case 33:return 48;case 34:return 49;case 35:return 50;case 36:return 51;case 37:return 52;case 38:return 53;case 39:return 54;case 40:return 65;case 41:return 66;case 42:return 67;case 43:return 68;case 44:return 69;case 45:return 70;case 46:return 71;case 47:return 57;case 48:return 59;case 49:return this.begin("style"),77;break;case 50:return 75;case 51:return 81;case 52:return 88;case 53:return"PERCENT";case 54:return 86;case 55:return 84;case 56:break;case 57:this.begin("string");break;case 58:this.popState();break;case 59:return this.begin("style"),72;break;case 60:return this.begin("style"),74;break;case 61:return 61;case 62:return 64;case 63:return 63;case 64:this.begin("string");break;case 65:this.popState();break;case 66:return"qString";case 67:return xe.yytext=xe.yytext.trim(),89;break;case 68:return 75;case 69:return 80;case 70:return 76}},"anonymous"),rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::{3})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:style\b)/i,/^(?:\w+)/i,/^(?::)/i,/^(?:;)/i,/^(?:%)/i,/^(?:-)/i,/^(?:#)/i,/^(?: )/i,/^(?:["])/i,/^(?:\n)/i,/^(?:classDef\b)/i,/^(?:class\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^:,\r\n\{\<\>\-\=]*)/i,/^(?:\w+)/i,/^(?:[0-9]+)/i,/^(?:,)/i],conditions:{acc_descr_multiline:{rules:[6,7,68,69,70],inclusive:!1},acc_descr:{rules:[4,68,69,70],inclusive:!1},acc_title:{rules:[2,68,69,70],inclusive:!1},style:{rules:[50,51,52,53,54,55,56,57,58,68,69,70],inclusive:!1},unqString:{rules:[68,69,70],inclusive:!1},token:{rules:[68,69,70],inclusive:!1},string:{rules:[65,66,68,69,70],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,59,60,61,62,63,64,67,68,69,70],inclusive:!0}}};return re}();be.lexer=W;function de(){this.yy={}}return o(de,"Parser"),de.prototype=be,be.Parser=de,new de}();EO.parser=EO;Zhe=EO});var A6,efe=N(()=>{"use strict";zt();vt();mi();A6=class{constructor(){this.relations=[];this.latestRequirement=this.getInitialRequirement();this.requirements=new Map;this.latestElement=this.getInitialElement();this.elements=new Map;this.classes=new Map;this.direction="TB";this.RequirementType={REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"};this.RiskLevel={LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"};this.VerifyType={VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"};this.Relationships={CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"};this.setAccTitle=Lr;this.getAccTitle=Rr;this.setAccDescription=Nr;this.getAccDescription=Mr;this.setDiagramTitle=$r;this.getDiagramTitle=Ir;this.getConfig=o(()=>me().requirement,"getConfig");this.clear(),this.setDirection=this.setDirection.bind(this),this.addRequirement=this.addRequirement.bind(this),this.setNewReqId=this.setNewReqId.bind(this),this.setNewReqRisk=this.setNewReqRisk.bind(this),this.setNewReqText=this.setNewReqText.bind(this),this.setNewReqVerifyMethod=this.setNewReqVerifyMethod.bind(this),this.addElement=this.addElement.bind(this),this.setNewElementType=this.setNewElementType.bind(this),this.setNewElementDocRef=this.setNewElementDocRef.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setCssStyle=this.setCssStyle.bind(this),this.setClass=this.setClass.bind(this),this.defineClass=this.defineClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"RequirementDB")}getDirection(){return this.direction}setDirection(e){this.direction=e}resetLatestRequirement(){this.latestRequirement=this.getInitialRequirement()}resetLatestElement(){this.latestElement=this.getInitialElement()}getInitialRequirement(){return{requirementId:"",text:"",risk:"",verifyMethod:"",name:"",type:"",cssStyles:[],classes:["default"]}}getInitialElement(){return{name:"",type:"",docRef:"",cssStyles:[],classes:["default"]}}addRequirement(e,r){return this.requirements.has(e)||this.requirements.set(e,{name:e,type:r,requirementId:this.latestRequirement.requirementId,text:this.latestRequirement.text,risk:this.latestRequirement.risk,verifyMethod:this.latestRequirement.verifyMethod,cssStyles:[],classes:["default"]}),this.resetLatestRequirement(),this.requirements.get(e)}getRequirements(){return this.requirements}setNewReqId(e){this.latestRequirement!==void 0&&(this.latestRequirement.requirementId=e)}setNewReqText(e){this.latestRequirement!==void 0&&(this.latestRequirement.text=e)}setNewReqRisk(e){this.latestRequirement!==void 0&&(this.latestRequirement.risk=e)}setNewReqVerifyMethod(e){this.latestRequirement!==void 0&&(this.latestRequirement.verifyMethod=e)}addElement(e){return this.elements.has(e)||(this.elements.set(e,{name:e,type:this.latestElement.type,docRef:this.latestElement.docRef,cssStyles:[],classes:["default"]}),Y.info("Added new element: ",e)),this.resetLatestElement(),this.elements.get(e)}getElements(){return this.elements}setNewElementType(e){this.latestElement!==void 0&&(this.latestElement.type=e)}setNewElementDocRef(e){this.latestElement!==void 0&&(this.latestElement.docRef=e)}addRelationship(e,r,n){this.relations.push({type:e,src:r,dst:n})}getRelationships(){return this.relations}clear(){this.relations=[],this.resetLatestRequirement(),this.requirements=new Map,this.resetLatestElement(),this.elements=new Map,this.classes=new Map,Ar()}setCssStyle(e,r){for(let n of e){let i=this.requirements.get(n)??this.elements.get(n);if(!r||!i)return;for(let a of r)a.includes(",")?i.cssStyles.push(...a.split(",")):i.cssStyles.push(a)}}setClass(e,r){for(let n of e){let i=this.requirements.get(n)??this.elements.get(n);if(i)for(let a of r){i.classes.push(a);let s=this.classes.get(a)?.styles;s&&i.cssStyles.push(...s)}}}defineClass(e,r){for(let n of e){let i=this.classes.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.classes.set(n,i)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)}),this.requirements.forEach(a=>{a.classes.includes(n)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))}),this.elements.forEach(a=>{a.classes.includes(n)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))})}}getClasses(){return this.classes}getData(){let e=me(),r=[],n=[];for(let i of this.requirements.values()){let a=i;a.id=i.name,a.cssStyles=i.cssStyles,a.cssClasses=i.classes.join(" "),a.shape="requirementBox",a.look=e.look,r.push(a)}for(let i of this.elements.values()){let a=i;a.shape="requirementBox",a.look=e.look,a.id=i.name,a.cssStyles=i.cssStyles,a.cssClasses=i.classes.join(" "),r.push(a)}for(let i of this.relations){let a=0,s=i.type===this.Relationships.CONTAINS,l={id:`${i.src}-${i.dst}-${a}`,start:this.requirements.get(i.src)?.name??this.elements.get(i.src)?.name,end:this.requirements.get(i.dst)?.name??this.elements.get(i.dst)?.name,label:`&lt;&lt;${i.type}&gt;&gt;`,classes:"relationshipLine",style:["fill:none",s?"":"stroke-dasharray: 10,7"],labelpos:"c",thickness:"normal",type:"normal",pattern:s?"normal":"dashed",arrowTypeStart:s?"requirement_contains":"",arrowTypeEnd:s?"":"requirement_arrow",look:e.look};n.push(l),a++}return{nodes:r,edges:n,other:{},config:e,direction:this.getDirection()}}}});var ZGe,tfe,rfe=N(()=>{"use strict";ZGe=o(t=>`
1186 +
1187 + marker {
1188 + fill: ${t.relationColor};
1189 + stroke: ${t.relationColor};
1190 + }
1191 +
1192 + marker.cross {
1193 + stroke: ${t.lineColor};
1194 + }
1195 +
1196 + svg {
1197 + font-family: ${t.fontFamily};
1198 + font-size: ${t.fontSize};
1199 + }
1200 +
1201 + .reqBox {
1202 + fill: ${t.requirementBackground};
1203 + fill-opacity: 1.0;
1204 + stroke: ${t.requirementBorderColor};
1205 + stroke-width: ${t.requirementBorderSize};
1206 + }
1207 +
1208 + .reqTitle, .reqLabel{
1209 + fill: ${t.requirementTextColor};
1210 + }
1211 + .reqLabelBox {
1212 + fill: ${t.relationLabelBackground};
1213 + fill-opacity: 1.0;
1214 + }
1215 +
1216 + .req-title-line {
1217 + stroke: ${t.requirementBorderColor};
1218 + stroke-width: ${t.requirementBorderSize};
1219 + }
1220 + .relationshipLine {
1221 + stroke: ${t.relationColor};
1222 + stroke-width: 1;
1223 + }
1224 + .relationshipLabel {
1225 + fill: ${t.relationLabelColor};
1226 + }
1227 + .divider {
1228 + stroke: ${t.nodeBorder};
1229 + stroke-width: 1;
1230 + }
1231 + .label {
1232 + font-family: ${t.fontFamily};
1233 + color: ${t.nodeTextColor||t.textColor};
1234 + }
1235 + .label text,span {
1236 + fill: ${t.nodeTextColor||t.textColor};
1237 + color: ${t.nodeTextColor||t.textColor};
1238 + }
1239 + .labelBkg {
1240 + background-color: ${t.edgeLabelBackground};
1241 + }
1242 +
1243 +`,"getStyles"),tfe=ZGe});var SO={};hr(SO,{draw:()=>JGe});var JGe,nfe=N(()=>{"use strict";zt();vt();gm();Yd();$m();ir();JGe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing requirement diagram (unified)",e);let{securityLevel:i,state:a,layout:s}=me(),l=n.db.getData(),u=yc(e,i);l.type=n.type,l.layoutAlgorithm=nf(s),l.nodeSpacing=a?.nodeSpacing??50,l.rankSpacing=a?.rankSpacing??50,l.markers=["requirement_contains","requirement_arrow"],l.diagramId=e,await Cc(l,u);let h=8;Gt.insertTitle(u,"requirementDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ac(u,h,"requirementDiagram",a?.useMaxWidth??!0)},"draw")});var ife={};hr(ife,{diagram:()=>eVe});var eVe,afe=N(()=>{"use strict";Jhe();efe();rfe();nfe();eVe={parser:Zhe,get db(){return new A6},renderer:SO,styles:tfe}});var CO,lfe,cfe=N(()=>{"use strict";CO=function(){var t=o(function(K,X,te,J){for(te=te||{},J=K.length;J--;te[K[J]]=X);return te},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,13],u=[1,14],h=[1,16],f=[1,17],d=[1,18],p=[1,24],m=[1,25],g=[1,26],y=[1,27],v=[1,28],x=[1,29],b=[1,30],w=[1,31],C=[1,32],T=[1,33],E=[1,34],A=[1,35],S=[1,36],_=[1,37],I=[1,38],D=[1,39],k=[1,41],L=[1,42],R=[1,43],O=[1,44],M=[1,45],B=[1,46],F=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],P=[4,5,16,50,52,53],z=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],$=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],H=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],Q=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],j=[68,69,70],ie=[1,122],ne={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,BIDIRECTIONAL_SOLID_ARROW:74,DOTTED_ARROW:75,BIDIRECTIONAL_DOTTED_ARROW:76,SOLID_CROSS:77,DOTTED_CROSS:78,SOLID_POINT:79,DOTTED_POINT:80,TXT:81,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"BIDIRECTIONAL_SOLID_ARROW",75:"DOTTED_ARROW",76:"BIDIRECTIONAL_DOTTED_ARROW",77:"SOLID_CROSS",78:"DOTTED_CROSS",79:"SOLID_POINT",80:"DOTTED_POINT",81:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:o(function(X,te,J,se,ue,Z,Se){var ce=Z.length-1;switch(ue){case 3:return se.apply(Z[ce]),Z[ce];break;case 4:case 9:this.$=[];break;case 5:case 10:Z[ce-1].push(Z[ce]),this.$=Z[ce-1];break;case 6:case 7:case 11:case 12:this.$=Z[ce];break;case 8:case 13:this.$=[];break;case 15:Z[ce].type="createParticipant",this.$=Z[ce];break;case 16:Z[ce-1].unshift({type:"boxStart",boxData:se.parseBoxData(Z[ce-2])}),Z[ce-1].push({type:"boxEnd",boxText:Z[ce-2]}),this.$=Z[ce-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(Z[ce-2]),sequenceIndexStep:Number(Z[ce-1]),sequenceVisible:!0,signalType:se.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(Z[ce-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:se.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:se.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:se.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:se.LINETYPE.ACTIVE_START,actor:Z[ce-1].actor};break;case 23:this.$={type:"activeEnd",signalType:se.LINETYPE.ACTIVE_END,actor:Z[ce-1].actor};break;case 29:se.setDiagramTitle(Z[ce].substring(6)),this.$=Z[ce].substring(6);break;case 30:se.setDiagramTitle(Z[ce].substring(7)),this.$=Z[ce].substring(7);break;case 31:this.$=Z[ce].trim(),se.setAccTitle(this.$);break;case 32:case 33:this.$=Z[ce].trim(),se.setAccDescription(this.$);break;case 34:Z[ce-1].unshift({type:"loopStart",loopText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.LOOP_START}),Z[ce-1].push({type:"loopEnd",loopText:Z[ce-2],signalType:se.LINETYPE.LOOP_END}),this.$=Z[ce-1];break;case 35:Z[ce-1].unshift({type:"rectStart",color:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.RECT_START}),Z[ce-1].push({type:"rectEnd",color:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.RECT_END}),this.$=Z[ce-1];break;case 36:Z[ce-1].unshift({type:"optStart",optText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.OPT_START}),Z[ce-1].push({type:"optEnd",optText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.OPT_END}),this.$=Z[ce-1];break;case 37:Z[ce-1].unshift({type:"altStart",altText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.ALT_START}),Z[ce-1].push({type:"altEnd",signalType:se.LINETYPE.ALT_END}),this.$=Z[ce-1];break;case 38:Z[ce-1].unshift({type:"parStart",parText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.PAR_START}),Z[ce-1].push({type:"parEnd",signalType:se.LINETYPE.PAR_END}),this.$=Z[ce-1];break;case 39:Z[ce-1].unshift({type:"parStart",parText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.PAR_OVER_START}),Z[ce-1].push({type:"parEnd",signalType:se.LINETYPE.PAR_END}),this.$=Z[ce-1];break;case 40:Z[ce-1].unshift({type:"criticalStart",criticalText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.CRITICAL_START}),Z[ce-1].push({type:"criticalEnd",signalType:se.LINETYPE.CRITICAL_END}),this.$=Z[ce-1];break;case 41:Z[ce-1].unshift({type:"breakStart",breakText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.BREAK_START}),Z[ce-1].push({type:"breakEnd",optText:se.parseMessage(Z[ce-2]),signalType:se.LINETYPE.BREAK_END}),this.$=Z[ce-1];break;case 43:this.$=Z[ce-3].concat([{type:"option",optionText:se.parseMessage(Z[ce-1]),signalType:se.LINETYPE.CRITICAL_OPTION},Z[ce]]);break;case 45:this.$=Z[ce-3].concat([{type:"and",parText:se.parseMessage(Z[ce-1]),signalType:se.LINETYPE.PAR_AND},Z[ce]]);break;case 47:this.$=Z[ce-3].concat([{type:"else",altText:se.parseMessage(Z[ce-1]),signalType:se.LINETYPE.ALT_ELSE},Z[ce]]);break;case 48:Z[ce-3].draw="participant",Z[ce-3].type="addParticipant",Z[ce-3].description=se.parseMessage(Z[ce-1]),this.$=Z[ce-3];break;case 49:Z[ce-1].draw="participant",Z[ce-1].type="addParticipant",this.$=Z[ce-1];break;case 50:Z[ce-3].draw="actor",Z[ce-3].type="addParticipant",Z[ce-3].description=se.parseMessage(Z[ce-1]),this.$=Z[ce-3];break;case 51:Z[ce-1].draw="actor",Z[ce-1].type="addParticipant",this.$=Z[ce-1];break;case 52:Z[ce-1].type="destroyParticipant",this.$=Z[ce-1];break;case 53:this.$=[Z[ce-1],{type:"addNote",placement:Z[ce-2],actor:Z[ce-1].actor,text:Z[ce]}];break;case 54:Z[ce-2]=[].concat(Z[ce-1],Z[ce-1]).slice(0,2),Z[ce-2][0]=Z[ce-2][0].actor,Z[ce-2][1]=Z[ce-2][1].actor,this.$=[Z[ce-1],{type:"addNote",placement:se.PLACEMENT.OVER,actor:Z[ce-2].slice(0,2),text:Z[ce]}];break;case 55:this.$=[Z[ce-1],{type:"addLinks",actor:Z[ce-1].actor,text:Z[ce]}];break;case 56:this.$=[Z[ce-1],{type:"addALink",actor:Z[ce-1].actor,text:Z[ce]}];break;case 57:this.$=[Z[ce-1],{type:"addProperties",actor:Z[ce-1].actor,text:Z[ce]}];break;case 58:this.$=[Z[ce-1],{type:"addDetails",actor:Z[ce-1].actor,text:Z[ce]}];break;case 61:this.$=[Z[ce-2],Z[ce]];break;case 62:this.$=Z[ce];break;case 63:this.$=se.PLACEMENT.LEFTOF;break;case 64:this.$=se.PLACEMENT.RIGHTOF;break;case 65:this.$=[Z[ce-4],Z[ce-1],{type:"addMessage",from:Z[ce-4].actor,to:Z[ce-1].actor,signalType:Z[ce-3],msg:Z[ce],activate:!0},{type:"activeStart",signalType:se.LINETYPE.ACTIVE_START,actor:Z[ce-1].actor}];break;case 66:this.$=[Z[ce-4],Z[ce-1],{type:"addMessage",from:Z[ce-4].actor,to:Z[ce-1].actor,signalType:Z[ce-3],msg:Z[ce]},{type:"activeEnd",signalType:se.LINETYPE.ACTIVE_END,actor:Z[ce-4].actor}];break;case 67:this.$=[Z[ce-3],Z[ce-1],{type:"addMessage",from:Z[ce-3].actor,to:Z[ce-1].actor,signalType:Z[ce-2],msg:Z[ce]}];break;case 68:this.$={type:"addParticipant",actor:Z[ce]};break;case 69:this.$=se.LINETYPE.SOLID_OPEN;break;case 70:this.$=se.LINETYPE.DOTTED_OPEN;break;case 71:this.$=se.LINETYPE.SOLID;break;case 72:this.$=se.LINETYPE.BIDIRECTIONAL_SOLID;break;case 73:this.$=se.LINETYPE.DOTTED;break;case 74:this.$=se.LINETYPE.BIDIRECTIONAL_DOTTED;break;case 75:this.$=se.LINETYPE.SOLID_CROSS;break;case 76:this.$=se.LINETYPE.DOTTED_CROSS;break;case 77:this.$=se.LINETYPE.SOLID_POINT;break;case 78:this.$=se.LINETYPE.DOTTED_POINT;break;case 79:this.$=se.parseMessage(Z[ce].trim().substring(1));break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},t(F,[2,5]),{9:47,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},t(F,[2,7]),t(F,[2,8]),t(F,[2,14]),{12:48,50:_,52:I,53:D},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:B},{22:55,70:B},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(F,[2,29]),t(F,[2,30]),{32:[1,61]},{34:[1,62]},t(F,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:B},{22:72,70:B},{22:73,70:B},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82],79:[1,83],80:[1,84]},{55:85,57:[1,86],65:[1,87],66:[1,88]},{22:89,70:B},{22:90,70:B},{22:91,70:B},{22:92,70:B},t([5,51,64,71,72,73,74,75,76,77,78,79,80,81],[2,68]),t(F,[2,6]),t(F,[2,15]),t(P,[2,9],{10:93}),t(F,[2,17]),{5:[1,95],19:[1,94]},{5:[1,96]},t(F,[2,21]),{5:[1,97]},{5:[1,98]},t(F,[2,24]),t(F,[2,25]),t(F,[2,26]),t(F,[2,27]),t(F,[2,28]),t(F,[2,31]),t(F,[2,32]),t(z,i,{7:99}),t(z,i,{7:100}),t(z,i,{7:101}),t($,i,{40:102,7:103}),t(H,i,{42:104,7:105}),t(H,i,{7:105,42:106}),t(Q,i,{45:107,7:108}),t(z,i,{7:109}),{5:[1,111],51:[1,110]},{5:[1,113],51:[1,112]},{5:[1,114]},{22:117,68:[1,115],69:[1,116],70:B},t(j,[2,69]),t(j,[2,70]),t(j,[2,71]),t(j,[2,72]),t(j,[2,73]),t(j,[2,74]),t(j,[2,75]),t(j,[2,76]),t(j,[2,77]),t(j,[2,78]),{22:118,70:B},{22:120,58:119,70:B},{70:[2,63]},{70:[2,64]},{56:121,81:ie},{56:123,81:ie},{56:124,81:ie},{56:125,81:ie},{4:[1,128],5:[1,130],11:127,12:129,16:[1,126],50:_,52:I,53:D},{5:[1,131]},t(F,[2,19]),t(F,[2,20]),t(F,[2,22]),t(F,[2,23]),{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,132],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,133],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,134],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{16:[1,135]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,46],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,49:[1,136],50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{16:[1,137]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,44],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,48:[1,138],50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{16:[1,139]},{16:[1,140]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,42],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,47:[1,141],50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,142],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:D,54:k,59:L,60:R,61:O,62:M,70:B},{15:[1,143]},t(F,[2,49]),{15:[1,144]},t(F,[2,51]),t(F,[2,52]),{22:145,70:B},{22:146,70:B},{56:147,81:ie},{56:148,81:ie},{56:149,81:ie},{64:[1,150],81:[2,62]},{5:[2,55]},{5:[2,79]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(F,[2,16]),t(P,[2,10]),{12:151,50:_,52:I,53:D},t(P,[2,12]),t(P,[2,13]),t(F,[2,18]),t(F,[2,34]),t(F,[2,35]),t(F,[2,36]),t(F,[2,37]),{15:[1,152]},t(F,[2,38]),{15:[1,153]},t(F,[2,39]),t(F,[2,40]),{15:[1,154]},t(F,[2,41]),{5:[1,155]},{5:[1,156]},{56:157,81:ie},{56:158,81:ie},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:159,70:B},t(P,[2,11]),t($,i,{7:103,40:160}),t(H,i,{7:105,42:161}),t(Q,i,{7:108,45:162}),t(F,[2,48]),t(F,[2,50]),{5:[2,65]},{5:[2,66]},{81:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],87:[2,63],88:[2,64],121:[2,55],122:[2,79],123:[2,56],124:[2,57],125:[2,58],147:[2,67],148:[2,53],149:[2,54],157:[2,65],158:[2,66],159:[2,61],160:[2,47],161:[2,45],162:[2,43]},parseError:o(function(X,te){if(te.recoverable)this.trace(X);else{var J=new Error(X);throw J.hash=te,J}},"parseError"),parse:o(function(X){var te=this,J=[0],se=[],ue=[null],Z=[],Se=this.table,ce="",ae=0,Oe=0,ge=0,ze=2,He=1,$e=Z.slice.call(arguments,1),Re=Object.create(this.lexer),Ie={yy:{}};for(var be in this.yy)Object.prototype.hasOwnProperty.call(this.yy,be)&&(Ie.yy[be]=this.yy[be]);Re.setInput(X,Ie.yy),Ie.yy.lexer=Re,Ie.yy.parser=this,typeof Re.yylloc>"u"&&(Re.yylloc={});var W=Re.yylloc;Z.push(W);var de=Re.options&&Re.options.ranges;typeof Ie.yy.parseError=="function"?this.parseError=Ie.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function re(Rt){J.length=J.length-2*Rt,ue.length=ue.length-Rt,Z.length=Z.length-Rt}o(re,"popStack");function oe(){var Rt;return Rt=se.pop()||Re.lex()||He,typeof Rt!="number"&&(Rt instanceof Array&&(se=Rt,Rt=se.pop()),Rt=te.symbols_[Rt]||Rt),Rt}o(oe,"lex");for(var V,xe,q,pe,ve,Pe,_e={},we,Ve,De,qe;;){if(q=J[J.length-1],this.defaultActions[q]?pe=this.defaultActions[q]:((V===null||typeof V>"u")&&(V=oe()),pe=Se[q]&&Se[q][V]),typeof pe>"u"||!pe.length||!pe[0]){var at="";qe=[];for(we in Se[q])this.terminals_[we]&&we>ze&&qe.push("'"+this.terminals_[we]+"'");Re.showPosition?at="Parse error on line "+(ae+1)+`:
1244 +`+Re.showPosition()+`
1245 +Expecting `+qe.join(", ")+", got '"+(this.terminals_[V]||V)+"'":at="Parse error on line "+(ae+1)+": Unexpected "+(V==He?"end of input":"'"+(this.terminals_[V]||V)+"'"),this.parseError(at,{text:Re.match,token:this.terminals_[V]||V,line:Re.yylineno,loc:W,expected:qe})}if(pe[0]instanceof Array&&pe.length>1)throw new Error("Parse Error: multiple actions possible at state: "+q+", token: "+V);switch(pe[0]){case 1:J.push(V),ue.push(Re.yytext),Z.push(Re.yylloc),J.push(pe[1]),V=null,xe?(V=xe,xe=null):(Oe=Re.yyleng,ce=Re.yytext,ae=Re.yylineno,W=Re.yylloc,ge>0&&ge--);break;case 2:if(Ve=this.productions_[pe[1]][1],_e.$=ue[ue.length-Ve],_e._$={first_line:Z[Z.length-(Ve||1)].first_line,last_line:Z[Z.length-1].last_line,first_column:Z[Z.length-(Ve||1)].first_column,last_column:Z[Z.length-1].last_column},de&&(_e._$.range=[Z[Z.length-(Ve||1)].range[0],Z[Z.length-1].range[1]]),Pe=this.performAction.apply(_e,[ce,Oe,ae,Ie.yy,pe[1],ue,Z].concat($e)),typeof Pe<"u")return Pe;Ve&&(J=J.slice(0,-1*Ve*2),ue=ue.slice(0,-1*Ve),Z=Z.slice(0,-1*Ve)),J.push(this.productions_[pe[1]][0]),ue.push(_e.$),Z.push(_e._$),De=Se[J[J.length-2]][J[J.length-1]],J.push(De);break;case 3:return!0}}return!0},"parse")},le=function(){var K={EOF:1,parseError:o(function(te,J){if(this.yy.parser)this.yy.parser.parseError(te,J);else throw new Error(te)},"parseError"),setInput:o(function(X,te){return this.yy=te||this.yy||{},this._input=X,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var X=this._input[0];this.yytext+=X,this.yyleng++,this.offset++,this.match+=X,this.matched+=X;var te=X.match(/(?:\r\n?|\n).*/g);return te?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),X},"input"),unput:o(function(X){var te=X.length,J=X.split(/(?:\r\n?|\n)/g);this._input=X+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-te),this.offset-=te;var se=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),J.length-1&&(this.yylineno-=J.length-1);var ue=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:J?(J.length===se.length?this.yylloc.first_column:0)+se[se.length-J.length].length-J[0].length:this.yylloc.first_column-te},this.options.ranges&&(this.yylloc.range=[ue[0],ue[0]+this.yyleng-te]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
1246 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(X){this.unput(this.match.slice(X))},"less"),pastInput:o(function(){var X=this.matched.substr(0,this.matched.length-this.match.length);return(X.length>20?"...":"")+X.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var X=this.match;return X.length<20&&(X+=this._input.substr(0,20-X.length)),(X.substr(0,20)+(X.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var X=this.pastInput(),te=new Array(X.length+1).join("-");return X+this.upcomingInput()+`
1247 +`+te+"^"},"showPosition"),test_match:o(function(X,te){var J,se,ue;if(this.options.backtrack_lexer&&(ue={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ue.yylloc.range=this.yylloc.range.slice(0))),se=X[0].match(/(?:\r\n?|\n).*/g),se&&(this.yylineno+=se.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:se?se[se.length-1].length-se[se.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+X[0].length},this.yytext+=X[0],this.match+=X[0],this.matches=X,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(X[0].length),this.matched+=X[0],J=this.performAction.call(this,this.yy,this,te,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),J)return J;if(this._backtrack){for(var Z in ue)this[Z]=ue[Z];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var X,te,J,se;this._more||(this.yytext="",this.match="");for(var ue=this._currentRules(),Z=0;Z<ue.length;Z++)if(J=this._input.match(this.rules[ue[Z]]),J&&(!te||J[0].length>te[0].length)){if(te=J,se=Z,this.options.backtrack_lexer){if(X=this.test_match(J,ue[Z]),X!==!1)return X;if(this._backtrack){te=!1;continue}else return!1}else if(!this.options.flex)break}return te?(X=this.test_match(te,ue[se]),X!==!1?X:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
1248 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var te=this.next();return te||this.lex()},"lex"),begin:o(function(te){this.conditionStack.push(te)},"begin"),popState:o(function(){var te=this.conditionStack.length-1;return te>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(te){return te=this.conditionStack.length-1-Math.abs(te||0),te>=0?this.conditionStack[te]:"INITIAL"},"topState"),pushState:o(function(te){this.begin(te)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(te,J,se,ue){var Z=ue;switch(se){case 0:return 5;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:return 19;case 7:return this.begin("LINE"),14;break;case 8:return this.begin("ID"),50;break;case 9:return this.begin("ID"),52;break;case 10:return 13;case 11:return this.begin("ID"),53;break;case 12:return J.yytext=J.yytext.trim(),this.begin("ALIAS"),70;break;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;break;case 14:return this.popState(),this.popState(),5;break;case 15:return this.begin("LINE"),36;break;case 16:return this.begin("LINE"),37;break;case 17:return this.begin("LINE"),38;break;case 18:return this.begin("LINE"),39;break;case 19:return this.begin("LINE"),49;break;case 20:return this.begin("LINE"),41;break;case 21:return this.begin("LINE"),43;break;case 22:return this.begin("LINE"),48;break;case 23:return this.begin("LINE"),44;break;case 24:return this.begin("LINE"),47;break;case 25:return this.begin("LINE"),46;break;case 26:return this.popState(),15;break;case 27:return 16;case 28:return 65;case 29:return 66;case 30:return 59;case 31:return 60;case 32:return 61;case 33:return 62;case 34:return 57;case 35:return 54;case 36:return this.begin("ID"),21;break;case 37:return this.begin("ID"),23;break;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;break;case 41:return this.popState(),"acc_title_value";break;case 42:return this.begin("acc_descr"),33;break;case 43:return this.popState(),"acc_descr_value";break;case 44:this.begin("acc_descr_multiline");break;case 45:this.popState();break;case 46:return"acc_descr_multiline_value";case 47:return 6;case 48:return 18;case 49:return 20;case 50:return 64;case 51:return 5;case 52:return J.yytext=J.yytext.trim(),70;break;case 53:return 73;case 54:return 74;case 55:return 75;case 56:return 76;case 57:return 71;case 58:return 72;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 80;case 63:return 81;case 64:return 68;case 65:return 69;case 66:return 5;case 67:return"INVALID"}},"anonymous"),rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\<->\->:\n,;]+?([\-]*[^\<->\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\<->\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\<->\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:<<->>)/i,/^(?:-->>)/i,/^(?:<<-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[45,46],inclusive:!1},acc_descr:{rules:[43],inclusive:!1},acc_title:{rules:[41],inclusive:!1},ID:{rules:[2,3,12],inclusive:!1},ALIAS:{rules:[2,3,13,14],inclusive:!1},LINE:{rules:[2,3,26],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,7,8,9,10,11,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],inclusive:!0}}};return K}();ne.lexer=le;function he(){this.yy={}}return o(he,"Parser"),he.prototype=ne,ne.Parser=he,new he}();CO.parser=CO;lfe=CO});var iVe,aVe,sVe,_6,ufe=N(()=>{"use strict";zt();vt();s6();gr();mi();iVe={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32,BIDIRECTIONAL_SOLID:33,BIDIRECTIONAL_DOTTED:34},aVe={FILLED:0,OPEN:1},sVe={LEFTOF:0,RIGHTOF:1,OVER:2},_6=class{constructor(){this.state=new pf(()=>({prevActor:void 0,actors:new Map,createdActors:new Map,destroyedActors:new Map,boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0}));this.setAccTitle=Lr;this.setAccDescription=Nr;this.setDiagramTitle=$r;this.getAccTitle=Rr;this.getAccDescription=Mr;this.getDiagramTitle=Ir;this.apply=this.apply.bind(this),this.parseBoxData=this.parseBoxData.bind(this),this.parseMessage=this.parseMessage.bind(this),this.clear(),this.setWrap(me().wrap),this.LINETYPE=iVe,this.ARROWTYPE=aVe,this.PLACEMENT=sVe}static{o(this,"SequenceDB")}addBox(e){this.state.records.boxes.push({name:e.text,wrap:e.wrap??this.autoWrap(),fill:e.color,actorKeys:[]}),this.state.records.currentBox=this.state.records.boxes.slice(-1)[0]}addActor(e,r,n,i){let a=this.state.records.currentBox,s=this.state.records.actors.get(e);if(s){if(this.state.records.currentBox&&s.box&&this.state.records.currentBox!==s.box)throw new Error(`A same participant should only be defined in one Box: ${s.name} can't be in '${s.box.name}' and in '${this.state.records.currentBox.name}' at the same time.`);if(a=s.box?s.box:this.state.records.currentBox,s.box=a,s&&r===s.name&&n==null)return}if(n?.text==null&&(n={text:r,type:i}),(i==null||n.text==null)&&(n={text:r,type:i}),this.state.records.actors.set(e,{box:a,name:r,description:n.text,wrap:n.wrap??this.autoWrap(),prevActor:this.state.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:i??"participant"}),this.state.records.prevActor){let l=this.state.records.actors.get(this.state.records.prevActor);l&&(l.nextActor=e)}this.state.records.currentBox&&this.state.records.currentBox.actorKeys.push(e),this.state.records.prevActor=e}activationCount(e){let r,n=0;if(!e)return 0;for(r=0;r<this.state.records.messages.length;r++)this.state.records.messages[r].type===this.LINETYPE.ACTIVE_START&&this.state.records.messages[r].from===e&&n++,this.state.records.messages[r].type===this.LINETYPE.ACTIVE_END&&this.state.records.messages[r].from===e&&n--;return n}addMessage(e,r,n,i){this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:e,to:r,message:n.text,wrap:n.wrap??this.autoWrap(),answer:i})}addSignal(e,r,n,i,a=!1){if(i===this.LINETYPE.ACTIVE_END&&this.activationCount(e??"")<1){let l=new Error("Trying to inactivate an inactive participant ("+e+")");throw l.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},l}return this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:e,to:r,message:n?.text??"",wrap:n?.wrap??this.autoWrap(),type:i,activate:a}),!0}hasAtLeastOneBox(){return this.state.records.boxes.length>0}hasAtLeastOneBoxWithTitle(){return this.state.records.boxes.some(e=>e.name)}getMessages(){return this.state.records.messages}getBoxes(){return this.state.records.boxes}getActors(){return this.state.records.actors}getCreatedActors(){return this.state.records.createdActors}getDestroyedActors(){return this.state.records.destroyedActors}getActor(e){return this.state.records.actors.get(e)}getActorKeys(){return[...this.state.records.actors.keys()]}enableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!0}disableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!1}showSequenceNumbers(){return this.state.records.sequenceNumbersEnabled}setWrap(e){this.state.records.wrapEnabled=e}extractWrap(e){if(e===void 0)return{};e=e.trim();let r=/^:?wrap:/.exec(e)!==null?!0:/^:?nowrap:/.exec(e)!==null?!1:void 0;return{cleanedText:(r===void 0?e:e.replace(/^:?(?:no)?wrap:/,"")).trim(),wrap:r}}autoWrap(){return this.state.records.wrapEnabled!==void 0?this.state.records.wrapEnabled:me().sequence?.wrap??!1}clear(){this.state.reset(),Ar()}parseMessage(e){let r=e.trim(),{wrap:n,cleanedText:i}=this.extractWrap(r),a={text:i,wrap:n};return Y.debug(`parseMessage: ${JSON.stringify(a)}`),a}parseBoxData(e){let r=/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(e),n=r?.[1]?r[1].trim():"transparent",i=r?.[2]?r[2].trim():void 0;if(window?.CSS)window.CSS.supports("color",n)||(n="transparent",i=e.trim());else{let l=new Option().style;l.color=n,l.color!==n&&(n="transparent",i=e.trim())}let{wrap:a,cleanedText:s}=this.extractWrap(i);return{text:s?Tr(s,me()):void 0,color:n,wrap:a}}addNote(e,r,n){let i={actor:e,placement:r,message:n.text,wrap:n.wrap??this.autoWrap()},a=[].concat(e,e);this.state.records.notes.push(i),this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:a[0],to:a[1],message:n.text,wrap:n.wrap??this.autoWrap(),type:this.LINETYPE.NOTE,placement:r})}addLinks(e,r){let n=this.getActor(e);try{let i=Tr(r.text,me());i=i.replace(/&equals;/g,"="),i=i.replace(/&amp;/g,"&");let a=JSON.parse(i);this.insertLinks(n,a)}catch(i){Y.error("error while parsing actor link text",i)}}addALink(e,r){let n=this.getActor(e);try{let i={},a=Tr(r.text,me()),s=a.indexOf("@");a=a.replace(/&equals;/g,"="),a=a.replace(/&amp;/g,"&");let l=a.slice(0,s-1).trim(),u=a.slice(s+1).trim();i[l]=u,this.insertLinks(n,i)}catch(i){Y.error("error while parsing actor link text",i)}}insertLinks(e,r){if(e.links==null)e.links=r;else for(let n in r)e.links[n]=r[n]}addProperties(e,r){let n=this.getActor(e);try{let i=Tr(r.text,me()),a=JSON.parse(i);this.insertProperties(n,a)}catch(i){Y.error("error while parsing actor properties text",i)}}insertProperties(e,r){if(e.properties==null)e.properties=r;else for(let n in r)e.properties[n]=r[n]}boxEnd(){this.state.records.currentBox=void 0}addDetails(e,r){let n=this.getActor(e),i=document.getElementById(r.text);try{let a=i.innerHTML,s=JSON.parse(a);s.properties&&this.insertProperties(n,s.properties),s.links&&this.insertLinks(n,s.links)}catch(a){Y.error("error while parsing actor details text",a)}}getActorProperty(e,r){if(e?.properties!==void 0)return e.properties[r]}apply(e){if(Array.isArray(e))e.forEach(r=>{this.apply(r)});else switch(e.type){case"sequenceIndex":this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:void 0,to:void 0,message:{start:e.sequenceIndex,step:e.sequenceIndexStep,visible:e.sequenceVisible},wrap:!1,type:e.signalType});break;case"addParticipant":this.addActor(e.actor,e.actor,e.description,e.draw);break;case"createParticipant":if(this.state.records.actors.has(e.actor))throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");this.state.records.lastCreated=e.actor,this.addActor(e.actor,e.actor,e.description,e.draw),this.state.records.createdActors.set(e.actor,this.state.records.messages.length);break;case"destroyParticipant":this.state.records.lastDestroyed=e.actor,this.state.records.destroyedActors.set(e.actor,this.state.records.messages.length);break;case"activeStart":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"activeEnd":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"addNote":this.addNote(e.actor,e.placement,e.text);break;case"addLinks":this.addLinks(e.actor,e.text);break;case"addALink":this.addALink(e.actor,e.text);break;case"addProperties":this.addProperties(e.actor,e.text);break;case"addDetails":this.addDetails(e.actor,e.text);break;case"addMessage":if(this.state.records.lastCreated){if(e.to!==this.state.records.lastCreated)throw new Error("The created participant "+this.state.records.lastCreated.name+" does not have an associated creating message after its declaration. Please check the sequence diagram.");this.state.records.lastCreated=void 0}else if(this.state.records.lastDestroyed){if(e.to!==this.state.records.lastDestroyed&&e.from!==this.state.records.lastDestroyed)throw new Error("The destroyed participant "+this.state.records.lastDestroyed.name+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");this.state.records.lastDestroyed=void 0}this.addSignal(e.from,e.to,e.msg,e.signalType,e.activate);break;case"boxStart":this.addBox(e.boxData);break;case"boxEnd":this.boxEnd();break;case"loopStart":this.addSignal(void 0,void 0,e.loopText,e.signalType);break;case"loopEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"rectStart":this.addSignal(void 0,void 0,e.color,e.signalType);break;case"rectEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"optStart":this.addSignal(void 0,void 0,e.optText,e.signalType);break;case"optEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"altStart":this.addSignal(void 0,void 0,e.altText,e.signalType);break;case"else":this.addSignal(void 0,void 0,e.altText,e.signalType);break;case"altEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"setAccTitle":Lr(e.text);break;case"parStart":this.addSignal(void 0,void 0,e.parText,e.signalType);break;case"and":this.addSignal(void 0,void 0,e.parText,e.signalType);break;case"parEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"criticalStart":this.addSignal(void 0,void 0,e.criticalText,e.signalType);break;case"option":this.addSignal(void 0,void 0,e.optionText,e.signalType);break;case"criticalEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"breakStart":this.addSignal(void 0,void 0,e.breakText,e.signalType);break;case"breakEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break}}getConfig(){return me().sequence}}});var oVe,hfe,ffe=N(()=>{"use strict";oVe=o(t=>`.actor {
1249 + stroke: ${t.actorBorder};
1250 + fill: ${t.actorBkg};
1251 + }
1252 +
1253 + text.actor > tspan {
1254 + fill: ${t.actorTextColor};
1255 + stroke: none;
1256 + }
1257 +
1258 + .actor-line {
1259 + stroke: ${t.actorLineColor};
1260 + }
1261 +
1262 + .messageLine0 {
1263 + stroke-width: 1.5;
1264 + stroke-dasharray: none;
1265 + stroke: ${t.signalColor};
1266 + }
1267 +
1268 + .messageLine1 {
1269 + stroke-width: 1.5;
1270 + stroke-dasharray: 2, 2;
1271 + stroke: ${t.signalColor};
1272 + }
1273 +
1274 + #arrowhead path {
1275 + fill: ${t.signalColor};
1276 + stroke: ${t.signalColor};
1277 + }
1278 +
1279 + .sequenceNumber {
1280 + fill: ${t.sequenceNumberColor};
1281 + }
1282 +
1283 + #sequencenumber {
1284 + fill: ${t.signalColor};
1285 + }
1286 +
1287 + #crosshead path {
1288 + fill: ${t.signalColor};
1289 + stroke: ${t.signalColor};
1290 + }
1291 +
1292 + .messageText {
1293 + fill: ${t.signalTextColor};
1294 + stroke: none;
1295 + }
1296 +
1297 + .labelBox {
1298 + stroke: ${t.labelBoxBorderColor};
1299 + fill: ${t.labelBoxBkgColor};
1300 + }
1301 +
1302 + .labelText, .labelText > tspan {
1303 + fill: ${t.labelTextColor};
1304 + stroke: none;
1305 + }
1306 +
1307 + .loopText, .loopText > tspan {
1308 + fill: ${t.loopTextColor};
1309 + stroke: none;
1310 + }
1311 +
1312 + .loopLine {
1313 + stroke-width: 2px;
1314 + stroke-dasharray: 2, 2;
1315 + stroke: ${t.labelBoxBorderColor};
1316 + fill: ${t.labelBoxBorderColor};
1317 + }
1318 +
1319 + .note {
1320 + //stroke: #decc93;
1321 + stroke: ${t.noteBorderColor};
1322 + fill: ${t.noteBkgColor};
1323 + }
1324 +
1325 + .noteText, .noteText > tspan {
1326 + fill: ${t.noteTextColor};
1327 + stroke: none;
1328 + }
1329 +
1330 + .activation0 {
1331 + fill: ${t.activationBkgColor};
1332 + stroke: ${t.activationBorderColor};
1333 + }
1334 +
1335 + .activation1 {
1336 + fill: ${t.activationBkgColor};
1337 + stroke: ${t.activationBorderColor};
1338 + }
1339 +
1340 + .activation2 {
1341 + fill: ${t.activationBkgColor};
1342 + stroke: ${t.activationBorderColor};
1343 + }
1344 +
1345 + .actorPopupMenu {
1346 + position: absolute;
1347 + }
1348 +
1349 + .actorPopupMenuPanel {
1350 + position: absolute;
1351 + fill: ${t.actorBkg};
1352 + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
1353 + filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));
1354 +}
1355 + .actor-man line {
1356 + stroke: ${t.actorBorder};
1357 + fill: ${t.actorBkg};
1358 + }
1359 + .actor-man circle, line {
1360 + stroke: ${t.actorBorder};
1361 + fill: ${t.actorBkg};
1362 + stroke-width: 2px;
1363 + }
1364 +`,"getStyles"),hfe=oVe});var AO,vf,pfe,mfe,lVe,dfe,_O,cVe,uVe,Tb,_p,gfe,Uc,DO,hVe,fVe,dVe,pVe,mVe,gVe,yVe,yfe,vVe,xVe,bVe,wVe,TVe,kVe,EVe,vfe,SVe,LO,CVe,hi,xfe=N(()=>{"use strict";gr();Wv();ir();AO=Sa(z0(),1);ji();vf=18*2,pfe="actor-top",mfe="actor-bottom",lVe="actor-box",dfe="actor-man",_O=o(function(t,e){return kd(t,e)},"drawRect"),cVe=o(function(t,e,r,n,i){if(e.links===void 0||e.links===null||Object.keys(e.links).length===0)return{height:0,width:0};let a=e.links,s=e.actorCnt,l=e.rectData;var u="none";i&&(u="block !important");let h=t.append("g");h.attr("id","actor"+s+"_popup"),h.attr("class","actorPopupMenu"),h.attr("display",u);var f="";l.class!==void 0&&(f=" "+l.class);let d=l.width>r?l.width:r,p=h.append("rect");if(p.attr("class","actorPopupMenuPanel"+f),p.attr("x",l.x),p.attr("y",l.height),p.attr("fill",l.fill),p.attr("stroke",l.stroke),p.attr("width",d),p.attr("height",l.height),p.attr("rx",l.rx),p.attr("ry",l.ry),a!=null){var m=20;for(let v in a){var g=h.append("a"),y=(0,AO.sanitizeUrl)(a[v]);g.attr("xlink:href",y),g.attr("target","_blank"),CVe(n)(v,g,l.x+10,l.height+m,d,20,{class:"actor"},n),m+=30}}return p.attr("height",m),{height:l.height+m,width:d}},"drawPopup"),uVe=o(function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"},"popupMenuToggle"),Tb=o(async function(t,e,r=null){let n=t.append("foreignObject"),i=await mh(e.text,cr()),s=n.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(i).node().getBoundingClientRect();if(n.attr("height",Math.round(s.height)).attr("width",Math.round(s.width)),e.class==="noteText"){let l=t.node().firstChild;l.setAttribute("height",s.height+2*e.textMargin);let u=l.getBBox();n.attr("x",Math.round(u.x+u.width/2-s.width/2)).attr("y",Math.round(u.y+u.height/2-s.height/2))}else if(r){let{startx:l,stopx:u,starty:h}=r;if(l>u){let f=l;l=u,u=f}n.attr("x",Math.round(l+Math.abs(l-u)/2-s.width/2)),e.class==="loopText"?n.attr("y",Math.round(h)):n.attr("y",Math.round(h-s.height))}return[n]},"drawKatex"),_p=o(function(t,e){let r=0,n=0,i=e.text.split(Ze.lineBreakRegex),[a,s]=Bo(e.fontSize),l=[],u=0,h=o(()=>e.y,"yfunc");if(e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0)switch(e.valign){case"top":case"start":h=o(()=>Math.round(e.y+e.textMargin),"yfunc");break;case"middle":case"center":h=o(()=>Math.round(e.y+(r+n+e.textMargin)/2),"yfunc");break;case"bottom":case"end":h=o(()=>Math.round(e.y+(r+n+2*e.textMargin)-e.textMargin),"yfunc");break}if(e.anchor!==void 0&&e.textMargin!==void 0&&e.width!==void 0)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle";break}for(let[f,d]of i.entries()){e.textMargin!==void 0&&e.textMargin===0&&a!==void 0&&(u=f*a);let p=t.append("text");p.attr("x",e.x),p.attr("y",h()),e.anchor!==void 0&&p.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),e.fontFamily!==void 0&&p.style("font-family",e.fontFamily),s!==void 0&&p.style("font-size",s),e.fontWeight!==void 0&&p.style("font-weight",e.fontWeight),e.fill!==void 0&&p.attr("fill",e.fill),e.class!==void 0&&p.attr("class",e.class),e.dy!==void 0?p.attr("dy",e.dy):u!==0&&p.attr("dy",u);let m=d||H9;if(e.tspan){let g=p.append("tspan");g.attr("x",e.x),e.fill!==void 0&&g.attr("fill",e.fill),g.text(m)}else p.text(m);e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0&&(n+=(p._groups||p)[0][0].getBBox().height,r=n),l.push(p)}return l},"drawText"),gfe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");return n.attr("points",r(e.x,e.y,e.width,e.height,7)),n.attr("class","labelBox"),e.y=e.y+e.height/2,_p(t,e),n},"drawLabel"),Uc=-1,DO=o((t,e,r,n)=>{t.select&&r.forEach(i=>{let a=e.get(i),s=t.select("#actor"+a.actorCnt);!n.mirrorActors&&a.stopy?s.attr("y2",a.stopy+a.height/2):n.mirrorActors&&s.attr("y2",a.stopy)})},"fixLifeLineHeights"),hVe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+e.height,l=t.append("g").lower();var u=l;n||(Uc++,Object.keys(e.links||{}).length&&!r.forceMenus&&u.attr("onclick",uVe(`actor${Uc}_popup`)).attr("cursor","pointer"),u.append("line").attr("id","actor"+Uc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),u=l.append("g"),e.actorCnt=Uc,e.links!=null&&u.attr("id","root-"+Uc));let h=Tl();var f="actor";e.properties?.class?f=e.properties.class:h.fill="#eaeaea",n?f+=` ${mfe}`:f+=` ${pfe}`,h.x=e.x,h.y=i,h.width=e.width,h.height=e.height,h.class=f,h.rx=3,h.ry=3,h.name=e.name;let d=_O(u,h);if(e.rectData=h,e.properties?.icon){let m=e.properties.icon.trim();m.charAt(0)==="@"?Iq(u,h.x+h.width-20,h.y+10,m.substr(1)):Mq(u,h.x+h.width-20,h.y+10,m)}LO(r,pi(e.description))(e.description,u,h.x,h.y,h.width,h.height,{class:`actor ${lVe}`},r);let p=e.height;if(d.node){let m=d.node().getBBox();e.height=m.height,p=m.height}return p},"drawActorTypeParticipant"),fVe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+80,l=t.append("g").lower();n||(Uc++,l.append("line").attr("id","actor"+Uc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),e.actorCnt=Uc);let u=t.append("g"),h=dfe;n?h+=` ${mfe}`:h+=` ${pfe}`,u.attr("class",h),u.attr("name",e.name);let f=Tl();f.x=e.x,f.y=i,f.fill="#eaeaea",f.width=e.width,f.height=e.height,f.class="actor",f.rx=3,f.ry=3,u.append("line").attr("id","actor-man-torso"+Uc).attr("x1",a).attr("y1",i+25).attr("x2",a).attr("y2",i+45),u.append("line").attr("id","actor-man-arms"+Uc).attr("x1",a-vf/2).attr("y1",i+33).attr("x2",a+vf/2).attr("y2",i+33),u.append("line").attr("x1",a-vf/2).attr("y1",i+60).attr("x2",a).attr("y2",i+45),u.append("line").attr("x1",a).attr("y1",i+45).attr("x2",a+vf/2-2).attr("y2",i+60);let d=u.append("circle");d.attr("cx",e.x+e.width/2),d.attr("cy",i+10),d.attr("r",15),d.attr("width",e.width),d.attr("height",e.height);let p=u.node().getBBox();return e.height=p.height,LO(r,pi(e.description))(e.description,u,f.x,f.y+35,f.width,f.height,{class:`actor ${dfe}`},r),e.height},"drawActorTypeActor"),dVe=o(async function(t,e,r,n){switch(e.type){case"actor":return await fVe(t,e,r,n);case"participant":return await hVe(t,e,r,n)}},"drawActor"),pVe=o(function(t,e,r){let i=t.append("g");yfe(i,e),e.name&&LO(r)(e.name,i,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},r),i.lower()},"drawBox"),mVe=o(function(t){return t.append("g")},"anchorElement"),gVe=o(function(t,e,r,n,i){let a=Tl(),s=e.anchored;a.x=e.startx,a.y=e.starty,a.class="activation"+i%3,a.width=e.stopx-e.startx,a.height=r-e.starty,_O(s,a)},"drawActivation"),yVe=o(async function(t,e,r,n){let{boxMargin:i,boxTextMargin:a,labelBoxHeight:s,labelBoxWidth:l,messageFontFamily:u,messageFontSize:h,messageFontWeight:f}=n,d=t.append("g"),p=o(function(y,v,x,b){return d.append("line").attr("x1",y).attr("y1",v).attr("x2",x).attr("y2",b).attr("class","loopLine")},"drawLoopLine");p(e.startx,e.starty,e.stopx,e.starty),p(e.stopx,e.starty,e.stopx,e.stopy),p(e.startx,e.stopy,e.stopx,e.stopy),p(e.startx,e.starty,e.startx,e.stopy),e.sections!==void 0&&e.sections.forEach(function(y){p(e.startx,y.y,e.stopx,y.y).style("stroke-dasharray","3, 3")});let m=Hv();m.text=r,m.x=e.startx,m.y=e.starty,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.anchor="middle",m.valign="middle",m.tspan=!1,m.width=l||50,m.height=s||20,m.textMargin=a,m.class="labelText",gfe(d,m),m=vfe(),m.text=e.title,m.x=e.startx+l/2+(e.stopx-e.startx)/2,m.y=e.starty+i+a,m.anchor="middle",m.valign="middle",m.textMargin=a,m.class="loopText",m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=!0;let g=pi(m.text)?await Tb(d,m,e):_p(d,m);if(e.sectionTitles!==void 0){for(let[y,v]of Object.entries(e.sectionTitles))if(v.message){m.text=v.message,m.x=e.startx+(e.stopx-e.startx)/2,m.y=e.sections[y].y+i+a,m.class="loopText",m.anchor="middle",m.valign="middle",m.tspan=!1,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=e.wrap,pi(m.text)?(e.starty=e.sections[y].y,await Tb(d,m,e)):_p(d,m);let x=Math.round(g.map(b=>(b._groups||b)[0][0].getBBox().height).reduce((b,w)=>b+w));e.sections[y].height+=x-(i+a)}}return e.height=Math.round(e.stopy-e.starty),d},"drawLoop"),yfe=o(function(t,e){q5(t,e)},"drawBackgroundRect"),vVe=o(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),xVe=o(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),bVe=o(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),wVe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto-start-reverse").append("path").attr("d","M -1 0 L 10 5 L 0 10 z")},"insertArrowHead"),TVe=o(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),kVe=o(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertSequenceNumber"),EVe=o(function(t){t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},"insertArrowCrossHead"),vfe=o(function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},"getTextObj"),SVe=o(function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),LO=function(){function t(a,s,l,u,h,f,d){let p=s.append("text").attr("x",l+h/2).attr("y",u+f/2+5).style("text-anchor","middle").text(a);i(p,d)}o(t,"byText");function e(a,s,l,u,h,f,d,p){let{actorFontSize:m,actorFontFamily:g,actorFontWeight:y}=p,[v,x]=Bo(m),b=a.split(Ze.lineBreakRegex);for(let w=0;w<b.length;w++){let C=w*v-v*(b.length-1)/2,T=s.append("text").attr("x",l+h/2).attr("y",u).style("text-anchor","middle").style("font-size",x).style("font-weight",y).style("font-family",g);T.append("tspan").attr("x",l+h/2).attr("dy",C).text(b[w]),T.attr("y",u+f/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(T,d)}}o(e,"byTspan");function r(a,s,l,u,h,f,d,p){let m=s.append("switch"),y=m.append("foreignObject").attr("x",l).attr("y",u).attr("width",h).attr("height",f).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");y.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(a),e(a,m,l,u,h,f,d,p),i(y,d)}o(r,"byFo");async function n(a,s,l,u,h,f,d,p){let m=await id(a,cr()),g=s.append("switch"),v=g.append("foreignObject").attr("x",l+h/2-m.width/2).attr("y",u+f/2-m.height/2).attr("width",m.width).attr("height",m.height).append("xhtml:div").style("height","100%").style("width","100%");v.append("div").style("text-align","center").style("vertical-align","middle").html(await mh(a,cr())),e(a,g,l,u,h,f,d,p),i(v,d)}o(n,"byKatex");function i(a,s){for(let l in s)s.hasOwnProperty(l)&&a.attr(l,s[l])}return o(i,"_setTextAttrs"),function(a,s=!1){return s?n:a.textPlacement==="fo"?r:a.textPlacement==="old"?t:e}}(),CVe=function(){function t(i,a,s,l,u,h,f){let d=a.append("text").attr("x",s).attr("y",l).style("text-anchor","start").text(i);n(d,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d){let{actorFontSize:p,actorFontFamily:m,actorFontWeight:g}=d,y=i.split(Ze.lineBreakRegex);for(let v=0;v<y.length;v++){let x=v*p-p*(y.length-1)/2,b=a.append("text").attr("x",s).attr("y",l).style("text-anchor","start").style("font-size",p).style("font-weight",g).style("font-family",m);b.append("tspan").attr("x",s).attr("dy",x).text(y[v]),b.attr("y",l+h/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),n(b,f)}}o(e,"byTspan");function r(i,a,s,l,u,h,f,d){let p=a.append("switch"),g=p.append("foreignObject").attr("x",s).attr("y",l).attr("width",u).attr("height",h).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");g.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,p,s,l,u,h,f,d),n(g,f)}o(r,"byFo");function n(i,a){for(let s in a)a.hasOwnProperty(s)&&i.attr(s,a[s])}return o(n,"_setTextAttrs"),function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),hi={drawRect:_O,drawText:_p,drawLabel:gfe,drawActor:dVe,drawBox:pVe,drawPopup:cVe,anchorElement:mVe,drawActivation:gVe,drawLoop:yVe,drawBackgroundRect:yfe,insertArrowHead:wVe,insertArrowFilledHead:TVe,insertSequenceNumber:kVe,insertArrowCrossHead:EVe,insertDatabaseIcon:vVe,insertComputerIcon:xVe,insertClockIcon:bVe,getTextObj:vfe,getNoteRect:SVe,fixLifeLineHeights:DO,sanitizeUrl:AO.sanitizeUrl}});async function _Ve(t,e){rt.bumpVerticalPos(10);let{startx:r,stopx:n,message:i}=e,a=Ze.splitBreaks(i).length,s=pi(i),l=s?await id(i,me()):Gt.calculateTextDimensions(i,Dp(Ne));if(!s){let d=l.height/a;e.height+=d,rt.bumpVerticalPos(d)}let u,h=l.height-10,f=l.width;if(r===n){u=rt.getVerticalPos()+h,Ne.rightAngles||(h+=Ne.boxMargin,u=rt.getVerticalPos()+h),h+=30;let d=Ze.getMax(f/2,Ne.width/2);rt.insert(r-d,rt.getVerticalPos()-10+h,n+d,rt.getVerticalPos()+30+h)}else h+=Ne.boxMargin,u=rt.getVerticalPos()+h,rt.insert(r,u-10,n,u);return rt.bumpVerticalPos(h),e.height+=h,e.stopy=e.starty+e.height,rt.insert(e.fromBounds,e.starty,e.toBounds,e.stopy),u}function Hc(t,e,r,n,i){rt.bumpVerticalPos(r);let a=n;if(e.id&&e.message&&t[e.id]){let s=t[e.id].width,l=Dp(Ne);e.message=Gt.wrapLabel(`[${e.message}]`,s-2*Ne.wrapPadding,l),e.width=s,e.wrap=!0;let u=Gt.calculateTextDimensions(e.message,l),h=Ze.getMax(u.height,Ne.labelBoxHeight);a=n+h,Y.debug(`${h} - ${e.message}`)}i(e),rt.bumpVerticalPos(a)}function RVe(t,e,r,n,i,a,s){function l(h,f){h.x<i.get(t.from).x?(rt.insert(e.stopx-f,e.starty,e.startx,e.stopy+h.height/2+Ne.noteMargin),e.stopx=e.stopx+f):(rt.insert(e.startx,e.starty,e.stopx+f,e.stopy+h.height/2+Ne.noteMargin),e.stopx=e.stopx-f)}o(l,"receiverAdjustment");function u(h,f){h.x<i.get(t.to).x?(rt.insert(e.startx-f,e.starty,e.stopx,e.stopy+h.height/2+Ne.noteMargin),e.startx=e.startx+f):(rt.insert(e.stopx,e.starty,e.startx+f,e.stopy+h.height/2+Ne.noteMargin),e.startx=e.startx-f)}if(o(u,"senderAdjustment"),a.get(t.to)==n){let h=i.get(t.to),f=h.type=="actor"?vf/2+3:h.width/2+3;l(h,f),h.starty=r-h.height/2,rt.bumpVerticalPos(h.height/2)}else if(s.get(t.from)==n){let h=i.get(t.from);if(Ne.mirrorActors){let f=h.type=="actor"?vf/2:h.width/2;u(h,f)}h.stopy=r-h.height/2,rt.bumpVerticalPos(h.height/2)}else if(s.get(t.to)==n){let h=i.get(t.to);if(Ne.mirrorActors){let f=h.type=="actor"?vf/2+3:h.width/2+3;l(h,f)}h.stopy=r-h.height/2,rt.bumpVerticalPos(h.height/2)}}async function MVe(t,e,r){let n={};for(let i of e)if(t.get(i.to)&&t.get(i.from)){let a=t.get(i.to);if(i.placement===r.db.PLACEMENT.LEFTOF&&!a.prevActor||i.placement===r.db.PLACEMENT.RIGHTOF&&!a.nextActor)continue;let s=i.placement!==void 0,l=!s,u=s?_1(Ne):Dp(Ne),h=i.wrap?Gt.wrapLabel(i.message,Ne.width-2*Ne.wrapPadding,u):i.message,d=(pi(h)?await id(i.message,me()):Gt.calculateTextDimensions(h,u)).width+2*Ne.wrapPadding;l&&i.from===a.nextActor?n[i.to]=Ze.getMax(n[i.to]||0,d):l&&i.from===a.prevActor?n[i.from]=Ze.getMax(n[i.from]||0,d):l&&i.from===i.to?(n[i.from]=Ze.getMax(n[i.from]||0,d/2),n[i.to]=Ze.getMax(n[i.to]||0,d/2)):i.placement===r.db.PLACEMENT.RIGHTOF?n[i.from]=Ze.getMax(n[i.from]||0,d):i.placement===r.db.PLACEMENT.LEFTOF?n[a.prevActor]=Ze.getMax(n[a.prevActor]||0,d):i.placement===r.db.PLACEMENT.OVER&&(a.prevActor&&(n[a.prevActor]=Ze.getMax(n[a.prevActor]||0,d/2)),a.nextActor&&(n[i.from]=Ze.getMax(n[i.from]||0,d/2)))}return Y.debug("maxMessageWidthPerActor:",n),n}async function OVe(t,e,r){let n=0;for(let a of t.keys()){let s=t.get(a);s.wrap&&(s.description=Gt.wrapLabel(s.description,Ne.width-2*Ne.wrapPadding,RO(Ne)));let l=pi(s.description)?await id(s.description,me()):Gt.calculateTextDimensions(s.description,RO(Ne));s.width=s.wrap?Ne.width:Ze.getMax(Ne.width,l.width+2*Ne.wrapPadding),s.height=s.wrap?Ze.getMax(l.height,Ne.height):Ne.height,n=Ze.getMax(n,s.height)}for(let a in e){let s=t.get(a);if(!s)continue;let l=t.get(s.nextActor);if(!l){let d=e[a]+Ne.actorMargin-s.width/2;s.margin=Ze.getMax(d,Ne.actorMargin);continue}let h=e[a]+Ne.actorMargin-s.width/2-l.width/2;s.margin=Ze.getMax(h,Ne.actorMargin)}let i=0;return r.forEach(a=>{let s=Dp(Ne),l=a.actorKeys.reduce((f,d)=>f+=t.get(d).width+(t.get(d).margin||0),0);l-=2*Ne.boxTextMargin,a.wrap&&(a.name=Gt.wrapLabel(a.name,l-2*Ne.wrapPadding,s));let u=Gt.calculateTextDimensions(a.name,s);i=Ze.getMax(u.height,i);let h=Ze.getMax(l,u.width+2*Ne.wrapPadding);if(a.margin=Ne.boxTextMargin,l<h){let f=(h-l)/2;a.margin+=f}}),r.forEach(a=>a.textMaxHeight=i),Ze.getMax(n,Ne.height)}var Ne,rt,AVe,Dp,_1,RO,DVe,LVe,NO,wfe,Tfe,D6,bfe,NVe,IVe,PVe,BVe,FVe,kfe,Efe=N(()=>{"use strict";dr();xfe();vt();gr();Wv();zt();s0();ir();Ei();Ne={},rt={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:o(function(){return Math.max.apply(null,this.actors.length===0?[0]:this.actors.map(t=>t.height||0))+(this.loops.length===0?0:this.loops.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.messages.length===0?0:this.messages.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.notes.length===0?0:this.notes.map(t=>t.height||0).reduce((t,e)=>t+e))},"getHeight"),clear:o(function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},"clear"),addBox:o(function(t){this.boxes.push(t)},"addBox"),addActor:o(function(t){this.actors.push(t)},"addActor"),addLoop:o(function(t){this.loops.push(t)},"addLoop"),addMessage:o(function(t){this.messages.push(t)},"addMessage"),addNote:o(function(t){this.notes.push(t)},"addNote"),lastActor:o(function(){return this.actors[this.actors.length-1]},"lastActor"),lastLoop:o(function(){return this.loops[this.loops.length-1]},"lastLoop"),lastMessage:o(function(){return this.messages[this.messages.length-1]},"lastMessage"),lastNote:o(function(){return this.notes[this.notes.length-1]},"lastNote"),actors:[],boxes:[],loops:[],messages:[],notes:[]},init:o(function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,Tfe(me())},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=this,a=0;function s(l){return o(function(h){a++;let f=i.sequenceItems.length-a+1;i.updateVal(h,"starty",e-f*Ne.boxMargin,Math.min),i.updateVal(h,"stopy",n+f*Ne.boxMargin,Math.max),i.updateVal(rt.data,"startx",t-f*Ne.boxMargin,Math.min),i.updateVal(rt.data,"stopx",r+f*Ne.boxMargin,Math.max),l!=="activation"&&(i.updateVal(h,"startx",t-f*Ne.boxMargin,Math.min),i.updateVal(h,"stopx",r+f*Ne.boxMargin,Math.max),i.updateVal(rt.data,"starty",e-f*Ne.boxMargin,Math.min),i.updateVal(rt.data,"stopy",n+f*Ne.boxMargin,Math.max))},"updateItemBounds")}o(s,"updateFn"),this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},"updateBounds"),insert:o(function(t,e,r,n){let i=Ze.getMin(t,r),a=Ze.getMax(t,r),s=Ze.getMin(e,n),l=Ze.getMax(e,n);this.updateVal(rt.data,"startx",i,Math.min),this.updateVal(rt.data,"starty",s,Math.min),this.updateVal(rt.data,"stopx",a,Math.max),this.updateVal(rt.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),newActivation:o(function(t,e,r){let n=r.get(t.from),i=D6(t.from).length||0,a=n.x+n.width/2+(i-1)*Ne.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+Ne.activationWidth,stopy:void 0,actor:t.from,anchored:hi.anchorElement(e)})},"newActivation"),endActivation:o(function(t){let e=this.activations.map(function(r){return r.actor}).lastIndexOf(t.from);return this.activations.splice(e,1)[0]},"endActivation"),createLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},"createLoop"),newLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},"newLoop"),endLoop:o(function(){return this.sequenceItems.pop()},"endLoop"),isLoopOverlap:o(function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},"isLoopOverlap"),addSectionToLoop:o(function(t){let e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:rt.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},"addSectionToLoop"),saveVerticalPos:o(function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},"saveVerticalPos"),resetVerticalPos:o(function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},"resetVerticalPos"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=Ze.getMax(this.data.stopy,this.verticalPos)},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return{bounds:this.data,models:this.models}},"getBounds")},AVe=o(async function(t,e){rt.bumpVerticalPos(Ne.boxMargin),e.height=Ne.boxMargin,e.starty=rt.getVerticalPos();let r=Tl();r.x=e.startx,r.y=e.starty,r.width=e.width||Ne.width,r.class="note";let n=t.append("g"),i=hi.drawRect(n,r),a=Hv();a.x=e.startx,a.y=e.starty,a.width=r.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=Ne.noteFontFamily,a.fontSize=Ne.noteFontSize,a.fontWeight=Ne.noteFontWeight,a.anchor=Ne.noteAlign,a.textMargin=Ne.noteMargin,a.valign="center";let s=pi(a.text)?await Tb(n,a):_p(n,a),l=Math.round(s.map(u=>(u._groups||u)[0][0].getBBox().height).reduce((u,h)=>u+h));i.attr("height",l+2*Ne.noteMargin),e.height+=l+2*Ne.noteMargin,rt.bumpVerticalPos(l+2*Ne.noteMargin),e.stopy=e.starty+l+2*Ne.noteMargin,e.stopx=e.startx+r.width,rt.insert(e.startx,e.starty,e.stopx,e.stopy),rt.models.addNote(e)},"drawNote"),Dp=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont"),_1=o(t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),"noteFont"),RO=o(t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}),"actorFont");o(_Ve,"boundMessage");DVe=o(async function(t,e,r,n){let{startx:i,stopx:a,starty:s,message:l,type:u,sequenceIndex:h,sequenceVisible:f}=e,d=Gt.calculateTextDimensions(l,Dp(Ne)),p=Hv();p.x=i,p.y=s+10,p.width=a-i,p.class="messageText",p.dy="1em",p.text=l,p.fontFamily=Ne.messageFontFamily,p.fontSize=Ne.messageFontSize,p.fontWeight=Ne.messageFontWeight,p.anchor=Ne.messageAlign,p.valign="center",p.textMargin=Ne.wrapPadding,p.tspan=!1,pi(p.text)?await Tb(t,p,{startx:i,stopx:a,starty:r}):_p(t,p);let m=d.width,g;i===a?Ne.rightAngles?g=t.append("path").attr("d",`M ${i},${r} H ${i+Ze.getMax(Ne.width/2,m/2)} V ${r+25} H ${i}`):g=t.append("path").attr("d","M "+i+","+r+" C "+(i+60)+","+(r-10)+" "+(i+60)+","+(r+30)+" "+i+","+(r+20)):(g=t.append("line"),g.attr("x1",i),g.attr("y1",r),g.attr("x2",a),g.attr("y2",r)),u===n.db.LINETYPE.DOTTED||u===n.db.LINETYPE.DOTTED_CROSS||u===n.db.LINETYPE.DOTTED_POINT||u===n.db.LINETYPE.DOTTED_OPEN||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED?(g.style("stroke-dasharray","3, 3"),g.attr("class","messageLine1")):g.attr("class","messageLine0");let y="";Ne.arrowMarkerAbsolute&&(y=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,y=y.replace(/\(/g,"\\("),y=y.replace(/\)/g,"\\)")),g.attr("stroke-width",2),g.attr("stroke","none"),g.style("fill","none"),(u===n.db.LINETYPE.SOLID||u===n.db.LINETYPE.DOTTED)&&g.attr("marker-end","url("+y+"#arrowhead)"),(u===n.db.LINETYPE.BIDIRECTIONAL_SOLID||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED)&&(g.attr("marker-start","url("+y+"#arrowhead)"),g.attr("marker-end","url("+y+"#arrowhead)")),(u===n.db.LINETYPE.SOLID_POINT||u===n.db.LINETYPE.DOTTED_POINT)&&g.attr("marker-end","url("+y+"#filled-head)"),(u===n.db.LINETYPE.SOLID_CROSS||u===n.db.LINETYPE.DOTTED_CROSS)&&g.attr("marker-end","url("+y+"#crosshead)"),(f||Ne.showSequenceNumbers)&&(g.attr("marker-start","url("+y+"#sequencenumber)"),t.append("text").attr("x",i).attr("y",r+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(h))},"drawMessage"),LVe=o(function(t,e,r,n,i,a,s){let l=0,u=0,h,f=0;for(let d of n){let p=e.get(d),m=p.box;h&&h!=m&&(s||rt.models.addBox(h),u+=Ne.boxMargin+h.margin),m&&m!=h&&(s||(m.x=l+u,m.y=i),u+=m.margin),p.width=p.width||Ne.width,p.height=Ze.getMax(p.height||Ne.height,Ne.height),p.margin=p.margin||Ne.actorMargin,f=Ze.getMax(f,p.height),r.get(p.name)&&(u+=p.width/2),p.x=l+u,p.starty=rt.getVerticalPos(),rt.insert(p.x,i,p.x+p.width,p.height),l+=p.width+u,p.box&&(p.box.width=l+m.margin-p.box.x),u=p.margin,h=p.box,rt.models.addActor(p)}h&&!s&&rt.models.addBox(h),rt.bumpVerticalPos(f)},"addActorRenderingData"),NO=o(async function(t,e,r,n){if(n){let i=0;rt.bumpVerticalPos(Ne.boxMargin*2);for(let a of r){let s=e.get(a);s.stopy||(s.stopy=rt.getVerticalPos());let l=await hi.drawActor(t,s,Ne,!0);i=Ze.getMax(i,l)}rt.bumpVerticalPos(i+Ne.boxMargin)}else for(let i of r){let a=e.get(i);await hi.drawActor(t,a,Ne,!1)}},"drawActors"),wfe=o(function(t,e,r,n){let i=0,a=0;for(let s of r){let l=e.get(s),u=IVe(l),h=hi.drawPopup(t,l,u,Ne,Ne.forceMenus,n);h.height>i&&(i=h.height),h.width+l.x>a&&(a=h.width+l.x)}return{maxHeight:i,maxWidth:a}},"drawActorsPopup"),Tfe=o(function(t){Gn(Ne,t),t.fontFamily&&(Ne.actorFontFamily=Ne.noteFontFamily=Ne.messageFontFamily=t.fontFamily),t.fontSize&&(Ne.actorFontSize=Ne.noteFontSize=Ne.messageFontSize=t.fontSize),t.fontWeight&&(Ne.actorFontWeight=Ne.noteFontWeight=Ne.messageFontWeight=t.fontWeight)},"setConf"),D6=o(function(t){return rt.activations.filter(function(e){return e.actor===t})},"actorActivations"),bfe=o(function(t,e){let r=e.get(t),n=D6(t),i=n.reduce(function(s,l){return Ze.getMin(s,l.startx)},r.x+r.width/2-1),a=n.reduce(function(s,l){return Ze.getMax(s,l.stopx)},r.x+r.width/2+1);return[i,a]},"activationBounds");o(Hc,"adjustLoopHeightForWrap");o(RVe,"adjustCreatedDestroyedData");NVe=o(async function(t,e,r,n){let{securityLevel:i,sequence:a}=me();Ne=a;let s;i==="sandbox"&&(s=Ge("#i"+e));let l=i==="sandbox"?Ge(s.nodes()[0].contentDocument.body):Ge("body"),u=i==="sandbox"?s.nodes()[0].contentDocument:document;rt.init(),Y.debug(n.db);let h=i==="sandbox"?l.select(`[id="${e}"]`):Ge(`[id="${e}"]`),f=n.db.getActors(),d=n.db.getCreatedActors(),p=n.db.getDestroyedActors(),m=n.db.getBoxes(),g=n.db.getActorKeys(),y=n.db.getMessages(),v=n.db.getDiagramTitle(),x=n.db.hasAtLeastOneBox(),b=n.db.hasAtLeastOneBoxWithTitle(),w=await MVe(f,y,n);if(Ne.height=await OVe(f,w,m),hi.insertComputerIcon(h),hi.insertDatabaseIcon(h),hi.insertClockIcon(h),x&&(rt.bumpVerticalPos(Ne.boxMargin),b&&rt.bumpVerticalPos(m[0].textMaxHeight)),Ne.hideUnusedParticipants===!0){let F=new Set;y.forEach(P=>{F.add(P.from),F.add(P.to)}),g=g.filter(P=>F.has(P))}LVe(h,f,d,g,0,y,!1);let C=await FVe(y,f,w,n);hi.insertArrowHead(h),hi.insertArrowCrossHead(h),hi.insertArrowFilledHead(h),hi.insertSequenceNumber(h);function T(F,P){let z=rt.endActivation(F);z.starty+18>P&&(z.starty=P-6,P+=12),hi.drawActivation(h,z,P,Ne,D6(F.from).length),rt.insert(z.startx,P-10,z.stopx,P)}o(T,"activeEnd");let E=1,A=1,S=[],_=[],I=0;for(let F of y){let P,z,$;switch(F.type){case n.db.LINETYPE.NOTE:rt.resetVerticalPos(),z=F.noteModel,await AVe(h,z);break;case n.db.LINETYPE.ACTIVE_START:rt.newActivation(F,h,f);break;case n.db.LINETYPE.ACTIVE_END:T(F,rt.getVerticalPos());break;case n.db.LINETYPE.LOOP_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.LOOP_END:P=rt.endLoop(),await hi.drawLoop(h,P,"loop",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.RECT_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin,H=>rt.newLoop(void 0,H.message));break;case n.db.LINETYPE.RECT_END:P=rt.endLoop(),_.push(P),rt.models.addLoop(P),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos());break;case n.db.LINETYPE.OPT_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.OPT_END:P=rt.endLoop(),await hi.drawLoop(h,P,"opt",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.ALT_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.ALT_ELSE:Hc(C,F,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,H=>rt.addSectionToLoop(H));break;case n.db.LINETYPE.ALT_END:P=rt.endLoop(),await hi.drawLoop(h,P,"alt",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H)),rt.saveVerticalPos();break;case n.db.LINETYPE.PAR_AND:Hc(C,F,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,H=>rt.addSectionToLoop(H));break;case n.db.LINETYPE.PAR_END:P=rt.endLoop(),await hi.drawLoop(h,P,"par",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.AUTONUMBER:E=F.message.start||E,A=F.message.step||A,F.message.visible?n.db.enableSequenceNumbers():n.db.disableSequenceNumbers();break;case n.db.LINETYPE.CRITICAL_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.CRITICAL_OPTION:Hc(C,F,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,H=>rt.addSectionToLoop(H));break;case n.db.LINETYPE.CRITICAL_END:P=rt.endLoop(),await hi.drawLoop(h,P,"critical",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;case n.db.LINETYPE.BREAK_START:Hc(C,F,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,H=>rt.newLoop(H));break;case n.db.LINETYPE.BREAK_END:P=rt.endLoop(),await hi.drawLoop(h,P,"break",Ne),rt.bumpVerticalPos(P.stopy-rt.getVerticalPos()),rt.models.addLoop(P);break;default:try{$=F.msgModel,$.starty=rt.getVerticalPos(),$.sequenceIndex=E,$.sequenceVisible=n.db.showSequenceNumbers();let H=await _Ve(h,$);RVe(F,$,H,I,f,d,p),S.push({messageModel:$,lineStartY:H}),rt.models.addMessage($)}catch(H){Y.error("error while drawing message",H)}}[n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT,n.db.LINETYPE.BIDIRECTIONAL_SOLID,n.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(F.type)&&(E=E+A),I++}Y.debug("createdActors",d),Y.debug("destroyedActors",p),await NO(h,f,g,!1);for(let F of S)await DVe(h,F.messageModel,F.lineStartY,n);Ne.mirrorActors&&await NO(h,f,g,!0),_.forEach(F=>hi.drawBackgroundRect(h,F)),DO(h,f,g,Ne);for(let F of rt.models.boxes)F.height=rt.getVerticalPos()-F.y,rt.insert(F.x,F.y,F.x+F.width,F.height),F.startx=F.x,F.starty=F.y,F.stopx=F.startx+F.width,F.stopy=F.starty+F.height,F.stroke="rgb(0,0,0, 0.5)",hi.drawBox(h,F,Ne);x&&rt.bumpVerticalPos(Ne.boxMargin);let D=wfe(h,f,g,u),{bounds:k}=rt.getBounds();k.startx===void 0&&(k.startx=0),k.starty===void 0&&(k.starty=0),k.stopx===void 0&&(k.stopx=0),k.stopy===void 0&&(k.stopy=0);let L=k.stopy-k.starty;L<D.maxHeight&&(L=D.maxHeight);let R=L+2*Ne.diagramMarginY;Ne.mirrorActors&&(R=R-Ne.boxMargin+Ne.bottomMarginAdj);let O=k.stopx-k.startx;O<D.maxWidth&&(O=D.maxWidth);let M=O+2*Ne.diagramMarginX;v&&h.append("text").text(v).attr("x",(k.stopx-k.startx)/2-2*Ne.diagramMarginX).attr("y",-25),vn(h,R,M,Ne.useMaxWidth);let B=v?40:0;h.attr("viewBox",k.startx-Ne.diagramMarginX+" -"+(Ne.diagramMarginY+B)+" "+M+" "+(R+B)),Y.debug("models:",rt.models)},"draw");o(MVe,"getMaxMessageWidthPerActor");IVe=o(function(t){let e=0,r=RO(Ne);for(let n in t.links){let a=Gt.calculateTextDimensions(n,r).width+2*Ne.wrapPadding+2*Ne.boxMargin;e<a&&(e=a)}return e},"getRequiredPopupWidth");o(OVe,"calculateActorMargins");PVe=o(async function(t,e,r){let n=e.get(t.from),i=e.get(t.to),a=n.x,s=i.x,l=t.wrap&&t.message,u=pi(t.message)?await id(t.message,me()):Gt.calculateTextDimensions(l?Gt.wrapLabel(t.message,Ne.width,_1(Ne)):t.message,_1(Ne)),h={width:l?Ne.width:Ze.getMax(Ne.width,u.width+2*Ne.noteMargin),height:0,startx:n.x,stopx:0,starty:0,stopy:0,message:t.message};return t.placement===r.db.PLACEMENT.RIGHTOF?(h.width=l?Ze.getMax(Ne.width,u.width):Ze.getMax(n.width/2+i.width/2,u.width+2*Ne.noteMargin),h.startx=a+(n.width+Ne.actorMargin)/2):t.placement===r.db.PLACEMENT.LEFTOF?(h.width=l?Ze.getMax(Ne.width,u.width+2*Ne.noteMargin):Ze.getMax(n.width/2+i.width/2,u.width+2*Ne.noteMargin),h.startx=a-h.width+(n.width-Ne.actorMargin)/2):t.to===t.from?(u=Gt.calculateTextDimensions(l?Gt.wrapLabel(t.message,Ze.getMax(Ne.width,n.width),_1(Ne)):t.message,_1(Ne)),h.width=l?Ze.getMax(Ne.width,n.width):Ze.getMax(n.width,Ne.width,u.width+2*Ne.noteMargin),h.startx=a+(n.width-h.width)/2):(h.width=Math.abs(a+n.width/2-(s+i.width/2))+Ne.actorMargin,h.startx=a<s?a+n.width/2-Ne.actorMargin/2:s+i.width/2-Ne.actorMargin/2),l&&(h.message=Gt.wrapLabel(t.message,h.width-2*Ne.wrapPadding,_1(Ne))),Y.debug(`NM:[${h.startx},${h.stopx},${h.starty},${h.stopy}:${h.width},${h.height}=${t.message}]`),h},"buildNoteModel"),BVe=o(function(t,e,r){if(![r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN,r.db.LINETYPE.SOLID,r.db.LINETYPE.DOTTED,r.db.LINETYPE.SOLID_CROSS,r.db.LINETYPE.DOTTED_CROSS,r.db.LINETYPE.SOLID_POINT,r.db.LINETYPE.DOTTED_POINT,r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(t.type))return{};let[n,i]=bfe(t.from,e),[a,s]=bfe(t.to,e),l=n<=a,u=l?i:n,h=l?a:s,f=Math.abs(a-s)>2,d=o(y=>l?-y:y,"adjustValue");t.from===t.to?h=u:(t.activate&&!f&&(h+=d(Ne.activationWidth/2-1)),[r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN].includes(t.type)||(h+=d(3)),[r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(t.type)&&(u-=d(3)));let p=[n,i,a,s],m=Math.abs(u-h);t.wrap&&t.message&&(t.message=Gt.wrapLabel(t.message,Ze.getMax(m+2*Ne.wrapPadding,Ne.width),Dp(Ne)));let g=Gt.calculateTextDimensions(t.message,Dp(Ne));return{width:Ze.getMax(t.wrap?0:g.width+2*Ne.wrapPadding,m+2*Ne.wrapPadding,Ne.width),height:0,startx:u,stopx:h,starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,p),toBounds:Math.max.apply(null,p)}},"buildMessageModel"),FVe=o(async function(t,e,r,n){let i={},a=[],s,l,u;for(let h of t){switch(h.type){case n.db.LINETYPE.LOOP_START:case n.db.LINETYPE.ALT_START:case n.db.LINETYPE.OPT_START:case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:case n.db.LINETYPE.CRITICAL_START:case n.db.LINETYPE.BREAK_START:a.push({id:h.id,msg:h.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case n.db.LINETYPE.ALT_ELSE:case n.db.LINETYPE.PAR_AND:case n.db.LINETYPE.CRITICAL_OPTION:h.message&&(s=a.pop(),i[s.id]=s,i[h.id]=s,a.push(s));break;case n.db.LINETYPE.LOOP_END:case n.db.LINETYPE.ALT_END:case n.db.LINETYPE.OPT_END:case n.db.LINETYPE.PAR_END:case n.db.LINETYPE.CRITICAL_END:case n.db.LINETYPE.BREAK_END:s=a.pop(),i[s.id]=s;break;case n.db.LINETYPE.ACTIVE_START:{let d=e.get(h.from?h.from:h.to.actor),p=D6(h.from?h.from:h.to.actor).length,m=d.x+d.width/2+(p-1)*Ne.activationWidth/2,g={startx:m,stopx:m+Ne.activationWidth,actor:h.from,enabled:!0};rt.activations.push(g)}break;case n.db.LINETYPE.ACTIVE_END:{let d=rt.activations.map(p=>p.actor).lastIndexOf(h.from);rt.activations.splice(d,1).splice(0,1)}break}h.placement!==void 0?(l=await PVe(h,e,n),h.noteModel=l,a.forEach(d=>{s=d,s.from=Ze.getMin(s.from,l.startx),s.to=Ze.getMax(s.to,l.startx+l.width),s.width=Ze.getMax(s.width,Math.abs(s.from-s.to))-Ne.labelBoxWidth})):(u=BVe(h,e,n),h.msgModel=u,u.startx&&u.stopx&&a.length>0&&a.forEach(d=>{if(s=d,u.startx===u.stopx){let p=e.get(h.from),m=e.get(h.to);s.from=Ze.getMin(p.x-u.width/2,p.x-p.width/2,s.from),s.to=Ze.getMax(m.x+u.width/2,m.x+p.width/2,s.to),s.width=Ze.getMax(s.width,Math.abs(s.to-s.from))-Ne.labelBoxWidth}else s.from=Ze.getMin(u.startx,s.from),s.to=Ze.getMax(u.stopx,s.to),s.width=Ze.getMax(s.width,u.width)-Ne.labelBoxWidth}))}return rt.activations=[],Y.debug("Loop type widths:",i),i},"calculateLoopBounds"),kfe={bounds:rt,drawActors:NO,drawActorsPopup:wfe,setConf:Tfe,draw:NVe}});var Sfe={};hr(Sfe,{diagram:()=>$Ve});var $Ve,Cfe=N(()=>{"use strict";cfe();ufe();ffe();zt();Efe();$Ve={parser:lfe,get db(){return new _6},renderer:kfe,styles:hfe,init:o(t=>{t.sequence||(t.sequence={}),t.wrap&&(t.sequence.wrap=t.wrap,Yy({sequence:{wrap:t.wrap}}))},"init")}});var MO,L6,IO=N(()=>{"use strict";MO=function(){var t=o(function(Ie,be,W,de){for(W=W||{},de=Ie.length;de--;W[Ie[de]]=be);return W},"o"),e=[1,18],r=[1,19],n=[1,20],i=[1,41],a=[1,42],s=[1,26],l=[1,24],u=[1,25],h=[1,32],f=[1,33],d=[1,34],p=[1,45],m=[1,35],g=[1,36],y=[1,37],v=[1,38],x=[1,27],b=[1,28],w=[1,29],C=[1,30],T=[1,31],E=[1,44],A=[1,46],S=[1,43],_=[1,47],I=[1,9],D=[1,8,9],k=[1,58],L=[1,59],R=[1,60],O=[1,61],M=[1,62],B=[1,63],F=[1,64],P=[1,8,9,41],z=[1,76],$=[1,8,9,12,13,22,39,41,44,66,67,68,69,70,71,72,77,79],H=[1,8,9,12,13,17,20,22,39,41,44,48,58,66,67,68,69,70,71,72,77,79,84,99,101,102],Q=[13,58,84,99,101,102],j=[13,58,71,72,84,99,101,102],ie=[13,58,66,67,68,69,70,84,99,101,102],ne=[1,98],le=[1,115],he=[1,107],K=[1,113],X=[1,108],te=[1,109],J=[1,110],se=[1,111],ue=[1,112],Z=[1,114],Se=[22,58,59,80,84,85,86,87,88,89],ce=[1,8,9,39,41,44],ae=[1,8,9,22],Oe=[1,143],ge=[1,8,9,59],ze=[1,8,9,22,58,59,80,84,85,86,87,88,89],He={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,DOT:17,className:18,classLiteralName:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,CLASS:46,ANNOTATION_START:47,ANNOTATION_END:48,MEMBER:49,SEPARATOR:50,relation:51,NOTE_FOR:52,noteText:53,NOTE:54,CLASSDEF:55,classList:56,stylesOpt:57,ALPHA:58,COMMA:59,direction_tb:60,direction_bt:61,direction_rl:62,direction_lr:63,relationType:64,lineType:65,AGGREGATION:66,EXTENSION:67,COMPOSITION:68,DEPENDENCY:69,LOLLIPOP:70,LINE:71,DOTTED_LINE:72,CALLBACK:73,LINK:74,LINK_TARGET:75,CLICK:76,CALLBACK_NAME:77,CALLBACK_ARGS:78,HREF:79,STYLE:80,CSSCLASS:81,style:82,styleComponent:83,NUM:84,COLON:85,UNIT:86,SPACE:87,BRKT:88,PCT:89,commentToken:90,textToken:91,graphCodeTokens:92,textNoTagsToken:93,TAGSTART:94,TAGEND:95,"==":96,"--":97,DEFAULT:98,MINUS:99,keywords:100,UNICODE_TEXT:101,BQUOTE_STR:102,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",17:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"CLASS",47:"ANNOTATION_START",48:"ANNOTATION_END",49:"MEMBER",50:"SEPARATOR",52:"NOTE_FOR",54:"NOTE",55:"CLASSDEF",58:"ALPHA",59:"COMMA",60:"direction_tb",61:"direction_bt",62:"direction_rl",63:"direction_lr",66:"AGGREGATION",67:"EXTENSION",68:"COMPOSITION",69:"DEPENDENCY",70:"LOLLIPOP",71:"LINE",72:"DOTTED_LINE",73:"CALLBACK",74:"LINK",75:"LINK_TARGET",76:"CLICK",77:"CALLBACK_NAME",78:"CALLBACK_ARGS",79:"HREF",80:"STYLE",81:"CSSCLASS",84:"NUM",85:"COLON",86:"UNIT",87:"SPACE",88:"BRKT",89:"PCT",92:"graphCodeTokens",94:"TAGSTART",95:"TAGEND",96:"==",97:"--",98:"DEFAULT",99:"MINUS",100:"keywords",101:"UNICODE_TEXT",102:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,3],[15,2],[18,1],[18,3],[18,1],[18,2],[18,2],[18,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,6],[43,2],[43,3],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[56,1],[56,3],[32,1],[32,1],[32,1],[32,1],[51,3],[51,2],[51,2],[51,1],[64,1],[64,1],[64,1],[64,1],[64,1],[65,1],[65,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[57,1],[57,3],[82,1],[82,2],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[90,1],[90,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[93,1],[93,1],[93,1],[93,1],[16,1],[16,1],[16,1],[16,1],[19,1],[53,1]],performAction:o(function(be,W,de,re,oe,V,xe){var q=V.length-1;switch(oe){case 8:this.$=V[q-1];break;case 9:case 12:case 14:this.$=V[q];break;case 10:case 13:this.$=V[q-2]+"."+V[q];break;case 11:case 15:this.$=V[q-1]+V[q];break;case 16:case 17:this.$=V[q-1]+"~"+V[q]+"~";break;case 18:re.addRelation(V[q]);break;case 19:V[q-1].title=re.cleanupLabel(V[q]),re.addRelation(V[q-1]);break;case 30:this.$=V[q].trim(),re.setAccTitle(this.$);break;case 31:case 32:this.$=V[q].trim(),re.setAccDescription(this.$);break;case 33:re.addClassesToNamespace(V[q-3],V[q-1]);break;case 34:re.addClassesToNamespace(V[q-4],V[q-1]);break;case 35:this.$=V[q],re.addNamespace(V[q]);break;case 36:this.$=[V[q]];break;case 37:this.$=[V[q-1]];break;case 38:V[q].unshift(V[q-2]),this.$=V[q];break;case 40:re.setCssClass(V[q-2],V[q]);break;case 41:re.addMembers(V[q-3],V[q-1]);break;case 42:re.setCssClass(V[q-5],V[q-3]),re.addMembers(V[q-5],V[q-1]);break;case 43:this.$=V[q],re.addClass(V[q]);break;case 44:this.$=V[q-1],re.addClass(V[q-1]),re.setClassLabel(V[q-1],V[q]);break;case 45:re.addAnnotation(V[q],V[q-2]);break;case 46:case 59:this.$=[V[q]];break;case 47:V[q].push(V[q-1]),this.$=V[q];break;case 48:break;case 49:re.addMember(V[q-1],re.cleanupLabel(V[q]));break;case 50:break;case 51:break;case 52:this.$={id1:V[q-2],id2:V[q],relation:V[q-1],relationTitle1:"none",relationTitle2:"none"};break;case 53:this.$={id1:V[q-3],id2:V[q],relation:V[q-1],relationTitle1:V[q-2],relationTitle2:"none"};break;case 54:this.$={id1:V[q-3],id2:V[q],relation:V[q-2],relationTitle1:"none",relationTitle2:V[q-1]};break;case 55:this.$={id1:V[q-4],id2:V[q],relation:V[q-2],relationTitle1:V[q-3],relationTitle2:V[q-1]};break;case 56:re.addNote(V[q],V[q-1]);break;case 57:re.addNote(V[q]);break;case 58:this.$=V[q-2],re.defineClass(V[q-1],V[q]);break;case 60:this.$=V[q-2].concat([V[q]]);break;case 61:re.setDirection("TB");break;case 62:re.setDirection("BT");break;case 63:re.setDirection("RL");break;case 64:re.setDirection("LR");break;case 65:this.$={type1:V[q-2],type2:V[q],lineType:V[q-1]};break;case 66:this.$={type1:"none",type2:V[q],lineType:V[q-1]};break;case 67:this.$={type1:V[q-1],type2:"none",lineType:V[q]};break;case 68:this.$={type1:"none",type2:"none",lineType:V[q]};break;case 69:this.$=re.relationType.AGGREGATION;break;case 70:this.$=re.relationType.EXTENSION;break;case 71:this.$=re.relationType.COMPOSITION;break;case 72:this.$=re.relationType.DEPENDENCY;break;case 73:this.$=re.relationType.LOLLIPOP;break;case 74:this.$=re.lineType.LINE;break;case 75:this.$=re.lineType.DOTTED_LINE;break;case 76:case 82:this.$=V[q-2],re.setClickEvent(V[q-1],V[q]);break;case 77:case 83:this.$=V[q-3],re.setClickEvent(V[q-2],V[q-1]),re.setTooltip(V[q-2],V[q]);break;case 78:this.$=V[q-2],re.setLink(V[q-1],V[q]);break;case 79:this.$=V[q-3],re.setLink(V[q-2],V[q-1],V[q]);break;case 80:this.$=V[q-3],re.setLink(V[q-2],V[q-1]),re.setTooltip(V[q-2],V[q]);break;case 81:this.$=V[q-4],re.setLink(V[q-3],V[q-2],V[q]),re.setTooltip(V[q-3],V[q-1]);break;case 84:this.$=V[q-3],re.setClickEvent(V[q-2],V[q-1],V[q]);break;case 85:this.$=V[q-4],re.setClickEvent(V[q-3],V[q-2],V[q-1]),re.setTooltip(V[q-3],V[q]);break;case 86:this.$=V[q-3],re.setLink(V[q-2],V[q]);break;case 87:this.$=V[q-4],re.setLink(V[q-3],V[q-1],V[q]);break;case 88:this.$=V[q-4],re.setLink(V[q-3],V[q-1]),re.setTooltip(V[q-3],V[q]);break;case 89:this.$=V[q-5],re.setLink(V[q-4],V[q-2],V[q]),re.setTooltip(V[q-4],V[q-1]);break;case 90:this.$=V[q-2],re.setCssStyle(V[q-1],V[q]);break;case 91:re.setCssClass(V[q-1],V[q]);break;case 92:this.$=[V[q]];break;case 93:V[q-2].push(V[q]),this.$=V[q-2];break;case 95:this.$=V[q-1]+V[q];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:C,81:T,84:E,99:A,101:S,102:_},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(I,[2,5],{8:[1,48]}),{8:[1,49]},t(D,[2,18],{22:[1,50]}),t(D,[2,20]),t(D,[2,21]),t(D,[2,22]),t(D,[2,23]),t(D,[2,24]),t(D,[2,25]),t(D,[2,26]),t(D,[2,27]),t(D,[2,28]),t(D,[2,29]),{34:[1,51]},{36:[1,52]},t(D,[2,32]),t(D,[2,48],{51:53,64:56,65:57,13:[1,54],22:[1,55],66:k,67:L,68:R,69:O,70:M,71:B,72:F}),{39:[1,65]},t(P,[2,39],{39:[1,67],44:[1,66]}),t(D,[2,50]),t(D,[2,51]),{16:68,58:p,84:E,99:A,101:S},{16:39,18:69,19:40,58:p,84:E,99:A,101:S,102:_},{16:39,18:70,19:40,58:p,84:E,99:A,101:S,102:_},{16:39,18:71,19:40,58:p,84:E,99:A,101:S,102:_},{58:[1,72]},{13:[1,73]},{16:39,18:74,19:40,58:p,84:E,99:A,101:S,102:_},{13:z,53:75},{56:77,58:[1,78]},t(D,[2,61]),t(D,[2,62]),t(D,[2,63]),t(D,[2,64]),t($,[2,12],{16:39,19:40,18:80,17:[1,79],20:[1,81],58:p,84:E,99:A,101:S,102:_}),t($,[2,14],{20:[1,82]}),{15:83,16:84,58:p,84:E,99:A,101:S},{16:39,18:85,19:40,58:p,84:E,99:A,101:S,102:_},t(H,[2,118]),t(H,[2,119]),t(H,[2,120]),t(H,[2,121]),t([1,8,9,12,13,20,22,39,41,44,66,67,68,69,70,71,72,77,79],[2,122]),t(I,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,18:21,38:22,43:23,16:39,19:40,5:86,33:e,35:r,37:n,42:i,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:C,81:T,84:E,99:A,101:S,102:_}),{5:87,10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:C,81:T,84:E,99:A,101:S,102:_},t(D,[2,19]),t(D,[2,30]),t(D,[2,31]),{13:[1,89],16:39,18:88,19:40,58:p,84:E,99:A,101:S,102:_},{51:90,64:56,65:57,66:k,67:L,68:R,69:O,70:M,71:B,72:F},t(D,[2,49]),{65:91,71:B,72:F},t(Q,[2,68],{64:92,66:k,67:L,68:R,69:O,70:M}),t(j,[2,69]),t(j,[2,70]),t(j,[2,71]),t(j,[2,72]),t(j,[2,73]),t(ie,[2,74]),t(ie,[2,75]),{8:[1,94],24:95,40:93,43:23,46:a},{16:96,58:p,84:E,99:A,101:S},{45:97,49:ne},{48:[1,99]},{13:[1,100]},{13:[1,101]},{77:[1,102],79:[1,103]},{22:le,57:104,58:he,80:K,82:105,83:106,84:X,85:te,86:J,87:se,88:ue,89:Z},{58:[1,116]},{13:z,53:117},t(D,[2,57]),t(D,[2,123]),{22:le,57:118,58:he,59:[1,119],80:K,82:105,83:106,84:X,85:te,86:J,87:se,88:ue,89:Z},t(Se,[2,59]),{16:39,18:120,19:40,58:p,84:E,99:A,101:S,102:_},t($,[2,15]),t($,[2,16]),t($,[2,17]),{39:[2,35]},{15:122,16:84,17:[1,121],39:[2,9],58:p,84:E,99:A,101:S},t(ce,[2,43],{11:123,12:[1,124]}),t(I,[2,7]),{9:[1,125]},t(ae,[2,52]),{16:39,18:126,19:40,58:p,84:E,99:A,101:S,102:_},{13:[1,128],16:39,18:127,19:40,58:p,84:E,99:A,101:S,102:_},t(Q,[2,67],{64:129,66:k,67:L,68:R,69:O,70:M}),t(Q,[2,66]),{41:[1,130]},{24:95,40:131,43:23,46:a},{8:[1,132],41:[2,36]},t(P,[2,40],{39:[1,133]}),{41:[1,134]},{41:[2,46],45:135,49:ne},{16:39,18:136,19:40,58:p,84:E,99:A,101:S,102:_},t(D,[2,76],{13:[1,137]}),t(D,[2,78],{13:[1,139],75:[1,138]}),t(D,[2,82],{13:[1,140],78:[1,141]}),{13:[1,142]},t(D,[2,90],{59:Oe}),t(ge,[2,92],{83:144,22:le,58:he,80:K,84:X,85:te,86:J,87:se,88:ue,89:Z}),t(ze,[2,94]),t(ze,[2,96]),t(ze,[2,97]),t(ze,[2,98]),t(ze,[2,99]),t(ze,[2,100]),t(ze,[2,101]),t(ze,[2,102]),t(ze,[2,103]),t(ze,[2,104]),t(D,[2,91]),t(D,[2,56]),t(D,[2,58],{59:Oe}),{58:[1,145]},t($,[2,13]),{15:146,16:84,58:p,84:E,99:A,101:S},{39:[2,11]},t(ce,[2,44]),{13:[1,147]},{1:[2,4]},t(ae,[2,54]),t(ae,[2,53]),{16:39,18:148,19:40,58:p,84:E,99:A,101:S,102:_},t(Q,[2,65]),t(D,[2,33]),{41:[1,149]},{24:95,40:150,41:[2,37],43:23,46:a},{45:151,49:ne},t(P,[2,41]),{41:[2,47]},t(D,[2,45]),t(D,[2,77]),t(D,[2,79]),t(D,[2,80],{75:[1,152]}),t(D,[2,83]),t(D,[2,84],{13:[1,153]}),t(D,[2,86],{13:[1,155],75:[1,154]}),{22:le,58:he,80:K,82:156,83:106,84:X,85:te,86:J,87:se,88:ue,89:Z},t(ze,[2,95]),t(Se,[2,60]),{39:[2,10]},{14:[1,157]},t(ae,[2,55]),t(D,[2,34]),{41:[2,38]},{41:[1,158]},t(D,[2,81]),t(D,[2,85]),t(D,[2,87]),t(D,[2,88],{75:[1,159]}),t(ge,[2,93],{83:144,22:le,58:he,80:K,84:X,85:te,86:J,87:se,88:ue,89:Z}),t(ce,[2,8]),t(P,[2,42]),t(D,[2,89])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],83:[2,35],122:[2,11],125:[2,4],135:[2,47],146:[2,10],150:[2,38]},parseError:o(function(be,W){if(W.recoverable)this.trace(be);else{var de=new Error(be);throw de.hash=W,de}},"parseError"),parse:o(function(be){var W=this,de=[0],re=[],oe=[null],V=[],xe=this.table,q="",pe=0,ve=0,Pe=0,_e=2,we=1,Ve=V.slice.call(arguments,1),De=Object.create(this.lexer),qe={yy:{}};for(var at in this.yy)Object.prototype.hasOwnProperty.call(this.yy,at)&&(qe.yy[at]=this.yy[at]);De.setInput(be,qe.yy),qe.yy.lexer=De,qe.yy.parser=this,typeof De.yylloc>"u"&&(De.yylloc={});var Rt=De.yylloc;V.push(Rt);var st=De.options&&De.options.ranges;typeof qe.yy.parseError=="function"?this.parseError=qe.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ue(Tt){de.length=de.length-2*Tt,oe.length=oe.length-Tt,V.length=V.length-Tt}o(Ue,"popStack");function ct(){var Tt;return Tt=re.pop()||De.lex()||we,typeof Tt!="number"&&(Tt instanceof Array&&(re=Tt,Tt=re.pop()),Tt=W.symbols_[Tt]||Tt),Tt}o(ct,"lex");for(var We,ot,Yt,bt,Mt,xt,ut={},Et,ft,yt,nt;;){if(Yt=de[de.length-1],this.defaultActions[Yt]?bt=this.defaultActions[Yt]:((We===null||typeof We>"u")&&(We=ct()),bt=xe[Yt]&&xe[Yt][We]),typeof bt>"u"||!bt.length||!bt[0]){var dn="";nt=[];for(Et in xe[Yt])this.terminals_[Et]&&Et>_e&&nt.push("'"+this.terminals_[Et]+"'");De.showPosition?dn="Parse error on line "+(pe+1)+`:
1365 +`+De.showPosition()+`
1366 +Expecting `+nt.join(", ")+", got '"+(this.terminals_[We]||We)+"'":dn="Parse error on line "+(pe+1)+": Unexpected "+(We==we?"end of input":"'"+(this.terminals_[We]||We)+"'"),this.parseError(dn,{text:De.match,token:this.terminals_[We]||We,line:De.yylineno,loc:Rt,expected:nt})}if(bt[0]instanceof Array&&bt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Yt+", token: "+We);switch(bt[0]){case 1:de.push(We),oe.push(De.yytext),V.push(De.yylloc),de.push(bt[1]),We=null,ot?(We=ot,ot=null):(ve=De.yyleng,q=De.yytext,pe=De.yylineno,Rt=De.yylloc,Pe>0&&Pe--);break;case 2:if(ft=this.productions_[bt[1]][1],ut.$=oe[oe.length-ft],ut._$={first_line:V[V.length-(ft||1)].first_line,last_line:V[V.length-1].last_line,first_column:V[V.length-(ft||1)].first_column,last_column:V[V.length-1].last_column},st&&(ut._$.range=[V[V.length-(ft||1)].range[0],V[V.length-1].range[1]]),xt=this.performAction.apply(ut,[q,ve,pe,qe.yy,bt[1],oe,V].concat(Ve)),typeof xt<"u")return xt;ft&&(de=de.slice(0,-1*ft*2),oe=oe.slice(0,-1*ft),V=V.slice(0,-1*ft)),de.push(this.productions_[bt[1]][0]),oe.push(ut.$),V.push(ut._$),yt=xe[de[de.length-2]][de[de.length-1]],de.push(yt);break;case 3:return!0}}return!0},"parse")},$e=function(){var Ie={EOF:1,parseError:o(function(W,de){if(this.yy.parser)this.yy.parser.parseError(W,de);else throw new Error(W)},"parseError"),setInput:o(function(be,W){return this.yy=W||this.yy||{},this._input=be,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var be=this._input[0];this.yytext+=be,this.yyleng++,this.offset++,this.match+=be,this.matched+=be;var W=be.match(/(?:\r\n?|\n).*/g);return W?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),be},"input"),unput:o(function(be){var W=be.length,de=be.split(/(?:\r\n?|\n)/g);this._input=be+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-W),this.offset-=W;var re=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),de.length-1&&(this.yylineno-=de.length-1);var oe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:de?(de.length===re.length?this.yylloc.first_column:0)+re[re.length-de.length].length-de[0].length:this.yylloc.first_column-W},this.options.ranges&&(this.yylloc.range=[oe[0],oe[0]+this.yyleng-W]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
1367 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(be){this.unput(this.match.slice(be))},"less"),pastInput:o(function(){var be=this.matched.substr(0,this.matched.length-this.match.length);return(be.length>20?"...":"")+be.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var be=this.match;return be.length<20&&(be+=this._input.substr(0,20-be.length)),(be.substr(0,20)+(be.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var be=this.pastInput(),W=new Array(be.length+1).join("-");return be+this.upcomingInput()+`
1368 +`+W+"^"},"showPosition"),test_match:o(function(be,W){var de,re,oe;if(this.options.backtrack_lexer&&(oe={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(oe.yylloc.range=this.yylloc.range.slice(0))),re=be[0].match(/(?:\r\n?|\n).*/g),re&&(this.yylineno+=re.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:re?re[re.length-1].length-re[re.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+be[0].length},this.yytext+=be[0],this.match+=be[0],this.matches=be,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(be[0].length),this.matched+=be[0],de=this.performAction.call(this,this.yy,this,W,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),de)return de;if(this._backtrack){for(var V in oe)this[V]=oe[V];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var be,W,de,re;this._more||(this.yytext="",this.match="");for(var oe=this._currentRules(),V=0;V<oe.length;V++)if(de=this._input.match(this.rules[oe[V]]),de&&(!W||de[0].length>W[0].length)){if(W=de,re=V,this.options.backtrack_lexer){if(be=this.test_match(de,oe[V]),be!==!1)return be;if(this._backtrack){W=!1;continue}else return!1}else if(!this.options.flex)break}return W?(be=this.test_match(W,oe[re]),be!==!1?be:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
1369 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var W=this.next();return W||this.lex()},"lex"),begin:o(function(W){this.conditionStack.push(W)},"begin"),popState:o(function(){var W=this.conditionStack.length-1;return W>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(W){return W=this.conditionStack.length-1-Math.abs(W||0),W>=0?this.conditionStack[W]:"INITIAL"},"topState"),pushState:o(function(W){this.begin(W)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(W,de,re,oe){var V=oe;switch(re){case 0:return 60;case 1:return 61;case 2:return 62;case 3:return 63;case 4:break;case 5:break;case 6:return this.begin("acc_title"),33;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),35;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 77;case 22:this.popState();break;case 23:return 78;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return 80;case 28:return 55;case 29:return this.begin("namespace"),42;break;case 30:return this.popState(),8;break;case 31:break;case 32:return this.begin("namespace-body"),39;break;case 33:return this.popState(),41;break;case 34:return"EOF_IN_STRUCT";case 35:return 8;case 36:break;case 37:return"EDGE_STATE";case 38:return this.begin("class"),46;break;case 39:return this.popState(),8;break;case 40:break;case 41:return this.popState(),this.popState(),41;break;case 42:return this.begin("class-body"),39;break;case 43:return this.popState(),41;break;case 44:return"EOF_IN_STRUCT";case 45:return"EDGE_STATE";case 46:return"OPEN_IN_STRUCT";case 47:break;case 48:return"MEMBER";case 49:return 81;case 50:return 73;case 51:return 74;case 52:return 76;case 53:return 52;case 54:return 54;case 55:return 47;case 56:return 48;case 57:return 79;case 58:this.popState();break;case 59:return"GENERICTYPE";case 60:this.begin("generic");break;case 61:this.popState();break;case 62:return"BQUOTE_STR";case 63:this.begin("bqstring");break;case 64:return 75;case 65:return 75;case 66:return 75;case 67:return 75;case 68:return 67;case 69:return 67;case 70:return 69;case 71:return 69;case 72:return 68;case 73:return 66;case 74:return 70;case 75:return 71;case 76:return 72;case 77:return 22;case 78:return 44;case 79:return 99;case 80:return 17;case 81:return"PLUS";case 82:return 85;case 83:return 59;case 84:return 88;case 85:return 88;case 86:return 89;case 87:return"EQUALS";case 88:return"EQUALS";case 89:return 58;case 90:return 12;case 91:return 14;case 92:return"PUNCTUATION";case 93:return 84;case 94:return 101;case 95:return 87;case 96:return 87;case 97:return 9}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:classDef\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,33,34,35,36,37,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},namespace:{rules:[26,29,30,31,32,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},"class-body":{rules:[26,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},class:{rules:[26,39,40,41,42,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr:{rules:[9,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_title:{rules:[7,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_args:{rules:[22,23,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_name:{rules:[19,20,21,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},href:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},struct:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},generic:{rules:[26,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},bqstring:{rules:[26,49,50,51,52,53,54,55,56,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},string:{rules:[24,25,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,29,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],inclusive:!0}}};return Ie}();He.lexer=$e;function Re(){this.yy={}}return o(Re,"Parser"),Re.prototype=He,He.Parser=Re,new Re}();MO.parser=MO;L6=MO});var Dfe,kb,Lfe=N(()=>{"use strict";zt();gr();Dfe=["#","+","~","-",""],kb=class{static{o(this,"ClassMember")}constructor(e,r){this.memberType=r,this.visibility="",this.classifier="",this.text="";let n=Tr(e,me());this.parseMember(n)}getDisplayDetails(){let e=this.visibility+ec(this.id);this.memberType==="method"&&(e+=`(${ec(this.parameters.trim())})`,this.returnType&&(e+=" : "+ec(this.returnType))),e=e.trim();let r=this.parseClassifier();return{displayText:e,cssStyle:r}}parseMember(e){let r="";if(this.memberType==="method"){let a=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/.exec(e);if(a){let s=a[1]?a[1].trim():"";if(Dfe.includes(s)&&(this.visibility=s),this.id=a[2],this.parameters=a[3]?a[3].trim():"",r=a[4]?a[4].trim():"",this.returnType=a[5]?a[5].trim():"",r===""){let l=this.returnType.substring(this.returnType.length-1);/[$*]/.exec(l)&&(r=l,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{let i=e.length,a=e.substring(0,1),s=e.substring(i-1);Dfe.includes(a)&&(this.visibility=a),/[$*]/.exec(s)&&(r=s),this.id=e.substring(this.visibility===""?0:1,r===""?i:i-1)}this.classifier=r,this.id=this.id.startsWith(" ")?" "+this.id.trim():this.id.trim();let n=`${this.visibility?"\\"+this.visibility:""}${ec(this.id)}${this.memberType==="method"?`(${ec(this.parameters)})${this.returnType?" : "+ec(this.returnType):""}`:""}`;this.text=n.replaceAll("<","&lt;").replaceAll(">","&gt;"),this.text.startsWith("\\&lt;")&&(this.text=this.text.replace("\\&lt;","~"))}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}});var R6,Rfe,Lp,D1,OO=N(()=>{"use strict";dr();vt();zt();gr();ir();mi();Lfe();R6="classId-",Rfe=0,Lp=o(t=>Ze.sanitizeText(t,me()),"sanitizeText"),D1=class{constructor(){this.relations=[];this.classes=new Map;this.styleClasses=new Map;this.notes=[];this.interfaces=[];this.namespaces=new Map;this.namespaceCounter=0;this.functions=[];this.lineType={LINE:0,DOTTED_LINE:1};this.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4};this.setupToolTips=o(e=>{let r=Ge(".mermaidTooltip");(r._groups||r)[0][0]===null&&(r=Ge("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),Ge(e).select("svg").selectAll("g.node").on("mouseover",a=>{let s=Ge(a.currentTarget);if(s.attr("title")===null)return;let u=this.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.text(s.attr("title")).style("left",window.scrollX+u.left+(u.right-u.left)/2+"px").style("top",window.scrollY+u.top-14+document.body.scrollTop+"px"),r.html(r.html().replace(/&lt;br\/&gt;/g,"<br/>")),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),Ge(a.currentTarget).classed("hover",!1)})},"setupToolTips");this.direction="TB";this.setAccTitle=Lr;this.getAccTitle=Rr;this.setAccDescription=Nr;this.getAccDescription=Mr;this.setDiagramTitle=$r;this.getDiagramTitle=Ir;this.getConfig=o(()=>me().class,"getConfig");this.functions.push(this.setupToolTips.bind(this)),this.clear(),this.addRelation=this.addRelation.bind(this),this.addClassesToNamespace=this.addClassesToNamespace.bind(this),this.addNamespace=this.addNamespace.bind(this),this.setCssClass=this.setCssClass.bind(this),this.addMembers=this.addMembers.bind(this),this.addClass=this.addClass.bind(this),this.setClassLabel=this.setClassLabel.bind(this),this.addAnnotation=this.addAnnotation.bind(this),this.addMember=this.addMember.bind(this),this.cleanupLabel=this.cleanupLabel.bind(this),this.addNote=this.addNote.bind(this),this.defineClass=this.defineClass.bind(this),this.setDirection=this.setDirection.bind(this),this.setLink=this.setLink.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.clear=this.clear.bind(this),this.setTooltip=this.setTooltip.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setCssStyle=this.setCssStyle.bind(this)}static{o(this,"ClassDB")}splitClassNameAndType(e){let r=Ze.sanitizeText(e,me()),n="",i=r;if(r.indexOf("~")>0){let a=r.split("~");i=Lp(a[0]),n=Lp(a[1])}return{className:i,type:n}}setClassLabel(e,r){let n=Ze.sanitizeText(e,me());r&&(r=Lp(r));let{className:i}=this.splitClassNameAndType(n);this.classes.get(i).label=r,this.classes.get(i).text=`${r}${this.classes.get(i).type?`<${this.classes.get(i).type}>`:""}`}addClass(e){let r=Ze.sanitizeText(e,me()),{className:n,type:i}=this.splitClassNameAndType(r);if(this.classes.has(n))return;let a=Ze.sanitizeText(n,me());this.classes.set(a,{id:a,type:i,label:a,text:`${a}${i?`&lt;${i}&gt;`:""}`,shape:"classBox",cssClasses:"default",methods:[],members:[],annotations:[],styles:[],domId:R6+a+"-"+Rfe}),Rfe++}addInterface(e,r){let n={id:`interface${this.interfaces.length}`,label:e,classId:r};this.interfaces.push(n)}lookUpDomId(e){let r=Ze.sanitizeText(e,me());if(this.classes.has(r))return this.classes.get(r).domId;throw new Error("Class not found: "+r)}clear(){this.relations=[],this.classes=new Map,this.notes=[],this.interfaces=[],this.functions=[],this.functions.push(this.setupToolTips.bind(this)),this.namespaces=new Map,this.namespaceCounter=0,this.direction="TB",Ar()}getClass(e){return this.classes.get(e)}getClasses(){return this.classes}getRelations(){return this.relations}getNotes(){return this.notes}addRelation(e){Y.debug("Adding relation: "+JSON.stringify(e));let r=[this.relationType.LOLLIPOP,this.relationType.AGGREGATION,this.relationType.COMPOSITION,this.relationType.DEPENDENCY,this.relationType.EXTENSION];e.relation.type1===this.relationType.LOLLIPOP&&!r.includes(e.relation.type2)?(this.addClass(e.id2),this.addInterface(e.id1,e.id2),e.id1=`interface${this.interfaces.length-1}`):e.relation.type2===this.relationType.LOLLIPOP&&!r.includes(e.relation.type1)?(this.addClass(e.id1),this.addInterface(e.id2,e.id1),e.id2=`interface${this.interfaces.length-1}`):(this.addClass(e.id1),this.addClass(e.id2)),e.id1=this.splitClassNameAndType(e.id1).className,e.id2=this.splitClassNameAndType(e.id2).className,e.relationTitle1=Ze.sanitizeText(e.relationTitle1.trim(),me()),e.relationTitle2=Ze.sanitizeText(e.relationTitle2.trim(),me()),this.relations.push(e)}addAnnotation(e,r){let n=this.splitClassNameAndType(e).className;this.classes.get(n).annotations.push(r)}addMember(e,r){this.addClass(e);let n=this.splitClassNameAndType(e).className,i=this.classes.get(n);if(typeof r=="string"){let a=r.trim();a.startsWith("<<")&&a.endsWith(">>")?i.annotations.push(Lp(a.substring(2,a.length-2))):a.indexOf(")")>0?i.methods.push(new kb(a,"method")):a&&i.members.push(new kb(a,"attribute"))}}addMembers(e,r){Array.isArray(r)&&(r.reverse(),r.forEach(n=>this.addMember(e,n)))}addNote(e,r){let n={id:`note${this.notes.length}`,class:r,text:e};this.notes.push(n)}cleanupLabel(e){return e.startsWith(":")&&(e=e.substring(1)),Lp(e.trim())}setCssClass(e,r){e.split(",").forEach(n=>{let i=n;/\d/.exec(n[0])&&(i=R6+i);let a=this.classes.get(i);a&&(a.cssClasses+=" "+r)})}defineClass(e,r){for(let n of e){let i=this.styleClasses.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.styleClasses.set(n,i)),r&&r.forEach(a=>{if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)}),this.classes.forEach(a=>{a.cssClasses.includes(n)&&a.styles.push(...r.flatMap(s=>s.split(",")))})}}setTooltip(e,r){e.split(",").forEach(n=>{r!==void 0&&(this.classes.get(n).tooltip=Lp(r))})}getTooltip(e,r){return r&&this.namespaces.has(r)?this.namespaces.get(r).classes.get(e).tooltip:this.classes.get(e).tooltip}setLink(e,r,n){let i=me();e.split(",").forEach(a=>{let s=a;/\d/.exec(a[0])&&(s=R6+s);let l=this.classes.get(s);l&&(l.link=Gt.formatUrl(r,i),i.securityLevel==="sandbox"?l.linkTarget="_top":typeof n=="string"?l.linkTarget=Lp(n):l.linkTarget="_blank")}),this.setCssClass(e,"clickable")}setClickEvent(e,r,n){e.split(",").forEach(i=>{this.setClickFunc(i,r,n),this.classes.get(i).haveCallback=!0}),this.setCssClass(e,"clickable")}setClickFunc(e,r,n){let i=Ze.sanitizeText(e,me());if(me().securityLevel!=="loose"||r===void 0)return;let s=i;if(this.classes.has(s)){let l=this.lookUpDomId(s),u=[];if(typeof n=="string"){u=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let h=0;h<u.length;h++){let f=u[h].trim();f.startsWith('"')&&f.endsWith('"')&&(f=f.substr(1,f.length-2)),u[h]=f}}u.length===0&&u.push(l),this.functions.push(()=>{let h=document.querySelector(`[id="${l}"]`);h!==null&&h.addEventListener("click",()=>{Gt.runFunc(r,...u)},!1)})}}bindFunctions(e){this.functions.forEach(r=>{r(e)})}getDirection(){return this.direction}setDirection(e){this.direction=e}addNamespace(e){this.namespaces.has(e)||(this.namespaces.set(e,{id:e,classes:new Map,children:{},domId:R6+e+"-"+this.namespaceCounter}),this.namespaceCounter++)}getNamespace(e){return this.namespaces.get(e)}getNamespaces(){return this.namespaces}addClassesToNamespace(e,r){if(this.namespaces.has(e))for(let n of r){let{className:i}=this.splitClassNameAndType(n);this.classes.get(i).parent=e,this.namespaces.get(e).classes.set(i,this.classes.get(i))}}setCssStyle(e,r){let n=this.classes.get(e);if(!(!r||!n))for(let i of r)i.includes(",")?n.styles.push(...i.split(",")):n.styles.push(i)}getArrowMarker(e){let r;switch(e){case 0:r="aggregation";break;case 1:r="extension";break;case 2:r="composition";break;case 3:r="dependency";break;case 4:r="lollipop";break;default:r="none"}return r}getData(){let e=[],r=[],n=me();for(let a of this.namespaces.keys()){let s=this.namespaces.get(a);if(s){let l={id:s.id,label:s.id,isGroup:!0,padding:n.class.padding??16,shape:"rect",cssStyles:["fill: none","stroke: black"],look:n.look};e.push(l)}}for(let a of this.classes.keys()){let s=this.classes.get(a);if(s){let l=s;l.parentId=s.parent,l.look=n.look,e.push(l)}}let i=0;for(let a of this.notes){i++;let s={id:a.id,label:a.text,isGroup:!1,shape:"note",padding:n.class.padding??6,cssStyles:["text-align: left","white-space: nowrap",`fill: ${n.themeVariables.noteBkgColor}`,`stroke: ${n.themeVariables.noteBorderColor}`],look:n.look};e.push(s);let l=this.classes.get(a.class)?.id??"";if(l){let u={id:`edgeNote${i}`,start:a.id,end:l,type:"normal",thickness:"normal",classes:"relation",arrowTypeStart:"none",arrowTypeEnd:"none",arrowheadStyle:"",labelStyle:[""],style:["fill: none"],pattern:"dotted",look:n.look};r.push(u)}}for(let a of this.interfaces){let s={id:a.id,label:a.label,isGroup:!1,shape:"rect",cssStyles:["opacity: 0;"],look:n.look};e.push(s)}i=0;for(let a of this.relations){i++;let s={id:$h(a.id1,a.id2,{prefix:"id",counter:i}),start:a.id1,end:a.id2,type:"normal",label:a.title,labelpos:"c",thickness:"normal",classes:"relation",arrowTypeStart:this.getArrowMarker(a.relation.type1),arrowTypeEnd:this.getArrowMarker(a.relation.type2),startLabelRight:a.relationTitle1==="none"?"":a.relationTitle1,endLabelLeft:a.relationTitle2==="none"?"":a.relationTitle2,arrowheadStyle:"",labelStyle:["display: inline-block"],style:a.style||"",pattern:a.relation.lineType==1?"dashed":"solid",look:n.look};r.push(s)}return{nodes:e,edges:r,other:{},config:n,direction:this.getDirection()}}}});var UVe,N6,PO=N(()=>{"use strict";UVe=o(t=>`g.classGroup text {
1370 + fill: ${t.nodeBorder||t.classText};
1371 + stroke: none;
1372 + font-family: ${t.fontFamily};
1373 + font-size: 10px;
1374 +
1375 + .title {
1376 + font-weight: bolder;
1377 + }
1378 +
1379 +}
1380 +
1381 +.nodeLabel, .edgeLabel {
1382 + color: ${t.classText};
1383 +}
1384 +.edgeLabel .label rect {
1385 + fill: ${t.mainBkg};
1386 +}
1387 +.label text {
1388 + fill: ${t.classText};
1389 +}
1390 +
1391 +.labelBkg {
1392 + background: ${t.mainBkg};
1393 +}
1394 +.edgeLabel .label span {
1395 + background: ${t.mainBkg};
1396 +}
1397 +
1398 +.classTitle {
1399 + font-weight: bolder;
1400 +}
1401 +.node rect,
1402 + .node circle,
1403 + .node ellipse,
1404 + .node polygon,
1405 + .node path {
1406 + fill: ${t.mainBkg};
1407 + stroke: ${t.nodeBorder};
1408 + stroke-width: 1px;
1409 + }
1410 +
1411 +
1412 +.divider {
1413 + stroke: ${t.nodeBorder};
1414 + stroke-width: 1;
1415 +}
1416 +
1417 +g.clickable {
1418 + cursor: pointer;
1419 +}
1420 +
1421 +g.classGroup rect {
1422 + fill: ${t.mainBkg};
1423 + stroke: ${t.nodeBorder};
1424 +}
1425 +
1426 +g.classGroup line {
1427 + stroke: ${t.nodeBorder};
1428 + stroke-width: 1;
1429 +}
1430 +
1431 +.classLabel .box {
1432 + stroke: none;
1433 + stroke-width: 0;
1434 + fill: ${t.mainBkg};
1435 + opacity: 0.5;
1436 +}
1437 +
1438 +.classLabel .label {
1439 + fill: ${t.nodeBorder};
1440 + font-size: 10px;
1441 +}
1442 +
1443 +.relation {
1444 + stroke: ${t.lineColor};
1445 + stroke-width: 1;
1446 + fill: none;
1447 +}
1448 +
1449 +.dashed-line{
1450 + stroke-dasharray: 3;
1451 +}
1452 +
1453 +.dotted-line{
1454 + stroke-dasharray: 1 2;
1455 +}
1456 +
1457 +#compositionStart, .composition {
1458 + fill: ${t.lineColor} !important;
1459 + stroke: ${t.lineColor} !important;
1460 + stroke-width: 1;
1461 +}
1462 +
1463 +#compositionEnd, .composition {
1464 + fill: ${t.lineColor} !important;
1465 + stroke: ${t.lineColor} !important;
1466 + stroke-width: 1;
1467 +}
1468 +
1469 +#dependencyStart, .dependency {
1470 + fill: ${t.lineColor} !important;
1471 + stroke: ${t.lineColor} !important;
1472 + stroke-width: 1;
1473 +}
1474 +
1475 +#dependencyStart, .dependency {
1476 + fill: ${t.lineColor} !important;
1477 + stroke: ${t.lineColor} !important;
1478 + stroke-width: 1;
1479 +}
1480 +
1481 +#extensionStart, .extension {
1482 + fill: transparent !important;
1483 + stroke: ${t.lineColor} !important;
1484 + stroke-width: 1;
1485 +}
1486 +
1487 +#extensionEnd, .extension {
1488 + fill: transparent !important;
1489 + stroke: ${t.lineColor} !important;
1490 + stroke-width: 1;
1491 +}
1492 +
1493 +#aggregationStart, .aggregation {
1494 + fill: transparent !important;
1495 + stroke: ${t.lineColor} !important;
1496 + stroke-width: 1;
1497 +}
1498 +
1499 +#aggregationEnd, .aggregation {
1500 + fill: transparent !important;
1501 + stroke: ${t.lineColor} !important;
1502 + stroke-width: 1;
1503 +}
1504 +
1505 +#lollipopStart, .lollipop {
1506 + fill: ${t.mainBkg} !important;
1507 + stroke: ${t.lineColor} !important;
1508 + stroke-width: 1;
1509 +}
1510 +
1511 +#lollipopEnd, .lollipop {
1512 + fill: ${t.mainBkg} !important;
1513 + stroke: ${t.lineColor} !important;
1514 + stroke-width: 1;
1515 +}
1516 +
1517 +.edgeTerminals {
1518 + font-size: 11px;
1519 + line-height: initial;
1520 +}
1521 +
1522 +.classTitleText {
1523 + text-anchor: middle;
1524 + font-size: 18px;
1525 + fill: ${t.textColor};
1526 +}
1527 +`,"getStyles"),N6=UVe});var HVe,WVe,qVe,M6,BO=N(()=>{"use strict";zt();vt();gm();Yd();$m();ir();HVe=o((t,e="TB")=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),WVe=o(function(t,e){return e.db.getClasses()},"getClasses"),qVe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing class diagram (v3)",e);let{securityLevel:i,state:a,layout:s}=me(),l=n.db.getData(),u=yc(e,i);l.type=n.type,l.layoutAlgorithm=nf(s),l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["aggregation","extension","composition","dependency","lollipop"],l.diagramId=e,await Cc(l,u);let h=8;Gt.insertTitle(u,"classDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ac(u,h,"classDiagram",a?.useMaxWidth??!0)},"draw"),M6={getClasses:WVe,draw:qVe,getDir:HVe}});var Nfe={};hr(Nfe,{diagram:()=>YVe});var YVe,Mfe=N(()=>{"use strict";IO();OO();PO();BO();YVe={parser:L6,get db(){return new D1},renderer:M6,styles:N6,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var Pfe={};hr(Pfe,{diagram:()=>QVe});var QVe,Bfe=N(()=>{"use strict";IO();OO();PO();BO();QVe={parser:L6,get db(){return new D1},renderer:M6,styles:N6,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var FO,I6,$O=N(()=>{"use strict";FO=function(){var t=o(function(F,P,z,$){for(z=z||{},$=F.length;$--;z[F[$]]=P);return z},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,16],u=[1,17],h=[1,18],f=[1,19],d=[1,32],p=[1,20],m=[1,21],g=[1,22],y=[1,23],v=[1,24],x=[1,26],b=[1,27],w=[1,28],C=[1,29],T=[1,30],E=[1,31],A=[1,34],S=[1,35],_=[1,36],I=[1,37],D=[1,33],k=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],L=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],R=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],O={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"-->":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,classDef:38,CLASSDEF_ID:39,CLASSDEF_STYLEOPTS:40,DEFAULT:41,style:42,STYLE_IDS:43,STYLEDEF_STYLEOPTS:44,class:45,CLASSENTITY_IDS:46,STYLECLASS:47,direction_tb:48,direction_bt:49,direction_rl:50,direction_lr:51,eol:52,";":53,EDGE_STATE:54,STYLE_SEPARATOR:55,left_of:56,right_of:57,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",14:"DESCR",15:"-->",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"classDef",39:"CLASSDEF_ID",40:"CLASSDEF_STYLEOPTS",41:"DEFAULT",42:"style",43:"STYLE_IDS",44:"STYLEDEF_STYLEOPTS",45:"class",46:"CLASSENTITY_IDS",47:"STYLECLASS",48:"direction_tb",49:"direction_bt",50:"direction_rl",51:"direction_lr",53:";",54:"EDGE_STATE",55:"STYLE_SEPARATOR",56:"left_of",57:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[52,1],[52,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:o(function(P,z,$,H,Q,j,ie){var ne=j.length-1;switch(Q){case 3:return H.setRootDoc(j[ne]),j[ne];break;case 4:this.$=[];break;case 5:j[ne]!="nl"&&(j[ne-1].push(j[ne]),this.$=j[ne-1]);break;case 6:case 7:this.$=j[ne];break;case 8:this.$="nl";break;case 12:this.$=j[ne];break;case 13:let X=j[ne-1];X.description=H.trimColon(j[ne]),this.$=X;break;case 14:this.$={stmt:"relation",state1:j[ne-2],state2:j[ne]};break;case 15:let te=H.trimColon(j[ne]);this.$={stmt:"relation",state1:j[ne-3],state2:j[ne-1],description:te};break;case 19:this.$={stmt:"state",id:j[ne-3],type:"default",description:"",doc:j[ne-1]};break;case 20:var le=j[ne],he=j[ne-2].trim();if(j[ne].match(":")){var K=j[ne].split(":");le=K[0],he=[he,K[1]]}this.$={stmt:"state",id:le,type:"default",description:he};break;case 21:this.$={stmt:"state",id:j[ne-3],type:"default",description:j[ne-5],doc:j[ne-1]};break;case 22:this.$={stmt:"state",id:j[ne],type:"fork"};break;case 23:this.$={stmt:"state",id:j[ne],type:"join"};break;case 24:this.$={stmt:"state",id:j[ne],type:"choice"};break;case 25:this.$={stmt:"state",id:H.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:j[ne-1].trim(),note:{position:j[ne-2].trim(),text:j[ne].trim()}};break;case 29:this.$=j[ne].trim(),H.setAccTitle(this.$);break;case 30:case 31:this.$=j[ne].trim(),H.setAccDescription(this.$);break;case 32:case 33:this.$={stmt:"classDef",id:j[ne-1].trim(),classes:j[ne].trim()};break;case 34:this.$={stmt:"style",id:j[ne-1].trim(),styleClass:j[ne].trim()};break;case 35:this.$={stmt:"applyClass",id:j[ne-1].trim(),styleClass:j[ne].trim()};break;case 36:H.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 37:H.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 38:H.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 39:H.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 42:case 43:this.$={stmt:"state",id:j[ne].trim(),type:"default",description:""};break;case 44:this.$={stmt:"state",id:j[ne-2].trim(),classes:[j[ne].trim()],type:"default",description:""};break;case 45:this.$={stmt:"state",id:j[ne-2].trim(),classes:[j[ne].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,42:T,45:E,48:A,49:S,50:_,51:I,54:D},t(k,[2,5]),{9:38,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,42:T,45:E,48:A,49:S,50:_,51:I,54:D},t(k,[2,7]),t(k,[2,8]),t(k,[2,9]),t(k,[2,10]),t(k,[2,11]),t(k,[2,12],{14:[1,39],15:[1,40]}),t(k,[2,16]),{18:[1,41]},t(k,[2,18],{20:[1,42]}),{23:[1,43]},t(k,[2,22]),t(k,[2,23]),t(k,[2,24]),t(k,[2,25]),{30:44,31:[1,45],56:[1,46],57:[1,47]},t(k,[2,28]),{34:[1,48]},{36:[1,49]},t(k,[2,31]),{39:[1,50],41:[1,51]},{43:[1,52]},{46:[1,53]},t(L,[2,42],{55:[1,54]}),t(L,[2,43],{55:[1,55]}),t(k,[2,36]),t(k,[2,37]),t(k,[2,38]),t(k,[2,39]),t(k,[2,6]),t(k,[2,13]),{13:56,24:d,54:D},t(k,[2,17]),t(R,i,{7:57}),{24:[1,58]},{24:[1,59]},{23:[1,60]},{24:[2,46]},{24:[2,47]},t(k,[2,29]),t(k,[2,30]),{40:[1,61]},{40:[1,62]},{44:[1,63]},{47:[1,64]},{24:[1,65]},{24:[1,66]},t(k,[2,14],{14:[1,67]}),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,68],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,42:T,45:E,48:A,49:S,50:_,51:I,54:D},t(k,[2,20],{20:[1,69]}),{31:[1,70]},{24:[1,71]},t(k,[2,32]),t(k,[2,33]),t(k,[2,34]),t(k,[2,35]),t(L,[2,44]),t(L,[2,45]),t(k,[2,15]),t(k,[2,19]),t(R,i,{7:72}),t(k,[2,26]),t(k,[2,27]),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,73],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,42:T,45:E,48:A,49:S,50:_,51:I,54:D},t(k,[2,21])],defaultActions:{5:[2,1],6:[2,2],46:[2,46],47:[2,47]},parseError:o(function(P,z){if(z.recoverable)this.trace(P);else{var $=new Error(P);throw $.hash=z,$}},"parseError"),parse:o(function(P){var z=this,$=[0],H=[],Q=[null],j=[],ie=this.table,ne="",le=0,he=0,K=0,X=2,te=1,J=j.slice.call(arguments,1),se=Object.create(this.lexer),ue={yy:{}};for(var Z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Z)&&(ue.yy[Z]=this.yy[Z]);se.setInput(P,ue.yy),ue.yy.lexer=se,ue.yy.parser=this,typeof se.yylloc>"u"&&(se.yylloc={});var Se=se.yylloc;j.push(Se);var ce=se.options&&se.options.ranges;typeof ue.yy.parseError=="function"?this.parseError=ue.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ae(xe){$.length=$.length-2*xe,Q.length=Q.length-xe,j.length=j.length-xe}o(ae,"popStack");function Oe(){var xe;return xe=H.pop()||se.lex()||te,typeof xe!="number"&&(xe instanceof Array&&(H=xe,xe=H.pop()),xe=z.symbols_[xe]||xe),xe}o(Oe,"lex");for(var ge,ze,He,$e,Re,Ie,be={},W,de,re,oe;;){if(He=$[$.length-1],this.defaultActions[He]?$e=this.defaultActions[He]:((ge===null||typeof ge>"u")&&(ge=Oe()),$e=ie[He]&&ie[He][ge]),typeof $e>"u"||!$e.length||!$e[0]){var V="";oe=[];for(W in ie[He])this.terminals_[W]&&W>X&&oe.push("'"+this.terminals_[W]+"'");se.showPosition?V="Parse error on line "+(le+1)+`:
1528 +`+se.showPosition()+`
1529 +Expecting `+oe.join(", ")+", got '"+(this.terminals_[ge]||ge)+"'":V="Parse error on line "+(le+1)+": Unexpected "+(ge==te?"end of input":"'"+(this.terminals_[ge]||ge)+"'"),this.parseError(V,{text:se.match,token:this.terminals_[ge]||ge,line:se.yylineno,loc:Se,expected:oe})}if($e[0]instanceof Array&&$e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+He+", token: "+ge);switch($e[0]){case 1:$.push(ge),Q.push(se.yytext),j.push(se.yylloc),$.push($e[1]),ge=null,ze?(ge=ze,ze=null):(he=se.yyleng,ne=se.yytext,le=se.yylineno,Se=se.yylloc,K>0&&K--);break;case 2:if(de=this.productions_[$e[1]][1],be.$=Q[Q.length-de],be._$={first_line:j[j.length-(de||1)].first_line,last_line:j[j.length-1].last_line,first_column:j[j.length-(de||1)].first_column,last_column:j[j.length-1].last_column},ce&&(be._$.range=[j[j.length-(de||1)].range[0],j[j.length-1].range[1]]),Ie=this.performAction.apply(be,[ne,he,le,ue.yy,$e[1],Q,j].concat(J)),typeof Ie<"u")return Ie;de&&($=$.slice(0,-1*de*2),Q=Q.slice(0,-1*de),j=j.slice(0,-1*de)),$.push(this.productions_[$e[1]][0]),Q.push(be.$),j.push(be._$),re=ie[$[$.length-2]][$[$.length-1]],$.push(re);break;case 3:return!0}}return!0},"parse")},M=function(){var F={EOF:1,parseError:o(function(z,$){if(this.yy.parser)this.yy.parser.parseError(z,$);else throw new Error(z)},"parseError"),setInput:o(function(P,z){return this.yy=z||this.yy||{},this._input=P,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var P=this._input[0];this.yytext+=P,this.yyleng++,this.offset++,this.match+=P,this.matched+=P;var z=P.match(/(?:\r\n?|\n).*/g);return z?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),P},"input"),unput:o(function(P){var z=P.length,$=P.split(/(?:\r\n?|\n)/g);this._input=P+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-z),this.offset-=z;var H=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),$.length-1&&(this.yylineno-=$.length-1);var Q=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:$?($.length===H.length?this.yylloc.first_column:0)+H[H.length-$.length].length-$[0].length:this.yylloc.first_column-z},this.options.ranges&&(this.yylloc.range=[Q[0],Q[0]+this.yyleng-z]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
1530 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(P){this.unput(this.match.slice(P))},"less"),pastInput:o(function(){var P=this.matched.substr(0,this.matched.length-this.match.length);return(P.length>20?"...":"")+P.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var P=this.match;return P.length<20&&(P+=this._input.substr(0,20-P.length)),(P.substr(0,20)+(P.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var P=this.pastInput(),z=new Array(P.length+1).join("-");return P+this.upcomingInput()+`
1531 +`+z+"^"},"showPosition"),test_match:o(function(P,z){var $,H,Q;if(this.options.backtrack_lexer&&(Q={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Q.yylloc.range=this.yylloc.range.slice(0))),H=P[0].match(/(?:\r\n?|\n).*/g),H&&(this.yylineno+=H.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:H?H[H.length-1].length-H[H.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+P[0].length},this.yytext+=P[0],this.match+=P[0],this.matches=P,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(P[0].length),this.matched+=P[0],$=this.performAction.call(this,this.yy,this,z,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),$)return $;if(this._backtrack){for(var j in Q)this[j]=Q[j];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var P,z,$,H;this._more||(this.yytext="",this.match="");for(var Q=this._currentRules(),j=0;j<Q.length;j++)if($=this._input.match(this.rules[Q[j]]),$&&(!z||$[0].length>z[0].length)){if(z=$,H=j,this.options.backtrack_lexer){if(P=this.test_match($,Q[j]),P!==!1)return P;if(this._backtrack){z=!1;continue}else return!1}else if(!this.options.flex)break}return z?(P=this.test_match(z,Q[H]),P!==!1?P:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
1532 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var z=this.next();return z||this.lex()},"lex"),begin:o(function(z){this.conditionStack.push(z)},"begin"),popState:o(function(){var z=this.conditionStack.length-1;return z>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(z){return z=this.conditionStack.length-1-Math.abs(z||0),z>=0?this.conditionStack[z]:"INITIAL"},"topState"),pushState:o(function(z){this.begin(z)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(z,$,H,Q){var j=Q;switch(H){case 0:return 41;case 1:return 48;case 2:return 49;case 3:return 50;case 4:return 51;case 5:break;case 6:break;case 7:return 5;case 8:break;case 9:break;case 10:break;case 11:break;case 12:return this.pushState("SCALE"),17;break;case 13:return 18;case 14:this.popState();break;case 15:return this.begin("acc_title"),33;break;case 16:return this.popState(),"acc_title_value";break;case 17:return this.begin("acc_descr"),35;break;case 18:return this.popState(),"acc_descr_value";break;case 19:this.begin("acc_descr_multiline");break;case 20:this.popState();break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),38;break;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 24:return this.popState(),this.pushState("CLASSDEFID"),39;break;case 25:return this.popState(),40;break;case 26:return this.pushState("CLASS"),45;break;case 27:return this.popState(),this.pushState("CLASS_STYLE"),46;break;case 28:return this.popState(),47;break;case 29:return this.pushState("STYLE"),42;break;case 30:return this.popState(),this.pushState("STYLEDEF_STYLES"),43;break;case 31:return this.popState(),44;break;case 32:return this.pushState("SCALE"),17;break;case 33:return 18;case 34:this.popState();break;case 35:this.pushState("STATE");break;case 36:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),25;break;case 37:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),26;break;case 38:return this.popState(),$.yytext=$.yytext.slice(0,-10).trim(),27;break;case 39:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),25;break;case 40:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),26;break;case 41:return this.popState(),$.yytext=$.yytext.slice(0,-10).trim(),27;break;case 42:return 48;case 43:return 49;case 44:return 50;case 45:return 51;case 46:this.pushState("STATE_STRING");break;case 47:return this.pushState("STATE_ID"),"AS";break;case 48:return this.popState(),"ID";break;case 49:this.popState();break;case 50:return"STATE_DESCR";case 51:return 19;case 52:this.popState();break;case 53:return this.popState(),this.pushState("struct"),20;break;case 54:break;case 55:return this.popState(),21;break;case 56:break;case 57:return this.begin("NOTE"),29;break;case 58:return this.popState(),this.pushState("NOTE_ID"),56;break;case 59:return this.popState(),this.pushState("NOTE_ID"),57;break;case 60:this.popState(),this.pushState("FLOATING_NOTE");break;case 61:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";break;case 62:break;case 63:return"NOTE_TEXT";case 64:return this.popState(),"ID";break;case 65:return this.popState(),this.pushState("NOTE_TEXT"),24;break;case 66:return this.popState(),$.yytext=$.yytext.substr(2).trim(),31;break;case 67:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),31;break;case 68:return 6;case 69:return 6;case 70:return 16;case 71:return 54;case 72:return 24;case 73:return $.yytext=$.yytext.trim(),14;break;case 74:return 15;case 75:return 28;case 76:return 55;case 77:return 5;case 78:return"INVALID"}},"anonymous"),rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:style\s+)/i,/^(?:[\w,]+\s+)/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<<fork>>)/i,/^(?:.*<<join>>)/i,/^(?:.*<<choice>>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,29,35,42,43,44,45,54,55,56,57,71,72,73,74,75],inclusive:!1},FLOATING_NOTE_ID:{rules:[64],inclusive:!1},FLOATING_NOTE:{rules:[61,62,63],inclusive:!1},NOTE_TEXT:{rules:[66,67],inclusive:!1},NOTE_ID:{rules:[65],inclusive:!1},NOTE:{rules:[58,59,60],inclusive:!1},STYLEDEF_STYLEOPTS:{rules:[],inclusive:!1},STYLEDEF_STYLES:{rules:[31],inclusive:!1},STYLE_IDS:{rules:[],inclusive:!1},STYLE:{rules:[30],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,33,34],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[48],inclusive:!1},STATE_STRING:{rules:[49,50],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,36,37,38,39,40,41,46,47,51,52,53],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,35,53,57,68,69,70,71,72,73,74,76,77,78],inclusive:!0}}};return F}();O.lexer=M;function B(){this.yy={}}return o(B,"Parser"),B.prototype=O,O.Parser=B,new B}();FO.parser=FO;I6=FO});var zfe,O6,zO,L1,Eb,Gfe,Vfe,Ufe,Rp,P6,GO,VO,UO,HO,WO,B6,F6,Hfe,Wfe,qO,YO,qfe,Yfe,R1,tUe,Xfe,XO,rUe,nUe,jfe,Kfe,iUe,Qfe,aUe,Zfe,jO,KO,Jfe,$6,ede,QO,z6=N(()=>{"use strict";zfe="TB",O6="TB",zO="dir",L1="state",Eb="relation",Gfe="classDef",Vfe="style",Ufe="applyClass",Rp="default",P6="divider",GO="fill:none",VO="fill: #333",UO="c",HO="text",WO="normal",B6="rect",F6="rectWithTitle",Hfe="stateStart",Wfe="stateEnd",qO="divider",YO="roundedWithTitle",qfe="note",Yfe="noteGroup",R1="statediagram",tUe="state",Xfe=`${R1}-${tUe}`,XO="transition",rUe="note",nUe="note-edge",jfe=`${XO} ${nUe}`,Kfe=`${R1}-${rUe}`,iUe="cluster",Qfe=`${R1}-${iUe}`,aUe="cluster-alt",Zfe=`${R1}-${aUe}`,jO="parent",KO="note",Jfe="state",$6="----",ede=`${$6}${KO}`,QO=`${$6}${jO}`});function ZO(t="",e=0,r="",n=$6){let i=r!==null&&r.length>0?`${n}${r}`:"";return`${Jfe}-${t}${i}-${e}`}function G6(t,e,r){if(!e.id||e.id==="</join></fork>"||e.id==="</choice>")return;e.cssClasses&&(Array.isArray(e.cssCompiledStyles)||(e.cssCompiledStyles=[]),e.cssClasses.split(" ").forEach(i=>{if(r.get(i)){let a=r.get(i);e.cssCompiledStyles=[...e.cssCompiledStyles,...a.styles]}}));let n=t.find(i=>i.id===e.id);n?Object.assign(n,e):t.push(e)}function oUe(t){return t?.classes?.join(" ")??""}function lUe(t){return t?.styles??[]}var V6,xf,sUe,tde,N1,rde,nde=N(()=>{"use strict";zt();vt();gr();z6();V6=new Map,xf=0;o(ZO,"stateDomId");sUe=o((t,e,r,n,i,a,s,l)=>{Y.trace("items",e),e.forEach(u=>{switch(u.stmt){case L1:N1(t,u,r,n,i,a,s,l);break;case Rp:N1(t,u,r,n,i,a,s,l);break;case Eb:{N1(t,u.state1,r,n,i,a,s,l),N1(t,u.state2,r,n,i,a,s,l);let h={id:"edge"+xf,start:u.state1.id,end:u.state2.id,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:GO,labelStyle:"",label:Ze.sanitizeText(u.description,me()),arrowheadStyle:VO,labelpos:UO,labelType:HO,thickness:WO,classes:XO,look:s};i.push(h),xf++}break}})},"setupDoc"),tde=o((t,e=O6)=>{let r=e;if(t.doc)for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir");o(G6,"insertOrUpdateNode");o(oUe,"getClassesFromDbInfo");o(lUe,"getStylesFromDbInfo");N1=o((t,e,r,n,i,a,s,l)=>{let u=e.id,h=r.get(u),f=oUe(h),d=lUe(h);if(Y.info("dataFetcher parsedItem",e,h,d),u!=="root"){let p=B6;e.start===!0?p=Hfe:e.start===!1&&(p=Wfe),e.type!==Rp&&(p=e.type),V6.get(u)||V6.set(u,{id:u,shape:p,description:Ze.sanitizeText(u,me()),cssClasses:`${f} ${Xfe}`,cssStyles:d});let m=V6.get(u);e.description&&(Array.isArray(m.description)?(m.shape=F6,m.description.push(e.description)):m.description?.length>0?(m.shape=F6,m.description===u?m.description=[e.description]:m.description=[m.description,e.description]):(m.shape=B6,m.description=e.description),m.description=Ze.sanitizeTextOrArray(m.description,me())),m.description?.length===1&&m.shape===F6&&(m.type==="group"?m.shape=YO:m.shape=B6),!m.type&&e.doc&&(Y.info("Setting cluster for XCX",u,tde(e)),m.type="group",m.isGroup=!0,m.dir=tde(e),m.shape=e.type===P6?qO:YO,m.cssClasses=`${m.cssClasses} ${Qfe} ${a?Zfe:""}`);let g={labelStyle:"",shape:m.shape,label:m.description,cssClasses:m.cssClasses,cssCompiledStyles:[],cssStyles:m.cssStyles,id:u,dir:m.dir,domId:ZO(u,xf),type:m.type,isGroup:m.type==="group",padding:8,rx:10,ry:10,look:s};if(g.shape===qO&&(g.label=""),t&&t.id!=="root"&&(Y.trace("Setting node ",u," to be child of its parent ",t.id),g.parentId=t.id),g.centerLabel=!0,e.note){let y={labelStyle:"",shape:qfe,label:e.note.text,cssClasses:Kfe,cssStyles:[],cssCompilesStyles:[],id:u+ede+"-"+xf,domId:ZO(u,xf,KO),type:m.type,isGroup:m.type==="group",padding:me().flowchart.padding,look:s,position:e.note.position},v=u+QO,x={labelStyle:"",shape:Yfe,label:e.note.text,cssClasses:m.cssClasses,cssStyles:[],id:u+QO,domId:ZO(u,xf,jO),type:"group",isGroup:!0,padding:16,look:s,position:e.note.position};xf++,x.id=v,y.parentId=v,G6(n,x,l),G6(n,y,l),G6(n,g,l);let b=u,w=y.id;e.note.position==="left of"&&(b=y.id,w=u),i.push({id:b+"-"+w,start:b,end:w,arrowhead:"none",arrowTypeEnd:"",style:GO,labelStyle:"",classes:jfe,arrowheadStyle:VO,labelpos:UO,labelType:HO,thickness:WO,look:s})}else G6(n,g,l)}e.doc&&(Y.trace("Adding nodes children "),sUe(e,e.doc,r,n,i,!a,s,l))},"dataFetcher"),rde=o(()=>{V6.clear(),xf=0},"reset")});var JO,cUe,uUe,ide,eP=N(()=>{"use strict";zt();vt();gm();Yd();$m();ir();z6();JO=o((t,e=O6)=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),cUe=o(function(t,e){return e.db.getClasses()},"getClasses"),uUe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing state diagram (v2)",e);let{securityLevel:i,state:a,layout:s}=me();n.db.extract(n.db.getRootDocV2());let l=n.db.getData(),u=yc(e,i);l.type=n.type,l.layoutAlgorithm=s,l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["barb"],l.diagramId=e,await Cc(l,u);let h=8;Gt.insertTitle(u,"statediagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ac(u,h,R1,a?.useMaxWidth??!0)},"draw"),ide={getClasses:cUe,draw:uUe,getDir:JO}});function ude(){return new Map}var tP,ade,sde,ode,lde,cde,hUe,fUe,hde,U6,Qo,H6=N(()=>{"use strict";zt();vt();ir();gr();mi();nde();eP();z6();tP="[*]",ade="start",sde=tP,ode="end",lde="color",cde="fill",hUe="bgFill",fUe=",";o(ude,"newClassesList");hde=o(()=>({relations:[],states:new Map,documents:{}}),"newDoc"),U6=o(t=>JSON.parse(JSON.stringify(t)),"clone"),Qo=class{static{o(this,"StateDB")}constructor(e){this.clear(),this.version=e,this.setRootDoc=this.setRootDoc.bind(this),this.getDividerId=this.getDividerId.bind(this),this.setDirection=this.setDirection.bind(this),this.trimColon=this.trimColon.bind(this)}version;nodes=[];edges=[];rootDoc=[];classes=ude();documents={root:hde()};currentDocument=this.documents.root;startEndCount=0;dividerCnt=0;static relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3};setRootDoc(e){Y.info("Setting root doc",e),this.rootDoc=e,this.version===1?this.extract(e):this.extract(this.getRootDocV2())}getRootDoc(){return this.rootDoc}docTranslator(e,r,n){if(r.stmt===Eb)this.docTranslator(e,r.state1,!0),this.docTranslator(e,r.state2,!1);else if(r.stmt===L1&&(r.id==="[*]"?(r.id=n?e.id+"_start":e.id+"_end",r.start=n):r.id=r.id.trim()),r.doc){let i=[],a=[],s;for(s=0;s<r.doc.length;s++)if(r.doc[s].type===P6){let l=U6(r.doc[s]);l.doc=U6(a),i.push(l),a=[]}else a.push(r.doc[s]);if(i.length>0&&a.length>0){let l={stmt:L1,id:X9(),type:"divider",doc:U6(a)};i.push(U6(l)),r.doc=i}r.doc.forEach(l=>this.docTranslator(r,l,!0))}}getRootDocV2(){return this.docTranslator({id:"root"},{id:"root",doc:this.rootDoc},!0),{id:"root",doc:this.rootDoc}}extract(e){let r;e.doc?r=e.doc:r=e,Y.info(r),this.clear(!0),Y.info("Extract initial document:",r),r.forEach(s=>{switch(Y.warn("Statement",s.stmt),s.stmt){case L1:this.addState(s.id.trim(),s.type,s.doc,s.description,s.note,s.classes,s.styles,s.textStyles);break;case Eb:this.addRelation(s.state1,s.state2,s.description);break;case Gfe:this.addStyleClass(s.id.trim(),s.classes);break;case Vfe:{let l=s.id.trim().split(","),u=s.styleClass.split(",");l.forEach(h=>{let f=this.getState(h);if(f===void 0){let d=h.trim();this.addState(d),f=this.getState(d)}f.styles=u.map(d=>d.replace(/;/g,"")?.trim())})}break;case Ufe:this.setCssClass(s.id.trim(),s.styleClass);break}});let n=this.getStates(),a=me().look;rde(),N1(void 0,this.getRootDocV2(),n,this.nodes,this.edges,!0,a,this.classes),this.nodes.forEach(s=>{if(Array.isArray(s.label)){if(s.description=s.label.slice(1),s.isGroup&&s.description.length>0)throw new Error("Group nodes can only have label. Remove the additional description for node ["+s.id+"]");s.label=s.label[0]}})}addState(e,r=Rp,n=null,i=null,a=null,s=null,l=null,u=null){let h=e?.trim();if(this.currentDocument.states.has(h)?(this.currentDocument.states.get(h).doc||(this.currentDocument.states.get(h).doc=n),this.currentDocument.states.get(h).type||(this.currentDocument.states.get(h).type=r)):(Y.info("Adding state ",h,i),this.currentDocument.states.set(h,{id:h,descriptions:[],type:r,doc:n,note:a,classes:[],styles:[],textStyles:[]})),i&&(Y.info("Setting state description",h,i),typeof i=="string"&&this.addDescription(h,i.trim()),typeof i=="object"&&i.forEach(f=>this.addDescription(h,f.trim()))),a){let f=this.currentDocument.states.get(h);f.note=a,f.note.text=Ze.sanitizeText(f.note.text,me())}s&&(Y.info("Setting state classes",h,s),(typeof s=="string"?[s]:s).forEach(d=>this.setCssClass(h,d.trim()))),l&&(Y.info("Setting state styles",h,l),(typeof l=="string"?[l]:l).forEach(d=>this.setStyle(h,d.trim()))),u&&(Y.info("Setting state styles",h,l),(typeof u=="string"?[u]:u).forEach(d=>this.setTextStyle(h,d.trim())))}clear(e){this.nodes=[],this.edges=[],this.documents={root:hde()},this.currentDocument=this.documents.root,this.startEndCount=0,this.classes=ude(),e||Ar()}getState(e){return this.currentDocument.states.get(e)}getStates(){return this.currentDocument.states}logDocuments(){Y.info("Documents = ",this.documents)}getRelations(){return this.currentDocument.relations}startIdIfNeeded(e=""){let r=e;return e===tP&&(this.startEndCount++,r=`${ade}${this.startEndCount}`),r}startTypeIfNeeded(e="",r=Rp){return e===tP?ade:r}endIdIfNeeded(e=""){let r=e;return e===sde&&(this.startEndCount++,r=`${ode}${this.startEndCount}`),r}endTypeIfNeeded(e="",r=Rp){return e===sde?ode:r}addRelationObjs(e,r,n){let i=this.startIdIfNeeded(e.id.trim()),a=this.startTypeIfNeeded(e.id.trim(),e.type),s=this.startIdIfNeeded(r.id.trim()),l=this.startTypeIfNeeded(r.id.trim(),r.type);this.addState(i,a,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),this.addState(s,l,r.doc,r.description,r.note,r.classes,r.styles,r.textStyles),this.currentDocument.relations.push({id1:i,id2:s,relationTitle:Ze.sanitizeText(n,me())})}addRelation(e,r,n){if(typeof e=="object")this.addRelationObjs(e,r,n);else{let i=this.startIdIfNeeded(e.trim()),a=this.startTypeIfNeeded(e),s=this.endIdIfNeeded(r.trim()),l=this.endTypeIfNeeded(r);this.addState(i,a),this.addState(s,l),this.currentDocument.relations.push({id1:i,id2:s,title:Ze.sanitizeText(n,me())})}}addDescription(e,r){let n=this.currentDocument.states.get(e),i=r.startsWith(":")?r.replace(":","").trim():r;n.descriptions.push(Ze.sanitizeText(i,me()))}cleanupLabel(e){return e.substring(0,1)===":"?e.substr(2).trim():e.trim()}getDividerId(){return this.dividerCnt++,"divider-id-"+this.dividerCnt}addStyleClass(e,r=""){this.classes.has(e)||this.classes.set(e,{id:e,styles:[],textStyles:[]});let n=this.classes.get(e);r?.split(fUe).forEach(i=>{let a=i.replace(/([^;]*);/,"$1").trim();if(RegExp(lde).exec(i)){let l=a.replace(cde,hUe).replace(lde,cde);n.textStyles.push(l)}n.styles.push(a)})}getClasses(){return this.classes}setCssClass(e,r){e.split(",").forEach(n=>{let i=this.getState(n);if(i===void 0){let a=n.trim();this.addState(a),i=this.getState(a)}i.classes.push(r)})}setStyle(e,r){let n=this.getState(e);n!==void 0&&n.styles.push(r)}setTextStyle(e,r){let n=this.getState(e);n!==void 0&&n.textStyles.push(r)}getDirectionStatement(){return this.rootDoc.find(e=>e.stmt===zO)}getDirection(){return this.getDirectionStatement()?.value??zfe}setDirection(e){let r=this.getDirectionStatement();r?r.value=e:this.rootDoc.unshift({stmt:zO,value:e})}trimColon(e){return e&&e[0]===":"?e.substr(1).trim():e.trim()}getData(){let e=me();return{nodes:this.nodes,edges:this.edges,other:{},config:e,direction:JO(this.getRootDocV2())}}getConfig(){return me().state}getAccTitle=Rr;setAccTitle=Lr;getAccDescription=Mr;setAccDescription=Nr;setDiagramTitle=$r;getDiagramTitle=Ir}});var dUe,W6,rP=N(()=>{"use strict";dUe=o(t=>`
1533 +defs #statediagram-barbEnd {
1534 + fill: ${t.transitionColor};
1535 + stroke: ${t.transitionColor};
1536 + }
1537 +g.stateGroup text {
1538 + fill: ${t.nodeBorder};
1539 + stroke: none;
1540 + font-size: 10px;
1541 +}
1542 +g.stateGroup text {
1543 + fill: ${t.textColor};
1544 + stroke: none;
1545 + font-size: 10px;
1546 +
1547 +}
1548 +g.stateGroup .state-title {
1549 + font-weight: bolder;
1550 + fill: ${t.stateLabelColor};
1551 +}
1552 +
1553 +g.stateGroup rect {
1554 + fill: ${t.mainBkg};
1555 + stroke: ${t.nodeBorder};
1556 +}
1557 +
1558 +g.stateGroup line {
1559 + stroke: ${t.lineColor};
1560 + stroke-width: 1;
1561 +}
1562 +
1563 +.transition {
1564 + stroke: ${t.transitionColor};
1565 + stroke-width: 1;
1566 + fill: none;
1567 +}
1568 +
1569 +.stateGroup .composit {
1570 + fill: ${t.background};
1571 + border-bottom: 1px
1572 +}
1573 +
1574 +.stateGroup .alt-composit {
1575 + fill: #e0e0e0;
1576 + border-bottom: 1px
1577 +}
1578 +
1579 +.state-note {
1580 + stroke: ${t.noteBorderColor};
1581 + fill: ${t.noteBkgColor};
1582 +
1583 + text {
1584 + fill: ${t.noteTextColor};
1585 + stroke: none;
1586 + font-size: 10px;
1587 + }
1588 +}
1589 +
1590 +.stateLabel .box {
1591 + stroke: none;
1592 + stroke-width: 0;
1593 + fill: ${t.mainBkg};
1594 + opacity: 0.5;
1595 +}
1596 +
1597 +.edgeLabel .label rect {
1598 + fill: ${t.labelBackgroundColor};
1599 + opacity: 0.5;
1600 +}
1601 +.edgeLabel {
1602 + background-color: ${t.edgeLabelBackground};
1603 + p {
1604 + background-color: ${t.edgeLabelBackground};
1605 + }
1606 + rect {
1607 + opacity: 0.5;
1608 + background-color: ${t.edgeLabelBackground};
1609 + fill: ${t.edgeLabelBackground};
1610 + }
1611 + text-align: center;
1612 +}
1613 +.edgeLabel .label text {
1614 + fill: ${t.transitionLabelColor||t.tertiaryTextColor};
1615 +}
1616 +.label div .edgeLabel {
1617 + color: ${t.transitionLabelColor||t.tertiaryTextColor};
1618 +}
1619 +
1620 +.stateLabel text {
1621 + fill: ${t.stateLabelColor};
1622 + font-size: 10px;
1623 + font-weight: bold;
1624 +}
1625 +
1626 +.node circle.state-start {
1627 + fill: ${t.specialStateColor};
1628 + stroke: ${t.specialStateColor};
1629 +}
1630 +
1631 +.node .fork-join {
1632 + fill: ${t.specialStateColor};
1633 + stroke: ${t.specialStateColor};
1634 +}
1635 +
1636 +.node circle.state-end {
1637 + fill: ${t.innerEndBackground};
1638 + stroke: ${t.background};
1639 + stroke-width: 1.5
1640 +}
1641 +.end-state-inner {
1642 + fill: ${t.compositeBackground||t.background};
1643 + // stroke: ${t.background};
1644 + stroke-width: 1.5
1645 +}
1646 +
1647 +.node rect {
1648 + fill: ${t.stateBkg||t.mainBkg};
1649 + stroke: ${t.stateBorder||t.nodeBorder};
1650 + stroke-width: 1px;
1651 +}
1652 +.node polygon {
1653 + fill: ${t.mainBkg};
1654 + stroke: ${t.stateBorder||t.nodeBorder};;
1655 + stroke-width: 1px;
1656 +}
1657 +#statediagram-barbEnd {
1658 + fill: ${t.lineColor};
1659 +}
1660 +
1661 +.statediagram-cluster rect {
1662 + fill: ${t.compositeTitleBackground};
1663 + stroke: ${t.stateBorder||t.nodeBorder};
1664 + stroke-width: 1px;
1665 +}
1666 +
1667 +.cluster-label, .nodeLabel {
1668 + color: ${t.stateLabelColor};
1669 + // line-height: 1;
1670 +}
1671 +
1672 +.statediagram-cluster rect.outer {
1673 + rx: 5px;
1674 + ry: 5px;
1675 +}
1676 +.statediagram-state .divider {
1677 + stroke: ${t.stateBorder||t.nodeBorder};
1678 +}
1679 +
1680 +.statediagram-state .title-state {
1681 + rx: 5px;
1682 + ry: 5px;
1683 +}
1684 +.statediagram-cluster.statediagram-cluster .inner {
1685 + fill: ${t.compositeBackground||t.background};
1686 +}
1687 +.statediagram-cluster.statediagram-cluster-alt .inner {
1688 + fill: ${t.altBackground?t.altBackground:"#efefef"};
1689 +}
1690 +
1691 +.statediagram-cluster .inner {
1692 + rx:0;
1693 + ry:0;
1694 +}
1695 +
1696 +.statediagram-state rect.basic {
1697 + rx: 5px;
1698 + ry: 5px;
1699 +}
1700 +.statediagram-state rect.divider {
1701 + stroke-dasharray: 10,10;
1702 + fill: ${t.altBackground?t.altBackground:"#efefef"};
1703 +}
1704 +
1705 +.note-edge {
1706 + stroke-dasharray: 5;
1707 +}
1708 +
1709 +.statediagram-note rect {
1710 + fill: ${t.noteBkgColor};
1711 + stroke: ${t.noteBorderColor};
1712 + stroke-width: 1px;
1713 + rx: 0;
1714 + ry: 0;
1715 +}
1716 +.statediagram-note rect {
1717 + fill: ${t.noteBkgColor};
1718 + stroke: ${t.noteBorderColor};
1719 + stroke-width: 1px;
1720 + rx: 0;
1721 + ry: 0;
1722 +}
1723 +
1724 +.statediagram-note text {
1725 + fill: ${t.noteTextColor};
1726 +}
1727 +
1728 +.statediagram-note .nodeLabel {
1729 + color: ${t.noteTextColor};
1730 +}
1731 +.statediagram .edgeLabel {
1732 + color: red; // ${t.noteTextColor};
1733 +}
1734 +
1735 +#dependencyStart, #dependencyEnd {
1736 + fill: ${t.lineColor};
1737 + stroke: ${t.lineColor};
1738 + stroke-width: 1;
1739 +}
1740 +
1741 +.statediagramTitleText {
1742 + text-anchor: middle;
1743 + font-size: 18px;
1744 + fill: ${t.textColor};
1745 +}
1746 +`,"getStyles"),W6=dUe});var nP,pUe,mUe,fde,gUe,dde,pde=N(()=>{"use strict";nP={},pUe=o((t,e)=>{nP[t]=e},"set"),mUe=o(t=>nP[t],"get"),fde=o(()=>Object.keys(nP),"keys"),gUe=o(()=>fde().length,"size"),dde={get:mUe,set:pUe,keys:fde,size:gUe}});var yUe,vUe,xUe,bUe,gde,wUe,TUe,kUe,EUe,iP,mde,yde,vde=N(()=>{"use strict";dr();pde();H6();ir();gr();zt();vt();yUe=o(t=>t.append("circle").attr("class","start-state").attr("r",me().state.sizeUnit).attr("cx",me().state.padding+me().state.sizeUnit).attr("cy",me().state.padding+me().state.sizeUnit),"drawStartState"),vUe=o(t=>t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",me().state.textHeight).attr("class","divider").attr("x2",me().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),xUe=o((t,e)=>{let r=t.append("text").attr("x",2*me().state.padding).attr("y",me().state.textHeight+2*me().state.padding).attr("font-size",me().state.fontSize).attr("class","state-title").text(e.id),n=r.node().getBBox();return t.insert("rect",":first-child").attr("x",me().state.padding).attr("y",me().state.padding).attr("width",n.width+2*me().state.padding).attr("height",n.height+2*me().state.padding).attr("rx",me().state.radius),r},"drawSimpleState"),bUe=o((t,e)=>{let r=o(function(p,m,g){let y=p.append("tspan").attr("x",2*me().state.padding).text(m);g||y.attr("dy",me().state.textHeight)},"addTspan"),i=t.append("text").attr("x",2*me().state.padding).attr("y",me().state.textHeight+1.3*me().state.padding).attr("font-size",me().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),a=i.height,s=t.append("text").attr("x",me().state.padding).attr("y",a+me().state.padding*.4+me().state.dividerMargin+me().state.textHeight).attr("class","state-description"),l=!0,u=!0;e.descriptions.forEach(function(p){l||(r(s,p,u),u=!1),l=!1});let h=t.append("line").attr("x1",me().state.padding).attr("y1",me().state.padding+a+me().state.dividerMargin/2).attr("y2",me().state.padding+a+me().state.dividerMargin/2).attr("class","descr-divider"),f=s.node().getBBox(),d=Math.max(f.width,i.width);return h.attr("x2",d+3*me().state.padding),t.insert("rect",":first-child").attr("x",me().state.padding).attr("y",me().state.padding).attr("width",d+2*me().state.padding).attr("height",f.height+a+2*me().state.padding).attr("rx",me().state.radius),t},"drawDescrState"),gde=o((t,e,r)=>{let n=me().state.padding,i=2*me().state.padding,a=t.node().getBBox(),s=a.width,l=a.x,u=t.append("text").attr("x",0).attr("y",me().state.titleShift).attr("font-size",me().state.fontSize).attr("class","state-title").text(e.id),f=u.node().getBBox().width+i,d=Math.max(f,s);d===s&&(d=d+i);let p,m=t.node().getBBox();e.doc,p=l-n,f>s&&(p=(s-d)/2+n),Math.abs(l-m.x)<n&&f>s&&(p=l-(f-s)/2);let g=1-me().state.textHeight;return t.insert("rect",":first-child").attr("x",p).attr("y",g).attr("class",r?"alt-composit":"composit").attr("width",d).attr("height",m.height+me().state.textHeight+me().state.titleShift+1).attr("rx","0"),u.attr("x",p+n),f<=s&&u.attr("x",l+(d-i)/2-f/2+n),t.insert("rect",":first-child").attr("x",p).attr("y",me().state.titleShift-me().state.textHeight-me().state.padding).attr("width",d).attr("height",me().state.textHeight*3).attr("rx",me().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",me().state.titleShift-me().state.textHeight-me().state.padding).attr("width",d).attr("height",m.height+3+2*me().state.textHeight).attr("rx",me().state.radius),t},"addTitleAndBox"),wUe=o(t=>(t.append("circle").attr("class","end-state-outer").attr("r",me().state.sizeUnit+me().state.miniPadding).attr("cx",me().state.padding+me().state.sizeUnit+me().state.miniPadding).attr("cy",me().state.padding+me().state.sizeUnit+me().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",me().state.sizeUnit).attr("cx",me().state.padding+me().state.sizeUnit+2).attr("cy",me().state.padding+me().state.sizeUnit+2)),"drawEndState"),TUe=o((t,e)=>{let r=me().state.forkWidth,n=me().state.forkHeight;if(e.parentId){let i=r;r=n,n=i}return t.append("rect").style("stroke","black").style("fill","black").attr("width",r).attr("height",n).attr("x",me().state.padding).attr("y",me().state.padding)},"drawForkJoinState"),kUe=o((t,e,r,n)=>{let i=0,a=n.append("text");a.style("text-anchor","start"),a.attr("class","noteText");let s=t.replace(/\r\n/g,"<br/>");s=s.replace(/\n/g,"<br/>");let l=s.split(Ze.lineBreakRegex),u=1.25*me().state.noteMargin;for(let h of l){let f=h.trim();if(f.length>0){let d=a.append("tspan");if(d.text(f),u===0){let p=d.node().getBBox();u+=p.height}i+=u,d.attr("x",e+me().state.noteMargin),d.attr("y",r+i+1.25*me().state.noteMargin)}}return{textWidth:a.node().getBBox().width,textHeight:i}},"_drawLongText"),EUe=o((t,e)=>{e.attr("class","state-note");let r=e.append("rect").attr("x",0).attr("y",me().state.padding),n=e.append("g"),{textWidth:i,textHeight:a}=kUe(t,0,0,n);return r.attr("height",a+2*me().state.noteMargin),r.attr("width",i+me().state.noteMargin*2),r},"drawNote"),iP=o(function(t,e){let r=e.id,n={id:r,label:e.id,width:0,height:0},i=t.append("g").attr("id",r).attr("class","stateGroup");e.type==="start"&&yUe(i),e.type==="end"&&wUe(i),(e.type==="fork"||e.type==="join")&&TUe(i,e),e.type==="note"&&EUe(e.note.text,i),e.type==="divider"&&vUe(i),e.type==="default"&&e.descriptions.length===0&&xUe(i,e),e.type==="default"&&e.descriptions.length>0&&bUe(i,e);let a=i.node().getBBox();return n.width=a.width+2*me().state.padding,n.height=a.height+2*me().state.padding,dde.set(r,n),n},"drawState"),mde=0,yde=o(function(t,e,r){let n=o(function(u){switch(u){case Qo.relationType.AGGREGATION:return"aggregation";case Qo.relationType.EXTENSION:return"extension";case Qo.relationType.COMPOSITION:return"composition";case Qo.relationType.DEPENDENCY:return"dependency"}},"getRelationType");e.points=e.points.filter(u=>!Number.isNaN(u.y));let i=e.points,a=wl().x(function(u){return u.x}).y(function(u){return u.y}).curve(Do),s=t.append("path").attr("d",a(i)).attr("id","edge"+mde).attr("class","transition"),l="";if(me().state.arrowMarkerAbsolute&&(l=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,l=l.replace(/\(/g,"\\("),l=l.replace(/\)/g,"\\)")),s.attr("marker-end","url("+l+"#"+n(Qo.relationType.DEPENDENCY)+"End)"),r.title!==void 0){let u=t.append("g").attr("class","stateLabel"),{x:h,y:f}=Gt.calcLabelPosition(e.points),d=Ze.getRows(r.title),p=0,m=[],g=0,y=0;for(let b=0;b<=d.length;b++){let w=u.append("text").attr("text-anchor","middle").text(d[b]).attr("x",h).attr("y",f+p),C=w.node().getBBox();g=Math.max(g,C.width),y=Math.min(y,C.x),Y.info(C.x,h,f+p),p===0&&(p=w.node().getBBox().height,Y.info("Title height",p,f)),m.push(w)}let v=p*d.length;if(d.length>1){let b=(d.length-1)*p*.5;m.forEach((w,C)=>w.attr("y",f+C*p-b)),v=p*d.length}let x=u.node().getBBox();u.insert("rect",":first-child").attr("class","box").attr("x",h-g/2-me().state.padding/2).attr("y",f-v/2-me().state.padding/2-3.5).attr("width",g+me().state.padding).attr("height",v+me().state.padding),Y.info(x)}mde++},"drawEdge")});var fo,aP,SUe,CUe,AUe,_Ue,xde,bde,wde=N(()=>{"use strict";dr();gR();Vo();vt();gr();vde();zt();Ei();aP={},SUe=o(function(){},"setConf"),CUe=o(function(t){t.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"insertMarkers"),AUe=o(function(t,e,r,n){fo=me().state;let i=me().securityLevel,a;i==="sandbox"&&(a=Ge("#i"+e));let s=i==="sandbox"?Ge(a.nodes()[0].contentDocument.body):Ge("body"),l=i==="sandbox"?a.nodes()[0].contentDocument:document;Y.debug("Rendering diagram "+t);let u=s.select(`[id='${e}']`);CUe(u);let h=n.db.getRootDoc();xde(h,u,void 0,!1,s,l,n);let f=fo.padding,d=u.node().getBBox(),p=d.width+f*2,m=d.height+f*2,g=p*1.75;vn(u,m,g,fo.useMaxWidth),u.attr("viewBox",`${d.x-fo.padding} ${d.y-fo.padding} `+p+" "+m)},"draw"),_Ue=o(t=>t?t.length*fo.fontSizeFactor:1,"getLabelWidth"),xde=o((t,e,r,n,i,a,s)=>{let l=new sn({compound:!0,multigraph:!0}),u,h=!0;for(u=0;u<t.length;u++)if(t[u].stmt==="relation"){h=!1;break}r?l.setGraph({rankdir:"LR",multigraph:!0,compound:!0,ranker:"tight-tree",ranksep:h?1:fo.edgeLengthFactor,nodeSep:h?1:50,isMultiGraph:!0}):l.setGraph({rankdir:"TB",multigraph:!0,compound:!0,ranksep:h?1:fo.edgeLengthFactor,nodeSep:h?1:50,ranker:"tight-tree",isMultiGraph:!0}),l.setDefaultEdgeLabel(function(){return{}});let f=s.db.getStates(),d=s.db.getRelations(),p=Object.keys(f),m=!0;for(let b of p){let w=f[b];r&&(w.parentId=r);let C;if(w.doc){let T=e.append("g").attr("id",w.id).attr("class","stateGroup");if(C=xde(w.doc,T,w.id,!n,i,a,s),m){T=gde(T,w,n);let E=T.node().getBBox();C.width=E.width,C.height=E.height+fo.padding/2,aP[w.id]={y:fo.compositTitleSize}}else{let E=T.node().getBBox();C.width=E.width,C.height=E.height}}else C=iP(e,w,l);if(w.note){let T={descriptions:[],id:w.id+"-note",note:w.note,type:"note"},E=iP(e,T,l);w.note.position==="left of"?(l.setNode(C.id+"-note",E),l.setNode(C.id,C)):(l.setNode(C.id,C),l.setNode(C.id+"-note",E)),l.setParent(C.id,C.id+"-group"),l.setParent(C.id+"-note",C.id+"-group")}else l.setNode(C.id,C)}Y.debug("Count=",l.nodeCount(),l);let g=0;d.forEach(function(b){g++,Y.debug("Setting edge",b),l.setEdge(b.id1,b.id2,{relation:b,width:_Ue(b.title),height:fo.labelHeight*Ze.getRows(b.title).length,labelpos:"c"},"id"+g)}),R2(l),Y.debug("Graph after layout",l.nodes());let y=e.node();l.nodes().forEach(function(b){b!==void 0&&l.node(b)!==void 0?(Y.warn("Node "+b+": "+JSON.stringify(l.node(b))),i.select("#"+y.id+" #"+b).attr("transform","translate("+(l.node(b).x-l.node(b).width/2)+","+(l.node(b).y+(aP[b]?aP[b].y:0)-l.node(b).height/2)+" )"),i.select("#"+y.id+" #"+b).attr("data-x-shift",l.node(b).x-l.node(b).width/2),a.querySelectorAll("#"+y.id+" #"+b+" .divider").forEach(C=>{let T=C.parentElement,E=0,A=0;T&&(T.parentElement&&(E=T.parentElement.getBBox().width),A=parseInt(T.getAttribute("data-x-shift"),10),Number.isNaN(A)&&(A=0)),C.setAttribute("x1",0-A+8),C.setAttribute("x2",E-A-8)})):Y.debug("No Node "+b+": "+JSON.stringify(l.node(b)))});let v=y.getBBox();l.edges().forEach(function(b){b!==void 0&&l.edge(b)!==void 0&&(Y.debug("Edge "+b.v+" -> "+b.w+": "+JSON.stringify(l.edge(b))),yde(e,l.edge(b),l.edge(b).relation))}),v=y.getBBox();let x={id:r||"root",label:r||"root",width:0,height:0};return x.width=v.width+2*fo.padding,x.height=v.height+2*fo.padding,Y.debug("Doc rendered",x,l),x},"renderDoc"),bde={setConf:SUe,draw:AUe}});var Tde={};hr(Tde,{diagram:()=>DUe});var DUe,kde=N(()=>{"use strict";$O();H6();rP();wde();DUe={parser:I6,get db(){return new Qo(1)},renderer:bde,styles:W6,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var Cde={};hr(Cde,{diagram:()=>MUe});var MUe,Ade=N(()=>{"use strict";$O();H6();rP();eP();MUe={parser:I6,get db(){return new Qo(2)},renderer:ide,styles:W6,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var sP,Lde,Rde=N(()=>{"use strict";sP=function(){var t=o(function(d,p,m,g){for(m=m||{},g=d.length;g--;m[d[g]]=p);return m},"o"),e=[6,8,10,11,12,14,16,17,18],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,14],u={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:o(function(p,m,g,y,v,x,b){var w=x.length-1;switch(v){case 1:return x[w-1];case 2:this.$=[];break;case 3:x[w-1].push(x[w]),this.$=x[w-1];break;case 4:case 5:this.$=x[w];break;case 6:case 7:this.$=[];break;case 8:y.setDiagramTitle(x[w].substr(6)),this.$=x[w].substr(6);break;case 9:this.$=x[w].trim(),y.setAccTitle(this.$);break;case 10:case 11:this.$=x[w].trim(),y.setAccDescription(this.$);break;case 12:y.addSection(x[w].substr(8)),this.$=x[w].substr(8);break;case 13:y.addTask(x[w-1],x[w]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:o(function(p,m){if(m.recoverable)this.trace(p);else{var g=new Error(p);throw g.hash=m,g}},"parseError"),parse:o(function(p){var m=this,g=[0],y=[],v=[null],x=[],b=this.table,w="",C=0,T=0,E=0,A=2,S=1,_=x.slice.call(arguments,1),I=Object.create(this.lexer),D={yy:{}};for(var k in this.yy)Object.prototype.hasOwnProperty.call(this.yy,k)&&(D.yy[k]=this.yy[k]);I.setInput(p,D.yy),D.yy.lexer=I,D.yy.parser=this,typeof I.yylloc>"u"&&(I.yylloc={});var L=I.yylloc;x.push(L);var R=I.options&&I.options.ranges;typeof D.yy.parseError=="function"?this.parseError=D.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function O(K){g.length=g.length-2*K,v.length=v.length-K,x.length=x.length-K}o(O,"popStack");function M(){var K;return K=y.pop()||I.lex()||S,typeof K!="number"&&(K instanceof Array&&(y=K,K=y.pop()),K=m.symbols_[K]||K),K}o(M,"lex");for(var B,F,P,z,$,H,Q={},j,ie,ne,le;;){if(P=g[g.length-1],this.defaultActions[P]?z=this.defaultActions[P]:((B===null||typeof B>"u")&&(B=M()),z=b[P]&&b[P][B]),typeof z>"u"||!z.length||!z[0]){var he="";le=[];for(j in b[P])this.terminals_[j]&&j>A&&le.push("'"+this.terminals_[j]+"'");I.showPosition?he="Parse error on line "+(C+1)+`:
1747 +`+I.showPosition()+`
1748 +Expecting `+le.join(", ")+", got '"+(this.terminals_[B]||B)+"'":he="Parse error on line "+(C+1)+": Unexpected "+(B==S?"end of input":"'"+(this.terminals_[B]||B)+"'"),this.parseError(he,{text:I.match,token:this.terminals_[B]||B,line:I.yylineno,loc:L,expected:le})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+P+", token: "+B);switch(z[0]){case 1:g.push(B),v.push(I.yytext),x.push(I.yylloc),g.push(z[1]),B=null,F?(B=F,F=null):(T=I.yyleng,w=I.yytext,C=I.yylineno,L=I.yylloc,E>0&&E--);break;case 2:if(ie=this.productions_[z[1]][1],Q.$=v[v.length-ie],Q._$={first_line:x[x.length-(ie||1)].first_line,last_line:x[x.length-1].last_line,first_column:x[x.length-(ie||1)].first_column,last_column:x[x.length-1].last_column},R&&(Q._$.range=[x[x.length-(ie||1)].range[0],x[x.length-1].range[1]]),H=this.performAction.apply(Q,[w,T,C,D.yy,z[1],v,x].concat(_)),typeof H<"u")return H;ie&&(g=g.slice(0,-1*ie*2),v=v.slice(0,-1*ie),x=x.slice(0,-1*ie)),g.push(this.productions_[z[1]][0]),v.push(Q.$),x.push(Q._$),ne=b[g[g.length-2]][g[g.length-1]],g.push(ne);break;case 3:return!0}}return!0},"parse")},h=function(){var d={EOF:1,parseError:o(function(m,g){if(this.yy.parser)this.yy.parser.parseError(m,g);else throw new Error(m)},"parseError"),setInput:o(function(p,m){return this.yy=m||this.yy||{},this._input=p,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var p=this._input[0];this.yytext+=p,this.yyleng++,this.offset++,this.match+=p,this.matched+=p;var m=p.match(/(?:\r\n?|\n).*/g);return m?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),p},"input"),unput:o(function(p){var m=p.length,g=p.split(/(?:\r\n?|\n)/g);this._input=p+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-m),this.offset-=m;var y=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var v=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===y.length?this.yylloc.first_column:0)+y[y.length-g.length].length-g[0].length:this.yylloc.first_column-m},this.options.ranges&&(this.yylloc.range=[v[0],v[0]+this.yyleng-m]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
1749 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(p){this.unput(this.match.slice(p))},"less"),pastInput:o(function(){var p=this.matched.substr(0,this.matched.length-this.match.length);return(p.length>20?"...":"")+p.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var p=this.match;return p.length<20&&(p+=this._input.substr(0,20-p.length)),(p.substr(0,20)+(p.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var p=this.pastInput(),m=new Array(p.length+1).join("-");return p+this.upcomingInput()+`
1750 +`+m+"^"},"showPosition"),test_match:o(function(p,m){var g,y,v;if(this.options.backtrack_lexer&&(v={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(v.yylloc.range=this.yylloc.range.slice(0))),y=p[0].match(/(?:\r\n?|\n).*/g),y&&(this.yylineno+=y.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:y?y[y.length-1].length-y[y.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+p[0].length},this.yytext+=p[0],this.match+=p[0],this.matches=p,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(p[0].length),this.matched+=p[0],g=this.performAction.call(this,this.yy,this,m,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),g)return g;if(this._backtrack){for(var x in v)this[x]=v[x];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var p,m,g,y;this._more||(this.yytext="",this.match="");for(var v=this._currentRules(),x=0;x<v.length;x++)if(g=this._input.match(this.rules[v[x]]),g&&(!m||g[0].length>m[0].length)){if(m=g,y=x,this.options.backtrack_lexer){if(p=this.test_match(g,v[x]),p!==!1)return p;if(this._backtrack){m=!1;continue}else return!1}else if(!this.options.flex)break}return m?(p=this.test_match(m,v[y]),p!==!1?p:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
1751 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var m=this.next();return m||this.lex()},"lex"),begin:o(function(m){this.conditionStack.push(m)},"begin"),popState:o(function(){var m=this.conditionStack.length-1;return m>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(m){return m=this.conditionStack.length-1-Math.abs(m||0),m>=0?this.conditionStack[m]:"INITIAL"},"topState"),pushState:o(function(m){this.begin(m)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(m,g,y,v){var x=v;switch(y){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return d}();u.lexer=h;function f(){this.yy={}}return o(f,"Parser"),f.prototype=u,u.Parser=f,new f}();sP.parser=sP;Lde=sP});var M1,oP,Sb,Cb,BUe,FUe,$Ue,zUe,GUe,VUe,UUe,Nde,HUe,lP,Mde=N(()=>{"use strict";zt();mi();M1="",oP=[],Sb=[],Cb=[],BUe=o(function(){oP.length=0,Sb.length=0,M1="",Cb.length=0,Ar()},"clear"),FUe=o(function(t){M1=t,oP.push(t)},"addSection"),$Ue=o(function(){return oP},"getSections"),zUe=o(function(){let t=Nde(),e=100,r=0;for(;!t&&r<e;)t=Nde(),r++;return Sb.push(...Cb),Sb},"getTasks"),GUe=o(function(){let t=[];return Sb.forEach(r=>{r.people&&t.push(...r.people)}),[...new Set(t)].sort()},"updateActors"),VUe=o(function(t,e){let r=e.substr(1).split(":"),n=0,i=[];r.length===1?(n=Number(r[0]),i=[]):(n=Number(r[0]),i=r[1].split(","));let a=i.map(l=>l.trim()),s={section:M1,type:M1,people:a,task:t,score:n};Cb.push(s)},"addTask"),UUe=o(function(t){let e={section:M1,type:M1,description:t,task:t,classes:[]};Sb.push(e)},"addTaskOrg"),Nde=o(function(){let t=o(function(r){return Cb[r].processed},"compileTask"),e=!0;for(let[r,n]of Cb.entries())t(r),e=e&&n.processed;return e},"compileTasks"),HUe=o(function(){return GUe()},"getActors"),lP={getConfig:o(()=>me().journey,"getConfig"),clear:BUe,setDiagramTitle:$r,getDiagramTitle:Ir,setAccTitle:Lr,getAccTitle:Rr,setAccDescription:Nr,getAccDescription:Mr,addSection:FUe,getSections:$Ue,getTasks:zUe,addTask:VUe,addTaskOrg:UUe,getActors:HUe}});var WUe,Ide,Ode=N(()=>{"use strict";WUe=o(t=>`.label {
1752 + font-family: ${t.fontFamily};
1753 + color: ${t.textColor};
1754 + }
1755 + .mouth {
1756 + stroke: #666;
1757 + }
1758 +
1759 + line {
1760 + stroke: ${t.textColor}
1761 + }
1762 +
1763 + .legend {
1764 + fill: ${t.textColor};
1765 + font-family: ${t.fontFamily};
1766 + }
1767 +
1768 + .label text {
1769 + fill: #333;
1770 + }
1771 + .label {
1772 + color: ${t.textColor}
1773 + }
1774 +
1775 + .face {
1776 + ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"};
1777 + stroke: #999;
1778 + }
1779 +
1780 + .node rect,
1781 + .node circle,
1782 + .node ellipse,
1783 + .node polygon,
1784 + .node path {
1785 + fill: ${t.mainBkg};
1786 + stroke: ${t.nodeBorder};
1787 + stroke-width: 1px;
1788 + }
1789 +
1790 + .node .label {
1791 + text-align: center;
1792 + }
1793 + .node.clickable {
1794 + cursor: pointer;
1795 + }
1796 +
1797 + .arrowheadPath {
1798 + fill: ${t.arrowheadColor};
1799 + }
1800 +
1801 + .edgePath .path {
1802 + stroke: ${t.lineColor};
1803 + stroke-width: 1.5px;
1804 + }
1805 +
1806 + .flowchart-link {
1807 + stroke: ${t.lineColor};
1808 + fill: none;
1809 + }
1810 +
1811 + .edgeLabel {
1812 + background-color: ${t.edgeLabelBackground};
1813 + rect {
1814 + opacity: 0.5;
1815 + }
1816 + text-align: center;
1817 + }
1818 +
1819 + .cluster rect {
1820 + }
1821 +
1822 + .cluster text {
1823 + fill: ${t.titleColor};
1824 + }
1825 +
1826 + div.mermaidTooltip {
1827 + position: absolute;
1828 + text-align: center;
1829 + max-width: 200px;
1830 + padding: 2px;
1831 + font-family: ${t.fontFamily};
1832 + font-size: 12px;
1833 + background: ${t.tertiaryColor};
1834 + border: 1px solid ${t.border2};
1835 + border-radius: 2px;
1836 + pointer-events: none;
1837 + z-index: 100;
1838 + }
1839 +
1840 + .task-type-0, .section-type-0 {
1841 + ${t.fillType0?`fill: ${t.fillType0}`:""};
1842 + }
1843 + .task-type-1, .section-type-1 {
1844 + ${t.fillType0?`fill: ${t.fillType1}`:""};
1845 + }
1846 + .task-type-2, .section-type-2 {
1847 + ${t.fillType0?`fill: ${t.fillType2}`:""};
1848 + }
1849 + .task-type-3, .section-type-3 {
1850 + ${t.fillType0?`fill: ${t.fillType3}`:""};
1851 + }
1852 + .task-type-4, .section-type-4 {
1853 + ${t.fillType0?`fill: ${t.fillType4}`:""};
1854 + }
1855 + .task-type-5, .section-type-5 {
1856 + ${t.fillType0?`fill: ${t.fillType5}`:""};
1857 + }
1858 + .task-type-6, .section-type-6 {
1859 + ${t.fillType0?`fill: ${t.fillType6}`:""};
1860 + }
1861 + .task-type-7, .section-type-7 {
1862 + ${t.fillType0?`fill: ${t.fillType7}`:""};
1863 + }
1864 +
1865 + .actor-0 {
1866 + ${t.actor0?`fill: ${t.actor0}`:""};
1867 + }
1868 + .actor-1 {
1869 + ${t.actor1?`fill: ${t.actor1}`:""};
1870 + }
1871 + .actor-2 {
1872 + ${t.actor2?`fill: ${t.actor2}`:""};
1873 + }
1874 + .actor-3 {
1875 + ${t.actor3?`fill: ${t.actor3}`:""};
1876 + }
1877 + .actor-4 {
1878 + ${t.actor4?`fill: ${t.actor4}`:""};
1879 + }
1880 + .actor-5 {
1881 + ${t.actor5?`fill: ${t.actor5}`:""};
1882 + }
1883 +`,"getStyles"),Ide=WUe});var cP,qUe,Bde,Fde,YUe,XUe,Pde,jUe,KUe,$de,QUe,I1,zde=N(()=>{"use strict";dr();Wv();cP=o(function(t,e){return kd(t,e)},"drawRect"),qUe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=bl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=bl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),Bde=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),Fde=o(function(t,e){return Nq(t,e)},"drawText"),YUe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,Fde(t,e)},"drawLabel"),XUe=o(function(t,e,r){let n=t.append("g"),i=Tl();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width*e.taskCount+r.diagramMarginX*(e.taskCount-1),i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,cP(n,i),$de(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),Pde=-1,jUe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");Pde++;let a=300+5*30;i.append("line").attr("id","task"+Pde).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),qUe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=Tl();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,cP(i,s);let l=e.x+14;e.people.forEach(u=>{let h=e.actors[u].color,f={cx:l,cy:e.y,r:7,fill:h,stroke:"#000",title:u,pos:e.actors[u].position};Bde(i,f),l+=10}),$de(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),KUe=o(function(t,e){q5(t,e)},"drawBackgroundRect"),$de=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(/<br\s*\/?>/gi);for(let v=0;v<y.length;v++){let x=v*m-m*(y.length-1)/2,b=a.append("text").attr("x",s+u/2).attr("y",l).attr("fill",p).style("text-anchor","middle").style("font-size",m).style("font-family",g);b.append("tspan").attr("x",s+u/2).attr("dy",x).text(y[v]),b.attr("y",l+h/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),n(b,f)}}o(e,"byTspan");function r(i,a,s,l,u,h,f,d){let p=a.append("switch"),g=p.append("foreignObject").attr("x",s).attr("y",l).attr("width",u).attr("height",h).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");g.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,p,s,l,u,h,f,d),n(g,f)}o(r,"byFo");function n(i,a){for(let s in a)s in a&&i.attr(s,a[s])}return o(n,"_setTextAttrs"),function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),QUe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},"initGraphics"),I1={drawRect:cP,drawCircle:Bde,drawSection:XUe,drawText:Fde,drawLabel:YUe,drawTask:jUe,drawBackgroundRect:KUe,initGraphics:QUe}});function JUe(t){let e=me().journey,r=60;Object.keys(ju).forEach(n=>{let i=ju[n].color,a={cx:20,cy:r,r:7,fill:i,stroke:"#000",pos:ju[n].position};I1.drawCircle(t,a);let s={x:40,y:r+7,fill:"#666",text:n,textMargin:e.boxTextMargin|5};I1.drawText(t,s),r+=20})}var ZUe,ju,q6,Np,eHe,Zo,uP,Gde,tHe,hP,Vde=N(()=>{"use strict";dr();zde();zt();Ei();ZUe=o(function(t){Object.keys(t).forEach(function(r){q6[r]=t[r]})},"setConf"),ju={};o(JUe,"drawActorLegend");q6=me().journey,Np=q6.leftMargin,eHe=o(function(t,e,r,n){let i=me().journey,a=me().securityLevel,s;a==="sandbox"&&(s=Ge("#i"+e));let l=a==="sandbox"?Ge(s.nodes()[0].contentDocument.body):Ge("body");Zo.init();let u=l.select("#"+e);I1.initGraphics(u);let h=n.db.getTasks(),f=n.db.getDiagramTitle(),d=n.db.getActors();for(let x in ju)delete ju[x];let p=0;d.forEach(x=>{ju[x]={color:i.actorColours[p%i.actorColours.length],position:p},p++}),JUe(u),Zo.insert(0,0,Np,Object.keys(ju).length*50),tHe(u,h,0);let m=Zo.getBounds();f&&u.append("text").text(f).attr("x",Np).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);let g=m.stopy-m.starty+2*i.diagramMarginY,y=Np+m.stopx+2*i.diagramMarginX;vn(u,g,y,i.useMaxWidth),u.append("line").attr("x1",Np).attr("y1",i.height*4).attr("x2",y-Np-4).attr("y2",i.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");let v=f?70:0;u.attr("viewBox",`${m.startx} -25 ${y} ${g+v}`),u.attr("preserveAspectRatio","xMinYMin meet"),u.attr("height",g+v+25)},"draw"),Zo={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:o(function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=me().journey,a=this,s=0;function l(u){return o(function(f){s++;let d=a.sequenceItems.length-s+1;a.updateVal(f,"starty",e-d*i.boxMargin,Math.min),a.updateVal(f,"stopy",n+d*i.boxMargin,Math.max),a.updateVal(Zo.data,"startx",t-d*i.boxMargin,Math.min),a.updateVal(Zo.data,"stopx",r+d*i.boxMargin,Math.max),u!=="activation"&&(a.updateVal(f,"startx",t-d*i.boxMargin,Math.min),a.updateVal(f,"stopx",r+d*i.boxMargin,Math.max),a.updateVal(Zo.data,"starty",e-d*i.boxMargin,Math.min),a.updateVal(Zo.data,"stopy",n+d*i.boxMargin,Math.max))},"updateItemBounds")}o(l,"updateFn"),this.sequenceItems.forEach(l())},"updateBounds"),insert:o(function(t,e,r,n){let i=Math.min(t,r),a=Math.max(t,r),s=Math.min(e,n),l=Math.max(e,n);this.updateVal(Zo.data,"startx",i,Math.min),this.updateVal(Zo.data,"starty",s,Math.min),this.updateVal(Zo.data,"stopx",a,Math.max),this.updateVal(Zo.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return this.data},"getBounds")},uP=q6.sectionFills,Gde=q6.sectionColours,tHe=o(function(t,e,r){let n=me().journey,i="",a=n.height*2+n.diagramMarginY,s=r+a,l=0,u="#CCC",h="black",f=0;for(let[d,p]of e.entries()){if(i!==p.section){u=uP[l%uP.length],f=l%uP.length,h=Gde[l%Gde.length];let g=0,y=p.section;for(let x=d;x<e.length&&e[x].section==y;x++)g=g+1;let v={x:d*n.taskMargin+d*n.width+Np,y:50,text:p.section,fill:u,num:f,colour:h,taskCount:g};I1.drawSection(t,v,n),i=p.section,l++}let m=p.people.reduce((g,y)=>(ju[y]&&(g[y]=ju[y]),g),{});p.x=d*n.taskMargin+d*n.width+Np,p.y=s,p.width=n.diagramMarginX,p.height=n.diagramMarginY,p.colour=h,p.fill=u,p.num=f,p.actors=m,I1.drawTask(t,p,n),Zo.insert(p.x,p.y,p.x+p.width+n.taskMargin,300+5*30)}},"drawTasks"),hP={setConf:ZUe,draw:eHe}});var Ude={};hr(Ude,{diagram:()=>rHe});var rHe,Hde=N(()=>{"use strict";Rde();Mde();Ode();Vde();rHe={parser:Lde,db:lP,renderer:hP,styles:Ide,init:o(t=>{hP.setConf(t.journey),lP.clear()},"init")}});var dP,Qde,Zde=N(()=>{"use strict";dP=function(){var t=o(function(p,m,g,y){for(g=g||{},y=p.length;y--;g[p[y]]=m);return g},"o"),e=[6,8,10,11,12,14,16,17,20,21],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,16],u=[1,17],h={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:o(function(m,g,y,v,x,b,w){var C=b.length-1;switch(x){case 1:return b[C-1];case 2:this.$=[];break;case 3:b[C-1].push(b[C]),this.$=b[C-1];break;case 4:case 5:this.$=b[C];break;case 6:case 7:this.$=[];break;case 8:v.getCommonDb().setDiagramTitle(b[C].substr(6)),this.$=b[C].substr(6);break;case 9:this.$=b[C].trim(),v.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=b[C].trim(),v.getCommonDb().setAccDescription(this.$);break;case 12:v.addSection(b[C].substr(8)),this.$=b[C].substr(8);break;case 15:v.addTask(b[C],0,""),this.$=b[C];break;case 16:v.addEvent(b[C].substr(2)),this.$=b[C];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:18,11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,19]},{15:[1,20]},t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,4]),t(e,[2,9]),t(e,[2,10])],defaultActions:{},parseError:o(function(m,g){if(g.recoverable)this.trace(m);else{var y=new Error(m);throw y.hash=g,y}},"parseError"),parse:o(function(m){var g=this,y=[0],v=[],x=[null],b=[],w=this.table,C="",T=0,E=0,A=0,S=2,_=1,I=b.slice.call(arguments,1),D=Object.create(this.lexer),k={yy:{}};for(var L in this.yy)Object.prototype.hasOwnProperty.call(this.yy,L)&&(k.yy[L]=this.yy[L]);D.setInput(m,k.yy),k.yy.lexer=D,k.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var R=D.yylloc;b.push(R);var O=D.options&&D.options.ranges;typeof k.yy.parseError=="function"?this.parseError=k.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function M(X){y.length=y.length-2*X,x.length=x.length-X,b.length=b.length-X}o(M,"popStack");function B(){var X;return X=v.pop()||D.lex()||_,typeof X!="number"&&(X instanceof Array&&(v=X,X=v.pop()),X=g.symbols_[X]||X),X}o(B,"lex");for(var F,P,z,$,H,Q,j={},ie,ne,le,he;;){if(z=y[y.length-1],this.defaultActions[z]?$=this.defaultActions[z]:((F===null||typeof F>"u")&&(F=B()),$=w[z]&&w[z][F]),typeof $>"u"||!$.length||!$[0]){var K="";he=[];for(ie in w[z])this.terminals_[ie]&&ie>S&&he.push("'"+this.terminals_[ie]+"'");D.showPosition?K="Parse error on line "+(T+1)+`:
1884 +`+D.showPosition()+`
1885 +Expecting `+he.join(", ")+", got '"+(this.terminals_[F]||F)+"'":K="Parse error on line "+(T+1)+": Unexpected "+(F==_?"end of input":"'"+(this.terminals_[F]||F)+"'"),this.parseError(K,{text:D.match,token:this.terminals_[F]||F,line:D.yylineno,loc:R,expected:he})}if($[0]instanceof Array&&$.length>1)throw new Error("Parse Error: multiple actions possible at state: "+z+", token: "+F);switch($[0]){case 1:y.push(F),x.push(D.yytext),b.push(D.yylloc),y.push($[1]),F=null,P?(F=P,P=null):(E=D.yyleng,C=D.yytext,T=D.yylineno,R=D.yylloc,A>0&&A--);break;case 2:if(ne=this.productions_[$[1]][1],j.$=x[x.length-ne],j._$={first_line:b[b.length-(ne||1)].first_line,last_line:b[b.length-1].last_line,first_column:b[b.length-(ne||1)].first_column,last_column:b[b.length-1].last_column},O&&(j._$.range=[b[b.length-(ne||1)].range[0],b[b.length-1].range[1]]),Q=this.performAction.apply(j,[C,E,T,k.yy,$[1],x,b].concat(I)),typeof Q<"u")return Q;ne&&(y=y.slice(0,-1*ne*2),x=x.slice(0,-1*ne),b=b.slice(0,-1*ne)),y.push(this.productions_[$[1]][0]),x.push(j.$),b.push(j._$),le=w[y[y.length-2]][y[y.length-1]],y.push(le);break;case 3:return!0}}return!0},"parse")},f=function(){var p={EOF:1,parseError:o(function(g,y){if(this.yy.parser)this.yy.parser.parseError(g,y);else throw new Error(g)},"parseError"),setInput:o(function(m,g){return this.yy=g||this.yy||{},this._input=m,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var m=this._input[0];this.yytext+=m,this.yyleng++,this.offset++,this.match+=m,this.matched+=m;var g=m.match(/(?:\r\n?|\n).*/g);return g?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),m},"input"),unput:o(function(m){var g=m.length,y=m.split(/(?:\r\n?|\n)/g);this._input=m+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-g),this.offset-=g;var v=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),y.length-1&&(this.yylineno-=y.length-1);var x=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:y?(y.length===v.length?this.yylloc.first_column:0)+v[v.length-y.length].length-y[0].length:this.yylloc.first_column-g},this.options.ranges&&(this.yylloc.range=[x[0],x[0]+this.yyleng-g]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
1886 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(m){this.unput(this.match.slice(m))},"less"),pastInput:o(function(){var m=this.matched.substr(0,this.matched.length-this.match.length);return(m.length>20?"...":"")+m.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var m=this.match;return m.length<20&&(m+=this._input.substr(0,20-m.length)),(m.substr(0,20)+(m.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var m=this.pastInput(),g=new Array(m.length+1).join("-");return m+this.upcomingInput()+`
1887 +`+g+"^"},"showPosition"),test_match:o(function(m,g){var y,v,x;if(this.options.backtrack_lexer&&(x={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(x.yylloc.range=this.yylloc.range.slice(0))),v=m[0].match(/(?:\r\n?|\n).*/g),v&&(this.yylineno+=v.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:v?v[v.length-1].length-v[v.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+m[0].length},this.yytext+=m[0],this.match+=m[0],this.matches=m,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(m[0].length),this.matched+=m[0],y=this.performAction.call(this,this.yy,this,g,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),y)return y;if(this._backtrack){for(var b in x)this[b]=x[b];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var m,g,y,v;this._more||(this.yytext="",this.match="");for(var x=this._currentRules(),b=0;b<x.length;b++)if(y=this._input.match(this.rules[x[b]]),y&&(!g||y[0].length>g[0].length)){if(g=y,v=b,this.options.backtrack_lexer){if(m=this.test_match(y,x[b]),m!==!1)return m;if(this._backtrack){g=!1;continue}else return!1}else if(!this.options.flex)break}return g?(m=this.test_match(g,x[v]),m!==!1?m:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
1888 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var g=this.next();return g||this.lex()},"lex"),begin:o(function(g){this.conditionStack.push(g)},"begin"),popState:o(function(){var g=this.conditionStack.length-1;return g>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(g){return g=this.conditionStack.length-1-Math.abs(g||0),g>=0?this.conditionStack[g]:"INITIAL"},"topState"),pushState:o(function(g){this.begin(g)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(g,y,v,x){var b=x;switch(v){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^:\n]+)/i,/^(?::\s[^:\n]+)/i,/^(?:[^#:\n]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}};return p}();h.lexer=f;function d(){this.yy={}}return o(d,"Parser"),d.prototype=h,h.Parser=d,new d}();dP.parser=dP;Qde=dP});var mP={};hr(mP,{addEvent:()=>ope,addSection:()=>npe,addTask:()=>spe,addTaskOrg:()=>lpe,clear:()=>rpe,default:()=>hHe,getCommonDb:()=>tpe,getSections:()=>ipe,getTasks:()=>ape});var O1,epe,pP,Y6,P1,tpe,rpe,npe,ipe,ape,spe,ope,lpe,Jde,hHe,cpe=N(()=>{"use strict";mi();O1="",epe=0,pP=[],Y6=[],P1=[],tpe=o(()=>qy,"getCommonDb"),rpe=o(function(){pP.length=0,Y6.length=0,O1="",P1.length=0,Ar()},"clear"),npe=o(function(t){O1=t,pP.push(t)},"addSection"),ipe=o(function(){return pP},"getSections"),ape=o(function(){let t=Jde(),e=100,r=0;for(;!t&&r<e;)t=Jde(),r++;return Y6.push(...P1),Y6},"getTasks"),spe=o(function(t,e,r){let n={id:epe++,section:O1,type:O1,task:t,score:e||0,events:r?[r]:[]};P1.push(n)},"addTask"),ope=o(function(t){P1.find(r=>r.id===epe-1).events.push(t)},"addEvent"),lpe=o(function(t){let e={section:O1,type:O1,description:t,task:t,classes:[]};Y6.push(e)},"addTaskOrg"),Jde=o(function(){let t=o(function(r){return P1[r].processed},"compileTask"),e=!0;for(let[r,n]of P1.entries())t(r),e=e&&n.processed;return e},"compileTasks"),hHe={clear:rpe,getCommonDb:tpe,addSection:npe,getSections:ipe,getTasks:ape,addTask:spe,addTaskOrg:lpe,addEvent:ope}});function dpe(t,e){t.each(function(){var r=Ge(this),n=r.text().split(/(\s+|<br>)/).reverse(),i,a=[],s=1.1,l=r.attr("y"),u=parseFloat(r.attr("dy")),h=r.text(null).append("tspan").attr("x",0).attr("y",l).attr("dy",u+"em");for(let f=0;f<n.length;f++)i=n[n.length-1-f],a.push(i),h.text(a.join(" ").trim()),(h.node().getComputedTextLength()>e||i==="<br>")&&(a.pop(),h.text(a.join(" ").trim()),i==="<br>"?a=[""]:a=[i],h=r.append("tspan").attr("x",0).attr("y",l).attr("dy",s+"em").text(i))})}var fHe,X6,dHe,pHe,hpe,mHe,gHe,upe,yHe,vHe,xHe,gP,fpe,bHe,wHe,THe,kHe,bf,ppe=N(()=>{"use strict";dr();fHe=12,X6=o(function(t,e){let r=t.append("rect");return r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),r.attr("rx",e.rx),r.attr("ry",e.ry),e.class!==void 0&&r.attr("class",e.class),r},"drawRect"),dHe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=bl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=bl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),pHe=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),hpe=o(function(t,e){let r=e.text.replace(/<br\s*\/?>/gi," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class!==void 0&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),mHe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,hpe(t,e)},"drawLabel"),gHe=o(function(t,e,r){let n=t.append("g"),i=gP();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width,i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,X6(n,i),fpe(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),upe=-1,yHe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");upe++;let a=300+5*30;i.append("line").attr("id","task"+upe).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),dHe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=gP();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,X6(i,s),fpe(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),vHe=o(function(t,e){X6(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},"drawBackgroundRect"),xHe=o(function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},"getTextObj"),gP=o(function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),fpe=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(/<br\s*\/?>/gi);for(let v=0;v<y.length;v++){let x=v*m-m*(y.length-1)/2,b=a.append("text").attr("x",s+u/2).attr("y",l).attr("fill",p).style("text-anchor","middle").style("font-size",m).style("font-family",g);b.append("tspan").attr("x",s+u/2).attr("dy",x).text(y[v]),b.attr("y",l+h/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),n(b,f)}}o(e,"byTspan");function r(i,a,s,l,u,h,f,d){let p=a.append("switch"),g=p.append("foreignObject").attr("x",s).attr("y",l).attr("width",u).attr("height",h).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");g.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,p,s,l,u,h,f,d),n(g,f)}o(r,"byFo");function n(i,a){for(let s in a)s in a&&i.attr(s,a[s])}return o(n,"_setTextAttrs"),function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),bHe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},"initGraphics");o(dpe,"wrap");wHe=o(function(t,e,r,n){let i=r%fHe-1,a=t.append("g");e.section=i,a.attr("class",(e.class?e.class+" ":"")+"timeline-node "+("section-"+i));let s=a.append("g"),l=a.append("g"),h=l.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(dpe,e.width).node().getBBox(),f=n.fontSize?.replace?n.fontSize.replace("px",""):n.fontSize;return e.height=h.height+f*1.1*.5+e.padding,e.height=Math.max(e.height,e.maxHeight),e.width=e.width+2*e.padding,l.attr("transform","translate("+e.width/2+", "+e.padding/2+")"),kHe(s,e,i,n),e},"drawNode"),THe=o(function(t,e,r){let n=t.append("g"),a=n.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(dpe,e.width).node().getBBox(),s=r.fontSize?.replace?r.fontSize.replace("px",""):r.fontSize;return n.remove(),a.height+s*1.1*.5+e.padding},"getVirtualNodeHeight"),kHe=o(function(t,e,r){t.append("path").attr("id","node-"+e.id).attr("class","node-bkg node-"+e.type).attr("d",`M0 ${e.height-5} v${-e.height+2*5} q0,-5 5,-5 h${e.width-2*5} q5,0 5,5 v${e.height-5} H0 Z`),t.append("line").attr("class","node-line-"+r).attr("x1",0).attr("y1",e.height).attr("x2",e.width).attr("y2",e.height)},"defaultBkg"),bf={drawRect:X6,drawCircle:pHe,drawSection:gHe,drawText:hpe,drawLabel:mHe,drawTask:yHe,drawBackgroundRect:vHe,getTextObj:xHe,getNoteRect:gP,initGraphics:bHe,drawNode:wHe,getVirtualNodeHeight:THe}});var EHe,mpe,SHe,gpe,ype=N(()=>{"use strict";dr();ppe();vt();zt();Ei();EHe=o(function(t,e,r,n){let i=me(),a=i.leftMargin??50;Y.debug("timeline",n.db);let s=i.securityLevel,l;s==="sandbox"&&(l=Ge("#i"+e));let h=(s==="sandbox"?Ge(l.nodes()[0].contentDocument.body):Ge("body")).select("#"+e);h.append("g");let f=n.db.getTasks(),d=n.db.getCommonDb().getDiagramTitle();Y.debug("task",f),bf.initGraphics(h);let p=n.db.getSections();Y.debug("sections",p);let m=0,g=0,y=0,v=0,x=50+a,b=50;v=50;let w=0,C=!0;p.forEach(function(_){let I={number:w,descr:_,section:w,width:150,padding:20,maxHeight:m},D=bf.getVirtualNodeHeight(h,I,i);Y.debug("sectionHeight before draw",D),m=Math.max(m,D+20)});let T=0,E=0;Y.debug("tasks.length",f.length);for(let[_,I]of f.entries()){let D={number:_,descr:I,section:I.section,width:150,padding:20,maxHeight:g},k=bf.getVirtualNodeHeight(h,D,i);Y.debug("taskHeight before draw",k),g=Math.max(g,k+20),T=Math.max(T,I.events.length);let L=0;for(let R of I.events){let O={descr:R,section:I.section,number:I.section,width:150,padding:20,maxHeight:50};L+=bf.getVirtualNodeHeight(h,O,i)}E=Math.max(E,L)}Y.debug("maxSectionHeight before draw",m),Y.debug("maxTaskHeight before draw",g),p&&p.length>0?p.forEach(_=>{let I=f.filter(R=>R.section===_),D={number:w,descr:_,section:w,width:200*Math.max(I.length,1)-50,padding:20,maxHeight:m};Y.debug("sectionNode",D);let k=h.append("g"),L=bf.drawNode(k,D,w,i);Y.debug("sectionNode output",L),k.attr("transform",`translate(${x}, ${v})`),b+=m+50,I.length>0&&mpe(h,I,w,x,b,g,i,T,E,m,!1),x+=200*Math.max(I.length,1),b=v,w++}):(C=!1,mpe(h,f,w,x,b,g,i,T,E,m,!0));let A=h.node().getBBox();Y.debug("bounds",A),d&&h.append("text").text(d).attr("x",A.width/2-a).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),y=C?m+g+150:g+100,h.append("g").attr("class","lineWrapper").append("line").attr("x1",a).attr("y1",y).attr("x2",A.width+3*a).attr("y2",y).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),Ao(void 0,h,i.timeline?.padding??50,i.timeline?.useMaxWidth??!1)},"draw"),mpe=o(function(t,e,r,n,i,a,s,l,u,h,f){for(let d of e){let p={descr:d.task,section:r,number:r,width:150,padding:20,maxHeight:a};Y.debug("taskNode",p);let m=t.append("g").attr("class","taskWrapper"),y=bf.drawNode(m,p,r,s).height;if(Y.debug("taskHeight after draw",y),m.attr("transform",`translate(${n}, ${i})`),a=Math.max(a,y),d.events){let v=t.append("g").attr("class","lineWrapper"),x=a;i+=100,x=x+SHe(t,d.events,r,n,i,s),i-=100,v.append("line").attr("x1",n+190/2).attr("y1",i+a).attr("x2",n+190/2).attr("y2",i+a+(f?a:h)+u+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}n=n+200,f&&!s.timeline?.disableMulticolor&&r++}i=i-10},"drawTasks"),SHe=o(function(t,e,r,n,i,a){let s=0,l=i;i=i+100;for(let u of e){let h={descr:u,section:r,number:r,width:150,padding:20,maxHeight:50};Y.debug("eventNode",h);let f=t.append("g").attr("class","eventWrapper"),p=bf.drawNode(f,h,r,a).height;s=s+p,f.attr("transform",`translate(${n}, ${i})`),i=i+10+p}return i=l,s},"drawEvents"),gpe={setConf:o(()=>{},"setConf"),draw:EHe}});var CHe,AHe,vpe,xpe=N(()=>{"use strict";Ys();CHe=o(t=>{let e="";for(let r=0;r<t.THEME_COLOR_LIMIT;r++)t["lineColor"+r]=t["lineColor"+r]||t["cScaleInv"+r],ca(t["lineColor"+r])?t["lineColor"+r]=Dt(t["lineColor"+r],20):t["lineColor"+r]=Ot(t["lineColor"+r],20);for(let r=0;r<t.THEME_COLOR_LIMIT;r++){let n=""+(17-3*r);e+=`
1889 + .section-${r-1} rect, .section-${r-1} path, .section-${r-1} circle, .section-${r-1} path {
1890 + fill: ${t["cScale"+r]};
1891 + }
1892 + .section-${r-1} text {
1893 + fill: ${t["cScaleLabel"+r]};
1894 + }
1895 + .node-icon-${r-1} {
1896 + font-size: 40px;
1897 + color: ${t["cScaleLabel"+r]};
1898 + }
1899 + .section-edge-${r-1}{
1900 + stroke: ${t["cScale"+r]};
1901 + }
1902 + .edge-depth-${r-1}{
1903 + stroke-width: ${n};
1904 + }
1905 + .section-${r-1} line {
1906 + stroke: ${t["cScaleInv"+r]} ;
1907 + stroke-width: 3;
1908 + }
1909 +
1910 + .lineWrapper line{
1911 + stroke: ${t["cScaleLabel"+r]} ;
1912 + }
1913 +
1914 + .disabled, .disabled circle, .disabled text {
1915 + fill: lightgray;
1916 + }
1917 + .disabled text {
1918 + fill: #efefef;
1919 + }
1920 + `}return e},"genSections"),AHe=o(t=>`
1921 + .edge {
1922 + stroke-width: 3;
1923 + }
1924 + ${CHe(t)}
1925 + .section-root rect, .section-root path, .section-root circle {
1926 + fill: ${t.git0};
1927 + }
1928 + .section-root text {
1929 + fill: ${t.gitBranchLabel0};
1930 + }
1931 + .icon-container {
1932 + height:100%;
1933 + display: flex;
1934 + justify-content: center;
1935 + align-items: center;
1936 + }
1937 + .edge {
1938 + fill: none;
1939 + }
1940 + .eventWrapper {
1941 + filter: brightness(120%);
1942 + }
1943 +`,"getStyles"),vpe=AHe});var bpe={};hr(bpe,{diagram:()=>_He});var _He,wpe=N(()=>{"use strict";Zde();cpe();ype();xpe();_He={db:mP,renderer:gpe,parser:Qde,styles:vpe}});var yP,Epe,Spe=N(()=>{"use strict";yP=function(){var t=o(function(C,T,E,A){for(E=E||{},A=C.length;A--;E[C[A]]=T);return E},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,6,13,15,16,19,22],g=[1,33],y=[1,34],v=[1,6,7,11,13,15,16,19,22],x={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:o(function(T,E,A,S,_,I,D){var k=I.length-1;switch(_){case 6:case 7:return S;case 8:S.getLogger().trace("Stop NL ");break;case 9:S.getLogger().trace("Stop EOF ");break;case 11:S.getLogger().trace("Stop NL2 ");break;case 12:S.getLogger().trace("Stop EOF2 ");break;case 15:S.getLogger().info("Node: ",I[k].id),S.addNode(I[k-1].length,I[k].id,I[k].descr,I[k].type);break;case 16:S.getLogger().trace("Icon: ",I[k]),S.decorateNode({icon:I[k]});break;case 17:case 21:S.decorateNode({class:I[k]});break;case 18:S.getLogger().trace("SPACELIST");break;case 19:S.getLogger().trace("Node: ",I[k].id),S.addNode(0,I[k].id,I[k].descr,I[k].type);break;case 20:S.decorateNode({icon:I[k]});break;case 25:S.getLogger().trace("node found ..",I[k-2]),this.$={id:I[k-1],descr:I[k-1],type:S.getType(I[k-2],I[k])};break;case 26:this.$={id:I[k],descr:I[k],type:S.nodeType.DEFAULT};break;case 27:S.getLogger().trace("node found ..",I[k-3]),this.$={id:I[k-3],descr:I[k-1],type:S.getType(I[k-2],I[k])};break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:r,9:22,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:h,7:f,10:23,11:d},t(p,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:s,22:l}),t(p,[2,18]),t(p,[2,19]),t(p,[2,20]),t(p,[2,21]),t(p,[2,23]),t(p,[2,24]),t(p,[2,26],{19:[1,30]}),{20:[1,31]},{6:h,7:f,10:32,11:d},{1:[2,7],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(m,[2,14],{7:g,11:y}),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(p,[2,15]),t(p,[2,16]),t(p,[2,17]),{20:[1,35]},{21:[1,36]},t(m,[2,13],{7:g,11:y}),t(v,[2,11]),t(v,[2,12]),{21:[1,37]},t(p,[2,25]),t(p,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(T,E){if(E.recoverable)this.trace(T);else{var A=new Error(T);throw A.hash=E,A}},"parseError"),parse:o(function(T){var E=this,A=[0],S=[],_=[null],I=[],D=this.table,k="",L=0,R=0,O=0,M=2,B=1,F=I.slice.call(arguments,1),P=Object.create(this.lexer),z={yy:{}};for(var $ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$)&&(z.yy[$]=this.yy[$]);P.setInput(T,z.yy),z.yy.lexer=P,z.yy.parser=this,typeof P.yylloc>"u"&&(P.yylloc={});var H=P.yylloc;I.push(H);var Q=P.options&&P.options.ranges;typeof z.yy.parseError=="function"?this.parseError=z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function j(ae){A.length=A.length-2*ae,_.length=_.length-ae,I.length=I.length-ae}o(j,"popStack");function ie(){var ae;return ae=S.pop()||P.lex()||B,typeof ae!="number"&&(ae instanceof Array&&(S=ae,ae=S.pop()),ae=E.symbols_[ae]||ae),ae}o(ie,"lex");for(var ne,le,he,K,X,te,J={},se,ue,Z,Se;;){if(he=A[A.length-1],this.defaultActions[he]?K=this.defaultActions[he]:((ne===null||typeof ne>"u")&&(ne=ie()),K=D[he]&&D[he][ne]),typeof K>"u"||!K.length||!K[0]){var ce="";Se=[];for(se in D[he])this.terminals_[se]&&se>M&&Se.push("'"+this.terminals_[se]+"'");P.showPosition?ce="Parse error on line "+(L+1)+`:
1944 +`+P.showPosition()+`
1945 +Expecting `+Se.join(", ")+", got '"+(this.terminals_[ne]||ne)+"'":ce="Parse error on line "+(L+1)+": Unexpected "+(ne==B?"end of input":"'"+(this.terminals_[ne]||ne)+"'"),this.parseError(ce,{text:P.match,token:this.terminals_[ne]||ne,line:P.yylineno,loc:H,expected:Se})}if(K[0]instanceof Array&&K.length>1)throw new Error("Parse Error: multiple actions possible at state: "+he+", token: "+ne);switch(K[0]){case 1:A.push(ne),_.push(P.yytext),I.push(P.yylloc),A.push(K[1]),ne=null,le?(ne=le,le=null):(R=P.yyleng,k=P.yytext,L=P.yylineno,H=P.yylloc,O>0&&O--);break;case 2:if(ue=this.productions_[K[1]][1],J.$=_[_.length-ue],J._$={first_line:I[I.length-(ue||1)].first_line,last_line:I[I.length-1].last_line,first_column:I[I.length-(ue||1)].first_column,last_column:I[I.length-1].last_column},Q&&(J._$.range=[I[I.length-(ue||1)].range[0],I[I.length-1].range[1]]),te=this.performAction.apply(J,[k,R,L,z.yy,K[1],_,I].concat(F)),typeof te<"u")return te;ue&&(A=A.slice(0,-1*ue*2),_=_.slice(0,-1*ue),I=I.slice(0,-1*ue)),A.push(this.productions_[K[1]][0]),_.push(J.$),I.push(J._$),Z=D[A[A.length-2]][A[A.length-1]],A.push(Z);break;case 3:return!0}}return!0},"parse")},b=function(){var C={EOF:1,parseError:o(function(E,A){if(this.yy.parser)this.yy.parser.parseError(E,A);else throw new Error(E)},"parseError"),setInput:o(function(T,E){return this.yy=E||this.yy||{},this._input=T,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var T=this._input[0];this.yytext+=T,this.yyleng++,this.offset++,this.match+=T,this.matched+=T;var E=T.match(/(?:\r\n?|\n).*/g);return E?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),T},"input"),unput:o(function(T){var E=T.length,A=T.split(/(?:\r\n?|\n)/g);this._input=T+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-E),this.offset-=E;var S=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),A.length-1&&(this.yylineno-=A.length-1);var _=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:A?(A.length===S.length?this.yylloc.first_column:0)+S[S.length-A.length].length-A[0].length:this.yylloc.first_column-E},this.options.ranges&&(this.yylloc.range=[_[0],_[0]+this.yyleng-E]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
1946 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(T){this.unput(this.match.slice(T))},"less"),pastInput:o(function(){var T=this.matched.substr(0,this.matched.length-this.match.length);return(T.length>20?"...":"")+T.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var T=this.match;return T.length<20&&(T+=this._input.substr(0,20-T.length)),(T.substr(0,20)+(T.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var T=this.pastInput(),E=new Array(T.length+1).join("-");return T+this.upcomingInput()+`
1947 +`+E+"^"},"showPosition"),test_match:o(function(T,E){var A,S,_;if(this.options.backtrack_lexer&&(_={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(_.yylloc.range=this.yylloc.range.slice(0))),S=T[0].match(/(?:\r\n?|\n).*/g),S&&(this.yylineno+=S.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:S?S[S.length-1].length-S[S.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+T[0].length},this.yytext+=T[0],this.match+=T[0],this.matches=T,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(T[0].length),this.matched+=T[0],A=this.performAction.call(this,this.yy,this,E,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),A)return A;if(this._backtrack){for(var I in _)this[I]=_[I];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var T,E,A,S;this._more||(this.yytext="",this.match="");for(var _=this._currentRules(),I=0;I<_.length;I++)if(A=this._input.match(this.rules[_[I]]),A&&(!E||A[0].length>E[0].length)){if(E=A,S=I,this.options.backtrack_lexer){if(T=this.test_match(A,_[I]),T!==!1)return T;if(this._backtrack){E=!1;continue}else return!1}else if(!this.options.flex)break}return E?(T=this.test_match(E,_[S]),T!==!1?T:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
1948 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var E=this.next();return E||this.lex()},"lex"),begin:o(function(E){this.conditionStack.push(E)},"begin"),popState:o(function(){var E=this.conditionStack.length-1;return E>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(E){return E=this.conditionStack.length-1-Math.abs(E||0),E>=0?this.conditionStack[E]:"INITIAL"},"topState"),pushState:o(function(E){this.begin(E)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(E,A,S,_){var I=_;switch(S){case 0:return E.getLogger().trace("Found comment",A.yytext),6;break;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;break;case 4:this.popState();break;case 5:E.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return E.getLogger().trace("SPACELINE"),6;break;case 7:return 7;case 8:return 15;case 9:E.getLogger().trace("end icon"),this.popState();break;case 10:return E.getLogger().trace("Exploding node"),this.begin("NODE"),19;break;case 11:return E.getLogger().trace("Cloud"),this.begin("NODE"),19;break;case 12:return E.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;break;case 13:return E.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;break;case 14:return this.begin("NODE"),19;break;case 15:return this.begin("NODE"),19;break;case 16:return this.begin("NODE"),19;break;case 17:return this.begin("NODE"),19;break;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:E.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return E.getLogger().trace("description:",A.yytext),"NODE_DESCR";break;case 26:this.popState();break;case 27:return this.popState(),E.getLogger().trace("node end ))"),"NODE_DEND";break;case 28:return this.popState(),E.getLogger().trace("node end )"),"NODE_DEND";break;case 29:return this.popState(),E.getLogger().trace("node end ...",A.yytext),"NODE_DEND";break;case 30:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 31:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 32:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 33:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 34:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 35:return E.getLogger().trace("Long description:",A.yytext),20;break;case 36:return E.getLogger().trace("Long description:",A.yytext),20;break}},"anonymous"),rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return C}();x.lexer=b;function w(){this.yy={}}return o(w,"Parser"),w.prototype=x,x.Parser=w,new w}();yP.parser=yP;Epe=yP});var $l,Cpe,vP,NHe,MHe,IHe,OHe,Vi,PHe,BHe,FHe,$He,zHe,GHe,VHe,Ape,_pe=N(()=>{"use strict";zt();gr();vt();Ya();$l=[],Cpe=0,vP={},NHe=o(()=>{$l=[],Cpe=0,vP={}},"clear"),MHe=o(function(t){for(let e=$l.length-1;e>=0;e--)if($l[e].level<t)return $l[e];return null},"getParent"),IHe=o(()=>$l.length>0?$l[0]:null,"getMindmap"),OHe=o((t,e,r,n)=>{Y.info("addNode",t,e,r,n);let i=me(),a=i.mindmap?.padding??or.mindmap.padding;switch(n){case Vi.ROUNDED_RECT:case Vi.RECT:case Vi.HEXAGON:a*=2}let s={id:Cpe++,nodeId:Tr(e,i),level:t,descr:Tr(r,i),type:n,children:[],width:i.mindmap?.maxNodeWidth??or.mindmap.maxNodeWidth,padding:a},l=MHe(t);if(l)l.children.push(s),$l.push(s);else if($l.length===0)$l.push(s);else throw new Error('There can be only one root. No parent could be found for ("'+s.descr+'")')},"addNode"),Vi={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},PHe=o((t,e)=>{switch(Y.debug("In get type",t,e),t){case"[":return Vi.RECT;case"(":return e===")"?Vi.ROUNDED_RECT:Vi.CLOUD;case"((":return Vi.CIRCLE;case")":return Vi.CLOUD;case"))":return Vi.BANG;case"{{":return Vi.HEXAGON;default:return Vi.DEFAULT}},"getType"),BHe=o((t,e)=>{vP[t]=e},"setElementForId"),FHe=o(t=>{if(!t)return;let e=me(),r=$l[$l.length-1];t.icon&&(r.icon=Tr(t.icon,e)),t.class&&(r.class=Tr(t.class,e))},"decorateNode"),$He=o(t=>{switch(t){case Vi.DEFAULT:return"no-border";case Vi.RECT:return"rect";case Vi.ROUNDED_RECT:return"rounded-rect";case Vi.CIRCLE:return"circle";case Vi.CLOUD:return"cloud";case Vi.BANG:return"bang";case Vi.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),zHe=o(()=>Y,"getLogger"),GHe=o(t=>vP[t],"getElementById"),VHe={clear:NHe,addNode:OHe,getMindmap:IHe,nodeType:Vi,getType:PHe,setElementForId:BHe,decorateNode:FHe,type2Str:$He,getLogger:zHe,getElementById:GHe},Ape=VHe});function Wi(t){"@babel/helpers - typeof";return Wi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Wi(t)}function Mf(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Dpe(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function If(t,e,r){return e&&Dpe(t.prototype,e),r&&Dpe(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}function X0e(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function _i(t,e){return HHe(t)||qHe(t,e)||ZP(t,e)||XHe()}function j0e(t){return UHe(t)||WHe(t)||ZP(t)||YHe()}function UHe(t){if(Array.isArray(t))return OP(t)}function HHe(t){if(Array.isArray(t))return t}function WHe(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function qHe(t,e){var r=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(r!=null){var n=[],i=!0,a=!1,s,l;try{for(r=r.call(t);!(i=(s=r.next()).done)&&(n.push(s.value),!(e&&n.length===e));i=!0);}catch(u){a=!0,l=u}finally{try{!i&&r.return!=null&&r.return()}finally{if(a)throw l}}return n}}function ZP(t,e){if(t){if(typeof t=="string")return OP(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return OP(t,e)}}function OP(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function YHe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
1949 +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function XHe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
1950 +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function mo(t,e){var r=typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=ZP(t))||e&&t&&typeof t.length=="number"){r&&(t=r);var n=0,i=o(function(){},"F");return{s:i,n:o(function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},"n"),e:o(function(u){throw u},"e"),f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
1951 +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a=!0,s=!1,l;return{s:o(function(){r=r.call(t)},"s"),n:o(function(){var u=r.next();return a=u.done,u},"n"),e:o(function(u){s=!0,l=u},"e"),f:o(function(){try{!a&&r.return!=null&&r.return()}finally{if(s)throw l}},"f")}}function yWe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}function vWe(t,e){return e={exports:{}},t(e,e.exports),e.exports}function SWe(t){for(var e=t.length;e--&&EWe.test(t.charAt(e)););return e}function _We(t){return t&&t.slice(0,CWe(t)+1).replace(AWe,"")}function MWe(t){var e=RWe.call(t,Ab),r=t[Ab];try{t[Ab]=void 0;var n=!0}catch{}var i=NWe.call(t);return n&&(e?t[Ab]=r:delete t[Ab]),i}function BWe(t){return PWe.call(t)}function GWe(t){return t==null?t===void 0?zWe:$We:Npe&&Npe in Object(t)?IWe(t):FWe(t)}function VWe(t){return t!=null&&typeof t=="object"}function WWe(t){return typeof t=="symbol"||UWe(t)&&ame(t)==HWe}function KWe(t){if(typeof t=="number")return t;if(r4(t))return Mpe;if(zp(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=zp(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=DWe(t);var r=YWe.test(t);return r||XWe.test(t)?jWe(t.slice(2),r?2:8):qWe.test(t)?Mpe:+t}function eqe(t,e,r){var n,i,a,s,l,u,h=0,f=!1,d=!1,p=!0;if(typeof t!="function")throw new TypeError(QWe);e=Ipe(e)||0,zp(r)&&(f=!!r.leading,d="maxWait"in r,a=d?ZWe(Ipe(r.maxWait)||0,e):a,p="trailing"in r?!!r.trailing:p);function m(E){var A=n,S=i;return n=i=void 0,h=E,s=t.apply(S,A),s}o(m,"invokeFunc");function g(E){return h=E,l=setTimeout(x,e),f?m(E):s}o(g,"leadingEdge");function y(E){var A=E-u,S=E-h,_=e-A;return d?JWe(_,a-S):_}o(y,"remainingWait");function v(E){var A=E-u,S=E-h;return u===void 0||A>=e||A<0||d&&S>=a}o(v,"shouldInvoke");function x(){var E=xP();if(v(E))return b(E);l=setTimeout(x,y(E))}o(x,"timerExpired");function b(E){return l=void 0,p&&n?m(E):(n=i=void 0,s)}o(b,"trailingEdge");function w(){l!==void 0&&clearTimeout(l),h=0,n=u=i=l=void 0}o(w,"cancel");function C(){return l===void 0?s:b(xP())}o(C,"flush");function T(){var E=xP(),A=v(E);if(n=arguments,i=this,u=E,A){if(l===void 0)return g(u);if(d)return clearTimeout(l),l=setTimeout(x,e),m(u)}return l===void 0&&(l=setTimeout(x,e)),s}return o(T,"debounced"),T.cancel=w,T.flush=C,T}function IS(t,e,r,n,i,a){var s;return si(t)?s=t:s=Q1[t]||Q1.euclidean,e===0&&si(t)?s(i,a):s(e,r,n,i,a)}function qYe(t,e){if(OS(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||r4(t)?!0:WYe.test(t)||!HYe.test(t)||e!=null&&t in Object(e)}function ZYe(t){if(!zp(t))return!1;var e=ame(t);return e==jYe||e==KYe||e==XYe||e==QYe}function tXe(t){return!!e0e&&e0e in t}function aXe(t){if(t!=null){try{return iXe.call(t)}catch{}try{return t+""}catch{}}return""}function pXe(t){if(!zp(t)||rXe(t))return!1;var e=JYe(t)?dXe:lXe;return e.test(sXe(t))}function gXe(t,e){return t?.[e]}function vXe(t,e){var r=yXe(t,e);return mXe(r)?r:void 0}function bXe(){this.__data__=jb?jb(null):{},this.size=0}function TXe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}function AXe(t){var e=this.__data__;if(jb){var r=e[t];return r===EXe?void 0:r}return CXe.call(e,t)?e[t]:void 0}function RXe(t){var e=this.__data__;return jb?e[t]!==void 0:LXe.call(e,t)}function IXe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=jb&&e===void 0?MXe:e,this}function ty(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function PXe(){this.__data__=[],this.size=0}function FXe(t,e){return t===e||t!==t&&e!==e}function $Xe(t,e){for(var r=t.length;r--;)if(Lme(t[r][0],e))return r;return-1}function VXe(t){var e=this.__data__,r=PS(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():GXe.call(e,r,1),--this.size,!0}function HXe(t){var e=this.__data__,r=PS(e,t);return r<0?void 0:e[r][1]}function qXe(t){return PS(this.__data__,t)>-1}function XXe(t,e){var r=this.__data__,n=PS(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}function ry(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function JXe(){this.size=0,this.__data__={hash:new t0e,map:new(ZXe||KXe),string:new t0e}}function tje(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}function nje(t,e){var r=t.__data__;return rje(e)?r[typeof e=="string"?"string":"hash"]:r.map}function ije(t){var e=BS(this,t).delete(t);return this.size-=e?1:0,e}function sje(t){return BS(this,t).get(t)}function lje(t){return BS(this,t).has(t)}function uje(t,e){var r=BS(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}function ny(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function cB(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(fje);var r=o(function(){var n=arguments,i=e?e.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var s=t.apply(this,n);return r.cache=a.set(i,s)||a,s},"memoized");return r.cache=new(cB.Cache||Rme),r}function mje(t){var e=dje(t,function(n){return r.size===pje&&r.clear(),n}),r=e.cache;return e}function bje(t,e){for(var r=-1,n=t==null?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}function Ime(t){if(typeof t=="string")return t;if(OS(t))return Mme(t,Ime)+"";if(r4(t))return n0e?n0e.call(t):"";var e=t+"";return e=="0"&&1/t==-wje?"-0":e}function kje(t){return t==null?"":Tje(t)}function Eje(t,e){return OS(t)?t:YYe(t,e)?[t]:Nme(Ome(t))}function Cje(t){if(typeof t=="string"||r4(t))return t;var e=t+"";return e=="0"&&1/t==-Sje?"-0":e}function Aje(t,e){e=Pme(e,t);for(var r=0,n=e.length;t!=null&&r<n;)t=t[uB(e[r++])];return r&&r==n?t:void 0}function Dje(t,e,r){var n=t==null?void 0:_je(t,e);return n===void 0?r:n}function Nje(t,e,r){e=="__proto__"&&i0e?i0e(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}function Pje(t,e,r){var n=t[e];(!(Oje.call(t,e)&&Lme(n,r))||r===void 0&&!(e in t))&&Mje(t,e,r)}function zje(t,e){var r=typeof t;return e=e??Fje,!!e&&(r=="number"||r!="symbol"&&$je.test(t))&&t>-1&&t%1==0&&t<e}function Vje(t,e,r,n){if(!zp(t))return t;e=Pme(e,t);for(var i=-1,a=e.length,s=a-1,l=t;l!=null&&++i<a;){var u=uB(e[i]),h=r;if(u==="__proto__"||u==="constructor"||u==="prototype")return t;if(i!=s){var f=l[u];h=n?n(f,u,l):void 0,h===void 0&&(h=zp(f)?f:Gje(e[i+1])?[]:{})}Bje(l,u,h),l=l[u]}return t}function Hje(t,e,r){return t==null?t:Uje(t,e,r)}function qje(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}function Xje(t){return OS(t)?Mme(t,uB):r4(t)?[t]:Yje(Nme(Ome(t)))}function fB(t,e,r,n){for(var i=[],a=new J1,s=t.cy(),l=s.hasCompoundNodes(),u=0;u<t.length;u++){var h=t[u];r?i.push(h):l&&n(i,a,h)}for(;i.length>0;){var f=i.shift();e(f),a.add(f.id()),l&&n(i,a,f)}return t}function Fme(t,e,r){if(r.isParent())for(var n=r._private.children,i=0;i<n.length;i++){var a=n[i];e.has(a.id())||t.push(a)}}function $me(t,e,r){if(r.isChild()){var n=r._private.parent;e.has(n.id())||t.push(n)}}function dKe(t,e,r){$me(t,e,r),Fme(t,e,r)}function SP(t){return function(e){var r=this;if(e===void 0&&(e=!0),r.length!==0)if(r.isNode()&&!r.removed()){for(var n=0,i=r[0],a=i._private.edges,s=0;s<a.length;s++){var l=a[s];!e&&l.isLoop()||(n+=t(i,l))}return n}else return}}function F1(t,e){return function(r){for(var n,i=this.nodes(),a=0;a<i.length;a++){var s=i[a],l=s[t](r);l!==void 0&&(n===void 0||e(l,n))&&(n=l)}return n}}function Lb(){return!1}function rS(){return!0}function $S(){for(var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:NKe,e=arguments.length>1?arguments[1]:void 0,r=0;r<u0e.length;r++){var n=u0e[r];this[n]=t[n]||Xme[n]}this.context=e||this.context,this.listeners=[],this.emitting=0}function Jme(t,e,r){var n=r._private,i=n.styleCache=n.styleCache||[],a;return(a=i[t])!=null||(a=i[t]=e(r)),a}function zS(t,e){return t=_f(t),o(function(n){return Jme(t,e,n)},"cachedStyleFunction")}function GS(t,e){t=_f(t);var r=o(function(i){return e.call(i)},"selfFn");return o(function(){var i=this[0];if(i)return Jme(t,r,i)},"cachedPrototypeStyleFunction")}function AP(t,e){var r=t._private,n=r.data.parent?t.parents():null;if(n)for(var i=0;i<n.length;i++){var a=n[i];if(!e(a))return!1}return!0}function dB(t){var e=t.ok,r=t.edgeOkViaNode||t.ok,n=t.parentOk||t.ok;return function(){var i=this.cy();if(!i.styleEnabled())return!0;var a=this[0],s=i.hasCompoundNodes();if(a){var l=a._private;if(!e(a))return!1;if(a.isNode())return!s||AP(a,n);var u=l.source,h=l.target;return r(u)&&(!s||AP(u,r))&&(u===h||r(h)&&(!s||AP(h,r)))}}}function f0e(t){return function(){var e=arguments,r=[];if(e.length===2){var n=e[0],i=e[1];this.on(t.event,n,i)}else if(e.length===1&&si(e[0])){var a=e[0];this.on(t.event,a)}else if(e.length===0||e.length===1&&En(e[0])){for(var s=e.length===1?e[0]:null,l=0;l<this.length;l++){var u=this[l],h=!t.ableField||u._private[t.ableField],f=u._private[t.field]!=t.value;if(t.overrideAble){var d=t.overrideAble(u);if(d!==void 0&&(h=d,!d))return this}h&&(u._private[t.field]=t.value,f&&r.push(u))}var p=this.spawn(r);p.updateStyle(),p.emit(t.event),s&&p.emit(s)}return this}}function ay(t){Cf[t.field]=function(){var e=this[0];if(e){if(t.overrideField){var r=t.overrideField(e);if(r!==void 0)return r}return e._private[t.field]}},Cf[t.on]=f0e({event:t.on,field:t.field,ableField:t.ableField,overrideAble:t.overrideAble,value:!0}),Cf[t.off]=f0e({event:t.off,field:t.field,ableField:t.ableField,overrideAble:t.overrideAble,value:!1})}function g0e(t){return o(function(r){for(var n=[],i=0;i<this.length;i++){var a=this[i],s=a._private[t.attr];s&&n.push(s)}return this.spawn(n,!0).filter(r)},"sourceImpl")}function y0e(t){return o(function(r){var n=[],i=this._private.cy,a=t||{};Zt(r)&&(r=i.$(r));for(var s=0;s<r.length;s++)for(var l=r[s]._private.edges,u=0;u<l.length;u++){var h=l[u],f=h._private.data,d=this.hasElementWithId(f.source)&&r.hasElementWithId(f.target),p=r.hasElementWithId(f.source)&&this.hasElementWithId(f.target),m=d||p;m&&((a.thisIsSrc||a.thisIsTgt)&&(a.thisIsSrc&&!d||a.thisIsTgt&&!p)||n.push(h))}return this.spawn(n,!0)},"edgesWithImpl")}function v0e(t){var e={codirected:!1};return t=rr({},e,t),o(function(n){for(var i=[],a=this.edges(),s=t,l=0;l<a.length;l++)for(var u=a[l],h=u._private,f=h.source,d=f._private.data.id,p=h.data.target,m=f._private.edges,g=0;g<m.length;g++){var y=m[g],v=y._private.data,x=v.target,b=v.source,w=x===p&&b===d,C=d===x&&p===b;(s.codirected&&w||!s.codirected&&(w||C))&&i.push(y)}return this.spawn(i,!0).filter(n)},"parallelEdgesImpl")}function UKe(t,e,r,n){var i=4,a=.001,s=1e-7,l=10,u=11,h=1/(u-1),f=typeof Float32Array<"u";if(arguments.length!==4)return!1;for(var d=0;d<4;++d)if(typeof arguments[d]!="number"||isNaN(arguments[d])||!isFinite(arguments[d]))return!1;t=Math.min(t,1),r=Math.min(r,1),t=Math.max(t,0),r=Math.max(r,0);var p=f?new Float32Array(u):new Array(u);function m(I,D){return 1-3*D+3*I}o(m,"A");function g(I,D){return 3*D-6*I}o(g,"B");function y(I){return 3*I}o(y,"C");function v(I,D,k){return((m(D,k)*I+g(D,k))*I+y(D))*I}o(v,"calcBezier");function x(I,D,k){return 3*m(D,k)*I*I+2*g(D,k)*I+y(D)}o(x,"getSlope");function b(I,D){for(var k=0;k<i;++k){var L=x(D,t,r);if(L===0)return D;var R=v(D,t,r)-I;D-=R/L}return D}o(b,"newtonRaphsonIterate");function w(){for(var I=0;I<u;++I)p[I]=v(I*h,t,r)}o(w,"calcSampleValues");function C(I,D,k){var L,R,O=0;do R=D+(k-D)/2,L=v(R,t,r)-I,L>0?k=R:D=R;while(Math.abs(L)>s&&++O<l);return R}o(C,"binarySubdivide");function T(I){for(var D=0,k=1,L=u-1;k!==L&&p[k]<=I;++k)D+=h;--k;var R=(I-p[k])/(p[k+1]-p[k]),O=D+R*h,M=x(O,t,r);return M>=a?b(I,O):M===0?O:C(I,D,D+h)}o(T,"getTForX");var E=!1;function A(){E=!0,(t!==e||r!==n)&&w()}o(A,"precompute");var S=o(function(D){return E||A(),t===e&&r===n?D:D===0?0:D===1?1:v(T(D),e,n)},"f");S.getControlPoints=function(){return[{x:t,y:e},{x:r,y:n}]};var _="generateBezier("+[t,e,r,n]+")";return S.toString=function(){return _},S}function x0e(t,e,r,n,i){if(n===1||e===r)return r;var a=i(e,r,n);return t==null||((t.roundValue||t.color)&&(a=Math.round(a)),t.min!==void 0&&(a=Math.max(a,t.min)),t.max!==void 0&&(a=Math.min(a,t.max))),a}function b0e(t,e){return t.pfValue!=null||t.value!=null?t.pfValue!=null&&(e==null||e.type.units!=="%")?t.pfValue:t.value:t}function $1(t,e,r,n,i){var a=i!=null?i.type:null;r<0?r=0:r>1&&(r=1);var s=b0e(t,i),l=b0e(e,i);if(Ct(s)&&Ct(l))return x0e(a,s,l,r,n);if(En(s)&&En(l)){for(var u=[],h=0;h<l.length;h++){var f=s[h],d=l[h];if(f!=null&&d!=null){var p=x0e(a,f,d,r,n);u.push(p)}else u.push(d)}return u}}function WKe(t,e,r,n){var i=!n,a=t._private,s=e._private,l=s.easing,u=s.startTime,h=n?t:t.cy(),f=h.style();if(!s.easingImpl)if(l==null)s.easingImpl=dS.linear;else{var d;if(Zt(l)){var p=f.parse("transition-timing-function",l);d=p.value}else d=l;var m,g;Zt(d)?(m=d,g=[]):(m=d[1],g=d.slice(2).map(function(P){return+P})),g.length>0?(m==="spring"&&g.push(s.duration),s.easingImpl=dS[m].apply(null,g)):s.easingImpl=dS[m]}var y=s.easingImpl,v;if(s.duration===0?v=1:v=(r-u)/s.duration,s.applying&&(v=s.progress),v<0?v=0:v>1&&(v=1),s.delay==null){var x=s.startPosition,b=s.position;if(b&&i&&!t.locked()){var w={};Rb(x.x,b.x)&&(w.x=$1(x.x,b.x,v,y)),Rb(x.y,b.y)&&(w.y=$1(x.y,b.y,v,y)),t.position(w)}var C=s.startPan,T=s.pan,E=a.pan,A=T!=null&&n;A&&(Rb(C.x,T.x)&&(E.x=$1(C.x,T.x,v,y)),Rb(C.y,T.y)&&(E.y=$1(C.y,T.y,v,y)),t.emit("pan"));var S=s.startZoom,_=s.zoom,I=_!=null&&n;I&&(Rb(S,_)&&(a.zoom=Yb(a.minZoom,$1(S,_,v,y),a.maxZoom)),t.emit("zoom")),(A||I)&&t.emit("viewport");var D=s.style;if(D&&D.length>0&&i){for(var k=0;k<D.length;k++){var L=D[k],R=L.name,O=L,M=s.startStyle[R],B=f.properties[M.name],F=$1(M,O,v,y,B);f.overrideBypass(t,R,F)}t.emit("style")}}return s.progress=v,v}function Rb(t,e){return t==null||e==null?!1:Ct(t)&&Ct(e)?!0:!!(t&&e)}function qKe(t,e,r,n){var i=e._private;i.started=!0,i.startTime=r-i.progress*i.duration}function w0e(t,e){var r=e._private.aniEles,n=[];function i(f,d){var p=f._private,m=p.animation.current,g=p.animation.queue,y=!1;if(m.length===0){var v=g.shift();v&&m.push(v)}for(var x=o(function(E){for(var A=E.length-1;A>=0;A--){var S=E[A];S()}E.splice(0,E.length)},"callbacks"),b=m.length-1;b>=0;b--){var w=m[b],C=w._private;if(C.stopped){m.splice(b,1),C.hooked=!1,C.playing=!1,C.started=!1,x(C.frames);continue}!C.playing&&!C.applying||(C.playing&&C.applying&&(C.applying=!1),C.started||qKe(f,w,t),WKe(f,w,t,d),C.applying&&(C.applying=!1),x(C.frames),C.step!=null&&C.step(t),w.completed()&&(m.splice(b,1),C.hooked=!1,C.playing=!1,C.started=!1,x(C.completes)),y=!0)}return!d&&m.length===0&&g.length===0&&n.push(f),y}o(i,"stepOne");for(var a=!1,s=0;s<r.length;s++){var l=r[s],u=i(l);a=a||u}var h=i(e,!0);(a||h)&&(r.length>0?e.notify("draw",r):e.notify("draw")),r.unmerge(n),e.emit("step")}function tge(t){this.options=rr({},eQe,tQe,t)}function rge(t){this.options=rr({},rQe,t)}function nge(t){this.options=rr({},nQe,t)}function HS(t){this.options=rr({},iQe,t),this.options.layout=this;var e=this.options.eles.nodes(),r=this.options.eles.edges(),n=r.filter(function(i){var a=i.source().data("id"),s=i.target().data("id"),l=e.some(function(h){return h.data("id")===a}),u=e.some(function(h){return h.data("id")===s});return!l||!u});this.options.eles=this.options.eles.not(n)}function age(t){this.options=rr({},wQe,t)}function gB(t){this.options=rr({},TQe,t)}function sge(t){this.options=rr({},kQe,t)}function oge(t){this.options=rr({},EQe,t)}function lge(t){this.options=t,this.notifications=0}function hge(t,e){e.radius===0?t.lineTo(e.cx,e.cy):t.arc(e.cx,e.cy,e.radius,e.startAngle,e.endAngle,e.counterClockwise)}function vB(t,e,r,n){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0;return n===0||e.radius===0?{cx:e.x,cy:e.y,radius:0,startX:e.x,startY:e.y,stopX:e.x,stopY:e.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(AQe(t,e,r,n,i),{cx:HP,cy:WP,radius:Bp,startX:cge,startY:uge,stopX:qP,stopY:YP,startAngle:qc.ang+Math.PI/2*Fp,endAngle:Jo.ang-Math.PI/2*Fp,counterClockwise:gS})}function fge(t){var e=[];if(t!=null){for(var r=0;r<t.length;r+=2){var n=t[r],i=t[r+1];e.push({x:n,y:i})}return e}}function _Qe(t,e,r){for(var n=o(function(h,f,d,p){return oa(h,f,d,p)},"qbezierAt$1"),i=e._private,a=i.rstyle.bezierPts,s=0;s<t.bezierProjPcts.length;s++){var l=t.bezierProjPcts[s];a.push({x:n(r[0],r[2],r[4],l),y:n(r[1],r[3],r[5],l)})}}function iZe(t,e){for(var r=0;r<e.length;r++){var n=e[r];t.lineTo(n.x,n.y)}}function aZe(t,e,r){for(var n,i=0;i<e.length;i++){var a=e[i];i===0&&(n=a),t.lineTo(a.x,a.y)}t.quadraticCurveTo(r.x,r.y,n.x,n.y)}function $0e(t,e,r){t.beginPath&&t.beginPath();for(var n=e,i=0;i<n.length;i++){var a=n[i];t.lineTo(a.x,a.y)}var s=r,l=r[0];t.moveTo(l.x,l.y);for(var i=1;i<s.length;i++){var a=s[i];t.lineTo(a.x,a.y)}t.closePath&&t.closePath()}function sZe(t,e,r,n,i){t.beginPath&&t.beginPath(),t.arc(r,n,i,0,Math.PI*2,!1);var a=e,s=a[0];t.moveTo(s.x,s.y);for(var l=0;l<a.length;l++){var u=a[l];t.lineTo(u.x,u.y)}t.closePath&&t.closePath()}function oZe(t,e,r,n){t.arc(e,r,n,0,Math.PI*2,!1)}function RP(t,e,r,n,i){var a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:5,s=arguments.length>6?arguments[6]:void 0;t.beginPath(),t.moveTo(e+a,r),t.lineTo(e+n-a,r),t.quadraticCurveTo(e+n,r,e+n,r+a),t.lineTo(e+n,r+i-a),t.quadraticCurveTo(e+n,r+i,e+n-a,r+i),t.lineTo(e+a,r+i),t.quadraticCurveTo(e,r+i,e,r+i-a),t.lineTo(e,r+a),t.quadraticCurveTo(e,r,e+a,r),t.closePath(),s?t.stroke():t.fill()}function z0e(t,e,r){var n=t.createShader(e);if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw new Error(t.getShaderInfoLog(n));return n}function pZe(t,e,r){var n=z0e(t,t.VERTEX_SHADER,e),i=z0e(t,t.FRAGMENT_SHADER,r),a=t.createProgram();if(t.attachShader(a,n),t.attachShader(a,i),t.linkProgram(a),!t.getProgramParameter(a,t.LINK_STATUS))throw new Error("Could not initialize shaders");return a}function mZe(t,e,r){r===void 0&&(r=e);var n=t.makeOffscreenCanvas(e,r),i=n.context=n.getContext("2d");return n.clear=function(){return i.clearRect(0,0,n.width,n.height)},n.clear(),n}function wB(t){var e=t.pixelRatio,r=t.cy.zoom(),n=t.cy.pan();return{zoom:r*e,pan:{x:n.x*e,y:n.y*e}}}function NP(t,e,r,n,i){var a=n*r+e.x,s=i*r+e.y;return s=Math.round(t.canvasHeight-s),[a,s]}function oS(t,e,r){var n=t[0]/255,i=t[1]/255,a=t[2]/255,s=e,l=r||new Array(4);return l[0]=n*s,l[1]=i*s,l[2]=a*s,l[3]=s,l}function lS(t,e){var r=e||new Array(4);return r[0]=(t>>0&255)/255,r[1]=(t>>8&255)/255,r[2]=(t>>16&255)/255,r[3]=(t>>24&255)/255,r}function gZe(t){return t[0]+(t[1]<<8)+(t[2]<<16)+(t[3]<<24)}function yZe(t,e){var r=t.createTexture();return r.buffer=function(n){t.bindTexture(t.TEXTURE_2D,r),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_NEAREST),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n),t.generateMipmap(t.TEXTURE_2D),t.bindTexture(t.TEXTURE_2D,null)},r.deleteTexture=function(){t.deleteTexture(r)},r}function Sge(t,e){switch(e){case"float":return[1,t.FLOAT,4];case"vec2":return[2,t.FLOAT,4];case"vec3":return[3,t.FLOAT,4];case"vec4":return[4,t.FLOAT,4];case"int":return[1,t.INT,4];case"ivec2":return[2,t.INT,4]}}function Cge(t,e,r){switch(e){case t.FLOAT:return new Float32Array(r);case t.INT:return new Int32Array(r)}}function vZe(t,e,r,n,i,a){switch(e){case t.FLOAT:return new Float32Array(r.buffer,a*n,i);case t.INT:return new Int32Array(r.buffer,a*n,i)}}function xZe(t,e,r,n){var i=Sge(t,e),a=_i(i,2),s=a[0],l=a[1],u=Cge(t,l,n),h=t.createBuffer();return t.bindBuffer(t.ARRAY_BUFFER,h),t.bufferData(t.ARRAY_BUFFER,u,t.STATIC_DRAW),l===t.FLOAT?t.vertexAttribPointer(r,s,l,!1,0,0):l===t.INT&&t.vertexAttribIPointer(r,s,l,0,0),t.enableVertexAttribArray(r),t.bindBuffer(t.ARRAY_BUFFER,null),h}function po(t,e,r,n){var i=Sge(t,r),a=_i(i,3),s=a[0],l=a[1],u=a[2],h=Cge(t,l,e*s),f=s*u,d=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,d),t.bufferData(t.ARRAY_BUFFER,e*f,t.DYNAMIC_DRAW),t.enableVertexAttribArray(n),l===t.FLOAT?t.vertexAttribPointer(n,s,l,!1,f,0):l===t.INT&&t.vertexAttribIPointer(n,s,l,f,0),t.vertexAttribDivisor(n,1),t.bindBuffer(t.ARRAY_BUFFER,null);for(var p=new Array(e),m=0;m<e;m++)p[m]=vZe(t,l,h,f,s,m);return d.dataArray=h,d.stride=f,d.size=s,d.getView=function(g){return p[g]},d.setPoint=function(g,y,v){var x=p[g];x[0]=y,x[1]=v},d.bufferSubData=function(g){t.bindBuffer(t.ARRAY_BUFFER,d),g?t.bufferSubData(t.ARRAY_BUFFER,0,h,0,g*s):t.bufferSubData(t.ARRAY_BUFFER,0,h)},d}function bZe(t){var e=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,e);var r=t.createTexture();return t.bindTexture(t.TEXTURE_2D,r),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,r,0),t.bindFramebuffer(t.FRAMEBUFFER,null),e.setFramebufferAttachmentSizes=function(n,i){t.bindTexture(t.TEXTURE_2D,r),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,n,i,0,t.RGBA,t.UNSIGNED_BYTE,null)},e}function Gb(){var t=new G0e(9);return G0e!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t}function Age(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t}function wZe(t,e,r){var n=e[0],i=e[1],a=e[2],s=e[3],l=e[4],u=e[5],h=e[6],f=e[7],d=e[8],p=r[0],m=r[1],g=r[2],y=r[3],v=r[4],x=r[5],b=r[6],w=r[7],C=r[8];return t[0]=p*n+m*s+g*h,t[1]=p*i+m*l+g*f,t[2]=p*a+m*u+g*d,t[3]=y*n+v*s+x*h,t[4]=y*i+v*l+x*f,t[5]=y*a+v*u+x*d,t[6]=b*n+w*s+C*h,t[7]=b*i+w*l+C*f,t[8]=b*a+w*u+C*d,t}function DS(t,e,r){var n=e[0],i=e[1],a=e[2],s=e[3],l=e[4],u=e[5],h=e[6],f=e[7],d=e[8],p=r[0],m=r[1];return t[0]=n,t[1]=i,t[2]=a,t[3]=s,t[4]=l,t[5]=u,t[6]=p*n+m*s+h,t[7]=p*i+m*l+f,t[8]=p*a+m*u+d,t}function _ge(t,e,r){var n=e[0],i=e[1],a=e[2],s=e[3],l=e[4],u=e[5],h=e[6],f=e[7],d=e[8],p=Math.sin(r),m=Math.cos(r);return t[0]=m*n+p*s,t[1]=m*i+p*l,t[2]=m*a+p*u,t[3]=m*s-p*n,t[4]=m*l-p*i,t[5]=m*u-p*a,t[6]=h,t[7]=f,t[8]=d,t}function TB(t,e,r){var n=r[0],i=r[1];return t[0]=n*e[0],t[1]=n*e[1],t[2]=n*e[2],t[3]=i*e[3],t[4]=i*e[4],t[5]=i*e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t}function TZe(t,e,r){return t[0]=2/e,t[1]=0,t[2]=0,t[3]=0,t[4]=-2/r,t[5]=0,t[6]=-1,t[7]=1,t[8]=1,t}function SZe(t,e){return t.intersection?t.intersection(e):new Set(j0e(t).filter(function(r){return e.has(r)}))}function H0e(t,e){return"rgba(".concat(t[0],", ").concat(t[1],", ").concat(t[2],", ").concat(e,")")}function DZe(t){var e=t&&t.style&&t.style.backgroundColor||"white";return tme(e)}function LZe(t){{var e=t.render;t.render=function(a){a=a||{};var s=t.cy;t.webgl&&(s.zoom()>bge?(RZe(t),e.call(t,a)):(NZe(t),Rge(t,a,Vb.SCREEN)))}}{var r=t.matchCanvasSize;t.matchCanvasSize=function(a){r.call(t,a),t.pickingFrameBuffer.setFramebufferAttachmentSizes(t.canvasWidth,t.canvasHeight),t.pickingFrameBuffer.needsDraw=!0}}t.findNearestElements=function(a,s,l,u){return FZe(t,a,s)};{var n=t.invalidateCachedZSortedEles;t.invalidateCachedZSortedEles=function(){n.call(t),t.pickingFrameBuffer.needsDraw=!0}}{var i=t.notify;t.notify=function(a,s){i.call(t,a,s),a==="viewport"||a==="bounds"?t.pickingFrameBuffer.needsDraw=!0:a==="background"&&t.eleDrawing.invalidate(s,{type:"node-body"})}}}function RZe(t){var e=t.data.contexts[t.WEBGL];e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}function NZe(t){var e=o(function(n){n.save(),n.setTransform(1,0,0,1,0,0),n.clearRect(0,0,t.canvasWidth,t.canvasHeight),n.restore()},"clear");e(t.data.contexts[t.NODE]),e(t.data.contexts[t.DRAG])}function MZe(t){var e=t.canvasWidth,r=t.canvasHeight,n=wB(t),i=n.pan,a=n.zoom,s=Gb();DS(s,s,[i.x,i.y]),TB(s,s,[a,a]);var l=Gb();TZe(l,e,r);var u=Gb();return wZe(u,l,s),u}function Lge(t,e){var r=t.canvasWidth,n=t.canvasHeight,i=wB(t),a=i.pan,s=i.zoom;e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,r,n),e.translate(a.x,a.y),e.scale(s,s)}function IZe(t,e){t.drawSelectionRectangle(e,function(r){return Lge(t,r)})}function OZe(t){var e=t.data.contexts[t.NODE];e.save(),Lge(t,e),e.strokeStyle="rgba(0, 0, 0, 0.3)",e.beginPath(),e.moveTo(-1e3,0),e.lineTo(1e3,0),e.stroke(),e.beginPath(),e.moveTo(0,-1e3),e.lineTo(0,1e3),e.stroke(),e.restore()}function PZe(t){var e=o(function(i,a,s){for(var l=i.atlasManager.getRenderTypeOpts(a),u=t.data.contexts[t.NODE],h=.125,f=l.atlasCollection.atlases,d=0;d<f.length;d++){var p=f[d],m=p.canvas,g=m.width,y=m.height,v=g*d,x=m.height*s;u.save(),u.scale(h,h),u.drawImage(m,v,x),u.strokeStyle="black",u.rect(v,x,g,y),u.stroke(),u.restore()}},"draw"),r=0;e(t.eleDrawing,"node-body",r++),e(t.eleDrawing,"node-label",r++)}function BZe(t,e,r,n,i){var a,s,l,u,h=wB(t),f=h.pan,d=h.zoom;if(n===void 0||i===void 0){var p=NP(t,f,d,e,r),m=_i(p,2),g=m[0],y=m[1],v=6;a=g-v/2,s=y-v/2,l=v,u=v}else{var x=NP(t,f,d,e,r),b=_i(x,2),w=b[0],C=b[1],T=NP(t,f,d,n,i),E=_i(T,2),A=E[0],S=E[1];a=w,s=S,l=Math.abs(A-w),u=Math.abs(S-C)}if(l===0||u===0)return[];var _=t.data.contexts[t.WEBGL];_.bindFramebuffer(_.FRAMEBUFFER,t.pickingFrameBuffer),t.pickingFrameBuffer.needsDraw&&(_.viewport(0,0,_.canvas.width,_.canvas.height),Rge(t,null,Vb.PICKING),t.pickingFrameBuffer.needsDraw=!1);var I=l*u,D=new Uint8Array(I*4);_.readPixels(a,s,l,u,_.RGBA,_.UNSIGNED_BYTE,D),_.bindFramebuffer(_.FRAMEBUFFER,null);for(var k=new Set,L=0;L<I;L++){var R=D.slice(L*4,L*4+4),O=gZe(R)-1;O>=0&&k.add(O)}return k}function FZe(t,e,r){var n=BZe(t,e,r),i=t.getCachedZSortedEles(),a,s,l=mo(n),u;try{for(l.s();!(u=l.n()).done;){var h=u.value,f=i[h];if(!a&&f.isNode()&&(a=f),!s&&f.isEdge()&&(s=f),a&&s)break}}catch(d){l.e(d)}finally{l.f()}return[a,s].filter(Boolean)}function Rge(t,e,r){var n,i;t.webglDebug&&(i=[],n=performance.now());var a=t.eleDrawing,s=0;if(r.screen&&t.data.canvasNeedsRedraw[t.SELECT_BOX]&&IZe(t,e),t.data.canvasNeedsRedraw[t.NODE]||r.picking){var l=o(function(k,L){L+=1,k.isNode()?(a.drawTexture(k,L,"node-underlay"),a.drawTexture(k,L,"node-body"),a.drawTexture(k,L,"node-label"),a.drawTexture(k,L,"node-overlay")):(a.drawEdgeLine(k,L),a.drawEdgeArrow(k,L,"source"),a.drawEdgeArrow(k,L,"target"),a.drawTexture(k,L,"edge-label"))},"draw"),u=t.data.contexts[t.WEBGL];r.screen?(u.clearColor(0,0,0,0),u.enable(u.BLEND),u.blendFunc(u.ONE,u.ONE_MINUS_SRC_ALPHA)):u.disable(u.BLEND),u.clear(u.COLOR_BUFFER_BIT|u.DEPTH_BUFFER_BIT),u.viewport(0,0,u.canvas.width,u.canvas.height);var h=MZe(t),f=t.getCachedZSortedEles();if(s=f.length,a.startFrame(h,i,r),r.screen){for(var d=0;d<f.nondrag.length;d++)l(f.nondrag[d],d);for(var p=0;p<f.drag.length;p++)l(f.drag[p],-1)}else if(r.picking)for(var m=0;m<f.length;m++)l(f[m],m);a.endFrame(),t.data.gc&&(console.log("Garbage Collect!"),t.data.gc=!1,a.gc()),r.screen&&t.webglDebugShowAtlases&&(OZe(t),PZe(t)),t.data.canvasNeedsRedraw[t.NODE]=!1,t.data.canvasNeedsRedraw[t.DRAG]=!1}if(t.webglDebug){var g=performance.now(),y=!0,v=0,x=0,b=mo(i),w;try{for(b.s();!(w=b.n()).done;){var C=w.value;v++,x+=C.count}}catch(D){b.e(D)}finally{b.f()}var T=Math.ceil(g-n),E="".concat(s," elements, ").concat(x," rectangles, ").concat(v," batches");if(y)console.log("WebGL (".concat(r.name,") - ").concat(E));else{console.log("WebGL render (".concat(r.name,") - frame time ").concat(T,"ms")),console.log(" ".concat(E)),console.log("Texture Atlases Used:");var A=a.getAtlasDebugInfo(),S=mo(A),_;try{for(S.s();!(_=S.n()).done;){var I=_.value;console.log(" ".concat(I.type,": ").concat(I.keyCount," keys, ").concat(I.atlasCount," atlases"))}}catch(D){S.e(D)}finally{S.f()}console.log("")}}}function $Ze(t,e){for(var r=atob(t),n=new ArrayBuffer(r.length),i=new Uint8Array(n),a=0;a<r.length;a++)i[a]=r.charCodeAt(a);return new Blob([n],{type:e})}function Y0e(t){var e=t.indexOf(",");return t.substr(e+1)}function Mge(t,e,r){var n=o(function(){return e.toDataURL(r,t.quality)},"getB64Uri");switch(t.output){case"blob-promise":return new ey(function(i,a){try{e.toBlob(function(s){s!=null?i(s):a(new Error("`canvas.toBlob()` sent a null value in its callback"))},r,t.quality)}catch(s){a(s)}});case"blob":return $Ze(Y0e(n()),r);case"base64":return Y0e(n());case"base64uri":default:return n()}}function Oge(t){var e=this,r=e.cy.window(),n=r.document;t.webgl&&(Er.CANVAS_LAYERS=e.CANVAS_LAYERS=4,console.log("webgl rendering enabled")),e.data={canvases:new Array(Er.CANVAS_LAYERS),contexts:new Array(Er.CANVAS_LAYERS),canvasNeedsRedraw:new Array(Er.CANVAS_LAYERS),bufferCanvases:new Array(Er.BUFFER_COUNT),bufferContexts:new Array(Er.CANVAS_LAYERS)};var i="-webkit-tap-highlight-color",a="rgba(0,0,0,0)";e.data.canvasContainer=n.createElement("div");var s=e.data.canvasContainer.style;e.data.canvasContainer.style[i]=a,s.position="relative",s.zIndex="0",s.overflow="hidden";var l=t.cy.container();l.appendChild(e.data.canvasContainer),l.style[i]=a;var u={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};iWe()&&(u["-ms-touch-action"]="none",u["touch-action"]="none");for(var h=0;h<Er.CANVAS_LAYERS;h++){var f=e.data.canvases[h]=n.createElement("canvas"),d=Er.CANVAS_TYPES[h];e.data.contexts[h]=f.getContext(d),e.data.contexts[h]||ai("Could not create canvas of type "+d),Object.keys(u).forEach(function(K){f.style[K]=u[K]}),f.style.position="absolute",f.setAttribute("data-id","layer"+h),f.style.zIndex=String(Er.CANVAS_LAYERS-h),e.data.canvasContainer.appendChild(f),e.data.canvasNeedsRedraw[h]=!1}e.data.topCanvas=e.data.canvases[0],e.data.canvases[Er.NODE].setAttribute("data-id","layer"+Er.NODE+"-node"),e.data.canvases[Er.SELECT_BOX].setAttribute("data-id","layer"+Er.SELECT_BOX+"-selectbox"),e.data.canvases[Er.DRAG].setAttribute("data-id","layer"+Er.DRAG+"-drag"),e.data.canvases[Er.WEBGL]&&e.data.canvases[Er.WEBGL].setAttribute("data-id","layer"+Er.WEBGL+"-webgl");for(var h=0;h<Er.BUFFER_COUNT;h++)e.data.bufferCanvases[h]=n.createElement("canvas"),e.data.bufferContexts[h]=e.data.bufferCanvases[h].getContext("2d"),e.data.bufferCanvases[h].style.position="absolute",e.data.bufferCanvases[h].setAttribute("data-id","buffer"+h),e.data.bufferCanvases[h].style.zIndex=String(-h-1),e.data.bufferCanvases[h].style.visibility="hidden";e.pathsEnabled=!0;var p=Hs(),m=o(function(X){return{x:(X.x1+X.x2)/2,y:(X.y1+X.y2)/2}},"getBoxCenter"),g=o(function(X){return{x:-X.w/2,y:-X.h/2}},"getCenterOffset"),y=o(function(X){var te=X[0]._private,J=te.oldBackgroundTimestamp===te.backgroundTimestamp;return!J},"backgroundTimestampHasChanged"),v=o(function(X){return X[0]._private.nodeKey},"getStyleKey"),x=o(function(X){return X[0]._private.labelStyleKey},"getLabelKey"),b=o(function(X){return X[0]._private.sourceLabelStyleKey},"getSourceLabelKey"),w=o(function(X){return X[0]._private.targetLabelStyleKey},"getTargetLabelKey"),C=o(function(X,te,J,se,ue){return e.drawElement(X,te,J,!1,!1,ue)},"drawElement"),T=o(function(X,te,J,se,ue){return e.drawElementText(X,te,J,se,"main",ue)},"drawLabel"),E=o(function(X,te,J,se,ue){return e.drawElementText(X,te,J,se,"source",ue)},"drawSourceLabel"),A=o(function(X,te,J,se,ue){return e.drawElementText(X,te,J,se,"target",ue)},"drawTargetLabel"),S=o(function(X){return X.boundingBox(),X[0]._private.bodyBounds},"getElementBox"),_=o(function(X){return X.boundingBox(),X[0]._private.labelBounds.main||p},"getLabelBox"),I=o(function(X){return X.boundingBox(),X[0]._private.labelBounds.source||p},"getSourceLabelBox"),D=o(function(X){return X.boundingBox(),X[0]._private.labelBounds.target||p},"getTargetLabelBox"),k=o(function(X,te){return te},"isLabelVisibleAtScale"),L=o(function(X){return m(S(X))},"getElementRotationPoint"),R=o(function(X,te,J){var se=X?X+"-":"";return{x:te.x+J.pstyle(se+"text-margin-x").pfValue,y:te.y+J.pstyle(se+"text-margin-y").pfValue}},"addTextMargin"),O=o(function(X,te,J){var se=X[0]._private.rscratch;return{x:se[te],y:se[J]}},"getRsPt"),M=o(function(X){return R("",O(X,"labelX","labelY"),X)},"getLabelRotationPoint"),B=o(function(X){return R("source",O(X,"sourceLabelX","sourceLabelY"),X)},"getSourceLabelRotationPoint"),F=o(function(X){return R("target",O(X,"targetLabelX","targetLabelY"),X)},"getTargetLabelRotationPoint"),P=o(function(X){return g(S(X))},"getElementRotationOffset"),z=o(function(X){return g(I(X))},"getSourceLabelRotationOffset"),$=o(function(X){return g(D(X))},"getTargetLabelRotationOffset"),H=o(function(X){var te=_(X),J=g(_(X));if(X.isNode()){switch(X.pstyle("text-halign").value){case"left":J.x=-te.w-(te.leftPad||0);break;case"right":J.x=-(te.rightPad||0);break}switch(X.pstyle("text-valign").value){case"top":J.y=-te.h-(te.topPad||0);break;case"bottom":J.y=-(te.botPad||0);break}}return J},"getLabelRotationOffset"),Q=e.data.eleTxrCache=new Fb(e,{getKey:v,doesEleInvalidateKey:y,drawElement:C,getBoundingBox:S,getRotationPoint:L,getRotationOffset:P,allowEdgeTxrCaching:!1,allowParentTxrCaching:!1}),j=e.data.lblTxrCache=new Fb(e,{getKey:x,drawElement:T,getBoundingBox:_,getRotationPoint:M,getRotationOffset:H,isVisible:k}),ie=e.data.slbTxrCache=new Fb(e,{getKey:b,drawElement:E,getBoundingBox:I,getRotationPoint:B,getRotationOffset:z,isVisible:k}),ne=e.data.tlbTxrCache=new Fb(e,{getKey:w,drawElement:A,getBoundingBox:D,getRotationPoint:F,getRotationOffset:$,isVisible:k}),le=e.data.lyrTxrCache=new wge(e);e.onUpdateEleCalcs(o(function(X,te){Q.invalidateElements(te),j.invalidateElements(te),ie.invalidateElements(te),ne.invalidateElements(te),le.invalidateElements(te);for(var J=0;J<te.length;J++){var se=te[J]._private;se.oldBackgroundTimestamp=se.backgroundTimestamp}},"invalidateTextureCaches"));var he=o(function(X){for(var te=0;te<X.length;te++)le.enqueueElementRefinement(X[te].ele)},"refineInLayers");Q.onDequeue(he),j.onDequeue(he),ie.onDequeue(he),ne.onDequeue(he),t.webgl&&e.initWebgl(t,{getStyleKey:v,getLabelKey:x,drawElement:C,drawLabel:T,getElementBox:S,getLabelBox:_,getElementRotationPoint:L,getElementRotationOffset:P,getLabelRotationPoint:M,getLabelRotationOffset:H})}function Fge(t,e,r){var n=r,i=o(function(S){un("Can not register `"+e+"` for `"+t+"` since `"+S+"` already exists in the prototype and can not be overridden")},"overrideErr");if(t==="core"){if(Jb.prototype[e])return i(e);Jb.prototype[e]=r}else if(t==="collection"){if(ka.prototype[e])return i(e);ka.prototype[e]=r}else if(t==="layout"){for(var a=o(function(S){this.options=S,r.call(this,S),Ur(this._private)||(this._private={}),this._private.cy=S.cy,this._private.listeners=[],this.createEmitter()},"Layout"),s=a.prototype=Object.create(r.prototype),l=[],u=0;u<l.length;u++){var h=l[u];s[h]=s[h]||function(){return this}}s.start&&!s.run?s.run=function(){return this.start(),this}:!s.start&&s.run&&(s.start=function(){return this.run(),this});var f=r.prototype.stop;s.stop=function(){var A=this.options;if(A&&A.animate){var S=this.animations;if(S)for(var _=0;_<S.length;_++)S[_].stop()}return f?f.call(this):this.emit("layoutstop"),this},s.destroy||(s.destroy=function(){return this}),s.cy=function(){return this._private.cy};var d=o(function(S){return S._private.cy},"getCy"),p={addEventFields:o(function(S,_){_.layout=S,_.cy=d(S),_.target=S},"addEventFields"),bubble:o(function(){return!0},"bubble"),parent:o(function(S){return d(S)},"parent")};rr(s,{createEmitter:o(function(){return this._private.emitter=new $S(p,this),this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(S,_){return this.emitter().on(S,_),this},"on"),one:o(function(S,_){return this.emitter().one(S,_),this},"one"),once:o(function(S,_){return this.emitter().one(S,_),this},"once"),removeListener:o(function(S,_){return this.emitter().removeListener(S,_),this},"removeListener"),removeAllListeners:o(function(){return this.emitter().removeAllListeners(),this},"removeAllListeners"),emit:o(function(S,_){return this.emitter().emit(S,_),this},"emit")}),cn.eventAliasesOn(s),n=a}else if(t==="renderer"&&e!=="null"&&e!=="base"){var m=$ge("renderer","base"),g=m.prototype,y=r,v=r.prototype,x=o(function(){m.apply(this,arguments),y.apply(this,arguments)},"Renderer"),b=x.prototype;for(var w in g){var C=g[w],T=v[w]!=null;if(T)return i(w);b[w]=C}for(var E in v)b[E]=v[E];g.clientFunctions.forEach(function(A){b[A]=b[A]||function(){ai("Renderer does not implement `renderer."+A+"()` on its prototype")}}),n=x}else if(t==="__proto__"||t==="constructor"||t==="prototype")return ai(t+" is an illegal type to be registered, possibly lead to prototype pollutions");return rme({map:Pge,keys:[t,e],value:n})}function $ge(t,e){return nme({map:Pge,keys:[t,e]})}function HZe(t,e,r,n,i){return rme({map:Bge,keys:[t,e,r,n],value:i})}function WZe(t,e,r,n){return nme({map:Bge,keys:[t,e,r,n]})}var Ui,Lpe,jHe,K0e,KHe,QHe,e4,Zt,si,En,Ur,ZHe,Ct,JHe,vS,go,t4,Q0e,JP,Z0e,eWe,Af,tWe,rWe,nWe,iWe,Ub,eB,LS,J0e,Rpe,Hi,aWe,sWe,oWe,lWe,cWe,uWe,eme,hWe,rr,fWe,dWe,pWe,mWe,tme,gWe,rme,nme,zp,Ib,xWe,bWe,wWe,TWe,RS,kWe,xP,EWe,CWe,AWe,DWe,LWe,j1,ime,RWe,NWe,Ab,IWe,OWe,PWe,FWe,$We,zWe,Npe,ame,UWe,HWe,r4,Mpe,qWe,YWe,XWe,jWe,Ipe,QWe,ZWe,JWe,n4,bP,sme,tqe,xS,Qu,V1,ome,Ob,lme,Hb,Wb,rqe,wf,j6,nqe,_f,cme,iqe,Ope,aqe,sqe,tB,ume,bS,Ppe,rB,ai,hme,un,oqe,Yc,lqe,fme,cqe,dme,la,Df,nB,uqe,Gl,kf,hqe,Xc,fqe,dqe,J1,NS,Bpe,qb,pqe,i4,mqe,gqe,yqe,vqe,xqe,bqe,wqe,Tqe,kqe,Eqe,Sqe,wP,Cqe,Aqe,MS,pme,U1,_qe,Dqe,Lqe,Rqe,Nqe,K6,iB,mme,Gp,Op,Mqe,oa,W1,Iqe,Yb,Hs,Oqe,Pqe,Bqe,gme,Fqe,cS,uS,Fpe,aB,K1,$qe,yme,vme,zqe,Gqe,Vqe,Uqe,Hqe,Wqe,Us,Zu,qqe,wS,TS,Yqe,$p,Pb,TP,Ef,Xb,Xqe,Q6,gs,xme,PP,Vp,bme,sB,jqe,BP,Kqe,Qqe,$pe,q1,zpe,Y1,Zqe,FP,Jqe,eYe,tYe,rYe,wme,nYe,iYe,aYe,sYe,oYe,lYe,cYe,Gpe,uYe,hYe,Tme,Vpe,Upe,fYe,dYe,_b,Q1,pYe,oB,kS,kP,kme,Eme,mYe,gYe,yYe,Hpe,Wpe,vYe,xYe,bYe,wYe,TYe,qpe,kYe,EYe,SYe,CYe,Ype,Z6,AYe,_Ye,Xpe,DYe,LYe,RYe,NYe,MYe,IYe,jpe,OYe,Kpe,PYe,BYe,FYe,J6,$Ye,eS,zYe,Sme,Cme,Ame,_me,Ju,Qpe,Dme,Zpe,Jpe,GYe,ey,$P,Up,VYe,UYe,OS,HYe,WYe,YYe,XYe,jYe,KYe,QYe,JYe,eXe,EP,e0e,rXe,nXe,iXe,sXe,oXe,lXe,cXe,uXe,hXe,fXe,dXe,mXe,yXe,lB,xXe,jb,wXe,kXe,EXe,SXe,CXe,_Xe,DXe,LXe,NXe,MXe,OXe,t0e,BXe,Lme,PS,zXe,GXe,UXe,WXe,YXe,jXe,KXe,QXe,ZXe,eje,rje,BS,aje,oje,cje,hje,Rme,fje,dje,pje,gje,yje,vje,xje,Nme,Mme,wje,r0e,n0e,Tje,Ome,Pme,Sje,uB,_je,Lje,Rje,i0e,Mje,Ije,Oje,Bje,Fje,$je,Gje,Uje,Wje,Yje,jje,Kje,Qje,cn,Zje,hS,Vr,mn,$t,zP,Jje,eKe,tKe,B1,Tf,GP,rKe,nKe,iKe,aKe,sKe,Bme,oKe,lKe,hB,cKe,fi,zn,uKe,hKe,fKe,Lf,Rf,Sf,tl,Z1,Kb,zme,pKe,FS,Vl,Gme,Vme,a0e,mKe,X1,Of,el,zl,Pp,Db,tS,CP,gKe,yKe,Ume,Hme,s0e,Qb,o0e,l0e,vKe,Bb,a4,Wme,xKe,bKe,wKe,TKe,kKe,EKe,SKe,CKe,AKe,c0e,_Ke,DKe,LKe,qme,Yme,RKe,Xme,u0e,NKe,Nf,jme,h0e,MKe,IKe,nS,Kme,Qme,Qr,OKe,Zme,ES,PKe,BKe,fS,Ta,iy,FKe,$Ke,zKe,GKe,Cf,$a,d0e,p0e,m0e,ka,Mn,VKe,HKe,Nn,dS,YKe,XKe,iS,ege,VP,pS,jKe,KKe,UP,mS,Ga,$b,QKe,s4,pB,jc,VS,mB,wa,US,Fa,za,ZKe,JKe,Hp,Zb,Jb,SS,eQe,tQe,z1,T0e,rQe,nQe,_P,iQe,aQe,sQe,oQe,lQe,cQe,ige,uQe,hQe,fQe,k0e,dQe,pQe,CS,mQe,gQe,yQe,vQe,xQe,bQe,E0e,wQe,TQe,kQe,EQe,SQe,S0e,C0e,yB,qp,AS,HP,WP,qc,Jo,A0e,_0e,Fp,gS,Ku,Mp,Bp,Wc,G1,aS,cge,uge,qP,YP,D0e,L0e,CQe,AQe,Va,o4,xB,Kc,dge,pge,DQe,mge,R0e,N0e,WS,qS,gge,yge,sy,eh,l4,M0e,LQe,vge,oy,DP,xge,RQe,I0e,sS,yS,XP,bge,NQe,MQe,IQe,OQe,PQe,BQe,FQe,$Qe,zQe,GQe,VQe,UQe,HQe,H1,WQe,Fb,qi,qQe,zb,_S,YQe,XQe,jQe,KQe,QQe,ZQe,JQe,eZe,O0e,tZe,P0e,rZe,wge,Ea,B0e,nZe,Tge,F0e,Qc,lZe,cZe,uZe,hZe,fZe,LP,th,kge,bB,Yp,ly,Ege,ys,dZe,Nb,G0e,Vb,Mb,kZe,EZe,CZe,MP,V0e,U0e,IP,AZe,_Ze,Dge,Pf,W0e,q0e,jP,KP,Nge,Ip,c4,Ige,zZe,Er,GZe,VZe,UZe,Pge,Bge,QP,zge,Wp,qZe,rl,kB=N(()=>{"use strict";o(Wi,"_typeof");o(Mf,"_classCallCheck");o(Dpe,"_defineProperties");o(If,"_createClass");o(X0e,"_defineProperty$1");o(_i,"_slicedToArray");o(j0e,"_toConsumableArray");o(UHe,"_arrayWithoutHoles");o(HHe,"_arrayWithHoles");o(WHe,"_iterableToArray");o(qHe,"_iterableToArrayLimit");o(ZP,"_unsupportedIterableToArray");o(OP,"_arrayLikeToArray");o(YHe,"_nonIterableSpread");o(XHe,"_nonIterableRest");o(mo,"_createForOfIteratorHelper");Ui=typeof window>"u"?null:window,Lpe=Ui?Ui.navigator:null;Ui&&Ui.document;jHe=Wi(""),K0e=Wi({}),KHe=Wi(function(){}),QHe=typeof HTMLElement>"u"?"undefined":Wi(HTMLElement),e4=o(function(e){return e&&e.instanceString&&si(e.instanceString)?e.instanceString():null},"instanceStr"),Zt=o(function(e){return e!=null&&Wi(e)==jHe},"string"),si=o(function(e){return e!=null&&Wi(e)===KHe},"fn"),En=o(function(e){return!go(e)&&(Array.isArray?Array.isArray(e):e!=null&&e instanceof Array)},"array"),Ur=o(function(e){return e!=null&&Wi(e)===K0e&&!En(e)&&e.constructor===Object},"plainObject"),ZHe=o(function(e){return e!=null&&Wi(e)===K0e},"object"),Ct=o(function(e){return e!=null&&Wi(e)===Wi(1)&&!isNaN(e)},"number"),JHe=o(function(e){return Ct(e)&&Math.floor(e)===e},"integer"),vS=o(function(e){if(QHe!=="undefined")return e!=null&&e instanceof HTMLElement},"htmlElement"),go=o(function(e){return t4(e)||Q0e(e)},"elementOrCollection"),t4=o(function(e){return e4(e)==="collection"&&e._private.single},"element"),Q0e=o(function(e){return e4(e)==="collection"&&!e._private.single},"collection"),JP=o(function(e){return e4(e)==="core"},"core"),Z0e=o(function(e){return e4(e)==="stylesheet"},"stylesheet"),eWe=o(function(e){return e4(e)==="event"},"event"),Af=o(function(e){return e==null?!0:!!(e===""||e.match(/^\s+$/))},"emptyString"),tWe=o(function(e){return typeof HTMLElement>"u"?!1:e instanceof HTMLElement},"domElement"),rWe=o(function(e){return Ur(e)&&Ct(e.x1)&&Ct(e.x2)&&Ct(e.y1)&&Ct(e.y2)},"boundingBox"),nWe=o(function(e){return ZHe(e)&&si(e.then)},"promise"),iWe=o(function(){return Lpe&&Lpe.userAgent.match(/msie|trident|edge/i)},"ms"),Ub=o(function(e,r){r||(r=o(function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var a=[],s=0;s<arguments.length;s++)a.push(arguments[s]);return a.join("$")},"keyFn"));var n=o(function i(){var a=this,s=arguments,l,u=r.apply(a,s),h=i.cache;return(l=h[u])||(l=h[u]=e.apply(a,s)),l},"memoizedFn");return n.cache={},n},"memoize"),eB=Ub(function(t){return t.replace(/([A-Z])/g,function(e){return"-"+e.toLowerCase()})}),LS=Ub(function(t){return t.replace(/(-\w)/g,function(e){return e[1].toUpperCase()})}),J0e=Ub(function(t,e){return t+e[0].toUpperCase()+e.substring(1)},function(t,e){return t+"$"+e}),Rpe=o(function(e){return Af(e)?e:e.charAt(0).toUpperCase()+e.substring(1)},"capitalize"),Hi="(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))",aWe="rgb[a]?\\(("+Hi+"[%]?)\\s*,\\s*("+Hi+"[%]?)\\s*,\\s*("+Hi+"[%]?)(?:\\s*,\\s*("+Hi+"))?\\)",sWe="rgb[a]?\\((?:"+Hi+"[%]?)\\s*,\\s*(?:"+Hi+"[%]?)\\s*,\\s*(?:"+Hi+"[%]?)(?:\\s*,\\s*(?:"+Hi+"))?\\)",oWe="hsl[a]?\\(("+Hi+")\\s*,\\s*("+Hi+"[%])\\s*,\\s*("+Hi+"[%])(?:\\s*,\\s*("+Hi+"))?\\)",lWe="hsl[a]?\\((?:"+Hi+")\\s*,\\s*(?:"+Hi+"[%])\\s*,\\s*(?:"+Hi+"[%])(?:\\s*,\\s*(?:"+Hi+"))?\\)",cWe="\\#[0-9a-fA-F]{3}",uWe="\\#[0-9a-fA-F]{6}",eme=o(function(e,r){return e<r?-1:e>r?1:0},"ascending"),hWe=o(function(e,r){return-1*eme(e,r)},"descending"),rr=Object.assign!=null?Object.assign.bind(Object):function(t){for(var e=arguments,r=1;r<e.length;r++){var n=e[r];if(n!=null)for(var i=Object.keys(n),a=0;a<i.length;a++){var s=i[a];t[s]=n[s]}}return t},fWe=o(function(e){if(!(!(e.length===4||e.length===7)||e[0]!=="#")){var r=e.length===4,n,i,a,s=16;return r?(n=parseInt(e[1]+e[1],s),i=parseInt(e[2]+e[2],s),a=parseInt(e[3]+e[3],s)):(n=parseInt(e[1]+e[2],s),i=parseInt(e[3]+e[4],s),a=parseInt(e[5]+e[6],s)),[n,i,a]}},"hex2tuple"),dWe=o(function(e){var r,n,i,a,s,l,u,h;function f(g,y,v){return v<0&&(v+=1),v>1&&(v-=1),v<1/6?g+(y-g)*6*v:v<1/2?y:v<2/3?g+(y-g)*(2/3-v)*6:g}o(f,"hue2rgb");var d=new RegExp("^"+oWe+"$").exec(e);if(d){if(n=parseInt(d[1]),n<0?n=(360- -1*n%360)%360:n>360&&(n=n%360),n/=360,i=parseFloat(d[2]),i<0||i>100||(i=i/100,a=parseFloat(d[3]),a<0||a>100)||(a=a/100,s=d[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(i===0)l=u=h=Math.round(a*255);else{var p=a<.5?a*(1+i):a+i-a*i,m=2*a-p;l=Math.round(255*f(m,p,n+1/3)),u=Math.round(255*f(m,p,n)),h=Math.round(255*f(m,p,n-1/3))}r=[l,u,h,s]}return r},"hsl2tuple"),pWe=o(function(e){var r,n=new RegExp("^"+aWe+"$").exec(e);if(n){r=[];for(var i=[],a=1;a<=3;a++){var s=n[a];if(s[s.length-1]==="%"&&(i[a]=!0),s=parseFloat(s),i[a]&&(s=s/100*255),s<0||s>255)return;r.push(Math.floor(s))}var l=i[1]||i[2]||i[3],u=i[1]&&i[2]&&i[3];if(l&&!u)return;var h=n[4];if(h!==void 0){if(h=parseFloat(h),h<0||h>1)return;r.push(h)}}return r},"rgb2tuple"),mWe=o(function(e){return gWe[e.toLowerCase()]},"colorname2tuple"),tme=o(function(e){return(En(e)?e:null)||mWe(e)||fWe(e)||pWe(e)||dWe(e)},"color2tuple"),gWe={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},rme=o(function(e){for(var r=e.map,n=e.keys,i=n.length,a=0;a<i;a++){var s=n[a];if(Ur(s))throw Error("Tried to set map with object key");a<n.length-1?(r[s]==null&&(r[s]={}),r=r[s]):r[s]=e.value}},"setMap"),nme=o(function(e){for(var r=e.map,n=e.keys,i=n.length,a=0;a<i;a++){var s=n[a];if(Ur(s))throw Error("Tried to get map with object key");if(r=r[s],r==null)return r}return r},"getMap");o(yWe,"isObject");zp=yWe,Ib=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};o(vWe,"createCommonjsModule");xWe=typeof Ib=="object"&&Ib&&Ib.Object===Object&&Ib,bWe=xWe,wWe=typeof self=="object"&&self&&self.Object===Object&&self,TWe=bWe||wWe||Function("return this")(),RS=TWe,kWe=o(function(){return RS.Date.now()},"now"),xP=kWe,EWe=/\s/;o(SWe,"trimmedEndIndex");CWe=SWe,AWe=/^\s+/;o(_We,"baseTrim");DWe=_We,LWe=RS.Symbol,j1=LWe,ime=Object.prototype,RWe=ime.hasOwnProperty,NWe=ime.toString,Ab=j1?j1.toStringTag:void 0;o(MWe,"getRawTag");IWe=MWe,OWe=Object.prototype,PWe=OWe.toString;o(BWe,"objectToString");FWe=BWe,$We="[object Null]",zWe="[object Undefined]",Npe=j1?j1.toStringTag:void 0;o(GWe,"baseGetTag");ame=GWe;o(VWe,"isObjectLike");UWe=VWe,HWe="[object Symbol]";o(WWe,"isSymbol");r4=WWe,Mpe=NaN,qWe=/^[-+]0x[0-9a-f]+$/i,YWe=/^0b[01]+$/i,XWe=/^0o[0-7]+$/i,jWe=parseInt;o(KWe,"toNumber");Ipe=KWe,QWe="Expected a function",ZWe=Math.max,JWe=Math.min;o(eqe,"debounce");n4=eqe,bP=Ui?Ui.performance:null,sme=bP&&bP.now?function(){return bP.now()}:function(){return Date.now()},tqe=function(){if(Ui){if(Ui.requestAnimationFrame)return function(t){Ui.requestAnimationFrame(t)};if(Ui.mozRequestAnimationFrame)return function(t){Ui.mozRequestAnimationFrame(t)};if(Ui.webkitRequestAnimationFrame)return function(t){Ui.webkitRequestAnimationFrame(t)};if(Ui.msRequestAnimationFrame)return function(t){Ui.msRequestAnimationFrame(t)}}return function(t){t&&setTimeout(function(){t(sme())},1e3/60)}}(),xS=o(function(e){return tqe(e)},"requestAnimationFrame"),Qu=sme,V1=9261,ome=65599,Ob=5381,lme=o(function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:V1,n=r,i;i=e.next(),!i.done;)n=n*ome+i.value|0;return n},"hashIterableInts"),Hb=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:V1;return r*ome+e|0},"hashInt"),Wb=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Ob;return(r<<5)+r+e|0},"hashIntAlt"),rqe=o(function(e,r){return e*2097152+r},"combineHashes"),wf=o(function(e){return e[0]*2097152+e[1]},"combineHashesArray"),j6=o(function(e,r){return[Hb(e[0],r[0]),Wb(e[1],r[1])]},"hashArrays"),nqe=o(function(e,r){var n={value:0,done:!1},i=0,a=e.length,s={next:o(function(){return i<a?n.value=e[i++]:n.done=!0,n},"next")};return lme(s,r)},"hashIntsArray"),_f=o(function(e,r){var n={value:0,done:!1},i=0,a=e.length,s={next:o(function(){return i<a?n.value=e.charCodeAt(i++):n.done=!0,n},"next")};return lme(s,r)},"hashString"),cme=o(function(){return iqe(arguments)},"hashStrings"),iqe=o(function(e){for(var r,n=0;n<e.length;n++){var i=e[n];n===0?r=_f(i):r=_f(i,r)}return r},"hashStringsArray"),Ope=!0,aqe=console.warn!=null,sqe=console.trace!=null,tB=Number.MAX_SAFE_INTEGER||9007199254740991,ume=o(function(){return!0},"trueify"),bS=o(function(){return!1},"falsify"),Ppe=o(function(){return 0},"zeroify"),rB=o(function(){},"noop"),ai=o(function(e){throw new Error(e)},"error"),hme=o(function(e){if(e!==void 0)Ope=!!e;else return Ope},"warnings"),un=o(function(e){hme()&&(aqe?console.warn(e):(console.log(e),sqe&&console.trace()))},"warn"),oqe=o(function(e){return rr({},e)},"clone"),Yc=o(function(e){return e==null?e:En(e)?e.slice():Ur(e)?oqe(e):e},"copy"),lqe=o(function(e){return e.slice()},"copyArray"),fme=o(function(e,r){for(r=e="";e++<36;r+=e*51&52?(e^15?8^Math.random()*(e^20?16:4):4).toString(16):"-");return r},"uuid"),cqe={},dme=o(function(){return cqe},"staticEmptyObject"),la=o(function(e){var r=Object.keys(e);return function(n){for(var i={},a=0;a<r.length;a++){var s=r[a],l=n?.[s];i[s]=l===void 0?e[s]:l}return i}},"defaults"),Df=o(function(e,r,n){for(var i=e.length-1;i>=0&&!(e[i]===r&&(e.splice(i,1),n));i--);},"removeFromArray"),nB=o(function(e){e.splice(0,e.length)},"clearArray"),uqe=o(function(e,r){for(var n=0;n<r.length;n++){var i=r[n];e.push(i)}},"push"),Gl=o(function(e,r,n){return n&&(r=J0e(n,r)),e[r]},"getPrefixedProperty"),kf=o(function(e,r,n,i){n&&(r=J0e(n,r)),e[r]=i},"setPrefixedProperty"),hqe=function(){function t(){Mf(this,t),this._obj={}}return o(t,"ObjectMap"),If(t,[{key:"set",value:o(function(r,n){return this._obj[r]=n,this},"set")},{key:"delete",value:o(function(r){return this._obj[r]=void 0,this},"_delete")},{key:"clear",value:o(function(){this._obj={}},"clear")},{key:"has",value:o(function(r){return this._obj[r]!==void 0},"has")},{key:"get",value:o(function(r){return this._obj[r]},"get")}]),t}(),Xc=typeof Map<"u"?Map:hqe,fqe="undefined",dqe=function(){function t(e){if(Mf(this,t),this._obj=Object.create(null),this.size=0,e!=null){var r;e.instanceString!=null&&e.instanceString()===this.instanceString()?r=e.toArray():r=e;for(var n=0;n<r.length;n++)this.add(r[n])}}return o(t,"ObjectSet"),If(t,[{key:"instanceString",value:o(function(){return"set"},"instanceString")},{key:"add",value:o(function(r){var n=this._obj;n[r]!==1&&(n[r]=1,this.size++)},"add")},{key:"delete",value:o(function(r){var n=this._obj;n[r]===1&&(n[r]=0,this.size--)},"_delete")},{key:"clear",value:o(function(){this._obj=Object.create(null)},"clear")},{key:"has",value:o(function(r){return this._obj[r]===1},"has")},{key:"toArray",value:o(function(){var r=this;return Object.keys(this._obj).filter(function(n){return r.has(n)})},"toArray")},{key:"forEach",value:o(function(r,n){return this.toArray().forEach(r,n)},"forEach")}]),t}(),J1=(typeof Set>"u"?"undefined":Wi(Set))!==fqe?Set:dqe,NS=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(e===void 0||r===void 0||!JP(e)){ai("An element must have a core reference and parameters set");return}var i=r.group;if(i==null&&(r.data&&r.data.source!=null&&r.data.target!=null?i="edges":i="nodes"),i!=="nodes"&&i!=="edges"){ai("An element must be of type `nodes` or `edges`; you specified `"+i+"`");return}this.length=1,this[0]=this;var a=this._private={cy:e,single:!0,data:r.data||{},position:r.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:i,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!r.selected,selectable:r.selectable===void 0?!0:!!r.selectable,locked:!!r.locked,grabbed:!1,grabbable:r.grabbable===void 0?!0:!!r.grabbable,pannable:r.pannable===void 0?i==="edges":!!r.pannable,active:!1,classes:new J1,animation:{current:[],queue:[]},rscratch:{},scratch:r.scratch||{},edges:[],children:[],parent:r.parent&&r.parent.isNode()?r.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(a.position.x==null&&(a.position.x=0),a.position.y==null&&(a.position.y=0),r.renderedPosition){var s=r.renderedPosition,l=e.pan(),u=e.zoom();a.position={x:(s.x-l.x)/u,y:(s.y-l.y)/u}}var h=[];En(r.classes)?h=r.classes:Zt(r.classes)&&(h=r.classes.split(/\s+/));for(var f=0,d=h.length;f<d;f++){var p=h[f];!p||p===""||a.classes.add(p)}this.createEmitter();var m=r.style||r.css;m&&(un("Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead."),this.style(m)),(n===void 0||n)&&this.restore()},"Element"),Bpe=o(function(e){return e={bfs:e.bfs||!e.dfs,dfs:e.dfs||!e.bfs},o(function(n,i,a){var s;Ur(n)&&!go(n)&&(s=n,n=s.roots||s.root,i=s.visit,a=s.directed),a=arguments.length===2&&!si(i)?i:a,i=si(i)?i:function(){};for(var l=this._private.cy,u=n=Zt(n)?this.filter(n):n,h=[],f=[],d={},p={},m={},g=0,y,v=this.byGroup(),x=v.nodes,b=v.edges,w=0;w<u.length;w++){var C=u[w],T=C.id();C.isNode()&&(h.unshift(C),e.bfs&&(m[T]=!0,f.push(C)),p[T]=0)}for(var E=o(function(){var L=e.bfs?h.shift():h.pop(),R=L.id();if(e.dfs){if(m[R])return"continue";m[R]=!0,f.push(L)}var O=p[R],M=d[R],B=M!=null?M.source():null,F=M!=null?M.target():null,P=M==null?void 0:L.same(B)?F[0]:B[0],z=void 0;if(z=i(L,M,P,g++,O),z===!0)return y=L,"break";if(z===!1)return"break";for(var $=L.connectedEdges().filter(function(ne){return(!a||ne.source().same(L))&&b.has(ne)}),H=0;H<$.length;H++){var Q=$[H],j=Q.connectedNodes().filter(function(ne){return!ne.same(L)&&x.has(ne)}),ie=j.id();j.length!==0&&!m[ie]&&(j=j[0],h.push(j),e.bfs&&(m[ie]=!0,f.push(j)),d[ie]=Q,p[ie]=p[R]+1)}},"_loop");h.length!==0;){var A=E();if(A!=="continue"&&A==="break")break}for(var S=l.collection(),_=0;_<f.length;_++){var I=f[_],D=d[I.id()];D!=null&&S.push(D),S.push(I)}return{path:l.collection(S),found:l.collection(y)}},"searchFn")},"defineSearch"),qb={breadthFirstSearch:Bpe({bfs:!0}),depthFirstSearch:Bpe({dfs:!0})};qb.bfs=qb.breadthFirstSearch;qb.dfs=qb.depthFirstSearch;pqe=vWe(function(t,e){(function(){var r,n,i,a,s,l,u,h,f,d,p,m,g,y,v;i=Math.floor,d=Math.min,n=o(function(x,b){return x<b?-1:x>b?1:0},"defaultCmp"),f=o(function(x,b,w,C,T){var E;if(w==null&&(w=0),T==null&&(T=n),w<0)throw new Error("lo must be non-negative");for(C==null&&(C=x.length);w<C;)E=i((w+C)/2),T(b,x[E])<0?C=E:w=E+1;return[].splice.apply(x,[w,w-w].concat(b)),b},"insort"),l=o(function(x,b,w){return w==null&&(w=n),x.push(b),y(x,0,x.length-1,w)},"heappush"),s=o(function(x,b){var w,C;return b==null&&(b=n),w=x.pop(),x.length?(C=x[0],x[0]=w,v(x,0,b)):C=w,C},"heappop"),h=o(function(x,b,w){var C;return w==null&&(w=n),C=x[0],x[0]=b,v(x,0,w),C},"heapreplace"),u=o(function(x,b,w){var C;return w==null&&(w=n),x.length&&w(x[0],b)<0&&(C=[x[0],b],b=C[0],x[0]=C[1],v(x,0,w)),b},"heappushpop"),a=o(function(x,b){var w,C,T,E,A,S;for(b==null&&(b=n),E=function(){S=[];for(var _=0,I=i(x.length/2);0<=I?_<I:_>I;0<=I?_++:_--)S.push(_);return S}.apply(this).reverse(),A=[],C=0,T=E.length;C<T;C++)w=E[C],A.push(v(x,w,b));return A},"heapify"),g=o(function(x,b,w){var C;if(w==null&&(w=n),C=x.indexOf(b),C!==-1)return y(x,0,C,w),v(x,C,w)},"updateItem"),p=o(function(x,b,w){var C,T,E,A,S;if(w==null&&(w=n),T=x.slice(0,b),!T.length)return T;for(a(T,w),S=x.slice(b),E=0,A=S.length;E<A;E++)C=S[E],u(T,C,w);return T.sort(w).reverse()},"nlargest"),m=o(function(x,b,w){var C,T,E,A,S,_,I,D,k;if(w==null&&(w=n),b*10<=x.length){if(E=x.slice(0,b).sort(w),!E.length)return E;for(T=E[E.length-1],I=x.slice(b),A=0,_=I.length;A<_;A++)C=I[A],w(C,T)<0&&(f(E,C,0,null,w),E.pop(),T=E[E.length-1]);return E}for(a(x,w),k=[],S=0,D=d(b,x.length);0<=D?S<D:S>D;0<=D?++S:--S)k.push(s(x,w));return k},"nsmallest"),y=o(function(x,b,w,C){var T,E,A;for(C==null&&(C=n),T=x[w];w>b;){if(A=w-1>>1,E=x[A],C(T,E)<0){x[w]=E,w=A;continue}break}return x[w]=T},"_siftdown"),v=o(function(x,b,w){var C,T,E,A,S;for(w==null&&(w=n),T=x.length,S=b,E=x[b],C=2*b+1;C<T;)A=C+1,A<T&&!(w(x[C],x[A])<0)&&(C=A),x[b]=x[C],b=C,C=2*b+1;return x[b]=E,y(x,S,b,w)},"_siftup"),r=function(){x.push=l,x.pop=s,x.replace=h,x.pushpop=u,x.heapify=a,x.updateItem=g,x.nlargest=p,x.nsmallest=m;function x(b){this.cmp=b??n,this.nodes=[]}return o(x,"Heap"),x.prototype.push=function(b){return l(this.nodes,b,this.cmp)},x.prototype.pop=function(){return s(this.nodes,this.cmp)},x.prototype.peek=function(){return this.nodes[0]},x.prototype.contains=function(b){return this.nodes.indexOf(b)!==-1},x.prototype.replace=function(b){return h(this.nodes,b,this.cmp)},x.prototype.pushpop=function(b){return u(this.nodes,b,this.cmp)},x.prototype.heapify=function(){return a(this.nodes,this.cmp)},x.prototype.updateItem=function(b){return g(this.nodes,b,this.cmp)},x.prototype.clear=function(){return this.nodes=[]},x.prototype.empty=function(){return this.nodes.length===0},x.prototype.size=function(){return this.nodes.length},x.prototype.clone=function(){var b;return b=new x,b.nodes=this.nodes.slice(0),b},x.prototype.toArray=function(){return this.nodes.slice(0)},x.prototype.insert=x.prototype.push,x.prototype.top=x.prototype.peek,x.prototype.front=x.prototype.peek,x.prototype.has=x.prototype.contains,x.prototype.copy=x.prototype.clone,x}(),function(x,b){return t.exports=b()}(this,function(){return r})}).call(Ib)}),i4=pqe,mqe=la({root:null,weight:o(function(e){return 1},"weight"),directed:!1}),gqe={dijkstra:o(function(e){if(!Ur(e)){var r=arguments;e={root:r[0],weight:r[1],directed:r[2]}}var n=mqe(e),i=n.root,a=n.weight,s=n.directed,l=this,u=a,h=Zt(i)?this.filter(i)[0]:i[0],f={},d={},p={},m=this.byGroup(),g=m.nodes,y=m.edges;y.unmergeBy(function(O){return O.isLoop()});for(var v=o(function(M){return f[M.id()]},"getDist"),x=o(function(M,B){f[M.id()]=B,b.updateItem(M)},"setDist"),b=new i4(function(O,M){return v(O)-v(M)}),w=0;w<g.length;w++){var C=g[w];f[C.id()]=C.same(h)?0:1/0,b.push(C)}for(var T=o(function(M,B){for(var F=(s?M.edgesTo(B):M.edgesWith(B)).intersect(y),P=1/0,z,$=0;$<F.length;$++){var H=F[$],Q=u(H);(Q<P||!z)&&(P=Q,z=H)}return{edge:z,dist:P}},"distBetween");b.size()>0;){var E=b.pop(),A=v(E),S=E.id();if(p[S]=A,A!==1/0)for(var _=E.neighborhood().intersect(g),I=0;I<_.length;I++){var D=_[I],k=D.id(),L=T(E,D),R=A+L.dist;R<v(D)&&(x(D,R),d[k]={node:E,edge:L.edge})}}return{distanceTo:o(function(M){var B=Zt(M)?g.filter(M)[0]:M[0];return p[B.id()]},"distanceTo"),pathTo:o(function(M){var B=Zt(M)?g.filter(M)[0]:M[0],F=[],P=B,z=P.id();if(B.length>0)for(F.unshift(B);d[z];){var $=d[z];F.unshift($.edge),F.unshift($.node),P=$.node,z=P.id()}return l.spawn(F)},"pathTo")}},"dijkstra")},yqe={kruskal:o(function(e){e=e||function(w){return 1};for(var r=this.byGroup(),n=r.nodes,i=r.edges,a=n.length,s=new Array(a),l=n,u=o(function(C){for(var T=0;T<s.length;T++){var E=s[T];if(E.has(C))return T}},"findSetIndex"),h=0;h<a;h++)s[h]=this.spawn(n[h]);for(var f=i.sort(function(w,C){return e(w)-e(C)}),d=0;d<f.length;d++){var p=f[d],m=p.source()[0],g=p.target()[0],y=u(m),v=u(g),x=s[y],b=s[v];y!==v&&(l.merge(p),x.merge(b),s.splice(v,1))}return l},"kruskal")},vqe=la({root:null,goal:null,weight:o(function(e){return 1},"weight"),heuristic:o(function(e){return 0},"heuristic"),directed:!1}),xqe={aStar:o(function(e){var r=this.cy(),n=vqe(e),i=n.root,a=n.goal,s=n.heuristic,l=n.directed,u=n.weight;i=r.collection(i)[0],a=r.collection(a)[0];var h=i.id(),f=a.id(),d={},p={},m={},g=new i4(function(z,$){return p[z.id()]-p[$.id()]}),y=new J1,v={},x={},b=o(function($,H){g.push($),y.add(H)},"addToOpenSet"),w,C,T=o(function(){w=g.pop(),C=w.id(),y.delete(C)},"popFromOpenSet"),E=o(function($){return y.has($)},"isInOpenSet");b(i,h),d[h]=0,p[h]=s(i);for(var A=0;g.size()>0;){if(T(),A++,C===f){for(var S=[],_=a,I=f,D=x[I];S.unshift(_),D!=null&&S.unshift(D),_=v[I],_!=null;)I=_.id(),D=x[I];return{found:!0,distance:d[C],path:this.spawn(S),steps:A}}m[C]=!0;for(var k=w._private.edges,L=0;L<k.length;L++){var R=k[L];if(this.hasElementWithId(R.id())&&!(l&&R.data("source")!==C)){var O=R.source(),M=R.target(),B=O.id()!==C?O:M,F=B.id();if(this.hasElementWithId(F)&&!m[F]){var P=d[C]+u(R);if(!E(F)){d[F]=P,p[F]=P+s(B),b(B,F),v[F]=w,x[F]=R;continue}P<d[F]&&(d[F]=P,p[F]=P+s(B),v[F]=w,x[F]=R)}}}}return{found:!1,distance:void 0,path:void 0,steps:A}},"aStar")},bqe=la({weight:o(function(e){return 1},"weight"),directed:!1}),wqe={floydWarshall:o(function(e){for(var r=this.cy(),n=bqe(e),i=n.weight,a=n.directed,s=i,l=this.byGroup(),u=l.nodes,h=l.edges,f=u.length,d=f*f,p=o(function(Q){return u.indexOf(Q)},"indexOf"),m=o(function(Q){return u[Q]},"atIndex"),g=new Array(d),y=0;y<d;y++){var v=y%f,x=(y-v)/f;x===v?g[y]=0:g[y]=1/0}for(var b=new Array(d),w=new Array(d),C=0;C<h.length;C++){var T=h[C],E=T.source()[0],A=T.target()[0];if(E!==A){var S=p(E),_=p(A),I=S*f+_,D=s(T);if(g[I]>D&&(g[I]=D,b[I]=_,w[I]=T),!a){var k=_*f+S;!a&&g[k]>D&&(g[k]=D,b[k]=S,w[k]=T)}}}for(var L=0;L<f;L++)for(var R=0;R<f;R++)for(var O=R*f+L,M=0;M<f;M++){var B=R*f+M,F=L*f+M;g[O]+g[F]<g[B]&&(g[B]=g[O]+g[F],b[B]=b[O])}var P=o(function(Q){return(Zt(Q)?r.filter(Q):Q)[0]},"getArgEle"),z=o(function(Q){return p(P(Q))},"indexOfArgEle"),$={distance:o(function(Q,j){var ie=z(Q),ne=z(j);return g[ie*f+ne]},"distance"),path:o(function(Q,j){var ie=z(Q),ne=z(j),le=m(ie);if(ie===ne)return le.collection();if(b[ie*f+ne]==null)return r.collection();var he=r.collection(),K=ie,X;for(he.merge(le);ie!==ne;)K=ie,ie=b[ie*f+ne],X=w[K*f+ie],he.merge(X),he.merge(m(ie));return he},"path")};return $},"floydWarshall")},Tqe=la({weight:o(function(e){return 1},"weight"),directed:!1,root:null}),kqe={bellmanFord:o(function(e){var r=this,n=Tqe(e),i=n.weight,a=n.directed,s=n.root,l=i,u=this,h=this.cy(),f=this.byGroup(),d=f.edges,p=f.nodes,m=p.length,g=new Xc,y=!1,v=[];s=h.collection(s)[0],d.unmergeBy(function(ce){return ce.isLoop()});for(var x=d.length,b=o(function(ae){var Oe=g.get(ae.id());return Oe||(Oe={},g.set(ae.id(),Oe)),Oe},"getInfo"),w=o(function(ae){return(Zt(ae)?h.$(ae):ae)[0]},"getNodeFromTo"),C=o(function(ae){return b(w(ae)).dist},"distanceTo"),T=o(function(ae){for(var Oe=arguments.length>1&&arguments[1]!==void 0?arguments[1]:s,ge=w(ae),ze=[],He=ge;;){if(He==null)return r.spawn();var $e=b(He),Re=$e.edge,Ie=$e.pred;if(ze.unshift(He[0]),He.same(Oe)&&ze.length>0)break;Re!=null&&ze.unshift(Re),He=Ie}return u.spawn(ze)},"pathTo"),E=0;E<m;E++){var A=p[E],S=b(A);A.same(s)?S.dist=0:S.dist=1/0,S.pred=null,S.edge=null}for(var _=!1,I=o(function(ae,Oe,ge,ze,He,$e){var Re=ze.dist+$e;Re<He.dist&&!ge.same(ze.edge)&&(He.dist=Re,He.pred=ae,He.edge=ge,_=!0)},"checkForEdgeReplacement"),D=1;D<m;D++){_=!1;for(var k=0;k<x;k++){var L=d[k],R=L.source(),O=L.target(),M=l(L),B=b(R),F=b(O);I(R,O,L,B,F,M),a||I(O,R,L,F,B,M)}if(!_)break}if(_)for(var P=[],z=0;z<x;z++){var $=d[z],H=$.source(),Q=$.target(),j=l($),ie=b(H).dist,ne=b(Q).dist;if(ie+j<ne||!a&&ne+j<ie)if(y||(un("Graph contains a negative weight cycle for Bellman-Ford"),y=!0),e.findNegativeWeightCycles!==!1){var le=[];ie+j<ne&&le.push(H),!a&&ne+j<ie&&le.push(Q);for(var he=le.length,K=0;K<he;K++){var X=le[K],te=[X];te.push(b(X).edge);for(var J=b(X).pred;te.indexOf(J)===-1;)te.push(J),te.push(b(J).edge),J=b(J).pred;te=te.slice(te.indexOf(J));for(var se=te[0].id(),ue=0,Z=2;Z<te.length;Z+=2)te[Z].id()<se&&(se=te[Z].id(),ue=Z);te=te.slice(ue).concat(te.slice(0,ue)),te.push(te[0]);var Se=te.map(function(ce){return ce.id()}).join(",");P.indexOf(Se)===-1&&(v.push(u.spawn(te)),P.push(Se))}}else break}return{distanceTo:C,pathTo:T,hasNegativeWeightCycle:y,negativeWeightCycles:v}},"bellmanFord")},Eqe=Math.sqrt(2),Sqe=o(function(e,r,n){n.length===0&&ai("Karger-Stein must be run on a connected (sub)graph");for(var i=n[e],a=i[1],s=i[2],l=r[a],u=r[s],h=n,f=h.length-1;f>=0;f--){var d=h[f],p=d[1],m=d[2];(r[p]===l&&r[m]===u||r[p]===u&&r[m]===l)&&h.splice(f,1)}for(var g=0;g<h.length;g++){var y=h[g];y[1]===u?(h[g]=y.slice(),h[g][1]=l):y[2]===u&&(h[g]=y.slice(),h[g][2]=l)}for(var v=0;v<r.length;v++)r[v]===u&&(r[v]=l);return h},"collapse"),wP=o(function(e,r,n,i){for(;n>i;){var a=Math.floor(Math.random()*r.length);r=Sqe(a,e,r),n--}return r},"contractUntil"),Cqe={kargerStein:o(function(){var e=this,r=this.byGroup(),n=r.nodes,i=r.edges;i.unmergeBy(function(F){return F.isLoop()});var a=n.length,s=i.length,l=Math.ceil(Math.pow(Math.log(a)/Math.LN2,2)),u=Math.floor(a/Eqe);if(a<2){ai("At least 2 nodes are required for Karger-Stein algorithm");return}for(var h=[],f=0;f<s;f++){var d=i[f];h.push([f,n.indexOf(d.source()),n.indexOf(d.target())])}for(var p=1/0,m=[],g=new Array(a),y=new Array(a),v=new Array(a),x=o(function(P,z){for(var $=0;$<a;$++)z[$]=P[$]},"copyNodesMap"),b=0;b<=l;b++){for(var w=0;w<a;w++)y[w]=w;var C=wP(y,h.slice(),a,u),T=C.slice();x(y,v);var E=wP(y,C,u,2),A=wP(v,T,u,2);E.length<=A.length&&E.length<p?(p=E.length,m=E,x(y,g)):A.length<=E.length&&A.length<p&&(p=A.length,m=A,x(v,g))}for(var S=this.spawn(m.map(function(F){return i[F[0]]})),_=this.spawn(),I=this.spawn(),D=g[0],k=0;k<g.length;k++){var L=g[k],R=n[k];L===D?_.merge(R):I.merge(R)}var O=o(function(P){var z=e.spawn();return P.forEach(function($){z.merge($),$.connectedEdges().forEach(function(H){e.contains(H)&&!S.contains(H)&&z.merge(H)})}),z},"constructComponent"),M=[O(_),O(I)],B={cut:S,components:M,partition1:_,partition2:I};return B},"kargerStein")},Aqe=o(function(e){return{x:e.x,y:e.y}},"copyPosition"),MS=o(function(e,r,n){return{x:e.x*r+n.x,y:e.y*r+n.y}},"modelToRenderedPosition"),pme=o(function(e,r,n){return{x:(e.x-n.x)/r,y:(e.y-n.y)/r}},"renderedToModelPosition"),U1=o(function(e){return{x:e[0],y:e[1]}},"array2point"),_qe=o(function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=1/0,a=r;a<n;a++){var s=e[a];isFinite(s)&&(i=Math.min(s,i))}return i},"min"),Dqe=o(function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=-1/0,a=r;a<n;a++){var s=e[a];isFinite(s)&&(i=Math.max(s,i))}return i},"max"),Lqe=o(function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=0,a=0,s=r;s<n;s++){var l=e[s];isFinite(l)&&(i+=l,a++)}return i/a},"mean"),Rqe=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;i?e=e.slice(r,n):(n<e.length&&e.splice(n,e.length-n),r>0&&e.splice(0,r));for(var l=0,u=e.length-1;u>=0;u--){var h=e[u];s?isFinite(h)||(e[u]=-1/0,l++):e.splice(u,1)}a&&e.sort(function(p,m){return p-m});var f=e.length,d=Math.floor(f/2);return f%2!==0?e[d+1+l]:(e[d-1+l]+e[d+l])/2},"median"),Nqe=o(function(e){return Math.PI*e/180},"deg2rad"),K6=o(function(e,r){return Math.atan2(r,e)-Math.PI/2},"getAngleFromDisp"),iB=Math.log2||function(t){return Math.log(t)/Math.log(2)},mme=o(function(e){return e>0?1:e<0?-1:0},"signum"),Gp=o(function(e,r){return Math.sqrt(Op(e,r))},"dist"),Op=o(function(e,r){var n=r.x-e.x,i=r.y-e.y;return n*n+i*i},"sqdist"),Mqe=o(function(e){for(var r=e.length,n=0,i=0;i<r;i++)n+=e[i];for(var a=0;a<r;a++)e[a]=e[a]/n;return e},"inPlaceSumNormalize"),oa=o(function(e,r,n,i){return(1-i)*(1-i)*e+2*(1-i)*i*r+i*i*n},"qbezierAt"),W1=o(function(e,r,n,i){return{x:oa(e.x,r.x,n.x,i),y:oa(e.y,r.y,n.y,i)}},"qbezierPtAt"),Iqe=o(function(e,r,n,i){var a={x:r.x-e.x,y:r.y-e.y},s=Gp(e,r),l={x:a.x/s,y:a.y/s};return n=n??0,i=i??n*s,{x:e.x+l.x*i,y:e.y+l.y*i}},"lineAt"),Yb=o(function(e,r,n){return Math.max(e,Math.min(n,r))},"bound"),Hs=o(function(e){if(e==null)return{x1:1/0,y1:1/0,x2:-1/0,y2:-1/0,w:0,h:0};if(e.x1!=null&&e.y1!=null){if(e.x2!=null&&e.y2!=null&&e.x2>=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(e.w!=null&&e.h!=null&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},"makeBoundingBox"),Oqe=o(function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},"copyBoundingBox"),Pqe=o(function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},"clearBoundingBox"),Bqe=o(function(e,r,n){return{x1:e.x1+r,x2:e.x2+r,y1:e.y1+n,y2:e.y2+n,w:e.w,h:e.h}},"shiftBoundingBox"),gme=o(function(e,r){e.x1=Math.min(e.x1,r.x1),e.x2=Math.max(e.x2,r.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,r.y1),e.y2=Math.max(e.y2,r.y2),e.h=e.y2-e.y1},"updateBoundingBox"),Fqe=o(function(e,r,n){e.x1=Math.min(e.x1,r),e.x2=Math.max(e.x2,r),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},"expandBoundingBoxByPoint"),cS=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.x1-=r,e.x2+=r,e.y1-=r,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBox"),uS=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],n,i,a,s;if(r.length===1)n=i=a=s=r[0];else if(r.length===2)n=a=r[0],s=i=r[1];else if(r.length===4){var l=_i(r,4);n=l[0],i=l[1],a=l[2],s=l[3]}return e.x1-=s,e.x2+=i,e.y1-=n,e.y2+=a,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBoxSides"),Fpe=o(function(e,r){e.x1=r.x1,e.y1=r.y1,e.x2=r.x2,e.y2=r.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},"assignBoundingBox"),aB=o(function(e,r){return!(e.x1>r.x2||r.x1>e.x2||e.x2<r.x1||r.x2<e.x1||e.y2<r.y1||r.y2<e.y1||e.y1>r.y2||r.y1>e.y2)},"boundingBoxesIntersect"),K1=o(function(e,r,n){return e.x1<=r&&r<=e.x2&&e.y1<=n&&n<=e.y2},"inBoundingBox"),$qe=o(function(e,r){return K1(e,r.x,r.y)},"pointInBoundingBox"),yme=o(function(e,r){return K1(e,r.x1,r.y1)&&K1(e,r.x2,r.y2)},"boundingBoxInBoundingBox"),vme=o(function(e,r,n,i,a,s,l){var u=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"auto",h=u==="auto"?Vp(a,s):u,f=a/2,d=s/2;h=Math.min(h,f,d);var p=h!==f,m=h!==d,g;if(p){var y=n-f+h-l,v=i-d-l,x=n+f-h+l,b=v;if(g=Ef(e,r,n,i,y,v,x,b,!1),g.length>0)return g}if(m){var w=n+f+l,C=i-d+h-l,T=w,E=i+d-h+l;if(g=Ef(e,r,n,i,w,C,T,E,!1),g.length>0)return g}if(p){var A=n-f+h-l,S=i+d+l,_=n+f-h+l,I=S;if(g=Ef(e,r,n,i,A,S,_,I,!1),g.length>0)return g}if(m){var D=n-f-l,k=i-d+h-l,L=D,R=i+d-h+l;if(g=Ef(e,r,n,i,D,k,L,R,!1),g.length>0)return g}var O;{var M=n-f+h,B=i-d+h;if(O=Pb(e,r,n,i,M,B,h+l),O.length>0&&O[0]<=M&&O[1]<=B)return[O[0],O[1]]}{var F=n+f-h,P=i-d+h;if(O=Pb(e,r,n,i,F,P,h+l),O.length>0&&O[0]>=F&&O[1]<=P)return[O[0],O[1]]}{var z=n+f-h,$=i+d-h;if(O=Pb(e,r,n,i,z,$,h+l),O.length>0&&O[0]>=z&&O[1]>=$)return[O[0],O[1]]}{var H=n-f+h,Q=i+d-h;if(O=Pb(e,r,n,i,H,Q,h+l),O.length>0&&O[0]<=H&&O[1]>=Q)return[O[0],O[1]]}return[]},"roundRectangleIntersectLine"),zqe=o(function(e,r,n,i,a,s,l){var u=l,h=Math.min(n,a),f=Math.max(n,a),d=Math.min(i,s),p=Math.max(i,s);return h-u<=e&&e<=f+u&&d-u<=r&&r<=p+u},"inLineVicinity"),Gqe=o(function(e,r,n,i,a,s,l,u,h){var f={x1:Math.min(n,l,a)-h,x2:Math.max(n,l,a)+h,y1:Math.min(i,u,s)-h,y2:Math.max(i,u,s)+h};return!(e<f.x1||e>f.x2||r<f.y1||r>f.y2)},"inBezierVicinity"),Vqe=o(function(e,r,n,i){n-=i;var a=r*r-4*e*n;if(a<0)return[];var s=Math.sqrt(a),l=2*e,u=(-r+s)/l,h=(-r-s)/l;return[u,h]},"solveQuadratic"),Uqe=o(function(e,r,n,i,a){var s=1e-5;e===0&&(e=s),r/=e,n/=e,i/=e;var l,u,h,f,d,p,m,g;if(u=(3*n-r*r)/9,h=-(27*i)+r*(9*n-2*(r*r)),h/=54,l=u*u*u+h*h,a[1]=0,m=r/3,l>0){d=h+Math.sqrt(l),d=d<0?-Math.pow(-d,1/3):Math.pow(d,1/3),p=h-Math.sqrt(l),p=p<0?-Math.pow(-p,1/3):Math.pow(p,1/3),a[0]=-m+d+p,m+=(d+p)/2,a[4]=a[2]=-m,m=Math.sqrt(3)*(-p+d)/2,a[3]=m,a[5]=-m;return}if(a[5]=a[3]=0,l===0){g=h<0?-Math.pow(-h,1/3):Math.pow(h,1/3),a[0]=-m+2*g,a[4]=a[2]=-(g+m);return}u=-u,f=u*u*u,f=Math.acos(h/Math.sqrt(f)),g=2*Math.sqrt(u),a[0]=-m+g*Math.cos(f/3),a[2]=-m+g*Math.cos((f+2*Math.PI)/3),a[4]=-m+g*Math.cos((f+4*Math.PI)/3)},"solveCubic"),Hqe=o(function(e,r,n,i,a,s,l,u){var h=1*n*n-4*n*a+2*n*l+4*a*a-4*a*l+l*l+i*i-4*i*s+2*i*u+4*s*s-4*s*u+u*u,f=1*9*n*a-3*n*n-3*n*l-6*a*a+3*a*l+9*i*s-3*i*i-3*i*u-6*s*s+3*s*u,d=1*3*n*n-6*n*a+n*l-n*e+2*a*a+2*a*e-l*e+3*i*i-6*i*s+i*u-i*r+2*s*s+2*s*r-u*r,p=1*n*a-n*n+n*e-a*e+i*s-i*i+i*r-s*r,m=[];Uqe(h,f,d,p,m);for(var g=1e-7,y=[],v=0;v<6;v+=2)Math.abs(m[v+1])<g&&m[v]>=0&&m[v]<=1&&y.push(m[v]);y.push(1),y.push(0);for(var x=-1,b,w,C,T=0;T<y.length;T++)b=Math.pow(1-y[T],2)*n+2*(1-y[T])*y[T]*a+y[T]*y[T]*l,w=Math.pow(1-y[T],2)*i+2*(1-y[T])*y[T]*s+y[T]*y[T]*u,C=Math.pow(b-e,2)+Math.pow(w-r,2),x>=0?C<x&&(x=C):x=C;return x},"sqdistToQuadraticBezier"),Wqe=o(function(e,r,n,i,a,s){var l=[e-n,r-i],u=[a-n,s-i],h=u[0]*u[0]+u[1]*u[1],f=l[0]*l[0]+l[1]*l[1],d=l[0]*u[0]+l[1]*u[1],p=d*d/h;return d<0?f:p>h?(e-a)*(e-a)+(r-s)*(r-s):f-p},"sqdistToFiniteLine"),Us=o(function(e,r,n){for(var i,a,s,l,u,h=0,f=0;f<n.length/2;f++)if(i=n[f*2],a=n[f*2+1],f+1<n.length/2?(s=n[(f+1)*2],l=n[(f+1)*2+1]):(s=n[(f+1-n.length/2)*2],l=n[(f+1-n.length/2)*2+1]),!(i==e&&s==e))if(i>=e&&e>=s||i<=e&&e<=s)u=(e-i)/(s-i)*(l-a)+a,u>r&&h++;else continue;return h%2!==0},"pointInsidePolygonPoints"),Zu=o(function(e,r,n,i,a,s,l,u,h){var f=new Array(n.length),d;u[0]!=null?(d=Math.atan(u[1]/u[0]),u[0]<0?d=d+Math.PI/2:d=-d-Math.PI/2):d=u;for(var p=Math.cos(-d),m=Math.sin(-d),g=0;g<f.length/2;g++)f[g*2]=s/2*(n[g*2]*p-n[g*2+1]*m),f[g*2+1]=l/2*(n[g*2+1]*p+n[g*2]*m),f[g*2]+=i,f[g*2+1]+=a;var y;if(h>0){var v=TS(f,-h);y=wS(v)}else y=f;return Us(e,r,y)},"pointInsidePolygon"),qqe=o(function(e,r,n,i,a,s,l,u){for(var h=new Array(n.length*2),f=0;f<u.length;f++){var d=u[f];h[f*4+0]=d.startX,h[f*4+1]=d.startY,h[f*4+2]=d.stopX,h[f*4+3]=d.stopY;var p=Math.pow(d.cx-e,2)+Math.pow(d.cy-r,2);if(p<=Math.pow(d.radius,2))return!0}return Us(e,r,h)},"pointInsideRoundPolygon"),wS=o(function(e){for(var r=new Array(e.length/2),n,i,a,s,l,u,h,f,d=0;d<e.length/4;d++){n=e[d*4],i=e[d*4+1],a=e[d*4+2],s=e[d*4+3],d<e.length/4-1?(l=e[(d+1)*4],u=e[(d+1)*4+1],h=e[(d+1)*4+2],f=e[(d+1)*4+3]):(l=e[0],u=e[1],h=e[2],f=e[3]);var p=Ef(n,i,a,s,l,u,h,f,!0);r[d*2]=p[0],r[d*2+1]=p[1]}return r},"joinLines"),TS=o(function(e,r){for(var n=new Array(e.length*2),i,a,s,l,u=0;u<e.length/2;u++){i=e[u*2],a=e[u*2+1],u<e.length/2-1?(s=e[(u+1)*2],l=e[(u+1)*2+1]):(s=e[0],l=e[1]);var h=l-a,f=-(s-i),d=Math.sqrt(h*h+f*f),p=h/d,m=f/d;n[u*4]=i+p*r,n[u*4+1]=a+m*r,n[u*4+2]=s+p*r,n[u*4+3]=l+m*r}return n},"expandPolygon"),Yqe=o(function(e,r,n,i,a,s){var l=n-e,u=i-r;l/=a,u/=s;var h=Math.sqrt(l*l+u*u),f=h-1;if(f<0)return[];var d=f/h;return[(n-e)*d+e,(i-r)*d+r]},"intersectLineEllipse"),$p=o(function(e,r,n,i,a,s,l){return e-=a,r-=s,e/=n/2+l,r/=i/2+l,e*e+r*r<=1},"checkInEllipse"),Pb=o(function(e,r,n,i,a,s,l){var u=[n-e,i-r],h=[e-a,r-s],f=u[0]*u[0]+u[1]*u[1],d=2*(h[0]*u[0]+h[1]*u[1]),p=h[0]*h[0]+h[1]*h[1]-l*l,m=d*d-4*f*p;if(m<0)return[];var g=(-d+Math.sqrt(m))/(2*f),y=(-d-Math.sqrt(m))/(2*f),v=Math.min(g,y),x=Math.max(g,y),b=[];if(v>=0&&v<=1&&b.push(v),x>=0&&x<=1&&b.push(x),b.length===0)return[];var w=b[0]*u[0]+e,C=b[0]*u[1]+r;if(b.length>1){if(b[0]==b[1])return[w,C];var T=b[1]*u[0]+e,E=b[1]*u[1]+r;return[w,C,T,E]}else return[w,C]},"intersectLineCircle"),TP=o(function(e,r,n){return r<=e&&e<=n||n<=e&&e<=r?e:e<=r&&r<=n||n<=r&&r<=e?r:n},"midOfThree"),Ef=o(function(e,r,n,i,a,s,l,u,h){var f=e-a,d=n-e,p=l-a,m=r-s,g=i-r,y=u-s,v=p*m-y*f,x=d*m-g*f,b=y*d-p*g;if(b!==0){var w=v/b,C=x/b,T=.001,E=0-T,A=1+T;return E<=w&&w<=A&&E<=C&&C<=A?[e+w*d,r+w*g]:h?[e+w*d,r+w*g]:[]}else return v===0||x===0?TP(e,n,l)===l?[l,u]:TP(e,n,a)===a?[a,s]:TP(a,l,n)===n?[n,i]:[]:[]},"finiteLinesIntersect"),Xb=o(function(e,r,n,i,a,s,l,u){var h=[],f,d=new Array(n.length),p=!0;s==null&&(p=!1);var m;if(p){for(var g=0;g<d.length/2;g++)d[g*2]=n[g*2]*s+i,d[g*2+1]=n[g*2+1]*l+a;if(u>0){var y=TS(d,-u);m=wS(y)}else m=d}else m=n;for(var v,x,b,w,C=0;C<m.length/2;C++)v=m[C*2],x=m[C*2+1],C<m.length/2-1?(b=m[(C+1)*2],w=m[(C+1)*2+1]):(b=m[0],w=m[1]),f=Ef(e,r,i,a,v,x,b,w),f.length!==0&&h.push(f[0],f[1]);return h},"polygonIntersectLine"),Xqe=o(function(e,r,n,i,a,s,l,u,h){var f=[],d,p=new Array(n.length*2);h.forEach(function(b,w){w===0?(p[p.length-2]=b.startX,p[p.length-1]=b.startY):(p[w*4-2]=b.startX,p[w*4-1]=b.startY),p[w*4]=b.stopX,p[w*4+1]=b.stopY,d=Pb(e,r,i,a,b.cx,b.cy,b.radius),d.length!==0&&f.push(d[0],d[1])});for(var m=0;m<p.length/4;m++)d=Ef(e,r,i,a,p[m*4],p[m*4+1],p[m*4+2],p[m*4+3],!1),d.length!==0&&f.push(d[0],d[1]);if(f.length>2){for(var g=[f[0],f[1]],y=Math.pow(g[0]-e,2)+Math.pow(g[1]-r,2),v=1;v<f.length/2;v++){var x=Math.pow(f[v*2]-e,2)+Math.pow(f[v*2+1]-r,2);x<=y&&(g[0]=f[v*2],g[1]=f[v*2+1],y=x)}return g}return f},"roundPolygonIntersectLine"),Q6=o(function(e,r,n){var i=[e[0]-r[0],e[1]-r[1]],a=Math.sqrt(i[0]*i[0]+i[1]*i[1]),s=(a-n)/a;return s<0&&(s=1e-5),[r[0]+s*i[0],r[1]+s*i[1]]},"shortenIntersection"),gs=o(function(e,r){var n=PP(e,r);return n=xme(n),n},"generateUnitNgonPointsFitToSquare"),xme=o(function(e){for(var r,n,i=e.length/2,a=1/0,s=1/0,l=-1/0,u=-1/0,h=0;h<i;h++)r=e[2*h],n=e[2*h+1],a=Math.min(a,r),l=Math.max(l,r),s=Math.min(s,n),u=Math.max(u,n);for(var f=2/(l-a),d=2/(u-s),p=0;p<i;p++)r=e[2*p]=e[2*p]*f,n=e[2*p+1]=e[2*p+1]*d,a=Math.min(a,r),l=Math.max(l,r),s=Math.min(s,n),u=Math.max(u,n);if(s<-1)for(var m=0;m<i;m++)n=e[2*m+1]=e[2*m+1]+(-1-s);return e},"fitPolygonToSquare"),PP=o(function(e,r){var n=1/e*2*Math.PI,i=e%2===0?Math.PI/2+n/2:Math.PI/2;i+=r;for(var a=new Array(e*2),s,l=0;l<e;l++)s=l*n+i,a[2*l]=Math.cos(s),a[2*l+1]=Math.sin(-s);return a},"generateUnitNgonPoints"),Vp=o(function(e,r){return Math.min(e/4,r/4,8)},"getRoundRectangleRadius"),bme=o(function(e,r){return Math.min(e/10,r/10,8)},"getRoundPolygonRadius"),sB=o(function(){return 8},"getCutRectangleCornerLength"),jqe=o(function(e,r,n){return[e-2*r+n,2*(r-e),e]},"bezierPtsToQuadCoeff"),BP=o(function(e,r){return{heightOffset:Math.min(15,.05*r),widthOffset:Math.min(100,.25*e),ctrlPtOffsetPct:.05}},"getBarrelCurveConstants"),Kqe=la({dampingFactor:.8,precision:1e-6,iterations:200,weight:o(function(e){return 1},"weight")}),Qqe={pageRank:o(function(e){for(var r=Kqe(e),n=r.dampingFactor,i=r.precision,a=r.iterations,s=r.weight,l=this._private.cy,u=this.byGroup(),h=u.nodes,f=u.edges,d=h.length,p=d*d,m=f.length,g=new Array(p),y=new Array(d),v=(1-n)/d,x=0;x<d;x++){for(var b=0;b<d;b++){var w=x*d+b;g[w]=0}y[x]=0}for(var C=0;C<m;C++){var T=f[C],E=T.data("source"),A=T.data("target");if(E!==A){var S=h.indexOfId(E),_=h.indexOfId(A),I=s(T),D=_*d+S;g[D]+=I,y[S]+=I}}for(var k=1/d+v,L=0;L<d;L++)if(y[L]===0)for(var R=0;R<d;R++){var O=R*d+L;g[O]=k}else for(var M=0;M<d;M++){var B=M*d+L;g[B]=g[B]/y[L]+v}for(var F=new Array(d),P=new Array(d),z,$=0;$<d;$++)F[$]=1;for(var H=0;H<a;H++){for(var Q=0;Q<d;Q++)P[Q]=0;for(var j=0;j<d;j++)for(var ie=0;ie<d;ie++){var ne=j*d+ie;P[j]+=g[ne]*F[ie]}Mqe(P),z=F,F=P,P=z;for(var le=0,he=0;he<d;he++){var K=z[he]-F[he];le+=K*K}if(le<i)break}var X={rank:o(function(J){return J=l.collection(J)[0],F[h.indexOf(J)]},"rank")};return X},"pageRank")},$pe=la({root:null,weight:o(function(e){return 1},"weight"),directed:!1,alpha:0}),q1={degreeCentralityNormalized:o(function(e){e=$pe(e);var r=this.cy(),n=this.nodes(),i=n.length;if(e.directed){for(var f={},d={},p=0,m=0,g=0;g<i;g++){var y=n[g],v=y.id();e.root=y;var x=this.degreeCentrality(e);p<x.indegree&&(p=x.indegree),m<x.outdegree&&(m=x.outdegree),f[v]=x.indegree,d[v]=x.outdegree}return{indegree:o(function(w){return p==0?0:(Zt(w)&&(w=r.filter(w)),f[w.id()]/p)},"indegree"),outdegree:o(function(w){return m===0?0:(Zt(w)&&(w=r.filter(w)),d[w.id()]/m)},"outdegree")}}else{for(var a={},s=0,l=0;l<i;l++){var u=n[l];e.root=u;var h=this.degreeCentrality(e);s<h.degree&&(s=h.degree),a[u.id()]=h.degree}return{degree:o(function(w){return s===0?0:(Zt(w)&&(w=r.filter(w)),a[w.id()]/s)},"degree")}}},"degreeCentralityNormalized"),degreeCentrality:o(function(e){e=$pe(e);var r=this.cy(),n=this,i=e,a=i.root,s=i.weight,l=i.directed,u=i.alpha;if(a=r.collection(a)[0],l){for(var m=a.connectedEdges(),g=m.filter(function(E){return E.target().same(a)&&n.has(E)}),y=m.filter(function(E){return E.source().same(a)&&n.has(E)}),v=g.length,x=y.length,b=0,w=0,C=0;C<g.length;C++)b+=s(g[C]);for(var T=0;T<y.length;T++)w+=s(y[T]);return{indegree:Math.pow(v,1-u)*Math.pow(b,u),outdegree:Math.pow(x,1-u)*Math.pow(w,u)}}else{for(var h=a.connectedEdges().intersection(n),f=h.length,d=0,p=0;p<h.length;p++)d+=s(h[p]);return{degree:Math.pow(f,1-u)*Math.pow(d,u)}}},"degreeCentrality")};q1.dc=q1.degreeCentrality;q1.dcn=q1.degreeCentralityNormalised=q1.degreeCentralityNormalized;zpe=la({harmonic:!0,weight:o(function(){return 1},"weight"),directed:!1,root:null}),Y1={closenessCentralityNormalized:o(function(e){for(var r=zpe(e),n=r.harmonic,i=r.weight,a=r.directed,s=this.cy(),l={},u=0,h=this.nodes(),f=this.floydWarshall({weight:i,directed:a}),d=0;d<h.length;d++){for(var p=0,m=h[d],g=0;g<h.length;g++)if(d!==g){var y=f.distance(m,h[g]);n?p+=1/y:p+=y}n||(p=1/p),u<p&&(u=p),l[m.id()]=p}return{closeness:o(function(x){return u==0?0:(Zt(x)?x=s.filter(x)[0].id():x=x.id(),l[x]/u)},"closeness")}},"closenessCentralityNormalized"),closenessCentrality:o(function(e){var r=zpe(e),n=r.root,i=r.weight,a=r.directed,s=r.harmonic;n=this.filter(n)[0];for(var l=this.dijkstra({root:n,weight:i,directed:a}),u=0,h=this.nodes(),f=0;f<h.length;f++){var d=h[f];if(!d.same(n)){var p=l.distanceTo(d);s?u+=1/p:u+=p}}return s?u:1/u},"closenessCentrality")};Y1.cc=Y1.closenessCentrality;Y1.ccn=Y1.closenessCentralityNormalised=Y1.closenessCentralityNormalized;Zqe=la({weight:null,directed:!1}),FP={betweennessCentrality:o(function(e){for(var r=Zqe(e),n=r.directed,i=r.weight,a=i!=null,s=this.cy(),l=this.nodes(),u={},h={},f=0,d={set:o(function(w,C){h[w]=C,C>f&&(f=C)},"set"),get:o(function(w){return h[w]},"get")},p=0;p<l.length;p++){var m=l[p],g=m.id();n?u[g]=m.outgoers().nodes():u[g]=m.openNeighborhood().nodes(),d.set(g,0)}for(var y=o(function(w){for(var C=l[w].id(),T=[],E={},A={},S={},_=new i4(function(ie,ne){return S[ie]-S[ne]}),I=0;I<l.length;I++){var D=l[I].id();E[D]=[],A[D]=0,S[D]=1/0}for(A[C]=1,S[C]=0,_.push(C);!_.empty();){var k=_.pop();if(T.push(k),a)for(var L=0;L<u[k].length;L++){var R=u[k][L],O=s.getElementById(k),M=void 0;O.edgesTo(R).length>0?M=O.edgesTo(R)[0]:M=R.edgesTo(O)[0];var B=i(M);R=R.id(),S[R]>S[k]+B&&(S[R]=S[k]+B,_.nodes.indexOf(R)<0?_.push(R):_.updateItem(R),A[R]=0,E[R]=[]),S[R]==S[k]+B&&(A[R]=A[R]+A[k],E[R].push(k))}else for(var F=0;F<u[k].length;F++){var P=u[k][F].id();S[P]==1/0&&(_.push(P),S[P]=S[k]+1),S[P]==S[k]+1&&(A[P]=A[P]+A[k],E[P].push(k))}}for(var z={},$=0;$<l.length;$++)z[l[$].id()]=0;for(;T.length>0;){for(var H=T.pop(),Q=0;Q<E[H].length;Q++){var j=E[H][Q];z[j]=z[j]+A[j]/A[H]*(1+z[H])}H!=l[w].id()&&d.set(H,d.get(H)+z[H])}},"_loop"),v=0;v<l.length;v++)y(v);var x={betweenness:o(function(w){var C=s.collection(w).id();return d.get(C)},"betweenness"),betweennessNormalized:o(function(w){if(f==0)return 0;var C=s.collection(w).id();return d.get(C)/f},"betweennessNormalized")};return x.betweennessNormalised=x.betweennessNormalized,x},"betweennessCentrality")};FP.bc=FP.betweennessCentrality;Jqe=la({expandFactor:2,inflateFactor:2,multFactor:1,maxIterations:20,attributes:[function(t){return 1}]}),eYe=o(function(e){return Jqe(e)},"setOptions"),tYe=o(function(e,r){for(var n=0,i=0;i<r.length;i++)n+=r[i](e);return n},"getSimilarity"),rYe=o(function(e,r,n){for(var i=0;i<r;i++)e[i*r+i]=n},"addLoops"),wme=o(function(e,r){for(var n,i=0;i<r;i++){n=0;for(var a=0;a<r;a++)n+=e[a*r+i];for(var s=0;s<r;s++)e[s*r+i]=e[s*r+i]/n}},"normalize"),nYe=o(function(e,r,n){for(var i=new Array(n*n),a=0;a<n;a++){for(var s=0;s<n;s++)i[a*n+s]=0;for(var l=0;l<n;l++)for(var u=0;u<n;u++)i[a*n+u]+=e[a*n+l]*r[l*n+u]}return i},"mmult"),iYe=o(function(e,r,n){for(var i=e.slice(0),a=1;a<n;a++)e=nYe(e,i,r);return e},"expand"),aYe=o(function(e,r,n){for(var i=new Array(r*r),a=0;a<r*r;a++)i[a]=Math.pow(e[a],n);return wme(i,r),i},"inflate"),sYe=o(function(e,r,n,i){for(var a=0;a<n;a++){var s=Math.round(e[a]*Math.pow(10,i))/Math.pow(10,i),l=Math.round(r[a]*Math.pow(10,i))/Math.pow(10,i);if(s!==l)return!1}return!0},"hasConverged"),oYe=o(function(e,r,n,i){for(var a=[],s=0;s<r;s++){for(var l=[],u=0;u<r;u++)Math.round(e[s*r+u]*1e3)/1e3>0&&l.push(n[u]);l.length!==0&&a.push(i.collection(l))}return a},"assign"),lYe=o(function(e,r){for(var n=0;n<e.length;n++)if(!r[n]||e[n].id()!==r[n].id())return!1;return!0},"isDuplicate"),cYe=o(function(e){for(var r=0;r<e.length;r++)for(var n=0;n<e.length;n++)r!=n&&lYe(e[r],e[n])&&e.splice(n,1);return e},"removeDuplicates"),Gpe=o(function(e){for(var r=this.nodes(),n=this.edges(),i=this.cy(),a=eYe(e),s={},l=0;l<r.length;l++)s[r[l].id()]=l;for(var u=r.length,h=u*u,f=new Array(h),d,p=0;p<h;p++)f[p]=0;for(var m=0;m<n.length;m++){var g=n[m],y=s[g.source().id()],v=s[g.target().id()],x=tYe(g,a.attributes);f[y*u+v]+=x,f[v*u+y]+=x}rYe(f,u,a.multFactor),wme(f,u);for(var b=!0,w=0;b&&w<a.maxIterations;)b=!1,d=iYe(f,u,a.expandFactor),f=aYe(d,u,a.inflateFactor),sYe(f,d,h,4)||(b=!0),w++;var C=oYe(f,u,r,i);return C=cYe(C),C},"markovClustering"),uYe={markovClustering:Gpe,mcl:Gpe},hYe=o(function(e){return e},"identity"),Tme=o(function(e,r){return Math.abs(r-e)},"absDiff"),Vpe=o(function(e,r,n){return e+Tme(r,n)},"addAbsDiff"),Upe=o(function(e,r,n){return e+Math.pow(n-r,2)},"addSquaredDiff"),fYe=o(function(e){return Math.sqrt(e)},"sqrt"),dYe=o(function(e,r,n){return Math.max(e,Tme(r,n))},"maxAbsDiff"),_b=o(function(e,r,n,i,a){for(var s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:hYe,l=i,u,h,f=0;f<e;f++)u=r(f),h=n(f),l=a(l,u,h);return s(l)},"getDistance"),Q1={euclidean:o(function(e,r,n){return e>=2?_b(e,r,n,0,Upe,fYe):_b(e,r,n,0,Vpe)},"euclidean"),squaredEuclidean:o(function(e,r,n){return _b(e,r,n,0,Upe)},"squaredEuclidean"),manhattan:o(function(e,r,n){return _b(e,r,n,0,Vpe)},"manhattan"),max:o(function(e,r,n){return _b(e,r,n,-1/0,dYe)},"max")};Q1["squared-euclidean"]=Q1.squaredEuclidean;Q1.squaredeuclidean=Q1.squaredEuclidean;o(IS,"clusteringDistance");pYe=la({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),oB=o(function(e){return pYe(e)},"setOptions"),kS=o(function(e,r,n,i,a){var s=a!=="kMedoids",l=s?function(d){return n[d]}:function(d){return i[d](n)},u=o(function(p){return i[p](r)},"getQ"),h=n,f=r;return IS(e,i.length,l,u,h,f)},"getDist"),kP=o(function(e,r,n){for(var i=n.length,a=new Array(i),s=new Array(i),l=new Array(r),u=null,h=0;h<i;h++)a[h]=e.min(n[h]).value,s[h]=e.max(n[h]).value;for(var f=0;f<r;f++){u=[];for(var d=0;d<i;d++)u[d]=Math.random()*(s[d]-a[d])+a[d];l[f]=u}return l},"randomCentroids"),kme=o(function(e,r,n,i,a){for(var s=1/0,l=0,u=0;u<r.length;u++){var h=kS(n,e,r[u],i,a);h<s&&(s=h,l=u)}return l},"classify"),Eme=o(function(e,r,n){for(var i=[],a=null,s=0;s<r.length;s++)a=r[s],n[a.id()]===e&&i.push(a);return i},"buildCluster"),mYe=o(function(e,r,n){return Math.abs(r-e)<=n},"haveValuesConverged"),gYe=o(function(e,r,n){for(var i=0;i<e.length;i++)for(var a=0;a<e[i].length;a++){var s=Math.abs(e[i][a]-r[i][a]);if(s>n)return!1}return!0},"haveMatricesConverged"),yYe=o(function(e,r,n){for(var i=0;i<n;i++)if(e===r[i])return!0;return!1},"seenBefore"),Hpe=o(function(e,r){var n=new Array(r);if(e.length<50)for(var i=0;i<r;i++){for(var a=e[Math.floor(Math.random()*e.length)];yYe(a,n,i);)a=e[Math.floor(Math.random()*e.length)];n[i]=a}else for(var s=0;s<r;s++)n[s]=e[Math.floor(Math.random()*e.length)];return n},"randomMedoids"),Wpe=o(function(e,r,n){for(var i=0,a=0;a<r.length;a++)i+=kS("manhattan",r[a],e,n,"kMedoids");return i},"findCost"),vYe=o(function(e){var r=this.cy(),n=this.nodes(),i=null,a=oB(e),s=new Array(a.k),l={},u;a.testMode?typeof a.testCentroids=="number"?(a.testCentroids,u=kP(n,a.k,a.attributes)):Wi(a.testCentroids)==="object"?u=a.testCentroids:u=kP(n,a.k,a.attributes):u=kP(n,a.k,a.attributes);for(var h=!0,f=0;h&&f<a.maxIterations;){for(var d=0;d<n.length;d++)i=n[d],l[i.id()]=kme(i,u,a.distance,a.attributes,"kMeans");h=!1;for(var p=0;p<a.k;p++){var m=Eme(p,n,l);if(m.length!==0){for(var g=a.attributes.length,y=u[p],v=new Array(g),x=new Array(g),b=0;b<g;b++){x[b]=0;for(var w=0;w<m.length;w++)i=m[w],x[b]+=a.attributes[b](i);v[b]=x[b]/m.length,mYe(v[b],y[b],a.sensitivityThreshold)||(h=!0)}u[p]=v,s[p]=r.collection(m)}}f++}return s},"kMeans"),xYe=o(function(e){var r=this.cy(),n=this.nodes(),i=null,a=oB(e),s=new Array(a.k),l,u={},h,f=new Array(a.k);a.testMode?typeof a.testCentroids=="number"||(Wi(a.testCentroids)==="object"?l=a.testCentroids:l=Hpe(n,a.k)):l=Hpe(n,a.k);for(var d=!0,p=0;d&&p<a.maxIterations;){for(var m=0;m<n.length;m++)i=n[m],u[i.id()]=kme(i,l,a.distance,a.attributes,"kMedoids");d=!1;for(var g=0;g<l.length;g++){var y=Eme(g,n,u);if(y.length!==0){f[g]=Wpe(l[g],y,a.attributes);for(var v=0;v<y.length;v++)h=Wpe(y[v],y,a.attributes),h<f[g]&&(f[g]=h,l[g]=y[v],d=!0);s[g]=r.collection(y)}}p++}return s},"kMedoids"),bYe=o(function(e,r,n,i,a){for(var s,l,u=0;u<r.length;u++)for(var h=0;h<e.length;h++)i[u][h]=Math.pow(n[u][h],a.m);for(var f=0;f<e.length;f++)for(var d=0;d<a.attributes.length;d++){s=0,l=0;for(var p=0;p<r.length;p++)s+=i[p][f]*a.attributes[d](r[p]),l+=i[p][f];e[f][d]=s/l}},"updateCentroids"),wYe=o(function(e,r,n,i,a){for(var s=0;s<e.length;s++)r[s]=e[s].slice();for(var l,u,h,f=2/(a.m-1),d=0;d<n.length;d++)for(var p=0;p<i.length;p++){l=0;for(var m=0;m<n.length;m++)u=kS(a.distance,i[p],n[d],a.attributes,"cmeans"),h=kS(a.distance,i[p],n[m],a.attributes,"cmeans"),l+=Math.pow(u/h,f);e[p][d]=1/l}},"updateMembership"),TYe=o(function(e,r,n,i){for(var a=new Array(n.k),s=0;s<a.length;s++)a[s]=[];for(var l,u,h=0;h<r.length;h++){l=-1/0,u=-1;for(var f=0;f<r[0].length;f++)r[h][f]>l&&(l=r[h][f],u=f);a[u].push(e[h])}for(var d=0;d<a.length;d++)a[d]=i.collection(a[d]);return a},"assign"),qpe=o(function(e){var r=this.cy(),n=this.nodes(),i=oB(e),a,s,l,u,h;u=new Array(n.length);for(var f=0;f<n.length;f++)u[f]=new Array(i.k);l=new Array(n.length);for(var d=0;d<n.length;d++)l[d]=new Array(i.k);for(var p=0;p<n.length;p++){for(var m=0,g=0;g<i.k;g++)l[p][g]=Math.random(),m+=l[p][g];for(var y=0;y<i.k;y++)l[p][y]=l[p][y]/m}s=new Array(i.k);for(var v=0;v<i.k;v++)s[v]=new Array(i.attributes.length);h=new Array(n.length);for(var x=0;x<n.length;x++)h[x]=new Array(i.k);for(var b=!0,w=0;b&&w<i.maxIterations;)b=!1,bYe(s,n,l,h,i),wYe(l,u,s,n,i),gYe(l,u,i.sensitivityThreshold)||(b=!0),w++;return a=TYe(n,l,i,r),{clusters:a,degreeOfMembership:l}},"fuzzyCMeans"),kYe={kMeans:vYe,kMedoids:xYe,fuzzyCMeans:qpe,fcm:qpe},EYe=la({distance:"euclidean",linkage:"min",mode:"threshold",threshold:1/0,addDendrogram:!1,dendrogramDepth:0,attributes:[]}),SYe={single:"min",complete:"max"},CYe=o(function(e){var r=EYe(e),n=SYe[r.linkage];return n!=null&&(r.linkage=n),r},"setOptions"),Ype=o(function(e,r,n,i,a){for(var s=0,l=1/0,u,h=a.attributes,f=o(function(_,I){return IS(a.distance,h.length,function(D){return h[D](_)},function(D){return h[D](I)},_,I)},"getDist"),d=0;d<e.length;d++){var p=e[d].key,m=n[p][i[p]];m<l&&(s=p,l=m)}if(a.mode==="threshold"&&l>=a.threshold||a.mode==="dendrogram"&&e.length===1)return!1;var g=r[s],y=r[i[s]],v;a.mode==="dendrogram"?v={left:g,right:y,key:g.key}:v={value:g.value.concat(y.value),key:g.key},e[g.index]=v,e.splice(y.index,1),r[g.key]=v;for(var x=0;x<e.length;x++){var b=e[x];g.key===b.key?u=1/0:a.linkage==="min"?(u=n[g.key][b.key],n[g.key][b.key]>n[y.key][b.key]&&(u=n[y.key][b.key])):a.linkage==="max"?(u=n[g.key][b.key],n[g.key][b.key]<n[y.key][b.key]&&(u=n[y.key][b.key])):a.linkage==="mean"?u=(n[g.key][b.key]*g.size+n[y.key][b.key]*y.size)/(g.size+y.size):a.mode==="dendrogram"?u=f(b.value,g.value):u=f(b.value[0],g.value[0]),n[g.key][b.key]=n[b.key][g.key]=u}for(var w=0;w<e.length;w++){var C=e[w].key;if(i[C]===g.key||i[C]===y.key){for(var T=C,E=0;E<e.length;E++){var A=e[E].key;n[C][A]<n[C][T]&&(T=A)}i[C]=T}e[w].index=w}return g.key=y.key=g.index=y.index=null,!0},"mergeClosest"),Z6=o(function t(e,r,n){e&&(e.value?r.push(e.value):(e.left&&t(e.left,r),e.right&&t(e.right,r)))},"getAllChildren"),AYe=o(function t(e,r){if(!e)return"";if(e.left&&e.right){var n=t(e.left,r),i=t(e.right,r),a=r.add({group:"nodes",data:{id:n+","+i}});return r.add({group:"edges",data:{source:n,target:a.id()}}),r.add({group:"edges",data:{source:i,target:a.id()}}),a.id()}else if(e.value)return e.value.id()},"buildDendrogram"),_Ye=o(function t(e,r,n){if(!e)return[];var i=[],a=[],s=[];return r===0?(e.left&&Z6(e.left,i),e.right&&Z6(e.right,a),s=i.concat(a),[n.collection(s)]):r===1?e.value?[n.collection(e.value)]:(e.left&&Z6(e.left,i),e.right&&Z6(e.right,a),[n.collection(i),n.collection(a)]):e.value?[n.collection(e.value)]:(e.left&&(i=t(e.left,r-1,n)),e.right&&(a=t(e.right,r-1,n)),i.concat(a))},"buildClustersFromTree"),Xpe=o(function(e){for(var r=this.cy(),n=this.nodes(),i=CYe(e),a=i.attributes,s=o(function(w,C){return IS(i.distance,a.length,function(T){return a[T](w)},function(T){return a[T](C)},w,C)},"getDist"),l=[],u=[],h=[],f=[],d=0;d<n.length;d++){var p={value:i.mode==="dendrogram"?n[d]:[n[d]],key:d,index:d};l[d]=p,f[d]=p,u[d]=[],h[d]=0}for(var m=0;m<l.length;m++)for(var g=0;g<=m;g++){var y=void 0;i.mode==="dendrogram"?y=m===g?1/0:s(l[m].value,l[g].value):y=m===g?1/0:s(l[m].value[0],l[g].value[0]),u[m][g]=y,u[g][m]=y,y<u[m][h[m]]&&(h[m]=g)}for(var v=Ype(l,f,u,h,i);v;)v=Ype(l,f,u,h,i);var x;return i.mode==="dendrogram"?(x=_Ye(l[0],i.dendrogramDepth,r),i.addDendrogram&&AYe(l[0],r)):(x=new Array(l.length),l.forEach(function(b,w){b.key=b.index=null,x[w]=r.collection(b.value)})),x},"hierarchicalClustering"),DYe={hierarchicalClustering:Xpe,hca:Xpe},LYe=la({distance:"euclidean",preference:"median",damping:.8,maxIterations:1e3,minIterations:100,attributes:[]}),RYe=o(function(e){var r=e.damping,n=e.preference;.5<=r&&r<1||ai("Damping must range on [0.5, 1). Got: ".concat(r));var i=["median","mean","min","max"];return i.some(function(a){return a===n})||Ct(n)||ai("Preference must be one of [".concat(i.map(function(a){return"'".concat(a,"'")}).join(", "),"] or a number. Got: ").concat(n)),LYe(e)},"setOptions"),NYe=o(function(e,r,n,i){var a=o(function(l,u){return i[u](l)},"attr");return-IS(e,i.length,function(s){return a(r,s)},function(s){return a(n,s)},r,n)},"getSimilarity"),MYe=o(function(e,r){var n=null;return r==="median"?n=Rqe(e):r==="mean"?n=Lqe(e):r==="min"?n=_qe(e):r==="max"?n=Dqe(e):n=r,n},"getPreference"),IYe=o(function(e,r,n){for(var i=[],a=0;a<e;a++)r[a*e+a]+n[a*e+a]>0&&i.push(a);return i},"findExemplars"),jpe=o(function(e,r,n){for(var i=[],a=0;a<e;a++){for(var s=-1,l=-1/0,u=0;u<n.length;u++){var h=n[u];r[a*e+h]>l&&(s=h,l=r[a*e+h])}s>0&&i.push(s)}for(var f=0;f<n.length;f++)i[n[f]]=n[f];return i},"assignClusters"),OYe=o(function(e,r,n){for(var i=jpe(e,r,n),a=0;a<n.length;a++){for(var s=[],l=0;l<i.length;l++)i[l]===n[a]&&s.push(l);for(var u=-1,h=-1/0,f=0;f<s.length;f++){for(var d=0,p=0;p<s.length;p++)d+=r[s[p]*e+s[f]];d>h&&(u=f,h=d)}n[a]=s[u]}return i=jpe(e,r,n),i},"assign"),Kpe=o(function(e){for(var r=this.cy(),n=this.nodes(),i=RYe(e),a={},s=0;s<n.length;s++)a[n[s].id()]=s;var l,u,h,f,d,p;l=n.length,u=l*l,h=new Array(u);for(var m=0;m<u;m++)h[m]=-1/0;for(var g=0;g<l;g++)for(var y=0;y<l;y++)g!==y&&(h[g*l+y]=NYe(i.distance,n[g],n[y],i.attributes));f=MYe(h,i.preference);for(var v=0;v<l;v++)h[v*l+v]=f;d=new Array(u);for(var x=0;x<u;x++)d[x]=0;p=new Array(u);for(var b=0;b<u;b++)p[b]=0;for(var w=new Array(l),C=new Array(l),T=new Array(l),E=0;E<l;E++)w[E]=0,C[E]=0,T[E]=0;for(var A=new Array(l*i.minIterations),S=0;S<A.length;S++)A[S]=0;var _;for(_=0;_<i.maxIterations;_++){for(var I=0;I<l;I++){for(var D=-1/0,k=-1/0,L=-1,R=0,O=0;O<l;O++)w[O]=d[I*l+O],R=p[I*l+O]+h[I*l+O],R>=D?(k=D,D=R,L=O):R>k&&(k=R);for(var M=0;M<l;M++)d[I*l+M]=(1-i.damping)*(h[I*l+M]-D)+i.damping*w[M];d[I*l+L]=(1-i.damping)*(h[I*l+L]-k)+i.damping*w[L]}for(var B=0;B<l;B++){for(var F=0,P=0;P<l;P++)w[P]=p[P*l+B],C[P]=Math.max(0,d[P*l+B]),F+=C[P];F-=C[B],C[B]=d[B*l+B],F+=C[B];for(var z=0;z<l;z++)p[z*l+B]=(1-i.damping)*Math.min(0,F-C[z])+i.damping*w[z];p[B*l+B]=(1-i.damping)*(F-C[B])+i.damping*w[B]}for(var $=0,H=0;H<l;H++){var Q=p[H*l+H]+d[H*l+H]>0?1:0;A[_%i.minIterations*l+H]=Q,$+=Q}if($>0&&(_>=i.minIterations-1||_==i.maxIterations-1)){for(var j=0,ie=0;ie<l;ie++){T[ie]=0;for(var ne=0;ne<i.minIterations;ne++)T[ie]+=A[ne*l+ie];(T[ie]===0||T[ie]===i.minIterations)&&j++}if(j===l)break}}for(var le=IYe(l,d,p),he=OYe(l,h,le),K={},X=0;X<le.length;X++)K[le[X]]=[];for(var te=0;te<n.length;te++){var J=a[n[te].id()],se=he[J];se!=null&&K[se].push(n[te])}for(var ue=new Array(le.length),Z=0;Z<le.length;Z++)ue[Z]=r.collection(K[le[Z]]);return ue},"affinityPropagation"),PYe={affinityPropagation:Kpe,ap:Kpe},BYe=la({root:void 0,directed:!1}),FYe={hierholzer:o(function(e){if(!Ur(e)){var r=arguments;e={root:r[0],directed:r[1]}}var n=BYe(e),i=n.root,a=n.directed,s=this,l=!1,u,h,f;i&&(f=Zt(i)?this.filter(i)[0].id():i[0].id());var d={},p={};a?s.forEach(function(b){var w=b.id();if(b.isNode()){var C=b.indegree(!0),T=b.outdegree(!0),E=C-T,A=T-C;E==1?u?l=!0:u=w:A==1?h?l=!0:h=w:(A>1||E>1)&&(l=!0),d[w]=[],b.outgoers().forEach(function(S){S.isEdge()&&d[w].push(S.id())})}else p[w]=[void 0,b.target().id()]}):s.forEach(function(b){var w=b.id();if(b.isNode()){var C=b.degree(!0);C%2&&(u?h?l=!0:h=w:u=w),d[w]=[],b.connectedEdges().forEach(function(T){return d[w].push(T.id())})}else p[w]=[b.source().id(),b.target().id()]});var m={found:!1,trail:void 0};if(l)return m;if(h&&u)if(a){if(f&&h!=f)return m;f=h}else{if(f&&h!=f&&u!=f)return m;f||(f=h)}else f||(f=s[0].id());var g=o(function(w){for(var C=w,T=[w],E,A,S;d[C].length;)E=d[C].shift(),A=p[E][0],S=p[E][1],C!=S?(d[S]=d[S].filter(function(_){return _!=E}),C=S):!a&&C!=A&&(d[A]=d[A].filter(function(_){return _!=E}),C=A),T.unshift(E),T.unshift(C);return T},"walk"),y=[],v=[];for(v=g(f);v.length!=1;)d[v[0]].length==0?(y.unshift(s.getElementById(v.shift())),y.unshift(s.getElementById(v.shift()))):v=g(v.shift()).concat(v);y.unshift(s.getElementById(v.shift()));for(var x in d)if(d[x].length)return m;return m.found=!0,m.trail=this.spawn(y,!0),m},"hierholzer")},J6=o(function(){var e=this,r={},n=0,i=0,a=[],s=[],l={},u=o(function(p,m){for(var g=s.length-1,y=[],v=e.spawn();s[g].x!=p||s[g].y!=m;)y.push(s.pop().edge),g--;y.push(s.pop().edge),y.forEach(function(x){var b=x.connectedNodes().intersection(e);v.merge(x),b.forEach(function(w){var C=w.id(),T=w.connectedEdges().intersection(e);v.merge(w),r[C].cutVertex?v.merge(T.filter(function(E){return E.isLoop()})):v.merge(T)})}),a.push(v)},"buildComponent"),h=o(function d(p,m,g){p===g&&(i+=1),r[m]={id:n,low:n++,cutVertex:!1};var y=e.getElementById(m).connectedEdges().intersection(e);if(y.size()===0)a.push(e.spawn(e.getElementById(m)));else{var v,x,b,w;y.forEach(function(C){v=C.source().id(),x=C.target().id(),b=v===m?x:v,b!==g&&(w=C.id(),l[w]||(l[w]=!0,s.push({x:m,y:b,edge:C})),b in r?r[m].low=Math.min(r[m].low,r[b].id):(d(p,b,m),r[m].low=Math.min(r[m].low,r[b].low),r[m].id<=r[b].low&&(r[m].cutVertex=!0,u(m,b))))})}},"biconnectedSearch");e.forEach(function(d){if(d.isNode()){var p=d.id();p in r||(i=0,h(p,p),r[p].cutVertex=i>1)}});var f=Object.keys(r).filter(function(d){return r[d].cutVertex}).map(function(d){return e.getElementById(d)});return{cut:e.spawn(f),components:a}},"hopcroftTarjanBiconnected"),$Ye={hopcroftTarjanBiconnected:J6,htbc:J6,htb:J6,hopcroftTarjanBiconnectedComponents:J6},eS=o(function(){var e=this,r={},n=0,i=[],a=[],s=e.spawn(e),l=o(function u(h){a.push(h),r[h]={index:n,low:n++,explored:!1};var f=e.getElementById(h).connectedEdges().intersection(e);if(f.forEach(function(y){var v=y.target().id();v!==h&&(v in r||u(v),r[v].explored||(r[h].low=Math.min(r[h].low,r[v].low)))}),r[h].index===r[h].low){for(var d=e.spawn();;){var p=a.pop();if(d.merge(e.getElementById(p)),r[p].low=r[h].index,r[p].explored=!0,p===h)break}var m=d.edgesWith(d),g=d.merge(m);i.push(g),s=s.difference(g)}},"stronglyConnectedSearch");return e.forEach(function(u){if(u.isNode()){var h=u.id();h in r||l(h)}}),{cut:s,components:i}},"tarjanStronglyConnected"),zYe={tarjanStronglyConnected:eS,tsc:eS,tscc:eS,tarjanStronglyConnectedComponents:eS},Sme={};[qb,gqe,yqe,xqe,wqe,kqe,Cqe,Qqe,q1,Y1,FP,uYe,kYe,DYe,PYe,FYe,$Ye,zYe].forEach(function(t){rr(Sme,t)});Cme=0,Ame=1,_me=2,Ju=o(function t(e){if(!(this instanceof t))return new t(e);this.id="Thenable/1.0.7",this.state=Cme,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof e=="function"&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))},"api");Ju.prototype={fulfill:o(function(e){return Qpe(this,Ame,"fulfillValue",e)},"fulfill"),reject:o(function(e){return Qpe(this,_me,"rejectReason",e)},"reject"),then:o(function(e,r){var n=this,i=new Ju;return n.onFulfilled.push(Jpe(e,i,"fulfill")),n.onRejected.push(Jpe(r,i,"reject")),Dme(n),i.proxy},"then")};Qpe=o(function(e,r,n,i){return e.state===Cme&&(e.state=r,e[n]=i,Dme(e)),e},"deliver"),Dme=o(function(e){e.state===Ame?Zpe(e,"onFulfilled",e.fulfillValue):e.state===_me&&Zpe(e,"onRejected",e.rejectReason)},"execute"),Zpe=o(function(e,r,n){if(e[r].length!==0){var i=e[r];e[r]=[];var a=o(function(){for(var l=0;l<i.length;l++)i[l](n)},"func");typeof setImmediate=="function"?setImmediate(a):setTimeout(a,0)}},"execute_handlers"),Jpe=o(function(e,r,n){return function(i){if(typeof e!="function")r[n].call(r,i);else{var a;try{a=e(i)}catch(s){r.reject(s);return}GYe(r,a)}}},"resolver"),GYe=o(function t(e,r){if(e===r||e.proxy===r){e.reject(new TypeError("cannot resolve promise with itself"));return}var n;if(Wi(r)==="object"&&r!==null||typeof r=="function")try{n=r.then}catch(a){e.reject(a);return}if(typeof n=="function"){var i=!1;try{n.call(r,function(a){i||(i=!0,a===r?e.reject(new TypeError("circular thenable chain")):t(e,a))},function(a){i||(i=!0,e.reject(a))})}catch(a){i||e.reject(a)}return}e.fulfill(r)},"resolve");Ju.all=function(t){return new Ju(function(e,r){for(var n=new Array(t.length),i=0,a=o(function(u,h){n[u]=h,i++,i===t.length&&e(n)},"fulfill"),s=0;s<t.length;s++)(function(l){var u=t[l],h=u!=null&&u.then!=null;if(h)u.then(function(d){a(l,d)},function(d){r(d)});else{var f=u;a(l,f)}})(s)})};Ju.resolve=function(t){return new Ju(function(e,r){e(t)})};Ju.reject=function(t){return new Ju(function(e,r){r(t)})};ey=typeof Promise<"u"?Promise:Ju,$P=o(function(e,r,n){var i=JP(e),a=!i,s=this._private=rr({duration:1e3},r,n);if(s.target=e,s.style=s.style||s.css,s.started=!1,s.playing=!1,s.hooked=!1,s.applying=!1,s.progress=0,s.completes=[],s.frames=[],s.complete&&si(s.complete)&&s.completes.push(s.complete),a){var l=e.position();s.startPosition=s.startPosition||{x:l.x,y:l.y},s.startStyle=s.startStyle||e.cy().style().getAnimationStartStyle(e,s.style)}if(i){var u=e.pan();s.startPan={x:u.x,y:u.y},s.startZoom=e.zoom()}this.length=1,this[0]=this},"Animation"),Up=$P.prototype;rr(Up,{instanceString:o(function(){return"animation"},"instanceString"),hook:o(function(){var e=this._private;if(!e.hooked){var r,n=e.target._private.animation;e.queue?r=n.queue:r=n.current,r.push(this),go(e.target)&&e.target.cy().addToAnimationPool(e.target),e.hooked=!0}return this},"hook"),play:o(function(){var e=this._private;return e.progress===1&&(e.progress=0),e.playing=!0,e.started=!1,e.stopped=!1,this.hook(),this},"play"),playing:o(function(){return this._private.playing},"playing"),apply:o(function(){var e=this._private;return e.applying=!0,e.started=!1,e.stopped=!1,this.hook(),this},"apply"),applying:o(function(){return this._private.applying},"applying"),pause:o(function(){var e=this._private;return e.playing=!1,e.started=!1,this},"pause"),stop:o(function(){var e=this._private;return e.playing=!1,e.started=!1,e.stopped=!0,this},"stop"),rewind:o(function(){return this.progress(0)},"rewind"),fastforward:o(function(){return this.progress(1)},"fastforward"),time:o(function(e){var r=this._private;return e===void 0?r.progress*r.duration:this.progress(e/r.duration)},"time"),progress:o(function(e){var r=this._private,n=r.playing;return e===void 0?r.progress:(n&&this.pause(),r.progress=e,r.started=!1,n&&this.play(),this)},"progress"),completed:o(function(){return this._private.progress===1},"completed"),reverse:o(function(){var e=this._private,r=e.playing;r&&this.pause(),e.progress=1-e.progress,e.started=!1;var n=o(function(h,f){var d=e[h];d!=null&&(e[h]=e[f],e[f]=d)},"swap");if(n("zoom","startZoom"),n("pan","startPan"),n("position","startPosition"),e.style)for(var i=0;i<e.style.length;i++){var a=e.style[i],s=a.name,l=e.startStyle[s];e.startStyle[s]=a,e.style[i]=l}return r&&this.play(),this},"reverse"),promise:o(function(e){var r=this._private,n;switch(e){case"frame":n=r.frames;break;default:case"complete":case"completed":n=r.completes}return new ey(function(i,a){n.push(function(){i()})})},"promise")});Up.complete=Up.completed;Up.run=Up.play;Up.running=Up.playing;VYe={animated:o(function(){return o(function(){var r=this,n=r.length!==void 0,i=n?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return!1;var s=i[0];if(s)return s._private.animation.current.length>0},"animatedImpl")},"animated"),clearQueue:o(function(){return o(function(){var r=this,n=r.length!==void 0,i=n?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return this;for(var s=0;s<i.length;s++){var l=i[s];l._private.animation.queue=[]}return this},"clearQueueImpl")},"clearQueue"),delay:o(function(){return o(function(r,n){var i=this._private.cy||this;return i.styleEnabled()?this.animate({delay:r,duration:r,complete:n}):this},"delayImpl")},"delay"),delayAnimation:o(function(){return o(function(r,n){var i=this._private.cy||this;return i.styleEnabled()?this.animation({delay:r,duration:r,complete:n}):this},"delayAnimationImpl")},"delayAnimation"),animation:o(function(){return o(function(r,n){var i=this,a=i.length!==void 0,s=a?i:[i],l=this._private.cy||this,u=!a,h=!u;if(!l.styleEnabled())return this;var f=l.style();r=rr({},r,n);var d=Object.keys(r).length===0;if(d)return new $P(s[0],r);switch(r.duration===void 0&&(r.duration=400),r.duration){case"slow":r.duration=600;break;case"fast":r.duration=200;break}if(h&&(r.style=f.getPropsList(r.style||r.css),r.css=void 0),h&&r.renderedPosition!=null){var p=r.renderedPosition,m=l.pan(),g=l.zoom();r.position=pme(p,g,m)}if(u&&r.panBy!=null){var y=r.panBy,v=l.pan();r.pan={x:v.x+y.x,y:v.y+y.y}}var x=r.center||r.centre;if(u&&x!=null){var b=l.getCenterPan(x.eles,r.zoom);b!=null&&(r.pan=b)}if(u&&r.fit!=null){var w=r.fit,C=l.getFitViewport(w.eles||w.boundingBox,w.padding);C!=null&&(r.pan=C.pan,r.zoom=C.zoom)}if(u&&Ur(r.zoom)){var T=l.getZoomedViewport(r.zoom);T!=null?(T.zoomed&&(r.zoom=T.zoom),T.panned&&(r.pan=T.pan)):r.zoom=null}return new $P(s[0],r)},"animationImpl")},"animation"),animate:o(function(){return o(function(r,n){var i=this,a=i.length!==void 0,s=a?i:[i],l=this._private.cy||this;if(!l.styleEnabled())return this;n&&(r=rr({},r,n));for(var u=0;u<s.length;u++){var h=s[u],f=h.animated()&&(r.queue===void 0||r.queue),d=h.animation(r,f?{queue:!0}:void 0);d.play()}return this},"animateImpl")},"animate"),stop:o(function(){return o(function(r,n){var i=this,a=i.length!==void 0,s=a?i:[i],l=this._private.cy||this;if(!l.styleEnabled())return this;for(var u=0;u<s.length;u++){for(var h=s[u],f=h._private,d=f.animation.current,p=0;p<d.length;p++){var m=d[p],g=m._private;n&&(g.duration=0)}r&&(f.animation.queue=[]),n||(f.animation.current=[])}return l.notify("draw"),this},"stopImpl")},"stop")},UYe=Array.isArray,OS=UYe,HYe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,WYe=/^\w*$/;o(qYe,"isKey");YYe=qYe,XYe="[object AsyncFunction]",jYe="[object Function]",KYe="[object GeneratorFunction]",QYe="[object Proxy]";o(ZYe,"isFunction");JYe=ZYe,eXe=RS["__core-js_shared__"],EP=eXe,e0e=function(){var t=/[^.]+$/.exec(EP&&EP.keys&&EP.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();o(tXe,"isMasked");rXe=tXe,nXe=Function.prototype,iXe=nXe.toString;o(aXe,"toSource");sXe=aXe,oXe=/[\\^$.*+?()[\]{}|]/g,lXe=/^\[object .+?Constructor\]$/,cXe=Function.prototype,uXe=Object.prototype,hXe=cXe.toString,fXe=uXe.hasOwnProperty,dXe=RegExp("^"+hXe.call(fXe).replace(oXe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(pXe,"baseIsNative");mXe=pXe;o(gXe,"getValue$1");yXe=gXe;o(vXe,"getNative");lB=vXe,xXe=lB(Object,"create"),jb=xXe;o(bXe,"hashClear");wXe=bXe;o(TXe,"hashDelete");kXe=TXe,EXe="__lodash_hash_undefined__",SXe=Object.prototype,CXe=SXe.hasOwnProperty;o(AXe,"hashGet");_Xe=AXe,DXe=Object.prototype,LXe=DXe.hasOwnProperty;o(RXe,"hashHas");NXe=RXe,MXe="__lodash_hash_undefined__";o(IXe,"hashSet");OXe=IXe;o(ty,"Hash");ty.prototype.clear=wXe;ty.prototype.delete=kXe;ty.prototype.get=_Xe;ty.prototype.has=NXe;ty.prototype.set=OXe;t0e=ty;o(PXe,"listCacheClear");BXe=PXe;o(FXe,"eq");Lme=FXe;o($Xe,"assocIndexOf");PS=$Xe,zXe=Array.prototype,GXe=zXe.splice;o(VXe,"listCacheDelete");UXe=VXe;o(HXe,"listCacheGet");WXe=HXe;o(qXe,"listCacheHas");YXe=qXe;o(XXe,"listCacheSet");jXe=XXe;o(ry,"ListCache");ry.prototype.clear=BXe;ry.prototype.delete=UXe;ry.prototype.get=WXe;ry.prototype.has=YXe;ry.prototype.set=jXe;KXe=ry,QXe=lB(RS,"Map"),ZXe=QXe;o(JXe,"mapCacheClear");eje=JXe;o(tje,"isKeyable");rje=tje;o(nje,"getMapData");BS=nje;o(ije,"mapCacheDelete");aje=ije;o(sje,"mapCacheGet");oje=sje;o(lje,"mapCacheHas");cje=lje;o(uje,"mapCacheSet");hje=uje;o(ny,"MapCache");ny.prototype.clear=eje;ny.prototype.delete=aje;ny.prototype.get=oje;ny.prototype.has=cje;ny.prototype.set=hje;Rme=ny,fje="Expected a function";o(cB,"memoize");cB.Cache=Rme;dje=cB,pje=500;o(mje,"memoizeCapped");gje=mje,yje=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,vje=/\\(\\)?/g,xje=gje(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(yje,function(r,n,i,a){e.push(i?a.replace(vje,"$1"):n||r)}),e}),Nme=xje;o(bje,"arrayMap");Mme=bje,wje=1/0,r0e=j1?j1.prototype:void 0,n0e=r0e?r0e.toString:void 0;o(Ime,"baseToString");Tje=Ime;o(kje,"toString$1");Ome=kje;o(Eje,"castPath");Pme=Eje,Sje=1/0;o(Cje,"toKey");uB=Cje;o(Aje,"baseGet");_je=Aje;o(Dje,"get");Lje=Dje,Rje=function(){try{var t=lB(Object,"defineProperty");return t({},"",{}),t}catch{}}(),i0e=Rje;o(Nje,"baseAssignValue");Mje=Nje,Ije=Object.prototype,Oje=Ije.hasOwnProperty;o(Pje,"assignValue");Bje=Pje,Fje=9007199254740991,$je=/^(?:0|[1-9]\d*)$/;o(zje,"isIndex");Gje=zje;o(Vje,"baseSet");Uje=Vje;o(Hje,"set");Wje=Hje;o(qje,"copyArray");Yje=qje;o(Xje,"toPath");jje=Xje,Kje={data:o(function(e){var r={field:"data",bindingEvent:"data",allowBinding:!1,allowSetting:!1,allowGetting:!1,settingEvent:"data",settingTriggersEvent:!1,triggerFnName:"trigger",immutableKeys:{},updateStyle:!1,beforeGet:o(function(i){},"beforeGet"),beforeSet:o(function(i,a){},"beforeSet"),onSet:o(function(i){},"onSet"),canSet:o(function(i){return!0},"canSet")};return e=rr({},r,e),o(function(i,a){var s=e,l=this,u=l.length!==void 0,h=u?l:[l],f=u?l[0]:l;if(Zt(i)){var d=i.indexOf(".")!==-1,p=d&&jje(i);if(s.allowGetting&&a===void 0){var m;return f&&(s.beforeGet(f),p&&f._private[s.field][i]===void 0?m=Lje(f._private[s.field],p):m=f._private[s.field][i]),m}else if(s.allowSetting&&a!==void 0){var g=!s.immutableKeys[i];if(g){var y=X0e({},i,a);s.beforeSet(l,y);for(var v=0,x=h.length;v<x;v++){var b=h[v];s.canSet(b)&&(p&&f._private[s.field][i]===void 0?Wje(b._private[s.field],p,a):b._private[s.field][i]=a)}s.updateStyle&&l.updateStyle(),s.onSet(l),s.settingTriggersEvent&&l[s.triggerFnName](s.settingEvent)}}}else if(s.allowSetting&&Ur(i)){var w=i,C,T,E=Object.keys(w);s.beforeSet(l,w);for(var A=0;A<E.length;A++){C=E[A],T=w[C];var S=!s.immutableKeys[C];if(S)for(var _=0;_<h.length;_++){var I=h[_];s.canSet(I)&&(I._private[s.field][C]=T)}}s.updateStyle&&l.updateStyle(),s.onSet(l),s.settingTriggersEvent&&l[s.triggerFnName](s.settingEvent)}else if(s.allowBinding&&si(i)){var D=i;l.on(s.bindingEvent,D)}else if(s.allowGetting&&i===void 0){var k;return f&&(s.beforeGet(f),k=f._private[s.field]),k}return l},"dataImpl")},"data"),removeData:o(function(e){var r={field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!1,immutableKeys:{}};return e=rr({},r,e),o(function(i){var a=e,s=this,l=s.length!==void 0,u=l?s:[s];if(Zt(i)){for(var h=i.split(/\s+/),f=h.length,d=0;d<f;d++){var p=h[d];if(!Af(p)){var m=!a.immutableKeys[p];if(m)for(var g=0,y=u.length;g<y;g++)u[g]._private[a.field][p]=void 0}}a.triggerEvent&&s[a.triggerFnName](a.event)}else if(i===void 0){for(var v=0,x=u.length;v<x;v++)for(var b=u[v]._private[a.field],w=Object.keys(b),C=0;C<w.length;C++){var T=w[C],E=!a.immutableKeys[T];E&&(b[T]=void 0)}a.triggerEvent&&s[a.triggerFnName](a.event)}return s},"removeDataImpl")},"removeData")},Qje={eventAliasesOn:o(function(e){var r=e;r.addListener=r.listen=r.bind=r.on,r.unlisten=r.unbind=r.off=r.removeListener,r.trigger=r.emit,r.pon=r.promiseOn=function(n,i){var a=this,s=Array.prototype.slice.call(arguments,0);return new ey(function(l,u){var h=o(function(m){a.off.apply(a,d),l(m)},"callback"),f=s.concat([h]),d=f.concat([]);a.on.apply(a,f)})}},"eventAliasesOn")},cn={};[VYe,Kje,Qje].forEach(function(t){rr(cn,t)});Zje={animate:cn.animate(),animation:cn.animation(),animated:cn.animated(),clearQueue:cn.clearQueue(),delay:cn.delay(),delayAnimation:cn.delayAnimation(),stop:cn.stop()},hS={classes:o(function(e){var r=this;if(e===void 0){var n=[];return r[0]._private.classes.forEach(function(g){return n.push(g)}),n}else En(e)||(e=(e||"").match(/\S+/g)||[]);for(var i=[],a=new J1(e),s=0;s<r.length;s++){for(var l=r[s],u=l._private,h=u.classes,f=!1,d=0;d<e.length;d++){var p=e[d],m=h.has(p);if(!m){f=!0;break}}f||(f=h.size!==e.length),f&&(u.classes=a,i.push(l))}return i.length>0&&this.spawn(i).updateStyle().emit("class"),r},"classes"),addClass:o(function(e){return this.toggleClass(e,!0)},"addClass"),hasClass:o(function(e){var r=this[0];return r!=null&&r._private.classes.has(e)},"hasClass"),toggleClass:o(function(e,r){En(e)||(e=e.match(/\S+/g)||[]);for(var n=this,i=r===void 0,a=[],s=0,l=n.length;s<l;s++)for(var u=n[s],h=u._private.classes,f=!1,d=0;d<e.length;d++){var p=e[d],m=h.has(p),g=!1;r||i&&!m?(h.add(p),g=!0):(!r||i&&m)&&(h.delete(p),g=!0),!f&&g&&(a.push(u),f=!0)}return a.length>0&&this.spawn(a).updateStyle().emit("class"),n},"toggleClass"),removeClass:o(function(e){return this.toggleClass(e,!1)},"removeClass"),flashClass:o(function(e,r){var n=this;if(r==null)r=250;else if(r===0)return n;return n.addClass(e),setTimeout(function(){n.removeClass(e)},r),n},"flashClass")};hS.className=hS.classNames=hS.classes;Vr={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:Hi,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};Vr.variable="(?:[\\w-.]|(?:\\\\"+Vr.metaChar+"))+";Vr.className="(?:[\\w-]|(?:\\\\"+Vr.metaChar+"))+";Vr.value=Vr.string+"|"+Vr.number;Vr.id=Vr.variable;(function(){var t,e,r;for(t=Vr.comparatorOp.split("|"),r=0;r<t.length;r++)e=t[r],Vr.comparatorOp+="|@"+e;for(t=Vr.comparatorOp.split("|"),r=0;r<t.length;r++)e=t[r],!(e.indexOf("!")>=0)&&e!=="="&&(Vr.comparatorOp+="|\\!"+e)})();mn=o(function(){return{checks:[]}},"newQuery"),$t={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},zP=[{selector:":selected",matches:o(function(e){return e.selected()},"matches")},{selector:":unselected",matches:o(function(e){return!e.selected()},"matches")},{selector:":selectable",matches:o(function(e){return e.selectable()},"matches")},{selector:":unselectable",matches:o(function(e){return!e.selectable()},"matches")},{selector:":locked",matches:o(function(e){return e.locked()},"matches")},{selector:":unlocked",matches:o(function(e){return!e.locked()},"matches")},{selector:":visible",matches:o(function(e){return e.visible()},"matches")},{selector:":hidden",matches:o(function(e){return!e.visible()},"matches")},{selector:":transparent",matches:o(function(e){return e.transparent()},"matches")},{selector:":grabbed",matches:o(function(e){return e.grabbed()},"matches")},{selector:":free",matches:o(function(e){return!e.grabbed()},"matches")},{selector:":removed",matches:o(function(e){return e.removed()},"matches")},{selector:":inside",matches:o(function(e){return!e.removed()},"matches")},{selector:":grabbable",matches:o(function(e){return e.grabbable()},"matches")},{selector:":ungrabbable",matches:o(function(e){return!e.grabbable()},"matches")},{selector:":animated",matches:o(function(e){return e.animated()},"matches")},{selector:":unanimated",matches:o(function(e){return!e.animated()},"matches")},{selector:":parent",matches:o(function(e){return e.isParent()},"matches")},{selector:":childless",matches:o(function(e){return e.isChildless()},"matches")},{selector:":child",matches:o(function(e){return e.isChild()},"matches")},{selector:":orphan",matches:o(function(e){return e.isOrphan()},"matches")},{selector:":nonorphan",matches:o(function(e){return e.isChild()},"matches")},{selector:":compound",matches:o(function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()},"matches")},{selector:":loop",matches:o(function(e){return e.isLoop()},"matches")},{selector:":simple",matches:o(function(e){return e.isSimple()},"matches")},{selector:":active",matches:o(function(e){return e.active()},"matches")},{selector:":inactive",matches:o(function(e){return!e.active()},"matches")},{selector:":backgrounding",matches:o(function(e){return e.backgrounding()},"matches")},{selector:":nonbackgrounding",matches:o(function(e){return!e.backgrounding()},"matches")}].sort(function(t,e){return hWe(t.selector,e.selector)}),Jje=function(){for(var t={},e,r=0;r<zP.length;r++)e=zP[r],t[e.selector]=e.matches;return t}(),eKe=o(function(e,r){return Jje[e](r)},"stateSelectorMatches"),tKe="("+zP.map(function(t){return t.selector}).join("|")+")",B1=o(function(e){return e.replace(new RegExp("\\\\("+Vr.metaChar+")","g"),function(r,n){return n})},"cleanMetaChars"),Tf=o(function(e,r,n){e[e.length-1]=n},"replaceLastQuery"),GP=[{name:"group",query:!0,regex:"("+Vr.group+")",populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.GROUP,value:a==="*"?a:a+"s"})},"populate")},{name:"state",query:!0,regex:tKe,populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.STATE,value:a})},"populate")},{name:"id",query:!0,regex:"\\#("+Vr.id+")",populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.ID,value:B1(a)})},"populate")},{name:"className",query:!0,regex:"\\.("+Vr.className+")",populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.CLASS,value:B1(a)})},"populate")},{name:"dataExists",query:!0,regex:"\\[\\s*("+Vr.variable+")\\s*\\]",populate:o(function(e,r,n){var i=_i(n,1),a=i[0];r.checks.push({type:$t.DATA_EXIST,field:B1(a)})},"populate")},{name:"dataCompare",query:!0,regex:"\\[\\s*("+Vr.variable+")\\s*("+Vr.comparatorOp+")\\s*("+Vr.value+")\\s*\\]",populate:o(function(e,r,n){var i=_i(n,3),a=i[0],s=i[1],l=i[2],u=new RegExp("^"+Vr.string+"$").exec(l)!=null;u?l=l.substring(1,l.length-1):l=parseFloat(l),r.checks.push({type:$t.DATA_COMPARE,field:B1(a),operator:s,value:l})},"populate")},{name:"dataBool",query:!0,regex:"\\[\\s*("+Vr.boolOp+")\\s*("+Vr.variable+")\\s*\\]",populate:o(function(e,r,n){var i=_i(n,2),a=i[0],s=i[1];r.checks.push({type:$t.DATA_BOOL,field:B1(s),operator:a})},"populate")},{name:"metaCompare",query:!0,regex:"\\[\\[\\s*("+Vr.meta+")\\s*("+Vr.comparatorOp+")\\s*("+Vr.number+")\\s*\\]\\]",populate:o(function(e,r,n){var i=_i(n,3),a=i[0],s=i[1],l=i[2];r.checks.push({type:$t.META_COMPARE,field:B1(a),operator:s,value:parseFloat(l)})},"populate")},{name:"nextQuery",separator:!0,regex:Vr.separator,populate:o(function(e,r){var n=e.currentSubject,i=e.edgeCount,a=e.compoundCount,s=e[e.length-1];n!=null&&(s.subject=n,e.currentSubject=null),s.edgeCount=i,s.compoundCount=a,e.edgeCount=0,e.compoundCount=0;var l=e[e.length++]=mn();return l},"populate")},{name:"directedEdge",separator:!0,regex:Vr.directedEdge,populate:o(function(e,r){if(e.currentSubject==null){var n=mn(),i=r,a=mn();return n.checks.push({type:$t.DIRECTED_EDGE,source:i,target:a}),Tf(e,r,n),e.edgeCount++,a}else{var s=mn(),l=r,u=mn();return s.checks.push({type:$t.NODE_SOURCE,source:l,target:u}),Tf(e,r,s),e.edgeCount++,u}},"populate")},{name:"undirectedEdge",separator:!0,regex:Vr.undirectedEdge,populate:o(function(e,r){if(e.currentSubject==null){var n=mn(),i=r,a=mn();return n.checks.push({type:$t.UNDIRECTED_EDGE,nodes:[i,a]}),Tf(e,r,n),e.edgeCount++,a}else{var s=mn(),l=r,u=mn();return s.checks.push({type:$t.NODE_NEIGHBOR,node:l,neighbor:u}),Tf(e,r,s),u}},"populate")},{name:"child",separator:!0,regex:Vr.child,populate:o(function(e,r){if(e.currentSubject==null){var n=mn(),i=mn(),a=e[e.length-1];return n.checks.push({type:$t.CHILD,parent:a,child:i}),Tf(e,r,n),e.compoundCount++,i}else if(e.currentSubject===r){var s=mn(),l=e[e.length-1],u=mn(),h=mn(),f=mn(),d=mn();return s.checks.push({type:$t.COMPOUND_SPLIT,left:l,right:u,subject:h}),h.checks=r.checks,r.checks=[{type:$t.TRUE}],d.checks.push({type:$t.TRUE}),u.checks.push({type:$t.PARENT,parent:d,child:f}),Tf(e,l,s),e.currentSubject=h,e.compoundCount++,f}else{var p=mn(),m=mn(),g=[{type:$t.PARENT,parent:p,child:m}];return p.checks=r.checks,r.checks=g,e.compoundCount++,m}},"populate")},{name:"descendant",separator:!0,regex:Vr.descendant,populate:o(function(e,r){if(e.currentSubject==null){var n=mn(),i=mn(),a=e[e.length-1];return n.checks.push({type:$t.DESCENDANT,ancestor:a,descendant:i}),Tf(e,r,n),e.compoundCount++,i}else if(e.currentSubject===r){var s=mn(),l=e[e.length-1],u=mn(),h=mn(),f=mn(),d=mn();return s.checks.push({type:$t.COMPOUND_SPLIT,left:l,right:u,subject:h}),h.checks=r.checks,r.checks=[{type:$t.TRUE}],d.checks.push({type:$t.TRUE}),u.checks.push({type:$t.ANCESTOR,ancestor:d,descendant:f}),Tf(e,l,s),e.currentSubject=h,e.compoundCount++,f}else{var p=mn(),m=mn(),g=[{type:$t.ANCESTOR,ancestor:p,descendant:m}];return p.checks=r.checks,r.checks=g,e.compoundCount++,m}},"populate")},{name:"subject",modifier:!0,regex:Vr.subject,populate:o(function(e,r){if(e.currentSubject!=null&&e.currentSubject!==r)return un("Redefinition of subject in selector `"+e.toString()+"`"),!1;e.currentSubject=r;var n=e[e.length-1],i=n.checks[0],a=i==null?null:i.type;a===$t.DIRECTED_EDGE?i.type=$t.NODE_TARGET:a===$t.UNDIRECTED_EDGE&&(i.type=$t.NODE_NEIGHBOR,i.node=i.nodes[1],i.neighbor=i.nodes[0],i.nodes=null)},"populate")}];GP.forEach(function(t){return t.regexObj=new RegExp("^"+t.regex)});rKe=o(function(e){for(var r,n,i,a=0;a<GP.length;a++){var s=GP[a],l=s.name,u=e.match(s.regexObj);if(u!=null){n=u,r=s,i=l;var h=u[0];e=e.substring(h.length);break}}return{expr:r,match:n,name:i,remaining:e}},"consumeExpr"),nKe=o(function(e){var r=e.match(/^\s+/);if(r){var n=r[0];e=e.substring(n.length)}return e},"consumeWhitespace"),iKe=o(function(e){var r=this,n=r.inputText=e,i=r[0]=mn();for(r.length=1,n=nKe(n);;){var a=rKe(n);if(a.expr==null)return un("The selector `"+e+"`is invalid"),!1;var s=a.match.slice(1),l=a.expr.populate(r,i,s);if(l===!1)return!1;if(l!=null&&(i=l),n=a.remaining,n.match(/^\s*$/))break}var u=r[r.length-1];r.currentSubject!=null&&(u.subject=r.currentSubject),u.edgeCount=r.edgeCount,u.compoundCount=r.compoundCount;for(var h=0;h<r.length;h++){var f=r[h];if(f.compoundCount>0&&f.edgeCount>0)return un("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(f.edgeCount>1)return un("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;f.edgeCount===1&&un("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},"parse"),aKe=o(function(){if(this.toStringCache!=null)return this.toStringCache;for(var e=o(function(f){return f??""},"clean"),r=o(function(f){return Zt(f)?'"'+f+'"':e(f)},"cleanVal"),n=o(function(f){return" "+f+" "},"space"),i=o(function(f,d){var p=f.type,m=f.value;switch(p){case $t.GROUP:{var g=e(m);return g.substring(0,g.length-1)}case $t.DATA_COMPARE:{var y=f.field,v=f.operator;return"["+y+n(e(v))+r(m)+"]"}case $t.DATA_BOOL:{var x=f.operator,b=f.field;return"["+e(x)+b+"]"}case $t.DATA_EXIST:{var w=f.field;return"["+w+"]"}case $t.META_COMPARE:{var C=f.operator,T=f.field;return"[["+T+n(e(C))+r(m)+"]]"}case $t.STATE:return m;case $t.ID:return"#"+m;case $t.CLASS:return"."+m;case $t.PARENT:case $t.CHILD:return a(f.parent,d)+n(">")+a(f.child,d);case $t.ANCESTOR:case $t.DESCENDANT:return a(f.ancestor,d)+" "+a(f.descendant,d);case $t.COMPOUND_SPLIT:{var E=a(f.left,d),A=a(f.subject,d),S=a(f.right,d);return E+(E.length>0?" ":"")+A+S}case $t.TRUE:return""}},"checkToString"),a=o(function(f,d){return f.checks.reduce(function(p,m,g){return p+(d===f&&g===0?"$":"")+i(m,d)},"")},"queryToString"),s="",l=0;l<this.length;l++){var u=this[l];s+=a(u,u.subject),this.length>1&&l<this.length-1&&(s+=", ")}return this.toStringCache=s,s},"toString"),sKe={parse:iKe,toString:aKe},Bme=o(function(e,r,n){var i,a=Zt(e),s=Ct(e),l=Zt(n),u,h,f=!1,d=!1,p=!1;switch(r.indexOf("!")>=0&&(r=r.replace("!",""),d=!0),r.indexOf("@")>=0&&(r=r.replace("@",""),f=!0),(a||l||f)&&(u=!a&&!s?"":""+e,h=""+n),f&&(e=u=u.toLowerCase(),n=h=h.toLowerCase()),r){case"*=":i=u.indexOf(h)>=0;break;case"$=":i=u.indexOf(h,u.length-h.length)>=0;break;case"^=":i=u.indexOf(h)===0;break;case"=":i=e===n;break;case">":p=!0,i=e>n;break;case">=":p=!0,i=e>=n;break;case"<":p=!0,i=e<n;break;case"<=":p=!0,i=e<=n;break;default:i=!1;break}return d&&(e!=null||!p)&&(i=!i),i},"valCmp"),oKe=o(function(e,r){switch(r){case"?":return!!e;case"!":return!e;case"^":return e===void 0}},"boolCmp"),lKe=o(function(e){return e!==void 0},"existCmp"),hB=o(function(e,r){return e.data(r)},"data"),cKe=o(function(e,r){return e[r]()},"meta"),fi=[],zn=o(function(e,r){return e.checks.every(function(n){return fi[n.type](n,r)})},"matches");fi[$t.GROUP]=function(t,e){var r=t.value;return r==="*"||r===e.group()};fi[$t.STATE]=function(t,e){var r=t.value;return eKe(r,e)};fi[$t.ID]=function(t,e){var r=t.value;return e.id()===r};fi[$t.CLASS]=function(t,e){var r=t.value;return e.hasClass(r)};fi[$t.META_COMPARE]=function(t,e){var r=t.field,n=t.operator,i=t.value;return Bme(cKe(e,r),n,i)};fi[$t.DATA_COMPARE]=function(t,e){var r=t.field,n=t.operator,i=t.value;return Bme(hB(e,r),n,i)};fi[$t.DATA_BOOL]=function(t,e){var r=t.field,n=t.operator;return oKe(hB(e,r),n)};fi[$t.DATA_EXIST]=function(t,e){var r=t.field;return t.operator,lKe(hB(e,r))};fi[$t.UNDIRECTED_EDGE]=function(t,e){var r=t.nodes[0],n=t.nodes[1],i=e.source(),a=e.target();return zn(r,i)&&zn(n,a)||zn(n,i)&&zn(r,a)};fi[$t.NODE_NEIGHBOR]=function(t,e){return zn(t.node,e)&&e.neighborhood().some(function(r){return r.isNode()&&zn(t.neighbor,r)})};fi[$t.DIRECTED_EDGE]=function(t,e){return zn(t.source,e.source())&&zn(t.target,e.target())};fi[$t.NODE_SOURCE]=function(t,e){return zn(t.source,e)&&e.outgoers().some(function(r){return r.isNode()&&zn(t.target,r)})};fi[$t.NODE_TARGET]=function(t,e){return zn(t.target,e)&&e.incomers().some(function(r){return r.isNode()&&zn(t.source,r)})};fi[$t.CHILD]=function(t,e){return zn(t.child,e)&&zn(t.parent,e.parent())};fi[$t.PARENT]=function(t,e){return zn(t.parent,e)&&e.children().some(function(r){return zn(t.child,r)})};fi[$t.DESCENDANT]=function(t,e){return zn(t.descendant,e)&&e.ancestors().some(function(r){return zn(t.ancestor,r)})};fi[$t.ANCESTOR]=function(t,e){return zn(t.ancestor,e)&&e.descendants().some(function(r){return zn(t.descendant,r)})};fi[$t.COMPOUND_SPLIT]=function(t,e){return zn(t.subject,e)&&zn(t.left,e)&&zn(t.right,e)};fi[$t.TRUE]=function(){return!0};fi[$t.COLLECTION]=function(t,e){var r=t.value;return r.has(e)};fi[$t.FILTER]=function(t,e){var r=t.value;return r(e)};uKe=o(function(e){var r=this;if(r.length===1&&r[0].checks.length===1&&r[0].checks[0].type===$t.ID)return e.getElementById(r[0].checks[0].value).collection();var n=o(function(a){for(var s=0;s<r.length;s++){var l=r[s];if(zn(l,a))return!0}return!1},"selectorFunction");return r.text()==null&&(n=o(function(){return!0},"selectorFunction")),e.filter(n)},"filter"),hKe=o(function(e){for(var r=this,n=0;n<r.length;n++){var i=r[n];if(zn(i,e))return!0}return!1},"matches"),fKe={matches:hKe,filter:uKe},Lf=o(function(e){this.inputText=e,this.currentSubject=null,this.compoundCount=0,this.edgeCount=0,this.length=0,e==null||Zt(e)&&e.match(/^\s*$/)||(go(e)?this.addQuery({checks:[{type:$t.COLLECTION,value:e.collection()}]}):si(e)?this.addQuery({checks:[{type:$t.FILTER,value:e}]}):Zt(e)?this.parse(e)||(this.invalid=!0):ai("A selector must be created from a string; found "))},"Selector"),Rf=Lf.prototype;[sKe,fKe].forEach(function(t){return rr(Rf,t)});Rf.text=function(){return this.inputText};Rf.size=function(){return this.length};Rf.eq=function(t){return this[t]};Rf.sameText=function(t){return!this.invalid&&!t.invalid&&this.text()===t.text()};Rf.addQuery=function(t){this[this.length++]=t};Rf.selector=Rf.toString;Sf={allAre:o(function(e){var r=new Lf(e);return this.every(function(n){return r.matches(n)})},"allAre"),is:o(function(e){var r=new Lf(e);return this.some(function(n){return r.matches(n)})},"is"),some:o(function(e,r){for(var n=0;n<this.length;n++){var i=r?e.apply(r,[this[n],n,this]):e(this[n],n,this);if(i)return!0}return!1},"some"),every:o(function(e,r){for(var n=0;n<this.length;n++){var i=r?e.apply(r,[this[n],n,this]):e(this[n],n,this);if(!i)return!1}return!0},"every"),same:o(function(e){if(this===e)return!0;e=this.cy().collection(e);var r=this.length,n=e.length;return r!==n?!1:r===1?this[0]===e[0]:this.every(function(i){return e.hasElementWithId(i.id())})},"same"),anySame:o(function(e){return e=this.cy().collection(e),this.some(function(r){return e.hasElementWithId(r.id())})},"anySame"),allAreNeighbors:o(function(e){e=this.cy().collection(e);var r=this.neighborhood();return e.every(function(n){return r.hasElementWithId(n.id())})},"allAreNeighbors"),contains:o(function(e){e=this.cy().collection(e);var r=this;return e.every(function(n){return r.hasElementWithId(n.id())})},"contains")};Sf.allAreNeighbours=Sf.allAreNeighbors;Sf.has=Sf.contains;Sf.equal=Sf.equals=Sf.same;tl=o(function(e,r){return o(function(i,a,s,l){var u=i,h=this,f;if(u==null?f="":go(u)&&u.length===1&&(f=u.id()),h.length===1&&f){var d=h[0]._private,p=d.traversalCache=d.traversalCache||{},m=p[r]=p[r]||[],g=_f(f),y=m[g];return y||(m[g]=e.call(h,i,a,s,l))}else return e.call(h,i,a,s,l)},"traversalCache")},"cache"),Z1={parent:o(function(e){var r=[];if(this.length===1){var n=this[0]._private.parent;if(n)return n}for(var i=0;i<this.length;i++){var a=this[i],s=a._private.parent;s&&r.push(s)}return this.spawn(r,!0).filter(e)},"parent"),parents:o(function(e){for(var r=[],n=this.parent();n.nonempty();){for(var i=0;i<n.length;i++){var a=n[i];r.push(a)}n=n.parent()}return this.spawn(r,!0).filter(e)},"parents"),commonAncestors:o(function(e){for(var r,n=0;n<this.length;n++){var i=this[n],a=i.parents();r=r||a,r=r.intersect(a)}return r.filter(e)},"commonAncestors"),orphans:o(function(e){return this.stdFilter(function(r){return r.isOrphan()}).filter(e)},"orphans"),nonorphans:o(function(e){return this.stdFilter(function(r){return r.isChild()}).filter(e)},"nonorphans"),children:tl(function(t){for(var e=[],r=0;r<this.length;r++)for(var n=this[r],i=n._private.children,a=0;a<i.length;a++)e.push(i[a]);return this.spawn(e,!0).filter(t)},"children"),siblings:o(function(e){return this.parent().children().not(this).filter(e)},"siblings"),isParent:o(function(){var e=this[0];if(e)return e.isNode()&&e._private.children.length!==0},"isParent"),isChildless:o(function(){var e=this[0];if(e)return e.isNode()&&e._private.children.length===0},"isChildless"),isChild:o(function(){var e=this[0];if(e)return e.isNode()&&e._private.parent!=null},"isChild"),isOrphan:o(function(){var e=this[0];if(e)return e.isNode()&&e._private.parent==null},"isOrphan"),descendants:o(function(e){var r=[];function n(i){for(var a=0;a<i.length;a++){var s=i[a];r.push(s),s.children().nonempty()&&n(s.children())}}return o(n,"add"),n(this.children()),this.spawn(r,!0).filter(e)},"descendants")};o(fB,"forEachCompound");o(Fme,"addChildren");Z1.forEachDown=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return fB(this,t,e,Fme)};o($me,"addParent");Z1.forEachUp=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return fB(this,t,e,$me)};o(dKe,"addParentAndChildren");Z1.forEachUpAndDown=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return fB(this,t,e,dKe)};Z1.ancestors=Z1.parents;Kb=zme={data:cn.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:cn.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:cn.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:cn.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:cn.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:cn.removeData({field:"rscratch",triggerEvent:!1}),id:o(function(){var e=this[0];if(e)return e._private.data.id},"id")};Kb.attr=Kb.data;Kb.removeAttr=Kb.removeData;pKe=zme,FS={};o(SP,"defineDegreeFunction");rr(FS,{degree:SP(function(t,e){return e.source().same(e.target())?2:1}),indegree:SP(function(t,e){return e.target().same(t)?1:0}),outdegree:SP(function(t,e){return e.source().same(t)?1:0})});o(F1,"defineDegreeBoundsFunction");rr(FS,{minDegree:F1("degree",function(t,e){return t<e}),maxDegree:F1("degree",function(t,e){return t>e}),minIndegree:F1("indegree",function(t,e){return t<e}),maxIndegree:F1("indegree",function(t,e){return t>e}),minOutdegree:F1("outdegree",function(t,e){return t<e}),maxOutdegree:F1("outdegree",function(t,e){return t>e})});rr(FS,{totalDegree:o(function(e){for(var r=0,n=this.nodes(),i=0;i<n.length;i++)r+=n[i].degree(e);return r},"totalDegree")});Vme=o(function(e,r,n){for(var i=0;i<e.length;i++){var a=e[i];if(!a.locked()){var s=a._private.position,l={x:r.x!=null?r.x-s.x:0,y:r.y!=null?r.y-s.y:0};a.isParent()&&!(l.x===0&&l.y===0)&&a.children().shift(l,n),a.dirtyBoundingBoxCache()}}},"beforePositionSet"),a0e={field:"position",bindingEvent:"position",allowBinding:!0,allowSetting:!0,settingEvent:"position",settingTriggersEvent:!0,triggerFnName:"emitAndNotify",allowGetting:!0,validKeys:["x","y"],beforeGet:o(function(e){e.updateCompoundBounds()},"beforeGet"),beforeSet:o(function(e,r){Vme(e,r,!1)},"beforeSet"),onSet:o(function(e){e.dirtyCompoundBoundsCache()},"onSet"),canSet:o(function(e){return!e.locked()},"canSet")};Vl=Gme={position:cn.data(a0e),silentPosition:cn.data(rr({},a0e,{allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!1,beforeSet:o(function(e,r){Vme(e,r,!0)},"beforeSet"),onSet:o(function(e){e.dirtyCompoundBoundsCache()},"onSet")})),positions:o(function(e,r){if(Ur(e))r?this.silentPosition(e):this.position(e);else if(si(e)){var n=e,i=this.cy();i.startBatch();for(var a=0;a<this.length;a++){var s=this[a],l=void 0;(l=n(s,a))&&(r?s.silentPosition(l):s.position(l))}i.endBatch()}return this},"positions"),silentPositions:o(function(e){return this.positions(e,!0)},"silentPositions"),shift:o(function(e,r,n){var i;if(Ur(e)?(i={x:Ct(e.x)?e.x:0,y:Ct(e.y)?e.y:0},n=r):Zt(e)&&Ct(r)&&(i={x:0,y:0},i[e]=r),i!=null){var a=this.cy();a.startBatch();for(var s=0;s<this.length;s++){var l=this[s];if(!(a.hasCompoundNodes()&&l.isChild()&&l.ancestors().anySame(this))){var u=l.position(),h={x:u.x+i.x,y:u.y+i.y};n?l.silentPosition(h):l.position(h)}}a.endBatch()}return this},"shift"),silentShift:o(function(e,r){return Ur(e)?this.shift(e,!0):Zt(e)&&Ct(r)&&this.shift(e,r,!0),this},"silentShift"),renderedPosition:o(function(e,r){var n=this[0],i=this.cy(),a=i.zoom(),s=i.pan(),l=Ur(e)?e:void 0,u=l!==void 0||r!==void 0&&Zt(e);if(n&&n.isNode())if(u)for(var h=0;h<this.length;h++){var f=this[h];r!==void 0?f.position(e,(r-s[e])/a):l!==void 0&&f.position(pme(l,a,s))}else{var d=n.position();return l=MS(d,a,s),e===void 0?l:l[e]}else if(!u)return;return this},"renderedPosition"),relativePosition:o(function(e,r){var n=this[0],i=this.cy(),a=Ur(e)?e:void 0,s=a!==void 0||r!==void 0&&Zt(e),l=i.hasCompoundNodes();if(n&&n.isNode())if(s)for(var u=0;u<this.length;u++){var h=this[u],f=l?h.parent():null,d=f&&f.length>0,p=d;d&&(f=f[0]);var m=p?f.position():{x:0,y:0};r!==void 0?h.position(e,r+m[e]):a!==void 0&&h.position({x:a.x+m.x,y:a.y+m.y})}else{var g=n.position(),y=l?n.parent():null,v=y&&y.length>0,x=v;v&&(y=y[0]);var b=x?y.position():{x:0,y:0};return a={x:g.x-b.x,y:g.y-b.y},e===void 0?a:a[e]}else if(!s)return;return this},"relativePosition")};Vl.modelPosition=Vl.point=Vl.position;Vl.modelPositions=Vl.points=Vl.positions;Vl.renderedPoint=Vl.renderedPosition;Vl.relativePoint=Vl.relativePosition;mKe=Gme;X1=Of={};Of.renderedBoundingBox=function(t){var e=this.boundingBox(t),r=this.cy(),n=r.zoom(),i=r.pan(),a=e.x1*n+i.x,s=e.x2*n+i.x,l=e.y1*n+i.y,u=e.y2*n+i.y;return{x1:a,x2:s,y1:l,y2:u,w:s-a,h:u-l}};Of.dirtyCompoundBoundsCache=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();return!e.styleEnabled()||!e.hasCompoundNodes()?this:(this.forEachUp(function(r){if(r.isParent()){var n=r._private;n.compoundBoundsClean=!1,n.bbCache=null,t||r.emitAndNotify("bounds")}}),this)};Of.updateCompoundBounds=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();if(!e.styleEnabled()||!e.hasCompoundNodes())return this;if(!t&&e.batching())return this;function r(s){if(!s.isParent())return;var l=s._private,u=s.children(),h=s.pstyle("compound-sizing-wrt-labels").value==="include",f={width:{val:s.pstyle("min-width").pfValue,left:s.pstyle("min-width-bias-left"),right:s.pstyle("min-width-bias-right")},height:{val:s.pstyle("min-height").pfValue,top:s.pstyle("min-height-bias-top"),bottom:s.pstyle("min-height-bias-bottom")}},d=u.boundingBox({includeLabels:h,includeOverlays:!1,useCache:!1}),p=l.position;(d.w===0||d.h===0)&&(d={w:s.pstyle("width").pfValue,h:s.pstyle("height").pfValue},d.x1=p.x-d.w/2,d.x2=p.x+d.w/2,d.y1=p.y-d.h/2,d.y2=p.y+d.h/2);function m(_,I,D){var k=0,L=0,R=I+D;return _>0&&R>0&&(k=I/R*_,L=D/R*_),{biasDiff:k,biasComplementDiff:L}}o(m,"computeBiasValues");function g(_,I,D,k){if(D.units==="%")switch(k){case"width":return _>0?D.pfValue*_:0;case"height":return I>0?D.pfValue*I:0;case"average":return _>0&&I>0?D.pfValue*(_+I)/2:0;case"min":return _>0&&I>0?_>I?D.pfValue*I:D.pfValue*_:0;case"max":return _>0&&I>0?_>I?D.pfValue*_:D.pfValue*I:0;default:return 0}else return D.units==="px"?D.pfValue:0}o(g,"computePaddingValues");var y=f.width.left.value;f.width.left.units==="px"&&f.width.val>0&&(y=y*100/f.width.val);var v=f.width.right.value;f.width.right.units==="px"&&f.width.val>0&&(v=v*100/f.width.val);var x=f.height.top.value;f.height.top.units==="px"&&f.height.val>0&&(x=x*100/f.height.val);var b=f.height.bottom.value;f.height.bottom.units==="px"&&f.height.val>0&&(b=b*100/f.height.val);var w=m(f.width.val-d.w,y,v),C=w.biasDiff,T=w.biasComplementDiff,E=m(f.height.val-d.h,x,b),A=E.biasDiff,S=E.biasComplementDiff;l.autoPadding=g(d.w,d.h,s.pstyle("padding"),s.pstyle("padding-relative-to").value),l.autoWidth=Math.max(d.w,f.width.val),p.x=(-C+d.x1+d.x2+T)/2,l.autoHeight=Math.max(d.h,f.height.val),p.y=(-A+d.y1+d.y2+S)/2}o(r,"update");for(var n=0;n<this.length;n++){var i=this[n],a=i._private;(!a.compoundBoundsClean||t)&&(r(i),e.batching()||(a.compoundBoundsClean=!0))}return this};el=o(function(e){return e===1/0||e===-1/0?0:e},"noninf"),zl=o(function(e,r,n,i,a){i-r===0||a-n===0||r==null||n==null||i==null||a==null||(e.x1=r<e.x1?r:e.x1,e.x2=i>e.x2?i:e.x2,e.y1=n<e.y1?n:e.y1,e.y2=a>e.y2?a:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},"updateBounds"),Pp=o(function(e,r){return r==null?e:zl(e,r.x1,r.y1,r.x2,r.y2)},"updateBoundsFromBox"),Db=o(function(e,r,n){return Gl(e,r,n)},"prefixedProperty"),tS=o(function(e,r,n){if(!r.cy().headless()){var i=r._private,a=i.rstyle,s=a.arrowWidth/2,l=r.pstyle(n+"-arrow-shape").value,u,h;if(l!=="none"){n==="source"?(u=a.srcX,h=a.srcY):n==="target"?(u=a.tgtX,h=a.tgtY):(u=a.midX,h=a.midY);var f=i.arrowBounds=i.arrowBounds||{},d=f[n]=f[n]||{};d.x1=u-s,d.y1=h-s,d.x2=u+s,d.y2=h+s,d.w=d.x2-d.x1,d.h=d.y2-d.y1,cS(d,1),zl(e,d.x1,d.y1,d.x2,d.y2)}}},"updateBoundsFromArrow"),CP=o(function(e,r,n){if(!r.cy().headless()){var i;n?i=n+"-":i="";var a=r._private,s=a.rstyle,l=r.pstyle(i+"label").strValue;if(l){var u=r.pstyle("text-halign"),h=r.pstyle("text-valign"),f=Db(s,"labelWidth",n),d=Db(s,"labelHeight",n),p=Db(s,"labelX",n),m=Db(s,"labelY",n),g=r.pstyle(i+"text-margin-x").pfValue,y=r.pstyle(i+"text-margin-y").pfValue,v=r.isEdge(),x=r.pstyle(i+"text-rotation"),b=r.pstyle("text-outline-width").pfValue,w=r.pstyle("text-border-width").pfValue,C=w/2,T=r.pstyle("text-background-padding").pfValue,E=2,A=d,S=f,_=S/2,I=A/2,D,k,L,R;if(v)D=p-_,k=p+_,L=m-I,R=m+I;else{switch(u.value){case"left":D=p-S,k=p;break;case"center":D=p-_,k=p+_;break;case"right":D=p,k=p+S;break}switch(h.value){case"top":L=m-A,R=m;break;case"center":L=m-I,R=m+I;break;case"bottom":L=m,R=m+A;break}}var O=g-Math.max(b,C)-T-E,M=g+Math.max(b,C)+T+E,B=y-Math.max(b,C)-T-E,F=y+Math.max(b,C)+T+E;D+=O,k+=M,L+=B,R+=F;var P=n||"main",z=a.labelBounds,$=z[P]=z[P]||{};$.x1=D,$.y1=L,$.x2=k,$.y2=R,$.w=k-D,$.h=R-L,$.leftPad=O,$.rightPad=M,$.topPad=B,$.botPad=F;var H=v&&x.strValue==="autorotate",Q=x.pfValue!=null&&x.pfValue!==0;if(H||Q){var j=H?Db(a.rstyle,"labelAngle",n):x.pfValue,ie=Math.cos(j),ne=Math.sin(j),le=(D+k)/2,he=(L+R)/2;if(!v){switch(u.value){case"left":le=k;break;case"right":le=D;break}switch(h.value){case"top":he=R;break;case"bottom":he=L;break}}var K=o(function(ce,ae){return ce=ce-le,ae=ae-he,{x:ce*ie-ae*ne+le,y:ce*ne+ae*ie+he}},"rotate"),X=K(D,L),te=K(D,R),J=K(k,L),se=K(k,R);D=Math.min(X.x,te.x,J.x,se.x),k=Math.max(X.x,te.x,J.x,se.x),L=Math.min(X.y,te.y,J.y,se.y),R=Math.max(X.y,te.y,J.y,se.y)}var ue=P+"Rot",Z=z[ue]=z[ue]||{};Z.x1=D,Z.y1=L,Z.x2=k,Z.y2=R,Z.w=k-D,Z.h=R-L,zl(e,D,L,k,R),zl(a.labelBounds.all,D,L,k,R)}return e}},"updateBoundsFromLabel"),gKe=o(function(e,r){if(!r.cy().headless()){var n=r.pstyle("outline-opacity").value,i=r.pstyle("outline-width").value;if(n>0&&i>0){var a=r.pstyle("outline-offset").value,s=r.pstyle("shape").value,l=i+a,u=(e.w+l*2)/e.w,h=(e.h+l*2)/e.h,f=0,d=0;["diamond","pentagon","round-triangle"].includes(s)?(u=(e.w+l*2.4)/e.w,d=-l/3.6):["concave-hexagon","rhomboid","right-rhomboid"].includes(s)?u=(e.w+l*2.4)/e.w:s==="star"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.6)/e.h,d=-l/3.8):s==="triangle"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.4)/e.h,d=-l/1.4):s==="vee"&&(u=(e.w+l*4.4)/e.w,h=(e.h+l*3.8)/e.h,d=-l*.5);var p=e.h*h-e.h,m=e.w*u-e.w;if(uS(e,[Math.ceil(p/2),Math.ceil(m/2)]),f!=0||d!==0){var g=Bqe(e,f,d);gme(e,g)}}}},"updateBoundsFromOutline"),yKe=o(function(e,r){var n=e._private.cy,i=n.styleEnabled(),a=n.headless(),s=Hs(),l=e._private,u=e.isNode(),h=e.isEdge(),f,d,p,m,g,y,v=l.rstyle,x=u&&i?e.pstyle("bounds-expansion").pfValue:[0],b=o(function(Se){return Se.pstyle("display").value!=="none"},"isDisplayed"),w=!i||b(e)&&(!h||b(e.source())&&b(e.target()));if(w){var C=0,T=0;i&&r.includeOverlays&&(C=e.pstyle("overlay-opacity").value,C!==0&&(T=e.pstyle("overlay-padding").value));var E=0,A=0;i&&r.includeUnderlays&&(E=e.pstyle("underlay-opacity").value,E!==0&&(A=e.pstyle("underlay-padding").value));var S=Math.max(T,A),_=0,I=0;if(i&&(_=e.pstyle("width").pfValue,I=_/2),u&&r.includeNodes){var D=e.position();g=D.x,y=D.y;var k=e.outerWidth(),L=k/2,R=e.outerHeight(),O=R/2;f=g-L,d=g+L,p=y-O,m=y+O,zl(s,f,p,d,m),i&&r.includeOutlines&&gKe(s,e)}else if(h&&r.includeEdges)if(i&&!a){var M=e.pstyle("curve-style").strValue;if(f=Math.min(v.srcX,v.midX,v.tgtX),d=Math.max(v.srcX,v.midX,v.tgtX),p=Math.min(v.srcY,v.midY,v.tgtY),m=Math.max(v.srcY,v.midY,v.tgtY),f-=I,d+=I,p-=I,m+=I,zl(s,f,p,d,m),M==="haystack"){var B=v.haystackPts;if(B&&B.length===2){if(f=B[0].x,p=B[0].y,d=B[1].x,m=B[1].y,f>d){var F=f;f=d,d=F}if(p>m){var P=p;p=m,m=P}zl(s,f-I,p-I,d+I,m+I)}}else if(M==="bezier"||M==="unbundled-bezier"||M.endsWith("segments")||M.endsWith("taxi")){var z;switch(M){case"bezier":case"unbundled-bezier":z=v.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":z=v.linePts;break}if(z!=null)for(var $=0;$<z.length;$++){var H=z[$];f=H.x-I,d=H.x+I,p=H.y-I,m=H.y+I,zl(s,f,p,d,m)}}}else{var Q=e.source(),j=Q.position(),ie=e.target(),ne=ie.position();if(f=j.x,d=ne.x,p=j.y,m=ne.y,f>d){var le=f;f=d,d=le}if(p>m){var he=p;p=m,m=he}f-=I,d+=I,p-=I,m+=I,zl(s,f,p,d,m)}if(i&&r.includeEdges&&h&&(tS(s,e,"mid-source"),tS(s,e,"mid-target"),tS(s,e,"source"),tS(s,e,"target")),i){var K=e.pstyle("ghost").value==="yes";if(K){var X=e.pstyle("ghost-offset-x").pfValue,te=e.pstyle("ghost-offset-y").pfValue;zl(s,s.x1+X,s.y1+te,s.x2+X,s.y2+te)}}var J=l.bodyBounds=l.bodyBounds||{};Fpe(J,s),uS(J,x),cS(J,1),i&&(f=s.x1,d=s.x2,p=s.y1,m=s.y2,zl(s,f-S,p-S,d+S,m+S));var se=l.overlayBounds=l.overlayBounds||{};Fpe(se,s),uS(se,x),cS(se,1);var ue=l.labelBounds=l.labelBounds||{};ue.all!=null?Pqe(ue.all):ue.all=Hs(),i&&r.includeLabels&&(r.includeMainLabels&&CP(s,e,null),h&&(r.includeSourceLabels&&CP(s,e,"source"),r.includeTargetLabels&&CP(s,e,"target")))}return s.x1=el(s.x1),s.y1=el(s.y1),s.x2=el(s.x2),s.y2=el(s.y2),s.w=el(s.x2-s.x1),s.h=el(s.y2-s.y1),s.w>0&&s.h>0&&w&&(uS(s,x),cS(s,1)),s},"boundingBoxImpl"),Ume=o(function(e){var r=0,n=o(function(s){return(s?1:0)<<r++},"tf"),i=0;return i+=n(e.incudeNodes),i+=n(e.includeEdges),i+=n(e.includeLabels),i+=n(e.includeMainLabels),i+=n(e.includeSourceLabels),i+=n(e.includeTargetLabels),i+=n(e.includeOverlays),i+=n(e.includeOutlines),i},"getKey"),Hme=o(function(e){if(e.isEdge()){var r=e.source().position(),n=e.target().position(),i=o(function(s){return Math.round(s)},"r");return nqe([i(r.x),i(r.y),i(n.x),i(n.y)])}else return 0},"getBoundingBoxPosKey"),s0e=o(function(e,r){var n=e._private,i,a=e.isEdge(),s=r==null?o0e:Ume(r),l=s===o0e,u=Hme(e),h=n.bbCachePosKey===u,f=r.useCache&&h,d=o(function(y){return y._private.bbCache==null||y._private.styleDirty},"isDirty"),p=!f||d(e)||a&&(d(e.source())||d(e.target()));if(p?(h||e.recalculateRenderedStyle(f),i=yKe(e,Qb),n.bbCache=i,n.bbCachePosKey=u):i=n.bbCache,!l){var m=e.isNode();i=Hs(),(r.includeNodes&&m||r.includeEdges&&!m)&&(r.includeOverlays?Pp(i,n.overlayBounds):Pp(i,n.bodyBounds)),r.includeLabels&&(r.includeMainLabels&&(!a||r.includeSourceLabels&&r.includeTargetLabels)?Pp(i,n.labelBounds.all):(r.includeMainLabels&&Pp(i,n.labelBounds.mainRot),r.includeSourceLabels&&Pp(i,n.labelBounds.sourceRot),r.includeTargetLabels&&Pp(i,n.labelBounds.targetRot))),i.w=i.x2-i.x1,i.h=i.y2-i.y1}return i},"cachedBoundingBoxImpl"),Qb={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeMainLabels:!0,includeSourceLabels:!0,includeTargetLabels:!0,includeOverlays:!0,includeUnderlays:!0,includeOutlines:!0,useCache:!0},o0e=Ume(Qb),l0e=la(Qb);Of.boundingBox=function(t){var e;if(this.length===1&&this[0]._private.bbCache!=null&&!this[0]._private.styleDirty&&(t===void 0||t.useCache===void 0||t.useCache===!0))t===void 0?t=Qb:t=l0e(t),e=s0e(this[0],t);else{e=Hs(),t=t||Qb;var r=l0e(t),n=this,i=n.cy(),a=i.styleEnabled();if(a)for(var s=0;s<n.length;s++){var l=n[s],u=l._private,h=Hme(l),f=u.bbCachePosKey===h,d=r.useCache&&f&&!u.styleDirty;l.recalculateRenderedStyle(d)}this.updateCompoundBounds(!t.useCache);for(var p=0;p<n.length;p++){var m=n[p];Pp(e,s0e(m,r))}}return e.x1=el(e.x1),e.y1=el(e.y1),e.x2=el(e.x2),e.y2=el(e.y2),e.w=el(e.x2-e.x1),e.h=el(e.y2-e.y1),e};Of.dirtyBoundingBoxCache=function(){for(var t=0;t<this.length;t++){var e=this[t]._private;e.bbCache=null,e.bbCachePosKey=null,e.bodyBounds=null,e.overlayBounds=null,e.labelBounds.all=null,e.labelBounds.source=null,e.labelBounds.target=null,e.labelBounds.main=null,e.labelBounds.sourceRot=null,e.labelBounds.targetRot=null,e.labelBounds.mainRot=null,e.arrowBounds.source=null,e.arrowBounds.target=null,e.arrowBounds["mid-source"]=null,e.arrowBounds["mid-target"]=null}return this.emitAndNotify("bounds"),this};Of.boundingBoxAt=function(t){var e=this.nodes(),r=this.cy(),n=r.hasCompoundNodes(),i=r.collection();if(n&&(i=e.filter(function(h){return h.isParent()}),e=e.not(i)),Ur(t)){var a=t;t=o(function(){return a},"fn")}var s=o(function(f,d){return f._private.bbAtOldPos=t(f,d)},"storeOldPos"),l=o(function(f){return f._private.bbAtOldPos},"getOldPos");r.startBatch(),e.forEach(s).silentPositions(t),n&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0));var u=Oqe(this.boundingBox({useCache:!1}));return e.silentPositions(l),n&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0)),r.endBatch(),u};X1.boundingbox=X1.bb=X1.boundingBox;X1.renderedBoundingbox=X1.renderedBoundingBox;vKe=Of;Bb=a4={};Wme=o(function(e){e.uppercaseName=Rpe(e.name),e.autoName="auto"+e.uppercaseName,e.labelName="label"+e.uppercaseName,e.outerName="outer"+e.uppercaseName,e.uppercaseOuterName=Rpe(e.outerName),Bb[e.name]=o(function(){var n=this[0],i=n._private,a=i.cy,s=a._private.styleEnabled;if(n)if(s){if(n.isParent())return n.updateCompoundBounds(),i[e.autoName]||0;var l=n.pstyle(e.name);switch(l.strValue){case"label":return n.recalculateRenderedStyle(),i.rstyle[e.labelName]||0;default:return l.pfValue}}else return 1},"dimImpl"),Bb["outer"+e.uppercaseName]=o(function(){var n=this[0],i=n._private,a=i.cy,s=a._private.styleEnabled;if(n)if(s){var l=n[e.name](),u=n.pstyle("border-width").pfValue,h=2*n.padding();return l+u+h}else return 1},"outerDimImpl"),Bb["rendered"+e.uppercaseName]=o(function(){var n=this[0];if(n){var i=n[e.name]();return i*this.cy().zoom()}},"renderedDimImpl"),Bb["rendered"+e.uppercaseOuterName]=o(function(){var n=this[0];if(n){var i=n[e.outerName]();return i*this.cy().zoom()}},"renderedOuterDimImpl")},"defineDimFns");Wme({name:"width"});Wme({name:"height"});a4.padding=function(){var t=this[0],e=t._private;return t.isParent()?(t.updateCompoundBounds(),e.autoPadding!==void 0?e.autoPadding:t.pstyle("padding").pfValue):t.pstyle("padding").pfValue};a4.paddedHeight=function(){var t=this[0];return t.height()+2*t.padding()};a4.paddedWidth=function(){var t=this[0];return t.width()+2*t.padding()};xKe=a4,bKe=o(function(e,r){if(e.isEdge())return r(e)},"ifEdge"),wKe=o(function(e,r){if(e.isEdge()){var n=e.cy();return MS(r(e),n.zoom(),n.pan())}},"ifEdgeRenderedPosition"),TKe=o(function(e,r){if(e.isEdge()){var n=e.cy(),i=n.pan(),a=n.zoom();return r(e).map(function(s){return MS(s,a,i)})}},"ifEdgeRenderedPositions"),kKe=o(function(e){return e.renderer().getControlPoints(e)},"controlPoints"),EKe=o(function(e){return e.renderer().getSegmentPoints(e)},"segmentPoints"),SKe=o(function(e){return e.renderer().getSourceEndpoint(e)},"sourceEndpoint"),CKe=o(function(e){return e.renderer().getTargetEndpoint(e)},"targetEndpoint"),AKe=o(function(e){return e.renderer().getEdgeMidpoint(e)},"midpoint"),c0e={controlPoints:{get:kKe,mult:!0},segmentPoints:{get:EKe,mult:!0},sourceEndpoint:{get:SKe},targetEndpoint:{get:CKe},midpoint:{get:AKe}},_Ke=o(function(e){return"rendered"+e[0].toUpperCase()+e.substr(1)},"renderedName"),DKe=Object.keys(c0e).reduce(function(t,e){var r=c0e[e],n=_Ke(e);return t[e]=function(){return bKe(this,r.get)},r.mult?t[n]=function(){return TKe(this,r.get)}:t[n]=function(){return wKe(this,r.get)},t},{}),LKe=rr({},mKe,vKe,xKe,DKe);qme=o(function(e,r){this.recycle(e,r)},"Event");o(Lb,"returnFalse");o(rS,"returnTrue");qme.prototype={instanceString:o(function(){return"event"},"instanceString"),recycle:o(function(e,r){if(this.isImmediatePropagationStopped=this.isPropagationStopped=this.isDefaultPrevented=Lb,e!=null&&e.preventDefault?(this.type=e.type,this.isDefaultPrevented=e.defaultPrevented?rS:Lb):e!=null&&e.type?r=e:this.type=e,r!=null&&(this.originalEvent=r.originalEvent,this.type=r.type!=null?r.type:this.type,this.cy=r.cy,this.target=r.target,this.position=r.position,this.renderedPosition=r.renderedPosition,this.namespace=r.namespace,this.layout=r.layout),this.cy!=null&&this.position!=null&&this.renderedPosition==null){var n=this.position,i=this.cy.zoom(),a=this.cy.pan();this.renderedPosition={x:n.x*i+a.x,y:n.y*i+a.y}}this.timeStamp=e&&e.timeStamp||Date.now()},"recycle"),preventDefault:o(function(){this.isDefaultPrevented=rS;var e=this.originalEvent;e&&e.preventDefault&&e.preventDefault()},"preventDefault"),stopPropagation:o(function(){this.isPropagationStopped=rS;var e=this.originalEvent;e&&e.stopPropagation&&e.stopPropagation()},"stopPropagation"),stopImmediatePropagation:o(function(){this.isImmediatePropagationStopped=rS,this.stopPropagation()},"stopImmediatePropagation"),isDefaultPrevented:Lb,isPropagationStopped:Lb,isImmediatePropagationStopped:Lb};Yme=/^([^.]+)(\.(?:[^.]+))?$/,RKe=".*",Xme={qualifierCompare:o(function(e,r){return e===r},"qualifierCompare"),eventMatches:o(function(){return!0},"eventMatches"),addEventFields:o(function(){},"addEventFields"),callbackContext:o(function(e){return e},"callbackContext"),beforeEmit:o(function(){},"beforeEmit"),afterEmit:o(function(){},"afterEmit"),bubble:o(function(){return!1},"bubble"),parent:o(function(){return null},"parent"),context:null},u0e=Object.keys(Xme),NKe={};o($S,"Emitter");Nf=$S.prototype,jme=o(function(e,r,n,i,a,s,l){si(i)&&(a=i,i=null),l&&(s==null?s=l:s=rr({},s,l));for(var u=En(n)?n:n.split(/\s+/),h=0;h<u.length;h++){var f=u[h];if(!Af(f)){var d=f.match(Yme);if(d){var p=d[1],m=d[2]?d[2]:null,g=r(e,f,p,m,i,a,s);if(g===!1)break}}}},"forEachEvent"),h0e=o(function(e,r){return e.addEventFields(e.context,r),new qme(r.type,r)},"makeEventObj"),MKe=o(function(e,r,n){if(eWe(n)){r(e,n);return}else if(Ur(n)){r(e,h0e(e,n));return}for(var i=En(n)?n:n.split(/\s+/),a=0;a<i.length;a++){var s=i[a];if(!Af(s)){var l=s.match(Yme);if(l){var u=l[1],h=l[2]?l[2]:null,f=h0e(e,{type:u,namespace:h,target:e.context});r(e,f)}}}},"forEachEventObj");Nf.on=Nf.addListener=function(t,e,r,n,i){return jme(this,function(a,s,l,u,h,f,d){si(f)&&a.listeners.push({event:s,callback:f,type:l,namespace:u,qualifier:h,conf:d})},t,e,r,n,i),this};Nf.one=function(t,e,r,n){return this.on(t,e,r,n,{one:!0})};Nf.removeListener=Nf.off=function(t,e,r,n){var i=this;this.emitting!==0&&(this.listeners=lqe(this.listeners));for(var a=this.listeners,s=o(function(h){var f=a[h];jme(i,function(d,p,m,g,y,v){if((f.type===m||t==="*")&&(!g&&f.namespace!==".*"||f.namespace===g)&&(!y||d.qualifierCompare(f.qualifier,y))&&(!v||f.callback===v))return a.splice(h,1),!1},t,e,r,n)},"_loop"),l=a.length-1;l>=0;l--)s(l);return this};Nf.removeAllListeners=function(){return this.removeListener("*")};Nf.emit=Nf.trigger=function(t,e,r){var n=this.listeners,i=n.length;return this.emitting++,En(e)||(e=[e]),MKe(this,function(a,s){r!=null&&(n=[{event:s.event,type:s.type,namespace:s.namespace,callback:r}],i=n.length);for(var l=o(function(f){var d=n[f];if(d.type===s.type&&(!d.namespace||d.namespace===s.namespace||d.namespace===RKe)&&a.eventMatches(a.context,d,s)){var p=[s];e!=null&&uqe(p,e),a.beforeEmit(a.context,d,s),d.conf&&d.conf.one&&(a.listeners=a.listeners.filter(function(y){return y!==d}));var m=a.callbackContext(a.context,d,s),g=d.callback.apply(m,p);a.afterEmit(a.context,d,s),g===!1&&(s.stopPropagation(),s.preventDefault())}},"_loop2"),u=0;u<i;u++)l(u);a.bubble(a.context)&&!s.isPropagationStopped()&&a.parent(a.context).emit(s,e)},t),this.emitting--,this};IKe={qualifierCompare:o(function(e,r){return e==null||r==null?e==null&&r==null:e.sameText(r)},"qualifierCompare"),eventMatches:o(function(e,r,n){var i=r.qualifier;return i!=null?e!==n.target&&t4(n.target)&&i.matches(n.target):!0},"eventMatches"),addEventFields:o(function(e,r){r.cy=e.cy(),r.target=e},"addEventFields"),callbackContext:o(function(e,r,n){return r.qualifier!=null?n.target:e},"callbackContext"),beforeEmit:o(function(e,r){r.conf&&r.conf.once&&r.conf.onceCollection.removeListener(r.event,r.qualifier,r.callback)},"beforeEmit"),bubble:o(function(){return!0},"bubble"),parent:o(function(e){return e.isChild()?e.parent():e.cy()},"parent")},nS=o(function(e){return Zt(e)?new Lf(e):e},"argSelector"),Kme={createEmitter:o(function(){for(var e=0;e<this.length;e++){var r=this[e],n=r._private;n.emitter||(n.emitter=new $S(IKe,r))}return this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(e,r,n){for(var i=nS(r),a=0;a<this.length;a++){var s=this[a];s.emitter().on(e,i,n)}return this},"on"),removeListener:o(function(e,r,n){for(var i=nS(r),a=0;a<this.length;a++){var s=this[a];s.emitter().removeListener(e,i,n)}return this},"removeListener"),removeAllListeners:o(function(){for(var e=0;e<this.length;e++){var r=this[e];r.emitter().removeAllListeners()}return this},"removeAllListeners"),one:o(function(e,r,n){for(var i=nS(r),a=0;a<this.length;a++){var s=this[a];s.emitter().one(e,i,n)}return this},"one"),once:o(function(e,r,n){for(var i=nS(r),a=0;a<this.length;a++){var s=this[a];s.emitter().on(e,i,n,{once:!0,onceCollection:this})}},"once"),emit:o(function(e,r){for(var n=0;n<this.length;n++){var i=this[n];i.emitter().emit(e,r)}return this},"emit"),emitAndNotify:o(function(e,r){if(this.length!==0)return this.cy().notify(e,this),this.emit(e,r),this},"emitAndNotify")};cn.eventAliasesOn(Kme);Qme={nodes:o(function(e){return this.filter(function(r){return r.isNode()}).filter(e)},"nodes"),edges:o(function(e){return this.filter(function(r){return r.isEdge()}).filter(e)},"edges"),byGroup:o(function(){for(var e=this.spawn(),r=this.spawn(),n=0;n<this.length;n++){var i=this[n];i.isNode()?e.push(i):r.push(i)}return{nodes:e,edges:r}},"byGroup"),filter:o(function(e,r){if(e===void 0)return this;if(Zt(e)||go(e))return new Lf(e).filter(this);if(si(e)){for(var n=this.spawn(),i=this,a=0;a<i.length;a++){var s=i[a],l=r?e.apply(r,[s,a,i]):e(s,a,i);l&&n.push(s)}return n}return this.spawn()},"filter"),not:o(function(e){if(e){Zt(e)&&(e=this.filter(e));for(var r=this.spawn(),n=0;n<this.length;n++){var i=this[n],a=e.has(i);a||r.push(i)}return r}else return this},"not"),absoluteComplement:o(function(){var e=this.cy();return e.mutableElements().not(this)},"absoluteComplement"),intersect:o(function(e){if(Zt(e)){var r=e;return this.filter(r)}for(var n=this.spawn(),i=this,a=e,s=this.length<e.length,l=s?i:a,u=s?a:i,h=0;h<l.length;h++){var f=l[h];u.has(f)&&n.push(f)}return n},"intersect"),xor:o(function(e){var r=this._private.cy;Zt(e)&&(e=r.$(e));var n=this.spawn(),i=this,a=e,s=o(function(u,h){for(var f=0;f<u.length;f++){var d=u[f],p=d._private.data.id,m=h.hasElementWithId(p);m||n.push(d)}},"add");return s(i,a),s(a,i),n},"xor"),diff:o(function(e){var r=this._private.cy;Zt(e)&&(e=r.$(e));var n=this.spawn(),i=this.spawn(),a=this.spawn(),s=this,l=e,u=o(function(f,d,p){for(var m=0;m<f.length;m++){var g=f[m],y=g._private.data.id,v=d.hasElementWithId(y);v?a.merge(g):p.push(g)}},"add");return u(s,l,n),u(l,s,i),{left:n,right:i,both:a}},"diff"),add:o(function(e){var r=this._private.cy;if(!e)return this;if(Zt(e)){var n=e;e=r.mutableElements().filter(n)}for(var i=this.spawnSelf(),a=0;a<e.length;a++){var s=e[a],l=!this.has(s);l&&i.push(s)}return i},"add"),merge:o(function(e){var r=this._private,n=r.cy;if(!e)return this;if(e&&Zt(e)){var i=e;e=n.mutableElements().filter(i)}for(var a=r.map,s=0;s<e.length;s++){var l=e[s],u=l._private.data.id,h=!a.has(u);if(h){var f=this.length++;this[f]=l,a.set(u,{ele:l,index:f})}}return this},"merge"),unmergeAt:o(function(e){var r=this[e],n=r.id(),i=this._private,a=i.map;this[e]=void 0,a.delete(n);var s=e===this.length-1;if(this.length>1&&!s){var l=this.length-1,u=this[l],h=u._private.data.id;this[l]=void 0,this[e]=u,a.set(h,{ele:u,index:e})}return this.length--,this},"unmergeAt"),unmergeOne:o(function(e){e=e[0];var r=this._private,n=e._private.data.id,i=r.map,a=i.get(n);if(!a)return this;var s=a.index;return this.unmergeAt(s),this},"unmergeOne"),unmerge:o(function(e){var r=this._private.cy;if(!e)return this;if(e&&Zt(e)){var n=e;e=r.mutableElements().filter(n)}for(var i=0;i<e.length;i++)this.unmergeOne(e[i]);return this},"unmerge"),unmergeBy:o(function(e){for(var r=this.length-1;r>=0;r--){var n=this[r];e(n)&&this.unmergeAt(r)}return this},"unmergeBy"),map:o(function(e,r){for(var n=[],i=this,a=0;a<i.length;a++){var s=i[a],l=r?e.apply(r,[s,a,i]):e(s,a,i);n.push(l)}return n},"map"),reduce:o(function(e,r){for(var n=r,i=this,a=0;a<i.length;a++)n=e(n,i[a],a,i);return n},"reduce"),max:o(function(e,r){for(var n=-1/0,i,a=this,s=0;s<a.length;s++){var l=a[s],u=r?e.apply(r,[l,s,a]):e(l,s,a);u>n&&(n=u,i=l)}return{value:n,ele:i}},"max"),min:o(function(e,r){for(var n=1/0,i,a=this,s=0;s<a.length;s++){var l=a[s],u=r?e.apply(r,[l,s,a]):e(l,s,a);u<n&&(n=u,i=l)}return{value:n,ele:i}},"min")},Qr=Qme;Qr.u=Qr["|"]=Qr["+"]=Qr.union=Qr.or=Qr.add;Qr["\\"]=Qr["!"]=Qr["-"]=Qr.difference=Qr.relativeComplement=Qr.subtract=Qr.not;Qr.n=Qr["&"]=Qr["."]=Qr.and=Qr.intersection=Qr.intersect;Qr["^"]=Qr["(+)"]=Qr["(-)"]=Qr.symmetricDifference=Qr.symdiff=Qr.xor;Qr.fnFilter=Qr.filterFn=Qr.stdFilter=Qr.filter;Qr.complement=Qr.abscomp=Qr.absoluteComplement;OKe={isNode:o(function(){return this.group()==="nodes"},"isNode"),isEdge:o(function(){return this.group()==="edges"},"isEdge"),isLoop:o(function(){return this.isEdge()&&this.source()[0]===this.target()[0]},"isLoop"),isSimple:o(function(){return this.isEdge()&&this.source()[0]!==this.target()[0]},"isSimple"),group:o(function(){var e=this[0];if(e)return e._private.group},"group")},Zme=o(function(e,r){var n=e.cy(),i=n.hasCompoundNodes();function a(f){var d=f.pstyle("z-compound-depth");return d.value==="auto"?i?f.zDepth():0:d.value==="bottom"?-1:d.value==="top"?tB:0}o(a,"getDepth");var s=a(e)-a(r);if(s!==0)return s;function l(f){var d=f.pstyle("z-index-compare");return d.value==="auto"&&f.isNode()?1:0}o(l,"getEleDepth");var u=l(e)-l(r);if(u!==0)return u;var h=e.pstyle("z-index").value-r.pstyle("z-index").value;return h!==0?h:e.poolIndex()-r.poolIndex()},"zIndexSort"),ES={forEach:o(function(e,r){if(si(e))for(var n=this.length,i=0;i<n;i++){var a=this[i],s=r?e.apply(r,[a,i,this]):e(a,i,this);if(s===!1)break}return this},"forEach"),toArray:o(function(){for(var e=[],r=0;r<this.length;r++)e.push(this[r]);return e},"toArray"),slice:o(function(e,r){var n=[],i=this.length;r==null&&(r=i),e==null&&(e=0),e<0&&(e=i+e),r<0&&(r=i+r);for(var a=e;a>=0&&a<r&&a<i;a++)n.push(this[a]);return this.spawn(n)},"slice"),size:o(function(){return this.length},"size"),eq:o(function(e){return this[e]||this.spawn()},"eq"),first:o(function(){return this[0]||this.spawn()},"first"),last:o(function(){return this[this.length-1]||this.spawn()},"last"),empty:o(function(){return this.length===0},"empty"),nonempty:o(function(){return!this.empty()},"nonempty"),sort:o(function(e){if(!si(e))return this;var r=this.toArray().sort(e);return this.spawn(r)},"sort"),sortByZIndex:o(function(){return this.sort(Zme)},"sortByZIndex"),zDepth:o(function(){var e=this[0];if(e){var r=e._private,n=r.group;if(n==="nodes"){var i=r.data.parent?e.parents().size():0;return e.isParent()?i:tB-1}else{var a=r.source,s=r.target,l=a.zDepth(),u=s.zDepth();return Math.max(l,u,0)}}},"zDepth")};ES.each=ES.forEach;PKe=o(function(){var e="undefined",r=(typeof Symbol>"u"?"undefined":Wi(Symbol))!=e&&Wi(Symbol.iterator)!=e;r&&(ES[Symbol.iterator]=function(){var n=this,i={value:void 0,done:!1},a=0,s=this.length;return X0e({next:o(function(){return a<s?i.value=n[a++]:(i.value=void 0,i.done=!0),i},"next")},Symbol.iterator,function(){return this})})},"defineSymbolIterator");PKe();BKe=la({nodeDimensionsIncludeLabels:!1}),fS={layoutDimensions:o(function(e){e=BKe(e);var r;if(!this.takesUpSpace())r={w:0,h:0};else if(e.nodeDimensionsIncludeLabels){var n=this.boundingBox();r={w:n.w,h:n.h}}else r={w:this.outerWidth(),h:this.outerHeight()};return(r.w===0||r.h===0)&&(r.w=r.h=1),r},"layoutDimensions"),layoutPositions:o(function(e,r,n){var i=this.nodes().filter(function(T){return!T.isParent()}),a=this.cy(),s=r.eles,l=o(function(E){return E.id()},"getMemoizeKey"),u=Ub(n,l);e.emit({type:"layoutstart",layout:e}),e.animations=[];var h=o(function(E,A,S){var _={x:A.x1+A.w/2,y:A.y1+A.h/2},I={x:(S.x-_.x)*E,y:(S.y-_.y)*E};return{x:_.x+I.x,y:_.y+I.y}},"calculateSpacing"),f=r.spacingFactor&&r.spacingFactor!==1,d=o(function(){if(!f)return null;for(var E=Hs(),A=0;A<i.length;A++){var S=i[A],_=u(S,A);Fqe(E,_.x,_.y)}return E},"spacingBb"),p=d(),m=Ub(function(T,E){var A=u(T,E);if(f){var S=Math.abs(r.spacingFactor);A=h(S,p,A)}return r.transform!=null&&(A=r.transform(T,A)),A},l);if(r.animate){for(var g=0;g<i.length;g++){var y=i[g],v=m(y,g),x=r.animateFilter==null||r.animateFilter(y,g);if(x){var b=y.animation({position:v,duration:r.animationDuration,easing:r.animationEasing});e.animations.push(b)}else y.position(v)}if(r.fit){var w=a.animation({fit:{boundingBox:s.boundingBoxAt(m),padding:r.padding},duration:r.animationDuration,easing:r.animationEasing});e.animations.push(w)}else if(r.zoom!==void 0&&r.pan!==void 0){var C=a.animation({zoom:r.zoom,pan:r.pan,duration:r.animationDuration,easing:r.animationEasing});e.animations.push(C)}e.animations.forEach(function(T){return T.play()}),e.one("layoutready",r.ready),e.emit({type:"layoutready",layout:e}),ey.all(e.animations.map(function(T){return T.promise()})).then(function(){e.one("layoutstop",r.stop),e.emit({type:"layoutstop",layout:e})})}else i.positions(m),r.fit&&a.fit(r.eles,r.padding),r.zoom!=null&&a.zoom(r.zoom),r.pan&&a.pan(r.pan),e.one("layoutready",r.ready),e.emit({type:"layoutready",layout:e}),e.one("layoutstop",r.stop),e.emit({type:"layoutstop",layout:e});return this},"layoutPositions"),layout:o(function(e){var r=this.cy();return r.makeLayout(rr({},e,{eles:this}))},"layout")};fS.createLayout=fS.makeLayout=fS.layout;o(Jme,"styleCache");o(zS,"cacheStyleFunction");o(GS,"cachePrototypeStyleFunction");Ta={recalculateRenderedStyle:o(function(e){var r=this.cy(),n=r.renderer(),i=r.styleEnabled();return n&&i&&n.recalculateRenderedStyle(this,e),this},"recalculateRenderedStyle"),dirtyStyleCache:o(function(){var e=this.cy(),r=o(function(a){return a._private.styleCache=null},"dirty");if(e.hasCompoundNodes()){var n;n=this.spawnSelf().merge(this.descendants()).merge(this.parents()),n.merge(n.connectedEdges()),n.forEach(r)}else this.forEach(function(i){r(i),i.connectedEdges().forEach(r)});return this},"dirtyStyleCache"),updateStyle:o(function(e){var r=this._private.cy;if(!r.styleEnabled())return this;if(r.batching()){var n=r._private.batchStyleEles;return n.merge(this),this}var i=r.hasCompoundNodes(),a=this;e=!!(e||e===void 0),i&&(a=this.spawnSelf().merge(this.descendants()).merge(this.parents()));var s=a;return e?s.emitAndNotify("style"):s.emit("style"),a.forEach(function(l){return l._private.styleDirty=!0}),this},"updateStyle"),cleanStyle:o(function(){var e=this.cy();if(e.styleEnabled())for(var r=0;r<this.length;r++){var n=this[r];n._private.styleDirty&&(n._private.styleDirty=!1,e.style().apply(n))}},"cleanStyle"),parsedStyle:o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,n=this[0],i=n.cy();if(i.styleEnabled()&&n){n._private.styleDirty&&(n._private.styleDirty=!1,i.style().apply(n));var a=n._private.style[e];return a??(r?i.style().getDefaultProperty(e):null)}},"parsedStyle"),numericStyle:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r){var n=r.pstyle(e);return n.pfValue!==void 0?n.pfValue:n.value}},"numericStyle"),numericStyleUnits:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r)return r.pstyle(e).units},"numericStyleUnits"),renderedStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=this[0];if(n)return r.style().getRenderedStyle(n,e)},"renderedStyle"),style:o(function(e,r){var n=this.cy();if(!n.styleEnabled())return this;var i=!1,a=n.style();if(Ur(e)){var s=e;a.applyBypass(this,s,i),this.emitAndNotify("style")}else if(Zt(e))if(r===void 0){var l=this[0];return l?a.getStylePropertyValue(l,e):void 0}else a.applyBypass(this,e,r,i),this.emitAndNotify("style");else if(e===void 0){var u=this[0];return u?a.getRawStyle(u):void 0}return this},"style"),removeStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=!1,i=r.style(),a=this;if(e===void 0)for(var s=0;s<a.length;s++){var l=a[s];i.removeAllBypasses(l,n)}else{e=e.split(/\s+/);for(var u=0;u<a.length;u++){var h=a[u];i.removeBypasses(h,e,n)}}return this.emitAndNotify("style"),this},"removeStyle"),show:o(function(){return this.css("display","element"),this},"show"),hide:o(function(){return this.css("display","none"),this},"hide"),effectiveOpacity:o(function(){var e=this.cy();if(!e.styleEnabled())return 1;var r=e.hasCompoundNodes(),n=this[0];if(n){var i=n._private,a=n.pstyle("opacity").value;if(!r)return a;var s=i.data.parent?n.parents():null;if(s)for(var l=0;l<s.length;l++){var u=s[l],h=u.pstyle("opacity").value;a=h*a}return a}},"effectiveOpacity"),transparent:o(function(){var e=this.cy();if(!e.styleEnabled())return!1;var r=this[0],n=r.cy().hasCompoundNodes();if(r)return n?r.effectiveOpacity()===0:r.pstyle("opacity").value===0},"transparent"),backgrounding:o(function(){var e=this.cy();if(!e.styleEnabled())return!1;var r=this[0];return!!r._private.backgrounding},"backgrounding")};o(AP,"checkCompound");o(dB,"defineDerivedStateFunction");iy=zS("eleTakesUpSpace",function(t){return t.pstyle("display").value==="element"&&t.width()!==0&&(t.isNode()?t.height()!==0:!0)});Ta.takesUpSpace=GS("takesUpSpace",dB({ok:iy}));FKe=zS("eleInteractive",function(t){return t.pstyle("events").value==="yes"&&t.pstyle("visibility").value==="visible"&&iy(t)}),$Ke=zS("parentInteractive",function(t){return t.pstyle("visibility").value==="visible"&&iy(t)});Ta.interactive=GS("interactive",dB({ok:FKe,parentOk:$Ke,edgeOkViaNode:iy}));Ta.noninteractive=function(){var t=this[0];if(t)return!t.interactive()};zKe=zS("eleVisible",function(t){return t.pstyle("visibility").value==="visible"&&t.pstyle("opacity").pfValue!==0&&iy(t)}),GKe=iy;Ta.visible=GS("visible",dB({ok:zKe,edgeOkViaNode:GKe}));Ta.hidden=function(){var t=this[0];if(t)return!t.visible()};Ta.isBundledBezier=GS("isBundledBezier",function(){return this.cy().styleEnabled()?!this.removed()&&this.pstyle("curve-style").value==="bezier"&&this.takesUpSpace():!1});Ta.bypass=Ta.css=Ta.style;Ta.renderedCss=Ta.renderedStyle;Ta.removeBypass=Ta.removeCss=Ta.removeStyle;Ta.pstyle=Ta.parsedStyle;Cf={};o(f0e,"defineSwitchFunction");o(ay,"defineSwitchSet");ay({field:"locked",overrideField:o(function(e){return e.cy().autolock()?!0:void 0},"overrideField"),on:"lock",off:"unlock"});ay({field:"grabbable",overrideField:o(function(e){return e.cy().autoungrabify()||e.pannable()?!1:void 0},"overrideField"),on:"grabify",off:"ungrabify"});ay({field:"selected",ableField:"selectable",overrideAble:o(function(e){return e.cy().autounselectify()?!1:void 0},"overrideAble"),on:"select",off:"unselect"});ay({field:"selectable",overrideField:o(function(e){return e.cy().autounselectify()?!1:void 0},"overrideField"),on:"selectify",off:"unselectify"});Cf.deselect=Cf.unselect;Cf.grabbed=function(){var t=this[0];if(t)return t._private.grabbed};ay({field:"active",on:"activate",off:"unactivate"});ay({field:"pannable",on:"panify",off:"unpanify"});Cf.inactive=function(){var t=this[0];if(t)return!t._private.active};$a={},d0e=o(function(e){return o(function(n){for(var i=this,a=[],s=0;s<i.length;s++){var l=i[s];if(l.isNode()){for(var u=!1,h=l.connectedEdges(),f=0;f<h.length;f++){var d=h[f],p=d.source(),m=d.target();if(e.noIncomingEdges&&m===l&&p!==l||e.noOutgoingEdges&&p===l&&m!==l){u=!0;break}}u||a.push(l)}}return this.spawn(a,!0).filter(n)},"dagExtremityImpl")},"defineDagExtremity"),p0e=o(function(e){return function(r){for(var n=this,i=[],a=0;a<n.length;a++){var s=n[a];if(s.isNode())for(var l=s.connectedEdges(),u=0;u<l.length;u++){var h=l[u],f=h.source(),d=h.target();e.outgoing&&f===s?(i.push(h),i.push(d)):e.incoming&&d===s&&(i.push(h),i.push(f))}}return this.spawn(i,!0).filter(r)}},"defineDagOneHop"),m0e=o(function(e){return function(r){for(var n=this,i=[],a={};;){var s=e.outgoing?n.outgoers():n.incomers();if(s.length===0)break;for(var l=!1,u=0;u<s.length;u++){var h=s[u],f=h.id();a[f]||(a[f]=!0,i.push(h),l=!0)}if(!l)break;n=s}return this.spawn(i,!0).filter(r)}},"defineDagAllHops");$a.clearTraversalCache=function(){for(var t=0;t<this.length;t++)this[t]._private.traversalCache=null};rr($a,{roots:d0e({noIncomingEdges:!0}),leaves:d0e({noOutgoingEdges:!0}),outgoers:tl(p0e({outgoing:!0}),"outgoers"),successors:m0e({outgoing:!0}),incomers:tl(p0e({incoming:!0}),"incomers"),predecessors:m0e({incoming:!0})});rr($a,{neighborhood:tl(function(t){for(var e=[],r=this.nodes(),n=0;n<r.length;n++)for(var i=r[n],a=i.connectedEdges(),s=0;s<a.length;s++){var l=a[s],u=l.source(),h=l.target(),f=i===u?h:u;f.length>0&&e.push(f[0]),e.push(l[0])}return this.spawn(e,!0).filter(t)},"neighborhood"),closedNeighborhood:o(function(e){return this.neighborhood().add(this).filter(e)},"closedNeighborhood"),openNeighborhood:o(function(e){return this.neighborhood(e)},"openNeighborhood")});$a.neighbourhood=$a.neighborhood;$a.closedNeighbourhood=$a.closedNeighborhood;$a.openNeighbourhood=$a.openNeighborhood;rr($a,{source:tl(o(function(e){var r=this[0],n;return r&&(n=r._private.source||r.cy().collection()),n&&e?n.filter(e):n},"sourceImpl"),"source"),target:tl(o(function(e){var r=this[0],n;return r&&(n=r._private.target||r.cy().collection()),n&&e?n.filter(e):n},"targetImpl"),"target"),sources:g0e({attr:"source"}),targets:g0e({attr:"target"})});o(g0e,"defineSourceFunction");rr($a,{edgesWith:tl(y0e(),"edgesWith"),edgesTo:tl(y0e({thisIsSrc:!0}),"edgesTo")});o(y0e,"defineEdgesWithFunction");rr($a,{connectedEdges:tl(function(t){for(var e=[],r=this,n=0;n<r.length;n++){var i=r[n];if(i.isNode())for(var a=i._private.edges,s=0;s<a.length;s++){var l=a[s];e.push(l)}}return this.spawn(e,!0).filter(t)},"connectedEdges"),connectedNodes:tl(function(t){for(var e=[],r=this,n=0;n<r.length;n++){var i=r[n];i.isEdge()&&(e.push(i.source()[0]),e.push(i.target()[0]))}return this.spawn(e,!0).filter(t)},"connectedNodes"),parallelEdges:tl(v0e(),"parallelEdges"),codirectedEdges:tl(v0e({codirected:!0}),"codirectedEdges")});o(v0e,"defineParallelEdgesFunction");rr($a,{components:o(function(e){var r=this,n=r.cy(),i=n.collection(),a=e==null?r.nodes():e.nodes(),s=[];e!=null&&a.empty()&&(a=e.sources());var l=o(function(f,d){i.merge(f),a.unmerge(f),d.merge(f)},"visitInComponent");if(a.empty())return r.spawn();var u=o(function(){var f=n.collection();s.push(f);var d=a[0];l(d,f),r.bfs({directed:!1,roots:d,visit:o(function(m){return l(m,f)},"visit")}),f.forEach(function(p){p.connectedEdges().forEach(function(m){r.has(m)&&f.has(m.source())&&f.has(m.target())&&f.merge(m)})})},"_loop");do u();while(a.length>0);return s},"components"),component:o(function(){var e=this[0];return e.cy().mutableElements().components(e)[0]},"component")});$a.componentsOf=$a.components;ka=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(e===void 0){ai("A collection must have a reference to the core");return}var a=new Xc,s=!1;if(!r)r=[];else if(r.length>0&&Ur(r[0])&&!t4(r[0])){s=!0;for(var l=[],u=new J1,h=0,f=r.length;h<f;h++){var d=r[h];d.data==null&&(d.data={});var p=d.data;if(p.id==null)p.id=fme();else if(e.hasElementWithId(p.id)||u.has(p.id))continue;var m=new NS(e,d,!1);l.push(m),u.add(p.id)}r=l}this.length=0;for(var g=0,y=r.length;g<y;g++){var v=r[g][0];if(v!=null){var x=v._private.data.id;(!n||!a.has(x))&&(n&&a.set(x,{index:this.length,ele:v}),this[this.length]=v,this.length++)}}this._private={eles:this,cy:e,get map(){return this.lazyMap==null&&this.rebuildMap(),this.lazyMap},set map(b){this.lazyMap=b},rebuildMap:o(function(){for(var w=this.lazyMap=new Xc,C=this.eles,T=0;T<C.length;T++){var E=C[T];w.set(E.id(),{index:T,ele:E})}},"rebuildMap")},n&&(this._private.map=a),s&&!i&&this.restore()},"Collection"),Mn=NS.prototype=ka.prototype=Object.create(Array.prototype);Mn.instanceString=function(){return"collection"};Mn.spawn=function(t,e){return new ka(this.cy(),t,e)};Mn.spawnSelf=function(){return this.spawn(this)};Mn.cy=function(){return this._private.cy};Mn.renderer=function(){return this._private.cy.renderer()};Mn.element=function(){return this[0]};Mn.collection=function(){return Q0e(this)?this:new ka(this._private.cy,[this])};Mn.unique=function(){return new ka(this._private.cy,this,!0)};Mn.hasElementWithId=function(t){return t=""+t,this._private.map.has(t)};Mn.getElementById=function(t){t=""+t;var e=this._private.cy,r=this._private.map.get(t);return r?r.ele:new ka(e)};Mn.$id=Mn.getElementById;Mn.poolIndex=function(){var t=this._private.cy,e=t._private.elements,r=this[0]._private.data.id;return e._private.map.get(r).index};Mn.indexOf=function(t){var e=t[0]._private.data.id;return this._private.map.get(e).index};Mn.indexOfId=function(t){return t=""+t,this._private.map.get(t).index};Mn.json=function(t){var e=this.element(),r=this.cy();if(e==null&&t)return this;if(e!=null){var n=e._private;if(Ur(t)){if(r.startBatch(),t.data){e.data(t.data);var i=n.data;if(e.isEdge()){var a=!1,s={},l=t.data.source,u=t.data.target;l!=null&&l!=i.source&&(s.source=""+l,a=!0),u!=null&&u!=i.target&&(s.target=""+u,a=!0),a&&(e=e.move(s))}else{var h="parent"in t.data,f=t.data.parent;h&&(f!=null||i.parent!=null)&&f!=i.parent&&(f===void 0&&(f=null),f!=null&&(f=""+f),e=e.move({parent:f}))}}t.position&&e.position(t.position);var d=o(function(y,v,x){var b=t[y];b!=null&&b!==n[y]&&(b?e[v]():e[x]())},"checkSwitch");return d("removed","remove","restore"),d("selected","select","unselect"),d("selectable","selectify","unselectify"),d("locked","lock","unlock"),d("grabbable","grabify","ungrabify"),d("pannable","panify","unpanify"),t.classes!=null&&e.classes(t.classes),r.endBatch(),this}else if(t===void 0){var p={data:Yc(n.data),position:Yc(n.position),group:n.group,removed:n.removed,selected:n.selected,selectable:n.selectable,locked:n.locked,grabbable:n.grabbable,pannable:n.pannable,classes:null};p.classes="";var m=0;return n.classes.forEach(function(g){return p.classes+=m++===0?g:" "+g}),p}}};Mn.jsons=function(){for(var t=[],e=0;e<this.length;e++){var r=this[e],n=r.json();t.push(n)}return t};Mn.clone=function(){for(var t=this.cy(),e=[],r=0;r<this.length;r++){var n=this[r],i=n.json(),a=new NS(t,i,!1);e.push(a)}return new ka(t,e)};Mn.copy=Mn.clone;Mn.restore=function(){for(var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=r.cy(),i=n._private,a=[],s=[],l,u=0,h=r.length;u<h;u++){var f=r[u];e&&!f.removed()||(f.isNode()?a.push(f):s.push(f))}l=a.concat(s);var d,p=o(function(){l.splice(d,1),d--},"removeFromElements");for(d=0;d<l.length;d++){var m=l[d],g=m._private,y=g.data;if(m.clearTraversalCache(),!(!e&&!g.removed)){if(y.id===void 0)y.id=fme();else if(Ct(y.id))y.id=""+y.id;else if(Af(y.id)||!Zt(y.id)){ai("Can not create element with invalid string ID `"+y.id+"`"),p();continue}else if(n.hasElementWithId(y.id)){ai("Can not create second element with ID `"+y.id+"`"),p();continue}}var v=y.id;if(m.isNode()){var x=g.position;x.x==null&&(x.x=0),x.y==null&&(x.y=0)}if(m.isEdge()){for(var b=m,w=["source","target"],C=w.length,T=!1,E=0;E<C;E++){var A=w[E],S=y[A];Ct(S)&&(S=y[A]=""+y[A]),S==null||S===""?(ai("Can not create edge `"+v+"` with unspecified "+A),T=!0):n.hasElementWithId(S)||(ai("Can not create edge `"+v+"` with nonexistant "+A+" `"+S+"`"),T=!0)}if(T){p();continue}var _=n.getElementById(y.source),I=n.getElementById(y.target);_.same(I)?_._private.edges.push(b):(_._private.edges.push(b),I._private.edges.push(b)),b._private.source=_,b._private.target=I}g.map=new Xc,g.map.set(v,{ele:m,index:0}),g.removed=!1,e&&n.addToPool(m)}for(var D=0;D<a.length;D++){var k=a[D],L=k._private.data;Ct(L.parent)&&(L.parent=""+L.parent);var R=L.parent,O=R!=null;if(O||k._private.parent){var M=k._private.parent?n.collection().merge(k._private.parent):n.getElementById(R);if(M.empty())L.parent=void 0;else if(M[0].removed())un("Node added with missing parent, reference to parent removed"),L.parent=void 0,k._private.parent=null;else{for(var B=!1,F=M;!F.empty();){if(k.same(F)){B=!0,L.parent=void 0;break}F=F.parent()}B||(M[0]._private.children.push(k),k._private.parent=M[0],i.hasCompoundNodes=!0)}}}if(l.length>0){for(var P=l.length===r.length?r:new ka(n,l),z=0;z<P.length;z++){var $=P[z];$.isNode()||($.parallelEdges().clearTraversalCache(),$.source().clearTraversalCache(),$.target().clearTraversalCache())}var H;i.hasCompoundNodes?H=n.collection().merge(P).merge(P.connectedNodes()).merge(P.parent()):H=P,H.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(t),t?P.emitAndNotify("add"):e&&P.emit("add")}return r};Mn.removed=function(){var t=this[0];return t&&t._private.removed};Mn.inside=function(){var t=this[0];return t&&!t._private.removed};Mn.remove=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=[],i={},a=r._private.cy;function s(R){for(var O=R._private.edges,M=0;M<O.length;M++)u(O[M])}o(s,"addConnectedEdges");function l(R){for(var O=R._private.children,M=0;M<O.length;M++)u(O[M])}o(l,"addChildren");function u(R){var O=i[R.id()];e&&R.removed()||O||(i[R.id()]=!0,R.isNode()?(n.push(R),s(R),l(R)):n.unshift(R))}o(u,"add");for(var h=0,f=r.length;h<f;h++){var d=r[h];u(d)}function p(R,O){var M=R._private.edges;Df(M,O),R.clearTraversalCache()}o(p,"removeEdgeRef");function m(R){R.clearTraversalCache()}o(m,"removeParallelRef");var g=[];g.ids={};function y(R,O){O=O[0],R=R[0];var M=R._private.children,B=R.id();Df(M,O),O._private.parent=null,g.ids[B]||(g.ids[B]=!0,g.push(R))}o(y,"removeChildRef"),r.dirtyCompoundBoundsCache(),e&&a.removeFromPool(n);for(var v=0;v<n.length;v++){var x=n[v];if(x.isEdge()){var b=x.source()[0],w=x.target()[0];p(b,x),p(w,x);for(var C=x.parallelEdges(),T=0;T<C.length;T++){var E=C[T];m(E),E.isBundledBezier()&&E.dirtyBoundingBoxCache()}}else{var A=x.parent();A.length!==0&&y(A,x)}e&&(x._private.removed=!0)}var S=a._private.elements;a._private.hasCompoundNodes=!1;for(var _=0;_<S.length;_++){var I=S[_];if(I.isParent()){a._private.hasCompoundNodes=!0;break}}var D=new ka(this.cy(),n);D.size()>0&&(t?D.emitAndNotify("remove"):e&&D.emit("remove"));for(var k=0;k<g.length;k++){var L=g[k];(!e||!L.removed())&&L.updateStyle()}return D};Mn.move=function(t){var e=this._private.cy,r=this,n=!1,i=!1,a=o(function(g){return g==null?g:""+g},"toString");if(t.source!==void 0||t.target!==void 0){var s=a(t.source),l=a(t.target),u=s!=null&&e.hasElementWithId(s),h=l!=null&&e.hasElementWithId(l);(u||h)&&(e.batch(function(){r.remove(n,i),r.emitAndNotify("moveout");for(var m=0;m<r.length;m++){var g=r[m],y=g._private.data;g.isEdge()&&(u&&(y.source=s),h&&(y.target=l))}r.restore(n,i)}),r.emitAndNotify("move"))}else if(t.parent!==void 0){var f=a(t.parent),d=f===null||e.hasElementWithId(f);if(d){var p=f===null?void 0:f;e.batch(function(){var m=r.remove(n,i);m.emitAndNotify("moveout");for(var g=0;g<r.length;g++){var y=r[g],v=y._private.data;y.isNode()&&(v.parent=p)}m.restore(n,i)}),r.emitAndNotify("move")}}return this};[Sme,Zje,hS,Sf,Z1,pKe,FS,LKe,Kme,Qme,OKe,ES,fS,Ta,Cf,$a].forEach(function(t){rr(Mn,t)});VKe={add:o(function(e){var r,n=this;if(go(e)){var i=e;if(i._private.cy===n)r=i.restore();else{for(var a=[],s=0;s<i.length;s++){var l=i[s];a.push(l.json())}r=new ka(n,a)}}else if(En(e)){var u=e;r=new ka(n,u)}else if(Ur(e)&&(En(e.nodes)||En(e.edges))){for(var h=e,f=[],d=["nodes","edges"],p=0,m=d.length;p<m;p++){var g=d[p],y=h[g];if(En(y))for(var v=0,x=y.length;v<x;v++){var b=rr({group:g},y[v]);f.push(b)}}r=new ka(n,f)}else{var w=e;r=new NS(n,w).collection()}return r},"add"),remove:o(function(e){if(!go(e)){if(Zt(e)){var r=e;e=this.$(r)}}return e.remove()},"remove")};o(UKe,"generateCubicBezier");HKe=function(){function t(n){return-n.tension*n.x-n.friction*n.v}o(t,"springAccelerationForState");function e(n,i,a){var s={x:n.x+a.dx*i,v:n.v+a.dv*i,tension:n.tension,friction:n.friction};return{dx:s.v,dv:t(s)}}o(e,"springEvaluateStateWithDerivative");function r(n,i){var a={dx:n.v,dv:t(n)},s=e(n,i*.5,a),l=e(n,i*.5,s),u=e(n,i,l),h=1/6*(a.dx+2*(s.dx+l.dx)+u.dx),f=1/6*(a.dv+2*(s.dv+l.dv)+u.dv);return n.x=n.x+h*i,n.v=n.v+f*i,n}return o(r,"springIntegrateState"),o(function n(i,a,s){var l={x:-1,v:0,tension:null,friction:null},u=[0],h=0,f=1/1e4,d=16/1e3,p,m,g;for(i=parseFloat(i)||500,a=parseFloat(a)||20,s=s||null,l.tension=i,l.friction=a,p=s!==null,p?(h=n(i,a),m=h/s*d):m=d;g=r(g||l,m),u.push(1+g.x),h+=16,Math.abs(g.x)>f&&Math.abs(g.v)>f;);return p?function(y){return u[y*(u.length-1)|0]}:h},"springRK4Factory")}(),Nn=o(function(e,r,n,i){var a=UKe(e,r,n,i);return function(s,l,u){return s+(l-s)*a(u)}},"cubicBezier"),dS={linear:o(function(e,r,n){return e+(r-e)*n},"linear"),ease:Nn(.25,.1,.25,1),"ease-in":Nn(.42,0,1,1),"ease-out":Nn(0,0,.58,1),"ease-in-out":Nn(.42,0,.58,1),"ease-in-sine":Nn(.47,0,.745,.715),"ease-out-sine":Nn(.39,.575,.565,1),"ease-in-out-sine":Nn(.445,.05,.55,.95),"ease-in-quad":Nn(.55,.085,.68,.53),"ease-out-quad":Nn(.25,.46,.45,.94),"ease-in-out-quad":Nn(.455,.03,.515,.955),"ease-in-cubic":Nn(.55,.055,.675,.19),"ease-out-cubic":Nn(.215,.61,.355,1),"ease-in-out-cubic":Nn(.645,.045,.355,1),"ease-in-quart":Nn(.895,.03,.685,.22),"ease-out-quart":Nn(.165,.84,.44,1),"ease-in-out-quart":Nn(.77,0,.175,1),"ease-in-quint":Nn(.755,.05,.855,.06),"ease-out-quint":Nn(.23,1,.32,1),"ease-in-out-quint":Nn(.86,0,.07,1),"ease-in-expo":Nn(.95,.05,.795,.035),"ease-out-expo":Nn(.19,1,.22,1),"ease-in-out-expo":Nn(1,0,0,1),"ease-in-circ":Nn(.6,.04,.98,.335),"ease-out-circ":Nn(.075,.82,.165,1),"ease-in-out-circ":Nn(.785,.135,.15,.86),spring:o(function(e,r,n){if(n===0)return dS.linear;var i=HKe(e,r,n);return function(a,s,l){return a+(s-a)*i(l)}},"spring"),"cubic-bezier":Nn};o(x0e,"getEasedValue");o(b0e,"getValue");o($1,"ease");o(WKe,"step$1");o(Rb,"valid");o(qKe,"startAnimation");o(w0e,"stepAll");YKe={animate:cn.animate(),animation:cn.animation(),animated:cn.animated(),clearQueue:cn.clearQueue(),delay:cn.delay(),delayAnimation:cn.delayAnimation(),stop:cn.stop(),addToAnimationPool:o(function(e){var r=this;r.styleEnabled()&&r._private.aniEles.merge(e)},"addToAnimationPool"),stopAnimationLoop:o(function(){this._private.animationsRunning=!1},"stopAnimationLoop"),startAnimationLoop:o(function(){var e=this;if(e._private.animationsRunning=!0,!e.styleEnabled())return;function r(){e._private.animationsRunning&&xS(o(function(a){w0e(a,e),r()},"animationStep"))}o(r,"headlessStep");var n=e.renderer();n&&n.beforeRender?n.beforeRender(o(function(a,s){w0e(s,e)},"rendererAnimationStep"),n.beforeRenderPriorities.animations):r()},"startAnimationLoop")},XKe={qualifierCompare:o(function(e,r){return e==null||r==null?e==null&&r==null:e.sameText(r)},"qualifierCompare"),eventMatches:o(function(e,r,n){var i=r.qualifier;return i!=null?e!==n.target&&t4(n.target)&&i.matches(n.target):!0},"eventMatches"),addEventFields:o(function(e,r){r.cy=e,r.target=e},"addEventFields"),callbackContext:o(function(e,r,n){return r.qualifier!=null?n.target:e},"callbackContext")},iS=o(function(e){return Zt(e)?new Lf(e):e},"argSelector"),ege={createEmitter:o(function(){var e=this._private;return e.emitter||(e.emitter=new $S(XKe,this)),this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(e,r,n){return this.emitter().on(e,iS(r),n),this},"on"),removeListener:o(function(e,r,n){return this.emitter().removeListener(e,iS(r),n),this},"removeListener"),removeAllListeners:o(function(){return this.emitter().removeAllListeners(),this},"removeAllListeners"),one:o(function(e,r,n){return this.emitter().one(e,iS(r),n),this},"one"),once:o(function(e,r,n){return this.emitter().one(e,iS(r),n),this},"once"),emit:o(function(e,r){return this.emitter().emit(e,r),this},"emit"),emitAndNotify:o(function(e,r){return this.emit(e),this.notify(e,r),this},"emitAndNotify")};cn.eventAliasesOn(ege);VP={png:o(function(e){var r=this._private.renderer;return e=e||{},r.png(e)},"png"),jpg:o(function(e){var r=this._private.renderer;return e=e||{},e.bg=e.bg||"#fff",r.jpg(e)},"jpg")};VP.jpeg=VP.jpg;pS={layout:o(function(e){var r=this;if(e==null){ai("Layout options must be specified to make a layout");return}if(e.name==null){ai("A `name` must be specified to make a layout");return}var n=e.name,i=r.extension("layout",n);if(i==null){ai("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var a;Zt(e.eles)?a=r.$(e.eles):a=e.eles!=null?e.eles:r.$();var s=new i(rr({},e,{cy:r,eles:a}));return s},"layout")};pS.createLayout=pS.makeLayout=pS.layout;jKe={notify:o(function(e,r){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var i=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();r!=null&&i.merge(r);return}if(n.notificationsEnabled){var a=this.renderer();this.destroyed()||!a||a.notify(e,r)}},"notify"),notifications:o(function(e){var r=this._private;return e===void 0?r.notificationsEnabled:(r.notificationsEnabled=!!e,this)},"notifications"),noNotifications:o(function(e){this.notifications(!1),e(),this.notifications(!0)},"noNotifications"),batching:o(function(){return this._private.batchCount>0},"batching"),startBatch:o(function(){var e=this._private;return e.batchCount==null&&(e.batchCount=0),e.batchCount===0&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},"startBatch"),endBatch:o(function(){var e=this._private;if(e.batchCount===0)return this;if(e.batchCount--,e.batchCount===0){e.batchStyleEles.updateStyle();var r=this.renderer();Object.keys(e.batchNotifications).forEach(function(n){var i=e.batchNotifications[n];i.empty()?r.notify(n):r.notify(n,i)})}return this},"endBatch"),batch:o(function(e){return this.startBatch(),e(),this.endBatch(),this},"batch"),batchData:o(function(e){var r=this;return this.batch(function(){for(var n=Object.keys(e),i=0;i<n.length;i++){var a=n[i],s=e[a],l=r.getElementById(a);l.data(s)}})},"batchData")},KKe=la({hideEdgesOnViewport:!1,textureOnViewport:!1,motionBlur:!1,motionBlurOpacity:.05,pixelRatio:void 0,desktopTapThreshold:4,touchTapThreshold:8,wheelSensitivity:1,debug:!1,showFps:!1,webgl:!1,webglDebug:!1,webglDebugShowAtlases:!1,webglTexSize:2048,webglTexRows:12,webglBatchSize:2048,webglTexPerBatch:14,webglBgColor:[255,255,255]}),UP={renderTo:o(function(e,r,n,i){var a=this._private.renderer;return a.renderTo(e,r,n,i),this},"renderTo"),renderer:o(function(){return this._private.renderer},"renderer"),forceRender:o(function(){return this.notify("draw"),this},"forceRender"),resize:o(function(){return this.invalidateSize(),this.emitAndNotify("resize"),this},"resize"),initRenderer:o(function(e){var r=this,n=r.extension("renderer",e.name);if(n==null){ai("Can not initialise: No such renderer `".concat(e.name,"` found. Did you forget to import it and `cytoscape.use()` it?"));return}e.wheelSensitivity!==void 0&&un("You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine.");var i=KKe(e);i.cy=r,r._private.renderer=new n(i),this.notify("init")},"initRenderer"),destroyRenderer:o(function(){var e=this;e.notify("destroy");var r=e.container();if(r)for(r._cyreg=null;r.childNodes.length>0;)r.removeChild(r.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach(function(n){var i=n._private;i.rscratch={},i.rstyle={},i.animation.current=[],i.animation.queue=[]})},"destroyRenderer"),onRender:o(function(e){return this.on("render",e)},"onRender"),offRender:o(function(e){return this.off("render",e)},"offRender")};UP.invalidateDimensions=UP.resize;mS={collection:o(function(e,r){return Zt(e)?this.$(e):go(e)?e.collection():En(e)?(r||(r={}),new ka(this,e,r.unique,r.removed)):new ka(this)},"collection"),nodes:o(function(e){var r=this.$(function(n){return n.isNode()});return e?r.filter(e):r},"nodes"),edges:o(function(e){var r=this.$(function(n){return n.isEdge()});return e?r.filter(e):r},"edges"),$:o(function(e){var r=this._private.elements;return e?r.filter(e):r.spawnSelf()},"$"),mutableElements:o(function(){return this._private.elements},"mutableElements")};mS.elements=mS.filter=mS.$;Ga={},$b="t",QKe="f";Ga.apply=function(t){for(var e=this,r=e._private,n=r.cy,i=n.collection(),a=0;a<t.length;a++){var s=t[a],l=e.getContextMeta(s);if(!l.empty){var u=e.getContextStyle(l),h=e.applyContextStyle(l,u,s);s._private.appliedInitStyle?e.updateTransitions(s,h.diffProps):s._private.appliedInitStyle=!0;var f=e.updateStyleHints(s);f&&i.push(s)}}return i};Ga.getPropertiesDiff=function(t,e){var r=this,n=r._private.propDiffs=r._private.propDiffs||{},i=t+"-"+e,a=n[i];if(a)return a;for(var s=[],l={},u=0;u<r.length;u++){var h=r[u],f=t[u]===$b,d=e[u]===$b,p=f!==d,m=h.mappedProperties.length>0;if(p||d&&m){var g=void 0;p&&m||p?g=h.properties:m&&(g=h.mappedProperties);for(var y=0;y<g.length;y++){for(var v=g[y],x=v.name,b=!1,w=u+1;w<r.length;w++){var C=r[w],T=e[w]===$b;if(T&&(b=C.properties[v.name]!=null,b))break}!l[x]&&!b&&(l[x]=!0,s.push(x))}}}return n[i]=s,s};Ga.getContextMeta=function(t){for(var e=this,r="",n,i=t._private.styleCxtKey||"",a=0;a<e.length;a++){var s=e[a],l=s.selector&&s.selector.matches(t);l?r+=$b:r+=QKe}return n=e.getPropertiesDiff(i,r),t._private.styleCxtKey=r,{key:r,diffPropNames:n,empty:n.length===0}};Ga.getContextStyle=function(t){var e=t.key,r=this,n=this._private.contextStyles=this._private.contextStyles||{};if(n[e])return n[e];for(var i={_private:{key:e}},a=0;a<r.length;a++){var s=r[a],l=e[a]===$b;if(l)for(var u=0;u<s.properties.length;u++){var h=s.properties[u];i[h.name]=h}}return n[e]=i,i};Ga.applyContextStyle=function(t,e,r){for(var n=this,i=t.diffPropNames,a={},s=n.types,l=0;l<i.length;l++){var u=i[l],h=e[u],f=r.pstyle(u);if(!h)if(f)f.bypass?h={name:u,deleteBypassed:!0}:h={name:u,delete:!0};else continue;if(f!==h){if(h.mapped===s.fn&&f!=null&&f.mapping!=null&&f.mapping.value===h.value){var d=f.mapping,p=d.fnValue=h.value(r);if(p===d.prevFnValue)continue}var m=a[u]={prev:f};n.applyParsedProperty(r,h),m.next=r.pstyle(u),m.next&&m.next.bypass&&(m.next=m.next.bypassed)}}return{diffProps:a}};Ga.updateStyleHints=function(t){var e=t._private,r=this,n=r.propertyGroupNames,i=r.propertyGroupKeys,a=o(function(te,J,se){return r.getPropertiesHash(te,J,se)},"propHash"),s=e.styleKey;if(t.removed())return!1;var l=e.group==="nodes",u=t._private.style;n=Object.keys(u);for(var h=0;h<i.length;h++){var f=i[h];e.styleKeys[f]=[V1,Ob]}for(var d=o(function(te,J){return e.styleKeys[J][0]=Hb(te,e.styleKeys[J][0])},"updateGrKey1"),p=o(function(te,J){return e.styleKeys[J][1]=Wb(te,e.styleKeys[J][1])},"updateGrKey2"),m=o(function(te,J){d(te,J),p(te,J)},"updateGrKey"),g=o(function(te,J){for(var se=0;se<te.length;se++){var ue=te.charCodeAt(se);d(ue,J),p(ue,J)}},"updateGrKeyWStr"),y=2e9,v=o(function(te){return-128<te&&te<128&&Math.floor(te)!==te?y-(te*1024|0):te},"cleanNum"),x=0;x<n.length;x++){var b=n[x],w=u[b];if(w!=null){var C=this.properties[b],T=C.type,E=C.groupKey,A=void 0;C.hashOverride!=null?A=C.hashOverride(t,w):w.pfValue!=null&&(A=w.pfValue);var S=C.enums==null?w.value:null,_=A!=null,I=S!=null,D=_||I,k=w.units;if(T.number&&D&&!T.multiple){var L=_?A:S;m(v(L),E),!_&&k!=null&&g(k,E)}else g(w.strValue,E)}}for(var R=[V1,Ob],O=0;O<i.length;O++){var M=i[O],B=e.styleKeys[M];R[0]=Hb(B[0],R[0]),R[1]=Wb(B[1],R[1])}e.styleKey=rqe(R[0],R[1]);var F=e.styleKeys;e.labelDimsKey=wf(F.labelDimensions);var P=a(t,["label"],F.labelDimensions);if(e.labelKey=wf(P),e.labelStyleKey=wf(j6(F.commonLabel,P)),!l){var z=a(t,["source-label"],F.labelDimensions);e.sourceLabelKey=wf(z),e.sourceLabelStyleKey=wf(j6(F.commonLabel,z));var $=a(t,["target-label"],F.labelDimensions);e.targetLabelKey=wf($),e.targetLabelStyleKey=wf(j6(F.commonLabel,$))}if(l){var H=e.styleKeys,Q=H.nodeBody,j=H.nodeBorder,ie=H.nodeOutline,ne=H.backgroundImage,le=H.compound,he=H.pie,K=[Q,j,ie,ne,le,he].filter(function(X){return X!=null}).reduce(j6,[V1,Ob]);e.nodeKey=wf(K),e.hasPie=he!=null&&he[0]!==V1&&he[1]!==Ob}return s!==e.styleKey};Ga.clearStyleHints=function(t){var e=t._private;e.styleCxtKey="",e.styleKeys={},e.styleKey=null,e.labelKey=null,e.labelStyleKey=null,e.sourceLabelKey=null,e.sourceLabelStyleKey=null,e.targetLabelKey=null,e.targetLabelStyleKey=null,e.nodeKey=null,e.hasPie=null};Ga.applyParsedProperty=function(t,e){var r=this,n=e,i=t._private.style,a,s=r.types,l=r.properties[n.name].type,u=n.bypass,h=i[n.name],f=h&&h.bypass,d=t._private,p="mapping",m=o(function(Q){return Q==null?null:Q.pfValue!=null?Q.pfValue:Q.value},"getVal"),g=o(function(){var Q=m(h),j=m(n);r.checkTriggers(t,n.name,Q,j)},"checkTriggers");if(e.name==="curve-style"&&t.isEdge()&&(e.value!=="bezier"&&t.isLoop()||e.value==="haystack"&&(t.source().isParent()||t.target().isParent()))&&(n=e=this.parse(e.name,"bezier",u)),n.delete)return i[n.name]=void 0,g(),!0;if(n.deleteBypassed)return h?h.bypass?(h.bypassed=void 0,g(),!0):!1:(g(),!0);if(n.deleteBypass)return h?h.bypass?(i[n.name]=h.bypassed,g(),!0):!1:(g(),!0);var y=o(function(){un("Do not assign mappings to elements without corresponding data (i.e. ele `"+t.id()+"` has no mapping for property `"+n.name+"` with data field `"+n.field+"`); try a `["+n.field+"]` selector to limit scope to elements with `"+n.field+"` defined")},"printMappingErr");switch(n.mapped){case s.mapData:{for(var v=n.field.split("."),x=d.data,b=0;b<v.length&&x;b++){var w=v[b];x=x[w]}if(x==null)return y(),!1;var C;if(Ct(x)){var T=n.fieldMax-n.fieldMin;T===0?C=0:C=(x-n.fieldMin)/T}else return un("Do not use continuous mappers without specifying numeric data (i.e. `"+n.field+": "+x+"` for `"+t.id()+"` is non-numeric)"),!1;if(C<0?C=0:C>1&&(C=1),l.color){var E=n.valueMin[0],A=n.valueMax[0],S=n.valueMin[1],_=n.valueMax[1],I=n.valueMin[2],D=n.valueMax[2],k=n.valueMin[3]==null?1:n.valueMin[3],L=n.valueMax[3]==null?1:n.valueMax[3],R=[Math.round(E+(A-E)*C),Math.round(S+(_-S)*C),Math.round(I+(D-I)*C),Math.round(k+(L-k)*C)];a={bypass:n.bypass,name:n.name,value:R,strValue:"rgb("+R[0]+", "+R[1]+", "+R[2]+")"}}else if(l.number){var O=n.valueMin+(n.valueMax-n.valueMin)*C;a=this.parse(n.name,O,n.bypass,p)}else return!1;if(!a)return y(),!1;a.mapping=n,n=a;break}case s.data:{for(var M=n.field.split("."),B=d.data,F=0;F<M.length&&B;F++){var P=M[F];B=B[P]}if(B!=null&&(a=this.parse(n.name,B,n.bypass,p)),!a)return y(),!1;a.mapping=n,n=a;break}case s.fn:{var z=n.value,$=n.fnValue!=null?n.fnValue:z(t);if(n.prevFnValue=$,$==null)return un("Custom function mappers may not return null (i.e. `"+n.name+"` for ele `"+t.id()+"` is null)"),!1;if(a=this.parse(n.name,$,n.bypass,p),!a)return un("Custom function mappers may not return invalid values for the property type (i.e. `"+n.name+"` for ele `"+t.id()+"` is invalid)"),!1;a.mapping=Yc(n),n=a;break}case void 0:break;default:return!1}return u?(f?n.bypassed=h.bypassed:n.bypassed=h,i[n.name]=n):f?h.bypassed=n:i[n.name]=n,g(),!0};Ga.cleanElements=function(t,e){for(var r=0;r<t.length;r++){var n=t[r];if(this.clearStyleHints(n),n.dirtyCompoundBoundsCache(),n.dirtyBoundingBoxCache(),!e)n._private.style={};else for(var i=n._private.style,a=Object.keys(i),s=0;s<a.length;s++){var l=a[s],u=i[l];u!=null&&(u.bypass?u.bypassed=null:i[l]=null)}}};Ga.update=function(){var t=this._private.cy,e=t.mutableElements();e.updateStyle()};Ga.updateTransitions=function(t,e){var r=this,n=t._private,i=t.pstyle("transition-property").value,a=t.pstyle("transition-duration").pfValue,s=t.pstyle("transition-delay").pfValue;if(i.length>0&&a>0){for(var l={},u=!1,h=0;h<i.length;h++){var f=i[h],d=t.pstyle(f),p=e[f];if(p){var m=p.prev,g=m,y=p.next!=null?p.next:d,v=!1,x=void 0,b=1e-6;g&&(Ct(g.pfValue)&&Ct(y.pfValue)?(v=y.pfValue-g.pfValue,x=g.pfValue+b*v):Ct(g.value)&&Ct(y.value)?(v=y.value-g.value,x=g.value+b*v):En(g.value)&&En(y.value)&&(v=g.value[0]!==y.value[0]||g.value[1]!==y.value[1]||g.value[2]!==y.value[2],x=g.strValue),v&&(l[f]=y.strValue,this.applyBypass(t,f,x),u=!0))}}if(!u)return;n.transitioning=!0,new ey(function(w){s>0?t.delayAnimation(s).play().promise().then(w):w()}).then(function(){return t.animation({style:l,duration:a,easing:t.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){r.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1})}else n.transitioning&&(this.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1)};Ga.checkTrigger=function(t,e,r,n,i,a){var s=this.properties[e],l=i(s);l!=null&&l(r,n)&&a(s)};Ga.checkZOrderTrigger=function(t,e,r,n){var i=this;this.checkTrigger(t,e,r,n,function(a){return a.triggersZOrder},function(){i._private.cy.notify("zorder",t)})};Ga.checkBoundsTrigger=function(t,e,r,n){this.checkTrigger(t,e,r,n,function(i){return i.triggersBounds},function(i){t.dirtyCompoundBoundsCache(),t.dirtyBoundingBoxCache(),i.triggersBoundsOfParallelBeziers&&e==="curve-style"&&(r==="bezier"||n==="bezier")&&t.parallelEdges().forEach(function(a){a.dirtyBoundingBoxCache()}),i.triggersBoundsOfConnectedEdges&&e==="display"&&(r==="none"||n==="none")&&t.connectedEdges().forEach(function(a){a.dirtyBoundingBoxCache()})})};Ga.checkTriggers=function(t,e,r,n){t.dirtyStyleCache(),this.checkZOrderTrigger(t,e,r,n),this.checkBoundsTrigger(t,e,r,n)};s4={};s4.applyBypass=function(t,e,r,n){var i=this,a=[],s=!0;if(e==="*"||e==="**"){if(r!==void 0)for(var l=0;l<i.properties.length;l++){var u=i.properties[l],h=u.name,f=this.parse(h,r,!0);f&&a.push(f)}}else if(Zt(e)){var d=this.parse(e,r,!0);d&&a.push(d)}else if(Ur(e)){var p=e;n=r;for(var m=Object.keys(p),g=0;g<m.length;g++){var y=m[g],v=p[y];if(v===void 0&&(v=p[LS(y)]),v!==void 0){var x=this.parse(y,v,!0);x&&a.push(x)}}}else return!1;if(a.length===0)return!1;for(var b=!1,w=0;w<t.length;w++){for(var C=t[w],T={},E=void 0,A=0;A<a.length;A++){var S=a[A];if(n){var _=C.pstyle(S.name);E=T[S.name]={prev:_}}b=this.applyParsedProperty(C,Yc(S))||b,n&&(E.next=C.pstyle(S.name))}b&&this.updateStyleHints(C),n&&this.updateTransitions(C,T,s)}return b};s4.overrideBypass=function(t,e,r){e=eB(e);for(var n=0;n<t.length;n++){var i=t[n],a=i._private.style[e],s=this.properties[e].type,l=s.color,u=s.mutiple,h=a?a.pfValue!=null?a.pfValue:a.value:null;!a||!a.bypass?this.applyBypass(i,e,r):(a.value=r,a.pfValue!=null&&(a.pfValue=r),l?a.strValue="rgb("+r.join(",")+")":u?a.strValue=r.join(" "):a.strValue=""+r,this.updateStyleHints(i)),this.checkTriggers(i,e,h,r)}};s4.removeAllBypasses=function(t,e){return this.removeBypasses(t,this.propertyNames,e)};s4.removeBypasses=function(t,e,r){for(var n=!0,i=0;i<t.length;i++){for(var a=t[i],s={},l=0;l<e.length;l++){var u=e[l],h=this.properties[u],f=a.pstyle(h.name);if(!(!f||!f.bypass)){var d="",p=this.parse(u,d,!0),m=s[h.name]={prev:f};this.applyParsedProperty(a,p),m.next=a.pstyle(h.name)}}this.updateStyleHints(a),r&&this.updateTransitions(a,s,n)}};pB={};pB.getEmSizeInPixels=function(){var t=this.containerCss("font-size");return t!=null?parseFloat(t):1};pB.containerCss=function(t){var e=this._private.cy,r=e.container(),n=e.window();if(n&&r&&n.getComputedStyle)return n.getComputedStyle(r).getPropertyValue(t)};jc={};jc.getRenderedStyle=function(t,e){return e?this.getStylePropertyValue(t,e,!0):this.getRawStyle(t,!0)};jc.getRawStyle=function(t,e){var r=this;if(t=t[0],t){for(var n={},i=0;i<r.properties.length;i++){var a=r.properties[i],s=r.getStylePropertyValue(t,a.name,e);s!=null&&(n[a.name]=s,n[LS(a.name)]=s)}return n}};jc.getIndexedStyle=function(t,e,r,n){var i=t.pstyle(e)[r][n];return i??t.cy().style().getDefaultProperty(e)[r][0]};jc.getStylePropertyValue=function(t,e,r){var n=this;if(t=t[0],t){var i=n.properties[e];i.alias&&(i=i.pointsTo);var a=i.type,s=t.pstyle(i.name);if(s){var l=s.value,u=s.units,h=s.strValue;if(r&&a.number&&l!=null&&Ct(l)){var f=t.cy().zoom(),d=o(function(v){return v*f},"getRenderedValue"),p=o(function(v,x){return d(v)+x},"getValueStringWithUnits"),m=En(l),g=m?u.every(function(y){return y!=null}):u!=null;return g?m?l.map(function(y,v){return p(y,u[v])}).join(" "):p(l,u):m?l.map(function(y){return Zt(y)?y:""+d(y)}).join(" "):""+d(l)}else if(h!=null)return h}return null}};jc.getAnimationStartStyle=function(t,e){for(var r={},n=0;n<e.length;n++){var i=e[n],a=i.name,s=t.pstyle(a);s!==void 0&&(Ur(s)?s=this.parse(a,s.strValue):s=this.parse(a,s)),s&&(r[a]=s)}return r};jc.getPropsList=function(t){var e=this,r=[],n=t,i=e.properties;if(n)for(var a=Object.keys(n),s=0;s<a.length;s++){var l=a[s],u=n[l],h=i[l]||i[eB(l)],f=this.parse(h.name,u);f&&r.push(f)}return r};jc.getNonDefaultPropertiesHash=function(t,e,r){var n=r.slice(),i,a,s,l,u,h;for(u=0;u<e.length;u++)if(i=e[u],a=t.pstyle(i,!1),a!=null)if(a.pfValue!=null)n[0]=Hb(l,n[0]),n[1]=Wb(l,n[1]);else for(s=a.strValue,h=0;h<s.length;h++)l=s.charCodeAt(h),n[0]=Hb(l,n[0]),n[1]=Wb(l,n[1]);return n};jc.getPropertiesHash=jc.getNonDefaultPropertiesHash;VS={};VS.appendFromJson=function(t){for(var e=this,r=0;r<t.length;r++){var n=t[r],i=n.selector,a=n.style||n.css,s=Object.keys(a);e.selector(i);for(var l=0;l<s.length;l++){var u=s[l],h=a[u];e.css(u,h)}}return e};VS.fromJson=function(t){var e=this;return e.resetToDefault(),e.appendFromJson(t),e};VS.json=function(){for(var t=[],e=this.defaultLength;e<this.length;e++){for(var r=this[e],n=r.selector,i=r.properties,a={},s=0;s<i.length;s++){var l=i[s];a[l.name]=l.strValue}t.push({selector:n?n.toString():"core",style:a})}return t};mB={};mB.appendFromString=function(t){var e=this,r=this,n=""+t,i,a,s;n=n.replace(/[/][*](\s|.)+?[*][/]/g,"");function l(){n.length>i.length?n=n.substr(i.length):n=""}o(l,"removeSelAndBlockFromRemaining");function u(){a.length>s.length?a=a.substr(s.length):a=""}for(o(u,"removePropAndValFromRem");;){var h=n.match(/^\s*$/);if(h)break;var f=n.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!f){un("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+n);break}i=f[0];var d=f[1];if(d!=="core"){var p=new Lf(d);if(p.invalid){un("Skipping parsing of block: Invalid selector found in string stylesheet: "+d),l();continue}}var m=f[2],g=!1;a=m;for(var y=[];;){var v=a.match(/^\s*$/);if(v)break;var x=a.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!x){un("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+m),g=!0;break}s=x[0];var b=x[1],w=x[2],C=e.properties[b];if(!C){un("Skipping property: Invalid property name in: "+s),u();continue}var T=r.parse(b,w);if(!T){un("Skipping property: Invalid property definition in: "+s),u();continue}y.push({name:b,val:w}),u()}if(g){l();break}r.selector(d);for(var E=0;E<y.length;E++){var A=y[E];r.css(A.name,A.val)}l()}return r};mB.fromString=function(t){var e=this;return e.resetToDefault(),e.appendFromString(t),e};wa={};(function(){var t=Hi,e=sWe,r=lWe,n=cWe,i=uWe,a=o(function(K){return"^"+K+"\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"},"data"),s=o(function(K){var X=t+"|\\w+|"+e+"|"+r+"|"+n+"|"+i;return"^"+K+"\\s*\\(([\\w\\.]+)\\s*\\,\\s*("+t+")\\s*\\,\\s*("+t+")\\s*,\\s*("+X+")\\s*\\,\\s*("+X+")\\)$"},"mapData"),l=[`^url\\s*\\(\\s*['"]?(.+?)['"]?\\s*\\)$`,"^(none)$","^(.+)$"];wa.types={time:{number:!0,min:0,units:"s|ms",implicitUnits:"ms"},percent:{number:!0,min:0,max:100,units:"%",implicitUnits:"%"},percentages:{number:!0,min:0,max:100,units:"%",implicitUnits:"%",multiple:!0},zeroOneNumber:{number:!0,min:0,max:1,unitless:!0},zeroOneNumbers:{number:!0,min:0,max:1,unitless:!0,multiple:!0},nOneOneNumber:{number:!0,min:-1,max:1,unitless:!0},nonNegativeInt:{number:!0,min:0,integer:!0,unitless:!0},nonNegativeNumber:{number:!0,min:0,unitless:!0},position:{enums:["parent","origin"]},nodeSize:{number:!0,min:0,enums:["label"]},number:{number:!0,unitless:!0},numbers:{number:!0,unitless:!0,multiple:!0},positiveNumber:{number:!0,unitless:!0,min:0,strictMin:!0},size:{number:!0,min:0},bidirectionalSize:{number:!0},bidirectionalSizeMaybePercent:{number:!0,allowPercent:!0},bidirectionalSizes:{number:!0,multiple:!0},sizeMaybePercent:{number:!0,min:0,allowPercent:!0},axisDirection:{enums:["horizontal","leftward","rightward","vertical","upward","downward","auto"]},paddingRelativeTo:{enums:["width","height","average","min","max"]},bgWH:{number:!0,min:0,allowPercent:!0,enums:["auto"],multiple:!0},bgPos:{number:!0,allowPercent:!0,multiple:!0},bgRelativeTo:{enums:["inner","include-padding"],multiple:!0},bgRepeat:{enums:["repeat","repeat-x","repeat-y","no-repeat"],multiple:!0},bgFit:{enums:["none","contain","cover"],multiple:!0},bgCrossOrigin:{enums:["anonymous","use-credentials","null"],multiple:!0},bgClip:{enums:["none","node"],multiple:!0},bgContainment:{enums:["inside","over"],multiple:!0},color:{color:!0},colors:{color:!0,multiple:!0},fill:{enums:["solid","linear-gradient","radial-gradient"]},bool:{enums:["yes","no"]},bools:{enums:["yes","no"],multiple:!0},lineStyle:{enums:["solid","dotted","dashed"]},lineCap:{enums:["butt","round","square"]},linePosition:{enums:["center","inside","outside"]},lineJoin:{enums:["round","bevel","miter"]},borderStyle:{enums:["solid","dotted","dashed","double"]},curveStyle:{enums:["bezier","unbundled-bezier","haystack","segments","straight","straight-triangle","taxi","round-segments","round-taxi"]},radiusType:{enums:["arc-radius","influence-radius"],multiple:!0},fontFamily:{regex:'^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$'},fontStyle:{enums:["italic","normal","oblique"]},fontWeight:{enums:["normal","bold","bolder","lighter","100","200","300","400","500","600","800","900",100,200,300,400,500,600,700,800,900]},textDecoration:{enums:["none","underline","overline","line-through"]},textTransform:{enums:["none","uppercase","lowercase"]},textWrap:{enums:["none","wrap","ellipsis"]},textOverflowWrap:{enums:["whitespace","anywhere"]},textBackgroundShape:{enums:["rectangle","roundrectangle","round-rectangle"]},nodeShape:{enums:["rectangle","roundrectangle","round-rectangle","cutrectangle","cut-rectangle","bottomroundrectangle","bottom-round-rectangle","barrel","ellipse","triangle","round-triangle","square","pentagon","round-pentagon","hexagon","round-hexagon","concavehexagon","concave-hexagon","heptagon","round-heptagon","octagon","round-octagon","tag","round-tag","star","diamond","round-diamond","vee","rhomboid","right-rhomboid","polygon"]},overlayShape:{enums:["roundrectangle","round-rectangle","ellipse"]},cornerRadius:{number:!0,min:0,units:"px|em",implicitUnits:"px",enums:["auto"]},compoundIncludeLabels:{enums:["include","exclude"]},arrowShape:{enums:["tee","triangle","triangle-tee","circle-triangle","triangle-cross","triangle-backcurve","vee","square","circle","diamond","chevron","none"]},arrowFill:{enums:["filled","hollow"]},arrowWidth:{number:!0,units:"%|px|em",implicitUnits:"px",enums:["match-line"]},display:{enums:["element","none"]},visibility:{enums:["hidden","visible"]},zCompoundDepth:{enums:["bottom","orphan","auto","top"]},zIndexCompare:{enums:["auto","manual"]},valign:{enums:["top","center","bottom"]},halign:{enums:["left","center","right"]},justification:{enums:["left","center","right","auto"]},text:{string:!0},data:{mapping:!0,regex:a("data")},layoutData:{mapping:!0,regex:a("layoutData")},scratch:{mapping:!0,regex:a("scratch")},mapData:{mapping:!0,regex:s("mapData")},mapLayoutData:{mapping:!0,regex:s("mapLayoutData")},mapScratch:{mapping:!0,regex:s("mapScratch")},fn:{mapping:!0,fn:!0},url:{regexes:l,singleRegexMatchValue:!0},urls:{regexes:l,singleRegexMatchValue:!0,multiple:!0},propList:{propList:!0},angle:{number:!0,units:"deg|rad",implicitUnits:"rad"},textRotation:{number:!0,units:"deg|rad",implicitUnits:"rad",enums:["none","autorotate"]},polygonPointList:{number:!0,multiple:!0,evenMultiple:!0,min:-1,max:1,unitless:!0},edgeDistances:{enums:["intersection","node-position","endpoints"]},edgeEndpoint:{number:!0,multiple:!0,units:"%|px|em|deg|rad",implicitUnits:"px",enums:["inside-to-node","outside-to-node","outside-to-node-or-label","outside-to-line","outside-to-line-or-label"],singleEnum:!0,validate:o(function(K,X){switch(K.length){case 2:return X[0]!=="deg"&&X[0]!=="rad"&&X[1]!=="deg"&&X[1]!=="rad";case 1:return Zt(K[0])||X[0]==="deg"||X[0]==="rad";default:return!1}},"validate")},easing:{regexes:["^(spring)\\s*\\(\\s*("+t+")\\s*,\\s*("+t+")\\s*\\)$","^(cubic-bezier)\\s*\\(\\s*("+t+")\\s*,\\s*("+t+")\\s*,\\s*("+t+")\\s*,\\s*("+t+")\\s*\\)$"],enums:["linear","ease","ease-in","ease-out","ease-in-out","ease-in-sine","ease-out-sine","ease-in-out-sine","ease-in-quad","ease-out-quad","ease-in-out-quad","ease-in-cubic","ease-out-cubic","ease-in-out-cubic","ease-in-quart","ease-out-quart","ease-in-out-quart","ease-in-quint","ease-out-quint","ease-in-out-quint","ease-in-expo","ease-out-expo","ease-in-out-expo","ease-in-circ","ease-out-circ","ease-in-out-circ"]},gradientDirection:{enums:["to-bottom","to-top","to-left","to-right","to-bottom-right","to-bottom-left","to-top-right","to-top-left","to-right-bottom","to-left-bottom","to-right-top","to-left-top"]},boundsExpansion:{number:!0,multiple:!0,min:0,validate:o(function(K){var X=K.length;return X===1||X===2||X===4},"validate")}};var u={zeroNonZero:o(function(K,X){return(K==null||X==null)&&K!==X||K==0&&X!=0?!0:K!=0&&X==0},"zeroNonZero"),any:o(function(K,X){return K!=X},"any"),emptyNonEmpty:o(function(K,X){var te=Af(K),J=Af(X);return te&&!J||!te&&J},"emptyNonEmpty")},h=wa.types,f=[{name:"label",type:h.text,triggersBounds:u.any,triggersZOrder:u.emptyNonEmpty},{name:"text-rotation",type:h.textRotation,triggersBounds:u.any},{name:"text-margin-x",type:h.bidirectionalSize,triggersBounds:u.any},{name:"text-margin-y",type:h.bidirectionalSize,triggersBounds:u.any}],d=[{name:"source-label",type:h.text,triggersBounds:u.any},{name:"source-text-rotation",type:h.textRotation,triggersBounds:u.any},{name:"source-text-margin-x",type:h.bidirectionalSize,triggersBounds:u.any},{name:"source-text-margin-y",type:h.bidirectionalSize,triggersBounds:u.any},{name:"source-text-offset",type:h.size,triggersBounds:u.any}],p=[{name:"target-label",type:h.text,triggersBounds:u.any},{name:"target-text-rotation",type:h.textRotation,triggersBounds:u.any},{name:"target-text-margin-x",type:h.bidirectionalSize,triggersBounds:u.any},{name:"target-text-margin-y",type:h.bidirectionalSize,triggersBounds:u.any},{name:"target-text-offset",type:h.size,triggersBounds:u.any}],m=[{name:"font-family",type:h.fontFamily,triggersBounds:u.any},{name:"font-style",type:h.fontStyle,triggersBounds:u.any},{name:"font-weight",type:h.fontWeight,triggersBounds:u.any},{name:"font-size",type:h.size,triggersBounds:u.any},{name:"text-transform",type:h.textTransform,triggersBounds:u.any},{name:"text-wrap",type:h.textWrap,triggersBounds:u.any},{name:"text-overflow-wrap",type:h.textOverflowWrap,triggersBounds:u.any},{name:"text-max-width",type:h.size,triggersBounds:u.any},{name:"text-outline-width",type:h.size,triggersBounds:u.any},{name:"line-height",type:h.positiveNumber,triggersBounds:u.any}],g=[{name:"text-valign",type:h.valign,triggersBounds:u.any},{name:"text-halign",type:h.halign,triggersBounds:u.any},{name:"color",type:h.color},{name:"text-outline-color",type:h.color},{name:"text-outline-opacity",type:h.zeroOneNumber},{name:"text-background-color",type:h.color},{name:"text-background-opacity",type:h.zeroOneNumber},{name:"text-background-padding",type:h.size,triggersBounds:u.any},{name:"text-border-opacity",type:h.zeroOneNumber},{name:"text-border-color",type:h.color},{name:"text-border-width",type:h.size,triggersBounds:u.any},{name:"text-border-style",type:h.borderStyle,triggersBounds:u.any},{name:"text-background-shape",type:h.textBackgroundShape,triggersBounds:u.any},{name:"text-justification",type:h.justification}],y=[{name:"events",type:h.bool,triggersZOrder:u.any},{name:"text-events",type:h.bool,triggersZOrder:u.any}],v=[{name:"display",type:h.display,triggersZOrder:u.any,triggersBounds:u.any,triggersBoundsOfConnectedEdges:!0},{name:"visibility",type:h.visibility,triggersZOrder:u.any},{name:"opacity",type:h.zeroOneNumber,triggersZOrder:u.zeroNonZero},{name:"text-opacity",type:h.zeroOneNumber},{name:"min-zoomed-font-size",type:h.size},{name:"z-compound-depth",type:h.zCompoundDepth,triggersZOrder:u.any},{name:"z-index-compare",type:h.zIndexCompare,triggersZOrder:u.any},{name:"z-index",type:h.number,triggersZOrder:u.any}],x=[{name:"overlay-padding",type:h.size,triggersBounds:u.any},{name:"overlay-color",type:h.color},{name:"overlay-opacity",type:h.zeroOneNumber,triggersBounds:u.zeroNonZero},{name:"overlay-shape",type:h.overlayShape,triggersBounds:u.any},{name:"overlay-corner-radius",type:h.cornerRadius}],b=[{name:"underlay-padding",type:h.size,triggersBounds:u.any},{name:"underlay-color",type:h.color},{name:"underlay-opacity",type:h.zeroOneNumber,triggersBounds:u.zeroNonZero},{name:"underlay-shape",type:h.overlayShape,triggersBounds:u.any},{name:"underlay-corner-radius",type:h.cornerRadius}],w=[{name:"transition-property",type:h.propList},{name:"transition-duration",type:h.time},{name:"transition-delay",type:h.time},{name:"transition-timing-function",type:h.easing}],C=o(function(K,X){return X.value==="label"?-K.poolIndex():X.pfValue},"nodeSizeHashOverride"),T=[{name:"height",type:h.nodeSize,triggersBounds:u.any,hashOverride:C},{name:"width",type:h.nodeSize,triggersBounds:u.any,hashOverride:C},{name:"shape",type:h.nodeShape,triggersBounds:u.any},{name:"shape-polygon-points",type:h.polygonPointList,triggersBounds:u.any},{name:"corner-radius",type:h.cornerRadius},{name:"background-color",type:h.color},{name:"background-fill",type:h.fill},{name:"background-opacity",type:h.zeroOneNumber},{name:"background-blacken",type:h.nOneOneNumber},{name:"background-gradient-stop-colors",type:h.colors},{name:"background-gradient-stop-positions",type:h.percentages},{name:"background-gradient-direction",type:h.gradientDirection},{name:"padding",type:h.sizeMaybePercent,triggersBounds:u.any},{name:"padding-relative-to",type:h.paddingRelativeTo,triggersBounds:u.any},{name:"bounds-expansion",type:h.boundsExpansion,triggersBounds:u.any}],E=[{name:"border-color",type:h.color},{name:"border-opacity",type:h.zeroOneNumber},{name:"border-width",type:h.size,triggersBounds:u.any},{name:"border-style",type:h.borderStyle},{name:"border-cap",type:h.lineCap},{name:"border-join",type:h.lineJoin},{name:"border-dash-pattern",type:h.numbers},{name:"border-dash-offset",type:h.number},{name:"border-position",type:h.linePosition}],A=[{name:"outline-color",type:h.color},{name:"outline-opacity",type:h.zeroOneNumber},{name:"outline-width",type:h.size,triggersBounds:u.any},{name:"outline-style",type:h.borderStyle},{name:"outline-offset",type:h.size,triggersBounds:u.any}],S=[{name:"background-image",type:h.urls},{name:"background-image-crossorigin",type:h.bgCrossOrigin},{name:"background-image-opacity",type:h.zeroOneNumbers},{name:"background-image-containment",type:h.bgContainment},{name:"background-image-smoothing",type:h.bools},{name:"background-position-x",type:h.bgPos},{name:"background-position-y",type:h.bgPos},{name:"background-width-relative-to",type:h.bgRelativeTo},{name:"background-height-relative-to",type:h.bgRelativeTo},{name:"background-repeat",type:h.bgRepeat},{name:"background-fit",type:h.bgFit},{name:"background-clip",type:h.bgClip},{name:"background-width",type:h.bgWH},{name:"background-height",type:h.bgWH},{name:"background-offset-x",type:h.bgPos},{name:"background-offset-y",type:h.bgPos}],_=[{name:"position",type:h.position,triggersBounds:u.any},{name:"compound-sizing-wrt-labels",type:h.compoundIncludeLabels,triggersBounds:u.any},{name:"min-width",type:h.size,triggersBounds:u.any},{name:"min-width-bias-left",type:h.sizeMaybePercent,triggersBounds:u.any},{name:"min-width-bias-right",type:h.sizeMaybePercent,triggersBounds:u.any},{name:"min-height",type:h.size,triggersBounds:u.any},{name:"min-height-bias-top",type:h.sizeMaybePercent,triggersBounds:u.any},{name:"min-height-bias-bottom",type:h.sizeMaybePercent,triggersBounds:u.any}],I=[{name:"line-style",type:h.lineStyle},{name:"line-color",type:h.color},{name:"line-fill",type:h.fill},{name:"line-cap",type:h.lineCap},{name:"line-opacity",type:h.zeroOneNumber},{name:"line-dash-pattern",type:h.numbers},{name:"line-dash-offset",type:h.number},{name:"line-outline-width",type:h.size},{name:"line-outline-color",type:h.color},{name:"line-gradient-stop-colors",type:h.colors},{name:"line-gradient-stop-positions",type:h.percentages},{name:"curve-style",type:h.curveStyle,triggersBounds:u.any,triggersBoundsOfParallelBeziers:!0},{name:"haystack-radius",type:h.zeroOneNumber,triggersBounds:u.any},{name:"source-endpoint",type:h.edgeEndpoint,triggersBounds:u.any},{name:"target-endpoint",type:h.edgeEndpoint,triggersBounds:u.any},{name:"control-point-step-size",type:h.size,triggersBounds:u.any},{name:"control-point-distances",type:h.bidirectionalSizes,triggersBounds:u.any},{name:"control-point-weights",type:h.numbers,triggersBounds:u.any},{name:"segment-distances",type:h.bidirectionalSizes,triggersBounds:u.any},{name:"segment-weights",type:h.numbers,triggersBounds:u.any},{name:"segment-radii",type:h.numbers,triggersBounds:u.any},{name:"radius-type",type:h.radiusType,triggersBounds:u.any},{name:"taxi-turn",type:h.bidirectionalSizeMaybePercent,triggersBounds:u.any},{name:"taxi-turn-min-distance",type:h.size,triggersBounds:u.any},{name:"taxi-direction",type:h.axisDirection,triggersBounds:u.any},{name:"taxi-radius",type:h.number,triggersBounds:u.any},{name:"edge-distances",type:h.edgeDistances,triggersBounds:u.any},{name:"arrow-scale",type:h.positiveNumber,triggersBounds:u.any},{name:"loop-direction",type:h.angle,triggersBounds:u.any},{name:"loop-sweep",type:h.angle,triggersBounds:u.any},{name:"source-distance-from-node",type:h.size,triggersBounds:u.any},{name:"target-distance-from-node",type:h.size,triggersBounds:u.any}],D=[{name:"ghost",type:h.bool,triggersBounds:u.any},{name:"ghost-offset-x",type:h.bidirectionalSize,triggersBounds:u.any},{name:"ghost-offset-y",type:h.bidirectionalSize,triggersBounds:u.any},{name:"ghost-opacity",type:h.zeroOneNumber}],k=[{name:"selection-box-color",type:h.color},{name:"selection-box-opacity",type:h.zeroOneNumber},{name:"selection-box-border-color",type:h.color},{name:"selection-box-border-width",type:h.size},{name:"active-bg-color",type:h.color},{name:"active-bg-opacity",type:h.zeroOneNumber},{name:"active-bg-size",type:h.size},{name:"outside-texture-bg-color",type:h.color},{name:"outside-texture-bg-opacity",type:h.zeroOneNumber}],L=[];wa.pieBackgroundN=16,L.push({name:"pie-size",type:h.sizeMaybePercent});for(var R=1;R<=wa.pieBackgroundN;R++)L.push({name:"pie-"+R+"-background-color",type:h.color}),L.push({name:"pie-"+R+"-background-size",type:h.percent}),L.push({name:"pie-"+R+"-background-opacity",type:h.zeroOneNumber});var O=[],M=wa.arrowPrefixes=["source","mid-source","target","mid-target"];[{name:"arrow-shape",type:h.arrowShape,triggersBounds:u.any},{name:"arrow-color",type:h.color},{name:"arrow-fill",type:h.arrowFill},{name:"arrow-width",type:h.arrowWidth}].forEach(function(he){M.forEach(function(K){var X=K+"-"+he.name,te=he.type,J=he.triggersBounds;O.push({name:X,type:te,triggersBounds:J})})},{});var B=wa.properties=[].concat(y,w,v,x,b,D,g,m,f,d,p,T,E,A,S,L,_,I,O,k),F=wa.propertyGroups={behavior:y,transition:w,visibility:v,overlay:x,underlay:b,ghost:D,commonLabel:g,labelDimensions:m,mainLabel:f,sourceLabel:d,targetLabel:p,nodeBody:T,nodeBorder:E,nodeOutline:A,backgroundImage:S,pie:L,compound:_,edgeLine:I,edgeArrow:O,core:k},P=wa.propertyGroupNames={},z=wa.propertyGroupKeys=Object.keys(F);z.forEach(function(he){P[he]=F[he].map(function(K){return K.name}),F[he].forEach(function(K){return K.groupKey=he})});var $=wa.aliases=[{name:"content",pointsTo:"label"},{name:"control-point-distance",pointsTo:"control-point-distances"},{name:"control-point-weight",pointsTo:"control-point-weights"},{name:"segment-distance",pointsTo:"segment-distances"},{name:"segment-weight",pointsTo:"segment-weights"},{name:"segment-radius",pointsTo:"segment-radii"},{name:"edge-text-rotation",pointsTo:"text-rotation"},{name:"padding-left",pointsTo:"padding"},{name:"padding-right",pointsTo:"padding"},{name:"padding-top",pointsTo:"padding"},{name:"padding-bottom",pointsTo:"padding"}];wa.propertyNames=B.map(function(he){return he.name});for(var H=0;H<B.length;H++){var Q=B[H];B[Q.name]=Q}for(var j=0;j<$.length;j++){var ie=$[j],ne=B[ie.pointsTo],le={name:ie.name,alias:!0,pointsTo:ne};B.push(le),B[ie.name]=le}})();wa.getDefaultProperty=function(t){return this.getDefaultProperties()[t]};wa.getDefaultProperties=function(){var t=this._private;if(t.defaultProperties!=null)return t.defaultProperties;for(var e=rr({"selection-box-color":"#ddd","selection-box-opacity":.65,"selection-box-border-color":"#aaa","selection-box-border-width":1,"active-bg-color":"black","active-bg-opacity":.15,"active-bg-size":30,"outside-texture-bg-color":"#000","outside-texture-bg-opacity":.125,events:"yes","text-events":"no","text-valign":"top","text-halign":"center","text-justification":"auto","line-height":1,color:"#000","text-outline-color":"#000","text-outline-width":0,"text-outline-opacity":1,"text-opacity":1,"text-decoration":"none","text-transform":"none","text-wrap":"none","text-overflow-wrap":"whitespace","text-max-width":9999,"text-background-color":"#000","text-background-opacity":0,"text-background-shape":"rectangle","text-background-padding":0,"text-border-opacity":0,"text-border-width":0,"text-border-style":"solid","text-border-color":"#000","font-family":"Helvetica Neue, Helvetica, sans-serif","font-style":"normal","font-weight":"normal","font-size":16,"min-zoomed-font-size":0,"text-rotation":"none","source-text-rotation":"none","target-text-rotation":"none",visibility:"visible",display:"element",opacity:1,"z-compound-depth":"auto","z-index-compare":"auto","z-index":0,label:"","text-margin-x":0,"text-margin-y":0,"source-label":"","source-text-offset":0,"source-text-margin-x":0,"source-text-margin-y":0,"target-label":"","target-text-offset":0,"target-text-margin-x":0,"target-text-margin-y":0,"overlay-opacity":0,"overlay-color":"#000","overlay-padding":10,"overlay-shape":"round-rectangle","overlay-corner-radius":"auto","underlay-opacity":0,"underlay-color":"#000","underlay-padding":10,"underlay-shape":"round-rectangle","underlay-corner-radius":"auto","transition-property":"none","transition-duration":0,"transition-delay":0,"transition-timing-function":"linear","background-blacken":0,"background-color":"#999","background-fill":"solid","background-opacity":1,"background-image":"none","background-image-crossorigin":"anonymous","background-image-opacity":1,"background-image-containment":"inside","background-image-smoothing":"yes","background-position-x":"50%","background-position-y":"50%","background-offset-x":0,"background-offset-y":0,"background-width-relative-to":"include-padding","background-height-relative-to":"include-padding","background-repeat":"no-repeat","background-fit":"none","background-clip":"node","background-width":"auto","background-height":"auto","border-color":"#000","border-opacity":1,"border-width":0,"border-style":"solid","border-dash-pattern":[4,2],"border-dash-offset":0,"border-cap":"butt","border-join":"miter","border-position":"center","outline-color":"#999","outline-opacity":1,"outline-width":0,"outline-offset":0,"outline-style":"solid",height:30,width:30,shape:"ellipse","shape-polygon-points":"-1, -1, 1, -1, 1, 1, -1, 1","corner-radius":"auto","bounds-expansion":0,"background-gradient-direction":"to-bottom","background-gradient-stop-colors":"#999","background-gradient-stop-positions":"0%",ghost:"no","ghost-offset-y":0,"ghost-offset-x":0,"ghost-opacity":0,padding:0,"padding-relative-to":"width",position:"origin","compound-sizing-wrt-labels":"include","min-width":0,"min-width-bias-left":0,"min-width-bias-right":0,"min-height":0,"min-height-bias-top":0,"min-height-bias-bottom":0},{"pie-size":"100%"},[{name:"pie-{{i}}-background-color",value:"black"},{name:"pie-{{i}}-background-size",value:"0%"},{name:"pie-{{i}}-background-opacity",value:1}].reduce(function(u,h){for(var f=1;f<=wa.pieBackgroundN;f++){var d=h.name.replace("{{i}}",f),p=h.value;u[d]=p}return u},{}),{"line-style":"solid","line-color":"#999","line-fill":"solid","line-cap":"butt","line-opacity":1,"line-outline-width":0,"line-outline-color":"#000","line-gradient-stop-colors":"#999","line-gradient-stop-positions":"0%","control-point-step-size":40,"control-point-weights":.5,"segment-weights":.5,"segment-distances":20,"segment-radii":15,"radius-type":"arc-radius","taxi-turn":"50%","taxi-radius":15,"taxi-turn-min-distance":10,"taxi-direction":"auto","edge-distances":"intersection","curve-style":"haystack","haystack-radius":0,"arrow-scale":1,"loop-direction":"-45deg","loop-sweep":"-90deg","source-distance-from-node":0,"target-distance-from-node":0,"source-endpoint":"outside-to-node","target-endpoint":"outside-to-node","line-dash-pattern":[6,3],"line-dash-offset":0},[{name:"arrow-shape",value:"none"},{name:"arrow-color",value:"#999"},{name:"arrow-fill",value:"filled"},{name:"arrow-width",value:1}].reduce(function(u,h){return wa.arrowPrefixes.forEach(function(f){var d=f+"-"+h.name,p=h.value;u[d]=p}),u},{})),r={},n=0;n<this.properties.length;n++){var i=this.properties[n];if(!i.pointsTo){var a=i.name,s=e[a],l=this.parse(a,s);r[a]=l}}return t.defaultProperties=r,t.defaultProperties};wa.addDefaultStylesheet=function(){this.selector(":parent").css({shape:"rectangle",padding:10,"background-color":"#eee","border-color":"#ccc","border-width":1}).selector("edge").css({width:3}).selector(":loop").css({"curve-style":"bezier"}).selector("edge:compound").css({"curve-style":"bezier","source-endpoint":"outside-to-line","target-endpoint":"outside-to-line"}).selector(":selected").css({"background-color":"#0169D9","line-color":"#0169D9","source-arrow-color":"#0169D9","target-arrow-color":"#0169D9","mid-source-arrow-color":"#0169D9","mid-target-arrow-color":"#0169D9"}).selector(":parent:selected").css({"background-color":"#CCE1F9","border-color":"#aec8e5"}).selector(":active").css({"overlay-color":"black","overlay-padding":10,"overlay-opacity":.25}),this.defaultLength=this.length};US={};US.parse=function(t,e,r,n){var i=this;if(si(e))return i.parseImplWarn(t,e,r,n);var a=n==="mapping"||n===!0||n===!1||n==null?"dontcare":n,s=r?"t":"f",l=""+e,u=cme(t,l,s,a),h=i.propCache=i.propCache||[],f;return(f=h[u])||(f=h[u]=i.parseImplWarn(t,e,r,n)),(r||n==="mapping")&&(f=Yc(f),f&&(f.value=Yc(f.value))),f};US.parseImplWarn=function(t,e,r,n){var i=this.parseImpl(t,e,r,n);return!i&&e!=null&&un("The style property `".concat(t,": ").concat(e,"` is invalid")),i&&(i.name==="width"||i.name==="height")&&e==="label"&&un("The style value of `label` is deprecated for `"+i.name+"`"),i};US.parseImpl=function(t,e,r,n){var i=this;t=eB(t);var a=i.properties[t],s=e,l=i.types;if(!a||e===void 0)return null;a.alias&&(a=a.pointsTo,t=a.name);var u=Zt(e);u&&(e=e.trim());var h=a.type;if(!h)return null;if(r&&(e===""||e===null))return{name:t,value:e,bypass:!0,deleteBypass:!0};if(si(e))return{name:t,value:e,strValue:"fn",mapped:l.fn,bypass:r};var f,d;if(!(!u||n||e.length<7||e[1]!=="a")){if(e.length>=7&&e[0]==="d"&&(f=new RegExp(l.data.regex).exec(e))){if(r)return!1;var p=l.data;return{name:t,value:f,strValue:""+e,mapped:p,field:f[1],bypass:r}}else if(e.length>=10&&e[0]==="m"&&(d=new RegExp(l.mapData.regex).exec(e))){if(r||h.multiple)return!1;var m=l.mapData;if(!(h.color||h.number))return!1;var g=this.parse(t,d[4]);if(!g||g.mapped)return!1;var y=this.parse(t,d[5]);if(!y||y.mapped)return!1;if(g.pfValue===y.pfValue||g.strValue===y.strValue)return un("`"+t+": "+e+"` is not a valid mapper because the output range is zero; converting to `"+t+": "+g.strValue+"`"),this.parse(t,g.strValue);if(h.color){var v=g.value,x=y.value,b=v[0]===x[0]&&v[1]===x[1]&&v[2]===x[2]&&(v[3]===x[3]||(v[3]==null||v[3]===1)&&(x[3]==null||x[3]===1));if(b)return!1}return{name:t,value:d,strValue:""+e,mapped:m,field:d[1],fieldMin:parseFloat(d[2]),fieldMax:parseFloat(d[3]),valueMin:g.value,valueMax:y.value,bypass:r}}}if(h.multiple&&n!=="multiple"){var w;if(u?w=e.split(/\s+/):En(e)?w=e:w=[e],h.evenMultiple&&w.length%2!==0)return null;for(var C=[],T=[],E=[],A="",S=!1,_=0;_<w.length;_++){var I=i.parse(t,w[_],r,"multiple");S=S||Zt(I.value),C.push(I.value),E.push(I.pfValue!=null?I.pfValue:I.value),T.push(I.units),A+=(_>0?" ":"")+I.strValue}return h.validate&&!h.validate(C,T)?null:h.singleEnum&&S?C.length===1&&Zt(C[0])?{name:t,value:C[0],strValue:C[0],bypass:r}:null:{name:t,value:C,pfValue:E,strValue:A,bypass:r,units:T}}var D=o(function(){for(var K=0;K<h.enums.length;K++){var X=h.enums[K];if(X===e)return{name:t,value:e,strValue:""+e,bypass:r}}return null},"checkEnums");if(h.number){var k,L="px";if(h.units&&(k=h.units),h.implicitUnits&&(L=h.implicitUnits),!h.unitless)if(u){var R="px|em"+(h.allowPercent?"|\\%":"");k&&(R=k);var O=e.match("^("+Hi+")("+R+")?$");O&&(e=O[1],k=O[2]||L)}else(!k||h.implicitUnits)&&(k=L);if(e=parseFloat(e),isNaN(e)&&h.enums===void 0)return null;if(isNaN(e)&&h.enums!==void 0)return e=s,D();if(h.integer&&!JHe(e)||h.min!==void 0&&(e<h.min||h.strictMin&&e===h.min)||h.max!==void 0&&(e>h.max||h.strictMax&&e===h.max))return null;var M={name:t,value:e,strValue:""+e+(k||""),units:k,bypass:r};return h.unitless||k!=="px"&&k!=="em"?M.pfValue=e:M.pfValue=k==="px"||!k?e:this.getEmSizeInPixels()*e,(k==="ms"||k==="s")&&(M.pfValue=k==="ms"?e:1e3*e),(k==="deg"||k==="rad")&&(M.pfValue=k==="rad"?e:Nqe(e)),k==="%"&&(M.pfValue=e/100),M}else if(h.propList){var B=[],F=""+e;if(F!=="none"){for(var P=F.split(/\s*,\s*|\s+/),z=0;z<P.length;z++){var $=P[z].trim();i.properties[$]?B.push($):un("`"+$+"` is not a valid property name")}if(B.length===0)return null}return{name:t,value:B,strValue:B.length===0?"none":B.join(" "),bypass:r}}else if(h.color){var H=tme(e);return H?{name:t,value:H,pfValue:H,strValue:"rgb("+H[0]+","+H[1]+","+H[2]+")",bypass:r}:null}else if(h.regex||h.regexes){if(h.enums){var Q=D();if(Q)return Q}for(var j=h.regexes?h.regexes:[h.regex],ie=0;ie<j.length;ie++){var ne=new RegExp(j[ie]),le=ne.exec(e);if(le)return{name:t,value:h.singleRegexMatchValue?le[1]:le,strValue:""+e,bypass:r}}return null}else return h.string?{name:t,value:""+e,strValue:""+e,bypass:r}:h.enums?D():null};Fa=o(function t(e){if(!(this instanceof t))return new t(e);if(!JP(e)){ai("A style must have a core reference");return}this._private={cy:e,coreStyle:{}},this.length=0,this.resetToDefault()},"Style"),za=Fa.prototype;za.instanceString=function(){return"style"};za.clear=function(){for(var t=this._private,e=t.cy,r=e.elements(),n=0;n<this.length;n++)this[n]=void 0;return this.length=0,t.contextStyles={},t.propDiffs={},this.cleanElements(r,!0),r.forEach(function(i){var a=i[0]._private;a.styleDirty=!0,a.appliedInitStyle=!1}),this};za.resetToDefault=function(){return this.clear(),this.addDefaultStylesheet(),this};za.core=function(t){return this._private.coreStyle[t]||this.getDefaultProperty(t)};za.selector=function(t){var e=t==="core"?null:new Lf(t),r=this.length++;return this[r]={selector:e,properties:[],mappedProperties:[],index:r},this};za.css=function(){var t=this,e=arguments;if(e.length===1)for(var r=e[0],n=0;n<t.properties.length;n++){var i=t.properties[n],a=r[i.name];a===void 0&&(a=r[LS(i.name)]),a!==void 0&&this.cssRule(i.name,a)}else e.length===2&&this.cssRule(e[0],e[1]);return this};za.style=za.css;za.cssRule=function(t,e){var r=this.parse(t,e);if(r){var n=this.length-1;this[n].properties.push(r),this[n].properties[r.name]=r,r.name.match(/pie-(\d+)-background-size/)&&r.value&&(this._private.hasPie=!0),r.mapped&&this[n].mappedProperties.push(r);var i=!this[n].selector;i&&(this._private.coreStyle[r.name]=r)}return this};za.append=function(t){return Z0e(t)?t.appendToStyle(this):En(t)?this.appendFromJson(t):Zt(t)&&this.appendFromString(t),this};Fa.fromJson=function(t,e){var r=new Fa(t);return r.fromJson(e),r};Fa.fromString=function(t,e){return new Fa(t).fromString(e)};[Ga,s4,pB,jc,VS,mB,wa,US].forEach(function(t){rr(za,t)});Fa.types=za.types;Fa.properties=za.properties;Fa.propertyGroups=za.propertyGroups;Fa.propertyGroupNames=za.propertyGroupNames;Fa.propertyGroupKeys=za.propertyGroupKeys;ZKe={style:o(function(e){if(e){var r=this.setStyle(e);r.update()}return this._private.style},"style"),setStyle:o(function(e){var r=this._private;return Z0e(e)?r.style=e.generateStyle(this):En(e)?r.style=Fa.fromJson(this,e):Zt(e)?r.style=Fa.fromString(this,e):r.style=Fa(this),r.style},"setStyle"),updateStyle:o(function(){this.mutableElements().updateStyle()},"updateStyle")},JKe="single",Hp={autolock:o(function(e){if(e!==void 0)this._private.autolock=!!e;else return this._private.autolock;return this},"autolock"),autoungrabify:o(function(e){if(e!==void 0)this._private.autoungrabify=!!e;else return this._private.autoungrabify;return this},"autoungrabify"),autounselectify:o(function(e){if(e!==void 0)this._private.autounselectify=!!e;else return this._private.autounselectify;return this},"autounselectify"),selectionType:o(function(e){var r=this._private;if(r.selectionType==null&&(r.selectionType=JKe),e!==void 0)(e==="additive"||e==="single")&&(r.selectionType=e);else return r.selectionType;return this},"selectionType"),panningEnabled:o(function(e){if(e!==void 0)this._private.panningEnabled=!!e;else return this._private.panningEnabled;return this},"panningEnabled"),userPanningEnabled:o(function(e){if(e!==void 0)this._private.userPanningEnabled=!!e;else return this._private.userPanningEnabled;return this},"userPanningEnabled"),zoomingEnabled:o(function(e){if(e!==void 0)this._private.zoomingEnabled=!!e;else return this._private.zoomingEnabled;return this},"zoomingEnabled"),userZoomingEnabled:o(function(e){if(e!==void 0)this._private.userZoomingEnabled=!!e;else return this._private.userZoomingEnabled;return this},"userZoomingEnabled"),boxSelectionEnabled:o(function(e){if(e!==void 0)this._private.boxSelectionEnabled=!!e;else return this._private.boxSelectionEnabled;return this},"boxSelectionEnabled"),pan:o(function(){var e=arguments,r=this._private.pan,n,i,a,s,l;switch(e.length){case 0:return r;case 1:if(Zt(e[0]))return n=e[0],r[n];if(Ur(e[0])){if(!this._private.panningEnabled)return this;a=e[0],s=a.x,l=a.y,Ct(s)&&(r.x=s),Ct(l)&&(r.y=l),this.emit("pan viewport")}break;case 2:if(!this._private.panningEnabled)return this;n=e[0],i=e[1],(n==="x"||n==="y")&&Ct(i)&&(r[n]=i),this.emit("pan viewport");break}return this.notify("viewport"),this},"pan"),panBy:o(function(e,r){var n=arguments,i=this._private.pan,a,s,l,u,h;if(!this._private.panningEnabled)return this;switch(n.length){case 1:Ur(e)&&(l=n[0],u=l.x,h=l.y,Ct(u)&&(i.x+=u),Ct(h)&&(i.y+=h),this.emit("pan viewport"));break;case 2:a=e,s=r,(a==="x"||a==="y")&&Ct(s)&&(i[a]+=s),this.emit("pan viewport");break}return this.notify("viewport"),this},"panBy"),gc:o(function(){this.notify("gc")},"gc"),fit:o(function(e,r){var n=this.getFitViewport(e,r);if(n){var i=this._private;i.zoom=n.zoom,i.pan=n.pan,this.emit("pan zoom viewport"),this.notify("viewport")}return this},"fit"),getFitViewport:o(function(e,r){if(Ct(e)&&r===void 0&&(r=e,e=void 0),!(!this._private.panningEnabled||!this._private.zoomingEnabled)){var n;if(Zt(e)){var i=e;e=this.$(i)}else if(rWe(e)){var a=e;n={x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2},n.w=n.x2-n.x1,n.h=n.y2-n.y1}else go(e)||(e=this.mutableElements());if(!(go(e)&&e.empty())){n=n||e.boundingBox();var s=this.width(),l=this.height(),u;if(r=Ct(r)?r:0,!isNaN(s)&&!isNaN(l)&&s>0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0){u=Math.min((s-2*r)/n.w,(l-2*r)/n.h),u=u>this._private.maxZoom?this._private.maxZoom:u,u=u<this._private.minZoom?this._private.minZoom:u;var h={x:(s-u*(n.x1+n.x2))/2,y:(l-u*(n.y1+n.y2))/2};return{zoom:u,pan:h}}}}},"getFitViewport"),zoomRange:o(function(e,r){var n=this._private;if(r==null){var i=e;e=i.min,r=i.max}return Ct(e)&&Ct(r)&&e<=r?(n.minZoom=e,n.maxZoom=r):Ct(e)&&r===void 0&&e<=n.maxZoom?n.minZoom=e:Ct(r)&&e===void 0&&r>=n.minZoom&&(n.maxZoom=r),this},"zoomRange"),minZoom:o(function(e){return e===void 0?this._private.minZoom:this.zoomRange({min:e})},"minZoom"),maxZoom:o(function(e){return e===void 0?this._private.maxZoom:this.zoomRange({max:e})},"maxZoom"),getZoomedViewport:o(function(e){var r=this._private,n=r.pan,i=r.zoom,a,s,l=!1;if(r.zoomingEnabled||(l=!0),Ct(e)?s=e:Ur(e)&&(s=e.level,e.position!=null?a=MS(e.position,i,n):e.renderedPosition!=null&&(a=e.renderedPosition),a!=null&&!r.panningEnabled&&(l=!0)),s=s>r.maxZoom?r.maxZoom:s,s=s<r.minZoom?r.minZoom:s,l||!Ct(s)||s===i||a!=null&&(!Ct(a.x)||!Ct(a.y)))return null;if(a!=null){var u=n,h=i,f=s,d={x:-f/h*(a.x-u.x)+a.x,y:-f/h*(a.y-u.y)+a.y};return{zoomed:!0,panned:!0,zoom:f,pan:d}}else return{zoomed:!0,panned:!1,zoom:s,pan:n}},"getZoomedViewport"),zoom:o(function(e){if(e===void 0)return this._private.zoom;var r=this.getZoomedViewport(e),n=this._private;return r==null||!r.zoomed?this:(n.zoom=r.zoom,r.panned&&(n.pan.x=r.pan.x,n.pan.y=r.pan.y),this.emit("zoom"+(r.panned?" pan":"")+" viewport"),this.notify("viewport"),this)},"zoom"),viewport:o(function(e){var r=this._private,n=!0,i=!0,a=[],s=!1,l=!1;if(!e)return this;if(Ct(e.zoom)||(n=!1),Ur(e.pan)||(i=!1),!n&&!i)return this;if(n){var u=e.zoom;u<r.minZoom||u>r.maxZoom||!r.zoomingEnabled?s=!0:(r.zoom=u,a.push("zoom"))}if(i&&(!s||!e.cancelOnFailedZoom)&&r.panningEnabled){var h=e.pan;Ct(h.x)&&(r.pan.x=h.x,l=!1),Ct(h.y)&&(r.pan.y=h.y,l=!1),l||a.push("pan")}return a.length>0&&(a.push("viewport"),this.emit(a.join(" ")),this.notify("viewport")),this},"viewport"),center:o(function(e){var r=this.getCenterPan(e);return r&&(this._private.pan=r,this.emit("pan viewport"),this.notify("viewport")),this},"center"),getCenterPan:o(function(e,r){if(this._private.panningEnabled){if(Zt(e)){var n=e;e=this.mutableElements().filter(n)}else go(e)||(e=this.mutableElements());if(e.length!==0){var i=e.boundingBox(),a=this.width(),s=this.height();r=r===void 0?this._private.zoom:r;var l={x:(a-r*(i.x1+i.x2))/2,y:(s-r*(i.y1+i.y2))/2};return l}}},"getCenterPan"),reset:o(function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},"reset"),invalidateSize:o(function(){this._private.sizeCache=null},"invalidateSize"),size:o(function(){var e=this._private,r=e.container,n=this;return e.sizeCache=e.sizeCache||(r?function(){var i=n.window().getComputedStyle(r),a=o(function(l){return parseFloat(i.getPropertyValue(l))},"val");return{width:r.clientWidth-a("padding-left")-a("padding-right"),height:r.clientHeight-a("padding-top")-a("padding-bottom")}}():{width:1,height:1})},"size"),width:o(function(){return this.size().width},"width"),height:o(function(){return this.size().height},"height"),extent:o(function(){var e=this._private.pan,r=this._private.zoom,n=this.renderedExtent(),i={x1:(n.x1-e.x)/r,x2:(n.x2-e.x)/r,y1:(n.y1-e.y)/r,y2:(n.y2-e.y)/r};return i.w=i.x2-i.x1,i.h=i.y2-i.y1,i},"extent"),renderedExtent:o(function(){var e=this.width(),r=this.height();return{x1:0,y1:0,x2:e,y2:r,w:e,h:r}},"renderedExtent"),multiClickDebounceTime:o(function(e){if(e)this._private.multiClickDebounceTime=e;else return this._private.multiClickDebounceTime;return this},"multiClickDebounceTime")};Hp.centre=Hp.center;Hp.autolockNodes=Hp.autolock;Hp.autoungrabifyNodes=Hp.autoungrabify;Zb={data:cn.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:cn.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:cn.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:cn.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};Zb.attr=Zb.data;Zb.removeAttr=Zb.removeData;Jb=o(function(e){var r=this;e=rr({},e);var n=e.container;n&&!vS(n)&&vS(n[0])&&(n=n[0]);var i=n?n._cyreg:null;i=i||{},i&&i.cy&&(i.cy.destroy(),i={});var a=i.readies=i.readies||[];n&&(n._cyreg=i),i.cy=r;var s=Ui!==void 0&&n!==void 0&&!e.headless,l=e;l.layout=rr({name:s?"grid":"null"},l.layout),l.renderer=rr({name:s?"canvas":"null"},l.renderer);var u=o(function(g,y,v){return y!==void 0?y:v!==void 0?v:g},"defVal"),h=this._private={container:n,ready:!1,options:l,elements:new ka(this),listeners:[],aniEles:new ka(this),data:l.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:u(!0,l.zoomingEnabled),userZoomingEnabled:u(!0,l.userZoomingEnabled),panningEnabled:u(!0,l.panningEnabled),userPanningEnabled:u(!0,l.userPanningEnabled),boxSelectionEnabled:u(!0,l.boxSelectionEnabled),autolock:u(!1,l.autolock,l.autolockNodes),autoungrabify:u(!1,l.autoungrabify,l.autoungrabifyNodes),autounselectify:u(!1,l.autounselectify),styleEnabled:l.styleEnabled===void 0?s:l.styleEnabled,zoom:Ct(l.zoom)?l.zoom:1,pan:{x:Ur(l.pan)&&Ct(l.pan.x)?l.pan.x:0,y:Ur(l.pan)&&Ct(l.pan.y)?l.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:u(250,l.multiClickDebounceTime)};this.createEmitter(),this.selectionType(l.selectionType),this.zoomRange({min:l.minZoom,max:l.maxZoom});var f=o(function(g,y){var v=g.some(nWe);if(v)return ey.all(g).then(y);y(g)},"loadExtData");h.styleEnabled&&r.setStyle([]);var d=rr({},l,l.renderer);r.initRenderer(d);var p=o(function(g,y,v){r.notifications(!1);var x=r.mutableElements();x.length>0&&x.remove(),g!=null&&(Ur(g)||En(g))&&r.add(g),r.one("layoutready",function(w){r.notifications(!0),r.emit(w),r.one("load",y),r.emitAndNotify("load")}).one("layoutstop",function(){r.one("done",v),r.emit("done")});var b=rr({},r._private.options.layout);b.eles=r.elements(),r.layout(b).run()},"setElesAndLayout");f([l.style,l.elements],function(m){var g=m[0],y=m[1];h.styleEnabled&&r.style().append(g),p(y,function(){r.startAnimationLoop(),h.ready=!0,si(l.ready)&&r.on("ready",l.ready);for(var v=0;v<a.length;v++){var x=a[v];r.on("ready",x)}i&&(i.readies=[]),r.emit("ready")},l.done)})},"Core"),SS=Jb.prototype;rr(SS,{instanceString:o(function(){return"core"},"instanceString"),isReady:o(function(){return this._private.ready},"isReady"),destroyed:o(function(){return this._private.destroyed},"destroyed"),ready:o(function(e){return this.isReady()?this.emitter().emit("ready",[],e):this.on("ready",e),this},"ready"),destroy:o(function(){var e=this;if(!e.destroyed())return e.stopAnimationLoop(),e.destroyRenderer(),this.emit("destroy"),e._private.destroyed=!0,e},"destroy"),hasElementWithId:o(function(e){return this._private.elements.hasElementWithId(e)},"hasElementWithId"),getElementById:o(function(e){return this._private.elements.getElementById(e)},"getElementById"),hasCompoundNodes:o(function(){return this._private.hasCompoundNodes},"hasCompoundNodes"),headless:o(function(){return this._private.renderer.isHeadless()},"headless"),styleEnabled:o(function(){return this._private.styleEnabled},"styleEnabled"),addToPool:o(function(e){return this._private.elements.merge(e),this},"addToPool"),removeFromPool:o(function(e){return this._private.elements.unmerge(e),this},"removeFromPool"),container:o(function(){return this._private.container||null},"container"),window:o(function(){var e=this._private.container;if(e==null)return Ui;var r=this._private.container.ownerDocument;return r===void 0||r==null?Ui:r.defaultView||Ui},"window"),mount:o(function(e){if(e!=null){var r=this,n=r._private,i=n.options;return!vS(e)&&vS(e[0])&&(e=e[0]),r.stopAnimationLoop(),r.destroyRenderer(),n.container=e,n.styleEnabled=!0,r.invalidateSize(),r.initRenderer(rr({},i,i.renderer,{name:i.renderer.name==="null"?"canvas":i.renderer.name})),r.startAnimationLoop(),r.style(i.style),r.emit("mount"),r}},"mount"),unmount:o(function(){var e=this;return e.stopAnimationLoop(),e.destroyRenderer(),e.initRenderer({name:"null"}),e.emit("unmount"),e},"unmount"),options:o(function(){return Yc(this._private.options)},"options"),json:o(function(e){var r=this,n=r._private,i=r.mutableElements(),a=o(function(C){return r.getElementById(C.id())},"getFreshRef");if(Ur(e)){if(r.startBatch(),e.elements){var s={},l=o(function(C,T){for(var E=[],A=[],S=0;S<C.length;S++){var _=C[S];if(!_.data.id){un("cy.json() cannot handle elements without an ID attribute");continue}var I=""+_.data.id,D=r.getElementById(I);s[I]=!0,D.length!==0?A.push({ele:D,json:_}):(T&&(_.group=T),E.push(_))}r.add(E);for(var k=0;k<A.length;k++){var L=A[k],R=L.ele,O=L.json;R.json(O)}},"updateEles");if(En(e.elements))l(e.elements);else for(var u=["nodes","edges"],h=0;h<u.length;h++){var f=u[h],d=e.elements[f];En(d)&&l(d,f)}var p=r.collection();i.filter(function(w){return!s[w.id()]}).forEach(function(w){w.isParent()?p.merge(w):w.remove()}),p.forEach(function(w){return w.children().move({parent:null})}),p.forEach(function(w){return a(w).remove()})}e.style&&r.style(e.style),e.zoom!=null&&e.zoom!==n.zoom&&r.zoom(e.zoom),e.pan&&(e.pan.x!==n.pan.x||e.pan.y!==n.pan.y)&&r.pan(e.pan),e.data&&r.data(e.data);for(var m=["minZoom","maxZoom","zoomingEnabled","userZoomingEnabled","panningEnabled","userPanningEnabled","boxSelectionEnabled","autolock","autoungrabify","autounselectify","multiClickDebounceTime"],g=0;g<m.length;g++){var y=m[g];e[y]!=null&&r[y](e[y])}return r.endBatch(),this}else{var v=!!e,x={};v?x.elements=this.elements().map(function(w){return w.json()}):(x.elements={},i.forEach(function(w){var C=w.group();x.elements[C]||(x.elements[C]=[]),x.elements[C].push(w.json())})),this._private.styleEnabled&&(x.style=r.style().json()),x.data=Yc(r.data());var b=n.options;return x.zoomingEnabled=n.zoomingEnabled,x.userZoomingEnabled=n.userZoomingEnabled,x.zoom=n.zoom,x.minZoom=n.minZoom,x.maxZoom=n.maxZoom,x.panningEnabled=n.panningEnabled,x.userPanningEnabled=n.userPanningEnabled,x.pan=Yc(n.pan),x.boxSelectionEnabled=n.boxSelectionEnabled,x.renderer=Yc(b.renderer),x.hideEdgesOnViewport=b.hideEdgesOnViewport,x.textureOnViewport=b.textureOnViewport,x.wheelSensitivity=b.wheelSensitivity,x.motionBlur=b.motionBlur,x.multiClickDebounceTime=b.multiClickDebounceTime,x}},"json")});SS.$id=SS.getElementById;[VKe,YKe,ege,VP,pS,jKe,UP,mS,ZKe,Hp,Zb].forEach(function(t){rr(SS,t)});eQe={fit:!0,directed:!1,padding:30,circle:!1,grid:!1,spacingFactor:1.75,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,roots:void 0,depthSort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")},tQe={maximal:!1,acyclic:!1},z1=o(function(e){return e.scratch("breadthfirst")},"getInfo"),T0e=o(function(e,r){return e.scratch("breadthfirst",r)},"setInfo");o(tge,"BreadthFirstLayout");tge.prototype.run=function(){var t=this.options,e=t.cy,r=t.eles,n=r.nodes().filter(function(ae){return ae.isChildless()}),i=r,a=t.directed,s=t.acyclic||t.maximal||t.maximalAdjustments>0,l=!!t.boundingBox,u=e.extent(),h=Hs(l?t.boundingBox:{x1:u.x1,y1:u.y1,w:u.w,h:u.h}),f;if(go(t.roots))f=t.roots;else if(En(t.roots)){for(var d=[],p=0;p<t.roots.length;p++){var m=t.roots[p],g=e.getElementById(m);d.push(g)}f=e.collection(d)}else if(Zt(t.roots))f=e.$(t.roots);else if(a)f=n.roots();else{var y=r.components();f=e.collection();for(var v=o(function(Oe){var ge=y[Oe],ze=ge.maxDegree(!1),He=ge.filter(function($e){return $e.degree(!1)===ze});f=f.add(He)},"_loop"),x=0;x<y.length;x++)v(x)}var b=[],w={},C=o(function(Oe,ge){b[ge]==null&&(b[ge]=[]);var ze=b[ge].length;b[ge].push(Oe),T0e(Oe,{index:ze,depth:ge})},"addToDepth"),T=o(function(Oe,ge){var ze=z1(Oe),He=ze.depth,$e=ze.index;b[He][$e]=null,Oe.isChildless()&&C(Oe,ge)},"changeDepth");i.bfs({roots:f,directed:t.directed,visit:o(function(Oe,ge,ze,He,$e){var Re=Oe[0],Ie=Re.id();Re.isChildless()&&C(Re,$e),w[Ie]=!0},"visit")});for(var E=[],A=0;A<n.length;A++){var S=n[A];w[S.id()]||E.push(S)}var _=o(function(Oe){for(var ge=b[Oe],ze=0;ze<ge.length;ze++){var He=ge[ze];if(He==null){ge.splice(ze,1),ze--;continue}T0e(He,{depth:Oe,index:ze})}},"assignDepthsAt"),I=o(function(Oe,ge){for(var ze=z1(Oe),He=Oe.incomers().filter(function(re){return re.isNode()&&r.has(re)}),$e=-1,Re=Oe.id(),Ie=0;Ie<He.length;Ie++){var be=He[Ie],W=z1(be);$e=Math.max($e,W.depth)}if(ze.depth<=$e){if(!t.acyclic&&ge[Re])return null;var de=$e+1;return T(Oe,de),ge[Re]=de,!0}return!1},"adjustMaximally");if(a&&s){var D=[],k={},L=o(function(Oe){return D.push(Oe)},"enqueue"),R=o(function(){return D.shift()},"dequeue");for(n.forEach(function(ae){return D.push(ae)});D.length>0;){var O=R(),M=I(O,k);if(M)O.outgoers().filter(function(ae){return ae.isNode()&&r.has(ae)}).forEach(L);else if(M===null){un("Detected double maximal shift for node `"+O.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}var B=0;if(t.avoidOverlap)for(var F=0;F<n.length;F++){var P=n[F],z=P.layoutDimensions(t),$=z.w,H=z.h;B=Math.max(B,$,H)}var Q={},j=o(function(Oe){if(Q[Oe.id()])return Q[Oe.id()];for(var ge=z1(Oe).depth,ze=Oe.neighborhood(),He=0,$e=0,Re=0;Re<ze.length;Re++){var Ie=ze[Re];if(!(Ie.isEdge()||Ie.isParent()||!n.has(Ie))){var be=z1(Ie);if(be!=null){var W=be.index,de=be.depth;if(!(W==null||de==null)){var re=b[de].length;de<ge&&(He+=W/re,$e++)}}}}return $e=Math.max(1,$e),He=He/$e,$e===0&&(He=0),Q[Oe.id()]=He,He},"getWeightedPercent"),ie=o(function(Oe,ge){var ze=j(Oe),He=j(ge),$e=ze-He;return $e===0?eme(Oe.id(),ge.id()):$e},"sortFn");t.depthSort!==void 0&&(ie=t.depthSort);for(var ne=b.length,le=0;le<ne;le++)b[le].sort(ie),_(le);for(var he=[],K=0;K<E.length;K++)he.push(E[K]);var X=o(function(){for(var Oe=0;Oe<ne;Oe++)_(Oe)},"assignDepths");he.length&&(b.unshift(he),ne=b.length,X());for(var te=0,J=0;J<ne;J++)te=Math.max(b[J].length,te);var se={x:h.x1+h.w/2,y:h.y1+h.h/2},ue=n.reduce(function(ae,Oe){return function(ge){return{w:ae.w===-1?ge.w:(ae.w+ge.w)/2,h:ae.h===-1?ge.h:(ae.h+ge.h)/2}}(Oe.boundingBox({includeLabels:t.nodeDimensionsIncludeLabels}))},{w:-1,h:-1}),Z=Math.max(ne===1?0:l?(h.h-t.padding*2-ue.h)/(ne-1):(h.h-t.padding*2-ue.h)/(ne+1),B),Se=b.reduce(function(ae,Oe){return Math.max(ae,Oe.length)},0),ce=o(function(Oe){var ge=z1(Oe),ze=ge.depth,He=ge.index;if(t.circle){var $e=Math.min(h.w/2/ne,h.h/2/ne);$e=Math.max($e,B);var Re=$e*ze+$e-(ne>0&&b[0].length<=3?$e/2:0),Ie=2*Math.PI/b[ze].length*He;return ze===0&&b[0].length===1&&(Re=1),{x:se.x+Re*Math.cos(Ie),y:se.y+Re*Math.sin(Ie)}}else{var be=b[ze].length,W=Math.max(be===1?0:l?(h.w-t.padding*2-ue.w)/((t.grid?Se:be)-1):(h.w-t.padding*2-ue.w)/((t.grid?Se:be)+1),B),de={x:se.x+(He+1-(be+1)/2)*W,y:se.y+(ze+1-(ne+1)/2)*Z};return de}},"getPosition");return r.nodes().layoutPositions(this,t,ce),this};rQe={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(rge,"CircleLayout");rge.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,a=n.nodes().not(":parent");e.sort&&(a=a.sort(e.sort));for(var s=Hs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=e.sweep===void 0?2*Math.PI-2*Math.PI/a.length:e.sweep,h=u/Math.max(1,a.length-1),f,d=0,p=0;p<a.length;p++){var m=a[p],g=m.layoutDimensions(e),y=g.w,v=g.h;d=Math.max(d,y,v)}if(Ct(e.radius)?f=e.radius:a.length<=1?f=0:f=Math.min(s.h,s.w)/2-d,a.length>1&&e.avoidOverlap){d*=1.75;var x=Math.cos(h)-Math.cos(0),b=Math.sin(h)-Math.sin(0),w=Math.sqrt(d*d/(x*x+b*b));f=Math.max(w,f)}var C=o(function(E,A){var S=e.startAngle+A*h*(i?1:-1),_=f*Math.cos(S),I=f*Math.sin(S),D={x:l.x+_,y:l.y+I};return D},"getPos");return n.nodes().layoutPositions(this,e,C),this};nQe={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:o(function(e){return e.degree()},"concentric"),levelWidth:o(function(e){return e.maxDegree()/4},"levelWidth"),animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(nge,"ConcentricLayout");nge.prototype.run=function(){for(var t=this.options,e=t,r=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,n=t.cy,i=e.eles,a=i.nodes().not(":parent"),s=Hs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=[],h=0,f=0;f<a.length;f++){var d=a[f],p=void 0;p=e.concentric(d),u.push({value:p,node:d}),d._private.scratch.concentric=p}a.updateStyle();for(var m=0;m<a.length;m++){var g=a[m],y=g.layoutDimensions(e);h=Math.max(h,y.w,y.h)}u.sort(function(ue,Z){return Z.value-ue.value});for(var v=e.levelWidth(a),x=[[]],b=x[0],w=0;w<u.length;w++){var C=u[w];if(b.length>0){var T=Math.abs(b[0].value-C.value);T>=v&&(b=[],x.push(b))}b.push(C)}var E=h+e.minNodeSpacing;if(!e.avoidOverlap){var A=x.length>0&&x[0].length>1,S=Math.min(s.w,s.h)/2-E,_=S/(x.length+A?1:0);E=Math.min(E,_)}for(var I=0,D=0;D<x.length;D++){var k=x[D],L=e.sweep===void 0?2*Math.PI-2*Math.PI/k.length:e.sweep,R=k.dTheta=L/Math.max(1,k.length-1);if(k.length>1&&e.avoidOverlap){var O=Math.cos(R)-Math.cos(0),M=Math.sin(R)-Math.sin(0),B=Math.sqrt(E*E/(O*O+M*M));I=Math.max(B,I)}k.r=I,I+=E}if(e.equidistant){for(var F=0,P=0,z=0;z<x.length;z++){var $=x[z],H=$.r-P;F=Math.max(F,H)}P=0;for(var Q=0;Q<x.length;Q++){var j=x[Q];Q===0&&(P=j.r),j.r=P,P+=F}}for(var ie={},ne=0;ne<x.length;ne++)for(var le=x[ne],he=le.dTheta,K=le.r,X=0;X<le.length;X++){var te=le[X],J=e.startAngle+(r?1:-1)*he*X,se={x:l.x+K*Math.cos(J),y:l.y+K*Math.sin(J)};ie[te.node.id()]=se}return i.nodes().layoutPositions(this,e,function(ue){var Z=ue.id();return ie[Z]}),this};iQe={ready:o(function(){},"ready"),stop:o(function(){},"stop"),animate:!0,animationEasing:void 0,animationDuration:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),animationThreshold:250,refresh:20,fit:!0,padding:30,boundingBox:void 0,nodeDimensionsIncludeLabels:!1,randomize:!1,componentSpacing:40,nodeRepulsion:o(function(e){return 2048},"nodeRepulsion"),nodeOverlap:4,idealEdgeLength:o(function(e){return 32},"idealEdgeLength"),edgeElasticity:o(function(e){return 32},"edgeElasticity"),nestingFactor:1.2,gravity:1,numIter:1e3,initialTemp:1e3,coolingFactor:.99,minTemp:1};o(HS,"CoseLayout");HS.prototype.run=function(){var t=this.options,e=t.cy,r=this;r.stopped=!1,(t.animate===!0||t.animate===!1)&&r.emit({type:"layoutstart",layout:r}),t.debug===!0?_P=!0:_P=!1;var n=aQe(e,r,t);_P&&lQe(n),t.randomize&&cQe(n);var i=Qu(),a=o(function(){uQe(n,e,t),t.fit===!0&&e.fit(t.padding)},"refresh"),s=o(function(p){return!(r.stopped||p>=t.numIter||(hQe(n,t),n.temperature=n.temperature*t.coolingFactor,n.temperature<t.minTemp))},"mainLoop"),l=o(function(){if(t.animate===!0||t.animate===!1)a(),r.one("layoutstop",t.stop),r.emit({type:"layoutstop",layout:r});else{var p=t.eles.nodes(),m=ige(n,t,p);p.layoutPositions(r,t,m)}},"done"),u=0,h=!0;if(t.animate===!0){var f=o(function d(){for(var p=0;h&&p<t.refresh;)h=s(u),u++,p++;if(!h)E0e(n,t),l();else{var m=Qu();m-i>=t.animationThreshold&&a(),xS(d)}},"frame");f()}else{for(;h;)h=s(u),u++;E0e(n,t),l()}return this};HS.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this};HS.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};aQe=o(function(e,r,n){for(var i=n.eles.edges(),a=n.eles.nodes(),s=Hs(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),l={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:a.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:i.size(),temperature:n.initialTemp,clientWidth:s.w,clientHeight:s.h,boundingBox:s},u=n.eles.components(),h={},f=0;f<u.length;f++)for(var d=u[f],p=0;p<d.length;p++){var m=d[p];h[m.id()]=f}for(var f=0;f<l.nodeSize;f++){var g=a[f],y=g.layoutDimensions(n),v={};v.isLocked=g.locked(),v.id=g.data("id"),v.parentId=g.data("parent"),v.cmptId=h[g.id()],v.children=[],v.positionX=g.position("x"),v.positionY=g.position("y"),v.offsetX=0,v.offsetY=0,v.height=y.w,v.width=y.h,v.maxX=v.positionX+v.width/2,v.minX=v.positionX-v.width/2,v.maxY=v.positionY+v.height/2,v.minY=v.positionY-v.height/2,v.padLeft=parseFloat(g.style("padding")),v.padRight=parseFloat(g.style("padding")),v.padTop=parseFloat(g.style("padding")),v.padBottom=parseFloat(g.style("padding")),v.nodeRepulsion=si(n.nodeRepulsion)?n.nodeRepulsion(g):n.nodeRepulsion,l.layoutNodes.push(v),l.idToIndex[v.id]=f}for(var x=[],b=0,w=-1,C=[],f=0;f<l.nodeSize;f++){var g=l.layoutNodes[f],T=g.parentId;T!=null?l.layoutNodes[l.idToIndex[T]].children.push(g.id):(x[++w]=g.id,C.push(g.id))}for(l.graphSet.push(C);b<=w;){var E=x[b++],A=l.idToIndex[E],m=l.layoutNodes[A],S=m.children;if(S.length>0){l.graphSet.push(S);for(var f=0;f<S.length;f++)x[++w]=S[f]}}for(var f=0;f<l.graphSet.length;f++)for(var _=l.graphSet[f],p=0;p<_.length;p++){var I=l.idToIndex[_[p]];l.indexToGraph[I]=f}for(var f=0;f<l.edgeSize;f++){var D=i[f],k={};k.id=D.data("id"),k.sourceId=D.data("source"),k.targetId=D.data("target");var L=si(n.idealEdgeLength)?n.idealEdgeLength(D):n.idealEdgeLength,R=si(n.edgeElasticity)?n.edgeElasticity(D):n.edgeElasticity,O=l.idToIndex[k.sourceId],M=l.idToIndex[k.targetId],B=l.indexToGraph[O],F=l.indexToGraph[M];if(B!=F){for(var P=sQe(k.sourceId,k.targetId,l),z=l.graphSet[P],$=0,v=l.layoutNodes[O];z.indexOf(v.id)===-1;)v=l.layoutNodes[l.idToIndex[v.parentId]],$++;for(v=l.layoutNodes[M];z.indexOf(v.id)===-1;)v=l.layoutNodes[l.idToIndex[v.parentId]],$++;L*=$*n.nestingFactor}k.idealLength=L,k.elasticity=R,l.layoutEdges.push(k)}return l},"createLayoutInfo"),sQe=o(function(e,r,n){var i=oQe(e,r,0,n);return 2>i.count?0:i.graph},"findLCA"),oQe=o(function t(e,r,n,i){var a=i.graphSet[n];if(-1<a.indexOf(e)&&-1<a.indexOf(r))return{count:2,graph:n};for(var s=0,l=0;l<a.length;l++){var u=a[l],h=i.idToIndex[u],f=i.layoutNodes[h].children;if(f.length!==0){var d=i.indexToGraph[i.idToIndex[f[0]]],p=t(e,r,d,i);if(p.count!==0)if(p.count===1){if(s++,s===2)break}else return p}}return{count:s,graph:n}},"findLCA_aux"),cQe=o(function(e,r){for(var n=e.clientWidth,i=e.clientHeight,a=0;a<e.nodeSize;a++){var s=e.layoutNodes[a];s.children.length===0&&!s.isLocked&&(s.positionX=Math.random()*n,s.positionY=Math.random()*i)}},"randomizePositions"),ige=o(function(e,r,n){var i=e.boundingBox,a={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0};return r.boundingBox&&(n.forEach(function(s){var l=e.layoutNodes[e.idToIndex[s.data("id")]];a.x1=Math.min(a.x1,l.positionX),a.x2=Math.max(a.x2,l.positionX),a.y1=Math.min(a.y1,l.positionY),a.y2=Math.max(a.y2,l.positionY)}),a.w=a.x2-a.x1,a.h=a.y2-a.y1),function(s,l){var u=e.layoutNodes[e.idToIndex[s.data("id")]];if(r.boundingBox){var h=(u.positionX-a.x1)/a.w,f=(u.positionY-a.y1)/a.h;return{x:i.x1+h*i.w,y:i.y1+f*i.h}}else return{x:u.positionX,y:u.positionY}}},"getScaleInBoundsFn"),uQe=o(function(e,r,n){var i=n.layout,a=n.eles.nodes(),s=ige(e,n,a);a.positions(s),e.ready!==!0&&(e.ready=!0,i.one("layoutready",n.ready),i.emit({type:"layoutready",layout:this}))},"refreshPositions"),hQe=o(function(e,r,n){fQe(e,r),mQe(e),gQe(e,r),yQe(e),vQe(e)},"step"),fQe=o(function(e,r){for(var n=0;n<e.graphSet.length;n++)for(var i=e.graphSet[n],a=i.length,s=0;s<a;s++)for(var l=e.layoutNodes[e.idToIndex[i[s]]],u=s+1;u<a;u++){var h=e.layoutNodes[e.idToIndex[i[u]]];dQe(l,h,e,r)}},"calculateNodeForces"),k0e=o(function(e){return-e+2*e*Math.random()},"randomDistance"),dQe=o(function(e,r,n,i){var a=e.cmptId,s=r.cmptId;if(!(a!==s&&!n.isCompound)){var l=r.positionX-e.positionX,u=r.positionY-e.positionY,h=1;l===0&&u===0&&(l=k0e(h),u=k0e(h));var f=pQe(e,r,l,u);if(f>0)var d=i.nodeOverlap*f,p=Math.sqrt(l*l+u*u),m=d*l/p,g=d*u/p;else var y=CS(e,l,u),v=CS(r,-1*l,-1*u),x=v.x-y.x,b=v.y-y.y,w=x*x+b*b,p=Math.sqrt(w),d=(e.nodeRepulsion+r.nodeRepulsion)/w,m=d*x/p,g=d*b/p;e.isLocked||(e.offsetX-=m,e.offsetY-=g),r.isLocked||(r.offsetX+=m,r.offsetY+=g)}},"nodeRepulsion"),pQe=o(function(e,r,n,i){if(n>0)var a=e.maxX-r.minX;else var a=r.maxX-e.minX;if(i>0)var s=e.maxY-r.minY;else var s=r.maxY-e.minY;return a>=0&&s>=0?Math.sqrt(a*a+s*s):0},"nodesOverlap"),CS=o(function(e,r,n){var i=e.positionX,a=e.positionY,s=e.height||1,l=e.width||1,u=n/r,h=s/l,f={};return r===0&&0<n||r===0&&0>n?(f.x=i,f.y=a+s/2,f):0<r&&-1*h<=u&&u<=h?(f.x=i+l/2,f.y=a+l*n/2/r,f):0>r&&-1*h<=u&&u<=h?(f.x=i-l/2,f.y=a-l*n/2/r,f):0<n&&(u<=-1*h||u>=h)?(f.x=i+s*r/2/n,f.y=a+s/2,f):(0>n&&(u<=-1*h||u>=h)&&(f.x=i-s*r/2/n,f.y=a-s/2),f)},"findClippingPoint"),mQe=o(function(e,r){for(var n=0;n<e.edgeSize;n++){var i=e.layoutEdges[n],a=e.idToIndex[i.sourceId],s=e.layoutNodes[a],l=e.idToIndex[i.targetId],u=e.layoutNodes[l],h=u.positionX-s.positionX,f=u.positionY-s.positionY;if(!(h===0&&f===0)){var d=CS(s,h,f),p=CS(u,-1*h,-1*f),m=p.x-d.x,g=p.y-d.y,y=Math.sqrt(m*m+g*g),v=Math.pow(i.idealLength-y,2)/i.elasticity;if(y!==0)var x=v*m/y,b=v*g/y;else var x=0,b=0;s.isLocked||(s.offsetX+=x,s.offsetY+=b),u.isLocked||(u.offsetX-=x,u.offsetY-=b)}}},"calculateEdgeForces"),gQe=o(function(e,r){if(r.gravity!==0)for(var n=1,i=0;i<e.graphSet.length;i++){var a=e.graphSet[i],s=a.length;if(i===0)var l=e.clientHeight/2,u=e.clientWidth/2;else var h=e.layoutNodes[e.idToIndex[a[0]]],f=e.layoutNodes[e.idToIndex[h.parentId]],l=f.positionX,u=f.positionY;for(var d=0;d<s;d++){var p=e.layoutNodes[e.idToIndex[a[d]]];if(!p.isLocked){var m=l-p.positionX,g=u-p.positionY,y=Math.sqrt(m*m+g*g);if(y>n){var v=r.gravity*m/y,x=r.gravity*g/y;p.offsetX+=v,p.offsetY+=x}}}}},"calculateGravityForces"),yQe=o(function(e,r){var n=[],i=0,a=-1;for(n.push.apply(n,e.graphSet[0]),a+=e.graphSet[0].length;i<=a;){var s=n[i++],l=e.idToIndex[s],u=e.layoutNodes[l],h=u.children;if(0<h.length&&!u.isLocked){for(var f=u.offsetX,d=u.offsetY,p=0;p<h.length;p++){var m=e.layoutNodes[e.idToIndex[h[p]]];m.offsetX+=f,m.offsetY+=d,n[++a]=h[p]}u.offsetX=0,u.offsetY=0}}},"propagateForces"),vQe=o(function(e,r){for(var n=0;n<e.nodeSize;n++){var i=e.layoutNodes[n];0<i.children.length&&(i.maxX=void 0,i.minX=void 0,i.maxY=void 0,i.minY=void 0)}for(var n=0;n<e.nodeSize;n++){var i=e.layoutNodes[n];if(!(0<i.children.length||i.isLocked)){var a=xQe(i.offsetX,i.offsetY,e.temperature);i.positionX+=a.x,i.positionY+=a.y,i.offsetX=0,i.offsetY=0,i.minX=i.positionX-i.width,i.maxX=i.positionX+i.width,i.minY=i.positionY-i.height,i.maxY=i.positionY+i.height,bQe(i,e)}}for(var n=0;n<e.nodeSize;n++){var i=e.layoutNodes[n];0<i.children.length&&!i.isLocked&&(i.positionX=(i.maxX+i.minX)/2,i.positionY=(i.maxY+i.minY)/2,i.width=i.maxX-i.minX,i.height=i.maxY-i.minY)}},"updatePositions"),xQe=o(function(e,r,n){var i=Math.sqrt(e*e+r*r);if(i>n)var a={x:n*e/i,y:n*r/i};else var a={x:e,y:r};return a},"limitForce"),bQe=o(function t(e,r){var n=e.parentId;if(n!=null){var i=r.layoutNodes[r.idToIndex[n]],a=!1;if((i.maxX==null||e.maxX+i.padRight>i.maxX)&&(i.maxX=e.maxX+i.padRight,a=!0),(i.minX==null||e.minX-i.padLeft<i.minX)&&(i.minX=e.minX-i.padLeft,a=!0),(i.maxY==null||e.maxY+i.padBottom>i.maxY)&&(i.maxY=e.maxY+i.padBottom,a=!0),(i.minY==null||e.minY-i.padTop<i.minY)&&(i.minY=e.minY-i.padTop,a=!0),a)return t(i,r)}},"updateAncestryBoundaries"),E0e=o(function(e,r){for(var n=e.layoutNodes,i=[],a=0;a<n.length;a++){var s=n[a],l=s.cmptId,u=i[l]=i[l]||[];u.push(s)}for(var h=0,a=0;a<i.length;a++){var f=i[a];if(f){f.x1=1/0,f.x2=-1/0,f.y1=1/0,f.y2=-1/0;for(var d=0;d<f.length;d++){var p=f[d];f.x1=Math.min(f.x1,p.positionX-p.width/2),f.x2=Math.max(f.x2,p.positionX+p.width/2),f.y1=Math.min(f.y1,p.positionY-p.height/2),f.y2=Math.max(f.y2,p.positionY+p.height/2)}f.w=f.x2-f.x1,f.h=f.y2-f.y1,h+=f.w*f.h}}i.sort(function(b,w){return w.w*w.h-b.w*b.h});for(var m=0,g=0,y=0,v=0,x=Math.sqrt(h)*e.clientWidth/e.clientHeight,a=0;a<i.length;a++){var f=i[a];if(f){for(var d=0;d<f.length;d++){var p=f[d];p.isLocked||(p.positionX+=m-f.x1,p.positionY+=g-f.y1)}m+=f.w+r.componentSpacing,y+=f.w+r.componentSpacing,v=Math.max(v,f.h),y>x&&(g+=v+r.componentSpacing,m=0,y=0,v=0)}}},"separateComponents"),wQe={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:o(function(e){},"position"),sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(age,"GridLayout");age.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=n.nodes().not(":parent");e.sort&&(i=i.sort(e.sort));var a=Hs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(a.h===0||a.w===0)n.nodes().layoutPositions(this,e,function(Q){return{x:a.x1,y:a.y1}});else{var s=i.size(),l=Math.sqrt(s*a.h/a.w),u=Math.round(l),h=Math.round(a.w/a.h*l),f=o(function(j){if(j==null)return Math.min(u,h);var ie=Math.min(u,h);ie==u?u=j:h=j},"small"),d=o(function(j){if(j==null)return Math.max(u,h);var ie=Math.max(u,h);ie==u?u=j:h=j},"large"),p=e.rows,m=e.cols!=null?e.cols:e.columns;if(p!=null&&m!=null)u=p,h=m;else if(p!=null&&m==null)u=p,h=Math.ceil(s/u);else if(p==null&&m!=null)h=m,u=Math.ceil(s/h);else if(h*u>s){var g=f(),y=d();(g-1)*y>=s?f(g-1):(y-1)*g>=s&&d(y-1)}else for(;h*u<s;){var v=f(),x=d();(x+1)*v>=s?d(x+1):f(v+1)}var b=a.w/h,w=a.h/u;if(e.condense&&(b=0,w=0),e.avoidOverlap)for(var C=0;C<i.length;C++){var T=i[C],E=T._private.position;(E.x==null||E.y==null)&&(E.x=0,E.y=0);var A=T.layoutDimensions(e),S=e.avoidOverlapPadding,_=A.w+S,I=A.h+S;b=Math.max(b,_),w=Math.max(w,I)}for(var D={},k=o(function(j,ie){return!!D["c-"+j+"-"+ie]},"used"),L=o(function(j,ie){D["c-"+j+"-"+ie]=!0},"use"),R=0,O=0,M=o(function(){O++,O>=h&&(O=0,R++)},"moveToNextCell"),B={},F=0;F<i.length;F++){var P=i[F],z=e.position(P);if(z&&(z.row!==void 0||z.col!==void 0)){var $={row:z.row,col:z.col};if($.col===void 0)for($.col=0;k($.row,$.col);)$.col++;else if($.row===void 0)for($.row=0;k($.row,$.col);)$.row++;B[P.id()]=$,L($.row,$.col)}}var H=o(function(j,ie){var ne,le;if(j.locked()||j.isParent())return!1;var he=B[j.id()];if(he)ne=he.col*b+b/2+a.x1,le=he.row*w+w/2+a.y1;else{for(;k(R,O);)M();ne=O*b+b/2+a.x1,le=R*w+w/2+a.y1,L(R,O),M()}return{x:ne,y:le}},"getPos");i.layoutPositions(this,e,H)}return this};TQe={ready:o(function(){},"ready"),stop:o(function(){},"stop")};o(gB,"NullLayout");gB.prototype.run=function(){var t=this.options,e=t.eles,r=this;return t.cy,r.emit("layoutstart"),e.nodes().positions(function(){return{x:0,y:0}}),r.one("layoutready",t.ready),r.emit("layoutready"),r.one("layoutstop",t.stop),r.emit("layoutstop"),this};gB.prototype.stop=function(){return this};kQe={positions:void 0,zoom:void 0,pan:void 0,fit:!0,padding:30,spacingFactor:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(sge,"PresetLayout");sge.prototype.run=function(){var t=this.options,e=t.eles,r=e.nodes(),n=si(t.positions);function i(a){if(t.positions==null)return Aqe(a.position());if(n)return t.positions(a);var s=t.positions[a._private.data.id];return s??null}return o(i,"getPosition"),r.layoutPositions(this,t,function(a,s){var l=i(a);return a.locked()||l==null?!1:l}),this};EQe={fit:!0,padding:30,boundingBox:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(oge,"RandomLayout");oge.prototype.run=function(){var t=this.options,e=t.cy,r=t.eles,n=Hs(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),i=o(function(s,l){return{x:n.x1+Math.round(Math.random()*n.w),y:n.y1+Math.round(Math.random()*n.h)}},"getPos");return r.nodes().layoutPositions(this,t,i),this};SQe=[{name:"breadthfirst",impl:tge},{name:"circle",impl:rge},{name:"concentric",impl:nge},{name:"cose",impl:HS},{name:"grid",impl:age},{name:"null",impl:gB},{name:"preset",impl:sge},{name:"random",impl:oge}];o(lge,"NullRenderer");S0e=o(function(){},"noop"),C0e=o(function(){throw new Error("A headless instance can not render images")},"throwImgErr");lge.prototype={recalculateRenderedStyle:S0e,notify:o(function(){this.notifications++},"notify"),init:S0e,isHeadless:o(function(){return!0},"isHeadless"),png:C0e,jpg:C0e};yB={};yB.arrowShapeWidth=.3;yB.registerArrowShapes=function(){var t=this.arrowShapes={},e=this,r=o(function(h,f,d,p,m,g,y){var v=m.x-d/2-y,x=m.x+d/2+y,b=m.y-d/2-y,w=m.y+d/2+y,C=v<=h&&h<=x&&b<=f&&f<=w;return C},"bbCollide"),n=o(function(h,f,d,p,m){var g=h*Math.cos(p)-f*Math.sin(p),y=h*Math.sin(p)+f*Math.cos(p),v=g*d,x=y*d,b=v+m.x,w=x+m.y;return{x:b,y:w}},"transform"),i=o(function(h,f,d,p){for(var m=[],g=0;g<h.length;g+=2){var y=h[g],v=h[g+1];m.push(n(y,v,f,d,p))}return m},"transformPoints"),a=o(function(h){for(var f=[],d=0;d<h.length;d++){var p=h[d];f.push(p.x,p.y)}return f},"pointsToArr"),s=o(function(h){return h.pstyle("width").pfValue*h.pstyle("arrow-scale").pfValue*2},"standardGap"),l=o(function(h,f){Zt(f)&&(f=t[f]),t[h]=rr({name:h,points:[-.15,-.3,.15,-.3,.15,.3,-.15,.3],collide:o(function(p,m,g,y,v,x){var b=a(i(this.points,g+2*x,y,v)),w=Us(p,m,b);return w},"collide"),roughCollide:r,draw:o(function(p,m,g,y){var v=i(this.points,m,g,y);e.arrowShapeImpl("polygon")(p,v)},"draw"),spacing:o(function(p){return 0},"spacing"),gap:s},f)},"defineArrowShape");l("none",{collide:bS,roughCollide:bS,draw:rB,spacing:Ppe,gap:Ppe}),l("triangle",{points:[-.15,-.3,0,0,.15,-.3]}),l("arrow","triangle"),l("triangle-backcurve",{points:t.triangle.points,controlPoint:[0,-.15],roughCollide:r,draw:o(function(h,f,d,p,m){var g=i(this.points,f,d,p),y=this.controlPoint,v=n(y[0],y[1],f,d,p);e.arrowShapeImpl(this.name)(h,g,v)},"draw"),gap:o(function(h){return s(h)*.8},"gap")}),l("triangle-tee",{points:[0,0,.15,-.3,-.15,-.3,0,0],pointsTee:[-.15,-.4,-.15,-.5,.15,-.5,.15,-.4],collide:o(function(h,f,d,p,m,g,y){var v=a(i(this.points,d+2*y,p,m)),x=a(i(this.pointsTee,d+2*y,p,m)),b=Us(h,f,v)||Us(h,f,x);return b},"collide"),draw:o(function(h,f,d,p,m){var g=i(this.points,f,d,p),y=i(this.pointsTee,f,d,p);e.arrowShapeImpl(this.name)(h,g,y)},"draw")}),l("circle-triangle",{radius:.15,pointsTr:[0,-.15,.15,-.45,-.15,-.45,0,-.15],collide:o(function(h,f,d,p,m,g,y){var v=m,x=Math.pow(v.x-h,2)+Math.pow(v.y-f,2)<=Math.pow((d+2*y)*this.radius,2),b=a(i(this.points,d+2*y,p,m));return Us(h,f,b)||x},"collide"),draw:o(function(h,f,d,p,m){var g=i(this.pointsTr,f,d,p);e.arrowShapeImpl(this.name)(h,g,p.x,p.y,this.radius*f)},"draw"),spacing:o(function(h){return e.getArrowWidth(h.pstyle("width").pfValue,h.pstyle("arrow-scale").value)*this.radius},"spacing")}),l("triangle-cross",{points:[0,0,.15,-.3,-.15,-.3,0,0],baseCrossLinePts:[-.15,-.4,-.15,-.4,.15,-.4,.15,-.4],crossLinePts:o(function(h,f){var d=this.baseCrossLinePts.slice(),p=f/h,m=3,g=5;return d[m]=d[m]-p,d[g]=d[g]-p,d},"crossLinePts"),collide:o(function(h,f,d,p,m,g,y){var v=a(i(this.points,d+2*y,p,m)),x=a(i(this.crossLinePts(d,g),d+2*y,p,m)),b=Us(h,f,v)||Us(h,f,x);return b},"collide"),draw:o(function(h,f,d,p,m){var g=i(this.points,f,d,p),y=i(this.crossLinePts(f,m),f,d,p);e.arrowShapeImpl(this.name)(h,g,y)},"draw")}),l("vee",{points:[-.15,-.3,0,0,.15,-.3,0,-.15],gap:o(function(h){return s(h)*.525},"gap")}),l("circle",{radius:.15,collide:o(function(h,f,d,p,m,g,y){var v=m,x=Math.pow(v.x-h,2)+Math.pow(v.y-f,2)<=Math.pow((d+2*y)*this.radius,2);return x},"collide"),draw:o(function(h,f,d,p,m){e.arrowShapeImpl(this.name)(h,p.x,p.y,this.radius*f)},"draw"),spacing:o(function(h){return e.getArrowWidth(h.pstyle("width").pfValue,h.pstyle("arrow-scale").value)*this.radius},"spacing")}),l("tee",{points:[-.15,0,-.15,-.1,.15,-.1,.15,0],spacing:o(function(h){return 1},"spacing"),gap:o(function(h){return 1},"gap")}),l("square",{points:[-.15,0,.15,0,.15,-.3,-.15,-.3]}),l("diamond",{points:[-.15,-.15,0,-.3,.15,-.15,0,0],gap:o(function(h){return h.pstyle("width").pfValue*h.pstyle("arrow-scale").value},"gap")}),l("chevron",{points:[0,0,-.15,-.15,-.1,-.2,0,-.1,.1,-.2,.15,-.15],gap:o(function(h){return .95*h.pstyle("width").pfValue*h.pstyle("arrow-scale").value},"gap")})};qp={};qp.projectIntoViewport=function(t,e){var r=this.cy,n=this.findContainerClientCoords(),i=n[0],a=n[1],s=n[4],l=r.pan(),u=r.zoom(),h=((t-i)/s-l.x)/u,f=((e-a)/s-l.y)/u;return[h,f]};qp.findContainerClientCoords=function(){if(this.containerBB)return this.containerBB;var t=this.container,e=t.getBoundingClientRect(),r=this.cy.window().getComputedStyle(t),n=o(function(x){return parseFloat(r.getPropertyValue(x))},"styleValue"),i={left:n("padding-left"),right:n("padding-right"),top:n("padding-top"),bottom:n("padding-bottom")},a={left:n("border-left-width"),right:n("border-right-width"),top:n("border-top-width"),bottom:n("border-bottom-width")},s=t.clientWidth,l=t.clientHeight,u=i.left+i.right,h=i.top+i.bottom,f=a.left+a.right,d=e.width/(s+f),p=s-u,m=l-h,g=e.left+i.left+a.left,y=e.top+i.top+a.top;return this.containerBB=[g,y,p,m,d]};qp.invalidateContainerClientCoordsCache=function(){this.containerBB=null};qp.findNearestElement=function(t,e,r,n){return this.findNearestElements(t,e,r,n)[0]};qp.findNearestElements=function(t,e,r,n){var i=this,a=this,s=a.getCachedZSortedEles(),l=[],u=a.cy.zoom(),h=a.cy.hasCompoundNodes(),f=(n?24:8)/u,d=(n?8:2)/u,p=(n?8:2)/u,m=1/0,g,y;r&&(s=s.interactive);function v(A,S){if(A.isNode()){if(y)return;y=A,l.push(A)}if(A.isEdge()&&(S==null||S<m))if(g){if(g.pstyle("z-compound-depth").value===A.pstyle("z-compound-depth").value&&g.pstyle("z-compound-depth").value===A.pstyle("z-compound-depth").value){for(var _=0;_<l.length;_++)if(l[_].isEdge()){l[_]=A,g=A,m=S??m;break}}}else l.push(A),g=A,m=S??m}o(v,"addEle");function x(A){var S=A.outerWidth()+2*d,_=A.outerHeight()+2*d,I=S/2,D=_/2,k=A.position(),L=A.pstyle("corner-radius").value==="auto"?"auto":A.pstyle("corner-radius").pfValue,R=A._private.rscratch;if(k.x-I<=t&&t<=k.x+I&&k.y-D<=e&&e<=k.y+D){var O=a.nodeShapes[i.getNodeShape(A)];if(O.checkPoint(t,e,0,S,_,k.x,k.y,L,R))return v(A,0),!0}}o(x,"checkNode");function b(A){var S=A._private,_=S.rscratch,I=A.pstyle("width").pfValue,D=A.pstyle("arrow-scale").value,k=I/2+f,L=k*k,R=k*2,F=S.source,P=S.target,O;if(_.edgeType==="segments"||_.edgeType==="straight"||_.edgeType==="haystack"){for(var M=_.allpts,B=0;B+3<M.length;B+=2)if(zqe(t,e,M[B],M[B+1],M[B+2],M[B+3],R)&&L>(O=Wqe(t,e,M[B],M[B+1],M[B+2],M[B+3])))return v(A,O),!0}else if(_.edgeType==="bezier"||_.edgeType==="multibezier"||_.edgeType==="self"||_.edgeType==="compound"){for(var M=_.allpts,B=0;B+5<_.allpts.length;B+=4)if(Gqe(t,e,M[B],M[B+1],M[B+2],M[B+3],M[B+4],M[B+5],R)&&L>(O=Hqe(t,e,M[B],M[B+1],M[B+2],M[B+3],M[B+4],M[B+5])))return v(A,O),!0}for(var F=F||S.source,P=P||S.target,z=i.getArrowWidth(I,D),$=[{name:"source",x:_.arrowStartX,y:_.arrowStartY,angle:_.srcArrowAngle},{name:"target",x:_.arrowEndX,y:_.arrowEndY,angle:_.tgtArrowAngle},{name:"mid-source",x:_.midX,y:_.midY,angle:_.midsrcArrowAngle},{name:"mid-target",x:_.midX,y:_.midY,angle:_.midtgtArrowAngle}],B=0;B<$.length;B++){var H=$[B],Q=a.arrowShapes[A.pstyle(H.name+"-arrow-shape").value],j=A.pstyle("width").pfValue;if(Q.roughCollide(t,e,z,H.angle,{x:H.x,y:H.y},j,f)&&Q.collide(t,e,z,H.angle,{x:H.x,y:H.y},j,f))return v(A),!0}h&&l.length>0&&(x(F),x(P))}o(b,"checkEdge");function w(A,S,_){return Gl(A,S,_)}o(w,"preprop");function C(A,S){var _=A._private,I=p,D;S?D=S+"-":D="",A.boundingBox();var k=_.labelBounds[S||"main"],L=A.pstyle(D+"label").value,R=A.pstyle("text-events").strValue==="yes";if(!(!R||!L)){var O=w(_.rscratch,"labelX",S),M=w(_.rscratch,"labelY",S),B=w(_.rscratch,"labelAngle",S),F=A.pstyle(D+"text-margin-x").pfValue,P=A.pstyle(D+"text-margin-y").pfValue,z=k.x1-I-F,$=k.x2+I-F,H=k.y1-I-P,Q=k.y2+I-P;if(B){var j=Math.cos(B),ie=Math.sin(B),ne=o(function(se,ue){return se=se-O,ue=ue-M,{x:se*j-ue*ie+O,y:se*ie+ue*j+M}},"rotate"),le=ne(z,H),he=ne(z,Q),K=ne($,H),X=ne($,Q),te=[le.x+F,le.y+P,K.x+F,K.y+P,X.x+F,X.y+P,he.x+F,he.y+P];if(Us(t,e,te))return v(A),!0}else if(K1(k,t,e))return v(A),!0}}o(C,"checkLabel");for(var T=s.length-1;T>=0;T--){var E=s[T];E.isNode()?x(E)||C(E):b(E)||C(E)||C(E,"source")||C(E,"target")}return l};qp.getAllInBox=function(t,e,r,n){var i=this.getCachedZSortedEles().interactive,a=[],s=Math.min(t,r),l=Math.max(t,r),u=Math.min(e,n),h=Math.max(e,n);t=s,r=l,e=u,n=h;for(var f=Hs({x1:t,y1:e,x2:r,y2:n}),d=0;d<i.length;d++){var p=i[d];if(p.isNode()){var m=p,g=m.boundingBox({includeNodes:!0,includeEdges:!1,includeLabels:!1});aB(f,g)&&!yme(g,f)&&a.push(m)}else{var y=p,v=y._private,x=v.rscratch;if(x.startX!=null&&x.startY!=null&&!K1(f,x.startX,x.startY)||x.endX!=null&&x.endY!=null&&!K1(f,x.endX,x.endY))continue;if(x.edgeType==="bezier"||x.edgeType==="multibezier"||x.edgeType==="self"||x.edgeType==="compound"||x.edgeType==="segments"||x.edgeType==="haystack"){for(var b=v.rstyle.bezierPts||v.rstyle.linePts||v.rstyle.haystackPts,w=!0,C=0;C<b.length;C++)if(!$qe(f,b[C])){w=!1;break}w&&a.push(y)}else(x.edgeType==="haystack"||x.edgeType==="straight")&&a.push(y)}}return a};AS={};AS.calculateArrowAngles=function(t){var e=t._private.rscratch,r=e.edgeType==="haystack",n=e.edgeType==="bezier",i=e.edgeType==="multibezier",a=e.edgeType==="segments",s=e.edgeType==="compound",l=e.edgeType==="self",u,h,f,d,p,m,x,b;if(r?(f=e.haystackPts[0],d=e.haystackPts[1],p=e.haystackPts[2],m=e.haystackPts[3]):(f=e.arrowStartX,d=e.arrowStartY,p=e.arrowEndX,m=e.arrowEndY),x=e.midX,b=e.midY,a)u=f-e.segpts[0],h=d-e.segpts[1];else if(i||s||l||n){var g=e.allpts,y=oa(g[0],g[2],g[4],.1),v=oa(g[1],g[3],g[5],.1);u=f-y,h=d-v}else u=f-x,h=d-b;e.srcArrowAngle=K6(u,h);var x=e.midX,b=e.midY;if(r&&(x=(f+p)/2,b=(d+m)/2),u=p-f,h=m-d,a){var g=e.allpts;if(g.length/2%2===0){var w=g.length/2,C=w-2;u=g[w]-g[C],h=g[w+1]-g[C+1]}else if(e.isRound)u=e.midVector[1],h=-e.midVector[0];else{var w=g.length/2-1,C=w-2;u=g[w]-g[C],h=g[w+1]-g[C+1]}}else if(i||s||l){var g=e.allpts,T=e.ctrlpts,E,A,S,_;if(T.length/2%2===0){var I=g.length/2-1,D=I+2,k=D+2;E=oa(g[I],g[D],g[k],0),A=oa(g[I+1],g[D+1],g[k+1],0),S=oa(g[I],g[D],g[k],1e-4),_=oa(g[I+1],g[D+1],g[k+1],1e-4)}else{var D=g.length/2-1,I=D-2,k=D+2;E=oa(g[I],g[D],g[k],.4999),A=oa(g[I+1],g[D+1],g[k+1],.4999),S=oa(g[I],g[D],g[k],.5),_=oa(g[I+1],g[D+1],g[k+1],.5)}u=S-E,h=_-A}if(e.midtgtArrowAngle=K6(u,h),e.midDispX=u,e.midDispY=h,u*=-1,h*=-1,a){var g=e.allpts;if(g.length/2%2!==0){if(!e.isRound){var w=g.length/2-1,L=w+2;u=-(g[L]-g[w]),h=-(g[L+1]-g[w+1])}}}if(e.midsrcArrowAngle=K6(u,h),a)u=p-e.segpts[e.segpts.length-2],h=m-e.segpts[e.segpts.length-1];else if(i||s||l||n){var g=e.allpts,R=g.length,y=oa(g[R-6],g[R-4],g[R-2],.9),v=oa(g[R-5],g[R-3],g[R-1],.9);u=p-y,h=m-v}else u=p-x,h=m-b;e.tgtArrowAngle=K6(u,h)};AS.getArrowWidth=AS.getArrowHeight=function(t,e){var r=this.arrowWidthCache=this.arrowWidthCache||{},n=r[t+", "+e];return n||(n=Math.max(Math.pow(t*13.37,.9),29)*e,r[t+", "+e]=n,n)};qc={},Jo={},L0e=o(function(e,r,n){n.x=r.x-e.x,n.y=r.y-e.y,n.len=Math.sqrt(n.x*n.x+n.y*n.y),n.nx=n.x/n.len,n.ny=n.y/n.len,n.ang=Math.atan2(n.ny,n.nx)},"asVec"),CQe=o(function(e,r){r.x=e.x*-1,r.y=e.y*-1,r.nx=e.nx*-1,r.ny=e.ny*-1,r.ang=e.ang>0?-(Math.PI-e.ang):Math.PI+e.ang},"invertVec"),AQe=o(function(e,r,n,i,a){if(e!==D0e?L0e(r,e,qc):CQe(Jo,qc),L0e(r,n,Jo),A0e=qc.nx*Jo.ny-qc.ny*Jo.nx,_0e=qc.nx*Jo.nx-qc.ny*-Jo.ny,Ku=Math.asin(Math.max(-1,Math.min(1,A0e))),Math.abs(Ku)<1e-6){HP=r.x,WP=r.y,Bp=G1=0;return}Fp=1,gS=!1,_0e<0?Ku<0?Ku=Math.PI+Ku:(Ku=Math.PI-Ku,Fp=-1,gS=!0):Ku>0&&(Fp=-1,gS=!0),r.radius!==void 0?G1=r.radius:G1=i,Mp=Ku/2,aS=Math.min(qc.len/2,Jo.len/2),a?(Wc=Math.abs(Math.cos(Mp)*G1/Math.sin(Mp)),Wc>aS?(Wc=aS,Bp=Math.abs(Wc*Math.sin(Mp)/Math.cos(Mp))):Bp=G1):(Wc=Math.min(aS,G1),Bp=Math.abs(Wc*Math.sin(Mp)/Math.cos(Mp))),qP=r.x+Jo.nx*Wc,YP=r.y+Jo.ny*Wc,HP=qP-Jo.ny*Bp*Fp,WP=YP+Jo.nx*Bp*Fp,cge=r.x+qc.nx*Wc,uge=r.y+qc.ny*Wc,D0e=r},"calcCornerArc");o(hge,"drawPreparedRoundCorner");o(vB,"getRoundCorner");Va={};Va.findMidptPtsEtc=function(t,e){var r=e.posPts,n=e.intersectionPts,i=e.vectorNormInverse,a,s=t.pstyle("source-endpoint"),l=t.pstyle("target-endpoint"),u=s.units!=null&&l.units!=null,h=o(function(T,E,A,S){var _=S-E,I=A-T,D=Math.sqrt(I*I+_*_);return{x:-_/D,y:I/D}},"recalcVectorNormInverse"),f=t.pstyle("edge-distances").value;switch(f){case"node-position":a=r;break;case"intersection":a=n;break;case"endpoints":{if(u){var d=this.manualEndptToPx(t.source()[0],s),p=_i(d,2),m=p[0],g=p[1],y=this.manualEndptToPx(t.target()[0],l),v=_i(y,2),x=v[0],b=v[1],w={x1:m,y1:g,x2:x,y2:b};i=h(m,g,x,b),a=w}else un("Edge ".concat(t.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),a=n;break}}return{midptPts:a,vectorNormInverse:i}};Va.findHaystackPoints=function(t){for(var e=0;e<t.length;e++){var r=t[e],n=r._private,i=n.rscratch;if(!i.haystack){var a=Math.random()*2*Math.PI;i.source={x:Math.cos(a),y:Math.sin(a)},a=Math.random()*2*Math.PI,i.target={x:Math.cos(a),y:Math.sin(a)}}var s=n.source,l=n.target,u=s.position(),h=l.position(),f=s.width(),d=l.width(),p=s.height(),m=l.height(),g=r.pstyle("haystack-radius").value,y=g/2;i.haystackPts=i.allpts=[i.source.x*f*y+u.x,i.source.y*p*y+u.y,i.target.x*d*y+h.x,i.target.y*m*y+h.y],i.midX=(i.allpts[0]+i.allpts[2])/2,i.midY=(i.allpts[1]+i.allpts[3])/2,i.edgeType="haystack",i.haystack=!0,this.storeEdgeProjections(r),this.calculateArrowAngles(r),this.recalculateEdgeLabelProjections(r),this.calculateLabelAngles(r)}};Va.findSegmentsPoints=function(t,e){var r=t._private.rscratch,n=t.pstyle("segment-weights"),i=t.pstyle("segment-distances"),a=t.pstyle("segment-radii"),s=t.pstyle("radius-type"),l=Math.min(n.pfValue.length,i.pfValue.length),u=a.pfValue[a.pfValue.length-1],h=s.pfValue[s.pfValue.length-1];r.edgeType="segments",r.segpts=[],r.radii=[],r.isArcRadius=[];for(var f=0;f<l;f++){var d=n.pfValue[f],p=i.pfValue[f],m=1-d,g=d,y=this.findMidptPtsEtc(t,e),v=y.midptPts,x=y.vectorNormInverse,b={x:v.x1*m+v.x2*g,y:v.y1*m+v.y2*g};r.segpts.push(b.x+x.x*p,b.y+x.y*p),r.radii.push(a.pfValue[f]!==void 0?a.pfValue[f]:u),r.isArcRadius.push((s.pfValue[f]!==void 0?s.pfValue[f]:h)==="arc-radius")}};Va.findLoopPoints=function(t,e,r,n){var i=t._private.rscratch,a=e.dirCounts,s=e.srcPos,l=t.pstyle("control-point-distances"),u=l?l.pfValue[0]:void 0,h=t.pstyle("loop-direction").pfValue,f=t.pstyle("loop-sweep").pfValue,d=t.pstyle("control-point-step-size").pfValue;i.edgeType="self";var p=r,m=d;n&&(p=0,m=u);var g=h-Math.PI/2,y=g-f/2,v=g+f/2,x=h+"_"+f;p=a[x]===void 0?a[x]=0:++a[x],i.ctrlpts=[s.x+Math.cos(y)*1.4*m*(p/3+1),s.y+Math.sin(y)*1.4*m*(p/3+1),s.x+Math.cos(v)*1.4*m*(p/3+1),s.y+Math.sin(v)*1.4*m*(p/3+1)]};Va.findCompoundLoopPoints=function(t,e,r,n){var i=t._private.rscratch;i.edgeType="compound";var a=e.srcPos,s=e.tgtPos,l=e.srcW,u=e.srcH,h=e.tgtW,f=e.tgtH,d=t.pstyle("control-point-step-size").pfValue,p=t.pstyle("control-point-distances"),m=p?p.pfValue[0]:void 0,g=r,y=d;n&&(g=0,y=m);var v=50,x={x:a.x-l/2,y:a.y-u/2},b={x:s.x-h/2,y:s.y-f/2},w={x:Math.min(x.x,b.x),y:Math.min(x.y,b.y)},C=.5,T=Math.max(C,Math.log(l*.01)),E=Math.max(C,Math.log(h*.01));i.ctrlpts=[w.x,w.y-(1+Math.pow(v,1.12)/100)*y*(g/3+1)*T,w.x-(1+Math.pow(v,1.12)/100)*y*(g/3+1)*E,w.y]};Va.findStraightEdgePoints=function(t){t._private.rscratch.edgeType="straight"};Va.findBezierPoints=function(t,e,r,n,i){var a=t._private.rscratch,s=t.pstyle("control-point-step-size").pfValue,l=t.pstyle("control-point-distances"),u=t.pstyle("control-point-weights"),h=l&&u?Math.min(l.value.length,u.value.length):1,f=l?l.pfValue[0]:void 0,d=u.value[0],p=n;a.edgeType=p?"multibezier":"bezier",a.ctrlpts=[];for(var m=0;m<h;m++){var g=(.5-e.eles.length/2+r)*s*(i?-1:1),y=void 0,v=mme(g);p&&(f=l?l.pfValue[m]:s,d=u.value[m]),n?y=f:y=f!==void 0?v*f:void 0;var x=y!==void 0?y:g,b=1-d,w=d,C=this.findMidptPtsEtc(t,e),T=C.midptPts,E=C.vectorNormInverse,A={x:T.x1*b+T.x2*w,y:T.y1*b+T.y2*w};a.ctrlpts.push(A.x+E.x*x,A.y+E.y*x)}};Va.findTaxiPoints=function(t,e){var r=t._private.rscratch;r.edgeType="segments";var n="vertical",i="horizontal",a="leftward",s="rightward",l="downward",u="upward",h="auto",f=e.posPts,d=e.srcW,p=e.srcH,m=e.tgtW,g=e.tgtH,y=t.pstyle("edge-distances").value,v=y!=="node-position",x=t.pstyle("taxi-direction").value,b=x,w=t.pstyle("taxi-turn"),C=w.units==="%",T=w.pfValue,E=T<0,A=t.pstyle("taxi-turn-min-distance").pfValue,S=v?(d+m)/2:0,_=v?(p+g)/2:0,I=f.x2-f.x1,D=f.y2-f.y1,k=o(function(q,pe){return q>0?Math.max(q-pe,0):Math.min(q+pe,0)},"subDWH"),L=k(I,S),R=k(D,_),O=!1;b===h?x=Math.abs(L)>Math.abs(R)?i:n:b===u||b===l?(x=n,O=!0):(b===a||b===s)&&(x=i,O=!0);var M=x===n,B=M?R:L,F=M?D:I,P=mme(F),z=!1;!(O&&(C||E))&&(b===l&&F<0||b===u&&F>0||b===a&&F>0||b===s&&F<0)&&(P*=-1,B=P*Math.abs(B),z=!0);var $;if(C){var H=T<0?1+T:T;$=H*B}else{var Q=T<0?B:0;$=Q+T*P}var j=o(function(q){return Math.abs(q)<A||Math.abs(q)>=Math.abs(B)},"getIsTooClose"),ie=j($),ne=j(Math.abs(B)-Math.abs($)),le=ie||ne;if(le&&!z)if(M){var he=Math.abs(F)<=p/2,K=Math.abs(I)<=m/2;if(he){var X=(f.x1+f.x2)/2,te=f.y1,J=f.y2;r.segpts=[X,te,X,J]}else if(K){var se=(f.y1+f.y2)/2,ue=f.x1,Z=f.x2;r.segpts=[ue,se,Z,se]}else r.segpts=[f.x1,f.y2]}else{var Se=Math.abs(F)<=d/2,ce=Math.abs(D)<=g/2;if(Se){var ae=(f.y1+f.y2)/2,Oe=f.x1,ge=f.x2;r.segpts=[Oe,ae,ge,ae]}else if(ce){var ze=(f.x1+f.x2)/2,He=f.y1,$e=f.y2;r.segpts=[ze,He,ze,$e]}else r.segpts=[f.x2,f.y1]}else if(M){var Re=f.y1+$+(v?p/2*P:0),Ie=f.x1,be=f.x2;r.segpts=[Ie,Re,be,Re]}else{var W=f.x1+$+(v?d/2*P:0),de=f.y1,re=f.y2;r.segpts=[W,de,W,re]}if(r.isRound){var oe=t.pstyle("taxi-radius").value,V=t.pstyle("radius-type").value[0]==="arc-radius";r.radii=new Array(r.segpts.length/2).fill(oe),r.isArcRadius=new Array(r.segpts.length/2).fill(V)}};Va.tryToCorrectInvalidPoints=function(t,e){var r=t._private.rscratch;if(r.edgeType==="bezier"){var n=e.srcPos,i=e.tgtPos,a=e.srcW,s=e.srcH,l=e.tgtW,u=e.tgtH,h=e.srcShape,f=e.tgtShape,d=e.srcCornerRadius,p=e.tgtCornerRadius,m=e.srcRs,g=e.tgtRs,y=!Ct(r.startX)||!Ct(r.startY),v=!Ct(r.arrowStartX)||!Ct(r.arrowStartY),x=!Ct(r.endX)||!Ct(r.endY),b=!Ct(r.arrowEndX)||!Ct(r.arrowEndY),w=3,C=this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth,T=w*C,E=Gp({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.startX,y:r.startY}),A=E<T,S=Gp({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.endX,y:r.endY}),_=S<T,I=!1;if(y||v||A){I=!0;var D={x:r.ctrlpts[0]-n.x,y:r.ctrlpts[1]-n.y},k=Math.sqrt(D.x*D.x+D.y*D.y),L={x:D.x/k,y:D.y/k},R=Math.max(a,s),O={x:r.ctrlpts[0]+L.x*2*R,y:r.ctrlpts[1]+L.y*2*R},M=h.intersectLine(n.x,n.y,a,s,O.x,O.y,0,d,m);A?(r.ctrlpts[0]=r.ctrlpts[0]+L.x*(T-E),r.ctrlpts[1]=r.ctrlpts[1]+L.y*(T-E)):(r.ctrlpts[0]=M[0]+L.x*T,r.ctrlpts[1]=M[1]+L.y*T)}if(x||b||_){I=!0;var B={x:r.ctrlpts[0]-i.x,y:r.ctrlpts[1]-i.y},F=Math.sqrt(B.x*B.x+B.y*B.y),P={x:B.x/F,y:B.y/F},z=Math.max(a,s),$={x:r.ctrlpts[0]+P.x*2*z,y:r.ctrlpts[1]+P.y*2*z},H=f.intersectLine(i.x,i.y,l,u,$.x,$.y,0,p,g);_?(r.ctrlpts[0]=r.ctrlpts[0]+P.x*(T-S),r.ctrlpts[1]=r.ctrlpts[1]+P.y*(T-S)):(r.ctrlpts[0]=H[0]+P.x*T,r.ctrlpts[1]=H[1]+P.y*T)}I&&this.findEndpoints(t)}};Va.storeAllpts=function(t){var e=t._private.rscratch;if(e.edgeType==="multibezier"||e.edgeType==="bezier"||e.edgeType==="self"||e.edgeType==="compound"){e.allpts=[],e.allpts.push(e.startX,e.startY);for(var r=0;r+1<e.ctrlpts.length;r+=2)e.allpts.push(e.ctrlpts[r],e.ctrlpts[r+1]),r+3<e.ctrlpts.length&&e.allpts.push((e.ctrlpts[r]+e.ctrlpts[r+2])/2,(e.ctrlpts[r+1]+e.ctrlpts[r+3])/2);e.allpts.push(e.endX,e.endY);var n,i;e.ctrlpts.length/2%2===0?(n=e.allpts.length/2-1,e.midX=e.allpts[n],e.midY=e.allpts[n+1]):(n=e.allpts.length/2-3,i=.5,e.midX=oa(e.allpts[n],e.allpts[n+2],e.allpts[n+4],i),e.midY=oa(e.allpts[n+1],e.allpts[n+3],e.allpts[n+5],i))}else if(e.edgeType==="straight")e.allpts=[e.startX,e.startY,e.endX,e.endY],e.midX=(e.startX+e.endX+e.arrowStartX+e.arrowEndX)/4,e.midY=(e.startY+e.endY+e.arrowStartY+e.arrowEndY)/4;else if(e.edgeType==="segments"){if(e.allpts=[],e.allpts.push(e.startX,e.startY),e.allpts.push.apply(e.allpts,e.segpts),e.allpts.push(e.endX,e.endY),e.isRound){e.roundCorners=[];for(var a=2;a+3<e.allpts.length;a+=2){var s=e.radii[a/2-1],l=e.isArcRadius[a/2-1];e.roundCorners.push(vB({x:e.allpts[a-2],y:e.allpts[a-1]},{x:e.allpts[a],y:e.allpts[a+1],radius:s},{x:e.allpts[a+2],y:e.allpts[a+3]},s,l))}}if(e.segpts.length%4===0){var u=e.segpts.length/2,h=u-2;e.midX=(e.segpts[h]+e.segpts[u])/2,e.midY=(e.segpts[h+1]+e.segpts[u+1])/2}else{var f=e.segpts.length/2-1;if(!e.isRound)e.midX=e.segpts[f],e.midY=e.segpts[f+1];else{var d={x:e.segpts[f],y:e.segpts[f+1]},p=e.roundCorners[f/2],m=[d.x-p.cx,d.y-p.cy],g=p.radius/Math.sqrt(Math.pow(m[0],2)+Math.pow(m[1],2));m=m.map(function(y){return y*g}),e.midX=p.cx+m[0],e.midY=p.cy+m[1],e.midVector=m}}}};Va.checkForInvalidEdgeWarning=function(t){var e=t[0]._private.rscratch;e.nodesOverlap||Ct(e.startX)&&Ct(e.startY)&&Ct(e.endX)&&Ct(e.endY)?e.loggedErr=!1:e.loggedErr||(e.loggedErr=!0,un("Edge `"+t.id()+"` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap."))};Va.findEdgeControlPoints=function(t){var e=this;if(!(!t||t.length===0)){for(var r=this,n=r.cy,i=n.hasCompoundNodes(),a={map:new Xc,get:o(function(A){var S=this.map.get(A[0]);return S!=null?S.get(A[1]):null},"get"),set:o(function(A,S){var _=this.map.get(A[0]);_==null&&(_=new Xc,this.map.set(A[0],_)),_.set(A[1],S)},"set")},s=[],l=[],u=0;u<t.length;u++){var h=t[u],f=h._private,d=h.pstyle("curve-style").value;if(!(h.removed()||!h.takesUpSpace())){if(d==="haystack"){l.push(h);continue}var p=d==="unbundled-bezier"||d.endsWith("segments")||d==="straight"||d==="straight-triangle"||d.endsWith("taxi"),m=d==="unbundled-bezier"||d==="bezier",g=f.source,y=f.target,v=g.poolIndex(),x=y.poolIndex(),b=[v,x].sort(),w=a.get(b);w==null&&(w={eles:[]},a.set(b,w),s.push(b)),w.eles.push(h),p&&(w.hasUnbundled=!0),m&&(w.hasBezier=!0)}}for(var C=o(function(A){var S=s[A],_=a.get(S),I=void 0;if(!_.hasUnbundled){var D=_.eles[0].parallelEdges().filter(function(W){return W.isBundledBezier()});nB(_.eles),D.forEach(function(W){return _.eles.push(W)}),_.eles.sort(function(W,de){return W.poolIndex()-de.poolIndex()})}var k=_.eles[0],L=k.source(),R=k.target();if(L.poolIndex()>R.poolIndex()){var O=L;L=R,R=O}var M=_.srcPos=L.position(),B=_.tgtPos=R.position(),F=_.srcW=L.outerWidth(),P=_.srcH=L.outerHeight(),z=_.tgtW=R.outerWidth(),$=_.tgtH=R.outerHeight(),H=_.srcShape=r.nodeShapes[e.getNodeShape(L)],Q=_.tgtShape=r.nodeShapes[e.getNodeShape(R)],j=_.srcCornerRadius=L.pstyle("corner-radius").value==="auto"?"auto":L.pstyle("corner-radius").pfValue,ie=_.tgtCornerRadius=R.pstyle("corner-radius").value==="auto"?"auto":R.pstyle("corner-radius").pfValue,ne=_.tgtRs=R._private.rscratch,le=_.srcRs=L._private.rscratch;_.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var he=0;he<_.eles.length;he++){var K=_.eles[he],X=K[0]._private.rscratch,te=K.pstyle("curve-style").value,J=te==="unbundled-bezier"||te.endsWith("segments")||te.endsWith("taxi"),se=!L.same(K.source());if(!_.calculatedIntersection&&L!==R&&(_.hasBezier||_.hasUnbundled)){_.calculatedIntersection=!0;var ue=H.intersectLine(M.x,M.y,F,P,B.x,B.y,0,j,le),Z=_.srcIntn=ue,Se=Q.intersectLine(B.x,B.y,z,$,M.x,M.y,0,ie,ne),ce=_.tgtIntn=Se,ae=_.intersectionPts={x1:ue[0],x2:Se[0],y1:ue[1],y2:Se[1]},Oe=_.posPts={x1:M.x,x2:B.x,y1:M.y,y2:B.y},ge=Se[1]-ue[1],ze=Se[0]-ue[0],He=Math.sqrt(ze*ze+ge*ge),$e=_.vector={x:ze,y:ge},Re=_.vectorNorm={x:$e.x/He,y:$e.y/He},Ie={x:-Re.y,y:Re.x};_.nodesOverlap=!Ct(He)||Q.checkPoint(ue[0],ue[1],0,z,$,B.x,B.y,ie,ne)||H.checkPoint(Se[0],Se[1],0,F,P,M.x,M.y,j,le),_.vectorNormInverse=Ie,I={nodesOverlap:_.nodesOverlap,dirCounts:_.dirCounts,calculatedIntersection:!0,hasBezier:_.hasBezier,hasUnbundled:_.hasUnbundled,eles:_.eles,srcPos:B,srcRs:ne,tgtPos:M,tgtRs:le,srcW:z,srcH:$,tgtW:F,tgtH:P,srcIntn:ce,tgtIntn:Z,srcShape:Q,tgtShape:H,posPts:{x1:Oe.x2,y1:Oe.y2,x2:Oe.x1,y2:Oe.y1},intersectionPts:{x1:ae.x2,y1:ae.y2,x2:ae.x1,y2:ae.y1},vector:{x:-$e.x,y:-$e.y},vectorNorm:{x:-Re.x,y:-Re.y},vectorNormInverse:{x:-Ie.x,y:-Ie.y}}}var be=se?I:_;X.nodesOverlap=be.nodesOverlap,X.srcIntn=be.srcIntn,X.tgtIntn=be.tgtIntn,X.isRound=te.startsWith("round"),i&&(L.isParent()||L.isChild()||R.isParent()||R.isChild())&&(L.parents().anySame(R)||R.parents().anySame(L)||L.same(R)&&L.isParent())?e.findCompoundLoopPoints(K,be,he,J):L===R?e.findLoopPoints(K,be,he,J):te.endsWith("segments")?e.findSegmentsPoints(K,be):te.endsWith("taxi")?e.findTaxiPoints(K,be):te==="straight"||!J&&_.eles.length%2===1&&he===Math.floor(_.eles.length/2)?e.findStraightEdgePoints(K):e.findBezierPoints(K,be,he,J,se),e.findEndpoints(K),e.tryToCorrectInvalidPoints(K,be),e.checkForInvalidEdgeWarning(K),e.storeAllpts(K),e.storeEdgeProjections(K),e.calculateArrowAngles(K),e.recalculateEdgeLabelProjections(K),e.calculateLabelAngles(K)}},"_loop"),T=0;T<s.length;T++)C(T);this.findHaystackPoints(l)}};o(fge,"getPts");Va.getSegmentPoints=function(t){var e=t[0]._private.rscratch;this.recalculateRenderedStyle(t);var r=e.edgeType;if(r==="segments")return fge(e.segpts)};Va.getControlPoints=function(t){var e=t[0]._private.rscratch;this.recalculateRenderedStyle(t);var r=e.edgeType;if(r==="bezier"||r==="multibezier"||r==="self"||r==="compound")return fge(e.ctrlpts)};Va.getEdgeMidpoint=function(t){var e=t[0]._private.rscratch;return this.recalculateRenderedStyle(t),{x:e.midX,y:e.midY}};o4={};o4.manualEndptToPx=function(t,e){var r=this,n=t.position(),i=t.outerWidth(),a=t.outerHeight(),s=t._private.rscratch;if(e.value.length===2){var l=[e.pfValue[0],e.pfValue[1]];return e.units[0]==="%"&&(l[0]=l[0]*i),e.units[1]==="%"&&(l[1]=l[1]*a),l[0]+=n.x,l[1]+=n.y,l}else{var u=e.pfValue[0];u=-Math.PI/2+u;var h=2*Math.max(i,a),f=[n.x+Math.cos(u)*h,n.y+Math.sin(u)*h];return r.nodeShapes[this.getNodeShape(t)].intersectLine(n.x,n.y,i,a,f[0],f[1],0,t.pstyle("corner-radius").value==="auto"?"auto":t.pstyle("corner-radius").pfValue,s)}};o4.findEndpoints=function(t){var e=this,r,n=t.source()[0],i=t.target()[0],a=n.position(),s=i.position(),l=t.pstyle("target-arrow-shape").value,u=t.pstyle("source-arrow-shape").value,h=t.pstyle("target-distance-from-node").pfValue,f=t.pstyle("source-distance-from-node").pfValue,d=n._private.rscratch,p=i._private.rscratch,m=t.pstyle("curve-style").value,g=t._private.rscratch,y=g.edgeType,v=m==="taxi",x=y==="self"||y==="compound",b=y==="bezier"||y==="multibezier"||x,w=y!=="bezier",C=y==="straight"||y==="segments",T=y==="segments",E=b||w||C,A=x||v,S=t.pstyle("source-endpoint"),_=A?"outside-to-node":S.value,I=n.pstyle("corner-radius").value==="auto"?"auto":n.pstyle("corner-radius").pfValue,D=t.pstyle("target-endpoint"),k=A?"outside-to-node":D.value,L=i.pstyle("corner-radius").value==="auto"?"auto":i.pstyle("corner-radius").pfValue;g.srcManEndpt=S,g.tgtManEndpt=D;var R,O,M,B;if(b){var F=[g.ctrlpts[0],g.ctrlpts[1]],P=w?[g.ctrlpts[g.ctrlpts.length-2],g.ctrlpts[g.ctrlpts.length-1]]:F;R=P,O=F}else if(C){var z=T?g.segpts.slice(0,2):[s.x,s.y],$=T?g.segpts.slice(g.segpts.length-2):[a.x,a.y];R=$,O=z}if(k==="inside-to-node")r=[s.x,s.y];else if(D.units)r=this.manualEndptToPx(i,D);else if(k==="outside-to-line")r=g.tgtIntn;else if(k==="outside-to-node"||k==="outside-to-node-or-label"?M=R:(k==="outside-to-line"||k==="outside-to-line-or-label")&&(M=[a.x,a.y]),r=e.nodeShapes[this.getNodeShape(i)].intersectLine(s.x,s.y,i.outerWidth(),i.outerHeight(),M[0],M[1],0,L,p),k==="outside-to-node-or-label"||k==="outside-to-line-or-label"){var H=i._private.rscratch,Q=H.labelWidth,j=H.labelHeight,ie=H.labelX,ne=H.labelY,le=Q/2,he=j/2,K=i.pstyle("text-valign").value;K==="top"?ne-=he:K==="bottom"&&(ne+=he);var X=i.pstyle("text-halign").value;X==="left"?ie-=le:X==="right"&&(ie+=le);var te=Xb(M[0],M[1],[ie-le,ne-he,ie+le,ne-he,ie+le,ne+he,ie-le,ne+he],s.x,s.y);if(te.length>0){var J=a,se=Op(J,U1(r)),ue=Op(J,U1(te)),Z=se;if(ue<se&&(r=te,Z=ue),te.length>2){var Se=Op(J,{x:te[2],y:te[3]});Se<Z&&(r=[te[2],te[3]])}}}var ce=Q6(r,R,e.arrowShapes[l].spacing(t)+h),ae=Q6(r,R,e.arrowShapes[l].gap(t)+h);if(g.endX=ae[0],g.endY=ae[1],g.arrowEndX=ce[0],g.arrowEndY=ce[1],_==="inside-to-node")r=[a.x,a.y];else if(S.units)r=this.manualEndptToPx(n,S);else if(_==="outside-to-line")r=g.srcIntn;else if(_==="outside-to-node"||_==="outside-to-node-or-label"?B=O:(_==="outside-to-line"||_==="outside-to-line-or-label")&&(B=[s.x,s.y]),r=e.nodeShapes[this.getNodeShape(n)].intersectLine(a.x,a.y,n.outerWidth(),n.outerHeight(),B[0],B[1],0,I,d),_==="outside-to-node-or-label"||_==="outside-to-line-or-label"){var Oe=n._private.rscratch,ge=Oe.labelWidth,ze=Oe.labelHeight,He=Oe.labelX,$e=Oe.labelY,Re=ge/2,Ie=ze/2,be=n.pstyle("text-valign").value;be==="top"?$e-=Ie:be==="bottom"&&($e+=Ie);var W=n.pstyle("text-halign").value;W==="left"?He-=Re:W==="right"&&(He+=Re);var de=Xb(B[0],B[1],[He-Re,$e-Ie,He+Re,$e-Ie,He+Re,$e+Ie,He-Re,$e+Ie],a.x,a.y);if(de.length>0){var re=s,oe=Op(re,U1(r)),V=Op(re,U1(de)),xe=oe;if(V<oe&&(r=[de[0],de[1]],xe=V),de.length>2){var q=Op(re,{x:de[2],y:de[3]});q<xe&&(r=[de[2],de[3]])}}}var pe=Q6(r,O,e.arrowShapes[u].spacing(t)+f),ve=Q6(r,O,e.arrowShapes[u].gap(t)+f);g.startX=ve[0],g.startY=ve[1],g.arrowStartX=pe[0],g.arrowStartY=pe[1],E&&(!Ct(g.startX)||!Ct(g.startY)||!Ct(g.endX)||!Ct(g.endY)?g.badLine=!0:g.badLine=!1)};o4.getSourceEndpoint=function(t){var e=t[0]._private.rscratch;switch(this.recalculateRenderedStyle(t),e.edgeType){case"haystack":return{x:e.haystackPts[0],y:e.haystackPts[1]};default:return{x:e.arrowStartX,y:e.arrowStartY}}};o4.getTargetEndpoint=function(t){var e=t[0]._private.rscratch;switch(this.recalculateRenderedStyle(t),e.edgeType){case"haystack":return{x:e.haystackPts[2],y:e.haystackPts[3]};default:return{x:e.arrowEndX,y:e.arrowEndY}}};xB={};o(_Qe,"pushBezierPts");xB.storeEdgeProjections=function(t){var e=t._private,r=e.rscratch,n=r.edgeType;if(e.rstyle.bezierPts=null,e.rstyle.linePts=null,e.rstyle.haystackPts=null,n==="multibezier"||n==="bezier"||n==="self"||n==="compound"){e.rstyle.bezierPts=[];for(var i=0;i+5<r.allpts.length;i+=4)_Qe(this,t,r.allpts.slice(i,i+6))}else if(n==="segments")for(var a=e.rstyle.linePts=[],i=0;i+1<r.allpts.length;i+=2)a.push({x:r.allpts[i],y:r.allpts[i+1]});else if(n==="haystack"){var s=r.haystackPts;e.rstyle.haystackPts=[{x:s[0],y:s[1]},{x:s[2],y:s[3]}]}e.rstyle.arrowWidth=this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth};xB.recalculateEdgeProjections=function(t){this.findEdgeControlPoints(t)};Kc={};Kc.recalculateNodeLabelProjection=function(t){var e=t.pstyle("label").strValue;if(!Af(e)){var r,n,i=t._private,a=t.width(),s=t.height(),l=t.padding(),u=t.position(),h=t.pstyle("text-halign").strValue,f=t.pstyle("text-valign").strValue,d=i.rscratch,p=i.rstyle;switch(h){case"left":r=u.x-a/2-l;break;case"right":r=u.x+a/2+l;break;default:r=u.x}switch(f){case"top":n=u.y-s/2-l;break;case"bottom":n=u.y+s/2+l;break;default:n=u.y}d.labelX=r,d.labelY=n,p.labelX=r,p.labelY=n,this.calculateLabelAngles(t),this.applyLabelDimensions(t)}};dge=o(function(e,r){var n=Math.atan(r/e);return e===0&&n<0&&(n=n*-1),n},"lineAngleFromDelta"),pge=o(function(e,r){var n=r.x-e.x,i=r.y-e.y;return dge(n,i)},"lineAngle"),DQe=o(function(e,r,n,i){var a=Yb(0,i-.001,1),s=Yb(0,i+.001,1),l=W1(e,r,n,a),u=W1(e,r,n,s);return pge(l,u)},"bezierAngle");Kc.recalculateEdgeLabelProjections=function(t){var e,r=t._private,n=r.rscratch,i=this,a={mid:t.pstyle("label").strValue,source:t.pstyle("source-label").strValue,target:t.pstyle("target-label").strValue};if(a.mid||a.source||a.target){e={x:n.midX,y:n.midY};var s=o(function(d,p,m){kf(r.rscratch,d,p,m),kf(r.rstyle,d,p,m)},"setRs");s("labelX",null,e.x),s("labelY",null,e.y);var l=dge(n.midDispX,n.midDispY);s("labelAutoAngle",null,l);var u=o(function f(){if(f.cache)return f.cache;for(var d=[],p=0;p+5<n.allpts.length;p+=4){var m={x:n.allpts[p],y:n.allpts[p+1]},g={x:n.allpts[p+2],y:n.allpts[p+3]},y={x:n.allpts[p+4],y:n.allpts[p+5]};d.push({p0:m,p1:g,p2:y,startDist:0,length:0,segments:[]})}var v=r.rstyle.bezierPts,x=i.bezierProjPcts.length;function b(A,S,_,I,D){var k=Gp(S,_),L=A.segments[A.segments.length-1],R={p0:S,p1:_,t0:I,t1:D,startDist:L?L.startDist+L.length:0,length:k};A.segments.push(R),A.length+=k}o(b,"addSegment");for(var w=0;w<d.length;w++){var C=d[w],T=d[w-1];T&&(C.startDist=T.startDist+T.length),b(C,C.p0,v[w*x],0,i.bezierProjPcts[0]);for(var E=0;E<x-1;E++)b(C,v[w*x+E],v[w*x+E+1],i.bezierProjPcts[E],i.bezierProjPcts[E+1]);b(C,v[w*x+x-1],C.p2,i.bezierProjPcts[x-1],1)}return f.cache=d},"createControlPointInfo"),h=o(function(d){var p,m=d==="source";if(a[d]){var g=t.pstyle(d+"-text-offset").pfValue;switch(n.edgeType){case"self":case"compound":case"bezier":case"multibezier":{for(var y=u(),v,x=0,b=0,w=0;w<y.length;w++){for(var C=y[m?w:y.length-1-w],T=0;T<C.segments.length;T++){var E=C.segments[m?T:C.segments.length-1-T],A=w===y.length-1&&T===C.segments.length-1;if(x=b,b+=E.length,b>=g||A){v={cp:C,segment:E};break}}if(v)break}var S=v.cp,_=v.segment,I=(g-x)/_.length,D=_.t1-_.t0,k=m?_.t0+D*I:_.t1-D*I;k=Yb(0,k,1),e=W1(S.p0,S.p1,S.p2,k),p=DQe(S.p0,S.p1,S.p2,k);break}case"straight":case"segments":case"haystack":{for(var L=0,R,O,M,B,F=n.allpts.length,P=0;P+3<F&&(m?(M={x:n.allpts[P],y:n.allpts[P+1]},B={x:n.allpts[P+2],y:n.allpts[P+3]}):(M={x:n.allpts[F-2-P],y:n.allpts[F-1-P]},B={x:n.allpts[F-4-P],y:n.allpts[F-3-P]}),R=Gp(M,B),O=L,L+=R,!(L>=g));P+=2);var z=g-O,$=z/R;$=Yb(0,$,1),e=Iqe(M,B,$),p=pge(M,B);break}}s("labelX",d,e.x),s("labelY",d,e.y),s("labelAutoAngle",d,p)}},"calculateEndProjection");h("source"),h("target"),this.applyLabelDimensions(t)}};Kc.applyLabelDimensions=function(t){this.applyPrefixedLabelDimensions(t),t.isEdge()&&(this.applyPrefixedLabelDimensions(t,"source"),this.applyPrefixedLabelDimensions(t,"target"))};Kc.applyPrefixedLabelDimensions=function(t,e){var r=t._private,n=this.getLabelText(t,e),i=this.calculateLabelDimensions(t,n),a=t.pstyle("line-height").pfValue,s=t.pstyle("text-wrap").strValue,l=Gl(r.rscratch,"labelWrapCachedLines",e)||[],u=s!=="wrap"?1:Math.max(l.length,1),h=i.height/u,f=h*a,d=i.width,p=i.height+(u-1)*(a-1)*h;kf(r.rstyle,"labelWidth",e,d),kf(r.rscratch,"labelWidth",e,d),kf(r.rstyle,"labelHeight",e,p),kf(r.rscratch,"labelHeight",e,p),kf(r.rscratch,"labelLineHeight",e,f)};Kc.getLabelText=function(t,e){var r=t._private,n=e?e+"-":"",i=t.pstyle(n+"label").strValue,a=t.pstyle("text-transform").value,s=o(function(Q,j){return j?(kf(r.rscratch,Q,e,j),j):Gl(r.rscratch,Q,e)},"rscratch");if(!i)return"";a=="none"||(a=="uppercase"?i=i.toUpperCase():a=="lowercase"&&(i=i.toLowerCase()));var l=t.pstyle("text-wrap").value;if(l==="wrap"){var u=s("labelKey");if(u!=null&&s("labelWrapKey")===u)return s("labelWrapCachedText");for(var h="\u200B",f=i.split(`
1952 +`),d=t.pstyle("text-max-width").pfValue,p=t.pstyle("text-overflow-wrap").value,m=p==="anywhere",g=[],y=/[\s\u200b]+|$/g,v=0;v<f.length;v++){var x=f[v],b=this.calculateLabelDimensions(t,x),w=b.width;if(m){var C=x.split("").join(h);x=C}if(w>d){var T=x.matchAll(y),E="",A=0,S=mo(T),_;try{for(S.s();!(_=S.n()).done;){var I=_.value,D=I[0],k=x.substring(A,I.index);A=I.index+D.length;var L=E.length===0?k:E+k+D,R=this.calculateLabelDimensions(t,L),O=R.width;O<=d?E+=k+D:(E&&g.push(E),E=k+D)}}catch(H){S.e(H)}finally{S.f()}E.match(/^[\s\u200b]+$/)||g.push(E)}else g.push(x)}s("labelWrapCachedLines",g),i=s("labelWrapCachedText",g.join(`
1953 +`)),s("labelWrapKey",u)}else if(l==="ellipsis"){var M=t.pstyle("text-max-width").pfValue,B="",F="\u2026",P=!1;if(this.calculateLabelDimensions(t,i).width<M)return i;for(var z=0;z<i.length;z++){var $=this.calculateLabelDimensions(t,B+i[z]+F).width;if($>M)break;B+=i[z],z===i.length-1&&(P=!0)}return P||(B+=F),B}return i};Kc.getLabelJustification=function(t){var e=t.pstyle("text-justification").strValue,r=t.pstyle("text-halign").strValue;if(e==="auto")if(t.isNode())switch(r){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return e};Kc.calculateLabelDimensions=function(t,e){var r=this,n=r.cy.window(),i=n.document,a=_f(e,t._private.labelDimsKey),s=r.labelDimCache||(r.labelDimCache=[]),l=s[a];if(l!=null)return l;var u=0,h=t.pstyle("font-style").strValue,f=t.pstyle("font-size").pfValue,d=t.pstyle("font-family").strValue,p=t.pstyle("font-weight").strValue,m=this.labelCalcCanvas,g=this.labelCalcCanvasContext;if(!m){m=this.labelCalcCanvas=i.createElement("canvas"),g=this.labelCalcCanvasContext=m.getContext("2d");var y=m.style;y.position="absolute",y.left="-9999px",y.top="-9999px",y.zIndex="-1",y.visibility="hidden",y.pointerEvents="none"}g.font="".concat(h," ").concat(p," ").concat(f,"px ").concat(d);for(var v=0,x=0,b=e.split(`
1954 +`),w=0;w<b.length;w++){var C=b[w],T=g.measureText(C),E=Math.ceil(T.width),A=f;v=Math.max(E,v),x+=A}return v+=u,x+=u,s[a]={width:v,height:x}};Kc.calculateLabelAngle=function(t,e){var r=t._private,n=r.rscratch,i=t.isEdge(),a=e?e+"-":"",s=t.pstyle(a+"text-rotation"),l=s.strValue;return l==="none"?0:i&&l==="autorotate"?n.labelAutoAngle:l==="autorotate"?0:s.pfValue};Kc.calculateLabelAngles=function(t){var e=this,r=t.isEdge(),n=t._private,i=n.rscratch;i.labelAngle=e.calculateLabelAngle(t),r&&(i.sourceLabelAngle=e.calculateLabelAngle(t,"source"),i.targetLabelAngle=e.calculateLabelAngle(t,"target"))};mge={},R0e=28,N0e=!1;mge.getNodeShape=function(t){var e=this,r=t.pstyle("shape").value;if(r==="cutrectangle"&&(t.width()<R0e||t.height()<R0e))return N0e||(un("The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead"),N0e=!0),"rectangle";if(t.isParent())return r==="rectangle"||r==="roundrectangle"||r==="round-rectangle"||r==="cutrectangle"||r==="cut-rectangle"||r==="barrel"?r:"rectangle";if(r==="polygon"){var n=t.pstyle("shape-polygon-points").value;return e.nodeShapes.makePolygon(n).name}return r};WS={};WS.registerCalculationListeners=function(){var t=this.cy,e=t.collection(),r=this,n=o(function(s){var l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(e.merge(s),l)for(var u=0;u<s.length;u++){var h=s[u],f=h._private,d=f.rstyle;d.clean=!1,d.cleanConnected=!1}},"enqueue");r.binder(t).on("bounds.* dirty.*",o(function(s){var l=s.target;n(l)},"onDirtyBounds")).on("style.* background.*",o(function(s){var l=s.target;n(l,!1)},"onDirtyStyle"));var i=o(function(s){if(s){var l=r.onUpdateEleCalcsFns;e.cleanStyle();for(var u=0;u<e.length;u++){var h=e[u],f=h._private.rstyle;h.isNode()&&!f.cleanConnected&&(n(h.connectedEdges()),f.cleanConnected=!0)}if(l)for(var d=0;d<l.length;d++){var p=l[d];p(s,e)}r.recalculateRenderedStyle(e),e=t.collection()}},"updateEleCalcs");r.flushRenderedStyleQueue=function(){i(!0)},r.beforeRender(i,r.beforeRenderPriorities.eleCalcs)};WS.onUpdateEleCalcs=function(t){var e=this.onUpdateEleCalcsFns=this.onUpdateEleCalcsFns||[];e.push(t)};WS.recalculateRenderedStyle=function(t,e){var r=o(function(C){return C._private.rstyle.cleanConnected},"isCleanConnected"),n=[],i=[];if(!this.destroyed){e===void 0&&(e=!0);for(var a=0;a<t.length;a++){var s=t[a],l=s._private,u=l.rstyle;s.isEdge()&&(!r(s.source())||!r(s.target()))&&(u.clean=!1),!(e&&u.clean||s.removed())&&s.pstyle("display").value!=="none"&&(l.group==="nodes"?i.push(s):n.push(s),u.clean=!0)}for(var h=0;h<i.length;h++){var f=i[h],d=f._private,p=d.rstyle,m=f.position();this.recalculateNodeLabelProjection(f),p.nodeX=m.x,p.nodeY=m.y,p.nodeW=f.pstyle("width").pfValue,p.nodeH=f.pstyle("height").pfValue}this.recalculateEdgeProjections(n);for(var g=0;g<n.length;g++){var y=n[g],v=y._private,x=v.rstyle,b=v.rscratch;x.srcX=b.arrowStartX,x.srcY=b.arrowStartY,x.tgtX=b.arrowEndX,x.tgtY=b.arrowEndY,x.midX=b.midX,x.midY=b.midY,x.labelAngle=b.labelAngle,x.sourceLabelAngle=b.sourceLabelAngle,x.targetLabelAngle=b.targetLabelAngle}}};qS={};qS.updateCachedGrabbedEles=function(){var t=this.cachedZSortedEles;if(t){t.drag=[],t.nondrag=[];for(var e=[],r=0;r<t.length;r++){var n=t[r],i=n._private.rscratch;n.grabbed()&&!n.isParent()?e.push(n):i.inDragLayer?t.drag.push(n):t.nondrag.push(n)}for(var r=0;r<e.length;r++){var n=e[r];t.drag.push(n)}}};qS.invalidateCachedZSortedEles=function(){this.cachedZSortedEles=null};qS.getCachedZSortedEles=function(t){if(t||!this.cachedZSortedEles){var e=this.cy.mutableElements().toArray();e.sort(Zme),e.interactive=e.filter(function(r){return r.interactive()}),this.cachedZSortedEles=e,this.updateCachedGrabbedEles()}else e=this.cachedZSortedEles;return e};gge={};[qp,AS,Va,o4,xB,Kc,mge,WS,qS].forEach(function(t){rr(gge,t)});yge={};yge.getCachedImage=function(t,e,r){var n=this,i=n.imageCache=n.imageCache||{},a=i[t];if(a)return a.image.complete||a.image.addEventListener("load",r),a.image;a=i[t]=i[t]||{};var s=a.image=new Image;s.addEventListener("load",r),s.addEventListener("error",function(){s.error=!0});var l="data:",u=t.substring(0,l.length).toLowerCase()===l;return u||(e=e==="null"?null:e,s.crossOrigin=e),s.src=t,s};sy={};sy.registerBinding=function(t,e,r,n){var i=Array.prototype.slice.apply(arguments,[1]);if(Array.isArray(t)){for(var a=[],s=0;s<t.length;s++){var l=t[s];if(l!==void 0){var u=this.binder(l);a.push(u.on.apply(u,i))}}return a}var u=this.binder(t);return u.on.apply(u,i)};sy.binder=function(t){var e=this,r=e.cy.window(),n=t===r||t===r.document||t===r.document.body||tWe(t);if(e.supportsPassiveEvents==null){var i=!1;try{var a=Object.defineProperty({},"passive",{get:o(function(){return i=!0,!0},"get")});r.addEventListener("test",null,a)}catch{}e.supportsPassiveEvents=i}var s=o(function(u,h,f){var d=Array.prototype.slice.call(arguments);return n&&e.supportsPassiveEvents&&(d[2]={capture:f??!1,passive:!1,once:!1}),e.bindings.push({target:t,args:d}),(t.addEventListener||t.on).apply(t,d),this},"on");return{on:s,addEventListener:s,addListener:s,bind:s}};sy.nodeIsDraggable=function(t){return t&&t.isNode()&&!t.locked()&&t.grabbable()};sy.nodeIsGrabbable=function(t){return this.nodeIsDraggable(t)&&t.interactive()};sy.load=function(){var t=this,e=t.cy.window(),r=o(function(W){return W.selected()},"isSelected"),n=o(function(W){var de=W.getRootNode();if(de&&de.nodeType===11&&de.host!==void 0)return de},"getShadowRoot"),i=o(function(W,de,re,oe){W==null&&(W=t.cy);for(var V=0;V<de.length;V++){var xe=de[V];W.emit({originalEvent:re,type:xe,position:oe})}},"triggerEvents"),a=o(function(W){return W.shiftKey||W.metaKey||W.ctrlKey},"isMultSelKeyDown"),s=o(function(W,de){var re=!0;if(t.cy.hasCompoundNodes()&&W&&W.pannable())for(var oe=0;de&&oe<de.length;oe++){var W=de[oe];if(W.isNode()&&W.isParent()&&!W.pannable()){re=!1;break}}else re=!0;return re},"allowPanningPassthrough"),l=o(function(W){W[0]._private.grabbed=!0},"setGrabbed"),u=o(function(W){W[0]._private.grabbed=!1},"setFreed"),h=o(function(W){W[0]._private.rscratch.inDragLayer=!0},"setInDragLayer"),f=o(function(W){W[0]._private.rscratch.inDragLayer=!1},"setOutDragLayer"),d=o(function(W){W[0]._private.rscratch.isGrabTarget=!0},"setGrabTarget"),p=o(function(W){W[0]._private.rscratch.isGrabTarget=!1},"removeGrabTarget"),m=o(function(W,de){var re=de.addToList,oe=re.has(W);!oe&&W.grabbable()&&!W.locked()&&(re.merge(W),l(W))},"addToDragList"),g=o(function(W,de){if(W.cy().hasCompoundNodes()&&!(de.inDragLayer==null&&de.addToList==null)){var re=W.descendants();de.inDragLayer&&(re.forEach(h),re.connectedEdges().forEach(h)),de.addToList&&m(re,de)}},"addDescendantsToDrag"),y=o(function(W,de){de=de||{};var re=W.cy().hasCompoundNodes();de.inDragLayer&&(W.forEach(h),W.neighborhood().stdFilter(function(oe){return!re||oe.isEdge()}).forEach(h)),de.addToList&&W.forEach(function(oe){m(oe,de)}),g(W,de),b(W,{inDragLayer:de.inDragLayer}),t.updateCachedGrabbedEles()},"addNodesToDrag"),v=y,x=o(function(W){W&&(t.getCachedZSortedEles().forEach(function(de){u(de),f(de),p(de)}),t.updateCachedGrabbedEles())},"freeDraggedElements"),b=o(function(W,de){if(!(de.inDragLayer==null&&de.addToList==null)&&W.cy().hasCompoundNodes()){var re=W.ancestors().orphans();if(!re.same(W)){var oe=re.descendants().spawnSelf().merge(re).unmerge(W).unmerge(W.descendants()),V=oe.connectedEdges();de.inDragLayer&&(V.forEach(h),oe.forEach(h)),de.addToList&&oe.forEach(function(xe){m(xe,de)})}}},"updateAncestorsInDragLayer"),w=o(function(){document.activeElement!=null&&document.activeElement.blur!=null&&document.activeElement.blur()},"blurActiveDomElement"),C=typeof MutationObserver<"u",T=typeof ResizeObserver<"u";C?(t.removeObserver=new MutationObserver(function(be){for(var W=0;W<be.length;W++){var de=be[W],re=de.removedNodes;if(re)for(var oe=0;oe<re.length;oe++){var V=re[oe];if(V===t.container){t.destroy();break}}}}),t.container.parentNode&&t.removeObserver.observe(t.container.parentNode,{childList:!0})):t.registerBinding(t.container,"DOMNodeRemoved",function(be){t.destroy()});var E=n4(function(){t.cy.resize()},100);C&&(t.styleObserver=new MutationObserver(E),t.styleObserver.observe(t.container,{attributes:!0})),t.registerBinding(e,"resize",E),T&&(t.resizeObserver=new ResizeObserver(E),t.resizeObserver.observe(t.container));var A=o(function(W,de){for(;W!=null;)de(W),W=W.parentNode},"forEachUp"),S=o(function(){t.invalidateContainerClientCoordsCache()},"invalidateCoords");A(t.container,function(be){t.registerBinding(be,"transitionend",S),t.registerBinding(be,"animationend",S),t.registerBinding(be,"scroll",S)}),t.registerBinding(t.container,"contextmenu",function(be){be.preventDefault()});var _=o(function(){return t.selection[4]!==0},"inBoxSelection"),I=o(function(W){for(var de=t.findContainerClientCoords(),re=de[0],oe=de[1],V=de[2],xe=de[3],q=W.touches?W.touches:[W],pe=!1,ve=0;ve<q.length;ve++){var Pe=q[ve];if(re<=Pe.clientX&&Pe.clientX<=re+V&&oe<=Pe.clientY&&Pe.clientY<=oe+xe){pe=!0;break}}if(!pe)return!1;for(var _e=t.container,we=W.target,Ve=we.parentNode,De=!1;Ve;){if(Ve===_e){De=!0;break}Ve=Ve.parentNode}return!!De},"eventInContainer");t.registerBinding(t.container,"mousedown",o(function(W){if(I(W)&&!(t.hoverData.which===1&&W.which!==1)){W.preventDefault(),w(),t.hoverData.capture=!0,t.hoverData.which=W.which;var de=t.cy,re=[W.clientX,W.clientY],oe=t.projectIntoViewport(re[0],re[1]),V=t.selection,xe=t.findNearestElements(oe[0],oe[1],!0,!1),q=xe[0],pe=t.dragData.possibleDragElements;t.hoverData.mdownPos=oe,t.hoverData.mdownGPos=re;var ve=o(function(){t.hoverData.tapholdCancelled=!1,clearTimeout(t.hoverData.tapholdTimeout),t.hoverData.tapholdTimeout=setTimeout(function(){if(!t.hoverData.tapholdCancelled){var qe=t.hoverData.down;qe?qe.emit({originalEvent:W,type:"taphold",position:{x:oe[0],y:oe[1]}}):de.emit({originalEvent:W,type:"taphold",position:{x:oe[0],y:oe[1]}})}},t.tapholdDuration)},"checkForTaphold");if(W.which==3){t.hoverData.cxtStarted=!0;var Pe={originalEvent:W,type:"cxttapstart",position:{x:oe[0],y:oe[1]}};q?(q.activate(),q.emit(Pe),t.hoverData.down=q):de.emit(Pe),t.hoverData.downTime=new Date().getTime(),t.hoverData.cxtDragged=!1}else if(W.which==1){q&&q.activate();{if(q!=null&&t.nodeIsGrabbable(q)){var _e=o(function(qe){return{originalEvent:W,type:qe,position:{x:oe[0],y:oe[1]}}},"makeEvent"),we=o(function(qe){qe.emit(_e("grab"))},"triggerGrab");if(d(q),!q.selected())pe=t.dragData.possibleDragElements=de.collection(),v(q,{addToList:pe}),q.emit(_e("grabon")).emit(_e("grab"));else{pe=t.dragData.possibleDragElements=de.collection();var Ve=de.$(function(De){return De.isNode()&&De.selected()&&t.nodeIsGrabbable(De)});y(Ve,{addToList:pe}),q.emit(_e("grabon")),Ve.forEach(we)}t.redrawHint("eles",!0),t.redrawHint("drag",!0)}t.hoverData.down=q,t.hoverData.downs=xe,t.hoverData.downTime=new Date().getTime()}i(q,["mousedown","tapstart","vmousedown"],W,{x:oe[0],y:oe[1]}),q==null?(V[4]=1,t.data.bgActivePosistion={x:oe[0],y:oe[1]},t.redrawHint("select",!0),t.redraw()):q.pannable()&&(V[4]=1),ve()}V[0]=V[2]=oe[0],V[1]=V[3]=oe[1]}},"mousedownHandler"),!1);var D=n(t.container);t.registerBinding([e,D],"mousemove",o(function(W){var de=t.hoverData.capture;if(!(!de&&!I(W))){var re=!1,oe=t.cy,V=oe.zoom(),xe=[W.clientX,W.clientY],q=t.projectIntoViewport(xe[0],xe[1]),pe=t.hoverData.mdownPos,ve=t.hoverData.mdownGPos,Pe=t.selection,_e=null;!t.hoverData.draggingEles&&!t.hoverData.dragging&&!t.hoverData.selecting&&(_e=t.findNearestElement(q[0],q[1],!0,!1));var we=t.hoverData.last,Ve=t.hoverData.down,De=[q[0]-Pe[2],q[1]-Pe[3]],qe=t.dragData.possibleDragElements,at;if(ve){var Rt=xe[0]-ve[0],st=Rt*Rt,Ue=xe[1]-ve[1],ct=Ue*Ue,We=st+ct;t.hoverData.isOverThresholdDrag=at=We>=t.desktopTapThreshold2}var ot=a(W);at&&(t.hoverData.tapholdCancelled=!0);var Yt=o(function(){var Tt=t.hoverData.dragDelta=t.hoverData.dragDelta||[];Tt.length===0?(Tt.push(De[0]),Tt.push(De[1])):(Tt[0]+=De[0],Tt[1]+=De[1])},"updateDragDelta");re=!0,i(_e,["mousemove","vmousemove","tapdrag"],W,{x:q[0],y:q[1]});var bt=o(function(){t.data.bgActivePosistion=void 0,t.hoverData.selecting||oe.emit({originalEvent:W,type:"boxstart",position:{x:q[0],y:q[1]}}),Pe[4]=1,t.hoverData.selecting=!0,t.redrawHint("select",!0),t.redraw()},"goIntoBoxMode");if(t.hoverData.which===3){if(at){var Mt={originalEvent:W,type:"cxtdrag",position:{x:q[0],y:q[1]}};Ve?Ve.emit(Mt):oe.emit(Mt),t.hoverData.cxtDragged=!0,(!t.hoverData.cxtOver||_e!==t.hoverData.cxtOver)&&(t.hoverData.cxtOver&&t.hoverData.cxtOver.emit({originalEvent:W,type:"cxtdragout",position:{x:q[0],y:q[1]}}),t.hoverData.cxtOver=_e,_e&&_e.emit({originalEvent:W,type:"cxtdragover",position:{x:q[0],y:q[1]}}))}}else if(t.hoverData.dragging){if(re=!0,oe.panningEnabled()&&oe.userPanningEnabled()){var xt;if(t.hoverData.justStartedPan){var ut=t.hoverData.mdownPos;xt={x:(q[0]-ut[0])*V,y:(q[1]-ut[1])*V},t.hoverData.justStartedPan=!1}else xt={x:De[0]*V,y:De[1]*V};oe.panBy(xt),oe.emit("dragpan"),t.hoverData.dragged=!0}q=t.projectIntoViewport(W.clientX,W.clientY)}else if(Pe[4]==1&&(Ve==null||Ve.pannable())){if(at){if(!t.hoverData.dragging&&oe.boxSelectionEnabled()&&(ot||!oe.panningEnabled()||!oe.userPanningEnabled()))bt();else if(!t.hoverData.selecting&&oe.panningEnabled()&&oe.userPanningEnabled()){var Et=s(Ve,t.hoverData.downs);Et&&(t.hoverData.dragging=!0,t.hoverData.justStartedPan=!0,Pe[4]=0,t.data.bgActivePosistion=U1(pe),t.redrawHint("select",!0),t.redraw())}Ve&&Ve.pannable()&&Ve.active()&&Ve.unactivate()}}else{if(Ve&&Ve.pannable()&&Ve.active()&&Ve.unactivate(),(!Ve||!Ve.grabbed())&&_e!=we&&(we&&i(we,["mouseout","tapdragout"],W,{x:q[0],y:q[1]}),_e&&i(_e,["mouseover","tapdragover"],W,{x:q[0],y:q[1]}),t.hoverData.last=_e),Ve)if(at){if(oe.boxSelectionEnabled()&&ot)Ve&&Ve.grabbed()&&(x(qe),Ve.emit("freeon"),qe.emit("free"),t.dragData.didDrag&&(Ve.emit("dragfreeon"),qe.emit("dragfree"))),bt();else if(Ve&&Ve.grabbed()&&t.nodeIsDraggable(Ve)){var ft=!t.dragData.didDrag;ft&&t.redrawHint("eles",!0),t.dragData.didDrag=!0,t.hoverData.draggingEles||y(qe,{inDragLayer:!0});var yt={x:0,y:0};if(Ct(De[0])&&Ct(De[1])&&(yt.x+=De[0],yt.y+=De[1],ft)){var nt=t.hoverData.dragDelta;nt&&Ct(nt[0])&&Ct(nt[1])&&(yt.x+=nt[0],yt.y+=nt[1])}t.hoverData.draggingEles=!0,qe.silentShift(yt).emit("position drag"),t.redrawHint("drag",!0),t.redraw()}}else Yt();re=!0}if(Pe[2]=q[0],Pe[3]=q[1],re)return W.stopPropagation&&W.stopPropagation(),W.preventDefault&&W.preventDefault(),!1}},"mousemoveHandler"),!1);var k,L,R;t.registerBinding(e,"mouseup",o(function(W){if(!(t.hoverData.which===1&&W.which!==1&&t.hoverData.capture)){var de=t.hoverData.capture;if(de){t.hoverData.capture=!1;var re=t.cy,oe=t.projectIntoViewport(W.clientX,W.clientY),V=t.selection,xe=t.findNearestElement(oe[0],oe[1],!0,!1),q=t.dragData.possibleDragElements,pe=t.hoverData.down,ve=a(W);if(t.data.bgActivePosistion&&(t.redrawHint("select",!0),t.redraw()),t.hoverData.tapholdCancelled=!0,t.data.bgActivePosistion=void 0,pe&&pe.unactivate(),t.hoverData.which===3){var Pe={originalEvent:W,type:"cxttapend",position:{x:oe[0],y:oe[1]}};if(pe?pe.emit(Pe):re.emit(Pe),!t.hoverData.cxtDragged){var _e={originalEvent:W,type:"cxttap",position:{x:oe[0],y:oe[1]}};pe?pe.emit(_e):re.emit(_e)}t.hoverData.cxtDragged=!1,t.hoverData.which=null}else if(t.hoverData.which===1){if(i(xe,["mouseup","tapend","vmouseup"],W,{x:oe[0],y:oe[1]}),!t.dragData.didDrag&&!t.hoverData.dragged&&!t.hoverData.selecting&&!t.hoverData.isOverThresholdDrag&&(i(pe,["click","tap","vclick"],W,{x:oe[0],y:oe[1]}),L=!1,W.timeStamp-R<=re.multiClickDebounceTime()?(k&&clearTimeout(k),L=!0,R=null,i(pe,["dblclick","dbltap","vdblclick"],W,{x:oe[0],y:oe[1]})):(k=setTimeout(function(){L||i(pe,["oneclick","onetap","voneclick"],W,{x:oe[0],y:oe[1]})},re.multiClickDebounceTime()),R=W.timeStamp)),pe==null&&!t.dragData.didDrag&&!t.hoverData.selecting&&!t.hoverData.dragged&&!a(W)&&(re.$(r).unselect(["tapunselect"]),q.length>0&&t.redrawHint("eles",!0),t.dragData.possibleDragElements=q=re.collection()),xe==pe&&!t.dragData.didDrag&&!t.hoverData.selecting&&xe!=null&&xe._private.selectable&&(t.hoverData.dragging||(re.selectionType()==="additive"||ve?xe.selected()?xe.unselect(["tapunselect"]):xe.select(["tapselect"]):ve||(re.$(r).unmerge(xe).unselect(["tapunselect"]),xe.select(["tapselect"]))),t.redrawHint("eles",!0)),t.hoverData.selecting){var we=re.collection(t.getAllInBox(V[0],V[1],V[2],V[3]));t.redrawHint("select",!0),we.length>0&&t.redrawHint("eles",!0),re.emit({type:"boxend",originalEvent:W,position:{x:oe[0],y:oe[1]}});var Ve=o(function(at){return at.selectable()&&!at.selected()},"eleWouldBeSelected");re.selectionType()==="additive"||ve||re.$(r).unmerge(we).unselect(),we.emit("box").stdFilter(Ve).select().emit("boxselect"),t.redraw()}if(t.hoverData.dragging&&(t.hoverData.dragging=!1,t.redrawHint("select",!0),t.redrawHint("eles",!0),t.redraw()),!V[4]){t.redrawHint("drag",!0),t.redrawHint("eles",!0);var De=pe&&pe.grabbed();x(q),De&&(pe.emit("freeon"),q.emit("free"),t.dragData.didDrag&&(pe.emit("dragfreeon"),q.emit("dragfree")))}}V[4]=0,t.hoverData.down=null,t.hoverData.cxtStarted=!1,t.hoverData.draggingEles=!1,t.hoverData.selecting=!1,t.hoverData.isOverThresholdDrag=!1,t.dragData.didDrag=!1,t.hoverData.dragged=!1,t.hoverData.dragDelta=[],t.hoverData.mdownPos=null,t.hoverData.mdownGPos=null,t.hoverData.which=null}}},"mouseupHandler"),!1);var O=o(function(W){if(!t.scrollingPage){var de=t.cy,re=de.zoom(),oe=de.pan(),V=t.projectIntoViewport(W.clientX,W.clientY),xe=[V[0]*re+oe.x,V[1]*re+oe.y];if(t.hoverData.draggingEles||t.hoverData.dragging||t.hoverData.cxtStarted||_()){W.preventDefault();return}if(de.panningEnabled()&&de.userPanningEnabled()&&de.zoomingEnabled()&&de.userZoomingEnabled()){W.preventDefault(),t.data.wheelZooming=!0,clearTimeout(t.data.wheelTimeout),t.data.wheelTimeout=setTimeout(function(){t.data.wheelZooming=!1,t.redrawHint("eles",!0),t.redraw()},150);var q;W.deltaY!=null?q=W.deltaY/-250:W.wheelDeltaY!=null?q=W.wheelDeltaY/1e3:q=W.wheelDelta/1e3,q=q*t.wheelSensitivity;var pe=W.deltaMode===1;pe&&(q*=33);var ve=de.zoom()*Math.pow(10,q);W.type==="gesturechange"&&(ve=t.gestureStartZoom*W.scale),de.zoom({level:ve,renderedPosition:{x:xe[0],y:xe[1]}}),de.emit(W.type==="gesturechange"?"pinchzoom":"scrollzoom")}}},"wheelHandler");t.registerBinding(t.container,"wheel",O,!0),t.registerBinding(e,"scroll",o(function(W){t.scrollingPage=!0,clearTimeout(t.scrollingPageTimeout),t.scrollingPageTimeout=setTimeout(function(){t.scrollingPage=!1},250)},"scrollHandler"),!0),t.registerBinding(t.container,"gesturestart",o(function(W){t.gestureStartZoom=t.cy.zoom(),t.hasTouchStarted||W.preventDefault()},"gestureStartHandler"),!0),t.registerBinding(t.container,"gesturechange",function(be){t.hasTouchStarted||O(be)},!0),t.registerBinding(t.container,"mouseout",o(function(W){var de=t.projectIntoViewport(W.clientX,W.clientY);t.cy.emit({originalEvent:W,type:"mouseout",position:{x:de[0],y:de[1]}})},"mouseOutHandler"),!1),t.registerBinding(t.container,"mouseover",o(function(W){var de=t.projectIntoViewport(W.clientX,W.clientY);t.cy.emit({originalEvent:W,type:"mouseover",position:{x:de[0],y:de[1]}})},"mouseOverHandler"),!1);var M,B,F,P,z,$,H,Q,j,ie,ne,le,he,K=o(function(W,de,re,oe){return Math.sqrt((re-W)*(re-W)+(oe-de)*(oe-de))},"distance"),X=o(function(W,de,re,oe){return(re-W)*(re-W)+(oe-de)*(oe-de)},"distanceSq"),te;t.registerBinding(t.container,"touchstart",te=o(function(W){if(t.hasTouchStarted=!0,!!I(W)){w(),t.touchData.capture=!0,t.data.bgActivePosistion=void 0;var de=t.cy,re=t.touchData.now,oe=t.touchData.earlier;if(W.touches[0]){var V=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);re[0]=V[0],re[1]=V[1]}if(W.touches[1]){var V=t.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);re[2]=V[0],re[3]=V[1]}if(W.touches[2]){var V=t.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);re[4]=V[0],re[5]=V[1]}if(W.touches[1]){t.touchData.singleTouchMoved=!0,x(t.dragData.touchDragEles);var xe=t.findContainerClientCoords();j=xe[0],ie=xe[1],ne=xe[2],le=xe[3],M=W.touches[0].clientX-j,B=W.touches[0].clientY-ie,F=W.touches[1].clientX-j,P=W.touches[1].clientY-ie,he=0<=M&&M<=ne&&0<=F&&F<=ne&&0<=B&&B<=le&&0<=P&&P<=le;var q=de.pan(),pe=de.zoom();z=K(M,B,F,P),$=X(M,B,F,P),H=[(M+F)/2,(B+P)/2],Q=[(H[0]-q.x)/pe,(H[1]-q.y)/pe];var ve=200,Pe=ve*ve;if($<Pe&&!W.touches[2]){var _e=t.findNearestElement(re[0],re[1],!0,!0),we=t.findNearestElement(re[2],re[3],!0,!0);_e&&_e.isNode()?(_e.activate().emit({originalEvent:W,type:"cxttapstart",position:{x:re[0],y:re[1]}}),t.touchData.start=_e):we&&we.isNode()?(we.activate().emit({originalEvent:W,type:"cxttapstart",position:{x:re[0],y:re[1]}}),t.touchData.start=we):de.emit({originalEvent:W,type:"cxttapstart",position:{x:re[0],y:re[1]}}),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!0,t.touchData.cxtDragged=!1,t.data.bgActivePosistion=void 0,t.redraw();return}}if(W.touches[2])de.boxSelectionEnabled()&&W.preventDefault();else if(!W.touches[1]){if(W.touches[0]){var Ve=t.findNearestElements(re[0],re[1],!0,!0),De=Ve[0];if(De!=null&&(De.activate(),t.touchData.start=De,t.touchData.starts=Ve,t.nodeIsGrabbable(De))){var qe=t.dragData.touchDragEles=de.collection(),at=null;t.redrawHint("eles",!0),t.redrawHint("drag",!0),De.selected()?(at=de.$(function(We){return We.selected()&&t.nodeIsGrabbable(We)}),y(at,{addToList:qe})):v(De,{addToList:qe}),d(De);var Rt=o(function(ot){return{originalEvent:W,type:ot,position:{x:re[0],y:re[1]}}},"makeEvent");De.emit(Rt("grabon")),at?at.forEach(function(We){We.emit(Rt("grab"))}):De.emit(Rt("grab"))}i(De,["touchstart","tapstart","vmousedown"],W,{x:re[0],y:re[1]}),De==null&&(t.data.bgActivePosistion={x:V[0],y:V[1]},t.redrawHint("select",!0),t.redraw()),t.touchData.singleTouchMoved=!1,t.touchData.singleTouchStartTime=+new Date,clearTimeout(t.touchData.tapholdTimeout),t.touchData.tapholdTimeout=setTimeout(function(){t.touchData.singleTouchMoved===!1&&!t.pinching&&!t.touchData.selecting&&i(t.touchData.start,["taphold"],W,{x:re[0],y:re[1]})},t.tapholdDuration)}}if(W.touches.length>=1){for(var st=t.touchData.startPosition=[null,null,null,null,null,null],Ue=0;Ue<re.length;Ue++)st[Ue]=oe[Ue]=re[Ue];var ct=W.touches[0];t.touchData.startGPosition=[ct.clientX,ct.clientY]}}},"touchstartHandler"),!1);var J;t.registerBinding(e,"touchmove",J=o(function(W){var de=t.touchData.capture;if(!(!de&&!I(W))){var re=t.selection,oe=t.cy,V=t.touchData.now,xe=t.touchData.earlier,q=oe.zoom();if(W.touches[0]){var pe=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);V[0]=pe[0],V[1]=pe[1]}if(W.touches[1]){var pe=t.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);V[2]=pe[0],V[3]=pe[1]}if(W.touches[2]){var pe=t.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);V[4]=pe[0],V[5]=pe[1]}var ve=t.touchData.startGPosition,Pe;if(de&&W.touches[0]&&ve){for(var _e=[],we=0;we<V.length;we++)_e[we]=V[we]-xe[we];var Ve=W.touches[0].clientX-ve[0],De=Ve*Ve,qe=W.touches[0].clientY-ve[1],at=qe*qe,Rt=De+at;Pe=Rt>=t.touchTapThreshold2}if(de&&t.touchData.cxt){W.preventDefault();var st=W.touches[0].clientX-j,Ue=W.touches[0].clientY-ie,ct=W.touches[1].clientX-j,We=W.touches[1].clientY-ie,ot=X(st,Ue,ct,We),Yt=ot/$,bt=150,Mt=bt*bt,xt=1.5,ut=xt*xt;if(Yt>=ut||ot>=Mt){t.touchData.cxt=!1,t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var Et={originalEvent:W,type:"cxttapend",position:{x:V[0],y:V[1]}};t.touchData.start?(t.touchData.start.unactivate().emit(Et),t.touchData.start=null):oe.emit(Et)}}if(de&&t.touchData.cxt){var Et={originalEvent:W,type:"cxtdrag",position:{x:V[0],y:V[1]}};t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.touchData.start?t.touchData.start.emit(Et):oe.emit(Et),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxtDragged=!0;var ft=t.findNearestElement(V[0],V[1],!0,!0);(!t.touchData.cxtOver||ft!==t.touchData.cxtOver)&&(t.touchData.cxtOver&&t.touchData.cxtOver.emit({originalEvent:W,type:"cxtdragout",position:{x:V[0],y:V[1]}}),t.touchData.cxtOver=ft,ft&&ft.emit({originalEvent:W,type:"cxtdragover",position:{x:V[0],y:V[1]}}))}else if(de&&W.touches[2]&&oe.boxSelectionEnabled())W.preventDefault(),t.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,t.touchData.selecting||oe.emit({originalEvent:W,type:"boxstart",position:{x:V[0],y:V[1]}}),t.touchData.selecting=!0,t.touchData.didSelect=!0,re[4]=1,!re||re.length===0||re[0]===void 0?(re[0]=(V[0]+V[2]+V[4])/3,re[1]=(V[1]+V[3]+V[5])/3,re[2]=(V[0]+V[2]+V[4])/3+1,re[3]=(V[1]+V[3]+V[5])/3+1):(re[2]=(V[0]+V[2]+V[4])/3,re[3]=(V[1]+V[3]+V[5])/3),t.redrawHint("select",!0),t.redraw();else if(de&&W.touches[1]&&!t.touchData.didSelect&&oe.zoomingEnabled()&&oe.panningEnabled()&&oe.userZoomingEnabled()&&oe.userPanningEnabled()){W.preventDefault(),t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var yt=t.dragData.touchDragEles;if(yt){t.redrawHint("drag",!0);for(var nt=0;nt<yt.length;nt++){var dn=yt[nt]._private;dn.grabbed=!1,dn.rscratch.inDragLayer=!1}}var Tt=t.touchData.start,st=W.touches[0].clientX-j,Ue=W.touches[0].clientY-ie,ct=W.touches[1].clientX-j,We=W.touches[1].clientY-ie,On=K(st,Ue,ct,We),tn=On/z;if(he){var _r=st-M,Dr=Ue-B,Pn=ct-F,At=We-P,Ce=(_r+Pn)/2,tt=(Dr+At)/2,St=oe.zoom(),mr=St*tn,rn=oe.pan(),gn=Q[0]*St+rn.x,Zr=Q[1]*St+rn.y,Ni={x:-mr/St*(gn-rn.x-Ce)+gn,y:-mr/St*(Zr-rn.y-tt)+Zr};if(Tt&&Tt.active()){var yt=t.dragData.touchDragEles;x(yt),t.redrawHint("drag",!0),t.redrawHint("eles",!0),Tt.unactivate().emit("freeon"),yt.emit("free"),t.dragData.didDrag&&(Tt.emit("dragfreeon"),yt.emit("dragfree"))}oe.viewport({zoom:mr,pan:Ni,cancelOnFailedZoom:!0}),oe.emit("pinchzoom"),z=On,M=st,B=Ue,F=ct,P=We,t.pinching=!0}if(W.touches[0]){var pe=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);V[0]=pe[0],V[1]=pe[1]}if(W.touches[1]){var pe=t.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);V[2]=pe[0],V[3]=pe[1]}if(W.touches[2]){var pe=t.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);V[4]=pe[0],V[5]=pe[1]}}else if(W.touches[0]&&!t.touchData.didSelect){var Zn=t.touchData.start,Sn=t.touchData.last,ft;if(!t.hoverData.draggingEles&&!t.swipePanning&&(ft=t.findNearestElement(V[0],V[1],!0,!0)),de&&Zn!=null&&W.preventDefault(),de&&Zn!=null&&t.nodeIsDraggable(Zn))if(Pe){var yt=t.dragData.touchDragEles,Hr=!t.dragData.didDrag;Hr&&y(yt,{inDragLayer:!0}),t.dragData.didDrag=!0;var et={x:0,y:0};if(Ct(_e[0])&&Ct(_e[1])&&(et.x+=_e[0],et.y+=_e[1],Hr)){t.redrawHint("eles",!0);var mt=t.touchData.dragDelta;mt&&Ct(mt[0])&&Ct(mt[1])&&(et.x+=mt[0],et.y+=mt[1])}t.hoverData.draggingEles=!0,yt.silentShift(et).emit("position drag"),t.redrawHint("drag",!0),t.touchData.startPosition[0]==xe[0]&&t.touchData.startPosition[1]==xe[1]&&t.redrawHint("eles",!0),t.redraw()}else{var mt=t.touchData.dragDelta=t.touchData.dragDelta||[];mt.length===0?(mt.push(_e[0]),mt.push(_e[1])):(mt[0]+=_e[0],mt[1]+=_e[1])}if(i(Zn||ft,["touchmove","tapdrag","vmousemove"],W,{x:V[0],y:V[1]}),(!Zn||!Zn.grabbed())&&ft!=Sn&&(Sn&&Sn.emit({originalEvent:W,type:"tapdragout",position:{x:V[0],y:V[1]}}),ft&&ft.emit({originalEvent:W,type:"tapdragover",position:{x:V[0],y:V[1]}})),t.touchData.last=ft,de)for(var nt=0;nt<V.length;nt++)V[nt]&&t.touchData.startPosition[nt]&&Pe&&(t.touchData.singleTouchMoved=!0);if(de&&(Zn==null||Zn.pannable())&&oe.panningEnabled()&&oe.userPanningEnabled()){var Kt=s(Zn,t.touchData.starts);Kt&&(W.preventDefault(),t.data.bgActivePosistion||(t.data.bgActivePosistion=U1(t.touchData.startPosition)),t.swipePanning?(oe.panBy({x:_e[0]*q,y:_e[1]*q}),oe.emit("dragpan")):Pe&&(t.swipePanning=!0,oe.panBy({x:Ve*q,y:qe*q}),oe.emit("dragpan"),Zn&&(Zn.unactivate(),t.redrawHint("select",!0),t.touchData.start=null)));var pe=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);V[0]=pe[0],V[1]=pe[1]}}for(var we=0;we<V.length;we++)xe[we]=V[we];de&&W.touches.length>0&&!t.hoverData.draggingEles&&!t.swipePanning&&t.data.bgActivePosistion!=null&&(t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.redraw())}},"touchmoveHandler"),!1);var se;t.registerBinding(e,"touchcancel",se=o(function(W){var de=t.touchData.start;t.touchData.capture=!1,de&&de.unactivate()},"touchcancelHandler"));var ue,Z,Se,ce;if(t.registerBinding(e,"touchend",ue=o(function(W){var de=t.touchData.start,re=t.touchData.capture;if(re)W.touches.length===0&&(t.touchData.capture=!1),W.preventDefault();else return;var oe=t.selection;t.swipePanning=!1,t.hoverData.draggingEles=!1;var V=t.cy,xe=V.zoom(),q=t.touchData.now,pe=t.touchData.earlier;if(W.touches[0]){var ve=t.projectIntoViewport(W.touches[0].clientX,W.touches[0].clientY);q[0]=ve[0],q[1]=ve[1]}if(W.touches[1]){var ve=t.projectIntoViewport(W.touches[1].clientX,W.touches[1].clientY);q[2]=ve[0],q[3]=ve[1]}if(W.touches[2]){var ve=t.projectIntoViewport(W.touches[2].clientX,W.touches[2].clientY);q[4]=ve[0],q[5]=ve[1]}de&&de.unactivate();var Pe;if(t.touchData.cxt){if(Pe={originalEvent:W,type:"cxttapend",position:{x:q[0],y:q[1]}},de?de.emit(Pe):V.emit(Pe),!t.touchData.cxtDragged){var _e={originalEvent:W,type:"cxttap",position:{x:q[0],y:q[1]}};de?de.emit(_e):V.emit(_e)}t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!1,t.touchData.start=null,t.redraw();return}if(!W.touches[2]&&V.boxSelectionEnabled()&&t.touchData.selecting){t.touchData.selecting=!1;var we=V.collection(t.getAllInBox(oe[0],oe[1],oe[2],oe[3]));oe[0]=void 0,oe[1]=void 0,oe[2]=void 0,oe[3]=void 0,oe[4]=0,t.redrawHint("select",!0),V.emit({type:"boxend",originalEvent:W,position:{x:q[0],y:q[1]}});var Ve=o(function(Mt){return Mt.selectable()&&!Mt.selected()},"eleWouldBeSelected");we.emit("box").stdFilter(Ve).select().emit("boxselect"),we.nonempty()&&t.redrawHint("eles",!0),t.redraw()}if(de?.unactivate(),W.touches[2])t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);else if(!W.touches[1]){if(!W.touches[0]){if(!W.touches[0]){t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var De=t.dragData.touchDragEles;if(de!=null){var qe=de._private.grabbed;x(De),t.redrawHint("drag",!0),t.redrawHint("eles",!0),qe&&(de.emit("freeon"),De.emit("free"),t.dragData.didDrag&&(de.emit("dragfreeon"),De.emit("dragfree"))),i(de,["touchend","tapend","vmouseup","tapdragout"],W,{x:q[0],y:q[1]}),de.unactivate(),t.touchData.start=null}else{var at=t.findNearestElement(q[0],q[1],!0,!0);i(at,["touchend","tapend","vmouseup","tapdragout"],W,{x:q[0],y:q[1]})}var Rt=t.touchData.startPosition[0]-q[0],st=Rt*Rt,Ue=t.touchData.startPosition[1]-q[1],ct=Ue*Ue,We=st+ct,ot=We*xe*xe;t.touchData.singleTouchMoved||(de||V.$(":selected").unselect(["tapunselect"]),i(de,["tap","vclick"],W,{x:q[0],y:q[1]}),Z=!1,W.timeStamp-ce<=V.multiClickDebounceTime()?(Se&&clearTimeout(Se),Z=!0,ce=null,i(de,["dbltap","vdblclick"],W,{x:q[0],y:q[1]})):(Se=setTimeout(function(){Z||i(de,["onetap","voneclick"],W,{x:q[0],y:q[1]})},V.multiClickDebounceTime()),ce=W.timeStamp)),de!=null&&!t.dragData.didDrag&&de._private.selectable&&ot<t.touchTapThreshold2&&!t.pinching&&(V.selectionType()==="single"?(V.$(r).unmerge(de).unselect(["tapunselect"]),de.select(["tapselect"])):de.selected()?de.unselect(["tapunselect"]):de.select(["tapselect"]),t.redrawHint("eles",!0)),t.touchData.singleTouchMoved=!0}}}for(var Yt=0;Yt<q.length;Yt++)pe[Yt]=q[Yt];t.dragData.didDrag=!1,W.touches.length===0&&(t.touchData.dragDelta=[],t.touchData.startPosition=[null,null,null,null,null,null],t.touchData.startGPosition=null,t.touchData.didSelect=!1),W.touches.length<2&&(W.touches.length===1&&(t.touchData.startGPosition=[W.touches[0].clientX,W.touches[0].clientY]),t.pinching=!1,t.redrawHint("eles",!0),t.redraw())},"touchendHandler"),!1),typeof TouchEvent>"u"){var ae=[],Oe=o(function(W){return{clientX:W.clientX,clientY:W.clientY,force:1,identifier:W.pointerId,pageX:W.pageX,pageY:W.pageY,radiusX:W.width/2,radiusY:W.height/2,screenX:W.screenX,screenY:W.screenY,target:W.target}},"makeTouch"),ge=o(function(W){return{event:W,touch:Oe(W)}},"makePointer"),ze=o(function(W){ae.push(ge(W))},"addPointer"),He=o(function(W){for(var de=0;de<ae.length;de++){var re=ae[de];if(re.event.pointerId===W.pointerId){ae.splice(de,1);return}}},"removePointer"),$e=o(function(W){var de=ae.filter(function(re){return re.event.pointerId===W.pointerId})[0];de.event=W,de.touch=Oe(W)},"updatePointer"),Re=o(function(W){W.touches=ae.map(function(de){return de.touch})},"addTouchesToEvent"),Ie=o(function(W){return W.pointerType==="mouse"||W.pointerType===4},"pointerIsMouse");t.registerBinding(t.container,"pointerdown",function(be){Ie(be)||(be.preventDefault(),ze(be),Re(be),te(be))}),t.registerBinding(t.container,"pointerup",function(be){Ie(be)||(He(be),Re(be),ue(be))}),t.registerBinding(t.container,"pointercancel",function(be){Ie(be)||(He(be),Re(be),se(be))}),t.registerBinding(t.container,"pointermove",function(be){Ie(be)||(be.preventDefault(),$e(be),Re(be),J(be))})}};eh={};eh.generatePolygon=function(t,e){return this.nodeShapes[t]={renderer:this,name:t,points:e,draw:o(function(n,i,a,s,l,u){this.renderer.nodeShapeImpl("polygon",n,i,a,s,l,this.points)},"draw"),intersectLine:o(function(n,i,a,s,l,u,h,f){return Xb(l,u,this.points,n,i,a/2,s/2,h)},"intersectLine"),checkPoint:o(function(n,i,a,s,l,u,h,f){return Zu(n,i,this.points,u,h,s,l,[0,-1],a)},"checkPoint")}};eh.generateEllipse=function(){return this.nodeShapes.ellipse={renderer:this,name:"ellipse",draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a)},"draw"),intersectLine:o(function(e,r,n,i,a,s,l,u){return Yqe(a,s,e,r,n/2+l,i/2+l)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){return $p(e,r,i,a,s,l,n)},"checkPoint")}};eh.generateRoundPolygon=function(t,e){return this.nodeShapes[t]={renderer:this,name:t,points:e,getOrCreateCorners:o(function(n,i,a,s,l,u,h){if(u[h]!==void 0&&u[h+"-cx"]===n&&u[h+"-cy"]===i)return u[h];u[h]=new Array(e.length/2),u[h+"-cx"]=n,u[h+"-cy"]=i;var f=a/2,d=s/2;l=l==="auto"?bme(a,s):l;for(var p=new Array(e.length/2),m=0;m<e.length/2;m++)p[m]={x:n+f*e[m*2],y:i+d*e[m*2+1]};var g,y,v,x,b=p.length;for(y=p[b-1],g=0;g<b;g++)v=p[g%b],x=p[(g+1)%b],u[h][g]=vB(y,v,x,l),y=v,v=x;return u[h]},"getOrCreateCorners"),draw:o(function(n,i,a,s,l,u,h){this.renderer.nodeShapeImpl("round-polygon",n,i,a,s,l,this.points,this.getOrCreateCorners(i,a,s,l,u,h,"drawCorners"))},"draw"),intersectLine:o(function(n,i,a,s,l,u,h,f,d){return Xqe(l,u,this.points,n,i,a,s,h,this.getOrCreateCorners(n,i,a,s,f,d,"corners"))},"intersectLine"),checkPoint:o(function(n,i,a,s,l,u,h,f,d){return qqe(n,i,this.points,u,h,s,l,this.getOrCreateCorners(u,h,s,l,f,d,"corners"))},"checkPoint")}};eh.generateRoundRectangle=function(){return this.nodeShapes["round-rectangle"]=this.nodeShapes.roundrectangle={renderer:this,name:"round-rectangle",points:gs(4,0),draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a,this.points,s)},"draw"),intersectLine:o(function(e,r,n,i,a,s,l,u){return vme(a,s,e,r,n,i,l,u)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){var h=i/2,f=a/2;u=u==="auto"?Vp(i,a):u,u=Math.min(h,f,u);var d=u*2;return!!(Zu(e,r,this.points,s,l,i,a-d,[0,-1],n)||Zu(e,r,this.points,s,l,i-d,a,[0,-1],n)||$p(e,r,d,d,s-h+u,l-f+u,n)||$p(e,r,d,d,s+h-u,l-f+u,n)||$p(e,r,d,d,s+h-u,l+f-u,n)||$p(e,r,d,d,s-h+u,l+f-u,n))},"checkPoint")}};eh.generateCutRectangle=function(){return this.nodeShapes["cut-rectangle"]=this.nodeShapes.cutrectangle={renderer:this,name:"cut-rectangle",cornerLength:sB(),points:gs(4,0),draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a,null,s)},"draw"),generateCutTrianglePts:o(function(e,r,n,i,a){var s=a==="auto"?this.cornerLength:a,l=r/2,u=e/2,h=n-u,f=n+u,d=i-l,p=i+l;return{topLeft:[h,d+s,h+s,d,h+s,d+s],topRight:[f-s,d,f,d+s,f-s,d+s],bottomRight:[f,p-s,f-s,p,f-s,p-s],bottomLeft:[h+s,p,h,p-s,h+s,p-s]}},"generateCutTrianglePts"),intersectLine:o(function(e,r,n,i,a,s,l,u){var h=this.generateCutTrianglePts(n+2*l,i+2*l,e,r,u),f=[].concat.apply([],[h.topLeft.splice(0,4),h.topRight.splice(0,4),h.bottomRight.splice(0,4),h.bottomLeft.splice(0,4)]);return Xb(a,s,f,e,r)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){var h=u==="auto"?this.cornerLength:u;if(Zu(e,r,this.points,s,l,i,a-2*h,[0,-1],n)||Zu(e,r,this.points,s,l,i-2*h,a,[0,-1],n))return!0;var f=this.generateCutTrianglePts(i,a,s,l);return Us(e,r,f.topLeft)||Us(e,r,f.topRight)||Us(e,r,f.bottomRight)||Us(e,r,f.bottomLeft)},"checkPoint")}};eh.generateBarrel=function(){return this.nodeShapes.barrel={renderer:this,name:"barrel",points:gs(4,0),draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a)},"draw"),intersectLine:o(function(e,r,n,i,a,s,l,u){var h=.15,f=.5,d=.85,p=this.generateBarrelBezierPts(n+2*l,i+2*l,e,r),m=o(function(v){var x=W1({x:v[0],y:v[1]},{x:v[2],y:v[3]},{x:v[4],y:v[5]},h),b=W1({x:v[0],y:v[1]},{x:v[2],y:v[3]},{x:v[4],y:v[5]},f),w=W1({x:v[0],y:v[1]},{x:v[2],y:v[3]},{x:v[4],y:v[5]},d);return[v[0],v[1],x.x,x.y,b.x,b.y,w.x,w.y,v[4],v[5]]},"approximateBarrelCurvePts"),g=[].concat(m(p.topLeft),m(p.topRight),m(p.bottomRight),m(p.bottomLeft));return Xb(a,s,g,e,r)},"intersectLine"),generateBarrelBezierPts:o(function(e,r,n,i){var a=r/2,s=e/2,l=n-s,u=n+s,h=i-a,f=i+a,d=BP(e,r),p=d.heightOffset,m=d.widthOffset,g=d.ctrlPtOffsetPct*e,y={topLeft:[l,h+p,l+g,h,l+m,h],topRight:[u-m,h,u-g,h,u,h+p],bottomRight:[u,f-p,u-g,f,u-m,f],bottomLeft:[l+m,f,l+g,f,l,f-p]};return y.topLeft.isTop=!0,y.topRight.isTop=!0,y.bottomLeft.isBottom=!0,y.bottomRight.isBottom=!0,y},"generateBarrelBezierPts"),checkPoint:o(function(e,r,n,i,a,s,l,u){var h=BP(i,a),f=h.heightOffset,d=h.widthOffset;if(Zu(e,r,this.points,s,l,i,a-2*f,[0,-1],n)||Zu(e,r,this.points,s,l,i-2*d,a,[0,-1],n))return!0;for(var p=this.generateBarrelBezierPts(i,a,s,l),m=o(function(S,_,I){var D=I[4],k=I[2],L=I[0],R=I[5],O=I[1],M=Math.min(D,L),B=Math.max(D,L),F=Math.min(R,O),P=Math.max(R,O);if(M<=S&&S<=B&&F<=_&&_<=P){var z=jqe(D,k,L),$=Vqe(z[0],z[1],z[2],S),H=$.filter(function(Q){return 0<=Q&&Q<=1});if(H.length>0)return H[0]}return null},"getCurveT"),g=Object.keys(p),y=0;y<g.length;y++){var v=g[y],x=p[v],b=m(e,r,x);if(b!=null){var w=x[5],C=x[3],T=x[1],E=oa(w,C,T,b);if(x.isTop&&E<=r||x.isBottom&&r<=E)return!0}}return!1},"checkPoint")}};eh.generateBottomRoundrectangle=function(){return this.nodeShapes["bottom-round-rectangle"]=this.nodeShapes.bottomroundrectangle={renderer:this,name:"bottom-round-rectangle",points:gs(4,0),draw:o(function(e,r,n,i,a,s){this.renderer.nodeShapeImpl(this.name,e,r,n,i,a,this.points,s)},"draw"),intersectLine:o(function(e,r,n,i,a,s,l,u){var h=e-(n/2+l),f=r-(i/2+l),d=f,p=e+(n/2+l),m=Ef(a,s,e,r,h,f,p,d,!1);return m.length>0?m:vme(a,s,e,r,n,i,l,u)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){u=u==="auto"?Vp(i,a):u;var h=2*u;if(Zu(e,r,this.points,s,l,i,a-h,[0,-1],n)||Zu(e,r,this.points,s,l,i-h,a,[0,-1],n))return!0;var f=i/2+2*n,d=a/2+2*n,p=[s-f,l-d,s-f,l,s+f,l,s+f,l-d];return!!(Us(e,r,p)||$p(e,r,h,h,s+i/2-u,l+a/2-u,n)||$p(e,r,h,h,s-i/2+u,l+a/2-u,n))},"checkPoint")}};eh.registerNodeShapes=function(){var t=this.nodeShapes={},e=this;this.generateEllipse(),this.generatePolygon("triangle",gs(3,0)),this.generateRoundPolygon("round-triangle",gs(3,0)),this.generatePolygon("rectangle",gs(4,0)),t.square=t.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var r=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",r),this.generateRoundPolygon("round-diamond",r)}this.generatePolygon("pentagon",gs(5,0)),this.generateRoundPolygon("round-pentagon",gs(5,0)),this.generatePolygon("hexagon",gs(6,0)),this.generateRoundPolygon("round-hexagon",gs(6,0)),this.generatePolygon("heptagon",gs(7,0)),this.generateRoundPolygon("round-heptagon",gs(7,0)),this.generatePolygon("octagon",gs(8,0)),this.generateRoundPolygon("round-octagon",gs(8,0));var n=new Array(20);{var i=PP(5,0),a=PP(5,Math.PI/5),s=.5*(3-Math.sqrt(5));s*=1.57;for(var l=0;l<a.length/2;l++)a[l*2]*=s,a[l*2+1]*=s;for(var l=0;l<20/4;l++)n[l*4]=i[l*2],n[l*4+1]=i[l*2+1],n[l*4+2]=a[l*2],n[l*4+3]=a[l*2+1]}n=xme(n),this.generatePolygon("star",n),this.generatePolygon("vee",[-1,-1,0,-.333,1,-1,0,1]),this.generatePolygon("rhomboid",[-1,-1,.333,-1,1,1,-.333,1]),this.generatePolygon("right-rhomboid",[-.333,-1,1,-1,.333,1,-1,1]),this.nodeShapes.concavehexagon=this.generatePolygon("concave-hexagon",[-1,-.95,-.75,0,-1,.95,1,.95,.75,0,1,-.95]);{var u=[-1,-1,.25,-1,1,0,.25,1,-1,1];this.generatePolygon("tag",u),this.generateRoundPolygon("round-tag",u)}t.makePolygon=function(h){var f=h.join("$"),d="polygon-"+f,p;return(p=this[d])?p:e.generatePolygon(d,h)}};l4={};l4.timeToRender=function(){return this.redrawTotalTime/this.redrawCount};l4.redraw=function(t){t=t||dme();var e=this;e.averageRedrawTime===void 0&&(e.averageRedrawTime=0),e.lastRedrawTime===void 0&&(e.lastRedrawTime=0),e.lastDrawTime===void 0&&(e.lastDrawTime=0),e.requestedFrame=!0,e.renderOptions=t};l4.beforeRender=function(t,e){if(!this.destroyed){e==null&&ai("Priority is not optional for beforeRender");var r=this.beforeRenderCallbacks;r.push({fn:t,priority:e}),r.sort(function(n,i){return i.priority-n.priority})}};M0e=o(function(e,r,n){for(var i=e.beforeRenderCallbacks,a=0;a<i.length;a++)i[a].fn(r,n)},"beforeRenderCallbacks");l4.startRenderLoop=function(){var t=this,e=t.cy;if(!t.renderLoopStarted){t.renderLoopStarted=!0;var r=o(function n(i){if(!t.destroyed){if(!e.batching())if(t.requestedFrame&&!t.skipFrame){M0e(t,!0,i);var a=Qu();t.render(t.renderOptions);var s=t.lastDrawTime=Qu();t.averageRedrawTime===void 0&&(t.averageRedrawTime=s-a),t.redrawCount===void 0&&(t.redrawCount=0),t.redrawCount++,t.redrawTotalTime===void 0&&(t.redrawTotalTime=0);var l=s-a;t.redrawTotalTime+=l,t.lastRedrawTime=l,t.averageRedrawTime=t.averageRedrawTime/2+l/2,t.requestedFrame=!1}else M0e(t,!1,i);t.skipFrame=!1,xS(n)}},"renderFn");xS(r)}};LQe=o(function(e){this.init(e)},"BaseRenderer"),vge=LQe,oy=vge.prototype;oy.clientFunctions=["redrawHint","render","renderTo","matchCanvasSize","nodeShapeImpl","arrowShapeImpl"];oy.init=function(t){var e=this;e.options=t,e.cy=t.cy;var r=e.container=t.cy.container(),n=e.cy.window();if(n){var i=n.document,a=i.head,s="__________cytoscape_stylesheet",l="__________cytoscape_container",u=i.getElementById(s)!=null;if(r.className.indexOf(l)<0&&(r.className=(r.className||"")+" "+l),!u){var h=i.createElement("style");h.id=s,h.textContent="."+l+" { position: relative; }",a.insertBefore(h,a.children[0])}var f=n.getComputedStyle(r),d=f.getPropertyValue("position");d==="static"&&un("A Cytoscape container has style position:static and so can not use UI extensions properly")}e.selection=[void 0,void 0,void 0,void 0,0],e.bezierProjPcts=[.05,.225,.4,.5,.6,.775,.95],e.hoverData={down:null,last:null,downTime:null,triggerMode:null,dragging:!1,initialPan:[null,null],capture:!1},e.dragData={possibleDragElements:[]},e.touchData={start:null,capture:!1,startPosition:[null,null,null,null,null,null],singleTouchStartTime:null,singleTouchMoved:!0,now:[null,null,null,null,null,null],earlier:[null,null,null,null,null,null]},e.redraws=0,e.showFps=t.showFps,e.debug=t.debug,e.webgl=t.webgl,e.hideEdgesOnViewport=t.hideEdgesOnViewport,e.textureOnViewport=t.textureOnViewport,e.wheelSensitivity=t.wheelSensitivity,e.motionBlurEnabled=t.motionBlur,e.forcedPixelRatio=Ct(t.pixelRatio)?t.pixelRatio:null,e.motionBlur=t.motionBlur,e.motionBlurOpacity=t.motionBlurOpacity,e.motionBlurTransparency=1-e.motionBlurOpacity,e.motionBlurPxRatio=1,e.mbPxRBlurry=1,e.minMbLowQualFrames=4,e.fullQualityMb=!1,e.clearedForMotionBlur=[],e.desktopTapThreshold=t.desktopTapThreshold,e.desktopTapThreshold2=t.desktopTapThreshold*t.desktopTapThreshold,e.touchTapThreshold=t.touchTapThreshold,e.touchTapThreshold2=t.touchTapThreshold*t.touchTapThreshold,e.tapholdDuration=500,e.bindings=[],e.beforeRenderCallbacks=[],e.beforeRenderPriorities={animations:400,eleCalcs:300,eleTxrDeq:200,lyrTxrDeq:150,lyrTxrSkip:100},e.registerNodeShapes(),e.registerArrowShapes(),e.registerCalculationListeners()};oy.notify=function(t,e){var r=this,n=r.cy;if(!this.destroyed){if(t==="init"){r.load();return}if(t==="destroy"){r.destroy();return}(t==="add"||t==="remove"||t==="move"&&n.hasCompoundNodes()||t==="load"||t==="zorder"||t==="mount")&&r.invalidateCachedZSortedEles(),t==="viewport"&&r.redrawHint("select",!0),t==="gc"&&r.redrawHint("gc",!0),(t==="load"||t==="resize"||t==="mount")&&(r.invalidateContainerClientCoordsCache(),r.matchCanvasSize(r.container)),r.redrawHint("eles",!0),r.redrawHint("drag",!0),this.startRenderLoop(),this.redraw()}};oy.destroy=function(){var t=this;t.destroyed=!0,t.cy.stopAnimationLoop();for(var e=0;e<t.bindings.length;e++){var r=t.bindings[e],n=r,i=n.target;(i.off||i.removeEventListener).apply(i,n.args)}if(t.bindings=[],t.beforeRenderCallbacks=[],t.onUpdateEleCalcsFns=[],t.removeObserver&&t.removeObserver.disconnect(),t.styleObserver&&t.styleObserver.disconnect(),t.resizeObserver&&t.resizeObserver.disconnect(),t.labelCalcDiv)try{document.body.removeChild(t.labelCalcDiv)}catch{}};oy.isHeadless=function(){return!1};[yB,gge,yge,sy,eh,l4].forEach(function(t){rr(oy,t)});DP=1e3/60,xge={setupDequeueing:o(function(e){return o(function(){var n=this,i=this.renderer;if(!n.dequeueingSetup){n.dequeueingSetup=!0;var a=n4(function(){i.redrawHint("eles",!0),i.redrawHint("drag",!0),i.redraw()},e.deqRedrawThreshold),s=o(function(h,f){var d=Qu(),p=i.averageRedrawTime,m=i.lastRedrawTime,g=[],y=i.cy.extent(),v=i.getPixelRatio();for(h||i.flushRenderedStyleQueue();;){var x=Qu(),b=x-d,w=x-f;if(m<DP){var C=DP-(h?p:0);if(w>=e.deqFastCost*C)break}else if(h){if(b>=e.deqCost*m||b>=e.deqAvgCost*p)break}else if(w>=e.deqNoDrawCost*DP)break;var T=e.deq(n,v,y);if(T.length>0)for(var E=0;E<T.length;E++)g.push(T[E]);else break}g.length>0&&(e.onDeqd(n,g),!h&&e.shouldRedraw(n,g,v,y)&&a())},"dequeue"),l=e.priority||rB;i.beforeRender(s,l(n))}},"setupDequeueingImpl")},"setupDequeueing")},RQe=function(){function t(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:bS;Mf(this,t),this.idsByKey=new Xc,this.keyForId=new Xc,this.cachesByLvl=new Xc,this.lvls=[],this.getKey=e,this.doesEleInvalidateKey=r}return o(t,"ElementTextureCacheLookup"),If(t,[{key:"getIdsFor",value:o(function(r){r==null&&ai("Can not get id list for null key");var n=this.idsByKey,i=this.idsByKey.get(r);return i||(i=new J1,n.set(r,i)),i},"getIdsFor")},{key:"addIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).add(n)},"addIdForKey")},{key:"deleteIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).delete(n)},"deleteIdForKey")},{key:"getNumberOfIdsForKey",value:o(function(r){return r==null?0:this.getIdsFor(r).size},"getNumberOfIdsForKey")},{key:"updateKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);this.deleteIdForKey(i,n),this.addIdForKey(a,n),this.keyForId.set(n,a)},"updateKeyMappingFor")},{key:"deleteKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteIdForKey(i,n),this.keyForId.delete(n)},"deleteKeyMappingFor")},{key:"keyHasChangedFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);return i!==a},"keyHasChangedFor")},{key:"isInvalid",value:o(function(r){return this.keyHasChangedFor(r)||this.doesEleInvalidateKey(r)},"isInvalid")},{key:"getCachesAt",value:o(function(r){var n=this.cachesByLvl,i=this.lvls,a=n.get(r);return a||(a=new Xc,n.set(r,a),i.push(r)),a},"getCachesAt")},{key:"getCache",value:o(function(r,n){return this.getCachesAt(n).get(r)},"getCache")},{key:"get",value:o(function(r,n){var i=this.getKey(r),a=this.getCache(i,n);return a!=null&&this.updateKeyMappingFor(r),a},"get")},{key:"getForCachedKey",value:o(function(r,n){var i=this.keyForId.get(r.id()),a=this.getCache(i,n);return a},"getForCachedKey")},{key:"hasCache",value:o(function(r,n){return this.getCachesAt(n).has(r)},"hasCache")},{key:"has",value:o(function(r,n){var i=this.getKey(r);return this.hasCache(i,n)},"has")},{key:"setCache",value:o(function(r,n,i){i.key=r,this.getCachesAt(n).set(r,i)},"setCache")},{key:"set",value:o(function(r,n,i){var a=this.getKey(r);this.setCache(a,n,i),this.updateKeyMappingFor(r)},"set")},{key:"deleteCache",value:o(function(r,n){this.getCachesAt(n).delete(r)},"deleteCache")},{key:"delete",value:o(function(r,n){var i=this.getKey(r);this.deleteCache(i,n)},"_delete")},{key:"invalidateKey",value:o(function(r){var n=this;this.lvls.forEach(function(i){return n.deleteCache(r,i)})},"invalidateKey")},{key:"invalidate",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteKeyMappingFor(r);var a=this.doesEleInvalidateKey(r);return a&&this.invalidateKey(i),a||this.getNumberOfIdsForKey(i)===0},"invalidate")}]),t}(),I0e=25,sS=50,yS=-4,XP=3,bge=7.99,NQe=8,MQe=1024,IQe=1024,OQe=1024,PQe=.2,BQe=.8,FQe=10,$Qe=.15,zQe=.1,GQe=.9,VQe=.9,UQe=100,HQe=1,H1={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},WQe=la({getKey:null,doesEleInvalidateKey:bS,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:ume,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),Fb=o(function(e,r){var n=this;n.renderer=e,n.onDequeues=[];var i=WQe(r);rr(n,i),n.lookup=new RQe(i.getKey,i.doesEleInvalidateKey),n.setupDequeueing()},"ElementTextureCache"),qi=Fb.prototype;qi.reasons=H1;qi.getTextureQueue=function(t){var e=this;return e.eleImgCaches=e.eleImgCaches||{},e.eleImgCaches[t]=e.eleImgCaches[t]||[]};qi.getRetiredTextureQueue=function(t){var e=this,r=e.eleImgCaches.retired=e.eleImgCaches.retired||{},n=r[t]=r[t]||[];return n};qi.getElementQueue=function(){var t=this,e=t.eleCacheQueue=t.eleCacheQueue||new i4(function(r,n){return n.reqs-r.reqs});return e};qi.getElementKeyToQueue=function(){var t=this,e=t.eleKeyToCacheQueue=t.eleKeyToCacheQueue||{};return e};qi.getElement=function(t,e,r,n,i){var a=this,s=this.renderer,l=s.cy.zoom(),u=this.lookup;if(!e||e.w===0||e.h===0||isNaN(e.w)||isNaN(e.h)||!t.visible()||t.removed()||!a.allowEdgeTxrCaching&&t.isEdge()||!a.allowParentTxrCaching&&t.isParent())return null;if(n==null&&(n=Math.ceil(iB(l*r))),n<yS)n=yS;else if(l>=bge||n>XP)return null;var h=Math.pow(2,n),f=e.h*h,d=e.w*h,p=s.eleTextBiggerThanMin(t,h);if(!this.isVisible(t,p))return null;var m=u.get(t,n);if(m&&m.invalidated&&(m.invalidated=!1,m.texture.invalidatedWidth-=m.width),m)return m;var g;if(f<=I0e?g=I0e:f<=sS?g=sS:g=Math.ceil(f/sS)*sS,f>OQe||d>IQe)return null;var y=a.getTextureQueue(g),v=y[y.length-2],x=o(function(){return a.recycleTexture(g,d)||a.addTexture(g,d)},"addNewTxr");v||(v=y[y.length-1]),v||(v=x()),v.width-v.usedWidth<d&&(v=x());for(var b=o(function(M){return M&&M.scaledLabelShown===p},"scalableFrom"),w=i&&i===H1.dequeue,C=i&&i===H1.highQuality,T=i&&i===H1.downscale,E,A=n+1;A<=XP;A++){var S=u.get(t,A);if(S){E=S;break}}var _=E&&E.level===n+1?E:null,I=o(function(){v.context.drawImage(_.texture.canvas,_.x,0,_.width,_.height,v.usedWidth,0,d,f)},"downscale");if(v.context.setTransform(1,0,0,1,0,0),v.context.clearRect(v.usedWidth,0,d,g),b(_))I();else if(b(E))if(C){for(var D=E.level;D>n;D--)_=a.getElement(t,e,r,D,H1.downscale);I()}else return a.queueElement(t,E.level-1),E;else{var k;if(!w&&!C&&!T)for(var L=n-1;L>=yS;L--){var R=u.get(t,L);if(R){k=R;break}}if(b(k))return a.queueElement(t,n),k;v.context.translate(v.usedWidth,0),v.context.scale(h,h),this.drawElement(v.context,t,e,p,!1),v.context.scale(1/h,1/h),v.context.translate(-v.usedWidth,0)}return m={x:v.usedWidth,texture:v,level:n,scale:h,width:d,height:f,scaledLabelShown:p},v.usedWidth+=Math.ceil(d+NQe),v.eleCaches.push(m),u.set(t,n,m),a.checkTextureFullness(v),m};qi.invalidateElements=function(t){for(var e=0;e<t.length;e++)this.invalidateElement(t[e])};qi.invalidateElement=function(t){var e=this,r=e.lookup,n=[],i=r.isInvalid(t);if(i){for(var a=yS;a<=XP;a++){var s=r.getForCachedKey(t,a);s&&n.push(s)}var l=r.invalidate(t);if(l)for(var u=0;u<n.length;u++){var h=n[u],f=h.texture;f.invalidatedWidth+=h.width,h.invalidated=!0,e.checkTextureUtility(f)}e.removeFromQueue(t)}};qi.checkTextureUtility=function(t){t.invalidatedWidth>=PQe*t.width&&this.retireTexture(t)};qi.checkTextureFullness=function(t){var e=this,r=e.getTextureQueue(t.height);t.usedWidth/t.width>BQe&&t.fullnessChecks>=FQe?Df(r,t):t.fullnessChecks++};qi.retireTexture=function(t){var e=this,r=t.height,n=e.getTextureQueue(r),i=this.lookup;Df(n,t),t.retired=!0;for(var a=t.eleCaches,s=0;s<a.length;s++){var l=a[s];i.deleteCache(l.key,l.level)}nB(a);var u=e.getRetiredTextureQueue(r);u.push(t)};qi.addTexture=function(t,e){var r=this,n=r.getTextureQueue(t),i={};return n.push(i),i.eleCaches=[],i.height=t,i.width=Math.max(MQe,e),i.usedWidth=0,i.invalidatedWidth=0,i.fullnessChecks=0,i.canvas=r.renderer.makeOffscreenCanvas(i.width,i.height),i.context=i.canvas.getContext("2d"),i};qi.recycleTexture=function(t,e){for(var r=this,n=r.getTextureQueue(t),i=r.getRetiredTextureQueue(t),a=0;a<i.length;a++){var s=i[a];if(s.width>=e)return s.retired=!1,s.usedWidth=0,s.invalidatedWidth=0,s.fullnessChecks=0,nB(s.eleCaches),s.context.setTransform(1,0,0,1,0,0),s.context.clearRect(0,0,s.width,s.height),Df(i,s),n.push(s),s}};qi.queueElement=function(t,e){var r=this,n=r.getElementQueue(),i=r.getElementKeyToQueue(),a=this.getKey(t),s=i[a];if(s)s.level=Math.max(s.level,e),s.eles.merge(t),s.reqs++,n.updateItem(s);else{var l={eles:t.spawn().merge(t),level:e,reqs:1,key:a};n.push(l),i[a]=l}};qi.dequeue=function(t){for(var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=[],a=e.lookup,s=0;s<HQe&&r.size()>0;s++){var l=r.pop(),u=l.key,h=l.eles[0],f=a.hasCache(h,l.level);if(n[u]=null,f)continue;i.push(l);var d=e.getBoundingBox(h);e.getElement(h,d,t,l.level,H1.dequeue)}return i};qi.removeFromQueue=function(t){var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=this.getKey(t),a=n[i];a!=null&&(a.eles.length===1?(a.reqs=tB,r.updateItem(a),r.pop(),n[i]=null):a.eles.unmerge(t))};qi.onDequeue=function(t){this.onDequeues.push(t)};qi.offDequeue=function(t){Df(this.onDequeues,t)};qi.setupDequeueing=xge.setupDequeueing({deqRedrawThreshold:UQe,deqCost:$Qe,deqAvgCost:zQe,deqNoDrawCost:GQe,deqFastCost:VQe,deq:o(function(e,r,n){return e.dequeue(r,n)},"deq"),onDeqd:o(function(e,r){for(var n=0;n<e.onDequeues.length;n++){var i=e.onDequeues[n];i(r)}},"onDeqd"),shouldRedraw:o(function(e,r,n,i){for(var a=0;a<r.length;a++)for(var s=r[a].eles,l=0;l<s.length;l++){var u=s[l].boundingBox();if(aB(u,i))return!0}return!1},"shouldRedraw"),priority:o(function(e){return e.renderer.beforeRenderPriorities.eleTxrDeq},"priority")});qQe=1,zb=-4,_S=2,YQe=3.99,XQe=50,jQe=50,KQe=.15,QQe=.1,ZQe=.9,JQe=.9,eZe=1,O0e=250,tZe=4e3*4e3,P0e=32767,rZe=!0,wge=o(function(e){var r=this,n=r.renderer=e,i=n.cy;r.layersByLevel={},r.firstGet=!0,r.lastInvalidationTime=Qu()-2*O0e,r.skipping=!1,r.eleTxrDeqs=i.collection(),r.scheduleElementRefinement=n4(function(){r.refineElementTextures(r.eleTxrDeqs),r.eleTxrDeqs.unmerge(r.eleTxrDeqs)},jQe),n.beforeRender(function(s,l){l-r.lastInvalidationTime<=O0e?r.skipping=!0:r.skipping=!1},n.beforeRenderPriorities.lyrTxrSkip);var a=o(function(l,u){return u.reqs-l.reqs},"qSort");r.layersQueue=new i4(a),r.setupDequeueing()},"LayeredTextureCache"),Ea=wge.prototype,B0e=0,nZe=Math.pow(2,53)-1;Ea.makeLayer=function(t,e){var r=Math.pow(2,e),n=Math.ceil(t.w*r),i=Math.ceil(t.h*r),a=this.renderer.makeOffscreenCanvas(n,i),s={id:B0e=++B0e%nZe,bb:t,level:e,width:n,height:i,canvas:a,context:a.getContext("2d"),eles:[],elesQueue:[],reqs:0},l=s.context,u=-s.bb.x1,h=-s.bb.y1;return l.scale(r,r),l.translate(u,h),s};Ea.getLayers=function(t,e,r){var n=this,i=n.renderer,a=i.cy,s=a.zoom(),l=n.firstGet;if(n.firstGet=!1,r==null){if(r=Math.ceil(iB(s*e)),r<zb)r=zb;else if(s>=YQe||r>_S)return null}n.validateLayersElesOrdering(r,t);var u=n.layersByLevel,h=Math.pow(2,r),f=u[r]=u[r]||[],d,p=n.levelIsComplete(r,t),m,g=o(function(){var I=o(function(O){if(n.validateLayersElesOrdering(O,t),n.levelIsComplete(O,t))return m=u[O],!0},"canUseAsTmpLvl"),D=o(function(O){if(!m)for(var M=r+O;zb<=M&&M<=_S&&!I(M);M+=O);},"checkLvls");D(1),D(-1);for(var k=f.length-1;k>=0;k--){var L=f[k];L.invalid&&Df(f,L)}},"checkTempLevels");if(!p)g();else return f;var y=o(function(){if(!d){d=Hs();for(var I=0;I<t.length;I++)gme(d,t[I].boundingBox())}return d},"getBb"),v=o(function(I){I=I||{};var D=I.after;y();var k=Math.ceil(d.w*h),L=Math.ceil(d.h*h);if(k>P0e||L>P0e)return null;var R=k*L;if(R>tZe)return null;var O=n.makeLayer(d,r);if(D!=null){var M=f.indexOf(D)+1;f.splice(M,0,O)}else(I.insert===void 0||I.insert)&&f.unshift(O);return O},"makeLayer");if(n.skipping&&!l)return null;for(var x=null,b=t.length/qQe,w=!l,C=0;C<t.length;C++){var T=t[C],E=T._private.rscratch,A=E.imgLayerCaches=E.imgLayerCaches||{},S=A[r];if(S){x=S;continue}if((!x||x.eles.length>=b||!yme(x.bb,T.boundingBox()))&&(x=v({insert:!0,after:x}),!x))return null;m||w?n.queueLayer(x,T):n.drawEleInLayer(x,T,r,e),x.eles.push(T),A[r]=x}return m||(w?null:f)};Ea.getEleLevelForLayerLevel=function(t,e){return t};Ea.drawEleInLayer=function(t,e,r,n){var i=this,a=this.renderer,s=t.context,l=e.boundingBox();l.w===0||l.h===0||!e.visible()||(r=i.getEleLevelForLayerLevel(r,n),a.setImgSmoothing(s,!1),a.drawCachedElement(s,e,null,null,r,rZe),a.setImgSmoothing(s,!0))};Ea.levelIsComplete=function(t,e){var r=this,n=r.layersByLevel[t];if(!n||n.length===0)return!1;for(var i=0,a=0;a<n.length;a++){var s=n[a];if(s.reqs>0||s.invalid)return!1;i+=s.eles.length}return i===e.length};Ea.validateLayersElesOrdering=function(t,e){var r=this.layersByLevel[t];if(r)for(var n=0;n<r.length;n++){for(var i=r[n],a=-1,s=0;s<e.length;s++)if(i.eles[0]===e[s]){a=s;break}if(a<0){this.invalidateLayer(i);continue}for(var l=a,s=0;s<i.eles.length;s++)if(i.eles[s]!==e[l+s]){this.invalidateLayer(i);break}}};Ea.updateElementsInLayers=function(t,e){for(var r=this,n=t4(t[0]),i=0;i<t.length;i++)for(var a=n?null:t[i],s=n?t[i]:t[i].ele,l=s._private.rscratch,u=l.imgLayerCaches=l.imgLayerCaches||{},h=zb;h<=_S;h++){var f=u[h];f&&(a&&r.getEleLevelForLayerLevel(f.level)!==a.level||e(f,s,a))}};Ea.haveLayers=function(){for(var t=this,e=!1,r=zb;r<=_S;r++){var n=t.layersByLevel[r];if(n&&n.length>0){e=!0;break}}return e};Ea.invalidateElements=function(t){var e=this;t.length!==0&&(e.lastInvalidationTime=Qu(),!(t.length===0||!e.haveLayers())&&e.updateElementsInLayers(t,o(function(n,i,a){e.invalidateLayer(n)},"invalAssocLayers")))};Ea.invalidateLayer=function(t){if(this.lastInvalidationTime=Qu(),!t.invalid){var e=t.level,r=t.eles,n=this.layersByLevel[e];Df(n,t),t.elesQueue=[],t.invalid=!0,t.replacement&&(t.replacement.invalid=!0);for(var i=0;i<r.length;i++){var a=r[i]._private.rscratch.imgLayerCaches;a&&(a[e]=null)}}};Ea.refineElementTextures=function(t){var e=this;e.updateElementsInLayers(t,o(function(n,i,a){var s=n.replacement;if(s||(s=n.replacement=e.makeLayer(n.bb,n.level),s.replaces=n,s.eles=n.eles),!s.reqs)for(var l=0;l<s.eles.length;l++)e.queueLayer(s,s.eles[l])},"refineEachEle"))};Ea.enqueueElementRefinement=function(t){this.eleTxrDeqs.merge(t),this.scheduleElementRefinement()};Ea.queueLayer=function(t,e){var r=this,n=r.layersQueue,i=t.elesQueue,a=i.hasId=i.hasId||{};if(!t.replacement){if(e){if(a[e.id()])return;i.push(e),a[e.id()]=!0}t.reqs?(t.reqs++,n.updateItem(t)):(t.reqs=1,n.push(t))}};Ea.dequeue=function(t){for(var e=this,r=e.layersQueue,n=[],i=0;i<eZe&&r.size()!==0;){var a=r.peek();if(a.replacement){r.pop();continue}if(a.replaces&&a!==a.replaces.replacement){r.pop();continue}if(a.invalid){r.pop();continue}var s=a.elesQueue.shift();s&&(e.drawEleInLayer(a,s,a.level,t),i++),n.length===0&&n.push(!0),a.elesQueue.length===0&&(r.pop(),a.reqs=0,a.replaces&&e.applyLayerReplacement(a),e.requestRedraw())}return n};Ea.applyLayerReplacement=function(t){var e=this,r=e.layersByLevel[t.level],n=t.replaces,i=r.indexOf(n);if(!(i<0||n.invalid)){r[i]=t;for(var a=0;a<t.eles.length;a++){var s=t.eles[a]._private,l=s.imgLayerCaches=s.imgLayerCaches||{};l&&(l[t.level]=t)}e.requestRedraw()}};Ea.requestRedraw=n4(function(){var t=this.renderer;t.redrawHint("eles",!0),t.redrawHint("drag",!0),t.redraw()},100);Ea.setupDequeueing=xge.setupDequeueing({deqRedrawThreshold:XQe,deqCost:KQe,deqAvgCost:QQe,deqNoDrawCost:ZQe,deqFastCost:JQe,deq:o(function(e,r){return e.dequeue(r)},"deq"),onDeqd:rB,shouldRedraw:ume,priority:o(function(e){return e.renderer.beforeRenderPriorities.lyrTxrDeq},"priority")});Tge={};o(iZe,"polygon");o(aZe,"triangleBackcurve");o($0e,"triangleTee");o(sZe,"circleTriangle");o(oZe,"circle");Tge.arrowShapeImpl=function(t){return(F0e||(F0e={polygon:iZe,"triangle-backcurve":aZe,"triangle-tee":$0e,"circle-triangle":sZe,"triangle-cross":$0e,circle:oZe}))[t]};Qc={};Qc.drawElement=function(t,e,r,n,i,a){var s=this;e.isNode()?s.drawNode(t,e,r,n,i,a):s.drawEdge(t,e,r,n,i,a)};Qc.drawElementOverlay=function(t,e){var r=this;e.isNode()?r.drawNodeOverlay(t,e):r.drawEdgeOverlay(t,e)};Qc.drawElementUnderlay=function(t,e){var r=this;e.isNode()?r.drawNodeUnderlay(t,e):r.drawEdgeUnderlay(t,e)};Qc.drawCachedElementPortion=function(t,e,r,n,i,a,s,l){var u=this,h=r.getBoundingBox(e);if(!(h.w===0||h.h===0)){var f=r.getElement(e,h,n,i,a);if(f!=null){var d=l(u,e);if(d===0)return;var p=s(u,e),m=h.x1,g=h.y1,y=h.w,v=h.h,x,b,w,C,T;if(p!==0){var E=r.getRotationPoint(e);w=E.x,C=E.y,t.translate(w,C),t.rotate(p),T=u.getImgSmoothing(t),T||u.setImgSmoothing(t,!0);var A=r.getRotationOffset(e);x=A.x,b=A.y}else x=m,b=g;var S;d!==1&&(S=t.globalAlpha,t.globalAlpha=S*d),t.drawImage(f.texture.canvas,f.x,0,f.width,f.height,x,b,y,v),d!==1&&(t.globalAlpha=S),p!==0&&(t.rotate(-p),t.translate(-w,-C),T||u.setImgSmoothing(t,!1))}else r.drawElement(t,e)}};lZe=o(function(){return 0},"getZeroRotation"),cZe=o(function(e,r){return e.getTextAngle(r,null)},"getLabelRotation"),uZe=o(function(e,r){return e.getTextAngle(r,"source")},"getSourceLabelRotation"),hZe=o(function(e,r){return e.getTextAngle(r,"target")},"getTargetLabelRotation"),fZe=o(function(e,r){return r.effectiveOpacity()},"getOpacity"),LP=o(function(e,r){return r.pstyle("text-opacity").pfValue*r.effectiveOpacity()},"getTextOpacity");Qc.drawCachedElement=function(t,e,r,n,i,a){var s=this,l=s.data,u=l.eleTxrCache,h=l.lblTxrCache,f=l.slbTxrCache,d=l.tlbTxrCache,p=e.boundingBox(),m=a===!0?u.reasons.highQuality:null;if(!(p.w===0||p.h===0||!e.visible())&&(!n||aB(p,n))){var g=e.isEdge(),y=e.element()._private.rscratch.badLine;s.drawElementUnderlay(t,e),s.drawCachedElementPortion(t,e,u,r,i,m,lZe,fZe),(!g||!y)&&s.drawCachedElementPortion(t,e,h,r,i,m,cZe,LP),g&&!y&&(s.drawCachedElementPortion(t,e,f,r,i,m,uZe,LP),s.drawCachedElementPortion(t,e,d,r,i,m,hZe,LP)),s.drawElementOverlay(t,e)}};Qc.drawElements=function(t,e){for(var r=this,n=0;n<e.length;n++){var i=e[n];r.drawElement(t,i)}};Qc.drawCachedElements=function(t,e,r,n){for(var i=this,a=0;a<e.length;a++){var s=e[a];i.drawCachedElement(t,s,r,n)}};Qc.drawCachedNodes=function(t,e,r,n){for(var i=this,a=0;a<e.length;a++){var s=e[a];s.isNode()&&i.drawCachedElement(t,s,r,n)}};Qc.drawLayeredElements=function(t,e,r,n){var i=this,a=i.data.lyrTxrCache.getLayers(e,r);if(a)for(var s=0;s<a.length;s++){var l=a[s],u=l.bb;u.w===0||u.h===0||t.drawImage(l.canvas,u.x1,u.y1,u.w,u.h)}else i.drawCachedElements(t,e,r,n)};th={};th.drawEdge=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l=e._private.rscratch;if(!(a&&!e.visible())&&!(l.badLine||l.allpts==null||isNaN(l.allpts[0]))){var u;r&&(u=r,t.translate(-u.x1,-u.y1));var h=a?e.pstyle("opacity").value:1,f=a?e.pstyle("line-opacity").value:1,d=e.pstyle("curve-style").value,p=e.pstyle("line-style").value,m=e.pstyle("width").pfValue,g=e.pstyle("line-cap").value,y=e.pstyle("line-outline-width").value,v=e.pstyle("line-outline-color").value,x=h*f,b=h*f,w=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;d==="straight-triangle"?(s.eleStrokeStyle(t,e,O),s.drawEdgeTrianglePath(e,t,l.allpts)):(t.lineWidth=m,t.lineCap=g,s.eleStrokeStyle(t,e,O),s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLine"),C=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;if(t.lineWidth=m+y,t.lineCap=g,y>0)s.colorStrokeStyle(t,v[0],v[1],v[2],O);else{t.lineCap="butt";return}d==="straight-triangle"?s.drawEdgeTrianglePath(e,t,l.allpts):(s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLineOutline"),T=o(function(){i&&s.drawEdgeOverlay(t,e)},"drawOverlay"),E=o(function(){i&&s.drawEdgeUnderlay(t,e)},"drawUnderlay"),A=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:b;s.drawArrowheads(t,e,O)},"drawArrows"),S=o(function(){s.drawElementText(t,e,null,n)},"drawText");t.lineJoin="round";var _=e.pstyle("ghost").value==="yes";if(_){var I=e.pstyle("ghost-offset-x").pfValue,D=e.pstyle("ghost-offset-y").pfValue,k=e.pstyle("ghost-opacity").value,L=x*k;t.translate(I,D),w(L),A(L),t.translate(-I,-D)}else C();E(),w(),A(),T(),S(),r&&t.translate(u.x1,u.y1)}};kge=o(function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(r,n){if(n.visible()){var i=n.pstyle("".concat(e,"-opacity")).value;if(i!==0){var a=this,s=a.usePaths(),l=n._private.rscratch,u=n.pstyle("".concat(e,"-padding")).pfValue,h=2*u,f=n.pstyle("".concat(e,"-color")).value;r.lineWidth=h,l.edgeType==="self"&&!s?r.lineCap="butt":r.lineCap="round",a.colorStrokeStyle(r,f[0],f[1],f[2],i),a.drawEdgePath(n,r,l.allpts,"solid")}}}},"drawEdgeOverlayUnderlay");th.drawEdgeOverlay=kge("overlay");th.drawEdgeUnderlay=kge("underlay");th.drawEdgePath=function(t,e,r,n){var i=t._private.rscratch,a=e,s,l=!1,u=this.usePaths(),h=t.pstyle("line-dash-pattern").pfValue,f=t.pstyle("line-dash-offset").pfValue;if(u){var d=r.join("$"),p=i.pathCacheKey&&i.pathCacheKey===d;p?(s=e=i.pathCache,l=!0):(s=e=new Path2D,i.pathCacheKey=d,i.pathCache=s)}if(a.setLineDash)switch(n){case"dotted":a.setLineDash([1,1]);break;case"dashed":a.setLineDash(h),a.lineDashOffset=f;break;case"solid":a.setLineDash([]);break}if(!l&&!i.badLine)switch(e.beginPath&&e.beginPath(),e.moveTo(r[0],r[1]),i.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var m=2;m+3<r.length;m+=4)e.quadraticCurveTo(r[m],r[m+1],r[m+2],r[m+3]);break;case"straight":case"haystack":for(var g=2;g+1<r.length;g+=2)e.lineTo(r[g],r[g+1]);break;case"segments":if(i.isRound){var y=mo(i.roundCorners),v;try{for(y.s();!(v=y.n()).done;){var x=v.value;hge(e,x)}}catch(w){y.e(w)}finally{y.f()}e.lineTo(r[r.length-2],r[r.length-1])}else for(var b=2;b+1<r.length;b+=2)e.lineTo(r[b],r[b+1]);break}e=a,u?e.stroke(s):e.stroke(),e.setLineDash&&e.setLineDash([])};th.drawEdgeTrianglePath=function(t,e,r){e.fillStyle=e.strokeStyle;for(var n=t.pstyle("width").pfValue,i=0;i+1<r.length;i+=2){var a=[r[i+2]-r[i],r[i+3]-r[i+1]],s=Math.sqrt(a[0]*a[0]+a[1]*a[1]),l=[a[1]/s,-a[0]/s],u=[l[0]*n/2,l[1]*n/2];e.beginPath(),e.moveTo(r[i]-u[0],r[i+1]-u[1]),e.lineTo(r[i]+u[0],r[i+1]+u[1]),e.lineTo(r[i+2],r[i+3]),e.closePath(),e.fill()}};th.drawArrowheads=function(t,e,r){var n=e._private.rscratch,i=n.edgeType==="haystack";i||this.drawArrowhead(t,e,"source",n.arrowStartX,n.arrowStartY,n.srcArrowAngle,r),this.drawArrowhead(t,e,"mid-target",n.midX,n.midY,n.midtgtArrowAngle,r),this.drawArrowhead(t,e,"mid-source",n.midX,n.midY,n.midsrcArrowAngle,r),i||this.drawArrowhead(t,e,"target",n.arrowEndX,n.arrowEndY,n.tgtArrowAngle,r)};th.drawArrowhead=function(t,e,r,n,i,a,s){if(!(isNaN(n)||n==null||isNaN(i)||i==null||isNaN(a)||a==null)){var l=this,u=e.pstyle(r+"-arrow-shape").value;if(u!=="none"){var h=e.pstyle(r+"-arrow-fill").value==="hollow"?"both":"filled",f=e.pstyle(r+"-arrow-fill").value,d=e.pstyle("width").pfValue,p=e.pstyle(r+"-arrow-width"),m=p.value==="match-line"?d:p.pfValue;p.units==="%"&&(m*=d);var g=e.pstyle("opacity").value;s===void 0&&(s=g);var y=t.globalCompositeOperation;(s!==1||f==="hollow")&&(t.globalCompositeOperation="destination-out",l.colorFillStyle(t,255,255,255,1),l.colorStrokeStyle(t,255,255,255,1),l.drawArrowShape(e,t,h,d,u,m,n,i,a),t.globalCompositeOperation=y);var v=e.pstyle(r+"-arrow-color").value;l.colorFillStyle(t,v[0],v[1],v[2],s),l.colorStrokeStyle(t,v[0],v[1],v[2],s),l.drawArrowShape(e,t,f,d,u,m,n,i,a)}}};th.drawArrowShape=function(t,e,r,n,i,a,s,l,u){var h=this,f=this.usePaths()&&i!=="triangle-cross",d=!1,p,m=e,g={x:s,y:l},y=t.pstyle("arrow-scale").value,v=this.getArrowWidth(n,y),x=h.arrowShapes[i];if(f){var b=h.arrowPathCache=h.arrowPathCache||[],w=_f(i),C=b[w];C!=null?(p=e=C,d=!0):(p=e=new Path2D,b[w]=p)}d||(e.beginPath&&e.beginPath(),f?x.draw(e,1,0,{x:0,y:0},1):x.draw(e,v,u,g,n),e.closePath&&e.closePath()),e=m,f&&(e.translate(s,l),e.rotate(u),e.scale(v,v)),(r==="filled"||r==="both")&&(f?e.fill(p):e.fill()),(r==="hollow"||r==="both")&&(e.lineWidth=a/(f?v:1),e.lineJoin="miter",f?e.stroke(p):e.stroke()),f&&(e.scale(1/v,1/v),e.rotate(-u),e.translate(-s,-l))};bB={};bB.safeDrawImage=function(t,e,r,n,i,a,s,l,u,h){if(!(i<=0||a<=0||u<=0||h<=0))try{t.drawImage(e,r,n,i,a,s,l,u,h)}catch(f){un(f)}};bB.drawInscribedImage=function(t,e,r,n,i){var a=this,s=r.position(),l=s.x,u=s.y,h=r.cy().style(),f=h.getIndexedStyle.bind(h),d=f(r,"background-fit","value",n),p=f(r,"background-repeat","value",n),m=r.width(),g=r.height(),y=r.padding()*2,v=m+(f(r,"background-width-relative-to","value",n)==="inner"?0:y),x=g+(f(r,"background-height-relative-to","value",n)==="inner"?0:y),b=r._private.rscratch,w=f(r,"background-clip","value",n),C=w==="node",T=f(r,"background-image-opacity","value",n)*i,E=f(r,"background-image-smoothing","value",n),A=r.pstyle("corner-radius").value;A!=="auto"&&(A=r.pstyle("corner-radius").pfValue);var S=e.width||e.cachedW,_=e.height||e.cachedH;(S==null||_==null)&&(document.body.appendChild(e),S=e.cachedW=e.width||e.offsetWidth,_=e.cachedH=e.height||e.offsetHeight,document.body.removeChild(e));var I=S,D=_;if(f(r,"background-width","value",n)!=="auto"&&(f(r,"background-width","units",n)==="%"?I=f(r,"background-width","pfValue",n)*v:I=f(r,"background-width","pfValue",n)),f(r,"background-height","value",n)!=="auto"&&(f(r,"background-height","units",n)==="%"?D=f(r,"background-height","pfValue",n)*x:D=f(r,"background-height","pfValue",n)),!(I===0||D===0)){if(d==="contain"){var k=Math.min(v/I,x/D);I*=k,D*=k}else if(d==="cover"){var k=Math.max(v/I,x/D);I*=k,D*=k}var L=l-v/2,R=f(r,"background-position-x","units",n),O=f(r,"background-position-x","pfValue",n);R==="%"?L+=(v-I)*O:L+=O;var M=f(r,"background-offset-x","units",n),B=f(r,"background-offset-x","pfValue",n);M==="%"?L+=(v-I)*B:L+=B;var F=u-x/2,P=f(r,"background-position-y","units",n),z=f(r,"background-position-y","pfValue",n);P==="%"?F+=(x-D)*z:F+=z;var $=f(r,"background-offset-y","units",n),H=f(r,"background-offset-y","pfValue",n);$==="%"?F+=(x-D)*H:F+=H,b.pathCache&&(L-=l,F-=u,l=0,u=0);var Q=t.globalAlpha;t.globalAlpha=T;var j=a.getImgSmoothing(t),ie=!1;if(E==="no"&&j?(a.setImgSmoothing(t,!1),ie=!0):E==="yes"&&!j&&(a.setImgSmoothing(t,!0),ie=!0),p==="no-repeat")C&&(t.save(),b.pathCache?t.clip(b.pathCache):(a.nodeShapes[a.getNodeShape(r)].draw(t,l,u,v,x,A,b),t.clip())),a.safeDrawImage(t,e,0,0,S,_,L,F,I,D),C&&t.restore();else{var ne=t.createPattern(e,p);t.fillStyle=ne,a.nodeShapes[a.getNodeShape(r)].draw(t,l,u,v,x,A,b),t.translate(L,F),t.fill(),t.translate(-L,-F)}t.globalAlpha=Q,ie&&a.setImgSmoothing(t,j)}};Yp={};Yp.eleTextBiggerThanMin=function(t,e){if(!e){var r=t.cy().zoom(),n=this.getPixelRatio(),i=Math.ceil(iB(r*n));e=Math.pow(2,i)}var a=t.pstyle("font-size").pfValue*e,s=t.pstyle("min-zoomed-font-size").pfValue;return!(a<s)};Yp.drawElementText=function(t,e,r,n,i){var a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this;if(n==null){if(a&&!s.eleTextBiggerThanMin(e))return}else if(n===!1)return;if(e.isNode()){var l=e.pstyle("label");if(!l||!l.value)return;var u=s.getLabelJustification(e);t.textAlign=u,t.textBaseline="bottom"}else{var h=e.element()._private.rscratch.badLine,f=e.pstyle("label"),d=e.pstyle("source-label"),p=e.pstyle("target-label");if(h||(!f||!f.value)&&(!d||!d.value)&&(!p||!p.value))return;t.textAlign="center",t.textBaseline="bottom"}var m=!r,g;r&&(g=r,t.translate(-g.x1,-g.y1)),i==null?(s.drawText(t,e,null,m,a),e.isEdge()&&(s.drawText(t,e,"source",m,a),s.drawText(t,e,"target",m,a))):s.drawText(t,e,i,m,a),r&&t.translate(g.x1,g.y1)};Yp.getFontCache=function(t){var e;this.fontCaches=this.fontCaches||[];for(var r=0;r<this.fontCaches.length;r++)if(e=this.fontCaches[r],e.context===t)return e;return e={context:t},this.fontCaches.push(e),e};Yp.setupTextStyle=function(t,e){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,n=e.pstyle("font-style").strValue,i=e.pstyle("font-size").pfValue+"px",a=e.pstyle("font-family").strValue,s=e.pstyle("font-weight").strValue,l=r?e.effectiveOpacity()*e.pstyle("text-opacity").value:1,u=e.pstyle("text-outline-opacity").value*l,h=e.pstyle("color").value,f=e.pstyle("text-outline-color").value;t.font=n+" "+s+" "+i+" "+a,t.lineJoin="round",this.colorFillStyle(t,h[0],h[1],h[2],l),this.colorStrokeStyle(t,f[0],f[1],f[2],u)};o(RP,"roundRect");Yp.getTextAngle=function(t,e){var r,n=t._private,i=n.rscratch,a=e?e+"-":"",s=t.pstyle(a+"text-rotation");if(s.strValue==="autorotate"){var l=Gl(i,"labelAngle",e);r=t.isEdge()?l:0}else s.strValue==="none"?r=0:r=s.pfValue;return r};Yp.drawText=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=e._private,s=a.rscratch,l=i?e.effectiveOpacity():1;if(!(i&&(l===0||e.pstyle("text-opacity").value===0))){r==="main"&&(r=null);var u=Gl(s,"labelX",r),h=Gl(s,"labelY",r),f,d,p=this.getLabelText(e,r);if(p!=null&&p!==""&&!isNaN(u)&&!isNaN(h)){this.setupTextStyle(t,e,i);var m=r?r+"-":"",g=Gl(s,"labelWidth",r),y=Gl(s,"labelHeight",r),v=e.pstyle(m+"text-margin-x").pfValue,x=e.pstyle(m+"text-margin-y").pfValue,b=e.isEdge(),w=e.pstyle("text-halign").value,C=e.pstyle("text-valign").value;b&&(w="center",C="center"),u+=v,h+=x;var T;switch(n?T=this.getTextAngle(e,r):T=0,T!==0&&(f=u,d=h,t.translate(f,d),t.rotate(T),u=0,h=0),C){case"top":break;case"center":h+=y/2;break;case"bottom":h+=y;break}var E=e.pstyle("text-background-opacity").value,A=e.pstyle("text-border-opacity").value,S=e.pstyle("text-border-width").pfValue,_=e.pstyle("text-background-padding").pfValue,I=e.pstyle("text-background-shape").strValue,D=I.indexOf("round")===0,k=2;if(E>0||S>0&&A>0){var L=u-_;switch(w){case"left":L-=g;break;case"center":L-=g/2;break}var R=h-y-_,O=g+2*_,M=y+2*_;if(E>0){var B=t.fillStyle,F=e.pstyle("text-background-color").value;t.fillStyle="rgba("+F[0]+","+F[1]+","+F[2]+","+E*l+")",D?RP(t,L,R,O,M,k):t.fillRect(L,R,O,M),t.fillStyle=B}if(S>0&&A>0){var P=t.strokeStyle,z=t.lineWidth,$=e.pstyle("text-border-color").value,H=e.pstyle("text-border-style").value;if(t.strokeStyle="rgba("+$[0]+","+$[1]+","+$[2]+","+A*l+")",t.lineWidth=S,t.setLineDash)switch(H){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"double":t.lineWidth=S/4,t.setLineDash([]);break;case"solid":t.setLineDash([]);break}if(D?RP(t,L,R,O,M,k,"stroke"):t.strokeRect(L,R,O,M),H==="double"){var Q=S/2;D?RP(t,L+Q,R+Q,O-Q*2,M-Q*2,k,"stroke"):t.strokeRect(L+Q,R+Q,O-Q*2,M-Q*2)}t.setLineDash&&t.setLineDash([]),t.lineWidth=z,t.strokeStyle=P}}var j=2*e.pstyle("text-outline-width").pfValue;if(j>0&&(t.lineWidth=j),e.pstyle("text-wrap").value==="wrap"){var ie=Gl(s,"labelWrapCachedLines",r),ne=Gl(s,"labelLineHeight",r),le=g/2,he=this.getLabelJustification(e);switch(he==="auto"||(w==="left"?he==="left"?u+=-g:he==="center"&&(u+=-le):w==="center"?he==="left"?u+=-le:he==="right"&&(u+=le):w==="right"&&(he==="center"?u+=le:he==="right"&&(u+=g))),C){case"top":h-=(ie.length-1)*ne;break;case"center":case"bottom":h-=(ie.length-1)*ne;break}for(var K=0;K<ie.length;K++)j>0&&t.strokeText(ie[K],u,h),t.fillText(ie[K],u,h),h+=ne}else j>0&&t.strokeText(p,u,h),t.fillText(p,u,h);T!==0&&(t.rotate(-T),t.translate(-f,-d))}}};ly={};ly.drawNode=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l,u,h=e._private,f=h.rscratch,d=e.position();if(!(!Ct(d.x)||!Ct(d.y))&&!(a&&!e.visible())){var p=a?e.effectiveOpacity():1,m=s.usePaths(),g,y=!1,v=e.padding();l=e.width()+2*v,u=e.height()+2*v;var x;r&&(x=r,t.translate(-x.x1,-x.y1));for(var b=e.pstyle("background-image"),w=b.value,C=new Array(w.length),T=new Array(w.length),E=0,A=0;A<w.length;A++){var S=w[A],_=C[A]=S!=null&&S!=="none";if(_){var I=e.cy().style().getIndexedStyle(e,"background-image-crossorigin","value",A);E++,T[A]=s.getCachedImage(S,I,function(){h.backgroundTimestamp=Date.now(),e.emitAndNotify("background")})}}var D=e.pstyle("background-blacken").value,k=e.pstyle("border-width").pfValue,L=e.pstyle("background-opacity").value*p,R=e.pstyle("border-color").value,O=e.pstyle("border-style").value,M=e.pstyle("border-join").value,B=e.pstyle("border-cap").value,F=e.pstyle("border-position").value,P=e.pstyle("border-dash-pattern").pfValue,z=e.pstyle("border-dash-offset").pfValue,$=e.pstyle("border-opacity").value*p,H=e.pstyle("outline-width").pfValue,Q=e.pstyle("outline-color").value,j=e.pstyle("outline-style").value,ie=e.pstyle("outline-opacity").value*p,ne=e.pstyle("outline-offset").value,le=e.pstyle("corner-radius").value;le!=="auto"&&(le=e.pstyle("corner-radius").pfValue);var he=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:L;s.eleFillStyle(t,e,oe)},"setupShapeColor"),K=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:$;s.colorStrokeStyle(t,R[0],R[1],R[2],oe)},"setupBorderColor"),X=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ie;s.colorStrokeStyle(t,Q[0],Q[1],Q[2],oe)},"setupOutlineColor"),te=o(function(oe,V,xe,q){var pe=s.nodePathCache=s.nodePathCache||[],ve=cme(xe==="polygon"?xe+","+q.join(","):xe,""+V,""+oe,""+le),Pe=pe[ve],_e,we=!1;return Pe!=null?(_e=Pe,we=!0,f.pathCache=_e):(_e=new Path2D,pe[ve]=f.pathCache=_e),{path:_e,cacheHit:we}},"getPath"),J=e.pstyle("shape").strValue,se=e.pstyle("shape-polygon-points").pfValue;if(m){t.translate(d.x,d.y);var ue=te(l,u,J,se);g=ue.path,y=ue.cacheHit}var Z=o(function(){if(!y){var oe=d;m&&(oe={x:0,y:0}),s.nodeShapes[s.getNodeShape(e)].draw(g||t,oe.x,oe.y,l,u,le,f)}m?t.fill(g):t.fill()},"drawShape"),Se=o(function(){for(var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,V=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,xe=h.backgrounding,q=0,pe=0;pe<T.length;pe++){var ve=e.cy().style().getIndexedStyle(e,"background-image-containment","value",pe);if(V&&ve==="over"||!V&&ve==="inside"){q++;continue}C[pe]&&T[pe].complete&&!T[pe].error&&(q++,s.drawInscribedImage(t,T[pe],e,pe,oe))}h.backgrounding=q!==E,xe!==h.backgrounding&&e.updateStyle(!1)},"drawImages"),ce=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,V=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p;s.hasPie(e)&&(s.drawPie(t,e,V),oe&&(m||s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,le,f)))},"drawPie"),ae=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,V=(D>0?D:-D)*oe,xe=D>0?0:255;D!==0&&(s.colorFillStyle(t,xe,xe,xe,V),m?t.fill(g):t.fill())},"darken"),Oe=o(function(){if(k>0){if(t.lineWidth=k,t.lineCap=B,t.lineJoin=M,t.setLineDash)switch(O){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash(P),t.lineDashOffset=z;break;case"solid":case"double":t.setLineDash([]);break}if(F!=="center"){if(t.save(),t.lineWidth*=2,F==="inside")m?t.clip(g):t.clip();else{var oe=new Path2D;oe.rect(-l/2-k,-u/2-k,l+2*k,u+2*k),oe.addPath(g),t.clip(oe,"evenodd")}m?t.stroke(g):t.stroke(),t.restore()}else m?t.stroke(g):t.stroke();if(O==="double"){t.lineWidth=k/3;var V=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",m?t.stroke(g):t.stroke(),t.globalCompositeOperation=V}t.setLineDash&&t.setLineDash([])}},"drawBorder"),ge=o(function(){if(H>0){if(t.lineWidth=H,t.lineCap="butt",t.setLineDash)switch(j){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"solid":case"double":t.setLineDash([]);break}var oe=d;m&&(oe={x:0,y:0});var V=s.getNodeShape(e),xe=k;F==="inside"&&(xe=0),F==="outside"&&(xe*=2);var q=(l+xe+(H+ne))/l,pe=(u+xe+(H+ne))/u,ve=l*q,Pe=u*pe,_e=s.nodeShapes[V].points,we;if(m){var Ve=te(ve,Pe,V,_e);we=Ve.path}if(V==="ellipse")s.drawEllipsePath(we||t,oe.x,oe.y,ve,Pe);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(V)){var De=0,qe=0,at=0;V==="round-diamond"?De=(xe+ne+H)*1.4:V==="round-heptagon"?(De=(xe+ne+H)*1.075,at=-(xe/2+ne+H)/35):V==="round-hexagon"?De=(xe+ne+H)*1.12:V==="round-pentagon"?(De=(xe+ne+H)*1.13,at=-(xe/2+ne+H)/15):V==="round-tag"?(De=(xe+ne+H)*1.12,qe=(xe/2+H+ne)*.07):V==="round-triangle"&&(De=(xe+ne+H)*(Math.PI/2),at=-(xe+ne/2+H)/Math.PI),De!==0&&(q=(l+De)/l,ve=l*q,["round-hexagon","round-tag"].includes(V)||(pe=(u+De)/u,Pe=u*pe)),le=le==="auto"?bme(ve,Pe):le;for(var Rt=ve/2,st=Pe/2,Ue=le+(xe+H+ne)/2,ct=new Array(_e.length/2),We=new Array(_e.length/2),ot=0;ot<_e.length/2;ot++)ct[ot]={x:oe.x+qe+Rt*_e[ot*2],y:oe.y+at+st*_e[ot*2+1]};var Yt,bt,Mt,xt,ut=ct.length;for(bt=ct[ut-1],Yt=0;Yt<ut;Yt++)Mt=ct[Yt%ut],xt=ct[(Yt+1)%ut],We[Yt]=vB(bt,Mt,xt,Ue),bt=Mt,Mt=xt;s.drawRoundPolygonPath(we||t,oe.x+qe,oe.y+at,l*q,u*pe,_e,We)}else if(["roundrectangle","round-rectangle"].includes(V))le=le==="auto"?Vp(ve,Pe):le,s.drawRoundRectanglePath(we||t,oe.x,oe.y,ve,Pe,le+(xe+H+ne)/2);else if(["cutrectangle","cut-rectangle"].includes(V))le=le==="auto"?sB():le,s.drawCutRectanglePath(we||t,oe.x,oe.y,ve,Pe,null,le+(xe+H+ne)/4);else if(["bottomroundrectangle","bottom-round-rectangle"].includes(V))le=le==="auto"?Vp(ve,Pe):le,s.drawBottomRoundRectanglePath(we||t,oe.x,oe.y,ve,Pe,le+(xe+H+ne)/2);else if(V==="barrel")s.drawBarrelPath(we||t,oe.x,oe.y,ve,Pe);else if(V.startsWith("polygon")||["rhomboid","right-rhomboid","round-tag","tag","vee"].includes(V)){var Et=(xe+H+ne)/l;_e=wS(TS(_e,Et)),s.drawPolygonPath(we||t,oe.x,oe.y,l,u,_e)}else{var ft=(xe+H+ne)/l;_e=wS(TS(_e,-ft)),s.drawPolygonPath(we||t,oe.x,oe.y,l,u,_e)}if(m?t.stroke(we):t.stroke(),j==="double"){t.lineWidth=xe/3;var yt=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",m?t.stroke(we):t.stroke(),t.globalCompositeOperation=yt}t.setLineDash&&t.setLineDash([])}},"drawOutline"),ze=o(function(){i&&s.drawNodeOverlay(t,e,d,l,u)},"drawOverlay"),He=o(function(){i&&s.drawNodeUnderlay(t,e,d,l,u)},"drawUnderlay"),$e=o(function(){s.drawElementText(t,e,null,n)},"drawText"),Re=e.pstyle("ghost").value==="yes";if(Re){var Ie=e.pstyle("ghost-offset-x").pfValue,be=e.pstyle("ghost-offset-y").pfValue,W=e.pstyle("ghost-opacity").value,de=W*p;t.translate(Ie,be),X(),ge(),he(W*L),Z(),Se(de,!0),K(W*$),Oe(),ce(D!==0||k!==0),Se(de,!1),ae(de),t.translate(-Ie,-be)}m&&t.translate(-d.x,-d.y),He(),m&&t.translate(d.x,d.y),X(),ge(),he(),Z(),Se(p,!0),K(),Oe(),ce(D!==0||k!==0),Se(p,!1),ae(),m&&t.translate(-d.x,-d.y),$e(),ze(),r&&t.translate(x.x1,x.y1)}};Ege=o(function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(r,n,i,a,s){var l=this;if(n.visible()){var u=n.pstyle("".concat(e,"-padding")).pfValue,h=n.pstyle("".concat(e,"-opacity")).value,f=n.pstyle("".concat(e,"-color")).value,d=n.pstyle("".concat(e,"-shape")).value,p=n.pstyle("".concat(e,"-corner-radius")).value;if(h>0){if(i=i||n.position(),a==null||s==null){var m=n.padding();a=n.width()+2*m,s=n.height()+2*m}l.colorFillStyle(r,f[0],f[1],f[2],h),l.nodeShapes[d].draw(r,i.x,i.y,a+u*2,s+u*2,p),r.fill()}}}},"drawNodeOverlayUnderlay");ly.drawNodeOverlay=Ege("overlay");ly.drawNodeUnderlay=Ege("underlay");ly.hasPie=function(t){return t=t[0],t._private.hasPie};ly.drawPie=function(t,e,r,n){e=e[0],n=n||e.position();var i=e.cy().style(),a=e.pstyle("pie-size"),s=n.x,l=n.y,u=e.width(),h=e.height(),f=Math.min(u,h)/2,d=0,p=this.usePaths();p&&(s=0,l=0),a.units==="%"?f=f*a.pfValue:a.pfValue!==void 0&&(f=a.pfValue/2);for(var m=1;m<=i.pieBackgroundN;m++){var g=e.pstyle("pie-"+m+"-background-size").value,y=e.pstyle("pie-"+m+"-background-color").value,v=e.pstyle("pie-"+m+"-background-opacity").value*r,x=g/100;x+d>1&&(x=1-d);var b=1.5*Math.PI+2*Math.PI*d,w=2*Math.PI*x,C=b+w;g===0||d>=1||d+x>1||(t.beginPath(),t.moveTo(s,l),t.arc(s,l,f,b,C),t.closePath(),this.colorFillStyle(t,y[0],y[1],y[2],v),t.fill(),d+=x)}};ys={},dZe=100;ys.getPixelRatio=function(){var t=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var e=this.cy.window(),r=t.backingStorePixelRatio||t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return(e.devicePixelRatio||1)/r};ys.paintCache=function(t){for(var e=this.paintCaches=this.paintCaches||[],r=!0,n,i=0;i<e.length;i++)if(n=e[i],n.context===t){r=!1;break}return r&&(n={context:t},e.push(n)),n};ys.createGradientStyleFor=function(t,e,r,n,i){var a,s=this.usePaths(),l=r.pstyle(e+"-gradient-stop-colors").value,u=r.pstyle(e+"-gradient-stop-positions").pfValue;if(n==="radial-gradient")if(r.isEdge()){var h=r.sourceEndpoint(),f=r.targetEndpoint(),d=r.midpoint(),p=Gp(h,d),m=Gp(f,d);a=t.createRadialGradient(d.x,d.y,0,d.x,d.y,Math.max(p,m))}else{var g=s?{x:0,y:0}:r.position(),y=r.paddedWidth(),v=r.paddedHeight();a=t.createRadialGradient(g.x,g.y,0,g.x,g.y,Math.max(y,v))}else if(r.isEdge()){var x=r.sourceEndpoint(),b=r.targetEndpoint();a=t.createLinearGradient(x.x,x.y,b.x,b.y)}else{var w=s?{x:0,y:0}:r.position(),C=r.paddedWidth(),T=r.paddedHeight(),E=C/2,A=T/2,S=r.pstyle("background-gradient-direction").value;switch(S){case"to-bottom":a=t.createLinearGradient(w.x,w.y-A,w.x,w.y+A);break;case"to-top":a=t.createLinearGradient(w.x,w.y+A,w.x,w.y-A);break;case"to-left":a=t.createLinearGradient(w.x+E,w.y,w.x-E,w.y);break;case"to-right":a=t.createLinearGradient(w.x-E,w.y,w.x+E,w.y);break;case"to-bottom-right":case"to-right-bottom":a=t.createLinearGradient(w.x-E,w.y-A,w.x+E,w.y+A);break;case"to-top-right":case"to-right-top":a=t.createLinearGradient(w.x-E,w.y+A,w.x+E,w.y-A);break;case"to-bottom-left":case"to-left-bottom":a=t.createLinearGradient(w.x+E,w.y-A,w.x-E,w.y+A);break;case"to-top-left":case"to-left-top":a=t.createLinearGradient(w.x+E,w.y+A,w.x-E,w.y-A);break}}if(!a)return null;for(var _=u.length===l.length,I=l.length,D=0;D<I;D++)a.addColorStop(_?u[D]:D/(I-1),"rgba("+l[D][0]+","+l[D][1]+","+l[D][2]+","+i+")");return a};ys.gradientFillStyle=function(t,e,r,n){var i=this.createGradientStyleFor(t,"background",e,r,n);if(!i)return null;t.fillStyle=i};ys.colorFillStyle=function(t,e,r,n,i){t.fillStyle="rgba("+e+","+r+","+n+","+i+")"};ys.eleFillStyle=function(t,e,r){var n=e.pstyle("background-fill").value;if(n==="linear-gradient"||n==="radial-gradient")this.gradientFillStyle(t,e,n,r);else{var i=e.pstyle("background-color").value;this.colorFillStyle(t,i[0],i[1],i[2],r)}};ys.gradientStrokeStyle=function(t,e,r,n){var i=this.createGradientStyleFor(t,"line",e,r,n);if(!i)return null;t.strokeStyle=i};ys.colorStrokeStyle=function(t,e,r,n,i){t.strokeStyle="rgba("+e+","+r+","+n+","+i+")"};ys.eleStrokeStyle=function(t,e,r){var n=e.pstyle("line-fill").value;if(n==="linear-gradient"||n==="radial-gradient")this.gradientStrokeStyle(t,e,n,r);else{var i=e.pstyle("line-color").value;this.colorStrokeStyle(t,i[0],i[1],i[2],r)}};ys.matchCanvasSize=function(t){var e=this,r=e.data,n=e.findContainerClientCoords(),i=n[2],a=n[3],s=e.getPixelRatio(),l=e.motionBlurPxRatio;(t===e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_NODE]||t===e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_DRAG])&&(s=l);var u=i*s,h=a*s,f;if(!(u===e.canvasWidth&&h===e.canvasHeight)){e.fontCaches=null;var d=r.canvasContainer;d.style.width=i+"px",d.style.height=a+"px";for(var p=0;p<e.CANVAS_LAYERS;p++)f=r.canvases[p],f.width=u,f.height=h,f.style.width=i+"px",f.style.height=a+"px";for(var p=0;p<e.BUFFER_COUNT;p++)f=r.bufferCanvases[p],f.width=u,f.height=h,f.style.width=i+"px",f.style.height=a+"px";e.textureMult=1,s<=1&&(f=r.bufferCanvases[e.TEXTURE_BUFFER],e.textureMult=2,f.width=u*e.textureMult,f.height=h*e.textureMult),e.canvasWidth=u,e.canvasHeight=h,e.pixelRatio=s}};ys.renderTo=function(t,e,r,n){this.render({forcedContext:t,forcedZoom:e,forcedPan:r,drawAllLayers:!0,forcedPxRatio:n})};ys.clearCanvas=function(){var t=this,e=t.data;function r(n){n.clearRect(0,0,t.canvasWidth,t.canvasHeight)}o(r,"clear"),r(e.contexts[t.NODE]),r(e.contexts[t.DRAG])};ys.render=function(t){var e=this;t=t||dme();var r=e.cy,n=t.forcedContext,i=t.drawAllLayers,a=t.drawOnlyNodeLayer,s=t.forcedZoom,l=t.forcedPan,u=t.forcedPxRatio===void 0?this.getPixelRatio():t.forcedPxRatio,h=e.data,f=h.canvasNeedsRedraw,d=e.textureOnViewport&&!n&&(e.pinching||e.hoverData.dragging||e.swipePanning||e.data.wheelZooming),p=t.motionBlur!==void 0?t.motionBlur:e.motionBlur,m=e.motionBlurPxRatio,g=r.hasCompoundNodes(),y=e.hoverData.draggingEles,v=!!(e.hoverData.selecting||e.touchData.selecting);p=p&&!n&&e.motionBlurEnabled&&!v;var x=p;n||(e.prevPxRatio!==u&&(e.invalidateContainerClientCoordsCache(),e.matchCanvasSize(e.container),e.redrawHint("eles",!0),e.redrawHint("drag",!0)),e.prevPxRatio=u),!n&&e.motionBlurTimeout&&clearTimeout(e.motionBlurTimeout),p&&(e.mbFrames==null&&(e.mbFrames=0),e.mbFrames++,e.mbFrames<3&&(x=!1),e.mbFrames>e.minMbLowQualFrames&&(e.motionBlurPxRatio=e.mbPxRBlurry)),e.clearingMotionBlur&&(e.motionBlurPxRatio=1),e.textureDrawLastFrame&&!d&&(f[e.NODE]=!0,f[e.SELECT_BOX]=!0);var b=r.style(),w=r.zoom(),C=s!==void 0?s:w,T=r.pan(),E={x:T.x,y:T.y},A={zoom:w,pan:{x:T.x,y:T.y}},S=e.prevViewport,_=S===void 0||A.zoom!==S.zoom||A.pan.x!==S.pan.x||A.pan.y!==S.pan.y;!_&&!(y&&!g)&&(e.motionBlurPxRatio=1),l&&(E=l),C*=u,E.x*=u,E.y*=u;var I=e.getCachedZSortedEles();function D(K,X,te,J,se){var ue=K.globalCompositeOperation;K.globalCompositeOperation="destination-out",e.colorFillStyle(K,255,255,255,e.motionBlurTransparency),K.fillRect(X,te,J,se),K.globalCompositeOperation=ue}o(D,"mbclear");function k(K,X){var te,J,se,ue;!e.clearingMotionBlur&&(K===h.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]||K===h.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG])?(te={x:T.x*m,y:T.y*m},J=w*m,se=e.canvasWidth*m,ue=e.canvasHeight*m):(te=E,J=C,se=e.canvasWidth,ue=e.canvasHeight),K.setTransform(1,0,0,1,0,0),X==="motionBlur"?D(K,0,0,se,ue):!n&&(X===void 0||X)&&K.clearRect(0,0,se,ue),i||(K.translate(te.x,te.y),K.scale(J,J)),l&&K.translate(l.x,l.y),s&&K.scale(s,s)}if(o(k,"setContextTransform"),d||(e.textureDrawLastFrame=!1),d){if(e.textureDrawLastFrame=!0,!e.textureCache){e.textureCache={},e.textureCache.bb=r.mutableElements().boundingBox(),e.textureCache.texture=e.data.bufferCanvases[e.TEXTURE_BUFFER];var L=e.data.bufferContexts[e.TEXTURE_BUFFER];L.setTransform(1,0,0,1,0,0),L.clearRect(0,0,e.canvasWidth*e.textureMult,e.canvasHeight*e.textureMult),e.render({forcedContext:L,drawOnlyNodeLayer:!0,forcedPxRatio:u*e.textureMult});var A=e.textureCache.viewport={zoom:r.zoom(),pan:r.pan(),width:e.canvasWidth,height:e.canvasHeight};A.mpan={x:(0-A.pan.x)/A.zoom,y:(0-A.pan.y)/A.zoom}}f[e.DRAG]=!1,f[e.NODE]=!1;var R=h.contexts[e.NODE],O=e.textureCache.texture,A=e.textureCache.viewport;R.setTransform(1,0,0,1,0,0),p?D(R,0,0,A.width,A.height):R.clearRect(0,0,A.width,A.height);var M=b.core("outside-texture-bg-color").value,B=b.core("outside-texture-bg-opacity").value;e.colorFillStyle(R,M[0],M[1],M[2],B),R.fillRect(0,0,A.width,A.height);var w=r.zoom();k(R,!1),R.clearRect(A.mpan.x,A.mpan.y,A.width/A.zoom/u,A.height/A.zoom/u),R.drawImage(O,A.mpan.x,A.mpan.y,A.width/A.zoom/u,A.height/A.zoom/u)}else e.textureOnViewport&&!n&&(e.textureCache=null);var F=r.extent(),P=e.pinching||e.hoverData.dragging||e.swipePanning||e.data.wheelZooming||e.hoverData.draggingEles||e.cy.animated(),z=e.hideEdgesOnViewport&&P,$=[];if($[e.NODE]=!f[e.NODE]&&p&&!e.clearedForMotionBlur[e.NODE]||e.clearingMotionBlur,$[e.NODE]&&(e.clearedForMotionBlur[e.NODE]=!0),$[e.DRAG]=!f[e.DRAG]&&p&&!e.clearedForMotionBlur[e.DRAG]||e.clearingMotionBlur,$[e.DRAG]&&(e.clearedForMotionBlur[e.DRAG]=!0),f[e.NODE]||i||a||$[e.NODE]){var H=p&&!$[e.NODE]&&m!==1,R=n||(H?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]:h.contexts[e.NODE]),Q=p&&!H?"motionBlur":void 0;k(R,Q),z?e.drawCachedNodes(R,I.nondrag,u,F):e.drawLayeredElements(R,I.nondrag,u,F),e.debug&&e.drawDebugPoints(R,I.nondrag),!i&&!p&&(f[e.NODE]=!1)}if(!a&&(f[e.DRAG]||i||$[e.DRAG])){var H=p&&!$[e.DRAG]&&m!==1,R=n||(H?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG]:h.contexts[e.DRAG]);k(R,p&&!H?"motionBlur":void 0),z?e.drawCachedNodes(R,I.drag,u,F):e.drawCachedElements(R,I.drag,u,F),e.debug&&e.drawDebugPoints(R,I.drag),!i&&!p&&(f[e.DRAG]=!1)}if(this.drawSelectionRectangle(t,k),p&&m!==1){var j=h.contexts[e.NODE],ie=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_NODE],ne=h.contexts[e.DRAG],le=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_DRAG],he=o(function(X,te,J){X.setTransform(1,0,0,1,0,0),J||!x?X.clearRect(0,0,e.canvasWidth,e.canvasHeight):D(X,0,0,e.canvasWidth,e.canvasHeight);var se=m;X.drawImage(te,0,0,e.canvasWidth*se,e.canvasHeight*se,0,0,e.canvasWidth,e.canvasHeight)},"drawMotionBlur");(f[e.NODE]||$[e.NODE])&&(he(j,ie,$[e.NODE]),f[e.NODE]=!1),(f[e.DRAG]||$[e.DRAG])&&(he(ne,le,$[e.DRAG]),f[e.DRAG]=!1)}e.prevViewport=A,e.clearingMotionBlur&&(e.clearingMotionBlur=!1,e.motionBlurCleared=!0,e.motionBlur=!0),p&&(e.motionBlurTimeout=setTimeout(function(){e.motionBlurTimeout=null,e.clearedForMotionBlur[e.NODE]=!1,e.clearedForMotionBlur[e.DRAG]=!1,e.motionBlur=!1,e.clearingMotionBlur=!d,e.mbFrames=0,f[e.NODE]=!0,f[e.DRAG]=!0,e.redraw()},dZe)),n||r.emit("render")};ys.drawSelectionRectangle=function(t,e){var r=this,n=r.cy,i=r.data,a=n.style(),s=t.drawOnlyNodeLayer,l=t.drawAllLayers,u=i.canvasNeedsRedraw,h=t.forcedContext;if(r.showFps||!s&&u[r.SELECT_BOX]&&!l){var f=h||i.contexts[r.SELECT_BOX];if(e(f),r.selection[4]==1&&(r.hoverData.selecting||r.touchData.selecting)){var d=r.cy.zoom(),p=a.core("selection-box-border-width").value/d;f.lineWidth=p,f.fillStyle="rgba("+a.core("selection-box-color").value[0]+","+a.core("selection-box-color").value[1]+","+a.core("selection-box-color").value[2]+","+a.core("selection-box-opacity").value+")",f.fillRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]),p>0&&(f.strokeStyle="rgba("+a.core("selection-box-border-color").value[0]+","+a.core("selection-box-border-color").value[1]+","+a.core("selection-box-border-color").value[2]+","+a.core("selection-box-opacity").value+")",f.strokeRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]))}if(i.bgActivePosistion&&!r.hoverData.selecting){var d=r.cy.zoom(),m=i.bgActivePosistion;f.fillStyle="rgba("+a.core("active-bg-color").value[0]+","+a.core("active-bg-color").value[1]+","+a.core("active-bg-color").value[2]+","+a.core("active-bg-opacity").value+")",f.beginPath(),f.arc(m.x,m.y,a.core("active-bg-size").pfValue/d,0,2*Math.PI),f.fill()}var g=r.lastRedrawTime;if(r.showFps&&g){g=Math.round(g);var y=Math.round(1e3/g),v="1 frame = "+g+" ms = "+y+" fps";if(f.setTransform(1,0,0,1,0,0),f.fillStyle="rgba(255, 0, 0, 0.75)",f.strokeStyle="rgba(255, 0, 0, 0.75)",f.font="30px Arial",!Nb){var x=f.measureText(v);Nb=x.actualBoundingBoxAscent}f.fillText(v,0,Nb);var b=60;f.strokeRect(0,Nb+10,250,20),f.fillRect(0,Nb+10,250*Math.min(y/b,1),20)}l||(u[r.SELECT_BOX]=!1)}};o(z0e,"compileShader");o(pZe,"createProgram");o(mZe,"createTextureCanvas");o(wB,"getEffectivePanZoom");o(NP,"modelToRenderedPosition");o(oS,"toWebGLColor");o(lS,"indexToVec4");o(gZe,"vec4ToIndex");o(yZe,"createTexture");o(Sge,"getTypeInfo");o(Cge,"createTypedArray");o(vZe,"createTypedArrayView");o(xZe,"createBufferStaticDraw");o(po,"createBufferDynamicDraw");o(bZe,"createPickingFrameBuffer");G0e=typeof Float32Array<"u"?Float32Array:Array;Math.hypot||(Math.hypot=function(){for(var t=0,e=arguments.length;e--;)t+=arguments[e]*arguments[e];return Math.sqrt(t)});o(Gb,"create");o(Age,"identity");o(wZe,"multiply");o(DS,"translate");o(_ge,"rotate");o(TB,"scale");o(TZe,"projection");Vb={SCREEN:{name:"screen",screen:!0},PICKING:{name:"picking",picking:!0}},Mb=la({getKey:null,drawElement:null,getBoundingBox:null,getRotation:null,getRotationPoint:null,getRotationOffset:null,isVisible:null,getPadding:null}),kZe=function(){function t(e,r){Mf(this,t),this.debugID=Math.floor(Math.random()*1e4),this.r=e,this.atlasSize=r.webglTexSize,this.rows=r.webglTexRows,this.enableWrapping=r.enableWrapping,this.texHeight=Math.floor(this.atlasSize/this.rows),this.maxTexWidth=this.atlasSize,this.texture=null,this.canvas=null,this.needsBuffer=!0,this.freePointer={x:0,row:0},this.keyToLocation=new Map,this.canvas=r.createTextureCanvas(e,this.atlasSize,this.atlasSize),this.scratch=r.createTextureCanvas(e,this.atlasSize,this.texHeight,"scratch")}return o(t,"Atlas"),If(t,[{key:"getKeys",value:o(function(){return new Set(this.keyToLocation.keys())},"getKeys")},{key:"getScale",value:o(function(r){var n=r.w,i=r.h,a=this.texHeight,s=this.maxTexWidth,l=a/i,u=n*l,h=i*l;return u>s&&(l=s/n,u=n*l,h=i*l),{scale:l,texW:u,texH:h}},"getScale")},{key:"draw",value:o(function(r,n,i){var a=this,s=this.atlasSize,l=this.rows,u=this.texHeight,h=this.getScale(n),f=h.scale,d=h.texW,p=h.texH,m=[null,null],g=o(function(w,C){if(i&&C){var T=C.context,E=w.x,A=w.row,S=E,_=u*A;T.save(),T.translate(S,_),T.scale(f,f),i(T,n),T.restore()}},"drawAt"),y=o(function(){g(a.freePointer,a.canvas),m[0]={x:a.freePointer.x,y:a.freePointer.row*u,w:d,h:p},m[1]={x:a.freePointer.x+d,y:a.freePointer.row*u,w:0,h:p},a.freePointer.x+=d,a.freePointer.x==s&&(a.freePointer.x=0,a.freePointer.row++)},"drawNormal"),v=o(function(){var w=a.scratch,C=a.canvas;w.clear(),g({x:0,row:0},w);var T=s-a.freePointer.x,E=d-T,A=u;{var S=a.freePointer.x,_=a.freePointer.row*u,I=T;C.context.drawImage(w,0,0,I,A,S,_,I,A),m[0]={x:S,y:_,w:I,h:p}}{var D=T,k=(a.freePointer.row+1)*u,L=E;C&&C.context.drawImage(w,D,0,L,A,0,k,L,A),m[1]={x:0,y:k,w:L,h:p}}a.freePointer.x=E,a.freePointer.row++},"drawWrapped"),x=o(function(){a.freePointer.x=0,a.freePointer.row++},"moveToStartOfNextRow");if(this.freePointer.x+d<=s)y();else{if(this.freePointer.row>=l-1)return!1;this.freePointer.x===s?(x(),y()):this.enableWrapping?v():(x(),y())}return this.keyToLocation.set(r,m),this.needsBuffer=!0,m},"draw")},{key:"getOffsets",value:o(function(r){return this.keyToLocation.get(r)},"getOffsets")},{key:"isEmpty",value:o(function(){return this.freePointer.x===0&&this.freePointer.row===0},"isEmpty")},{key:"canFit",value:o(function(r){var n=this.atlasSize,i=this.rows,a=this.getScale(r),s=a.texW;return this.freePointer.x+s>n?this.freePointer.row<i-1:!0},"canFit")},{key:"bufferIfNeeded",value:o(function(r){this.texture||(this.texture=yZe(r,this.debugID)),this.needsBuffer&&(this.texture.buffer(this.canvas),this.needsBuffer=!1)},"bufferIfNeeded")},{key:"dispose",value:o(function(){this.texture&&(this.texture.deleteTexture(),this.texture=null,this.needsBuffer=!0)},"dispose")}]),t}(),EZe=function(){function t(e,r){Mf(this,t),this.r=e,this.opts=r,this.keyToIds=new Map,this.idToKey=new Map,this.atlases=[],this.styleKeyToAtlas=new Map,this.styleKeyNeedsRedraw=new Set,this.forceGC=!1}return o(t,"AtlasCollection"),If(t,[{key:"getKeys",value:o(function(){return new Set(this.styleKeyToAtlas.keys())},"getKeys")},{key:"getIdsFor",value:o(function(r){var n=this.keyToIds.get(r);return n||(n=new Set,this.keyToIds.set(r,n)),n},"getIdsFor")},{key:"_createAtlas",value:o(function(){var r=this.r,n=this.opts;return new kZe(r,n)},"_createAtlas")},{key:"_getScratchCanvas",value:o(function(){if(!this.scratch){var r=this.r,n=this.opts,i=n.webglTexSize,a=Math.floor(i/n.webglTexRows);this.scratch=n.createTextureCanvas(r,i,a,"scratch")}return this.scratch},"_getScratchCanvas")},{key:"draw",value:o(function(r,n,i,a){if(this.styleKeyNeedsRedraw.has(n)){this.styleKeyNeedsRedraw.delete(n),this.deleteKey(r,n);var s=this.styleKeyToAtlas.get(n);s&&(s.forceGC=!0),this.styleKeyToAtlas.delete(n)}var l=this.styleKeyToAtlas.get(n);return l||(l=this.atlases[this.atlases.length-1],(!l||!l.canFit(i))&&(l=this._createAtlas(),this.atlases.push(l)),l.draw(n,i,a),this.styleKeyToAtlas.set(n,l),this.getIdsFor(n).add(r),this.idToKey.set(r,n)),l},"draw")},{key:"getAtlas",value:o(function(r){return this.styleKeyToAtlas.get(r)},"getAtlas")},{key:"hasAtlas",value:o(function(r){return this.styleKeyToAtlas.has(r)},"hasAtlas")},{key:"deleteKey",value:o(function(r,n){this.idToKey.delete(r),this.getIdsFor(n).delete(r)},"deleteKey")},{key:"checkKeyIsInvalid",value:o(function(r,n){if(!this.idToKey.has(r))return!1;var i=this.idToKey.get(r);return i!=n?(this.deleteKey(r,i),!0):!1},"checkKeyIsInvalid")},{key:"_getKeysToCollect",value:o(function(){var r=new Set,n=mo(this.styleKeyToAtlas.keys()),i;try{for(n.s();!(i=n.n()).done;){var a=i.value;this.getIdsFor(a).size==0&&r.add(a)}}catch(s){n.e(s)}finally{n.f()}return r},"_getKeysToCollect")},{key:"gc",value:o(function(){var r=this,n=this.atlases.some(function(p){return p.forceGC}),i=this._getKeysToCollect();if(i.size===0&&!n){console.log("nothing to garbage collect");return}var a=[],s=new Map,l=null,u=mo(this.atlases),h;try{var f=o(function(){var m=h.value,g=m.getKeys(),y=SZe(i,g);if(y.size===0&&!m.forceGC)return a.push(m),g.forEach(function(A){return s.set(A,m)}),"continue";l||(l=r._createAtlas(),a.push(l));var v=mo(g),x;try{for(v.s();!(x=v.n()).done;){var b=x.value;if(!y.has(b)){var w=m.getOffsets(b),C=_i(w,2),T=C[0],E=C[1];l.canFit({w:T.w+E.w,h:T.h})||(l=r._createAtlas(),a.push(l)),r._copyTextureToNewAtlas(b,m,l),s.set(b,l)}}}catch(A){v.e(A)}finally{v.f()}},"_loop");for(u.s();!(h=u.n()).done;)var d=f()}catch(p){u.e(p)}finally{u.f()}this.atlases=a,this.styleKeyToAtlas=s},"gc")},{key:"_copyTextureToNewAtlas",value:o(function(r,n,i){var a=n.getOffsets(r),s=_i(a,2),l=s[0],u=s[1];if(u.w===0)i.draw(r,l,function(p){p.drawImage(n.canvas,l.x,l.y,l.w,l.h,0,0,l.w,l.h)});else{var h=this._getScratchCanvas();h.clear(),h.context.drawImage(n.canvas,l.x,l.y,l.w,l.h,0,0,l.w,l.h),h.context.drawImage(n.canvas,u.x,u.y,u.w,u.h,l.w,0,u.w,u.h);var f=l.w+u.w,d=l.h;i.draw(r,{w:f,h:d},function(p){p.drawImage(h,0,0,f,d,0,0,f,d)})}},"_copyTextureToNewAtlas")},{key:"getCounts",value:o(function(){return{keyCount:this.styleKeyToAtlas.size,atlasCount:new Set(this.styleKeyToAtlas.values()).size}},"getCounts")}]),t}();o(SZe,"intersection");CZe=function(){function t(e,r){Mf(this,t),this.r=e;var n=r;this.globalOptions=n,this.maxAtlases=n.webglTexPerBatch,this.atlasSize=n.webglTexSize,this.renderTypes=new Map,this.maxAtlasesPerBatch=r.webglTexPerBatch,this.batchAtlases=[],this._cacheScratchCanvas(n)}return o(t,"AtlasManager"),If(t,[{key:"_cacheScratchCanvas",value:o(function(r){var n=-1,i=-1,a=null,s=r.createTextureCanvas;r.createTextureCanvas=function(l,u,h,f){return f?((!a||u!=n||h!=i)&&(n=u,i=h,a=s(l,u,h)),a):s(l,u,h)}},"_cacheScratchCanvas")},{key:"addRenderType",value:o(function(r,n){var i=new EZe(this.r,this.globalOptions),a=n;this.renderTypes.set(r,rr({type:r,atlasCollection:i},a))},"addRenderType")},{key:"getRenderTypes",value:o(function(){return j0e(this.renderTypes.values())},"getRenderTypes")},{key:"getRenderTypeOpts",value:o(function(r){return this.renderTypes.get(r)},"getRenderTypeOpts")},{key:"invalidate",value:o(function(r){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=n.forceRedraw,a=i===void 0?!1:i,s=n.filterEle,l=s===void 0?function(){return!0}:s,u=n.filterType,h=u===void 0?function(){return!0}:u,f=!1,d=mo(r),p;try{for(d.s();!(p=d.n()).done;){var m=p.value;if(l(m)){var g=m.id(),y=mo(this.getRenderTypes()),v;try{for(y.s();!(v=y.n()).done;){var x=v.value;if(h(x.type)){var b=x.getKey(m);a?(x.atlasCollection.deleteKey(g,b),x.atlasCollection.styleKeyNeedsRedraw.add(b),f=!0):f|=x.atlasCollection.checkKeyIsInvalid(g,b)}}}catch(w){y.e(w)}finally{y.f()}}}}catch(w){d.e(w)}finally{d.f()}return f},"invalidate")},{key:"gc",value:o(function(){var r=mo(this.getRenderTypes()),n;try{for(r.s();!(n=r.n()).done;){var i=n.value;i.atlasCollection.gc()}}catch(a){r.e(a)}finally{r.f()}},"gc")},{key:"isRenderable",value:o(function(r,n){var i=this.getRenderTypeOpts(n);return i&&i.isVisible(r)},"isRenderable")},{key:"startBatch",value:o(function(){this.batchAtlases=[]},"startBatch")},{key:"getAtlasCount",value:o(function(){return this.batchAtlases.length},"getAtlasCount")},{key:"getAtlases",value:o(function(){return this.batchAtlases},"getAtlases")},{key:"getOrCreateAtlas",value:o(function(r,n,i){var a=this.renderTypes.get(i),s=a.getKey(r),l=r.id();return a.atlasCollection.draw(l,s,n,function(u){a.drawElement(u,r,n,!0,!0)})},"getOrCreateAtlas")},{key:"getAtlasIndexForBatch",value:o(function(r){var n=this.batchAtlases.indexOf(r);if(n<0){if(this.batchAtlases.length===this.maxAtlasesPerBatch)return;this.batchAtlases.push(r),n=this.batchAtlases.length-1}return n},"getAtlasIndexForBatch")},{key:"getIndexArray",value:o(function(){return Array.from({length:this.maxAtlases},function(r,n){return n})},"getIndexArray")},{key:"getAtlasInfo",value:o(function(r,n){var i=this.renderTypes.get(n),a=i.getBoundingBox(r),s=this.getOrCreateAtlas(r,a,n),l=this.getAtlasIndexForBatch(s);if(l!==void 0){var u=i.getKey(r),h=s.getOffsets(u),f=_i(h,2),d=f[0],p=f[1];return{atlasID:l,tex:d,tex1:d,tex2:p,bb:a,type:n,styleKey:u}}},"getAtlasInfo")},{key:"canAddToCurrentBatch",value:o(function(r,n){if(this.batchAtlases.length===this.maxAtlasesPerBatch){var i=this.renderTypes.get(n),a=i.getKey(r),s=i.atlasCollection.getAtlas(a);return s&&this.batchAtlases.includes(s)}return!0},"canAddToCurrentBatch")},{key:"setTransformMatrix",value:o(function(r,n,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,s=n.bb,l=n.type,u=n.tex1,h=n.tex2,f=this.getRenderTypeOpts(l),d=f.getPadding?f.getPadding(i):0,p=u.w/(u.w+h.w);a||(p=1-p);var m=this.getAdjustedBB(s,d,a,p),g,y;Age(r);var v=f.getRotation?f.getRotation(i):0;if(v!==0){var x=f.getRotationPoint(i),b=x.x,w=x.y;DS(r,r,[b,w]),_ge(r,r,v);var C=f.getRotationOffset(i);g=C.x+m.xOffset,y=C.y}else g=m.x1,y=m.y1;DS(r,r,[g,y]),TB(r,r,[m.w,m.h])},"setTransformMatrix")},{key:"getTransformMatrix",value:o(function(r,n){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,a=Gb();return this.setTransformMatrix(a,r,n,i),a},"getTransformMatrix")},{key:"getAdjustedBB",value:o(function(r,n,i,a){var s=r.x1,l=r.y1,u=r.w,h=r.h;n&&(s-=n,l-=n,u+=2*n,h+=2*n);var f=0,d=u*a;return i&&a<1?u=d:!i&&a<1&&(f=u-d,s+=f,u=d),{x1:s,y1:l,w:u,h,xOffset:f}},"getAdjustedBB")},{key:"getDebugInfo",value:o(function(){var r=[],n=mo(this.renderTypes),i;try{for(n.s();!(i=n.n()).done;){var a=_i(i.value,2),s=a[0],l=a[1],u=l.atlasCollection.getCounts(),h=u.keyCount,f=u.atlasCount;r.push({type:s,keyCount:h,atlasCount:f})}}catch(d){n.e(d)}finally{n.f()}return r},"getDebugInfo")}]),t}(),MP=0,V0e=1,U0e=2,IP=3,AZe=function(){function t(e,r,n){Mf(this,t),this.r=e,this.gl=r,this.maxInstances=n.webglBatchSize,this.maxAtlases=n.webglTexPerBatch,this.atlasSize=n.webglTexSize,this.bgColor=n.bgColor,n.enableWrapping=!0,n.createTextureCanvas=mZe,this.atlasManager=new CZe(e,n),this.program=this.createShaderProgram(Vb.SCREEN),this.pickingProgram=this.createShaderProgram(Vb.PICKING),this.vao=this.createVAO(),this.debugInfo=[]}return o(t,"ElementDrawingWebGL"),If(t,[{key:"addTextureRenderType",value:o(function(r,n){this.atlasManager.addRenderType(r,n)},"addTextureRenderType")},{key:"invalidate",value:o(function(r){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=n.type,a=this.atlasManager;return i?a.invalidate(r,{filterType:o(function(l){return l===i},"filterType"),forceRedraw:!0}):a.invalidate(r)},"invalidate")},{key:"gc",value:o(function(){this.atlasManager.gc()},"gc")},{key:"createShaderProgram",value:o(function(r){var n=this.gl,i=`#version 300 es
1955 + precision highp float;
1956 +
1957 + uniform mat3 uPanZoomMatrix;
1958 + uniform int uAtlasSize;
1959 +
1960 + // instanced
1961 + in vec2 aPosition;
1962 +
1963 + // what are we rendering?
1964 + in int aVertType;
1965 +
1966 + // for picking
1967 + in vec4 aIndex;
1968 +
1969 + // For textures
1970 + in int aAtlasId; // which shader unit/atlas to use
1971 + in vec4 aTex1; // x/y/w/h of texture in atlas
1972 + in vec4 aTex2;
1973 +
1974 + // for any transforms that are needed
1975 + in vec4 aScaleRotate1; // vectors use fewer attributes than matrices
1976 + in vec2 aTranslate1;
1977 + in vec4 aScaleRotate2;
1978 + in vec2 aTranslate2;
1979 +
1980 + // for edges
1981 + in vec4 aPointAPointB;
1982 + in vec4 aPointCPointD;
1983 + in float aLineWidth;
1984 + in vec4 aEdgeColor;
1985 +
1986 + out vec2 vTexCoord;
1987 + out vec4 vEdgeColor;
1988 + flat out int vAtlasId;
1989 + flat out vec4 vIndex;
1990 + flat out int vVertType;
1991 +
1992 + void main(void) {
1993 + int vid = gl_VertexID;
1994 + vec2 position = aPosition;
1995 +
1996 + if(aVertType == `.concat(MP,`) {
1997 + float texX;
1998 + float texY;
1999 + float texW;
2000 + float texH;
2001 + mat3 texMatrix;
2002 +
2003 + int vid = gl_VertexID;
2004 + if(vid <= 5) {
2005 + texX = aTex1.x;
2006 + texY = aTex1.y;
2007 + texW = aTex1.z;
2008 + texH = aTex1.w;
2009 + texMatrix = mat3(
2010 + vec3(aScaleRotate1.xy, 0.0),
2011 + vec3(aScaleRotate2.zw, 0.0),
2012 + vec3(aTranslate1, 1.0)
2013 + );
2014 + } else {
2015 + texX = aTex2.x;
2016 + texY = aTex2.y;
2017 + texW = aTex2.z;
2018 + texH = aTex2.w;
2019 + texMatrix = mat3(
2020 + vec3(aScaleRotate2.xy, 0.0),
2021 + vec3(aScaleRotate2.zw, 0.0),
2022 + vec3(aTranslate2, 1.0)
2023 + );
2024 + }
2025 +
2026 + if(vid == 1 || vid == 2 || vid == 4 || vid == 7 || vid == 8 || vid == 10) {
2027 + texX += texW;
2028 + }
2029 + if(vid == 2 || vid == 4 || vid == 5 || vid == 8 || vid == 10 || vid == 11) {
2030 + texY += texH;
2031 + }
2032 +
2033 + float d = float(uAtlasSize);
2034 + vTexCoord = vec2(texX / d, texY / d); // tex coords must be between 0 and 1
2035 +
2036 + gl_Position = vec4(uPanZoomMatrix * texMatrix * vec3(position, 1.0), 1.0);
2037 + }
2038 + else if(aVertType == `).concat(V0e,` && vid < 6) {
2039 + vec2 source = aPointAPointB.xy;
2040 + vec2 target = aPointAPointB.zw;
2041 +
2042 + // adjust the geometry so that the line is centered on the edge
2043 + position.y = position.y - 0.5;
2044 +
2045 + vec2 xBasis = target - source;
2046 + vec2 yBasis = normalize(vec2(-xBasis.y, xBasis.x));
2047 + vec2 point = source + xBasis * position.x + yBasis * aLineWidth * position.y;
2048 +
2049 + gl_Position = vec4(uPanZoomMatrix * vec3(point, 1.0), 1.0);
2050 + vEdgeColor = aEdgeColor;
2051 + }
2052 + else if(aVertType == `).concat(U0e,` && vid < 6) {
2053 + vec2 pointA = aPointAPointB.xy;
2054 + vec2 pointB = aPointAPointB.zw;
2055 + vec2 pointC = aPointCPointD.xy;
2056 + vec2 pointD = aPointCPointD.zw;
2057 +
2058 + // adjust the geometry so that the line is centered on the edge
2059 + position.y = position.y - 0.5;
2060 +
2061 + vec2 p0 = pointA;
2062 + vec2 p1 = pointB;
2063 + vec2 p2 = pointC;
2064 + vec2 pos = position;
2065 + if(position.x == 1.0) {
2066 + p0 = pointD;
2067 + p1 = pointC;
2068 + p2 = pointB;
2069 + pos = vec2(0.0, -position.y);
2070 + }
2071 +
2072 + vec2 p01 = p1 - p0;
2073 + vec2 p12 = p2 - p1;
2074 + vec2 p21 = p1 - p2;
2075 +
2076 + // Find the normal vector.
2077 + vec2 tangent = normalize(normalize(p12) + normalize(p01));
2078 + vec2 normal = vec2(-tangent.y, tangent.x);
2079 +
2080 + // Find the vector perpendicular to p0 -> p1.
2081 + vec2 p01Norm = normalize(vec2(-p01.y, p01.x));
2082 +
2083 + // Determine the bend direction.
2084 + float sigma = sign(dot(p01 + p21, normal));
2085 + float width = aLineWidth;
2086 +
2087 + if(sign(pos.y) == -sigma) {
2088 + // This is an intersecting vertex. Adjust the position so that there's no overlap.
2089 + vec2 point = 0.5 * width * normal * -sigma / dot(normal, p01Norm);
2090 + gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0);
2091 + } else {
2092 + // This is a non-intersecting vertex. Treat it like a mitre join.
2093 + vec2 point = 0.5 * width * normal * sigma * dot(normal, p01Norm);
2094 + gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0);
2095 + }
2096 +
2097 + vEdgeColor = aEdgeColor;
2098 + }
2099 + else if(aVertType == `).concat(IP,` && vid < 3) {
2100 + // massage the first triangle into an edge arrow
2101 + if(vid == 0)
2102 + position = vec2(-0.15, -0.3);
2103 + if(vid == 1)
2104 + position = vec2( 0.0, 0.0);
2105 + if(vid == 2)
2106 + position = vec2( 0.15, -0.3);
2107 +
2108 + mat3 transform = mat3(
2109 + vec3(aScaleRotate1.xy, 0.0),
2110 + vec3(aScaleRotate1.zw, 0.0),
2111 + vec3(aTranslate1, 1.0)
2112 + );
2113 + gl_Position = vec4(uPanZoomMatrix * transform * vec3(position, 1.0), 1.0);
2114 + vEdgeColor = aEdgeColor;
2115 + } else {
2116 + gl_Position = vec4(2.0, 0.0, 0.0, 1.0); // discard vertex by putting it outside webgl clip space
2117 + }
2118 +
2119 + vAtlasId = aAtlasId;
2120 + vIndex = aIndex;
2121 + vVertType = aVertType;
2122 + }
2123 + `),a=this.atlasManager.getIndexArray(),s=`#version 300 es
2124 + precision highp float;
2125 +
2126 + // define texture unit for each node in the batch
2127 + `.concat(a.map(function(h){return"uniform sampler2D uTexture".concat(h,";")}).join(`
2128 + `),`
2129 +
2130 + uniform vec4 uBGColor;
2131 +
2132 + in vec2 vTexCoord;
2133 + in vec4 vEdgeColor;
2134 + flat in int vAtlasId;
2135 + flat in vec4 vIndex;
2136 + flat in int vVertType;
2137 +
2138 + out vec4 outColor;
2139 +
2140 + void main(void) {
2141 + if(vVertType == `).concat(MP,`) {
2142 + `).concat(a.map(function(h){return"if(vAtlasId == ".concat(h,") outColor = texture(uTexture").concat(h,", vTexCoord);")}).join(`
2143 + else `),`
2144 + } else if(vVertType == `).concat(IP,`) {
2145 + // blend arrow color with background (using premultiplied alpha)
2146 + outColor.rgb = vEdgeColor.rgb + (uBGColor.rgb * (1.0 - vEdgeColor.a));
2147 + outColor.a = 1.0; // make opaque, masks out line under arrow
2148 + } else {
2149 + outColor = vEdgeColor;
2150 + }
2151 +
2152 + `).concat(r.picking?`if(outColor.a == 0.0) discard;
2153 + else outColor = vIndex;`:"",`
2154 + }
2155 + `),l=pZe(n,i,s);l.aPosition=n.getAttribLocation(l,"aPosition"),l.aIndex=n.getAttribLocation(l,"aIndex"),l.aVertType=n.getAttribLocation(l,"aVertType"),l.aAtlasId=n.getAttribLocation(l,"aAtlasId"),l.aTex1=n.getAttribLocation(l,"aTex1"),l.aTex2=n.getAttribLocation(l,"aTex2"),l.aScaleRotate1=n.getAttribLocation(l,"aScaleRotate1"),l.aTranslate1=n.getAttribLocation(l,"aTranslate1"),l.aScaleRotate2=n.getAttribLocation(l,"aScaleRotate2"),l.aTranslate2=n.getAttribLocation(l,"aTranslate2"),l.aPointAPointB=n.getAttribLocation(l,"aPointAPointB"),l.aPointCPointD=n.getAttribLocation(l,"aPointCPointD"),l.aLineWidth=n.getAttribLocation(l,"aLineWidth"),l.aEdgeColor=n.getAttribLocation(l,"aEdgeColor"),l.uPanZoomMatrix=n.getUniformLocation(l,"uPanZoomMatrix"),l.uAtlasSize=n.getUniformLocation(l,"uAtlasSize"),l.uBGColor=n.getUniformLocation(l,"uBGColor"),l.uTextures=[];for(var u=0;u<this.atlasManager.maxAtlases;u++)l.uTextures.push(n.getUniformLocation(l,"uTexture".concat(u)));return l},"createShaderProgram")},{key:"createVAO",value:o(function(){var r=[0,0,1,0,1,1,0,0,1,1,0,1],n=[].concat(r,r);this.vertexCount=n.length/2;var i=this.maxInstances,a=this.gl,s=this.program,l=a.createVertexArray();return a.bindVertexArray(l),xZe(a,"vec2",s.aPosition,n),this.indexBuffer=po(a,i,"vec4",s.aIndex),this.vertTypeBuffer=po(a,i,"int",s.aVertType),this.atlasIdBuffer=po(a,i,"int",s.aAtlasId),this.tex1Buffer=po(a,i,"vec4",s.aTex1),this.tex2Buffer=po(a,i,"vec4",s.aTex2),this.scaleRotate1Buffer=po(a,i,"vec4",s.aScaleRotate1),this.translate1Buffer=po(a,i,"vec2",s.aTranslate1),this.scaleRotate2Buffer=po(a,i,"vec4",s.aScaleRotate2),this.translate2Buffer=po(a,i,"vec2",s.aTranslate2),this.pointAPointBBuffer=po(a,i,"vec4",s.aPointAPointB),this.pointCPointDBuffer=po(a,i,"vec4",s.aPointCPointD),this.lineWidthBuffer=po(a,i,"float",s.aLineWidth),this.edgeColorBuffer=po(a,i,"vec4",s.aEdgeColor),a.bindVertexArray(null),l},"createVAO")},{key:"buffers",get:o(function(){var r=this;return this._buffers||(this._buffers=Object.keys(this).filter(function(n){return n.endsWith("Buffer")}).map(function(n){return r[n]})),this._buffers},"get")},{key:"startFrame",value:o(function(r,n){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Vb.SCREEN;this.panZoomMatrix=r,this.debugInfo=n,this.renderTarget=i,this.startBatch()},"startFrame")},{key:"startBatch",value:o(function(){this.instanceCount=0,this.atlasManager.startBatch()},"startBatch")},{key:"endFrame",value:o(function(){this.endBatch()},"endFrame")},{key:"getTempMatrix",value:o(function(){return this.tempMatrix=this.tempMatrix||Gb()},"getTempMatrix")},{key:"drawTexture",value:o(function(r,n,i){var a=this.atlasManager;if(a.isRenderable(r,i)){a.canAddToCurrentBatch(r,i)||this.endBatch();var s=this.instanceCount;this.vertTypeBuffer.getView(s)[0]=MP;var l=this.indexBuffer.getView(s);lS(n,l);var u=a.getAtlasInfo(r,i,u),h=u.atlasID,f=u.tex1,d=u.tex2,p=this.atlasIdBuffer.getView(s);p[0]=h;var m=this.tex1Buffer.getView(s);m[0]=f.x,m[1]=f.y,m[2]=f.w,m[3]=f.h;var g=this.tex2Buffer.getView(s);g[0]=d.x,g[1]=d.y,g[2]=d.w,g[3]=d.h;for(var y=this.getTempMatrix(),v=0,x=[1,2];v<x.length;v++){var b=x[v];a.setTransformMatrix(y,u,r,b===1);var w=this["scaleRotate".concat(b,"Buffer")].getView(s);w[0]=y[0],w[1]=y[1],w[2]=y[3],w[3]=y[4];var C=this["translate".concat(b,"Buffer")].getView(s);C[0]=y[6],C[1]=y[7]}this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}},"drawTexture")},{key:"drawEdgeArrow",value:o(function(r,n,i){var a=r._private.rscratch,s,l,u;if(i==="source"?(s=a.arrowStartX,l=a.arrowStartY,u=a.srcArrowAngle):(s=a.arrowEndX,l=a.arrowEndY,u=a.tgtArrowAngle),!(isNaN(s)||s==null||isNaN(l)||l==null||isNaN(u)||u==null)){var h=r.pstyle(i+"-arrow-shape").value;if(h!=="none"){var f=r.pstyle(i+"-arrow-color").value,d=r.pstyle("opacity").value,p=r.pstyle("line-opacity").value,m=d*p,g=r.pstyle("width").pfValue,y=r.pstyle("arrow-scale").value,v=this.r.getArrowWidth(g,y),x=this.getTempMatrix();Age(x),DS(x,x,[s,l]),TB(x,x,[v,v]),_ge(x,x,u);var b=this.instanceCount;this.vertTypeBuffer.getView(b)[0]=IP;var w=this.indexBuffer.getView(b);lS(n,w);var C=this.edgeColorBuffer.getView(b);oS(f,m,C);var T=this.scaleRotate1Buffer.getView(b);T[0]=x[0],T[1]=x[1],T[2]=x[3],T[3]=x[4];var E=this.translate1Buffer.getView(b);E[0]=x[6],E[1]=x[7],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}},"drawEdgeArrow")},{key:"drawEdgeLine",value:o(function(r,n){var i=r.pstyle("opacity").value,a=r.pstyle("line-opacity").value,s=r.pstyle("width").pfValue,l=r.pstyle("line-color").value,u=i*a,h=this.getEdgePoints(r);if(h.length/2+this.instanceCount>this.maxInstances&&this.endBatch(),h.length==4){var f=this.instanceCount;this.vertTypeBuffer.getView(f)[0]=V0e;var d=this.indexBuffer.getView(f);lS(n,d);var p=this.edgeColorBuffer.getView(f);oS(l,u,p);var m=this.lineWidthBuffer.getView(f);m[0]=s;var g=this.pointAPointBBuffer.getView(f);g[0]=h[0],g[1]=h[1],g[2]=h[2],g[3]=h[3],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}else for(var y=0;y<h.length-2;y+=2){var v=this.instanceCount;this.vertTypeBuffer.getView(v)[0]=U0e;var x=this.indexBuffer.getView(v);lS(n,x);var b=this.edgeColorBuffer.getView(v);oS(l,u,b);var w=this.lineWidthBuffer.getView(v);w[0]=s;var C=h[y-2],T=h[y-1],E=h[y],A=h[y+1],S=h[y+2],_=h[y+3],I=h[y+4],D=h[y+5];y==0&&(C=2*E-S+.001,T=2*A-_+.001),y==h.length-4&&(I=2*S-E+.001,D=2*_-A+.001);var k=this.pointAPointBBuffer.getView(v);k[0]=C,k[1]=T,k[2]=E,k[3]=A;var L=this.pointCPointDBuffer.getView(v);L[0]=S,L[1]=_,L[2]=I,L[3]=D,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}},"drawEdgeLine")},{key:"getEdgePoints",value:o(function(r){var n=r._private.rscratch,i=n.allpts;if(i.length==4)return i;var a=this.getNumSegments(r);return this.getCurveSegmentPoints(i,a)},"getEdgePoints")},{key:"getNumSegments",value:o(function(r){var n=15;return Math.min(Math.max(n,5),this.maxInstances)},"getNumSegments")},{key:"getCurveSegmentPoints",value:o(function(r,n){if(r.length==4)return r;for(var i=Array((n+1)*2),a=0;a<=n;a++)if(a==0)i[0]=r[0],i[1]=r[1];else if(a==n)i[a*2]=r[r.length-2],i[a*2+1]=r[r.length-1];else{var s=a/n;this.setCurvePoint(r,s,i,a*2)}return i},"getCurveSegmentPoints")},{key:"setCurvePoint",value:o(function(r,n,i,a){if(r.length<=2)i[a]=r[0],i[a+1]=r[1];else{for(var s=Array(r.length-2),l=0;l<s.length;l+=2){var u=(1-n)*r[l]+n*r[l+2],h=(1-n)*r[l+1]+n*r[l+3];s[l]=u,s[l+1]=h}return this.setCurvePoint(s,n,i,a)}},"setCurvePoint")},{key:"endBatch",value:o(function(){var r=this.gl,n=this.vao,i=this.vertexCount,a=this.instanceCount;if(a!==0){var s=this.renderTarget.picking?this.pickingProgram:this.program;r.useProgram(s),r.bindVertexArray(n);var l=mo(this.buffers),u;try{for(l.s();!(u=l.n()).done;){var h=u.value;h.bufferSubData(a)}}catch(g){l.e(g)}finally{l.f()}for(var f=this.atlasManager.getAtlases(),d=0;d<f.length;d++)f[d].bufferIfNeeded(r);for(var p=0;p<f.length;p++)r.activeTexture(r.TEXTURE0+p),r.bindTexture(r.TEXTURE_2D,f[p].texture),r.uniform1i(s.uTextures[p],p);r.uniformMatrix3fv(s.uPanZoomMatrix,!1,this.panZoomMatrix),r.uniform1i(s.uAtlasSize,this.atlasManager.atlasSize);var m=oS(this.bgColor,1);r.uniform4fv(s.uBGColor,m),r.drawArraysInstanced(r.TRIANGLES,0,i,a),r.bindVertexArray(null),r.bindTexture(r.TEXTURE_2D,null),this.debugInfo&&this.debugInfo.push({count:a,atlasCount:f.length}),this.startBatch()}},"endBatch")},{key:"getDebugInfo",value:o(function(){return this.debugInfo},"getDebugInfo")},{key:"getAtlasDebugInfo",value:o(function(){return this.atlasManager.getDebugInfo()},"getAtlasDebugInfo")}]),t}();o(H0e,"fillStyle");_Ze=function(){function t(e){Mf(this,t),this.r=e}return o(t,"OverlayUnderlayRenderer"),If(t,[{key:"getStyleKey",value:o(function(r,n){var i=this.getStyle(r,n),a=i.shape,s=i.opacity,l=i.color;if(!a)return null;var u=n.width(),h=n.height(),f=H0e(l,s);return _f("".concat(a,"-").concat(u,"-").concat(h,"-").concat(f))},"getStyleKey")},{key:"isVisible",value:o(function(r,n){var i=n.pstyle("".concat(r,"-opacity")).value;return i>0},"isVisible")},{key:"getStyle",value:o(function(r,n){var i=n.pstyle("".concat(r,"-opacity")).value,a=n.pstyle("".concat(r,"-color")).value,s=n.pstyle("".concat(r,"-shape")).value;return{opacity:i,color:a,shape:s}},"getStyle")},{key:"getPadding",value:o(function(r,n){return n.pstyle("".concat(r,"-padding")).pfValue},"getPadding")},{key:"draw",value:o(function(r,n,i,a){if(this.isVisible(r,i)){var s=this.r,l=a.w,u=a.h,h=l/2,f=u/2,d=this.getStyle(r,i),p=d.shape,m=d.color,g=d.opacity;n.save(),n.fillStyle=H0e(m,g),p==="round-rectangle"||p==="roundrectangle"?s.drawRoundRectanglePath(n,h,f,l,u,"auto"):p==="ellipse"&&s.drawEllipsePath(n,h,f,l,u),n.fill(),n.restore()}},"draw")}]),t}();o(DZe,"getBGColor");Dge={};Dge.initWebgl=function(t,e){var r=this,n=r.data.contexts[r.WEBGL],i=t.cy.container();t.bgColor=DZe(i),t.webglTexSize=Math.min(t.webglTexSize,n.getParameter(n.MAX_TEXTURE_SIZE)),t.webglTexRows=Math.min(t.webglTexRows,54),t.webglBatchSize=Math.min(t.webglBatchSize,16384),t.webglTexPerBatch=Math.min(t.webglTexPerBatch,n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS)),r.webglDebug=t.webglDebug,r.webglDebugShowAtlases=t.webglDebugShowAtlases,console.log("max texture units",n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS)),console.log("max texture size",n.getParameter(n.MAX_TEXTURE_SIZE)),console.log("webgl options",t),r.pickingFrameBuffer=bZe(n),r.pickingFrameBuffer.needsDraw=!0;var a=o(function(f){return r.getTextAngle(f,null)},"getLabelRotation"),s=o(function(f){var d=f.pstyle("label");return d&&d.value},"isLabelVisible");r.eleDrawing=new AZe(r,n,t);var l=new _Ze(r);r.eleDrawing.addTextureRenderType("node-body",Mb({getKey:e.getStyleKey,getBoundingBox:e.getElementBox,drawElement:e.drawElement,isVisible:o(function(f){return f.visible()},"isVisible")})),r.eleDrawing.addTextureRenderType("node-label",Mb({getKey:e.getLabelKey,getBoundingBox:e.getLabelBox,drawElement:e.drawLabel,getRotation:a,getRotationPoint:e.getLabelRotationPoint,getRotationOffset:e.getLabelRotationOffset,isVisible:s})),r.eleDrawing.addTextureRenderType("node-overlay",Mb({getBoundingBox:e.getElementBox,getKey:o(function(f){return l.getStyleKey("overlay",f)},"getKey"),drawElement:o(function(f,d,p){return l.draw("overlay",f,d,p)},"drawElement"),isVisible:o(function(f){return l.isVisible("overlay",f)},"isVisible"),getPadding:o(function(f){return l.getPadding("overlay",f)},"getPadding")})),r.eleDrawing.addTextureRenderType("node-underlay",Mb({getBoundingBox:e.getElementBox,getKey:o(function(f){return l.getStyleKey("underlay",f)},"getKey"),drawElement:o(function(f,d,p){return l.draw("underlay",f,d,p)},"drawElement"),isVisible:o(function(f){return l.isVisible("underlay",f)},"isVisible"),getPadding:o(function(f){return l.getPadding("underlay",f)},"getPadding")})),r.eleDrawing.addTextureRenderType("edge-label",Mb({getKey:e.getLabelKey,getBoundingBox:e.getLabelBox,drawElement:e.drawLabel,getRotation:a,getRotationPoint:e.getLabelRotationPoint,getRotationOffset:e.getLabelRotationOffset,isVisible:s}));var u=n4(function(){console.log("garbage collect flag set"),r.data.gc=!0},1e4);r.onUpdateEleCalcs(function(h,f){var d=!1;f&&f.length>0&&(d|=r.eleDrawing.invalidate(f)),d&&u()}),LZe(r)};o(LZe,"overrideCanvasRendererFunctions");o(RZe,"clearWebgl");o(NZe,"clearCanvas");o(MZe,"createPanZoomMatrix");o(Lge,"setContextTransform");o(IZe,"drawSelectionRectangle");o(OZe,"drawAxes");o(PZe,"drawAtlases");o(BZe,"getPickingIndexes");o(FZe,"findNearestElementsWebgl");o(Rge,"renderWebgl");Pf={};Pf.drawPolygonPath=function(t,e,r,n,i,a){var s=n/2,l=i/2;t.beginPath&&t.beginPath(),t.moveTo(e+s*a[0],r+l*a[1]);for(var u=1;u<a.length/2;u++)t.lineTo(e+s*a[u*2],r+l*a[u*2+1]);t.closePath()};Pf.drawRoundPolygonPath=function(t,e,r,n,i,a,s){s.forEach(function(l){return hge(t,l)}),t.closePath()};Pf.drawRoundRectanglePath=function(t,e,r,n,i,a){var s=n/2,l=i/2,u=a==="auto"?Vp(n,i):Math.min(a,l,s);t.beginPath&&t.beginPath(),t.moveTo(e,r-l),t.arcTo(e+s,r-l,e+s,r,u),t.arcTo(e+s,r+l,e,r+l,u),t.arcTo(e-s,r+l,e-s,r,u),t.arcTo(e-s,r-l,e,r-l,u),t.lineTo(e,r-l),t.closePath()};Pf.drawBottomRoundRectanglePath=function(t,e,r,n,i,a){var s=n/2,l=i/2,u=a==="auto"?Vp(n,i):a;t.beginPath&&t.beginPath(),t.moveTo(e,r-l),t.lineTo(e+s,r-l),t.lineTo(e+s,r),t.arcTo(e+s,r+l,e,r+l,u),t.arcTo(e-s,r+l,e-s,r,u),t.lineTo(e-s,r-l),t.lineTo(e,r-l),t.closePath()};Pf.drawCutRectanglePath=function(t,e,r,n,i,a,s){var l=n/2,u=i/2,h=s==="auto"?sB():s;t.beginPath&&t.beginPath(),t.moveTo(e-l+h,r-u),t.lineTo(e+l-h,r-u),t.lineTo(e+l,r-u+h),t.lineTo(e+l,r+u-h),t.lineTo(e+l-h,r+u),t.lineTo(e-l+h,r+u),t.lineTo(e-l,r+u-h),t.lineTo(e-l,r-u+h),t.closePath()};Pf.drawBarrelPath=function(t,e,r,n,i){var a=n/2,s=i/2,l=e-a,u=e+a,h=r-s,f=r+s,d=BP(n,i),p=d.widthOffset,m=d.heightOffset,g=d.ctrlPtOffsetPct*p;t.beginPath&&t.beginPath(),t.moveTo(l,h+m),t.lineTo(l,f-m),t.quadraticCurveTo(l+g,f,l+p,f),t.lineTo(u-p,f),t.quadraticCurveTo(u-g,f,u,f-m),t.lineTo(u,h+m),t.quadraticCurveTo(u-g,h,u-p,h),t.lineTo(l+p,h),t.quadraticCurveTo(l+g,h,l,h+m),t.closePath()};W0e=Math.sin(0),q0e=Math.cos(0),jP={},KP={},Nge=Math.PI/40;for(Ip=0*Math.PI;Ip<2*Math.PI;Ip+=Nge)jP[Ip]=Math.sin(Ip),KP[Ip]=Math.cos(Ip);Pf.drawEllipsePath=function(t,e,r,n,i){if(t.beginPath&&t.beginPath(),t.ellipse)t.ellipse(e,r,n/2,i/2,0,0,2*Math.PI);else for(var a,s,l=n/2,u=i/2,h=0*Math.PI;h<2*Math.PI;h+=Nge)a=e-l*jP[h]*W0e+l*KP[h]*q0e,s=r+u*KP[h]*W0e+u*jP[h]*q0e,h===0?t.moveTo(a,s):t.lineTo(a,s);t.closePath()};c4={};c4.createBuffer=function(t,e){var r=document.createElement("canvas");return r.width=t,r.height=e,[r,r.getContext("2d")]};c4.bufferCanvasImage=function(t){var e=this.cy,r=e.mutableElements(),n=r.boundingBox(),i=this.findContainerClientCoords(),a=t.full?Math.ceil(n.w):i[2],s=t.full?Math.ceil(n.h):i[3],l=Ct(t.maxWidth)||Ct(t.maxHeight),u=this.getPixelRatio(),h=1;if(t.scale!==void 0)a*=t.scale,s*=t.scale,h=t.scale;else if(l){var f=1/0,d=1/0;Ct(t.maxWidth)&&(f=h*t.maxWidth/a),Ct(t.maxHeight)&&(d=h*t.maxHeight/s),h=Math.min(f,d),a*=h,s*=h}l||(a*=u,s*=u,h*=u);var p=document.createElement("canvas");p.width=a,p.height=s,p.style.width=a+"px",p.style.height=s+"px";var m=p.getContext("2d");if(a>0&&s>0){m.clearRect(0,0,a,s),m.globalCompositeOperation="source-over";var g=this.getCachedZSortedEles();if(t.full)m.translate(-n.x1*h,-n.y1*h),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(n.x1*h,n.y1*h);else{var y=e.pan(),v={x:y.x*h,y:y.y*h};h*=e.zoom(),m.translate(v.x,v.y),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(-v.x,-v.y)}t.bg&&(m.globalCompositeOperation="destination-over",m.fillStyle=t.bg,m.rect(0,0,a,s),m.fill())}return p};o($Ze,"b64ToBlob");o(Y0e,"b64UriToB64");o(Mge,"output");c4.png=function(t){return Mge(t,this.bufferCanvasImage(t),"image/png")};c4.jpg=function(t){return Mge(t,this.bufferCanvasImage(t),"image/jpeg")};Ige={};Ige.nodeShapeImpl=function(t,e,r,n,i,a,s,l){switch(t){case"ellipse":return this.drawEllipsePath(e,r,n,i,a);case"polygon":return this.drawPolygonPath(e,r,n,i,a,s);case"round-polygon":return this.drawRoundPolygonPath(e,r,n,i,a,s,l);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(e,r,n,i,a,l);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(e,r,n,i,a,s,l);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(e,r,n,i,a,l);case"barrel":return this.drawBarrelPath(e,r,n,i,a)}};zZe=Oge,Er=Oge.prototype;Er.CANVAS_LAYERS=3;Er.SELECT_BOX=0;Er.DRAG=1;Er.NODE=2;Er.WEBGL=3;Er.CANVAS_TYPES=["2d","2d","2d","webgl2"];Er.BUFFER_COUNT=3;Er.TEXTURE_BUFFER=0;Er.MOTIONBLUR_BUFFER_NODE=1;Er.MOTIONBLUR_BUFFER_DRAG=2;o(Oge,"CanvasRenderer");Er.redrawHint=function(t,e){var r=this;switch(t){case"eles":r.data.canvasNeedsRedraw[Er.NODE]=e;break;case"drag":r.data.canvasNeedsRedraw[Er.DRAG]=e;break;case"select":r.data.canvasNeedsRedraw[Er.SELECT_BOX]=e;break;case"gc":r.data.gc=!0;break}};GZe=typeof Path2D<"u";Er.path2dEnabled=function(t){if(t===void 0)return this.pathsEnabled;this.pathsEnabled=!!t};Er.usePaths=function(){return GZe&&this.pathsEnabled};Er.setImgSmoothing=function(t,e){t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled=e:(t.webkitImageSmoothingEnabled=e,t.mozImageSmoothingEnabled=e,t.msImageSmoothingEnabled=e)};Er.getImgSmoothing=function(t){return t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled:t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled};Er.makeOffscreenCanvas=function(t,e){var r;if((typeof OffscreenCanvas>"u"?"undefined":Wi(OffscreenCanvas))!=="undefined")r=new OffscreenCanvas(t,e);else{var n=this.cy.window(),i=n.document;r=i.createElement("canvas"),r.width=t,r.height=e}return r};[Tge,Qc,th,bB,Yp,ly,ys,Dge,Pf,c4,Ige].forEach(function(t){rr(Er,t)});VZe=[{name:"null",impl:lge},{name:"base",impl:vge},{name:"canvas",impl:zZe}],UZe=[{type:"layout",extensions:SQe},{type:"renderer",extensions:VZe}],Pge={},Bge={};o(Fge,"setExtension");o($ge,"getExtension");o(HZe,"setModule");o(WZe,"getModule");QP=o(function(){if(arguments.length===2)return $ge.apply(null,arguments);if(arguments.length===3)return Fge.apply(null,arguments);if(arguments.length===4)return WZe.apply(null,arguments);if(arguments.length===5)return HZe.apply(null,arguments);ai("Invalid extension access syntax")},"extension");Jb.prototype.extension=QP;UZe.forEach(function(t){t.extensions.forEach(function(e){Fge(t.type,e.name,e.impl)})});zge=o(function t(){if(!(this instanceof t))return new t;this.length=0},"Stylesheet"),Wp=zge.prototype;Wp.instanceString=function(){return"stylesheet"};Wp.selector=function(t){var e=this.length++;return this[e]={selector:t,properties:[]},this};Wp.css=function(t,e){var r=this.length-1;if(Zt(t))this[r].properties.push({name:t,value:e});else if(Ur(t))for(var n=t,i=Object.keys(n),a=0;a<i.length;a++){var s=i[a],l=n[s];if(l!=null){var u=Fa.properties[s]||Fa.properties[LS(s)];if(u!=null){var h=u.name,f=l;this[r].properties.push({name:h,value:f})}}}return this};Wp.style=Wp.css;Wp.generateStyle=function(t){var e=new Fa(t);return this.appendToStyle(e)};Wp.appendToStyle=function(t){for(var e=0;e<this.length;e++){var r=this[e],n=r.selector,i=r.properties;t.selector(n);for(var a=0;a<i.length;a++){var s=i[a];t.css(s.name,s.value)}}return t};qZe="3.31.0",rl=o(function(e){if(e===void 0&&(e={}),Ur(e))return new Jb(e);if(Zt(e))return QP.apply(QP,arguments)},"cytoscape");rl.use=function(t){var e=Array.prototype.slice.call(arguments,1);return e.unshift(rl),t.apply(null,e),this};rl.warnings=function(t){return hme(t)};rl.version=qZe;rl.stylesheet=rl.Stylesheet=zge});var SB=Mi((u4,EB)=>{"use strict";o(function(e,r){typeof u4=="object"&&typeof EB=="object"?EB.exports=r():typeof define=="function"&&define.amd?define([],r):typeof u4=="object"?u4.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(u4,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=26)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(4);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;y<g.length;y++)p=g[y],m=p.withChildren(),m.forEach(function(v){d.add(v)});return d},h.prototype.getNoOfChildren=function(){var d=0,p;if(this.child==null)d=1;else for(var m=this.child.getNodes(),g=0;g<m.length;g++)p=m[g],d+=p.getNoOfChildren();return d==0&&(d=1),d},h.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},h.prototype.calcEstimatedSize=function(){return this.child==null?this.estimatedSize=(this.rect.width+this.rect.height)/2:(this.estimatedSize=this.child.calcEstimatedSize(),this.rect.width=this.estimatedSize,this.rect.height=this.estimatedSize,this.estimatedSize)},h.prototype.scatter=function(){var d,p,m=-s.INITIAL_WORLD_BOUNDARY,g=s.INITIAL_WORLD_BOUNDARY;d=s.WORLD_CENTER_X+l.nextDouble()*(g-m)+m;var y=-s.INITIAL_WORLD_BOUNDARY,v=s.INITIAL_WORLD_BOUNDARY;p=s.WORLD_CENTER_Y+l.nextDouble()*(v-y)+y,this.rect.x=d,this.rect.y=p},h.prototype.updateBounds=function(){if(this.getChild()==null)throw"assert failed";if(this.getChild().getNodes().length!=0){var d=this.getChild();if(d.updateBounds(!0),this.rect.x=d.getLeft(),this.rect.y=d.getTop(),this.setWidth(d.getRight()-d.getLeft()),this.setHeight(d.getBottom()-d.getTop()),s.NODE_DIMENSIONS_INCLUDE_LABELS){var p=d.getRight()-d.getLeft(),m=d.getBottom()-d.getTop();this.labelWidth>p&&(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)),this.labelHeight>m&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-m)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-m),this.setHeight(this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(6),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,w=0;w<b;w++)x=v[w],x.isInterGraph?this.graphManager.remove(x):x.source.owner.remove(x);var C=this.nodes.indexOf(y);if(C==-1)throw"Node not in owner node list!";this.nodes.splice(C,1)}else if(g instanceof u){var x=g;if(x==null)throw"Edge is null!";if(!(x.source!=null&&x.target!=null))throw"Source and/or target is null!";if(!(x.source.owner!=null&&x.target.owner!=null&&x.source.owner==this&&x.target.owner==this))throw"Source and/or target owner is invalid!";var T=x.source.edges.indexOf(x),E=x.target.edges.indexOf(x);if(!(T>-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(T,1),x.target!=x.source&&x.target.edges.splice(E,1);var C=x.source.owner.getEdges().indexOf(x);if(C==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(C,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,w=this.getNodes(),C=w.length,T=0;T<C;T++){var E=w[T];v=E.getTop(),x=E.getLeft(),g>v&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(w[0].getParent().paddingLeft!=null?b=w[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,C,T,E,A,S=this.nodes,_=S.length,I=0;I<_;I++){var D=S[I];g&&D.child!=null&&D.updateBounds(),w=D.getLeft(),C=D.getRight(),T=D.getTop(),E=D.getBottom(),y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var k=new h(y,x,v-y,b-x);y==i.MAX_VALUE&&(this.left=this.parent.getLeft(),this.right=this.parent.getRight(),this.top=this.parent.getTop(),this.bottom=this.parent.getBottom()),S[0].getParent().paddingLeft!=null?A=S[0].getParent().paddingLeft:A=this.margin,this.left=k.x-A,this.right=k.x+k.width+A,this.top=k.y-A,this.bottom=k.y+k.height+A},p.calculateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,C,T,E,A=g.length,S=0;S<A;S++){var _=g[S];w=_.getLeft(),C=_.getRight(),T=_.getTop(),E=_.getBottom(),y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var I=new h(y,x,v-y,b-x);return I},p.prototype.getInclusionTreeDepth=function(){return this==this.graphManager.getRoot()?1:this.parent.getInclusionTreeDepth()},p.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},p.prototype.calcEstimatedSize=function(){for(var g=0,y=this.nodes,v=y.length,x=0;x<v;x++){var b=y[x];g+=b.calcEstimatedSize()}return g==0?this.estimatedSize=a.EMPTY_COMPOUND_NODE_SIZE:this.estimatedSize=g/Math.sqrt(this.nodes.length),this.estimatedSize},p.prototype.updateConnected=function(){var g=this;if(this.nodes.length==0){this.isConnected=!0;return}var y=new d,v=new Set,x=this.nodes[0],b,w,C=x.withChildren();for(C.forEach(function(I){y.push(I),v.add(I)});y.length!==0;){x=y.shift(),b=x.getEdges();for(var T=b.length,E=0;E<T;E++){var A=b[E];if(w=A.getOtherEndInGraph(x,this),w!=null&&!v.has(w)){var S=w.withChildren();S.forEach(function(I){y.push(I),v.add(I)})}}}if(this.isConnected=!1,v.size>=this.nodes.length){var _=0;v.forEach(function(I){I.owner==g&&_++}),_==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(5),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d<f;d++)h=u[d],l.remove(h);var p=[];p=p.concat(l.getNodes());var m;f=p.length;for(var d=0;d<f;d++)m=p[d],l.remove(m);l==this.rootGraph&&this.setRootGraph(null);var g=this.graphs.indexOf(l);this.graphs.splice(g,1),l.parent=null}else if(s instanceof i){if(h=s,h==null)throw"Edge is null!";if(!h.isInterGraph)throw"Not an inter-graph edge!";if(!(h.source!=null&&h.target!=null))throw"Source and/or target is null!";if(!(h.source.edges.indexOf(h)!=-1&&h.target.edges.indexOf(h)!=-1))throw"Source and/or target doesn't know this edge!";var g=h.source.edges.indexOf(h);if(h.source.edges.splice(g,1),g=h.target.edges.indexOf(h),h.target.edges.splice(g,1),!(h.source.owner!=null&&h.source.owner.getGraphManager()!=null))throw"Edge owner graph or owner graph manager is null!";if(h.source.owner.getGraphManager().edges.indexOf(h)==-1)throw"Not in owner graph manager's edge list!";var g=h.source.owner.getGraphManager().edges.indexOf(h);h.source.owner.getGraphManager().edges.splice(g,1)}},a.prototype.updateBounds=function(){this.rootGraph.updateBounds(!0)},a.prototype.getGraphs=function(){return this.graphs},a.prototype.getAllNodes=function(){if(this.allNodes==null){for(var s=[],l=this.getGraphs(),u=l.length,h=0;h<u;h++)s=s.concat(l[h].getNodes());this.allNodes=s}return this.allNodes},a.prototype.resetAllNodes=function(){this.allNodes=null},a.prototype.resetAllEdges=function(){this.allEdges=null},a.prototype.resetAllNodesToApplyGravitation=function(){this.allNodesToApplyGravitation=null},a.prototype.getAllEdges=function(){if(this.allEdges==null){for(var s=[],l=this.getGraphs(),u=l.length,h=0;h<l.length;h++)s=s.concat(l[h].getEdges());s=s.concat(this.edges),this.allEdges=s}return this.allEdges},a.prototype.getAllNodesToApplyGravitation=function(){return this.allNodesToApplyGravitation},a.prototype.setAllNodesToApplyGravitation=function(s){if(this.allNodesToApplyGravitation!=null)throw"assert failed";this.allNodesToApplyGravitation=s},a.prototype.getRoot=function(){return this.rootGraph},a.prototype.setRootGraph=function(s){if(s.getGraphManager()!=this)throw"Root not in this graph mgr!";this.rootGraph=s,s.parent==null&&(s.parent=this.layout.newNode("Root node"))},a.prototype.getLayout=function(){return this.layout},a.prototype.isOneAncestorOfOther=function(s,l){if(!(s!=null&&l!=null))throw"assert failed";if(s==l)return!0;var u=s.getOwner(),h;do{if(h=u.getParent(),h==null)break;if(h==l)return!0;if(u=h.getOwner(),u==null)break}while(!0);u=l.getOwner();do{if(h=u.getParent(),h==null)break;if(h==s)return!0;if(u=h.getOwner(),u==null)break}while(!0);return!1},a.prototype.calcLowestCommonAncestors=function(){for(var s,l,u,h,f,d=this.getAllEdges(),p=d.length,m=0;m<p;m++){if(s=d[m],l=s.source,u=s.target,s.lca=null,s.sourceInLca=l,s.targetInLca=u,l==u){s.lca=l.getOwner();continue}for(h=l.getOwner();s.lca==null;){for(s.targetInLca=u,f=u.getOwner();s.lca==null;){if(f==h){s.lca=f;break}if(f==this.rootGraph)break;if(s.lca!=null)throw"assert failed";s.targetInLca=f.getParent(),f=s.targetInLca.getOwner()}if(h==this.rootGraph)break;s.lca==null&&(s.sourceInLca=h.getParent(),h=s.sourceInLca.getOwner())}if(s.lca==null)throw"assert failed"}},a.prototype.calcLowestCommonAncestor=function(s,l){if(s==l)return s.getOwner();var u=s.getOwner();do{if(u==null)break;var h=l.getOwner();do{if(h==null)break;if(h==u)return h;h=h.getParent().getOwner()}while(!0);u=u.getParent().getOwner()}while(!0);return u},a.prototype.calcInclusionTreeDepths=function(s,l){s==null&&l==null&&(s=this.rootGraph,l=1);for(var u,h=s.getNodes(),f=h.length,d=0;d<f;d++)u=h[d],u.inclusionTreeDepth=l,u.child!=null&&this.calcInclusionTreeDepths(u.child,l+1)},a.prototype.includesInvalidEdge=function(){for(var s,l=this.edges.length,u=0;u<l;u++)if(s=this.edges[u],this.isOneAncestorOfOther(s.source,s.target))return!0;return!1},t.exports=a},function(t,e,r){"use strict";var n=r(0);function i(){}o(i,"FDLayoutConstants");for(var a in n)i[a]=n[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=i.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,t.exports=i},function(t,e,r){"use strict";var n=r(12);function i(){}o(i,"IGeometry"),i.calcSeparationAmount=function(a,s,l,u){if(!a.intersects(s))throw"assert failed";var h=new Array(2);this.decideDirectionsForOverlappingNodes(a,s,h),l[0]=Math.min(a.getRight(),s.getRight())-Math.max(a.x,s.x),l[1]=Math.min(a.getBottom(),s.getBottom())-Math.max(a.y,s.y),a.getX()<=s.getX()&&a.getRight()>=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]<p?p=l[0]:d=l[1],l[0]=-1*h[0]*(p/2+u),l[1]=-1*h[1]*(d/2+u)},i.decideDirectionsForOverlappingNodes=function(a,s,l){a.getCenterX()<s.getCenterX()?l[0]=-1:l[0]=1,a.getCenterY()<s.getCenterY()?l[1]=-1:l[1]=1},i.getIntersection2=function(a,s,l){var u=a.getCenterX(),h=a.getCenterY(),f=s.getCenterX(),d=s.getCenterY();if(a.intersects(s))return l[0]=u,l[1]=h,l[2]=f,l[3]=d,!0;var p=a.getX(),m=a.getY(),g=a.getRight(),y=a.getX(),v=a.getBottom(),x=a.getRight(),b=a.getWidthHalf(),w=a.getHeightHalf(),C=s.getX(),T=s.getY(),E=s.getRight(),A=s.getX(),S=s.getBottom(),_=s.getRight(),I=s.getWidthHalf(),D=s.getHeightHalf(),k=!1,L=!1;if(u===f){if(h>d)return l[0]=u,l[1]=m,l[2]=f,l[3]=S,!1;if(h<d)return l[0]=u,l[1]=v,l[2]=f,l[3]=T,!1}else if(h===d){if(u>f)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(u<f)return l[0]=g,l[1]=h,l[2]=C,l[3]=d,!1}else{var R=a.height/a.width,O=s.height/s.width,M=(d-h)/(f-u),B=void 0,F=void 0,P=void 0,z=void 0,$=void 0,H=void 0;if(-R===M?u>f?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):R===M&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-O===M?f>u?(l[2]=A,l[3]=S,L=!0):(l[2]=E,l[3]=T,L=!0):O===M&&(f>u?(l[2]=C,l[3]=T,L=!0):(l[2]=_,l[3]=S,L=!0)),k&&L)return!1;if(u>f?h>d?(B=this.getCardinalDirection(R,M,4),F=this.getCardinalDirection(O,M,2)):(B=this.getCardinalDirection(-R,M,3),F=this.getCardinalDirection(-O,M,1)):h>d?(B=this.getCardinalDirection(-R,M,1),F=this.getCardinalDirection(-O,M,3)):(B=this.getCardinalDirection(R,M,2),F=this.getCardinalDirection(O,M,4)),!k)switch(B){case 1:z=m,P=u+-w/M,l[0]=P,l[1]=z;break;case 2:P=x,z=h+b*M,l[0]=P,l[1]=z;break;case 3:z=v,P=u+w/M,l[0]=P,l[1]=z;break;case 4:P=y,z=h+-b*M,l[0]=P,l[1]=z;break}if(!L)switch(F){case 1:H=T,$=f+-D/M,l[2]=$,l[3]=H;break;case 2:$=_,H=d+I*M,l[2]=$,l[3]=H;break;case 3:H=S,$=f+D/M,l[2]=$,l[3]=H;break;case 4:$=A,H=d+-I*M,l[2]=$,l[3]=H;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,w=void 0,C=void 0,T=void 0,E=void 0,A=void 0,S=void 0,_=void 0;return w=p-f,T=h-d,A=d*f-h*p,C=v-g,E=m-y,S=y*g-m*v,_=w*E-C*T,_===0?null:(x=(T*S-E*A)/_,b=(C*A-w*S)/_,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l<a?h+=Math.PI:u<s&&(h+=this.TWO_PI)):u<s?h=this.ONE_AND_HALF_PI:h=this.HALF_PI,h},i.doIntersect=function(a,s,l,u){var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=(d-h)*(v-g)-(y-m)*(p-f);if(x===0)return!1;var b=((v-g)*(y-h)+(m-y)*(v-f))/x,w=((f-p)*(y-h)+(d-h)*(v-f))/x;return 0<b&&b<1&&0<w&&w<1},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,t.exports=i},function(t,e,r){"use strict";function n(){}o(n,"IMath"),n.sign=function(i){return i>0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p<d.length;p++){var m=d[p];m.enumerable=m.enumerable||!1,m.configurable=!0,"value"in m&&(m.writable=!0),Object.defineProperty(f,m.key,m)}}return o(h,"defineProperties"),function(f,d,p){return d&&h(f.prototype,d),p&&h(f,p),f}}();function i(h,f){if(!(h instanceof f))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=o(function(f){return{value:f,next:null,prev:null}},"nodeFrom"),s=o(function(f,d,p,m){return f!==null?f.next=d:m.head=d,p!==null?p.prev=d:m.tail=d,d.prev=f,d.next=p,m.length++,d},"add"),l=o(function(f,d){var p=f.prev,m=f.next;return p!==null?p.next=m:d.head=m,m!==null?m.prev=p:d.tail=p,f.prev=f.next=null,d.length--,f},"_remove"),u=function(){function h(f){var d=this;i(this,h),this.length=0,this.head=null,this.tail=null,f?.forEach(function(p){return d.push(p)})}return o(h,"LinkedList"),n(h,[{key:"size",value:o(function(){return this.length},"size")},{key:"insertBefore",value:o(function(d,p){return s(p.prev,a(d),p,this)},"insertBefore")},{key:"insertAfter",value:o(function(d,p){return s(p,a(d),p.next,this)},"insertAfter")},{key:"insertNodeBefore",value:o(function(d,p){return s(p.prev,d,p,this)},"insertNodeBefore")},{key:"insertNodeAfter",value:o(function(d,p){return s(p,d,p.next,this)},"insertNodeAfter")},{key:"push",value:o(function(d){return s(this.tail,a(d),null,this)},"push")},{key:"unshift",value:o(function(d){return s(null,a(d),this.head,this)},"unshift")},{key:"remove",value:o(function(d){return l(d,this)},"remove")},{key:"pop",value:o(function(){return l(this.tail,this).value},"pop")},{key:"popNode",value:o(function(){return l(this.tail,this)},"popNode")},{key:"shift",value:o(function(){return l(this.head,this).value},"shift")},{key:"shiftNode",value:o(function(){return l(this.head,this)},"shiftNode")},{key:"get_object_at",value:o(function(d){if(d<=this.length()){for(var p=1,m=this.head;p<d;)m=m.next,p++;return m.value}},"get_object_at")},{key:"set_object_at",value:o(function(d,p){if(d<=this.length()){for(var m=1,g=this.head;m<d;)g=g.next,m++;g.value=p}},"set_object_at")}]),h}();t.exports=u},function(t,e,r){"use strict";function n(i,a,s){this.x=null,this.y=null,i==null&&a==null&&s==null?(this.x=0,this.y=0):typeof i=="number"&&typeof a=="number"&&s==null?(this.x=i,this.y=a):i.constructor.name=="Point"&&a==null&&s==null&&(s=i,this.x=s.x,this.y=s.y)}o(n,"Point"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.getLocation=function(){return new n(this.x,this.y)},n.prototype.setLocation=function(i,a,s){i.constructor.name=="Point"&&a==null&&s==null?(s=i,this.setLocation(s.x,s.y)):typeof i=="number"&&typeof a=="number"&&s==null&&(parseInt(i)==i&&parseInt(a)==a?this.move(i,a):(this.x=Math.floor(i+.5),this.y=Math.floor(a+.5)))},n.prototype.move=function(i,a){this.x=i,this.y=a},n.prototype.translate=function(i,a){this.x+=i,this.y+=a},n.prototype.equals=function(i){if(i.constructor.name=="Point"){var a=i;return this.x==a.x&&this.y==a.y}return this==i},n.prototype.toString=function(){return new n().constructor.name+"[x="+this.x+",y="+this.y+"]"},t.exports=n},function(t,e,r){"use strict";function n(i,a,s,l){this.x=0,this.y=0,this.width=0,this.height=0,i!=null&&a!=null&&s!=null&&l!=null&&(this.x=i,this.y=a,this.width=s,this.height=l)}o(n,"RectangleD"),n.prototype.getX=function(){return this.x},n.prototype.setX=function(i){this.x=i},n.prototype.getY=function(){return this.y},n.prototype.setY=function(i){this.y=i},n.prototype.getWidth=function(){return this.width},n.prototype.setWidth=function(i){this.width=i},n.prototype.getHeight=function(){return this.height},n.prototype.setHeight=function(i){this.height=i},n.prototype.getRight=function(){return this.x+this.width},n.prototype.getBottom=function(){return this.y+this.height},n.prototype.intersects=function(i){return!(this.getRight()<i.x||this.getBottom()<i.y||i.getRight()<this.x||i.getBottom()<this.y)},n.prototype.getCenterX=function(){return this.x+this.width/2},n.prototype.getMinX=function(){return this.getX()},n.prototype.getMaxX=function(){return this.getX()+this.width},n.prototype.getCenterY=function(){return this.y+this.height/2},n.prototype.getMinY=function(){return this.getY()},n.prototype.getMaxY=function(){return this.getY()+this.height},n.prototype.getWidthHalf=function(){return this.width/2},n.prototype.getHeightHalf=function(){return this.height/2},t.exports=n},function(t,e,r){"use strict";var n=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(a){return typeof a}:function(a){return a&&typeof Symbol=="function"&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};function i(){}o(i,"UniqueIDGeneretor"),i.lastID=0,i.createID=function(a){return i.isPrimitive(a)?a:(a.uniqueID!=null||(a.uniqueID=i.getString(),i.lastID++),a.uniqueID)},i.getString=function(a){return a==null&&(a=i.lastID),"Object#"+a},i.isPrimitive=function(a){var s=typeof a>"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g<m.length;g++)y[g]=m[g];return y}else return Array.from(m)}o(n,"_toConsumableArray");var i=r(0),a=r(6),s=r(3),l=r(1),u=r(5),h=r(4),f=r(17),d=r(27);function p(m){d.call(this),this.layoutQuality=i.QUALITY,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.incremental=i.DEFAULT_INCREMENTAL,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES,this.edgeToDummyNodes=new Map,this.graphManager=new a(this),this.isLayoutFinished=!1,this.isSubLayout=!1,this.isRemoteUse=!1,m!=null&&(this.isRemoteUse=m)}o(p,"Layout"),p.RANDOM_SEED=1,p.prototype=Object.create(d.prototype),p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getAllNodes=function(){return this.graphManager.getAllNodes()},p.prototype.getAllEdges=function(){return this.graphManager.getAllEdges()},p.prototype.getAllNodesToApplyGravitation=function(){return this.graphManager.getAllNodesToApplyGravitation()},p.prototype.newGraphManager=function(){var m=new a(this);return this.graphManager=m,m},p.prototype.newGraph=function(m){return new u(null,this.graphManager,m)},p.prototype.newNode=function(m){return new s(this.graphManager,m)},p.prototype.newEdge=function(m){return new l(null,null,m)},p.prototype.checkLayoutSuccess=function(){return this.graphManager.getRoot()==null||this.graphManager.getRoot().getNodes().length==0||this.graphManager.includesInvalidEdge()},p.prototype.runLayout=function(){this.isLayoutFinished=!1,this.tilingPreLayout&&this.tilingPreLayout(),this.initParameters();var m;return this.checkLayoutSuccess()?m=!1:m=this.layout(),i.ANIMATE==="during"?!1:(m&&(this.isSubLayout||this.doPostLayout()),this.tilingPostLayout&&this.tilingPostLayout(),this.isLayoutFinished=!0,m)},p.prototype.doPostLayout=function(){this.incremental||this.transform(),this.update()},p.prototype.update2=function(){if(this.createBendsAsNeeded&&(this.createBendpointsFromDummyNodes(),this.graphManager.resetAllEdges()),!this.isRemoteUse){for(var m,g=this.graphManager.getAllEdges(),y=0;y<g.length;y++)m=g[y];for(var v,x=this.graphManager.getRoot().getNodes(),y=0;y<x.length;y++)v=x[y];this.update(this.graphManager.getRoot())}},p.prototype.update=function(m){if(m==null)this.update2();else if(m instanceof s){var g=m;if(g.getChild()!=null)for(var y=g.getChild().getNodes(),v=0;v<y.length;v++)update(y[v]);if(g.vGraphObject!=null){var x=g.vGraphObject;x.update(g)}}else if(m instanceof l){var b=m;if(b.vGraphObject!=null){var w=b.vGraphObject;w.update(b)}}else if(m instanceof u){var C=m;if(C.vGraphObject!=null){var T=C.vGraphObject;T.update(C)}}},p.prototype.initParameters=function(){this.isSubLayout||(this.layoutQuality=i.QUALITY,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.incremental=i.DEFAULT_INCREMENTAL,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES),this.animationDuringLayout&&(this.animationOnLayout=!1)},p.prototype.transform=function(m){if(m==null)this.transform(new h(0,0));else{var g=new f,y=this.graphManager.getRoot().updateLeftTop();if(y!=null){g.setWorldOrgX(m.x),g.setWorldOrgY(m.y),g.setDeviceOrgX(y.x),g.setDeviceOrgY(y.y);for(var v=this.getAllNodes(),x,b=0;b<v.length;b++)x=v[b],x.transform(g)}}},p.prototype.positionNodesRandomly=function(m){if(m==null)this.positionNodesRandomly(this.getGraphManager().getRoot()),this.getGraphManager().getRoot().updateBounds(!0);else for(var g,y,v=m.getNodes(),x=0;x<v.length;x++)g=v[x],y=g.getChild(),y==null||y.getNodes().length==0?g.scatter():(this.positionNodesRandomly(y),g.updateBounds())},p.prototype.getFlatForest=function(){for(var m=[],g=!0,y=this.graphManager.getRoot().getNodes(),v=!0,x=0;x<y.length;x++)y[x].getChild()!=null&&(v=!1);if(!v)return m;var b=new Set,w=[],C=new Map,T=[];for(T=T.concat(y);T.length>0&&g;){for(w.push(T[0]);w.length>0&&g;){var E=w[0];w.splice(0,1),b.add(E);for(var A=E.getEdges(),x=0;x<A.length;x++){var S=A[x].getOtherEnd(E);if(C.get(E)!=S)if(!b.has(S))w.push(S),C.set(S,E);else{g=!1;break}}}if(!g)m=[];else{var _=[].concat(n(b));m.push(_);for(var x=0;x<_.length;x++){var I=_[x],D=T.indexOf(I);D>-1&&T.splice(D,1)}b=new Set,C=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x<m.bendpoints.length;x++){var b=this.newNode(null);b.setRect(new Point(0,0),new Dimension(1,1)),v.add(b);var w=this.newEdge(null);this.graphManager.add(w,y,b),g.add(b),y=b}var w=this.newEdge(null);return this.graphManager.add(w,y,m.target),this.edgeToDummyNodes.set(m,g),m.isInterGraph()?this.graphManager.remove(m):v.remove(m),g},p.prototype.createBendpointsFromDummyNodes=function(){var m=[];m=m.concat(this.graphManager.getAllEdges()),m=[].concat(n(this.edgeToDummyNodes.keys())).concat(m);for(var g=0;g<m.length;g++){var y=m[g];if(y.bendpoints.length>0){for(var v=this.edgeToDummyNodes.get(y),x=0;x<v.length;x++){var b=v[x],w=new h(b.getCenterX(),b.getCenterY()),C=y.bendpoints.get(x);C.x=w.x,C.y=w.y,b.getOwner().remove(b)}this.graphManager.add(y,y.source,y.target)}}},p.transform=function(m,g,y,v){if(y!=null&&v!=null){var x=g;if(m<=50){var b=g/y;x-=(g-b)/50*(50-m)}else{var w=g*v;x+=(w-g)/50*(m-50)}return x}else{var C,T;return m<=50?(C=9*g/500,T=g/10):(C=9*g/50,T=-8*g),C*m+T}},p.findCenterOfTree=function(m){var g=[];g=g.concat(m);var y=[],v=new Map,x=!1,b=null;(g.length==1||g.length==2)&&(x=!0,b=g[0]);for(var w=0;w<g.length;w++){var C=g[w],T=C.getNeighborsList().size;v.set(C,C.getNeighborsList().size),T==1&&y.push(C)}var E=[];for(E=E.concat(y);!x;){var A=[];A=A.concat(E),E=[];for(var w=0;w<g.length;w++){var C=g[w],S=g.indexOf(C);S>=0&&g.splice(S,1);var _=C.getNeighborsList();_.forEach(function(k){if(y.indexOf(k)<0){var L=v.get(k),R=L-1;R==1&&E.push(k),v.set(k,R)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(4);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);p<d.length;p++)m[p]=d[p];return m}else return Array.from(d)}o(n,"_toConsumableArray");var i=r(15),a=r(7),s=r(0),l=r(8),u=r(9);function h(){i.call(this),this.useSmartIdealEdgeLengthCalculation=a.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.idealEdgeLength=a.DEFAULT_EDGE_LENGTH,this.springConstant=a.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=a.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=a.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=a.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.coolingFactor=a.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.initialCoolingFactor=a.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.totalDisplacement=0,this.oldTotalDisplacement=0,this.maxIterations=a.MAX_ITERATIONS}o(h,"FDLayout"),h.prototype=Object.create(i.prototype);for(var f in i)h[f]=i[f];h.prototype.initParameters=function(){i.prototype.initParameters.call(this,arguments),this.totalIterations=0,this.notAnimatedIterations=0,this.useFRGridVariant=a.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION,this.grid=[]},h.prototype.calcIdealEdgeLengths=function(){for(var d,p,m,g,y,v,x=this.getGraphManager().getAllEdges(),b=0;b<x.length;b++)d=x[b],d.idealLength=this.idealEdgeLength,d.isInterGraph&&(m=d.getSource(),g=d.getTarget(),y=d.getSourceInLca().getEstimatedSize(),v=d.getTargetInLca().getEstimatedSize(),this.useSmartIdealEdgeLengthCalculation&&(d.idealLength+=y+v-2*s.SIMPLE_NODE_SIZE),p=d.getLca().getInclusionTreeDepth(),d.idealLength+=a.DEFAULT_EDGE_LENGTH*a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR*(m.getInclusionTreeDepth()+g.getInclusionTreeDepth()-2*p))},h.prototype.initSpringEmbedder=function(){var d=this.getAllNodes().length;this.incremental?(d>a.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m<d.length;m++)p=d[m],this.calcSpringForce(p,p.idealLength)},h.prototype.calcRepulsionForces=function(){var d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;m<x.length;m++)y=x[m],this.calculateRepulsionForceOfANode(y,b,d,p),b.add(y);else for(m=0;m<x.length;m++)for(y=x[m],g=m+1;g<x.length;g++)v=x[g],y.getOwner()==v.getOwner()&&this.calcRepulsionForce(y,v)},h.prototype.calcGravitationalForces=function(){for(var d,p=this.getAllNodesToApplyGravitation(),m=0;m<p.length;m++)d=p[m],this.calcGravitationalForce(d)},h.prototype.moveNodes=function(){for(var d=this.getAllNodes(),p,m=0;m<d.length;m++)p=d[m],p.move()},h.prototype.calcSpringForce=function(d,p){var m=d.getSource(),g=d.getTarget(),y,v,x,b;if(this.uniformLeafNodeSizes&&m.getChild()==null&&g.getChild()==null)d.updateLengthSimple();else if(d.updateLength(),d.isOverlapingSourceAndTarget)return;y=d.getLength(),y!=0&&(v=this.springConstant*(y-p),x=v*(d.lengthX/y),b=v*(d.lengthY/y),m.springForceX+=x,m.springForceY+=b,g.springForceX-=x,g.springForceY-=b)},h.prototype.calcRepulsionForce=function(d,p){var m=d.getRect(),g=p.getRect(),y=new Array(2),v=new Array(4),x,b,w,C,T,E,A;if(m.intersects(g)){l.calcSeparationAmount(m,g,y,a.DEFAULT_EDGE_LENGTH/2),E=2*y[0],A=2*y[1];var S=d.noOfChildren*p.noOfChildren/(d.noOfChildren+p.noOfChildren);d.repulsionForceX-=S*E,d.repulsionForceY-=S*A,p.repulsionForceX+=S*E,p.repulsionForceY+=S*A}else this.uniformLeafNodeSizes&&d.getChild()==null&&p.getChild()==null?(x=g.getCenterX()-m.getCenterX(),b=g.getCenterY()-m.getCenterY()):(l.getIntersection(m,g,v),x=v[2]-v[0],b=v[3]-v[1]),Math.abs(x)<a.MIN_REPULSION_DIST&&(x=u.sign(x)*a.MIN_REPULSION_DIST),Math.abs(b)<a.MIN_REPULSION_DIST&&(b=u.sign(b)*a.MIN_REPULSION_DIST),w=x*x+b*b,C=Math.sqrt(w),T=this.repulsionConstant*d.noOfChildren*p.noOfChildren/w,E=T*x/C,A=T*b/C,d.repulsionForceX-=E,d.repulsionForceY-=A,p.repulsionForceX+=E,p.repulsionForceY+=A},h.prototype.calcGravitationalForce=function(d){var p,m,g,y,v,x,b,w;p=d.getOwner(),m=(p.getRight()+p.getLeft())/2,g=(p.getTop()+p.getBottom())/2,y=d.getCenterX()-m,v=d.getCenterY()-g,x=Math.abs(y)+d.getWidth()/2,b=Math.abs(v)+d.getHeight()/2,d.getOwner()==this.graphManager.getRoot()?(w=p.getEstimatedSize()*this.gravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(w=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement<this.totalDisplacementThreshold,this.oldTotalDisplacement=this.totalDisplacement,d||p},h.prototype.animate=function(){this.animationDuringLayout&&!this.isSubLayout&&(this.notAnimatedIterations==this.animationPeriod?(this.update(),this.notAnimatedIterations=0):this.notAnimatedIterations++)},h.prototype.calcNoOfChildrenForAllNodes=function(){for(var d,p=this.graphManager.getAllNodes(),m=0;m<p.length;m++)d=p[m],d.noOfChildren=d.getNoOfChildren()},h.prototype.calcGrid=function(d){var p=0,m=0;p=parseInt(Math.ceil((d.getRight()-d.getLeft())/this.repulsionRange)),m=parseInt(Math.ceil((d.getBottom()-d.getTop())/this.repulsionRange));for(var g=new Array(p),y=0;y<p;y++)g[y]=new Array(m);for(var y=0;y<p;y++)for(var v=0;v<m;v++)g[y][v]=new Array;return g},h.prototype.addNodeToGrid=function(d,p,m){var g=0,y=0,v=0,x=0;g=parseInt(Math.floor((d.getRect().x-p)/this.repulsionRange)),y=parseInt(Math.floor((d.getRect().width+d.getRect().x-p)/this.repulsionRange)),v=parseInt(Math.floor((d.getRect().y-m)/this.repulsionRange)),x=parseInt(Math.floor((d.getRect().height+d.getRect().y-m)/this.repulsionRange));for(var b=g;b<=y;b++)for(var w=v;w<=x;w++)this.grid[b][w].push(d),d.setGridCoordinates(g,y,v,x)},h.prototype.updateGrid=function(){var d,p,m=this.getAllNodes();for(this.grid=this.calcGrid(this.graphManager.getRoot()),d=0;d<m.length;d++)p=m[d],this.addNodeToGrid(p,this.graphManager.getRoot().getLeft(),this.graphManager.getRoot().getTop())},h.prototype.calculateRepulsionForceOfANode=function(d,p,m,g){if(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&m||g){var y=new Set;d.surrounding=new Array;for(var v,x=this.grid,b=d.startX-1;b<d.finishX+2;b++)for(var w=d.startY-1;w<d.finishY+2;w++)if(!(b<0||w<0||b>=x.length||w>=x[0].length)){for(var C=0;C<x[b][w].length;C++)if(v=x[b][w][C],!(d.getOwner()!=v.getOwner()||d==v)&&!p.has(v)&&!y.has(v)){var T=Math.abs(d.getCenterX()-v.getCenterX())-(d.getWidth()/2+v.getWidth()/2),E=Math.abs(d.getCenterY()-v.getCenterY())-(d.getHeight()/2+v.getHeight()/2);T<=this.repulsionRange&&E<=this.repulsionRange&&y.add(v)}}d.surrounding=[].concat(n(y))}for(b=0;b<d.surrounding.length;b++)this.calcRepulsionForce(d,d.surrounding[b])},h.prototype.calcRepulsionRange=function(){return 0},t.exports=h},function(t,e,r){"use strict";var n=r(1),i=r(7);function a(l,u,h){n.call(this,l,u,h),this.idealLength=i.DEFAULT_EDGE_LENGTH}o(a,"FDLayoutEdge"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];t.exports=a},function(t,e,r){"use strict";var n=r(3);function i(s,l,u,h){n.call(this,s,l,u,h),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0,this.startX=0,this.finishX=0,this.startY=0,this.finishY=0,this.surrounding=[]}o(i,"FDLayoutNode"),i.prototype=Object.create(n.prototype);for(var a in n)i[a]=n[a];i.prototype.setGridCoordinates=function(s,l,u,h){this.startX=s,this.finishX=l,this.startY=u,this.finishY=h},t.exports=i},function(t,e,r){"use strict";function n(i,a){this.width=0,this.height=0,i!==null&&a!==null&&(this.height=a,this.width=i)}o(n,"DimensionD"),n.prototype.getWidth=function(){return this.width},n.prototype.setWidth=function(i){this.width=i},n.prototype.getHeight=function(){return this.height},n.prototype.setHeight=function(i){this.height=i},t.exports=n},function(t,e,r){"use strict";var n=r(14);function i(){this.map={},this.keys=[]}o(i,"HashMap"),i.prototype.put=function(a,s){var l=n.createID(a);this.contains(l)||(this.map[l]=s,this.keys.push(a))},i.prototype.contains=function(a){var s=n.createID(a);return this.map[a]!=null},i.prototype.get=function(a){var s=n.createID(a);return this.map[s]},i.prototype.keySet=function(){return this.keys},t.exports=i},function(t,e,r){"use strict";var n=r(14);function i(){this.set={}}o(i,"HashSet"),i.prototype.add=function(a){var s=n.createID(a);this.contains(s)||(this.set[s]=a)},i.prototype.remove=function(a){delete this.set[n.createID(a)]},i.prototype.clear=function(){this.set={}},i.prototype.contains=function(a){return this.set[n.createID(a)]==a},i.prototype.isEmpty=function(){return this.size()===0},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAllTo=function(a){for(var s=Object.keys(this.set),l=s.length,u=0;u<l;u++)a.push(this.set[s[u]])},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAll=function(a){for(var s=a.length,l=0;l<s;l++){var u=a[l];this.add(u)}},t.exports=i},function(t,e,r){"use strict";var n=function(){function l(u,h){for(var f=0;f<h.length;f++){var d=h[f];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(u,d.key,d)}}return o(l,"defineProperties"),function(u,h,f){return h&&l(u.prototype,h),f&&l(u,f),u}}();function i(l,u){if(!(l instanceof u))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=r(11),s=function(){function l(u,h){i(this,l),(h!==null||h!==void 0)&&(this.compareFunction=this._defaultCompareFunction);var f=void 0;u instanceof a?f=u.size():f=u.length,this._quicksort(u,0,f-1)}return o(l,"Quicksort"),n(l,[{key:"_quicksort",value:o(function(h,f,d){if(f<d){var p=this._partition(h,f,d);this._quicksort(h,f,p),this._quicksort(h,p+1,d)}},"_quicksort")},{key:"_partition",value:o(function(h,f,d){for(var p=this._get(h,f),m=f,g=d;;){for(;this.compareFunction(p,this._get(h,g));)g--;for(;this.compareFunction(this._get(h,m),p);)m++;if(m<g)this._swap(h,m,g),m++,g--;else return g}},"_partition")},{key:"_get",value:o(function(h,f){return h instanceof a?h.get_object_at(f):h[f]},"_get")},{key:"_set",value:o(function(h,f,d){h instanceof a?h.set_object_at(f,d):h[f]=d},"_set")},{key:"_swap",value:o(function(h,f,d){var p=this._get(h,f);this._set(h,f,this._get(h,d)),this._set(h,d,p)},"_swap")},{key:"_defaultCompareFunction",value:o(function(h,f){return f>h},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h<u.length;h++){var f=u[h];f.enumerable=f.enumerable||!1,f.configurable=!0,"value"in f&&(f.writable=!0),Object.defineProperty(l,f.key,f)}}return o(s,"defineProperties"),function(l,u,h){return u&&s(l.prototype,u),h&&s(l,h),l}}();function i(s,l){if(!(s instanceof l))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=function(){function s(l,u){var h=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p<this.iMax;p++){this.grid[p]=new Array(this.jMax);for(var m=0;m<this.jMax;m++)this.grid[p][m]=0}this.tracebackGrid=new Array(this.iMax);for(var g=0;g<this.iMax;g++){this.tracebackGrid[g]=new Array(this.jMax);for(var y=0;y<this.jMax;y++)this.tracebackGrid[g][y]=[null,null,null]}this.alignments=[],this.score=-1,this.computeGrids()}return o(s,"NeedlemanWunsch"),n(s,[{key:"getScore",value:o(function(){return this.score},"getScore")},{key:"getAlignments",value:o(function(){return this.alignments},"getAlignments")},{key:"computeGrids",value:o(function(){for(var u=1;u<this.jMax;u++)this.grid[0][u]=this.grid[0][u-1]+this.gap_penalty,this.tracebackGrid[0][u]=[!1,!1,!0];for(var h=1;h<this.iMax;h++)this.grid[h][0]=this.grid[h-1][0]+this.gap_penalty,this.tracebackGrid[h][0]=[!1,!0,!1];for(var f=1;f<this.iMax;f++)for(var d=1;d<this.jMax;d++){var p=void 0;this.sequence1[f-1]===this.sequence2[d-1]?p=this.grid[f-1][d-1]+this.match_score:p=this.grid[f-1][d-1]+this.mismatch_penalty;var m=this.grid[f-1][d]+this.gap_penalty,g=this.grid[f][d-1]+this.gap_penalty,y=[p,m,g],v=this.arrayAllMaxIndexes(y);this.grid[f][d]=y[v[0]],this.tracebackGrid[f][d]=[v.includes(0),v.includes(1),v.includes(2)]}this.score=this.grid[this.iMax-1][this.jMax-1]},"computeGrids")},{key:"alignmentTraceback",value:o(function(){var u=[];for(u.push({pos:[this.sequence1.length,this.sequence2.length],seq1:"",seq2:""});u[0];){var h=u[0],f=this.tracebackGrid[h.pos[0]][h.pos[1]];f[0]&&u.push({pos:[h.pos[0]-1,h.pos[1]-1],seq1:this.sequence1[h.pos[0]-1]+h.seq1,seq2:this.sequence2[h.pos[1]-1]+h.seq2}),f[1]&&u.push({pos:[h.pos[0]-1,h.pos[1]],seq1:this.sequence1[h.pos[0]-1]+h.seq1,seq2:"-"+h.seq2}),f[2]&&u.push({pos:[h.pos[0],h.pos[1]-1],seq1:"-"+h.seq1,seq2:this.sequence2[h.pos[1]-1]+h.seq2}),h.pos[0]===0&&h.pos[1]===0&&this.alignments.push({sequence1:h.seq1,sequence2:h.seq2}),u.shift()}return this.alignments},"alignmentTraceback")},{key:"getAllIndexes",value:o(function(u,h){for(var f=[],d=-1;(d=u.indexOf(h,d+1))!==-1;)f.push(d);return f},"getAllIndexes")},{key:"arrayAllMaxIndexes",value:o(function(u){return this.getAllIndexes(u,Math.max.apply(null,u))},"arrayAllMaxIndexes")}]),s}();t.exports=a},function(t,e,r){"use strict";var n=o(function(){},"layoutBase");n.FDLayout=r(18),n.FDLayoutConstants=r(7),n.FDLayoutEdge=r(19),n.FDLayoutNode=r(20),n.DimensionD=r(21),n.HashMap=r(22),n.HashSet=r(23),n.IGeometry=r(8),n.IMath=r(9),n.Integer=r(10),n.Point=r(12),n.PointD=r(4),n.RandomSeed=r(16),n.RectangleD=r(13),n.Transform=r(17),n.UniqueIDGeneretor=r(14),n.Quicksort=r(24),n.LinkedList=r(11),n.LGraphObject=r(2),n.LGraph=r(5),n.LEdge=r(1),n.LGraphManager=r(6),n.LNode=r(3),n.Layout=r(15),n.LayoutConstants=r(0),n.NeedlemanWunsch=r(25),t.exports=n},function(t,e,r){"use strict";function n(){this.listeners=[]}o(n,"Emitter");var i=n.prototype;i.addListener=function(a,s){this.listeners.push({event:a,callback:s})},i.removeListener=function(a,s){for(var l=this.listeners.length;l>=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l<this.listeners.length;l++){var u=this.listeners[l];a===u.event&&u.callback(s)}},t.exports=n}])})});var AB=Mi((h4,CB)=>{"use strict";o(function(e,r){typeof h4=="object"&&typeof CB=="object"?CB.exports=r(SB()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof h4=="object"?h4.coseBase=r(SB()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(h4,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=7)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).FDLayoutConstants;function a(){}o(a,"CoSEConstants");for(var s in i)a[s]=i[s];a.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,a.DEFAULT_RADIAL_SEPARATION=i.DEFAULT_EDGE_LENGTH,a.DEFAULT_COMPONENT_SEPERATION=60,a.TILE=!0,a.TILING_PADDING_VERTICAL=10,a.TILING_PADDING_HORIZONTAL=10,a.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutEdge;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEEdge"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraph;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEGraph"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraphManager;function a(l){i.call(this,l)}o(a,"CoSEGraphManager"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutNode,a=n(0).IMath;function s(u,h,f,d){i.call(this,u,h,f,d)}o(s,"CoSENode"),s.prototype=Object.create(i.prototype);for(var l in i)s[l]=i[l];s.prototype.move=function(){var u=this.graphManager.getLayout();this.displacementX=u.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=u.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementX=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementX)),Math.abs(this.displacementY)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementY=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),u.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},s.prototype.propogateDisplacementToChildren=function(u,h){for(var f=this.getChild().getNodes(),d,p=0;p<f.length;p++)d=f[p],d.getChild()==null?(d.moveBy(u,h),d.displacementX+=u,d.displacementY+=h):d.propogateDisplacementToChildren(u,h)},s.prototype.setPred1=function(u){this.pred1=u},s.prototype.getPred1=function(){return pred1},s.prototype.getPred2=function(){return pred2},s.prototype.setNext=function(u){this.next=u},s.prototype.getNext=function(){return next},s.prototype.setProcessed=function(u){this.processed=u},s.prototype.isProcessed=function(){return processed},e.exports=s},function(e,r,n){"use strict";var i=n(0).FDLayout,a=n(4),s=n(3),l=n(5),u=n(2),h=n(1),f=n(0).FDLayoutConstants,d=n(0).LayoutConstants,p=n(0).Point,m=n(0).PointD,g=n(0).Layout,y=n(0).Integer,v=n(0).IGeometry,x=n(0).LGraph,b=n(0).Transform;function w(){i.call(this),this.toBeTiled={}}o(w,"CoSELayout"),w.prototype=Object.create(i.prototype);for(var C in i)w[C]=i[C];w.prototype.newGraphManager=function(){var T=new a(this);return this.graphManager=T,T},w.prototype.newGraph=function(T){return new s(null,this.graphManager,T)},w.prototype.newNode=function(T){return new l(this.graphManager,T)},w.prototype.newEdge=function(T){return new u(null,null,T)},w.prototype.initParameters=function(){i.prototype.initParameters.call(this,arguments),this.isSubLayout||(h.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=h.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=h.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.springConstant=f.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=f.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=f.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=f.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=f.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=f.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1,this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/f.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=f.CONVERGENCE_CHECK_PERIOD/this.maxIterations,this.coolingAdjuster=1)},w.prototype.layout=function(){var T=d.DEFAULT_CREATE_BENDS_AS_NEEDED;return T&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},w.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(h.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var E=new Set(this.getAllNodes()),A=this.nodesWithGravity.filter(function(I){return E.has(I)});this.graphManager.setAllNodesToApplyGravitation(A)}}else{var T=this.getFlatForest();if(T.length>0)this.positionNodesRadially(T);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var E=new Set(this.getAllNodes()),A=this.nodesWithGravity.filter(function(S){return E.has(S)});this.graphManager.setAllNodesToApplyGravitation(A),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},w.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%f.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var T=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(_){return T.has(_)});this.graphManager.setAllNodesToApplyGravitation(E),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var A=!this.isTreeGrowing&&!this.isGrowthFinished,S=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(A,S),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},w.prototype.getPositionsData=function(){for(var T=this.graphManager.getAllNodes(),E={},A=0;A<T.length;A++){var S=T[A].rect,_=T[A].id;E[_]={id:_,x:S.getCenterX(),y:S.getCenterY(),w:S.width,h:S.height}}return E},w.prototype.runSpringEmbedder=function(){this.initialAnimationPeriod=25,this.animationPeriod=this.initialAnimationPeriod;var T=!1;if(f.ANIMATE==="during")this.emit("layoutstarted");else{for(;!T;)T=this.tick();this.graphManager.updateBounds()}},w.prototype.calculateNodesToApplyGravitationTo=function(){var T=[],E,A=this.graphManager.getGraphs(),S=A.length,_;for(_=0;_<S;_++)E=A[_],E.updateConnected(),E.isConnected||(T=T.concat(E.getNodes()));return T},w.prototype.createBendpoints=function(){var T=[];T=T.concat(this.graphManager.getAllEdges());var E=new Set,A;for(A=0;A<T.length;A++){var S=T[A];if(!E.has(S)){var _=S.getSource(),I=S.getTarget();if(_==I)S.getBendpoints().push(new m),S.getBendpoints().push(new m),this.createDummyNodesForBendpoints(S),E.add(S);else{var D=[];if(D=D.concat(_.getEdgeListToNode(I)),D=D.concat(I.getEdgeListToNode(_)),!E.has(D[0])){if(D.length>1){var k;for(k=0;k<D.length;k++){var L=D[k];L.getBendpoints().push(new m),this.createDummyNodesForBendpoints(L)}}D.forEach(function(R){E.add(R)})}}}if(E.size==T.length)break}},w.prototype.positionNodesRadially=function(T){for(var E=new p(0,0),A=Math.ceil(Math.sqrt(T.length)),S=0,_=0,I=0,D=new m(0,0),k=0;k<T.length;k++){k%A==0&&(I=0,_=S,k!=0&&(_+=h.DEFAULT_COMPONENT_SEPERATION),S=0);var L=T[k],R=g.findCenterOfTree(L);E.x=I,E.y=_,D=w.radialLayout(L,R,E),D.y>S&&(S=Math.floor(D.y)),I=Math.floor(D.x+h.DEFAULT_COMPONENT_SEPERATION)}this.transform(new m(d.WORLD_CENTER_X-D.x/2,d.WORLD_CENTER_Y-D.y/2))},w.radialLayout=function(T,E,A){var S=Math.max(this.maxDiagonalInTree(T),h.DEFAULT_RADIAL_SEPARATION);w.branchRadialLayout(E,null,0,359,0,S);var _=x.calculateBounds(T),I=new b;I.setDeviceOrgX(_.getMinX()),I.setDeviceOrgY(_.getMinY()),I.setWorldOrgX(A.x),I.setWorldOrgY(A.y);for(var D=0;D<T.length;D++){var k=T[D];k.transform(I)}var L=new m(_.getMaxX(),_.getMaxY());return I.inverseTransformPoint(L)},w.branchRadialLayout=function(T,E,A,S,_,I){var D=(S-A+1)/2;D<0&&(D+=180);var k=(D+A)%360,L=k*v.TWO_PI/360,R=Math.cos(L),O=_*Math.cos(L),M=_*Math.sin(L);T.setCenter(O,M);var B=[];B=B.concat(T.getEdges());var F=B.length;E!=null&&F--;for(var P=0,z=B.length,$,H=T.getEdgesBetween(E);H.length>1;){var Q=H[0];H.splice(0,1);var j=B.indexOf(Q);j>=0&&B.splice(j,1),z--,F--}E!=null?$=(B.indexOf(H[0])+1)%z:$=0;for(var ie=Math.abs(S-A)/F,ne=$;P!=F;ne=++ne%z){var le=B[ne].getOtherEnd(T);if(le!=E){var he=(A+P*ie)%360,K=(he+ie)%360;w.branchRadialLayout(le,T,he,K,_+I,I),P++}}},w.maxDiagonalInTree=function(T){for(var E=y.MIN_VALUE,A=0;A<T.length;A++){var S=T[A],_=S.getDiagonal();_>E&&(E=_)}return E},w.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},w.prototype.groupZeroDegreeMembers=function(){var T=this,E={};this.memberGroups={},this.idToDummyNode={};for(var A=[],S=this.graphManager.getAllNodes(),_=0;_<S.length;_++){var I=S[_],D=I.getParent();this.getNodeDegreeWithChildren(I)===0&&(D.id==null||!this.getToBeTiled(D))&&A.push(I)}for(var _=0;_<A.length;_++){var I=A[_],k=I.getParent().id;typeof E[k]>"u"&&(E[k]=[]),E[k]=E[k].concat(I)}Object.keys(E).forEach(function(L){if(E[L].length>1){var R="DummyCompound_"+L;T.memberGroups[R]=E[L];var O=E[L][0].getParent(),M=new l(T.graphManager);M.id=R,M.paddingLeft=O.paddingLeft||0,M.paddingRight=O.paddingRight||0,M.paddingBottom=O.paddingBottom||0,M.paddingTop=O.paddingTop||0,T.idToDummyNode[R]=M;var B=T.getGraphManager().add(T.newGraph(),M),F=O.getChild();F.add(M);for(var P=0;P<E[L].length;P++){var z=E[L][P];F.remove(z),B.add(z)}}})},w.prototype.clearCompounds=function(){var T={},E={};this.performDFSOnCompounds();for(var A=0;A<this.compoundOrder.length;A++)E[this.compoundOrder[A].id]=this.compoundOrder[A],T[this.compoundOrder[A].id]=[].concat(this.compoundOrder[A].getChild().getNodes()),this.graphManager.remove(this.compoundOrder[A].getChild()),this.compoundOrder[A].child=null;this.graphManager.resetAllNodes(),this.tileCompoundMembers(T,E)},w.prototype.clearZeroDegreeMembers=function(){var T=this,E=this.tiledZeroDegreePack=[];Object.keys(this.memberGroups).forEach(function(A){var S=T.idToDummyNode[A];E[A]=T.tileNodes(T.memberGroups[A],S.paddingLeft+S.paddingRight),S.rect.width=E[A].width,S.rect.height=E[A].height})},w.prototype.repopulateCompounds=function(){for(var T=this.compoundOrder.length-1;T>=0;T--){var E=this.compoundOrder[T],A=E.id,S=E.paddingLeft,_=E.paddingTop;this.adjustLocations(this.tiledMemberPack[A],E.rect.x,E.rect.y,S,_)}},w.prototype.repopulateZeroDegreeMembers=function(){var T=this,E=this.tiledZeroDegreePack;Object.keys(E).forEach(function(A){var S=T.idToDummyNode[A],_=S.paddingLeft,I=S.paddingTop;T.adjustLocations(E[A],S.rect.x,S.rect.y,_,I)})},w.prototype.getToBeTiled=function(T){var E=T.id;if(this.toBeTiled[E]!=null)return this.toBeTiled[E];var A=T.getChild();if(A==null)return this.toBeTiled[E]=!1,!1;for(var S=A.getNodes(),_=0;_<S.length;_++){var I=S[_];if(this.getNodeDegree(I)>0)return this.toBeTiled[E]=!1,!1;if(I.getChild()==null){this.toBeTiled[I.id]=!1;continue}if(!this.getToBeTiled(I))return this.toBeTiled[E]=!1,!1}return this.toBeTiled[E]=!0,!0},w.prototype.getNodeDegree=function(T){for(var E=T.id,A=T.getEdges(),S=0,_=0;_<A.length;_++){var I=A[_];I.getSource().id!==I.getTarget().id&&(S=S+1)}return S},w.prototype.getNodeDegreeWithChildren=function(T){var E=this.getNodeDegree(T);if(T.getChild()==null)return E;for(var A=T.getChild().getNodes(),S=0;S<A.length;S++){var _=A[S];E+=this.getNodeDegreeWithChildren(_)}return E},w.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},w.prototype.fillCompexOrderByDFS=function(T){for(var E=0;E<T.length;E++){var A=T[E];A.getChild()!=null&&this.fillCompexOrderByDFS(A.getChild().getNodes()),this.getToBeTiled(A)&&this.compoundOrder.push(A)}},w.prototype.adjustLocations=function(T,E,A,S,_){E+=S,A+=_;for(var I=E,D=0;D<T.rows.length;D++){var k=T.rows[D];E=I;for(var L=0,R=0;R<k.length;R++){var O=k[R];O.rect.x=E,O.rect.y=A,E+=O.rect.width+T.horizontalPadding,O.rect.height>L&&(L=O.rect.height)}A+=L+T.verticalPadding}},w.prototype.tileCompoundMembers=function(T,E){var A=this;this.tiledMemberPack=[],Object.keys(T).forEach(function(S){var _=E[S];A.tiledMemberPack[S]=A.tileNodes(T[S],_.paddingLeft+_.paddingRight),_.rect.width=A.tiledMemberPack[S].width,_.rect.height=A.tiledMemberPack[S].height})},w.prototype.tileNodes=function(T,E){var A=h.TILING_PADDING_VERTICAL,S=h.TILING_PADDING_HORIZONTAL,_={rows:[],rowWidth:[],rowHeight:[],width:0,height:E,verticalPadding:A,horizontalPadding:S};T.sort(function(k,L){return k.rect.width*k.rect.height>L.rect.width*L.rect.height?-1:k.rect.width*k.rect.height<L.rect.width*L.rect.height?1:0});for(var I=0;I<T.length;I++){var D=T[I];_.rows.length==0?this.insertNodeToRow(_,D,0,E):this.canAddHorizontal(_,D.rect.width,D.rect.height)?this.insertNodeToRow(_,D,this.getShortestRowIndex(_),E):this.insertNodeToRow(_,D,_.rows.length,E),this.shiftToLastRow(_)}return _},w.prototype.insertNodeToRow=function(T,E,A,S){var _=S;if(A==T.rows.length){var I=[];T.rows.push(I),T.rowWidth.push(_),T.rowHeight.push(0)}var D=T.rowWidth[A]+E.rect.width;T.rows[A].length>0&&(D+=T.horizontalPadding),T.rowWidth[A]=D,T.width<D&&(T.width=D);var k=E.rect.height;A>0&&(k+=T.verticalPadding);var L=0;k>T.rowHeight[A]&&(L=T.rowHeight[A],T.rowHeight[A]=k,L=T.rowHeight[A]-L),T.height+=L,T.rows[A].push(E)},w.prototype.getShortestRowIndex=function(T){for(var E=-1,A=Number.MAX_VALUE,S=0;S<T.rows.length;S++)T.rowWidth[S]<A&&(E=S,A=T.rowWidth[S]);return E},w.prototype.getLongestRowIndex=function(T){for(var E=-1,A=Number.MIN_VALUE,S=0;S<T.rows.length;S++)T.rowWidth[S]>A&&(E=S,A=T.rowWidth[S]);return E},w.prototype.canAddHorizontal=function(T,E,A){var S=this.getShortestRowIndex(T);if(S<0)return!0;var _=T.rowWidth[S];if(_+T.horizontalPadding+E<=T.width)return!0;var I=0;T.rowHeight[S]<A&&S>0&&(I=A+T.verticalPadding-T.rowHeight[S]);var D;T.width-_>=E+T.horizontalPadding?D=(T.height+I)/(_+E+T.horizontalPadding):D=(T.height+I)/T.width,I=A+T.verticalPadding;var k;return T.width<E?k=(T.height+I)/E:k=(T.height+I)/T.width,k<1&&(k=1/k),D<1&&(D=1/D),D<k},w.prototype.shiftToLastRow=function(T){var E=this.getLongestRowIndex(T),A=T.rowWidth.length-1,S=T.rows[E],_=S[S.length-1],I=_.width+T.horizontalPadding;if(T.width-T.rowWidth[A]>I&&E!=A){S.splice(-1,1),T.rows[A].push(_),T.rowWidth[E]=T.rowWidth[E]-I,T.rowWidth[A]=T.rowWidth[A]+I,T.width=T.rowWidth[instance.getLongestRowIndex(T)];for(var D=Number.MIN_VALUE,k=0;k<S.length;k++)S[k].height>D&&(D=S[k].height);E>0&&(D+=T.verticalPadding);var L=T.rowHeight[E]+T.rowHeight[A];T.rowHeight[E]=D,T.rowHeight[A]<_.height+T.verticalPadding&&(T.rowHeight[A]=_.height+T.verticalPadding);var R=T.rowHeight[E]+T.rowHeight[A];T.height+=R-L,this.shiftToLastRow(T)}},w.prototype.tilingPreLayout=function(){h.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},w.prototype.tilingPostLayout=function(){h.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},w.prototype.reduceTrees=function(){for(var T=[],E=!0,A;E;){var S=this.graphManager.getAllNodes(),_=[];E=!1;for(var I=0;I<S.length;I++)A=S[I],A.getEdges().length==1&&!A.getEdges()[0].isInterGraph&&A.getChild()==null&&(_.push([A,A.getEdges()[0],A.getOwner()]),E=!0);if(E==!0){for(var D=[],k=0;k<_.length;k++)_[k][0].getEdges().length==1&&(D.push(_[k]),_[k][0].getOwner().remove(_[k][0]));T.push(D),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()}}this.prunedNodesAll=T},w.prototype.growTree=function(T){for(var E=T.length,A=T[E-1],S,_=0;_<A.length;_++)S=A[_],this.findPlaceforPrunedNode(S),S[2].add(S[0]),S[2].add(S[1],S[1].source,S[1].target);T.splice(T.length-1,1),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()},w.prototype.findPlaceforPrunedNode=function(T){var E,A,S=T[0];S==T[1].source?A=T[1].target:A=T[1].source;var _=A.startX,I=A.finishX,D=A.startY,k=A.finishY,L=0,R=0,O=0,M=0,B=[L,O,R,M];if(D>0)for(var F=_;F<=I;F++)B[0]+=this.grid[F][D-1].length+this.grid[F][D].length-1;if(I<this.grid.length-1)for(var F=D;F<=k;F++)B[1]+=this.grid[I+1][F].length+this.grid[I][F].length-1;if(k<this.grid[0].length-1)for(var F=_;F<=I;F++)B[2]+=this.grid[F][k+1].length+this.grid[F][k].length-1;if(_>0)for(var F=D;F<=k;F++)B[3]+=this.grid[_-1][F].length+this.grid[_][F].length-1;for(var P=y.MAX_VALUE,z,$,H=0;H<B.length;H++)B[H]<P?(P=B[H],z=1,$=H):B[H]==P&&z++;if(z==3&&P==0)B[0]==0&&B[1]==0&&B[2]==0?E=1:B[0]==0&&B[1]==0&&B[3]==0?E=0:B[0]==0&&B[2]==0&&B[3]==0?E=3:B[1]==0&&B[2]==0&&B[3]==0&&(E=2);else if(z==2&&P==0){var Q=Math.floor(Math.random()*2);B[0]==0&&B[1]==0?Q==0?E=0:E=1:B[0]==0&&B[2]==0?Q==0?E=0:E=2:B[0]==0&&B[3]==0?Q==0?E=0:E=3:B[1]==0&&B[2]==0?Q==0?E=1:E=2:B[1]==0&&B[3]==0?Q==0?E=1:E=3:Q==0?E=2:E=3}else if(z==4&&P==0){var Q=Math.floor(Math.random()*4);E=Q}else E=$;E==0?S.setCenter(A.getCenterX(),A.getCenterY()-A.getHeight()/2-f.DEFAULT_EDGE_LENGTH-S.getHeight()/2):E==1?S.setCenter(A.getCenterX()+A.getWidth()/2+f.DEFAULT_EDGE_LENGTH+S.getWidth()/2,A.getCenterY()):E==2?S.setCenter(A.getCenterX(),A.getCenterY()+A.getHeight()/2+f.DEFAULT_EDGE_LENGTH+S.getHeight()/2):S.setCenter(A.getCenterX()-A.getWidth()/2-f.DEFAULT_EDGE_LENGTH-S.getWidth()/2,A.getCenterY())},e.exports=w},function(e,r,n){"use strict";var i={};i.layoutBase=n(0),i.CoSEConstants=n(1),i.CoSEEdge=n(2),i.CoSEGraph=n(3),i.CoSEGraphManager=n(4),i.CoSELayout=n(6),i.CoSENode=n(5),e.exports=i}])})});var Gge=Mi((f4,_B)=>{"use strict";o(function(e,r){typeof f4=="object"&&typeof _B=="object"?_B.exports=r(AB()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof f4=="object"?f4.cytoscapeCoseBilkent=r(AB()):e.cytoscapeCoseBilkent=r(e.coseBase)},"webpackUniversalModuleDefinition")(f4,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=1)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).layoutBase.LayoutConstants,a=n(0).layoutBase.FDLayoutConstants,s=n(0).CoSEConstants,l=n(0).CoSELayout,u=n(0).CoSENode,h=n(0).layoutBase.PointD,f=n(0).layoutBase.DimensionD,d={ready:o(function(){},"ready"),stop:o(function(){},"stop"),quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function p(v,x){var b={};for(var w in v)b[w]=v[w];for(var w in x)b[w]=x[w];return b}o(p,"extend");function m(v){this.options=p(d,v),g(this.options)}o(m,"_CoSELayout");var g=o(function(x){x.nodeRepulsion!=null&&(s.DEFAULT_REPULSION_STRENGTH=a.DEFAULT_REPULSION_STRENGTH=x.nodeRepulsion),x.idealEdgeLength!=null&&(s.DEFAULT_EDGE_LENGTH=a.DEFAULT_EDGE_LENGTH=x.idealEdgeLength),x.edgeElasticity!=null&&(s.DEFAULT_SPRING_STRENGTH=a.DEFAULT_SPRING_STRENGTH=x.edgeElasticity),x.nestingFactor!=null&&(s.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=x.nestingFactor),x.gravity!=null&&(s.DEFAULT_GRAVITY_STRENGTH=a.DEFAULT_GRAVITY_STRENGTH=x.gravity),x.numIter!=null&&(s.MAX_ITERATIONS=a.MAX_ITERATIONS=x.numIter),x.gravityRange!=null&&(s.DEFAULT_GRAVITY_RANGE_FACTOR=a.DEFAULT_GRAVITY_RANGE_FACTOR=x.gravityRange),x.gravityCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_STRENGTH=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=x.gravityCompound),x.gravityRangeCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=x.gravityRangeCompound),x.initialEnergyOnIncremental!=null&&(s.DEFAULT_COOLING_FACTOR_INCREMENTAL=a.DEFAULT_COOLING_FACTOR_INCREMENTAL=x.initialEnergyOnIncremental),x.quality=="draft"?i.QUALITY=0:x.quality=="proof"?i.QUALITY=2:i.QUALITY=1,s.NODE_DIMENSIONS_INCLUDE_LABELS=a.NODE_DIMENSIONS_INCLUDE_LABELS=i.NODE_DIMENSIONS_INCLUDE_LABELS=x.nodeDimensionsIncludeLabels,s.DEFAULT_INCREMENTAL=a.DEFAULT_INCREMENTAL=i.DEFAULT_INCREMENTAL=!x.randomize,s.ANIMATE=a.ANIMATE=i.ANIMATE=x.animate,s.TILE=x.tile,s.TILING_PADDING_VERTICAL=typeof x.tilingPaddingVertical=="function"?x.tilingPaddingVertical.call():x.tilingPaddingVertical,s.TILING_PADDING_HORIZONTAL=typeof x.tilingPaddingHorizontal=="function"?x.tilingPaddingHorizontal.call():x.tilingPaddingHorizontal},"getUserOptions");m.prototype.run=function(){var v,x,b=this.options,w=this.idToLNode={},C=this.layout=new l,T=this;T.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var E=C.newGraphManager();this.gm=E;var A=this.options.eles.nodes(),S=this.options.eles.edges();this.root=E.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(A),C);for(var _=0;_<S.length;_++){var I=S[_],D=this.idToLNode[I.data("source")],k=this.idToLNode[I.data("target")];if(D!==k&&D.getEdgesBetween(k).length==0){var L=E.add(C.newEdge(),D,k);L.id=I.id()}}var R=o(function(B,F){typeof B=="number"&&(B=F);var P=B.data("id"),z=T.idToLNode[P];return{x:z.getRect().getCenterX(),y:z.getRect().getCenterY()}},"getPositions"),O=o(function M(){for(var B=o(function(){b.fit&&b.cy.fit(b.eles,b.padding),v||(v=!0,T.cy.one("layoutready",b.ready),T.cy.trigger({type:"layoutready",layout:T}))},"afterReposition"),F=T.options.refresh,P,z=0;z<F&&!P;z++)P=T.stopped||T.layout.tick();if(P){C.checkLayoutSuccess()&&!C.isSubLayout&&C.doPostLayout(),C.tilingPostLayout&&C.tilingPostLayout(),C.isLayoutFinished=!0,T.options.eles.nodes().positions(R),B(),T.cy.one("layoutstop",T.options.stop),T.cy.trigger({type:"layoutstop",layout:T}),x&&cancelAnimationFrame(x),v=!1;return}var $=T.layout.getPositionsData();b.eles.nodes().positions(function(H,Q){if(typeof H=="number"&&(H=Q),!H.isParent()){for(var j=H.id(),ie=$[j],ne=H;ie==null&&(ie=$[ne.data("parent")]||$["DummyCompound_"+ne.data("parent")],$[j]=ie,ne=ne.parent()[0],ne!=null););return ie!=null?{x:ie.x,y:ie.y}:{x:H.position("x"),y:H.position("y")}}}),B(),x=requestAnimationFrame(M)},"iterateAnimated");return C.addListener("layoutstarted",function(){T.options.animate==="during"&&(x=requestAnimationFrame(O))}),C.runLayout(),this.options.animate!=="during"&&(T.options.eles.nodes().not(":parent").layoutPositions(T,T.options,R),v=!1),this},m.prototype.getTopMostNodes=function(v){for(var x={},b=0;b<v.length;b++)x[v[b].id()]=!0;var w=v.filter(function(C,T){typeof C=="number"&&(C=T);for(var E=C.parent()[0];E!=null;){if(x[E.id()])return!1;E=E.parent()[0]}return!0});return w},m.prototype.processChildrenList=function(v,x,b){for(var w=x.length,C=0;C<w;C++){var T=x[C],E=T.children(),A,S=T.layoutDimensions({nodeDimensionsIncludeLabels:this.options.nodeDimensionsIncludeLabels});if(T.outerWidth()!=null&&T.outerHeight()!=null?A=v.add(new u(b.graphManager,new h(T.position("x")-S.w/2,T.position("y")-S.h/2),new f(parseFloat(S.w),parseFloat(S.h)))):A=v.add(new u(this.graphManager)),A.id=T.data("id"),A.paddingLeft=parseInt(T.css("padding")),A.paddingTop=parseInt(T.css("padding")),A.paddingRight=parseInt(T.css("padding")),A.paddingBottom=parseInt(T.css("padding")),this.options.nodeDimensionsIncludeLabels&&T.isParent()){var _=T.boundingBox({includeLabels:!0,includeNodes:!1}).w,I=T.boundingBox({includeLabels:!0,includeNodes:!1}).h,D=T.css("text-halign");A.labelWidth=_,A.labelHeight=I,A.labelPos=D}if(this.idToLNode[T.data("id")]=A,isNaN(A.rect.x)&&(A.rect.x=0),isNaN(A.rect.y)&&(A.rect.y=0),E!=null&&E.length>0){var k;k=b.getGraphManager().add(b.newGraph(),A),this.processChildrenList(k,E,b)}}},m.prototype.stop=function(){return this.stopped=!0,this};var y=o(function(x){x("layout","cose-bilkent",m)},"register");typeof cytoscape<"u"&&y(cytoscape),e.exports=y}])})});function JZe(t,e,r,n,i){return t.insert("polygon",":first-child").attr("points",n.map(function(a){return a.x+","+a.y}).join(" ")).attr("transform","translate("+(i.width-e)/2+", "+r+")")}var YZe,XZe,jZe,KZe,QZe,ZZe,eJe,tJe,Vge,Uge,Hge=N(()=>{"use strict";to();ir();YZe=12,XZe=o(function(t,e,r,n){e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 ${r.height-5} v${-r.height+2*5} q0,-5 5,-5 h${r.width-2*5} q5,0 5,5 v${r.height-5} H0 Z`),e.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",r.height).attr("x2",r.width).attr("y2",r.height)},"defaultBkg"),jZe=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("width",r.width)},"rectBkg"),KZe=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n,s=.25*n,l=.35*n,u=.2*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 0 0,1 ${n*.25},${-1*n*.1}
2156 + a${l},${l} 1 0,1 ${n*.4},${-1*n*.1}
2157 + a${s},${s} 1 0,1 ${n*.35},${1*n*.2}
2158 +
2159 + a${a},${a} 1 0,1 ${n*.15},${1*i*.35}
2160 + a${u},${u} 1 0,1 ${-1*n*.15},${1*i*.65}
2161 +
2162 + a${s},${a} 1 0,1 ${-1*n*.25},${n*.15}
2163 + a${l},${l} 1 0,1 ${-1*n*.5},0
2164 + a${a},${a} 1 0,1 ${-1*n*.25},${-1*n*.15}
2165 +
2166 + a${a},${a} 1 0,1 ${-1*n*.1},${-1*i*.35}
2167 + a${u},${u} 1 0,1 ${n*.1},${-1*i*.65}
2168 +
2169 + H0 V0 Z`)},"cloudBkg"),QZe=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 1 0,0 ${n*.25},${-1*i*.1}
2170 + a${a},${a} 1 0,0 ${n*.25},0
2171 + a${a},${a} 1 0,0 ${n*.25},0
2172 + a${a},${a} 1 0,0 ${n*.25},${1*i*.1}
2173 +
2174 + a${a},${a} 1 0,0 ${n*.15},${1*i*.33}
2175 + a${a*.8},${a*.8} 1 0,0 0,${1*i*.34}
2176 + a${a},${a} 1 0,0 ${-1*n*.15},${1*i*.33}
2177 +
2178 + a${a},${a} 1 0,0 ${-1*n*.25},${i*.15}
2179 + a${a},${a} 1 0,0 ${-1*n*.25},0
2180 + a${a},${a} 1 0,0 ${-1*n*.25},0
2181 + a${a},${a} 1 0,0 ${-1*n*.25},${-1*i*.15}
2182 +
2183 + a${a},${a} 1 0,0 ${-1*n*.1},${-1*i*.33}
2184 + a${a*.8},${a*.8} 1 0,0 0,${-1*i*.34}
2185 + a${a},${a} 1 0,0 ${n*.1},${-1*i*.33}
2186 +
2187 + H0 V0 Z`)},"bangBkg"),ZZe=o(function(t,e,r){e.append("circle").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("r",r.width/2)},"circleBkg");o(JZe,"insertPolygonShape");eJe=o(function(t,e,r){let n=r.height,a=n/4,s=r.width-r.padding+2*a,l=[{x:a,y:0},{x:s-a,y:0},{x:s,y:-n/2},{x:s-a,y:-n},{x:a,y:-n},{x:0,y:-n/2}];JZe(e,s,n,l,r)},"hexagonBkg"),tJe=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("rx",r.padding).attr("ry",r.padding).attr("width",r.width)},"roundedRectBkg"),Vge=o(async function(t,e,r,n,i){let a=i.htmlLabels,s=n%(YZe-1),l=e.append("g");r.section=s;let u="section-"+s;s<0&&(u+=" section-root"),l.attr("class",(r.class?r.class+" ":"")+"mindmap-node "+u);let h=l.append("g"),f=l.append("g"),d=r.descr.replace(/(<br\/*>)/g,`
2188 +`);await Hn(f,d,{useHtmlLabels:a,width:r.width,classes:"mindmap-node-label"},i),a||f.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");let p=f.node().getBBox(),[m]=Bo(i.fontSize);if(r.height=p.height+m*1.1*.5+r.padding,r.width=p.width+2*r.padding,r.icon)if(r.type===t.nodeType.CIRCLE)r.height+=50,r.width+=50,l.append("foreignObject").attr("height","50px").attr("width",r.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+r.width/2+", "+(r.height/2-1.5*r.padding)+")");else{r.width+=50;let g=r.height;r.height=Math.max(g,60);let y=Math.abs(r.height-g);l.append("foreignObject").attr("width","60px").attr("height",r.height).attr("style","text-align: center;margin-top:"+y/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+(25+r.width/2)+", "+(y/2+r.padding/2)+")")}else if(a){let g=(r.width-p.width)/2,y=(r.height-p.height)/2;f.attr("transform","translate("+g+", "+y+")")}else{let g=r.width/2,y=r.padding/2;f.attr("transform","translate("+g+", "+y+")")}switch(r.type){case t.nodeType.DEFAULT:XZe(t,h,r,s);break;case t.nodeType.ROUNDED_RECT:tJe(t,h,r,s);break;case t.nodeType.RECT:jZe(t,h,r,s);break;case t.nodeType.CIRCLE:h.attr("transform","translate("+r.width/2+", "+ +r.height/2+")"),ZZe(t,h,r,s);break;case t.nodeType.CLOUD:KZe(t,h,r,s);break;case t.nodeType.BANG:QZe(t,h,r,s);break;case t.nodeType.HEXAGON:eJe(t,h,r,s);break}return t.setElementForId(r.id,l),r.height},"drawNode"),Uge=o(function(t,e){let r=t.getElementById(e.id),n=e.x||0,i=e.y||0;r.attr("transform","translate("+n+","+i+")")},"positionNode")});async function qge(t,e,r,n,i){await Vge(t,e,r,n,i),r.children&&await Promise.all(r.children.map((a,s)=>qge(t,e,a,n<0?s:n,i)))}function rJe(t,e){e.edges().map((r,n)=>{let i=r.data();if(r[0]._private.bodyBounds){let a=r[0]._private.rscratch;Y.trace("Edge: ",n,i),t.insert("path").attr("d",`M ${a.startX},${a.startY} L ${a.midX},${a.midY} L${a.endX},${a.endY} `).attr("class","edge section-edge-"+i.section+" edge-depth-"+i.depth)}})}function Yge(t,e,r,n){e.add({group:"nodes",data:{id:t.id.toString(),labelText:t.descr,height:t.height,width:t.width,level:n,nodeId:t.id,padding:t.padding,type:t.type},position:{x:t.x,y:t.y}}),t.children&&t.children.forEach(i=>{Yge(i,e,r,n+1),e.add({group:"edges",data:{id:`${t.id}_${i.id}`,source:t.id,target:i.id,depth:n,section:i.section}})})}function nJe(t,e){return new Promise(r=>{let n=Ge("body").append("div").attr("id","cy").attr("style","display:none"),i=rl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});n.remove(),Yge(t,i,e,0),i.nodes().forEach(function(a){a.layoutDimensions=()=>{let s=a.data();return{w:s.width,h:s.height}}}),i.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),i.ready(a=>{Y.info("Ready",a),r(i)})})}function iJe(t,e){e.nodes().map((r,n)=>{let i=r.data();i.x=r.position().x,i.y=r.position().y,Uge(t,i);let a=t.getElementById(i.nodeId);Y.info("Id:",n,"Position: (",r.position().x,", ",r.position().y,")",i),a.attr("transform",`translate(${r.position().x-i.width/2}, ${r.position().y-i.height/2})`),a.attr("attr",`apa-${n})`)})}var Wge,aJe,Xge,jge=N(()=>{"use strict";kB();Wge=Sa(Gge(),1);dr();zt();vt();Vc();Ei();Hge();Ya();rl.use(Wge.default);o(qge,"drawNodes");o(rJe,"drawEdges");o(Yge,"addNodes");o(nJe,"layoutMindmap");o(iJe,"positionNodes");aJe=o(async(t,e,r,n)=>{Y.debug(`Rendering mindmap diagram
2189 +`+t);let i=n.db,a=i.getMindmap();if(!a)return;let s=me();s.htmlLabels=!1;let l=sa(e),u=l.append("g");u.attr("class","mindmap-edges");let h=l.append("g");h.attr("class","mindmap-nodes"),await qge(i,h,a,-1,s);let f=await nJe(a,s);rJe(u,f),iJe(i,f),Ao(void 0,l,s.mindmap?.padding??or.mindmap.padding,s.mindmap?.useMaxWidth??or.mindmap.useMaxWidth)},"draw"),Xge={draw:aJe}});var sJe,oJe,Kge,Qge=N(()=>{"use strict";Ys();sJe=o(t=>{let e="";for(let r=0;r<t.THEME_COLOR_LIMIT;r++)t["lineColor"+r]=t["lineColor"+r]||t["cScaleInv"+r],ca(t["lineColor"+r])?t["lineColor"+r]=Dt(t["lineColor"+r],20):t["lineColor"+r]=Ot(t["lineColor"+r],20);for(let r=0;r<t.THEME_COLOR_LIMIT;r++){let n=""+(17-3*r);e+=`
2190 + .section-${r-1} rect, .section-${r-1} path, .section-${r-1} circle, .section-${r-1} polygon, .section-${r-1} path {
2191 + fill: ${t["cScale"+r]};
2192 + }
2193 + .section-${r-1} text {
2194 + fill: ${t["cScaleLabel"+r]};
2195 + }
2196 + .node-icon-${r-1} {
2197 + font-size: 40px;
2198 + color: ${t["cScaleLabel"+r]};
2199 + }
2200 + .section-edge-${r-1}{
2201 + stroke: ${t["cScale"+r]};
2202 + }
2203 + .edge-depth-${r-1}{
2204 + stroke-width: ${n};
2205 + }
2206 + .section-${r-1} line {
2207 + stroke: ${t["cScaleInv"+r]} ;
2208 + stroke-width: 3;
2209 + }
2210 +
2211 + .disabled, .disabled circle, .disabled text {
2212 + fill: lightgray;
2213 + }
2214 + .disabled text {
2215 + fill: #efefef;
2216 + }
2217 + `}return e},"genSections"),oJe=o(t=>`
2218 + .edge {
2219 + stroke-width: 3;
2220 + }
2221 + ${sJe(t)}
2222 + .section-root rect, .section-root path, .section-root circle, .section-root polygon {
2223 + fill: ${t.git0};
2224 + }
2225 + .section-root text {
2226 + fill: ${t.gitBranchLabel0};
2227 + }
2228 + .icon-container {
2229 + height:100%;
2230 + display: flex;
2231 + justify-content: center;
2232 + align-items: center;
2233 + }
2234 + .edge {
2235 + fill: none;
2236 + }
2237 + .mindmap-node-label {
2238 + dy: 1em;
2239 + alignment-baseline: middle;
2240 + text-anchor: middle;
2241 + dominant-baseline: middle;
2242 + text-align: center;
2243 + }
2244 +`,"getStyles"),Kge=oJe});var Zge={};hr(Zge,{diagram:()=>lJe});var lJe,Jge=N(()=>{"use strict";Spe();_pe();jge();Qge();lJe={db:Ape,renderer:Xge,parser:Epe,styles:Kge}});var DB,r1e,n1e=N(()=>{"use strict";DB=function(){var t=o(function(A,S,_,I){for(_=_||{},I=A.length;I--;_[A[I]]=S);return _},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,31],g=[6,7,11,24],y=[1,6,13,16,17,20,23],v=[1,35],x=[1,36],b=[1,6,7,11,13,16,17,20,23],w=[1,38],C={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,KANBAN:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,shapeData:15,ICON:16,CLASS:17,nodeWithId:18,nodeWithoutId:19,NODE_DSTART:20,NODE_DESCR:21,NODE_DEND:22,NODE_ID:23,SHAPE_DATA:24,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"KANBAN",11:"EOF",13:"SPACELIST",16:"ICON",17:"CLASS",20:"NODE_DSTART",21:"NODE_DESCR",22:"NODE_DEND",23:"NODE_ID",24:"SHAPE_DATA"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,3],[12,2],[12,2],[12,2],[12,1],[12,2],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[19,3],[18,1],[18,4],[15,2],[15,1]],performAction:o(function(S,_,I,D,k,L,R){var O=L.length-1;switch(k){case 6:case 7:return D;case 8:D.getLogger().trace("Stop NL ");break;case 9:D.getLogger().trace("Stop EOF ");break;case 11:D.getLogger().trace("Stop NL2 ");break;case 12:D.getLogger().trace("Stop EOF2 ");break;case 15:D.getLogger().info("Node: ",L[O-1].id),D.addNode(L[O-2].length,L[O-1].id,L[O-1].descr,L[O-1].type,L[O]);break;case 16:D.getLogger().info("Node: ",L[O].id),D.addNode(L[O-1].length,L[O].id,L[O].descr,L[O].type);break;case 17:D.getLogger().trace("Icon: ",L[O]),D.decorateNode({icon:L[O]});break;case 18:case 23:D.decorateNode({class:L[O]});break;case 19:D.getLogger().trace("SPACELIST");break;case 20:D.getLogger().trace("Node: ",L[O-1].id),D.addNode(0,L[O-1].id,L[O-1].descr,L[O-1].type,L[O]);break;case 21:D.getLogger().trace("Node: ",L[O].id),D.addNode(0,L[O].id,L[O].descr,L[O].type);break;case 22:D.decorateNode({icon:L[O]});break;case 27:D.getLogger().trace("node found ..",L[O-2]),this.$={id:L[O-1],descr:L[O-1],type:D.getType(L[O-2],L[O])};break;case 28:this.$={id:L[O],descr:L[O],type:0};break;case 29:D.getLogger().trace("node found ..",L[O-3]),this.$={id:L[O-3],descr:L[O-1],type:D.getType(L[O-2],L[O])};break;case 30:this.$=L[O-1]+L[O];break;case 31:this.$=L[O];break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:r,9:22,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:h,7:f,10:23,11:d},t(p,[2,24],{18:17,19:18,14:27,16:[1,28],17:[1,29],20:s,23:l}),t(p,[2,19]),t(p,[2,21],{15:30,24:m}),t(p,[2,22]),t(p,[2,23]),t(g,[2,25]),t(g,[2,26]),t(g,[2,28],{20:[1,32]}),{21:[1,33]},{6:h,7:f,10:34,11:d},{1:[2,7],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(y,[2,14],{7:v,11:x}),t(b,[2,8]),t(b,[2,9]),t(b,[2,10]),t(p,[2,16],{15:37,24:m}),t(p,[2,17]),t(p,[2,18]),t(p,[2,20],{24:w}),t(g,[2,31]),{21:[1,39]},{22:[1,40]},t(y,[2,13],{7:v,11:x}),t(b,[2,11]),t(b,[2,12]),t(p,[2,15],{24:w}),t(g,[2,30]),{22:[1,41]},t(g,[2,27]),t(g,[2,29])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(S,_){if(_.recoverable)this.trace(S);else{var I=new Error(S);throw I.hash=_,I}},"parseError"),parse:o(function(S){var _=this,I=[0],D=[],k=[null],L=[],R=this.table,O="",M=0,B=0,F=0,P=2,z=1,$=L.slice.call(arguments,1),H=Object.create(this.lexer),Q={yy:{}};for(var j in this.yy)Object.prototype.hasOwnProperty.call(this.yy,j)&&(Q.yy[j]=this.yy[j]);H.setInput(S,Q.yy),Q.yy.lexer=H,Q.yy.parser=this,typeof H.yylloc>"u"&&(H.yylloc={});var ie=H.yylloc;L.push(ie);var ne=H.options&&H.options.ranges;typeof Q.yy.parseError=="function"?this.parseError=Q.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function le(ze){I.length=I.length-2*ze,k.length=k.length-ze,L.length=L.length-ze}o(le,"popStack");function he(){var ze;return ze=D.pop()||H.lex()||z,typeof ze!="number"&&(ze instanceof Array&&(D=ze,ze=D.pop()),ze=_.symbols_[ze]||ze),ze}o(he,"lex");for(var K,X,te,J,se,ue,Z={},Se,ce,ae,Oe;;){if(te=I[I.length-1],this.defaultActions[te]?J=this.defaultActions[te]:((K===null||typeof K>"u")&&(K=he()),J=R[te]&&R[te][K]),typeof J>"u"||!J.length||!J[0]){var ge="";Oe=[];for(Se in R[te])this.terminals_[Se]&&Se>P&&Oe.push("'"+this.terminals_[Se]+"'");H.showPosition?ge="Parse error on line "+(M+1)+`:
2245 +`+H.showPosition()+`
2246 +Expecting `+Oe.join(", ")+", got '"+(this.terminals_[K]||K)+"'":ge="Parse error on line "+(M+1)+": Unexpected "+(K==z?"end of input":"'"+(this.terminals_[K]||K)+"'"),this.parseError(ge,{text:H.match,token:this.terminals_[K]||K,line:H.yylineno,loc:ie,expected:Oe})}if(J[0]instanceof Array&&J.length>1)throw new Error("Parse Error: multiple actions possible at state: "+te+", token: "+K);switch(J[0]){case 1:I.push(K),k.push(H.yytext),L.push(H.yylloc),I.push(J[1]),K=null,X?(K=X,X=null):(B=H.yyleng,O=H.yytext,M=H.yylineno,ie=H.yylloc,F>0&&F--);break;case 2:if(ce=this.productions_[J[1]][1],Z.$=k[k.length-ce],Z._$={first_line:L[L.length-(ce||1)].first_line,last_line:L[L.length-1].last_line,first_column:L[L.length-(ce||1)].first_column,last_column:L[L.length-1].last_column},ne&&(Z._$.range=[L[L.length-(ce||1)].range[0],L[L.length-1].range[1]]),ue=this.performAction.apply(Z,[O,B,M,Q.yy,J[1],k,L].concat($)),typeof ue<"u")return ue;ce&&(I=I.slice(0,-1*ce*2),k=k.slice(0,-1*ce),L=L.slice(0,-1*ce)),I.push(this.productions_[J[1]][0]),k.push(Z.$),L.push(Z._$),ae=R[I[I.length-2]][I[I.length-1]],I.push(ae);break;case 3:return!0}}return!0},"parse")},T=function(){var A={EOF:1,parseError:o(function(_,I){if(this.yy.parser)this.yy.parser.parseError(_,I);else throw new Error(_)},"parseError"),setInput:o(function(S,_){return this.yy=_||this.yy||{},this._input=S,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var S=this._input[0];this.yytext+=S,this.yyleng++,this.offset++,this.match+=S,this.matched+=S;var _=S.match(/(?:\r\n?|\n).*/g);return _?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),S},"input"),unput:o(function(S){var _=S.length,I=S.split(/(?:\r\n?|\n)/g);this._input=S+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-_),this.offset-=_;var D=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),I.length-1&&(this.yylineno-=I.length-1);var k=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:I?(I.length===D.length?this.yylloc.first_column:0)+D[D.length-I.length].length-I[0].length:this.yylloc.first_column-_},this.options.ranges&&(this.yylloc.range=[k[0],k[0]+this.yyleng-_]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
2247 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(S){this.unput(this.match.slice(S))},"less"),pastInput:o(function(){var S=this.matched.substr(0,this.matched.length-this.match.length);return(S.length>20?"...":"")+S.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var S=this.match;return S.length<20&&(S+=this._input.substr(0,20-S.length)),(S.substr(0,20)+(S.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var S=this.pastInput(),_=new Array(S.length+1).join("-");return S+this.upcomingInput()+`
2248 +`+_+"^"},"showPosition"),test_match:o(function(S,_){var I,D,k;if(this.options.backtrack_lexer&&(k={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(k.yylloc.range=this.yylloc.range.slice(0))),D=S[0].match(/(?:\r\n?|\n).*/g),D&&(this.yylineno+=D.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:D?D[D.length-1].length-D[D.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+S[0].length},this.yytext+=S[0],this.match+=S[0],this.matches=S,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(S[0].length),this.matched+=S[0],I=this.performAction.call(this,this.yy,this,_,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),I)return I;if(this._backtrack){for(var L in k)this[L]=k[L];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var S,_,I,D;this._more||(this.yytext="",this.match="");for(var k=this._currentRules(),L=0;L<k.length;L++)if(I=this._input.match(this.rules[k[L]]),I&&(!_||I[0].length>_[0].length)){if(_=I,D=L,this.options.backtrack_lexer){if(S=this.test_match(I,k[L]),S!==!1)return S;if(this._backtrack){_=!1;continue}else return!1}else if(!this.options.flex)break}return _?(S=this.test_match(_,k[D]),S!==!1?S:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
2249 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var _=this.next();return _||this.lex()},"lex"),begin:o(function(_){this.conditionStack.push(_)},"begin"),popState:o(function(){var _=this.conditionStack.length-1;return _>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(_){return _=this.conditionStack.length-1-Math.abs(_||0),_>=0?this.conditionStack[_]:"INITIAL"},"topState"),pushState:o(function(_){this.begin(_)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(_,I,D,k){var L=k;switch(D){case 0:return this.pushState("shapeData"),I.yytext="",24;break;case 1:return this.pushState("shapeDataStr"),24;break;case 2:return this.popState(),24;break;case 3:let R=/\n\s*/g;return I.yytext=I.yytext.replace(R,"<br/>"),24;break;case 4:return 24;case 5:this.popState();break;case 6:return _.getLogger().trace("Found comment",I.yytext),6;break;case 7:return 8;case 8:this.begin("CLASS");break;case 9:return this.popState(),17;break;case 10:this.popState();break;case 11:_.getLogger().trace("Begin icon"),this.begin("ICON");break;case 12:return _.getLogger().trace("SPACELINE"),6;break;case 13:return 7;case 14:return 16;case 15:_.getLogger().trace("end icon"),this.popState();break;case 16:return _.getLogger().trace("Exploding node"),this.begin("NODE"),20;break;case 17:return _.getLogger().trace("Cloud"),this.begin("NODE"),20;break;case 18:return _.getLogger().trace("Explosion Bang"),this.begin("NODE"),20;break;case 19:return _.getLogger().trace("Cloud Bang"),this.begin("NODE"),20;break;case 20:return this.begin("NODE"),20;break;case 21:return this.begin("NODE"),20;break;case 22:return this.begin("NODE"),20;break;case 23:return this.begin("NODE"),20;break;case 24:return 13;case 25:return 23;case 26:return 11;case 27:this.begin("NSTR2");break;case 28:return"NODE_DESCR";case 29:this.popState();break;case 30:_.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 31:return _.getLogger().trace("description:",I.yytext),"NODE_DESCR";break;case 32:this.popState();break;case 33:return this.popState(),_.getLogger().trace("node end ))"),"NODE_DEND";break;case 34:return this.popState(),_.getLogger().trace("node end )"),"NODE_DEND";break;case 35:return this.popState(),_.getLogger().trace("node end ...",I.yytext),"NODE_DEND";break;case 36:return this.popState(),_.getLogger().trace("node end (("),"NODE_DEND";break;case 37:return this.popState(),_.getLogger().trace("node end (-"),"NODE_DEND";break;case 38:return this.popState(),_.getLogger().trace("node end (-"),"NODE_DEND";break;case 39:return this.popState(),_.getLogger().trace("node end (("),"NODE_DEND";break;case 40:return this.popState(),_.getLogger().trace("node end (("),"NODE_DEND";break;case 41:return _.getLogger().trace("Long description:",I.yytext),21;break;case 42:return _.getLogger().trace("Long description:",I.yytext),21;break}},"anonymous"),rules:[/^(?:@\{)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^\"]+)/i,/^(?:[^}^"]+)/i,/^(?:\})/i,/^(?:\s*%%.*)/i,/^(?:kanban\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}@]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{shapeDataEndBracket:{rules:[],inclusive:!1},shapeDataStr:{rules:[2,3],inclusive:!1},shapeData:{rules:[1,4,5],inclusive:!1},CLASS:{rules:[9,10],inclusive:!1},ICON:{rules:[14,15],inclusive:!1},NSTR2:{rules:[28,29],inclusive:!1},NSTR:{rules:[31,32],inclusive:!1},NODE:{rules:[27,30,33,34,35,36,37,38,39,40,41,42],inclusive:!1},INITIAL:{rules:[0,6,7,8,11,12,13,16,17,18,19,20,21,22,23,24,25,26],inclusive:!0}}};return A}();C.lexer=T;function E(){this.yy={}}return o(E,"Parser"),E.prototype=C,C.Parser=E,new E}();DB.parser=DB;r1e=DB});var nl,RB,LB,NB,fJe,dJe,i1e,pJe,mJe,Yi,gJe,yJe,vJe,xJe,bJe,wJe,TJe,a1e,s1e=N(()=>{"use strict";zt();gr();vt();Ya();Ew();nl=[],RB=[],LB=0,NB={},fJe=o(()=>{nl=[],RB=[],LB=0,NB={}},"clear"),dJe=o(t=>{if(nl.length===0)return null;let e=nl[0].level,r=null;for(let n=nl.length-1;n>=0;n--)if(nl[n].level===e&&!r&&(r=nl[n]),nl[n].level<e)throw new Error('Items without section detected, found section ("'+nl[n].label+'")');return t===r?.level?null:r},"getSection"),i1e=o(function(){return RB},"getSections"),pJe=o(function(){let t=[],e=[],r=i1e(),n=me();for(let i of r){let a={id:i.id,label:Tr(i.label??"",n),isGroup:!0,ticket:i.ticket,shape:"kanbanSection",level:i.level,look:n.look};e.push(a);let s=nl.filter(l=>l.parentId===i.id);for(let l of s){let u={id:l.id,parentId:i.id,label:Tr(l.label??"",n),isGroup:!1,ticket:l?.ticket,priority:l?.priority,assigned:l?.assigned,icon:l?.icon,shape:"kanbanItem",level:l.level,rx:5,ry:5,cssStyles:["text-align: left"]};e.push(u)}}return{nodes:e,edges:t,other:{},config:me()}},"getData"),mJe=o((t,e,r,n,i)=>{let a=me(),s=a.mindmap?.padding??or.mindmap.padding;switch(n){case Yi.ROUNDED_RECT:case Yi.RECT:case Yi.HEXAGON:s*=2}let l={id:Tr(e,a)||"kbn"+LB++,level:t,label:Tr(r,a),width:a.mindmap?.maxNodeWidth??or.mindmap.maxNodeWidth,padding:s,isGroup:!1};if(i!==void 0){let h;i.includes(`
2250 +`)?h=i+`
2251 +`:h=`{
2252 +`+i+`
2253 +}`;let f=cm(h,{schema:lm});if(f.shape&&(f.shape!==f.shape.toLowerCase()||f.shape.includes("_")))throw new Error(`No such shape: ${f.shape}. Shape names should be lowercase.`);f?.shape&&f.shape==="kanbanItem"&&(l.shape=f?.shape),f?.label&&(l.label=f?.label),f?.icon&&(l.icon=f?.icon.toString()),f?.assigned&&(l.assigned=f?.assigned.toString()),f?.ticket&&(l.ticket=f?.ticket.toString()),f?.priority&&(l.priority=f?.priority)}let u=dJe(t);u?l.parentId=u.id||"kbn"+LB++:RB.push(l),nl.push(l)},"addNode"),Yi={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},gJe=o((t,e)=>{switch(Y.debug("In get type",t,e),t){case"[":return Yi.RECT;case"(":return e===")"?Yi.ROUNDED_RECT:Yi.CLOUD;case"((":return Yi.CIRCLE;case")":return Yi.CLOUD;case"))":return Yi.BANG;case"{{":return Yi.HEXAGON;default:return Yi.DEFAULT}},"getType"),yJe=o((t,e)=>{NB[t]=e},"setElementForId"),vJe=o(t=>{if(!t)return;let e=me(),r=nl[nl.length-1];t.icon&&(r.icon=Tr(t.icon,e)),t.class&&(r.cssClasses=Tr(t.class,e))},"decorateNode"),xJe=o(t=>{switch(t){case Yi.DEFAULT:return"no-border";case Yi.RECT:return"rect";case Yi.ROUNDED_RECT:return"rounded-rect";case Yi.CIRCLE:return"circle";case Yi.CLOUD:return"cloud";case Yi.BANG:return"bang";case Yi.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),bJe=o(()=>Y,"getLogger"),wJe=o(t=>NB[t],"getElementById"),TJe={clear:fJe,addNode:mJe,getSections:i1e,getData:pJe,nodeType:Yi,getType:gJe,setElementForId:yJe,decorateNode:vJe,type2Str:xJe,getLogger:bJe,getElementById:wJe},a1e=TJe});var kJe,o1e,l1e=N(()=>{"use strict";zt();vt();Vc();Ei();Ya();Hw();eT();kJe=o(async(t,e,r,n)=>{Y.debug(`Rendering kanban diagram
2254 +`+t);let a=n.db.getData(),s=me();s.htmlLabels=!1;let l=sa(e),u=l.append("g");u.attr("class","sections");let h=l.append("g");h.attr("class","items");let f=a.nodes.filter(v=>v.isGroup),d=0,p=10,m=[],g=25;for(let v of f){let x=s?.kanban?.sectionWidth||200;d=d+1,v.x=x*d+(d-1)*p/2,v.width=x,v.y=0,v.height=x*3,v.rx=5,v.ry=5,v.cssClasses=v.cssClasses+" section-"+d;let b=await ym(u,v);g=Math.max(g,b?.labelBBox?.height),m.push(b)}let y=0;for(let v of f){let x=m[y];y=y+1;let b=s?.kanban?.sectionWidth||200,w=-b*3/2+g,C=w,T=a.nodes.filter(S=>S.parentId===v.id);for(let S of T){if(S.isGroup)throw new Error("Groups within groups are not allowed in Kanban diagrams");S.x=v.x,S.width=b-1.5*p;let I=(await vm(h,S,{config:s})).node().getBBox();S.y=C+I.height/2,await k2(S),C=S.y+I.height/2+p/2}let E=x.cluster.select("rect"),A=Math.max(C-w+3*p,50)+(g-25);E.attr("height",A)}Ao(void 0,l,s.mindmap?.padding??or.kanban.padding,s.mindmap?.useMaxWidth??or.kanban.useMaxWidth)},"draw"),o1e={draw:kJe}});var EJe,SJe,c1e,u1e=N(()=>{"use strict";Ys();EJe=o(t=>{let e="";for(let n=0;n<t.THEME_COLOR_LIMIT;n++)t["lineColor"+n]=t["lineColor"+n]||t["cScaleInv"+n],ca(t["lineColor"+n])?t["lineColor"+n]=Dt(t["lineColor"+n],20):t["lineColor"+n]=Ot(t["lineColor"+n],20);let r=o((n,i)=>t.darkMode?Ot(n,i):Dt(n,i),"adjuster");for(let n=0;n<t.THEME_COLOR_LIMIT;n++){let i=""+(17-3*n);e+=`
2255 + .section-${n-1} rect, .section-${n-1} path, .section-${n-1} circle, .section-${n-1} polygon, .section-${n-1} path {
2256 + fill: ${r(t["cScale"+n],10)};
2257 + stroke: ${r(t["cScale"+n],10)};
2258 +
2259 + }
2260 + .section-${n-1} text {
2261 + fill: ${t["cScaleLabel"+n]};
2262 + }
2263 + .node-icon-${n-1} {
2264 + font-size: 40px;
2265 + color: ${t["cScaleLabel"+n]};
2266 + }
2267 + .section-edge-${n-1}{
2268 + stroke: ${t["cScale"+n]};
2269 + }
2270 + .edge-depth-${n-1}{
2271 + stroke-width: ${i};
2272 + }
2273 + .section-${n-1} line {
2274 + stroke: ${t["cScaleInv"+n]} ;
2275 + stroke-width: 3;
2276 + }
2277 +
2278 + .disabled, .disabled circle, .disabled text {
2279 + fill: lightgray;
2280 + }
2281 + .disabled text {
2282 + fill: #efefef;
2283 + }
2284 +
2285 + .node rect,
2286 + .node circle,
2287 + .node ellipse,
2288 + .node polygon,
2289 + .node path {
2290 + fill: ${t.background};
2291 + stroke: ${t.nodeBorder};
2292 + stroke-width: 1px;
2293 + }
2294 +
2295 + .kanban-ticket-link {
2296 + fill: ${t.background};
2297 + stroke: ${t.nodeBorder};
2298 + text-decoration: underline;
2299 + }
2300 + `}return e},"genSections"),SJe=o(t=>`
2301 + .edge {
2302 + stroke-width: 3;
2303 + }
2304 + ${EJe(t)}
2305 + .section-root rect, .section-root path, .section-root circle, .section-root polygon {
2306 + fill: ${t.git0};
2307 + }
2308 + .section-root text {
2309 + fill: ${t.gitBranchLabel0};
2310 + }
2311 + .icon-container {
2312 + height:100%;
2313 + display: flex;
2314 + justify-content: center;
2315 + align-items: center;
2316 + }
2317 + .edge {
2318 + fill: none;
2319 + }
2320 + .cluster-label, .label {
2321 + color: ${t.textColor};
2322 + fill: ${t.textColor};
2323 + }
2324 + .kanban-label {
2325 + dy: 1em;
2326 + alignment-baseline: middle;
2327 + text-anchor: middle;
2328 + dominant-baseline: middle;
2329 + text-align: center;
2330 + }
2331 +`,"getStyles"),c1e=SJe});var h1e={};hr(h1e,{diagram:()=>CJe});var CJe,f1e=N(()=>{"use strict";n1e();s1e();l1e();u1e();CJe={db:a1e,renderer:o1e,parser:r1e,styles:c1e}});var MB,d4,m1e=N(()=>{"use strict";MB=function(){var t=o(function(l,u,h,f){for(h=h||{},f=l.length;f--;h[l[f]]=u);return h},"o"),e=[1,9],r=[1,10],n=[1,5,10,12],i={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:o(function(u,h,f,d,p,m,g){var y=m.length-1;switch(p){case 7:let v=d.findOrCreateNode(m[y-4].trim().replaceAll('""','"')),x=d.findOrCreateNode(m[y-2].trim().replaceAll('""','"')),b=parseFloat(m[y].trim());d.addLink(v,x,b);break;case 8:case 9:case 11:this.$=m[y];break;case 10:this.$=m[y-1];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:e,20:r},{1:[2,6],7:11,10:[1,12]},t(r,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(n,[2,8]),t(n,[2,9]),{19:[1,16]},t(n,[2,11]),{1:[2,1]},{1:[2,5]},t(r,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:e,20:r},{15:18,16:7,17:8,18:e,20:r},{18:[1,19]},t(r,[2,3]),{12:[1,20]},t(n,[2,10]),{15:21,16:7,17:8,18:e,20:r},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:o(function(u,h){if(h.recoverable)this.trace(u);else{var f=new Error(u);throw f.hash=h,f}},"parseError"),parse:o(function(u){var h=this,f=[0],d=[],p=[null],m=[],g=this.table,y="",v=0,x=0,b=0,w=2,C=1,T=m.slice.call(arguments,1),E=Object.create(this.lexer),A={yy:{}};for(var S in this.yy)Object.prototype.hasOwnProperty.call(this.yy,S)&&(A.yy[S]=this.yy[S]);E.setInput(u,A.yy),A.yy.lexer=E,A.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var _=E.yylloc;m.push(_);var I=E.options&&E.options.ranges;typeof A.yy.parseError=="function"?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function D(ie){f.length=f.length-2*ie,p.length=p.length-ie,m.length=m.length-ie}o(D,"popStack");function k(){var ie;return ie=d.pop()||E.lex()||C,typeof ie!="number"&&(ie instanceof Array&&(d=ie,ie=d.pop()),ie=h.symbols_[ie]||ie),ie}o(k,"lex");for(var L,R,O,M,B,F,P={},z,$,H,Q;;){if(O=f[f.length-1],this.defaultActions[O]?M=this.defaultActions[O]:((L===null||typeof L>"u")&&(L=k()),M=g[O]&&g[O][L]),typeof M>"u"||!M.length||!M[0]){var j="";Q=[];for(z in g[O])this.terminals_[z]&&z>w&&Q.push("'"+this.terminals_[z]+"'");E.showPosition?j="Parse error on line "+(v+1)+`:
2332 +`+E.showPosition()+`
2333 +Expecting `+Q.join(", ")+", got '"+(this.terminals_[L]||L)+"'":j="Parse error on line "+(v+1)+": Unexpected "+(L==C?"end of input":"'"+(this.terminals_[L]||L)+"'"),this.parseError(j,{text:E.match,token:this.terminals_[L]||L,line:E.yylineno,loc:_,expected:Q})}if(M[0]instanceof Array&&M.length>1)throw new Error("Parse Error: multiple actions possible at state: "+O+", token: "+L);switch(M[0]){case 1:f.push(L),p.push(E.yytext),m.push(E.yylloc),f.push(M[1]),L=null,R?(L=R,R=null):(x=E.yyleng,y=E.yytext,v=E.yylineno,_=E.yylloc,b>0&&b--);break;case 2:if($=this.productions_[M[1]][1],P.$=p[p.length-$],P._$={first_line:m[m.length-($||1)].first_line,last_line:m[m.length-1].last_line,first_column:m[m.length-($||1)].first_column,last_column:m[m.length-1].last_column},I&&(P._$.range=[m[m.length-($||1)].range[0],m[m.length-1].range[1]]),F=this.performAction.apply(P,[y,x,v,A.yy,M[1],p,m].concat(T)),typeof F<"u")return F;$&&(f=f.slice(0,-1*$*2),p=p.slice(0,-1*$),m=m.slice(0,-1*$)),f.push(this.productions_[M[1]][0]),p.push(P.$),m.push(P._$),H=g[f[f.length-2]][f[f.length-1]],f.push(H);break;case 3:return!0}}return!0},"parse")},a=function(){var l={EOF:1,parseError:o(function(h,f){if(this.yy.parser)this.yy.parser.parseError(h,f);else throw new Error(h)},"parseError"),setInput:o(function(u,h){return this.yy=h||this.yy||{},this._input=u,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var h=u.match(/(?:\r\n?|\n).*/g);return h?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},"input"),unput:o(function(u){var h=u.length,f=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-h),this.offset-=h;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),f.length-1&&(this.yylineno-=f.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:f?(f.length===d.length?this.yylloc.first_column:0)+d[d.length-f.length].length-f[0].length:this.yylloc.first_column-h},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-h]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
2334 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(u){this.unput(this.match.slice(u))},"less"),pastInput:o(function(){var u=this.matched.substr(0,this.matched.length-this.match.length);return(u.length>20?"...":"")+u.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var u=this.match;return u.length<20&&(u+=this._input.substr(0,20-u.length)),(u.substr(0,20)+(u.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var u=this.pastInput(),h=new Array(u.length+1).join("-");return u+this.upcomingInput()+`
2335 +`+h+"^"},"showPosition"),test_match:o(function(u,h){var f,d,p;if(this.options.backtrack_lexer&&(p={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(p.yylloc.range=this.yylloc.range.slice(0))),d=u[0].match(/(?:\r\n?|\n).*/g),d&&(this.yylineno+=d.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:d?d[d.length-1].length-d[d.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+u[0].length},this.yytext+=u[0],this.match+=u[0],this.matches=u,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(u[0].length),this.matched+=u[0],f=this.performAction.call(this,this.yy,this,h,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),f)return f;if(this._backtrack){for(var m in p)this[m]=p[m];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var u,h,f,d;this._more||(this.yytext="",this.match="");for(var p=this._currentRules(),m=0;m<p.length;m++)if(f=this._input.match(this.rules[p[m]]),f&&(!h||f[0].length>h[0].length)){if(h=f,d=m,this.options.backtrack_lexer){if(u=this.test_match(f,p[m]),u!==!1)return u;if(this._backtrack){h=!1;continue}else return!1}else if(!this.options.flex)break}return h?(u=this.test_match(h,p[d]),u!==!1?u:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
2336 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var h=this.next();return h||this.lex()},"lex"),begin:o(function(h){this.conditionStack.push(h)},"begin"),popState:o(function(){var h=this.conditionStack.length-1;return h>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(h){return h=this.conditionStack.length-1-Math.abs(h||0),h>=0?this.conditionStack[h]:"INITIAL"},"topState"),pushState:o(function(h){this.begin(h)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(h,f,d,p){var m=p;switch(d){case 0:return this.pushState("csv"),4;break;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;break;case 5:return 20;case 6:return this.popState("escaped_text"),18;break;case 7:return 19}},"anonymous"),rules:[/^(?:sankey-beta\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return l}();i.lexer=a;function s(){this.yy={}}return o(s,"Parser"),s.prototype=i,i.Parser=s,new s}();MB.parser=MB;d4=MB});var XS,jS,YS,LJe,IB,RJe,OB,NJe,MJe,IJe,OJe,g1e,y1e=N(()=>{"use strict";zt();gr();mi();XS=[],jS=[],YS=new Map,LJe=o(()=>{XS=[],jS=[],YS=new Map,Ar()},"clear"),IB=class{constructor(e,r,n=0){this.source=e;this.target=r;this.value=n}static{o(this,"SankeyLink")}},RJe=o((t,e,r)=>{XS.push(new IB(t,e,r))},"addLink"),OB=class{constructor(e){this.ID=e}static{o(this,"SankeyNode")}},NJe=o(t=>{t=Ze.sanitizeText(t,me());let e=YS.get(t);return e===void 0&&(e=new OB(t),YS.set(t,e),jS.push(e)),e},"findOrCreateNode"),MJe=o(()=>jS,"getNodes"),IJe=o(()=>XS,"getLinks"),OJe=o(()=>({nodes:jS.map(t=>({id:t.ID})),links:XS.map(t=>({source:t.source.ID,target:t.target.ID,value:t.value}))}),"getGraph"),g1e={nodesMap:YS,getConfig:o(()=>me().sankey,"getConfig"),getNodes:MJe,getLinks:IJe,getGraph:OJe,addLink:RJe,findOrCreateNode:NJe,getAccTitle:Rr,setAccTitle:Lr,getAccDescription:Mr,setAccDescription:Nr,getDiagramTitle:Ir,setDiagramTitle:$r,clear:LJe}});function p4(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r<n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r<i||r===void 0&&i>=i)&&(r=i)}return r}var v1e=N(()=>{"use strict";o(p4,"max")});function cy(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var x1e=N(()=>{"use strict";o(cy,"min")});function uy(t,e){let r=0;if(e===void 0)for(let n of t)(n=+n)&&(r+=n);else{let n=-1;for(let i of t)(i=+e(i,++n,t))&&(r+=i)}return r}var b1e=N(()=>{"use strict";o(uy,"sum")});var PB=N(()=>{"use strict";v1e();x1e();b1e()});function PJe(t){return t.target.depth}function BB(t){return t.depth}function FB(t,e){return e-1-t.height}function m4(t,e){return t.sourceLinks.length?t.depth:e-1}function $B(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?cy(t.sourceLinks,PJe)-1:0}var zB=N(()=>{"use strict";PB();o(PJe,"targetDepth");o(BB,"left");o(FB,"right");o(m4,"justify");o($B,"center")});function hy(t){return function(){return t}}var w1e=N(()=>{"use strict";o(hy,"constant")});function T1e(t,e){return KS(t.source,e.source)||t.index-e.index}function k1e(t,e){return KS(t.target,e.target)||t.index-e.index}function KS(t,e){return t.y0-e.y0}function GB(t){return t.value}function BJe(t){return t.index}function FJe(t){return t.nodes}function $Je(t){return t.links}function E1e(t,e){let r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function S1e({nodes:t}){for(let e of t){let r=e.y0,n=r;for(let i of e.sourceLinks)i.y0=r+i.width/2,r+=i.width;for(let i of e.targetLinks)i.y1=n+i.width/2,n+=i.width}}function QS(){let t=0,e=0,r=1,n=1,i=24,a=8,s,l=BJe,u=m4,h,f,d=FJe,p=$Je,m=6;function g(){let O={nodes:d.apply(null,arguments),links:p.apply(null,arguments)};return y(O),v(O),x(O),b(O),T(O),S1e(O),O}o(g,"sankey"),g.update=function(O){return S1e(O),O},g.nodeId=function(O){return arguments.length?(l=typeof O=="function"?O:hy(O),g):l},g.nodeAlign=function(O){return arguments.length?(u=typeof O=="function"?O:hy(O),g):u},g.nodeSort=function(O){return arguments.length?(h=O,g):h},g.nodeWidth=function(O){return arguments.length?(i=+O,g):i},g.nodePadding=function(O){return arguments.length?(a=s=+O,g):a},g.nodes=function(O){return arguments.length?(d=typeof O=="function"?O:hy(O),g):d},g.links=function(O){return arguments.length?(p=typeof O=="function"?O:hy(O),g):p},g.linkSort=function(O){return arguments.length?(f=O,g):f},g.size=function(O){return arguments.length?(t=e=0,r=+O[0],n=+O[1],g):[r-t,n-e]},g.extent=function(O){return arguments.length?(t=+O[0][0],r=+O[1][0],e=+O[0][1],n=+O[1][1],g):[[t,e],[r,n]]},g.iterations=function(O){return arguments.length?(m=+O,g):m};function y({nodes:O,links:M}){for(let[F,P]of O.entries())P.index=F,P.sourceLinks=[],P.targetLinks=[];let B=new Map(O.map((F,P)=>[l(F,P,O),F]));for(let[F,P]of M.entries()){P.index=F;let{source:z,target:$}=P;typeof z!="object"&&(z=P.source=E1e(B,z)),typeof $!="object"&&($=P.target=E1e(B,$)),z.sourceLinks.push(P),$.targetLinks.push(P)}if(f!=null)for(let{sourceLinks:F,targetLinks:P}of O)F.sort(f),P.sort(f)}o(y,"computeNodeLinks");function v({nodes:O}){for(let M of O)M.value=M.fixedValue===void 0?Math.max(uy(M.sourceLinks,GB),uy(M.targetLinks,GB)):M.fixedValue}o(v,"computeNodeValues");function x({nodes:O}){let M=O.length,B=new Set(O),F=new Set,P=0;for(;B.size;){for(let z of B){z.depth=P;for(let{target:$}of z.sourceLinks)F.add($)}if(++P>M)throw new Error("circular link");B=F,F=new Set}}o(x,"computeNodeDepths");function b({nodes:O}){let M=O.length,B=new Set(O),F=new Set,P=0;for(;B.size;){for(let z of B){z.height=P;for(let{source:$}of z.targetLinks)F.add($)}if(++P>M)throw new Error("circular link");B=F,F=new Set}}o(b,"computeNodeHeights");function w({nodes:O}){let M=p4(O,P=>P.depth)+1,B=(r-t-i)/(M-1),F=new Array(M);for(let P of O){let z=Math.max(0,Math.min(M-1,Math.floor(u.call(null,P,M))));P.layer=z,P.x0=t+z*B,P.x1=P.x0+i,F[z]?F[z].push(P):F[z]=[P]}if(h)for(let P of F)P.sort(h);return F}o(w,"computeNodeLayers");function C(O){let M=cy(O,B=>(n-e-(B.length-1)*s)/uy(B,GB));for(let B of O){let F=e;for(let P of B){P.y0=F,P.y1=F+P.value*M,F=P.y1+s;for(let z of P.sourceLinks)z.width=z.value*M}F=(n-F+s)/(B.length+1);for(let P=0;P<B.length;++P){let z=B[P];z.y0+=F*(P+1),z.y1+=F*(P+1)}k(B)}}o(C,"initializeNodeBreadths");function T(O){let M=w(O);s=Math.min(a,(n-e)/(p4(M,B=>B.length)-1)),C(M);for(let B=0;B<m;++B){let F=Math.pow(.99,B),P=Math.max(1-F,(B+1)/m);A(M,F,P),E(M,F,P)}}o(T,"computeNodeBreadths");function E(O,M,B){for(let F=1,P=O.length;F<P;++F){let z=O[F];for(let $ of z){let H=0,Q=0;for(let{source:ie,value:ne}of $.targetLinks){let le=ne*($.layer-ie.layer);H+=L(ie,$)*le,Q+=le}if(!(Q>0))continue;let j=(H/Q-$.y0)*M;$.y0+=j,$.y1+=j,D($)}h===void 0&&z.sort(KS),S(z,B)}}o(E,"relaxLeftToRight");function A(O,M,B){for(let F=O.length,P=F-2;P>=0;--P){let z=O[P];for(let $ of z){let H=0,Q=0;for(let{target:ie,value:ne}of $.sourceLinks){let le=ne*(ie.layer-$.layer);H+=R($,ie)*le,Q+=le}if(!(Q>0))continue;let j=(H/Q-$.y0)*M;$.y0+=j,$.y1+=j,D($)}h===void 0&&z.sort(KS),S(z,B)}}o(A,"relaxRightToLeft");function S(O,M){let B=O.length>>1,F=O[B];I(O,F.y0-s,B-1,M),_(O,F.y1+s,B+1,M),I(O,n,O.length-1,M),_(O,e,0,M)}o(S,"resolveCollisions");function _(O,M,B,F){for(;B<O.length;++B){let P=O[B],z=(M-P.y0)*F;z>1e-6&&(P.y0+=z,P.y1+=z),M=P.y1+s}}o(_,"resolveCollisionsTopToBottom");function I(O,M,B,F){for(;B>=0;--B){let P=O[B],z=(P.y1-M)*F;z>1e-6&&(P.y0-=z,P.y1-=z),M=P.y0-s}}o(I,"resolveCollisionsBottomToTop");function D({sourceLinks:O,targetLinks:M}){if(f===void 0){for(let{source:{sourceLinks:B}}of M)B.sort(k1e);for(let{target:{targetLinks:B}}of O)B.sort(T1e)}}o(D,"reorderNodeLinks");function k(O){if(f===void 0)for(let{sourceLinks:M,targetLinks:B}of O)M.sort(k1e),B.sort(T1e)}o(k,"reorderLinks");function L(O,M){let B=O.y0-(O.sourceLinks.length-1)*s/2;for(let{target:F,width:P}of O.sourceLinks){if(F===M)break;B+=P+s}for(let{source:F,width:P}of M.targetLinks){if(F===O)break;B-=P}return B}o(L,"targetTop");function R(O,M){let B=M.y0-(M.targetLinks.length-1)*s/2;for(let{source:F,width:P}of M.targetLinks){if(F===O)break;B+=P+s}for(let{target:F,width:P}of O.sourceLinks){if(F===M)break;B-=P}return B}return o(R,"sourceTop"),g}var C1e=N(()=>{"use strict";PB();zB();w1e();o(T1e,"ascendingSourceBreadth");o(k1e,"ascendingTargetBreadth");o(KS,"ascendingBreadth");o(GB,"value");o(BJe,"defaultId");o(FJe,"defaultNodes");o($Je,"defaultLinks");o(E1e,"find");o(S1e,"computeLinkBreadths");o(QS,"Sankey")});function HB(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function A1e(){return new HB}var VB,UB,Xp,zJe,WB,_1e=N(()=>{"use strict";VB=Math.PI,UB=2*VB,Xp=1e-6,zJe=UB-Xp;o(HB,"Path");o(A1e,"path");HB.prototype=A1e.prototype={constructor:HB,moveTo:o(function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},"moveTo"),closePath:o(function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},"closePath"),lineTo:o(function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},"lineTo"),quadraticCurveTo:o(function(t,e,r,n){this._+="Q"+ +t+","+ +e+","+(this._x1=+r)+","+(this._y1=+n)},"quadraticCurveTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._+="C"+ +t+","+ +e+","+ +r+","+ +n+","+(this._x1=+i)+","+(this._y1=+a)},"bezierCurveTo"),arcTo:o(function(t,e,r,n,i){t=+t,e=+e,r=+r,n=+n,i=+i;var a=this._x1,s=this._y1,l=r-t,u=n-e,h=a-t,f=s-e,d=h*h+f*f;if(i<0)throw new Error("negative radius: "+i);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(d>Xp)if(!(Math.abs(f*l-u*h)>Xp)||!i)this._+="L"+(this._x1=t)+","+(this._y1=e);else{var p=r-a,m=n-s,g=l*l+u*u,y=p*p+m*m,v=Math.sqrt(g),x=Math.sqrt(d),b=i*Math.tan((VB-Math.acos((g+d-y)/(2*v*x)))/2),w=b/x,C=b/v;Math.abs(w-1)>Xp&&(this._+="L"+(t+w*h)+","+(e+w*f)),this._+="A"+i+","+i+",0,0,"+ +(f*p>h*m)+","+(this._x1=t+C*l)+","+(this._y1=e+C*u)}},"arcTo"),arc:o(function(t,e,r,n,i,a){t=+t,e=+e,r=+r,a=!!a;var s=r*Math.cos(n),l=r*Math.sin(n),u=t+s,h=e+l,f=1^a,d=a?n-i:i-n;if(r<0)throw new Error("negative radius: "+r);this._x1===null?this._+="M"+u+","+h:(Math.abs(this._x1-u)>Xp||Math.abs(this._y1-h)>Xp)&&(this._+="L"+u+","+h),r&&(d<0&&(d=d%UB+UB),d>zJe?this._+="A"+r+","+r+",0,1,"+f+","+(t-s)+","+(e-l)+"A"+r+","+r+",0,1,"+f+","+(this._x1=u)+","+(this._y1=h):d>Xp&&(this._+="A"+r+","+r+",0,"+ +(d>=VB)+","+f+","+(this._x1=t+r*Math.cos(i))+","+(this._y1=e+r*Math.sin(i))))},"arc"),rect:o(function(t,e,r,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +n+"h"+-r+"Z"},"rect"),toString:o(function(){return this._},"toString")};WB=A1e});var D1e=N(()=>{"use strict";_1e()});function ZS(t){return o(function(){return t},"constant")}var L1e=N(()=>{"use strict";o(ZS,"default")});function R1e(t){return t[0]}function N1e(t){return t[1]}var M1e=N(()=>{"use strict";o(R1e,"x");o(N1e,"y")});var I1e,O1e=N(()=>{"use strict";I1e=Array.prototype.slice});function GJe(t){return t.source}function VJe(t){return t.target}function UJe(t){var e=GJe,r=VJe,n=R1e,i=N1e,a=null;function s(){var l,u=I1e.call(arguments),h=e.apply(this,u),f=r.apply(this,u);if(a||(a=l=WB()),t(a,+n.apply(this,(u[0]=h,u)),+i.apply(this,u),+n.apply(this,(u[0]=f,u)),+i.apply(this,u)),l)return a=null,l+""||null}return o(s,"link"),s.source=function(l){return arguments.length?(e=l,s):e},s.target=function(l){return arguments.length?(r=l,s):r},s.x=function(l){return arguments.length?(n=typeof l=="function"?l:ZS(+l),s):n},s.y=function(l){return arguments.length?(i=typeof l=="function"?l:ZS(+l),s):i},s.context=function(l){return arguments.length?(a=l??null,s):a},s}function HJe(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e=(e+n)/2,r,e,i,n,i)}function qB(){return UJe(HJe)}var P1e=N(()=>{"use strict";D1e();O1e();L1e();M1e();o(GJe,"linkSource");o(VJe,"linkTarget");o(UJe,"link");o(HJe,"curveHorizontal");o(qB,"linkHorizontal")});var B1e=N(()=>{"use strict";P1e()});function WJe(t){return[t.source.x1,t.y0]}function qJe(t){return[t.target.x0,t.y1]}function JS(){return qB().source(WJe).target(qJe)}var F1e=N(()=>{"use strict";B1e();o(WJe,"horizontalSource");o(qJe,"horizontalTarget");o(JS,"default")});var $1e=N(()=>{"use strict";C1e();zB();F1e()});var g4,z1e=N(()=>{"use strict";g4=class t{static{o(this,"Uid")}static{this.count=0}static next(e){return new t(e+ ++t.count)}constructor(e){this.id=e,this.href=`#${e}`}toString(){return"url("+this.href+")"}}});var YJe,XJe,G1e,V1e=N(()=>{"use strict";zt();dr();$1e();Ei();z1e();YJe={left:BB,right:FB,center:$B,justify:m4},XJe=o(function(t,e,r,n){let{securityLevel:i,sankey:a}=me(),s=A3.sankey,l;i==="sandbox"&&(l=Ge("#i"+e));let u=i==="sandbox"?Ge(l.nodes()[0].contentDocument.body):Ge("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):Ge(`[id="${e}"]`),f=a?.width??s.width,d=a?.height??s.width,p=a?.useMaxWidth??s.useMaxWidth,m=a?.nodeAlignment??s.nodeAlignment,g=a?.prefix??s.prefix,y=a?.suffix??s.suffix,v=a?.showValues??s.showValues,x=n.db.getGraph(),b=YJe[m];QS().nodeId(I=>I.id).nodeWidth(10).nodePadding(10+(v?15:0)).nodeAlign(b).extent([[0,0],[f,d]])(x);let T=gu(e9);h.append("g").attr("class","nodes").selectAll(".node").data(x.nodes).join("g").attr("class","node").attr("id",I=>(I.uid=g4.next("node-")).id).attr("transform",function(I){return"translate("+I.x0+","+I.y0+")"}).attr("x",I=>I.x0).attr("y",I=>I.y0).append("rect").attr("height",I=>I.y1-I.y0).attr("width",I=>I.x1-I.x0).attr("fill",I=>T(I.id));let E=o(({id:I,value:D})=>v?`${I}
2337 +${g}${Math.round(D*100)/100}${y}`:I,"getText");h.append("g").attr("class","node-labels").attr("font-size",14).selectAll("text").data(x.nodes).join("text").attr("x",I=>I.x0<f/2?I.x1+6:I.x0-6).attr("y",I=>(I.y1+I.y0)/2).attr("dy",`${v?"0":"0.35"}em`).attr("text-anchor",I=>I.x0<f/2?"start":"end").text(E);let A=h.append("g").attr("class","links").attr("fill","none").attr("stroke-opacity",.5).selectAll(".link").data(x.links).join("g").attr("class","link").style("mix-blend-mode","multiply"),S=a?.linkColor??"gradient";if(S==="gradient"){let I=A.append("linearGradient").attr("id",D=>(D.uid=g4.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",D=>D.source.x1).attr("x2",D=>D.target.x0);I.append("stop").attr("offset","0%").attr("stop-color",D=>T(D.source.id)),I.append("stop").attr("offset","100%").attr("stop-color",D=>T(D.target.id))}let _;switch(S){case"gradient":_=o(I=>I.uid,"coloring");break;case"source":_=o(I=>T(I.source.id),"coloring");break;case"target":_=o(I=>T(I.target.id),"coloring");break;default:_=S}A.append("path").attr("d",JS()).attr("stroke",_).attr("stroke-width",I=>Math.max(1,I.width)),Ao(void 0,h,0,p)},"draw"),G1e={draw:XJe}});var U1e,H1e=N(()=>{"use strict";U1e=o(t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,`
2338 +`).trim(),"prepareTextForParsing")});var jJe,W1e,q1e=N(()=>{"use strict";jJe=o(t=>`.label {
2339 + font-family: ${t.fontFamily};
2340 + }`,"getStyles"),W1e=jJe});var Y1e={};hr(Y1e,{diagram:()=>QJe});var KJe,QJe,X1e=N(()=>{"use strict";m1e();y1e();V1e();H1e();q1e();KJe=d4.parse.bind(d4);d4.parse=t=>KJe(U1e(t));QJe={styles:W1e,parser:d4,db:g1e,renderer:G1e}});var Q1e,YB,tet,ret,net,iet,aet,Bf,XB=N(()=>{"use strict";ji();Ya();ir();mi();Q1e={packet:[]},YB=structuredClone(Q1e),tet=or.packet,ret=o(()=>{let t=Fi({...tet,...cr().packet});return t.showBits&&(t.paddingY+=10),t},"getConfig"),net=o(()=>YB.packet,"getPacket"),iet=o(t=>{t.length>0&&YB.packet.push(t)},"pushWord"),aet=o(()=>{Ar(),YB=structuredClone(Q1e)},"clear"),Bf={pushWord:iet,getPacket:net,getConfig:ret,clear:aet,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr}});var set,oet,cet,Z1e,J1e=N(()=>{"use strict";kp();vt();T1();XB();set=1e4,oet=o(t=>{$c(t,Bf);let e=-1,r=[],n=1,{bitsPerRow:i}=Bf.getConfig();for(let{start:a,end:s,label:l}of t.blocks){if(s&&s<a)throw new Error(`Packet block ${a} - ${s} is invalid. End must be greater than start.`);if(a!==e+1)throw new Error(`Packet block ${a} - ${s??a} is not contiguous. It should start from ${e+1}.`);for(e=s??a,Y.debug(`Packet block ${a} - ${e} with label ${l}`);r.length<=i+1&&Bf.getPacket().length<set;){let[u,h]=cet({start:a,end:s,label:l},n,i);if(r.push(u),u.end+1===n*i&&(Bf.pushWord(r),r=[],n++),!h)break;({start:a,end:s,label:l}=h)}}Bf.pushWord(r)},"populate"),cet=o((t,e,r)=>{if(t.end===void 0&&(t.end=t.start),t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);return t.end+1<=e*r?[t,void 0]:[{start:t.start,end:e*r-1,label:t.label},{start:e*r,end:t.end,label:t.label}]},"getNextFittingBlock"),Z1e={parse:o(async t=>{let e=await uo("packet",t);Y.debug(e),oet(e)},"parse")}});var uet,het,eye,tye=N(()=>{"use strict";Vc();Ei();uet=o((t,e,r,n)=>{let i=n.db,a=i.getConfig(),{rowHeight:s,paddingY:l,bitWidth:u,bitsPerRow:h}=a,f=i.getPacket(),d=i.getDiagramTitle(),p=s+l,m=p*(f.length+1)-(d?0:s),g=u*h+2,y=sa(e);y.attr("viewbox",`0 0 ${g} ${m}`),vn(y,m,g,a.useMaxWidth);for(let[v,x]of f.entries())het(y,x,v,a);y.append("text").text(d).attr("x",g/2).attr("y",m-p/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),het=o((t,e,r,{rowHeight:n,paddingX:i,paddingY:a,bitWidth:s,bitsPerRow:l,showBits:u})=>{let h=t.append("g"),f=r*(n+a)+a;for(let d of e){let p=d.start%l*s+1,m=(d.end-d.start+1)*s-i;if(h.append("rect").attr("x",p).attr("y",f).attr("width",m).attr("height",n).attr("class","packetBlock"),h.append("text").attr("x",p+m/2).attr("y",f+n/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(d.label),!u)continue;let g=d.end===d.start,y=f-2;h.append("text").attr("x",p+(g?m/2:0)).attr("y",y).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",g?"middle":"start").text(d.start),g||h.append("text").attr("x",p+m).attr("y",y).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(d.end)}},"drawWord"),eye={draw:uet}});var fet,rye,nye=N(()=>{"use strict";ir();fet={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},rye=o(({packet:t}={})=>{let e=Fi(fet,t);return`
2341 + .packetByte {
2342 + font-size: ${e.byteFontSize};
2343 + }
2344 + .packetByte.start {
2345 + fill: ${e.startByteColor};
2346 + }
2347 + .packetByte.end {
2348 + fill: ${e.endByteColor};
2349 + }
2350 + .packetLabel {
2351 + fill: ${e.labelColor};
2352 + font-size: ${e.labelFontSize};
2353 + }
2354 + .packetTitle {
2355 + fill: ${e.titleColor};
2356 + font-size: ${e.titleFontSize};
2357 + }
2358 + .packetBlock {
2359 + stroke: ${e.blockStrokeColor};
2360 + stroke-width: ${e.blockStrokeWidth};
2361 + fill: ${e.blockFillColor};
2362 + }
2363 + `},"styles")});var iye={};hr(iye,{diagram:()=>det});var det,aye=N(()=>{"use strict";XB();J1e();tye();nye();det={parser:Z1e,db:Bf,renderer:eye,styles:rye}});var fy,lye,jp,get,yet,cye,vet,xet,bet,wet,Tet,ket,Eet,Kp,jB=N(()=>{"use strict";ji();Ya();ir();mi();fy={showLegend:!0,ticks:5,max:null,min:0,graticule:"circle"},lye={axes:[],curves:[],options:fy},jp=structuredClone(lye),get=or.radar,yet=o(()=>Fi({...get,...cr().radar}),"getConfig"),cye=o(()=>jp.axes,"getAxes"),vet=o(()=>jp.curves,"getCurves"),xet=o(()=>jp.options,"getOptions"),bet=o(t=>{jp.axes=t.map(e=>({name:e.name,label:e.label??e.name}))},"setAxes"),wet=o(t=>{jp.curves=t.map(e=>({name:e.name,label:e.label??e.name,entries:Tet(e.entries)}))},"setCurves"),Tet=o(t=>{if(t[0].axis==null)return t.map(r=>r.value);let e=cye();if(e.length===0)throw new Error("Axes must be populated before curves for reference entries");return e.map(r=>{let n=t.find(i=>i.axis?.$refText===r.name);if(n===void 0)throw new Error("Missing entry for axis "+r.label);return n.value})},"computeCurveEntries"),ket=o(t=>{let e=t.reduce((r,n)=>(r[n.name]=n,r),{});jp.options={showLegend:e.showLegend?.value??fy.showLegend,ticks:e.ticks?.value??fy.ticks,max:e.max?.value??fy.max,min:e.min?.value??fy.min,graticule:e.graticule?.value??fy.graticule}},"setOptions"),Eet=o(()=>{Ar(),jp=structuredClone(lye)},"clear"),Kp={getAxes:cye,getCurves:vet,getOptions:xet,setAxes:bet,setCurves:wet,setOptions:ket,getConfig:yet,clear:Eet,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr}});var Cet,uye,hye=N(()=>{"use strict";kp();vt();T1();jB();Cet=o(t=>{$c(t,Kp);let{axes:e,curves:r,options:n}=t;Kp.setAxes(e),Kp.setCurves(r),Kp.setOptions(n)},"populate"),uye={parse:o(async t=>{let e=await uo("radar",t);Y.debug(e),Cet(e)},"parse")}});function Ret(t,e,r,n,i,a,s){let l=e.length,u=Math.min(s.width,s.height)/2;r.forEach((h,f)=>{if(h.entries.length!==l)return;let d=h.entries.map((p,m)=>{let g=2*Math.PI*m/l-Math.PI/2,y=Net(p,n,i,u),v=y*Math.cos(g),x=y*Math.sin(g);return{x:v,y:x}});a==="circle"?t.append("path").attr("d",Met(d,s.curveTension)).attr("class",`radarCurve-${f}`):a==="polygon"&&t.append("polygon").attr("points",d.map(p=>`${p.x},${p.y}`).join(" ")).attr("class",`radarCurve-${f}`)})}function Net(t,e,r,n){let i=Math.min(Math.max(t,e),r);return n*(i-e)/(r-e)}function Met(t,e){let r=t.length,n=`M${t[0].x},${t[0].y}`;for(let i=0;i<r;i++){let a=t[(i-1+r)%r],s=t[i],l=t[(i+1)%r],u=t[(i+2)%r],h={x:s.x+(l.x-a.x)*e,y:s.y+(l.y-a.y)*e},f={x:l.x-(u.x-s.x)*e,y:l.y-(u.y-s.y)*e};n+=` C${h.x},${h.y} ${f.x},${f.y} ${l.x},${l.y}`}return`${n} Z`}function Iet(t,e,r,n){if(!r)return;let i=(n.width/2+n.marginRight)*3/4,a=-(n.height/2+n.marginTop)*3/4,s=20;e.forEach((l,u)=>{let h=t.append("g").attr("transform",`translate(${i}, ${a+u*s})`);h.append("rect").attr("width",12).attr("height",12).attr("class",`radarLegendBox-${u}`),h.append("text").attr("x",16).attr("y",0).attr("class","radarLegendText").text(l.label)})}var Aet,_et,Det,Let,fye,dye=N(()=>{"use strict";Vc();Aet=o((t,e,r,n)=>{let i=n.db,a=i.getAxes(),s=i.getCurves(),l=i.getOptions(),u=i.getConfig(),h=i.getDiagramTitle(),f=sa(e),d=_et(f,u),p=l.max??Math.max(...s.map(y=>Math.max(...y.entries))),m=l.min,g=Math.min(u.width,u.height)/2;Det(d,a,g,l.ticks,l.graticule),Let(d,a,g,u),Ret(d,a,s,m,p,l.graticule,u),Iet(d,s,l.showLegend,u),d.append("text").attr("class","radarTitle").text(h).attr("x",0).attr("y",-u.height/2-u.marginTop)},"draw"),_et=o((t,e)=>{let r=e.width+e.marginLeft+e.marginRight,n=e.height+e.marginTop+e.marginBottom,i={x:e.marginLeft+e.width/2,y:e.marginTop+e.height/2};return t.attr("viewbox",`0 0 ${r} ${n}`).attr("width",r).attr("height",n),t.append("g").attr("transform",`translate(${i.x}, ${i.y})`)},"drawFrame"),Det=o((t,e,r,n,i)=>{if(i==="circle")for(let a=0;a<n;a++){let s=r*(a+1)/n;t.append("circle").attr("r",s).attr("class","radarGraticule")}else if(i==="polygon"){let a=e.length;for(let s=0;s<n;s++){let l=r*(s+1)/n,u=e.map((h,f)=>{let d=2*f*Math.PI/a-Math.PI/2,p=l*Math.cos(d),m=l*Math.sin(d);return`${p},${m}`}).join(" ");t.append("polygon").attr("points",u).attr("class","radarGraticule")}}},"drawGraticule"),Let=o((t,e,r,n)=>{let i=e.length;for(let a=0;a<i;a++){let s=e[a].label,l=2*a*Math.PI/i-Math.PI/2;t.append("line").attr("x1",0).attr("y1",0).attr("x2",r*n.axisScaleFactor*Math.cos(l)).attr("y2",r*n.axisScaleFactor*Math.sin(l)).attr("class","radarAxisLine"),t.append("text").text(s).attr("x",r*n.axisLabelFactor*Math.cos(l)).attr("y",r*n.axisLabelFactor*Math.sin(l)).attr("class","radarAxisLabel")}},"drawAxes");o(Ret,"drawCurves");o(Net,"relativeRadius");o(Met,"closedRoundCurve");o(Iet,"drawLegend");fye={draw:Aet}});var Oet,Pet,pye,mye=N(()=>{"use strict";ir();_y();ji();Oet=o((t,e)=>{let r="";for(let n=0;n<t.THEME_COLOR_LIMIT;n++){let i=t[`cScale${n}`];r+=`
2364 + .radarCurve-${n} {
2365 + color: ${i};
2366 + fill: ${i};
2367 + fill-opacity: ${e.curveOpacity};
2368 + stroke: ${i};
2369 + stroke-width: ${e.curveStrokeWidth};
2370 + }
2371 + .radarLegendBox-${n} {
2372 + fill: ${i};
2373 + fill-opacity: ${e.curveOpacity};
2374 + stroke: ${i};
2375 + }
2376 + `}return r},"genIndexStyles"),Pet=o(t=>{let e=oh(),r=cr(),n=Fi(e,r.themeVariables),i=Fi(n.radar,t);return{themeVariables:n,radarOptions:i}},"buildRadarStyleOptions"),pye=o(({radar:t}={})=>{let{themeVariables:e,radarOptions:r}=Pet(t);return`
2377 + .radarTitle {
2378 + font-size: ${e.fontSize};
2379 + color: ${e.titleColor};
2380 + dominant-baseline: hanging;
2381 + text-anchor: middle;
2382 + }
2383 + .radarAxisLine {
2384 + stroke: ${r.axisColor};
2385 + stroke-width: ${r.axisStrokeWidth};
2386 + }
2387 + .radarAxisLabel {
2388 + dominant-baseline: middle;
2389 + text-anchor: middle;
2390 + font-size: ${r.axisLabelFontSize}px;
2391 + color: ${r.axisColor};
2392 + }
2393 + .radarGraticule {
2394 + fill: ${r.graticuleColor};
2395 + fill-opacity: ${r.graticuleOpacity};
2396 + stroke: ${r.graticuleColor};
2397 + stroke-width: ${r.graticuleStrokeWidth};
2398 + }
2399 + .radarLegendText {
2400 + text-anchor: start;
2401 + font-size: ${r.legendFontSize}px;
2402 + dominant-baseline: hanging;
2403 + }
2404 + ${Oet(e,r)}
2405 + `},"styles")});var gye={};hr(gye,{diagram:()=>Bet});var Bet,yye=N(()=>{"use strict";jB();hye();dye();mye();Bet={parser:uye,db:Kp,renderer:fye,styles:pye}});var KB,bye,wye=N(()=>{"use strict";KB=function(){var t=o(function(w,C,T,E){for(T=T||{},E=w.length;E--;T[w[E]]=C);return T},"o"),e=[1,7],r=[1,13],n=[1,14],i=[1,15],a=[1,19],s=[1,16],l=[1,17],u=[1,18],h=[8,30],f=[8,21,28,29,30,31,32,40,44,47],d=[1,23],p=[1,24],m=[8,15,16,21,28,29,30,31,32,40,44,47],g=[8,15,16,21,27,28,29,30,31,32,40,44,47],y=[1,49],v={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:o(function(C,T,E,A,S,_,I){var D=_.length-1;switch(S){case 4:A.getLogger().debug("Rule: separator (NL) ");break;case 5:A.getLogger().debug("Rule: separator (Space) ");break;case 6:A.getLogger().debug("Rule: separator (EOF) ");break;case 7:A.getLogger().debug("Rule: hierarchy: ",_[D-1]),A.setHierarchy(_[D-1]);break;case 8:A.getLogger().debug("Stop NL ");break;case 9:A.getLogger().debug("Stop EOF ");break;case 10:A.getLogger().debug("Stop NL2 ");break;case 11:A.getLogger().debug("Stop EOF2 ");break;case 12:A.getLogger().debug("Rule: statement: ",_[D]),typeof _[D].length=="number"?this.$=_[D]:this.$=[_[D]];break;case 13:A.getLogger().debug("Rule: statement #2: ",_[D-1]),this.$=[_[D-1]].concat(_[D]);break;case 14:A.getLogger().debug("Rule: link: ",_[D],C),this.$={edgeTypeStr:_[D],label:""};break;case 15:A.getLogger().debug("Rule: LABEL link: ",_[D-3],_[D-1],_[D]),this.$={edgeTypeStr:_[D],label:_[D-1]};break;case 18:let k=parseInt(_[D]),L=A.generateId();this.$={id:L,type:"space",label:"",width:k,children:[]};break;case 23:A.getLogger().debug("Rule: (nodeStatement link node) ",_[D-2],_[D-1],_[D]," typestr: ",_[D-1].edgeTypeStr);let R=A.edgeStrToEdgeData(_[D-1].edgeTypeStr);this.$=[{id:_[D-2].id,label:_[D-2].label,type:_[D-2].type,directions:_[D-2].directions},{id:_[D-2].id+"-"+_[D].id,start:_[D-2].id,end:_[D].id,label:_[D-1].label,type:"edge",directions:_[D].directions,arrowTypeEnd:R,arrowTypeStart:"arrow_open"},{id:_[D].id,label:_[D].label,type:A.typeStr2Type(_[D].typeStr),directions:_[D].directions}];break;case 24:A.getLogger().debug("Rule: nodeStatement (abc88 node size) ",_[D-1],_[D]),this.$={id:_[D-1].id,label:_[D-1].label,type:A.typeStr2Type(_[D-1].typeStr),directions:_[D-1].directions,widthInColumns:parseInt(_[D],10)};break;case 25:A.getLogger().debug("Rule: nodeStatement (node) ",_[D]),this.$={id:_[D].id,label:_[D].label,type:A.typeStr2Type(_[D].typeStr),directions:_[D].directions,widthInColumns:1};break;case 26:A.getLogger().debug("APA123",this?this:"na"),A.getLogger().debug("COLUMNS: ",_[D]),this.$={type:"column-setting",columns:_[D]==="auto"?-1:parseInt(_[D])};break;case 27:A.getLogger().debug("Rule: id-block statement : ",_[D-2],_[D-1]);let O=A.generateId();this.$={..._[D-2],type:"composite",children:_[D-1]};break;case 28:A.getLogger().debug("Rule: blockStatement : ",_[D-2],_[D-1],_[D]);let M=A.generateId();this.$={id:M,type:"composite",label:"",children:_[D-1]};break;case 29:A.getLogger().debug("Rule: node (NODE_ID separator): ",_[D]),this.$={id:_[D]};break;case 30:A.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",_[D-1],_[D]),this.$={id:_[D-1],label:_[D].label,typeStr:_[D].typeStr,directions:_[D].directions};break;case 31:A.getLogger().debug("Rule: dirList: ",_[D]),this.$=[_[D]];break;case 32:A.getLogger().debug("Rule: dirList: ",_[D-1],_[D]),this.$=[_[D-1]].concat(_[D]);break;case 33:A.getLogger().debug("Rule: nodeShapeNLabel: ",_[D-2],_[D-1],_[D]),this.$={typeStr:_[D-2]+_[D],label:_[D-1]};break;case 34:A.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",_[D-3],_[D-2]," #3:",_[D-1],_[D]),this.$={typeStr:_[D-3]+_[D],label:_[D-2],directions:_[D-1]};break;case 35:case 36:this.$={type:"classDef",id:_[D-1].trim(),css:_[D].trim()};break;case 37:this.$={type:"applyClass",id:_[D-1].trim(),styleClass:_[D].trim()};break;case 38:this.$={type:"applyStyles",id:_[D-1].trim(),stylesStr:_[D].trim()};break}},"anonymous"),table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{8:[1,20]},t(h,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:e,28:r,29:n,31:i,32:a,40:s,44:l,47:u}),t(f,[2,16],{14:22,15:d,16:p}),t(f,[2,17]),t(f,[2,18]),t(f,[2,19]),t(f,[2,20]),t(f,[2,21]),t(f,[2,22]),t(m,[2,25],{27:[1,25]}),t(f,[2,26]),{19:26,26:12,32:a},{11:27,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},t(g,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},t(h,[2,13]),{26:35,32:a},{32:[2,14]},{17:[1,36]},t(m,[2,24]),{11:37,13:4,14:22,15:d,16:p,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},t(g,[2,30]),{18:[1,43]},{18:[1,44]},t(m,[2,23]),{18:[1,45]},{30:[1,46]},t(f,[2,28]),t(f,[2,35]),t(f,[2,36]),t(f,[2,37]),t(f,[2,38]),{37:[1,47]},{34:48,35:y},{15:[1,50]},t(f,[2,27]),t(g,[2,33]),{39:[1,51]},{34:52,35:y,39:[2,31]},{32:[2,15]},t(g,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:o(function(C,T){if(T.recoverable)this.trace(C);else{var E=new Error(C);throw E.hash=T,E}},"parseError"),parse:o(function(C){var T=this,E=[0],A=[],S=[null],_=[],I=this.table,D="",k=0,L=0,R=0,O=2,M=1,B=_.slice.call(arguments,1),F=Object.create(this.lexer),P={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&(P.yy[z]=this.yy[z]);F.setInput(C,P.yy),P.yy.lexer=F,P.yy.parser=this,typeof F.yylloc>"u"&&(F.yylloc={});var $=F.yylloc;_.push($);var H=F.options&&F.options.ranges;typeof P.yy.parseError=="function"?this.parseError=P.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Q(ce){E.length=E.length-2*ce,S.length=S.length-ce,_.length=_.length-ce}o(Q,"popStack");function j(){var ce;return ce=A.pop()||F.lex()||M,typeof ce!="number"&&(ce instanceof Array&&(A=ce,ce=A.pop()),ce=T.symbols_[ce]||ce),ce}o(j,"lex");for(var ie,ne,le,he,K,X,te={},J,se,ue,Z;;){if(le=E[E.length-1],this.defaultActions[le]?he=this.defaultActions[le]:((ie===null||typeof ie>"u")&&(ie=j()),he=I[le]&&I[le][ie]),typeof he>"u"||!he.length||!he[0]){var Se="";Z=[];for(J in I[le])this.terminals_[J]&&J>O&&Z.push("'"+this.terminals_[J]+"'");F.showPosition?Se="Parse error on line "+(k+1)+`:
2406 +`+F.showPosition()+`
2407 +Expecting `+Z.join(", ")+", got '"+(this.terminals_[ie]||ie)+"'":Se="Parse error on line "+(k+1)+": Unexpected "+(ie==M?"end of input":"'"+(this.terminals_[ie]||ie)+"'"),this.parseError(Se,{text:F.match,token:this.terminals_[ie]||ie,line:F.yylineno,loc:$,expected:Z})}if(he[0]instanceof Array&&he.length>1)throw new Error("Parse Error: multiple actions possible at state: "+le+", token: "+ie);switch(he[0]){case 1:E.push(ie),S.push(F.yytext),_.push(F.yylloc),E.push(he[1]),ie=null,ne?(ie=ne,ne=null):(L=F.yyleng,D=F.yytext,k=F.yylineno,$=F.yylloc,R>0&&R--);break;case 2:if(se=this.productions_[he[1]][1],te.$=S[S.length-se],te._$={first_line:_[_.length-(se||1)].first_line,last_line:_[_.length-1].last_line,first_column:_[_.length-(se||1)].first_column,last_column:_[_.length-1].last_column},H&&(te._$.range=[_[_.length-(se||1)].range[0],_[_.length-1].range[1]]),X=this.performAction.apply(te,[D,L,k,P.yy,he[1],S,_].concat(B)),typeof X<"u")return X;se&&(E=E.slice(0,-1*se*2),S=S.slice(0,-1*se),_=_.slice(0,-1*se)),E.push(this.productions_[he[1]][0]),S.push(te.$),_.push(te._$),ue=I[E[E.length-2]][E[E.length-1]],E.push(ue);break;case 3:return!0}}return!0},"parse")},x=function(){var w={EOF:1,parseError:o(function(T,E){if(this.yy.parser)this.yy.parser.parseError(T,E);else throw new Error(T)},"parseError"),setInput:o(function(C,T){return this.yy=T||this.yy||{},this._input=C,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var C=this._input[0];this.yytext+=C,this.yyleng++,this.offset++,this.match+=C,this.matched+=C;var T=C.match(/(?:\r\n?|\n).*/g);return T?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),C},"input"),unput:o(function(C){var T=C.length,E=C.split(/(?:\r\n?|\n)/g);this._input=C+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-T),this.offset-=T;var A=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),E.length-1&&(this.yylineno-=E.length-1);var S=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:E?(E.length===A.length?this.yylloc.first_column:0)+A[A.length-E.length].length-E[0].length:this.yylloc.first_column-T},this.options.ranges&&(this.yylloc.range=[S[0],S[0]+this.yyleng-T]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
2408 +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(C){this.unput(this.match.slice(C))},"less"),pastInput:o(function(){var C=this.matched.substr(0,this.matched.length-this.match.length);return(C.length>20?"...":"")+C.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var C=this.match;return C.length<20&&(C+=this._input.substr(0,20-C.length)),(C.substr(0,20)+(C.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var C=this.pastInput(),T=new Array(C.length+1).join("-");return C+this.upcomingInput()+`
2409 +`+T+"^"},"showPosition"),test_match:o(function(C,T){var E,A,S;if(this.options.backtrack_lexer&&(S={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(S.yylloc.range=this.yylloc.range.slice(0))),A=C[0].match(/(?:\r\n?|\n).*/g),A&&(this.yylineno+=A.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:A?A[A.length-1].length-A[A.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+C[0].length},this.yytext+=C[0],this.match+=C[0],this.matches=C,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(C[0].length),this.matched+=C[0],E=this.performAction.call(this,this.yy,this,T,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),E)return E;if(this._backtrack){for(var _ in S)this[_]=S[_];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var C,T,E,A;this._more||(this.yytext="",this.match="");for(var S=this._currentRules(),_=0;_<S.length;_++)if(E=this._input.match(this.rules[S[_]]),E&&(!T||E[0].length>T[0].length)){if(T=E,A=_,this.options.backtrack_lexer){if(C=this.test_match(E,S[_]),C!==!1)return C;if(this._backtrack){T=!1;continue}else return!1}else if(!this.options.flex)break}return T?(C=this.test_match(T,S[A]),C!==!1?C:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
2410 +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var T=this.next();return T||this.lex()},"lex"),begin:o(function(T){this.conditionStack.push(T)},"begin"),popState:o(function(){var T=this.conditionStack.length-1;return T>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(T){return T=this.conditionStack.length-1-Math.abs(T||0),T>=0?this.conditionStack[T]:"INITIAL"},"topState"),pushState:o(function(T){this.begin(T)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(T,E,A,S){var _=S;switch(A){case 0:return 10;case 1:return T.getLogger().debug("Found space-block"),31;break;case 2:return T.getLogger().debug("Found nl-block"),31;break;case 3:return T.getLogger().debug("Found space-block"),29;break;case 4:T.getLogger().debug(".",E.yytext);break;case 5:T.getLogger().debug("_",E.yytext);break;case 6:return 5;case 7:return E.yytext=-1,28;break;case 8:return E.yytext=E.yytext.replace(/columns\s+/,""),T.getLogger().debug("COLUMNS (LEX)",E.yytext),28;break;case 9:this.pushState("md_string");break;case 10:return"MD_STR";case 11:this.popState();break;case 12:this.pushState("string");break;case 13:T.getLogger().debug("LEX: POPPING STR:",E.yytext),this.popState();break;case 14:return T.getLogger().debug("LEX: STR end:",E.yytext),"STR";break;case 15:return E.yytext=E.yytext.replace(/space\:/,""),T.getLogger().debug("SPACE NUM (LEX)",E.yytext),21;break;case 16:return E.yytext="1",T.getLogger().debug("COLUMNS (LEX)",E.yytext),21;break;case 17:return 43;case 18:return"LINKSTYLE";case 19:return"INTERPOLATE";case 20:return this.pushState("CLASSDEF"),40;break;case 21:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 22:return this.popState(),this.pushState("CLASSDEFID"),41;break;case 23:return this.popState(),42;break;case 24:return this.pushState("CLASS"),44;break;case 25:return this.popState(),this.pushState("CLASS_STYLE"),45;break;case 26:return this.popState(),46;break;case 27:return this.pushState("STYLE_STMNT"),47;break;case 28:return this.popState(),this.pushState("STYLE_DEFINITION"),48;break;case 29:return this.popState(),49;break;case 30:return this.pushState("acc_title"),"acc_title";break;case 31:return this.popState(),"acc_title_value";break;case 32:return this.pushState("acc_descr"),"acc_descr";break;case 33:return this.popState(),"acc_descr_value";break;case 34:this.pushState("acc_descr_multiline");break;case 35:this.popState();break;case 36:return"acc_descr_multiline_value";case 37:return 30;case 38:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 39:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 40:return this.popState(),T.getLogger().debug("Lex: ))"),"NODE_DEND";break;case 41:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 42:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 43:return this.popState(),T.getLogger().debug("Lex: (-"),"NODE_DEND";break;case 44:return this.popState(),T.getLogger().debug("Lex: -)"),"NODE_DEND";break;case 45:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 46:return this.popState(),T.getLogger().debug("Lex: ]]"),"NODE_DEND";break;case 47:return this.popState(),T.getLogger().debug("Lex: ("),"NODE_DEND";break;case 48:return this.popState(),T.getLogger().debug("Lex: ])"),"NODE_DEND";break;case 49:return this.popState(),T.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 50:return this.popState(),T.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 51:return this.popState(),T.getLogger().debug("Lex: )]"),"NODE_DEND";break;case 52:return this.popState(),T.getLogger().debug("Lex: )"),"NODE_DEND";break;case 53:return this.popState(),T.getLogger().debug("Lex: ]>"),"NODE_DEND";break;case 54:return this.popState(),T.getLogger().debug("Lex: ]"),"NODE_DEND";break;case 55:return T.getLogger().debug("Lexa: -)"),this.pushState("NODE"),36;break;case 56:return T.getLogger().debug("Lexa: (-"),this.pushState("NODE"),36;break;case 57:return T.getLogger().debug("Lexa: ))"),this.pushState("NODE"),36;break;case 58:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 59:return T.getLogger().debug("Lex: ((("),this.pushState("NODE"),36;break;case 60:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 61:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 62:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 63:return T.getLogger().debug("Lexc: >"),this.pushState("NODE"),36;break;case 64:return T.getLogger().debug("Lexa: (["),this.pushState("NODE"),36;break;case 65:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 66:return this.pushState("NODE"),36;break;case 67:return this.pushState("NODE"),36;break;case 68:return this.pushState("NODE"),36;break;case 69:return this.pushState("NODE"),36;break;case 70:return this.pushState("NODE"),36;break;case 71:return this.pushState("NODE"),36;break;case 72:return this.pushState("NODE"),36;break;case 73:return T.getLogger().debug("Lexa: ["),this.pushState("NODE"),36;break;case 74:return this.pushState("BLOCK_ARROW"),T.getLogger().debug("LEX ARR START"),38;break;case 75:return T.getLogger().debug("Lex: NODE_ID",E.yytext),32;break;case 76:return T.getLogger().debug("Lex: EOF",E.yytext),8;break;case 77:this.pushState("md_string");break;case 78:this.pushState("md_string");break;case 79:return"NODE_DESCR";case 80:this.popState();break;case 81:T.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 82:T.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 83:return T.getLogger().debug("LEX: NODE_DESCR:",E.yytext),"NODE_DESCR";break;case 84:T.getLogger().debug("LEX POPPING"),this.popState();break;case 85:T.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 86:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (right): dir:",E.yytext),"DIR";break;case 87:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (left):",E.yytext),"DIR";break;case 88:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (x):",E.yytext),"DIR";break;case 89:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (y):",E.yytext),"DIR";break;case 90:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (up):",E.yytext),"DIR";break;case 91:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (down):",E.yytext),"DIR";break;case 92:return E.yytext="]>",T.getLogger().debug("Lex (ARROW_DIR end):",E.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";break;case 93:return T.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 94:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 95:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 96:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 97:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 98:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 99:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 100:this.pushState("md_string");break;case 101:return T.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";break;case 102:return this.popState(),T.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 103:return this.popState(),T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 104:return this.popState(),T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 105:return T.getLogger().debug("Lex: COLON",E.yytext),E.yytext=E.yytext.slice(1),27;break}},"anonymous"),rules:[/^(?:block-beta\b)/,/^(?:block\s+)/,/^(?:block\n+)/,/^(?:block:)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[29],inclusive:!1},STYLE_STMNT:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[23],inclusive:!1},CLASSDEF:{rules:[21,22],inclusive:!1},CLASS_STYLE:{rules:[26],inclusive:!1},CLASS:{rules:[25],inclusive:!1},LLABEL:{rules:[100,101,102,103,104],inclusive:!1},ARROW_DIR:{rules:[86,87,88,89,90,91,92],inclusive:!1},BLOCK_ARROW:{rules:[77,82,85],inclusive:!1},NODE:{rules:[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,78,81],inclusive:!1},md_string:{rules:[10,11,79,80],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[13,14,83,84],inclusive:!1},acc_descr_multiline:{rules:[35,36],inclusive:!1},acc_descr:{rules:[33],inclusive:!1},acc_title:{rules:[31],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,12,15,16,17,18,19,20,24,27,30,32,34,37,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,93,94,95,96,97,98,99,105],inclusive:!0}}};return w}();v.lexer=x;function b(){this.yy={}}return o(b,"Parser"),b.prototype=v,v.Parser=b,new b}();KB.parser=KB;bye=KB});function Yet(t){switch(Y.debug("typeStr2Type",t),t){case"[]":return"square";case"()":return Y.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}}function Xet(t){switch(Y.debug("typeStr2Type",t),t){case"==":return"thick";default:return"normal"}}function jet(t){switch(t.trim()){case"--x":return"arrow_cross";case"--o":return"arrow_circle";default:return"arrow_point"}}var Ul,ZB,QB,Tye,kye,zet,Sye,Get,eC,Vet,Uet,Het,Wet,Cye,JB,y4,qet,Eye,Ket,Qet,Zet,Jet,ett,ttt,rtt,ntt,itt,att,stt,Aye,_ye=N(()=>{"use strict";gL();ji();zt();vt();gr();mi();Ul=new Map,ZB=[],QB=new Map,Tye="color",kye="fill",zet="bgFill",Sye=",",Get=me(),eC=new Map,Vet=o(t=>Ze.sanitizeText(t,Get),"sanitizeText"),Uet=o(function(t,e=""){let r=eC.get(t);r||(r={id:t,styles:[],textStyles:[]},eC.set(t,r)),e?.split(Sye).forEach(n=>{let i=n.replace(/([^;]*);/,"$1").trim();if(RegExp(Tye).exec(n)){let s=i.replace(kye,zet).replace(Tye,kye);r.textStyles.push(s)}r.styles.push(i)})},"addStyleClass"),Het=o(function(t,e=""){let r=Ul.get(t);e!=null&&(r.styles=e.split(Sye))},"addStyle2Node"),Wet=o(function(t,e){t.split(",").forEach(function(r){let n=Ul.get(r);if(n===void 0){let i=r.trim();n={id:i,type:"na",children:[]},Ul.set(i,n)}n.classes||(n.classes=[]),n.classes.push(e)})},"setCssClass"),Cye=o((t,e)=>{let r=t.flat(),n=[];for(let i of r){if(i.label&&(i.label=Vet(i.label)),i.type==="classDef"){Uet(i.id,i.css);continue}if(i.type==="applyClass"){Wet(i.id,i?.styleClass??"");continue}if(i.type==="applyStyles"){i?.stylesStr&&Het(i.id,i?.stylesStr);continue}if(i.type==="column-setting")e.columns=i.columns??-1;else if(i.type==="edge"){let a=(QB.get(i.id)??0)+1;QB.set(i.id,a),i.id=a+"-"+i.id,ZB.push(i)}else{i.label||(i.type==="composite"?i.label="":i.label=i.id);let a=Ul.get(i.id);if(a===void 0?Ul.set(i.id,i):(i.type!=="na"&&(a.type=i.type),i.label!==i.id&&(a.label=i.label)),i.children&&Cye(i.children,i),i.type==="space"){let s=i.width??1;for(let l=0;l<s;l++){let u=an(i);u.id=u.id+"-"+l,Ul.set(u.id,u),n.push(u)}}else a===void 0&&n.push(i)}}e.children=n},"populateBlockDatabase"),JB=[],y4={id:"root",type:"composite",children:[],columns:-1},qet=o(()=>{Y.debug("Clear called"),Ar(),y4={id:"root",type:"composite",children:[],columns:-1},Ul=new Map([["root",y4]]),JB=[],eC=new Map,ZB=[],QB=new Map},"clear");o(Yet,"typeStr2Type");o(Xet,"edgeTypeStr2Type");o(jet,"edgeStrToEdgeData");Eye=0,Ket=o(()=>(Eye++,"id-"+Math.random().toString(36).substr(2,12)+"-"+Eye),"generateId"),Qet=o(t=>{y4.children=t,Cye(t,y4),JB=y4.children},"setHierarchy"),Zet=o(t=>{let e=Ul.get(t);return e?e.columns?e.columns:e.children?e.children.length:-1:-1},"getColumns"),Jet=o(()=>[...Ul.values()],"getBlocksFlat"),ett=o(()=>JB||[],"getBlocks"),ttt=o(()=>ZB,"getEdges"),rtt=o(t=>Ul.get(t),"getBlock"),ntt=o(t=>{Ul.set(t.id,t)},"setBlock"),itt=o(()=>console,"getLogger"),att=o(function(){return eC},"getClasses"),stt={getConfig:o(()=>cr().block,"getConfig"),typeStr2Type:Yet,edgeTypeStr2Type:Xet,edgeStrToEdgeData:jet,getLogger:itt,getBlocksFlat:Jet,getBlocks:ett,getEdges:ttt,setHierarchy:Qet,getBlock:rtt,setBlock:ntt,getColumns:Zet,getClasses:att,clear:qet,generateId:Ket},Aye=stt});var tC,ott,Dye,Lye=N(()=>{"use strict";Ys();tC=o((t,e)=>{let r=Kf,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return qa(n,i,a,e)},"fade"),ott=o(t=>`.label {
2411 + font-family: ${t.fontFamily};
2412 + color: ${t.nodeTextColor||t.textColor};
2413 + }
2414 + .cluster-label text {
2415 + fill: ${t.titleColor};
2416 + }
2417 + .cluster-label span,p {
2418 + color: ${t.titleColor};
2419 + }
2420 +
2421 +
2422 +
2423 + .label text,span,p {
2424 + fill: ${t.nodeTextColor||t.textColor};
2425 + color: ${t.nodeTextColor||t.textColor};
2426 + }
2427 +
2428 + .node rect,
2429 + .node circle,
2430 + .node ellipse,
2431 + .node polygon,
2432 + .node path {
2433 + fill: ${t.mainBkg};
2434 + stroke: ${t.nodeBorder};
2435 + stroke-width: 1px;
2436 + }
2437 + .flowchart-label text {
2438 + text-anchor: middle;
2439 + }
2440 + // .flowchart-label .text-outer-tspan {
2441 + // text-anchor: middle;
2442 + // }
2443 + // .flowchart-label .text-inner-tspan {
2444 + // text-anchor: start;
2445 + // }
2446 +
2447 + .node .label {
2448 + text-align: center;
2449 + }
2450 + .node.clickable {
2451 + cursor: pointer;
2452 + }
2453 +
2454 + .arrowheadPath {
2455 + fill: ${t.arrowheadColor};
2456 + }
2457 +
2458 + .edgePath .path {
2459 + stroke: ${t.lineColor};
2460 + stroke-width: 2.0px;
2461 + }
2462 +
2463 + .flowchart-link {
2464 + stroke: ${t.lineColor};
2465 + fill: none;
2466 + }
2467 +
2468 + .edgeLabel {
2469 + background-color: ${t.edgeLabelBackground};
2470 + rect {
2471 + opacity: 0.5;
2472 + background-color: ${t.edgeLabelBackground};
2473 + fill: ${t.edgeLabelBackground};
2474 + }
2475 + text-align: center;
2476 + }
2477 +
2478 + /* For html labels only */
2479 + .labelBkg {
2480 + background-color: ${tC(t.edgeLabelBackground,.5)};
2481 + // background-color:
2482 + }
2483 +
2484 + .node .cluster {
2485 + // fill: ${tC(t.mainBkg,.5)};
2486 + fill: ${tC(t.clusterBkg,.5)};
2487 + stroke: ${tC(t.clusterBorder,.2)};
2488 + box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px;
2489 + stroke-width: 1px;
2490 + }
2491 +
2492 + .cluster text {
2493 + fill: ${t.titleColor};
2494 + }
2495 +
2496 + .cluster span,p {
2497 + color: ${t.titleColor};
2498 + }
2499 + /* .cluster div {
2500 + color: ${t.titleColor};
2501 + } */
2502 +
2503 + div.mermaidTooltip {
2504 + position: absolute;
2505 + text-align: center;
2506 + max-width: 200px;
2507 + padding: 2px;
2508 + font-family: ${t.fontFamily};
2509 + font-size: 12px;
2510 + background: ${t.tertiaryColor};
2511 + border: 1px solid ${t.border2};
2512 + border-radius: 2px;
2513 + pointer-events: none;
2514 + z-index: 100;
2515 + }
2516 +
2517 + .flowchartTitleText {
2518 + text-anchor: middle;
2519 + font-size: 18px;
2520 + fill: ${t.textColor};
2521 + }
2522 +`,"getStyles"),Dye=ott});var ltt,ctt,utt,htt,ftt,dtt,ptt,mtt,gtt,ytt,vtt,Rye,Nye=N(()=>{"use strict";vt();ltt=o((t,e,r,n)=>{e.forEach(i=>{vtt[i](t,r,n)})},"insertMarkers"),ctt=o((t,e,r)=>{Y.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),utt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),htt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),ftt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),dtt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),ptt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),mtt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),gtt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),ytt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),vtt={extension:ctt,composition:utt,aggregation:htt,dependency:ftt,lollipop:dtt,point:ptt,circle:mtt,cross:gtt,barb:ytt},Rye=ltt});function xtt(t,e){if(t===0||!Number.isInteger(t))throw new Error("Columns must be an integer !== 0.");if(e<0||!Number.isInteger(e))throw new Error("Position must be a non-negative integer."+e);if(t<0)return{px:e,py:0};if(t===1)return{px:0,py:e};let r=e%t,n=Math.floor(e/t);return{px:r,py:n}}function eF(t,e,r=0,n=0){Y.debug("setBlockSizes abc95 (start)",t.id,t?.size?.x,"block width =",t?.size,"sieblingWidth",r),t?.size?.width||(t.size={width:r,height:n,x:0,y:0});let i=0,a=0;if(t.children?.length>0){for(let m of t.children)eF(m,e);let s=btt(t);i=s.width,a=s.height,Y.debug("setBlockSizes abc95 maxWidth of",t.id,":s children is ",i,a);for(let m of t.children)m.size&&(Y.debug(`abc95 Setting size of children of ${t.id} id=${m.id} ${i} ${a} ${JSON.stringify(m.size)}`),m.size.width=i*(m.widthInColumns??1)+bi*((m.widthInColumns??1)-1),m.size.height=a,m.size.x=0,m.size.y=0,Y.debug(`abc95 updating size of ${t.id} children child:${m.id} maxWidth:${i} maxHeight:${a}`));for(let m of t.children)eF(m,e,i,a);let l=t.columns??-1,u=0;for(let m of t.children)u+=m.widthInColumns??1;let h=t.children.length;l>0&&l<u&&(h=l);let f=Math.ceil(u/h),d=h*(i+bi)+bi,p=f*(a+bi)+bi;if(d<r){Y.debug(`Detected to small siebling: abc95 ${t.id} sieblingWidth ${r} sieblingHeight ${n} width ${d}`),d=r,p=n;let m=(r-h*bi-bi)/h,g=(n-f*bi-bi)/f;Y.debug("Size indata abc88",t.id,"childWidth",m,"maxWidth",i),Y.debug("Size indata abc88",t.id,"childHeight",g,"maxHeight",a),Y.debug("Size indata abc88 xSize",h,"padding",bi);for(let y of t.children)y.size&&(y.size.width=m,y.size.height=g,y.size.x=0,y.size.y=0)}if(Y.debug(`abc95 (finale calc) ${t.id} xSize ${h} ySize ${f} columns ${l}${t.children.length} width=${Math.max(d,t.size?.width||0)}`),d<(t?.size?.width||0)){d=t?.size?.width||0;let m=l>0?Math.min(t.children.length,l):t.children.length;if(m>0){let g=(d-m*bi-bi)/m;Y.debug("abc95 (growing to fit) width",t.id,d,t.size?.width,g);for(let y of t.children)y.size&&(y.size.width=g)}}t.size={width:d,height:p,x:0,y:0}}Y.debug("setBlockSizes abc94 (done)",t.id,t?.size?.x,t?.size?.width,t?.size?.y,t?.size?.height)}function Mye(t,e){Y.debug(`abc85 layout blocks (=>layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`);let r=t.columns??-1;if(Y.debug("layoutBlocks columns abc95",t.id,"=>",r,t),t.children&&t.children.length>0){let n=t?.children[0]?.size?.width??0,i=t.children.length*n+(t.children.length-1)*bi;Y.debug("widthOfChildren 88",i,"posX");let a=0;Y.debug("abc91 block?.size?.x",t.id,t?.size?.x);let s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-bi,l=0;for(let u of t.children){let h=t;if(!u.size)continue;let{width:f,height:d}=u.size,{px:p,py:m}=xtt(r,a);if(m!=l&&(l=m,s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-bi,Y.debug("New row in layout for block",t.id," and child ",u.id,l)),Y.debug(`abc89 layout blocks (child) id: ${u.id} Pos: ${a} (px, py) ${p},${m} (${h?.size?.x},${h?.size?.y}) parent: ${h.id} width: ${f}${bi}`),h.size){let g=f/2;u.size.x=s+bi+g,Y.debug(`abc91 layout blocks (calc) px, pyid:${u.id} startingPos=X${s} new startingPosX${u.size.x} ${g} padding=${bi} width=${f} halfWidth=${g} => x:${u.size.x} y:${u.size.y} ${u.widthInColumns} (width * (child?.w || 1)) / 2 ${f*(u?.widthInColumns??1)/2}`),s=u.size.x+g,u.size.y=h.size.y-h.size.height/2+m*(d+bi)+d/2+bi,Y.debug(`abc88 layout blocks (calc) px, pyid:${u.id}startingPosX${s}${bi}${g}=>x:${u.size.x}y:${u.size.y}${u.widthInColumns}(width * (child?.w || 1)) / 2${f*(u?.widthInColumns??1)/2}`)}u.children&&Mye(u,e),a+=u?.widthInColumns??1,Y.debug("abc88 columnsPos",u,a)}}Y.debug(`layout blocks (<==layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`)}function Iye(t,{minX:e,minY:r,maxX:n,maxY:i}={minX:0,minY:0,maxX:0,maxY:0}){if(t.size&&t.id!=="root"){let{x:a,y:s,width:l,height:u}=t.size;a-l/2<e&&(e=a-l/2),s-u/2<r&&(r=s-u/2),a+l/2>n&&(n=a+l/2),s+u/2>i&&(i=s+u/2)}if(t.children)for(let a of t.children)({minX:e,minY:r,maxX:n,maxY:i}=Iye(a,{minX:e,minY:r,maxX:n,maxY:i}));return{minX:e,minY:r,maxX:n,maxY:i}}function Oye(t){let e=t.getBlock("root");if(!e)return;eF(e,t,0,0),Mye(e,t),Y.debug("getBlocks",JSON.stringify(e,null,2));let{minX:r,minY:n,maxX:i,maxY:a}=Iye(e),s=a-n,l=i-r;return{x:r,y:n,width:l,height:s}}var bi,btt,Pye=N(()=>{"use strict";vt();zt();bi=me()?.block?.padding??8;o(xtt,"calculateBlockPosition");btt=o(t=>{let e=0,r=0;for(let n of t.children){let{width:i,height:a,x:s,y:l}=n.size??{width:0,height:0,x:0,y:0};Y.debug("getMaxChildSize abc95 child:",n.id,"width:",i,"height:",a,"x:",s,"y:",l,n.type),n.type!=="space"&&(i>e&&(e=i/(t.widthInColumns??1)),a>r&&(r=a))}return{width:e,height:r}},"getMaxChildSize");o(eF,"setBlockSizes");o(Mye,"layoutBlocks");o(Iye,"findBounds");o(Oye,"layout")});function Bye(t,e){e&&t.attr("style",e)}function wtt(t){let e=Ge(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label,i=t.isNode?"nodeLabel":"edgeLabel",a=r.append("span");return a.html(n),Bye(a,t.labelStyle),a.attr("class",i),Bye(r,t.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var Ttt,vs,rC=N(()=>{"use strict";dr();vt();zt();gr();ir();to();o(Bye,"applyStyle");o(wtt,"addHtmlLabel");Ttt=o((t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),fr(me().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"<br />"),Y.debug("vertexText"+i);let a={isNode:n,label:DD(na(i)),labelStyle:e.replace("fill:","color:")};return wtt(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),vs=Ttt});var $ye,ktt,Fye,zye=N(()=>{"use strict";vt();$ye=o((t,e,r,n,i)=>{e.arrowTypeStart&&Fye(t,"start",e.arrowTypeStart,r,n,i),e.arrowTypeEnd&&Fye(t,"end",e.arrowTypeEnd,r,n,i)},"addEdgeMarkers"),ktt={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},Fye=o((t,e,r,n,i,a)=>{let s=ktt[r];if(!s){Y.warn(`Unknown arrow type: ${r}`);return}let l=e==="start"?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${a}-${s}${l})`)},"addEdgeMarker")});function nC(t,e){me().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}var tF,Ua,Vye,Uye,Ett,Stt,Gye,Hye,Wye=N(()=>{"use strict";vt();rC();to();dr();zt();ir();gr();JD();w2();zye();tF={},Ua={},Vye=o((t,e)=>{let r=me(),n=fr(r.flowchart.htmlLabels),i=e.labelType==="markdown"?Hn(t,e.label,{style:e.labelStyle,useHtmlLabels:n,addSvgBackground:!0},r):vs(e.label,e.labelStyle),a=t.insert("g").attr("class","edgeLabel"),s=a.insert("g").attr("class","label");s.node().appendChild(i);let l=i.getBBox();if(n){let h=i.children[0],f=Ge(i);l=h.getBoundingClientRect(),f.attr("width",l.width),f.attr("height",l.height)}s.attr("transform","translate("+-l.width/2+", "+-l.height/2+")"),tF[e.id]=a,e.width=l.width,e.height=l.height;let u;if(e.startLabelLeft){let h=vs(e.startLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].startLeft=f,nC(u,e.startLabelLeft)}if(e.startLabelRight){let h=vs(e.startLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=f.node().appendChild(h),d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].startRight=f,nC(u,e.startLabelRight)}if(e.endLabelLeft){let h=vs(e.endLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].endLeft=f,nC(u,e.endLabelLeft)}if(e.endLabelRight){let h=vs(e.endLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].endRight=f,nC(u,e.endLabelRight)}return i},"insertEdgeLabel");o(nC,"setTerminalWidth");Uye=o((t,e)=>{Y.debug("Moving label abc88 ",t.id,t.label,tF[t.id],e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=me(),{subGraphTitleTotalMargin:i}=Ru(n);if(t.label){let a=tF[t.id],s=t.x,l=t.y;if(r){let u=Gt.calcLabelPosition(r);Y.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=Ua[t.id].startLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=Ua[t.id].startRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=Ua[t.id].endLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=Ua[t.id].endRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),Ett=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),Stt=o((t,e,r)=>{Y.debug(`intersection calc abc89:
2523 + outsidePoint: ${JSON.stringify(e)}
2524 + insidePoint : ${JSON.stringify(r)}
2525 + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.x<e.x?s-a:s+a,u=t.height/2,h=Math.abs(e.y-r.y),f=Math.abs(e.x-r.x);if(Math.abs(i-e.y)*s>Math.abs(n-e.x)*u){let d=r.y<e.y?e.y-u-i:i-u-e.y;l=f*d/h;let p={x:r.x<e.x?r.x+l:r.x-f+l,y:r.y<e.y?r.y+h-d:r.y-h+d};return l===0&&(p.x=e.x,p.y=e.y),f===0&&(p.x=e.x),h===0&&(p.y=e.y),Y.debug(`abc89 topp/bott calc, Q ${h}, q ${d}, R ${f}, r ${l}`,p),p}else{r.x<e.x?l=e.x-s-n:l=n-s-e.x;let d=h*l/f,p=r.x<e.x?r.x+f-l:r.x-f+l,m=r.y<e.y?r.y+d:r.y-d;return Y.debug(`sides calc abc89, Q ${h}, q ${d}, R ${f}, r ${l}`,{_x:p,_y:m}),l===0&&(p=e.x,m=e.y),f===0&&(p=e.x),h===0&&(m=e.y),{x:p,y:m}}},"intersection"),Gye=o((t,e)=>{Y.debug("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(!Ett(e,a)&&!i){let s=Stt(e,n,a),l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)||r.push(s),i=!0}else n=a,i||r.push(a)}),r},"cutPathAtIntersect"),Hye=o(function(t,e,r,n,i,a,s){let l=r.points;Y.debug("abc88 InsertEdge: edge=",r,"e=",e);let u=!1,h=a.node(e.v);var f=a.node(e.w);f?.intersect&&h?.intersect&&(l=l.slice(1,r.points.length-1),l.unshift(h.intersect(l[0])),l.push(f.intersect(l[l.length-1]))),r.toCluster&&(Y.debug("to cluster abc88",n[r.toCluster]),l=Gye(r.points,n[r.toCluster].node),u=!0),r.fromCluster&&(Y.debug("from cluster abc88",n[r.fromCluster]),l=Gye(l.reverse(),n[r.fromCluster].node).reverse(),u=!0);let d=l.filter(C=>!Number.isNaN(C.y)),p=Do;r.curve&&(i==="graph"||i==="flowchart")&&(p=r.curve);let{x:m,y:g}=qw(r),y=wl().x(m).y(g).curve(p),v;switch(r.thickness){case"normal":v="edge-thickness-normal";break;case"thick":v="edge-thickness-thick";break;case"invisible":v="edge-thickness-thick";break;default:v=""}switch(r.pattern){case"solid":v+=" edge-pattern-solid";break;case"dotted":v+=" edge-pattern-dotted";break;case"dashed":v+=" edge-pattern-dashed";break}let x=t.append("path").attr("d",y(d)).attr("id",r.id).attr("class"," "+v+(r.classes?" "+r.classes:"")).attr("style",r.style),b="";(me().flowchart.arrowMarkerAbsolute||me().state.arrowMarkerAbsolute)&&(b=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,b=b.replace(/\(/g,"\\("),b=b.replace(/\)/g,"\\)")),$ye(x,r,b,s,i);let w={};return u&&(w.updatedPath=l),w.originalPath=r.points,w},"insertEdge")});var Ctt,qye,Yye=N(()=>{"use strict";Ctt=o(t=>{let e=new Set;for(let r of t)switch(r){case"x":e.add("right"),e.add("left");break;case"y":e.add("up"),e.add("down");break;default:e.add(r);break}return e},"expandAndDeduplicateDirections"),qye=o((t,e,r)=>{let n=Ctt(t),i=2,a=e.height+2*r.padding,s=a/i,l=e.width+2*s+r.padding,u=r.padding/2;return n.has("right")&&n.has("left")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:s,y:0},{x:l/2,y:2*u},{x:l-s,y:0},{x:l,y:0},{x:l,y:-a/3},{x:l+2*u,y:-a/2},{x:l,y:-2*a/3},{x:l,y:-a},{x:l-s,y:-a},{x:l/2,y:-a-2*u},{x:s,y:-a},{x:0,y:-a},{x:0,y:-2*a/3},{x:-2*u,y:-a/2},{x:0,y:-a/3}]:n.has("right")&&n.has("left")&&n.has("up")?[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}]:n.has("right")&&n.has("left")&&n.has("down")?[{x:0,y:0},{x:s,y:-a},{x:l-s,y:-a},{x:l,y:0}]:n.has("right")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:l,y:-s},{x:l,y:-a+s},{x:0,y:-a}]:n.has("left")&&n.has("up")&&n.has("down")?[{x:l,y:0},{x:0,y:-s},{x:0,y:-a+s},{x:l,y:-a}]:n.has("right")&&n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")&&n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:n.has("right")&&n.has("up")?[{x:0,y:0},{x:l,y:-s},{x:0,y:-a}]:n.has("right")&&n.has("down")?[{x:0,y:0},{x:l,y:0},{x:0,y:-a}]:n.has("left")&&n.has("up")?[{x:l,y:0},{x:0,y:-s},{x:l,y:-a}]:n.has("left")&&n.has("down")?[{x:l,y:0},{x:0,y:0},{x:l,y:-a}]:n.has("right")?[{x:s,y:-u},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a+u}]:n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")?[{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u}]:n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:[{x:0,y:0}]},"getArrowPoints")});function Att(t,e){return t.intersect(e)}var Xye,jye=N(()=>{"use strict";o(Att,"intersectNode");Xye=Att});function _tt(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x<i&&(h=-h);var f=Math.abs(e*r*l/u);return n.y<a&&(f=-f),{x:i+h,y:a+f}}var iC,rF=N(()=>{"use strict";o(_tt,"intersectEllipse");iC=_tt});function Dtt(t,e,r){return iC(t,e,e,r)}var Kye,Qye=N(()=>{"use strict";rF();o(Dtt,"intersectCircle");Kye=Dtt});function Ltt(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&Zye(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&Zye(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function Zye(t,e){return t*e>0}var Jye,eve=N(()=>{"use strict";o(Ltt,"intersectLine");o(Zye,"sameSign");Jye=Ltt});function Rtt(t,e,r){var n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(g){s=Math.min(s,g.x),l=Math.min(l,g.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));for(var u=n-t.width/2-s,h=i-t.height/2-l,f=0;f<e.length;f++){var d=e[f],p=e[f<e.length-1?f+1:0],m=Jye(t,r,{x:u+d.x,y:h+d.y},{x:u+p.x,y:h+p.y});m&&a.push(m)}return a.length?(a.length>1&&a.sort(function(g,y){var v=g.x-r.x,x=g.y-r.y,b=Math.sqrt(v*v+x*x),w=y.x-r.x,C=y.y-r.y,T=Math.sqrt(w*w+C*C);return b<T?-1:b===T?0:1}),a[0]):t}var tve,rve=N(()=>{"use strict";eve();tve=Rtt;o(Rtt,"intersectPolygon")});var Ntt,nve,ive=N(()=>{"use strict";Ntt=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),nve=Ntt});var In,nF=N(()=>{"use strict";jye();Qye();rF();rve();ive();In={node:Xye,circle:Kye,ellipse:iC,polygon:tve,rect:nve}});function Hl(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Di,Qn,iF=N(()=>{"use strict";rC();to();zt();dr();gr();ir();Di=o(async(t,e,r,n)=>{let i=me(),a,s=e.useHtmlLabels||fr(i.flowchart.htmlLabels);r?a=r:a="node default";let l=t.insert("g").attr("class",a).attr("id",e.domId||e.id),u=l.insert("g").attr("class","label").attr("style",e.labelStyle),h;e.labelText===void 0?h="":h=typeof e.labelText=="string"?e.labelText:e.labelText[0];let f=u.node(),d;e.labelType==="markdown"?d=Hn(u,Tr(na(h),i),{useHtmlLabels:s,width:e.width||i.flowchart.wrappingWidth,classes:"markdown-node-label"},i):d=f.appendChild(vs(Tr(na(h),i),e.labelStyle,!1,n));let p=d.getBBox(),m=e.padding/2;if(fr(i.flowchart.htmlLabels)){let g=d.children[0],y=Ge(d),v=g.getElementsByTagName("img");if(v){let x=h.replace(/<img[^>]*>/g,"").trim()==="";await Promise.all([...v].map(b=>new Promise(w=>{function C(){if(b.style.display="flex",b.style.flexDirection="column",x){let T=i.fontSize?i.fontSize:window.getComputedStyle(document.body).fontSize,A=parseInt(T,10)*5+"px";b.style.minWidth=A,b.style.maxWidth=A}else b.style.width="100%";w(b)}o(C,"setupImage"),setTimeout(()=>{b.complete&&C()}),b.addEventListener("error",C),b.addEventListener("load",C)})))}p=g.getBoundingClientRect(),y.attr("width",p.width),y.attr("height",p.height)}return s?u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"):u.attr("transform","translate(0, "+-p.height/2+")"),e.centerLabel&&u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),u.insert("rect",":first-child"),{shapeSvg:l,bbox:p,halfPadding:m,label:u}},"labelHelper"),Qn=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds");o(Hl,"insertPolygonShape")});var Mtt,ave,sve=N(()=>{"use strict";iF();vt();zt();nF();Mtt=o(async(t,e)=>{e.useHtmlLabels||me().flowchart.htmlLabels||(e.centerLabel=!0);let{shapeSvg:n,bbox:i,halfPadding:a}=await Di(t,e,"node "+e.classes,!0);Y.info("Classes = ",e.classes);let s=n.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),Qn(e,s),e.intersect=function(l){return In.rect(e,l)},n},"note"),ave=Mtt});function aF(t,e,r,n){let i=[],a=o(l=>{i.push(l,0)},"addBorder"),s=o(l=>{i.push(0,l)},"skipBorder");e.includes("t")?(Y.debug("add top border"),a(r)):s(r),e.includes("r")?(Y.debug("add right border"),a(n)):s(n),e.includes("b")?(Y.debug("add bottom border"),a(r)):s(r),e.includes("l")?(Y.debug("add left border"),a(n)):s(n),t.attr("stroke-dasharray",i.join(" "))}var ove,yo,lve,Itt,Ott,Ptt,Btt,Ftt,$tt,ztt,Gtt,Vtt,Utt,Htt,Wtt,qtt,Ytt,Xtt,jtt,Ktt,Qtt,Ztt,cve,Jtt,ert,uve,aC,sF,hve,fve=N(()=>{"use strict";dr();zt();gr();vt();Yye();rC();nF();sve();iF();ove=o(t=>t?" "+t:"","formatClass"),yo=o((t,e)=>`${e||"node default"}${ove(t.classes)} ${ove(t.class)}`,"getClassesFromNode"),lve=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=i+a,l=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];Y.info("Question main (Circle)");let u=Hl(r,s,s,l);return u.attr("style",e.style),Qn(e,u),e.intersect=function(h){return Y.warn("Intersect called"),In.polygon(e,l,h)},r},"question"),Itt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=28,i=[{x:0,y:n/2},{x:n/2,y:0},{x:0,y:-n/2},{x:-n/2,y:0}];return r.insert("polygon",":first-child").attr("points",i.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(s){return In.circle(e,14,s)},r},"choice"),Ott=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=4,a=n.height+e.padding,s=a/i,l=n.width+2*s+e.padding,u=[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}],h=Hl(r,l,a,u);return h.attr("style",e.style),Qn(e,h),e.intersect=function(f){return In.polygon(e,u,f)},r},"hexagon"),Ptt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,void 0,!0),i=2,a=n.height+2*e.padding,s=a/i,l=n.width+2*s+e.padding,u=qye(e.directions,n,e),h=Hl(r,l,a,u);return h.attr("style",e.style),Qn(e,h),e.intersect=function(f){return In.polygon(e,u,f)},r},"block_arrow"),Btt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-a/2,y:0},{x:i,y:0},{x:i,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return Hl(r,i,a,s).attr("style",e.style),e.width=i+a,e.height=a,e.intersect=function(u){return In.polygon(e,s,u)},r},"rect_left_inv_arrow"),Ftt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:a/6,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"lean_right"),$tt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:2*a/6,y:0},{x:i+a/6,y:0},{x:i-2*a/6,y:-a},{x:-a/6,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"lean_left"),ztt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i+2*a/6,y:0},{x:i-a/6,y:-a},{x:a/6,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"trapezoid"),Gtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:-2*a/6,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"inv_trapezoid"),Vtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i+a/2,y:0},{x:i,y:-a/2},{x:i+a/2,y:-a},{x:0,y:-a}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"rect_right_inv_arrow"),Utt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=i/2,s=a/(2.5+i/50),l=n.height+s+e.padding,u="M 0,"+s+" a "+a+","+s+" 0,0,0 "+i+" 0 a "+a+","+s+" 0,0,0 "+-i+" 0 l 0,"+l+" a "+a+","+s+" 0,0,0 "+i+" 0 l 0,"+-l,h=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",u).attr("transform","translate("+-i/2+","+-(l/2+s)+")");return Qn(e,h),e.intersect=function(f){let d=In.rect(e,f),p=d.x-e.x;if(a!=0&&(Math.abs(p)<e.width/2||Math.abs(p)==e.width/2&&Math.abs(d.y-e.y)>e.height/2-s)){let m=s*s*(1-p*p/(a*a));m!=0&&(m=Math.sqrt(m)),m=s-m,f.y-e.y>0&&(m=-m),d.y+=m}return d},r},"cylinder"),Htt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Di(t,e,"node "+e.classes+" "+e.class,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(aF(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{Y.warn(`Unknown node property ${d}`)})}return Qn(e,a),e.intersect=function(f){return In.rect(e,f)},r},"rect"),Wtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Di(t,e,"node "+e.classes,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic cluster composite label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(aF(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{Y.warn(`Unknown node property ${d}`)})}return Qn(e,a),e.intersect=function(f){return In.rect(e,f)},r},"composite"),qtt=o(async(t,e)=>{let{shapeSvg:r}=await Di(t,e,"label",!0);Y.trace("Classes = ",e.class);let n=r.insert("rect",":first-child"),i=0,a=0;if(n.attr("width",i).attr("height",a),r.attr("class","label edgeLabel"),e.props){let s=new Set(Object.keys(e.props));e.props.borders&&(aF(n,e.props.borders,i,a),s.delete("borders")),s.forEach(l=>{Y.warn(`Unknown node property ${l}`)})}return Qn(e,n),e.intersect=function(s){return In.rect(e,s)},r},"labelRect");o(aF,"applyNodePropertyBorders");Ytt=o((t,e)=>{let r;e.classes?r="node "+e.classes:r="node default";let n=t.insert("g").attr("class",r).attr("id",e.domId||e.id),i=n.insert("rect",":first-child"),a=n.insert("line"),s=n.insert("g").attr("class","label"),l=e.labelText.flat?e.labelText.flat():e.labelText,u="";typeof l=="object"?u=l[0]:u=l,Y.info("Label text abc79",u,l,typeof l=="object");let h=s.node().appendChild(vs(u,e.labelStyle,!0,!0)),f={width:0,height:0};if(fr(me().flowchart.htmlLabels)){let y=h.children[0],v=Ge(h);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}Y.info("Text 2",l);let d=l.slice(1,l.length),p=h.getBBox(),m=s.node().appendChild(vs(d.join?d.join("<br/>"):d,e.labelStyle,!0,!0));if(fr(me().flowchart.htmlLabels)){let y=m.children[0],v=Ge(m);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}let g=e.padding/2;return Ge(m).attr("transform","translate( "+(f.width>p.width?0:(p.width-f.width)/2)+", "+(p.height+g+5)+")"),Ge(h).attr("transform","translate( "+(f.width<p.width?0:-(p.width-f.width)/2)+", 0)"),f=s.node().getBBox(),s.attr("transform","translate("+-f.width/2+", "+(-f.height/2-g+3)+")"),i.attr("class","outer title-state").attr("x",-f.width/2-g).attr("y",-f.height/2-g).attr("width",f.width+e.padding).attr("height",f.height+e.padding),a.attr("class","divider").attr("x1",-f.width/2-g).attr("x2",f.width/2+g).attr("y1",-f.height/2-g+p.height+g).attr("y2",-f.height/2-g+p.height+g),Qn(e,i),e.intersect=function(y){return In.rect(e,y)},n},"rectWithTitle"),Xtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.height+e.padding,a=n.width+i/4+e.padding,s=r.insert("rect",":first-child").attr("style",e.style).attr("rx",i/2).attr("ry",i/2).attr("x",-a/2).attr("y",-i/2).attr("width",a).attr("height",i);return Qn(e,s),e.intersect=function(l){return In.rect(e,l)},r},"stadium"),jtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Di(t,e,yo(e,void 0),!0),a=r.insert("circle",":first-child");return a.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),Y.info("Circle main"),Qn(e,a),e.intersect=function(s){return Y.info("Circle intersect",e,n.width/2+i,s),In.circle(e,n.width/2+i,s)},r},"circle"),Ktt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Di(t,e,yo(e,void 0),!0),a=5,s=r.insert("g",":first-child"),l=s.insert("circle"),u=s.insert("circle");return s.attr("class",e.class),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i+a).attr("width",n.width+e.padding+a*2).attr("height",n.height+e.padding+a*2),u.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),Y.info("DoubleCircle main"),Qn(e,l),e.intersect=function(h){return Y.info("DoubleCircle intersect",e,n.width/2+i+a,h),In.circle(e,n.width/2+i+a,h)},r},"doublecircle"),Qtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Di(t,e,yo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i,y:0},{x:i,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:i+8,y:0},{x:i+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],l=Hl(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"subroutine"),Ztt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),Qn(e,n),e.intersect=function(i){return In.circle(e,7,i)},r},"start"),cve=o((t,e,r)=>{let n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=70,a=10;r==="LR"&&(i=10,a=70);let s=n.append("rect").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return Qn(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(l){return In.rect(e,l)},n},"forkJoin"),Jtt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child"),i=r.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),n.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),Qn(e,i),e.intersect=function(a){return In.circle(e,7,a)},r},"end"),ert=o((t,e)=>{let r=e.padding/2,n=4,i=8,a;e.classes?a="node "+e.classes:a="node default";let s=t.insert("g").attr("class",a).attr("id",e.domId||e.id),l=s.insert("rect",":first-child"),u=s.insert("line"),h=s.insert("line"),f=0,d=n,p=s.insert("g").attr("class","label"),m=0,g=e.classData.annotations?.[0],y=e.classData.annotations[0]?"\xAB"+e.classData.annotations[0]+"\xBB":"",v=p.node().appendChild(vs(y,e.labelStyle,!0,!0)),x=v.getBBox();if(fr(me().flowchart.htmlLabels)){let S=v.children[0],_=Ge(v);x=S.getBoundingClientRect(),_.attr("width",x.width),_.attr("height",x.height)}e.classData.annotations[0]&&(d+=x.height+n,f+=x.width);let b=e.classData.label;e.classData.type!==void 0&&e.classData.type!==""&&(me().flowchart.htmlLabels?b+="&lt;"+e.classData.type+"&gt;":b+="<"+e.classData.type+">");let w=p.node().appendChild(vs(b,e.labelStyle,!0,!0));Ge(w).attr("class","classTitle");let C=w.getBBox();if(fr(me().flowchart.htmlLabels)){let S=w.children[0],_=Ge(w);C=S.getBoundingClientRect(),_.attr("width",C.width),_.attr("height",C.height)}d+=C.height+n,C.width>f&&(f=C.width);let T=[];e.classData.members.forEach(S=>{let _=S.getDisplayDetails(),I=_.displayText;me().flowchart.htmlLabels&&(I=I.replace(/</g,"&lt;").replace(/>/g,"&gt;"));let D=p.node().appendChild(vs(I,_.cssStyle?_.cssStyle:e.labelStyle,!0,!0)),k=D.getBBox();if(fr(me().flowchart.htmlLabels)){let L=D.children[0],R=Ge(D);k=L.getBoundingClientRect(),R.attr("width",k.width),R.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,T.push(D)}),d+=i;let E=[];if(e.classData.methods.forEach(S=>{let _=S.getDisplayDetails(),I=_.displayText;me().flowchart.htmlLabels&&(I=I.replace(/</g,"&lt;").replace(/>/g,"&gt;"));let D=p.node().appendChild(vs(I,_.cssStyle?_.cssStyle:e.labelStyle,!0,!0)),k=D.getBBox();if(fr(me().flowchart.htmlLabels)){let L=D.children[0],R=Ge(D);k=L.getBoundingClientRect(),R.attr("width",k.width),R.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,E.push(D)}),d+=i,g){let S=(f-x.width)/2;Ge(v).attr("transform","translate( "+(-1*f/2+S)+", "+-1*d/2+")"),m=x.height+n}let A=(f-C.width)/2;return Ge(w).attr("transform","translate( "+(-1*f/2+A)+", "+(-1*d/2+m)+")"),m+=C.height+n,u.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,T.forEach(S=>{Ge(S).attr("transform","translate( "+-f/2+", "+(-1*d/2+m+i/2)+")");let _=S?.getBBox();m+=(_?.height??0)+n}),m+=i,h.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,E.forEach(S=>{Ge(S).attr("transform","translate( "+-f/2+", "+(-1*d/2+m)+")");let _=S?.getBBox();m+=(_?.height??0)+n}),l.attr("style",e.style).attr("class","outer title-state").attr("x",-f/2-r).attr("y",-(d/2)-r).attr("width",f+e.padding).attr("height",d+e.padding),Qn(e,l),e.intersect=function(S){return In.rect(e,S)},s},"class_box"),uve={rhombus:lve,composite:Wtt,question:lve,rect:Htt,labelRect:qtt,rectWithTitle:Ytt,choice:Itt,circle:jtt,doublecircle:Ktt,stadium:Xtt,hexagon:Ott,block_arrow:Ptt,rect_left_inv_arrow:Btt,lean_right:Ftt,lean_left:$tt,trapezoid:ztt,inv_trapezoid:Gtt,rect_right_inv_arrow:Vtt,cylinder:Utt,start:Ztt,end:Jtt,note:ave,subroutine:Qtt,fork:cve,join:cve,class_box:ert},aC={},sF=o(async(t,e,r)=>{let n,i;if(e.link){let a;me().securityLevel==="sandbox"?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),i=await uve[e.shape](n,e,r)}else i=await uve[e.shape](t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),aC[e.id]=n,e.haveCallback&&aC[e.id].attr("class",aC[e.id].attr("class")+" clickable"),n},"insertNode"),hve=o(t=>{let e=aC[t.id];Y.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});function dve(t,e,r=!1){let n=t,i="default";(n?.classes?.length||0)>0&&(i=(n?.classes??[]).join(" ")),i=i+" flowchart-label";let a=0,s="",l;switch(n.type){case"round":a=5,s="rect";break;case"composite":a=0,s="composite",l=0;break;case"square":s="rect";break;case"diamond":s="question";break;case"hexagon":s="hexagon";break;case"block_arrow":s="block_arrow";break;case"odd":s="rect_left_inv_arrow";break;case"lean_right":s="lean_right";break;case"lean_left":s="lean_left";break;case"trapezoid":s="trapezoid";break;case"inv_trapezoid":s="inv_trapezoid";break;case"rect_left_inv_arrow":s="rect_left_inv_arrow";break;case"circle":s="circle";break;case"ellipse":s="ellipse";break;case"stadium":s="stadium";break;case"subroutine":s="subroutine";break;case"cylinder":s="cylinder";break;case"group":s="rect";break;case"doublecircle":s="doublecircle";break;default:s="rect"}let u=Y9(n?.styles??[]),h=n.label,f=n.size??{width:0,height:0,x:0,y:0};return{labelStyle:u.labelStyle,shape:s,labelText:h,rx:a,ry:a,class:i,style:u.style,id:n.id,directions:n.directions,width:f.width,height:f.height,x:f.x,y:f.y,positioned:r,intersect:void 0,type:n.type,padding:l??cr()?.block?.padding??0}}async function trt(t,e,r){let n=dve(e,r,!1);if(n.type==="group")return;let i=cr(),a=await sF(t,n,{config:i}),s=a.node().getBBox(),l=r.getBlock(n.id);l.size={width:s.width,height:s.height,x:0,y:0,node:a},r.setBlock(l),a.remove()}async function rrt(t,e,r){let n=dve(e,r,!0);if(r.getBlock(n.id).type!=="space"){let a=cr();await sF(t,n,{config:a}),e.intersect=n?.intersect,hve(n)}}async function oF(t,e,r,n){for(let i of e)await n(t,i,r),i.children&&await oF(t,i.children,r,n)}async function pve(t,e,r){await oF(t,e,r,trt)}async function mve(t,e,r){await oF(t,e,r,rrt)}async function gve(t,e,r,n,i){let a=new sn({multigraph:!0,compound:!0});a.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(let s of r)s.size&&a.setNode(s.id,{width:s.size.width,height:s.size.height,intersect:s.intersect});for(let s of e)if(s.start&&s.end){let l=n.getBlock(s.start),u=n.getBlock(s.end);if(l?.size&&u?.size){let h=l.size,f=u.size,d=[{x:h.x,y:h.y},{x:h.x+(f.x-h.x)/2,y:h.y+(f.y-h.y)/2},{x:f.x,y:f.y}];Hye(t,{v:s.start,w:s.end,name:s.id},{...s,arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",a,i),s.label&&(await Vye(t,{...s,label:s.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),Uye({...s,x:d[1].x,y:d[1].y},{originalPath:d}))}}}var yve=N(()=>{"use strict";Vo();ji();Wye();fve();ir();o(dve,"getNodeFromBlock");o(trt,"calculateBlockSize");o(rrt,"insertBlockPositioned");o(oF,"performOperations");o(pve,"calculateBlockSizes");o(mve,"insertBlocks");o(gve,"insertEdges")});var nrt,irt,vve,xve=N(()=>{"use strict";dr();ji();Nye();vt();Ei();Pye();yve();nrt=o(function(t,e){return e.db.getClasses()},"getClasses"),irt=o(async function(t,e,r,n){let{securityLevel:i,block:a}=cr(),s=n.db,l;i==="sandbox"&&(l=Ge("#i"+e));let u=i==="sandbox"?Ge(l.nodes()[0].contentDocument.body):Ge("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):Ge(`[id="${e}"]`);Rye(h,["point","circle","cross"],n.type,e);let d=s.getBlocks(),p=s.getBlocksFlat(),m=s.getEdges(),g=h.insert("g").attr("class","block");await pve(g,d,s);let y=Oye(s);if(await mve(g,d,s),await gve(g,m,p,s,e),y){let v=y,x=Math.max(1,Math.round(.125*(v.width/v.height))),b=v.height+x+10,w=v.width+10,{useMaxWidth:C}=a;vn(h,b,w,!!C),Y.debug("Here Bounds",y,v),h.attr("viewBox",`${v.x-5} ${v.y-5} ${v.width+10} ${v.height+10}`)}},"draw"),vve={draw:irt,getClasses:nrt}});var bve={};hr(bve,{diagram:()=>art});var art,wve=N(()=>{"use strict";wye();_ye();Lye();xve();art={parser:bye,db:Aye,renderer:vve,styles:Dye}});var lF,cF,v4,Eve,uF,Ha,Zc,x4,Sve,crt,b4,Cve,Ave,_ve,Dve,Lve,sC,Ff,oC=N(()=>{"use strict";lF={L:"left",R:"right",T:"top",B:"bottom"},cF={L:o(t=>`${t},${t/2} 0,${t} 0,0`,"L"),R:o(t=>`0,${t/2} ${t},0 ${t},${t}`,"R"),T:o(t=>`0,0 ${t},0 ${t/2},${t}`,"T"),B:o(t=>`${t/2},0 ${t},${t} 0,${t}`,"B")},v4={L:o((t,e)=>t-e+2,"L"),R:o((t,e)=>t-2,"R"),T:o((t,e)=>t-e+2,"T"),B:o((t,e)=>t-2,"B")},Eve=o(function(t){return Ha(t)?t==="L"?"R":"L":t==="T"?"B":"T"},"getOppositeArchitectureDirection"),uF=o(function(t){let e=t;return e==="L"||e==="R"||e==="T"||e==="B"},"isArchitectureDirection"),Ha=o(function(t){let e=t;return e==="L"||e==="R"},"isArchitectureDirectionX"),Zc=o(function(t){let e=t;return e==="T"||e==="B"},"isArchitectureDirectionY"),x4=o(function(t,e){let r=Ha(t)&&Zc(e),n=Zc(t)&&Ha(e);return r||n},"isArchitectureDirectionXY"),Sve=o(function(t){let e=t[0],r=t[1],n=Ha(e)&&Zc(r),i=Zc(e)&&Ha(r);return n||i},"isArchitecturePairXY"),crt=o(function(t){return t!=="LL"&&t!=="RR"&&t!=="TT"&&t!=="BB"},"isValidArchitectureDirectionPair"),b4=o(function(t,e){let r=`${t}${e}`;return crt(r)?r:void 0},"getArchitectureDirectionPair"),Cve=o(function([t,e],r){let n=r[0],i=r[1];return Ha(n)?Zc(i)?[t+(n==="L"?-1:1),e+(i==="T"?1:-1)]:[t+(n==="L"?-1:1),e]:Ha(i)?[t+(i==="L"?1:-1),e+(n==="T"?1:-1)]:[t,e+(n==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),Ave=o(function(t){return t==="LT"||t==="TL"?[1,1]:t==="BL"||t==="LB"?[1,-1]:t==="BR"||t==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),_ve=o(function(t,e){return x4(t,e)?"bend":Ha(t)?"horizontal":"vertical"},"getArchitectureDirectionAlignment"),Dve=o(function(t){return t.type==="service"},"isArchitectureService"),Lve=o(function(t){return t.type==="junction"},"isArchitectureJunction"),sC=o(t=>t.data(),"edgeData"),Ff=o(t=>t.data(),"nodeData")});function Li(t){let e=me().architecture;return e?.[t]?e[t]:Rve[t]}var Rve,vr,urt,hrt,frt,drt,prt,mrt,hF,grt,yrt,vrt,xrt,brt,wrt,Trt,Qp,w4=N(()=>{"use strict";Ya();zt();s6();mi();oC();Rve=or.architecture,vr=new pf(()=>({nodes:{},groups:{},edges:[],registeredIds:{},config:Rve,dataStructures:void 0,elements:{}})),urt=o(()=>{vr.reset(),Ar()},"clear"),hrt=o(function({id:t,icon:e,in:r,title:n,iconText:i}){if(vr.records.registeredIds[t]!==void 0)throw new Error(`The service id [${t}] is already in use by another ${vr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The service [${t}] cannot be placed within itself`);if(vr.records.registeredIds[r]===void 0)throw new Error(`The service [${t}]'s parent does not exist. Please make sure the parent is created before this service`);if(vr.records.registeredIds[r]==="node")throw new Error(`The service [${t}]'s parent is not a group`)}vr.records.registeredIds[t]="node",vr.records.nodes[t]={id:t,type:"service",icon:e,iconText:i,title:n,edges:[],in:r}},"addService"),frt=o(()=>Object.values(vr.records.nodes).filter(Dve),"getServices"),drt=o(function({id:t,in:e}){vr.records.registeredIds[t]="node",vr.records.nodes[t]={id:t,type:"junction",edges:[],in:e}},"addJunction"),prt=o(()=>Object.values(vr.records.nodes).filter(Lve),"getJunctions"),mrt=o(()=>Object.values(vr.records.nodes),"getNodes"),hF=o(t=>vr.records.nodes[t],"getNode"),grt=o(function({id:t,icon:e,in:r,title:n}){if(vr.records.registeredIds[t]!==void 0)throw new Error(`The group id [${t}] is already in use by another ${vr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The group [${t}] cannot be placed within itself`);if(vr.records.registeredIds[r]===void 0)throw new Error(`The group [${t}]'s parent does not exist. Please make sure the parent is created before this group`);if(vr.records.registeredIds[r]==="node")throw new Error(`The group [${t}]'s parent is not a group`)}vr.records.registeredIds[t]="group",vr.records.groups[t]={id:t,icon:e,title:n,in:r}},"addGroup"),yrt=o(()=>Object.values(vr.records.groups),"getGroups"),vrt=o(function({lhsId:t,rhsId:e,lhsDir:r,rhsDir:n,lhsInto:i,rhsInto:a,lhsGroup:s,rhsGroup:l,title:u}){if(!uF(r))throw new Error(`Invalid direction given for left hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${r}`);if(!uF(n))throw new Error(`Invalid direction given for right hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${n}`);if(vr.records.nodes[t]===void 0&&vr.records.groups[t]===void 0)throw new Error(`The left-hand id [${t}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(vr.records.nodes[e]===void 0&&vr.records.groups[t]===void 0)throw new Error(`The right-hand id [${e}] does not yet exist. Please create the service/group before declaring an edge to it.`);let h=vr.records.nodes[t].in,f=vr.records.nodes[e].in;if(s&&h&&f&&h==f)throw new Error(`The left-hand id [${t}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(l&&h&&f&&h==f)throw new Error(`The right-hand id [${e}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);let d={lhsId:t,lhsDir:r,lhsInto:i,lhsGroup:s,rhsId:e,rhsDir:n,rhsInto:a,rhsGroup:l,title:u};vr.records.edges.push(d),vr.records.nodes[t]&&vr.records.nodes[e]&&(vr.records.nodes[t].edges.push(vr.records.edges[vr.records.edges.length-1]),vr.records.nodes[e].edges.push(vr.records.edges[vr.records.edges.length-1]))},"addEdge"),xrt=o(()=>vr.records.edges,"getEdges"),brt=o(()=>{if(vr.records.dataStructures===void 0){let t={},e=Object.entries(vr.records.nodes).reduce((l,[u,h])=>(l[u]=h.edges.reduce((f,d)=>{let p=hF(d.lhsId)?.in,m=hF(d.rhsId)?.in;if(p&&m&&p!==m){let g=_ve(d.lhsDir,d.rhsDir);g!=="bend"&&(t[p]??={},t[p][m]=g,t[m]??={},t[m][p]=g)}if(d.lhsId===u){let g=b4(d.lhsDir,d.rhsDir);g&&(f[g]=d.rhsId)}else{let g=b4(d.rhsDir,d.lhsDir);g&&(f[g]=d.lhsId)}return f},{}),l),{}),r=Object.keys(e)[0],n={[r]:1},i=Object.keys(e).reduce((l,u)=>u===r?l:{...l,[u]:1},{}),a=o(l=>{let u={[l]:[0,0]},h=[l];for(;h.length>0;){let f=h.shift();if(f){n[f]=1,delete i[f];let d=e[f],[p,m]=u[f];Object.entries(d).forEach(([g,y])=>{n[y]||(u[y]=Cve([p,m],g),h.push(y))})}}return u},"BFS"),s=[a(r)];for(;Object.keys(i).length>0;)s.push(a(Object.keys(i)[0]));vr.records.dataStructures={adjList:e,spatialMaps:s,groupAlignments:t}}return vr.records.dataStructures},"getDataStructures"),wrt=o((t,e)=>{vr.records.elements[t]=e},"setElementForId"),Trt=o(t=>vr.records.elements[t],"getElementById"),Qp={clear:urt,setDiagramTitle:$r,getDiagramTitle:Ir,setAccTitle:Lr,getAccTitle:Rr,setAccDescription:Nr,getAccDescription:Mr,addService:hrt,getServices:frt,addJunction:drt,getJunctions:prt,getNodes:mrt,getNode:hF,addGroup:grt,getGroups:yrt,addEdge:vrt,getEdges:xrt,setElementForId:wrt,getElementById:Trt,getDataStructures:brt};o(Li,"getConfigField")});var krt,Nve,Mve=N(()=>{"use strict";kp();vt();T1();w4();krt=o((t,e)=>{$c(t,e),t.groups.map(e.addGroup),t.services.map(r=>e.addService({...r,type:"service"})),t.junctions.map(r=>e.addJunction({...r,type:"junction"})),t.edges.map(e.addEdge)},"populateDb"),Nve={parse:o(async t=>{let e=await uo("architecture",t);Y.debug(e),krt(e,Qp)},"parse")}});var Ert,Ive,Ove=N(()=>{"use strict";Ert=o(t=>`
2526 + .edge {
2527 + stroke-width: ${t.archEdgeWidth};
2528 + stroke: ${t.archEdgeColor};
2529 + fill: none;
2530 + }
2531 +
2532 + .arrow {
2533 + fill: ${t.archEdgeArrowColor};
2534 + }
2535 +
2536 + .node-bkg {
2537 + fill: none;
2538 + stroke: ${t.archGroupBorderColor};
2539 + stroke-width: ${t.archGroupBorderWidth};
2540 + stroke-dasharray: 8;
2541 + }
2542 + .node-icon-text {
2543 + display: flex;
2544 + align-items: center;
2545 + }
2546 +
2547 + .node-icon-text > div {
2548 + color: #fff;
2549 + margin: 1px;
2550 + height: fit-content;
2551 + text-align: center;
2552 + overflow: hidden;
2553 + display: -webkit-box;
2554 + -webkit-box-orient: vertical;
2555 + }
2556 +`,"getStyles"),Ive=Ert});var dF=Mi((T4,fF)=>{"use strict";o(function(e,r){typeof T4=="object"&&typeof fF=="object"?fF.exports=r():typeof define=="function"&&define.amd?define([],r):typeof T4=="object"?T4.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(T4,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=28)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(5);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;y<g.length;y++)p=g[y],m=p.withChildren(),m.forEach(function(v){d.add(v)});return d},h.prototype.getNoOfChildren=function(){var d=0,p;if(this.child==null)d=1;else for(var m=this.child.getNodes(),g=0;g<m.length;g++)p=m[g],d+=p.getNoOfChildren();return d==0&&(d=1),d},h.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},h.prototype.calcEstimatedSize=function(){return this.child==null?this.estimatedSize=(this.rect.width+this.rect.height)/2:(this.estimatedSize=this.child.calcEstimatedSize(),this.rect.width=this.estimatedSize,this.rect.height=this.estimatedSize,this.estimatedSize)},h.prototype.scatter=function(){var d,p,m=-s.INITIAL_WORLD_BOUNDARY,g=s.INITIAL_WORLD_BOUNDARY;d=s.WORLD_CENTER_X+l.nextDouble()*(g-m)+m;var y=-s.INITIAL_WORLD_BOUNDARY,v=s.INITIAL_WORLD_BOUNDARY;p=s.WORLD_CENTER_Y+l.nextDouble()*(v-y)+y,this.rect.x=d,this.rect.y=p},h.prototype.updateBounds=function(){if(this.getChild()==null)throw"assert failed";if(this.getChild().getNodes().length!=0){var d=this.getChild();if(d.updateBounds(!0),this.rect.x=d.getLeft(),this.rect.y=d.getTop(),this.setWidth(d.getRight()-d.getLeft()),this.setHeight(d.getBottom()-d.getTop()),s.NODE_DIMENSIONS_INCLUDE_LABELS){var p=d.getRight()-d.getLeft(),m=d.getBottom()-d.getTop();this.labelWidth&&(this.labelPosHorizontal=="left"?(this.rect.x-=this.labelWidth,this.setWidth(p+this.labelWidth)):this.labelPosHorizontal=="center"&&this.labelWidth>p?(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(p+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(m+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>m?(this.rect.y-=(this.labelHeight-m)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(m+this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";var n=r(0);function i(){}o(i,"FDLayoutConstants");for(var a in n)i[a]=n[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=i.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,t.exports=i},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(7),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,w=0;w<b;w++)x=v[w],x.isInterGraph?this.graphManager.remove(x):x.source.owner.remove(x);var C=this.nodes.indexOf(y);if(C==-1)throw"Node not in owner node list!";this.nodes.splice(C,1)}else if(g instanceof u){var x=g;if(x==null)throw"Edge is null!";if(!(x.source!=null&&x.target!=null))throw"Source and/or target is null!";if(!(x.source.owner!=null&&x.target.owner!=null&&x.source.owner==this&&x.target.owner==this))throw"Source and/or target owner is invalid!";var T=x.source.edges.indexOf(x),E=x.target.edges.indexOf(x);if(!(T>-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(T,1),x.target!=x.source&&x.target.edges.splice(E,1);var C=x.source.owner.getEdges().indexOf(x);if(C==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(C,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,w=this.getNodes(),C=w.length,T=0;T<C;T++){var E=w[T];v=E.getTop(),x=E.getLeft(),g>v&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(w[0].getParent().paddingLeft!=null?b=w[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,C,T,E,A,S=this.nodes,_=S.length,I=0;I<_;I++){var D=S[I];g&&D.child!=null&&D.updateBounds(),w=D.getLeft(),C=D.getRight(),T=D.getTop(),E=D.getBottom(),y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var k=new h(y,x,v-y,b-x);y==i.MAX_VALUE&&(this.left=this.parent.getLeft(),this.right=this.parent.getRight(),this.top=this.parent.getTop(),this.bottom=this.parent.getBottom()),S[0].getParent().paddingLeft!=null?A=S[0].getParent().paddingLeft:A=this.margin,this.left=k.x-A,this.right=k.x+k.width+A,this.top=k.y-A,this.bottom=k.y+k.height+A},p.calculateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,C,T,E,A=g.length,S=0;S<A;S++){var _=g[S];w=_.getLeft(),C=_.getRight(),T=_.getTop(),E=_.getBottom(),y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var I=new h(y,x,v-y,b-x);return I},p.prototype.getInclusionTreeDepth=function(){return this==this.graphManager.getRoot()?1:this.parent.getInclusionTreeDepth()},p.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},p.prototype.calcEstimatedSize=function(){for(var g=0,y=this.nodes,v=y.length,x=0;x<v;x++){var b=y[x];g+=b.calcEstimatedSize()}return g==0?this.estimatedSize=a.EMPTY_COMPOUND_NODE_SIZE:this.estimatedSize=g/Math.sqrt(this.nodes.length),this.estimatedSize},p.prototype.updateConnected=function(){var g=this;if(this.nodes.length==0){this.isConnected=!0;return}var y=new d,v=new Set,x=this.nodes[0],b,w,C=x.withChildren();for(C.forEach(function(I){y.push(I),v.add(I)});y.length!==0;){x=y.shift(),b=x.getEdges();for(var T=b.length,E=0;E<T;E++){var A=b[E];if(w=A.getOtherEndInGraph(x,this),w!=null&&!v.has(w)){var S=w.withChildren();S.forEach(function(I){y.push(I),v.add(I)})}}}if(this.isConnected=!1,v.size>=this.nodes.length){var _=0;v.forEach(function(I){I.owner==g&&_++}),_==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(6),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d<f;d++)h=u[d],l.remove(h);var p=[];p=p.concat(l.getNodes());var m;f=p.length;for(var d=0;d<f;d++)m=p[d],l.remove(m);l==this.rootGraph&&this.setRootGraph(null);var g=this.graphs.indexOf(l);this.graphs.splice(g,1),l.parent=null}else if(s instanceof i){if(h=s,h==null)throw"Edge is null!";if(!h.isInterGraph)throw"Not an inter-graph edge!";if(!(h.source!=null&&h.target!=null))throw"Source and/or target is null!";if(!(h.source.edges.indexOf(h)!=-1&&h.target.edges.indexOf(h)!=-1))throw"Source and/or target doesn't know this edge!";var g=h.source.edges.indexOf(h);if(h.source.edges.splice(g,1),g=h.target.edges.indexOf(h),h.target.edges.splice(g,1),!(h.source.owner!=null&&h.source.owner.getGraphManager()!=null))throw"Edge owner graph or owner graph manager is null!";if(h.source.owner.getGraphManager().edges.indexOf(h)==-1)throw"Not in owner graph manager's edge list!";var g=h.source.owner.getGraphManager().edges.indexOf(h);h.source.owner.getGraphManager().edges.splice(g,1)}},a.prototype.updateBounds=function(){this.rootGraph.updateBounds(!0)},a.prototype.getGraphs=function(){return this.graphs},a.prototype.getAllNodes=function(){if(this.allNodes==null){for(var s=[],l=this.getGraphs(),u=l.length,h=0;h<u;h++)s=s.concat(l[h].getNodes());this.allNodes=s}return this.allNodes},a.prototype.resetAllNodes=function(){this.allNodes=null},a.prototype.resetAllEdges=function(){this.allEdges=null},a.prototype.resetAllNodesToApplyGravitation=function(){this.allNodesToApplyGravitation=null},a.prototype.getAllEdges=function(){if(this.allEdges==null){for(var s=[],l=this.getGraphs(),u=l.length,h=0;h<l.length;h++)s=s.concat(l[h].getEdges());s=s.concat(this.edges),this.allEdges=s}return this.allEdges},a.prototype.getAllNodesToApplyGravitation=function(){return this.allNodesToApplyGravitation},a.prototype.setAllNodesToApplyGravitation=function(s){if(this.allNodesToApplyGravitation!=null)throw"assert failed";this.allNodesToApplyGravitation=s},a.prototype.getRoot=function(){return this.rootGraph},a.prototype.setRootGraph=function(s){if(s.getGraphManager()!=this)throw"Root not in this graph mgr!";this.rootGraph=s,s.parent==null&&(s.parent=this.layout.newNode("Root node"))},a.prototype.getLayout=function(){return this.layout},a.prototype.isOneAncestorOfOther=function(s,l){if(!(s!=null&&l!=null))throw"assert failed";if(s==l)return!0;var u=s.getOwner(),h;do{if(h=u.getParent(),h==null)break;if(h==l)return!0;if(u=h.getOwner(),u==null)break}while(!0);u=l.getOwner();do{if(h=u.getParent(),h==null)break;if(h==s)return!0;if(u=h.getOwner(),u==null)break}while(!0);return!1},a.prototype.calcLowestCommonAncestors=function(){for(var s,l,u,h,f,d=this.getAllEdges(),p=d.length,m=0;m<p;m++){if(s=d[m],l=s.source,u=s.target,s.lca=null,s.sourceInLca=l,s.targetInLca=u,l==u){s.lca=l.getOwner();continue}for(h=l.getOwner();s.lca==null;){for(s.targetInLca=u,f=u.getOwner();s.lca==null;){if(f==h){s.lca=f;break}if(f==this.rootGraph)break;if(s.lca!=null)throw"assert failed";s.targetInLca=f.getParent(),f=s.targetInLca.getOwner()}if(h==this.rootGraph)break;s.lca==null&&(s.sourceInLca=h.getParent(),h=s.sourceInLca.getOwner())}if(s.lca==null)throw"assert failed"}},a.prototype.calcLowestCommonAncestor=function(s,l){if(s==l)return s.getOwner();var u=s.getOwner();do{if(u==null)break;var h=l.getOwner();do{if(h==null)break;if(h==u)return h;h=h.getParent().getOwner()}while(!0);u=u.getParent().getOwner()}while(!0);return u},a.prototype.calcInclusionTreeDepths=function(s,l){s==null&&l==null&&(s=this.rootGraph,l=1);for(var u,h=s.getNodes(),f=h.length,d=0;d<f;d++)u=h[d],u.inclusionTreeDepth=l,u.child!=null&&this.calcInclusionTreeDepths(u.child,l+1)},a.prototype.includesInvalidEdge=function(){for(var s,l=[],u=this.edges.length,h=0;h<u;h++)s=this.edges[h],this.isOneAncestorOfOther(s.source,s.target)&&l.push(s);for(var h=0;h<l.length;h++)this.remove(l[h]);return!1},t.exports=a},function(t,e,r){"use strict";var n=r(12);function i(){}o(i,"IGeometry"),i.calcSeparationAmount=function(a,s,l,u){if(!a.intersects(s))throw"assert failed";var h=new Array(2);this.decideDirectionsForOverlappingNodes(a,s,h),l[0]=Math.min(a.getRight(),s.getRight())-Math.max(a.x,s.x),l[1]=Math.min(a.getBottom(),s.getBottom())-Math.max(a.y,s.y),a.getX()<=s.getX()&&a.getRight()>=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]<p?p=l[0]:d=l[1],l[0]=-1*h[0]*(p/2+u),l[1]=-1*h[1]*(d/2+u)},i.decideDirectionsForOverlappingNodes=function(a,s,l){a.getCenterX()<s.getCenterX()?l[0]=-1:l[0]=1,a.getCenterY()<s.getCenterY()?l[1]=-1:l[1]=1},i.getIntersection2=function(a,s,l){var u=a.getCenterX(),h=a.getCenterY(),f=s.getCenterX(),d=s.getCenterY();if(a.intersects(s))return l[0]=u,l[1]=h,l[2]=f,l[3]=d,!0;var p=a.getX(),m=a.getY(),g=a.getRight(),y=a.getX(),v=a.getBottom(),x=a.getRight(),b=a.getWidthHalf(),w=a.getHeightHalf(),C=s.getX(),T=s.getY(),E=s.getRight(),A=s.getX(),S=s.getBottom(),_=s.getRight(),I=s.getWidthHalf(),D=s.getHeightHalf(),k=!1,L=!1;if(u===f){if(h>d)return l[0]=u,l[1]=m,l[2]=f,l[3]=S,!1;if(h<d)return l[0]=u,l[1]=v,l[2]=f,l[3]=T,!1}else if(h===d){if(u>f)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(u<f)return l[0]=g,l[1]=h,l[2]=C,l[3]=d,!1}else{var R=a.height/a.width,O=s.height/s.width,M=(d-h)/(f-u),B=void 0,F=void 0,P=void 0,z=void 0,$=void 0,H=void 0;if(-R===M?u>f?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):R===M&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-O===M?f>u?(l[2]=A,l[3]=S,L=!0):(l[2]=E,l[3]=T,L=!0):O===M&&(f>u?(l[2]=C,l[3]=T,L=!0):(l[2]=_,l[3]=S,L=!0)),k&&L)return!1;if(u>f?h>d?(B=this.getCardinalDirection(R,M,4),F=this.getCardinalDirection(O,M,2)):(B=this.getCardinalDirection(-R,M,3),F=this.getCardinalDirection(-O,M,1)):h>d?(B=this.getCardinalDirection(-R,M,1),F=this.getCardinalDirection(-O,M,3)):(B=this.getCardinalDirection(R,M,2),F=this.getCardinalDirection(O,M,4)),!k)switch(B){case 1:z=m,P=u+-w/M,l[0]=P,l[1]=z;break;case 2:P=x,z=h+b*M,l[0]=P,l[1]=z;break;case 3:z=v,P=u+w/M,l[0]=P,l[1]=z;break;case 4:P=y,z=h+-b*M,l[0]=P,l[1]=z;break}if(!L)switch(F){case 1:H=T,$=f+-D/M,l[2]=$,l[3]=H;break;case 2:$=_,H=d+I*M,l[2]=$,l[3]=H;break;case 3:H=S,$=f+D/M,l[2]=$,l[3]=H;break;case 4:$=A,H=d+-I*M,l[2]=$,l[3]=H;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,w=void 0,C=void 0,T=void 0,E=void 0,A=void 0,S=void 0,_=void 0;return w=p-f,T=h-d,A=d*f-h*p,C=v-g,E=m-y,S=y*g-m*v,_=w*E-C*T,_===0?null:(x=(T*S-E*A)/_,b=(C*A-w*S)/_,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l<a?h+=Math.PI:u<s&&(h+=this.TWO_PI)):u<s?h=this.ONE_AND_HALF_PI:h=this.HALF_PI,h},i.doIntersect=function(a,s,l,u){var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=(d-h)*(v-g)-(y-m)*(p-f);if(x===0)return!1;var b=((v-g)*(y-h)+(m-y)*(v-f))/x,w=((f-p)*(y-h)+(d-h)*(v-f))/x;return 0<b&&b<1&&0<w&&w<1},i.findCircleLineIntersections=function(a,s,l,u,h,f,d){var p=(l-a)*(l-a)+(u-s)*(u-s),m=2*((a-h)*(l-a)+(s-f)*(u-s)),g=(a-h)*(a-h)+(s-f)*(s-f)-d*d,y=m*m-4*p*g;if(y>=0){var v=(-m+Math.sqrt(m*m-4*p*g))/(2*p),x=(-m-Math.sqrt(m*m-4*p*g))/(2*p),b=null;return v>=0&&v<=1?[v]:x>=0&&x<=1?[x]:b}else return null},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,t.exports=i},function(t,e,r){"use strict";function n(){}o(n,"IMath"),n.sign=function(i){return i>0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p<d.length;p++){var m=d[p];m.enumerable=m.enumerable||!1,m.configurable=!0,"value"in m&&(m.writable=!0),Object.defineProperty(f,m.key,m)}}return o(h,"defineProperties"),function(f,d,p){return d&&h(f.prototype,d),p&&h(f,p),f}}();function i(h,f){if(!(h instanceof f))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=o(function(f){return{value:f,next:null,prev:null}},"nodeFrom"),s=o(function(f,d,p,m){return f!==null?f.next=d:m.head=d,p!==null?p.prev=d:m.tail=d,d.prev=f,d.next=p,m.length++,d},"add"),l=o(function(f,d){var p=f.prev,m=f.next;return p!==null?p.next=m:d.head=m,m!==null?m.prev=p:d.tail=p,f.prev=f.next=null,d.length--,f},"_remove"),u=function(){function h(f){var d=this;i(this,h),this.length=0,this.head=null,this.tail=null,f?.forEach(function(p){return d.push(p)})}return o(h,"LinkedList"),n(h,[{key:"size",value:o(function(){return this.length},"size")},{key:"insertBefore",value:o(function(d,p){return s(p.prev,a(d),p,this)},"insertBefore")},{key:"insertAfter",value:o(function(d,p){return s(p,a(d),p.next,this)},"insertAfter")},{key:"insertNodeBefore",value:o(function(d,p){return s(p.prev,d,p,this)},"insertNodeBefore")},{key:"insertNodeAfter",value:o(function(d,p){return s(p,d,p.next,this)},"insertNodeAfter")},{key:"push",value:o(function(d){return s(this.tail,a(d),null,this)},"push")},{key:"unshift",value:o(function(d){return s(null,a(d),this.head,this)},"unshift")},{key:"remove",value:o(function(d){return l(d,this)},"remove")},{key:"pop",value:o(function(){return l(this.tail,this).value},"pop")},{key:"popNode",value:o(function(){return l(this.tail,this)},"popNode")},{key:"shift",value:o(function(){return l(this.head,this).value},"shift")},{key:"shiftNode",value:o(function(){return l(this.head,this)},"shiftNode")},{key:"get_object_at",value:o(function(d){if(d<=this.length()){for(var p=1,m=this.head;p<d;)m=m.next,p++;return m.value}},"get_object_at")},{key:"set_object_at",value:o(function(d,p){if(d<=this.length()){for(var m=1,g=this.head;m<d;)g=g.next,m++;g.value=p}},"set_object_at")}]),h}();t.exports=u},function(t,e,r){"use strict";function n(i,a,s){this.x=null,this.y=null,i==null&&a==null&&s==null?(this.x=0,this.y=0):typeof i=="number"&&typeof a=="number"&&s==null?(this.x=i,this.y=a):i.constructor.name=="Point"&&a==null&&s==null&&(s=i,this.x=s.x,this.y=s.y)}o(n,"Point"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.getLocation=function(){return new n(this.x,this.y)},n.prototype.setLocation=function(i,a,s){i.constructor.name=="Point"&&a==null&&s==null?(s=i,this.setLocation(s.x,s.y)):typeof i=="number"&&typeof a=="number"&&s==null&&(parseInt(i)==i&&parseInt(a)==a?this.move(i,a):(this.x=Math.floor(i+.5),this.y=Math.floor(a+.5)))},n.prototype.move=function(i,a){this.x=i,this.y=a},n.prototype.translate=function(i,a){this.x+=i,this.y+=a},n.prototype.equals=function(i){if(i.constructor.name=="Point"){var a=i;return this.x==a.x&&this.y==a.y}return this==i},n.prototype.toString=function(){return new n().constructor.name+"[x="+this.x+",y="+this.y+"]"},t.exports=n},function(t,e,r){"use strict";function n(i,a,s,l){this.x=0,this.y=0,this.width=0,this.height=0,i!=null&&a!=null&&s!=null&&l!=null&&(this.x=i,this.y=a,this.width=s,this.height=l)}o(n,"RectangleD"),n.prototype.getX=function(){return this.x},n.prototype.setX=function(i){this.x=i},n.prototype.getY=function(){return this.y},n.prototype.setY=function(i){this.y=i},n.prototype.getWidth=function(){return this.width},n.prototype.setWidth=function(i){this.width=i},n.prototype.getHeight=function(){return this.height},n.prototype.setHeight=function(i){this.height=i},n.prototype.getRight=function(){return this.x+this.width},n.prototype.getBottom=function(){return this.y+this.height},n.prototype.intersects=function(i){return!(this.getRight()<i.x||this.getBottom()<i.y||i.getRight()<this.x||i.getBottom()<this.y)},n.prototype.getCenterX=function(){return this.x+this.width/2},n.prototype.getMinX=function(){return this.getX()},n.prototype.getMaxX=function(){return this.getX()+this.width},n.prototype.getCenterY=function(){return this.y+this.height/2},n.prototype.getMinY=function(){return this.getY()},n.prototype.getMaxY=function(){return this.getY()+this.height},n.prototype.getWidthHalf=function(){return this.width/2},n.prototype.getHeightHalf=function(){return this.height/2},t.exports=n},function(t,e,r){"use strict";var n=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(a){return typeof a}:function(a){return a&&typeof Symbol=="function"&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};function i(){}o(i,"UniqueIDGeneretor"),i.lastID=0,i.createID=function(a){return i.isPrimitive(a)?a:(a.uniqueID!=null||(a.uniqueID=i.getString(),i.lastID++),a.uniqueID)},i.getString=function(a){return a==null&&(a=i.lastID),"Object#"+a},i.isPrimitive=function(a){var s=typeof a>"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g<m.length;g++)y[g]=m[g];return y}else return Array.from(m)}o(n,"_toConsumableArray");var i=r(0),a=r(7),s=r(3),l=r(1),u=r(6),h=r(5),f=r(17),d=r(29);function p(m){d.call(this),this.layoutQuality=i.QUALITY,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.incremental=i.DEFAULT_INCREMENTAL,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES,this.edgeToDummyNodes=new Map,this.graphManager=new a(this),this.isLayoutFinished=!1,this.isSubLayout=!1,this.isRemoteUse=!1,m!=null&&(this.isRemoteUse=m)}o(p,"Layout"),p.RANDOM_SEED=1,p.prototype=Object.create(d.prototype),p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getAllNodes=function(){return this.graphManager.getAllNodes()},p.prototype.getAllEdges=function(){return this.graphManager.getAllEdges()},p.prototype.getAllNodesToApplyGravitation=function(){return this.graphManager.getAllNodesToApplyGravitation()},p.prototype.newGraphManager=function(){var m=new a(this);return this.graphManager=m,m},p.prototype.newGraph=function(m){return new u(null,this.graphManager,m)},p.prototype.newNode=function(m){return new s(this.graphManager,m)},p.prototype.newEdge=function(m){return new l(null,null,m)},p.prototype.checkLayoutSuccess=function(){return this.graphManager.getRoot()==null||this.graphManager.getRoot().getNodes().length==0||this.graphManager.includesInvalidEdge()},p.prototype.runLayout=function(){this.isLayoutFinished=!1,this.tilingPreLayout&&this.tilingPreLayout(),this.initParameters();var m;return this.checkLayoutSuccess()?m=!1:m=this.layout(),i.ANIMATE==="during"?!1:(m&&(this.isSubLayout||this.doPostLayout()),this.tilingPostLayout&&this.tilingPostLayout(),this.isLayoutFinished=!0,m)},p.prototype.doPostLayout=function(){this.incremental||this.transform(),this.update()},p.prototype.update2=function(){if(this.createBendsAsNeeded&&(this.createBendpointsFromDummyNodes(),this.graphManager.resetAllEdges()),!this.isRemoteUse){for(var m,g=this.graphManager.getAllEdges(),y=0;y<g.length;y++)m=g[y];for(var v,x=this.graphManager.getRoot().getNodes(),y=0;y<x.length;y++)v=x[y];this.update(this.graphManager.getRoot())}},p.prototype.update=function(m){if(m==null)this.update2();else if(m instanceof s){var g=m;if(g.getChild()!=null)for(var y=g.getChild().getNodes(),v=0;v<y.length;v++)update(y[v]);if(g.vGraphObject!=null){var x=g.vGraphObject;x.update(g)}}else if(m instanceof l){var b=m;if(b.vGraphObject!=null){var w=b.vGraphObject;w.update(b)}}else if(m instanceof u){var C=m;if(C.vGraphObject!=null){var T=C.vGraphObject;T.update(C)}}},p.prototype.initParameters=function(){this.isSubLayout||(this.layoutQuality=i.QUALITY,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.incremental=i.DEFAULT_INCREMENTAL,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES),this.animationDuringLayout&&(this.animationOnLayout=!1)},p.prototype.transform=function(m){if(m==null)this.transform(new h(0,0));else{var g=new f,y=this.graphManager.getRoot().updateLeftTop();if(y!=null){g.setWorldOrgX(m.x),g.setWorldOrgY(m.y),g.setDeviceOrgX(y.x),g.setDeviceOrgY(y.y);for(var v=this.getAllNodes(),x,b=0;b<v.length;b++)x=v[b],x.transform(g)}}},p.prototype.positionNodesRandomly=function(m){if(m==null)this.positionNodesRandomly(this.getGraphManager().getRoot()),this.getGraphManager().getRoot().updateBounds(!0);else for(var g,y,v=m.getNodes(),x=0;x<v.length;x++)g=v[x],y=g.getChild(),y==null||y.getNodes().length==0?g.scatter():(this.positionNodesRandomly(y),g.updateBounds())},p.prototype.getFlatForest=function(){for(var m=[],g=!0,y=this.graphManager.getRoot().getNodes(),v=!0,x=0;x<y.length;x++)y[x].getChild()!=null&&(v=!1);if(!v)return m;var b=new Set,w=[],C=new Map,T=[];for(T=T.concat(y);T.length>0&&g;){for(w.push(T[0]);w.length>0&&g;){var E=w[0];w.splice(0,1),b.add(E);for(var A=E.getEdges(),x=0;x<A.length;x++){var S=A[x].getOtherEnd(E);if(C.get(E)!=S)if(!b.has(S))w.push(S),C.set(S,E);else{g=!1;break}}}if(!g)m=[];else{var _=[].concat(n(b));m.push(_);for(var x=0;x<_.length;x++){var I=_[x],D=T.indexOf(I);D>-1&&T.splice(D,1)}b=new Set,C=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x<m.bendpoints.length;x++){var b=this.newNode(null);b.setRect(new Point(0,0),new Dimension(1,1)),v.add(b);var w=this.newEdge(null);this.graphManager.add(w,y,b),g.add(b),y=b}var w=this.newEdge(null);return this.graphManager.add(w,y,m.target),this.edgeToDummyNodes.set(m,g),m.isInterGraph()?this.graphManager.remove(m):v.remove(m),g},p.prototype.createBendpointsFromDummyNodes=function(){var m=[];m=m.concat(this.graphManager.getAllEdges()),m=[].concat(n(this.edgeToDummyNodes.keys())).concat(m);for(var g=0;g<m.length;g++){var y=m[g];if(y.bendpoints.length>0){for(var v=this.edgeToDummyNodes.get(y),x=0;x<v.length;x++){var b=v[x],w=new h(b.getCenterX(),b.getCenterY()),C=y.bendpoints.get(x);C.x=w.x,C.y=w.y,b.getOwner().remove(b)}this.graphManager.add(y,y.source,y.target)}}},p.transform=function(m,g,y,v){if(y!=null&&v!=null){var x=g;if(m<=50){var b=g/y;x-=(g-b)/50*(50-m)}else{var w=g*v;x+=(w-g)/50*(m-50)}return x}else{var C,T;return m<=50?(C=9*g/500,T=g/10):(C=9*g/50,T=-8*g),C*m+T}},p.findCenterOfTree=function(m){var g=[];g=g.concat(m);var y=[],v=new Map,x=!1,b=null;(g.length==1||g.length==2)&&(x=!0,b=g[0]);for(var w=0;w<g.length;w++){var C=g[w],T=C.getNeighborsList().size;v.set(C,C.getNeighborsList().size),T==1&&y.push(C)}var E=[];for(E=E.concat(y);!x;){var A=[];A=A.concat(E),E=[];for(var w=0;w<g.length;w++){var C=g[w],S=g.indexOf(C);S>=0&&g.splice(S,1);var _=C.getNeighborsList();_.forEach(function(k){if(y.indexOf(k)<0){var L=v.get(k),R=L-1;R==1&&E.push(k),v.set(k,R)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(5);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);p<d.length;p++)m[p]=d[p];return m}else return Array.from(d)}o(n,"_toConsumableArray");var i=r(15),a=r(4),s=r(0),l=r(8),u=r(9);function h(){i.call(this),this.useSmartIdealEdgeLengthCalculation=a.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=a.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=a.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.coolingFactor=a.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.initialCoolingFactor=a.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.totalDisplacement=0,this.oldTotalDisplacement=0,this.maxIterations=a.MAX_ITERATIONS}o(h,"FDLayout"),h.prototype=Object.create(i.prototype);for(var f in i)h[f]=i[f];h.prototype.initParameters=function(){i.prototype.initParameters.call(this,arguments),this.totalIterations=0,this.notAnimatedIterations=0,this.useFRGridVariant=a.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION,this.grid=[]},h.prototype.calcIdealEdgeLengths=function(){for(var d,p,m,g,y,v,x,b=this.getGraphManager().getAllEdges(),w=0;w<b.length;w++)d=b[w],p=d.idealLength,d.isInterGraph&&(g=d.getSource(),y=d.getTarget(),v=d.getSourceInLca().getEstimatedSize(),x=d.getTargetInLca().getEstimatedSize(),this.useSmartIdealEdgeLengthCalculation&&(d.idealLength+=v+x-2*s.SIMPLE_NODE_SIZE),m=d.getLca().getInclusionTreeDepth(),d.idealLength+=p*a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR*(g.getInclusionTreeDepth()+y.getInclusionTreeDepth()-2*m))},h.prototype.initSpringEmbedder=function(){var d=this.getAllNodes().length;this.incremental?(d>a.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m<d.length;m++)p=d[m],this.calcSpringForce(p,p.idealLength)},h.prototype.calcRepulsionForces=function(){var d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;m<x.length;m++)y=x[m],this.calculateRepulsionForceOfANode(y,b,d,p),b.add(y);else for(m=0;m<x.length;m++)for(y=x[m],g=m+1;g<x.length;g++)v=x[g],y.getOwner()==v.getOwner()&&this.calcRepulsionForce(y,v)},h.prototype.calcGravitationalForces=function(){for(var d,p=this.getAllNodesToApplyGravitation(),m=0;m<p.length;m++)d=p[m],this.calcGravitationalForce(d)},h.prototype.moveNodes=function(){for(var d=this.getAllNodes(),p,m=0;m<d.length;m++)p=d[m],p.move()},h.prototype.calcSpringForce=function(d,p){var m=d.getSource(),g=d.getTarget(),y,v,x,b;if(this.uniformLeafNodeSizes&&m.getChild()==null&&g.getChild()==null)d.updateLengthSimple();else if(d.updateLength(),d.isOverlapingSourceAndTarget)return;y=d.getLength(),y!=0&&(v=d.edgeElasticity*(y-p),x=v*(d.lengthX/y),b=v*(d.lengthY/y),m.springForceX+=x,m.springForceY+=b,g.springForceX-=x,g.springForceY-=b)},h.prototype.calcRepulsionForce=function(d,p){var m=d.getRect(),g=p.getRect(),y=new Array(2),v=new Array(4),x,b,w,C,T,E,A;if(m.intersects(g)){l.calcSeparationAmount(m,g,y,a.DEFAULT_EDGE_LENGTH/2),E=2*y[0],A=2*y[1];var S=d.noOfChildren*p.noOfChildren/(d.noOfChildren+p.noOfChildren);d.repulsionForceX-=S*E,d.repulsionForceY-=S*A,p.repulsionForceX+=S*E,p.repulsionForceY+=S*A}else this.uniformLeafNodeSizes&&d.getChild()==null&&p.getChild()==null?(x=g.getCenterX()-m.getCenterX(),b=g.getCenterY()-m.getCenterY()):(l.getIntersection(m,g,v),x=v[2]-v[0],b=v[3]-v[1]),Math.abs(x)<a.MIN_REPULSION_DIST&&(x=u.sign(x)*a.MIN_REPULSION_DIST),Math.abs(b)<a.MIN_REPULSION_DIST&&(b=u.sign(b)*a.MIN_REPULSION_DIST),w=x*x+b*b,C=Math.sqrt(w),T=(d.nodeRepulsion/2+p.nodeRepulsion/2)*d.noOfChildren*p.noOfChildren/w,E=T*x/C,A=T*b/C,d.repulsionForceX-=E,d.repulsionForceY-=A,p.repulsionForceX+=E,p.repulsionForceY+=A},h.prototype.calcGravitationalForce=function(d){var p,m,g,y,v,x,b,w;p=d.getOwner(),m=(p.getRight()+p.getLeft())/2,g=(p.getTop()+p.getBottom())/2,y=d.getCenterX()-m,v=d.getCenterY()-g,x=Math.abs(y)+d.getWidth()/2,b=Math.abs(v)+d.getHeight()/2,d.getOwner()==this.graphManager.getRoot()?(w=p.getEstimatedSize()*this.gravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(w=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement<this.totalDisplacementThreshold,this.oldTotalDisplacement=this.totalDisplacement,d||p},h.prototype.animate=function(){this.animationDuringLayout&&!this.isSubLayout&&(this.notAnimatedIterations==this.animationPeriod?(this.update(),this.notAnimatedIterations=0):this.notAnimatedIterations++)},h.prototype.calcNoOfChildrenForAllNodes=function(){for(var d,p=this.graphManager.getAllNodes(),m=0;m<p.length;m++)d=p[m],d.noOfChildren=d.getNoOfChildren()},h.prototype.calcGrid=function(d){var p=0,m=0;p=parseInt(Math.ceil((d.getRight()-d.getLeft())/this.repulsionRange)),m=parseInt(Math.ceil((d.getBottom()-d.getTop())/this.repulsionRange));for(var g=new Array(p),y=0;y<p;y++)g[y]=new Array(m);for(var y=0;y<p;y++)for(var v=0;v<m;v++)g[y][v]=new Array;return g},h.prototype.addNodeToGrid=function(d,p,m){var g=0,y=0,v=0,x=0;g=parseInt(Math.floor((d.getRect().x-p)/this.repulsionRange)),y=parseInt(Math.floor((d.getRect().width+d.getRect().x-p)/this.repulsionRange)),v=parseInt(Math.floor((d.getRect().y-m)/this.repulsionRange)),x=parseInt(Math.floor((d.getRect().height+d.getRect().y-m)/this.repulsionRange));for(var b=g;b<=y;b++)for(var w=v;w<=x;w++)this.grid[b][w].push(d),d.setGridCoordinates(g,y,v,x)},h.prototype.updateGrid=function(){var d,p,m=this.getAllNodes();for(this.grid=this.calcGrid(this.graphManager.getRoot()),d=0;d<m.length;d++)p=m[d],this.addNodeToGrid(p,this.graphManager.getRoot().getLeft(),this.graphManager.getRoot().getTop())},h.prototype.calculateRepulsionForceOfANode=function(d,p,m,g){if(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&m||g){var y=new Set;d.surrounding=new Array;for(var v,x=this.grid,b=d.startX-1;b<d.finishX+2;b++)for(var w=d.startY-1;w<d.finishY+2;w++)if(!(b<0||w<0||b>=x.length||w>=x[0].length)){for(var C=0;C<x[b][w].length;C++)if(v=x[b][w][C],!(d.getOwner()!=v.getOwner()||d==v)&&!p.has(v)&&!y.has(v)){var T=Math.abs(d.getCenterX()-v.getCenterX())-(d.getWidth()/2+v.getWidth()/2),E=Math.abs(d.getCenterY()-v.getCenterY())-(d.getHeight()/2+v.getHeight()/2);T<=this.repulsionRange&&E<=this.repulsionRange&&y.add(v)}}d.surrounding=[].concat(n(y))}for(b=0;b<d.surrounding.length;b++)this.calcRepulsionForce(d,d.surrounding[b])},h.prototype.calcRepulsionRange=function(){return 0},t.exports=h},function(t,e,r){"use strict";var n=r(1),i=r(4);function a(l,u,h){n.call(this,l,u,h),this.idealLength=i.DEFAULT_EDGE_LENGTH,this.edgeElasticity=i.DEFAULT_SPRING_STRENGTH}o(a,"FDLayoutEdge"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];t.exports=a},function(t,e,r){"use strict";var n=r(3),i=r(4);function a(l,u,h,f){n.call(this,l,u,h,f),this.nodeRepulsion=i.DEFAULT_REPULSION_STRENGTH,this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0,this.startX=0,this.finishX=0,this.startY=0,this.finishY=0,this.surrounding=[]}o(a,"FDLayoutNode"),a.prototype=Object.create(n.prototype);for(var s in n)a[s]=n[s];a.prototype.setGridCoordinates=function(l,u,h,f){this.startX=l,this.finishX=u,this.startY=h,this.finishY=f},t.exports=a},function(t,e,r){"use strict";function n(i,a){this.width=0,this.height=0,i!==null&&a!==null&&(this.height=a,this.width=i)}o(n,"DimensionD"),n.prototype.getWidth=function(){return this.width},n.prototype.setWidth=function(i){this.width=i},n.prototype.getHeight=function(){return this.height},n.prototype.setHeight=function(i){this.height=i},t.exports=n},function(t,e,r){"use strict";var n=r(14);function i(){this.map={},this.keys=[]}o(i,"HashMap"),i.prototype.put=function(a,s){var l=n.createID(a);this.contains(l)||(this.map[l]=s,this.keys.push(a))},i.prototype.contains=function(a){var s=n.createID(a);return this.map[a]!=null},i.prototype.get=function(a){var s=n.createID(a);return this.map[s]},i.prototype.keySet=function(){return this.keys},t.exports=i},function(t,e,r){"use strict";var n=r(14);function i(){this.set={}}o(i,"HashSet"),i.prototype.add=function(a){var s=n.createID(a);this.contains(s)||(this.set[s]=a)},i.prototype.remove=function(a){delete this.set[n.createID(a)]},i.prototype.clear=function(){this.set={}},i.prototype.contains=function(a){return this.set[n.createID(a)]==a},i.prototype.isEmpty=function(){return this.size()===0},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAllTo=function(a){for(var s=Object.keys(this.set),l=s.length,u=0;u<l;u++)a.push(this.set[s[u]])},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAll=function(a){for(var s=a.length,l=0;l<s;l++){var u=a[l];this.add(u)}},t.exports=i},function(t,e,r){"use strict";function n(){}o(n,"Matrix"),n.multMat=function(i,a){for(var s=[],l=0;l<i.length;l++){s[l]=[];for(var u=0;u<a[0].length;u++){s[l][u]=0;for(var h=0;h<i[0].length;h++)s[l][u]+=i[l][h]*a[h][u]}}return s},n.transpose=function(i){for(var a=[],s=0;s<i[0].length;s++){a[s]=[];for(var l=0;l<i.length;l++)a[s][l]=i[l][s]}return a},n.multCons=function(i,a){for(var s=[],l=0;l<i.length;l++)s[l]=i[l]*a;return s},n.minusOp=function(i,a){for(var s=[],l=0;l<i.length;l++)s[l]=i[l]-a[l];return s},n.dotProduct=function(i,a){for(var s=0,l=0;l<i.length;l++)s+=i[l]*a[l];return s},n.mag=function(i){return Math.sqrt(this.dotProduct(i,i))},n.normalize=function(i){for(var a=[],s=this.mag(i),l=0;l<i.length;l++)a[l]=i[l]/s;return a},n.multGamma=function(i){for(var a=[],s=0,l=0;l<i.length;l++)s+=i[l];s*=-1/i.length;for(var u=0;u<i.length;u++)a[u]=s+i[u];return a},n.multL=function(i,a,s){for(var l=[],u=[],h=[],f=0;f<a[0].length;f++){for(var d=0,p=0;p<a.length;p++)d+=-.5*a[p][f]*i[p];u[f]=d}for(var m=0;m<s.length;m++){for(var g=0,y=0;y<s.length;y++)g+=s[m][y]*u[y];h[m]=g}for(var v=0;v<a.length;v++){for(var x=0,b=0;b<a[0].length;b++)x+=a[v][b]*h[b];l[v]=x}return l},t.exports=n},function(t,e,r){"use strict";var n=function(){function l(u,h){for(var f=0;f<h.length;f++){var d=h[f];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(u,d.key,d)}}return o(l,"defineProperties"),function(u,h,f){return h&&l(u.prototype,h),f&&l(u,f),u}}();function i(l,u){if(!(l instanceof u))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=r(11),s=function(){function l(u,h){i(this,l),(h!==null||h!==void 0)&&(this.compareFunction=this._defaultCompareFunction);var f=void 0;u instanceof a?f=u.size():f=u.length,this._quicksort(u,0,f-1)}return o(l,"Quicksort"),n(l,[{key:"_quicksort",value:o(function(h,f,d){if(f<d){var p=this._partition(h,f,d);this._quicksort(h,f,p),this._quicksort(h,p+1,d)}},"_quicksort")},{key:"_partition",value:o(function(h,f,d){for(var p=this._get(h,f),m=f,g=d;;){for(;this.compareFunction(p,this._get(h,g));)g--;for(;this.compareFunction(this._get(h,m),p);)m++;if(m<g)this._swap(h,m,g),m++,g--;else return g}},"_partition")},{key:"_get",value:o(function(h,f){return h instanceof a?h.get_object_at(f):h[f]},"_get")},{key:"_set",value:o(function(h,f,d){h instanceof a?h.set_object_at(f,d):h[f]=d},"_set")},{key:"_swap",value:o(function(h,f,d){var p=this._get(h,f);this._set(h,f,this._get(h,d)),this._set(h,d,p)},"_swap")},{key:"_defaultCompareFunction",value:o(function(h,f){return f>h},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";function n(){}o(n,"SVD"),n.svd=function(i){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=i.length,this.n=i[0].length;var a=Math.min(this.m,this.n);this.s=function(xt){for(var ut=[];xt-- >0;)ut.push(0);return ut}(Math.min(this.m+1,this.n)),this.U=function(xt){var ut=o(function Et(ft){if(ft.length==0)return 0;for(var yt=[],nt=0;nt<ft[0];nt++)yt.push(Et(ft.slice(1)));return yt},"allocate");return ut(xt)}([this.m,a]),this.V=function(xt){var ut=o(function Et(ft){if(ft.length==0)return 0;for(var yt=[],nt=0;nt<ft[0];nt++)yt.push(Et(ft.slice(1)));return yt},"allocate");return ut(xt)}([this.n,this.n]);for(var s=function(xt){for(var ut=[];xt-- >0;)ut.push(0);return ut}(this.n),l=function(xt){for(var ut=[];xt-- >0;)ut.push(0);return ut}(this.m),u=!0,h=!0,f=Math.min(this.m-1,this.n),d=Math.max(0,Math.min(this.n-2,this.m)),p=0;p<Math.max(f,d);p++){if(p<f){this.s[p]=0;for(var m=p;m<this.m;m++)this.s[p]=n.hypot(this.s[p],i[m][p]);if(this.s[p]!==0){i[p][p]<0&&(this.s[p]=-this.s[p]);for(var g=p;g<this.m;g++)i[g][p]/=this.s[p];i[p][p]+=1}this.s[p]=-this.s[p]}for(var y=p+1;y<this.n;y++){if(function(xt,ut){return xt&&ut}(p<f,this.s[p]!==0)){for(var v=0,x=p;x<this.m;x++)v+=i[x][p]*i[x][y];v=-v/i[p][p];for(var b=p;b<this.m;b++)i[b][y]+=v*i[b][p]}s[y]=i[p][y]}if(function(xt,ut){return xt&&ut}(u,p<f))for(var w=p;w<this.m;w++)this.U[w][p]=i[w][p];if(p<d){s[p]=0;for(var C=p+1;C<this.n;C++)s[p]=n.hypot(s[p],s[C]);if(s[p]!==0){s[p+1]<0&&(s[p]=-s[p]);for(var T=p+1;T<this.n;T++)s[T]/=s[p];s[p+1]+=1}if(s[p]=-s[p],function(xt,ut){return xt&&ut}(p+1<this.m,s[p]!==0)){for(var E=p+1;E<this.m;E++)l[E]=0;for(var A=p+1;A<this.n;A++)for(var S=p+1;S<this.m;S++)l[S]+=s[A]*i[S][A];for(var _=p+1;_<this.n;_++)for(var I=-s[_]/s[p+1],D=p+1;D<this.m;D++)i[D][_]+=I*l[D]}if(h)for(var k=p+1;k<this.n;k++)this.V[k][p]=s[k]}}var L=Math.min(this.n,this.m+1);if(f<this.n&&(this.s[f]=i[f][f]),this.m<L&&(this.s[L-1]=0),d+1<L&&(s[d]=i[d][L-1]),s[L-1]=0,u){for(var R=f;R<a;R++){for(var O=0;O<this.m;O++)this.U[O][R]=0;this.U[R][R]=1}for(var M=f-1;M>=0;M--)if(this.s[M]!==0){for(var B=M+1;B<a;B++){for(var F=0,P=M;P<this.m;P++)F+=this.U[P][M]*this.U[P][B];F=-F/this.U[M][M];for(var z=M;z<this.m;z++)this.U[z][B]+=F*this.U[z][M]}for(var $=M;$<this.m;$++)this.U[$][M]=-this.U[$][M];this.U[M][M]=1+this.U[M][M];for(var H=0;H<M-1;H++)this.U[H][M]=0}else{for(var Q=0;Q<this.m;Q++)this.U[Q][M]=0;this.U[M][M]=1}}if(h)for(var j=this.n-1;j>=0;j--){if(function(xt,ut){return xt&&ut}(j<d,s[j]!==0))for(var ie=j+1;ie<a;ie++){for(var ne=0,le=j+1;le<this.n;le++)ne+=this.V[le][j]*this.V[le][ie];ne=-ne/this.V[j+1][j];for(var he=j+1;he<this.n;he++)this.V[he][ie]+=ne*this.V[he][j]}for(var K=0;K<this.n;K++)this.V[K][j]=0;this.V[j][j]=1}for(var X=L-1,te=0,J=Math.pow(2,-52),se=Math.pow(2,-966);L>0;){var ue=void 0,Z=void 0;for(ue=L-2;ue>=-1&&ue!==-1;ue--)if(Math.abs(s[ue])<=se+J*(Math.abs(this.s[ue])+Math.abs(this.s[ue+1]))){s[ue]=0;break}if(ue===L-2)Z=4;else{var Se=void 0;for(Se=L-1;Se>=ue&&Se!==ue;Se--){var ce=(Se!==L?Math.abs(s[Se]):0)+(Se!==ue+1?Math.abs(s[Se-1]):0);if(Math.abs(this.s[Se])<=se+J*ce){this.s[Se]=0;break}}Se===ue?Z=3:Se===L-1?Z=1:(Z=2,ue=Se)}switch(ue++,Z){case 1:{var ae=s[L-2];s[L-2]=0;for(var Oe=L-2;Oe>=ue;Oe--){var ge=n.hypot(this.s[Oe],ae),ze=this.s[Oe]/ge,He=ae/ge;if(this.s[Oe]=ge,Oe!==ue&&(ae=-He*s[Oe-1],s[Oe-1]=ze*s[Oe-1]),h)for(var $e=0;$e<this.n;$e++)ge=ze*this.V[$e][Oe]+He*this.V[$e][L-1],this.V[$e][L-1]=-He*this.V[$e][Oe]+ze*this.V[$e][L-1],this.V[$e][Oe]=ge}}break;case 2:{var Re=s[ue-1];s[ue-1]=0;for(var Ie=ue;Ie<L;Ie++){var be=n.hypot(this.s[Ie],Re),W=this.s[Ie]/be,de=Re/be;if(this.s[Ie]=be,Re=-de*s[Ie],s[Ie]=W*s[Ie],u)for(var re=0;re<this.m;re++)be=W*this.U[re][Ie]+de*this.U[re][ue-1],this.U[re][ue-1]=-de*this.U[re][Ie]+W*this.U[re][ue-1],this.U[re][Ie]=be}}break;case 3:{var oe=Math.max(Math.max(Math.max(Math.max(Math.abs(this.s[L-1]),Math.abs(this.s[L-2])),Math.abs(s[L-2])),Math.abs(this.s[ue])),Math.abs(s[ue])),V=this.s[L-1]/oe,xe=this.s[L-2]/oe,q=s[L-2]/oe,pe=this.s[ue]/oe,ve=s[ue]/oe,Pe=((xe+V)*(xe-V)+q*q)/2,_e=V*q*(V*q),we=0;(function(xt,ut){return xt||ut})(Pe!==0,_e!==0)&&(we=Math.sqrt(Pe*Pe+_e),Pe<0&&(we=-we),we=_e/(Pe+we));for(var Ve=(pe+V)*(pe-V)+we,De=pe*ve,qe=ue;qe<L-1;qe++){var at=n.hypot(Ve,De),Rt=Ve/at,st=De/at;if(qe!==ue&&(s[qe-1]=at),Ve=Rt*this.s[qe]+st*s[qe],s[qe]=Rt*s[qe]-st*this.s[qe],De=st*this.s[qe+1],this.s[qe+1]=Rt*this.s[qe+1],h)for(var Ue=0;Ue<this.n;Ue++)at=Rt*this.V[Ue][qe]+st*this.V[Ue][qe+1],this.V[Ue][qe+1]=-st*this.V[Ue][qe]+Rt*this.V[Ue][qe+1],this.V[Ue][qe]=at;if(at=n.hypot(Ve,De),Rt=Ve/at,st=De/at,this.s[qe]=at,Ve=Rt*s[qe]+st*this.s[qe+1],this.s[qe+1]=-st*s[qe]+Rt*this.s[qe+1],De=st*s[qe+1],s[qe+1]=Rt*s[qe+1],u&&qe<this.m-1)for(var ct=0;ct<this.m;ct++)at=Rt*this.U[ct][qe]+st*this.U[ct][qe+1],this.U[ct][qe+1]=-st*this.U[ct][qe]+Rt*this.U[ct][qe+1],this.U[ct][qe]=at}s[L-2]=Ve,te=te+1}break;case 4:{if(this.s[ue]<=0&&(this.s[ue]=this.s[ue]<0?-this.s[ue]:0,h))for(var We=0;We<=X;We++)this.V[We][ue]=-this.V[We][ue];for(;ue<X&&!(this.s[ue]>=this.s[ue+1]);){var ot=this.s[ue];if(this.s[ue]=this.s[ue+1],this.s[ue+1]=ot,h&&ue<this.n-1)for(var Yt=0;Yt<this.n;Yt++)ot=this.V[Yt][ue+1],this.V[Yt][ue+1]=this.V[Yt][ue],this.V[Yt][ue]=ot;if(u&&ue<this.m-1)for(var bt=0;bt<this.m;bt++)ot=this.U[bt][ue+1],this.U[bt][ue+1]=this.U[bt][ue],this.U[bt][ue]=ot;ue++}te=0,L--}break}}var Mt={U:this.U,V:this.V,S:this.s};return Mt},n.hypot=function(i,a){var s=void 0;return Math.abs(i)>Math.abs(a)?(s=a/i,s=Math.abs(i)*Math.sqrt(1+s*s)):a!=0?(s=i/a,s=Math.abs(a)*Math.sqrt(1+s*s)):s=0,s},t.exports=n},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h<u.length;h++){var f=u[h];f.enumerable=f.enumerable||!1,f.configurable=!0,"value"in f&&(f.writable=!0),Object.defineProperty(l,f.key,f)}}return o(s,"defineProperties"),function(l,u,h){return u&&s(l.prototype,u),h&&s(l,h),l}}();function i(s,l){if(!(s instanceof l))throw new TypeError("Cannot call a class as a function")}o(i,"_classCallCheck");var a=function(){function s(l,u){var h=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p<this.iMax;p++){this.grid[p]=new Array(this.jMax);for(var m=0;m<this.jMax;m++)this.grid[p][m]=0}this.tracebackGrid=new Array(this.iMax);for(var g=0;g<this.iMax;g++){this.tracebackGrid[g]=new Array(this.jMax);for(var y=0;y<this.jMax;y++)this.tracebackGrid[g][y]=[null,null,null]}this.alignments=[],this.score=-1,this.computeGrids()}return o(s,"NeedlemanWunsch"),n(s,[{key:"getScore",value:o(function(){return this.score},"getScore")},{key:"getAlignments",value:o(function(){return this.alignments},"getAlignments")},{key:"computeGrids",value:o(function(){for(var u=1;u<this.jMax;u++)this.grid[0][u]=this.grid[0][u-1]+this.gap_penalty,this.tracebackGrid[0][u]=[!1,!1,!0];for(var h=1;h<this.iMax;h++)this.grid[h][0]=this.grid[h-1][0]+this.gap_penalty,this.tracebackGrid[h][0]=[!1,!0,!1];for(var f=1;f<this.iMax;f++)for(var d=1;d<this.jMax;d++){var p=void 0;this.sequence1[f-1]===this.sequence2[d-1]?p=this.grid[f-1][d-1]+this.match_score:p=this.grid[f-1][d-1]+this.mismatch_penalty;var m=this.grid[f-1][d]+this.gap_penalty,g=this.grid[f][d-1]+this.gap_penalty,y=[p,m,g],v=this.arrayAllMaxIndexes(y);this.grid[f][d]=y[v[0]],this.tracebackGrid[f][d]=[v.includes(0),v.includes(1),v.includes(2)]}this.score=this.grid[this.iMax-1][this.jMax-1]},"computeGrids")},{key:"alignmentTraceback",value:o(function(){var u=[];for(u.push({pos:[this.sequence1.length,this.sequence2.length],seq1:"",seq2:""});u[0];){var h=u[0],f=this.tracebackGrid[h.pos[0]][h.pos[1]];f[0]&&u.push({pos:[h.pos[0]-1,h.pos[1]-1],seq1:this.sequence1[h.pos[0]-1]+h.seq1,seq2:this.sequence2[h.pos[1]-1]+h.seq2}),f[1]&&u.push({pos:[h.pos[0]-1,h.pos[1]],seq1:this.sequence1[h.pos[0]-1]+h.seq1,seq2:"-"+h.seq2}),f[2]&&u.push({pos:[h.pos[0],h.pos[1]-1],seq1:"-"+h.seq1,seq2:this.sequence2[h.pos[1]-1]+h.seq2}),h.pos[0]===0&&h.pos[1]===0&&this.alignments.push({sequence1:h.seq1,sequence2:h.seq2}),u.shift()}return this.alignments},"alignmentTraceback")},{key:"getAllIndexes",value:o(function(u,h){for(var f=[],d=-1;(d=u.indexOf(h,d+1))!==-1;)f.push(d);return f},"getAllIndexes")},{key:"arrayAllMaxIndexes",value:o(function(u){return this.getAllIndexes(u,Math.max.apply(null,u))},"arrayAllMaxIndexes")}]),s}();t.exports=a},function(t,e,r){"use strict";var n=o(function(){},"layoutBase");n.FDLayout=r(18),n.FDLayoutConstants=r(4),n.FDLayoutEdge=r(19),n.FDLayoutNode=r(20),n.DimensionD=r(21),n.HashMap=r(22),n.HashSet=r(23),n.IGeometry=r(8),n.IMath=r(9),n.Integer=r(10),n.Point=r(12),n.PointD=r(5),n.RandomSeed=r(16),n.RectangleD=r(13),n.Transform=r(17),n.UniqueIDGeneretor=r(14),n.Quicksort=r(25),n.LinkedList=r(11),n.LGraphObject=r(2),n.LGraph=r(6),n.LEdge=r(1),n.LGraphManager=r(7),n.LNode=r(3),n.Layout=r(15),n.LayoutConstants=r(0),n.NeedlemanWunsch=r(27),n.Matrix=r(24),n.SVD=r(26),t.exports=n},function(t,e,r){"use strict";function n(){this.listeners=[]}o(n,"Emitter");var i=n.prototype;i.addListener=function(a,s){this.listeners.push({event:a,callback:s})},i.removeListener=function(a,s){for(var l=this.listeners.length;l>=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l<this.listeners.length;l++){var u=this.listeners[l];a===u.event&&u.callback(s)}},t.exports=n}])})});var mF=Mi((k4,pF)=>{"use strict";o(function(e,r){typeof k4=="object"&&typeof pF=="object"?pF.exports=r(dF()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof k4=="object"?k4.coseBase=r(dF()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(k4,function(t){return(()=>{"use strict";var e={45:(a,s,l)=>{var u={};u.layoutBase=l(551),u.CoSEConstants=l(806),u.CoSEEdge=l(767),u.CoSEGraph=l(880),u.CoSEGraphManager=l(578),u.CoSELayout=l(765),u.CoSENode=l(991),u.ConstraintHandler=l(902),a.exports=u},806:(a,s,l)=>{var u=l(551).FDLayoutConstants;function h(){}o(h,"CoSEConstants");for(var f in u)h[f]=u[f];h.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,h.DEFAULT_RADIAL_SEPARATION=u.DEFAULT_EDGE_LENGTH,h.DEFAULT_COMPONENT_SEPERATION=60,h.TILE=!0,h.TILING_PADDING_VERTICAL=10,h.TILING_PADDING_HORIZONTAL=10,h.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,h.ENFORCE_CONSTRAINTS=!0,h.APPLY_LAYOUT=!0,h.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,h.TREE_REDUCTION_ON_INCREMENTAL=!0,h.PURE_INCREMENTAL=h.DEFAULT_INCREMENTAL,a.exports=h},767:(a,s,l)=>{var u=l(551).FDLayoutEdge;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEEdge"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},880:(a,s,l)=>{var u=l(551).LGraph;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEGraph"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},578:(a,s,l)=>{var u=l(551).LGraphManager;function h(d){u.call(this,d)}o(h,"CoSEGraphManager"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},765:(a,s,l)=>{var u=l(551).FDLayout,h=l(578),f=l(880),d=l(991),p=l(767),m=l(806),g=l(902),y=l(551).FDLayoutConstants,v=l(551).LayoutConstants,x=l(551).Point,b=l(551).PointD,w=l(551).DimensionD,C=l(551).Layout,T=l(551).Integer,E=l(551).IGeometry,A=l(551).LGraph,S=l(551).Transform,_=l(551).LinkedList;function I(){u.call(this),this.toBeTiled={},this.constraints={}}o(I,"CoSELayout"),I.prototype=Object.create(u.prototype);for(var D in u)I[D]=u[D];I.prototype.newGraphManager=function(){var k=new h(this);return this.graphManager=k,k},I.prototype.newGraph=function(k){return new f(null,this.graphManager,k)},I.prototype.newNode=function(k){return new d(this.graphManager,k)},I.prototype.newEdge=function(k){return new p(null,null,k)},I.prototype.initParameters=function(){u.prototype.initParameters.call(this,arguments),this.isSubLayout||(m.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=m.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=m.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=y.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=y.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=y.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},I.prototype.initSpringEmbedder=function(){u.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/y.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},I.prototype.layout=function(){var k=v.DEFAULT_CREATE_BENDS_AS_NEEDED;return k&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},I.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(m.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var L=new Set(this.getAllNodes()),R=this.nodesWithGravity.filter(function(B){return L.has(B)});this.graphManager.setAllNodesToApplyGravitation(R)}}else{var k=this.getFlatForest();if(k.length>0)this.positionNodesRadially(k);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var L=new Set(this.getAllNodes()),R=this.nodesWithGravity.filter(function(O){return L.has(O)});this.graphManager.setAllNodesToApplyGravitation(R),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(g.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),m.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},I.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%y.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var k=new Set(this.getAllNodes()),L=this.nodesWithGravity.filter(function(M){return k.has(M)});this.graphManager.setAllNodesToApplyGravitation(L),this.graphManager.updateBounds(),this.updateGrid(),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var R=!this.isTreeGrowing&&!this.isGrowthFinished,O=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(R,O),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},I.prototype.getPositionsData=function(){for(var k=this.graphManager.getAllNodes(),L={},R=0;R<k.length;R++){var O=k[R].rect,M=k[R].id;L[M]={id:M,x:O.getCenterX(),y:O.getCenterY(),w:O.width,h:O.height}}return L},I.prototype.runSpringEmbedder=function(){this.initialAnimationPeriod=25,this.animationPeriod=this.initialAnimationPeriod;var k=!1;if(y.ANIMATE==="during")this.emit("layoutstarted");else{for(;!k;)k=this.tick();this.graphManager.updateBounds()}},I.prototype.moveNodes=function(){for(var k=this.getAllNodes(),L,R=0;R<k.length;R++)L=k[R],L.calculateDisplacement();Object.keys(this.constraints).length>0&&this.updateDisplacements();for(var R=0;R<k.length;R++)L=k[R],L.move()},I.prototype.initConstraintVariables=function(){var k=this;this.idToNodeMap=new Map,this.fixedNodeSet=new Set;for(var L=this.graphManager.getAllNodes(),R=0;R<L.length;R++){var O=L[R];this.idToNodeMap.set(O.id,O)}var M=o(function le(he){for(var K=he.getChild().getNodes(),X,te=0,J=0;J<K.length;J++)X=K[J],X.getChild()==null?k.fixedNodeSet.has(X.id)&&(te+=100):te+=le(X);return te},"calculateCompoundWeight");if(this.constraints.fixedNodeConstraint){this.constraints.fixedNodeConstraint.forEach(function(K){k.fixedNodeSet.add(K.nodeId)});for(var L=this.graphManager.getAllNodes(),O,R=0;R<L.length;R++)if(O=L[R],O.getChild()!=null){var B=M(O);B>0&&(O.fixedNodeWeight=B)}}if(this.constraints.relativePlacementConstraint){var F=new Map,P=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(le){k.fixedNodesOnHorizontal.add(le),k.fixedNodesOnVertical.add(le)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var z=this.constraints.alignmentConstraint.vertical,R=0;R<z.length;R++)this.dummyToNodeForVerticalAlignment.set("dummy"+R,[]),z[R].forEach(function(he){F.set(he,"dummy"+R),k.dummyToNodeForVerticalAlignment.get("dummy"+R).push(he),k.fixedNodeSet.has(he)&&k.fixedNodesOnHorizontal.add("dummy"+R)});if(this.constraints.alignmentConstraint.horizontal)for(var $=this.constraints.alignmentConstraint.horizontal,R=0;R<$.length;R++)this.dummyToNodeForHorizontalAlignment.set("dummy"+R,[]),$[R].forEach(function(he){P.set(he,"dummy"+R),k.dummyToNodeForHorizontalAlignment.get("dummy"+R).push(he),k.fixedNodeSet.has(he)&&k.fixedNodesOnVertical.add("dummy"+R)})}if(m.RELAX_MOVEMENT_ON_CONSTRAINTS)this.shuffle=function(le){var he,K,X;for(X=le.length-1;X>=2*le.length/3;X--)he=Math.floor(Math.random()*(X+1)),K=le[X],le[X]=le[he],le[he]=K;return le},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(le){if(le.left){var he=F.has(le.left)?F.get(le.left):le.left,K=F.has(le.right)?F.get(le.right):le.right;k.nodesInRelativeHorizontal.includes(he)||(k.nodesInRelativeHorizontal.push(he),k.nodeToRelativeConstraintMapHorizontal.set(he,[]),k.dummyToNodeForVerticalAlignment.has(he)?k.nodeToTempPositionMapHorizontal.set(he,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(he)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(he,k.idToNodeMap.get(he).getCenterX())),k.nodesInRelativeHorizontal.includes(K)||(k.nodesInRelativeHorizontal.push(K),k.nodeToRelativeConstraintMapHorizontal.set(K,[]),k.dummyToNodeForVerticalAlignment.has(K)?k.nodeToTempPositionMapHorizontal.set(K,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(K)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(K,k.idToNodeMap.get(K).getCenterX())),k.nodeToRelativeConstraintMapHorizontal.get(he).push({right:K,gap:le.gap}),k.nodeToRelativeConstraintMapHorizontal.get(K).push({left:he,gap:le.gap})}else{var X=P.has(le.top)?P.get(le.top):le.top,te=P.has(le.bottom)?P.get(le.bottom):le.bottom;k.nodesInRelativeVertical.includes(X)||(k.nodesInRelativeVertical.push(X),k.nodeToRelativeConstraintMapVertical.set(X,[]),k.dummyToNodeForHorizontalAlignment.has(X)?k.nodeToTempPositionMapVertical.set(X,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(X)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(X,k.idToNodeMap.get(X).getCenterY())),k.nodesInRelativeVertical.includes(te)||(k.nodesInRelativeVertical.push(te),k.nodeToRelativeConstraintMapVertical.set(te,[]),k.dummyToNodeForHorizontalAlignment.has(te)?k.nodeToTempPositionMapVertical.set(te,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(te)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(te,k.idToNodeMap.get(te).getCenterY())),k.nodeToRelativeConstraintMapVertical.get(X).push({bottom:te,gap:le.gap}),k.nodeToRelativeConstraintMapVertical.get(te).push({top:X,gap:le.gap})}});else{var H=new Map,Q=new Map;this.constraints.relativePlacementConstraint.forEach(function(le){if(le.left){var he=F.has(le.left)?F.get(le.left):le.left,K=F.has(le.right)?F.get(le.right):le.right;H.has(he)?H.get(he).push(K):H.set(he,[K]),H.has(K)?H.get(K).push(he):H.set(K,[he])}else{var X=P.has(le.top)?P.get(le.top):le.top,te=P.has(le.bottom)?P.get(le.bottom):le.bottom;Q.has(X)?Q.get(X).push(te):Q.set(X,[te]),Q.has(te)?Q.get(te).push(X):Q.set(te,[X])}});var j=o(function(he,K){var X=[],te=[],J=new _,se=new Set,ue=0;return he.forEach(function(Z,Se){if(!se.has(Se)){X[ue]=[],te[ue]=!1;var ce=Se;for(J.push(ce),se.add(ce),X[ue].push(ce);J.length!=0;){ce=J.shift(),K.has(ce)&&(te[ue]=!0);var ae=he.get(ce);ae.forEach(function(Oe){se.has(Oe)||(J.push(Oe),se.add(Oe),X[ue].push(Oe))})}ue++}}),{components:X,isFixed:te}},"constructComponents"),ie=j(H,k.fixedNodesOnHorizontal);this.componentsOnHorizontal=ie.components,this.fixedComponentsOnHorizontal=ie.isFixed;var ne=j(Q,k.fixedNodesOnVertical);this.componentsOnVertical=ne.components,this.fixedComponentsOnVertical=ne.isFixed}}},I.prototype.updateDisplacements=function(){var k=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(ne){var le=k.idToNodeMap.get(ne.nodeId);le.displacementX=0,le.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var L=this.constraints.alignmentConstraint.vertical,R=0;R<L.length;R++){for(var O=0,M=0;M<L[R].length;M++){if(this.fixedNodeSet.has(L[R][M])){O=0;break}O+=this.idToNodeMap.get(L[R][M]).displacementX}for(var B=O/L[R].length,M=0;M<L[R].length;M++)this.idToNodeMap.get(L[R][M]).displacementX=B}if(this.constraints.alignmentConstraint.horizontal)for(var F=this.constraints.alignmentConstraint.horizontal,R=0;R<F.length;R++){for(var P=0,M=0;M<F[R].length;M++){if(this.fixedNodeSet.has(F[R][M])){P=0;break}P+=this.idToNodeMap.get(F[R][M]).displacementY}for(var z=P/F[R].length,M=0;M<F[R].length;M++)this.idToNodeMap.get(F[R][M]).displacementY=z}}if(this.constraints.relativePlacementConstraint)if(m.RELAX_MOVEMENT_ON_CONSTRAINTS)this.totalIterations%10==0&&(this.shuffle(this.nodesInRelativeHorizontal),this.shuffle(this.nodesInRelativeVertical)),this.nodesInRelativeHorizontal.forEach(function(ne){if(!k.fixedNodesOnHorizontal.has(ne)){var le=0;k.dummyToNodeForVerticalAlignment.has(ne)?le=k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(ne)[0]).displacementX:le=k.idToNodeMap.get(ne).displacementX,k.nodeToRelativeConstraintMapHorizontal.get(ne).forEach(function(he){if(he.right){var K=k.nodeToTempPositionMapHorizontal.get(he.right)-k.nodeToTempPositionMapHorizontal.get(ne)-le;K<he.gap&&(le-=he.gap-K)}else{var K=k.nodeToTempPositionMapHorizontal.get(ne)-k.nodeToTempPositionMapHorizontal.get(he.left)+le;K<he.gap&&(le+=he.gap-K)}}),k.nodeToTempPositionMapHorizontal.set(ne,k.nodeToTempPositionMapHorizontal.get(ne)+le),k.dummyToNodeForVerticalAlignment.has(ne)?k.dummyToNodeForVerticalAlignment.get(ne).forEach(function(he){k.idToNodeMap.get(he).displacementX=le}):k.idToNodeMap.get(ne).displacementX=le}}),this.nodesInRelativeVertical.forEach(function(ne){if(!k.fixedNodesOnHorizontal.has(ne)){var le=0;k.dummyToNodeForHorizontalAlignment.has(ne)?le=k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(ne)[0]).displacementY:le=k.idToNodeMap.get(ne).displacementY,k.nodeToRelativeConstraintMapVertical.get(ne).forEach(function(he){if(he.bottom){var K=k.nodeToTempPositionMapVertical.get(he.bottom)-k.nodeToTempPositionMapVertical.get(ne)-le;K<he.gap&&(le-=he.gap-K)}else{var K=k.nodeToTempPositionMapVertical.get(ne)-k.nodeToTempPositionMapVertical.get(he.top)+le;K<he.gap&&(le+=he.gap-K)}}),k.nodeToTempPositionMapVertical.set(ne,k.nodeToTempPositionMapVertical.get(ne)+le),k.dummyToNodeForHorizontalAlignment.has(ne)?k.dummyToNodeForHorizontalAlignment.get(ne).forEach(function(he){k.idToNodeMap.get(he).displacementY=le}):k.idToNodeMap.get(ne).displacementY=le}});else{for(var R=0;R<this.componentsOnHorizontal.length;R++){var $=this.componentsOnHorizontal[R];if(this.fixedComponentsOnHorizontal[R])for(var M=0;M<$.length;M++)this.dummyToNodeForVerticalAlignment.has($[M])?this.dummyToNodeForVerticalAlignment.get($[M]).forEach(function(he){k.idToNodeMap.get(he).displacementX=0}):this.idToNodeMap.get($[M]).displacementX=0;else{for(var H=0,Q=0,M=0;M<$.length;M++)if(this.dummyToNodeForVerticalAlignment.has($[M])){var j=this.dummyToNodeForVerticalAlignment.get($[M]);H+=j.length*this.idToNodeMap.get(j[0]).displacementX,Q+=j.length}else H+=this.idToNodeMap.get($[M]).displacementX,Q++;for(var ie=H/Q,M=0;M<$.length;M++)this.dummyToNodeForVerticalAlignment.has($[M])?this.dummyToNodeForVerticalAlignment.get($[M]).forEach(function(he){k.idToNodeMap.get(he).displacementX=ie}):this.idToNodeMap.get($[M]).displacementX=ie}}for(var R=0;R<this.componentsOnVertical.length;R++){var $=this.componentsOnVertical[R];if(this.fixedComponentsOnVertical[R])for(var M=0;M<$.length;M++)this.dummyToNodeForHorizontalAlignment.has($[M])?this.dummyToNodeForHorizontalAlignment.get($[M]).forEach(function(K){k.idToNodeMap.get(K).displacementY=0}):this.idToNodeMap.get($[M]).displacementY=0;else{for(var H=0,Q=0,M=0;M<$.length;M++)if(this.dummyToNodeForHorizontalAlignment.has($[M])){var j=this.dummyToNodeForHorizontalAlignment.get($[M]);H+=j.length*this.idToNodeMap.get(j[0]).displacementY,Q+=j.length}else H+=this.idToNodeMap.get($[M]).displacementY,Q++;for(var ie=H/Q,M=0;M<$.length;M++)this.dummyToNodeForHorizontalAlignment.has($[M])?this.dummyToNodeForHorizontalAlignment.get($[M]).forEach(function(J){k.idToNodeMap.get(J).displacementY=ie}):this.idToNodeMap.get($[M]).displacementY=ie}}}},I.prototype.calculateNodesToApplyGravitationTo=function(){var k=[],L,R=this.graphManager.getGraphs(),O=R.length,M;for(M=0;M<O;M++)L=R[M],L.updateConnected(),L.isConnected||(k=k.concat(L.getNodes()));return k},I.prototype.createBendpoints=function(){var k=[];k=k.concat(this.graphManager.getAllEdges());var L=new Set,R;for(R=0;R<k.length;R++){var O=k[R];if(!L.has(O)){var M=O.getSource(),B=O.getTarget();if(M==B)O.getBendpoints().push(new b),O.getBendpoints().push(new b),this.createDummyNodesForBendpoints(O),L.add(O);else{var F=[];if(F=F.concat(M.getEdgeListToNode(B)),F=F.concat(B.getEdgeListToNode(M)),!L.has(F[0])){if(F.length>1){var P;for(P=0;P<F.length;P++){var z=F[P];z.getBendpoints().push(new b),this.createDummyNodesForBendpoints(z)}}F.forEach(function($){L.add($)})}}}if(L.size==k.length)break}},I.prototype.positionNodesRadially=function(k){for(var L=new x(0,0),R=Math.ceil(Math.sqrt(k.length)),O=0,M=0,B=0,F=new b(0,0),P=0;P<k.length;P++){P%R==0&&(B=0,M=O,P!=0&&(M+=m.DEFAULT_COMPONENT_SEPERATION),O=0);var z=k[P],$=C.findCenterOfTree(z);L.x=B,L.y=M,F=I.radialLayout(z,$,L),F.y>O&&(O=Math.floor(F.y)),B=Math.floor(F.x+m.DEFAULT_COMPONENT_SEPERATION)}this.transform(new b(v.WORLD_CENTER_X-F.x/2,v.WORLD_CENTER_Y-F.y/2))},I.radialLayout=function(k,L,R){var O=Math.max(this.maxDiagonalInTree(k),m.DEFAULT_RADIAL_SEPARATION);I.branchRadialLayout(L,null,0,359,0,O);var M=A.calculateBounds(k),B=new S;B.setDeviceOrgX(M.getMinX()),B.setDeviceOrgY(M.getMinY()),B.setWorldOrgX(R.x),B.setWorldOrgY(R.y);for(var F=0;F<k.length;F++){var P=k[F];P.transform(B)}var z=new b(M.getMaxX(),M.getMaxY());return B.inverseTransformPoint(z)},I.branchRadialLayout=function(k,L,R,O,M,B){var F=(O-R+1)/2;F<0&&(F+=180);var P=(F+R)%360,z=P*E.TWO_PI/360,$=Math.cos(z),H=M*Math.cos(z),Q=M*Math.sin(z);k.setCenter(H,Q);var j=[];j=j.concat(k.getEdges());var ie=j.length;L!=null&&ie--;for(var ne=0,le=j.length,he,K=k.getEdgesBetween(L);K.length>1;){var X=K[0];K.splice(0,1);var te=j.indexOf(X);te>=0&&j.splice(te,1),le--,ie--}L!=null?he=(j.indexOf(K[0])+1)%le:he=0;for(var J=Math.abs(O-R)/ie,se=he;ne!=ie;se=++se%le){var ue=j[se].getOtherEnd(k);if(ue!=L){var Z=(R+ne*J)%360,Se=(Z+J)%360;I.branchRadialLayout(ue,k,Z,Se,M+B,B),ne++}}},I.maxDiagonalInTree=function(k){for(var L=T.MIN_VALUE,R=0;R<k.length;R++){var O=k[R],M=O.getDiagonal();M>L&&(L=M)}return L},I.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},I.prototype.groupZeroDegreeMembers=function(){var k=this,L={};this.memberGroups={},this.idToDummyNode={};for(var R=[],O=this.graphManager.getAllNodes(),M=0;M<O.length;M++){var B=O[M],F=B.getParent();this.getNodeDegreeWithChildren(B)===0&&(F.id==null||!this.getToBeTiled(F))&&R.push(B)}for(var M=0;M<R.length;M++){var B=R[M],P=B.getParent().id;typeof L[P]>"u"&&(L[P]=[]),L[P]=L[P].concat(B)}Object.keys(L).forEach(function(z){if(L[z].length>1){var $="DummyCompound_"+z;k.memberGroups[$]=L[z];var H=L[z][0].getParent(),Q=new d(k.graphManager);Q.id=$,Q.paddingLeft=H.paddingLeft||0,Q.paddingRight=H.paddingRight||0,Q.paddingBottom=H.paddingBottom||0,Q.paddingTop=H.paddingTop||0,k.idToDummyNode[$]=Q;var j=k.getGraphManager().add(k.newGraph(),Q),ie=H.getChild();ie.add(Q);for(var ne=0;ne<L[z].length;ne++){var le=L[z][ne];ie.remove(le),j.add(le)}}})},I.prototype.clearCompounds=function(){var k={},L={};this.performDFSOnCompounds();for(var R=0;R<this.compoundOrder.length;R++)L[this.compoundOrder[R].id]=this.compoundOrder[R],k[this.compoundOrder[R].id]=[].concat(this.compoundOrder[R].getChild().getNodes()),this.graphManager.remove(this.compoundOrder[R].getChild()),this.compoundOrder[R].child=null;this.graphManager.resetAllNodes(),this.tileCompoundMembers(k,L)},I.prototype.clearZeroDegreeMembers=function(){var k=this,L=this.tiledZeroDegreePack=[];Object.keys(this.memberGroups).forEach(function(R){var O=k.idToDummyNode[R];if(L[R]=k.tileNodes(k.memberGroups[R],O.paddingLeft+O.paddingRight),O.rect.width=L[R].width,O.rect.height=L[R].height,O.setCenter(L[R].centerX,L[R].centerY),O.labelMarginLeft=0,O.labelMarginTop=0,m.NODE_DIMENSIONS_INCLUDE_LABELS){var M=O.rect.width,B=O.rect.height;O.labelWidth&&(O.labelPosHorizontal=="left"?(O.rect.x-=O.labelWidth,O.setWidth(M+O.labelWidth),O.labelMarginLeft=O.labelWidth):O.labelPosHorizontal=="center"&&O.labelWidth>M?(O.rect.x-=(O.labelWidth-M)/2,O.setWidth(O.labelWidth),O.labelMarginLeft=(O.labelWidth-M)/2):O.labelPosHorizontal=="right"&&O.setWidth(M+O.labelWidth)),O.labelHeight&&(O.labelPosVertical=="top"?(O.rect.y-=O.labelHeight,O.setHeight(B+O.labelHeight),O.labelMarginTop=O.labelHeight):O.labelPosVertical=="center"&&O.labelHeight>B?(O.rect.y-=(O.labelHeight-B)/2,O.setHeight(O.labelHeight),O.labelMarginTop=(O.labelHeight-B)/2):O.labelPosVertical=="bottom"&&O.setHeight(B+O.labelHeight))}})},I.prototype.repopulateCompounds=function(){for(var k=this.compoundOrder.length-1;k>=0;k--){var L=this.compoundOrder[k],R=L.id,O=L.paddingLeft,M=L.paddingTop,B=L.labelMarginLeft,F=L.labelMarginTop;this.adjustLocations(this.tiledMemberPack[R],L.rect.x,L.rect.y,O,M,B,F)}},I.prototype.repopulateZeroDegreeMembers=function(){var k=this,L=this.tiledZeroDegreePack;Object.keys(L).forEach(function(R){var O=k.idToDummyNode[R],M=O.paddingLeft,B=O.paddingTop,F=O.labelMarginLeft,P=O.labelMarginTop;k.adjustLocations(L[R],O.rect.x,O.rect.y,M,B,F,P)})},I.prototype.getToBeTiled=function(k){var L=k.id;if(this.toBeTiled[L]!=null)return this.toBeTiled[L];var R=k.getChild();if(R==null)return this.toBeTiled[L]=!1,!1;for(var O=R.getNodes(),M=0;M<O.length;M++){var B=O[M];if(this.getNodeDegree(B)>0)return this.toBeTiled[L]=!1,!1;if(B.getChild()==null){this.toBeTiled[B.id]=!1;continue}if(!this.getToBeTiled(B))return this.toBeTiled[L]=!1,!1}return this.toBeTiled[L]=!0,!0},I.prototype.getNodeDegree=function(k){for(var L=k.id,R=k.getEdges(),O=0,M=0;M<R.length;M++){var B=R[M];B.getSource().id!==B.getTarget().id&&(O=O+1)}return O},I.prototype.getNodeDegreeWithChildren=function(k){var L=this.getNodeDegree(k);if(k.getChild()==null)return L;for(var R=k.getChild().getNodes(),O=0;O<R.length;O++){var M=R[O];L+=this.getNodeDegreeWithChildren(M)}return L},I.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},I.prototype.fillCompexOrderByDFS=function(k){for(var L=0;L<k.length;L++){var R=k[L];R.getChild()!=null&&this.fillCompexOrderByDFS(R.getChild().getNodes()),this.getToBeTiled(R)&&this.compoundOrder.push(R)}},I.prototype.adjustLocations=function(k,L,R,O,M,B,F){L+=O+B,R+=M+F;for(var P=L,z=0;z<k.rows.length;z++){var $=k.rows[z];L=P;for(var H=0,Q=0;Q<$.length;Q++){var j=$[Q];j.rect.x=L,j.rect.y=R,L+=j.rect.width+k.horizontalPadding,j.rect.height>H&&(H=j.rect.height)}R+=H+k.verticalPadding}},I.prototype.tileCompoundMembers=function(k,L){var R=this;this.tiledMemberPack=[],Object.keys(k).forEach(function(O){var M=L[O];if(R.tiledMemberPack[O]=R.tileNodes(k[O],M.paddingLeft+M.paddingRight),M.rect.width=R.tiledMemberPack[O].width,M.rect.height=R.tiledMemberPack[O].height,M.setCenter(R.tiledMemberPack[O].centerX,R.tiledMemberPack[O].centerY),M.labelMarginLeft=0,M.labelMarginTop=0,m.NODE_DIMENSIONS_INCLUDE_LABELS){var B=M.rect.width,F=M.rect.height;M.labelWidth&&(M.labelPosHorizontal=="left"?(M.rect.x-=M.labelWidth,M.setWidth(B+M.labelWidth),M.labelMarginLeft=M.labelWidth):M.labelPosHorizontal=="center"&&M.labelWidth>B?(M.rect.x-=(M.labelWidth-B)/2,M.setWidth(M.labelWidth),M.labelMarginLeft=(M.labelWidth-B)/2):M.labelPosHorizontal=="right"&&M.setWidth(B+M.labelWidth)),M.labelHeight&&(M.labelPosVertical=="top"?(M.rect.y-=M.labelHeight,M.setHeight(F+M.labelHeight),M.labelMarginTop=M.labelHeight):M.labelPosVertical=="center"&&M.labelHeight>F?(M.rect.y-=(M.labelHeight-F)/2,M.setHeight(M.labelHeight),M.labelMarginTop=(M.labelHeight-F)/2):M.labelPosVertical=="bottom"&&M.setHeight(F+M.labelHeight))}})},I.prototype.tileNodes=function(k,L){var R=this.tileNodesByFavoringDim(k,L,!0),O=this.tileNodesByFavoringDim(k,L,!1),M=this.getOrgRatio(R),B=this.getOrgRatio(O),F;return B<M?F=O:F=R,F},I.prototype.getOrgRatio=function(k){var L=k.width,R=k.height,O=L/R;return O<1&&(O=1/O),O},I.prototype.calcIdealRowWidth=function(k,L){var R=m.TILING_PADDING_VERTICAL,O=m.TILING_PADDING_HORIZONTAL,M=k.length,B=0,F=0,P=0;k.forEach(function(ne){B+=ne.getWidth(),F+=ne.getHeight(),ne.getWidth()>P&&(P=ne.getWidth())});var z=B/M,$=F/M,H=Math.pow(R-O,2)+4*(z+O)*($+R)*M,Q=(O-R+Math.sqrt(H))/(2*(z+O)),j;L?(j=Math.ceil(Q),j==Q&&j++):j=Math.floor(Q);var ie=j*(z+O)-O;return P>ie&&(ie=P),ie+=O*2,ie},I.prototype.tileNodesByFavoringDim=function(k,L,R){var O=m.TILING_PADDING_VERTICAL,M=m.TILING_PADDING_HORIZONTAL,B=m.TILING_COMPARE_BY,F={rows:[],rowWidth:[],rowHeight:[],width:0,height:L,verticalPadding:O,horizontalPadding:M,centerX:0,centerY:0};B&&(F.idealRowWidth=this.calcIdealRowWidth(k,R));var P=o(function(le){return le.rect.width*le.rect.height},"getNodeArea"),z=o(function(le,he){return P(he)-P(le)},"areaCompareFcn");k.sort(function(ne,le){var he=z;return F.idealRowWidth?(he=B,he(ne.id,le.id)):he(ne,le)});for(var $=0,H=0,Q=0;Q<k.length;Q++){var j=k[Q];$+=j.getCenterX(),H+=j.getCenterY()}F.centerX=$/k.length,F.centerY=H/k.length;for(var Q=0;Q<k.length;Q++){var j=k[Q];if(F.rows.length==0)this.insertNodeToRow(F,j,0,L);else if(this.canAddHorizontal(F,j.rect.width,j.rect.height)){var ie=F.rows.length-1;F.idealRowWidth||(ie=this.getShortestRowIndex(F)),this.insertNodeToRow(F,j,ie,L)}else this.insertNodeToRow(F,j,F.rows.length,L);this.shiftToLastRow(F)}return F},I.prototype.insertNodeToRow=function(k,L,R,O){var M=O;if(R==k.rows.length){var B=[];k.rows.push(B),k.rowWidth.push(M),k.rowHeight.push(0)}var F=k.rowWidth[R]+L.rect.width;k.rows[R].length>0&&(F+=k.horizontalPadding),k.rowWidth[R]=F,k.width<F&&(k.width=F);var P=L.rect.height;R>0&&(P+=k.verticalPadding);var z=0;P>k.rowHeight[R]&&(z=k.rowHeight[R],k.rowHeight[R]=P,z=k.rowHeight[R]-z),k.height+=z,k.rows[R].push(L)},I.prototype.getShortestRowIndex=function(k){for(var L=-1,R=Number.MAX_VALUE,O=0;O<k.rows.length;O++)k.rowWidth[O]<R&&(L=O,R=k.rowWidth[O]);return L},I.prototype.getLongestRowIndex=function(k){for(var L=-1,R=Number.MIN_VALUE,O=0;O<k.rows.length;O++)k.rowWidth[O]>R&&(L=O,R=k.rowWidth[O]);return L},I.prototype.canAddHorizontal=function(k,L,R){if(k.idealRowWidth){var O=k.rows.length-1,M=k.rowWidth[O];return M+L+k.horizontalPadding<=k.idealRowWidth}var B=this.getShortestRowIndex(k);if(B<0)return!0;var F=k.rowWidth[B];if(F+k.horizontalPadding+L<=k.width)return!0;var P=0;k.rowHeight[B]<R&&B>0&&(P=R+k.verticalPadding-k.rowHeight[B]);var z;k.width-F>=L+k.horizontalPadding?z=(k.height+P)/(F+L+k.horizontalPadding):z=(k.height+P)/k.width,P=R+k.verticalPadding;var $;return k.width<L?$=(k.height+P)/L:$=(k.height+P)/k.width,$<1&&($=1/$),z<1&&(z=1/z),z<$},I.prototype.shiftToLastRow=function(k){var L=this.getLongestRowIndex(k),R=k.rowWidth.length-1,O=k.rows[L],M=O[O.length-1],B=M.width+k.horizontalPadding;if(k.width-k.rowWidth[R]>B&&L!=R){O.splice(-1,1),k.rows[R].push(M),k.rowWidth[L]=k.rowWidth[L]-B,k.rowWidth[R]=k.rowWidth[R]+B,k.width=k.rowWidth[instance.getLongestRowIndex(k)];for(var F=Number.MIN_VALUE,P=0;P<O.length;P++)O[P].height>F&&(F=O[P].height);L>0&&(F+=k.verticalPadding);var z=k.rowHeight[L]+k.rowHeight[R];k.rowHeight[L]=F,k.rowHeight[R]<M.height+k.verticalPadding&&(k.rowHeight[R]=M.height+k.verticalPadding);var $=k.rowHeight[L]+k.rowHeight[R];k.height+=$-z,this.shiftToLastRow(k)}},I.prototype.tilingPreLayout=function(){m.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},I.prototype.tilingPostLayout=function(){m.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},I.prototype.reduceTrees=function(){for(var k=[],L=!0,R;L;){var O=this.graphManager.getAllNodes(),M=[];L=!1;for(var B=0;B<O.length;B++)if(R=O[B],R.getEdges().length==1&&!R.getEdges()[0].isInterGraph&&R.getChild()==null){if(m.PURE_INCREMENTAL){var F=R.getEdges()[0].getOtherEnd(R),P=new w(R.getCenterX()-F.getCenterX(),R.getCenterY()-F.getCenterY());M.push([R,R.getEdges()[0],R.getOwner(),P])}else M.push([R,R.getEdges()[0],R.getOwner()]);L=!0}if(L==!0){for(var z=[],$=0;$<M.length;$++)M[$][0].getEdges().length==1&&(z.push(M[$]),M[$][0].getOwner().remove(M[$][0]));k.push(z),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()}}this.prunedNodesAll=k},I.prototype.growTree=function(k){for(var L=k.length,R=k[L-1],O,M=0;M<R.length;M++)O=R[M],this.findPlaceforPrunedNode(O),O[2].add(O[0]),O[2].add(O[1],O[1].source,O[1].target);k.splice(k.length-1,1),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()},I.prototype.findPlaceforPrunedNode=function(k){var L,R,O=k[0];if(O==k[1].source?R=k[1].target:R=k[1].source,m.PURE_INCREMENTAL)O.setCenter(R.getCenterX()+k[3].getWidth(),R.getCenterY()+k[3].getHeight());else{var M=R.startX,B=R.finishX,F=R.startY,P=R.finishY,z=0,$=0,H=0,Q=0,j=[z,H,$,Q];if(F>0)for(var ie=M;ie<=B;ie++)j[0]+=this.grid[ie][F-1].length+this.grid[ie][F].length-1;if(B<this.grid.length-1)for(var ie=F;ie<=P;ie++)j[1]+=this.grid[B+1][ie].length+this.grid[B][ie].length-1;if(P<this.grid[0].length-1)for(var ie=M;ie<=B;ie++)j[2]+=this.grid[ie][P+1].length+this.grid[ie][P].length-1;if(M>0)for(var ie=F;ie<=P;ie++)j[3]+=this.grid[M-1][ie].length+this.grid[M][ie].length-1;for(var ne=T.MAX_VALUE,le,he,K=0;K<j.length;K++)j[K]<ne?(ne=j[K],le=1,he=K):j[K]==ne&&le++;if(le==3&&ne==0)j[0]==0&&j[1]==0&&j[2]==0?L=1:j[0]==0&&j[1]==0&&j[3]==0?L=0:j[0]==0&&j[2]==0&&j[3]==0?L=3:j[1]==0&&j[2]==0&&j[3]==0&&(L=2);else if(le==2&&ne==0){var X=Math.floor(Math.random()*2);j[0]==0&&j[1]==0?X==0?L=0:L=1:j[0]==0&&j[2]==0?X==0?L=0:L=2:j[0]==0&&j[3]==0?X==0?L=0:L=3:j[1]==0&&j[2]==0?X==0?L=1:L=2:j[1]==0&&j[3]==0?X==0?L=1:L=3:X==0?L=2:L=3}else if(le==4&&ne==0){var X=Math.floor(Math.random()*4);L=X}else L=he;L==0?O.setCenter(R.getCenterX(),R.getCenterY()-R.getHeight()/2-y.DEFAULT_EDGE_LENGTH-O.getHeight()/2):L==1?O.setCenter(R.getCenterX()+R.getWidth()/2+y.DEFAULT_EDGE_LENGTH+O.getWidth()/2,R.getCenterY()):L==2?O.setCenter(R.getCenterX(),R.getCenterY()+R.getHeight()/2+y.DEFAULT_EDGE_LENGTH+O.getHeight()/2):O.setCenter(R.getCenterX()-R.getWidth()/2-y.DEFAULT_EDGE_LENGTH-O.getWidth()/2,R.getCenterY())}},a.exports=I},991:(a,s,l)=>{var u=l(551).FDLayoutNode,h=l(551).IMath;function f(p,m,g,y){u.call(this,p,m,g,y)}o(f,"CoSENode"),f.prototype=Object.create(u.prototype);for(var d in u)f[d]=u[d];f.prototype.calculateDisplacement=function(){var p=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementX=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementX)),Math.abs(this.displacementY)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementY=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},f.prototype.propogateDisplacementToChildren=function(p,m){for(var g=this.getChild().getNodes(),y,v=0;v<g.length;v++)y=g[v],y.getChild()==null?(y.displacementX+=p,y.displacementY+=m):y.propogateDisplacementToChildren(p,m)},f.prototype.move=function(){var p=this.graphManager.getLayout();(this.child==null||this.child.getNodes().length==0)&&(this.moveBy(this.displacementX,this.displacementY),p.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY)),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},f.prototype.setPred1=function(p){this.pred1=p},f.prototype.getPred1=function(){return pred1},f.prototype.getPred2=function(){return pred2},f.prototype.setNext=function(p){this.next=p},f.prototype.getNext=function(){return next},f.prototype.setProcessed=function(p){this.processed=p},f.prototype.isProcessed=function(){return processed},a.exports=f},902:(a,s,l)=>{function u(g){if(Array.isArray(g)){for(var y=0,v=Array(g.length);y<g.length;y++)v[y]=g[y];return v}else return Array.from(g)}o(u,"_toConsumableArray");var h=l(806),f=l(551).LinkedList,d=l(551).Matrix,p=l(551).SVD;function m(){}o(m,"ConstraintHandler"),m.handleConstraints=function(g){var y={};y.fixedNodeConstraint=g.constraints.fixedNodeConstraint,y.alignmentConstraint=g.constraints.alignmentConstraint,y.relativePlacementConstraint=g.constraints.relativePlacementConstraint;for(var v=new Map,x=new Map,b=[],w=[],C=g.getAllNodes(),T=0,E=0;E<C.length;E++){var A=C[E];A.getChild()==null&&(x.set(A.id,T++),b.push(A.getCenterX()),w.push(A.getCenterY()),v.set(A.id,A))}y.relativePlacementConstraint&&y.relativePlacementConstraint.forEach(function(oe){!oe.gap&&oe.gap!=0&&(oe.left?oe.gap=h.DEFAULT_EDGE_LENGTH+v.get(oe.left).getWidth()/2+v.get(oe.right).getWidth()/2:oe.gap=h.DEFAULT_EDGE_LENGTH+v.get(oe.top).getHeight()/2+v.get(oe.bottom).getHeight()/2)});var S=o(function(V,xe){return{x:V.x-xe.x,y:V.y-xe.y}},"calculatePositionDiff"),_=o(function(V){var xe=0,q=0;return V.forEach(function(pe){xe+=b[x.get(pe)],q+=w[x.get(pe)]}),{x:xe/V.size,y:q/V.size}},"calculateAvgPosition"),I=o(function(V,xe,q,pe,ve){function Pe(st,Ue){var ct=new Set(st),We=!0,ot=!1,Yt=void 0;try{for(var bt=Ue[Symbol.iterator](),Mt;!(We=(Mt=bt.next()).done);We=!0){var xt=Mt.value;ct.add(xt)}}catch(ut){ot=!0,Yt=ut}finally{try{!We&&bt.return&&bt.return()}finally{if(ot)throw Yt}}return ct}o(Pe,"setUnion");var _e=new Map;V.forEach(function(st,Ue){_e.set(Ue,0)}),V.forEach(function(st,Ue){st.forEach(function(ct){_e.set(ct.id,_e.get(ct.id)+1)})});var we=new Map,Ve=new Map,De=new f;_e.forEach(function(st,Ue){st==0?(De.push(Ue),q||(xe=="horizontal"?we.set(Ue,x.has(Ue)?b[x.get(Ue)]:pe.get(Ue)):we.set(Ue,x.has(Ue)?w[x.get(Ue)]:pe.get(Ue)))):we.set(Ue,Number.NEGATIVE_INFINITY),q&&Ve.set(Ue,new Set([Ue]))}),q&&ve.forEach(function(st){var Ue=[];if(st.forEach(function(ot){q.has(ot)&&Ue.push(ot)}),Ue.length>0){var ct=0;Ue.forEach(function(ot){xe=="horizontal"?(we.set(ot,x.has(ot)?b[x.get(ot)]:pe.get(ot)),ct+=we.get(ot)):(we.set(ot,x.has(ot)?w[x.get(ot)]:pe.get(ot)),ct+=we.get(ot))}),ct=ct/Ue.length,st.forEach(function(ot){q.has(ot)||we.set(ot,ct)})}else{var We=0;st.forEach(function(ot){xe=="horizontal"?We+=x.has(ot)?b[x.get(ot)]:pe.get(ot):We+=x.has(ot)?w[x.get(ot)]:pe.get(ot)}),We=We/st.length,st.forEach(function(ot){we.set(ot,We)})}});for(var qe=o(function(){var Ue=De.shift(),ct=V.get(Ue);ct.forEach(function(We){if(we.get(We.id)<we.get(Ue)+We.gap)if(q&&q.has(We.id)){var ot=void 0;if(xe=="horizontal"?ot=x.has(We.id)?b[x.get(We.id)]:pe.get(We.id):ot=x.has(We.id)?w[x.get(We.id)]:pe.get(We.id),we.set(We.id,ot),ot<we.get(Ue)+We.gap){var Yt=we.get(Ue)+We.gap-ot;Ve.get(Ue).forEach(function(bt){we.set(bt,we.get(bt)-Yt)})}}else we.set(We.id,we.get(Ue)+We.gap);_e.set(We.id,_e.get(We.id)-1),_e.get(We.id)==0&&De.push(We.id),q&&Ve.set(We.id,Pe(Ve.get(Ue),Ve.get(We.id)))})},"_loop");De.length!=0;)qe();if(q){var at=new Set;V.forEach(function(st,Ue){st.length==0&&at.add(Ue)});var Rt=[];Ve.forEach(function(st,Ue){if(at.has(Ue)){var ct=!1,We=!0,ot=!1,Yt=void 0;try{for(var bt=st[Symbol.iterator](),Mt;!(We=(Mt=bt.next()).done);We=!0){var xt=Mt.value;q.has(xt)&&(ct=!0)}}catch(ft){ot=!0,Yt=ft}finally{try{!We&&bt.return&&bt.return()}finally{if(ot)throw Yt}}if(!ct){var ut=!1,Et=void 0;Rt.forEach(function(ft,yt){ft.has([].concat(u(st))[0])&&(ut=!0,Et=yt)}),ut?st.forEach(function(ft){Rt[Et].add(ft)}):Rt.push(new Set(st))}}}),Rt.forEach(function(st,Ue){var ct=Number.POSITIVE_INFINITY,We=Number.POSITIVE_INFINITY,ot=Number.NEGATIVE_INFINITY,Yt=Number.NEGATIVE_INFINITY,bt=!0,Mt=!1,xt=void 0;try{for(var ut=st[Symbol.iterator](),Et;!(bt=(Et=ut.next()).done);bt=!0){var ft=Et.value,yt=void 0;xe=="horizontal"?yt=x.has(ft)?b[x.get(ft)]:pe.get(ft):yt=x.has(ft)?w[x.get(ft)]:pe.get(ft);var nt=we.get(ft);yt<ct&&(ct=yt),yt>ot&&(ot=yt),nt<We&&(We=nt),nt>Yt&&(Yt=nt)}}catch(At){Mt=!0,xt=At}finally{try{!bt&&ut.return&&ut.return()}finally{if(Mt)throw xt}}var dn=(ct+ot)/2-(We+Yt)/2,Tt=!0,On=!1,tn=void 0;try{for(var _r=st[Symbol.iterator](),Dr;!(Tt=(Dr=_r.next()).done);Tt=!0){var Pn=Dr.value;we.set(Pn,we.get(Pn)+dn)}}catch(At){On=!0,tn=At}finally{try{!Tt&&_r.return&&_r.return()}finally{if(On)throw tn}}})}return we},"findAppropriatePositionForRelativePlacement"),D=o(function(V){var xe=0,q=0,pe=0,ve=0;if(V.forEach(function(Ve){Ve.left?b[x.get(Ve.left)]-b[x.get(Ve.right)]>=0?xe++:q++:w[x.get(Ve.top)]-w[x.get(Ve.bottom)]>=0?pe++:ve++}),xe>q&&pe>ve)for(var Pe=0;Pe<x.size;Pe++)b[Pe]=-1*b[Pe],w[Pe]=-1*w[Pe];else if(xe>q)for(var _e=0;_e<x.size;_e++)b[_e]=-1*b[_e];else if(pe>ve)for(var we=0;we<x.size;we++)w[we]=-1*w[we]},"applyReflectionForRelativePlacement"),k=o(function(V){var xe=[],q=new f,pe=new Set,ve=0;return V.forEach(function(Pe,_e){if(!pe.has(_e)){xe[ve]=[];var we=_e;for(q.push(we),pe.add(we),xe[ve].push(we);q.length!=0;){we=q.shift();var Ve=V.get(we);Ve.forEach(function(De){pe.has(De.id)||(q.push(De.id),pe.add(De.id),xe[ve].push(De.id))})}ve++}}),xe},"findComponents"),L=o(function(V){var xe=new Map;return V.forEach(function(q,pe){xe.set(pe,[])}),V.forEach(function(q,pe){q.forEach(function(ve){xe.get(pe).push(ve),xe.get(ve.id).push({id:pe,gap:ve.gap,direction:ve.direction})})}),xe},"dagToUndirected"),R=o(function(V){var xe=new Map;return V.forEach(function(q,pe){xe.set(pe,[])}),V.forEach(function(q,pe){q.forEach(function(ve){xe.get(ve.id).push({id:pe,gap:ve.gap,direction:ve.direction})})}),xe},"dagToReversed"),O=[],M=[],B=!1,F=!1,P=new Set,z=new Map,$=new Map,H=[];if(y.fixedNodeConstraint&&y.fixedNodeConstraint.forEach(function(oe){P.add(oe.nodeId)}),y.relativePlacementConstraint&&(y.relativePlacementConstraint.forEach(function(oe){oe.left?(z.has(oe.left)?z.get(oe.left).push({id:oe.right,gap:oe.gap,direction:"horizontal"}):z.set(oe.left,[{id:oe.right,gap:oe.gap,direction:"horizontal"}]),z.has(oe.right)||z.set(oe.right,[])):(z.has(oe.top)?z.get(oe.top).push({id:oe.bottom,gap:oe.gap,direction:"vertical"}):z.set(oe.top,[{id:oe.bottom,gap:oe.gap,direction:"vertical"}]),z.has(oe.bottom)||z.set(oe.bottom,[]))}),$=L(z),H=k($)),h.TRANSFORM_ON_CONSTRAINT_HANDLING){if(y.fixedNodeConstraint&&y.fixedNodeConstraint.length>1)y.fixedNodeConstraint.forEach(function(oe,V){O[V]=[oe.position.x,oe.position.y],M[V]=[b[x.get(oe.nodeId)],w[x.get(oe.nodeId)]]}),B=!0;else if(y.alignmentConstraint)(function(){var oe=0;if(y.alignmentConstraint.vertical){for(var V=y.alignmentConstraint.vertical,xe=o(function(we){var Ve=new Set;V[we].forEach(function(at){Ve.add(at)});var De=new Set([].concat(u(Ve)).filter(function(at){return P.has(at)})),qe=void 0;De.size>0?qe=b[x.get(De.values().next().value)]:qe=_(Ve).x,V[we].forEach(function(at){O[oe]=[qe,w[x.get(at)]],M[oe]=[b[x.get(at)],w[x.get(at)]],oe++})},"_loop2"),q=0;q<V.length;q++)xe(q);B=!0}if(y.alignmentConstraint.horizontal){for(var pe=y.alignmentConstraint.horizontal,ve=o(function(we){var Ve=new Set;pe[we].forEach(function(at){Ve.add(at)});var De=new Set([].concat(u(Ve)).filter(function(at){return P.has(at)})),qe=void 0;De.size>0?qe=b[x.get(De.values().next().value)]:qe=_(Ve).y,pe[we].forEach(function(at){O[oe]=[b[x.get(at)],qe],M[oe]=[b[x.get(at)],w[x.get(at)]],oe++})},"_loop3"),Pe=0;Pe<pe.length;Pe++)ve(Pe);B=!0}y.relativePlacementConstraint&&(F=!0)})();else if(y.relativePlacementConstraint){for(var Q=0,j=0,ie=0;ie<H.length;ie++)H[ie].length>Q&&(Q=H[ie].length,j=ie);if(Q<$.size/2)D(y.relativePlacementConstraint),B=!1,F=!1;else{var ne=new Map,le=new Map,he=[];H[j].forEach(function(oe){z.get(oe).forEach(function(V){V.direction=="horizontal"?(ne.has(oe)?ne.get(oe).push(V):ne.set(oe,[V]),ne.has(V.id)||ne.set(V.id,[]),he.push({left:oe,right:V.id})):(le.has(oe)?le.get(oe).push(V):le.set(oe,[V]),le.has(V.id)||le.set(V.id,[]),he.push({top:oe,bottom:V.id}))})}),D(he),F=!1;var K=I(ne,"horizontal"),X=I(le,"vertical");H[j].forEach(function(oe,V){M[V]=[b[x.get(oe)],w[x.get(oe)]],O[V]=[],K.has(oe)?O[V][0]=K.get(oe):O[V][0]=b[x.get(oe)],X.has(oe)?O[V][1]=X.get(oe):O[V][1]=w[x.get(oe)]}),B=!0}}if(B){for(var te=void 0,J=d.transpose(O),se=d.transpose(M),ue=0;ue<J.length;ue++)J[ue]=d.multGamma(J[ue]),se[ue]=d.multGamma(se[ue]);var Z=d.multMat(J,d.transpose(se)),Se=p.svd(Z);te=d.multMat(Se.V,d.transpose(Se.U));for(var ce=0;ce<x.size;ce++){var ae=[b[ce],w[ce]],Oe=[te[0][0],te[1][0]],ge=[te[0][1],te[1][1]];b[ce]=d.dotProduct(ae,Oe),w[ce]=d.dotProduct(ae,ge)}F&&D(y.relativePlacementConstraint)}}if(h.ENFORCE_CONSTRAINTS){if(y.fixedNodeConstraint&&y.fixedNodeConstraint.length>0){var ze={x:0,y:0};y.fixedNodeConstraint.forEach(function(oe,V){var xe={x:b[x.get(oe.nodeId)],y:w[x.get(oe.nodeId)]},q=oe.position,pe=S(q,xe);ze.x+=pe.x,ze.y+=pe.y}),ze.x/=y.fixedNodeConstraint.length,ze.y/=y.fixedNodeConstraint.length,b.forEach(function(oe,V){b[V]+=ze.x}),w.forEach(function(oe,V){w[V]+=ze.y}),y.fixedNodeConstraint.forEach(function(oe){b[x.get(oe.nodeId)]=oe.position.x,w[x.get(oe.nodeId)]=oe.position.y})}if(y.alignmentConstraint){if(y.alignmentConstraint.vertical)for(var He=y.alignmentConstraint.vertical,$e=o(function(V){var xe=new Set;He[V].forEach(function(ve){xe.add(ve)});var q=new Set([].concat(u(xe)).filter(function(ve){return P.has(ve)})),pe=void 0;q.size>0?pe=b[x.get(q.values().next().value)]:pe=_(xe).x,xe.forEach(function(ve){P.has(ve)||(b[x.get(ve)]=pe)})},"_loop4"),Re=0;Re<He.length;Re++)$e(Re);if(y.alignmentConstraint.horizontal)for(var Ie=y.alignmentConstraint.horizontal,be=o(function(V){var xe=new Set;Ie[V].forEach(function(ve){xe.add(ve)});var q=new Set([].concat(u(xe)).filter(function(ve){return P.has(ve)})),pe=void 0;q.size>0?pe=w[x.get(q.values().next().value)]:pe=_(xe).y,xe.forEach(function(ve){P.has(ve)||(w[x.get(ve)]=pe)})},"_loop5"),W=0;W<Ie.length;W++)be(W)}y.relativePlacementConstraint&&function(){var oe=new Map,V=new Map,xe=new Map,q=new Map,pe=new Map,ve=new Map,Pe=new Set,_e=new Set;if(P.forEach(function(Hr){Pe.add(Hr),_e.add(Hr)}),y.alignmentConstraint){if(y.alignmentConstraint.vertical)for(var we=y.alignmentConstraint.vertical,Ve=o(function(et){xe.set("dummy"+et,[]),we[et].forEach(function(mt){oe.set(mt,"dummy"+et),xe.get("dummy"+et).push(mt),P.has(mt)&&Pe.add("dummy"+et)}),pe.set("dummy"+et,b[x.get(we[et][0])])},"_loop6"),De=0;De<we.length;De++)Ve(De);if(y.alignmentConstraint.horizontal)for(var qe=y.alignmentConstraint.horizontal,at=o(function(et){q.set("dummy"+et,[]),qe[et].forEach(function(mt){V.set(mt,"dummy"+et),q.get("dummy"+et).push(mt),P.has(mt)&&_e.add("dummy"+et)}),ve.set("dummy"+et,w[x.get(qe[et][0])])},"_loop7"),Rt=0;Rt<qe.length;Rt++)at(Rt)}var st=new Map,Ue=new Map,ct=o(function(et){z.get(et).forEach(function(mt){var Kt=void 0,lt=void 0;mt.direction=="horizontal"?(Kt=oe.get(et)?oe.get(et):et,oe.get(mt.id)?lt={id:oe.get(mt.id),gap:mt.gap,direction:mt.direction}:lt=mt,st.has(Kt)?st.get(Kt).push(lt):st.set(Kt,[lt]),st.has(lt.id)||st.set(lt.id,[])):(Kt=V.get(et)?V.get(et):et,V.get(mt.id)?lt={id:V.get(mt.id),gap:mt.gap,direction:mt.direction}:lt=mt,Ue.has(Kt)?Ue.get(Kt).push(lt):Ue.set(Kt,[lt]),Ue.has(lt.id)||Ue.set(lt.id,[]))})},"_loop8"),We=!0,ot=!1,Yt=void 0;try{for(var bt=z.keys()[Symbol.iterator](),Mt;!(We=(Mt=bt.next()).done);We=!0){var xt=Mt.value;ct(xt)}}catch(Hr){ot=!0,Yt=Hr}finally{try{!We&&bt.return&&bt.return()}finally{if(ot)throw Yt}}var ut=L(st),Et=L(Ue),ft=k(ut),yt=k(Et),nt=R(st),dn=R(Ue),Tt=[],On=[];ft.forEach(function(Hr,et){Tt[et]=[],Hr.forEach(function(mt){nt.get(mt).length==0&&Tt[et].push(mt)})}),yt.forEach(function(Hr,et){On[et]=[],Hr.forEach(function(mt){dn.get(mt).length==0&&On[et].push(mt)})});var tn=I(st,"horizontal",Pe,pe,Tt),_r=I(Ue,"vertical",_e,ve,On),Dr=o(function(et){xe.get(et)?xe.get(et).forEach(function(mt){b[x.get(mt)]=tn.get(et)}):b[x.get(et)]=tn.get(et)},"_loop9"),Pn=!0,At=!1,Ce=void 0;try{for(var tt=tn.keys()[Symbol.iterator](),St;!(Pn=(St=tt.next()).done);Pn=!0){var mr=St.value;Dr(mr)}}catch(Hr){At=!0,Ce=Hr}finally{try{!Pn&&tt.return&&tt.return()}finally{if(At)throw Ce}}var rn=o(function(et){q.get(et)?q.get(et).forEach(function(mt){w[x.get(mt)]=_r.get(et)}):w[x.get(et)]=_r.get(et)},"_loop10"),gn=!0,Zr=!1,Ni=void 0;try{for(var Zn=_r.keys()[Symbol.iterator](),Sn;!(gn=(Sn=Zn.next()).done);gn=!0){var mr=Sn.value;rn(mr)}}catch(Hr){Zr=!0,Ni=Hr}finally{try{!gn&&Zn.return&&Zn.return()}finally{if(Zr)throw Ni}}}()}for(var de=0;de<C.length;de++){var re=C[de];re.getChild()==null&&re.setCenter(b[x.get(re.id)],w[x.get(re.id)])}},a.exports=m},551:a=>{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(45);return i})()})});var Pve=Mi((E4,gF)=>{"use strict";o(function(e,r){typeof E4=="object"&&typeof gF=="object"?gF.exports=r(mF()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof E4=="object"?E4.cytoscapeFcose=r(mF()):e.cytoscapeFcose=r(e.coseBase)},"webpackUniversalModuleDefinition")(E4,function(t){return(()=>{"use strict";var e={658:a=>{a.exports=Object.assign!=null?Object.assign.bind(Object):function(s){for(var l=arguments.length,u=Array(l>1?l-1:0),h=1;h<l;h++)u[h-1]=arguments[h];return u.forEach(function(f){Object.keys(f).forEach(function(d){return s[d]=f[d]})}),s}},548:(a,s,l)=>{var u=function(){function d(p,m){var g=[],y=!0,v=!1,x=void 0;try{for(var b=p[Symbol.iterator](),w;!(y=(w=b.next()).done)&&(g.push(w.value),!(m&&g.length===m));y=!0);}catch(C){v=!0,x=C}finally{try{!y&&b.return&&b.return()}finally{if(v)throw x}}return g}return o(d,"sliceIterator"),function(p,m){if(Array.isArray(p))return p;if(Symbol.iterator in Object(p))return d(p,m);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),h=l(140).layoutBase.LinkedList,f={};f.getTopMostNodes=function(d){for(var p={},m=0;m<d.length;m++)p[d[m].id()]=!0;var g=d.filter(function(y,v){typeof y=="number"&&(y=v);for(var x=y.parent()[0];x!=null;){if(p[x.id()])return!1;x=x.parent()[0]}return!0});return g},f.connectComponents=function(d,p,m,g){var y=new h,v=new Set,x=[],b=void 0,w=void 0,C=void 0,T=!1,E=1,A=[],S=[],_=o(function(){var D=d.collection();S.push(D);var k=m[0],L=d.collection();L.merge(k).merge(k.descendants().intersection(p)),x.push(k),L.forEach(function(M){y.push(M),v.add(M),D.merge(M)});for(var R=o(function(){k=y.shift();var B=d.collection();k.neighborhood().nodes().forEach(function($){p.intersection(k.edgesWith($)).length>0&&B.merge($)});for(var F=0;F<B.length;F++){var P=B[F];if(b=m.intersection(P.union(P.ancestors())),b!=null&&!v.has(b[0])){var z=b.union(b.descendants());z.forEach(function($){y.push($),v.add($),D.merge($),m.has($)&&x.push($)})}}},"_loop2");y.length!=0;)R();if(D.forEach(function(M){p.intersection(M.connectedEdges()).forEach(function(B){D.has(B.source())&&D.has(B.target())&&D.merge(B)})}),x.length==m.length&&(T=!0),!T||T&&E>1){w=x[0],C=w.connectedEdges().length,x.forEach(function(M){M.connectedEdges().length<C&&(C=M.connectedEdges().length,w=M)}),A.push(w.id());var O=d.collection();O.merge(x[0]),x.forEach(function(M){O.merge(M)}),x=[],m=m.difference(O),E++}},"_loop");do _();while(!T);return g&&A.length>0&&g.set("dummy"+(g.size+1),A),S},f.relocateComponent=function(d,p,m){if(!m.fixedNodeConstraint){var g=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,v=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY;if(m.quality=="draft"){var b=!0,w=!1,C=void 0;try{for(var T=p.nodeIndexes[Symbol.iterator](),E;!(b=(E=T.next()).done);b=!0){var A=E.value,S=u(A,2),_=S[0],I=S[1],D=m.cy.getElementById(_);if(D){var k=D.boundingBox(),L=p.xCoords[I]-k.w/2,R=p.xCoords[I]+k.w/2,O=p.yCoords[I]-k.h/2,M=p.yCoords[I]+k.h/2;L<g&&(g=L),R>y&&(y=R),O<v&&(v=O),M>x&&(x=M)}}}catch($){w=!0,C=$}finally{try{!b&&T.return&&T.return()}finally{if(w)throw C}}var B=d.x-(y+g)/2,F=d.y-(x+v)/2;p.xCoords=p.xCoords.map(function($){return $+B}),p.yCoords=p.yCoords.map(function($){return $+F})}else{Object.keys(p).forEach(function($){var H=p[$],Q=H.getRect().x,j=H.getRect().x+H.getRect().width,ie=H.getRect().y,ne=H.getRect().y+H.getRect().height;Q<g&&(g=Q),j>y&&(y=j),ie<v&&(v=ie),ne>x&&(x=ne)});var P=d.x-(y+g)/2,z=d.y-(x+v)/2;Object.keys(p).forEach(function($){var H=p[$];H.setCenter(H.getCenterX()+P,H.getCenterY()+z)})}}},f.calcBoundingBox=function(d,p,m,g){for(var y=Number.MAX_SAFE_INTEGER,v=Number.MIN_SAFE_INTEGER,x=Number.MAX_SAFE_INTEGER,b=Number.MIN_SAFE_INTEGER,w=void 0,C=void 0,T=void 0,E=void 0,A=d.descendants().not(":parent"),S=A.length,_=0;_<S;_++){var I=A[_];w=p[g.get(I.id())]-I.width()/2,C=p[g.get(I.id())]+I.width()/2,T=m[g.get(I.id())]-I.height()/2,E=m[g.get(I.id())]+I.height()/2,y>w&&(y=w),v<C&&(v=C),x>T&&(x=T),b<E&&(b=E)}var D={};return D.topLeftX=y,D.topLeftY=x,D.width=v-y,D.height=b-x,D},f.calcParentsWithoutChildren=function(d,p){var m=d.collection();return p.nodes(":parent").forEach(function(g){var y=!1;g.children().forEach(function(v){v.css("display")!="none"&&(y=!0)}),y||m.merge(g)}),m},a.exports=f},816:(a,s,l)=>{var u=l(548),h=l(140).CoSELayout,f=l(140).CoSENode,d=l(140).layoutBase.PointD,p=l(140).layoutBase.DimensionD,m=l(140).layoutBase.LayoutConstants,g=l(140).layoutBase.FDLayoutConstants,y=l(140).CoSEConstants,v=o(function(b,w){var C=b.cy,T=b.eles,E=T.nodes(),A=T.edges(),S=void 0,_=void 0,I=void 0,D={};b.randomize&&(S=w.nodeIndexes,_=w.xCoords,I=w.yCoords);var k=o(function($){return typeof $=="function"},"isFn"),L=o(function($,H){return k($)?$(H):$},"optFn"),R=u.calcParentsWithoutChildren(C,T),O=o(function z($,H,Q,j){for(var ie=H.length,ne=0;ne<ie;ne++){var le=H[ne],he=null;le.intersection(R).length==0&&(he=le.children());var K=void 0,X=le.layoutDimensions({nodeDimensionsIncludeLabels:j.nodeDimensionsIncludeLabels});if(le.outerWidth()!=null&&le.outerHeight()!=null)if(j.randomize)if(!le.isParent())K=$.add(new f(Q.graphManager,new d(_[S.get(le.id())]-X.w/2,I[S.get(le.id())]-X.h/2),new p(parseFloat(X.w),parseFloat(X.h))));else{var te=u.calcBoundingBox(le,_,I,S);le.intersection(R).length==0?K=$.add(new f(Q.graphManager,new d(te.topLeftX,te.topLeftY),new p(te.width,te.height))):K=$.add(new f(Q.graphManager,new d(te.topLeftX,te.topLeftY),new p(parseFloat(X.w),parseFloat(X.h))))}else K=$.add(new f(Q.graphManager,new d(le.position("x")-X.w/2,le.position("y")-X.h/2),new p(parseFloat(X.w),parseFloat(X.h))));else K=$.add(new f(this.graphManager));if(K.id=le.data("id"),K.nodeRepulsion=L(j.nodeRepulsion,le),K.paddingLeft=parseInt(le.css("padding")),K.paddingTop=parseInt(le.css("padding")),K.paddingRight=parseInt(le.css("padding")),K.paddingBottom=parseInt(le.css("padding")),j.nodeDimensionsIncludeLabels&&(K.labelWidth=le.boundingBox({includeLabels:!0,includeNodes:!1,includeOverlays:!1}).w,K.labelHeight=le.boundingBox({includeLabels:!0,includeNodes:!1,includeOverlays:!1}).h,K.labelPosVertical=le.css("text-valign"),K.labelPosHorizontal=le.css("text-halign")),D[le.data("id")]=K,isNaN(K.rect.x)&&(K.rect.x=0),isNaN(K.rect.y)&&(K.rect.y=0),he!=null&&he.length>0){var J=void 0;J=Q.getGraphManager().add(Q.newGraph(),K),z(J,he,Q,j)}}},"processChildrenList"),M=o(function($,H,Q){for(var j=0,ie=0,ne=0;ne<Q.length;ne++){var le=Q[ne],he=D[le.data("source")],K=D[le.data("target")];if(he&&K&&he!==K&&he.getEdgesBetween(K).length==0){var X=H.add($.newEdge(),he,K);X.id=le.id(),X.idealLength=L(b.idealEdgeLength,le),X.edgeElasticity=L(b.edgeElasticity,le),j+=X.idealLength,ie++}}b.idealEdgeLength!=null&&(ie>0?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=j/ie:k(b.idealEdgeLength)?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=50:y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=b.idealEdgeLength,y.MIN_REPULSION_DIST=g.MIN_REPULSION_DIST=g.DEFAULT_EDGE_LENGTH/10,y.DEFAULT_RADIAL_SEPARATION=g.DEFAULT_EDGE_LENGTH)},"processEdges"),B=o(function($,H){H.fixedNodeConstraint&&($.constraints.fixedNodeConstraint=H.fixedNodeConstraint),H.alignmentConstraint&&($.constraints.alignmentConstraint=H.alignmentConstraint),H.relativePlacementConstraint&&($.constraints.relativePlacementConstraint=H.relativePlacementConstraint)},"processConstraints");b.nestingFactor!=null&&(y.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=g.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=b.nestingFactor),b.gravity!=null&&(y.DEFAULT_GRAVITY_STRENGTH=g.DEFAULT_GRAVITY_STRENGTH=b.gravity),b.numIter!=null&&(y.MAX_ITERATIONS=g.MAX_ITERATIONS=b.numIter),b.gravityRange!=null&&(y.DEFAULT_GRAVITY_RANGE_FACTOR=g.DEFAULT_GRAVITY_RANGE_FACTOR=b.gravityRange),b.gravityCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_STRENGTH=g.DEFAULT_COMPOUND_GRAVITY_STRENGTH=b.gravityCompound),b.gravityRangeCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=g.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=b.gravityRangeCompound),b.initialEnergyOnIncremental!=null&&(y.DEFAULT_COOLING_FACTOR_INCREMENTAL=g.DEFAULT_COOLING_FACTOR_INCREMENTAL=b.initialEnergyOnIncremental),b.tilingCompareBy!=null&&(y.TILING_COMPARE_BY=b.tilingCompareBy),b.quality=="proof"?m.QUALITY=2:m.QUALITY=0,y.NODE_DIMENSIONS_INCLUDE_LABELS=g.NODE_DIMENSIONS_INCLUDE_LABELS=m.NODE_DIMENSIONS_INCLUDE_LABELS=b.nodeDimensionsIncludeLabels,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!b.randomize,y.ANIMATE=g.ANIMATE=m.ANIMATE=b.animate,y.TILE=b.tile,y.TILING_PADDING_VERTICAL=typeof b.tilingPaddingVertical=="function"?b.tilingPaddingVertical.call():b.tilingPaddingVertical,y.TILING_PADDING_HORIZONTAL=typeof b.tilingPaddingHorizontal=="function"?b.tilingPaddingHorizontal.call():b.tilingPaddingHorizontal,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!0,y.PURE_INCREMENTAL=!b.randomize,m.DEFAULT_UNIFORM_LEAF_NODE_SIZES=b.uniformNodeDimensions,b.step=="transformed"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!1),b.step=="enforced"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!1),b.step=="cose"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!0),b.step=="all"&&(b.randomize?y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!0),b.fixedNodeConstraint||b.alignmentConstraint||b.relativePlacementConstraint?y.TREE_REDUCTION_ON_INCREMENTAL=!1:y.TREE_REDUCTION_ON_INCREMENTAL=!0;var F=new h,P=F.newGraphManager();return O(P.addRoot(),u.getTopMostNodes(E),F,b),M(F,P,A),B(F,b),F.runLayout(),D},"coseLayout");a.exports={coseLayout:v}},212:(a,s,l)=>{var u=function(){function b(w,C){for(var T=0;T<C.length;T++){var E=C[T];E.enumerable=E.enumerable||!1,E.configurable=!0,"value"in E&&(E.writable=!0),Object.defineProperty(w,E.key,E)}}return o(b,"defineProperties"),function(w,C,T){return C&&b(w.prototype,C),T&&b(w,T),w}}();function h(b,w){if(!(b instanceof w))throw new TypeError("Cannot call a class as a function")}o(h,"_classCallCheck");var f=l(658),d=l(548),p=l(657),m=p.spectralLayout,g=l(816),y=g.coseLayout,v=Object.freeze({quality:"default",randomize:!0,animate:!0,animationDuration:1e3,animationEasing:void 0,fit:!0,padding:30,nodeDimensionsIncludeLabels:!1,uniformNodeDimensions:!1,packComponents:!0,step:"all",samplingType:!0,sampleSize:25,nodeSeparation:75,piTol:1e-7,nodeRepulsion:o(function(w){return 4500},"nodeRepulsion"),idealEdgeLength:o(function(w){return 50},"idealEdgeLength"),edgeElasticity:o(function(w){return .45},"edgeElasticity"),nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,tilingCompareBy:void 0,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.3,fixedNodeConstraint:void 0,alignmentConstraint:void 0,relativePlacementConstraint:void 0,ready:o(function(){},"ready"),stop:o(function(){},"stop")}),x=function(){function b(w){h(this,b),this.options=f({},v,w)}return o(b,"Layout"),u(b,[{key:"run",value:o(function(){var C=this,T=this.options,E=T.cy,A=T.eles,S=[],_=void 0,I=void 0,D=[],k=void 0,L=[];T.fixedNodeConstraint&&(!Array.isArray(T.fixedNodeConstraint)||T.fixedNodeConstraint.length==0)&&(T.fixedNodeConstraint=void 0),T.alignmentConstraint&&(T.alignmentConstraint.vertical&&(!Array.isArray(T.alignmentConstraint.vertical)||T.alignmentConstraint.vertical.length==0)&&(T.alignmentConstraint.vertical=void 0),T.alignmentConstraint.horizontal&&(!Array.isArray(T.alignmentConstraint.horizontal)||T.alignmentConstraint.horizontal.length==0)&&(T.alignmentConstraint.horizontal=void 0)),T.relativePlacementConstraint&&(!Array.isArray(T.relativePlacementConstraint)||T.relativePlacementConstraint.length==0)&&(T.relativePlacementConstraint=void 0);var R=T.fixedNodeConstraint||T.alignmentConstraint||T.relativePlacementConstraint;R&&(T.tile=!1,T.packComponents=!1);var O=void 0,M=!1;if(E.layoutUtilities&&T.packComponents&&(O=E.layoutUtilities("get"),O||(O=E.layoutUtilities()),M=!0),A.nodes().length>0)if(M){var P=d.getTopMostNodes(T.eles.nodes());if(k=d.connectComponents(E,T.eles,P),k.forEach(function(ce){var ae=ce.boundingBox();L.push({x:ae.x1+ae.w/2,y:ae.y1+ae.h/2})}),T.randomize&&k.forEach(function(ce){T.eles=ce,S.push(m(T))}),T.quality=="default"||T.quality=="proof"){var z=E.collection();if(T.tile){var $=new Map,H=[],Q=[],j=0,ie={nodeIndexes:$,xCoords:H,yCoords:Q},ne=[];if(k.forEach(function(ce,ae){ce.edges().length==0&&(ce.nodes().forEach(function(Oe,ge){z.merge(ce.nodes()[ge]),Oe.isParent()||(ie.nodeIndexes.set(ce.nodes()[ge].id(),j++),ie.xCoords.push(ce.nodes()[0].position().x),ie.yCoords.push(ce.nodes()[0].position().y))}),ne.push(ae))}),z.length>1){var le=z.boundingBox();L.push({x:le.x1+le.w/2,y:le.y1+le.h/2}),k.push(z),S.push(ie);for(var he=ne.length-1;he>=0;he--)k.splice(ne[he],1),S.splice(ne[he],1),L.splice(ne[he],1)}}k.forEach(function(ce,ae){T.eles=ce,D.push(y(T,S[ae])),d.relocateComponent(L[ae],D[ae],T)})}else k.forEach(function(ce,ae){d.relocateComponent(L[ae],S[ae],T)});var K=new Set;if(k.length>1){var X=[],te=A.filter(function(ce){return ce.css("display")=="none"});k.forEach(function(ce,ae){var Oe=void 0;if(T.quality=="draft"&&(Oe=S[ae].nodeIndexes),ce.nodes().not(te).length>0){var ge={};ge.edges=[],ge.nodes=[];var ze=void 0;ce.nodes().not(te).forEach(function(He){if(T.quality=="draft")if(!He.isParent())ze=Oe.get(He.id()),ge.nodes.push({x:S[ae].xCoords[ze]-He.boundingbox().w/2,y:S[ae].yCoords[ze]-He.boundingbox().h/2,width:He.boundingbox().w,height:He.boundingbox().h});else{var $e=d.calcBoundingBox(He,S[ae].xCoords,S[ae].yCoords,Oe);ge.nodes.push({x:$e.topLeftX,y:$e.topLeftY,width:$e.width,height:$e.height})}else D[ae][He.id()]&&ge.nodes.push({x:D[ae][He.id()].getLeft(),y:D[ae][He.id()].getTop(),width:D[ae][He.id()].getWidth(),height:D[ae][He.id()].getHeight()})}),ce.edges().forEach(function(He){var $e=He.source(),Re=He.target();if($e.css("display")!="none"&&Re.css("display")!="none")if(T.quality=="draft"){var Ie=Oe.get($e.id()),be=Oe.get(Re.id()),W=[],de=[];if($e.isParent()){var re=d.calcBoundingBox($e,S[ae].xCoords,S[ae].yCoords,Oe);W.push(re.topLeftX+re.width/2),W.push(re.topLeftY+re.height/2)}else W.push(S[ae].xCoords[Ie]),W.push(S[ae].yCoords[Ie]);if(Re.isParent()){var oe=d.calcBoundingBox(Re,S[ae].xCoords,S[ae].yCoords,Oe);de.push(oe.topLeftX+oe.width/2),de.push(oe.topLeftY+oe.height/2)}else de.push(S[ae].xCoords[be]),de.push(S[ae].yCoords[be]);ge.edges.push({startX:W[0],startY:W[1],endX:de[0],endY:de[1]})}else D[ae][$e.id()]&&D[ae][Re.id()]&&ge.edges.push({startX:D[ae][$e.id()].getCenterX(),startY:D[ae][$e.id()].getCenterY(),endX:D[ae][Re.id()].getCenterX(),endY:D[ae][Re.id()].getCenterY()})}),ge.nodes.length>0&&(X.push(ge),K.add(ae))}});var J=O.packComponents(X,T.randomize).shifts;if(T.quality=="draft")S.forEach(function(ce,ae){var Oe=ce.xCoords.map(function(ze){return ze+J[ae].dx}),ge=ce.yCoords.map(function(ze){return ze+J[ae].dy});ce.xCoords=Oe,ce.yCoords=ge});else{var se=0;K.forEach(function(ce){Object.keys(D[ce]).forEach(function(ae){var Oe=D[ce][ae];Oe.setCenter(Oe.getCenterX()+J[se].dx,Oe.getCenterY()+J[se].dy)}),se++})}}}else{var B=T.eles.boundingBox();if(L.push({x:B.x1+B.w/2,y:B.y1+B.h/2}),T.randomize){var F=m(T);S.push(F)}T.quality=="default"||T.quality=="proof"?(D.push(y(T,S[0])),d.relocateComponent(L[0],D[0],T)):d.relocateComponent(L[0],S[0],T)}var ue=o(function(ae,Oe){if(T.quality=="default"||T.quality=="proof"){typeof ae=="number"&&(ae=Oe);var ge=void 0,ze=void 0,He=ae.data("id");return D.forEach(function(Re){He in Re&&(ge={x:Re[He].getRect().getCenterX(),y:Re[He].getRect().getCenterY()},ze=Re[He])}),T.nodeDimensionsIncludeLabels&&(ze.labelWidth&&(ze.labelPosHorizontal=="left"?ge.x+=ze.labelWidth/2:ze.labelPosHorizontal=="right"&&(ge.x-=ze.labelWidth/2)),ze.labelHeight&&(ze.labelPosVertical=="top"?ge.y+=ze.labelHeight/2:ze.labelPosVertical=="bottom"&&(ge.y-=ze.labelHeight/2))),ge==null&&(ge={x:ae.position("x"),y:ae.position("y")}),{x:ge.x,y:ge.y}}else{var $e=void 0;return S.forEach(function(Re){var Ie=Re.nodeIndexes.get(ae.id());Ie!=null&&($e={x:Re.xCoords[Ie],y:Re.yCoords[Ie]})}),$e==null&&($e={x:ae.position("x"),y:ae.position("y")}),{x:$e.x,y:$e.y}}},"getPositions");if(T.quality=="default"||T.quality=="proof"||T.randomize){var Z=d.calcParentsWithoutChildren(E,A),Se=A.filter(function(ce){return ce.css("display")=="none"});T.eles=A.not(Se),A.nodes().not(":parent").not(Se).layoutPositions(C,T,ue),Z.length>0&&Z.forEach(function(ce){ce.position(ue(ce))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")},"run")}]),b}();a.exports=x},657:(a,s,l)=>{var u=l(548),h=l(140).layoutBase.Matrix,f=l(140).layoutBase.SVD,d=o(function(m){var g=m.cy,y=m.eles,v=y.nodes(),x=y.nodes(":parent"),b=new Map,w=new Map,C=new Map,T=[],E=[],A=[],S=[],_=[],I=[],D=[],k=[],L=void 0,R=void 0,O=1e8,M=1e-9,B=m.piTol,F=m.samplingType,P=m.nodeSeparation,z=void 0,$=o(function(){for(var xe=0,q=0,pe=!1;q<z;){xe=Math.floor(Math.random()*R),pe=!1;for(var ve=0;ve<q;ve++)if(S[ve]==xe){pe=!0;break}if(!pe)S[q]=xe,q++;else continue}},"randomSampleCR"),H=o(function(xe,q,pe){for(var ve=[],Pe=0,_e=0,we=0,Ve=void 0,De=[],qe=0,at=1,Rt=0;Rt<R;Rt++)De[Rt]=O;for(ve[_e]=xe,De[xe]=0;_e>=Pe;){we=ve[Pe++];for(var st=T[we],Ue=0;Ue<st.length;Ue++)Ve=w.get(st[Ue]),De[Ve]==O&&(De[Ve]=De[we]+1,ve[++_e]=Ve);I[we][q]=De[we]*P}if(pe){for(var ct=0;ct<R;ct++)I[ct][q]<_[ct]&&(_[ct]=I[ct][q]);for(var We=0;We<R;We++)_[We]>qe&&(qe=_[We],at=We)}return at},"BFS"),Q=o(function(xe){var q=void 0;if(xe){q=Math.floor(Math.random()*R),L=q;for(var ve=0;ve<R;ve++)_[ve]=O;for(var Pe=0;Pe<z;Pe++)S[Pe]=q,q=H(q,Pe,xe)}else{$();for(var pe=0;pe<z;pe++)H(S[pe],pe,xe,!1)}for(var _e=0;_e<R;_e++)for(var we=0;we<z;we++)I[_e][we]*=I[_e][we];for(var Ve=0;Ve<z;Ve++)D[Ve]=[];for(var De=0;De<z;De++)for(var qe=0;qe<z;qe++)D[De][qe]=I[S[qe]][De]},"allBFS"),j=o(function(){for(var xe=f.svd(D),q=xe.S,pe=xe.U,ve=xe.V,Pe=q[0]*q[0]*q[0],_e=[],we=0;we<z;we++){_e[we]=[];for(var Ve=0;Ve<z;Ve++)_e[we][Ve]=0,we==Ve&&(_e[we][Ve]=q[we]/(q[we]*q[we]+Pe/(q[we]*q[we])))}k=h.multMat(h.multMat(ve,_e),h.transpose(pe))},"sample"),ie=o(function(){for(var xe=void 0,q=void 0,pe=[],ve=[],Pe=[],_e=[],we=0;we<R;we++)pe[we]=Math.random(),ve[we]=Math.random();pe=h.normalize(pe),ve=h.normalize(ve);for(var Ve=0,De=M,qe=M,at=void 0;;){Ve++;for(var Rt=0;Rt<R;Rt++)Pe[Rt]=pe[Rt];if(pe=h.multGamma(h.multL(h.multGamma(Pe),I,k)),xe=h.dotProduct(Pe,pe),pe=h.normalize(pe),De=h.dotProduct(Pe,pe),at=Math.abs(De/qe),at<=1+B&&at>=1)break;qe=De}for(var st=0;st<R;st++)Pe[st]=pe[st];for(Ve=0,qe=M;;){Ve++;for(var Ue=0;Ue<R;Ue++)_e[Ue]=ve[Ue];if(_e=h.minusOp(_e,h.multCons(Pe,h.dotProduct(Pe,_e))),ve=h.multGamma(h.multL(h.multGamma(_e),I,k)),q=h.dotProduct(_e,ve),ve=h.normalize(ve),De=h.dotProduct(_e,ve),at=Math.abs(De/qe),at<=1+B&&at>=1)break;qe=De}for(var ct=0;ct<R;ct++)_e[ct]=ve[ct];E=h.multCons(Pe,Math.sqrt(Math.abs(xe))),A=h.multCons(_e,Math.sqrt(Math.abs(q)))},"powerIteration");u.connectComponents(g,y,u.getTopMostNodes(v),b),x.forEach(function(V){u.connectComponents(g,y,u.getTopMostNodes(V.descendants().intersection(y)),b)});for(var ne=0,le=0;le<v.length;le++)v[le].isParent()||w.set(v[le].id(),ne++);var he=!0,K=!1,X=void 0;try{for(var te=b.keys()[Symbol.iterator](),J;!(he=(J=te.next()).done);he=!0){var se=J.value;w.set(se,ne++)}}catch(V){K=!0,X=V}finally{try{!he&&te.return&&te.return()}finally{if(K)throw X}}for(var ue=0;ue<w.size;ue++)T[ue]=[];x.forEach(function(V){for(var xe=V.children().intersection(y);xe.nodes(":childless").length==0;)xe=xe.nodes()[0].children().intersection(y);var q=0,pe=xe.nodes(":childless")[0].connectedEdges().length;xe.nodes(":childless").forEach(function(ve,Pe){ve.connectedEdges().length<pe&&(pe=ve.connectedEdges().length,q=Pe)}),C.set(V.id(),xe.nodes(":childless")[q].id())}),v.forEach(function(V){var xe=void 0;V.isParent()?xe=w.get(C.get(V.id())):xe=w.get(V.id()),V.neighborhood().nodes().forEach(function(q){y.intersection(V.edgesWith(q)).length>0&&(q.isParent()?T[xe].push(C.get(q.id())):T[xe].push(q.id()))})});var Z=o(function(xe){var q=w.get(xe),pe=void 0;b.get(xe).forEach(function(ve){g.getElementById(ve).isParent()?pe=C.get(ve):pe=ve,T[q].push(pe),T[w.get(pe)].push(xe)})},"_loop"),Se=!0,ce=!1,ae=void 0;try{for(var Oe=b.keys()[Symbol.iterator](),ge;!(Se=(ge=Oe.next()).done);Se=!0){var ze=ge.value;Z(ze)}}catch(V){ce=!0,ae=V}finally{try{!Se&&Oe.return&&Oe.return()}finally{if(ce)throw ae}}R=w.size;var He=void 0;if(R>2){z=R<m.sampleSize?R:m.sampleSize;for(var $e=0;$e<R;$e++)I[$e]=[];for(var Re=0;Re<z;Re++)k[Re]=[];return m.quality=="draft"||m.step=="all"?(Q(F),j(),ie(),He={nodeIndexes:w,xCoords:E,yCoords:A}):(w.forEach(function(V,xe){E.push(g.getElementById(xe).position("x")),A.push(g.getElementById(xe).position("y"))}),He={nodeIndexes:w,xCoords:E,yCoords:A}),He}else{var Ie=w.keys(),be=g.getElementById(Ie.next().value),W=be.position(),de=be.outerWidth();if(E.push(W.x),A.push(W.y),R==2){var re=g.getElementById(Ie.next().value),oe=re.outerWidth();E.push(W.x+de/2+oe/2+m.idealEdgeLength),A.push(W.y)}return He={nodeIndexes:w,xCoords:E,yCoords:A},He}},"spectralLayout");a.exports={spectralLayout:d}},579:(a,s,l)=>{var u=l(212),h=o(function(d){d&&d("layout","fcose",u)},"register");typeof cytoscape<"u"&&h(cytoscape),a.exports=h},140:a=>{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(579);return i})()})});var dy,Zp,yF=N(()=>{"use strict";tu();dy=o(t=>`<g><rect width="80" height="80" style="fill: #087ebf; stroke-width: 0px;"/>${t}</g>`,"wrapIcon"),Zp={prefix:"mermaid-architecture",height:80,width:80,icons:{database:{body:dy('<path id="b" data-name="4" d="m20,57.86c0,3.94,8.95,7.14,20,7.14s20-3.2,20-7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path id="c" data-name="3" d="m20,45.95c0,3.94,8.95,7.14,20,7.14s20-3.2,20-7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path id="d" data-name="2" d="m20,34.05c0,3.94,8.95,7.14,20,7.14s20-3.2,20-7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse id="e" data-name="1" cx="40" cy="22.14" rx="20" ry="7.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="20" y1="57.86" x2="20" y2="22.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="60" y1="57.86" x2="60" y2="22.14" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/>')},server:{body:dy('<rect x="17.5" y="17.5" width="45" height="45" rx="2" ry="2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="17.5" y1="32.5" x2="62.5" y2="32.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="17.5" y1="47.5" x2="62.5" y2="47.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><g><path d="m56.25,25c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: #fff; stroke-width: 0px;"/><path d="m56.25,25c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10;"/></g><g><path d="m56.25,40c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: #fff; stroke-width: 0px;"/><path d="m56.25,40c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10;"/></g><g><path d="m56.25,55c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: #fff; stroke-width: 0px;"/><path d="m56.25,55c0,.27-.45.5-1,.5h-10.5c-.55,0-1-.23-1-.5s.45-.5,1-.5h10.5c.55,0,1,.23,1,.5Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10;"/></g><g><circle cx="32.5" cy="25" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="27.5" cy="25" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="22.5" cy="25" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/></g><g><circle cx="32.5" cy="40" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="27.5" cy="40" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="22.5" cy="40" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/></g><g><circle cx="32.5" cy="55" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="27.5" cy="55" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/><circle cx="22.5" cy="55" r=".75" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10;"/></g>')},disk:{body:dy('<rect x="20" y="15" width="40" height="50" rx="1" ry="1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="24" cy="19.17" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="56" cy="19.17" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="24" cy="60.83" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="56" cy="60.83" rx=".8" ry=".83" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="40" cy="33.75" rx="14" ry="14.58" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><ellipse cx="40" cy="33.75" rx="4" ry="4.17" style="fill: #fff; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path d="m37.51,42.52l-4.83,13.22c-.26.71-1.1,1.02-1.76.64l-4.18-2.42c-.66-.38-.81-1.26-.33-1.84l9.01-10.8c.88-1.05,2.56-.08,2.09,1.2Z" style="fill: #fff; stroke-width: 0px;"/>')},internet:{body:dy('<circle cx="40" cy="40" r="22.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="40" y1="17.5" x2="40" y2="62.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="17.5" y1="40" x2="62.5" y2="40" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path d="m39.99,17.51c-15.28,11.1-15.28,33.88,0,44.98" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><path d="m40.01,17.51c15.28,11.1,15.28,33.88,0,44.98" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="19.75" y1="30.1" x2="60.25" y2="30.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/><line x1="19.75" y1="49.9" x2="60.25" y2="49.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/>')},cloud:{body:dy('<path d="m65,47.5c0,2.76-2.24,5-5,5H20c-2.76,0-5-2.24-5-5,0-1.87,1.03-3.51,2.56-4.36-.04-.21-.06-.42-.06-.64,0-2.6,2.48-4.74,5.65-4.97,1.65-4.51,6.34-7.76,11.85-7.76.86,0,1.69.08,2.5.23,2.09-1.57,4.69-2.5,7.5-2.5,6.1,0,11.19,4.38,12.28,10.17,2.14.56,3.72,2.51,3.72,4.83,0,.03,0,.07-.01.1,2.29.46,4.01,2.48,4.01,4.9Z" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 2px;"/>')},unknown:OC,blank:{body:dy("")}}}});var Bve,Fve,$ve,zve,Gve=N(()=>{"use strict";tu();zt();to();w4();yF();oC();Bve=o(async function(t,e){let r=Li("padding"),n=Li("iconSize"),i=n/2,a=n/6,s=a/2;await Promise.all(e.edges().map(async l=>{let{source:u,sourceDir:h,sourceArrow:f,sourceGroup:d,target:p,targetDir:m,targetArrow:g,targetGroup:y,label:v}=sC(l),{x,y:b}=l[0].sourceEndpoint(),{x:w,y:C}=l[0].midpoint(),{x:T,y:E}=l[0].targetEndpoint(),A=r+4;if(d&&(Ha(h)?x+=h==="L"?-A:A:b+=h==="T"?-A:A+18),y&&(Ha(m)?T+=m==="L"?-A:A:E+=m==="T"?-A:A+18),!d&&Qp.getNode(u)?.type==="junction"&&(Ha(h)?x+=h==="L"?i:-i:b+=h==="T"?i:-i),!y&&Qp.getNode(p)?.type==="junction"&&(Ha(m)?T+=m==="L"?i:-i:E+=m==="T"?i:-i),l[0]._private.rscratch){let S=t.insert("g");if(S.insert("path").attr("d",`M ${x},${b} L ${w},${C} L${T},${E} `).attr("class","edge"),f){let _=Ha(h)?v4[h](x,a):x-s,I=Zc(h)?v4[h](b,a):b-s;S.insert("polygon").attr("points",cF[h](a)).attr("transform",`translate(${_},${I})`).attr("class","arrow")}if(g){let _=Ha(m)?v4[m](T,a):T-s,I=Zc(m)?v4[m](E,a):E-s;S.insert("polygon").attr("points",cF[m](a)).attr("transform",`translate(${_},${I})`).attr("class","arrow")}if(v){let _=x4(h,m)?"XY":Ha(h)?"X":"Y",I=0;_==="X"?I=Math.abs(x-T):_==="Y"?I=Math.abs(b-E)/1.5:I=Math.abs(x-T)/2;let D=S.append("g");if(await Hn(D,v,{useHtmlLabels:!1,width:I,classes:"architecture-service-label"},me()),D.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),_==="X")D.attr("transform","translate("+w+", "+C+")");else if(_==="Y")D.attr("transform","translate("+w+", "+C+") rotate(-90)");else if(_==="XY"){let k=b4(h,m);if(k&&Sve(k)){let L=D.node().getBoundingClientRect(),[R,O]=Ave(k);D.attr("dominant-baseline","auto").attr("transform",`rotate(${-1*R*O*45})`);let M=D.node().getBoundingClientRect();D.attr("transform",`
2557 + translate(${w}, ${C-L.height/2})
2558 + translate(${R*M.width/2}, ${O*M.height/2})
2559 + rotate(${-1*R*O*45}, 0, ${L.height/2})
2560 + `)}}}}}))},"drawEdges"),Fve=o(async function(t,e){let n=Li("padding")*.75,i=Li("fontSize"),s=Li("iconSize")/2;await Promise.all(e.nodes().map(async l=>{let u=Ff(l);if(u.type==="group"){let{h,w:f,x1:d,y1:p}=l.boundingBox();t.append("rect").attr("x",d+s).attr("y",p+s).attr("width",f).attr("height",h).attr("class","node-bkg");let m=t.append("g"),g=d,y=p;if(u.icon){let v=m.append("g");v.html(`<g>${await wo(u.icon,{height:n,width:n,fallbackPrefix:Zp.prefix})}</g>`),v.attr("transform","translate("+(g+s+1)+", "+(y+s+1)+")"),g+=n,y+=i/2-1-2}if(u.label){let v=m.append("g");await Hn(v,u.label,{useHtmlLabels:!1,width:f,classes:"architecture-service-label"},me()),v.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","start").attr("text-anchor","start"),v.attr("transform","translate("+(g+s+4)+", "+(y+s+2)+")")}}}))},"drawGroups"),$ve=o(async function(t,e,r){for(let n of r){let i=e.append("g"),a=Li("iconSize");if(n.title){let h=i.append("g");await Hn(h,n.title,{useHtmlLabels:!1,width:a*1.5,classes:"architecture-service-label"},me()),h.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),h.attr("transform","translate("+a/2+", "+a+")")}let s=i.append("g");if(n.icon)s.html(`<g>${await wo(n.icon,{height:a,width:a,fallbackPrefix:Zp.prefix})}</g>`);else if(n.iconText){s.html(`<g>${await wo("blank",{height:a,width:a,fallbackPrefix:Zp.prefix})}</g>`);let d=s.append("g").append("foreignObject").attr("width",a).attr("height",a).append("div").attr("class","node-icon-text").attr("style",`height: ${a}px;`).append("div").html(n.iconText),p=parseInt(window.getComputedStyle(d.node(),null).getPropertyValue("font-size").replace(/\D/g,""))??16;d.attr("style",`-webkit-line-clamp: ${Math.floor((a-2)/p)};`)}else s.append("path").attr("class","node-bkg").attr("id","node-"+n.id).attr("d",`M0 ${a} v${-a} q0,-5 5,-5 h${a} q5,0 5,5 v${a} H0 Z`);i.attr("class","architecture-service");let{width:l,height:u}=i._groups[0][0].getBBox();n.width=l,n.height=u,t.setElementForId(n.id,i)}return 0},"drawServices"),zve=o(function(t,e,r){r.forEach(n=>{let i=e.append("g"),a=Li("iconSize");i.append("g").append("rect").attr("id","node-"+n.id).attr("fill-opacity","0").attr("width",a).attr("height",a),i.attr("class","architecture-junction");let{width:l,height:u}=i._groups[0][0].getBBox();i.width=l,i.height=u,t.setElementForId(n.id,i)})},"drawJunctions")});function Srt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"service",id:r.id,icon:r.icon,label:r.title,parent:r.in,width:Li("iconSize"),height:Li("iconSize")},classes:"node-service"})})}function Crt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"junction",id:r.id,parent:r.in,width:Li("iconSize"),height:Li("iconSize")},classes:"node-junction"})})}function Art(t,e){e.nodes().map(r=>{let n=Ff(r);if(n.type==="group")return;n.x=r.position().x,n.y=r.position().y,t.getElementById(n.id).attr("transform","translate("+(n.x||0)+","+(n.y||0)+")")})}function _rt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"group",id:r.id,icon:r.icon,label:r.title,parent:r.in},classes:"node-group"})})}function Drt(t,e){t.forEach(r=>{let{lhsId:n,rhsId:i,lhsInto:a,lhsGroup:s,rhsInto:l,lhsDir:u,rhsDir:h,rhsGroup:f,title:d}=r,p=x4(r.lhsDir,r.rhsDir)?"segments":"straight",m={id:`${n}-${i}`,label:d,source:n,sourceDir:u,sourceArrow:a,sourceGroup:s,sourceEndpoint:u==="L"?"0 50%":u==="R"?"100% 50%":u==="T"?"50% 0":"50% 100%",target:i,targetDir:h,targetArrow:l,targetGroup:f,targetEndpoint:h==="L"?"0 50%":h==="R"?"100% 50%":h==="T"?"50% 0":"50% 100%"};e.add({group:"edges",data:m,classes:p})})}function Lrt(t,e,r){let n=o((l,u)=>Object.entries(l).reduce((h,[f,d])=>{let p=0,m=Object.entries(d);if(m.length===1)return h[f]=m[0][1],h;for(let g=0;g<m.length-1;g++)for(let y=g+1;y<m.length;y++){let[v,x]=m[g],[b,w]=m[y];if(r[v]?.[b]===u)h[f]??=[],h[f]=[...h[f],...x,...w];else if(v==="default"||b==="default")h[f]??=[],h[f]=[...h[f],...x,...w];else{let T=`${f}-${p++}`;h[T]=x;let E=`${f}-${p++}`;h[E]=w}}return h},{}),"flattenAlignments"),i=e.map(l=>{let u={},h={};return Object.entries(l).forEach(([f,[d,p]])=>{let m=t.getNode(f)?.in??"default";u[p]??={},u[p][m]??=[],u[p][m].push(f),h[d]??={},h[d][m]??=[],h[d][m].push(f)}),{horiz:Object.values(n(u,"horizontal")).filter(f=>f.length>1),vert:Object.values(n(h,"vertical")).filter(f=>f.length>1)}}),[a,s]=i.reduce(([l,u],{horiz:h,vert:f})=>[[...l,...h],[...u,...f]],[[],[]]);return{horizontal:a,vertical:s}}function Rrt(t){let e=[],r=o(i=>`${i[0]},${i[1]}`,"posToStr"),n=o(i=>i.split(",").map(a=>parseInt(a)),"strToPos");return t.forEach(i=>{let a=Object.fromEntries(Object.entries(i).map(([h,f])=>[r(f),h])),s=[r([0,0])],l={},u={L:[-1,0],R:[1,0],T:[0,1],B:[0,-1]};for(;s.length>0;){let h=s.shift();if(h){l[h]=1;let f=a[h];if(f){let d=n(h);Object.entries(u).forEach(([p,m])=>{let g=r([d[0]+m[0],d[1]+m[1]]),y=a[g];y&&!l[g]&&(s.push(g),e.push({[lF[p]]:y,[lF[Eve(p)]]:f,gap:1.5*Li("iconSize")}))})}}}}),e}function Nrt(t,e,r,n,i,{spatialMaps:a,groupAlignments:s}){return new Promise(l=>{let u=Ge("body").append("div").attr("id","cy").attr("style","display:none"),h=rl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"straight",label:"data(label)","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"edge.segments",style:{"curve-style":"segments","segment-weights":"0","segment-distances":[.5],"edge-distances":"endpoints","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"node",style:{"compound-sizing-wrt-labels":"include"}},{selector:"node[label]",style:{"text-valign":"bottom","text-halign":"center","font-size":`${Li("fontSize")}px`}},{selector:".node-service",style:{label:"data(label)",width:"data(width)",height:"data(height)"}},{selector:".node-junction",style:{width:"data(width)",height:"data(height)"}},{selector:".node-group",style:{padding:`${Li("padding")}px`}}]});u.remove(),_rt(r,h),Srt(t,h),Crt(e,h),Drt(n,h);let f=Lrt(i,a,s),d=Rrt(a),p=h.layout({name:"fcose",quality:"proof",styleEnabled:!1,animate:!1,nodeDimensionsIncludeLabels:!1,idealEdgeLength(m){let[g,y]=m.connectedNodes(),{parent:v}=Ff(g),{parent:x}=Ff(y);return v===x?1.5*Li("iconSize"):.5*Li("iconSize")},edgeElasticity(m){let[g,y]=m.connectedNodes(),{parent:v}=Ff(g),{parent:x}=Ff(y);return v===x?.45:.001},alignmentConstraint:f,relativePlacementConstraint:d});p.one("layoutstop",()=>{function m(g,y,v,x){let b,w,{x:C,y:T}=g,{x:E,y:A}=y;w=(x-T+(C-v)*(T-A)/(C-E))/Math.sqrt(1+Math.pow((T-A)/(C-E),2)),b=Math.sqrt(Math.pow(x-T,2)+Math.pow(v-C,2)-Math.pow(w,2));let S=Math.sqrt(Math.pow(E-C,2)+Math.pow(A-T,2));b=b/S;let _=(E-C)*(x-T)-(A-T)*(v-C);switch(!0){case _>=0:_=1;break;case _<0:_=-1;break}let I=(E-C)*(v-C)+(A-T)*(x-T);switch(!0){case I>=0:I=1;break;case I<0:I=-1;break}return w=Math.abs(w)*_,b=b*I,{distances:w,weights:b}}o(m,"getSegmentWeights"),h.startBatch();for(let g of Object.values(h.edges()))if(g.data?.()){let{x:y,y:v}=g.source().position(),{x,y:b}=g.target().position();if(y!==x&&v!==b){let w=g.sourceEndpoint(),C=g.targetEndpoint(),{sourceDir:T}=sC(g),[E,A]=Zc(T)?[w.x,C.y]:[C.x,w.y],{weights:S,distances:_}=m(w,C,E,A);g.style("segment-distances",_),g.style("segment-weights",S)}}h.endBatch(),p.run()}),p.run(),h.ready(m=>{Y.info("Ready",m),l(h)})})}var Vve,Mrt,Uve,Hve=N(()=>{"use strict";tu();kB();Vve=Sa(Pve(),1);dr();vt();Vc();Ei();w4();yF();oC();Gve();P4([{name:Zp.prefix,icons:Zp}]);rl.use(Vve.default);o(Srt,"addServices");o(Crt,"addJunctions");o(Art,"positionNodes");o(_rt,"addGroups");o(Drt,"addEdges");o(Lrt,"getAlignments");o(Rrt,"getRelativeConstraints");o(Nrt,"layoutArchitecture");Mrt=o(async(t,e,r,n)=>{let i=n.db,a=i.getServices(),s=i.getJunctions(),l=i.getGroups(),u=i.getEdges(),h=i.getDataStructures(),f=sa(e),d=f.append("g");d.attr("class","architecture-edges");let p=f.append("g");p.attr("class","architecture-services");let m=f.append("g");m.attr("class","architecture-groups"),await $ve(i,p,a),zve(i,p,s);let g=await Nrt(a,s,l,u,i,h);await Bve(d,g),await Fve(m,g),Art(i,g),Ao(void 0,f,Li("padding"),Li("useMaxWidth"))},"draw"),Uve={draw:Mrt}});var Wve={};hr(Wve,{diagram:()=>Irt});var Irt,qve=N(()=>{"use strict";Mve();w4();Ove();Hve();Irt={parser:Nve,db:Qp,renderer:Uve,styles:Ive}});var bnt={};hr(bnt,{default:()=>xnt});tu();PC();Xf();var YX="c4",PCe=o(t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),"detector"),BCe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(qX(),WX));return{id:YX,diagram:t}},"loader"),FCe={id:YX,detector:PCe,loader:BCe},XX=FCe;var Xie="flowchart",xOe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-wrapper"||e?.flowchart?.defaultRenderer==="elk"?!1:/^\s*graph/.test(t),"detector"),bOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ak(),ik));return{id:Xie,diagram:t}},"loader"),wOe={id:Xie,detector:xOe,loader:bOe},jie=wOe;var Kie="flowchart-v2",TOe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-d3"?!1:(e?.flowchart?.defaultRenderer==="elk"&&(e.layout="elk"),/^\s*graph/.test(t)&&e?.flowchart?.defaultRenderer==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)),"detector"),kOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ak(),ik));return{id:Kie,diagram:t}},"loader"),EOe={id:Kie,detector:TOe,loader:kOe},Qie=EOe;var sae="er",DOe=o(t=>/^\s*erDiagram/.test(t),"detector"),LOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(aae(),iae));return{id:sae,diagram:t}},"loader"),ROe={id:sae,detector:DOe,loader:LOe},oae=ROe;var uue="gitGraph",tze=o(t=>/^\s*gitGraph/.test(t),"detector"),rze=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(cue(),lue));return{id:uue,diagram:t}},"loader"),nze={id:uue,detector:tze,loader:rze},hue=nze;var Gue="gantt",Hze=o(t=>/^\s*gantt/.test(t),"detector"),Wze=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(zue(),$ue));return{id:Gue,diagram:t}},"loader"),qze={id:Gue,detector:Hze,loader:Wze},Vue=qze;var Que="info",Zze=o(t=>/^\s*info/.test(t),"detector"),Jze=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Kue(),jue));return{id:Que,diagram:t}},"loader"),Zue={id:Que,detector:Zze,loader:Jze};var lhe="pie",fGe=o(t=>/^\s*pie/.test(t),"detector"),dGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ohe(),she));return{id:lhe,diagram:t}},"loader"),che={id:lhe,detector:fGe,loader:dGe};var The="quadrantChart",RGe=o(t=>/^\s*quadrantChart/.test(t),"detector"),NGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(whe(),bhe));return{id:The,diagram:t}},"loader"),MGe={id:The,detector:RGe,loader:NGe},khe=MGe;var Khe="xychart",jGe=o(t=>/^\s*xychart-beta/.test(t),"detector"),KGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(jhe(),Xhe));return{id:Khe,diagram:t}},"loader"),QGe={id:Khe,detector:jGe,loader:KGe},Qhe=QGe;var sfe="requirement",tVe=o(t=>/^\s*requirement(Diagram)?/.test(t),"detector"),rVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(afe(),ife));return{id:sfe,diagram:t}},"loader"),nVe={id:sfe,detector:tVe,loader:rVe},ofe=nVe;var Afe="sequence",zVe=o(t=>/^\s*sequenceDiagram/.test(t),"detector"),GVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Cfe(),Sfe));return{id:Afe,diagram:t}},"loader"),VVe={id:Afe,detector:zVe,loader:GVe},_fe=VVe;var Ife="class",XVe=o((t,e)=>e?.class?.defaultRenderer==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t),"detector"),jVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Mfe(),Nfe));return{id:Ife,diagram:t}},"loader"),KVe={id:Ife,detector:XVe,loader:jVe},Ofe=KVe;var Ffe="classDiagram",ZVe=o((t,e)=>/^\s*classDiagram/.test(t)&&e?.class?.defaultRenderer==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t),"detector"),JVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Bfe(),Pfe));return{id:Ffe,diagram:t}},"loader"),eUe={id:Ffe,detector:ZVe,loader:JVe},$fe=eUe;var Ede="state",LUe=o((t,e)=>e?.state?.defaultRenderer==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t),"detector"),RUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(kde(),Tde));return{id:Ede,diagram:t}},"loader"),NUe={id:Ede,detector:LUe,loader:RUe},Sde=NUe;var _de="stateDiagram",IUe=o((t,e)=>!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&e?.state?.defaultRenderer==="dagre-wrapper"),"detector"),OUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Ade(),Cde));return{id:_de,diagram:t}},"loader"),PUe={id:_de,detector:IUe,loader:OUe},Dde=PUe;var Wde="journey",nHe=o(t=>/^\s*journey/.test(t),"detector"),iHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Hde(),Ude));return{id:Wde,diagram:t}},"loader"),aHe={id:Wde,detector:nHe,loader:iHe},qde=aHe;vt();Vc();Ei();var sHe=o((t,e,r)=>{Y.debug(`rendering svg for syntax error
2561 +`);let n=sa(e),i=n.append("g");n.attr("viewBox","0 0 2412 512"),vn(n,100,512,!0),i.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),i.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),i.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),i.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),i.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),i.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),i.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),i.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),fP={draw:sHe},Yde=fP;var oHe={db:{},renderer:fP,parser:{parse:o(()=>{},"parse")}},Xde=oHe;var jde="flowchart-elk",lHe=o((t,e={})=>/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&e?.flowchart?.defaultRenderer==="elk"?(e.layout="elk",!0):!1,"detector"),cHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ak(),ik));return{id:jde,diagram:t}},"loader"),uHe={id:jde,detector:lHe,loader:cHe},Kde=uHe;var Tpe="timeline",DHe=o(t=>/^\s*timeline/.test(t),"detector"),LHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(wpe(),bpe));return{id:Tpe,diagram:t}},"loader"),RHe={id:Tpe,detector:DHe,loader:LHe},kpe=RHe;var e1e="mindmap",cJe=o(t=>/^\s*mindmap/.test(t),"detector"),uJe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Jge(),Zge));return{id:e1e,diagram:t}},"loader"),hJe={id:e1e,detector:cJe,loader:uJe},t1e=hJe;var d1e="kanban",AJe=o(t=>/^\s*kanban/.test(t),"detector"),_Je=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(f1e(),h1e));return{id:d1e,diagram:t}},"loader"),DJe={id:d1e,detector:AJe,loader:_Je},p1e=DJe;var j1e="sankey",ZJe=o(t=>/^\s*sankey-beta/.test(t),"detector"),JJe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(X1e(),Y1e));return{id:j1e,diagram:t}},"loader"),eet={id:j1e,detector:ZJe,loader:JJe},K1e=eet;var sye="packet",pet=o(t=>/^\s*packet-beta/.test(t),"detector"),met=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(aye(),iye));return{id:sye,diagram:t}},"loader"),oye={id:sye,detector:pet,loader:met};var vye="radar",Fet=o(t=>/^\s*radar-beta/.test(t),"detector"),$et=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(yye(),gye));return{id:vye,diagram:t}},"loader"),xye={id:vye,detector:Fet,loader:$et};var Tve="block",srt=o(t=>/^\s*block-beta/.test(t),"detector"),ort=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(wve(),bve));return{id:Tve,diagram:t}},"loader"),lrt={id:Tve,detector:srt,loader:ort},kve=lrt;var Yve="architecture",Ort=o(t=>/^\s*architecture/.test(t),"detector"),Prt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(qve(),Wve));return{id:Yve,diagram:t}},"loader"),Brt={id:Yve,detector:Ort,loader:Prt},Xve=Brt;Xf();zt();var jve=!1,py=o(()=>{jve||(jve=!0,ad("error",Xde,t=>t.toLowerCase().trim()==="error"),ad("---",{db:{clear:o(()=>{},"clear")},styles:{},renderer:{draw:o(()=>{},"draw")},parser:{parse:o(()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")},"parse")},init:o(()=>null,"init")},t=>t.toLowerCase().trimStart().startsWith("---")),z4(XX,p1e,$fe,Ofe,oae,Vue,Zue,che,ofe,_fe,Kde,Qie,jie,t1e,kpe,hue,Dde,Sde,qde,khe,K1e,oye,Qhe,kve,Xve,xye))},"addDiagrams");vt();Xf();zt();var Kve=o(async()=>{Y.debug("Loading registered diagrams");let e=(await Promise.allSettled(Object.entries(Yf).map(async([r,{detector:n,loader:i}])=>{if(i)try{jy(r)}catch{try{let{diagram:a,id:s}=await i();ad(s,a,n)}catch(a){throw Y.error(`Failed to load external diagram with key ${r}. Removing from detectors.`),delete Yf[r],a}}}))).filter(r=>r.status==="rejected");if(e.length>0){Y.error(`Failed to load ${e.length} external diagrams`);for(let r of e)Y.error(r);throw new Error(`Failed to load ${e.length} external diagrams`)}},"loadRegisteredDiagrams");vt();dr();var lC="comm",cC="rule",uC="decl";var Qve="@import";var Zve="@namespace",Jve="@keyframes";var e2e="@layer";var vF=Math.abs,S4=String.fromCharCode;function hC(t){return t.trim()}o(hC,"trim");function C4(t,e,r){return t.replace(e,r)}o(C4,"replace");function t2e(t,e,r){return t.indexOf(e,r)}o(t2e,"indexof");function $f(t,e){return t.charCodeAt(e)|0}o($f,"charat");function zf(t,e,r){return t.slice(e,r)}o(zf,"substr");function vo(t){return t.length}o(vo,"strlen");function r2e(t){return t.length}o(r2e,"sizeof");function my(t,e){return e.push(t),t}o(my,"append");var fC=1,gy=1,n2e=0,il=0,Ri=0,vy="";function dC(t,e,r,n,i,a,s,l){return{value:t,root:e,parent:r,type:n,props:i,children:a,line:fC,column:gy,length:s,return:"",siblings:l}}o(dC,"node");function i2e(){return Ri}o(i2e,"char");function a2e(){return Ri=il>0?$f(vy,--il):0,gy--,Ri===10&&(gy=1,fC--),Ri}o(a2e,"prev");function al(){return Ri=il<n2e?$f(vy,il++):0,gy++,Ri===10&&(gy=1,fC++),Ri}o(al,"next");function rh(){return $f(vy,il)}o(rh,"peek");function A4(){return il}o(A4,"caret");function pC(t,e){return zf(vy,t,e)}o(pC,"slice");function yy(t){switch(t){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}o(yy,"token");function s2e(t){return fC=gy=1,n2e=vo(vy=t),il=0,[]}o(s2e,"alloc");function o2e(t){return vy="",t}o(o2e,"dealloc");function mC(t){return hC(pC(il-1,xF(t===91?t+2:t===40?t+1:t)))}o(mC,"delimit");function l2e(t){for(;(Ri=rh())&&Ri<33;)al();return yy(t)>2||yy(Ri)>3?"":" "}o(l2e,"whitespace");function c2e(t,e){for(;--e&&al()&&!(Ri<48||Ri>102||Ri>57&&Ri<65||Ri>70&&Ri<97););return pC(t,A4()+(e<6&&rh()==32&&al()==32))}o(c2e,"escaping");function xF(t){for(;al();)switch(Ri){case t:return il;case 34:case 39:t!==34&&t!==39&&xF(Ri);break;case 40:t===41&&xF(t);break;case 92:al();break}return il}o(xF,"delimiter");function u2e(t,e){for(;al()&&t+Ri!==57;)if(t+Ri===84&&rh()===47)break;return"/*"+pC(e,il-1)+"*"+S4(t===47?t:al())}o(u2e,"commenter");function h2e(t){for(;!yy(rh());)al();return pC(t,il)}o(h2e,"identifier");function p2e(t){return o2e(gC("",null,null,null,[""],t=s2e(t),0,[0],t))}o(p2e,"compile");function gC(t,e,r,n,i,a,s,l,u){for(var h=0,f=0,d=s,p=0,m=0,g=0,y=1,v=1,x=1,b=0,w="",C=i,T=a,E=n,A=w;v;)switch(g=b,b=al()){case 40:if(g!=108&&$f(A,d-1)==58){t2e(A+=C4(mC(b),"&","&\f"),"&\f",vF(h?l[h-1]:0))!=-1&&(x=-1);break}case 34:case 39:case 91:A+=mC(b);break;case 9:case 10:case 13:case 32:A+=l2e(g);break;case 92:A+=c2e(A4()-1,7);continue;case 47:switch(rh()){case 42:case 47:my(Frt(u2e(al(),A4()),e,r,u),u),(yy(g||1)==5||yy(rh()||1)==5)&&vo(A)&&zf(A,-1,void 0)!==" "&&(A+=" ");break;default:A+="/"}break;case 123*y:l[h++]=vo(A)*x;case 125*y:case 59:case 0:switch(b){case 0:case 125:v=0;case 59+f:x==-1&&(A=C4(A,/\f/g,"")),m>0&&(vo(A)-d||y===0&&g===47)&&my(m>32?d2e(A+";",n,r,d-1,u):d2e(C4(A," ","")+";",n,r,d-2,u),u);break;case 59:A+=";";default:if(my(E=f2e(A,e,r,h,f,i,l,w,C=[],T=[],d,a),a),b===123)if(f===0)gC(A,e,E,E,C,a,d,l,T);else{switch(p){case 99:if($f(A,3)===110)break;case 108:if($f(A,2)===97)break;default:f=0;case 100:case 109:case 115:}f?gC(t,E,E,n&&my(f2e(t,E,E,0,0,i,l,w,i,C=[],d,T),T),i,T,d,l,n?C:T):gC(A,E,E,E,[""],T,0,l,T)}}h=f=m=0,y=x=1,w=A="",d=s;break;case 58:d=1+vo(A),m=g;default:if(y<1){if(b==123)--y;else if(b==125&&y++==0&&a2e()==125)continue}switch(A+=S4(b),b*y){case 38:x=f>0?1:(A+="\f",-1);break;case 44:l[h++]=(vo(A)-1)*x,x=1;break;case 64:rh()===45&&(A+=mC(al())),p=rh(),f=d=vo(w=A+=h2e(A4())),b++;break;case 45:g===45&&vo(A)==2&&(y=0)}}return a}o(gC,"parse");function f2e(t,e,r,n,i,a,s,l,u,h,f,d){for(var p=i-1,m=i===0?a:[""],g=r2e(m),y=0,v=0,x=0;y<n;++y)for(var b=0,w=zf(t,p+1,p=vF(v=s[y])),C=t;b<g;++b)(C=hC(v>0?m[b]+" "+w:C4(w,/&\f/g,m[b])))&&(u[x++]=C);return dC(t,e,r,i===0?cC:l,u,h,f,d)}o(f2e,"ruleset");function Frt(t,e,r,n){return dC(t,e,r,lC,S4(i2e()),zf(t,2,-2),0,n)}o(Frt,"comment");function d2e(t,e,r,n,i){return dC(t,e,r,uC,zf(t,0,n),zf(t,n+1,-1),n,i)}o(d2e,"declaration");function yC(t,e){for(var r="",n=0;n<t.length;n++)r+=e(t[n],n,t,e)||"";return r}o(yC,"serialize");function m2e(t,e,r,n){switch(t.type){case e2e:if(t.children.length)break;case Qve:case Zve:case uC:return t.return=t.return||t.value;case lC:return"";case Jve:return t.return=t.value+"{"+yC(t.children,n)+"}";case cC:if(!vo(t.value=t.props.join(",")))return""}return vo(r=yC(t.children,n))?t.return=t.value+"{"+r+"}":""}o(m2e,"stringify");u7();HT();oO();var $rt="graphics-document document";function g2e(t,e){t.attr("role",$rt),e!==""&&t.attr("aria-roledescription",e)}o(g2e,"setA11yDiagramInfo");function y2e(t,e,r,n){if(t.insert!==void 0){if(r){let i=`chart-desc-${n}`;t.attr("aria-describedby",i),t.insert("desc",":first-child").attr("id",i).text(r)}if(e){let i=`chart-title-${n}`;t.attr("aria-labelledby",i),t.insert("title",":first-child").attr("id",i).text(e)}}}o(y2e,"addSVGa11yTitleDescription");s0();ji();ji();zt();Xf();BC();ir();var xy=class t{constructor(e,r,n,i,a){this.type=e;this.text=r;this.db=n;this.parser=i;this.renderer=a}static{o(this,"Diagram")}static async fromText(e,r={}){let n=cr(),i=a0(e,n);e=PX(e)+`
2562 +`;try{jy(i)}catch{let h=ZF(i);if(!h)throw new i0(`Diagram ${i} not found.`);let{id:f,diagram:d}=await h();ad(f,d)}let{db:a,parser:s,renderer:l,init:u}=jy(i);return s.parser&&(s.parser.yy=a),a.clear?.(),u?.(n),r.title&&a.setDiagramTitle?.(r.title),await s.parse(e),new t(i,e,a,s,l)}async render(e,r){await this.renderer.draw(this.text,e,r,this)}getParser(){return this.parser}getType(){return this.type}};gr();var v2e=[];var x2e=o(()=>{v2e.forEach(t=>{t()}),v2e=[]},"attachFunctions");vt();var b2e=o(t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");$4();Ew();function w2e(t){let e=t.match(F4);if(!e)return{text:t,metadata:{}};let r=cm(e[1],{schema:lm})??{};r=typeof r=="object"&&!Array.isArray(r)?r:{};let n={};return r.displayMode&&(n.displayMode=r.displayMode.toString()),r.title&&(n.title=r.title.toString()),r.config&&(n.config=r.config),{text:t.slice(e[0].length),metadata:n}}o(w2e,"extractFrontMatter");ir();var zrt=o(t=>t.replace(/\r\n?/g,`
2563 +`).replace(/<(\w+)([^>]*)>/g,(e,r,n)=>"<"+r+n.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),Grt=o(t=>{let{text:e,metadata:r}=w2e(t),{displayMode:n,title:i,config:a={}}=r;return n&&(a.gantt||(a.gantt={}),a.gantt.displayMode=n),{title:i,config:a,text:e}},"processFrontmatter"),Vrt=o(t=>{let e=Gt.detectInit(t)??{},r=Gt.detectDirective(t,"wrap");return Array.isArray(r)?e.wrap=r.some(({type:n})=>n==="wrap"):r?.type==="wrap"&&(e.wrap=!0),{text:IX(t),directive:e}},"processDirectives");function bF(t){let e=zrt(t),r=Grt(e),n=Vrt(r.text),i=Fi(r.config,n.directive);return t=b2e(n.text),{code:t,title:r.title,config:i}}o(bF,"preprocessDiagram");tA();q4();ir();function T2e(t){let e=new TextEncoder().encode(t),r=Array.from(e,n=>String.fromCodePoint(n)).join("");return btoa(r)}o(T2e,"toBase64");var Urt=5e4,Hrt="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",Wrt="sandbox",qrt="loose",Yrt="http://www.w3.org/2000/svg",Xrt="http://www.w3.org/1999/xlink",jrt="http://www.w3.org/1999/xhtml",Krt="100%",Qrt="100%",Zrt="border:0;margin:0;",Jrt="margin:0",ent="allow-top-navigation-by-user-activation allow-popups",tnt='The "iframe" tag is not supported by your browser.',rnt=["foreignobject"],nnt=["dominant-baseline"];function C2e(t){let e=bF(t);return Ly(),W$(e.config??{}),e}o(C2e,"processAndSetConfigs");async function int(t,e){py();try{let{code:r,config:n}=C2e(t);return{diagramType:(await A2e(r)).type,config:n}}catch(r){if(e?.suppressErrors)return!1;throw r}}o(int,"parse");var k2e=o((t,e,r=[])=>`
2564 +.${t} ${e} { ${r.join(" !important; ")} !important; }`,"cssImportantStyles"),ant=o((t,e=new Map)=>{let r="";if(t.themeCSS!==void 0&&(r+=`
2565 +${t.themeCSS}`),t.fontFamily!==void 0&&(r+=`
2566 +:root { --mermaid-font-family: ${t.fontFamily}}`),t.altFontFamily!==void 0&&(r+=`
2567 +:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),e instanceof Map){let s=t.htmlLabels??t.flowchart?.htmlLabels?["> *","span"]:["rect","polygon","ellipse","circle","path"];e.forEach(l=>{ur(l.styles)||s.forEach(u=>{r+=k2e(l.id,u,l.styles)}),ur(l.textStyles)||(r+=k2e(l.id,"tspan",(l?.textStyles||[]).map(u=>u.replace("color","fill"))))})}return r},"createCssStyles"),snt=o((t,e,r,n)=>{let i=ant(t,r),a=zG(e,i,t.themeVariables);return yC(p2e(`${n}{${a}}`),m2e)},"createUserStyles"),ont=o((t="",e,r)=>{let n=t;return!r&&!e&&(n=n.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),n=na(n),n=n.replace(/<br>/g,"<br/>"),n},"cleanUpSvgCode"),lnt=o((t="",e)=>{let r=e?.viewBox?.baseVal?.height?e.viewBox.baseVal.height+"px":Qrt,n=T2e(`<body style="${Jrt}">${t}</body>`);return`<iframe style="width:${Krt};height:${r};${Zrt}" src="data:text/html;charset=UTF-8;base64,${n}" sandbox="${ent}">
2568 + ${tnt}
2569 +</iframe>`},"putIntoIFrame"),E2e=o((t,e,r,n,i)=>{let a=t.append("div");a.attr("id",r),n&&a.attr("style",n);let s=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns",Yrt);return i&&s.attr("xmlns:xlink",i),s.append("g"),t},"appendDivSvgG");function S2e(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}o(S2e,"sandboxedIframe");var cnt=o((t,e,r,n)=>{t.getElementById(e)?.remove(),t.getElementById(r)?.remove(),t.getElementById(n)?.remove()},"removeExistingElements"),unt=o(async function(t,e,r){py();let n=C2e(e);e=n.code;let i=cr();Y.debug(i),e.length>(i?.maxTextSize??Urt)&&(e=Hrt);let a="#"+t,s="i"+t,l="#"+s,u="d"+t,h="#"+u,f=o(()=>{let L=Ge(p?l:h).node();L&&"remove"in L&&L.remove()},"removeTempElements"),d=Ge("body"),p=i.securityLevel===Wrt,m=i.securityLevel===qrt,g=i.fontFamily;if(r!==void 0){if(r&&(r.innerHTML=""),p){let k=S2e(Ge(r),s);d=Ge(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ge(r);E2e(d,t,u,`font-family: ${g}`,Xrt)}else{if(cnt(document,t,u,s),p){let k=S2e(Ge("body"),s);d=Ge(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ge("body");E2e(d,t,u)}let y,v;try{y=await xy.fromText(e,{title:n.title})}catch(k){if(i.suppressErrorRendering)throw f(),k;y=await xy.fromText("error"),v=k}let x=d.select(h).node(),b=y.type,w=x.firstChild,C=w.firstChild,T=y.renderer.getClasses?.(e,y),E=snt(i,b,T,a),A=document.createElement("style");A.innerHTML=E,w.insertBefore(A,C);try{await y.renderer.draw(e,t,vb.version,y)}catch(k){throw i.suppressErrorRendering?f():Yde.draw(e,t,vb.version),k}let S=d.select(`${h} svg`),_=y.db.getAccTitle?.(),I=y.db.getAccDescription?.();fnt(b,S,_,I),d.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",jrt);let D=d.select(h).node().innerHTML;if(Y.debug("config.arrowMarkerAbsolute",i.arrowMarkerAbsolute),D=ont(D,p,fr(i.arrowMarkerAbsolute)),p){let k=d.select(h+" svg").node();D=lnt(D,k)}else m||(D=ch.sanitize(D,{ADD_TAGS:rnt,ADD_ATTR:nnt,HTML_INTEGRATION_POINTS:{foreignobject:!0}}));if(x2e(),v)throw v;return f(),{diagramType:b,svg:D,bindFunctions:y.db.bindFunctions}},"render");function hnt(t={}){let e=Gn({},t);e?.fontFamily&&!e.themeVariables?.fontFamily&&(e.themeVariables||(e.themeVariables={}),e.themeVariables.fontFamily=e.fontFamily),V$(e),e?.theme&&e.theme in To?e.themeVariables=To[e.theme].getThemeVariables(e.themeVariables):e&&(e.themeVariables=To.default.getThemeVariables(e.themeVariables));let r=typeof e=="object"?t7(e):r7();wy(r.logLevel),py()}o(hnt,"initialize");var A2e=o((t,e={})=>{let{code:r}=bF(t);return xy.fromText(r,e)},"getDiagramFromText");function fnt(t,e,r,n){g2e(e,t),y2e(e,r,n,e.attr("id"))}o(fnt,"addA11yInfo");var Gf=Object.freeze({render:unt,parse:int,getDiagramFromText:A2e,initialize:hnt,getConfig:cr,setConfig:X4,getSiteConfig:r7,updateSiteConfig:U$,reset:o(()=>{Ly()},"reset"),globalReset:o(()=>{Ly(lh)},"globalReset"),defaultConfig:lh});wy(cr().logLevel);Ly(cr());Yd();ir();var dnt=o((t,e,r)=>{Y.warn(t),Z9(t)?(r&&r(t.str,t.hash),e.push({...t,message:t.str,error:t})):(r&&r(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},"handleError"),_2e=o(async function(t={querySelector:".mermaid"}){try{await pnt(t)}catch(e){if(Z9(e)&&Y.error(e.str),nh.parseError&&nh.parseError(e),!t.suppressErrors)throw Y.error("Use the suppressErrors option to suppress these errors"),e}},"run"),pnt=o(async function({postRenderCallback:t,querySelector:e,nodes:r}={querySelector:".mermaid"}){let n=Gf.getConfig();Y.debug(`${t?"":"No "}Callback function found`);let i;if(r)i=r;else if(e)i=document.querySelectorAll(e);else throw new Error("Nodes and querySelector are both undefined");Y.debug(`Found ${i.length} diagrams`),n?.startOnLoad!==void 0&&(Y.debug("Start On Load: "+n?.startOnLoad),Gf.updateSiteConfig({startOnLoad:n?.startOnLoad}));let a=new Gt.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed),s,l=[];for(let u of Array.from(i)){Y.info("Rendering diagram: "+u.id);if(u.getAttribute("data-processed"))continue;u.setAttribute("data-processed","true");let h=`mermaid-${a.next()}`;s=u.innerHTML,s=B4(Gt.entityDecode(s)).trim().replace(/<br\s*\/?>/gi,"<br/>");let f=Gt.detectInit(s);f&&Y.debug("Detected early reinit: ",f);try{let{svg:d,bindFunctions:p}=await N2e(h,s,u);u.innerHTML=d,t&&await t(h),p&&p(u)}catch(d){dnt(d,l,nh.parseError)}}if(l.length>0)throw l[0]},"runThrowsErrors"),D2e=o(function(t){Gf.initialize(t)},"initialize"),mnt=o(async function(t,e,r){Y.warn("mermaid.init is deprecated. Please use run instead."),t&&D2e(t);let n={postRenderCallback:r,querySelector:".mermaid"};typeof e=="string"?n.querySelector=e:e&&(e instanceof HTMLElement?n.nodes=[e]:n.nodes=e),await _2e(n)},"init"),gnt=o(async(t,{lazyLoad:e=!0}={})=>{py(),z4(...t),e===!1&&await Kve()},"registerExternalDiagrams"),L2e=o(function(){if(nh.startOnLoad){let{startOnLoad:t}=Gf.getConfig();t&&nh.run().catch(e=>Y.error("Mermaid failed to initialize",e))}},"contentLoaded");if(typeof document<"u"){window.addEventListener("load",L2e,!1)}var ynt=o(function(t){nh.parseError=t},"setParseErrorHandler"),vC=[],wF=!1,R2e=o(async()=>{if(!wF){for(wF=!0;vC.length>0;){let t=vC.shift();if(t)try{await t()}catch(e){Y.error("Error executing queue",e)}}wF=!1}},"executeQueue"),vnt=o(async(t,e)=>new Promise((r,n)=>{let i=o(()=>new Promise((a,s)=>{Gf.parse(t,e).then(l=>{a(l),r(l)},l=>{Y.error("Error parsing",l),nh.parseError?.(l),s(l),n(l)})}),"performCall");vC.push(i),R2e().catch(n)}),"parse"),N2e=o((t,e,r)=>new Promise((n,i)=>{let a=o(()=>new Promise((s,l)=>{Gf.render(t,e,r).then(u=>{s(u),n(u)},u=>{Y.error("Error parsing",u),nh.parseError?.(u),l(u),i(u)})}),"performCall");vC.push(a),R2e().catch(i)}),"render"),nh={startOnLoad:!0,mermaidAPI:Gf,parse:vnt,render:N2e,init:mnt,run:_2e,registerExternalDiagrams:gnt,registerLayoutLoaders:vR,initialize:D2e,parseError:void 0,contentLoaded:L2e,setParseErrorHandler:ynt,detectType:a0,registerIconPacks:P4},xnt=nh;return V2e(bnt);})();
2570 +/*! Check if previously processed */
2571 +/*!
2572 + * Wait for document loaded before starting the execution
2573 + */
2574 +/*! Bundled license information:
2575 +
2576 +dompurify/dist/purify.es.mjs:
2577 + (*! @license DOMPurify 3.2.4 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.4/LICENSE *)
2578 +
2579 +js-yaml/dist/js-yaml.mjs:
2580 + (*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT *)
2581 +
2582 +lodash-es/lodash.js:
2583 + (**
2584 + * @license
2585 + * Lodash (Custom Build) <https://lodash.com/>
2586 + * Build: `lodash modularize exports="es" -o ./`
2587 + * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
2588 + * Released under MIT license <https://lodash.com/license>
2589 + * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
2590 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
2591 + *)
2592 +
2593 +cytoscape/dist/cytoscape.esm.mjs:
2594 + (*!
2595 + Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable
2596 + Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com)
2597 + Licensed under The MIT License (http://opensource.org/licenses/MIT)
2598 + *)
2599 + (*!
2600 + Event object based on jQuery events, MIT license
2601 +
2602 + https://jquery.org/license/
2603 + https://tldrlegal.com/license/mit-license
2604 + https://github.com/jquery/jquery/blob/master/src/event.js
2605 + *)
2606 + (*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License *)
2607 + (*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License *)
2608 +*/
2609 +globalThis.mermaid = globalThis.__esbuild_esm_mermaid.default;
2609 < \ No newline at end of file
A user_manual/explanation/cycle-vie-pull-request.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Cycle de vie d'une pull request
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/explanation/index.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Explication
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/explanation/modele-collaboration.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Modèle de collaboration sur gitrust
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/explanation/securite-utilisateur.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Sécurité côté utilisateur
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/how-to/configurer-2fa.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Configurer la double authentification (2FA)
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/how-to/consulter-sbom.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Consulter le SBOM d'un dépôt
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/how-to/creer-personal-access-token.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Créer un Personal Access Token
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/how-to/fusionner-strategies.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Stratégies de fusion (ff / squash / merge commit)
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/how-to/gerer-cles-ssh.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Gérer ses clés SSH
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/how-to/gerer-equipes-permissions.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Gérer les équipes et les permissions
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/how-to/importer-depot-externe.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Importer un dépôt externe
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/how-to/index.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Guides pratiques
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/how-to/ouvrir-pull-request.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Ouvrir une pull request
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/how-to/utiliser-labels-issues.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Utiliser les labels et les issues
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/index.md
+73 -0
@@ -0,0 +1,73 @@
1 +# Manuel utilisateur
2 +
3 +Ce manuel t'accompagne depuis ta première connexion à une instance gitrust jusqu'à l'autonomie complète : pousser du code, collaborer via les pull requests, gérer les issues et automatiser tes workflows avec la CI intégrée. Tu n'as pas besoin d'administrer ni de comprendre l'architecture interne — ce manuel suppose seulement que tu sais utiliser Git en ligne de commande.
4 +
5 +## Parcours d'apprentissage
6 +
7 +Le manuel est structuré comme un **parcours progressif** de 4 tutoriels. Chaque tutoriel te laisse dans un état stable, vérifié, avant de passer au suivant. L'aide fournie recule d'un cran à chaque étape (du copier-coller intégral vers la composition autonome).
8 +
9 +```mermaid
10 +graph LR
11 + A[Compte créé] --> B[01-premier-pas<br/>20 min]
12 + B --> C[02-cloner-pousser<br/>25 min]
13 + C --> D[03-collaborer<br/>25 min]
14 + D --> E[04-automatiser-ci<br/>20 min]
15 + E --> F[Utilisateur autonome]
16 +```
17 +
18 +> **Checkpoint de parcours** : avant de passer au tutoriel 02, tu dois pouvoir te connecter à gitrust, voir ton dépôt dans l'interface et l'accès SSH configuré. Si ce n'est pas le cas, relis le tutoriel 01.
19 +
20 +> **Checkpoint de parcours** : avant le tutoriel 03, tu dois avoir poussé au moins un commit sur ta branche via SSH. Si ce n'est pas le cas, relis le tutoriel 02.
21 +
22 +> **Checkpoint de parcours** : avant le tutoriel 04, tu dois avoir ouvert et mergé une pull request. Si ce n'est pas le cas, relis le tutoriel 03.
23 +
24 +---
25 +
26 +## Tutoriels — apprendre en faisant
27 +
28 +Les tutoriels sont guidés pas-à-pas avec des sorties verbatim attendues. Suis-les dans l'ordre — chacun suppose le précédent complété.
29 +
30 +- [01 — Premiers pas : 2FA, clé SSH, premier dépôt](tutorials/01-premier-pas.md) — ~20 min
31 +- [02 — Cloner et pousser du code](tutorials/02-cloner-pousser.md) — ~25 min
32 +- [03 — Collaborer : équipes, issues, pull requests](tutorials/03-collaborer.md) — ~25 min
33 +- [04 — Automatiser avec la CI](tutorials/04-automatiser-ci.md) — ~20 min
34 +
35 +---
36 +
37 +## How-to — recettes pour les tâches courantes
38 +
39 +Les how-to répondent à « comment faire X » sans explication de fond. Tu peux les consulter dans n'importe quel ordre selon ton besoin immédiat.
40 +
41 +Ces guides supposent que tu as suivi le parcours tutoriels. Ils ne répètent pas les étapes de base.
42 +
43 +- [Gérer ses clés SSH](how-to/gerer-cles-ssh.md)
44 +- [Configurer la 2FA](how-to/configurer-2fa.md)
45 +- [Créer un Personal Access Token](how-to/creer-personal-access-token.md)
46 +- [Gérer les équipes et permissions](how-to/gerer-equipes-permissions.md)
47 +- [Ouvrir une pull request](how-to/ouvrir-pull-request.md)
48 +- [Fusionner : fast-forward, squash, merge commit](how-to/fusionner-strategies.md)
49 +- [Utiliser les labels hiérarchiques](how-to/utiliser-labels-issues.md)
50 +- [Importer un dépôt externe](how-to/importer-depot-externe.md)
51 +- [Consulter le SBOM de ton projet](how-to/consulter-sbom.md)
52 +
53 +---
54 +
55 +## Référence — informations techniques exactes
56 +
57 +La référence est destinée à la consultation ponctuelle, pas à la lecture linéaire. Elle documente les formats, schémas et comportements exacts.
58 +
59 +- [Modèle de permissions (4 rôles)](reference/modele-permissions.md)
60 +- [API REST v1 — authentification, pagination, codes d'erreur](reference/api-rest-v1.md)
61 +- [Schéma YAML `.gitrust-ci.yml` (Easy Mode)](reference/gitrust-ci-yml-schema.md)
62 +- [Syntaxe Markdown supportée](reference/markdown-et-syntaxe.md)
63 +- [Notifications : SSE, e-mail, préférences](reference/notifications.md)
64 +
65 +---
66 +
67 +## Explication — comprendre le pourquoi
68 +
69 +Les explanations t'aident à construire des modèles mentaux durables. Lis-les quand tu veux comprendre *pourquoi* gitrust fonctionne ainsi, pas seulement *comment*.
70 +
71 +- [Modèle de collaboration gitrust](explanation/modele-collaboration.md)
72 +- [Sécurité utilisateur : 2FA, PAT, audit log](explanation/securite-utilisateur.md)
73 +- [Cycle de vie d'une pull request](explanation/cycle-vie-pull-request.md)
A user_manual/reference/api-rest-v1.md
+11 -0
@@ -0,0 +1,11 @@
1 +# API REST v1
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/reference/gitrust-ci-yml-schema.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Schéma du fichier .gitrust-ci.yml
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/reference/index.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Référence
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/reference/markdown-et-syntaxe.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Markdown et syntaxe supportée
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/reference/modele-permissions.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Modèle de permissions (4 rôles)
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/reference/notifications.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Notifications
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/tutorials/01-premier-pas.md
+189 -0
@@ -0,0 +1,189 @@
1 +# Premiers pas : active la 2FA, ajoute ta clé SSH et crée ton premier dépôt
2 +
3 +## Objectifs
4 +
5 +À la fin de ce tutoriel, tu sauras :
6 +
7 +- **O1. Activer** l'authentification à deux facteurs (2FA) sur ton compte gitrust
8 +- **O2. Enregistrer** une clé SSH publique dans ton profil pour te connecter sans mot de passe
9 +- **O3. Créer** un dépôt vide et vérifier qu'il est accessible à l'URL attendue
10 +
11 +## Pré-requis
12 +
13 +- **Technique** : un compte gitrust existant (e-mail + mot de passe), Git installé (`git --version` répond), une paire de clés SSH générée ou à générer (`ssh-keygen`)
14 +- **Pédagogique** : aucun tutoriel préalable requis — c'est le point de départ du parcours
15 +- **Temps estimé** : ~20 minutes
16 +
17 +## Vue d'ensemble
18 +
19 +Avant de taper la première commande, prenons 2 minutes pour comprendre ce que tu vas faire et pourquoi.
20 +
21 +**Un dépôt** (_repository_), c'est comme un dossier de projet avec tout l'historique de ses modifications — une boîte d'archives vivante que Git surveille. Sur gitrust, ce dossier vit sur le serveur et peut être partagé avec ton équipe.
22 +
23 +**Une clé SSH** fonctionne comme une serrure et une clé : tu gardes la clé privée sur ta machine (ne la partage jamais), et tu déposes la clé publique dans ton profil gitrust. Ensuite, Git se connecte automatiquement sans te redemander de mot de passe — gitrust reconnaît ta machine.
24 +
25 +**La 2FA** (authentification à deux facteurs) ajoute un second verrou à ton compte : même si quelqu'un vole ton mot de passe, il ne peut pas se connecter sans le code de ton téléphone. C'est une protection essentielle pour tout compte qui héberge du code.
26 +
27 +Voici le flux que tu vas configurer :
28 +
29 +```mermaid
30 +sequenceDiagram
31 + participant T as Ton navigateur
32 + participant G as gitrust (HTTPS :4000)
33 + participant S as Ton terminal (SSH :2222)
34 +
35 + T->>G: Connexion avec e-mail + mdp + code 2FA
36 + T->>G: Dépôt de la clé SSH publique
37 + S->>G: git push via SSH (authentifié par clé)
38 + G-->>T: Dépôt visible dans l'interface web
39 +```
40 +
41 +---
42 +
43 +## Étape 1 : Connecte-toi et accède aux paramètres de sécurité
44 +
45 +Ouvre ton navigateur et va sur l'URL de ton instance gitrust (par exemple `https://demo.gitrust.eu`). Connecte-toi avec ton e-mail et ton mot de passe.
46 +
47 +Une fois connecté, clique sur ton avatar en haut à droite, puis sur **Paramètres** (`/settings`). Dans le menu de gauche, sélectionne **Sécurité**.
48 +
49 +**Checkpoint** : tu dois voir la page *Sécurité* avec une section « Authentification à deux facteurs » et le statut « Désactivée ». Si tu ne la vois pas, vérifie que tu es bien connecté avec le bon compte.
50 +
51 +---
52 +
53 +## Étape 2 : Active la 2FA avec une application d'authentification
54 +
55 +Sur la page *Sécurité*, clique sur **Activer la 2FA**. gitrust affiche un QR code.
56 +
57 +1. Ouvre ton application d'authentification (Google Authenticator, Authy, ou tout équivalent compatible TOTP).
58 +2. Scanne le QR code avec l'application.
59 +3. L'application affiche un code à 6 chiffres qui change toutes les 30 secondes.
60 +4. Saisis ce code dans le champ **Code de vérification** et clique **Confirmer**.
61 +
62 +Sortie attendue (message dans l'interface) :
63 +```
64 +La 2FA a été activée avec succès.
65 +Conservez vos codes de secours dans un endroit sûr.
66 +```
67 +
68 +gitrust affiche également **10 codes de secours** (format `XXXX-XXXX`). Copie-les et conserve-les hors ligne — ils te permettent de récupérer l'accès si tu perds ton téléphone.
69 +
70 +**Checkpoint** : retourne sur *Paramètres → Sécurité*. La section 2FA doit maintenant afficher « **Activée** » en vert. Si elle affiche toujours « Désactivée », recommence l'étape en t'assurant que le code à 6 chiffres est saisi avant qu'il expire.
71 +
72 +---
73 +
74 +## Étape 3 : Génère ou localise ta clé SSH
75 +
76 +Si tu n'as pas encore de paire de clés SSH, génère-en une maintenant dans ton terminal :
77 +
78 +```bash
79 +ssh-keygen -t ed25519 -C "mon-compte@example.com"
80 +```
81 +
82 +Sortie attendue :
83 +```
84 +Generating public/private ed25519 key pair.
85 +Enter file in which to save the key (/home/toi/.ssh/id_ed25519):
86 +Enter passphrase (empty for no passphrase):
87 +Enter same passphrase again:
88 +Your identification has been saved in /home/toi/.ssh/id_ed25519
89 +Your public key has been saved in /home/toi/.ssh/id_ed25519.pub
90 +The key fingerprint is:
91 +SHA256:xXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXx mon-compte@example.com
92 +```
93 +
94 +Appuie sur Entrée pour accepter le chemin par défaut. Tu peux choisir une passphrase ou laisser vide (appuie deux fois sur Entrée). Une passphrase ajoute une couche de sécurité.
95 +
96 +Affiche maintenant ta **clé publique** (le fichier `.pub` — celui-ci est fait pour être partagé) :
97 +
98 +```bash
99 +cat ~/.ssh/id_ed25519.pub
100 +```
101 +
102 +Sortie attendue (une seule ligne) :
103 +```
104 +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mon-compte@example.com
105 +```
106 +
107 +Copie cette ligne entière dans le presse-papier.
108 +
109 +**Checkpoint** : la commande `cat` doit afficher une ligne commençant par `ssh-ed25519` (ou `ssh-rsa` si tu as une clé plus ancienne). Si elle affiche « No such file or directory », la génération n'a pas abouti — relance `ssh-keygen`.
110 +
111 +---
112 +
113 +## Étape 4 : Enregistre la clé SSH dans ton profil gitrust
114 +
115 +Dans ton navigateur, retourne sur *Paramètres* et clique sur **Clés SSH** dans le menu de gauche.
116 +
117 +Clique sur **Ajouter une clé SSH**. Un formulaire apparaît :
118 +
119 +- **Titre** : donne un nom descriptif à cette clé (ex. `laptop-perso-2026`, `poste-bureau`)
120 +- **Clé** : colle la ligne copiée à l'étape précédente
121 +
122 +Clique **Enregistrer la clé**.
123 +
124 +Sortie attendue (message dans l'interface) :
125 +```
126 +Clé SSH ajoutée avec succès.
127 +```
128 +
129 +Teste maintenant la connexion SSH depuis ton terminal :
130 +
131 +```bash
132 +ssh -T git@demo.gitrust.eu -p 2222
133 +```
134 +
135 +Sortie attendue :
136 +```
137 +Bonjour tonpseudo ! Vous êtes authentifié, mais gitrust ne fournit pas d'accès shell.
138 +```
139 +
140 +**Checkpoint** : si tu obtiens ce message, ta clé SSH est correctement enregistrée. Si tu obtiens `Permission denied (publickey)`, vérifie que tu as bien copié la clé **publique** (`.pub`) et non la clé privée. Consulte la section « Et si ça ne marche pas » ci-dessous.
141 +
142 +---
143 +
144 +## Étape 5 : Crée ton premier dépôt vide
145 +
146 +Dans ton navigateur, clique sur le **+** en haut à droite (ou navigue vers `/repo/new`).
147 +
148 +Remplis le formulaire :
149 +
150 +- **Propriétaire** : ton pseudo
151 +- **Nom du dépôt** : `mon-premier-depot` (lettres, chiffres, tirets uniquement)
152 +- **Visibilité** : Privé (ou Public selon ta préférence)
153 +- **Initialiser le dépôt** : coche « Ajouter un README »
154 +
155 +Clique sur **Créer le dépôt**.
156 +
157 +Sortie attendue : gitrust te redirige vers la page du dépôt à l'URL :
158 +```
159 +https://demo.gitrust.eu/tonpseudo/mon-premier-depot
160 +```
161 +
162 +La page affiche un fichier `README.md` avec le nom du dépôt, et la barre latérale montre 1 commit, 1 branche (`main`).
163 +
164 +**Checkpoint** : note l'URL affichée dans la barre d'adresse de ton navigateur. Elle doit correspondre au patron `https://<instance>/<pseudo>/<nom-depot>`. Si tu vois une erreur 404 ou 500, relis le formulaire de création.
165 +
166 +---
167 +
168 +## Récapitulatif
169 +
170 +- ✓ **O1 accompli** : la 2FA est activée sur ton compte — tu l'as vérifiée sur la page *Sécurité* qui affiche « Activée »
171 +- ✓ **O2 accompli** : ta clé SSH publique est enregistrée — tu l'as confirmée avec `ssh -T git@... -p 2222` qui a répondu « Vous êtes authentifié »
172 +- ✓ **O3 accompli** : ton premier dépôt est créé et visible à l'URL `/<pseudo>/mon-premier-depot`
173 +
174 +---
175 +
176 +## Et si ça ne marche pas
177 +
178 +| Symptôme | Cause probable | Correction |
179 +|----------|----------------|------------|
180 +| `Permission denied (publickey)` lors du test SSH | Tu as collé la clé privée au lieu de la clé publique, ou le fichier `.pub` ne correspond pas à la clé active | Dans gitrust, supprime la clé ajoutée. Retourne au terminal et exécute `ssh-add -l` pour voir les clés actives. Recopie la bonne clé `.pub` avec `cat ~/.ssh/id_ed25519.pub` |
181 +| `Connection refused` lors du test SSH | Le port SSH de l'instance est différent de 2222, ou l'instance est inaccessible | Vérifie avec l'administrateur le port SSH réel. Essaie `ssh -T git@<instance> -p 22` en alternative |
182 +| Le code 2FA est refusé alors qu'il semble correct | L'horloge de ton téléphone est désynchronisée (décalage > 30 s) | Active la synchronisation automatique de l'heure sur ton téléphone (*Paramètres → Date et heure → Automatique*). Réessaie immédiatement après |
183 +| Le dépôt redirige vers une erreur 422 lors de la création | Le nom contient des caractères interdits (espaces, accents, `/`) | Utilise uniquement des lettres non accentuées, chiffres et tirets. Évite les points en début ou fin de nom |
184 +
185 +---
186 +
187 +## Prochaine étape
188 +
189 +→ [02 — Cloner et pousser du code](02-cloner-pousser.md) : clone ton dépôt en local avec SSH, fais ton premier commit et pousse-le sur gitrust (~25 min)
A user_manual/tutorials/02-cloner-pousser.md
+11 -0
@@ -0,0 +1,11 @@
1 +# 02 — Cloner et pousser du code
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/tutorials/03-collaborer.md
+11 -0
@@ -0,0 +1,11 @@
1 +# 03 — Collaborer : équipes, issues, pull requests
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/tutorials/04-automatiser-ci.md
+11 -0
@@ -0,0 +1,11 @@
1 +# 04 — Automatiser avec la CI
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis
A user_manual/tutorials/index.md
+11 -0
@@ -0,0 +1,11 @@
1 +# Tutoriels
2 +
3 +> **Page à rédiger.** Ce contenu est un stub généré automatiquement lors du scaffolding initial.
4 +>
5 +> Consultez [`.plans/001-scaffold-initial.md`](../../.plans/001-scaffold-initial.md) pour le contexte et la place de cette page dans le parcours.
6 +
7 +## TODO
8 +
9 +- [ ] Rédiger cette page selon son mode Diátaxis (voir [CLAUDE.md](../../CLAUDE.md))
10 +- [ ] Appliquer le template pédagogique si c'est un tutoriel ou une explanation (voir skill `pedagogie`)
11 +- [ ] Lier les pages voisines selon les règles de navigation Diátaxis